mirror of
https://github.com/Ascyii/dotfiles.git
synced 2026-01-01 06:54:24 -05:00
Modular stow folders. Replaced kitty with alacritty
This commit is contained in:
36
cli/.config/lazygit/config.yml
Normal file
36
cli/.config/lazygit/config.yml
Normal file
@@ -0,0 +1,36 @@
|
||||
customCommands:
|
||||
- key: 'U'
|
||||
context: 'status'
|
||||
command: "xdg-open https://$(git remote get-url origin | tr @ '\n' | grep : | tr : / | rev | cut -c5- | rev)"
|
||||
description: 'open the remote url in smime'
|
||||
|
||||
notARepository: 'skip'
|
||||
|
||||
promptToReturnFromSubprocess: false
|
||||
|
||||
gui:
|
||||
skipDiscardChangeWarning: true
|
||||
theme:
|
||||
activeBorderColor:
|
||||
- '#eba0ac'
|
||||
- bold
|
||||
inactiveBorderColor:
|
||||
- '#a6adc8'
|
||||
optionsTextColor:
|
||||
- '#89b4fa'
|
||||
selectedLineBgColor:
|
||||
- '#313244'
|
||||
cherryPickedCommitBgColor:
|
||||
- '#45475a'
|
||||
cherryPickedCommitFgColor:
|
||||
- '#eba0ac'
|
||||
unstagedChangesColor:
|
||||
- '#f38ba8'
|
||||
defaultFgColor:
|
||||
- '#cdd6f4'
|
||||
searchingActiveBorderColor:
|
||||
- '#f9e2af'
|
||||
|
||||
authorColors:
|
||||
'*': '#b4befe'
|
||||
showFileTree: false
|
||||
49
cli/.config/weechat/alias.conf
Normal file
49
cli/.config/weechat/alias.conf
Normal file
@@ -0,0 +1,49 @@
|
||||
#
|
||||
# weechat -- alias.conf
|
||||
#
|
||||
# WARNING: It is NOT recommended to edit this file by hand,
|
||||
# especially if WeeChat is running.
|
||||
#
|
||||
# Use commands like /set or /fset to change settings in WeeChat.
|
||||
#
|
||||
# For more info, see: https://weechat.org/doc/weechat/quickstart/
|
||||
#
|
||||
|
||||
config_version = 2
|
||||
|
||||
[cmd]
|
||||
aaway = "allserv /away"
|
||||
anick = "allserv /nick"
|
||||
beep = "print -beep"
|
||||
bye = "quit"
|
||||
c = "buffer clear"
|
||||
chat = "dcc chat"
|
||||
cl = "buffer clear"
|
||||
close = "buffer close"
|
||||
exit = "quit"
|
||||
ig = "ignore"
|
||||
j = "join"
|
||||
k = "kick"
|
||||
kb = "kickban"
|
||||
leave = "part"
|
||||
m = "msg"
|
||||
msgbuf = "command -buffer $1 * /input send $2-"
|
||||
mub = "unban *"
|
||||
n = "names"
|
||||
q = "query"
|
||||
redraw = "window refresh"
|
||||
say = "msg *"
|
||||
signoff = "quit"
|
||||
t = "topic"
|
||||
ub = "unban"
|
||||
umode = "mode $nick"
|
||||
v = "command core version"
|
||||
w = "who"
|
||||
wc = "window close"
|
||||
wi = "whois"
|
||||
wii = "whois $1 $1"
|
||||
wm = "window merge"
|
||||
ww = "whowas"
|
||||
|
||||
[completion]
|
||||
msgbuf = "%(buffers_plugins_names)"
|
||||
41
cli/.config/weechat/buflist.conf
Normal file
41
cli/.config/weechat/buflist.conf
Normal file
@@ -0,0 +1,41 @@
|
||||
#
|
||||
# weechat -- buflist.conf
|
||||
#
|
||||
# WARNING: It is NOT recommended to edit this file by hand,
|
||||
# especially if WeeChat is running.
|
||||
#
|
||||
# Use commands like /set or /fset to change settings in WeeChat.
|
||||
#
|
||||
# For more info, see: https://weechat.org/doc/weechat/quickstart/
|
||||
#
|
||||
|
||||
[look]
|
||||
add_newline = on
|
||||
auto_scroll = 50
|
||||
display_conditions = "${buffer.hidden}==0"
|
||||
enabled = on
|
||||
mouse_jump_visited_buffer = off
|
||||
mouse_move_buffer = on
|
||||
mouse_wheel = on
|
||||
nick_prefix = off
|
||||
nick_prefix_empty = on
|
||||
signals_refresh = ""
|
||||
sort = "number,-active"
|
||||
use_items = 1
|
||||
|
||||
[format]
|
||||
buffer = "${format_number}${indent}${format_nick_prefix}${color_hotlist}${format_name}"
|
||||
buffer_current = "${color:,100}${format_buffer}"
|
||||
hotlist = " ${color:green}(${hotlist}${color:green})"
|
||||
hotlist_highlight = "${color:magenta}"
|
||||
hotlist_low = "${color:white}"
|
||||
hotlist_message = "${color:brown}"
|
||||
hotlist_none = "${color:default}"
|
||||
hotlist_private = "${color:green}"
|
||||
hotlist_separator = "${color:default},"
|
||||
indent = " "
|
||||
lag = " ${color:green}[${color:brown}${lag}${color:green}]"
|
||||
name = "${name}"
|
||||
nick_prefix = "${color_nick_prefix}${nick_prefix}"
|
||||
number = "${color:green}${number}${if:${number_displayed}?.: }"
|
||||
tls_version = " ${color:default}(${if:${tls_version}==TLS1.3?${color:green}:${if:${tls_version}==TLS1.2?${color:yellow}:${color:red}}}${translate:${tls_version}}${color:default})"
|
||||
18
cli/.config/weechat/charset.conf
Normal file
18
cli/.config/weechat/charset.conf
Normal file
@@ -0,0 +1,18 @@
|
||||
#
|
||||
# weechat -- charset.conf
|
||||
#
|
||||
# WARNING: It is NOT recommended to edit this file by hand,
|
||||
# especially if WeeChat is running.
|
||||
#
|
||||
# Use commands like /set or /fset to change settings in WeeChat.
|
||||
#
|
||||
# For more info, see: https://weechat.org/doc/weechat/quickstart/
|
||||
#
|
||||
|
||||
[default]
|
||||
decode = "iso-8859-1"
|
||||
encode = ""
|
||||
|
||||
[decode]
|
||||
|
||||
[encode]
|
||||
19
cli/.config/weechat/exec.conf
Normal file
19
cli/.config/weechat/exec.conf
Normal file
@@ -0,0 +1,19 @@
|
||||
#
|
||||
# weechat -- exec.conf
|
||||
#
|
||||
# WARNING: It is NOT recommended to edit this file by hand,
|
||||
# especially if WeeChat is running.
|
||||
#
|
||||
# Use commands like /set or /fset to change settings in WeeChat.
|
||||
#
|
||||
# For more info, see: https://weechat.org/doc/weechat/quickstart/
|
||||
#
|
||||
|
||||
[command]
|
||||
default_options = ""
|
||||
purge_delay = 0
|
||||
shell = "${env:SHELL}"
|
||||
|
||||
[color]
|
||||
flag_finished = lightred
|
||||
flag_running = lightgreen
|
||||
14
cli/.config/weechat/fifo.conf
Normal file
14
cli/.config/weechat/fifo.conf
Normal file
@@ -0,0 +1,14 @@
|
||||
#
|
||||
# weechat -- fifo.conf
|
||||
#
|
||||
# WARNING: It is NOT recommended to edit this file by hand,
|
||||
# especially if WeeChat is running.
|
||||
#
|
||||
# Use commands like /set or /fset to change settings in WeeChat.
|
||||
#
|
||||
# For more info, see: https://weechat.org/doc/weechat/quickstart/
|
||||
#
|
||||
|
||||
[file]
|
||||
enabled = on
|
||||
path = "${weechat_runtime_dir}/weechat_fifo_${info:pid}"
|
||||
100
cli/.config/weechat/fset.conf
Normal file
100
cli/.config/weechat/fset.conf
Normal file
@@ -0,0 +1,100 @@
|
||||
#
|
||||
# weechat -- fset.conf
|
||||
#
|
||||
# WARNING: It is NOT recommended to edit this file by hand,
|
||||
# especially if WeeChat is running.
|
||||
#
|
||||
# Use commands like /set or /fset to change settings in WeeChat.
|
||||
#
|
||||
# For more info, see: https://weechat.org/doc/weechat/quickstart/
|
||||
#
|
||||
|
||||
[look]
|
||||
auto_refresh = "*"
|
||||
auto_unmark = off
|
||||
condition_catch_set = "${count} >= 1"
|
||||
export_help_default = on
|
||||
format_number = 1
|
||||
marked_string = "*"
|
||||
scroll_horizontal = 10
|
||||
show_plugins_desc = off
|
||||
sort = "~name"
|
||||
unmarked_string = " "
|
||||
use_color_value = on
|
||||
use_keys = on
|
||||
use_mute = off
|
||||
|
||||
[format]
|
||||
export_help = "# ${description2}"
|
||||
export_option = "/set ${name} ${quoted_value}"
|
||||
export_option_null = "/unset ${name}"
|
||||
option1 = ""
|
||||
option2 = "${marked} ${name} ${type} ${value2}${newline} ${empty_name} ${_default_value}${color:244} -- ${_allowed_values}${newline} ${empty_name} ${_description}"
|
||||
|
||||
[color]
|
||||
allowed_values = default
|
||||
allowed_values_selected = white
|
||||
color_name = 246
|
||||
color_name_selected = default
|
||||
default_value = default
|
||||
default_value_selected = white
|
||||
description = 242
|
||||
description_selected = default
|
||||
file = default
|
||||
file_changed = brown
|
||||
file_changed_selected = yellow
|
||||
file_selected = white
|
||||
help_default_value = white
|
||||
help_description = default
|
||||
help_name = white
|
||||
help_quotes = darkgray
|
||||
help_values = default
|
||||
index = cyan
|
||||
index_selected = lightcyan
|
||||
line_marked_bg1 = 17
|
||||
line_marked_bg2 = 17
|
||||
line_selected_bg1 = 24
|
||||
line_selected_bg2 = 24
|
||||
marked = brown
|
||||
marked_selected = yellow
|
||||
max = default
|
||||
max_selected = white
|
||||
min = default
|
||||
min_selected = white
|
||||
name = default
|
||||
name_changed = 185
|
||||
name_changed_selected = yellow
|
||||
name_selected = white
|
||||
option = default
|
||||
option_changed = brown
|
||||
option_changed_selected = yellow
|
||||
option_selected = white
|
||||
parent_name = default
|
||||
parent_name_selected = white
|
||||
parent_value = cyan
|
||||
parent_value_selected = lightcyan
|
||||
quotes = darkgray
|
||||
quotes_changed = default
|
||||
quotes_changed_selected = white
|
||||
quotes_selected = default
|
||||
section = default
|
||||
section_changed = brown
|
||||
section_changed_selected = yellow
|
||||
section_selected = white
|
||||
string_values = default
|
||||
string_values_selected = white
|
||||
title_count_options = cyan
|
||||
title_current_option = lightcyan
|
||||
title_filter = yellow
|
||||
title_marked_options = lightgreen
|
||||
title_sort = white
|
||||
type = 138
|
||||
type_selected = 216
|
||||
unmarked = default
|
||||
unmarked_selected = white
|
||||
value = 38
|
||||
value_changed = 185
|
||||
value_changed_selected = yellow
|
||||
value_selected = 159
|
||||
value_undef = magenta
|
||||
value_undef_selected = lightmagenta
|
||||
14
cli/.config/weechat/guile.conf
Normal file
14
cli/.config/weechat/guile.conf
Normal file
@@ -0,0 +1,14 @@
|
||||
#
|
||||
# weechat -- guile.conf
|
||||
#
|
||||
# WARNING: It is NOT recommended to edit this file by hand,
|
||||
# especially if WeeChat is running.
|
||||
#
|
||||
# Use commands like /set or /fset to change settings in WeeChat.
|
||||
#
|
||||
# For more info, see: https://weechat.org/doc/weechat/quickstart/
|
||||
#
|
||||
|
||||
[look]
|
||||
check_license = off
|
||||
eval_keep_context = on
|
||||
237
cli/.config/weechat/irc.conf
Normal file
237
cli/.config/weechat/irc.conf
Normal file
@@ -0,0 +1,237 @@
|
||||
#
|
||||
# weechat -- irc.conf
|
||||
#
|
||||
# WARNING: It is NOT recommended to edit this file by hand,
|
||||
# especially if WeeChat is running.
|
||||
#
|
||||
# Use commands like /set or /fset to change settings in WeeChat.
|
||||
#
|
||||
# For more info, see: https://weechat.org/doc/weechat/quickstart/
|
||||
#
|
||||
|
||||
config_version = 5
|
||||
|
||||
[look]
|
||||
buffer_open_before_autojoin = on
|
||||
buffer_open_before_join = off
|
||||
buffer_switch_autojoin = on
|
||||
buffer_switch_join = on
|
||||
color_nicks_in_names = off
|
||||
color_nicks_in_nicklist = off
|
||||
color_nicks_in_server_messages = on
|
||||
color_pv_nick_like_channel = on
|
||||
ctcp_time_format = "%a, %d %b %Y %T %z"
|
||||
display_account_message = on
|
||||
display_away = local
|
||||
display_ctcp_blocked = on
|
||||
display_ctcp_reply = on
|
||||
display_ctcp_unknown = on
|
||||
display_extended_join = on
|
||||
display_host_join = on
|
||||
display_host_join_local = on
|
||||
display_host_notice = on
|
||||
display_host_quit = on
|
||||
display_host_wallops = on
|
||||
display_join_message = "329,332,333,366"
|
||||
display_old_topic = on
|
||||
display_pv_away_once = on
|
||||
display_pv_back = on
|
||||
display_pv_nick_change = on
|
||||
display_pv_warning_address = off
|
||||
highlight_channel = "$nick"
|
||||
highlight_pv = "$nick"
|
||||
highlight_server = "$nick"
|
||||
highlight_tags_restrict = "irc_privmsg,irc_notice"
|
||||
ignore_tag_messages = off
|
||||
item_channel_modes_hide_args = "k"
|
||||
item_display_server = buffer_plugin
|
||||
item_nick_modes = on
|
||||
item_nick_prefix = on
|
||||
join_auto_add_chantype = off
|
||||
list_buffer = on
|
||||
list_buffer_format_export = "${name} (${users}): "${topic}""
|
||||
list_buffer_scroll_horizontal = 10
|
||||
list_buffer_sort = "~name2"
|
||||
list_buffer_topic_strip_colors = on
|
||||
msgbuffer_fallback = current
|
||||
new_channel_position = none
|
||||
new_list_position = none
|
||||
new_pv_position = none
|
||||
nick_completion_smart = speakers
|
||||
nick_mode = prefix
|
||||
nick_mode_empty = off
|
||||
nicks_hide_password = "nickserv"
|
||||
notice_as_pv = auto
|
||||
notice_welcome_redirect = on
|
||||
notice_welcome_tags = ""
|
||||
notify_tags_ison = "notify_message"
|
||||
notify_tags_whois = "notify_message"
|
||||
open_pv_buffer_echo_msg = on
|
||||
part_closes_buffer = off
|
||||
pv_buffer = independent
|
||||
pv_tags = "notify_private"
|
||||
raw_messages = 256
|
||||
server_buffer = merge_with_core
|
||||
smart_filter = on
|
||||
smart_filter_account = on
|
||||
smart_filter_chghost = on
|
||||
smart_filter_delay = 1
|
||||
smart_filter_join = on
|
||||
smart_filter_join_unmask = 30
|
||||
smart_filter_mode = "+"
|
||||
smart_filter_nick = on
|
||||
smart_filter_quit = on
|
||||
smart_filter_setname = on
|
||||
temporary_servers = off
|
||||
topic_strip_colors = off
|
||||
typing_status_nicks = off
|
||||
typing_status_self = off
|
||||
|
||||
[color]
|
||||
input_nick = lightcyan
|
||||
item_lag_counting = default
|
||||
item_lag_finished = yellow
|
||||
item_nick_modes = default
|
||||
item_tls_version_deprecated = yellow
|
||||
item_tls_version_insecure = red
|
||||
item_tls_version_ok = green
|
||||
list_buffer_line_selected = white
|
||||
list_buffer_line_selected_bg = 24
|
||||
message_account = cyan
|
||||
message_chghost = brown
|
||||
message_join = green
|
||||
message_kick = red
|
||||
message_quit = red
|
||||
message_setname = brown
|
||||
mirc_remap = "1,-1:darkgray"
|
||||
nick_prefixes = "y:lightred;q:lightred;a:lightcyan;o:lightgreen;h:lightmagenta;v:yellow;*:lightblue"
|
||||
notice = green
|
||||
reason_kick = default
|
||||
reason_quit = 244
|
||||
term_remap = "0,-1:darkgray"
|
||||
topic_current = default
|
||||
topic_new = 36
|
||||
topic_old = 244
|
||||
|
||||
[network]
|
||||
autoreconnect_delay_growing = 2
|
||||
autoreconnect_delay_max = 600
|
||||
ban_mask_default = "*!$ident@$host"
|
||||
colors_receive = on
|
||||
colors_send = on
|
||||
lag_check = 60
|
||||
lag_max = 1800
|
||||
lag_min_show = 500
|
||||
lag_reconnect = 300
|
||||
lag_refresh_interval = 1
|
||||
notify_check_ison = 1
|
||||
notify_check_whois = 5
|
||||
sasl_fail_unavailable = on
|
||||
send_unknown_commands = off
|
||||
whois_double_nick = off
|
||||
|
||||
[msgbuffer]
|
||||
|
||||
[ctcp]
|
||||
clientinfo = "${clientinfo}"
|
||||
source = "${download}"
|
||||
time = "${time}"
|
||||
version = "WeeChat ${version}"
|
||||
|
||||
[ignore]
|
||||
|
||||
[server_default]
|
||||
addresses = ""
|
||||
anti_flood = 2000
|
||||
autoconnect = off
|
||||
autojoin = ""
|
||||
autojoin_delay = 0
|
||||
autojoin_dynamic = off
|
||||
autoreconnect = on
|
||||
autoreconnect_delay = 10
|
||||
autorejoin = off
|
||||
autorejoin_delay = 30
|
||||
away_check = 0
|
||||
away_check_max_nicks = 25
|
||||
capabilities = "*"
|
||||
charset_message = message
|
||||
command = ""
|
||||
command_delay = 0
|
||||
connection_timeout = 60
|
||||
default_chantypes = "#&"
|
||||
ipv6 = auto
|
||||
local_hostname = ""
|
||||
msg_kick = ""
|
||||
msg_part = "WeeChat ${info:version}"
|
||||
msg_quit = "WeeChat ${info:version}"
|
||||
nicks = "${username},${username}2,${username}3,${username}4,${username}5"
|
||||
nicks_alternate = on
|
||||
notify = ""
|
||||
password = ""
|
||||
proxy = ""
|
||||
realname = ""
|
||||
registered_mode = "r"
|
||||
sasl_fail = reconnect
|
||||
sasl_key = ""
|
||||
sasl_mechanism = plain
|
||||
sasl_password = ""
|
||||
sasl_timeout = 15
|
||||
sasl_username = ""
|
||||
split_msg_max_length = 512
|
||||
tls = on
|
||||
tls_cert = ""
|
||||
tls_dhkey_size = 2048
|
||||
tls_fingerprint = ""
|
||||
tls_password = ""
|
||||
tls_priorities = "NORMAL"
|
||||
tls_verify = on
|
||||
usermode = ""
|
||||
username = "${username}"
|
||||
|
||||
[server]
|
||||
libera.addresses = "irc.libera.chat/6697"
|
||||
libera.proxy
|
||||
libera.ipv6
|
||||
libera.tls = on
|
||||
libera.tls_cert
|
||||
libera.tls_password
|
||||
libera.tls_priorities
|
||||
libera.tls_dhkey_size
|
||||
libera.tls_fingerprint
|
||||
libera.tls_verify
|
||||
libera.password
|
||||
libera.capabilities
|
||||
libera.sasl_mechanism
|
||||
libera.sasl_username = "jonas2"
|
||||
libera.sasl_password = "${sec.data.libera_password}"
|
||||
libera.sasl_key
|
||||
libera.sasl_timeout
|
||||
libera.sasl_fail
|
||||
libera.autoconnect = on
|
||||
libera.autoreconnect
|
||||
libera.autoreconnect_delay
|
||||
libera.nicks = "zennit"
|
||||
libera.nicks_alternate
|
||||
libera.username = "Ascyii"
|
||||
libera.realname
|
||||
libera.local_hostname
|
||||
libera.usermode
|
||||
libera.command_delay
|
||||
libera.command
|
||||
libera.autojoin_delay
|
||||
libera.autojoin = "#weechat,#zen,#linux,#security"
|
||||
libera.autojoin_dynamic
|
||||
libera.autorejoin
|
||||
libera.autorejoin_delay
|
||||
libera.connection_timeout
|
||||
libera.anti_flood
|
||||
libera.away_check
|
||||
libera.away_check_max_nicks
|
||||
libera.msg_kick
|
||||
libera.msg_part
|
||||
libera.msg_quit
|
||||
libera.notify
|
||||
libera.split_msg_max_length
|
||||
libera.charset_message
|
||||
libera.default_chantypes
|
||||
libera.registered_mode
|
||||
40
cli/.config/weechat/logger.conf
Normal file
40
cli/.config/weechat/logger.conf
Normal file
@@ -0,0 +1,40 @@
|
||||
#
|
||||
# weechat -- logger.conf
|
||||
#
|
||||
# WARNING: It is NOT recommended to edit this file by hand,
|
||||
# especially if WeeChat is running.
|
||||
#
|
||||
# Use commands like /set or /fset to change settings in WeeChat.
|
||||
#
|
||||
# For more info, see: https://weechat.org/doc/weechat/quickstart/
|
||||
#
|
||||
|
||||
[look]
|
||||
backlog = 20
|
||||
backlog_conditions = ""
|
||||
|
||||
[color]
|
||||
backlog_end = 246
|
||||
backlog_line = 246
|
||||
|
||||
[file]
|
||||
auto_log = on
|
||||
color_lines = off
|
||||
flush_delay = 120
|
||||
fsync = off
|
||||
info_lines = off
|
||||
log_conditions = ""
|
||||
mask = "$plugin.$name.weechatlog"
|
||||
name_lower_case = on
|
||||
nick_prefix = ""
|
||||
nick_suffix = ""
|
||||
path = "${weechat_data_dir}/logs"
|
||||
replacement_char = "_"
|
||||
rotation_compression_level = 20
|
||||
rotation_compression_type = none
|
||||
rotation_size_max = "0"
|
||||
time_format = "%Y-%m-%d %H:%M:%S"
|
||||
|
||||
[level]
|
||||
|
||||
[mask]
|
||||
14
cli/.config/weechat/lua.conf
Normal file
14
cli/.config/weechat/lua.conf
Normal file
@@ -0,0 +1,14 @@
|
||||
#
|
||||
# weechat -- lua.conf
|
||||
#
|
||||
# WARNING: It is NOT recommended to edit this file by hand,
|
||||
# especially if WeeChat is running.
|
||||
#
|
||||
# Use commands like /set or /fset to change settings in WeeChat.
|
||||
#
|
||||
# For more info, see: https://weechat.org/doc/weechat/quickstart/
|
||||
#
|
||||
|
||||
[look]
|
||||
check_license = off
|
||||
eval_keep_context = on
|
||||
14
cli/.config/weechat/perl.conf
Normal file
14
cli/.config/weechat/perl.conf
Normal file
@@ -0,0 +1,14 @@
|
||||
#
|
||||
# weechat -- perl.conf
|
||||
#
|
||||
# WARNING: It is NOT recommended to edit this file by hand,
|
||||
# especially if WeeChat is running.
|
||||
#
|
||||
# Use commands like /set or /fset to change settings in WeeChat.
|
||||
#
|
||||
# For more info, see: https://weechat.org/doc/weechat/quickstart/
|
||||
#
|
||||
|
||||
[look]
|
||||
check_license = off
|
||||
eval_keep_context = on
|
||||
14
cli/.config/weechat/plugins.conf
Normal file
14
cli/.config/weechat/plugins.conf
Normal file
@@ -0,0 +1,14 @@
|
||||
#
|
||||
# weechat -- plugins.conf
|
||||
#
|
||||
# WARNING: It is NOT recommended to edit this file by hand,
|
||||
# especially if WeeChat is running.
|
||||
#
|
||||
# Use commands like /set or /fset to change settings in WeeChat.
|
||||
#
|
||||
# For more info, see: https://weechat.org/doc/weechat/quickstart/
|
||||
#
|
||||
|
||||
[var]
|
||||
|
||||
[desc]
|
||||
14
cli/.config/weechat/python.conf
Normal file
14
cli/.config/weechat/python.conf
Normal file
@@ -0,0 +1,14 @@
|
||||
#
|
||||
# weechat -- python.conf
|
||||
#
|
||||
# WARNING: It is NOT recommended to edit this file by hand,
|
||||
# especially if WeeChat is running.
|
||||
#
|
||||
# Use commands like /set or /fset to change settings in WeeChat.
|
||||
#
|
||||
# For more info, see: https://weechat.org/doc/weechat/quickstart/
|
||||
#
|
||||
|
||||
[look]
|
||||
check_license = off
|
||||
eval_keep_context = on
|
||||
70
cli/.config/weechat/relay.conf
Normal file
70
cli/.config/weechat/relay.conf
Normal file
@@ -0,0 +1,70 @@
|
||||
#
|
||||
# weechat -- relay.conf
|
||||
#
|
||||
# WARNING: It is NOT recommended to edit this file by hand,
|
||||
# especially if WeeChat is running.
|
||||
#
|
||||
# Use commands like /set or /fset to change settings in WeeChat.
|
||||
#
|
||||
# For more info, see: https://weechat.org/doc/weechat/quickstart/
|
||||
#
|
||||
|
||||
config_version = 2
|
||||
|
||||
[look]
|
||||
auto_open_buffer = "irc,weechat"
|
||||
display_clients = "irc,weechat"
|
||||
raw_messages = 256
|
||||
raw_messages_max_length = 4096
|
||||
|
||||
[color]
|
||||
client = cyan
|
||||
status_active = green
|
||||
status_auth_failed = lightmagenta
|
||||
status_authenticating = yellow
|
||||
status_connecting = white
|
||||
status_disconnected = lightred
|
||||
text = default
|
||||
text_bg = default
|
||||
text_selected = white
|
||||
|
||||
[network]
|
||||
allow_empty_password = off
|
||||
allowed_ips = ""
|
||||
auth_timeout = 60
|
||||
bind_address = ""
|
||||
clients_purge_delay = 0
|
||||
commands = "*,!quit"
|
||||
compression = 20
|
||||
ipv6 = on
|
||||
max_clients = 5
|
||||
nonce_size = 16
|
||||
password = ""
|
||||
password_hash_algo = "*"
|
||||
password_hash_iterations = 100000
|
||||
time_window = 5
|
||||
tls_cert_key = "${weechat_config_dir}/tls/relay.pem"
|
||||
tls_priorities = "NORMAL"
|
||||
totp_secret = ""
|
||||
totp_window = 0
|
||||
websocket_allowed_origins = ""
|
||||
websocket_permessage_deflate = on
|
||||
|
||||
[irc]
|
||||
backlog_max_minutes = 0
|
||||
backlog_max_number = 1024
|
||||
backlog_since_last_disconnect = on
|
||||
backlog_since_last_message = off
|
||||
backlog_tags = "irc_privmsg"
|
||||
backlog_time_format = "[%H:%M] "
|
||||
|
||||
[api]
|
||||
remote_autoreconnect_delay_growing = 2
|
||||
remote_autoreconnect_delay_max = 600
|
||||
remote_get_lines = 1000
|
||||
|
||||
[port]
|
||||
|
||||
[path]
|
||||
|
||||
[remote]
|
||||
14
cli/.config/weechat/ruby.conf
Normal file
14
cli/.config/weechat/ruby.conf
Normal file
@@ -0,0 +1,14 @@
|
||||
#
|
||||
# weechat -- ruby.conf
|
||||
#
|
||||
# WARNING: It is NOT recommended to edit this file by hand,
|
||||
# especially if WeeChat is running.
|
||||
#
|
||||
# Use commands like /set or /fset to change settings in WeeChat.
|
||||
#
|
||||
# For more info, see: https://weechat.org/doc/weechat/quickstart/
|
||||
#
|
||||
|
||||
[look]
|
||||
check_license = off
|
||||
eval_keep_context = on
|
||||
57
cli/.config/weechat/script.conf
Normal file
57
cli/.config/weechat/script.conf
Normal file
@@ -0,0 +1,57 @@
|
||||
#
|
||||
# weechat -- script.conf
|
||||
#
|
||||
# WARNING: It is NOT recommended to edit this file by hand,
|
||||
# especially if WeeChat is running.
|
||||
#
|
||||
# Use commands like /set or /fset to change settings in WeeChat.
|
||||
#
|
||||
# For more info, see: https://weechat.org/doc/weechat/quickstart/
|
||||
#
|
||||
|
||||
[look]
|
||||
columns = "%s %n %V %v %u | %d | %t"
|
||||
diff_color = on
|
||||
diff_command = "auto"
|
||||
display_source = on
|
||||
quiet_actions = on
|
||||
sort = "i,p,n"
|
||||
translate_description = on
|
||||
use_keys = on
|
||||
|
||||
[color]
|
||||
status_autoloaded = 39
|
||||
status_held = white
|
||||
status_installed = lightcyan
|
||||
status_obsolete = lightmagenta
|
||||
status_popular = yellow
|
||||
status_running = lightgreen
|
||||
status_unknown = lightred
|
||||
text = default
|
||||
text_bg = default
|
||||
text_bg_selected = 24
|
||||
text_date = 65
|
||||
text_date_selected = 50
|
||||
text_delimiters = 240
|
||||
text_description = 249
|
||||
text_description_selected = white
|
||||
text_extension = 242
|
||||
text_extension_selected = 248
|
||||
text_name = 73
|
||||
text_name_selected = 51
|
||||
text_selected = white
|
||||
text_tags = brown
|
||||
text_tags_selected = yellow
|
||||
text_version = blue
|
||||
text_version_loaded = 246
|
||||
text_version_loaded_selected = white
|
||||
text_version_selected = 228
|
||||
|
||||
[scripts]
|
||||
autoload = on
|
||||
cache_expire = 1440
|
||||
download_enabled = off
|
||||
download_timeout = 30
|
||||
hold = ""
|
||||
path = "${weechat_cache_dir}/script"
|
||||
url = "https://weechat.org/files/plugins.xml.gz"
|
||||
20
cli/.config/weechat/sec.conf
Normal file
20
cli/.config/weechat/sec.conf
Normal file
@@ -0,0 +1,20 @@
|
||||
#
|
||||
# weechat -- sec.conf
|
||||
#
|
||||
# WARNING: It is NOT recommended to edit this file by hand,
|
||||
# especially if WeeChat is running.
|
||||
#
|
||||
# Use commands like /set or /fset to change settings in WeeChat.
|
||||
#
|
||||
# For more info, see: https://weechat.org/doc/weechat/quickstart/
|
||||
#
|
||||
|
||||
[crypt]
|
||||
cipher = aes256
|
||||
hash_algo = sha256
|
||||
passphrase_command = ""
|
||||
salt = on
|
||||
|
||||
[data]
|
||||
__passphrase__ = on
|
||||
libera_password = "A4AE45D22CFB0C1925758BD65F1EC012311404966DFCFDB714E0150D3F17E867AB969A616A06BDF9F7F5B7443249552EF3B613D8F40AECE9D164"
|
||||
33
cli/.config/weechat/spell.conf
Normal file
33
cli/.config/weechat/spell.conf
Normal file
@@ -0,0 +1,33 @@
|
||||
#
|
||||
# weechat -- spell.conf
|
||||
#
|
||||
# WARNING: It is NOT recommended to edit this file by hand,
|
||||
# especially if WeeChat is running.
|
||||
#
|
||||
# Use commands like /set or /fset to change settings in WeeChat.
|
||||
#
|
||||
# For more info, see: https://weechat.org/doc/weechat/quickstart/
|
||||
#
|
||||
|
||||
[color]
|
||||
misspelled = lightred
|
||||
suggestion = default
|
||||
suggestion_delimiter_dict = cyan
|
||||
suggestion_delimiter_word = cyan
|
||||
|
||||
[check]
|
||||
commands = "away,command,cycle,kick,kickban,me,msg,notice,part,query,quit,topic"
|
||||
default_dict = ""
|
||||
during_search = off
|
||||
enabled = on
|
||||
real_time = off
|
||||
suggestions = -1
|
||||
word_min_length = 2
|
||||
|
||||
[dict]
|
||||
|
||||
[look]
|
||||
suggestion_delimiter_dict = " / "
|
||||
suggestion_delimiter_word = ","
|
||||
|
||||
[option]
|
||||
14
cli/.config/weechat/tcl.conf
Normal file
14
cli/.config/weechat/tcl.conf
Normal file
@@ -0,0 +1,14 @@
|
||||
#
|
||||
# weechat -- tcl.conf
|
||||
#
|
||||
# WARNING: It is NOT recommended to edit this file by hand,
|
||||
# especially if WeeChat is running.
|
||||
#
|
||||
# Use commands like /set or /fset to change settings in WeeChat.
|
||||
#
|
||||
# For more info, see: https://weechat.org/doc/weechat/quickstart/
|
||||
#
|
||||
|
||||
[look]
|
||||
check_license = off
|
||||
eval_keep_context = on
|
||||
66
cli/.config/weechat/trigger.conf
Normal file
66
cli/.config/weechat/trigger.conf
Normal file
@@ -0,0 +1,66 @@
|
||||
#
|
||||
# weechat -- trigger.conf
|
||||
#
|
||||
# WARNING: It is NOT recommended to edit this file by hand,
|
||||
# especially if WeeChat is running.
|
||||
#
|
||||
# Use commands like /set or /fset to change settings in WeeChat.
|
||||
#
|
||||
# For more info, see: https://weechat.org/doc/weechat/quickstart/
|
||||
#
|
||||
|
||||
[look]
|
||||
enabled = on
|
||||
monitor_strip_colors = off
|
||||
|
||||
[color]
|
||||
flag_command = lightgreen
|
||||
flag_conditions = yellow
|
||||
flag_post_action = lightblue
|
||||
flag_regex = lightcyan
|
||||
flag_return_code = lightmagenta
|
||||
identifier = cyan
|
||||
regex = white
|
||||
replace = cyan
|
||||
|
||||
[trigger]
|
||||
beep.arguments = ""
|
||||
beep.command = "/print -beep"
|
||||
beep.conditions = "${tg_displayed} && ${tg_tags} !!- ,notify_none, && (${tg_highlight} || ${tg_msg_pv}) && ${buffer.notify} > 0"
|
||||
beep.enabled = on
|
||||
beep.hook = print
|
||||
beep.post_action = none
|
||||
beep.regex = ""
|
||||
beep.return_code = ok
|
||||
cmd_pass.arguments = "5000|input_text_display;5000|history_add;5000|irc_command_auth"
|
||||
cmd_pass.command = ""
|
||||
cmd_pass.conditions = ""
|
||||
cmd_pass.enabled = on
|
||||
cmd_pass.hook = modifier
|
||||
cmd_pass.post_action = none
|
||||
cmd_pass.regex = "s==^((/(msg|m|quote) +(-server +[^ \n]+ +)?nickserv +(id|identify|set +password|ghost +[^ \n]+|release +[^ \n]+|regain +[^ \n]+|recover +[^ \n]+|setpass +[^ \n]+) +)|/oper +[^ \n]+ +|/quote +pass +|/secure +(passphrase|decrypt|set +[^ \n]+) +)([^\n]*)==${re:1}${hide:*,${re:+}}"
|
||||
cmd_pass.return_code = ok
|
||||
cmd_pass_register.arguments = "5000|input_text_display;5000|history_add;5000|irc_command_auth"
|
||||
cmd_pass_register.command = ""
|
||||
cmd_pass_register.conditions = ""
|
||||
cmd_pass_register.enabled = on
|
||||
cmd_pass_register.hook = modifier
|
||||
cmd_pass_register.post_action = none
|
||||
cmd_pass_register.regex = "s==^(/(msg|m|quote) +(-server +[^ \n]+ +)?nickserv +register +)([^ \n]+)([^\n]*)==${re:1}${hide:*,${re:4}}${re:5}"
|
||||
cmd_pass_register.return_code = ok
|
||||
msg_auth.arguments = "5000|irc_message_auth"
|
||||
msg_auth.command = ""
|
||||
msg_auth.conditions = ""
|
||||
msg_auth.enabled = on
|
||||
msg_auth.hook = modifier
|
||||
msg_auth.post_action = none
|
||||
msg_auth.regex = "s==^(.*(id|identify|set +password|register|ghost +[^ ]+|release +[^ ]+|regain +[^ ]+|recover +[^ ]+) +)(.*)==${re:1}${hide:*,${re:+}}"
|
||||
msg_auth.return_code = ok
|
||||
server_pass.arguments = "5000|input_text_display;5000|history_add"
|
||||
server_pass.command = ""
|
||||
server_pass.conditions = ""
|
||||
server_pass.enabled = on
|
||||
server_pass.hook = modifier
|
||||
server_pass.post_action = none
|
||||
server_pass.regex = "s==^(/(server|connect) [^\n]*-(sasl_)?password=)([^ \n]+)([^\n]*)==${re:1}${hide:*,${re:4}}${re:5}"
|
||||
server_pass.return_code = ok
|
||||
19
cli/.config/weechat/typing.conf
Normal file
19
cli/.config/weechat/typing.conf
Normal file
@@ -0,0 +1,19 @@
|
||||
#
|
||||
# weechat -- typing.conf
|
||||
#
|
||||
# WARNING: It is NOT recommended to edit this file by hand,
|
||||
# especially if WeeChat is running.
|
||||
#
|
||||
# Use commands like /set or /fset to change settings in WeeChat.
|
||||
#
|
||||
# For more info, see: https://weechat.org/doc/weechat/quickstart/
|
||||
#
|
||||
|
||||
[look]
|
||||
delay_purge_paused = 30
|
||||
delay_purge_typing = 6
|
||||
delay_set_paused = 10
|
||||
enabled_nicks = off
|
||||
enabled_self = off
|
||||
input_min_chars = 4
|
||||
item_max_length = 0
|
||||
697
cli/.config/weechat/weechat.conf
Normal file
697
cli/.config/weechat/weechat.conf
Normal file
@@ -0,0 +1,697 @@
|
||||
#
|
||||
# weechat -- weechat.conf
|
||||
#
|
||||
# WARNING: It is NOT recommended to edit this file by hand,
|
||||
# especially if WeeChat is running.
|
||||
#
|
||||
# Use commands like /set or /fset to change settings in WeeChat.
|
||||
#
|
||||
# For more info, see: https://weechat.org/doc/weechat/quickstart/
|
||||
#
|
||||
|
||||
config_version = 4
|
||||
|
||||
[debug]
|
||||
|
||||
[startup]
|
||||
command_after_plugins = ""
|
||||
command_before_plugins = ""
|
||||
display_logo = on
|
||||
display_version = on
|
||||
sys_rlimit = ""
|
||||
|
||||
[look]
|
||||
align_end_of_lines = message
|
||||
align_multiline_words = on
|
||||
bar_more_down = "++"
|
||||
bar_more_left = "<<"
|
||||
bar_more_right = ">>"
|
||||
bar_more_up = "--"
|
||||
bare_display_exit_on_input = on
|
||||
bare_display_time_format = "%H:%M"
|
||||
buffer_auto_renumber = on
|
||||
buffer_notify_default = all
|
||||
buffer_position = end
|
||||
buffer_search_case_sensitive = off
|
||||
buffer_search_force_default = off
|
||||
buffer_search_history = local
|
||||
buffer_search_regex = off
|
||||
buffer_search_where = prefix_message
|
||||
buffer_time_format = "%H:%M:%S"
|
||||
buffer_time_same = ""
|
||||
chat_space_right = off
|
||||
color_basic_force_bold = off
|
||||
color_inactive_buffer = on
|
||||
color_inactive_message = on
|
||||
color_inactive_prefix = on
|
||||
color_inactive_prefix_buffer = on
|
||||
color_inactive_time = on
|
||||
color_inactive_window = on
|
||||
color_nick_offline = off
|
||||
color_pairs_auto_reset = 5
|
||||
color_real_white = off
|
||||
command_chars = ""
|
||||
command_incomplete = off
|
||||
config_permissions = "600"
|
||||
confirm_quit = on
|
||||
confirm_upgrade = off
|
||||
day_change = on
|
||||
day_change_message_1date = "-- %a, %d %b %Y --"
|
||||
day_change_message_2dates = "-- %%a, %%d %%b %%Y (%a, %d %b %Y) --"
|
||||
eat_newline_glitch = off
|
||||
emphasized_attributes = ""
|
||||
highlight = ""
|
||||
highlight_disable_regex = ""
|
||||
highlight_prefix = on
|
||||
highlight_regex = ""
|
||||
highlight_tags = ""
|
||||
hotlist_add_conditions = "${away} || ${buffer.num_displayed} == 0 || ${info:relay_client_count,weechat,connected} > 0"
|
||||
hotlist_buffer_separator = ", "
|
||||
hotlist_count_max = 2
|
||||
hotlist_count_min_msg = 2
|
||||
hotlist_names_count = 3
|
||||
hotlist_names_length = 0
|
||||
hotlist_names_level = 12
|
||||
hotlist_names_merged_buffers = off
|
||||
hotlist_prefix = "H: "
|
||||
hotlist_remove = merged
|
||||
hotlist_short_names = on
|
||||
hotlist_sort = "-priority,time,time_usec"
|
||||
hotlist_suffix = ""
|
||||
hotlist_unique_numbers = on
|
||||
hotlist_update_on_buffer_switch = on
|
||||
input_cursor_scroll = 20
|
||||
input_multiline_lead_linebreak = on
|
||||
input_share = none
|
||||
input_share_overwrite = off
|
||||
input_undo_max = 32
|
||||
item_away_message = on
|
||||
item_buffer_filter = "*"
|
||||
item_buffer_zoom = "!"
|
||||
item_mouse_status = "M"
|
||||
item_time_format = "%H:%M"
|
||||
jump_current_to_previous_buffer = on
|
||||
jump_previous_buffer_when_closing = on
|
||||
jump_smart_back_to_buffer = on
|
||||
key_bind_safe = on
|
||||
key_grab_delay = 800
|
||||
mouse = off
|
||||
nick_color_force = ""
|
||||
nick_color_hash = djb2
|
||||
nick_color_hash_salt = ""
|
||||
nick_color_stop_chars = "_|["
|
||||
nick_prefix = ""
|
||||
nick_suffix = ""
|
||||
paste_bracketed = on
|
||||
paste_bracketed_timer_delay = 10
|
||||
paste_max_lines = 100
|
||||
prefix_action = " *"
|
||||
prefix_align = right
|
||||
prefix_align_max = 0
|
||||
prefix_align_min = 0
|
||||
prefix_align_more = "+"
|
||||
prefix_align_more_after = on
|
||||
prefix_buffer_align = right
|
||||
prefix_buffer_align_max = 0
|
||||
prefix_buffer_align_more = "+"
|
||||
prefix_buffer_align_more_after = on
|
||||
prefix_error = "=!="
|
||||
prefix_join = "-->"
|
||||
prefix_network = "--"
|
||||
prefix_quit = "<--"
|
||||
prefix_same_nick = ""
|
||||
prefix_same_nick_middle = ""
|
||||
prefix_suffix = "│"
|
||||
quote_nick_prefix = "<"
|
||||
quote_nick_suffix = ">"
|
||||
quote_time_format = "%H:%M:%S"
|
||||
read_marker = line
|
||||
read_marker_always_show = off
|
||||
read_marker_string = "- "
|
||||
read_marker_update_on_buffer_switch = on
|
||||
save_config_on_exit = on
|
||||
save_config_with_fsync = off
|
||||
save_layout_on_exit = none
|
||||
scroll_amount = 3
|
||||
scroll_bottom_after_switch = off
|
||||
scroll_page_percent = 100
|
||||
search_text_not_found_alert = on
|
||||
separator_horizontal = "-"
|
||||
separator_vertical = ""
|
||||
tab_width = 1
|
||||
time_format = "%a, %d %b %Y %T"
|
||||
window_auto_zoom = off
|
||||
window_separator_horizontal = on
|
||||
window_separator_vertical = on
|
||||
window_title = ""
|
||||
word_chars_highlight = "!\u00A0,-,_,|,alnum"
|
||||
word_chars_input = "!\u00A0,-,_,|,alnum"
|
||||
|
||||
[palette]
|
||||
100 = "blue"
|
||||
|
||||
[color]
|
||||
bar_more = lightmagenta
|
||||
chat = default
|
||||
chat_bg = default
|
||||
chat_buffer = white
|
||||
chat_channel = white
|
||||
chat_day_change = cyan
|
||||
chat_delimiters = 22
|
||||
chat_highlight = yellow
|
||||
chat_highlight_bg = green
|
||||
chat_host = cyan
|
||||
chat_inactive_buffer = default
|
||||
chat_inactive_window = 240
|
||||
chat_nick = lightcyan
|
||||
chat_nick_colors = "cyan,magenta,green,brown,lightblue,lightcyan,lightmagenta,lightgreen,31,35,38,40,49,63,70,80,92,99,112,126,130,138,142,148,160,162,167,169,174,176,178,184,186,210,212,215,248"
|
||||
chat_nick_offline = 242
|
||||
chat_nick_offline_highlight = default
|
||||
chat_nick_offline_highlight_bg = 17
|
||||
chat_nick_other = cyan
|
||||
chat_nick_prefix = green
|
||||
chat_nick_self = white
|
||||
chat_nick_suffix = green
|
||||
chat_prefix_action = white
|
||||
chat_prefix_buffer = 180
|
||||
chat_prefix_buffer_inactive_buffer = default
|
||||
chat_prefix_error = yellow
|
||||
chat_prefix_join = lightgreen
|
||||
chat_prefix_more = lightmagenta
|
||||
chat_prefix_network = magenta
|
||||
chat_prefix_quit = lightred
|
||||
chat_prefix_suffix = 24
|
||||
chat_read_marker = magenta
|
||||
chat_read_marker_bg = default
|
||||
chat_server = brown
|
||||
chat_status_disabled = red
|
||||
chat_status_enabled = green
|
||||
chat_tags = red
|
||||
chat_text_found = yellow
|
||||
chat_text_found_bg = lightmagenta
|
||||
chat_time = default
|
||||
chat_time_delimiters = brown
|
||||
chat_value = cyan
|
||||
chat_value_null = blue
|
||||
emphasized = yellow
|
||||
emphasized_bg = 54
|
||||
eval_syntax_colors = "green,lightred,lightblue,lightmagenta,yellow,cyan"
|
||||
input_actions = lightgreen
|
||||
input_text_not_found = red
|
||||
item_away = yellow
|
||||
nicklist_away = 240
|
||||
nicklist_group = green
|
||||
separator = 236
|
||||
status_count_highlight = magenta
|
||||
status_count_msg = brown
|
||||
status_count_other = default
|
||||
status_count_private = green
|
||||
status_data_highlight = lightmagenta
|
||||
status_data_msg = yellow
|
||||
status_data_other = default
|
||||
status_data_private = lightgreen
|
||||
status_filter = green
|
||||
status_modes = default
|
||||
status_more = yellow
|
||||
status_mouse = lightgreen
|
||||
status_name = white
|
||||
status_name_insecure = lightmagenta
|
||||
status_name_tls = white
|
||||
status_nicklist_count = default
|
||||
status_number = yellow
|
||||
status_time = default
|
||||
|
||||
[completion]
|
||||
base_word_until_cursor = on
|
||||
case_sensitive = on
|
||||
command_inline = on
|
||||
default_template = "%(nicks)|%(irc_channels)"
|
||||
nick_add_space = on
|
||||
nick_case_sensitive = off
|
||||
nick_completer = ": "
|
||||
nick_first_only = off
|
||||
nick_ignore_chars = "[]`_-^"
|
||||
partial_completion_alert = on
|
||||
partial_completion_command = off
|
||||
partial_completion_command_arg = off
|
||||
partial_completion_count = on
|
||||
partial_completion_other = off
|
||||
partial_completion_templates = "config_options"
|
||||
|
||||
[history]
|
||||
display_default = 5
|
||||
max_buffer_lines_minutes = 0
|
||||
max_buffer_lines_number = 4096
|
||||
max_commands = 100
|
||||
max_visited_buffers = 50
|
||||
|
||||
[proxy]
|
||||
|
||||
[network]
|
||||
connection_timeout = 60
|
||||
gnutls_ca_system = on
|
||||
gnutls_ca_user = ""
|
||||
gnutls_handshake_timeout = 30
|
||||
proxy_curl = ""
|
||||
|
||||
[plugin]
|
||||
autoload = "*"
|
||||
extension = ".so,.dll"
|
||||
path = "${weechat_data_dir}/plugins"
|
||||
save_config_on_unload = on
|
||||
|
||||
[signal]
|
||||
sighup = "${if:${info:weechat_headless}?/reload:/quit -yes}"
|
||||
sigquit = "/quit -yes"
|
||||
sigterm = "/quit -yes"
|
||||
sigusr1 = ""
|
||||
sigusr2 = ""
|
||||
|
||||
[bar]
|
||||
buflist.color_bg = default
|
||||
buflist.color_bg_inactive = default
|
||||
buflist.color_delim = default
|
||||
buflist.color_fg = default
|
||||
buflist.conditions = ""
|
||||
buflist.filling_left_right = vertical
|
||||
buflist.filling_top_bottom = columns_vertical
|
||||
buflist.hidden = off
|
||||
buflist.items = "buflist"
|
||||
buflist.position = left
|
||||
buflist.priority = 0
|
||||
buflist.separator = on
|
||||
buflist.size = 0
|
||||
buflist.size_max = 0
|
||||
buflist.type = root
|
||||
fset.color_bg = default
|
||||
fset.color_bg_inactive = default
|
||||
fset.color_delim = cyan
|
||||
fset.color_fg = default
|
||||
fset.conditions = "${buffer.full_name} == fset.fset"
|
||||
fset.filling_left_right = vertical
|
||||
fset.filling_top_bottom = horizontal
|
||||
fset.hidden = off
|
||||
fset.items = "fset"
|
||||
fset.position = top
|
||||
fset.priority = 0
|
||||
fset.separator = on
|
||||
fset.size = 3
|
||||
fset.size_max = 3
|
||||
fset.type = window
|
||||
input.color_bg = default
|
||||
input.color_bg_inactive = default
|
||||
input.color_delim = cyan
|
||||
input.color_fg = default
|
||||
input.conditions = ""
|
||||
input.filling_left_right = vertical
|
||||
input.filling_top_bottom = horizontal
|
||||
input.hidden = off
|
||||
input.items = "[input_prompt]+(away),[input_search],[input_paste],input_text"
|
||||
input.position = bottom
|
||||
input.priority = 1000
|
||||
input.separator = off
|
||||
input.size = 0
|
||||
input.size_max = 0
|
||||
input.type = window
|
||||
nicklist.color_bg = default
|
||||
nicklist.color_bg_inactive = default
|
||||
nicklist.color_delim = cyan
|
||||
nicklist.color_fg = default
|
||||
nicklist.conditions = "${nicklist}"
|
||||
nicklist.filling_left_right = vertical
|
||||
nicklist.filling_top_bottom = columns_vertical
|
||||
nicklist.hidden = off
|
||||
nicklist.items = "buffer_nicklist"
|
||||
nicklist.position = right
|
||||
nicklist.priority = 200
|
||||
nicklist.separator = on
|
||||
nicklist.size = 0
|
||||
nicklist.size_max = 0
|
||||
nicklist.type = window
|
||||
status.color_bg = 234
|
||||
status.color_bg_inactive = 232
|
||||
status.color_delim = cyan
|
||||
status.color_fg = default
|
||||
status.conditions = ""
|
||||
status.filling_left_right = vertical
|
||||
status.filling_top_bottom = horizontal
|
||||
status.hidden = off
|
||||
status.items = "[time],[buffer_last_number],[buffer_plugin],buffer_number+:+buffer_name+(buffer_modes)+{buffer_nicklist_count}+buffer_zoom+buffer_filter,mouse_status,scroll,[lag],[hotlist],[typing],completion"
|
||||
status.position = bottom
|
||||
status.priority = 500
|
||||
status.separator = off
|
||||
status.size = 1
|
||||
status.size_max = 0
|
||||
status.type = window
|
||||
title.color_bg = 234
|
||||
title.color_bg_inactive = 232
|
||||
title.color_delim = cyan
|
||||
title.color_fg = default
|
||||
title.conditions = ""
|
||||
title.filling_left_right = vertical
|
||||
title.filling_top_bottom = horizontal
|
||||
title.hidden = off
|
||||
title.items = "buffer_title"
|
||||
title.position = top
|
||||
title.priority = 500
|
||||
title.separator = off
|
||||
title.size = 1
|
||||
title.size_max = 0
|
||||
title.type = window
|
||||
|
||||
[custom_bar_item]
|
||||
|
||||
[layout]
|
||||
|
||||
[buffer]
|
||||
|
||||
[notify]
|
||||
|
||||
[filter]
|
||||
irc_smart = on;*;irc_smart_filter;*
|
||||
|
||||
[key]
|
||||
backspace = "/input delete_previous_char"
|
||||
ctrl-_ = "/input undo"
|
||||
ctrl-a = "/input move_beginning_of_line"
|
||||
ctrl-b = "/input move_previous_char"
|
||||
ctrl-c,_ = "/input insert \x1F"
|
||||
ctrl-c,b = "/input insert \x02"
|
||||
ctrl-c,c = "/input insert \x03"
|
||||
ctrl-c,d = "/input insert \x04"
|
||||
ctrl-c,i = "/input insert \x1D"
|
||||
ctrl-c,o = "/input insert \x0F"
|
||||
ctrl-c,v = "/input insert \x16"
|
||||
ctrl-d = "/input delete_next_char"
|
||||
ctrl-down = "/input history_global_next"
|
||||
ctrl-e = "/input move_end_of_line"
|
||||
ctrl-f = "/input move_next_char"
|
||||
ctrl-f1 = "/bar scroll buflist * -100%"
|
||||
ctrl-f11 = "/bar scroll nicklist * -100%"
|
||||
ctrl-f12 = "/bar scroll nicklist * +100%"
|
||||
ctrl-f2 = "/bar scroll buflist * +100%"
|
||||
ctrl-h = "/window -1"
|
||||
ctrl-k = "/input delete_end_of_line"
|
||||
ctrl-l = "/window refresh"
|
||||
ctrl-left = "/input move_previous_word"
|
||||
ctrl-n = "/buffer +1"
|
||||
ctrl-o = "/input history_use_get_next"
|
||||
ctrl-p = "/buffer -1"
|
||||
ctrl-r = "/input search_history"
|
||||
ctrl-right = "/input move_next_word"
|
||||
ctrl-s = "/input search_text_here"
|
||||
ctrl-t = "/input transpose_chars"
|
||||
ctrl-u = "/input delete_beginning_of_line"
|
||||
ctrl-up = "/input history_global_previous"
|
||||
ctrl-w = "/input delete_previous_word_whitespace"
|
||||
ctrl-x = "/buffer switch"
|
||||
ctrl-y = "/input clipboard_paste"
|
||||
ctrl-z = "/sys suspend"
|
||||
delete = "/input delete_next_char"
|
||||
down = "/input history_next"
|
||||
end = "/input move_end_of_line"
|
||||
f1 = "/bar scroll buflist * -100%"
|
||||
f10 = "/bar scroll title * +30%"
|
||||
f11 = "/bar scroll nicklist * -100%"
|
||||
f12 = "/bar scroll nicklist * +100%"
|
||||
f2 = "/bar scroll buflist * +100%"
|
||||
f5 = "/buffer -1"
|
||||
f6 = "/buffer +1"
|
||||
f7 = "/window -1"
|
||||
f8 = "/window +1"
|
||||
f9 = "/bar scroll title * -30%"
|
||||
home = "/input move_beginning_of_line"
|
||||
left = "/input move_previous_char"
|
||||
meta-- = "/filter toggle @"
|
||||
meta-/ = "/buffer jump last_displayed"
|
||||
meta-0 = "/buffer *10"
|
||||
meta-1 = "/buffer *1"
|
||||
meta-2 = "/buffer *2"
|
||||
meta-3 = "/buffer *3"
|
||||
meta-4 = "/buffer *4"
|
||||
meta-5 = "/buffer *5"
|
||||
meta-6 = "/buffer *6"
|
||||
meta-7 = "/buffer *7"
|
||||
meta-8 = "/buffer *8"
|
||||
meta-9 = "/buffer *9"
|
||||
meta-< = "/buffer jump prev_visited"
|
||||
meta-= = "/filter toggle"
|
||||
meta-> = "/buffer jump next_visited"
|
||||
meta-B = "/buflist toggle"
|
||||
meta-N = "/bar toggle nicklist"
|
||||
meta-R = "/input delete_input"
|
||||
meta-U = "/allbuf /buffer set unread"
|
||||
meta-_ = "/input redo"
|
||||
meta-a = "/buffer jump smart"
|
||||
meta-b = "/input move_previous_word"
|
||||
meta-backspace = "/input delete_previous_word"
|
||||
meta-ctrl-k = "/input delete_end_of_input"
|
||||
meta-ctrl-u = "/input delete_beginning_of_input"
|
||||
meta-d = "/input delete_next_word"
|
||||
meta-down = "/buffer +1"
|
||||
meta-end = "/window scroll_bottom"
|
||||
meta-f = "/input move_next_word"
|
||||
meta-f1 = "/bar scroll buflist * b"
|
||||
meta-f11 = "/bar scroll nicklist * b"
|
||||
meta-f12 = "/bar scroll nicklist * e"
|
||||
meta-f2 = "/bar scroll buflist * e"
|
||||
meta-h,meta-R = "/hotlist restore -all"
|
||||
meta-h,meta-c = "/hotlist clear"
|
||||
meta-h,meta-m = "/hotlist remove"
|
||||
meta-h,meta-r = "/hotlist restore"
|
||||
meta-home = "/window scroll_top"
|
||||
meta-j,0,1 = "/buffer *1"
|
||||
meta-j,0,2 = "/buffer *2"
|
||||
meta-j,0,3 = "/buffer *3"
|
||||
meta-j,0,4 = "/buffer *4"
|
||||
meta-j,0,5 = "/buffer *5"
|
||||
meta-j,0,6 = "/buffer *6"
|
||||
meta-j,0,7 = "/buffer *7"
|
||||
meta-j,0,8 = "/buffer *8"
|
||||
meta-j,0,9 = "/buffer *9"
|
||||
meta-j,1,0 = "/buffer *10"
|
||||
meta-j,1,1 = "/buffer *11"
|
||||
meta-j,1,2 = "/buffer *12"
|
||||
meta-j,1,3 = "/buffer *13"
|
||||
meta-j,1,4 = "/buffer *14"
|
||||
meta-j,1,5 = "/buffer *15"
|
||||
meta-j,1,6 = "/buffer *16"
|
||||
meta-j,1,7 = "/buffer *17"
|
||||
meta-j,1,8 = "/buffer *18"
|
||||
meta-j,1,9 = "/buffer *19"
|
||||
meta-j,2,0 = "/buffer *20"
|
||||
meta-j,2,1 = "/buffer *21"
|
||||
meta-j,2,2 = "/buffer *22"
|
||||
meta-j,2,3 = "/buffer *23"
|
||||
meta-j,2,4 = "/buffer *24"
|
||||
meta-j,2,5 = "/buffer *25"
|
||||
meta-j,2,6 = "/buffer *26"
|
||||
meta-j,2,7 = "/buffer *27"
|
||||
meta-j,2,8 = "/buffer *28"
|
||||
meta-j,2,9 = "/buffer *29"
|
||||
meta-j,3,0 = "/buffer *30"
|
||||
meta-j,3,1 = "/buffer *31"
|
||||
meta-j,3,2 = "/buffer *32"
|
||||
meta-j,3,3 = "/buffer *33"
|
||||
meta-j,3,4 = "/buffer *34"
|
||||
meta-j,3,5 = "/buffer *35"
|
||||
meta-j,3,6 = "/buffer *36"
|
||||
meta-j,3,7 = "/buffer *37"
|
||||
meta-j,3,8 = "/buffer *38"
|
||||
meta-j,3,9 = "/buffer *39"
|
||||
meta-j,4,0 = "/buffer *40"
|
||||
meta-j,4,1 = "/buffer *41"
|
||||
meta-j,4,2 = "/buffer *42"
|
||||
meta-j,4,3 = "/buffer *43"
|
||||
meta-j,4,4 = "/buffer *44"
|
||||
meta-j,4,5 = "/buffer *45"
|
||||
meta-j,4,6 = "/buffer *46"
|
||||
meta-j,4,7 = "/buffer *47"
|
||||
meta-j,4,8 = "/buffer *48"
|
||||
meta-j,4,9 = "/buffer *49"
|
||||
meta-j,5,0 = "/buffer *50"
|
||||
meta-j,5,1 = "/buffer *51"
|
||||
meta-j,5,2 = "/buffer *52"
|
||||
meta-j,5,3 = "/buffer *53"
|
||||
meta-j,5,4 = "/buffer *54"
|
||||
meta-j,5,5 = "/buffer *55"
|
||||
meta-j,5,6 = "/buffer *56"
|
||||
meta-j,5,7 = "/buffer *57"
|
||||
meta-j,5,8 = "/buffer *58"
|
||||
meta-j,5,9 = "/buffer *59"
|
||||
meta-j,6,0 = "/buffer *60"
|
||||
meta-j,6,1 = "/buffer *61"
|
||||
meta-j,6,2 = "/buffer *62"
|
||||
meta-j,6,3 = "/buffer *63"
|
||||
meta-j,6,4 = "/buffer *64"
|
||||
meta-j,6,5 = "/buffer *65"
|
||||
meta-j,6,6 = "/buffer *66"
|
||||
meta-j,6,7 = "/buffer *67"
|
||||
meta-j,6,8 = "/buffer *68"
|
||||
meta-j,6,9 = "/buffer *69"
|
||||
meta-j,7,0 = "/buffer *70"
|
||||
meta-j,7,1 = "/buffer *71"
|
||||
meta-j,7,2 = "/buffer *72"
|
||||
meta-j,7,3 = "/buffer *73"
|
||||
meta-j,7,4 = "/buffer *74"
|
||||
meta-j,7,5 = "/buffer *75"
|
||||
meta-j,7,6 = "/buffer *76"
|
||||
meta-j,7,7 = "/buffer *77"
|
||||
meta-j,7,8 = "/buffer *78"
|
||||
meta-j,7,9 = "/buffer *79"
|
||||
meta-j,8,0 = "/buffer *80"
|
||||
meta-j,8,1 = "/buffer *81"
|
||||
meta-j,8,2 = "/buffer *82"
|
||||
meta-j,8,3 = "/buffer *83"
|
||||
meta-j,8,4 = "/buffer *84"
|
||||
meta-j,8,5 = "/buffer *85"
|
||||
meta-j,8,6 = "/buffer *86"
|
||||
meta-j,8,7 = "/buffer *87"
|
||||
meta-j,8,8 = "/buffer *88"
|
||||
meta-j,8,9 = "/buffer *89"
|
||||
meta-j,9,0 = "/buffer *90"
|
||||
meta-j,9,1 = "/buffer *91"
|
||||
meta-j,9,2 = "/buffer *92"
|
||||
meta-j,9,3 = "/buffer *93"
|
||||
meta-j,9,4 = "/buffer *94"
|
||||
meta-j,9,5 = "/buffer *95"
|
||||
meta-j,9,6 = "/buffer *96"
|
||||
meta-j,9,7 = "/buffer *97"
|
||||
meta-j,9,8 = "/buffer *98"
|
||||
meta-j,9,9 = "/buffer *99"
|
||||
meta-j,meta-f = "/buffer -"
|
||||
meta-j,meta-l = "/buffer +"
|
||||
meta-j,meta-r = "/server raw"
|
||||
meta-j,meta-s = "/server jump"
|
||||
meta-k = "/input grab_key_command"
|
||||
meta-l = "/window bare"
|
||||
meta-left = "/buffer -1"
|
||||
meta-m = "/mute mouse toggle"
|
||||
meta-n = "/window scroll_next_highlight"
|
||||
meta-p = "/window scroll_previous_highlight"
|
||||
meta-pgdn = "/window scroll_down"
|
||||
meta-pgup = "/window scroll_up"
|
||||
meta-r = "/input delete_line"
|
||||
meta-return = "/input insert \n"
|
||||
meta-right = "/buffer +1"
|
||||
meta-s = "/mute spell toggle"
|
||||
meta-u = "/window scroll_unread"
|
||||
meta-up = "/buffer -1"
|
||||
meta-w,meta-b = "/window balance"
|
||||
meta-w,meta-down = "/window down"
|
||||
meta-w,meta-left = "/window left"
|
||||
meta-w,meta-right = "/window right"
|
||||
meta-w,meta-s = "/window swap"
|
||||
meta-w,meta-up = "/window up"
|
||||
meta-x = "/buffer zoom"
|
||||
meta-z = "/window zoom"
|
||||
pgdn = "/window page_down"
|
||||
pgup = "/window page_up"
|
||||
return = "/input return"
|
||||
right = "/input move_next_char"
|
||||
shift-down = "/input move_next_line"
|
||||
shift-end = "/input move_end_of_input"
|
||||
shift-home = "/input move_beginning_of_input"
|
||||
shift-left = "/input move_previous_char"
|
||||
shift-right = "/input move_next_char"
|
||||
shift-tab = "/input complete_previous"
|
||||
shift-up = "/input move_previous_line"
|
||||
tab = "/input complete_next"
|
||||
up = "/input history_previous"
|
||||
|
||||
[key_search]
|
||||
ctrl-q = "/input search_stop"
|
||||
ctrl-r = "/input search_previous"
|
||||
ctrl-s = "/input search_next"
|
||||
ctrl-x = "/input search_switch_regex"
|
||||
down = "/input search_next"
|
||||
meta-c = "/input search_switch_case"
|
||||
return = "/input search_stop_here"
|
||||
tab = "/input search_switch_where"
|
||||
up = "/input search_previous"
|
||||
|
||||
[key_histsearch]
|
||||
ctrl-o = "/input history_use_get_next"
|
||||
ctrl-q = "/input search_stop"
|
||||
ctrl-r = "/input search_previous"
|
||||
ctrl-s = "/input search_next"
|
||||
ctrl-x = "/input search_switch_regex"
|
||||
down = "/input search_next"
|
||||
meta-c = "/input search_switch_case"
|
||||
return = "/input search_stop_here"
|
||||
tab = "/input search_switch_where"
|
||||
up = "/input search_previous"
|
||||
|
||||
[key_cursor]
|
||||
@chat:Q = "hsignal:chat_quote_time_prefix_message;/cursor stop"
|
||||
@chat:l = "hsignal:chat_quote_focused_line;/cursor stop"
|
||||
@chat:m = "hsignal:chat_quote_message;/cursor stop"
|
||||
@chat:q = "hsignal:chat_quote_prefix_message;/cursor stop"
|
||||
@item(buffer_nicklist):K = "/window ${_window_number};/kickban ${nick}"
|
||||
@item(buffer_nicklist):b = "/window ${_window_number};/ban ${nick}"
|
||||
@item(buffer_nicklist):k = "/window ${_window_number};/kick ${nick}"
|
||||
@item(buffer_nicklist):q = "/window ${_window_number};/query ${nick};/cursor stop"
|
||||
@item(buffer_nicklist):w = "/window ${_window_number};/whois ${nick}"
|
||||
down = "/cursor move down"
|
||||
left = "/cursor move left"
|
||||
meta-down = "/cursor move edge_bottom"
|
||||
meta-end = "/cursor move bottom_right"
|
||||
meta-home = "/cursor move top_left"
|
||||
meta-left = "/cursor move edge_left"
|
||||
meta-right = "/cursor move edge_right"
|
||||
meta-shift-down = "/cursor move area_down"
|
||||
meta-shift-left = "/cursor move area_left"
|
||||
meta-shift-right = "/cursor move area_right"
|
||||
meta-shift-up = "/cursor move area_up"
|
||||
meta-up = "/cursor move edge_top"
|
||||
return = "/cursor stop"
|
||||
right = "/cursor move right"
|
||||
up = "/cursor move up"
|
||||
|
||||
[key_mouse]
|
||||
@*:button3 = "/cursor go ${_x},${_y}"
|
||||
@bar(buflist):ctrl-wheeldown = "hsignal:buflist_mouse"
|
||||
@bar(buflist):ctrl-wheelup = "hsignal:buflist_mouse"
|
||||
@bar(input):button2 = "/input grab_mouse_area"
|
||||
@bar(nicklist):button1-gesture-down = "/bar scroll nicklist ${_window_number} +100%"
|
||||
@bar(nicklist):button1-gesture-down-long = "/bar scroll nicklist ${_window_number} e"
|
||||
@bar(nicklist):button1-gesture-up = "/bar scroll nicklist ${_window_number} -100%"
|
||||
@bar(nicklist):button1-gesture-up-long = "/bar scroll nicklist ${_window_number} b"
|
||||
@bar:wheeldown = "/bar scroll ${_bar_name} ${_window_number} +20%"
|
||||
@bar:wheelup = "/bar scroll ${_bar_name} ${_window_number} -20%"
|
||||
@chat(fset.fset):button1 = "/window ${_window_number};/fset -go ${fset_option_index}"
|
||||
@chat(fset.fset):button2* = "hsignal:fset_mouse"
|
||||
@chat(fset.fset):wheeldown = "/fset -down 5"
|
||||
@chat(fset.fset):wheelup = "/fset -up 5"
|
||||
@chat(irc.list_*):button1 = "/window ${_window_number};/list -go ${_chat_line_y}"
|
||||
@chat(irc.list_*):button2* = "hsignal:irc_list_mouse"
|
||||
@chat(irc.list_*):wheeldown = "/list -down 5"
|
||||
@chat(irc.list_*):wheelup = "/list -up 5"
|
||||
@chat(script.scripts):button1 = "/window ${_window_number};/script -go ${_chat_line_y}"
|
||||
@chat(script.scripts):button2 = "/window ${_window_number};/script -go ${_chat_line_y};/script installremove -q ${script_name_with_extension}"
|
||||
@chat(script.scripts):wheeldown = "/script -down 5"
|
||||
@chat(script.scripts):wheelup = "/script -up 5"
|
||||
@chat:button1 = "/window ${_window_number}"
|
||||
@chat:button1-gesture-left = "/window ${_window_number};/buffer -1"
|
||||
@chat:button1-gesture-left-long = "/window ${_window_number};/buffer 1"
|
||||
@chat:button1-gesture-right = "/window ${_window_number};/buffer +1"
|
||||
@chat:button1-gesture-right-long = "/window ${_window_number};/buffer +"
|
||||
@chat:ctrl-wheeldown = "/window scroll_horiz -window ${_window_number} +10%"
|
||||
@chat:ctrl-wheelup = "/window scroll_horiz -window ${_window_number} -10%"
|
||||
@chat:wheeldown = "/window scroll_down -window ${_window_number}"
|
||||
@chat:wheelup = "/window scroll_up -window ${_window_number}"
|
||||
@item(buffer_nicklist):button1 = "/window ${_window_number};/query ${nick}"
|
||||
@item(buffer_nicklist):button1-gesture-left = "/window ${_window_number};/kick ${nick}"
|
||||
@item(buffer_nicklist):button1-gesture-left-long = "/window ${_window_number};/kickban ${nick}"
|
||||
@item(buffer_nicklist):button2 = "/window ${_window_number};/whois ${nick}"
|
||||
@item(buffer_nicklist):button2-gesture-left = "/window ${_window_number};/ban ${nick}"
|
||||
@item(buflist):button1* = "hsignal:buflist_mouse"
|
||||
@item(buflist):button2* = "hsignal:buflist_mouse"
|
||||
@item(buflist2):button1* = "hsignal:buflist_mouse"
|
||||
@item(buflist2):button2* = "hsignal:buflist_mouse"
|
||||
@item(buflist3):button1* = "hsignal:buflist_mouse"
|
||||
@item(buflist3):button2* = "hsignal:buflist_mouse"
|
||||
@item(buflist4):button1* = "hsignal:buflist_mouse"
|
||||
@item(buflist4):button2* = "hsignal:buflist_mouse"
|
||||
@item(buflist5):button1* = "hsignal:buflist_mouse"
|
||||
@item(buflist5):button2* = "hsignal:buflist_mouse"
|
||||
49
cli/.config/weechat/xfer.conf
Normal file
49
cli/.config/weechat/xfer.conf
Normal file
@@ -0,0 +1,49 @@
|
||||
#
|
||||
# weechat -- xfer.conf
|
||||
#
|
||||
# WARNING: It is NOT recommended to edit this file by hand,
|
||||
# especially if WeeChat is running.
|
||||
#
|
||||
# Use commands like /set or /fset to change settings in WeeChat.
|
||||
#
|
||||
# For more info, see: https://weechat.org/doc/weechat/quickstart/
|
||||
#
|
||||
|
||||
[look]
|
||||
auto_open_buffer = on
|
||||
progress_bar_size = 20
|
||||
pv_tags = "notify_private"
|
||||
|
||||
[color]
|
||||
status_aborted = lightred
|
||||
status_active = lightblue
|
||||
status_connecting = yellow
|
||||
status_done = lightgreen
|
||||
status_failed = lightred
|
||||
status_waiting = lightcyan
|
||||
text = default
|
||||
text_bg = default
|
||||
text_selected = white
|
||||
|
||||
[network]
|
||||
blocksize = 65536
|
||||
fast_send = on
|
||||
own_ip = ""
|
||||
port_range = ""
|
||||
send_ack = on
|
||||
speed_limit_recv = 0
|
||||
speed_limit_send = 0
|
||||
timeout = 300
|
||||
|
||||
[file]
|
||||
auto_accept_chats = off
|
||||
auto_accept_files = off
|
||||
auto_accept_nicks = ""
|
||||
auto_check_crc32 = off
|
||||
auto_rename = on
|
||||
auto_resume = on
|
||||
convert_spaces = on
|
||||
download_path = "${weechat_data_dir}/xfer"
|
||||
download_temporary_suffix = ".part"
|
||||
upload_path = "~"
|
||||
use_nick_in_filename = on
|
||||
21
cli/.config/yazi/flavors/kanagawa.yazi/LICENSE
Normal file
21
cli/.config/yazi/flavors/kanagawa.yazi/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 Dmitry Nefedov
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
21
cli/.config/yazi/flavors/kanagawa.yazi/LICENSE-tmtheme
Normal file
21
cli/.config/yazi/flavors/kanagawa.yazi/LICENSE-tmtheme
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 Dmitry Nefedov
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
32
cli/.config/yazi/flavors/kanagawa.yazi/README.md
Normal file
32
cli/.config/yazi/flavors/kanagawa.yazi/README.md
Normal file
@@ -0,0 +1,32 @@
|
||||
<div align="center">
|
||||
<img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
|
||||
</div>
|
||||
|
||||
<h3 align="center">
|
||||
Kanagawa Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
|
||||
</h3>
|
||||
|
||||
## 👀 Preview
|
||||
|
||||
<img src="preview.png" width="600" />
|
||||
|
||||
## 🎨 Installation
|
||||
|
||||
```bash
|
||||
ya pack -a dangooddd/kanagawa
|
||||
```
|
||||
|
||||
## ⚙️ Usage
|
||||
|
||||
Add these lines to your `theme.toml` configuration file to use it:
|
||||
|
||||
```toml
|
||||
[flavor]
|
||||
dark = "kanagawa"
|
||||
```
|
||||
|
||||
## 📜 License
|
||||
|
||||
The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
|
||||
|
||||
Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
|
||||
136
cli/.config/yazi/flavors/kanagawa.yazi/flavor.toml
Normal file
136
cli/.config/yazi/flavors/kanagawa.yazi/flavor.toml
Normal file
@@ -0,0 +1,136 @@
|
||||
## Color palette
|
||||
## Check https://github.com/rebelot/kanagawa.nvim for more details
|
||||
# sumiInk0 "#16161d"
|
||||
# sumiInk3 "#1f1f28" bg
|
||||
# sumiInk4 "#2a2a37"
|
||||
# sumiInk6 "#54546d"
|
||||
# fujiWhite "#dcd7ba" fg
|
||||
# fujiGray "#727169"
|
||||
# peachRed "#ff5d62"
|
||||
# autumnRed "#c34043"
|
||||
# crystalBlue "#7e9cd8"
|
||||
# waveRed "#e46876"
|
||||
# carpYellow "#e6c384"
|
||||
# springGreen "#98bb6c"
|
||||
# autumnGreen "#76946a"
|
||||
# oniViolet "#957fb8"
|
||||
# waveAqua1 "#6a9589"
|
||||
# surimiOrange "#ffa066"
|
||||
# waveAqua2 "#7aa89f"
|
||||
|
||||
[manager]
|
||||
marker_copied = { fg = "#98bb6c", bg = "#98bb6c" }
|
||||
marker_cut = { fg = "#e46876", bg = "#e46876" }
|
||||
marker_marked = { fg = "#957fb8", bg = "#957fb8" }
|
||||
marker_selected = { fg = "#ffa066", bg = "#ffa066" }
|
||||
|
||||
cwd = { fg = "#e6c384" }
|
||||
hovered = { reversed = true }
|
||||
preview_hovered = { reversed = true }
|
||||
|
||||
find_keyword = { fg = "#ffa066", bg = "#1f1f28" }
|
||||
find_position = {}
|
||||
|
||||
tab_active = { reversed = true }
|
||||
tab_inactive = {}
|
||||
tab_width = 1
|
||||
|
||||
count_copied = { fg = "#1f1f28", bg = "#98bb6c" }
|
||||
count_cut = { fg = "#1f1f28", bg = "#e46876" }
|
||||
count_selected = { fg = "#1f1f28", bg = "#e6c384" }
|
||||
|
||||
border_symbol = "│"
|
||||
border_style = { fg = "#dcd7ba" }
|
||||
|
||||
|
||||
[mode]
|
||||
normal_main = { fg = "#1f1f28", bg = "#7e9cd8" }
|
||||
normal_alt = { fg = "#7e9cd8", bg = "#2a2a37" }
|
||||
select_main = { fg = "#1f1f28", bg = "#957fb8" }
|
||||
select_alt = { fg = "#957fb8", bg = "#2a2a37" }
|
||||
unset_main = { fg = "#1f1f28", bg = "#e6c384" }
|
||||
unset_alt = { fg = "#e6c384", bg = "#2a2a37" }
|
||||
|
||||
|
||||
[status]
|
||||
separator_open = ""
|
||||
separator_close = ""
|
||||
separator_style = { fg = "reset", bg = "#2a2a37" }
|
||||
|
||||
progress_label = { fg = "#7e9cd8", bg = "#2a2a37", bold = true }
|
||||
progress_normal = { fg = "#2a2a37", bg = "#1f1f28" }
|
||||
progress_error = { fg = "#2a2a37", bg = "#1f1f28" }
|
||||
|
||||
perm_type = { fg = "#98bb6c" }
|
||||
perm_read = { fg = "#e6c384" }
|
||||
perm_write = { fg = "#ff5d62" }
|
||||
perm_exec = { fg = "#7aa89f" }
|
||||
perm_sep = { fg = "#957fb8" }
|
||||
|
||||
|
||||
[pick]
|
||||
border = { fg = "#7fb4ca" }
|
||||
active = { fg = "#957fb8", bold = true }
|
||||
inactive = {}
|
||||
|
||||
[input]
|
||||
border = { fg = "#7fb4ca" }
|
||||
title = {}
|
||||
value = {}
|
||||
selected = { reversed = true }
|
||||
|
||||
[completion]
|
||||
border = { fg = "#7fb4ca" }
|
||||
active = { reversed = true }
|
||||
inactive = {}
|
||||
|
||||
[tasks]
|
||||
border = { fg = "#7fb4ca" }
|
||||
title = {}
|
||||
hovered = { fg = "#957fb8" }
|
||||
|
||||
[which]
|
||||
cols = 2
|
||||
separator = " - "
|
||||
separator_style = { fg = "#727169" }
|
||||
mask = { bg = "#16161d" }
|
||||
rest = { fg = "#727169" }
|
||||
cand = { fg = "#7e9cd8" }
|
||||
desc = { fg = "#54546d" }
|
||||
|
||||
[help]
|
||||
on = { fg = "#7aa89f" }
|
||||
run = { fg = "#957fb8" }
|
||||
desc = {}
|
||||
hovered = { reversed = true, bold = true }
|
||||
footer = { fg = "#1f1f28", bg = "#dcd7ba" }
|
||||
|
||||
[notify]
|
||||
title_info = { fg = "#98bb6c" }
|
||||
title_warn = { fg = "#e6c384" }
|
||||
title_error = { fg = "#ff5d62" }
|
||||
|
||||
[filetype]
|
||||
rules = [
|
||||
# images
|
||||
{ mime = "image/*", fg = "#e6c384" },
|
||||
|
||||
# media
|
||||
{ mime = "{audio,video}/*", fg = "#957fb8" },
|
||||
|
||||
# archives
|
||||
{ mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", fg = "#e46876" },
|
||||
|
||||
# documents
|
||||
{ mime = "application/{pdf,doc,rtf,vnd.*}", fg = "#6a9589" },
|
||||
|
||||
# broken links
|
||||
{ name = "*", is = "orphan", fg = "#c34043" },
|
||||
|
||||
# executables
|
||||
{ name = "*", is = "exec", fg = "#76946a" },
|
||||
|
||||
# fallback
|
||||
{ name = "*", fg = "#dcd7ba" },
|
||||
{ name = "*/", fg = "#7e9cd8" },
|
||||
]
|
||||
BIN
cli/.config/yazi/flavors/kanagawa.yazi/preview.png
Normal file
BIN
cli/.config/yazi/flavors/kanagawa.yazi/preview.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 288 KiB |
448
cli/.config/yazi/flavors/kanagawa.yazi/tmtheme.xml
Normal file
448
cli/.config/yazi/flavors/kanagawa.yazi/tmtheme.xml
Normal file
@@ -0,0 +1,448 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Kanagawa</string>
|
||||
<key>settings</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>background</key>
|
||||
<string>#1F1F28</string>
|
||||
<key>caret</key>
|
||||
<string>#C8C093</string>
|
||||
<key>foreground</key>
|
||||
<string>#DCD7BA</string>
|
||||
<key>invisibles</key>
|
||||
<string>#54546D</string>
|
||||
<key>lineHighlight</key>
|
||||
<string>#2D4F67</string>
|
||||
<key>selection</key>
|
||||
<string>#2D4F67</string>
|
||||
<key>findHighlight</key>
|
||||
<string>#2D4F67</string>
|
||||
<key>selectionBorder</key>
|
||||
<string>#222218</string>
|
||||
<key>gutterForeground</key>
|
||||
<string>#54546D</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Comment</string>
|
||||
<key>scope</key>
|
||||
<string>comment</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#727169</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>String</string>
|
||||
<key>scope</key>
|
||||
<string>string</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#98BB6C</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Number</string>
|
||||
<key>scope</key>
|
||||
<string>constant.numeric</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#D27E99</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Built-in constant</string>
|
||||
<key>scope</key>
|
||||
<string>constant.language</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#FFA066</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>User-defined constant</string>
|
||||
<key>scope</key>
|
||||
<string>constant.character, constant.other</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#E6C384</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable</string>
|
||||
<key>scope</key>
|
||||
<string>variable</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string>#E6C384</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Ruby's @variable</string>
|
||||
<key>scope</key>
|
||||
<string>variable.other.readwrite.instance</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string/>
|
||||
<key>foreground</key>
|
||||
<string>#E6C384</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>String interpolation</string>
|
||||
<key>scope</key>
|
||||
<string>constant.character.escaped, constant.character.escape, string source, string source.ruby</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string/>
|
||||
<key>foreground</key>
|
||||
<string>#C0A36E</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Keyword</string>
|
||||
<key>scope</key>
|
||||
<string>keyword</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#E46876</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage</string>
|
||||
<key>scope</key>
|
||||
<string>storage</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string/>
|
||||
<key>foreground</key>
|
||||
<string>#957FB8</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Storage type</string>
|
||||
<key>scope</key>
|
||||
<string>storage.type</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#957FB8</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Class name</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.class</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#7AA89F</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Inherited class</string>
|
||||
<key>scope</key>
|
||||
<string>entity.other.inherited-class</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#7AA89F</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Function name</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string/>
|
||||
<key>foreground</key>
|
||||
<string>#7E9CD8</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Function argument</string>
|
||||
<key>scope</key>
|
||||
<string>variable.parameter</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#b8b4d0</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Tag name</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.tag</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string/>
|
||||
<key>foreground</key>
|
||||
<string>#7FB4CA</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Tag attribute</string>
|
||||
<key>scope</key>
|
||||
<string>entity.other.attribute-name</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string/>
|
||||
<key>foreground</key>
|
||||
<string>#E6C384</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library function</string>
|
||||
<key>scope</key>
|
||||
<string>support.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string/>
|
||||
<key>foreground</key>
|
||||
<string>#7FB4CA</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library constant</string>
|
||||
<key>scope</key>
|
||||
<string>support.constant</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string/>
|
||||
<key>foreground</key>
|
||||
<string>#7FB4CA</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library class/type</string>
|
||||
<key>scope</key>
|
||||
<string>support.type, support.class</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#7AA89F</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Library variable</string>
|
||||
<key>scope</key>
|
||||
<string>support.other.variable</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#FFA066</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Invalid</string>
|
||||
<key>scope</key>
|
||||
<string>invalid</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>fontStyle</key>
|
||||
<string/>
|
||||
<key>foreground</key>
|
||||
<string>#FF5D62</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Invalid deprecated</string>
|
||||
<key>scope</key>
|
||||
<string>invalid.deprecated</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#717C7C</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>JSON String</string>
|
||||
<key>scope</key>
|
||||
<string>meta.structure.dictionary.json string.quoted.double.json</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#957FB8</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>diff.header</string>
|
||||
<key>scope</key>
|
||||
<string>meta.diff, meta.diff.header</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#7E9CD8</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>diff.deleted</string>
|
||||
<key>scope</key>
|
||||
<string>markup.deleted</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>background</key>
|
||||
<string>#43242B</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>diff.inserted</string>
|
||||
<key>scope</key>
|
||||
<string>markup.inserted</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>background</key>
|
||||
<string>#2B3328</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>diff.changed</string>
|
||||
<key>scope</key>
|
||||
<string>markup.changed</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>background</key>
|
||||
<string>#49443C</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>scope</key>
|
||||
<string>constant.numeric.line-number.find-in-files - match</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#54546D</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>scope</key>
|
||||
<string>entity.name.filename</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#C8C093</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>scope</key>
|
||||
<string>message.error</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#E82424</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>JSON Punctuation</string>
|
||||
<key>scope</key>
|
||||
<string>punctuation.definition.string.begin.json - meta.structure.dictionary.value.json, punctuation.definition.string.end.json - meta.structure.dictionary.value.json</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#9CABCA</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>JSON Structure</string>
|
||||
<key>scope</key>
|
||||
<string>meta.structure.dictionary.json string.quoted.double.json</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#957FB8</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>JSON String</string>
|
||||
<key>scope</key>
|
||||
<string>meta.structure.dictionary.value.json string.quoted.double.json</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#ffffff</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Escape Characters</string>
|
||||
<key>scope</key>
|
||||
<string>constant.character.escape</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#FF5D62</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Regular Expressions</string>
|
||||
<key>scope</key>
|
||||
<string>string.regexp</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#E6C384</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
<key>uuid</key>
|
||||
<string>592FC036-6BB7-4676-A2F5-2894D48C8E33</string>
|
||||
<key>colorSpaceName</key>
|
||||
<string>sRGB</string>
|
||||
<key>semanticClass</key>
|
||||
<string>theme.dark.kanagawa</string>
|
||||
</dict>
|
||||
</plist>
|
||||
51
cli/.config/yazi/keymap.toml
Normal file
51
cli/.config/yazi/keymap.toml
Normal file
@@ -0,0 +1,51 @@
|
||||
[mgr]
|
||||
# Custom mappings
|
||||
prepend_keymap = [
|
||||
#{ on = "<C-a>", run = "echo 'one'", desc = "Single command with `Ctrl + a`" },
|
||||
# This is for drag and drop support of terminal filemanger (works also with signal and other applications)
|
||||
{ on = [ "<C-n>" ], run = '''shell 'xdragon -x -T "$1"' --confirm''' },
|
||||
|
||||
# Lazygit in yazi
|
||||
{on = [ "g", "i" ],run = "plugin lazygit",desc = "run lazygit"},
|
||||
|
||||
# Chmod in yazi
|
||||
{on = [ "c", "m" ],run = "plugin chmod",desc = "Chmod on selected files"},
|
||||
|
||||
# Recover the last delted file
|
||||
{ on = ["u"], run = "plugin restore", desc = "Restore last deleted files/folders" },
|
||||
|
||||
# Get the size of the cwd
|
||||
{ on = [ "\\", "s" ], run = "plugin what-size", desc = "Calc size of selection or cwd" },
|
||||
|
||||
# Bookmark support
|
||||
{on = [ "m" ],run = "plugin bookmarks save",desc = "Save current position as a bookmark"},
|
||||
{on = [ "'" ],run = "plugin bookmarks jump",desc = "Jump to a bookmark"},
|
||||
{on = [ "b", "d" ],run = "plugin bookmarks delete",desc = "Delete a bookmark"},
|
||||
{on = [ "b", "D" ],run = "plugin bookmarks delete_all",desc = "Delete all bookmarks"},
|
||||
|
||||
# new linemodes
|
||||
{on = [ "\\", "n", "m" ],run = "linemode mtime",desc = "Modified time"},
|
||||
{on = [ "\\", "n", "n" ],run = "linemode none",desc = "no time"},
|
||||
{on = [ "\\", "n", "b" ],run = "linemode btime",desc = "Birth time"},
|
||||
]
|
||||
|
||||
# More mappings
|
||||
append_keymap = [
|
||||
# Default jumping to stuff
|
||||
{ on = [ "g", "s" ], run = "cd ~/synced", desc = "Go to Synced folder" },
|
||||
{ on = [ "g", "u" ], run = "cd ~/projects/university", desc = "Go to University folder" },
|
||||
{ on = [ "g", "n" ], run = "cd ~/configuration", desc = "Go to config folder" },
|
||||
{ on = [ "g", "p" ], run = "cd ~/projects", desc = "Go to projects folder" },
|
||||
{ on = [ "g", "w" ], run = "cd ~/workspace_local", desc = "Go to workspace" },
|
||||
{ on = [ "g", "e" ], run = "cd ~/configuration/dotfiles", desc = "Go to dotfilEs" },
|
||||
{ on = [ "g", "r" ], run = "cd /", desc = "Go to root" },
|
||||
{ on = [ "g", "b" ], run = "cd ~/synced/docs/books", desc = "Go to books" },
|
||||
{ on = [ "g", "l" ], run = "cd ~/.local", desc = "Go to Local" },
|
||||
{ on = [ "g", "v" ], run = "cd ~/synced/webdav_folder", desc = "Go to Webdav" },
|
||||
{ on = [ "g", "o" ], run = "cd ~/Documents", desc = "Go to Docs" },
|
||||
{ on = [ "g", "a" ], run = "cd ~/.cache", desc = "Go to Cache" },
|
||||
{ on = [ "g", "t" ], run = "cd ~/.local/share/Trash", desc = "Go to Trash" },
|
||||
|
||||
{ on = [ "g", "U" ], run = "cd ~/projects/university/pdfs", desc = "Go to Uni PDF" },
|
||||
]
|
||||
|
||||
29
cli/.config/yazi/package.toml
Normal file
29
cli/.config/yazi/package.toml
Normal file
@@ -0,0 +1,29 @@
|
||||
[[plugin.deps]]
|
||||
use = "Lil-Dank/lazygit"
|
||||
rev = "7a08a09"
|
||||
hash = "a1fa2b3e1826c3a34804ea8c548e9f80"
|
||||
|
||||
[[plugin.deps]]
|
||||
use = "yazi-rs/plugins:chmod"
|
||||
rev = "b12a9ab"
|
||||
hash = "2f1053f89d1a301a648ab181d0948e38"
|
||||
|
||||
[[plugin.deps]]
|
||||
use = "boydaihungst/restore"
|
||||
rev = "328dd88"
|
||||
hash = "ad406e4a5ada589211e6ffe8bad3c983"
|
||||
|
||||
[[plugin.deps]]
|
||||
use = "pirafrank/what-size"
|
||||
rev = "f1c6b69"
|
||||
hash = "6e789212eb41d937bab04877ca361099"
|
||||
|
||||
[[plugin.deps]]
|
||||
use = "dedukun/bookmarks"
|
||||
rev = "a70648a"
|
||||
hash = "b836fb264381f35dec79930438a906d5"
|
||||
|
||||
[[flavor.deps]]
|
||||
use = "dangooddd/kanagawa"
|
||||
rev = "d98f0c3"
|
||||
hash = "cada780385f75abbcfbf5343256b441"
|
||||
19
cli/.config/yazi/plugins/bookmarks.yazi/LICENSE
Normal file
19
cli/.config/yazi/plugins/bookmarks.yazi/LICENSE
Normal file
@@ -0,0 +1,19 @@
|
||||
Copyright (c) 2024 dedukun
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
146
cli/.config/yazi/plugins/bookmarks.yazi/README.md
Normal file
146
cli/.config/yazi/plugins/bookmarks.yazi/README.md
Normal file
@@ -0,0 +1,146 @@
|
||||
# bookmarks.yazi
|
||||
|
||||
A [Yazi](https://github.com/sxyazi/yazi) plugin that adds the basic functionality of [vi-like marks](https://neovim.io/doc/user/motion.html#mark-motions).
|
||||
|
||||
https://github.com/dedukun/bookmarks.yazi/assets/25795432/9a9fe345-dd06-442e-99f1-8475ab22fad5
|
||||
|
||||
## Requirements
|
||||
|
||||
- [Yazi](https://github.com/sxyazi/yazi) v25.4.8+
|
||||
|
||||
## Features
|
||||
|
||||
- Create/delete bookmarks
|
||||
- Custom Notifications
|
||||
- `''` to go back to the previous folder
|
||||
- Bookmarks persistence
|
||||
|
||||
## Installation
|
||||
|
||||
```sh
|
||||
ya pack -a dedukun/bookmarks
|
||||
```
|
||||
|
||||
## Import/Export bookmarks
|
||||
|
||||
This plugin uses [Yazi's DDS](https://yazi-rs.github.io/docs/dds/) for bookmark persistence, as such,
|
||||
the bookmarks are saved in DDS's state file (`~/.local/state/yazi/.dds` on Linux and `C:\Users\USERNAME\AppData\Roaming\yazi\state\.dds` on Windows)
|
||||
|
||||
**_NOTE:_** This system may be used by other plugins that you have installed, so this file might have more data than just the bookmarks.
|
||||
|
||||
## Configuration
|
||||
|
||||
Add this to your `keymap.toml`:
|
||||
|
||||
```toml
|
||||
[[manager.prepend_keymap]]
|
||||
on = [ "m" ]
|
||||
run = "plugin bookmarks save"
|
||||
desc = "Save current position as a bookmark"
|
||||
|
||||
[[manager.prepend_keymap]]
|
||||
on = [ "'" ]
|
||||
run = "plugin bookmarks jump"
|
||||
desc = "Jump to a bookmark"
|
||||
|
||||
[[manager.prepend_keymap]]
|
||||
on = [ "b", "d" ]
|
||||
run = "plugin bookmarks delete"
|
||||
desc = "Delete a bookmark"
|
||||
|
||||
[[manager.prepend_keymap]]
|
||||
on = [ "b", "D" ]
|
||||
run = "plugin bookmarks delete_all"
|
||||
desc = "Delete all bookmarks"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Additionally there are configurations that can be done using the plugin's `setup` function in Yazi's `init.lua`, i.e. `~/.config/yazi/init.lua`.
|
||||
The following are the default configurations:
|
||||
|
||||
```lua
|
||||
-- ~/.config/yazi/init.lua
|
||||
require("bookmarks"):setup({
|
||||
last_directory = { enable = false, persist = false, mode="dir" },
|
||||
persist = "none",
|
||||
desc_format = "full",
|
||||
file_pick_mode = "hover",
|
||||
custom_desc_input = false,
|
||||
notify = {
|
||||
enable = false,
|
||||
timeout = 1,
|
||||
message = {
|
||||
new = "New bookmark '<key>' -> '<folder>'",
|
||||
delete = "Deleted bookmark in '<key>'",
|
||||
delete_all = "Deleted all bookmarks",
|
||||
},
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
### `last_directory`
|
||||
|
||||
When enabled, a new bookmark is automatically created in `'` which allows the user to jump back to
|
||||
the last directory.
|
||||
|
||||
There's also the option to enable persistence to this automatic bookmark.
|
||||
|
||||
Finally, there's a `mode` option with the following options:
|
||||
|
||||
| Value | Description |
|
||||
| ------ | ------------------------------------------------------------ |
|
||||
| `jump` | It saves the position before the last used mark |
|
||||
| `mark` | It saves the last created mark |
|
||||
| `dir` | Default, it saves the last visited directory (old behaviour) |
|
||||
|
||||
### `persist`
|
||||
|
||||
When enabled the bookmarks will persist, i.e. if you close and reopen Yazi they will still be
|
||||
present.
|
||||
|
||||
There are three possible values for this option:
|
||||
|
||||
| Value | Description |
|
||||
| ------ | -------------------------------------------------------------------------------------------------------------------- |
|
||||
| `none` | The default value, i.e., no persistance |
|
||||
| `all` | All the bookmarks are saved in persistent memory |
|
||||
| `vim` | This mode emulates the vim global marks, i.e., only the bookmarks in upper case (A-Z) are saved to persistent memory |
|
||||
|
||||
### `desc_format`
|
||||
|
||||
The format for the bookmark description.
|
||||
|
||||
There are two possible values for this option:
|
||||
|
||||
| Value | Description |
|
||||
| -------- | ----------------------------------------------------------------------------------------------- |
|
||||
| `full` | The default, it shows the full path of the bookmark, i.e., the parent folder + the hovered file |
|
||||
| `parent` | Only shows the parent folder of the bookmark |
|
||||
|
||||
### `file_pick_mode`
|
||||
|
||||
The mode for choosing which directory to bookmark.
|
||||
|
||||
There are two possible values for this option:
|
||||
|
||||
| Value | Description |
|
||||
| -------- | ------------------------------------------------------------------- |
|
||||
| `hover` | The default, it uses the path of the hovered file for new bookmarks |
|
||||
| `parent` | Uses the path of the parent folder for new bookmarks |
|
||||
|
||||
### `notify`
|
||||
|
||||
When enabled, notifications will be shown when the user creates a new bookmark and deletes one or
|
||||
all saved bookmarks.
|
||||
|
||||
By default the notification has a 1 second timeout that can be changed with `notify.timeout`.
|
||||
|
||||
Furthermore, you can customize the notification messages with `notify.message`.
|
||||
For the `new` and `delete` messages, the `<key>` and `<folder>` keywords can be used, which will be replaced by the respective new/deleted bookmark's associated key and folder.
|
||||
|
||||
### `custom_desc_input`
|
||||
|
||||
When enabled, user can change description for new bookmark before it is saved.
|
||||
|
||||
By default the custom description input is filled with path.
|
||||
383
cli/.config/yazi/plugins/bookmarks.yazi/main.lua
Normal file
383
cli/.config/yazi/plugins/bookmarks.yazi/main.lua
Normal file
@@ -0,0 +1,383 @@
|
||||
--- @since 25.4.8
|
||||
-- stylua: ignore
|
||||
local SUPPORTED_KEYS = {
|
||||
{ on = "0"}, { on = "1"}, { on = "2"}, { on = "3"}, { on = "4"},
|
||||
{ on = "5"}, { on = "6"}, { on = "7"}, { on = "8"}, { on = "9"},
|
||||
{ on = "A"}, { on = "B"}, { on = "C"}, { on = "D"}, { on = "E"},
|
||||
{ on = "F"}, { on = "G"}, { on = "H"}, { on = "I"}, { on = "J"},
|
||||
{ on = "K"}, { on = "L"}, { on = "M"}, { on = "N"}, { on = "O"},
|
||||
{ on = "P"}, { on = "Q"}, { on = "R"}, { on = "S"}, { on = "T"},
|
||||
{ on = "U"}, { on = "V"}, { on = "W"}, { on = "X"}, { on = "Y"}, { on = "Z"},
|
||||
{ on = "a"}, { on = "b"}, { on = "c"}, { on = "d"}, { on = "e"},
|
||||
{ on = "f"}, { on = "g"}, { on = "h"}, { on = "i"}, { on = "j"},
|
||||
{ on = "k"}, { on = "l"}, { on = "m"}, { on = "n"}, { on = "o"},
|
||||
{ on = "p"}, { on = "q"}, { on = "r"}, { on = "s"}, { on = "t"},
|
||||
{ on = "u"}, { on = "v"}, { on = "w"}, { on = "x"}, { on = "y"}, { on = "z"},
|
||||
}
|
||||
|
||||
local _send_notification = ya.sync(
|
||||
function(state, message)
|
||||
ya.notify {
|
||||
title = "Bookmarks",
|
||||
content = message,
|
||||
timeout = state.notify.timeout,
|
||||
}
|
||||
end
|
||||
)
|
||||
|
||||
local _get_real_index = ya.sync(function(state, idx)
|
||||
for key, value in pairs(state.bookmarks) do
|
||||
if value.on == SUPPORTED_KEYS[idx].on then
|
||||
return key
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end)
|
||||
|
||||
local _get_bookmark_file = ya.sync(function(state)
|
||||
local folder = cx.active.current
|
||||
|
||||
if state.file_pick_mode == "parent" or not folder.hovered then
|
||||
return { url = folder.cwd, is_parent = true }
|
||||
end
|
||||
return { url = folder.hovered.url, is_parent = false }
|
||||
end)
|
||||
|
||||
local _generate_description = ya.sync(function(state, file)
|
||||
-- if this is true, we don't have information about the folder, so just return the folder url
|
||||
if file.is_parent then
|
||||
return tostring(file.url)
|
||||
end
|
||||
|
||||
if state.desc_format == "parent" then
|
||||
return tostring(file.url.parent)
|
||||
end
|
||||
-- full description
|
||||
return tostring(file.url)
|
||||
end)
|
||||
|
||||
local _load_state = ya.sync(function(state)
|
||||
ps.sub_remote("@bookmarks", function(body)
|
||||
if not state.bookmarks and body then
|
||||
state.bookmarks = {}
|
||||
for _, value in pairs(body) do
|
||||
table.insert(state.bookmarks, value)
|
||||
end
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
local _save_state = ya.sync(function(state, bookmarks)
|
||||
if not bookmarks then
|
||||
ps.pub_to(0, "@bookmarks", nil)
|
||||
return
|
||||
end
|
||||
|
||||
local save_state = {}
|
||||
if state.persist == "all" then
|
||||
save_state = bookmarks
|
||||
else -- VIM mode
|
||||
local idx = 1
|
||||
for _, value in pairs(bookmarks) do
|
||||
-- Only save bookmarks in upper case keys
|
||||
if string.match(value.on, "%u") then
|
||||
save_state[idx] = value
|
||||
idx = idx + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
ps.pub_to(0, "@bookmarks", save_state)
|
||||
end)
|
||||
|
||||
local _load_last = ya.sync(function(state)
|
||||
ps.sub_remote("@bookmarks-last", function(body)
|
||||
state.last_dir = body
|
||||
|
||||
if state.last_mode ~= "dir" then
|
||||
ps.unsub_remote("@bookmarks-last")
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
local _save_last = ya.sync(function(state, persist, imediate)
|
||||
local file = _get_bookmark_file()
|
||||
|
||||
local curr = {
|
||||
on = "'",
|
||||
desc = _generate_description(file),
|
||||
path = tostring(file.url),
|
||||
is_parent = file.is_parent,
|
||||
}
|
||||
|
||||
if imediate then
|
||||
state.curr_dir = nil
|
||||
state.last_dir = curr
|
||||
else
|
||||
state.last_dir = state.curr_dir
|
||||
state.curr_dir = curr
|
||||
end
|
||||
|
||||
if persist and state.last_dir then
|
||||
ps.pub_to(0, "@bookmarks-last", state.last_dir)
|
||||
end
|
||||
end)
|
||||
|
||||
local get_last_mode = ya.sync(function(state) return state.last_mode end)
|
||||
|
||||
local save_last_dir = ya.sync(function(state)
|
||||
ps.sub("cd", function() _save_last(state.last_persist, false) end)
|
||||
|
||||
ps.sub("hover", function()
|
||||
local file = _get_bookmark_file()
|
||||
state.curr_dir.desc = _generate_description(file)
|
||||
state.curr_dir.path = tostring(file.url)
|
||||
end)
|
||||
end)
|
||||
|
||||
local save_last_jump = ya.sync(function(state) _save_last(state.last_persist, true) end)
|
||||
|
||||
local save_last_mark = ya.sync(function(state) _save_last(state.last_persist, true) end)
|
||||
|
||||
local _is_custom_desc_input_enabled = ya.sync(function(state) return state.custom_desc_input end)
|
||||
|
||||
-- ***********************************************
|
||||
-- **============= C O M M A N D S =============**
|
||||
-- ***********************************************
|
||||
|
||||
local save_bookmark = ya.sync(function(state, idx, custom_desc)
|
||||
local file = _get_bookmark_file()
|
||||
|
||||
state.bookmarks = state.bookmarks or {}
|
||||
|
||||
local _idx = _get_real_index(idx)
|
||||
if not _idx then
|
||||
_idx = #state.bookmarks + 1
|
||||
end
|
||||
|
||||
local bookmark_desc = tostring(file.url)
|
||||
if custom_desc then
|
||||
bookmark_desc = tostring(custom_desc)
|
||||
end
|
||||
|
||||
state.bookmarks[_idx] = {
|
||||
on = SUPPORTED_KEYS[idx].on,
|
||||
desc = bookmark_desc,
|
||||
path = tostring(file.url),
|
||||
is_parent = file.is_parent,
|
||||
}
|
||||
|
||||
-- Custom sorting function
|
||||
table.sort(state.bookmarks, function(a, b)
|
||||
local key_a, key_b = a.on, b.on
|
||||
|
||||
-- Numbers first
|
||||
if key_a:match("%d") and not key_b:match("%d") then
|
||||
return true
|
||||
elseif key_b:match("%d") and not key_a:match("%d") then
|
||||
return false
|
||||
end
|
||||
|
||||
-- Uppercase before lowercase
|
||||
if key_a:match("%u") and key_b:match("%l") then
|
||||
return true
|
||||
elseif key_b:match("%u") and key_a:match("%l") then
|
||||
return false
|
||||
end
|
||||
|
||||
-- Regular alphabetical sorting
|
||||
return key_a < key_b
|
||||
end)
|
||||
|
||||
if state.persist then
|
||||
_save_state(state.bookmarks)
|
||||
end
|
||||
|
||||
if state.notify and state.notify.enable then
|
||||
local message = state.notify.message.new
|
||||
message, _ = message:gsub("<key>", state.bookmarks[_idx].on)
|
||||
message, _ = message:gsub("<folder>", state.bookmarks[_idx].desc)
|
||||
_send_notification(message)
|
||||
end
|
||||
|
||||
if get_last_mode() == "mark" then
|
||||
save_last_mark()
|
||||
end
|
||||
end)
|
||||
|
||||
local all_bookmarks = ya.sync(function(state, append_last_dir)
|
||||
local bookmarks = {}
|
||||
|
||||
if state.bookmarks then
|
||||
for _, value in pairs(state.bookmarks) do
|
||||
table.insert(bookmarks, value)
|
||||
end
|
||||
end
|
||||
|
||||
if append_last_dir and state.last_dir then
|
||||
table.insert(bookmarks, state.last_dir)
|
||||
end
|
||||
|
||||
return bookmarks
|
||||
end)
|
||||
|
||||
local delete_bookmark = ya.sync(function(state, idx)
|
||||
if state.notify and state.notify.enable then
|
||||
local message = state.notify.message.delete
|
||||
message, _ = message:gsub("<key>", state.bookmarks[idx].on)
|
||||
message, _ = message:gsub("<folder>", state.bookmarks[idx].desc)
|
||||
_send_notification(message)
|
||||
end
|
||||
|
||||
table.remove(state.bookmarks, idx)
|
||||
|
||||
if state.persist then
|
||||
_save_state(state.bookmarks)
|
||||
end
|
||||
end)
|
||||
|
||||
local delete_all_bookmarks = ya.sync(function(state)
|
||||
state.bookmarks = nil
|
||||
|
||||
if state.persist then
|
||||
_save_state(nil)
|
||||
end
|
||||
|
||||
if state.notify and state.notify.enable then
|
||||
_send_notification(state.notify.message.delete_all)
|
||||
end
|
||||
end)
|
||||
|
||||
return {
|
||||
entry = function(_, job)
|
||||
local action = job.args[1]
|
||||
if not action then
|
||||
return
|
||||
end
|
||||
|
||||
if action == "save" then
|
||||
local key = ya.which { cands = SUPPORTED_KEYS, silent = true }
|
||||
if key then
|
||||
if _is_custom_desc_input_enabled() then
|
||||
local value, event = ya.input {
|
||||
title = "Save with custom description:",
|
||||
position = { "top-center", y = 3, w = 60 },
|
||||
value = tostring(_get_bookmark_file().url),
|
||||
}
|
||||
if event ~= 1 then
|
||||
return
|
||||
end
|
||||
|
||||
save_bookmark(key, value)
|
||||
return
|
||||
end
|
||||
save_bookmark(key)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
if action == "delete_all" then
|
||||
return delete_all_bookmarks()
|
||||
end
|
||||
|
||||
local bookmarks = all_bookmarks(action == "jump")
|
||||
local selected = #bookmarks > 0 and ya.which { cands = bookmarks }
|
||||
if not selected then
|
||||
return
|
||||
end
|
||||
|
||||
if action == "jump" then
|
||||
if get_last_mode() == "jump" then
|
||||
save_last_jump()
|
||||
end
|
||||
|
||||
if bookmarks[selected].is_parent then
|
||||
ya.mgr_emit("cd", { bookmarks[selected].path })
|
||||
else
|
||||
ya.mgr_emit("reveal", { bookmarks[selected].path })
|
||||
end
|
||||
elseif action == "delete" then
|
||||
delete_bookmark(selected)
|
||||
end
|
||||
end,
|
||||
setup = function(state, args)
|
||||
if not args then
|
||||
return
|
||||
end
|
||||
|
||||
if type(args.last_directory) == "table" then
|
||||
if args.last_directory.enable then
|
||||
if args.last_directory.mode == "mark" then
|
||||
state.last_persist = args.last_directory.persist
|
||||
state.last_mode = "mark"
|
||||
elseif args.last_directory.mode == "jump" then
|
||||
state.last_persist = args.last_directory.persist
|
||||
state.last_mode = "jump"
|
||||
elseif args.last_directory.mode == "dir" then
|
||||
state.last_persist = args.last_directory.persist
|
||||
state.last_mode = "dir"
|
||||
save_last_dir()
|
||||
else
|
||||
-- default
|
||||
state.last_persist = args.last_directory.persist
|
||||
state.last_mode = "dir"
|
||||
save_last_dir()
|
||||
end
|
||||
|
||||
if args.last_directory.persist then
|
||||
_load_last()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if args.persist == "all" or args.persist == "vim" then
|
||||
state.persist = args.persist
|
||||
_load_state()
|
||||
end
|
||||
|
||||
if args.desc_format == "parent" then
|
||||
state.desc_format = "parent"
|
||||
else
|
||||
state.desc_format = "full"
|
||||
end
|
||||
|
||||
if args.file_pick_mode == "parent" then
|
||||
state.file_pick_mode = "parent"
|
||||
else
|
||||
state.file_pick_mode = "hover"
|
||||
end
|
||||
|
||||
if type(args.custom_desc_input) == "boolean" then
|
||||
state.custom_desc_input = args.custom_desc_input
|
||||
end
|
||||
|
||||
state.notify = {
|
||||
enable = false,
|
||||
timeout = 1,
|
||||
message = {
|
||||
new = "New bookmark '<key>' -> '<folder>'",
|
||||
delete = "Deleted bookmark in '<key>'",
|
||||
delete_all = "Deleted all bookmarks",
|
||||
},
|
||||
}
|
||||
if type(args.notify) == "table" then
|
||||
if type(args.notify.enable) == "boolean" then
|
||||
state.notify.enable = args.notify.enable
|
||||
end
|
||||
if type(args.notify.timeout) == "number" then
|
||||
state.notify.timeout = args.notify.timeout
|
||||
end
|
||||
if type(args.notify.message) == "table" then
|
||||
if type(args.notify.message.new) == "string" then
|
||||
state.notify.message.new = args.notify.message.new
|
||||
end
|
||||
if type(args.notify.message.delete) == "string" then
|
||||
state.notify.message.delete = args.notify.message.delete
|
||||
end
|
||||
if type(args.notify.message.delete_all) == "string" then
|
||||
state.notify.message.delete_all = args.notify.message.delete_all
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
}
|
||||
21
cli/.config/yazi/plugins/chmod.yazi/LICENSE
Normal file
21
cli/.config/yazi/plugins/chmod.yazi/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2023 yazi-rs
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
28
cli/.config/yazi/plugins/chmod.yazi/README.md
Normal file
28
cli/.config/yazi/plugins/chmod.yazi/README.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# chmod.yazi
|
||||
|
||||
Execute `chmod` on the selected files to change their mode. This plugin is only available on Unix platforms since it relies on [`chmod(2)`](https://man7.org/linux/man-pages/man2/chmod.2.html).
|
||||
|
||||
https://github.com/yazi-rs/plugins/assets/17523360/7aa3abc2-d057-498c-8473-a6282c59c464
|
||||
|
||||
## Installation
|
||||
|
||||
```sh
|
||||
ya pack -a yazi-rs/plugins:chmod
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
Add this to your `~/.config/yazi/keymap.toml`:
|
||||
|
||||
```toml
|
||||
[[manager.prepend_keymap]]
|
||||
on = [ "c", "m" ]
|
||||
run = "plugin chmod"
|
||||
desc = "Chmod on selected files"
|
||||
```
|
||||
|
||||
Make sure the <kbd>c</kbd> => <kbd>m</kbd> key is not used elsewhere.
|
||||
|
||||
## License
|
||||
|
||||
This plugin is MIT-licensed. For more information check the [LICENSE](LICENSE) file.
|
||||
41
cli/.config/yazi/plugins/chmod.yazi/main.lua
Normal file
41
cli/.config/yazi/plugins/chmod.yazi/main.lua
Normal file
@@ -0,0 +1,41 @@
|
||||
--- @since 25.2.26
|
||||
|
||||
local selected_or_hovered = ya.sync(function()
|
||||
local tab, paths = cx.active, {}
|
||||
for _, u in pairs(tab.selected) do
|
||||
paths[#paths + 1] = tostring(u)
|
||||
end
|
||||
if #paths == 0 and tab.current.hovered then
|
||||
paths[1] = tostring(tab.current.hovered.url)
|
||||
end
|
||||
return paths
|
||||
end)
|
||||
|
||||
return {
|
||||
entry = function()
|
||||
ya.mgr_emit("escape", { visual = true })
|
||||
|
||||
local urls = selected_or_hovered()
|
||||
if #urls == 0 then
|
||||
return ya.notify { title = "Chmod", content = "No file selected", level = "warn", timeout = 5 }
|
||||
end
|
||||
|
||||
local value, event = ya.input {
|
||||
title = "Chmod:",
|
||||
position = { "top-center", y = 3, w = 40 },
|
||||
}
|
||||
if event ~= 1 then
|
||||
return
|
||||
end
|
||||
|
||||
local status, err = Command("chmod"):arg(value):args(urls):spawn():wait()
|
||||
if not status or not status.success then
|
||||
ya.notify {
|
||||
title = "Chmod",
|
||||
content = string.format("Chmod on selected files failed, error: %s", status and status.code or err),
|
||||
level = "error",
|
||||
timeout = 5,
|
||||
}
|
||||
end
|
||||
end,
|
||||
}
|
||||
21
cli/.config/yazi/plugins/lazygit.yazi/LICENSE
Normal file
21
cli/.config/yazi/plugins/lazygit.yazi/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 Darius
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
29
cli/.config/yazi/plugins/lazygit.yazi/README.md
Normal file
29
cli/.config/yazi/plugins/lazygit.yazi/README.md
Normal file
@@ -0,0 +1,29 @@
|
||||
# lazygit.yazi
|
||||
Plugin for [Yazi](https://github.com/sxyazi/yazi) to manage git repos with [lazygit](https://github.com/jesseduffield/lazygit)
|
||||
## Dependencies
|
||||
Make sure [lazygit](https://github.com/jesseduffield/lazygit) is installed and in your `PATH`.
|
||||
## Installation
|
||||
|
||||
### Using `ya pack`
|
||||
```
|
||||
ya pack -a Lil-Dank/lazygit
|
||||
```
|
||||
|
||||
### Manual
|
||||
**Linux/macOS**
|
||||
```
|
||||
git clone https://github.com/Lil-Dank/lazygit.yazi.git ~/.config/yazi/plugins/lazygit.yazi
|
||||
```
|
||||
**Windows**
|
||||
```
|
||||
git clone https://github.com/Lil-Dank/lazygit.yazi.git %AppData%\yazi\config\plugins\lazygit.yazi
|
||||
```
|
||||
## Configuration
|
||||
add this to your **keymap.toml** file
|
||||
```toml
|
||||
[[manager.prepend_keymap]]
|
||||
on = [ "g", "i" ]
|
||||
run = "plugin lazygit"
|
||||
desc = "run lazygit"
|
||||
```
|
||||
you can customize the keybinding however you like. Please refer to the [keymap.toml](https://yazi-rs.github.io/docs/configuration/keymap) documentation
|
||||
31
cli/.config/yazi/plugins/lazygit.yazi/main.lua
Normal file
31
cli/.config/yazi/plugins/lazygit.yazi/main.lua
Normal file
@@ -0,0 +1,31 @@
|
||||
return {
|
||||
entry = function()
|
||||
local output = Command("git"):arg("status"):stderr(Command.PIPED):output()
|
||||
if output.stderr ~= "" then
|
||||
ya.notify({
|
||||
title = "lazygit",
|
||||
content = "Not in a git directory\nError: " .. output.stderr,
|
||||
level = "warn",
|
||||
timeout = 5,
|
||||
})
|
||||
else
|
||||
permit = ya.hide()
|
||||
local output, err_code = Command("lazygit"):stderr(Command.PIPED):output()
|
||||
if err_code ~= nil then
|
||||
ya.notify({
|
||||
title = "Failed to run lazygit command",
|
||||
content = "Status: " .. err_code,
|
||||
level = "error",
|
||||
timeout = 5,
|
||||
})
|
||||
elseif not output.status.success then
|
||||
ya.notify({
|
||||
title = "lazygit in" .. cwd .. "failed, exit code " .. output.status.code,
|
||||
content = output.stderr,
|
||||
level = "error",
|
||||
timeout = 5,
|
||||
})
|
||||
end
|
||||
end
|
||||
end,
|
||||
}
|
||||
661
cli/.config/yazi/plugins/restore.yazi/LICENSE
Normal file
661
cli/.config/yazi/plugins/restore.yazi/LICENSE
Normal file
@@ -0,0 +1,661 @@
|
||||
GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
Version 3, 19 November 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU Affero General Public License is a free, copyleft license for
|
||||
software and other kinds of works, specifically designed to ensure
|
||||
cooperation with the community in the case of network server software.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
our General Public Licenses are intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
Developers that use our General Public Licenses protect your rights
|
||||
with two steps: (1) assert copyright on the software, and (2) offer
|
||||
you this License which gives you legal permission to copy, distribute
|
||||
and/or modify the software.
|
||||
|
||||
A secondary benefit of defending all users' freedom is that
|
||||
improvements made in alternate versions of the program, if they
|
||||
receive widespread use, become available for other developers to
|
||||
incorporate. Many developers of free software are heartened and
|
||||
encouraged by the resulting cooperation. However, in the case of
|
||||
software used on network servers, this result may fail to come about.
|
||||
The GNU General Public License permits making a modified version and
|
||||
letting the public access it on a server without ever releasing its
|
||||
source code to the public.
|
||||
|
||||
The GNU Affero General Public License is designed specifically to
|
||||
ensure that, in such cases, the modified source code becomes available
|
||||
to the community. It requires the operator of a network server to
|
||||
provide the source code of the modified version running there to the
|
||||
users of that server. Therefore, public use of a modified version, on
|
||||
a publicly accessible server, gives the public access to the source
|
||||
code of the modified version.
|
||||
|
||||
An older license, called the Affero General Public License and
|
||||
published by Affero, was designed to accomplish similar goals. This is
|
||||
a different license, not a version of the Affero GPL, but Affero has
|
||||
released a new version of the Affero GPL which permits relicensing under
|
||||
this license.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU Affero General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Remote Network Interaction; Use with the GNU General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, if you modify the
|
||||
Program, your modified version must prominently offer all users
|
||||
interacting with it remotely through a computer network (if your version
|
||||
supports such interaction) an opportunity to receive the Corresponding
|
||||
Source of your version by providing access to the Corresponding Source
|
||||
from a network server at no charge, through some standard or customary
|
||||
means of facilitating copying of software. This Corresponding Source
|
||||
shall include the Corresponding Source for any work covered by version 3
|
||||
of the GNU General Public License that is incorporated pursuant to the
|
||||
following paragraph.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the work with which it is combined will remain governed by version
|
||||
3 of the GNU General Public License.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU Affero General Public License from time to time. Such new versions
|
||||
will be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU Affero General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU Affero General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU Affero General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published
|
||||
by the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If your software can interact with users remotely through a computer
|
||||
network, you should also make sure that it provides a way for users to
|
||||
get its source. For example, if your program is a web application, its
|
||||
interface could display a "Source" link that leads users to an archive
|
||||
of the code. There are many ways you could offer source, and different
|
||||
solutions will be better for different programs; see section 13 for the
|
||||
specific requirements.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU AGPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
86
cli/.config/yazi/plugins/restore.yazi/README.md
Normal file
86
cli/.config/yazi/plugins/restore.yazi/README.md
Normal file
@@ -0,0 +1,86 @@
|
||||
# restore.yazi
|
||||
|
||||
<!--toc:start-->
|
||||
|
||||
- [restore.yazi](#restoreyazi)
|
||||
- [Requirements](#requirements)
|
||||
- [Installation](#installation)
|
||||
- [Linux/MacOS](#linuxmacos)
|
||||
- [Usage](#usage)
|
||||
<!--toc:end-->
|
||||
|
||||
[Yazi](https://github.com/sxyazi/yazi) plugin to restore/recover latest deleted files/folders.
|
||||
|
||||
## Requirements
|
||||
|
||||
- [yazi >= v25.2.7](https://github.com/sxyazi/yazi)
|
||||
- [trash-cli](https://github.com/andreafrancia/trash-cli)
|
||||
- If you have `Can't Get Trash Directory` error and running `trash-cli --volumes`
|
||||
in terminal throw `AttributeError: 'PrintVolumesList' object has no attribute 'run_action'`.
|
||||
Remove the old version of trash-cli and install newer version [How to install](https://github.com/andreafrancia/trash-cli?tab=readme-ov-file#the-easy-way).
|
||||
|
||||
## Installation
|
||||
|
||||
### Linux
|
||||
|
||||
```sh
|
||||
git clone https://github.com/boydaihungst/restore.yazi ~/.config/yazi/plugins/restore.yazi
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
```sh
|
||||
ya pack -a boydaihungst/restore
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
1. Key binding
|
||||
|
||||
- Add this to your `keymap.toml`:
|
||||
|
||||
```toml
|
||||
[manager]
|
||||
keymap = [
|
||||
{ on = "u", run = "plugin restore", desc = "Restore last deleted files/folders" },
|
||||
# or use "d + u" like me
|
||||
{ on = ["d", "u"], run = "plugin restore", desc = "Restore last deleted files/folders" },
|
||||
# ... Other keymaps
|
||||
]
|
||||
```
|
||||
|
||||
2. Configuration (Optional)
|
||||
|
||||
- Default:
|
||||
|
||||
```lua
|
||||
require("restore"):setup({
|
||||
-- Set the position for confirm and overwrite dialogs.
|
||||
-- don't forget to set height: `h = xx`
|
||||
-- https://yazi-rs.github.io/docs/plugins/utils/#ya.input
|
||||
position = { "center", w = 70, h = 40 }, -- Optional
|
||||
|
||||
-- Show confirm dialog before restore.
|
||||
-- NOTE: even if set this to false, overwrite dialog still pop up
|
||||
show_confirm = true, -- Optional
|
||||
|
||||
-- colors for confirm and overwrite dialogs
|
||||
theme = { -- Optional
|
||||
-- Default using style from your flavor or theme.lua -> [confirm] -> title.
|
||||
-- If you edit flavor or theme.lua you can add more style than just color.
|
||||
-- Example in theme.lua -> [confirm]: title = { fg = "blue", bg = "green" }
|
||||
title = "blue", -- Optional. This valid has higher priority than flavor/theme.lua
|
||||
|
||||
-- Default using style from your flavor or theme.lua -> [confirm] -> content
|
||||
-- Sample logic as title above
|
||||
header = "green", -- Optional. This valid has higher priority than flavor/theme.lua
|
||||
|
||||
-- header color for overwrite dialog
|
||||
-- Default using color "yellow"
|
||||
header_warning = "yellow", -- Optional
|
||||
-- Default using style from your flavor or theme.lua -> [confirm] -> list
|
||||
-- Sample logic as title and header above
|
||||
list_item = { odd = "blue", even = "blue" }, -- Optional. This valid has higher priority than flavor/theme.lua
|
||||
},
|
||||
})
|
||||
```
|
||||
269
cli/.config/yazi/plugins/restore.yazi/main.lua
Normal file
269
cli/.config/yazi/plugins/restore.yazi/main.lua
Normal file
@@ -0,0 +1,269 @@
|
||||
--- @since 25.2.7
|
||||
|
||||
local M = {}
|
||||
local shell = os.getenv("SHELL") or ""
|
||||
local PackageName = "Restore"
|
||||
local function success(s, ...)
|
||||
ya.notify({ title = PackageName, content = string.format(s, ...), timeout = 5, level = "info" })
|
||||
end
|
||||
|
||||
local function fail(s, ...)
|
||||
ya.notify({ title = PackageName, content = string.format(s, ...), timeout = 5, level = "error" })
|
||||
end
|
||||
|
||||
---@enum STATE
|
||||
local STATE = {
|
||||
POSITION = "position",
|
||||
SHOW_CONFIRM = "show_confirm",
|
||||
THEME = "theme",
|
||||
}
|
||||
|
||||
local set_state = ya.sync(function(state, key, value)
|
||||
if state then
|
||||
state[key] = value
|
||||
else
|
||||
state = {}
|
||||
state[key] = value
|
||||
end
|
||||
end)
|
||||
|
||||
local get_state = ya.sync(function(state, key)
|
||||
if state then
|
||||
return state[key]
|
||||
else
|
||||
return nil
|
||||
end
|
||||
end)
|
||||
|
||||
---@enum File_Type
|
||||
local File_Type = {
|
||||
File = "file",
|
||||
Dir = "dir_all",
|
||||
None_Exist = "unknown",
|
||||
}
|
||||
|
||||
---@alias TRASHED_ITEM {trash_index: number, trashed_date_time: string, trashed_path: string, type: File_Type} Item in trash list
|
||||
|
||||
local get_cwd = ya.sync(function()
|
||||
return tostring(cx.active.current.cwd)
|
||||
end)
|
||||
|
||||
local function path_quote(path)
|
||||
local result = "'" .. string.gsub(path, "'", "'\\''") .. "'"
|
||||
return result
|
||||
end
|
||||
|
||||
local function get_file_type(path)
|
||||
local cha, _ = fs.cha(Url(path))
|
||||
if cha then
|
||||
return cha.is_dir and File_Type.Dir or File_Type.File
|
||||
else
|
||||
return File_Type.None_Exist
|
||||
end
|
||||
end
|
||||
|
||||
local function get_trash_volume()
|
||||
local cwd = get_cwd()
|
||||
local trash_volumes_stream, cmr_err =
|
||||
Command("trash-list"):args({ "--volumes" }):stdout(Command.PIPED):stderr(Command.PIPED):output()
|
||||
|
||||
local matched_vol_path = nil
|
||||
if trash_volumes_stream then
|
||||
local matched_vol_length = 0
|
||||
for vol in trash_volumes_stream.stdout:gmatch("[^\r\n]+") do
|
||||
local vol_length = utf8.len(vol) or 0
|
||||
if cwd:sub(1, vol_length) == vol and vol_length > matched_vol_length then
|
||||
matched_vol_path = vol
|
||||
matched_vol_length = vol_length
|
||||
end
|
||||
end
|
||||
if not matched_vol_path then
|
||||
fail("Can't get trash directory")
|
||||
end
|
||||
else
|
||||
fail("Failed to start `trash-list` with error: `%s`. Do you have `trash-cli` installed?", cmr_err)
|
||||
end
|
||||
return matched_vol_path
|
||||
end
|
||||
|
||||
---get list of latest files/folders trashed
|
||||
---@param curr_working_volume currently working volume
|
||||
---@return TRASHED_ITEM[]|nil
|
||||
local function get_latest_trashed_items(curr_working_volume)
|
||||
---@type TRASHED_ITEM[]
|
||||
local restorable_items = {}
|
||||
local fake_enter = Command("printf"):stderr(Command.PIPED):stdout(Command.PIPED):spawn():take_stdout()
|
||||
local trash_list_stream, err_cmd = Command(shell)
|
||||
:args({ "-c", "trash-restore " .. path_quote(curr_working_volume) })
|
||||
:stdin(fake_enter)
|
||||
:stdout(Command.PIPED)
|
||||
:stderr(Command.PIPED)
|
||||
:output()
|
||||
|
||||
if trash_list_stream then
|
||||
---@type TRASHED_ITEM[]
|
||||
local trash_list = {}
|
||||
for line in trash_list_stream.stdout:gmatch("[^\r\n]+") do
|
||||
-- remove leading spaces
|
||||
line = line:match("^%s*(.+)$")
|
||||
local trash_index, item_date, item_path = line:match("^(%d+) (%S+ %S+) (.+)$")
|
||||
if item_date and item_path and trash_index ~= nil then
|
||||
table.insert(trash_list, {
|
||||
trash_index = tonumber(trash_index),
|
||||
trashed_date_time = item_date,
|
||||
trashed_path = item_path,
|
||||
type = File_Type.None_Exist,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
if #trash_list == 0 then
|
||||
success("Nothing left to restore")
|
||||
return
|
||||
end
|
||||
|
||||
local last_item_datetime = trash_list[#trash_list].trashed_date_time
|
||||
|
||||
for _, trash_item in ipairs(trash_list) do
|
||||
if trash_item then
|
||||
if trash_item.trashed_date_time == last_item_datetime then
|
||||
trash_item.type = get_file_type(trash_item.trashed_path)
|
||||
table.insert(restorable_items, trash_item)
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
fail("Failed to start `trash-restore` with error: `%s`. Do you have `trash-cli` installed?", err_cmd)
|
||||
return
|
||||
end
|
||||
return restorable_items
|
||||
-- return newest_trashed_items
|
||||
end
|
||||
|
||||
---@param trash_list TRASHED_ITEM[]
|
||||
local function filter_none_exised_paths(trash_list)
|
||||
---@type TRASHED_ITEM[]
|
||||
local existed_trash_items = {}
|
||||
for _, v in ipairs(trash_list) do
|
||||
if v.type ~= File_Type.None_Exist then
|
||||
table.insert(existed_trash_items, v)
|
||||
end
|
||||
end
|
||||
return existed_trash_items
|
||||
end
|
||||
|
||||
local function restore_files(curr_working_volume, start_index, end_index)
|
||||
if type(start_index) ~= "number" or type(end_index) ~= "number" or start_index < 0 or end_index < 0 then
|
||||
fail("Failed to restore file(s): out of range")
|
||||
return
|
||||
end
|
||||
|
||||
ya.manager_emit("shell", {
|
||||
"echo " .. ya.quote(start_index .. "-" .. end_index) .. " | trash-restore --overwrite " .. path_quote(
|
||||
curr_working_volume
|
||||
),
|
||||
confirm = true,
|
||||
})
|
||||
local file_to_restore_count = end_index - start_index + 1
|
||||
success("Restored " .. tostring(file_to_restore_count) .. " file" .. (file_to_restore_count > 1 and "s" or ""))
|
||||
end
|
||||
|
||||
function M:setup(opts)
|
||||
if opts and opts.position and type(opts.position) == "table" then
|
||||
set_state(STATE.POSITION, opts.position)
|
||||
else
|
||||
set_state(STATE.POSITION, { "center", w = 70, h = 40 })
|
||||
end
|
||||
if opts and opts.show_confirm then
|
||||
set_state(STATE.SHOW_CONFIRM, opts.show_confirm)
|
||||
else
|
||||
set_state(STATE.SHOW_CONFIRM, false)
|
||||
end
|
||||
if opts and opts.theme and type(opts.theme) == "table" then
|
||||
set_state(STATE.THEME, opts.theme)
|
||||
else
|
||||
set_state(STATE.THEME, {})
|
||||
end
|
||||
end
|
||||
|
||||
---@param trash_list TRASHED_ITEM[]
|
||||
local function get_components(trash_list)
|
||||
local theme = get_state(STATE.THEME) or {}
|
||||
local item_odd_style = theme.list_item and theme.list_item.odd and ui.Style():fg(theme.list_item.odd)
|
||||
or (th and th.confirm and th.confirm.list or ui.Style():fg("blue"))
|
||||
local item_even_style = theme.list_item and theme.list_item.even and ui.Style():fg(theme.list_item.even)
|
||||
or (th and th.confirm and th.confirm.list or ui.Style():fg("blue"))
|
||||
|
||||
local trashed_items_components = {}
|
||||
for idx, item in pairs(trash_list) do
|
||||
table.insert(
|
||||
trashed_items_components,
|
||||
ui.Line({
|
||||
ui.Span(" "),
|
||||
ui.Span(item.trashed_path):style(idx % 2 == 0 and item_even_style or item_odd_style),
|
||||
}):align(ui.Line.LEFT)
|
||||
)
|
||||
end
|
||||
return trashed_items_components
|
||||
end
|
||||
|
||||
function M:entry()
|
||||
local curr_working_volume = get_trash_volume()
|
||||
if not curr_working_volume then
|
||||
return
|
||||
end
|
||||
local trashed_items = get_latest_trashed_items(curr_working_volume)
|
||||
if trashed_items == nil then
|
||||
return
|
||||
end
|
||||
local collided_items = filter_none_exised_paths(trashed_items)
|
||||
local overwrite_confirmed = true
|
||||
local show_confirm = get_state(STATE.SHOW_CONFIRM)
|
||||
local pos = get_state(STATE.POSITION)
|
||||
pos = pos or { "center", w = 70, h = 40 }
|
||||
|
||||
local theme = get_state(STATE.THEME) or {}
|
||||
theme.title = theme.title and ui.Style():fg(theme.title):bold() or (th and th.confirm and th.confirm.title)
|
||||
theme.header = theme.header and ui.Style():fg(theme.header) or (th and th.confirm and th.confirm.content)
|
||||
theme.header_warning = ui.Style():fg(theme.header_warning or "yellow")
|
||||
if ya.confirm and show_confirm then
|
||||
local continue_restore = ya.confirm({
|
||||
-- title = ui.Line("Restore files/folders"):fg(theme.title):bold(),
|
||||
title = ui.Line("Restore files/folders"):style(theme.title),
|
||||
content = ui.Text({
|
||||
ui.Line(""),
|
||||
ui.Line("The following files and folders are going to be restored:"):style(theme.header),
|
||||
ui.Line(""),
|
||||
table.unpack(get_components(trashed_items)),
|
||||
})
|
||||
:align(ui.Text.LEFT)
|
||||
:wrap(ui.Text.WRAP),
|
||||
pos = pos,
|
||||
})
|
||||
-- stopping
|
||||
if not continue_restore then
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
-- show Confirm dialog with list of collided items
|
||||
if #collided_items > 0 then
|
||||
overwrite_confirmed = ya.confirm({
|
||||
title = ui.Line("Restore files/folders"):style(theme.title),
|
||||
content = ui.Text({
|
||||
ui.Line(""),
|
||||
ui.Line("The following files and folders are existed, overwrite?"):style(theme.header_warning),
|
||||
ui.Line(""),
|
||||
table.unpack(get_components(collided_items)),
|
||||
})
|
||||
:align(ui.Text.LEFT)
|
||||
:wrap(ui.Text.WRAP),
|
||||
pos = pos,
|
||||
})
|
||||
end
|
||||
if overwrite_confirmed then
|
||||
restore_files(curr_working_volume, trashed_items[1].trash_index, trashed_items[#trashed_items].trash_index)
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
||||
21
cli/.config/yazi/plugins/what-size.yazi/LICENSE
Normal file
21
cli/.config/yazi/plugins/what-size.yazi/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 Francesco Pira
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
83
cli/.config/yazi/plugins/what-size.yazi/README.md
Normal file
83
cli/.config/yazi/plugins/what-size.yazi/README.md
Normal file
@@ -0,0 +1,83 @@
|
||||
# what-size.yazi
|
||||
|
||||
A plugin for [yazi](https://github.com/sxyazi/yazi) to calculate the size of the current selection or the current working directory (if no selection is made).
|
||||
|
||||
## Compatibility
|
||||
|
||||
what-size supports Yazi on Linux, macOS, and Windows.
|
||||
|
||||
### OS
|
||||
|
||||
- Linux since first commit
|
||||
- macOS since commit `42c6a0efb7245badb16781da5380be1a1705f3f2` ([link](https://github.com/pirafrank/what-size.yazi/commit/42c6a0efb7245badb16781da5380be1a1705f3f2))
|
||||
- Windows since commit `4a56ead2a84c5969791fb17416e0b451ab906c5d` ([link](https://github.com/pirafrank/what-size.yazi/commit/4a56ead2a84c5969791fb17416e0b451ab906c5d))
|
||||
|
||||
### Yazi
|
||||
|
||||
- yazi `25.x` since commit `fce1778d911621dc57796cdfdf11dcda3c2e28de` ([link](https://github.com/pirafrank/what-size.yazi/commit/fce1778d911621dc57796cdfdf11dcda3c2e28de)).
|
||||
- yazi `0.4.x` since commit `2780de5aeef1ed16d1973dd6e0cd4d630c900d56` ([link](https://github.com/pirafrank/what-size.yazi/commit/2780de5aeef1ed16d1973dd6e0cd4d630c900d56)).
|
||||
- yazi `0.3.x` up to commit `f08f7f2d5c94958ac4cb66c51a7c24b4319c6c93` ([link](https://github.com/pirafrank/what-size.yazi/commit/f08f7f2d5c94958ac4cb66c51a7c24b4319c6c93)).
|
||||
|
||||
## Requirements
|
||||
|
||||
- `du` on Linux and macOS
|
||||
- PowerShell on Windows
|
||||
|
||||
## Installation
|
||||
|
||||
```sh
|
||||
ya pack -a 'pirafrank/what-size'
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
Add this to your `~/.config/yazi/keymap.toml`:
|
||||
|
||||
```toml
|
||||
[manager]
|
||||
prepend_keymap = [
|
||||
{ on = [ ".", "s" ], run = "plugin what-size", desc = "Calc size of selection or cwd" },
|
||||
]
|
||||
```
|
||||
|
||||
If you want to copy the result to clipboard, you can add `--clipboard` or `-c` as 2nd positional argument:
|
||||
|
||||
```toml
|
||||
[manager]
|
||||
prepend_keymap = [
|
||||
{ on = [ ".", "s" ], run = "plugin what-size -- '--clipboard'", desc = "Calc size of selection or cwd" },
|
||||
]
|
||||
```
|
||||
|
||||
```toml
|
||||
[manager]
|
||||
prepend_keymap = [
|
||||
{ on = [ ".", "s" ], run = "plugin what-size -- '-c'", desc = "Calc size of selection or cwd" },
|
||||
]
|
||||
```
|
||||
|
||||
Change to whatever keybinding you like.
|
||||
|
||||
## Feedback
|
||||
|
||||
If you have any feedback, suggestions, or ideas please let me know by opening an issue.
|
||||
|
||||
## Dev setup
|
||||
|
||||
Check the debug config [here](https://yazi-rs.github.io/docs/plugins/overview/#debugging).
|
||||
|
||||
To get debug logs while develoing use `ya.dbg()` in your code, then set the `YAZI_LOG` environment variable to `debug` before running Yazi.
|
||||
|
||||
```sh
|
||||
YAZI_LOG=debug yazi
|
||||
```
|
||||
|
||||
Logs will be saved to `~.local/state/yazi/yazi.log` file.
|
||||
|
||||
## Contributing
|
||||
|
||||
Contributions are welcome. Please fork the repository and submit a PR.
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
96
cli/.config/yazi/plugins/what-size.yazi/main.lua
Normal file
96
cli/.config/yazi/plugins/what-size.yazi/main.lua
Normal file
@@ -0,0 +1,96 @@
|
||||
|
||||
-- function to get paths of selected elements or current directory
|
||||
-- if no elements are selected
|
||||
local get_paths = ya.sync(function()
|
||||
local paths = {}
|
||||
-- get selected files
|
||||
for _, u in pairs(cx.active.selected) do
|
||||
paths[#paths + 1] = tostring(u)
|
||||
end
|
||||
-- if no files are selected, get current directory
|
||||
if #paths == 0 then
|
||||
if cx.active.current.cwd then
|
||||
paths[1] = tostring(cx.active.current.cwd)
|
||||
else
|
||||
ya.err("what-size would return nil paths")
|
||||
end
|
||||
end
|
||||
return paths
|
||||
end)
|
||||
|
||||
-- Function to get total size from output
|
||||
-- Unix use `du`, Windows use PowerShell
|
||||
local function get_total_size(items)
|
||||
local is_windows = package.config:sub(1,1) == '\\'
|
||||
|
||||
if is_windows then
|
||||
local total = 0
|
||||
for _, path in ipairs(items) do
|
||||
path = path:gsub('"', '\\"')
|
||||
local ps_cmd = string.format(
|
||||
[[powershell -Command "& { $p = '%s'; if (Test-Path $p) { if ((Get-ChildItem -Path $p -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum) { (Get-ChildItem -Path $p -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum } else { (Get-Item $p).Length } } }"]],
|
||||
path
|
||||
)
|
||||
local pipe = io.popen(ps_cmd)
|
||||
local result = pipe:read("*a")
|
||||
-- Debug
|
||||
-- ya.notify {
|
||||
-- title = "Debug Output",
|
||||
-- content = result,
|
||||
-- timeout = 5,
|
||||
-- }
|
||||
pipe:close()
|
||||
local num = tonumber(result)
|
||||
if num then total = total + num end
|
||||
end
|
||||
return total
|
||||
else
|
||||
local arg = ya.target_os() == "macos" and "-scA" or "-scb"
|
||||
local output, err = Command("du"):arg(arg):args(items):output()
|
||||
if not output then
|
||||
ya.err("Failed to run du: " .. err)
|
||||
end
|
||||
local lines = {}
|
||||
for line in output.stdout:gmatch("[^\n]+") do
|
||||
lines[#lines + 1] = line
|
||||
end
|
||||
local last_line = lines[#lines]
|
||||
local size = tonumber(last_line:match("^(%d+)"))
|
||||
return ya.target_os() == "macos" and size * 512 or size
|
||||
end
|
||||
end
|
||||
|
||||
-- Function to format file size
|
||||
local function format_size(size)
|
||||
local units = { "B", "KB", "MB", "GB", "TB" }
|
||||
local unit_index = 1
|
||||
while size > 1024 and unit_index < #units do
|
||||
size = size / 1024
|
||||
unit_index = unit_index + 1
|
||||
end
|
||||
return string.format("%.2f %s", size, units[unit_index])
|
||||
end
|
||||
|
||||
return {
|
||||
-- as per doc: https://yazi-rs.github.io/docs/plugins/overview#functional-plugin
|
||||
entry = function(_, job)
|
||||
-- defaults not to use clipboard, use it only if required by the user
|
||||
local clipboard = job.args.clipboard == true or job.args[1] == "--clipboard" or job.args[1] == "-c"
|
||||
local items = get_paths()
|
||||
|
||||
local total_size = get_total_size(items)
|
||||
local formatted_size = format_size(total_size)
|
||||
|
||||
local notification_content = "Total size: " .. formatted_size
|
||||
if clipboard then
|
||||
ya.clipboard(formatted_size)
|
||||
notification_content = notification_content .. "\nCopied to clipboard."
|
||||
end
|
||||
|
||||
ya.notify {
|
||||
title = "What size",
|
||||
content = notification_content,
|
||||
timeout = 4,
|
||||
}
|
||||
end,
|
||||
}
|
||||
2
cli/.config/yazi/theme.toml
Normal file
2
cli/.config/yazi/theme.toml
Normal file
@@ -0,0 +1,2 @@
|
||||
[flavor]
|
||||
dark = "kanagawa"
|
||||
32
cli/.config/yazi/yazi.toml
Normal file
32
cli/.config/yazi/yazi.toml
Normal file
@@ -0,0 +1,32 @@
|
||||
[mgr]
|
||||
sort_by = "extension"
|
||||
show_hidden = false
|
||||
|
||||
[opener]
|
||||
imagefeh = [
|
||||
{ run = 'gtk4-launch fehcustom.desktop "$@"', orphan = true, for = "unix" },
|
||||
]
|
||||
play = [
|
||||
{ run = 'mpv "$@"', orphan = true, for = "unix" },
|
||||
]
|
||||
edit = [
|
||||
{ run = '$EDITOR "$@"', block = true, for = "unix" },
|
||||
]
|
||||
open = [
|
||||
{ run = 'xdg-open "$@"', desc = "Open" },
|
||||
]
|
||||
|
||||
[open]
|
||||
prepend_rules = [
|
||||
{ mime = "application/pdf", use = "open" },
|
||||
{ mime = "application/json", use = "edit" },
|
||||
{ name = "*.html", use = [ "open" ] },
|
||||
]
|
||||
rules = [
|
||||
{ mime = "image/*", use = "imagefeh" },
|
||||
{ mime = "text/*", use = "edit" },
|
||||
{ mime = "video/*", use = "play" },
|
||||
]
|
||||
append_rules = [
|
||||
{ name = "*", use = ["edit", "open", "play"]}
|
||||
]
|
||||
Reference in New Issue
Block a user