From 43d0990a645271c2dc6b8e98e6e608e1e92306e6 Mon Sep 17 00:00:00 2001 From: Melon Bread Date: Sun, 26 May 2024 11:51:23 -0400 Subject: [PATCH] Starting fresh --- .SpaceVim.d/autoload/guifont.vim | 14 - .SpaceVim.d/init.toml | 101 - .Xmodmap | 4 - .config/MangoHud/MangoHud.conf | 220 - .config/bat/config | 28 - .../colors/gruvbox-material-dark-hard.conf | 47 - .../colors/gruvbox-material-dark-medium.conf | 47 - .../colors/gruvbox-material-dark-soft.conf | 47 - .../colors/gruvbox-material-light-hard.conf | 47 - .../colors/gruvbox-material-light-medium.conf | 47 - .../colors/gruvbox-material-light-soft.conf | 47 - .config/kitty/kitty.conf | 7 - .config/kitty/kitty.conf! | 44 - .config/kitty/other.conf | 8 - .config/mpv/script-opts/webm.conf | 73 - .config/mpv/scripts/webm.lua | 2734 ------- .config/paru/paru.conf | 30 - .../qtile/__pycache__/config.cpython-39.pyc | Bin 11034 -> 0 bytes .config/qtile/colors.py | 47 - .config/qtile/config.py | 697 -- .../battery_icons_horiz/battery-10-charge.png | Bin 2063 -> 0 bytes .../icons/battery_icons_horiz/battery-10.png | Bin 1795 -> 0 bytes .../battery_icons_horiz/battery-20-charge.png | Bin 2091 -> 0 bytes .../icons/battery_icons_horiz/battery-20.png | Bin 1794 -> 0 bytes .../battery_icons_horiz/battery-30-charge.png | Bin 2080 -> 0 bytes .../icons/battery_icons_horiz/battery-30.png | Bin 1798 -> 0 bytes .../battery_icons_horiz/battery-40-charge.png | Bin 2110 -> 0 bytes .../icons/battery_icons_horiz/battery-40.png | Bin 1804 -> 0 bytes .../battery_icons_horiz/battery-50-charge.png | Bin 2088 -> 0 bytes .../icons/battery_icons_horiz/battery-50.png | Bin 1795 -> 0 bytes .../battery_icons_horiz/battery-60-charge.png | Bin 2089 -> 0 bytes .../icons/battery_icons_horiz/battery-60.png | Bin 1800 -> 0 bytes .../battery_icons_horiz/battery-70-charge.png | Bin 2098 -> 0 bytes .../icons/battery_icons_horiz/battery-70.png | Bin 1797 -> 0 bytes .../battery_icons_horiz/battery-80-charge.png | Bin 2097 -> 0 bytes .../icons/battery_icons_horiz/battery-80.png | Bin 1806 -> 0 bytes .../battery_icons_horiz/battery-90-charge.png | Bin 2068 -> 0 bytes .../icons/battery_icons_horiz/battery-90.png | Bin 1804 -> 0 bytes .../battery-empty-charge.png | Bin 2309 -> 0 bytes .../battery_icons_horiz/battery-empty.png | Bin 1790 -> 0 bytes .../battery-full-charge.png | Bin 5335 -> 0 bytes .../battery-full-charged.png | Bin 2262 -> 0 bytes .../battery_icons_horiz/battery-full.png | Bin 1779 -> 0 bytes .../battery-missing-black.png | Bin 5027 -> 0 bytes .../battery_icons_horiz/battery-missing.png | Bin 6279 -> 0 bytes .config/qtile/icons/dnanordsmall.png | Bin 75250 -> 0 bytes .config/qtile/icons/garuda-purple.png | Bin 54998 -> 0 bytes .config/qtile/icons/garuda-red.png | Bin 40848 -> 0 bytes .config/qtile/icons/garuda-white.png | Bin 20278 -> 0 bytes .config/qtile/icons/garuda-yellow.svg | 653 -- .config/qtile/icons/layout-bsp.png | Bin 6846 -> 0 bytes .config/qtile/icons/layout-floating.png | Bin 232 -> 0 bytes .config/qtile/icons/layout-max.png | Bin 1143 -> 0 bytes .config/qtile/icons/layout-monadtall.png | Bin 218 -> 0 bytes .config/qtile/icons/layout-stack.png | Bin 6313 -> 0 bytes .config/qtile/icons/layout-tile.png | Bin 225 -> 0 bytes .config/qtile/icons/layout-treetab.png | Bin 212 -> 0 bytes .config/qtile/icons/layout-zoomy.png | Bin 5823 -> 0 bytes .config/qtile/icons/python.png | Bin 746 -> 0 bytes .config/qtile/icons/qtilelogo.png | Bin 15711 -> 0 bytes .config/qtile/scripts/autostart.sh | 27 - .config/qtile/scripts/dmenu.sh | 6 - .config/qtile/scripts/picom-toggle.sh | 7 - .config/qutebrowser/autoconfig.yml | 18 - .config/qutebrowser/config.py | 303 - .config/topgrade.toml | 85 - .config/vifm/scripts/README | 6 - .config/vifm/vifm-help.txt | 6378 ----------------- .config/vifm/vifminfo.json | 1 - .config/vifm/vifmrc | 503 -- .config/yadm/bootstrap | 38 - .gitmodules | 3 - .nethackrc | 165 - .tmux.conf | 22 - .zshrc | 139 - 75 files changed, 12643 deletions(-) delete mode 100644 .SpaceVim.d/autoload/guifont.vim delete mode 100644 .SpaceVim.d/init.toml delete mode 100644 .Xmodmap delete mode 100644 .config/MangoHud/MangoHud.conf delete mode 100644 .config/bat/config delete mode 100644 .config/kitty/colors/gruvbox-material-dark-hard.conf delete mode 100644 .config/kitty/colors/gruvbox-material-dark-medium.conf delete mode 100644 .config/kitty/colors/gruvbox-material-dark-soft.conf delete mode 100644 .config/kitty/colors/gruvbox-material-light-hard.conf delete mode 100644 .config/kitty/colors/gruvbox-material-light-medium.conf delete mode 100644 .config/kitty/colors/gruvbox-material-light-soft.conf delete mode 100644 .config/kitty/kitty.conf delete mode 100644 .config/kitty/kitty.conf! delete mode 100644 .config/kitty/other.conf delete mode 100644 .config/mpv/script-opts/webm.conf delete mode 100644 .config/mpv/scripts/webm.lua delete mode 100644 .config/paru/paru.conf delete mode 100644 .config/qtile/__pycache__/config.cpython-39.pyc delete mode 100644 .config/qtile/colors.py delete mode 100644 .config/qtile/config.py delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-10-charge.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-10.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-20-charge.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-20.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-30-charge.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-30.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-40-charge.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-40.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-50-charge.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-50.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-60-charge.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-60.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-70-charge.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-70.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-80-charge.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-80.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-90-charge.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-90.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-empty-charge.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-empty.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-full-charge.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-full-charged.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-full.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-missing-black.png delete mode 100644 .config/qtile/icons/battery_icons_horiz/battery-missing.png delete mode 100644 .config/qtile/icons/dnanordsmall.png delete mode 100644 .config/qtile/icons/garuda-purple.png delete mode 100644 .config/qtile/icons/garuda-red.png delete mode 100644 .config/qtile/icons/garuda-white.png delete mode 100644 .config/qtile/icons/garuda-yellow.svg delete mode 100644 .config/qtile/icons/layout-bsp.png delete mode 100644 .config/qtile/icons/layout-floating.png delete mode 100644 .config/qtile/icons/layout-max.png delete mode 100644 .config/qtile/icons/layout-monadtall.png delete mode 100644 .config/qtile/icons/layout-stack.png delete mode 100644 .config/qtile/icons/layout-tile.png delete mode 100644 .config/qtile/icons/layout-treetab.png delete mode 100644 .config/qtile/icons/layout-zoomy.png delete mode 100644 .config/qtile/icons/python.png delete mode 100644 .config/qtile/icons/qtilelogo.png delete mode 100755 .config/qtile/scripts/autostart.sh delete mode 100755 .config/qtile/scripts/dmenu.sh delete mode 100755 .config/qtile/scripts/picom-toggle.sh delete mode 100644 .config/qutebrowser/autoconfig.yml delete mode 100644 .config/qutebrowser/config.py delete mode 100644 .config/topgrade.toml delete mode 100644 .config/vifm/scripts/README delete mode 100644 .config/vifm/vifm-help.txt delete mode 100644 .config/vifm/vifminfo.json delete mode 100644 .config/vifm/vifmrc delete mode 100755 .config/yadm/bootstrap delete mode 100644 .gitmodules delete mode 100644 .nethackrc delete mode 100644 .tmux.conf delete mode 100644 .zshrc diff --git a/.SpaceVim.d/autoload/guifont.vim b/.SpaceVim.d/autoload/guifont.vim deleted file mode 100644 index ba4fe2b..0000000 --- a/.SpaceVim.d/autoload/guifont.vim +++ /dev/null @@ -1,14 +0,0 @@ -function! guifont#setfont () abort - set guifont=FiraCode\ Nerd\ Font:h18 - set clipboard+=unnamedplus - let g:neoformat_python_black = { - \ 'exe': 'black', - \ 'stdin': 1, - \ 'args': ['-q', '-'], - \ } - let g:neoformat_enabled_python = ['black'] - let g:gruvbox_material_palette = 'material' - let g:gruvbox_material_enable_bold = 1 - let g:gruvbox_material_enable_italic = 1 - let g:g:gruvbox_material_ui_contrast = 'high' -endfunction diff --git a/.SpaceVim.d/init.toml b/.SpaceVim.d/init.toml deleted file mode 100644 index fa5bbe1..0000000 --- a/.SpaceVim.d/init.toml +++ /dev/null @@ -1,101 +0,0 @@ -#============================================================================= -# dark_powered.toml --- dark powered configuration example for SpaceVim -# Copyright (c) 2016-2017 Wang Shidong & Contributors -# Author: Wang Shidong < wsdjeg at 163.com > -# URL: https://spacevim.org -# License: GPLv3 -#============================================================================= - -# All SpaceVim option below [option] section -[options] - # set spacevim theme. by default colorscheme layer is not loaded, - # if you want to use more colorscheme, please load the colorscheme - # layer - colorscheme = "gruvbox-material" - background = "dark" - # Disable guicolors in basic mode, many terminal do not support 24bit - # true colors - enable_guicolors = true - # Disable statusline separator, if you want to use other value, please - # install nerd fonts - statusline_separator = "arrow" - statusline_inactive_separator = "arrow" - buffer_index_type = 4 - enable_tabline_filetype_icon = true - enable_statusline_display_mode = false - bootstrap_before = 'guifont#setfont' - guifont = "FuraMono Nerd Font:h18" - autocomplete_method = "coc" - -# Enable autocomplete layer -[[layers]] -name = 'autocomplete' -auto-completion-return-key-behavior = "complete" -auto-completion-tab-key-behavior = "smart" - -[[layers]] -name = "checkers" - -[[layers]] -name = 'shell' -default_position = 'top' -default_height = 30 - -[[layers]] -name = "denite" - -[[layers]] -name = "git" - -[[layers]] -name = "sudo" - -[[layers]] - name = "lsp" - enabled_clients = ["pylsp", "rls", "bashls", "vimls"] - filetypes = [ - "python", - "rust", - "sh", - "vim" - ] - [layers.override_cmd] - rust = ["rls"] - python = ["pyls"] - -[[layers]] -name = "lang#python" -format_on_save = true - -[[layers]] -name = "lang#ipynb" - -[[layers]] -name = "lang#html" - -[[layers]] -name = "lang#markdown" - -[[layers]] -name = "lang#rust" -recommended-style = "enabled" - -[[layers]] -name = "lang#sh" - -[[custom_plugins]] -name = "rhysd/vim-grammarous" - -[[custom_plugins]] -name = "mtdl9/vim-log-highlighting" - -[[custom_plugins]] -name = "https://tildegit.org/sloum/gemini-vim-syntax" - -[[custom_plugins]] -name = "habamax/vim-godot" - -[[custom_plugins]] - repo = "sainnhe/gruvbox-material" - merged = 0 - diff --git a/.Xmodmap b/.Xmodmap deleted file mode 100644 index b5e3f46..0000000 --- a/.Xmodmap +++ /dev/null @@ -1,4 +0,0 @@ -!! No Caps Lock -clear lock -!! Make Caps_lock an escape key. -keycode 0x42 = Escape diff --git a/.config/MangoHud/MangoHud.conf b/.config/MangoHud/MangoHud.conf deleted file mode 100644 index 995de1a..0000000 --- a/.config/MangoHud/MangoHud.conf +++ /dev/null @@ -1,220 +0,0 @@ -### MangoHud configuration file -### Uncomment any options you wish to enable. Default options are left uncommented -### Use some_parameter=0 to disable a parameter (only works with on/off parameters) -### Everything below can be used / overridden with the environment variable MANGOHUD_CONFIG instead - -################ PERFORMANCE ################# - -### Limit the application FPS. Comma-separated list of one or more FPS values (e.g. 0,30,60). 0 means unlimited (unless VSynced) -# fps_limit= - -### VSync [0-3] 0 = adaptive; 1 = off; 2 = mailbox; 3 = on -# vsync= - -### OpenGL VSync [0-N] 0 = off; >=1 = wait for N v-blanks, N > 1 acts as a FPS limiter (FPS = display refresh rate / N) -# gl_vsync= - -################### VISUAL ################### - -### Legacy layout -# legacy_layout=false - -### Display custom centered text, useful for a header -# custom_text_center= - -### Display the current system time -# time - -### Time formatting examples -# time_format=%H:%M -# time_format=[ %T %F ] -# time_format=%X # locally formatted time, because of limited glyph range, missing characters may show as '?' (e.g. Japanese) - -### Display MangoHud version -# version - -### Display the current GPU information -gpu_stats -# gpu_temp -# gpu_core_clock -# gpu_mem_clock -# gpu_power -# gpu_text=GPU -# gpu_load_change -# gpu_load_value=60,90 -# gpu_load_color=39F900,FDFD09,B22222 - -### Display the current CPU information -cpu_stats -# cpu_temp -# cpu_power -# cpu_text=CPU -# cpu_mhz -# cpu_load_change -# cpu_load_value=60,90 -# cpu_load_color=39F900,FDFD09,B22222 - -### Display the current CPU load & frequency for each core -# core_load -# core_load_change - -### Display IO read and write for the app (not system) -io_stats -io_read -io_write - -### Display system vram / ram / swap space usage -vram -ram -# swap - -### Display per process memory usage -## Show resident memory and other types, if enabled -# procmem -# procmem_shared -# procmem_virt - -### Display battery information -# battery -# battery_icon - -### Display FPS and frametime -fps -# fps_sampling_period=500 -# fps_color_change -# fps_value=30,60 -# fps_color=B22222,FDFD09,39F900 -frametime - -### Display miscellaneus information -engine_version -gpu_name -vulkan_driver -wine - -### Display loaded MangoHud architecture -# arch - -### Display the frametime line graph -frame_timing -# histogram - -### Display GameMode / vkBasalt running status -gamemode -vkbasalt - -### Display current FPS limit -# show_fps_limit - -### Display the current resolution -# resolution - -### Display custom text -# custom_text= -### Display output of Bash command in next column -# exec= - -### Display media player metadata -# media_player -# media_player_name=spotify -## Format metadata, lines are delimited by ; (wip) -# media_player_format={title};{artist};{album} -# media_player_format=Track:;{title};By:;{artist};From:;{album} - -### Change the hud font size -# font_size=24 -# font_scale=1.0 -# font_size_text=24 -# font_scale_media_player=0.55 -# no_small_font - -### Change default font (set location to TTF/OTF file) -## Set font for the whole hud -# font_file= - -## Set font only for text like media player metadata -# font_file_text= - -## Set font glyph ranges. Defaults to Latin-only. Don't forget to set font_file/font_file_text to font that supports these -## Probably don't enable all at once because of memory usage and hardware limits concerns -## If you experience crashes or text is just squares, reduce glyph range or reduce font size -# font_glyph_ranges=korean,chinese,chinese_simplified,japanese,cyrillic,thai,vietnamese,latin_ext_a,latin_ext_b - -### Change the hud position -# position=top-left - -### Change the corner roundness -# round_corners= - -### Disable / hide the hud by default -no_display - -### Hud position offset -# offset_x= -# offset_y= - -### Hud dimensions -# width= -# height= -# table_columns= -# cellpadding_y= - -### Hud transparency / alpha -# background_alpha=0.5 -# alpha= - -### Color customization -# text_color=FFFFFF -# gpu_color=2E9762 -# cpu_color=2E97CB -# vram_color=AD64C1 -# ram_color=C26693 -# engine_color=EB5B5B -# io_color=A491D3 -# frametime_color=00FF00 -# background_color=020202 -# media_player_color=FFFFFF -wine_color=cccc00 -# battery_color=FF9078 - -### Specify GPU with PCI bus ID for AMDGPU and NVML stats -### Set to 'domain:bus:slot.function' -# pci_dev=0:0a:0.0 - -### Blacklist -# blacklist= - -################ WORKAROUNDS ################# -### Options starting with "gl_*" are for OpenGL -### Specify what to use for getting display size. Options are "viewport", "scissorbox" or disabled. Defaults to using glXQueryDrawable -# gl_size_query=viewport - -### (Re)bind given framebuffer before MangoHud gets drawn. Helps with Crusader Kings III -# gl_bind_framebuffer=0 - -### Don't swap origin if using GL_UPPER_LEFT. Helps with Ryujinx -# gl_dont_flip=1 - -################ INTERACTION ################# - -### Change toggle keybinds for the hud & logging -# toggle_hud=Shift_R+F12 -# toggle_fps_limit=Shift_L+F1 -# toggle_logging=Shift_L+F2 -# reload_cfg=Shift_L+F4 -# upload_log=Shift_L+F3 - -#################### LOG ##################### -### Automatically start the log after X seconds -# autostart_log=1 -### Set amount of time in seconds that the logging will run for -# log_duration= -### Change the default log interval, 100 is default -# log_interval=100 -### Set location of the output files (required for logging) -# output_folder=/home//mangologs -### Permit uploading logs directly to FlightlessMango.com -# permit_upload=1 -### Define a '+'-separated list of percentiles shown in the benchmark results -### Use "AVG" to get a mean average. Default percentiles are 97+AVG+1+0.1 -# benchmark_percentiles=97,AVG,1,0.1 diff --git a/.config/bat/config b/.config/bat/config deleted file mode 100644 index 2ea2845..0000000 --- a/.config/bat/config +++ /dev/null @@ -1,28 +0,0 @@ -# This is `bat`s configuration file. Each line either contains a comment or -# a command-line option that you want to pass to `bat` by default. You can -# run `bat --help` to get a list of all possible configuration options. - -# Set pretty print for more "cat" like looks --pp - -# Specify desired highlighting theme (e.g. "TwoDark"). Run `bat --list-themes` -# for a list of all available themes ---theme="gruvbox-dark" - -# Enable this to use italic text on the terminal. This is not supported on all -# terminal emulators (like tmux, by default): -#--italic-text=always - -# Uncomment the following line to disable automatic paging: -#--paging=never - -# Uncomment the following line if you are using less version >= 551 and want to -# enable mouse scrolling support in `bat` when running inside tmux. This might -# disable text selection, unless you press shift. -#--pager="less --RAW-CONTROL-CHARS --quit-if-one-screen --mouse" - -# Syntax mappings: map a certain filename pattern to a language. -# Example 1: use the C++ syntax for .ino files -# Example 2: Use ".gitignore"-style highlighting for ".ignore" files -#--map-syntax "*.ino:C++" -#--map-syntax ".ignore:Git Ignore" diff --git a/.config/kitty/colors/gruvbox-material-dark-hard.conf b/.config/kitty/colors/gruvbox-material-dark-hard.conf deleted file mode 100644 index c7852c8..0000000 --- a/.config/kitty/colors/gruvbox-material-dark-hard.conf +++ /dev/null @@ -1,47 +0,0 @@ -background #1d2021 -foreground #d4be98 - -selection_background #d4be98 -selection_foreground #1d2021 - -cursor #a89984 -cursor_text_color background - -active_tab_background #1d2021 -active_tab_foreground #d4be98 -active_tab_font_style bold -inactive_tab_background #1d2021 -inactive_tab_foreground #a89984 -inactive_tab_font_style normal - -# Black -color0 #665c54 -color8 #928374 - -# Red -color1 #ea6962 -color9 #ea6962 - -# Green -color2 #a9b665 -color10 #a9b665 - -# Yellow -color3 #e78a4e -color11 #d8a657 - -# Blue -color4 #7daea3 -color12 #7daea3 - -# Magenta -color5 #d3869b -color13 #d3869b - -# Cyan -color6 #89b482 -color14 #89b482 - -# White -color7 #d4be98 -color15 #d4be98 diff --git a/.config/kitty/colors/gruvbox-material-dark-medium.conf b/.config/kitty/colors/gruvbox-material-dark-medium.conf deleted file mode 100644 index a856d7f..0000000 --- a/.config/kitty/colors/gruvbox-material-dark-medium.conf +++ /dev/null @@ -1,47 +0,0 @@ -background #282828 -foreground #d4be98 - -selection_background #d4be98 -selection_foreground #282828 - -cursor #a89984 -cursor_text_color background - -active_tab_background #282828 -active_tab_foreground #d4be98 -active_tab_font_style bold -inactive_tab_background #282828 -inactive_tab_foreground #a89984 -inactive_tab_font_style normal - -# Black -color0 #665c54 -color8 #928374 - -# Red -color1 #ea6962 -color9 #ea6962 - -# Green -color2 #a9b665 -color10 #a9b665 - -# Yellow -color3 #e78a4e -color11 #d8a657 - -# Blue -color4 #7daea3 -color12 #7daea3 - -# Magenta -color5 #d3869b -color13 #d3869b - -# Cyan -color6 #89b482 -color14 #89b482 - -# White -color7 #d4be98 -color15 #d4be98 diff --git a/.config/kitty/colors/gruvbox-material-dark-soft.conf b/.config/kitty/colors/gruvbox-material-dark-soft.conf deleted file mode 100644 index 36ed491..0000000 --- a/.config/kitty/colors/gruvbox-material-dark-soft.conf +++ /dev/null @@ -1,47 +0,0 @@ -background #32302f -foreground #d4be98 - -selection_background #d4be98 -selection_foreground #32302f - -cursor #a89984 -cursor_text_color background - -active_tab_background #32302f -active_tab_foreground #d4be98 -active_tab_font_style bold -inactive_tab_background #32302f -inactive_tab_foreground #a89984 -inactive_tab_font_style normal - -# Black -color0 #665c54 -color8 #928374 - -# Red -color1 #ea6962 -color9 #ea6962 - -# Green -color2 #a9b665 -color10 #a9b665 - -# Yellow -color3 #e78a4e -color11 #d8a657 - -# Blue -color4 #7daea3 -color12 #7daea3 - -# Magenta -color5 #d3869b -color13 #d3869b - -# Cyan -color6 #89b482 -color14 #89b482 - -# White -color7 #d4be98 -color15 #d4be98 diff --git a/.config/kitty/colors/gruvbox-material-light-hard.conf b/.config/kitty/colors/gruvbox-material-light-hard.conf deleted file mode 100644 index 9399a66..0000000 --- a/.config/kitty/colors/gruvbox-material-light-hard.conf +++ /dev/null @@ -1,47 +0,0 @@ -background #f9f5d7 -foreground #654735 - -selection_background #654735 -selection_foreground #f9f5d7 - -cursor #928374 -cursor_text_color background - -active_tab_background #f9f5d7 -active_tab_foreground #654735 -active_tab_font_style bold -inactive_tab_background #f9f5d7 -inactive_tab_foreground #7c6f64 -inactive_tab_font_style normal - -# Black -color0 #bdae93 -color8 #928374 - -# Red -color1 #c14a4a -color9 #c14a4a - -# Green -color2 #6c782e -color10 #6c782e - -# Yellow -color3 #c35e0a -color11 #b47109 - -# Blue -color4 #45707a -color12 #45707a - -# Magenta -color5 #945e80 -color13 #945e80 - -# Cyan -color6 #4c7a5d -color14 #4c7a5d - -# White -color7 #654735 -color15 #654735 diff --git a/.config/kitty/colors/gruvbox-material-light-medium.conf b/.config/kitty/colors/gruvbox-material-light-medium.conf deleted file mode 100644 index 00781cc..0000000 --- a/.config/kitty/colors/gruvbox-material-light-medium.conf +++ /dev/null @@ -1,47 +0,0 @@ -background #fbf1c7 -foreground #654735 - -selection_background #654735 -selection_foreground #fbf1c7 - -cursor #928374 -cursor_text_color background - -active_tab_background #fbf1c7 -active_tab_foreground #654735 -active_tab_font_style bold -inactive_tab_background #fbf1c7 -inactive_tab_foreground #7c6f64 -inactive_tab_font_style normal - -# Black -color0 #bdae93 -color8 #928374 - -# Red -color1 #c14a4a -color9 #c14a4a - -# Green -color2 #6c782e -color10 #6c782e - -# Yellow -color3 #c35e0a -color11 #b47109 - -# Blue -color4 #45707a -color12 #45707a - -# Magenta -color5 #945e80 -color13 #945e80 - -# Cyan -color6 #4c7a5d -color14 #4c7a5d - -# White -color7 #654735 -color15 #654735 diff --git a/.config/kitty/colors/gruvbox-material-light-soft.conf b/.config/kitty/colors/gruvbox-material-light-soft.conf deleted file mode 100644 index c075536..0000000 --- a/.config/kitty/colors/gruvbox-material-light-soft.conf +++ /dev/null @@ -1,47 +0,0 @@ -background #f2e5bc -foreground #654735 - -selection_background #654735 -selection_foreground #f2e5bc - -cursor #928374 -cursor_text_color background - -active_tab_background #f2e5bc -active_tab_foreground #654735 -active_tab_font_style bold -inactive_tab_background #f2e5bc -inactive_tab_foreground #7c6f64 -inactive_tab_font_style normal - -# Black -color0 #bdae93 -color8 #928374 - -# Red -color1 #c14a4a -color9 #c14a4a - -# Green -color2 #6c782e -color10 #6c782e - -# Yellow -color3 #c35e0a -color11 #b47109 - -# Blue -color4 #45707a -color12 #45707a - -# Magenta -color5 #945e80 -color13 #945e80 - -# Cyan -color6 #4c7a5d -color14 #4c7a5d - -# White -color7 #654735 -color15 #654735 diff --git a/.config/kitty/kitty.conf b/.config/kitty/kitty.conf deleted file mode 100644 index 79aa4ab..0000000 --- a/.config/kitty/kitty.conf +++ /dev/null @@ -1,7 +0,0 @@ -# Custom color scheme for Kitty terminal emulator -# Based on https://github.com/sindresorhus/hyper-snazzy -# Modified by ChefTyler -# Designed with Simoniz0r zsh theme applied https://github.com/simoniz0r/.zshrc - -include other.conf -include colors/gruvbox-material-dark-hard.conf diff --git a/.config/kitty/kitty.conf! b/.config/kitty/kitty.conf! deleted file mode 100644 index bbb2ede..0000000 --- a/.config/kitty/kitty.conf! +++ /dev/null @@ -1,44 +0,0 @@ -# Custom color scheme for Kitty terminal emulator -# Based on https://github.com/sindresorhus/hyper-snazzy -# Modified by ChefTyler -# Designed with Simoniz0r zsh theme applied https://github.com/simoniz0r/.zshrc - -include other.conf - -foreground #FFFFFF -background #15181e -selection_foreground #000000 -selection_background #FFFACD -url_color #0087BD - -# black -color0 #FFFFFF -color8 #FFFFFF - -# red -color1 #E73600 -color9 #E73600 - -# green -color2 #40c340 -color10 #40c340 - -# orange -color3 #E47000 -color11 #E47000 - -# blue -color4 #5187de -color12 #5187de - -# magenta -color5 #dc768c -color13 #dc768c - -# cyan -color6 #00AFB5 -color14 #00AFB5 - -# white -color7 #7C7C7C -color15 #7C7C7C diff --git a/.config/kitty/other.conf b/.config/kitty/other.conf deleted file mode 100644 index 050ee76..0000000 --- a/.config/kitty/other.conf +++ /dev/null @@ -1,8 +0,0 @@ -font_size 14.0 -cursor #cccccc -cursor_shape beam -# Fonts are custom to me, you may need to change/modify them -font_family FuraCode Nerd Font Mono -bold_font FuraCode Nerd Font Mono -italic_font FuraCode Nerd Font Mono -bold_italic_font FuraCode Nerd Font Mono diff --git a/.config/mpv/script-opts/webm.conf b/.config/mpv/script-opts/webm.conf deleted file mode 100644 index 8360ef1..0000000 --- a/.config/mpv/script-opts/webm.conf +++ /dev/null @@ -1,73 +0,0 @@ -# Defaults to shift+w -keybind=W -# If empty, saves on the same directory of the playing video. -# A starting "~" will be replaced by the home dir. -# This field is delimited by double-square-brackets - [[ and ]] - instead of -# quotes, because Windows users might run into a issue when using -# backslashes as a path separator. Examples of valid inputs for this field -# would be: [[]] (the default, empty value), [[C:\Users\John]] (on Windows), -# and [[/home/john]] (on Unix-like systems eg. Linux). -# The [[]] delimiter is not needed when using from a configuration file -# in the script-opts folder. -output_directory=~/Desktop -run_detached=no -# Template string for the output file -# %f - Filename, with extension -# %F - Filename, without extension -# %T - Media title, if it exists, or filename, with extension (useful for some streams, such as YouTube). -# %s, %e - Start and end time, with milliseconds -# %S, %E - Start and end time, without milliseconds -# %M - "-audio", if audio is enabled, empty otherwise -# %R - "-(height)p", where height is the video's height, or scale_height, if it's enabled. -# More specifiers are supported, see https://mpv.io/manual/master/#options-screenshot-template -# Property expansion is supported (with %{} at top level, ${} when nested), see https://mpv.io/manual/master/#property-expansion -output_template=%F-[%s-%e]%M -# Scale video to a certain height, keeping the aspect ratio. -1 disables it. -scale_height=-1 -# Change the FPS of the output video, dropping or duplicating frames as needed. -# -1 means the FPS will be unchanged from the source. -fps=-1 -# Target filesize, in kB. This will be used to calculate the bitrate -# used on the encode. If this is set to <= 0, the video bitrate will be set -# to 0, which might enable constant quality modes, depending on the -# video codec that's used (VP8 and VP9, for example). -target_filesize=2500 -# If true, will use stricter flags to ensure the resulting file doesn't -# overshoot the target filesize. Not recommended, as constrained quality -# mode should work well, unless you're really having trouble hitting -# the target size. -strict_filesize_constraint=no -strict_bitrate_multiplier=0.95 -# In kilobits. -strict_audio_bitrate=64 -# Sets the output format, from a few predefined ones. -# Currently we have: -# webm-vp8 (libvpx/libvorbis) -# webm-vp9 (libvpx-vp9/libopus) -# mp4 (h264/AAC) -# mp4-nvenc (h264-NVENC/AAC) -# raw (rawvideo/pcm_s16le). -# mp3 (libmp3lame) -# and gif -output_format=mp4 -twopass=no -# If set, applies the video filters currently used on the playback to the encode. -apply_current_filters=yes -# If set, writes the video's filename to the "Title" field on the metadata. -write_filename_on_metadata=no -# Set the number of encoding threads, for codecs libvpx and libvpx-vp9 -libvpx_threads=4 -additional_flags= -# Constant Rate Factor (CRF). The value meaning and limits may change, -# from codec to codec. Set to -1 to disable. -crf=28 -# Useful for flags that may impact output filesize, such as qmin, qmax etc -# Won't be applied when strict_filesize_constraint is on. -non_strict_additional_flags= -# Display the encode progress, in %. Requires run_detached to be disabled. -# On Windows, it shows a cmd popup. "auto" will display progress on non-Windows platforms. -display_progress=auto -# The font size used in the menu. Isn't used for the notifications (started encode, finished encode etc) -font_size=28 -margin=10 -message_duration=5 diff --git a/.config/mpv/scripts/webm.lua b/.config/mpv/scripts/webm.lua deleted file mode 100644 index c4a7ba2..0000000 --- a/.config/mpv/scripts/webm.lua +++ /dev/null @@ -1,2734 +0,0 @@ -local mp = require("mp") -local assdraw = require("mp.assdraw") -local msg = require("mp.msg") -local utils = require("mp.utils") -local mpopts = require("mp.options") -local options = { - -- Defaults to shift+w - keybind = "W", - -- If empty, saves on the same directory of the playing video. - -- A starting "~" will be replaced by the home dir. - -- This field is delimited by double-square-brackets - [[ and ]] - instead of - -- quotes, because Windows users might run into a issue when using - -- backslashes as a path separator. Examples of valid inputs for this field - -- would be: [[]] (the default, empty value), [[C:\Users\John]] (on Windows), - -- and [[/home/john]] (on Unix-like systems eg. Linux). - -- The [[]] delimiter is not needed when using from a configuration file - -- in the script-opts folder. - output_directory = [[]], - run_detached = false, - -- Template string for the output file - -- %f - Filename, with extension - -- %F - Filename, without extension - -- %T - Media title, if it exists, or filename, with extension (useful for some streams, such as YouTube). - -- %s, %e - Start and end time, with milliseconds - -- %S, %E - Start and end time, without milliseconds - -- %M - "-audio", if audio is enabled, empty otherwise - -- %R - "-(height)p", where height is the video's height, or scale_height, if it's enabled. - -- More specifiers are supported, see https://mpv.io/manual/master/#options-screenshot-template - -- Property expansion is supported (with %{} at top level, ${} when nested), see https://mpv.io/manual/master/#property-expansion - output_template = "%F-[%s-%e]%M", - -- Scale video to a certain height, keeping the aspect ratio. -1 disables it. - scale_height = -1, - -- Change the FPS of the output video, dropping or duplicating frames as needed. - -- -1 means the FPS will be unchanged from the source. - fps = -1, - -- Target filesize, in kB. This will be used to calculate the bitrate - -- used on the encode. If this is set to <= 0, the video bitrate will be set - -- to 0, which might enable constant quality modes, depending on the - -- video codec that's used (VP8 and VP9, for example). - target_filesize = 2500, - -- If true, will use stricter flags to ensure the resulting file doesn't - -- overshoot the target filesize. Not recommended, as constrained quality - -- mode should work well, unless you're really having trouble hitting - -- the target size. - strict_filesize_constraint = false, - strict_bitrate_multiplier = 0.95, - -- In kilobits. - strict_audio_bitrate = 64, - -- Sets the output format, from a few predefined ones. - -- Currently we have: - -- webm-vp8 (libvpx/libvorbis) - -- webm-vp9 (libvpx-vp9/libopus) - -- mp4 (h264/AAC) - -- mp4-nvenc (h264-NVENC/AAC) - -- raw (rawvideo/pcm_s16le). - -- mp3 (libmp3lame) - -- and gif - output_format = "webm-vp8", - twopass = false, - -- If set, applies the video filters currently used on the playback to the encode. - apply_current_filters = true, - -- If set, writes the video's filename to the "Title" field on the metadata. - write_filename_on_metadata = false, - -- Set the number of encoding threads, for codecs libvpx and libvpx-vp9 - libvpx_threads = 4, - additional_flags = "", - -- Constant Rate Factor (CRF). The value meaning and limits may change, - -- from codec to codec. Set to -1 to disable. - crf = 10, - -- Useful for flags that may impact output filesize, such as qmin, qmax etc - -- Won't be applied when strict_filesize_constraint is on. - non_strict_additional_flags = "", - -- Display the encode progress, in %. Requires run_detached to be disabled. - -- On Windows, it shows a cmd popup. "auto" will display progress on non-Windows platforms. - display_progress = "auto", - -- The font size used in the menu. Isn't used for the notifications (started encode, finished encode etc) - font_size = 28, - margin = 10, - message_duration = 5 -} - -mpopts.read_options(options) -local base64_chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' - --- encoding -function base64_encode(data) - return ((data:gsub('.', function(x) - local r,b='',x:byte() - for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end - return r; - end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x) - if (#x < 6) then return '' end - local c=0 - for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end - return base64_chars:sub(c+1,c+1) - end)..({ '', '==', '=' })[#data%3+1]) -end - --- decoding -function base64_decode(data) - data = string.gsub(data, '[^'..base64_chars..'=]', '') - return (data:gsub('.', function(x) - if (x == '=') then return '' end - local r,f='',(base64_chars:find(x)-1) - for i=6,1,-1 do r=r..(f%2^i-f%2^(i-1)>0 and '1' or '0') end - return r; - end):gsub('%d%d%d?%d?%d?%d?%d?%d?', function(x) - if (#x ~= 8) then return '' end - local c=0 - for i=1,8 do c=c+(x:sub(i,i)=='1' and 2^(8-i) or 0) end - return string.char(c) - end)) -end -local bold -bold = function(text) - return "{\\b1}" .. tostring(text) .. "{\\b0}" -end -local message -message = function(text, duration) - local ass = mp.get_property_osd("osd-ass-cc/0") - ass = ass .. text - return mp.osd_message(ass, duration or options.message_duration) -end -local append -append = function(a, b) - for _, val in ipairs(b) do - a[#a + 1] = val - end - return a -end -local seconds_to_time_string -seconds_to_time_string = function(seconds, no_ms, full) - if seconds < 0 then - return "unknown" - end - local ret = "" - if not (no_ms) then - ret = string.format(".%03d", seconds * 1000 % 1000) - end - ret = string.format("%02d:%02d%s", math.floor(seconds / 60) % 60, math.floor(seconds) % 60, ret) - if full or seconds > 3600 then - ret = string.format("%d:%s", math.floor(seconds / 3600), ret) - end - return ret -end -local seconds_to_path_element -seconds_to_path_element = function(seconds, no_ms, full) - local time_string = seconds_to_time_string(seconds, no_ms, full) - local _ - time_string, _ = time_string:gsub(":", ".") - return time_string -end -local file_exists -file_exists = function(name) - local info, err = utils.file_info(name) - if info ~= nil then - return true - end - return false -end -local expand_properties -expand_properties = function(text, magic) - if magic == nil then - magic = "$" - end - for prefix, raw, prop, colon, fallback, closing in text:gmatch("%" .. magic .. "{([?!]?)(=?)([^}:]*)(:?)([^}]*)(}*)}") do - local err - local prop_value - local compare_value - local original_prop = prop - local get_property = mp.get_property_osd - if raw == "=" then - get_property = mp.get_property - end - if prefix ~= "" then - for actual_prop, compare in prop:gmatch("(.-)==(.*)") do - prop = actual_prop - compare_value = compare - end - end - if colon == ":" then - prop_value, err = get_property(prop, fallback) - else - prop_value, err = get_property(prop, "(error)") - end - prop_value = tostring(prop_value) - if prefix == "?" then - if compare_value == nil then - prop_value = err == nil and fallback .. closing or "" - else - prop_value = prop_value == compare_value and fallback .. closing or "" - end - prefix = "%" .. prefix - elseif prefix == "!" then - if compare_value == nil then - prop_value = err ~= nil and fallback .. closing or "" - else - prop_value = prop_value ~= compare_value and fallback .. closing or "" - end - else - prop_value = prop_value .. closing - end - if colon == ":" then - local _ - text, _ = text:gsub("%" .. magic .. "{" .. prefix .. raw .. original_prop:gsub("%W", "%%%1") .. ":" .. fallback:gsub("%W", "%%%1") .. closing .. "}", expand_properties(prop_value)) - else - local _ - text, _ = text:gsub("%" .. magic .. "{" .. prefix .. raw .. original_prop:gsub("%W", "%%%1") .. closing .. "}", prop_value) - end - end - return text -end -local format_filename -format_filename = function(startTime, endTime, videoFormat) - local hasAudioCodec = videoFormat.audioCodec ~= "" - local replaceFirst = { - ["%%mp"] = "%%mH.%%mM.%%mS", - ["%%mP"] = "%%mH.%%mM.%%mS.%%mT", - ["%%p"] = "%%wH.%%wM.%%wS", - ["%%P"] = "%%wH.%%wM.%%wS.%%wT" - } - local replaceTable = { - ["%%wH"] = string.format("%02d", math.floor(startTime / (60 * 60))), - ["%%wh"] = string.format("%d", math.floor(startTime / (60 * 60))), - ["%%wM"] = string.format("%02d", math.floor(startTime / 60 % 60)), - ["%%wm"] = string.format("%d", math.floor(startTime / 60)), - ["%%wS"] = string.format("%02d", math.floor(startTime % 60)), - ["%%ws"] = string.format("%d", math.floor(startTime)), - ["%%wf"] = string.format("%s", startTime), - ["%%wT"] = string.sub(string.format("%.3f", startTime % 1), 3), - ["%%mH"] = string.format("%02d", math.floor(endTime / (60 * 60))), - ["%%mh"] = string.format("%d", math.floor(endTime / (60 * 60))), - ["%%mM"] = string.format("%02d", math.floor(endTime / 60 % 60)), - ["%%mm"] = string.format("%d", math.floor(endTime / 60)), - ["%%mS"] = string.format("%02d", math.floor(endTime % 60)), - ["%%ms"] = string.format("%d", math.floor(endTime)), - ["%%mf"] = string.format("%s", endTime), - ["%%mT"] = string.sub(string.format("%.3f", endTime % 1), 3), - ["%%f"] = mp.get_property("filename"), - ["%%F"] = mp.get_property("filename/no-ext"), - ["%%s"] = seconds_to_path_element(startTime), - ["%%S"] = seconds_to_path_element(startTime, true), - ["%%e"] = seconds_to_path_element(endTime), - ["%%E"] = seconds_to_path_element(endTime, true), - ["%%T"] = mp.get_property("media-title"), - ["%%M"] = (mp.get_property_native('aid') and not mp.get_property_native('mute') and hasAudioCodec) and '-audio' or '', - ["%%R"] = (options.scale_height ~= -1) and "-" .. tostring(options.scale_height) .. "p" or "-" .. tostring(mp.get_property_native('height')) .. "p", - ["%%t%%"] = "%%" - } - local filename = options.output_template - for format, value in pairs(replaceFirst) do - local _ - filename, _ = filename:gsub(format, value) - end - for format, value in pairs(replaceTable) do - local _ - filename, _ = filename:gsub(format, value) - end - if mp.get_property_bool("demuxer-via-network", false) then - local _ - filename, _ = filename:gsub("%%X{([^}]*)}", "%1") - filename, _ = filename:gsub("%%x", "") - else - local x = string.gsub(mp.get_property("stream-open-filename", ""), string.gsub(mp.get_property("filename", ""), "%W", "%%%1") .. "$", "") - local _ - filename, _ = filename:gsub("%%X{[^}]*}", x) - filename, _ = filename:gsub("%%x", x) - end - filename = expand_properties(filename, "%") - for format in filename:gmatch("%%t([aAbBcCdDeFgGhHIjmMnprRStTuUVwWxXyYzZ])") do - local _ - filename, _ = filename:gsub("%%t" .. format, os.date("%" .. format)) - end - local _ - filename, _ = filename:gsub("[<>:\"/\\|?*]", "") - return tostring(filename) .. "." .. tostring(videoFormat.outputExtension) -end -local parse_directory -parse_directory = function(dir) - local home_dir = os.getenv("HOME") - if not home_dir then - home_dir = os.getenv("USERPROFILE") - end - if not home_dir then - local drive = os.getenv("HOMEDRIVE") - local path = os.getenv("HOMEPATH") - if drive and path then - home_dir = utils.join_path(drive, path) - else - msg.warn("Couldn't find home dir.") - home_dir = "" - end - end - local _ - dir, _ = dir:gsub("^~", home_dir) - return dir -end -local is_windows = type(package) == "table" and type(package.config) == "string" and package.config:sub(1, 1) == "\\" -local trim -trim = function(s) - return s:match("^%s*(.-)%s*$") -end -local get_null_path -get_null_path = function() - if file_exists("/dev/null") then - return "/dev/null" - end - return "NUL" -end -local run_subprocess -run_subprocess = function(params) - local res = utils.subprocess(params) - msg.verbose("Command stdout: ") - msg.verbose(res.stdout) - if res.status ~= 0 then - msg.verbose("Command failed! Reason: ", res.error, " Killed by us? ", res.killed_by_us and "yes" or "no") - return false - end - return true -end -local shell_escape -shell_escape = function(args) - local ret = { } - for i, a in ipairs(args) do - local s = tostring(a) - if string.match(s, "[^A-Za-z0-9_/:=-]") then - if is_windows then - s = '"' .. string.gsub(s, '"', '"\\""') .. '"' - else - s = "'" .. string.gsub(s, "'", "'\\''") .. "'" - end - end - table.insert(ret, s) - end - local concat = table.concat(ret, " ") - if is_windows then - concat = '"' .. concat .. '"' - end - return concat -end -local run_subprocess_popen -run_subprocess_popen = function(command_line) - local command_line_string = shell_escape(command_line) - command_line_string = command_line_string .. " 2>&1" - msg.verbose("run_subprocess_popen: running " .. tostring(command_line_string)) - return io.popen(command_line_string) -end -local calculate_scale_factor -calculate_scale_factor = function() - local baseResY = 720 - local osd_w, osd_h = mp.get_osd_size() - return osd_h / baseResY -end -local should_display_progress -should_display_progress = function() - if options.display_progress == "auto" then - return not is_windows - end - return options.display_progress -end -local reverse -reverse = function(list) - local _accum_0 = { } - local _len_0 = 1 - local _max_0 = 1 - for _index_0 = #list, _max_0 < 0 and #list + _max_0 or _max_0, -1 do - local element = list[_index_0] - _accum_0[_len_0] = element - _len_0 = _len_0 + 1 - end - return _accum_0 -end -local get_pass_logfile_path -get_pass_logfile_path = function(encode_out_path) - return tostring(encode_out_path) .. "-video-pass1.log" -end -local dimensions_changed = true -local _video_dimensions = { } -local get_video_dimensions -get_video_dimensions = function() - if not (dimensions_changed) then - return _video_dimensions - end - local video_params = mp.get_property_native("video-out-params") - if not video_params then - return nil - end - dimensions_changed = false - local keep_aspect = mp.get_property_bool("keepaspect") - local w = video_params["w"] - local h = video_params["h"] - local dw = video_params["dw"] - local dh = video_params["dh"] - if mp.get_property_number("video-rotate") % 180 == 90 then - w, h = h, w - dw, dh = dh, dw - end - _video_dimensions = { - top_left = { }, - bottom_right = { }, - ratios = { } - } - local window_w, window_h = mp.get_osd_size() - if keep_aspect then - local unscaled = mp.get_property_native("video-unscaled") - local panscan = mp.get_property_number("panscan") - local fwidth = window_w - local fheight = math.floor(window_w / dw * dh) - if fheight > window_h or fheight < h then - local tmpw = math.floor(window_h / dh * dw) - if tmpw <= window_w then - fheight = window_h - fwidth = tmpw - end - end - local vo_panscan_area = window_h - fheight - local f_w = fwidth / fheight - local f_h = 1 - if vo_panscan_area == 0 then - vo_panscan_area = window_h - fwidth - f_w = 1 - f_h = fheight / fwidth - end - if unscaled or unscaled == "downscale-big" then - vo_panscan_area = 0 - if unscaled or (dw <= window_w and dh <= window_h) then - fwidth = dw - fheight = dh - end - end - local scaled_width = fwidth + math.floor(vo_panscan_area * panscan * f_w) - local scaled_height = fheight + math.floor(vo_panscan_area * panscan * f_h) - local split_scaling - split_scaling = function(dst_size, scaled_src_size, zoom, align, pan) - scaled_src_size = math.floor(scaled_src_size * 2 ^ zoom) - align = (align + 1) / 2 - local dst_start = math.floor((dst_size - scaled_src_size) * align + pan * scaled_src_size) - if dst_start < 0 then - dst_start = dst_start + 1 - end - local dst_end = dst_start + scaled_src_size - if dst_start >= dst_end then - dst_start = 0 - dst_end = 1 - end - return dst_start, dst_end - end - local zoom = mp.get_property_number("video-zoom") - local align_x = mp.get_property_number("video-align-x") - local pan_x = mp.get_property_number("video-pan-x") - _video_dimensions.top_left.x, _video_dimensions.bottom_right.x = split_scaling(window_w, scaled_width, zoom, align_x, pan_x) - local align_y = mp.get_property_number("video-align-y") - local pan_y = mp.get_property_number("video-pan-y") - _video_dimensions.top_left.y, _video_dimensions.bottom_right.y = split_scaling(window_h, scaled_height, zoom, align_y, pan_y) - else - _video_dimensions.top_left.x = 0 - _video_dimensions.bottom_right.x = window_w - _video_dimensions.top_left.y = 0 - _video_dimensions.bottom_right.y = window_h - end - _video_dimensions.ratios.w = w / (_video_dimensions.bottom_right.x - _video_dimensions.top_left.x) - _video_dimensions.ratios.h = h / (_video_dimensions.bottom_right.y - _video_dimensions.top_left.y) - return _video_dimensions -end -local set_dimensions_changed -set_dimensions_changed = function() - dimensions_changed = true -end -local monitor_dimensions -monitor_dimensions = function() - local properties = { - "keepaspect", - "video-out-params", - "video-unscaled", - "panscan", - "video-zoom", - "video-align-x", - "video-pan-x", - "video-align-y", - "video-pan-y", - "osd-width", - "osd-height" - } - for _, p in ipairs(properties) do - mp.observe_property(p, "native", set_dimensions_changed) - end -end -local clamp -clamp = function(min, val, max) - if val <= min then - return min - end - if val >= max then - return max - end - return val -end -local clamp_point -clamp_point = function(top_left, point, bottom_right) - return { - x = clamp(top_left.x, point.x, bottom_right.x), - y = clamp(top_left.y, point.y, bottom_right.y) - } -end -local VideoPoint -do - local _class_0 - local _base_0 = { - set_from_screen = function(self, sx, sy) - local d = get_video_dimensions() - local point = clamp_point(d.top_left, { - x = sx, - y = sy - }, d.bottom_right) - self.x = math.floor(d.ratios.w * (point.x - d.top_left.x) + 0.5) - self.y = math.floor(d.ratios.h * (point.y - d.top_left.y) + 0.5) - end, - to_screen = function(self) - local d = get_video_dimensions() - return { - x = math.floor(self.x / d.ratios.w + d.top_left.x + 0.5), - y = math.floor(self.y / d.ratios.h + d.top_left.y + 0.5) - } - end - } - _base_0.__index = _base_0 - _class_0 = setmetatable({ - __init = function(self) - self.x = -1 - self.y = -1 - end, - __base = _base_0, - __name = "VideoPoint" - }, { - __index = _base_0, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - VideoPoint = _class_0 -end -local Region -do - local _class_0 - local _base_0 = { - is_valid = function(self) - return self.x > -1 and self.y > -1 and self.w > -1 and self.h > -1 - end, - set_from_points = function(self, p1, p2) - self.x = math.min(p1.x, p2.x) - self.y = math.min(p1.y, p2.y) - self.w = math.abs(p1.x - p2.x) - self.h = math.abs(p1.y - p2.y) - end - } - _base_0.__index = _base_0 - _class_0 = setmetatable({ - __init = function(self) - self.x = -1 - self.y = -1 - self.w = -1 - self.h = -1 - end, - __base = _base_0, - __name = "Region" - }, { - __index = _base_0, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - Region = _class_0 -end -local make_fullscreen_region -make_fullscreen_region = function() - local r = Region() - local d = get_video_dimensions() - local a = VideoPoint() - local b = VideoPoint() - local xa, ya - do - local _obj_0 = d.top_left - xa, ya = _obj_0.x, _obj_0.y - end - a:set_from_screen(xa, ya) - local xb, yb - do - local _obj_0 = d.bottom_right - xb, yb = _obj_0.x, _obj_0.y - end - b:set_from_screen(xb, yb) - r:set_from_points(a, b) - return r -end -local read_double -read_double = function(bytes) - local sign = 1 - local mantissa = bytes[2] % 2 ^ 4 - for i = 3, 8 do - mantissa = mantissa * 256 + bytes[i] - end - if bytes[1] > 127 then - sign = -1 - end - local exponent = (bytes[1] % 128) * 2 ^ 4 + math.floor(bytes[2] / 2 ^ 4) - if exponent == 0 then - return 0 - end - mantissa = (math.ldexp(mantissa, -52) + 1) * sign - return math.ldexp(mantissa, exponent - 1023) -end -local write_double -write_double = function(num) - local bytes = { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - } - if num == 0 then - return bytes - end - local anum = math.abs(num) - local mantissa, exponent = math.frexp(anum) - exponent = exponent - 1 - mantissa = mantissa * 2 - 1 - local sign = num ~= anum and 128 or 0 - exponent = exponent + 1023 - bytes[1] = sign + math.floor(exponent / 2 ^ 4) - mantissa = mantissa * 2 ^ 4 - local currentmantissa = math.floor(mantissa) - mantissa = mantissa - currentmantissa - bytes[2] = (exponent % 2 ^ 4) * 2 ^ 4 + currentmantissa - for i = 3, 8 do - mantissa = mantissa * 2 ^ 8 - currentmantissa = math.floor(mantissa) - mantissa = mantissa - currentmantissa - bytes[i] = currentmantissa - end - return bytes -end -local FirstpassStats -do - local _class_0 - local duration_multiplier, fields_before_duration, fields_after_duration - local _base_0 = { - get_duration = function(self) - local big_endian_binary_duration = reverse(self.binary_duration) - return read_double(reversed_binary_duration) / duration_multiplier - end, - set_duration = function(self, duration) - local big_endian_binary_duration = write_double(duration * duration_multiplier) - self.binary_duration = reverse(big_endian_binary_duration) - end, - _bytes_to_string = function(self, bytes) - return string.char(unpack(bytes)) - end, - as_binary_string = function(self) - local before_duration_string = self:_bytes_to_string(self.binary_data_before_duration) - local duration_string = self:_bytes_to_string(self.binary_duration) - local after_duration_string = self:_bytes_to_string(self.binary_data_after_duration) - return before_duration_string .. duration_string .. after_duration_string - end - } - _base_0.__index = _base_0 - _class_0 = setmetatable({ - __init = function(self, before_duration, duration, after_duration) - self.binary_data_before_duration = before_duration - self.binary_duration = duration - self.binary_data_after_duration = after_duration - end, - __base = _base_0, - __name = "FirstpassStats" - }, { - __index = _base_0, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - local self = _class_0 - duration_multiplier = 10000000.0 - fields_before_duration = 16 - fields_after_duration = 1 - self.data_before_duration_size = function(self) - return fields_before_duration * 8 - end - self.data_after_duration_size = function(self) - return fields_after_duration * 8 - end - self.size = function(self) - return (fields_before_duration + 1 + fields_after_duration) * 8 - end - self.from_bytes = function(self, bytes) - local before_duration - do - local _accum_0 = { } - local _len_0 = 1 - local _max_0 = self:data_before_duration_size() - for _index_0 = 1, _max_0 < 0 and #bytes + _max_0 or _max_0 do - local b = bytes[_index_0] - _accum_0[_len_0] = b - _len_0 = _len_0 + 1 - end - before_duration = _accum_0 - end - local duration - do - local _accum_0 = { } - local _len_0 = 1 - local _max_0 = self:data_before_duration_size() + 8 - for _index_0 = self:data_before_duration_size() + 1, _max_0 < 0 and #bytes + _max_0 or _max_0 do - local b = bytes[_index_0] - _accum_0[_len_0] = b - _len_0 = _len_0 + 1 - end - duration = _accum_0 - end - local after_duration - do - local _accum_0 = { } - local _len_0 = 1 - for _index_0 = self:data_before_duration_size() + 8 + 1, #bytes do - local b = bytes[_index_0] - _accum_0[_len_0] = b - _len_0 = _len_0 + 1 - end - after_duration = _accum_0 - end - return self(before_duration, duration, after_duration) - end - FirstpassStats = _class_0 -end -local read_logfile_into_stats_array -read_logfile_into_stats_array = function(logfile_path) - local file = assert(io.open(logfile_path, "rb")) - local logfile_string = base64_decode(file:read()) - file:close() - local stats_size = FirstpassStats:size() - assert(logfile_string:len() % stats_size == 0) - local stats = { } - for offset = 1, #logfile_string, stats_size do - local bytes = { - logfile_string:byte(offset, offset + stats_size - 1) - } - assert(#bytes == stats_size) - stats[#stats + 1] = FirstpassStats:from_bytes(bytes) - end - return stats -end -local write_stats_array_to_logfile -write_stats_array_to_logfile = function(stats_array, logfile_path) - local file = assert(io.open(logfile_path, "wb")) - local logfile_string = "" - for _index_0 = 1, #stats_array do - local stat = stats_array[_index_0] - logfile_string = logfile_string .. stat:as_binary_string() - end - file:write(base64_encode(logfile_string)) - return file:close() -end -local vp8_patch_logfile -vp8_patch_logfile = function(logfile_path, encode_total_duration) - local stats_array = read_logfile_into_stats_array(logfile_path) - local average_duration = encode_total_duration / (#stats_array - 1) - for i = 1, #stats_array - 1 do - stats_array[i]:set_duration(average_duration) - end - stats_array[#stats_array]:set_duration(encode_total_duration) - return write_stats_array_to_logfile(stats_array, logfile_path) -end -local formats = { } -local Format -do - local _class_0 - local _base_0 = { - getPreFilters = function(self) - return { } - end, - getPostFilters = function(self) - return { } - end, - getFlags = function(self) - return { } - end, - getCodecFlags = function(self) - local codecs = { } - if self.videoCodec ~= "" then - codecs[#codecs + 1] = "--ovc=" .. tostring(self.videoCodec) - end - if self.audioCodec ~= "" then - codecs[#codecs + 1] = "--oac=" .. tostring(self.audioCodec) - end - return codecs - end - } - _base_0.__index = _base_0 - _class_0 = setmetatable({ - __init = function(self) - self.displayName = "Basic" - self.supportsTwopass = true - self.videoCodec = "" - self.audioCodec = "" - self.outputExtension = "" - self.acceptsBitrate = true - end, - __base = _base_0, - __name = "Format" - }, { - __index = _base_0, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - Format = _class_0 -end -local RawVideo -do - local _class_0 - local _parent_0 = Format - local _base_0 = { - getColorspace = function(self) - local csp = mp.get_property("colormatrix") - local _exp_0 = csp - if "bt.601" == _exp_0 then - return "bt601" - elseif "bt.709" == _exp_0 then - return "bt709" - elseif "bt.2020" == _exp_0 then - return "bt2020" - elseif "smpte-240m" == _exp_0 then - return "smpte240m" - else - msg.info("Warning, unknown colorspace " .. tostring(csp) .. " detected, using bt.601.") - return "bt601" - end - end, - getPostFilters = function(self) - return { - "format=yuv444p16", - "lavfi-scale=in_color_matrix=" .. self:getColorspace(), - "format=bgr24" - } - end - } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self) - self.displayName = "Raw" - self.supportsTwopass = false - self.videoCodec = "rawvideo" - self.audioCodec = "pcm_s16le" - self.outputExtension = "avi" - self.acceptsBitrate = false - end, - __base = _base_0, - __name = "RawVideo", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - RawVideo = _class_0 -end -formats["raw"] = RawVideo() -local WebmVP8 -do - local _class_0 - local _parent_0 = Format - local _base_0 = { - getPreFilters = function(self) - local colormatrixFilter = { - ["bt.709"] = "bt709", - ["bt.2020"] = "bt2020", - ["smpte-240m"] = "smpte240m" - } - local ret = { } - local colormatrix = mp.get_property_native("video-params/colormatrix") - if colormatrixFilter[colormatrix] then - append(ret, { - "lavfi-colormatrix=" .. tostring(colormatrixFilter[colormatrix]) .. ":bt601" - }) - end - return ret - end, - getFlags = function(self) - return { - "--ovcopts-add=threads=" .. tostring(options.libvpx_threads) - } - end - } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self) - self.displayName = "WebM" - self.supportsTwopass = true - self.videoCodec = "libvpx" - self.audioCodec = "libvorbis" - self.outputExtension = "webm" - self.acceptsBitrate = true - end, - __base = _base_0, - __name = "WebmVP8", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - WebmVP8 = _class_0 -end -formats["webm-vp8"] = WebmVP8() -local WebmVP9 -do - local _class_0 - local _parent_0 = Format - local _base_0 = { - getFlags = function(self) - return { - "--ovcopts-add=threads=" .. tostring(options.libvpx_threads) - } - end - } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self) - self.displayName = "WebM (VP9)" - self.supportsTwopass = true - self.videoCodec = "libvpx-vp9" - self.audioCodec = "libopus" - self.outputExtension = "webm" - self.acceptsBitrate = true - end, - __base = _base_0, - __name = "WebmVP9", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - WebmVP9 = _class_0 -end -formats["webm-vp9"] = WebmVP9() -local MP4 -do - local _class_0 - local _parent_0 = Format - local _base_0 = { } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self) - self.displayName = "MP4 (h264/AAC)" - self.supportsTwopass = true - self.videoCodec = "libx264" - self.audioCodec = "aac" - self.outputExtension = "mp4" - self.acceptsBitrate = true - end, - __base = _base_0, - __name = "MP4", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - MP4 = _class_0 -end -formats["mp4"] = MP4() -local MP4NVENC -do - local _class_0 - local _parent_0 = Format - local _base_0 = { } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self) - self.displayName = "MP4 (h264-NVENC/AAC)" - self.supportsTwopass = true - self.videoCodec = "h264_nvenc" - self.audioCodec = "aac" - self.outputExtension = "mp4" - self.acceptsBitrate = true - end, - __base = _base_0, - __name = "MP4NVENC", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - MP4NVENC = _class_0 -end -formats["mp4-nvenc"] = MP4NVENC() -local MP3 -do - local _class_0 - local _parent_0 = Format - local _base_0 = { } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self) - self.displayName = "MP3 (libmp3lame)" - self.supportsTwopass = false - self.videoCodec = "" - self.audioCodec = "libmp3lame" - self.outputExtension = "mp3" - self.acceptsBitrate = true - end, - __base = _base_0, - __name = "MP3", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - MP3 = _class_0 -end -formats["mp3"] = MP3() -local GIF -do - local _class_0 - local _parent_0 = Format - local _base_0 = { } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self) - self.displayName = "GIF" - self.supportsTwopass = false - self.videoCodec = "gif" - self.audioCodec = "" - self.outputExtension = "gif" - self.acceptsBitrate = false - end, - __base = _base_0, - __name = "GIF", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - GIF = _class_0 -end -formats["gif"] = GIF() -local Page -do - local _class_0 - local _base_0 = { - add_keybinds = function(self) - if not self.keybinds then - return - end - for key, func in pairs(self.keybinds) do - mp.add_forced_key_binding(key, key, func, { - repeatable = true - }) - end - end, - remove_keybinds = function(self) - if not self.keybinds then - return - end - for key, _ in pairs(self.keybinds) do - mp.remove_key_binding(key) - end - end, - observe_properties = function(self) - self.sizeCallback = function() - return self:draw() - end - local properties = { - "keepaspect", - "video-out-params", - "video-unscaled", - "panscan", - "video-zoom", - "video-align-x", - "video-pan-x", - "video-align-y", - "video-pan-y", - "osd-width", - "osd-height" - } - for _index_0 = 1, #properties do - local p = properties[_index_0] - mp.observe_property(p, "native", self.sizeCallback) - end - end, - unobserve_properties = function(self) - if self.sizeCallback then - mp.unobserve_property(self.sizeCallback) - self.sizeCallback = nil - end - end, - clear = function(self) - local window_w, window_h = mp.get_osd_size() - mp.set_osd_ass(window_w, window_h, "") - return mp.osd_message("", 0) - end, - prepare = function(self) - return nil - end, - dispose = function(self) - return nil - end, - show = function(self) - if self.visible then - return - end - self.visible = true - self:observe_properties() - self:add_keybinds() - self:prepare() - self:clear() - return self:draw() - end, - hide = function(self) - if not self.visible then - return - end - self.visible = false - self:unobserve_properties() - self:remove_keybinds() - self:clear() - return self:dispose() - end, - setup_text = function(self, ass) - local scale = calculate_scale_factor() - local margin = options.margin * scale - ass:append("{\\an7}") - ass:pos(margin, margin) - return ass:append("{\\fs" .. tostring(options.font_size * scale) .. "}") - end - } - _base_0.__index = _base_0 - _class_0 = setmetatable({ - __init = function() end, - __base = _base_0, - __name = "Page" - }, { - __index = _base_0, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - Page = _class_0 -end -local EncodeWithProgress -do - local _class_0 - local _parent_0 = Page - local _base_0 = { - draw = function(self) - local progress = 100 * ((self.currentTime - self.startTime) / self.duration) - local progressText = string.format("%d%%", progress) - local window_w, window_h = mp.get_osd_size() - local ass = assdraw.ass_new() - ass:new_event() - self:setup_text(ass) - ass:append("Encoding (" .. tostring(bold(progressText)) .. ")\\N") - return mp.set_osd_ass(window_w, window_h, ass.text) - end, - parseLine = function(self, line) - local matchTime = string.match(line, "Encode time[-]pos: ([0-9.]+)") - local matchExit = string.match(line, "Exiting... [(]([%a ]+)[)]") - if matchTime == nil and matchExit == nil then - return - end - if matchTime ~= nil and tonumber(matchTime) > self.currentTime then - self.currentTime = tonumber(matchTime) - end - if matchExit ~= nil then - self.finished = true - self.finishedReason = matchExit - end - end, - startEncode = function(self, command_line) - local copy_command_line - do - local _accum_0 = { } - local _len_0 = 1 - for _index_0 = 1, #command_line do - local arg = command_line[_index_0] - _accum_0[_len_0] = arg - _len_0 = _len_0 + 1 - end - copy_command_line = _accum_0 - end - append(copy_command_line, { - '--term-status-msg=Encode time-pos: ${=time-pos}\\n' - }) - self:show() - local processFd = run_subprocess_popen(copy_command_line) - for line in processFd:lines() do - msg.verbose(string.format('%q', line)) - self:parseLine(line) - self:draw() - end - processFd:close() - self:hide() - if self.finishedReason == "End of file" then - return true - end - return false - end - } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self, startTime, endTime) - self.startTime = startTime - self.endTime = endTime - self.duration = endTime - startTime - self.currentTime = startTime - end, - __base = _base_0, - __name = "EncodeWithProgress", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - EncodeWithProgress = _class_0 -end -local get_active_tracks -get_active_tracks = function() - local accepted = { - video = true, - audio = not mp.get_property_bool("mute"), - sub = mp.get_property_bool("sub-visibility") - } - local active = { - video = { }, - audio = { }, - sub = { } - } - for _, track in ipairs(mp.get_property_native("track-list")) do - if track["selected"] and accepted[track["type"]] then - local count = #active[track["type"]] - active[track["type"]][count + 1] = track - end - end - return active -end -local filter_tracks_supported_by_format -filter_tracks_supported_by_format = function(active_tracks, format) - local has_video_codec = format.videoCodec ~= "" - local has_audio_codec = format.audioCodec ~= "" - local supported = { - video = has_video_codec and active_tracks["video"] or { }, - audio = has_audio_codec and active_tracks["audio"] or { }, - sub = has_video_codec and active_tracks["sub"] or { } - } - return supported -end -local append_track -append_track = function(out, track) - local external_flag = { - ["audio"] = "audio-file", - ["sub"] = "sub-file" - } - local internal_flag = { - ["video"] = "vid", - ["audio"] = "aid", - ["sub"] = "sid" - } - if track['external'] and string.len(track['external-filename']) <= 2048 then - return append(out, { - "--" .. tostring(external_flag[track['type']]) .. "=" .. tostring(track['external-filename']) - }) - else - return append(out, { - "--" .. tostring(internal_flag[track['type']]) .. "=" .. tostring(track['id']) - }) - end -end -local append_audio_tracks -append_audio_tracks = function(out, tracks) - local internal_tracks = { } - for _index_0 = 1, #tracks do - local track = tracks[_index_0] - if track['external'] then - append_track(out, track) - else - append(internal_tracks, { - track - }) - end - end - if #internal_tracks > 1 then - local filter_string = "" - for _index_0 = 1, #internal_tracks do - local track = internal_tracks[_index_0] - filter_string = filter_string .. "[aid" .. tostring(track['id']) .. "]" - end - filter_string = filter_string .. "amix[ao]" - return append(out, { - "--lavfi-complex=" .. tostring(filter_string) - }) - else - if #internal_tracks == 1 then - return append_track(out, internal_tracks[1]) - end - end -end -local get_scale_filters -get_scale_filters = function() - if options.scale_height > 0 then - return { - "lavfi-scale=-2:" .. tostring(options.scale_height) - } - end - return { } -end -local get_fps_filters -get_fps_filters = function() - if options.fps > 0 then - return { - "fps=" .. tostring(options.fps) - } - end - return { } -end -local append_property -append_property = function(out, property_name, option_name) - option_name = option_name or property_name - local prop = mp.get_property(property_name) - if prop and prop ~= "" then - return append(out, { - "--" .. tostring(option_name) .. "=" .. tostring(prop) - }) - end -end -local append_list_options -append_list_options = function(out, property_name, option_prefix) - option_prefix = option_prefix or property_name - local prop = mp.get_property_native(property_name) - if prop then - for _index_0 = 1, #prop do - local value = prop[_index_0] - append(out, { - "--" .. tostring(option_prefix) .. "-append=" .. tostring(value) - }) - end - end -end -local get_playback_options -get_playback_options = function() - local ret = { } - append_property(ret, "sub-ass-override") - append_property(ret, "sub-ass-force-style") - append_property(ret, "sub-ass-vsfilter-aspect-compat") - append_property(ret, "sub-auto") - append_property(ret, "sub-delay") - append_property(ret, "video-rotate") - append_property(ret, "ytdl-format") - append_property(ret, "deinterlace") - return ret -end -local get_speed_flags -get_speed_flags = function() - local ret = { } - local speed = mp.get_property_native("speed") - if speed ~= 1 then - append(ret, { - "--vf-add=setpts=PTS/" .. tostring(speed), - "--af-add=atempo=" .. tostring(speed), - "--sub-speed=1/" .. tostring(speed) - }) - end - return ret -end -local get_metadata_flags -get_metadata_flags = function() - local title = mp.get_property("filename/no-ext") - return { - "--oset-metadata=title=%" .. tostring(string.len(title)) .. "%" .. tostring(title) - } -end -local apply_current_filters -apply_current_filters = function(filters) - local vf = mp.get_property_native("vf") - msg.verbose("apply_current_filters: got " .. tostring(#vf) .. " currently applied.") - for _index_0 = 1, #vf do - local _continue_0 = false - repeat - local filter = vf[_index_0] - msg.verbose("apply_current_filters: filter name: " .. tostring(filter['name'])) - if filter["enabled"] == false then - _continue_0 = true - break - end - local str = filter["name"] - local params = filter["params"] or { } - for k, v in pairs(params) do - str = str .. ":" .. tostring(k) .. "=%" .. tostring(string.len(v)) .. "%" .. tostring(v) - end - append(filters, { - str - }) - _continue_0 = true - until true - if not _continue_0 then - break - end - end -end -local get_video_filters -get_video_filters = function(format, region) - local filters = { } - append(filters, format:getPreFilters()) - if options.apply_current_filters then - apply_current_filters(filters) - end - if region and region:is_valid() then - append(filters, { - "lavfi-crop=" .. tostring(region.w) .. ":" .. tostring(region.h) .. ":" .. tostring(region.x) .. ":" .. tostring(region.y) - }) - end - append(filters, get_scale_filters()) - append(filters, get_fps_filters()) - append(filters, format:getPostFilters()) - return filters -end -local get_video_encode_flags -get_video_encode_flags = function(format, region) - local flags = { } - append(flags, get_playback_options()) - local filters = get_video_filters(format, region) - for _index_0 = 1, #filters do - local f = filters[_index_0] - append(flags, { - "--vf-add=" .. tostring(f) - }) - end - append(flags, get_speed_flags()) - return flags -end -local calculate_bitrate -calculate_bitrate = function(active_tracks, format, length) - if format.videoCodec == "" then - return nil, options.target_filesize * 8 / length - end - local video_kilobits = options.target_filesize * 8 - local audio_kilobits = nil - local has_audio_track = #active_tracks["audio"] > 0 - if options.strict_filesize_constraint and has_audio_track then - audio_kilobits = length * options.strict_audio_bitrate - video_kilobits = video_kilobits - audio_kilobits - end - local video_bitrate = math.floor(video_kilobits / length) - local audio_bitrate = audio_kilobits and math.floor(audio_kilobits / length) or nil - return video_bitrate, audio_bitrate -end -local find_path -find_path = function(startTime, endTime) - local path = mp.get_property('path') - if not path then - return nil, nil, nil, nil, nil - end - local is_stream = not file_exists(path) - local is_temporary = false - if is_stream then - if mp.get_property('file-format') == 'hls' then - path = utils.join_path(parse_directory('~'), 'cache_dump.ts') - mp.command_native({ - 'dump_cache', - seconds_to_time_string(startTime, false, true), - seconds_to_time_string(endTime + 5, false, true), - path - }) - endTime = endTime - startTime - startTime = 0 - is_temporary = true - end - end - return path, is_stream, is_temporary, startTime, endTime -end -local encode -encode = function(region, startTime, endTime) - local format = formats[options.output_format] - local originalStartTime = startTime - local originalEndTime = endTime - local path, is_stream, is_temporary - path, is_stream, is_temporary, startTime, endTime = find_path(startTime, endTime) - if not path then - message("No file is being played") - return - end - local command = { - "mpv", - path, - "--start=" .. seconds_to_time_string(startTime, false, true), - "--end=" .. seconds_to_time_string(endTime, false, true), - "--loop-file=no", - "--no-pause" - } - append(command, format:getCodecFlags()) - local active_tracks = get_active_tracks() - local supported_active_tracks = filter_tracks_supported_by_format(active_tracks, format) - for track_type, tracks in pairs(supported_active_tracks) do - if track_type == "audio" then - append_audio_tracks(command, tracks) - else - for _index_0 = 1, #tracks do - local track = tracks[_index_0] - append_track(command, track) - end - end - end - for track_type, tracks in pairs(supported_active_tracks) do - local _continue_0 = false - repeat - if #tracks > 0 then - _continue_0 = true - break - end - local _exp_0 = track_type - if "video" == _exp_0 then - append(command, { - "--vid=no" - }) - elseif "audio" == _exp_0 then - append(command, { - "--aid=no" - }) - elseif "sub" == _exp_0 then - append(command, { - "--sid=no" - }) - end - _continue_0 = true - until true - if not _continue_0 then - break - end - end - if format.videoCodec ~= "" then - append(command, get_video_encode_flags(format, region)) - end - append(command, format:getFlags()) - if options.write_filename_on_metadata then - append(command, get_metadata_flags()) - end - if format.acceptsBitrate then - if options.target_filesize > 0 then - local length = endTime - startTime - local video_bitrate, audio_bitrate = calculate_bitrate(supported_active_tracks, format, length) - if video_bitrate then - append(command, { - "--ovcopts-add=b=" .. tostring(video_bitrate) .. "k" - }) - end - if audio_bitrate then - append(command, { - "--oacopts-add=b=" .. tostring(audio_bitrate) .. "k" - }) - end - if options.strict_filesize_constraint then - local type = format.videoCodec ~= "" and "ovc" or "oac" - append(command, { - "--" .. tostring(type) .. "opts-add=minrate=" .. tostring(bitrate) .. "k", - "--" .. tostring(type) .. "opts-add=maxrate=" .. tostring(bitrate) .. "k" - }) - end - else - local type = format.videoCodec ~= "" and "ovc" or "oac" - append(command, { - "--" .. tostring(type) .. "opts-add=b=0" - }) - end - end - for token in string.gmatch(options.additional_flags, "[^%s]+") do - command[#command + 1] = token - end - if not options.strict_filesize_constraint then - for token in string.gmatch(options.non_strict_additional_flags, "[^%s]+") do - command[#command + 1] = token - end - if options.crf >= 0 then - append(command, { - "--ovcopts-add=crf=" .. tostring(options.crf) - }) - end - end - local dir = "" - if is_stream then - dir = parse_directory("~") - else - local _ - dir, _ = utils.split_path(path) - end - if options.output_directory ~= "" then - dir = parse_directory(options.output_directory) - end - local formatted_filename = format_filename(originalStartTime, originalEndTime, format) - local out_path = utils.join_path(dir, formatted_filename) - append(command, { - "--o=" .. tostring(out_path) - }) - if options.twopass and format.supportsTwopass and not is_stream then - local first_pass_cmdline - do - local _accum_0 = { } - local _len_0 = 1 - for _index_0 = 1, #command do - local arg = command[_index_0] - _accum_0[_len_0] = arg - _len_0 = _len_0 + 1 - end - first_pass_cmdline = _accum_0 - end - append(first_pass_cmdline, { - "--ovcopts-add=flags=+pass1" - }) - message("Starting first pass...") - msg.verbose("First-pass command line: ", table.concat(first_pass_cmdline, " ")) - local res = run_subprocess({ - args = first_pass_cmdline, - cancellable = false - }) - if not res then - message("First pass failed! Check the logs for details.") - return - end - append(command, { - "--ovcopts-add=flags=+pass2" - }) - if format.videoCodec == "libvpx" then - msg.verbose("Patching libvpx pass log file...") - vp8_patch_logfile(get_pass_logfile_path(out_path), endTime - startTime) - end - end - msg.info("Encoding to", out_path) - msg.verbose("Command line:", table.concat(command, " ")) - if options.run_detached then - message("Started encode, process was detached.") - return utils.subprocess_detached({ - args = command - }) - else - local res = false - if not should_display_progress() then - message("Started encode...") - res = run_subprocess({ - args = command, - cancellable = false - }) - else - local ewp = EncodeWithProgress(startTime, endTime) - res = ewp:startEncode(command) - end - if res then - message("Encoded successfully! Saved to\\N" .. tostring(bold(out_path))) - else - message("Encode failed! Check the logs for details.") - end - os.remove(get_pass_logfile_path(out_path)) - if is_temporary then - return os.remove(path) - end - end -end -local CropPage -do - local _class_0 - local _parent_0 = Page - local _base_0 = { - reset = function(self) - local dimensions = get_video_dimensions() - local xa, ya - do - local _obj_0 = dimensions.top_left - xa, ya = _obj_0.x, _obj_0.y - end - self.pointA:set_from_screen(xa, ya) - local xb, yb - do - local _obj_0 = dimensions.bottom_right - xb, yb = _obj_0.x, _obj_0.y - end - self.pointB:set_from_screen(xb, yb) - if self.visible then - return self:draw() - end - end, - setPointA = function(self) - local posX, posY = mp.get_mouse_pos() - self.pointA:set_from_screen(posX, posY) - if self.visible then - return self:draw() - end - end, - setPointB = function(self) - local posX, posY = mp.get_mouse_pos() - self.pointB:set_from_screen(posX, posY) - if self.visible then - return self:draw() - end - end, - cancel = function(self) - self:hide() - return self.callback(false, nil) - end, - finish = function(self) - local region = Region() - region:set_from_points(self.pointA, self.pointB) - self:hide() - return self.callback(true, region) - end, - draw_box = function(self, ass) - local region = Region() - region:set_from_points(self.pointA:to_screen(), self.pointB:to_screen()) - local d = get_video_dimensions() - ass:new_event() - ass:append("{\\an7}") - ass:pos(0, 0) - ass:append('{\\bord0}') - ass:append('{\\shad0}') - ass:append('{\\c&H000000&}') - ass:append('{\\alpha&H77}') - ass:draw_start() - ass:rect_cw(d.top_left.x, d.top_left.y, region.x, region.y + region.h) - ass:rect_cw(region.x, d.top_left.y, d.bottom_right.x, region.y) - ass:rect_cw(d.top_left.x, region.y + region.h, region.x + region.w, d.bottom_right.y) - ass:rect_cw(region.x + region.w, region.y, d.bottom_right.x, d.bottom_right.y) - return ass:draw_stop() - end, - draw = function(self) - local window = { } - window.w, window.h = mp.get_osd_size() - local ass = assdraw.ass_new() - self:draw_box(ass) - ass:new_event() - self:setup_text(ass) - ass:append(tostring(bold('Crop:')) .. "\\N") - ass:append(tostring(bold('1:')) .. " change point A (" .. tostring(self.pointA.x) .. ", " .. tostring(self.pointA.y) .. ")\\N") - ass:append(tostring(bold('2:')) .. " change point B (" .. tostring(self.pointB.x) .. ", " .. tostring(self.pointB.y) .. ")\\N") - ass:append(tostring(bold('r:')) .. " reset to whole screen\\N") - ass:append(tostring(bold('ESC:')) .. " cancel crop\\N") - local width, height = math.abs(self.pointA.x - self.pointB.x), math.abs(self.pointA.y - self.pointB.y) - ass:append(tostring(bold('ENTER:')) .. " confirm crop (" .. tostring(width) .. "x" .. tostring(height) .. ")\\N") - return mp.set_osd_ass(window.w, window.h, ass.text) - end - } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self, callback, region) - self.pointA = VideoPoint() - self.pointB = VideoPoint() - self.keybinds = { - ["1"] = (function() - local _base_1 = self - local _fn_0 = _base_1.setPointA - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["2"] = (function() - local _base_1 = self - local _fn_0 = _base_1.setPointB - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["r"] = (function() - local _base_1 = self - local _fn_0 = _base_1.reset - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["ESC"] = (function() - local _base_1 = self - local _fn_0 = _base_1.cancel - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["ENTER"] = (function() - local _base_1 = self - local _fn_0 = _base_1.finish - return function(...) - return _fn_0(_base_1, ...) - end - end)() - } - self:reset() - self.callback = callback - if region and region:is_valid() then - self.pointA.x = region.x - self.pointA.y = region.y - self.pointB.x = region.x + region.w - self.pointB.y = region.y + region.h - end - end, - __base = _base_0, - __name = "CropPage", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - CropPage = _class_0 -end -local Option -do - local _class_0 - local _base_0 = { - hasPrevious = function(self) - local _exp_0 = self.optType - if "bool" == _exp_0 then - return true - elseif "int" == _exp_0 then - if self.opts.min then - return self.value > self.opts.min - else - return true - end - elseif "list" == _exp_0 then - return self.value > 1 - end - end, - hasNext = function(self) - local _exp_0 = self.optType - if "bool" == _exp_0 then - return true - elseif "int" == _exp_0 then - if self.opts.max then - return self.value < self.opts.max - else - return true - end - elseif "list" == _exp_0 then - return self.value < #self.opts.possibleValues - end - end, - leftKey = function(self) - local _exp_0 = self.optType - if "bool" == _exp_0 then - self.value = not self.value - elseif "int" == _exp_0 then - self.value = self.value - self.opts.step - if self.opts.min and self.opts.min > self.value then - self.value = self.opts.min - end - elseif "list" == _exp_0 then - if self.value > 1 then - self.value = self.value - 1 - end - end - end, - rightKey = function(self) - local _exp_0 = self.optType - if "bool" == _exp_0 then - self.value = not self.value - elseif "int" == _exp_0 then - self.value = self.value + self.opts.step - if self.opts.max and self.opts.max < self.value then - self.value = self.opts.max - end - elseif "list" == _exp_0 then - if self.value < #self.opts.possibleValues then - self.value = self.value + 1 - end - end - end, - getValue = function(self) - local _exp_0 = self.optType - if "bool" == _exp_0 then - return self.value - elseif "int" == _exp_0 then - return self.value - elseif "list" == _exp_0 then - local value, _ - do - local _obj_0 = self.opts.possibleValues[self.value] - value, _ = _obj_0[1], _obj_0[2] - end - return value - end - end, - setValue = function(self, value) - local _exp_0 = self.optType - if "bool" == _exp_0 then - self.value = value - elseif "int" == _exp_0 then - self.value = value - elseif "list" == _exp_0 then - local set = false - for i, possiblePair in ipairs(self.opts.possibleValues) do - local possibleValue, _ - possibleValue, _ = possiblePair[1], possiblePair[2] - if possibleValue == value then - set = true - self.value = i - break - end - end - if not set then - return msg.warn("Tried to set invalid value " .. tostring(value) .. " to " .. tostring(self.displayText) .. " option.") - end - end - end, - getDisplayValue = function(self) - local _exp_0 = self.optType - if "bool" == _exp_0 then - return self.value and "yes" or "no" - elseif "int" == _exp_0 then - if self.opts.altDisplayNames and self.opts.altDisplayNames[self.value] then - return self.opts.altDisplayNames[self.value] - else - return tostring(self.value) - end - elseif "list" == _exp_0 then - local value, displayValue - do - local _obj_0 = self.opts.possibleValues[self.value] - value, displayValue = _obj_0[1], _obj_0[2] - end - return displayValue or value - end - end, - draw = function(self, ass, selected) - if selected then - ass:append(tostring(bold(self.displayText)) .. ": ") - else - ass:append(tostring(self.displayText) .. ": ") - end - if self:hasPrevious() then - ass:append("◀ ") - end - ass:append(self:getDisplayValue()) - if self:hasNext() then - ass:append(" ▶") - end - return ass:append("\\N") - end - } - _base_0.__index = _base_0 - _class_0 = setmetatable({ - __init = function(self, optType, displayText, value, opts) - self.optType = optType - self.displayText = displayText - self.opts = opts - self.value = 1 - return self:setValue(value) - end, - __base = _base_0, - __name = "Option" - }, { - __index = _base_0, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - Option = _class_0 -end -local EncodeOptionsPage -do - local _class_0 - local _parent_0 = Page - local _base_0 = { - getCurrentOption = function(self) - return self.options[self.currentOption][2] - end, - leftKey = function(self) - (self:getCurrentOption()):leftKey() - return self:draw() - end, - rightKey = function(self) - (self:getCurrentOption()):rightKey() - return self:draw() - end, - prevOpt = function(self) - self.currentOption = math.max(1, self.currentOption - 1) - return self:draw() - end, - nextOpt = function(self) - self.currentOption = math.min(#self.options, self.currentOption + 1) - return self:draw() - end, - confirmOpts = function(self) - for _, optPair in ipairs(self.options) do - local optName, opt - optName, opt = optPair[1], optPair[2] - options[optName] = opt:getValue() - end - self:hide() - return self.callback(true) - end, - cancelOpts = function(self) - self:hide() - return self.callback(false) - end, - draw = function(self) - local window_w, window_h = mp.get_osd_size() - local ass = assdraw.ass_new() - ass:new_event() - self:setup_text(ass) - ass:append(tostring(bold('Options:')) .. "\\N\\N") - for i, optPair in ipairs(self.options) do - local opt = optPair[2] - opt:draw(ass, self.currentOption == i) - end - ass:append("\\N▲ / ▼: navigate\\N") - ass:append(tostring(bold('ENTER:')) .. " confirm options\\N") - ass:append(tostring(bold('ESC:')) .. " cancel\\N") - return mp.set_osd_ass(window_w, window_h, ass.text) - end - } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self, callback) - self.callback = callback - self.currentOption = 1 - local scaleHeightOpts = { - possibleValues = { - { - -1, - "no" - }, - { - 144 - }, - { - 240 - }, - { - 360 - }, - { - 480 - }, - { - 540 - }, - { - 720 - }, - { - 1080 - }, - { - 1440 - }, - { - 2160 - } - } - } - local filesizeOpts = { - step = 250, - min = 0, - altDisplayNames = { - [0] = "0 (constant quality)" - } - } - local crfOpts = { - step = 1, - min = -1, - altDisplayNames = { - [-1] = "disabled" - } - } - local fpsOpts = { - possibleValues = { - { - -1, - "source" - }, - { - 15 - }, - { - 24 - }, - { - 30 - }, - { - 48 - }, - { - 50 - }, - { - 60 - }, - { - 120 - }, - { - 240 - } - } - } - local formatIds = { - "webm-vp8", - "webm-vp9", - "mp4", - "mp4-nvenc", - "raw", - "mp3", - "gif" - } - local formatOpts = { - possibleValues = (function() - local _accum_0 = { } - local _len_0 = 1 - for _index_0 = 1, #formatIds do - local fId = formatIds[_index_0] - _accum_0[_len_0] = { - fId, - formats[fId].displayName - } - _len_0 = _len_0 + 1 - end - return _accum_0 - end)() - } - self.options = { - { - "output_format", - Option("list", "Output Format", options.output_format, formatOpts) - }, - { - "twopass", - Option("bool", "Two Pass", options.twopass) - }, - { - "apply_current_filters", - Option("bool", "Apply Current Video Filters", options.apply_current_filters) - }, - { - "scale_height", - Option("list", "Scale Height", options.scale_height, scaleHeightOpts) - }, - { - "strict_filesize_constraint", - Option("bool", "Strict Filesize Constraint", options.strict_filesize_constraint) - }, - { - "write_filename_on_metadata", - Option("bool", "Write Filename on Metadata", options.write_filename_on_metadata) - }, - { - "target_filesize", - Option("int", "Target Filesize", options.target_filesize, filesizeOpts) - }, - { - "crf", - Option("int", "CRF", options.crf, crfOpts) - }, - { - "fps", - Option("list", "FPS", options.fps, fpsOpts) - } - } - self.keybinds = { - ["LEFT"] = (function() - local _base_1 = self - local _fn_0 = _base_1.leftKey - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["RIGHT"] = (function() - local _base_1 = self - local _fn_0 = _base_1.rightKey - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["UP"] = (function() - local _base_1 = self - local _fn_0 = _base_1.prevOpt - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["DOWN"] = (function() - local _base_1 = self - local _fn_0 = _base_1.nextOpt - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["ENTER"] = (function() - local _base_1 = self - local _fn_0 = _base_1.confirmOpts - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["ESC"] = (function() - local _base_1 = self - local _fn_0 = _base_1.cancelOpts - return function(...) - return _fn_0(_base_1, ...) - end - end)() - } - end, - __base = _base_0, - __name = "EncodeOptionsPage", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - EncodeOptionsPage = _class_0 -end -local PreviewPage -do - local _class_0 - local _parent_0 = Page - local _base_0 = { - prepare = function(self) - local vf = mp.get_property_native("vf") - vf[#vf + 1] = { - name = "sub" - } - if self.region:is_valid() then - vf[#vf + 1] = { - name = "crop", - params = { - w = tostring(self.region.w), - h = tostring(self.region.h), - x = tostring(self.region.x), - y = tostring(self.region.y) - } - } - end - mp.set_property_native("vf", vf) - if self.startTime > -1 and self.endTime > -1 then - mp.set_property_native("ab-loop-a", self.startTime) - mp.set_property_native("ab-loop-b", self.endTime) - mp.set_property_native("time-pos", self.startTime) - end - return mp.set_property_native("pause", false) - end, - dispose = function(self) - mp.set_property("ab-loop-a", "no") - mp.set_property("ab-loop-b", "no") - for prop, value in pairs(self.originalProperties) do - mp.set_property_native(prop, value) - end - end, - draw = function(self) - local window_w, window_h = mp.get_osd_size() - local ass = assdraw.ass_new() - ass:new_event() - self:setup_text(ass) - ass:append("Press " .. tostring(bold('ESC')) .. " to exit preview.\\N") - return mp.set_osd_ass(window_w, window_h, ass.text) - end, - cancel = function(self) - self:hide() - return self.callback() - end - } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self, callback, region, startTime, endTime) - self.callback = callback - self.originalProperties = { - ["vf"] = mp.get_property_native("vf"), - ["time-pos"] = mp.get_property_native("time-pos"), - ["pause"] = mp.get_property_native("pause") - } - self.keybinds = { - ["ESC"] = (function() - local _base_1 = self - local _fn_0 = _base_1.cancel - return function(...) - return _fn_0(_base_1, ...) - end - end)() - } - self.region = region - self.startTime = startTime - self.endTime = endTime - self.isLoop = false - end, - __base = _base_0, - __name = "PreviewPage", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - PreviewPage = _class_0 -end -local MainPage -do - local _class_0 - local _parent_0 = Page - local _base_0 = { - setStartTime = function(self) - self.startTime = mp.get_property_number("time-pos") - if self.visible then - self:clear() - return self:draw() - end - end, - setEndTime = function(self) - self.endTime = mp.get_property_number("time-pos") - if self.visible then - self:clear() - return self:draw() - end - end, - setupStartAndEndTimes = function(self) - if mp.get_property_native("duration") then - self.startTime = 0 - self.endTime = mp.get_property_native("duration") - else - self.startTime = -1 - self.endTime = -1 - end - if self.visible then - self:clear() - return self:draw() - end - end, - draw = function(self) - local window_w, window_h = mp.get_osd_size() - local ass = assdraw.ass_new() - ass:new_event() - self:setup_text(ass) - ass:append(tostring(bold('WebM maker')) .. "\\N\\N") - ass:append(tostring(bold('c:')) .. " crop\\N") - ass:append(tostring(bold('1:')) .. " set start time (current is " .. tostring(seconds_to_time_string(self.startTime)) .. ")\\N") - ass:append(tostring(bold('2:')) .. " set end time (current is " .. tostring(seconds_to_time_string(self.endTime)) .. ")\\N") - ass:append(tostring(bold('o:')) .. " change encode options\\N") - ass:append(tostring(bold('p:')) .. " preview\\N") - ass:append(tostring(bold('e:')) .. " encode\\N\\N") - ass:append(tostring(bold('ESC:')) .. " close\\N") - return mp.set_osd_ass(window_w, window_h, ass.text) - end, - onUpdateCropRegion = function(self, updated, newRegion) - if updated then - self.region = newRegion - end - return self:show() - end, - crop = function(self) - self:hide() - local cropPage = CropPage((function() - local _base_1 = self - local _fn_0 = _base_1.onUpdateCropRegion - return function(...) - return _fn_0(_base_1, ...) - end - end)(), self.region) - return cropPage:show() - end, - onOptionsChanged = function(self, updated) - return self:show() - end, - changeOptions = function(self) - self:hide() - local encodeOptsPage = EncodeOptionsPage((function() - local _base_1 = self - local _fn_0 = _base_1.onOptionsChanged - return function(...) - return _fn_0(_base_1, ...) - end - end)()) - return encodeOptsPage:show() - end, - onPreviewEnded = function(self) - return self:show() - end, - preview = function(self) - self:hide() - local previewPage = PreviewPage((function() - local _base_1 = self - local _fn_0 = _base_1.onPreviewEnded - return function(...) - return _fn_0(_base_1, ...) - end - end)(), self.region, self.startTime, self.endTime) - return previewPage:show() - end, - encode = function(self) - self:hide() - if self.startTime < 0 then - message("No start time, aborting") - return - end - if self.endTime < 0 then - message("No end time, aborting") - return - end - if self.startTime >= self.endTime then - message("Start time is ahead of end time, aborting") - return - end - return encode(self.region, self.startTime, self.endTime) - end - } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self) - self.keybinds = { - ["c"] = (function() - local _base_1 = self - local _fn_0 = _base_1.crop - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["1"] = (function() - local _base_1 = self - local _fn_0 = _base_1.setStartTime - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["2"] = (function() - local _base_1 = self - local _fn_0 = _base_1.setEndTime - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["o"] = (function() - local _base_1 = self - local _fn_0 = _base_1.changeOptions - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["p"] = (function() - local _base_1 = self - local _fn_0 = _base_1.preview - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["e"] = (function() - local _base_1 = self - local _fn_0 = _base_1.encode - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["ESC"] = (function() - local _base_1 = self - local _fn_0 = _base_1.hide - return function(...) - return _fn_0(_base_1, ...) - end - end)() - } - self.startTime = -1 - self.endTime = -1 - self.region = Region() - end, - __base = _base_0, - __name = "MainPage", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - MainPage = _class_0 -end -monitor_dimensions() -local mainPage = MainPage() -mp.add_key_binding(options.keybind, "display-webm-encoder", (function() - local _base_0 = mainPage - local _fn_0 = _base_0.show - return function(...) - return _fn_0(_base_0, ...) - end -end)(), { - repeatable = false -}) -return mp.register_event("file-loaded", (function() - local _base_0 = mainPage - local _fn_0 = _base_0.setupStartAndEndTimes - return function(...) - return _fn_0(_base_0, ...) - end -end)()) diff --git a/.config/paru/paru.conf b/.config/paru/paru.conf deleted file mode 100644 index 351ad9f..0000000 --- a/.config/paru/paru.conf +++ /dev/null @@ -1,30 +0,0 @@ -# -# $PARU_CONF -# /etc/paru.conf -# ~/.config/paru/paru.conf -# -# See the paru.conf(5) manpage for options - -# -# GENERAL OPTIONS -# -[options] -PgpFetch -Devel -Provides -DevelSuffixes = -git -cvs -svn -bzr -darcs -always -BottomUp -#RemoveMake -SudoLoop -#UseAsk -#CombinedUpgrade -#CleanAfter -#UpgradeMenu -NewsOnUpgrade - -# -# Binary OPTIONS -# -#[bin] -#FileManager = vifm -#MFlags = --skippgpcheck diff --git a/.config/qtile/__pycache__/config.cpython-39.pyc b/.config/qtile/__pycache__/config.cpython-39.pyc deleted file mode 100644 index a9ffd56d92b691a046cab51858ef9f1328aa654a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11034 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 bZ|Iw?b$!(OSAC21FZy=lpUfSGZs`9DoNx1d diff --git a/.config/qtile/colors.py b/.config/qtile/colors.py deleted file mode 100644 index 2a36984..0000000 --- a/.config/qtile/colors.py +++ /dev/null @@ -1,47 +0,0 @@ -# color definitions - -seiun = { - "bg": "#202020", - "fg": "#dfdfdf", - "dark-red": "#ea7171", - "red": "#ed8682", - "dark-green": "#96a171", - "green": "#b1d094", - "dark-yellow": "#e7a55f", - "yellow": "#ecb983", - "dark-blue": "#7196a1", - "blue": "#9fb8bf", - "dark-magenta": "#c28490", - "magenta": "#d7adb5", - "dark-cyan": "#80ab96", - "cyan": "#9fbfaf", - "dark-gray": "#3d3d3d", - "gray": "#666666", -} - -gruvbox = { - "bg": "#282828", - "bg0_h": "#1d2021", - "bg1": "#3c3836", - "bg2": "#504945", - "bg3": "#665c45", - "bg4": "#7c6f64", - "gray": "#928374", - "dark-grey": "#a89984", - "fg0": "#fbf1c7", - "fg": "#ebdbb2", - "dark-red": "#cc241d", - "light-red": "#fb4934", - "dark-green": "#98971a", - "light-green": "#b8bb26", - "dark-yellow": "#d79921", - "light-yellow": "#fabd2f", - "dark-blue": "#458588", - "light-blue": "#83a598", - "dark-purple": "#b16286", - "light-purple": "#d3869b", - "dark-aqua": "#689d6a", - "light-aqua": "#8ec07c", - "dark-orange": "#d65d0e", - "light-orange": "#fe8019", -} diff --git a/.config/qtile/config.py b/.config/qtile/config.py deleted file mode 100644 index 75fd1a4..0000000 --- a/.config/qtile/config.py +++ /dev/null @@ -1,697 +0,0 @@ -# Copyright (c) 2010 Aldo Cortesi -# Copyright (c) 2010, 2014 dequis -# Copyright (c) 2012 Randall Ma -# Copyright (c) 2012-2014 Tycho Andersen -# Copyright (c) 2012 Craig Barnes -# Copyright (c) 2013 horsik -# Copyright (c) 2013 Tao Sauvage -# -# 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. - - -import os -import re -import socket -import subprocess -import colors -from typing import List # noqa: F401 -from libqtile import layout, bar, widget, hook, qtile -from libqtile.config import Click, Drag, Group, Key, Match, Screen, Rule -from libqtile.command import lazy - -from libqtile.widget import Spacer - -# mod4 or mod = super key -mod = "mod4" -mod1 = "alt" -mod2 = "control" -home = os.path.expanduser("~") - - -@lazy.function -def window_to_prev_group(qtile): - if qtile.currentWindow is not None: - i = qtile.groups.index(qtile.currentGroup) - qtile.currentWindow.togroup(qtile.groups[i - 1].name) - - -@lazy.function -def window_to_next_group(qtile): - if qtile.currentWindow is not None: - i = qtile.groups.index(qtile.currentGroup) - qtile.currentWindow.togroup(qtile.groups[i + 1].name) - - -myTerm = "kitty" # My terminal of choice - -keys = [ - # SUPER + FUNCTION KEYS - Key([mod], "f", lazy.window.toggle_fullscreen()), - Key([mod], "q", lazy.window.kill()), - Key([mod], "t", lazy.spawn("xterm")), - Key([mod], "v", lazy.spawn("pavucontrol")), - # Key([mod], "s", lazy.spawn("nwggrid -p -o 0.4")), - Key([mod], "s", lazy.spawn("albert toggle")), - Key([mod], "Escape", lazy.spawn("xkill")), - Key([mod], "Return", lazy.spawn("kitty")), - Key([mod], "KP_Enter", lazy.spawn("kitty")), - Key([mod], "x", lazy.shutdown()), - # SUPER + SHIFT KEYS - Key([mod, "shift"], "Return", lazy.spawn("thunar")), - Key( - [mod, "shift"], - "s", - lazy.spawn( - "dmenu_run -i -nb '#191919' -nf '#fea63c' -sb '#fea63c' -sf '#191919' -fn 'NotoMonoRegular:bold:pixelsize=14'" - ), - ), - # Key([mod, "shift"], "d", lazy.spawn(home + '/.config/qtile/scripts/dmenu.sh')), - Key([mod, "shift"], "q", lazy.window.kill()), - Key([mod, "shift"], "r", lazy.restart()), - Key([mod, "control"], "r", lazy.restart()), - Key([mod, "shift"], "x", lazy.shutdown()), - # CONTROL + ALT KEYS - Key( - ["mod1", "control"], - "o", - lazy.spawn(home + "/.config/qtile/scripts/picom-toggle.sh"), - ), - Key(["mod1", "control"], "t", lazy.spawn("xterm")), - Key(["mod1", "control"], "u", lazy.spawn("pavucontrol")), - # ALT + ... KEYS - Key(["mod1"], "p", lazy.spawn("pamac-manager")), - Key(["mod1"], "f", lazy.spawn("waterfox-g4")), - Key(["mod1"], "m", lazy.spawn("thunar")), - Key(["mod1"], "w", lazy.spawn("garuda-welcome")), - # CONTROL + SHIFT KEYS - Key([mod2, "shift"], "Escape", lazy.spawn("lxtask")), - # SCREENSHOTS - Key([], "Print", lazy.spawn("flameshot gui -p " + home + "/Pictures/Screenshots")), - Key( - [mod2], - "Print", - lazy.spawn("flameshot full -p " + home + "/Pictures/Screenshots"), - ), - # Key([mod2, "shift"], "Print", lazy.spawn('gnome-screenshot -i')), - # MULTIMEDIA KEYS - # INCREASE/DECREASE BRIGHTNESS - Key([], "XF86MonBrightnessUp", lazy.spawn("xbacklight -inc 5")), - Key([], "XF86MonBrightnessDown", lazy.spawn("xbacklight -dec 5")), - # INCREASE/DECREASE/MUTE VOLUME - Key([], "XF86AudioMute", lazy.spawn("amixer -q set Master toggle")), - Key([], "XF86AudioLowerVolume", lazy.spawn("amixer -q set Master 5%-")), - Key([], "XF86AudioRaiseVolume", lazy.spawn("amixer -q set Master 5%+")), - Key([], "XF86AudioPlay", lazy.spawn("playerctl play-pause")), - Key([], "XF86AudioNext", lazy.spawn("playerctl next")), - Key([], "XF86AudioPrev", lazy.spawn("playerctl previous")), - Key([], "XF86AudioStop", lazy.spawn("playerctl stop")), - # Key([], "XF86AudioPlay", lazy.spawn("mpc toggle")), - # Key([], "XF86AudioNext", lazy.spawn("mpc next")), - # Key([], "XF86AudioPrev", lazy.spawn("mpc prev")), - # Key([], "XF86AudioStop", lazy.spawn("mpc stop")), - # QTILE LAYOUT KEYS - Key([mod], "n", lazy.layout.normalize()), - Key([mod], "space", lazy.next_layout()), - # CHANGE FOCUS - Key([mod], "Up", lazy.layout.up()), - Key([mod], "Down", lazy.layout.down()), - Key([mod], "Left", lazy.layout.left()), - Key([mod], "Right", lazy.layout.right()), - Key([mod], "k", lazy.layout.up()), - Key([mod], "j", lazy.layout.down()), - Key([mod], "h", lazy.layout.left()), - Key([mod], "l", lazy.layout.right()), - # RESIZE UP, DOWN, LEFT, RIGHT - Key( - [mod, "control"], - "l", - lazy.layout.grow_right(), - lazy.layout.grow(), - lazy.layout.increase_ratio(), - lazy.layout.delete(), - ), - Key( - [mod, "control"], - "Right", - lazy.layout.grow_right(), - lazy.layout.grow(), - lazy.layout.increase_ratio(), - lazy.layout.delete(), - ), - Key( - [mod, "control"], - "h", - lazy.layout.grow_left(), - lazy.layout.shrink(), - lazy.layout.decrease_ratio(), - lazy.layout.add(), - ), - Key( - [mod, "control"], - "Left", - lazy.layout.grow_left(), - lazy.layout.shrink(), - lazy.layout.decrease_ratio(), - lazy.layout.add(), - ), - Key( - [mod, "control"], - "k", - lazy.layout.grow_up(), - lazy.layout.grow(), - lazy.layout.decrease_nmaster(), - ), - Key( - [mod, "control"], - "Up", - lazy.layout.grow_up(), - lazy.layout.grow(), - lazy.layout.decrease_nmaster(), - ), - Key( - [mod, "control"], - "j", - lazy.layout.grow_down(), - lazy.layout.shrink(), - lazy.layout.increase_nmaster(), - ), - Key( - [mod, "control"], - "Down", - lazy.layout.grow_down(), - lazy.layout.shrink(), - lazy.layout.increase_nmaster(), - ), - # FLIP LAYOUT FOR MONADTALL/MONADWIDE - Key([mod, "shift"], "f", lazy.layout.flip()), - # FLIP LAYOUT FOR BSP - Key([mod, "mod1"], "k", lazy.layout.flip_up()), - Key([mod, "mod1"], "j", lazy.layout.flip_down()), - Key([mod, "mod1"], "l", lazy.layout.flip_right()), - Key([mod, "mod1"], "h", lazy.layout.flip_left()), - # MOVE WINDOWS UP OR DOWN BSP LAYOUT - Key([mod, "shift"], "k", lazy.layout.shuffle_up()), - Key([mod, "shift"], "j", lazy.layout.shuffle_down()), - Key([mod, "shift"], "h", lazy.layout.shuffle_left()), - Key([mod, "shift"], "l", lazy.layout.shuffle_right()), - ### Treetab controls - Key( - [mod, "control"], - "k", - lazy.layout.section_up(), - desc="Move up a section in treetab", - ), - Key( - [mod, "control"], - "j", - lazy.layout.section_down(), - desc="Move down a section in treetab", - ), - # MOVE WINDOWS UP OR DOWN MONADTALL/MONADWIDE LAYOUT - Key([mod, "shift"], "Up", lazy.layout.shuffle_up()), - Key([mod, "shift"], "Down", lazy.layout.shuffle_down()), - Key([mod, "shift"], "Left", lazy.layout.swap_left()), - Key([mod, "shift"], "Right", lazy.layout.swap_right()), - # TOGGLE FLOATING LAYOUT - Key([mod, "shift"], "space", lazy.window.toggle_floating()), -] - -groups = [] - -# FOR QWERTY KEYBOARDS -group_names = [ - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0", -] - -# FOR AZERTY KEYBOARDS -# group_names = ["ampersand", "eacute", "quotedbl", "apostrophe", "parenleft", "section", "egrave", "exclam", "ccedilla", "agrave",] - -# group_labels = ["1 ", "2 ", "3 ", "4 ", "5 ", "6 ", "7 ", "8 ", "9 ", "0",] -group_labels = [ - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", -] -# group_labels = ["", "", "", "", "",] -# group_labels = ["Web", "Edit/chat", "Image", "Gimp", "Meld", "Video", "Vb", "Files", "Mail", "Music",] - -group_layouts = [ - "monadtall", - "monadtall", - "monadtall", - "monadtall", - "monadtall", - "monadtall", - "monadtall", - "monadtall", - "treetab", - "floating", -] -# group_layouts = ["monadtall", "matrix", "monadtall", "bsp", "monadtall", "matrix", "monadtall", "bsp", "monadtall", "monadtall",] - -for i in range(len(group_names)): - groups.append( - Group( - name=group_names[i], - layout=group_layouts[i].lower(), - label=group_labels[i], - ) - ) - -for i in groups: - keys.extend( - [ - # CHANGE WORKSPACES - Key([mod], i.name, lazy.group[i.name].toscreen()), - Key([mod], "Tab", lazy.screen.next_group()), - Key([mod, "shift"], "Tab", lazy.screen.prev_group()), - Key(["mod1"], "Tab", lazy.screen.next_group()), - Key(["mod1", "shift"], "Tab", lazy.screen.prev_group()), - # MOVE WINDOW TO SELECTED WORKSPACE 1-10 AND STAY ON WORKSPACE - # Key([mod, "shift"], i.name, lazy.window.togroup(i.name)), - # MOVE WINDOW TO SELECTED WORKSPACE 1-10 AND FOLLOW MOVED WINDOW TO WORKSPACE - Key( - [mod, "shift"], - i.name, - lazy.window.togroup(i.name), - lazy.group[i.name].toscreen(), - ), - ] - ) - - -color = colors.gruvbox - - -def init_layout_theme(): - return { - "margin": 10, - "border_width": 2, - "border_focus": color["gray"], - "border_normal": color["dark-aqua"], - } - - -layout_theme = init_layout_theme() - - -layouts = [ - layout.MonadTall( - margin=16, - border_width=2, - border_focus=color["gray"], - border_normal=color["dark-aqua"], - ), - layout.MonadWide( - margin=16, - border_width=2, - border_focus=color["gray"], - border_normal=color["dark-aqua"], - ), - layout.Matrix(**layout_theme), - layout.Bsp(**layout_theme), - layout.Floating(**layout_theme), - layout.RatioTile(**layout_theme), - layout.Max(**layout_theme), - layout.Columns(**layout_theme), - layout.Stack(**layout_theme), - layout.Tile(**layout_theme), - layout.TreeTab( - sections=["FIRST", "SECOND"], - bg_color=color["bg1"], - active_bg=color["dark-blue"], - inactive_bg=color["light-blue"], - padding_y=5, - section_top=10, - panel_width=280, - ), - layout.VerticalTile(**layout_theme), - layout.Zoomy(**layout_theme), -] - -# COLORS FOR THE BAR - - -def base(fg="text", bg="dark"): - return {"foreground": color["fg"], "background": color["bg"]} - - -# WIDGETS FOR THE BAR - - -def init_widgets_defaults(): - return dict(font="Noto Sans", fontsize=9, padding=2, background=color["bg1"]) - - -widget_defaults = init_widgets_defaults() - - -def init_widgets_list(): - prompt = "{0}@{1}: ".format(os.environ["USER"], socket.gethostname()) - widgets_list = [ - widget.Sep( - linewidth=1, padding=10, foreground=color["bg1"], background=color["bg1"] - ), # - widget.Image( - filename="~/.config/qtile/icons/qtilelogo.png", - iconsize=9, - background=color["bg"], - mouse_callbacks={"Button1": lambda: qtile.cmd_spawn("jgmenu_run")}, - ), - widget.GroupBox( - **base(bg=color["bg1"]), - font="UbuntuMono Nerd Font", - fontsize=11, - margin_y=3, - margin_x=2, - padding_y=5, - padding_x=4, - borderwidth=3, - active=color["fg"], - inactive=color["light-red"], - rounded=True, - highlight_method="block", - urgent_alert_method="block", - urgent_border=color["dark-red"], - this_current_screen_border=color["dark-aqua"], - this_screen_border=color["dark-green"], - other_current_screen_border=color["bg0_h"], - other_screen_border=color["gray"], - disable_drag=True - ), - widget.TaskList( - highlight_method="border", # or block - icon_size=17, - max_title_width=150, - rounded=True, - padding_x=0, - padding_y=0, - margin_y=0, - fontsize=14, - border=color["light-green"], - foreground=color["dark-red"], - margin=2, - txt_floating="🗗", - txt_minimized=">_ ", - borderwidth=1, - background=color["bg"], - # unfocused_border = 'border' - ), - widget.CurrentLayoutIcon( - custom_icon_paths=[os.path.expanduser("~/.config/qtile/icons")], - foreground=color["fg"], - background=color["light-red"], - padding=0, - scale=0.7, - ), - widget.CurrentLayout( - font="Noto Sans Bold", - fontsize=12, - foreground=color["fg"], - background=color["light-red"], - ), - widget.Net( - font="Noto Sans", - fontsize=12, - # Here enter your network name - interface=["wlp2s0"], - format="{down} ↓↑ {up}", - foreground=color["fg"], - background=color["light-blue"], - padding=0, - ), - widget.CPU( - font="Noto Sans", - # format = '{MemUsed}M/{MemTotal}M', - update_interval=1, - fontsize=12, - foreground=color["fg"], - background=color["light-orange"], - mouse_callbacks={"Button1": lambda: qtile.cmd_spawn(myTerm + " -e htop")}, - ), - widget.Memory( - font="Noto Sans", - format="{MemUsed: .0f}M/{MemTotal: .0f}M", - update_interval=1, - fontsize=12, - measure_mem="M", - foreground=color["fg"], - background=color["gray"], - mouse_callbacks={"Button1": lambda: qtile.cmd_spawn(myTerm + " -e htop")}, - ), - widget.Clock( - foreground=color["light-red"], - background=color["light-yellow"], - fontsize=12, - format="%Y-%m-%d %H:%M", - ), - widget.Systray(background=color["bg"], icon_size=20, padding=4), - ] - return widgets_list - - -widgets_list = init_widgets_list() - - -def init_widgets_screen1(): - widgets_screen1 = init_widgets_list() - return widgets_screen1 - - -def init_widgets_screen2(): - widgets_screen2 = init_widgets_list() - return widgets_screen2 - - -widgets_screen1 = init_widgets_screen1() -widgets_screen2 = init_widgets_screen2() - - -def init_screens(): - return [ - Screen( - top=bar.Bar( - widgets=init_widgets_screen1(), - size=20, - opacity=0.85, - background="000000", - ) - ), - Screen( - top=bar.Bar( - widgets=init_widgets_screen2(), - size=20, - opacity=0.85, - background="000000", - ) - ), - ] - - -screens = init_screens() - - -# MOUSE CONFIGURATION -mouse = [ - Drag( - [mod], - "Button1", - lazy.window.set_position_floating(), - start=lazy.window.get_position(), - ), - Drag( - [mod], "Button3", lazy.window.set_size_floating(), start=lazy.window.get_size() - ), -] - -dgroups_key_binder = None -dgroups_app_rules = [] - -# ASSIGN APPLICATIONS TO A SPECIFIC GROUPNAME -# BEGIN - -######################################################### -################ assgin apps to groups ################## -######################################################### -@hook.subscribe.client_new -def assign_app_group(client): - d = {} - # ######################################################### - # ################ assgin apps to groups ################## - # ######################################################### - d["1"] = [ - "Kitty", - "kitty", - "Tilix", - "tilix", - ] - d["2"] = [ - "Waterfox", - "Firedragon", - "Chromium", - "waterfox", - "firedragon", - "chromium", - "qutebrowser", - ] - d["3"] = [ - "Neovide", - "Neovim", - "VSCodium", - "Notepadqq", - "neovide", - "neovim", - "vscodium", - "notepadqq", - ] - d["4"] = [ - "Pcmanfm", - "Pcmanfm-qt", - "pcmanfm", - "Thunar", - "thunar", - ] - d["5"] = [ - "Vlc", - "vlc", - "Mpv", - "mpv", - "SMPlayer", - "smplayer", - ] - d["6"] = [ - "Inkscape", - "Nomacs", - "Ristretto", - "Nitrogen", - "Feh", - "Gimp", - " Krita", - "inkscape", - "nomacs", - "ristretto", - "nitrogen", - "feh", - "gimp", - "krita", - ] - d["8"] = [ - "Thunderbird", - "Fluffychat", - "thunderbird", - "fluffychat", - ] - # d["0"] = ["Spotify", "Pragha", "Clementine", "Deadbeef", "Audacious", - # "spotify", "pragha", "clementine", "deadbeef", "audacious" ] - # ########################################################## - wm_class = client.window.get_wm_class()[0] - # - for i in range(len(d)): - if wm_class in list(d.values())[i]: - group = list(d.keys())[i] - client.togroup(group) - client.group.cmd_toscreen() - - -# END -# ASSIGN APPLICATIONS TO A SPECIFIC GROUPNAME - - -main = None - - -@hook.subscribe.startup_once -def start_once(): - home = os.path.expanduser("~") - subprocess.call([home + "/.config/qtile/scripts/autostart.sh"]) - - -@hook.subscribe.startup -def start_always(): - # Set the cursor to something sane in X - subprocess.Popen(["xsetroot", "-cursor_name", "left_ptr"]) - - -@hook.subscribe.client_new -def set_floating(window): - if ( - window.window.get_wm_transient_for() - or window.window.get_wm_type() in floating_types - ): - window.floating = True - - -floating_types = ["notification", "toolbar", "splash", "dialog"] - - -follow_mouse_focus = True -bring_front_click = False -cursor_warp = False -floating_layout = layout.Floating( - float_rules=[ - *layout.Floating.default_float_rules, - Match(wm_class="confirm"), - Match(wm_class="dialog"), - Match(wm_class="download"), - Match(wm_class="error"), - Match(wm_class="file_progress"), - Match(wm_class="notification"), - Match(wm_class="splash"), - Match(wm_class="toolbar"), - Match(wm_class="confirmreset"), - Match(wm_class="makebranch"), - Match(wm_class="maketag"), - Match(wm_class="Arandr"), - Match(wm_class="feh"), - Match(wm_class="Galculator"), - Match(title="branchdialog"), - Match(title="Open File"), - Match(title="pinentry"), - Match(wm_class="ssh-askpass"), - Match(wm_class="lxpolkit"), - Match(wm_class="Lxpolkit"), - Match(wm_class="yad"), - Match(wm_class="Yad"), - Match(wm_class="Cairo-dock"), - Match(wm_class="cairo-dock"), - ], - fullscreen_border_width=0, - border_width=0, -) -auto_fullscreen = True - -focus_on_window_activation = "focus" # or smart - -wmname = "LG3D" diff --git a/.config/qtile/icons/battery_icons_horiz/battery-10-charge.png b/.config/qtile/icons/battery_icons_horiz/battery-10-charge.png deleted file mode 100644 index 7f340a50202b4a7e33dcbd391a6214f589ee62bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2063 zcmd^=ZAep57{{LtH`jD|r6nT0Y>GNTNJ&9UY+HBfCR)3_fTkrN3$m;f;e>XGMecY>stHaGhAsvcWJ@UIu%=0{r zedqQg_rps$m!(-zenr!&&QDP{Rc`ZyO4}x%Fq@A(Ye>aaye&E<2B^~j=#_z^8h1jt zAR^C51TL7UwTgjo!9*1+61ZR@gJu&hm?$%Yz|lBey!HC~GAZzn=e^8_>aNPC35i&a zOcS>P#bDf|t_R^Jb$zLue0o~up*P<7_$*I}ZPU*$aRPnR6h*Bw{ zRH`!RsMN}>L>cGjhY=UREY~a9I3hA-_hwfZlE~i%+^9BFI#RqYU!N34D9b z$C;xFe(sKP_Drn2?;00z*xl2IU5*}V$rJH?;UXBPkc*v4oDy=}nAU0sYyqJ*c7s_i zbb~L)UiEheIfQ1pFJDA4XIy`z6vgdRRF7Vf9ux9qD3u~gdk|47MU+Z$lm4er6myEA zl%go5D4tw@Rf_U8Y?Ain3A~O`AzTuV68a(~kilPy?#~)5T#$~}`!CQSjxttV^~E?L zvv1h)X`yQEV25ScyIY-%Cw*eTf!8KoQJ{z$Tz0+vEyu)pIc4j9Gnw2C4WvQh`3I6g{m!*{_78t=a=>7-$B=7mAdGru&2{nOAjDhkkD1 z+55w^9*F2FJ&0qzGXg9~%sr!Z;q*BoS~pJ~rCyfiRAbmD3c5BQ`Ww8?fgfWayRc=I3r( z_QjVq10aW&akdt+e6mTh&L^8#&pn$J^|3k3@)y2?A4a;y&b-NL>x!pLty$?K3A>{< zIxEUYd*KSD?by{b3BM4k%JxKLQVBne6{e(IF2{$45krdU8_qH01&@=*TY5`Fo;IYu zms*ik3I#Chp}Hoe06v=Y<#AN0a>nPDIDak__D-OLYSx1kfr1oKb%%mapm3(FQVt4K z2*^Rf2Nh1$9ZGzF5~@5-O{iu)p@OPAv{YF;Q74qJa(Xa%`&3g@RPz=|H5anXkyrTb zI($8Al4vcE42c!C&WJVArK{P-$qio={y1Kzu4t1{tHQ%m7%Zp#SV)0I0jCbYmT6<8 zSRUtRg}u`%5hGz?6TxDPD3J)5KVJe}7nVkf1ugB*&!S^%*!z|HP|+&(PUTAGYo;Zl zC~#;>0M%v0a8qd&R6g3`0hQ-`;K^w<=fjfbwP7baBQmf=WC(QjKw&DV z5GsL!|0^h=0+di`6-4EzkUl~MRd*=(1PYhI2?Z*F0+px|s4T|f5pOuK_~(NdbRiSU zv^UMrQ=i@6a7CTJR{Ynm4+Na^8oBy#0J-O<`h>!+ZQGez7FoDHE5W->h0xoae;kv< z{+)#k%{G+qlj(+@YtUwLPTLi&VHp{QzCdVwADfQOf6m}GLE+}l^Joej4{%Vj|I!>> i%YmDVtN*Li$j;?=ut%y!{g2l|TSq!=B7IwvR`LT%*}*yh diff --git a/.config/qtile/icons/battery_icons_horiz/battery-20.png b/.config/qtile/icons/battery_icons_horiz/battery-20.png deleted file mode 100644 index 793c8cb24195cac098967a02714625beb339dcd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1794 zcmeAS@N?(olHy`uVBq!ia0y~yU|Ph$z*x`01{9g(xq3d3VoUONcVXDau$STgHiP~n zKoQOYkH}&M25w;xW@MN(M*=9wUgGKN%KnIvn^l}^-V(vzK#l#LE{-7;x8B~|*n7x8 zq#^P56HXf@-m9LPO8f_e_MLeso2SF(5K>~&<8*_8i=}AN``Hg(?)>>xruZBq1H-wkTBh%0Z~T`?Igm$08&Q`tq61jNF5P$g8(a79Wk^+2NMHG9Wk_m3nN$^ zjNVX?xvF#<8$&~>v^VG4tv4?F=s^Q%ka)hq-@}$~>u$Nj_n*Eh6?^l2-eO&b4WYqn zH|y?sro=_IzhVBzMuUdjK>D$X z!-9txnwZ=M%awy9!NG#HpJ7!k~MJQXTL9p7IjB^H=>Rj{} zuhp~+x#Zfijto8T(o;VDan{rIyFAy+ZTp9lzRe{EhYV(nZyoH&%xt6(`q&r<|8g-x z64>k-(Lf71j!%@C1qgF|Vkk>-9G^%-9WlozdT0>G@rfn|AZrut=kWvcY6w}E=jBI z`q(SKl*dnErJP44XQ$@NC+Eu}Jq`E#640I9irActgAF%4U|V!MlucIO?6{VT@pa#p zSI>0$y5y;v7Caz;!fHgYHozojrFJnCl$+x6Whl(sb5=^EfPxi4iIi@4Mja#xB7%aHpdcl#1P$M;qTYl@3G9tR4t=xZLx2Vuyho$dlh%l? z{e~x~*BQG!08i3HTPn~6pWy4!tZ43XnG@Jphss1U#)8*ZC g;r;*b&(fjV4P82Ii7BS!3w+CwGCqavm1~W^03_D4qW}N^ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-30.png b/.config/qtile/icons/battery_icons_horiz/battery-30.png deleted file mode 100644 index 96832e81b18f9645c68ce5d47e5bc17aa4ee1613..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1798 zcmeAS@N?(olHy`uVBq!ia0y~yU|Ph$z*x`01{9g(xq3d3VoUONcVXDau$STgHiP~n zKoQOYkH}&M25w;xW@MN(M*=9wUgGKN%KnIvn^m0sfoQH9P~&7z7srr_TW@b}>}4_( za0vYUWWov7m;%n1Y}(=u!q>tISS=Pn5xln8 z-*_i5uIUjcu(-iSgJK3GP7F;%Qm1E3f}#L9X3_byPU_f#6P6XQ1*hD^H4F?1Kk1Y& z9tbayYqwf&p7=WV#hsADIou2%>h*wy0L+DiXly>fl~Bk`7!Bzj$(q|37&a6fHYhO< zK4V!e$-oeI?z+vODlpKK6*`}oWCqLSpg;$yN2m8plgIbA1krsKOjB;M8xh|p! zN=U`POo}K-DZ-GnA65#cbdMkkGs+AJe?-{xe&6?IEz-|^Y=`rn=Q;0rpL2Frmy?|y ztcXw$LV`^hoRttC4icjKxIbfS2_Zp?=toA* zwW@I#P-@CD2E3I8`GqShUO(@_$wL!o$UXSt^UGv&pPn2a>TeuO-1N+?>9WVCIGfd0 zd3mJfSo=iC`Mw45<+kX9HM>=7R@kbyXyyHbF<dYsx$Ir^e(Lz()f zeBYL{cRsHyja~dLJ)1|=YMoj?sOGW?3>4*2p^3aNgm@pxW}t}kKA?;WD5D}2rC?dT zq3{_LR0ajrWfh>9OEIfA)WE1NE29F+sL0Bw8nZXl;JWuNBr)=I&d277GWAuS<_Xg` zRVxc`Z`+s6#ZtB#LbPePur@px5n~fXP77zx?pJzyJ(a*5lO21zTwL0^CExq9IU~>w74;BUb$;D#UK|p_bA5GS9 zxE4Mi;(b7w4=AG|#HfI#su)z?V2dF~E5<_8PTg=P+nx|dd@)zG{Yd>#>!c$L%LpA4 zhDspOB>BD=9VkG93F756V>pmdnh&0&ze=H!4kM7z8}0RsMDt_Gm$gTnSsMIvW`PvP zGl3!@3LR)MJs%X)(;(8b=|g%T9qkrH(ylmcZ-n^;kreX<+bX{2Qc>EQDPwod_P}RwUK_O89vV>Ik-6i#4=FgXR59;F^Z~Sh*(@~w^-%WUf7#zR zr8=#9w>^%KN3SZn6UR5?4KF{xkdU*J!@9pWocG2PeJT2(Ig+1E^Ud{K@A&^dpYoU- apBgs4Uy_rNt8b0OKRq!Sv$<=jj_RMyCCHxu diff --git a/.config/qtile/icons/battery_icons_horiz/battery-40.png b/.config/qtile/icons/battery_icons_horiz/battery-40.png deleted file mode 100644 index 556042ec408180a402d51964e5170d3bb366ca2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1804 zcmeAS@N?(olHy`uVBq!ia0y~yU|Ph$z*x`01{9g(xq3d3VoUONcVXDau$STgHiP~n zKoQOYkH}&M25w;xW@MN(M*=9wUgGKN%KnIvn^m0odBw_jpvIY=E{-7;x8B~|=*w&< z(vT=!$>iUVaVf6w6N64-tm9b*y-j?R4Gw6=t}>BqlCp4fV2XVdvoF7C`SWMji_ciH zGcfGf!miE0;LyRupy0wtkQM;C9i)yJnj??_td1DEMT3C>q>dQcNd%&f7+Mh+?jUtU z&z7Kn^Hm^yr31f>CFd1AZ@3lf-@iJ|Ec^RQqNoA?xh9P{WY0i927 z%1GeN)B(DS!7NXr?Oj@zWx75y!-1neXR!~eQUg8Bp!2Dah8mtR-d_Z3{xz2a8BBZ?^e5-KNWT2UO>f{NzB<430zwJf z@JEDvZK-e=S8FQFjhhuENKz83CT=ys$ukqHFTOIq5PDKMs8cv*4%IZ(PC54Mmn@-u z=a)8j&uT0uU5SpTs4(-TGrmpjJfJrBW_=6ao#>c4{JMQXGX#z8XZP+#NaqnFB`ex6 z%Hj1fCnU-^L^vVQm5vbRghYda=Y&KRSdTdY(IJ-*j>dudo<6U%9HG`1Wue=_a8L8_ ziQNpsW$e~QQHYz=bs=t2*Q4D`%_*Dh%zXP}ap_WR_P}Xh;llz^s^#7%J2N^K8K{uf z(Je9mXYOctJ+6?K;foPRK?J)u_)ve z1u1kPC`dgv9))}1SCFo;sGdqaHYx>_N}(&2D$TK|-ZS`pq<#m%Jw~v};N5y(!@(EU zd(>tTn<3-aZtx+XWRnAg@`GXcIp71(3QogQ2qUHH5Ln$Pm+%doSSaJ$noP?B-HbRE>7peRTw3Q~&FOGomxD3!7qR0>v7>2!&&>s9fY;nEiV zUgC2+0YA78gZJ1XD3L~v$PLYnbi>^nBXEmi2OYj}4a!)?p6bpTyox7aQEG*T&s*qx~U~@pC}iDjvB0Z-4v0m$;DS zjCTj-qL=efQFwd=jHsyUn@qXfr5T#9fUVkAvi#re{PpI7|2wGfLL;3|Y+Td@QKfdd TIXkZt{#Xz)}4_( za0vYUgv*CrWqRI*B1V(MTz>Jn%Ci=+a5(T)uDkWt#WF|jUBUl|Vv;Z)eLF$O1IRY8L z>R|Mqom;N#iehFsu$+_P^ShzZNuy|bAgrRzz;I*V>!(7~qOMO&D-wi69j&7T7B$#tP{e@5iJ^%}>9B|< zA_!qQf|!&J$~nZQbeOuq7OXZ(k&FxnzR@XL98mXA=KK1+mc#yd^L55uky#PBj1RWP zKyx*=qyWn8$l}B#30Tr0H)+@|*(nkY%o95@XSL1Nd^Tq<4+De$^K7{xT?8TrBC&yb b?}YuIpOQ*qi$z+2)fI!MtDnm{r-UW|F*YT1 diff --git a/.config/qtile/icons/battery_icons_horiz/battery-60-charge.png b/.config/qtile/icons/battery_icons_horiz/battery-60-charge.png deleted file mode 100644 index 7948227e5c2e47c3c6138731f135613fd9735ebd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2089 zcmcIlT}TvB6h6DSI<7yAxoY{4yGpXFM3Si?7P~f^uAw=mp^>trr5S>l5B3m>S(ye} zEs~}PQ=6J8B`F$KCK@RrC6Qp{KM1D%7(GOZojbF$gb7Yj56j`)@4Mf*_d93qUP?@e zaZ~y#0l>`^%OnBFIRIHP<%la+O|6X>9FHA{Vc;=5g4M2&ssUVa&W}wy4dCKQeln=5 z-;9e+g{F9;(~QhT;jQq2J;AurWnv7;MdM53_w)MoaN$*G!MyU&ey+SaM_27c?W>P6 zIObpR4?eEQ21{vpeE7ZQ=7yk?0f`|OS0)^qR<(N@hK4&_0YV;0c-Tqkc`ZBWi4!-XcdQ*jyT0r;d}AX-l+WR7jBD_p{BJi{~*@ zT#vFN3cPT6lE?&3g?-_3q#?xTHW7h}IG-aVZtdH``u6v$v8(2y^s%o`Ob=7Dys@sR zR!QcFRia%?ixEqqGyz}x;|@G50dqYBT>^GeczoK*gGU_rB0RXAFc}>WddqMuZ6~NC z<0Q%>(=LxpyFALM;|v7sr0^iLRn1HndwqFBAzP#5JoJ`QdYhqXHo=0|r#ZBMRYt4W zpg0+$qgX~qXcby7D;6!&qAN%@S}Ft<9*SZEpT9?Ijpe228;To394(UVvbbXR&jQ)3aW}*#Yq%YZ9{CQ zYLtC$oXY&-L?GCojj6gHF)A?2yHdRBZVx3zUh`S!qa`0?^g2(Ygr`q@BFPNm*`ZH0 zr`x)4YDJZik?!7SUFiPM2De5kZ3QF6GtsUP_t_%yZ#4;tR5ehdT;G z0bEC#&iwwM{X=j5=aq;R_`TcvzBb1RTKE5WHBoI+z$h>WHBgTo}RXh@l05!3R=D49yY909Ho~ z-J-$308$5|<6>rI&0WjLkZ|)@kW;qqH9|H{_ay$+T0BkhK`ylc63cyrz;M3f`;|5o) zz7M*f0i`+QphD*plXhTfjF=z?_ zCp5H)2~~1J^Pc0Y!WFN-X}|d<$NnHJ`0lxF3}4QE?!3){mmV!jei2ijsz@tR$6M zWnzpDT8bq^P*zrUBP)U~(vKp#K!rtggN&lf^PXL@2whRpkL~6Cp6C7E?|a^7-?n7V zPLJYac*a`km`-r`m>WOyA6{*rN8bHyaDMp*Jy%=ISj z-N)+(COr9>H0F16ucpl(JD{9()GfN!&lcXb`$daM3webGsA%@Ygu!)gCuXCUqEv8| zn4o|f4u_U?3b>i{cJKr?S>O(rQB7c{-X$b+JrcFqqatRWfHJ+r5i?nfGW4?Qs29qD zy}%R`6i@>udMV&$a*Bf|5WPn7*q%V@McWe?*q*>-Eto=s0>*@a>2@l;qlo!=qLfw> zORF~=yO$>NTe6kKeAKn;3vU;{dp8s#h>ixK6GtF00>rAFxB;H^5y zZM3;dd<7OF{vt#}3|4Iw)WHoqrb-u$)IeQ)`hEV9)Gcv>j2l8zS%)EFK4$8R97n<3 zC|3dU=b-v>g&HUY)n6KdfquYz$#`{2ssgQb$I8dLDKh+Ztzm||Av?3>7KptmLv=mzKcQ6XDDSp0s@$yZXUFjG&g{0? JVvBWg$yZ)0w&wr< diff --git a/.config/qtile/icons/battery_icons_horiz/battery-70.png b/.config/qtile/icons/battery_icons_horiz/battery-70.png deleted file mode 100644 index f7634f7356116746b57327184cb943ea37fde077..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1797 zcmeAS@N?(olHy`uVBq!ia0y~yU|Ph$z*x`01{9g(xq3d3VoUONcVXDau$STgHiP~n zKoQOYkH}&M25w;xW@MN(M*=9wUgGKN%KnIvn^nxfaq~|OpvFm_E{-7;x8B~|*vn)n z;1Kxx$%GTCF;2SptGB9uiGBC7g5T>0(AnJ&r6@fkmsUw1J5CFOXsE!!gp@Rvmju=|Og^>ZIju=`1 z7%3oiFgjv~$yKXpW`+a1dY86bi+Yo(CJqgxLE`xX)=T8tf9;)j=-Y;mRtz><{_l2= zUJxF;32Bgd zL?$zsI%1L;EIASrgdp>XO=d84uw+IIjW0N1!A;L#UGEXbz_6h%S##l5vFceTT_KsA zm{27rG(YeL^*i6)w!6T(N`^shcGk>X#%X71Y$vG&#s|Jkougt53}JZ^ZST^$EYtOY z1;_E9v)GAF7sR9kSn)(mdKidw0nCOCtUuXR9VE9_UYN5RSi3NIy85}Sb4q9e0NFn- A1^@s6 diff --git a/.config/qtile/icons/battery_icons_horiz/battery-80-charge.png b/.config/qtile/icons/battery_icons_horiz/battery-80-charge.png deleted file mode 100644 index e2b200022a6fdb2a9a4e0814cab2ebe4f92909c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2097 zcmchYYeXIIZfIfQL~5H612u~-&h>6O&C5HrkT672Qq;mOUI-K~Fc&1m zuoOXfbEZl2LuDdrlG%j{ONt`9m=)Pgh(4HNm**UJ)Q0JcL?7hwIp_C(p7Z|C@v%BF zKFU+FMuHIXG)6NfgoGSIf>N<7teiHsH9~OBh>c=UFX}^^%GWljZ9>6(X%hZiu{Un|C_HPJbnFAu7q5Yd%CrZ zc^kIq!ZPd`8|rh{A1}-D?fdK+Bo9g1omZFId@y39I9|J7Jozs8zJ(Jb)Y(zxj*t}2 zCT5q8mC6~8Pt?f}!W^Hd0G}|&BbG@;gyR#nW+B2HpBTUh2uGu)pg1k1XEj32c}cYo zL*r_P!nS(Pl%mLD5j%?a`9wa>(;J%a{7OZ_S8jax>h}{lFV>>0)*bDmo!1W3`n7jm zC<&e(tah0HZ%pm9_uFgw?cpxk(E=Zov})+kV0&F8+;Evv1pac50^kOwNMTXRZHSXqDmn13T&lNPfU-balV#}E*qOUFwcdO^vEh_(`r@aqM&ENv zy}4W|!VSDZmuwAWBIl~BW4yV5x$1J8m<3ZgnIcDsyUpbi+|6RDRN^y1H!wLyuhPjd zXJ*#jnYMlGjC0kkYD<)2hxW%>kuS@>qxzs!}N&z!`;{qU5m<6uMFr za#A(Dl9gyO@wA2&@~5r|dIdA*USIRZbJ_JxJ9UMDl4VaIToX^Og(4j*XDhZ3oSZ6p zYUs|zBjCfPz>n&ZSk19`$9dpOmK^T$M+)W_%fXIi4fS2O!!xr*sH}Ql`;$9qNqb~f z+g6~y$CKIX{>w05$UVpbV0FaMEgB3AAa%shP9hL>#L$Ysa0jU) zf^HCC1*?P62aYY>dF`qc1H-pmE!C)OXMf|J&_Eh2p3hVKYH=mAvj6?*N2LrFOP;>g zycbu;Hv7gppu5HXJyYUh0Qm(JwS;J5q8^q+V7|9#N&yDg@9%|skHx&cb=gM`m^21i z6vCns8%<2Gz=DmO;DH4bKAM=E0n$GRgSFwmM;HUchWcR5i&4^5vrf7~G8wjz24y~E zadJYwfMwb4o=V)v#F%gd(!3ErzT1Ukg7|QZwj=xKj yDmoX(#?Y|)vnfBp95~dH8Z1fTDuks!amy@``Nzs@F%MXCF?hQAxvX8UK#_%>E{-7;x8B~`=zG{f zq~YP_r<`||csV=IRCU4jwKni?9)Yz=K9^BQl3Ow0&qQMmT>Pi@ez z&%00j`Z{UZ``dO`02nqPb;Qsdfec`E z#Lz7o3=AN3#L!M65OpwGe4TXAtR6;&1$nn6oX_pleCcBbbS1f_!A!+Q0|TD{Bu)g4 z97zquFT8B7T>V{KQS+n3njv80)!SM!@A!Rt&zmhV+4=Bt4m3ci6Ho{C9J?!V>~4kt zL+k4vh830`{nzxfnHhmGwnzl%@{S-V8yMvv_Nq_2?zby0^#t)6jtYZRfn|V78#GwK zx`2EIFUA%P2)`o;C#P zK&>!S(UrpZK&3FP3SN#dtsOxytw2+em3E2Sf^{qsbePg4u+-*${0^YwflSvaz;F;) z)DaX2^rK^kk{6?kCP$#lN?=edRd5kp3N~j^2uKysJdl!2GTRmdMHRUq2C#xO3N8Y= z7o<@Dq=7^!ClMrFN-m5b1Ao@96+G~M@s}Tr51wnZ2Isgu><@hP^t8-R2NN$vr)GFpYuHifSiSKj|K-BVjB z!ys|jTX(f?&h&0zfi;KYWp0y2$@JXUzB(5-`iCa| z(VX0Kzw>?foO|B6-LtW9T{4+QB7~A{1vHD0j7Ny5S1Q1>-}Xrh7=>&7IvRbB&Z0j$ zvpn74dAPdZ`BxE2T7-WD`p};W&IPa8Hdq&o5J_^)vOC(a1|j8s8=dE<{b6)yEt|op z-NRR%%bWSl$9pr2^9l~1-~M)&=7Zj)p@A!fTNZu$Zuxt5dP^udLa*+34HpzRP3G!p5%oN;p(ZIZ>$j1 zym~4#{L2d8xt{GbajsnrIvfiJa_i;L5IkOM?L>ngu@r}9bAT;pbZuWM>4bl7 zaJabm0B6UW3Fj_|%sjX@UBSjli+ABQ;|wn4bw&@4n_51H*;wsk0Ven-w+dq$|W$a!iAnij4*ZI!K%t8aa|a@a#Og z&~NwoA9nGRpEELSdtvlv{kDSn-N10CVfZ|dP0?mxcya&wM}g^z*QTWv2|~h*RM(Ft zHF#3PmMCCJaj*rejZ!o)wf>)$*%y_am8m8U&EPc3xCg9H=<;p-|Fie6z-nL;e=(iL zi5p)`V2hCllAnyuZUdGPI}2rI&(@q8w12Ib!O?tk^J_3QttUsGp#diUzJd++XjdQTKwQ-zp-mH+?%Vl`E$4gg?g z0{}(<9u7G2M6DzP00^kP^$>14w>_DiTpVre?pZUtJ#eySw)V2K0RXS@wiII**6XE8 zKO~|VG0kT!#o6SQ_lP#PeOPq)x@7jFxJxdVTJh-Kh`&%CL@ejbN z(Zc8Ip4WEut%`IFTtBWO1Xr7nl+@dLMkem$f_bU$x{Yx=94ALUrPPXH&6K8-SJ(mq zrmwSCs!9`=zPG(0IIg-R<6QN4PwTigg7Fg%);`kGzaqn&Bx=tg)+Y;TnWW|6{SfzP z+&?+#g($%e#AU~jb=8sMd%Ri^V#HOTWN-{NuXP*Kk1;1J5Y6!HrP_Omx3ykQigj$-;d$rzofu zv$oagBo9`zzfsNfT-0ME(2D3P6;aPJ@>ptn=pZ7jSMVB1^TRR6k}LxePAIWrugqi2 zcqc}&q^`HkQ;;7=)=eCwiCx`~urA7OvFC?+&Zt9rJ7N??jwcoshf$a*k&W2a3YZw? z3Qyp{Wr8E5uPw1Mf|djq#pRhJ6AJIpxT<428C5nu(`{j=W1nv6CzMm=F2W?nxPXv= z@wFPagoP)t8A7A=>;|n9^;{n7sPne#=H#cAe9*ajziMH)b@BlnB6{L*YP=#`X8I^>X4LovrN+iM3}MGBv51ASP<)DzR=#&)h;uS9d<22aN^-`2y1KZSFxt`h z!f#2{Hl!jy7w}w~?y;PRI6N5K>}!3O>`}Jv0;?Z&ug#lUubUj)bT@UdJE-GBR{EGG z8;>`ZcJXfb!+g`E^Y)nUlccyWeIN-k@(4D!hnUCF>6x_7lDQtTxGY8Is7?;r1Tj`y zNypRa$x-RL=n>YpbtFi%nCVd#RAQePge?>h9e^_dYD2ZiZN*XZFzpeK#r)YpipvX+;sV6o&S& zXG0nKORuu_V&0&NE~rN7a@{fLRic}j@AT2fk6c$R&ie4IBbjzYO=FO)_%ch9)v$DE z*gl!BG~ZX}VfED-MCZVz>fjY=eM< zBl|8y59$iD0NEm&Ot@R96vTJ~1F5;BIh{=%T3+9puBK{Ljx9XvekF1a%p^U(Qq3ktp78Gg-EK z@607MlBPcIogdtF&kyx}RZ9-iGM(ejh{H3Spj?_XvasS@@{#O4yuq4^ZJ=gz{#8va z!hwT+#P+FU-1GjN(5uWe_;D6W(rn{{pLN{!u{mmsgI3z-C(DuJi!2D-^#37Oib%5dX-)vt?ri%Q0c z6x}6xn|HUME84p)L`NU9X%HUPJCyCx>W(rJlKq^<$MFiKfV4JYu@hdr^F<`2sBIIe z;^>+6HSZ=-CTX20l(;M>r8{)tCAZk4lr6$#PWMl#`%}a-QRehP(bI?v3(i&qx97fe zSF|eFa+L>f-4~i|r+Q6=L4)@uus2D;rzt+DiG#Xmfj>FFJIoBF8OA-b_T|#x+CAZ$ zT@D0fLriZLG>w$&;wFZtkc3*{D#KhhWH$?LQLh9dB4^bzBnjz}C~l*RP+M+O5z=kZ z)L{ifU2D({28M1eqE|A0NOz}5*?{jy^JO&a=OhVg!)qK8wONn;V=yreLr z9+PL}@1ODjS+$#)J{~8vBw7k%bjfV0>9i0tar!aWm5FEXB!w&-;}}UA0^Wr0rU%cp zYBUW#u%Z^(kY5khJY2i(S8cvWBYcF@<6G{nGDlxfwcvqBplD{)lc7WAiFIo58&Ob` zb8b1w6+Wuj@@lz~2vvsJ7wCj!_*^Q$OM6>!DXjIDX|%3aGJCNXzNz(!-3R&L-c@h8U&g;(Ft9qeWzWE8&^ zo#L{r6FV6hLE>&pEYxm?G4n(?+CWD)SZ}26POc?VHP1 zx+IHEeug_)fI!De&8s&fYV3{s)NyF~E=2QIoP-q`-2I z=e>UQ))N`m;Gcv zuf3hzU)T8Iu63~W{QLLYQ@icgGWT-~JJTx=yem}V9^;}jFL5pvS3IV@sA*=)putu? zlI{6MCH`u$RUN&)Db}k@y!jIoROMxdg6lgp5JQG$gfTuDK}HT^M8{h6DUrz2o7aa` zYh0a#l(R3gJ|?}_?{;W2Ib{D$K{d~BGHdt-=BoqC;3T*TBe)}djQa3FzE4|I-~8q!EZIJ{pL!4RjBVZM&}$-&SYF z@2uT@LQPZMuDGL?J+5QG(smxXV%DR+p>IZcJ5_KNC`8Ze_&0GEN=!GZCZ(e^I=u`pi|IBIE0=IrN4(M0D=T zTw(EQBEOZCzJ#OmNaxLw2F`%n;ss?_UDKCH$q}vOY>{xd62A4v$bsSn3l^ngXQm&S z>&gF>7hiHgITl+lQ{LlrHekEnm`7IP6MNXa+)A6XjB;SFX{NSo+Lk5CE)8h5omF={ z;&H#Vl(1(6i($lQoM>uuhw1JIb}`(V?TFVHO9~bV^JVms&2j9+^h3%Wq>dW9G8K@> zrPirW1Go`QcY-QL{idgerzhUorki5 zp(_9oQlK9UAT^B|9K>}~(@?^l$EG4;qAPpjT?7DluhpRPdS2rj6YpTg+Vt(89LIA> zon9NRlQ=~slGD$z$G~t=R>Iqx3 z3gfIWDr1r9=Td!%JKHZ7TWWLRMS7S3puF)I9{@T%po1OW4|Ua$?Ux)B&kCP2VF z`hT>hCOtyi%Zj{@$RsKDA07dZ~%vqL=&CPZv@rPz* z5ET`b$6`7;VA%u?a3yyQ+!Mrx(=Qn^ITg@L0n!!#9fX3j zp1Fe1b61e{+%;0?uTW4whk~x>P|)=p3Ks1z)_;L6pvDhGSOo6OOwP-rqKKeZ6*CH>|qN>L91c)5yq_jEp#)A}h*U*@^0Th597} z_Ei@1N6Ov)>5obd30}{fzQ5G^~&mOldYHOEjrcA{a&}sAr=WaAx`sLw}mk%ZmoR&Ly}~ zuv)^neoC@z1--Ks7m+IcT)D!Y{3VU18W^2jZiqqN_6Grg87iNM3BDh+?Ww^xAedRSQIrTQY0|tiBP|YCs9>;YBQX|;gkCu_hJ#2< zuyoPJ77&S{O#s$9wCFa71Z(9NJ)Sn0++XyeTp&H#2+}Kn$p>lV5<&W3hv83pwDFuC zZTv-#o*Se;KPKqt70|VVo*Rt*k3%O)1S0>S2cra|M;nQ;KqU0anK2v;1kB@^u>}kS zEV+0CB?{ogJTV`=%~OS6?~)Ne2TpkSvjNXDvY&4~bcYaX&qx9Q4moMH?4ec43O5cA zgXRE3`+NC2tpLsQPpu$O4cE3rtXgIA^lI=r1E?u!LQ55H1^)wm8zhbZ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-full-charged.png b/.config/qtile/icons/battery_icons_horiz/battery-full-charged.png deleted file mode 100644 index f8570292dfa4c219ad789e1752800ffdfcd697a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2262 zcmcIle@s(X6uz&c^z||1QJ#|#B@Y%xhi1US7G)Y=%PVaiuu_Q%8b@Ic9MdSW4H4x5 z&!r+6plrcPlv37Joe1hAK|o*-belsa$$r2TOs3liQ^Up-RCewYh*`4HfA&Z7-FxnL zPtWbIUMO_;k+)7G3|{MYr2dC7>I*XsX50=^SZ( z7NOG74i!QyPaqm1oD0cBB=OuqQ4OI2-yPI4k9qE35U7fIZlFNRCEi@fRln6V(3;|j zgwucSUb+6{n)rn8`UA&zy$_bYWi|!ktTIWPxzHUAXEb(4L+tOL8rEI8nVWc_;6Zi< z5-#OMx2_WxS51fK(q}2rm+x&1e>BqD+oa#`S=z}noH*~%tDuG<(B2)}!9slJkJ!r`8%#i^@423m)1YC0Y zGRTIP_D6A`1Oq-AX2V@*ziT! zN6-L}c}Giz5}bjQWFkll9D+j1dyOgxkFEuI9)~Ncr9B?xAidKLpb=#_DLgG0aTe~O zR&#T}p~Dx`nCTfd^d{k@6>_O%V~LrgeqToswv%Rbk;_uD&l|$O8QCkxAvGpOzZ@JO z1TDP$6r!OQg%g$0#9!B5>5BA~*G#mJ+mvKtYFgX@x()}W0S#RHkEufxFJKW$L4 zCoz!}R?ormh0RqZ!LbC?1e#EdD!Y=PlK3$gdgH@e1YIlmOH~3_v6e7grLLJOMNq5p z6$n~lLFA8Jz+F~3eI)fjZcXtDFD=tvyh!3Sybhg{dojHLN_M9~F{yH%`rL!t>ho|c z&k{-3mG?VP+z;>A zs_QTDj4Nzayb(rMkQ_n@U?>bk*l^D(bi3$}PM^crMQ&xuYB(s5uP!kI(t)3JGEf*2 z8`-#(s!y>5hnLD-hoqskqL+W`{eE@8uuIX`yVVZ}w^p0#*Ed>wJleawsAu8jE1917DtqA|~zrVQ#`|b@do|GYO zc%rTMcblz#WDvfGv9~e$>ybvy6vTW(-)!^hxoJ_cGq&^qH|OE;hb z1U*~r7g#@5QA2a{} diff --git a/.config/qtile/icons/battery_icons_horiz/battery-missing-black.png b/.config/qtile/icons/battery_icons_horiz/battery-missing-black.png deleted file mode 100644 index 0fa15a11a8b8e393b335907b7cc2a2983fbe1586..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5027 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 diff --git a/.config/qtile/icons/battery_icons_horiz/battery-missing.png b/.config/qtile/icons/battery_icons_horiz/battery-missing.png deleted file mode 100644 index 3fa4c65208de8f0df86a7aed88d9b4ad9dddc017..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6279 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 MDP_q*aU=i#0m(hE{r~^~ diff --git a/.config/qtile/icons/dnanordsmall.png b/.config/qtile/icons/dnanordsmall.png deleted file mode 100644 index da451ef2481815eac3ad4e07c64a661360895f25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75250 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 diff --git a/.config/qtile/icons/garuda-purple.png b/.config/qtile/icons/garuda-purple.png deleted file mode 100644 index 8b388763c7e9475a7ef3b00b43c9e31b60b0cea0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54998 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 diff --git a/.config/qtile/icons/garuda-red.png b/.config/qtile/icons/garuda-red.png deleted file mode 100644 index c5a08f02e7c61972af0f391f2bc4932c080ac34e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40848 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 LdTN!bc9H)FQ8Twe diff --git a/.config/qtile/icons/garuda-white.png b/.config/qtile/icons/garuda-white.png deleted file mode 100644 index bb9f3303686907bf23adb3f307bdb4cbe37a1629..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20278 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 YLYs7a5&O$gnPNxoG#{6H&L^_}0Vk7zn*aa+ diff --git a/.config/qtile/icons/garuda-yellow.svg b/.config/qtile/icons/garuda-yellow.svg deleted file mode 100644 index cdf2bf8..0000000 --- a/.config/qtile/icons/garuda-yellow.svg +++ /dev/null @@ -1,653 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.config/qtile/icons/layout-bsp.png b/.config/qtile/icons/layout-bsp.png deleted file mode 100644 index 5aded446869d415a1a6ee57f0c500ec2bd66b14f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6846 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 diff --git a/.config/qtile/icons/layout-floating.png b/.config/qtile/icons/layout-floating.png deleted file mode 100644 index e876b13e4103c62155581528a840e6c409c092eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?31We{epSZZGe6l5>) z^mS!_!otDIs$lp$yA~)US>hT|;+&tGo0?a`;9QiNSdyBeP@Y+mq2TW68xY>eCk|AU zNOo)|4H0_*fJe z${MQOt5us~1-DG|JL8hTJfUO<^Lx$-{y%0idr7k?Ffg8QH7TC+E$Z#lPuA>jsu;?b Wal2cdO4JA1#^CAd=d#Wzp$Py|;zj}h diff --git a/.config/qtile/icons/layout-max.png b/.config/qtile/icons/layout-max.png deleted file mode 100644 index 889bc78c4654bdcc8abd34bbe3fac0ab355325aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1143 zcmV--1c>{IP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+Pzj;lI$o9{O1&N1SA%TsP-n-bv(*-~N{JX05AxI~(=gQ6L!}Cgo;wRh=E`o#6kH^(Ae)c?Xf#+{ za?L3cqasxtq&$Y%SZJM_)_Ii_CpUsB6O0kI{IQwODE+RDF>8s)?3$s2V4h_N7?Zi# zLk*13*g*{|z_<3CkegTs3d0Js!oh6IVWI^3$St>scF+qLkK!h2$Np)^e8};Z1QP*8Dc~l#46?ir z$RF{F9Lm83A3}&hf`$}wbkQ4BSd0?q>o$uMFF~S+s3ghi)N9bFqN+)A;^go)4hiL$ zG^La?&dji!qsh?EkQ6Si_!3GiQnaL!E7GU>8fvUkwWgXIH`h?dEjDS|Qp=q>QmOkM zOpjf<_SEx0t_?T*2qO*|I?~8@);6m@v@ftmn>AicO+C4@2C2v~nw2jwGC2cd>`xlQXO2Jx}H)XErgaA}~OP$xS1hDY7@tcj7SU&fN!dU*gR~|6AVpv&@-E-9_dW zZ>EO_-hRSbo1g8v7(1$P#?(4gAJ)5OE`1E>n4$QX=24~)i>GJiJ!U}vH8Z8JUl#ah z2E5I4W%~*Z))S*SyO9@|4^-xWavhb?3+_CkGPht|MRh(#FR08Tg;!8ri_rrrV_y>M zEUN18P5!GLc(PvPtzlt&pelH%T=V#_UX7VtnHZBj38Ga6v`5)uyW%$4TIotpM010qN zS#tmYE+YT{E+YYWr9XB6000McNliru1}5{Vor?ef02y>eSad^gZEa<4bO1wg zWnpw>WFU8GbZ8()Nlj2!fese{002WtL_t(o!|m505&$p=1Hq%i|G%8tis~YIaVR!} z0)|rnNoJN;(Z`(E#R1mz2?PibAV7cs0RjXF5FkK6-~P3)vH|mQ1VK_I&*lIC002ov JPDHLkV1jeU4W$48 diff --git a/.config/qtile/icons/layout-monadtall.png b/.config/qtile/icons/layout-monadtall.png deleted file mode 100644 index cf84fb8ea3b7a23fd1a3938f859303b1620deab9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?31We{epSZZGe6l5>) z^mS!_!otB~VQMb0RvsuMS>hT|;+&tGo0?a`;9QiNSdyBeP@Y+mq2TW68xY>eCk|8; z;_2cT5^?zLHAk)k0UXR1JzxG^pJV=(^@+2X?Dtd76F8o79XP{qW|=+b`<|O7@o#xK z1QZ+^8mu1JP0Nbc`dh}_ZK8J4^1!$GAGlaRQVy~K>)9t)^SEtV_`MEjK7*&LpUXO@ GgeCxGl|!)r diff --git a/.config/qtile/icons/layout-stack.png b/.config/qtile/icons/layout-stack.png deleted file mode 100644 index 539f4646fae42ca841893b85edfed247f21a4a3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6313 zcmeHLc~leU77v1e5fqeCMXezM)@8Cx_9+1|K|u&0s3#k7|e1dI-;(|x9^nDW$@zvVrd9Q!;9CJ>Vx%YQ}_kQ=g z_kNRE5fw4fmF`8S(P*xrA@XSOJ&t-iJA%*c>g4M*ngb(a%5*XsO=B30dX-v3FvxTR z!63|P6^&-TvU8etUBkOBPisfDIXip%tUA&-fBq6_hv%geBz$K>^S@*{2!jym%K@%dnP$s9DQYQKzhhv2~8=gSXr~wM?kHZdmD3na|<5<(`S7>!!x8 ziFEzGe4T&Zf%&DCV@iXay~4_;VxA6#=`$zpwO=r%_Tmp~3k!bc3>iB1@H>9nPnUmr z0jY=h*yaLho0mG!l_9V6T(=@1H4x`X3|||)D0T#!^k^b149+X{^;;foZN4n)Ia~dd-BNHmWS5w3KkXf>sRMx_ZyPFW<{|uy?PW+kuSVIHtqcJVS78K z9p2@2ZA#yn+XRzaw%?37zo}2$9r-#{)L8lA`U;QA#r?u~dJoJHR#Cj6*3L4%*YuhJ zC1;~u=+!|%e%JQ57h9L;Sk=Stc#k`23wd1E$5$-Cs+kbF3cY9q_O&v zrz^smE(uAyd~FjQncKiBEXzt_71|4%2OwL4y0Uuh3J0eN*;dZx`nkEL3;&dIv#Mq` zPfmPrId|fj%Xu?K|A0%woArtG+M5R9@{|EjbDe{CBKC}XpU(Th#mVgvQg-9rkjHF; zHGW~h(bf+46PXJ$jugg=n-luwiyPvIwZE>eR(Zba z=!{sW*dVv3cF87FG?_P`C5#R!5B*{u-gwPqZV4E-^^*;%lwA9bx=q{Uvrgi%M|Z_K zxK-0KylYOvw|z$Sx$&f;M7P~CsPMe46OHfGj4kEt2m zDrsFG`nFHjt%~~AA&rZ_>s6b({?0l7|X90;#OFYGoWU-`BMFn>%)kJ;zZn4p zT7pCwX01kNLd;U8jTZsGDKVSLutCTqDRa6aiXqb*2?n3VXK|olvpN-K2GAM)MqGtN z%O`YEfGa68kt7WWo1K=H#!BO{^u`1>S0a(HIWQZBA%K8P={gcMLpsw4ilUQ4PM9#G z+CZxHItImwD)lL(l*t5oMi)8IV!>u0>~cU|+vrUs&JG0^e6St>V8a}a7~;SXEMfPw z2U>-q+gfMp$|A@o+l(66To#9|)xKb1B7;+(`+KQ{X$m+(+0leapJK#_;8a3Kj_B#s zph+?H^qFEJD3L904X$E?plqId+Dr^pM0MLxX-rUS4K@o3-4lsp-8e&vQDej47@N=# zS`df{FmqqPlWNuT4SHccl;(GV0C(N|FQA|0%NC0*uZUcarBF^o9rl_?<42e=n z;|jSPfk?>Xi6sIU<_MpIrV&OHC~}IE%VEK=O@m{|1i*-bVpD6;1cGhQCD;_ywjf|J zAh9Ub8-Up+2WvrOMgk@E#wmKeM#`jOWl)s1mSXsKH4751$83f+Fo9G3*41(2(FC^b z(x3e*@b8#n67^}i|BmN5w3{W!NT%tHNs-1#&8ki~0|o ze`mRd09(B=y@&r8BDwRbb0BHdwp1|~wjqF^SZDf8Xe!ZJXdsWBDl8GzB@kfRcD33w zx%wq#jB_}Au}B2!Rw5BVd=(BuVu6?gs#>WO;wX&sL@L_`ce9)HDl!c<5&z=f1JfkHT_LV*~jijH`(g8uh<^Jh~B__KEMr;a#<0_oXs{?rkOgi@0( zCdFXTs0rhXjreRZ{Q<6reb*5DGxMIXPHUOokPZ%sL^3i>_e%FK0d_Kkt1&`n(!VP7 zo{-M8^tjIfF?Y(q{S&wyV|U+=b&VlVVt?hUYrOrHE*OkAPF^d&Z_@Q9U9Xja*8;z( zt~cp=tqi;t_)T^F-_k{Y{zQk+fj<^$;CaoGnSGCfXFZO}u!(Y-j22FtGf*| diff --git a/.config/qtile/icons/layout-tile.png b/.config/qtile/icons/layout-tile.png deleted file mode 100644 index 74cd1e780ad8d531597263dd0f2c5264e92d6770..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?31We{epSZZGe6l5>) z^mS!_!otB~p?+lLop7L#WQl7;iF1B#Zfaf$gL6@8Vo7R>LV0FMhJw4NZ$Nk>pEyua zw5N+>NW|f{*9^H181S$h+&kfaePrGwCC#T!5@CO5IwtrT*f6fpYIyZz@`pWvb3d5w zWn^Sx;Sez3+wuSCmAtLnr~2JHaLwe_3>A5Y*K#+`{^kZsDmWalNT?B$Kg#RABmUM! PpfwDhu6{1-oD!M) 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 diff --git a/.config/qtile/icons/qtilelogo.png b/.config/qtile/icons/qtilelogo.png deleted file mode 100644 index 05bea312c10d374437b22e7eaf1794b3d2069949..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15711 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 /dev/null -then - killall picom -else - picom -b --config ~/.config/picom/picom-blur.conf -fi diff --git a/.config/qutebrowser/autoconfig.yml b/.config/qutebrowser/autoconfig.yml deleted file mode 100644 index 94939cd..0000000 --- a/.config/qutebrowser/autoconfig.yml +++ /dev/null @@ -1,18 +0,0 @@ -# If a config.py file exists, this file is ignored unless it's explicitly loaded -# via config.load_autoconfig(). For more information, see: -# https://github.com/qutebrowser/qutebrowser/blob/master/doc/help/configuring.asciidoc#loading-autoconfigyml -# DO NOT edit this file by hand, qutebrowser will overwrite it. -# Instead, create a config.py - see :help for details. - -config_version: 2 -settings: - colors.webpage.darkmode.enabled: - global: true - colors.webpage.darkmode.policy.page: - global: always - colors.webpage.prefers_color_scheme_dark: - global: true - auto_save.session: - global: true - zoom.default: - global: 150% diff --git a/.config/qutebrowser/config.py b/.config/qutebrowser/config.py deleted file mode 100644 index 2a36648..0000000 --- a/.config/qutebrowser/config.py +++ /dev/null @@ -1,303 +0,0 @@ -# base16-qutebrowser (https://github.com/theova/base16-qutebrowser) -# Base16 qutebrowser template by theova -# Default Dark scheme by Chris Kempson (http://chriskempson.com) - -base00 = "#181818" -base01 = "#282828" -base02 = "#383838" -base03 = "#585858" -base04 = "#b8b8b8" -base05 = "#d8d8d8" -base06 = "#e8e8e8" -base07 = "#f8f8f8" -base08 = "#ab4642" -base09 = "#dc9656" -base0A = "#f7ca88" -base0B = "#a1b56c" -base0C = "#86c1b9" -base0D = "#7cafc2" -base0E = "#ba8baf" -base0F = "#a16946" - -# set qutebrowser colors - -# Text color of the completion widget. May be a single color to use for -# all columns or a list of three colors, one for each column. -c.colors.completion.fg = base05 - -# Background color of the completion widget for odd rows. -c.colors.completion.odd.bg = base01 - -# Background color of the completion widget for even rows. -c.colors.completion.even.bg = base00 - -# Foreground color of completion widget category headers. -c.colors.completion.category.fg = base0A - -# Background color of the completion widget category headers. -c.colors.completion.category.bg = base00 - -# Top border color of the completion widget category headers. -c.colors.completion.category.border.top = base00 - -# Bottom border color of the completion widget category headers. -c.colors.completion.category.border.bottom = base00 - -# Foreground color of the selected completion item. -c.colors.completion.item.selected.fg = base05 - -# Background color of the selected completion item. -c.colors.completion.item.selected.bg = base02 - -# Top border color of the selected completion item. -c.colors.completion.item.selected.border.top = base02 - -# Bottom border color of the selected completion item. -c.colors.completion.item.selected.border.bottom = base02 - -# Foreground color of the matched text in the selected completion item. -c.colors.completion.item.selected.match.fg = base0B - -# Foreground color of the matched text in the completion. -c.colors.completion.match.fg = base0B - -# Color of the scrollbar handle in the completion view. -c.colors.completion.scrollbar.fg = base05 - -# Color of the scrollbar in the completion view. -c.colors.completion.scrollbar.bg = base00 - -# Background color of disabled items in the context menu. -c.colors.contextmenu.disabled.bg = base01 - -# Foreground color of disabled items in the context menu. -c.colors.contextmenu.disabled.fg = base04 - -# Background color of the context menu. If set to null, the Qt default is used. -c.colors.contextmenu.menu.bg = base00 - -# Foreground color of the context menu. If set to null, the Qt default is used. -c.colors.contextmenu.menu.fg = base05 - -# Background color of the context menu’s selected item. If set to null, the Qt default is used. -c.colors.contextmenu.selected.bg = base02 - -# Foreground color of the context menu’s selected item. If set to null, the Qt default is used. -c.colors.contextmenu.selected.fg = base05 - -# Background color for the download bar. -c.colors.downloads.bar.bg = base00 - -# Color gradient start for download text. -c.colors.downloads.start.fg = base00 - -# Color gradient start for download backgrounds. -c.colors.downloads.start.bg = base0D - -# Color gradient end for download text. -c.colors.downloads.stop.fg = base00 - -# Color gradient stop for download backgrounds. -c.colors.downloads.stop.bg = base0C - -# Foreground color for downloads with errors. -c.colors.downloads.error.fg = base08 - -# Font color for hints. -c.colors.hints.fg = base00 - -# Background color for hints. Note that you can use a `rgba(...)` value -# for transparency. -c.colors.hints.bg = base0A - -# Font color for the matched part of hints. -c.colors.hints.match.fg = base05 - -# Text color for the keyhint widget. -c.colors.keyhint.fg = base05 - -# Highlight color for keys to complete the current keychain. -c.colors.keyhint.suffix.fg = base05 - -# Background color of the keyhint widget. -c.colors.keyhint.bg = base00 - -# Foreground color of an error message. -c.colors.messages.error.fg = base00 - -# Background color of an error message. -c.colors.messages.error.bg = base08 - -# Border color of an error message. -c.colors.messages.error.border = base08 - -# Foreground color of a warning message. -c.colors.messages.warning.fg = base00 - -# Background color of a warning message. -c.colors.messages.warning.bg = base0E - -# Border color of a warning message. -c.colors.messages.warning.border = base0E - -# Foreground color of an info message. -c.colors.messages.info.fg = base05 - -# Background color of an info message. -c.colors.messages.info.bg = base00 - -# Border color of an info message. -c.colors.messages.info.border = base00 - -# Foreground color for prompts. -c.colors.prompts.fg = base05 - -# Border used around UI elements in prompts. -c.colors.prompts.border = base00 - -# Background color for prompts. -c.colors.prompts.bg = base00 - -# Background color for the selected item in filename prompts. -c.colors.prompts.selected.bg = base02 - -# Foreground color for the selected item in filename prompts. -c.colors.prompts.selected.fg = base05 - -# Foreground color of the statusbar. -c.colors.statusbar.normal.fg = base0B - -# Background color of the statusbar. -c.colors.statusbar.normal.bg = base00 - -# Foreground color of the statusbar in insert mode. -c.colors.statusbar.insert.fg = base00 - -# Background color of the statusbar in insert mode. -c.colors.statusbar.insert.bg = base0D - -# Foreground color of the statusbar in passthrough mode. -c.colors.statusbar.passthrough.fg = base00 - -# Background color of the statusbar in passthrough mode. -c.colors.statusbar.passthrough.bg = base0C - -# Foreground color of the statusbar in private browsing mode. -c.colors.statusbar.private.fg = base00 - -# Background color of the statusbar in private browsing mode. -c.colors.statusbar.private.bg = base01 - -# Foreground color of the statusbar in command mode. -c.colors.statusbar.command.fg = base05 - -# Background color of the statusbar in command mode. -c.colors.statusbar.command.bg = base00 - -# Foreground color of the statusbar in private browsing + command mode. -c.colors.statusbar.command.private.fg = base05 - -# Background color of the statusbar in private browsing + command mode. -c.colors.statusbar.command.private.bg = base00 - -# Foreground color of the statusbar in caret mode. -c.colors.statusbar.caret.fg = base00 - -# Background color of the statusbar in caret mode. -c.colors.statusbar.caret.bg = base0E - -# Foreground color of the statusbar in caret mode with a selection. -c.colors.statusbar.caret.selection.fg = base00 - -# Background color of the statusbar in caret mode with a selection. -c.colors.statusbar.caret.selection.bg = base0D - -# Background color of the progress bar. -c.colors.statusbar.progress.bg = base0D - -# Default foreground color of the URL in the statusbar. -c.colors.statusbar.url.fg = base05 - -# Foreground color of the URL in the statusbar on error. -c.colors.statusbar.url.error.fg = base08 - -# Foreground color of the URL in the statusbar for hovered links. -c.colors.statusbar.url.hover.fg = base05 - -# Foreground color of the URL in the statusbar on successful load -# (http). -c.colors.statusbar.url.success.http.fg = base0C - -# Foreground color of the URL in the statusbar on successful load -# (https). -c.colors.statusbar.url.success.https.fg = base0B - -# Foreground color of the URL in the statusbar when there's a warning. -c.colors.statusbar.url.warn.fg = base0E - -# Background color of the tab bar. -c.colors.tabs.bar.bg = base00 - -# Color gradient start for the tab indicator. -c.colors.tabs.indicator.start = base0D - -# Color gradient end for the tab indicator. -c.colors.tabs.indicator.stop = base0C - -# Color for the tab indicator on errors. -c.colors.tabs.indicator.error = base08 - -# Foreground color of unselected odd tabs. -c.colors.tabs.odd.fg = base05 - -# Background color of unselected odd tabs. -c.colors.tabs.odd.bg = base01 - -# Foreground color of unselected even tabs. -c.colors.tabs.even.fg = base05 - -# Background color of unselected even tabs. -c.colors.tabs.even.bg = base00 - -# Background color of pinned unselected even tabs. -c.colors.tabs.pinned.even.bg = base0C - -# Foreground color of pinned unselected even tabs. -c.colors.tabs.pinned.even.fg = base07 - -# Background color of pinned unselected odd tabs. -c.colors.tabs.pinned.odd.bg = base0B - -# Foreground color of pinned unselected odd tabs. -c.colors.tabs.pinned.odd.fg = base07 - -# Background color of pinned selected even tabs. -c.colors.tabs.pinned.selected.even.bg = base02 - -# Foreground color of pinned selected even tabs. -c.colors.tabs.pinned.selected.even.fg = base05 - -# Background color of pinned selected odd tabs. -c.colors.tabs.pinned.selected.odd.bg = base02 - -# Foreground color of pinned selected odd tabs. -c.colors.tabs.pinned.selected.odd.fg = base05 - -# Foreground color of selected odd tabs. -c.colors.tabs.selected.odd.fg = base05 - -# Background color of selected odd tabs. -c.colors.tabs.selected.odd.bg = base02 - -# Foreground color of selected even tabs. -c.colors.tabs.selected.even.fg = base05 - -# Background color of selected even tabs. -c.colors.tabs.selected.even.bg = base02 - -# Background color for webpages if unset (or empty to use the theme's -# color). -# c.colors.webpage.bg = base00 - - -config.load_autoconfig() diff --git a/.config/topgrade.toml b/.config/topgrade.toml deleted file mode 100644 index d854da2..0000000 --- a/.config/topgrade.toml +++ /dev/null @@ -1,85 +0,0 @@ -# Don't ask for confirmations -assume_yes = true - -# Ping on each step -notify_each_step = true - -# Disable specific steps - same options as the command line flag -#disable = ["system", "emacs"] - -# Ignore failures for these steps -#ignore_failures = ["powershell"] - -# Run specific steps - same options as the command line flag -#only = ["system", "emacs"] - -# Do not ask to retry failed steps (default: false) -no_retry = true - -# Run inside tmux -#run_in_tmux = true - -# List of remote machines with Topgrade installed on them -#remote_topgrades = ["toothless", "pi", "parnas"] - -# Arguments to pass SSH when upgrading remote systems -#ssh_arguments = "-o ConnectTimeout=2" - -# Path to Topgrade executable on remote machines -#remote_topgrade_path = ".cargo/bin/topgrade" - -# Arguments to pass tmux when pulling Repositories -#tmux_arguments = "-S /var/tmux.sock" - -# Do not set the terminal title -#set_title = false - -# Cleanup temporary or old files -cleanup = true - -[git] -#max_concurrency = 5 -# Additional git repositories to pull -repos = [ - "~/Documents/Git/*/", - "~/Git/*/" -] - -# Don't pull the predefined git repos -#predefined_repos = false - -# Arguments to pass Git when pulling Repositories -#arguments = "--rebase --autostash" - -[composer] -#self_update = true - -# Commands to run before anything -[pre_commands] -#"Emacs Snapshot" = "rm -rf ~/.emacs.d/elpa.bak && cp -rl ~/.emacs.d/elpa ~/.emacs.d/elpa.bak" - -# Custom commands -[commands] -#"Python Environment" = "~/dev/.env/bin/pip install -i https://pypi.python.org/simple -U --upgrade-strategy eager jupyter" - -[brew] -#greedy_cask = true - -[linux] -# Arguments to pass yay when updating packages -#yay_arguments = "--nodevel" -#trizen_arguments = "--devel" -#enable_tlmgr = true -#emerge_sync_flags = "-q" -#emerge_update_flags = "-uDNa --with-bdeps=y world" -#redhat_distro_sync = false - -[windows] -# Manually select Windows updates -#accept_all_updates = false -#open_remotes_in_new_terminal = true - -# Causes Topgrade to rename itself during the run to allow package managers -# to upgrade it. Use this only if you installed Topgrade by using a package -# manager such as Scoop to Cargo -#self_rename = true diff --git a/.config/vifm/scripts/README b/.config/vifm/scripts/README deleted file mode 100644 index 7694952..0000000 --- a/.config/vifm/scripts/README +++ /dev/null @@ -1,6 +0,0 @@ -This directory is dedicated for user-supplied scripts/executables. -vifm modifies its PATH environment variable to let user run those -scripts without specifying full path. All subdirectories are added -as well. File in a subdirectory overrules file with the same name -in parent directories. Restart might be needed to recognize files -in newly created or renamed subdirectories. \ No newline at end of file diff --git a/.config/vifm/vifm-help.txt b/.config/vifm/vifm-help.txt deleted file mode 100644 index 3f39546..0000000 --- a/.config/vifm/vifm-help.txt +++ /dev/null @@ -1,6378 +0,0 @@ -VIFM(1) General Commands Manual VIFM(1) - - - -NAME - vifm - vi file manager - -SYNOPSIS - vifm [OPTION]... - vifm [OPTION]... path - vifm [OPTION]... path path - -DESCRIPTION - Vifm is an ncurses based file manager with vi like keybindings. If you - use vi, vifm gives you complete keyboard control over your files with- - out having to learn a new set of commands. - -OPTIONS - vifm starts in the current directory unless it is given a different di- - rectory on the command line or 'vifminfo' option includes "savedirs" - (in which case last visited directories are used as defaults). - - - Read list of files from standard input stream and compose custom - view out of them (see "Custom views" section). Current working - directory is used as a base for relative paths. - - Starts Vifm in the specified path. - - - Starts Vifm in the specified paths. - - Specifying two directories triggers split view even when vifm was in - single-view mode on finishing previous run. To suppress this behaviour - :only command can be put in the vifmrc file. - - When only one path argument is found on command-line, the left/top pane - is automatically set as the current view. - - Paths to files are also allowed in case you want vifm to start with - some archive opened. - - --select - Open parent directory of the given path and select specified - file in it. - - -f Makes vifm instead of opening files write selection to - $VIFM/vimfiles and quit. - - --choose-files |- - Sets output file to write selection into on exit instead of - opening files. "-" means standard output. Use empty value to - disable it. - - --choose-dir |- - Sets output file to write last visited directory into on exit. - "-" means standard output. Use empty value to disable it. - - --delimiter - Sets separator for list of file paths written out by vifm. - Empty value means null character. Default is new line charac- - ter. - - --on-choose - Sets command to be executed on selected files instead of opening - them. The command may use any of macros described in "Command - macros" section below. The command is executed once for whole - selection. - - --logging[=] - Log some operational details $VIFM/log. If the optional startup - log path is specified and permissions allow to open it for writ- - ing, then logging of early initialization (before value of $VIFM - is determined) is put there. - - --server-list - List available server names and exit. - - --server-name - Name of target or this instance (sequential numbers are appended - on name conflict). - - --remote - Sends the rest of the command line to another instance of vifm, - --server-name is treated just like any other argument and should - precede --remote on the command line. When there is no server, - quits silently. There is no limit on how many arguments can be - processed. One can combine --remote with -c or + to execute commands in already running instance of vifm. - See also "Client-Server" section below. - - --remote-expr - passes expression to vifm server and prints result. See also - "Client-Server" section below. - - -c or + - Run command-line mode on startup. Commands in such - arguments are executed in the order they appear in command line. - Commands with spaces or special symbols must be enclosed in dou- - ble or single quotes or all special symbols should be escaped - (the exact syntax strongly depends on shell). "+" argument is - equivalent to "$" and thus picks last item of of the view. - - --help, -h - Show a brief command summary and exit vifm. - - --version, -v - Show version information and quit. - - --no-configs - Skip reading vifmrc and vifminfo. - - - See "Startup" section below for the explanations on $VIFM. - -General keys - Ctrl-C or Escape - cancel most operations (see "Cancellation" section below), clear - all selected files. - - Ctrl-L clear and redraw the screen. - -Basic Movement - The basic vi key bindings are used to move through the files and pop-up - windows. - - k, gk, or Ctrl-P - move cursor up one line. - - j, gj or Ctrl-N - move cursor down one line. - - h when 'lsview' is off move up one directory (moves to parent di- - rectory node in tree view), otherwise move left one file. - - l when 'lsview' is off move into a directory or launch a file, - otherwise move right one file. See "Selection" section below. - - gg move to the first line of the file list. - - G move to the last line in the file list. - - gh go up one directory regardless of view representation (regular, - ls-like). Also can be used to leave custom views including tree - view. - - gl or Enter - enter directory or launch a file. See "Selection" section be- - low. - - H move to the first file in the window. - - M move to the file in the middle of the window. - - L move to the last file in the window. - - Ctrl-F or Page Down - move forward one page. - - Ctrl-B or Page Up - move back one page. - - Ctrl-D jump back one half page. - - Ctrl-U jump forward one half page. - - n% move to the file that is n percent from the top of the list (for - example 25%). - - 0 or ^ move cursor to the first column. See 'lsview' option descrip- - tion. - - $ move cursor to the last column. See 'lsview' option descrip- - tion. - - Space switch file lists. - - gt switch to the next tab (wrapping around). - - {n}gt switch to the tab number {n} (wrapping around). - - gT switch to the previous tab (wrapping around). - - {n}gT switch to {n}-th previous tab. - -Movement with Count - Most movement commands also accept a count, 12j would move down 12 - files. - - [count]% - move to percent of the file list. - - [count]j - move down [count] files. - - [count]k - move up [count] files. - - [count]G or [count]gg - move to list position [count]. - - [count]h - go up [count] directories. - -Scrolling panes - zt redraw pane with file in top of list. - - zz redraw pane with file in center of list. - - zb redraw pane with file in bottom of list. - - Ctrl-E scroll pane one line down. - - Ctrl-Y scroll pane one line up. - -Pane manipulation - Second character can be entered with or without Control key. - - Ctrl-W H - move the pane to the far left. - - Ctrl-W J - move the pane to the very bottom. - - Ctrl-W K - move the pane to the very top. - - Ctrl-W L - move the pane to the far right. - - - Ctrl-W h - switch to the left pane. - - Ctrl-W j - switch to the pane below. - - Ctrl-W k - switch to the pane above. - - Ctrl-W l - switch to the right pane. - - - Ctrl-W b - switch to bottom-right window. - - Ctrl-W t - switch to top-left window. - - - Ctrl-W p - switch to previous window. - - Ctrl-W w - switch to other pane. - - - Ctrl-W o - leave only one pane. - - Ctrl-W s - split window horizontally. - - Ctrl-W v - split window vertically. - - - Ctrl-W x - exchange panes. - - Ctrl-W z - quit preview pane or view modes. - - - Ctrl-W - - decrease size of the view by count. - - Ctrl-W + - increase size of the view by count. - - Ctrl-W < - decrease size of the view by count. - - Ctrl-W > - increase size of the view by count. - - - Ctrl-W | - set current view size to count. - - Ctrl-W _ - set current view size to count. - - Ctrl-W = - make size of two views equal. - - For Ctrl-W +, Ctrl-W -, Ctrl-W <, Ctrl-W >, Ctrl-W | and Ctrl-W _ com- - mands count can be given before and/or after Ctrl-W. The resulting - count is a multiplication of those two. So "2 Ctrl-W 2 -" decreases - window size by 4 lines or columns. - - Ctrl-W | and Ctrl-W _ maximise current view by default. - -Marks - Marks are set the same way as they are in vi. - - You can use these characters for marks [a-z][A-Z][0-9]. - - m[a-z][A-Z][0-9] - set a mark for the file at the current cursor position. - - '[a-z][A-Z][0-9] - navigate to the file set for the mark. - - - There are also several special marks that can't be set manually: - - - ' (single quote) - previously visited directory of the view, thus - hitting '' allows switching between two last locations - - - < - the first file of the last visually selected block - - - > - the last file of the last visually selected block - -Searching - /regular expression pattern - search for files matching regular expression in forward direc- - tion and advance cursor to next match. - - / perform forward search with top item of search pattern history. - - ?regular expression pattern - search for files matching regular expression in backward direc- - tion and advance cursor to previous match. - - ? perform backward search with top item of search pattern history. - - Trailing slash for directories is taken into account, so /\/ searches - for directories and symbolic links to directories. At the moment // - works too, but this can change in the future, so consider escaping the - slash if not typing pattern by hand. - - Matches are automatically selected if 'hlsearch' is set. Enabling - 'incsearch' makes search interactive. 'ignorecase' and 'smartcase' op- - tions affect case sensitivity of search queries as well as local filter - and other things detailed in the description of 'caseoptions'. - - - [count]n - go to the next file matching last search pattern. Takes last - search direction into account. - - [count]N - go to the previous file matching last search pattern. Takes - last search direction into account. - - If 'hlsearch' option is set, hitting n/N to perform search and go to - the first matching item resets current selection in normal mode. It is - not the case if search was already performed on files in the directory, - thus selection is not reset after clearing selection with escape key - and hitting n/N key again. - - Note: vifm uses extended regular expressions for / and ?. - - - [count]f[character] - search forward for file with [character] as first character in - name. Search wraps around the end of the list. - - [count]F[character] - search backward for file with [character] as first character in - name. Search wraps around the end of the list. - - [count]; - find the next match of f or F. - - [count], - find the previous match of f or F. - - Note: f, F, ; and , wrap around list beginning and end when they are - used alone and they don't wrap when they are used as selectors. - -File Filters - There are three basic file filters: - - - dot files filter (does not affect "." and ".." special directories, - whose appearance is controlled by the 'dotdirs' option), see 'dot- - files' option; - - - permanent filter; - - - local filter (see description of the "=" normal mode command). - - Permanent filter essentially allows defining a group of files names - which are not desirable to be seen by default, like temporary or backup - files, which might be created alongside normal ones. Just like you - don't usually need to see hidden dot files (files starting with a dot). - Local filter on the other hand is for temporary immediate filtering of - file list at hand, to get rid of uninterested files in the view or to - make it possible to use % range in a :command. - - For the purposes of more deterministic editing permanent filter is - split into two parts: - - - one edited explicitly via :filter command; - - - another one which is edited implicitly via zf shortcut. - - Files are tested against both parts and a match counts if at least one - of the parts matched. - - - Each file list has its own copy of each filter. - - Filtered files are not checked in / search or :commands. - - Files and directories are filtered separately. This is done by append- - ing a slash to a directory name before testing whether it matches the - filter. Examples: - - - " filter directories which names end with '.files' - :filter /^.*\.files\/$/ - - " filter files which names end with '.d' - :filter {*.d} - - " filter files and directories which names end with '.o' - :filter /^.*\.o\/?$/ - - Note: vifm uses extended regular expressions. - - The basic vim folding key bindings are used for managing filters. - - - za toggle visibility of dot files. - - zo show dot files. - - zm hide dot files. - - zf add selected files to permanent filter. - - zO reset permanent filter. - - zR save and reset all filters. - - zr clear local filter. - - zM restore all filters (undoes last zR). - - zd exclude selection or current file from a custom view. Does - nothing for regular view. For tree view excluding directory ex- - cludes that sub-tree. For compare views zd hides group of adja- - cent identical files, count can be specified as 1 to exclude - just single file or selected items instead. Files excluded this - way are not counted as filtered out and can't be returned unless - view is reloaded. - - =regular expression pattern - filter out files that don't match regular expression. Whether - view is updated as regular expression is changed depends on the - value of the 'incsearch' option. This kind of filter is auto- - matically reset when directory is changed. - -Other Normal Mode Keys - [count]: - enter command line mode. [count] generates range. - - q: open external editor to prompt for command-line command. See - "Command line editing" section for details. - - q/ open external editor to prompt for search pattern to be searched - in forward direction. See "Command line editing" section for - details. - - q? open external editor to prompt for search pattern to be searched - in backward direction. See "Command line editing" section for - details. - - q= open external editor to prompt for filter pattern. See "Command - line editing" section for details. Unlike other q{x} commands - this one doesn't work in Visual mode. - - [count]!! and [count]! - enter command line mode with entered ! command. [count] modi- - fies range. - - Ctrl-O go backwards through directory history of current view. Nonex- - istent directories are automatically skipped. - - Ctrl-I if 'cpoptions' contains "t" flag, and switch active - pane just like does, otherwise it goes forward through - directory history of current view. Nonexistent directories are - automatically skipped. - - Ctrl-G show a dialog with detailed information about current file. See - "Menus and dialogs" section for controls. - - Shift-Tab - enter view mode (works only after activating view pane with - :view command). - - ga calculate directory size. Uses cached directory sizes when pos- - sible for better performance. As a special case calculating - size of ".." entry results in calculation of size of current di- - rectory. - - gA like ga, but force update. Ignores old values of directory - sizes. - - If file under cursor is selected, each selected item is processed, oth- - erwise only current file is updated. - - gf find link destination (like l with 'followlinks' off, but also - finds directories). On Windows additionally follows .lnk-files. - - gF Same as gf, but resolves final path of the chain of symbolic - links. - - gr only for MS-Windows - same as l key, but tries to run program with administrative - privileges. - - av go to visual mode into selection amending state preserving cur- - rent selection. - - gv go to visual mode restoring last selection. - - [reg]gs - when no register is specified, restore last t selection (similar - to what gv does for visual mode selection). If register is - present, then all files listed in that register and which are - visible in current view are selected. - - gu - make names of selected files lowercase. - - [count]guu and [count]gugu - make names of [count] files starting from the current one lower- - case. Without [count] only current file is affected. - - gU - make names of selected files uppercase. - - [count]gUU and [count]gUgU - make names of [count] files starting from the current one upper- - case. Without [count] only current file is affected. - - e explore file in the current pane. - - i handle file (even if it's an executable and 'runexec' option is - set). - - cw change word is used to rename a file or files. - - cW change WORD is used to change only name of file (without exten- - sion). - - cl change link target. - - co only for *nix - change file owner. - - cg only for *nix - change file group. - - [count]cp - change file attributes (permission on *nix and properties on - Windows). If [count] is specified, it's treated as numerical - argument for non-recursive `chmod` command (of the form - [0-7]{3,4}). See "Menus and dialogs" section for controls. - - [count]C - clone file [count] times. - - [count]dd or d[count]selector - move selected file or files to trash directory (if 'trash' op- - tion is set, otherwise delete). See "Trash directory" section - below. - - [count]DD or D[count]selector - like dd and d, but omitting trash directory (even when - 'trash' option is set). - - Y, [count]yy or y[count]selector - yank selected files. - - p copy yanked files to the current directory or move the files to - the current directory if they were deleted with dd or :d[elete] - or if the files were yanked from trash directory. See "Trash - directory" section below. - - P move the last yanked files. The advantage of using P instead of - d followed by p is that P moves files only once. This isn't im- - portant in case you're moving files in the same file system - where your home directory is, but using P to move files on some - other file system (or file systems, in case you want to move - files from fs1 to fs2 and your home is on fs3) can save your - time. - - al put symbolic links with absolute paths. - - rl put symbolic links with relative paths. - - t select or unselect (tag) the current file. - - u undo last change. - - Ctrl-R redo last change. - - dp in compare view of "ofboth grouppaths" kind, makes corresponding - entry of the other pane equal to the current one. The semantics - is as follows: - - nothing done for identical entries - - if file is missing in current view, its pair gets removed - - if file is missing or differs in other view, it's replaced - - file pairs are defined by matching relative paths - File removal obeys 'trash' option. When the option is enabled, - the operation can be undone/redone (although results won't be - visible automatically). - Unlike in Vim, this operation is performed on a single line - rather than a set of adjacent changes. - - do same as dp, but applies changes in the opposite direction. - - v or V enter visual mode, clears current selection. - - [count]Ctrl-A - increment first number in file name by [count] (1 by default). - - [count]Ctrl-X - decrement first number in file name by [count] (1 by default). - - ZQ same as :quit!. - - ZZ same as :quit. - - . repeat last command-line command (not normal mode command) of - this run (does nothing right after startup or :restart command). - The command doesn't depend on command-line history and can be - used with completely disabled history. - - ( go to previous group. Groups are defined by primary sorting - key. For name and iname members of each group have same first - letter, for all other sorting keys vifm uses size, uid, ... - - ) go to next group. See ( key description above. - - { speeds up navigation to closest previous entry of the opposite - type by moving to the first file backwards when cursor is on a - directory and to the first directory backwards when cursor is on - a file. This is essentially a special case of ( that is locked - on "dirs". - - } same as {, but in forward direction. - - [c go to previous mismatched entry in directory comparison view or - do nothing. - - ]c go to next mismatched entry in directory comparison view or do - nothing. - - [d go to previous directory entry or do nothing. - - ]d go to next directory entry or do nothing. - - [r same as :siblprev. - - ]r same as :siblnext. - - [R same as :siblprev!. - - ]R same as :siblnext!. - - [s go to previous selected entry or do nothing. - - ]s go to next selected entry or do nothing. - - [z go to first sibling of current entry. - - ]z go to last sibling of current entry. - - zj go to next directory sibling of current entry or do nothing. - - zk go to previous directory sibling of current entry or do nothing. - -Using Count - You can use count with commands like yy. - - [count]yy - yank count files starting from current cursor position downward. - - Or you can use count with motions passed to y, d or D. - - d[count]j - delete (count + 1) files starting from current cursor position - upward. - -Registers - vifm supports multiple registers for temporary storing list of yanked - or deleted files. - - Registers should be specified by hitting double quote key followed by a - register name. Count is specified after register name. By default - commands use unnamed register, which has double quote as its name. - - Though all commands accept registers, most of commands ignores them - (for example H or Ctrl-U). Other commands can fill register or append - new files to it. - - Presently vifm supports ", _, a-z and A-Z characters as register names. - - As mentioned above " is unnamed register and has special meaning of the - default register. Every time when you use named registers (a-z and A- - Z) unnamed register is updated to contain same list of files as the - last used register. - - _ is black hole register. It can be used for writing, but its list is - always empty. - - Registers with names from a to z and from A to Z are named ones. Low- - ercase registers are cleared before adding new files, while uppercase - aren't and should be used to append new files to the existing file list - of appropriate lowercase register (A for a, B for b, ...). - - Registers can be changed on :empty command if they contain files under - trash directory (see "Trash directory" section below). - - Registers do not contain one file more than once. - - Example: - - "a2yy - - puts names of two files to register a (and to the unnamed register), - - "Ad - - removes one file and append its name to register a (and to the unnamed - register), - - p or "ap or "Ap - - inserts previously yanked and deleted files into current directory. - -Selectors - y, d, D, !, gu and gU commands accept selectors. You can combine them - with any of selectors below to quickly remove or yank several files. - - Most of selectors are like vi motions: j, k, gg, G, H, L, M, %, f, F, - ;, comma, ', ^, 0 and $. But there are some additional ones. - - a all files in current view. - - s selected files. - - S all files except selected. - - Examples: - - - dj - delete file under cursor and one below; - - - d2j - delete file under cursor and two below; - - - y6gg - yank all files from cursor position to 6th file in the list. - - When you pass a count to whole command and its selector they are multi- - plied. So: - - - 2d2j - delete file under cursor and four below; - - - 2dj - delete file under cursor and two below; - - - 2y6gg - yank all files from cursor position to 12th file in the - list. - -Visual Mode - Visual mode has two generic operating submodes: - - - plain selection as it is in Vim; - - - selection editing submode. - - Both modes select files in range from cursor position at which visual - mode was entered to current cursor position (let's call it "selection - region"). Each of two borders can be adjusted by swapping them via "o" - or "O" keys and updating cursor position with regular cursor motion - keys. Obviously, once initial cursor position is altered this way, - real start position becomes unavailable. - - Plain Vim-like visual mode starts with cleared selection, which is not - restored on rejecting selection ("Escape", "Ctrl-C", "v", "V"). Con- - trary to it, selection editing doesn't clear previously selected files - and restores them after reject. Accepting selection by performing an - operation on selected items (e.g. yanking them via "y") moves cursor to - the top of current selection region (not to the top most selected file - of the view). - - In turn, selection editing supports three types of editing (look at - statusbar to know which one is currently active): - - - append - amend selection by selecting elements in selection region; - - - remove - amend selection by deselecting elements in selection re- - gion; - - - invert - amend selection by inverting selection of elements in se- - lection region. - - No matter how you activate selection editing it starts in "append". - One can switch type of operation (in the order given above) via "Ctrl- - G" key. - - Almost all normal mode keys work in visual mode, but instead of accept- - ing selectors they operate on selected items. - - Enter save selection and go back to normal mode not moving cursor. - - av leave visual mode if in amending mode (restores previous selec- - tion), otherwise switch to amending selection mode. - - gv restore previous visual selection. - - v, V, Ctrl-C or Escape - leave visual mode if not in amending mode, otherwise switch to - normal visual selection. - - Ctrl-G switch type of amending by round robin scheme: append -> remove - -> invert. - - : enter command line mode. Selection is cleared on leaving the - mode. - - o switch active selection bound. - - O switch active selection bound. - - gu, u make names of selected files lowercase. - - gU, U make names of selected files uppercase. - -View Mode - This mode tries to imitate the less program. List of builtin shortcuts - can be found below. Shortcuts can be customized using :qmap, :qnoremap - and :qunmap command-line commands. - - Shift-Tab, Tab, q, Q, ZZ - return to normal mode. - - [count]e, [count]Ctrl-E, [count]j, [count]Ctrl-N, [count]Enter - scroll forward one line (or [count] lines). - - [count]y, [count]Ctrl-Y, [count]k, [count]Ctrl-K, [count]Ctrl-P - scroll backward one line (or [count] lines). - - [count]f, [count]Ctrl-F, [count]Ctrl-V, [count]Space - scroll forward one window (or [count] lines). - - [count]b, [count]Ctrl-B, [count]Alt-V - scroll backward one window (or [count] lines). - - [count]z - scroll forward one window (and set window to [count]). - - [count]w - scroll backward one window (and set window to [count]). - - [count]Alt-Space - scroll forward one window, but don't stop at end-of-file. - - [count]d, [count]Ctrl-D - scroll forward one half-window (and set half-window to [count]). - - [count]u, [count]Ctrl-U - scroll backward one half-window (and set half-window to - [count]). - - r, Ctrl-R, Ctrl-L - repaint screen. - - R reload view preserving scroll position. - - F toggle automatic forwarding. Roughly equivalent to periodic - file reload and scrolling to the bottom. The behaviour is simi- - lar to `tail -F` or F key in less. - - [count]/pattern - search forward for ([count]-th) matching line. - - [count]?pattern - search backward for ([count]-th) matching line. - - [count]n - repeat previous search (for [count]-th occurrence). - - [count]N - repeat previous search in reverse direction (for [count]-th oc- - currence). - - [count]g, [count]<, [count]Alt-< - scroll to the first line of the file (or line [count]). - - [count]G, [count]>, [count]Alt-> - scroll to the last line of the file (or line [count]). - - [count]p, [count]% - scroll to the beginning of the file (or N percent into file). - - v invoke an editor to edit the current file being viewed. The - command for editing is taken from the 'vicmd'/'vixcmd' option - value and extended with middle line number prepended by a plus - sign and name of the current file. - - All "Ctrl-W x" keys work the same was as in Normal mode. Active mode - is automatically changed on navigating among windows. When less-like - mode activated on file preview is left using one by "Ctrl-W x" keys, - its state is stored until another file is displayed using preview (it's - possible to leave the mode, hide preview pane, do something else, then - get back to the file and show preview pane again with previously stored - state in it). - -Command line Mode - These keys are available in all submodes of the command line mode: com- - mand, search, prompt and filtering. - - Down, Up, Left, Right, Home, End and Delete are extended keys and they - are not available if vifm is compiled with --disable-extended-keys op- - tion. - - Esc, Ctrl-C - leave command line mode, cancels input. Cancelled input is - saved into appropriate history and can be recalled later. - - Ctrl-M, Enter - execute command and leave command line mode. - - Ctrl-I, Tab - complete command or its argument. - - Shift-Tab - complete in reverse order. - - Ctrl-_ stop completion and return original input. - - Ctrl-B, Left - move cursor to the left. - - Ctrl-F, Right - move cursor to the right. - - Ctrl-A, Home - go to line beginning. - - Ctrl-E, End - go to line end. - - Alt-B go to the beginning of previous word. - - Alt-F go to the end of next word. - - Ctrl-U remove characters from cursor position till the beginning of - line. - - Ctrl-K remove characters from cursor position till the end of line. - - Ctrl-H, Backspace - remove character before the cursor. - - Ctrl-D, Delete - remove character under the cursor. - - Ctrl-W remove characters from cursor position till the beginning of - previous word. - - Alt-D remove characters from cursor position till the beginning of - next word. - - Ctrl-T swap the order of current and previous character and move cursor - forward or, if cursor past the end of line, swap the order of - two last characters in the line. - - Alt-. insert last part of previous command to current cursor position. - Each next call will insert last part of older command. - - Ctrl-G edit command-line content in external editor. See "Command line - editing" section for details. - - Ctrl-N recall more recent command-line from history. - - Ctrl-P recall older command-line from history. - - Up recall more recent command-line from history, that begins as the - current command-line. - - Down recall older command-line from history, that begins as the cur- - rent command-line. - - Ctrl-] trigger abbreviation expansion. - -Pasting special values - The shortcuts listed below insert specified values into current cursor - position. Last key of every shortcut references value that it inserts: - - c - [c]urrent file - - d - [d]irectory path - - e - [e]xtension of a file name - - r - [r]oot part of a file name - - t - [t]ail part of directory path - - - a - [a]utomatic filter - - m - [m]anual filter - - = - local filter, which is bound to "=" in normal mode - - Values related to filelist in current pane are available through Ctrl-X - prefix, while values from the other pane have doubled Ctrl-X key as - their prefix (doubled Ctrl-X is presumably easier to type than upper- - case letters; it's still easy to remap the keys to correspond to names - of similar macros). - - Ctrl-X c - name of the current file of the active pane. - - Ctrl-X d - path to the current directory of the active pane. - - Ctrl-X e - extension of the current file of the active pane. - - Ctrl-X r - name root of current file of the active pane. - - Ctrl-X t - the last component of path to the current directory of the ac- - tive pane. - - Ctrl-X Ctrl-X c - name of the current file of the inactive pane. - - Ctrl-X Ctrl-X d - path to the current directory of the inactive pane. - - Ctrl-X Ctrl-X e - extension of the current file of the inactive pane. - - Ctrl-X Ctrl-X r - name root of current file of the inactive pane. - - Ctrl-X Ctrl-X t - the last component of path to the current directory of the inac- - tive pane. - - - Ctrl-X a - value of implicit permanent filter (old name "automatic") of the - active pane. - - Ctrl-X m - value of explicit permanent filter (old name "manual") of the - active pane. - - Ctrl-X = - value of local filter of the active pane. - - - Ctrl-X / - last pattern from search history. - -Command line editing - vifm provides a facility to edit several kinds of data, that is usually - edited in command-line mode, in external editor (using command speci- - fied by 'vicmd' or 'vixcmd' option). This has at least two advantages - over built-in command-line mode: - - one can use full power of Vim to edit text; - - finding and reusing history entries becomes possible. - - The facility is supported by four input submodes of the command-line: - - command; - - forward search; - - backward search; - - file rename (see description of cw and cW normal mode keys). - - Editing command-line using external editor is activated by the Ctrl-G - shortcut. It's also possible to do almost the same from Normal and - Visual modes using q:, q/ and q? commands. - - Temporary file created for the purpose of editing the line has the fol- - lowing structure: - - 1. First line, which is either empty or contains text already entered - in command-line. - - 2. 2nd and all other lines with history items starting with the most - recent one. Altering this lines in any way won't change history - items stored by vifm. - - After editing application is finished the first line of the file is - taken as the result of operation, when the application returns zero - exit code. If the application returns an error (see :cquit command in - Vim), all the edits made to the file are ignored, but the initial value - of the first line is saved in appropriate history. - -More Mode - This is the mode that appears when status bar content is so big that it - doesn't fit on the screen. One can identify the mode by "-- More --" - message at the bottom. - - The following keys are handled in this mode: - - - Enter, Ctrl-J, j or Down - scroll one line down. - - Backspace, k or Up - scroll one line up. - - - d scroll one page (half of a screen) down. - - u scroll one page (half of a screen) up. - - - Space, f or PageDown - scroll down a screen. - - b or PageUp - scroll up a screen. - - - G scroll to the bottom. - - g scroll to the top. - - - q, Escape or Ctrl-C - quit the mode. - - : switch to command-line mode. - -Commands - Commands are executed with :command_name - - Commented out lines should start with the double quote symbol ("), - which may be preceded by whitespace characters intermixed with colons. - Inline comments can be added at the end of the line after double quote - symbol, only last line of a multi-line command can contain such com- - ment. Not all commands support inline comments as their syntax con- - flicts with names of registers and fields where double quotes are al- - lowed. - - Most of the commands have two forms: complete and the short one. Exam- - ple: - - :noh[lsearch] - - This means the complete command is nohlsearch, and the short one is - noh. - - Most of command-line commands completely reset selection in the current - view. However, there are several exceptions: - - - `:invert s` most likely leaves some files selected; - - - :normal command (when it doesn't leave command-line mode); - - - :if and :else commands don't affect selection on successful execu- - tion. - - '|' can be used to separate commands, so you can give multiple commands - in one line. If you want to use '|' in an argument, precede it with - '\'. - - These commands see '|' as part of their arguments even when it's es- - caped: - - :[range]! - :autocmd - :cabbrev - :cmap - :cnoreabbrev - :cnoremap - :command - :dmap - :dnoremap - :filetype - :fileviewer - :filextype - :map - :mmap - :mnoremap - :nmap - :nnoremap - :noremap - :normal - :qmap - :qnoremap - :vmap - :vnoremap - :wincmd - :windo - :winrun - - To be able to use another command after one of these, wrap it with the - :execute command. An example: - - if filetype('.') == 'reg' | execute '!!echo regular file' | endif - - :[count] - - :number - move to the file number. - :12 would move to the 12th file in the list. - :0 move to the top of the list. - :$ move to the bottom of the list. - - :[count]command - The only builtin :[count]command are :[count]d[elete] and - :[count]y[ank]. - - :d3 would delete three files starting at the current file position - moving down. - - :3d would delete one file at the third line in the list. - - :command [args] - - :[range]!program - execute command via shell. Accepts macros. - - :[range]!command & - - same as above, but the command is run in the background using vifm's - means. - - Programs that write to stderr create error dialogs showing errors of - the command. - - Note the space before ampersand symbol, if you omit it, command will be - run in the background using job control of your shell. - - Accepts macros. - - :!! - - :[range]!!command - same as :!, but pauses before returning. - - :!! repeat the last command. - - :alink - - :[range]alink[!?] - create absolute symbolic links to files in directory of inactive - view. With "?" prompts for destination file names in an edi- - tor. "!" forces overwrite. - - :[range]alink[!] path - create absolute symbolic links to files in directory specified - by the path (absolute or relative to directory of inactive - view). - - :[range]alink[!] name1 name2... - create absolute symbolic links of files in directory of other - view giving each next link a corresponding name from the argu- - ment list. - - :apropos - - :apropos keyword... - create a menu of items returned by the apropos command. Select- - ing an item in the menu opens corresponding man page. By de- - fault the command relies on the external "apropos" utility, - which can be customized by altering value of the 'aproposprg' - option. See "Menus and dialogs" section for controls. - - :autocmd - - :au[tocmd] {event} {pat} {cmd} - register autocommand for the {event}, which can be: - - DirEnter - triggered after directory is changed - Event name is case insensitive. - - {pat} is a comma-separated list of modified globs patterns, - which can contain tilde or environment variables. All paths use - slash ('/') as directory separator. The pattern can start with - a '!', which negates it. Patterns that do not contain slashes - are matched against the last item of the path only (e.g. "dir" - in "/path/dir"). Literal comma can be entered by doubling it. - Two modifications to globs matching are as follows: - - * - never matches a slash (i.e., can signify single direc- - tory level) - - ** - matches any character (i.e., can match path of arbi- - trary depth) - - {cmd} is a :command or several of them separated with '|'. - - Examples of patterns: - - conf.d - matches conf.d directory anywhere - - *.d - matches directories ending with ".d" anywhere - - **.git - matches something.git, but not .git anywhere - - **/.git/** - matches /path/.git/objects, but not /path/.git - - **/.git/**/ - matches /path/.git/ only (because of trailing - slash) - - /etc/* - matches /etc/conf.d/, /etc/X11, but not - /etc/X11/fs - - /etc/**/*.d - matches /etc/conf.d, /etc/X11/conf.d, etc. - - /etc/**/* - matches /etc/ itself and any file below it - - /etc/**/** - matches /etc/ itself and any file below it - - :au[tocmd] [{event}] [{pat}] - list those autocommands that match given event-pattern combina- - tion. - {event} and {pat} can be omitted to list all autocommands. To - list any autocommands for specific pattern one can use * place- - holder in place of {event}. - - :au[tocmd]! [{event}] [{pat}] - remove autocommands that match given event-pattern combination. - Syntax is the same as for listing above. - - :apropos - repeat last :apropos command. - - :bmark - - :bmark tag1 [tag2 [tag3...]] - bookmark current directory with specified tags. - - :bmark! path tag1 [tag2 [tag3...]] - same as :bmark, but allows bookmarking specific path instead of - current directory. This is for use in vifmrc and for bookmark- - ing files. - - Path can contain macros that expand to single path (%c, %C, %d, - %D) or those that can expand to multiple paths, but contain only - one (%f, %F, %rx). The latter is done for convenience on using - the command interactively. Complex macros that include spaces - (e.g. "%c:gs/ /_") should be escaped. - - :bmarks - - :bmarks - display all bookmarks in a menu. - - :bmarks [tag1 [tag2...]] - display menu of bookmarks that include all of the specified - tags. See "Menus and dialogs" section for controls. - - :bmgo - - :bmgo [tag1 [tag2...]] - when there are more than one match acts exactly like :bmarks, - otherwise navigates to single match immediately (and fails if - there is no match). - - :cabbrev - - :ca[bbrev] - display menu of command-line mode abbreviations. See "Menus and - dialogs" section for controls. - - :ca[bbrev] lhs-prefix - display command-line mode abbreviations which left-hand side - starts with specified prefix. - - :ca[bbrev] lhs rhs - register new or overwrites existing abbreviation for command- - line mode. rhs can contain spaces and any special sequences ac- - cepted in rhs of mappings (see "Mappings" section below). Ab- - breviations are expanded non-recursively. - - :cnoreabbrev - - :cnorea[bbrev] - display menu of command-line mode abbreviations. See "Menus and - dialogs" section for controls. - - :cnorea[bbrev] lhs-prefix - display command-line mode abbreviations which left-hand side - starts with specified prefix. - - :cnorea[bbrev] lhs rhs - same as :cabbrev, but mappings in rhs are ignored during expan- - sion. - - :cd - - :cd or :cd ~ or :cd $HOME - change to home directory. - - :cd - go to the last visited directory. - - :cd ~/dir - change directory to ~/dir. - - :cd /curr/dir /other/dir - change directory of the current pane to /curr/dir and directory - of the other pane to /other/dir. Relative paths are assumed to - be relative to directory of current view. Command won't fail if - one of directories is invalid. All forms of the command accept - macros. - - :cd! /dir - same as :cd /dir /dir. - - :cds - - :cds[!] pattern string - navigate to path obtained by substituting first match in current - path. Arguments can include slashes, but starting first argu- - ment with a separator will activate below form of the command. - Specifying "!" changes directory of both panes. - - Available flags: - - - i - ignore case (the 'ignorecase' and 'smartcase' options are not - used) - - - I - don't ignore case (the 'ignorecase' and 'smartcase' options are - not used) - - :cds[!]/pattern/string/[flags] - same as above, but with :substitute-like syntax. Other punctua- - tion characters can be used as separators. - - :change - - :c[hange] - show a dialog to alter properties of files. - - :chmod - - :[range]chmod - display file attributes (permission on *nix and properties on - Windows) change dialog. - - :[range]chmod[!] arg... - only for *nix - change permissions for files. See `man 1 chmod` for arg format. - "!" means set permissions recursively. - - :chown - - :[range]chown - only for *nix - same as co key in normal mode. - - :[range]chown [user][:][group] - only for *nix - change owner and/or group of files. Operates on directories re- - cursively. - - :clone - - :[range]clone[!?] - clones files in current directory. With "?" vifm will open vi - to edit file names. "!" forces overwrite. Macros are expanded. - - :[range]clone[!] path - clones files to directory specified with the path (absolute or - relative to current directory). "!" forces overwrite. Macros - are expanded. - - :[range]clone[!] name1 name2... - clones files in current directory giving each next clone a cor- - responding name from the argument list. "!" forces overwrite. - Macros are expanded. - - :colorscheme - - :colo[rscheme]? - print current color scheme name on the status bar. - - :colo[rscheme] - display a menu with a list of available color schemes. You can - choose primary color scheme here. It is used for view if no di- - rectory specific colorscheme fits current path. It's also used - to set border color (except view titles) and colors in menus and - dialogs. See "Menus and dialogs" section for controls. - - :colo[rscheme] color_scheme_name - change primary color scheme to color_scheme_name. In case of - errors (e.g. some colors are not supported by terminal) either - nothing is changed or color scheme is reset to builtin colors to - ensure that TUI is left in a usable state. - - :colo[rscheme] color_scheme_name directory - associate directory with the color scheme. The directory argu- - ment can be either absolute or relative path when :colorscheme - command is executed from command line, but mandatory should be - an absolute path when the command is executed in scripts loaded - at startup (until vifm is completely loaded). - - :colo[rscheme] color_scheme_name color_scheme_name... - loads the first color scheme in the order given that exists and - is supported by the terminal. If none matches, current one re- - mains unchanged. For example: - - " use a separate color scheme for panes which are inside FUSE mounts - execute 'colorscheme in-fuse' &fusehome - - :comclear - - :comc[lear] - remove all user defined commands. - - :command - - :com[mand] - display a menu of user commands. See "Menus and dialogs" sec- - tion for controls. - - :com[mand] prefix - display user defined commands that start with the prefix. - - :com[mand] name action[ &] - set or redefine a user command. - Use :com[mand]! to overwrite a previously set command of the - same name. Builtin commands can't be redefined. - Unlike in vim, user commands do not have to start with a capital - letter. However, command name cannot contain numbers or special - symbols except for single trailing '?' or '!'. - User commands are run in a shell by default (see below for syn- - tax of other options). To run a command in the background you - must mark it as a background command by adding " &" after the - command's action (e.g., `:com rm rm %f &`). - User commands of all kinds have macros expanded in them. See - "Command macros" section for more information. - - :com[mand] name /pattern - set search pattern. - - :com[mand] name =pattern - set local filter value. - - :com[mand] name filter{:filter args} - set file name filter (see :filter command description). For ex- - ample: - - " display only audio files - :command onlyaudio filter/.+.\(mp3|wav|mp3|flac|ogg|m4a|wma|ape\)$/i - " display everything except audio files - :command noaudio filter!/.+.\(mp3|wav|mp3|flac|ogg|m4a|wma|ape\)$/i - - :com[mand] name :commands - set kind of an alias for internal commands (like in a shell). - Passes range given to alias to an aliased command, so running - :%cp after - :command cp :copy %a - equals - :%copy - - :compare - - :compare [byname | bysize | bycontents | listall | listunique | - listdups | ofboth | ofone | groupids | grouppaths | skipempty]... - compare files in one or two views according the arguments. The - default is "bycontents listall ofboth grouppaths". See "Compare - views" section below for details. Tree structure is incompati- - ble with alternative representations, so values of 'lsview' and - 'millerview' options are ignored. - - :copen - - :cope[n] - opens menu with contents of the last displayed menu with naviga- - tion to files by default, if any. - - :copy - - :[range]co[py][!?][ &] - copy files to directory of other view. With "?" prompts for - destination file names in an editor. "!" forces overwrite. - - :[range]co[py][!] path[ &] - copy files to directory specified with the path (absolute or - relative to directory of other view). "!" forces overwrite. - - :[range]co[py][!] name1 name2...[ &] - copy files to directory of other view giving each next file a - corresponding name from the argument list. "!" forces over- - write. - - :cquit - - :cq[uit][!] - same as :quit, but also aborts directory choosing via - --choose-dir (empties output file) and returns non-zero exit - code. - - :cunabbrev - - :cuna[bbrev] lhs - unregister command-line mode abbreviation by its lhs. - - :cuna[bbrev] rhs - unregister command-line mode abbreviation by its rhs, so that - abbreviation could be removed even after expansion. - - :delbmarks - - :delbmarks - remove bookmarks from current directory. - - :delbmarks tag1 [tag2 [tag3...]] - remove set of bookmarks that include all of the specified tags. - - :delbmarks! - remove all bookmarks. - - :delbmarks! path1 [path2 [path3...]] - remove bookmarks of listed paths. - - :delcommand - - :delc[ommand] user_command - remove user defined command named user_command. - - :delete - - :[range]d[elete][!][ &] - delete selected file or files. "!" means complete removal - (omitting trash). - - :[range]d[elete][!] [reg] [count][ &] - delete selected or [count] files to the reg register. "!" means - complete removal (omitting trash). - - :delmarks - - :delm[arks]! - delete all marks. - - :delm[arks] marks ... - delete specified marks, each argument is treated as a set of - marks. - - :delsession - - :delsession - delete specified session if it was stored previously. Deleting - current session doesn't detach it. - - :display - - :di[splay] - display menu with registers content. - - :di[splay] list ... - display the contents of the numbered and named registers that - are mentioned in list (for example "az to display "", "a and "z - content). - - :dirs - - :dirs display directory stack in a menu. See "Menus and dialogs" sec- - tion for controls. - - :echo - - :ec[ho] [...] - evaluate each argument as an expression and output them sepa- - rated with a space. See help on :let command for a definition - of . - - :edit - - :[range]e[dit] [file...] - open selected or passed file(s) in editor. Macros and environ- - ment variables are expanded. - - :else - - :el[se] - execute commands until next matching :endif if all other condi- - tions didn't match. See also help on :if and :endif commands. - - :elseif - - :elsei[f] {expr1} - execute commands until next matching :elseif, :else or :endif if - conditions of previous :if and :elseif branches were evaluated - to zero. See also help on :if and :endif commands. - - :empty - - :empty permanently remove files from all existing non-empty trash di- - rectories (see "Trash directory" section below). Trash directo- - ries which are specified via %r and/or %u also get deleted com- - pletely. Also remove all operations from undolist that have no - sense after :empty and remove all records about files located - inside directories from all registers. Removal is performed as - background task with undetermined amount of work and can be - checked via :jobs menu. - - :endif - - :en[dif] - end conditional block. See also help on :if and :else commands. - - :execute - - :exe[cute] [...] - evaluate each argument as an expression and join results sepa- - rated by a space to get a single string which is then executed - as a command-line command. See help on :let command for a defi- - nition of . - - :exit - - :exi[t][!] - same as :quit. - - :file - - :f[ile][ &] - display menu of programs set for the file type of the current - file. " &" forces running associated program in background. - See "Menus and dialogs" section for controls. - - :f[ile] arg[ &] - run associated command that begins with the arg skipping opening - menu. " &" forces running associated program in background. - - :filetype - - :filet[ype] pattern-list [{descr}]def_prog[ &],[{descr}]prog2[ &],... - associate given program list to each of the patterns. Associ- - ated program (command) is used by handlers of l and Enter keys - (and also in the :file menu). If you need to insert comma into - command just double it (",,"). Space followed by an ampersand - as two last characters of a command means running of the command - in the background. Optional description can be given to each - command to ease understanding of what command will do in the - :file menu. Vifm will try the rest of the programs for an asso- - ciation when the default isn't found. When program entry - doesn't contain any of vifm macros, name of current file is ap- - pended as if program entry ended with %c macro on *nix and %"c - on Windows. On Windows path to executables containing spaces - can (and should be for correct work with such paths) be double - quoted. See "Patterns" section below for pattern definition and - "Selection" section for how selection is handled. See also "Au- - tomatic FUSE mounts" section below. Example for zip archives - and several actions: - - filetype *.zip,*.jar,*.war,*.ear - \ {Mount with fuse-zip} - \ FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR, - \ {View contents} - \ zip -sf %c | less, - \ {Extract here} - \ tar -xf %c, - - Note that on OS X when `open` is used to call an app, vifm is - unable to check whether that app is actually available. So if - automatic skipping of programs that aren't there is desirable, - `open` should be replaced with an actual command. - - :filet[ype] filename - list (in menu mode) currently registered patterns that match - specified file name. Same as ":filextype filename". - - :filextype - - :filex[type] pattern-list [{ description }] def_program,program2,... - same as :filetype, but this command is ignored if not running in - X. In X :filextype is equal to :filetype. See "Patterns" sec- - tion below for pattern definition and "Selection" section for - how selection is handled. See also "Automatic FUSE mounts" sec- - tion below. - - For example, consider the following settings (the order might - seem strange, but it's for the demonstration purpose): - - filetype *.html,*.htm - \ {View in lynx} - \ lynx - filextype *.html,*.htm - \ {Open with dwb} - \ dwb %f %i &, - filetype *.html,*.htm - \ {View in links} - \ links - filextype *.html,*.htm - \ {Open with firefox} - \ firefox %f &, - \ {Open with uzbl} - \ uzbl-browser %f %i &, - - If you're using vifm inside a terminal emulator that is running - in graphical environment (when X is used on *nix; always on Win- - dows), vifm attempts to run application in this order: - - 1. lynx - 2. dwb - 3. links - 4. firefox - 5. uzbl - - If there is no graphical environment (checked by presence of - non-empty $DISPLAY or $WAYLAND_DISPLAY environment variable on - *nix; never happens on Windows), the list will look like: - - 1. lynx - 2. links - - Just as if all :filextype commands were not there. - - The purpose of such differentiation is to allow comfortable use - of vifm with same settings in desktop environment/through remote - connection (SSH)/in native console. - - Note that on OS X $DISPLAY isn't defined unless you define it, - so :filextype should be used only if you set $DISPLAY in some - way. - - :filext[ype] filename - list (in menu mode) currently registered patterns that match - specified file name. Same as ":filetype filename". - - :fileviewer - - :filev[iewer] pattern-list command1,command2,... - register specified list of commands as viewers for each of the - patterns. Viewer is a command which output is captured and dis- - played in one of the panes of vifm after pressing "e" or running - :view command. When the command doesn't contain any of vifm - macros, name of current file is appended as if command ended - with %c macro. Comma escaping and missing commands processing - rules as for :filetype apply to this command. See "Patterns" - section below for pattern definition. - - Example for zip archives: - - fileviewer *.zip,*.jar,*.war,*.ear zip -sf %c, echo "No zip to preview:" - - :filev[iewer] filename - list (in menu mode) currently registered patterns that match - specified filename. - - :filter - - :filter[!] {pattern} - filter files matching the pattern out of directory listings. - '!' controls state of filter inversion after updating filter - value (see also 'cpoptions' description). Filter is matched - case sensitively on *nix and case insensitively on Windows. See - "File Filters" and "Patterns" sections. - - Example: - - " filter all files ending in .o from the filelist. - :filter /.o$/ - - - :filter[!] {empty-pattern} - same as above, but use last search pattern as pattern value. - - Example: - - :filter //I - - - :filter - reset filter (set it to an empty string) and show all files. - - :filter! - same as :invert. - - :filter? - show information on local, name and auto filters. - - :find - - :[range]fin[d] pattern - display results of find command in the menu. Searches among se- - lected files if any. Accepts macros. By default the command - relies on the external "find" utility, which can be customized - by altering value of the 'findprg' option. - - :[range]fin[d] -opt... - same as :find above, but user defines all find arguments. - Searches among selected files if any. - - :[range]fin[d] path -opt... - same as :find above, but user defines all find arguments. Ig- - nores selection and range. - - :[range]fin[d] - repeat last :find command. - - :finish - - :fini[sh] - stop sourcing a script. Can only be used in a vifm script file. - This is a quick way to skip the rest of the file. - - :goto - - :go[to] - change directory if necessary and put specified path under the - cursor. The path should be existing non-root path. Macros and - environment variables are expanded. - - :grep - - :[range]gr[ep][!] pattern - will show results of grep command in the menu. Add "!" to re- - quest inversion of search (look for lines that do not match pat- - tern). Searches among selected files if any and no range given. - Ignores binary files by default. By default the command relies - on the external "grep" utility, which can be customized by al- - tering value of the 'grepprg' option. - - :[range]gr[ep][!] -opt... - same as :grep above, but user defines all grep arguments, which - are not escaped. Searches among selected files if any. - - :[range]gr[ep][!] - repeat last :grep command. "!" of this command inverts "!" in - repeated command. - - :help - - :h[elp] - show the help file. - - :h[elp] argument - is the same as using ':h argument' in vim. Use vifm- - to get help on vifm (tab completion works). This form of the - command doesn't work when 'vimhelp' option is off. - - :hideui - - :hideui - hide interface to show previous commands' output. - - :highlight - - :hi[ghlight] - display information about all highlight groups active at the mo- - ment. - - :hi[ghlight] clear - reset all highlighting to builtin defaults and removed all file- - name-specific rules. - - :hi[ghlight] clear ( {pat1,pat2,...} | /regexp/ ) - remove specified rule. - - :hi[ghlight] ( group-name | {pat1,pat2,...} | /regexp/ ) - display information on given highlight group or file name pat- - tern of color scheme used in the active view. - - :hi[ghlight] ( group-name | {pat1,pat2,...} | /regexp/[iI] ) - cterm=style | ctermfg=color | ctermbg=color - set style (cterm), foreground (ctermfg) or/and background - (ctermbg) parameters of highlight group or file name pattern for - color scheme used in the active view. - - All style values as well as color names are case insensitive. - - Available style values (some of them can be combined): - - bold - - underline - - reverse or inverse - - standout - - italic (on unsupported systems becomes reverse) - - none - - Available group-name values: - - Win - color of all windows (views, dialogs, menus) and default color - for their content (e.g. regular files in views) - - AuxWin - color of auxiliary areas of windows - - OtherWin - color of inactive pane - - Border - color of vertical parts of the border - - TabLine - tab line color (for 'tabscope' set to "global") - - TabLineSel - color of the tip of selected tab (regardless of 'tab- - scope') - - TopLine - top line color of the other pane - - TopLineSel - top line color of the current pane - - CmdLine - the command line/status bar color - - ErrorMsg - color of error messages in the status bar - - StatusLine - color of the line above the status bar - - JobLine - color of job line that appears above the status line - - WildMenu - color of the wild menu items - - SuggestBox - color of key suggestion box - - CurrLine - line at cursor position in active view - - OtherLine - line at cursor position in inactive view - - OddLine - color of every second entry line in a pane - - LineNr - line number column of views - - Selected - color of selected files - - Directory - color of directories - - Link - color of symbolic links in the views - - BrokenLink - color of broken symbolic links - - HardLink - color of regular files with more than one hard link - - Socket - color of sockets - - Device - color of block and character devices - - Executable - color of executable files - - Fifo - color of fifo pipes - - CmpMismatch - color of mismatched files in side-by-side comparison - by path - - User1..User9 - 9 colors which can be used via %* 'statusline' macro - - Available colors: - - -1 or default or none - default or transparent - - black and lightblack - - red and lightred - - green and lightgreen - - yellow and lightyellow - - blue and lightblue - - magenta and lightmagenta - - cyan and lightcyan - - white and lightwhite - - 0-255 - corresponding colors from 256-color palette - - Light versions of colors are regular colors with bold attribute set. - So order of arguments of :highlight command is important and it's bet- - ter to put "cterm" in front of others to prevent it from overwriting - attributes set by "ctermfg" or "ctermbg" arguments. - - For convenience of color scheme authors xterm-like names for 256 color - palette is also supported. The mapping is taken from - http://vim.wikia.com/wiki/Xterm256_color_names_for_console_Vim Dupli- - cated entries were altered by adding an underscore followed by numeri- - cal suffix. - - 0 Black 86 Aquamarine1 172 Orange3 - 1 Red 87 DarkSlateGray2 173 LightSalmon3_2 - 2 Green 88 DarkRed_2 174 LightPink3 - 3 Yellow 89 DeepPink4_2 175 Pink3 - 4 Blue 90 DarkMagenta 176 Plum3 - 5 Magenta 91 DarkMagenta_2 177 Violet - 6 Cyan 92 DarkViolet 178 Gold3_2 - 7 White 93 Purple 179 LightGoldenrod3 - 8 LightBlack 94 Orange4_2 180 Tan - 9 LightRed 95 LightPink4 181 MistyRose3 - 10 LightGreen 96 Plum4 182 Thistle3 - 11 LightYellow 97 MediumPurple3 183 Plum2 - 12 LightBlue 98 MediumPurple3_2 184 Yellow3_2 - 13 LightMagenta 99 SlateBlue1 185 Khaki3 - 14 LightCyan 100 Yellow4 186 LightGoldenrod2 - 15 LightWhite 101 Wheat4 187 LightYellow3 - 16 Grey0 102 Grey53 188 Grey84 - 17 NavyBlue 103 LightSlateGrey 189 LightSteelBlue1 - 18 DarkBlue 104 MediumPurple 190 Yellow2 - 19 Blue3 105 LightSlateBlue 191 DarkOliveGreen1 - 20 Blue3_2 106 Yellow4_2 192 DarkOliveG- - reen1_2 - 21 Blue1 107 DarkOliveGreen3 193 DarkSeaGreen1_2 - 22 DarkGreen 108 DarkSeaGreen 194 Honeydew2 - 23 DeepSkyBlue4 109 LightSkyBlue3 195 LightCyan1 - 24 DeepSkyBlue4_2 110 LightSkyBlue3_2 196 Red1 - 25 DeepSkyBlue4_3 111 SkyBlue2 197 DeepPink2 - 26 DodgerBlue3 112 Chartreuse2_2 198 DeepPink1 - 27 DodgerBlue2 113 DarkOliveGreen3_2 199 DeepPink1_2 - 28 Green4 114 PaleGreen3_2 200 Magenta2_2 - 29 SpringGreen4 115 DarkSeaGreen3 201 Magenta1 - 30 Turquoise4 116 DarkSlateGray3 202 OrangeRed1 - 31 DeepSkyBlue3 117 SkyBlue1 203 IndianRed1 - 32 DeepSkyBlue3_2 118 Chartreuse1 204 IndianRed1_2 - 33 DodgerBlue1 119 LightGreen_2 205 HotPink - 34 Green3 120 LightGreen_3 206 HotPink_2 - 35 SpringGreen3 121 PaleGreen1 207 MediumOrchid1_2 - 36 DarkCyan 122 Aquamarine1_2 208 DarkOrange - 37 LightSeaGreen 123 DarkSlateGray1 209 Salmon1 - 38 DeepSkyBlue2 124 Red3 210 LightCoral - 39 DeepSkyBlue1 125 DeepPink4_3 211 PaleVioletRed1 - 40 Green3_2 126 MediumVioletRed 212 Orchid2 - 41 SpringGreen3_2 127 Magenta3 213 Orchid1 - 42 SpringGreen2 128 DarkViolet_2 214 Orange1 - 43 Cyan3 129 Purple_2 215 SandyBrown - 44 DarkTurquoise 130 DarkOrange3 216 LightSalmon1 - 45 Turquoise2 131 IndianRed 217 LightPink1 - 46 Green1 132 HotPink3 218 Pink1 - 47 SpringGreen2_2 133 MediumOrchid3 219 Plum1 - 48 SpringGreen1 134 MediumOrchid 220 Gold1 - 49 MediumSpringGreen 135 MediumPurple2 221 LightGolden- - rod2_2 - 50 Cyan2 136 DarkGoldenrod 222 LightGolden- - rod2_3 - 51 Cyan1 137 LightSalmon3 223 NavajoWhite1 - 52 DarkRed 138 RosyBrown 224 MistyRose1 - 53 DeepPink4 139 Grey63 225 Thistle1 - 54 Purple4 140 MediumPurple2_2 226 Yellow1 - 55 Purple4_2 141 MediumPurple1 227 LightGoldenrod1 - 56 Purple3 142 Gold3 228 Khaki1 - 57 BlueViolet 143 DarkKhaki 229 Wheat1 - 58 Orange4 144 NavajoWhite3 230 Cornsilk1 - 59 Grey37 145 Grey69 231 Grey100 - 60 MediumPurple4 146 LightSteelBlue3 232 Grey3 - 61 SlateBlue3 147 LightSteelBlue 233 Grey7 - 62 SlateBlue3_2 148 Yellow3 234 Grey11 - 63 RoyalBlue1 149 DarkOliveGreen3_3 235 Grey15 - 64 Chartreuse4 150 DarkSeaGreen3_2 236 Grey19 - 65 DarkSeaGreen4 151 DarkSeaGreen2 237 Grey23 - 66 PaleTurquoise4 152 LightCyan3 238 Grey27 - 67 SteelBlue 153 LightSkyBlue1 239 Grey30 - 68 SteelBlue3 154 GreenYellow 240 Grey35 - 69 CornflowerBlue 155 DarkOliveGreen2 241 Grey39 - 70 Chartreuse3 156 PaleGreen1_2 242 Grey42 - 71 DarkSeaGreen4_2 157 DarkSeaGreen2_2 243 Grey46 - 72 CadetBlue 158 DarkSeaGreen1 244 Grey50 - 73 CadetBlue_2 159 PaleTurquoise1 245 Grey54 - 74 SkyBlue3 160 Red3_2 246 Grey58 - 75 SteelBlue1 161 DeepPink3 247 Grey62 - 76 Chartreuse3_2 162 DeepPink3_2 248 Grey66 - 77 PaleGreen3 163 Magenta3_2 249 Grey70 - 78 SeaGreen3 164 Magenta3_3 250 Grey74 - 79 Aquamarine3 165 Magenta2 251 Grey78 - 80 MediumTurquoise 166 DarkOrange3_2 252 Grey82 - 81 SteelBlue1_2 167 IndianRed_2 253 Grey85 - 82 Chartreuse2 168 HotPink3_2 254 Grey89 - 83 SeaGreen2 169 HotPink2 255 Grey93 - 84 SeaGreen1 170 Orchid - 85 SeaGreen1_2 171 MediumOrchid1 - - There are two colors (foreground and background) and only one bold at- - tribute. Thus single bold attribute affects both colors when "reverse" - attribute is used in vifm run inside terminal emulator. At the same - time linux native console can handle boldness of foreground and back- - ground colors independently, but for consistency with terminal emula- - tors this is available only implicitly by using light versions of col- - ors. This behaviour might be changed in the future. - - Although vifm supports 256 colors in a sense they are supported by UI - drawing library, whether you will be able to use all of them highly de- - pends on your terminal. To set up terminal properly, make sure that - $TERM in the environment you run vifm is set to name of 256-color ter- - minal (on *nixes it can also be set via X resources), e.g. - xterm-256color. One can find list of available terminal names by list- - ing /usr/lib/terminfo/. Number of colors supported by terminal with - current settings can be checked via "tput colors" command. - - Here is the hierarchy of highlight groups, which you need to know for - using transparency: - JobLine - SuggestBox - StatusLine - WildMenu - User1..User9 - Border - CmdLine - ErrorMsg - Win - OtherWin - AuxWin - OddLine - File name specific highlights - Directory - Link - BrokenLink - HardLink - Socket - Device - Fifo - Executable - Selected - CurrLine - LineNr (in active pane) - OtherLine - LineNr (in inactive pane) - TopLine - TopLineSel - TabLineSel (for pane tabs) - User1..User9 - TabLine - TabLineSel - User1..User9 - - "none" means default terminal color for highlight groups at the first - level of the hierarchy and transparency for all others. - - Here file name specific highlights mean those configured via globs ({}) - or regular expressions (//). At most one of them is applied per file - entry, namely the first that matches file name, hence order of :high- - light commands might be important in certain cases. - - :history - - :his[tory] - display a menu with list of visited directories. See "Menus and - dialogs" section for controls. - - :his[tory] x - x can be: - d[ir] or . show directory history. - c[md] or : show command line history. - s[earch] or / show search history and search forward on l - key. - f[search] or / show search history and search forward on l - key. - b[search] or ? show search history and search backward on l - key. - i[nput] or @ show prompt history (e.g. on one file renam- - ing). - fi[lter] or = show filter history (see description of the "=" - normal mode command). - See "Menus and dialogs" section for controls. - - :histnext - - :histnext - same as . The main use case for this command is to work - around the common pain point of and being the same - ASCII character: one could alter the terminal emulator settings - to emit, for example, the `F1` keycode when Ctrl-I is pressed, - then `:noremap :histnext` in vifm, add "t" flag to the - 'cpoptions', and thus have both and working as ex- - pected. - - :histprev - - :histprev - same as . - - :if - - :if {expr1} - start conditional block. Commands are executed until next - matching :elseif, :else or :endif command if {expr1} evaluates - to non-zero, otherwise they are ignored. See also help on :else - and :endif commands. - - Example: - - if $TERM == 'screen.linux' - highlight CurrLine ctermfg=lightwhite ctermbg=lightblack - elseif $TERM == 'tmux' - highlight CurrLine cterm=reverse ctermfg=black ctermbg=white - else - highlight CurrLine cterm=bold,reverse ctermfg=black ctermbg=white - endif - - :invert - - :invert [f] - invert file name filter. - - :invert? [f] - show current filter state. - - :invert s - invert selection. - - :invert o - invert sorting order of the primary sorting key. - - :invert? o - show sorting order of the primary sorting key. - - :jobs - - :jobs display menu of current backgrounded processes. See "Menus and - dialogs" section for controls. - - :let - - :let $ENV_VAR = - set an environment variable. Warning: setting environment vari- - able to an empty string on Windows removes it. - - :let $ENV_VAR .= - append value to environment variable. - - :let &[l:|g:]opt = - sets option value. - - :let &[l:|g:]opt .= - append value to string option. - - :let &[l:|g:]opt += - increasing option value, adding sub-values. - - :let &[l:|g:]opt -= - decreasing option value, removing sub-values. - - Where could be a single-quoted string, double-quoted string, an - environment variable, function call or a concatanation of any of them - in any order using the '.' operator. Any whitespace is ignored. - - :locate - - :locate filename - use "locate" command to create a menu of filenames. Selecting a - file from the menu will reload the current file list in vifm to - show the selected file. By default the command relies on the - external "locate" utility (it's assumed that its database is al- - ready built), which can be customized by altering value of the - 'locateprg' option. See "Menus and dialogs" section for con- - trols. - - :locate - repeat last :locate command. - - :ls - - :ls lists windows of active terminal multiplexer (only when terminal - multiplexer is used). This is achieved by issuing proper com- - mand for active terminal multiplexer, thus the list is not han- - dled by vifm. - - :lstrash - - :lstrash - display a menu with list of files in trash. Each element of the - list is original path of a deleted file, thus the list can con- - tain duplicates. See "Menus and dialogs" section for controls. - - :mark - - :[range]ma[rk][?] x [/full/path] [filename] - Set mark x (a-zA-Z0-9) at /full/path and filename. By default - current directory is being used. If no filename was given and - /full/path is current directory then last file in [range] is - used. Using of macros is allowed. Question mark will stop com- - mand from overwriting existing marks. - - :marks - - :marks create a pop-up menu of marks. See "Menus and dialogs" section - for controls. - - :marks list ... - display the contents of the marks that are mentioned in list. - - :media - - :media only for *nix - display media management menu. See "Menus and dialogs" section - for controls. See also 'mediaprg' option. - - :messages - - :mes[sages] - shows previously given messages (up to 50). - - :mkdir - - :[line]mkdir[!] dir ... - create directories at specified paths. The [line] can be used - to pick node in a tree-view. "!" means make parent directories - as needed. Macros are expanded. - - :move - - :[range]m[ove][!?][ &] - move files to directory of other view. With "?" prompts for - destination file names in an editor. "!" forces overwrite. - - :[range]m[ove][!] path[ &] - move files to directory specified with the path (absolute or - relative to directory of other view). "!" forces overwrite. - - :[range]m[ove][!] name1 name2...[ &] - move files to directory of other view giving each next file a - corresponding name from the argument list. "!" forces over- - write. - - :nohlsearch - - :noh[lsearch] - clear selection in current pane. - - :normal - - :norm[al][!] commands - execute normal mode commands. If "!" is used, user defined map- - pings are ignored. Unfinished last command is aborted as if - or was typed. A ":" should be completed as well. - Commands can't start with a space, so put a count of 1 (one) be- - fore it. - - :only - - :on[ly] - switch to a one window view. - - :popd - - :popd remove pane directories from stack. - - :pushd - - :pushd[!] /curr/dir [/other/dir] - add pane directories to stack and process arguments like :cd - command. - - :pushd exchange the top two items of the directory stack. - - :put - - :[line]pu[t][!] [reg] [ &] - puts files from specified register (" by default) into current - directory. The [line] can be used to pick node in a tree-view. - "!" moves files "!" moves files from their original location in- - stead of copying them. During this operation no confirmation - dialogs will be shown, all checks are performed beforehand. - - :pwd - - :pw[d] show the present working directory. - - :qall - - :qa[ll][!] - exit vifm (add ! to skip saving changes and checking for active - backgrounded commands). - - :quit - - :q[uit][!] - if there is more than one tab, close the current one, otherwise - exit vifm (add ! to skip saving state and checking for active - backgrounded commands). - - :redraw - - :redr[aw] - redraw the screen immediately. - - :registers - - :reg[isters] - display menu with registers content. - - :reg[isters] list ... - display the contents of the numbered and named registers that - are mentioned in list (for example "az to display "", "a and "z - content). - - :regular - - :regular - - switch to regular view leaving custom view. - :rename - - :[range]rename[!] - rename files using vi to edit names. ! means go recursively - through directories. - - :[range]rename name1 name2... - rename each of selected files to a corresponding name. - - :restart - - :restart - free a lot of things (histories, commands, etc.), reread - vifminfo, vifmrc and session files and run startup commands - passed in the argument list, thus losing all unsaved changes - (e.g. recent history or keys mapped after starting this in- - stance). Session that wasn't yet stored gets reset. - - While many things get reset, some basic UI state and current lo- - cations are preserved, including tabs. - - :restart full - variation of :restart that makes no attempt to preserve any- - thing. - - :restore - - :[range]restore - restore file from trash directory, doesn't work outside one of - trash directories. See "Trash directory" section below. - - :rlink - - :[range]rlink[!?] - create relative symbolic links to files in directory of other - view. With "?" prompts for destination file names in an editor. - "!" forces overwrite. - - :[range]rlink[!] path - create relative symbolic links of files in directory specified - with the path (absolute or relative to directory of other view). - "!" forces overwrite. - - :[range]rlink[!] name1 name2... - create relative symbolic links of files in directory of other - view giving each next link a corresponding name from the argu- - ment list. "!" forces overwrite. - - :screen - - :screen - toggle whether to use the terminal multiplexer or not. - A terminal multiplexer uses pseudo terminals to allow multiple - windows to be used in the console or in a single xterm. Start- - ing vifm from terminal multiplexer with appropriate support - turned on will cause vifm to open a new terminal multiplexer - window for each new file edited or program launched from vifm. - This requires screen version 3.9.9 or newer for the screen -X - argument or tmux (1.8 version or newer is recommended). - - :screen! - enable integration with terminal multiplexers. - - :screen? - display whether integration with terminal multiplexers is en- - abled. - - Note: the command is called screen for historical reasons (when tmux - wasn't yet supported) and might be changed in future releases, or get - an alias. - - :select - - :[range]select - select files in the given range (current file if no range is - given). - - :select {pattern} - select files that match specified pattern. Possible {pattern} - forms are described in "Patterns" section below. Trailing slash - for directories is taken into account, so `:select! */ | invert - s` selects only files. - - :select //[iI] - same as item above, but reuses last search pattern. - - :select !{external command} - select files from the list supplied by external command. Files - are matched by full paths, relative paths are converted to abso- - lute ones beforehand. - - :[range]select! [{pattern}] - same as above, but resets previously selected items before pro- - ceeding. - - :session - - :session? - print name of the current session. - - :session - detach current session without saving it. Resets v:session. - - :session name - create or load and switch to a session with the specified name. - Name can't contain slashes. Session active at the moment is - saved before the switch. Session is also automatically saved - when quiting the application in usual ways. Sets v:session. - - :set - - :se[t] display all options that differ from their default value. - - :se[t] all - display all options. - - :se[t] opt1=val1 opt2='val2' opt3="val3" ... - sets given options. For local options both values are set. - You can use following syntax: - - for all options - option, option? and option& - - for boolean options - nooption, invoption and option! - - for integer options - option=x, option+=x and option-=x - - for string options - option=x and option+=x - - for string list options - option=x, option+=x, option-=x and - option^=x - - for enumeration options - option=x, option+=x and option-=x - - for set options - option=x, option+=x, option-=x and op- - tion^=x - - for charset options - option=x, option+=x, option-=x and op- - tion^=x - - the meaning: - - option - turn option on (for boolean) or print its value (for - all others) - - nooption - turn option off - - invoption - invert option state - - option! - invert option state - - option? - print option value - - option& - reset option to its default value - - option=x or option:x - set option to x - - option+=x - add/append x to option - - option-=x - remove (or subtract) x from option - - option^=x - toggle x presence among values of the option - - Option name can be prepended and appended by any number of - whitespace characters. - - :setglobal - - :setg[lobal] - display all global options that differ from their default value. - - :setg[lobal] all - display all global options. - - :setg[lobal] opt1=val1 opt2='val2' opt3="val3" ... - same as :set, but changes/prints only global options or global - values of local options. Changes to the latter might be not - visible until directory is changed. - - :setlocal - - :setl[ocal] - display all local options that differ from their default value. - - :setl[ocal] all - display all local options. - - :setl[ocal] opt1=val1 opt2='val2' opt3="val3" ... - same as :set, but changes/prints only local values of local op- - tions. - - :shell - - :sh[ell][!] - start a shell in current directory. "!" suppresses spawning - dedicated window of terminal multiplexer for a shell. To make - vifm adaptive to environment it uses $SHELL if it's defined, - otherwise 'shell' value is used. - - - :siblnext - - :[count]siblnext[!] - - change directory to [count]th next sibling directory after cur- - rent path using value of global sort option of current pane. - "!" enables wrapping. - - For example, say, you're at /boot and root listing starts like - this: - - bin/ - boot/ - dev/ - ... - - Issuing :siblnext will navigate to /dev. - - - :siblprev - - :[count]siblprev[!] - same as :siblnext, but in the opposite direction. - - :sort - - :sor[t] - display dialog with different sorting methods, where one can se- - lect the primary sorting key. When 'viewcolumns' options is - empty and 'lsview' is off, changing primary sorting key will - also affect view look (in particular the second column of the - view will be changed). See "Menus and dialogs" section for con- - trols. - - :source - - :so[urce] file - read command-line commands from the file. - - :split - - :sp[lit] - switch to a two window horizontal view. - - :sp[lit]! - toggle horizontal window splitting. - - :sp[lit] path - splits the window horizontally to show both file directories. - Also changes other pane to path (absolute or relative to current - directory of active pane). - - :substitute - - :[range]s[ubstitute]/pattern/string/[flags] - for each file in range replace a match of pattern with string. - - String can contain \0...\9 to link to capture groups (\0 - all match, - \1 - first group, etc.). - - Pattern is stored in search history. - - Available flags: - - - i - ignore case (the 'ignorecase' and 'smartcase' options are not - used) - - - I - don't ignore case (the 'ignorecase' and 'smartcase' options are - not used) - - - g - substitute all matches in each file name (each g toggles this) - - :[range]s[ubstitute]/pattern - substitute pattern with an empty string. - - :[range]s[ubstitute]//string/[flags] - use last pattern from search history. - - :[range]s[ubstitute] - repeat previous substitution command. - - :sync - - :sync [relative path] - change the other pane to the current pane directory or to some - path relative to the current directory. Using macros is al- - lowed. - - :sync! change the other pane to the current pane directory and synchro- - nize cursor position. If current pane displays custom list of - files, position before entering it is used (current one might - not make any sense). - - - :sync! [location | cursorpos | localopts | filters | filelist | tree | - all]... - change enumerated properties of the other pane to match corre- - sponding properties of the current pane. Arguments have the - following meanings: - - - location - current directory of the pane; - - - cursorpos - cursor position (doesn't make sense without "lo- - cation"); - - - localopts - all local options; - - - filters - all filters; - - - filelist - list of files for custom view (implies "loca- - tion"); - - - tree - tree structure for tree view (implies "location"); - - - all - all of the above. - - :tabclose - - :tabc[lose] - close current tab, unless it's the only one open at current - scope. - - :tabmove - - :tabm[ove] [N] - without the argument or with `$` as the argument, current tab - becomes the last tab. With the argument, current tab is moved - after the tab with the specified number. Argument of `0` moves - current tab to the first position. - - :tabname - - :tabname [name] - set, update or reset (when no argument is provided) name of the - current tab. - - :tabnew - - :tabnew [path] - create new tab. Accepts optional path for the new tab. Macros - and environment variables are expanded. - - :tabnext - - :tabn[ext] - switch to the next tab (wrapping around). - - :tabn[ext] {n} - go to the tab number {n}. Tab numeration starts with 1. - - :tabonly - - :tabo[nly] - close all tabs but the current one. Closes pane tabs only at - the active side. - - :tabprevious - - :tabp[revious] - switch to the previous tab (wrapping around). - - :tabp[revious] {n} - go to the {n}-th previous tab. Note that :tabnext handles its - argument differently. - - :touch - - :[line]touch file... - create files at specified paths. Aborts on errors. Doesn't up- - date time of existing files. The [line] can be used to pick - node in a tree-view. Macros are expanded. - - :tr - - :[range]tr/pattern/string/ - for each file in range transliterate the characters which appear - in pattern to the corresponding character in string. When - string is shorter than pattern, it's padded with its last char- - acter. - - :trashes - - :trashes - lists all valid trash directories in a menu. Only non-empty and - writable trash directories are shown. This is exactly the list - of directories that are cleared when :empty command is executed. - - :trashes? - same as :trashes, but also displays size of each trash direc- - tory. - - :tree - - :tree turn pane into tree view with current directory as its root. - The tree view is implemented on top of a custom view, but is au- - tomatically kept in sync with file system state and considers - all the filters. Thus the structure corresponds to what one - would see on visiting the directories manually. As a special - case for trees built out of custom view file-system tracking - isn't performed. - - To leave tree view go up from its root or use gh at any level of - the tree. Any command that changes directory will also do, in - particular, `:cd ..`. - - Tree structure is incompatible with alternative representations, - so values of 'lsview' and 'millerview' options are ignored. - - :tree! toggle current view in and out of tree mode. - - :undolist - - :undol[ist] - display list of latest changes. Use "!" to see actual commands. - See "Menus and dialogs" section for controls. - - :unlet - - :unl[et][!] $ENV_VAR1 $ENV_VAR2 ... - remove environment variables. Add ! to omit displaying of warn- - ings about nonexistent variables. - - :unselect - - :[range]unselect - unselect files in the given range (current file if no range is - given). - - :unselect {pattern} - unselect files that match specified pattern. Possible {pattern} - forms are described in "Patterns" section below. Trailing slash - for directories is taken into account, so `:unselect */` unse- - lects directories. - - :unselect !{external command} - unselect files from the list supplied by external command. - Files are matched by full paths, relative paths are converted to - absolute ones beforehand. - - :unselect //[iI] - same as item above, but reuses last search pattern. - - :version - - :ve[rsion] - show menu with version information. - - :vifm - - :vifm same as :version. - - :view - - :vie[w] - toggle on and off the quick file view (preview of file's con- - tents). See also 'quickview' option. - - :vie[w]! - turn on quick file view if it's off. - - :volumes - - :volumes - only for MS-Windows - display menu with volume list. Hitting l (or Enter) key opens - appropriate volume in the current pane. See "Menus and dialogs" - section for controls. - - :vsplit - - :vs[plit] - switch to a two window vertical view. - - :vs[plit]! - toggle window vertical splitting. - - :vs[plit] path - split the window vertically to show both file directories. And - changes other pane to path (absolute or relative to current di- - rectory of active pane). - - :wincmd - - :[count]winc[md] {arg} - same as running Ctrl-W [count] {arg}. - - :windo - - :windo [command...] - execute command for each pane (same as :winrun % command). - - :winrun - - :winrun type [command...] - execute command for pane(s), which is determined by type argu- - ment: - - ^ - top-left pane - - $ - bottom-right pane - - % - all panes - - . - current pane - - , - other pane - - :write - - :w[rite] - write current state to vifminfo and session files (if a session - is active). - - :wq - - :wq[!] same as :quit, but ! disables only the check of backgrounded - commands, while state of the application is always written. - :wqall - - :wqa[ll][!] - same as :qall, but ! disables only the check of backgrounded - commands, while state of the application is always written. - - :xall - - :xa[ll][!] - same as :qall. - - :xit - - :x[it][!] - same as :quit. - - :yank - - :[range]y[ank] [reg] [count] - will yank files to the reg register. - - :map lhs rhs - - :map lhs rhs - map lhs key sequence to rhs in normal and visual modes. - - :map! lhs rhs - map lhs key sequence to rhs in command line mode. - - - :cmap :dmap :mmap :nmap :qmap - :vmap - - :cm[ap] lhs rhs - map lhs to rhs in command line mode. - - :dm[ap] lhs rhs - map lhs to rhs in dialog modes. - - :mm[ap] lhs rhs - map lhs to rhs in menu mode. - - :nm[ap] lhs rhs - map lhs to rhs in normal mode. - - :qm[ap] lhs rhs - map lhs to rhs in view mode. - - :vm[ap] lhs rhs - map lhs to rhs in visual mode. - - - :*map - - :cm[ap] - list all maps in command line mode. - - :dm[ap] - list all maps in dialog modes. - - :mm[ap] - list all maps in menu mode. - - :nm[ap] - list all maps in normal mode. - - :qm[ap] - list all maps in view mode. - - :vm[ap] - list all maps in visual mode. - - :*map beginning - - :cm[ap] beginning - list all maps in command line mode that start with the begin- - ning. - - :dm[ap] beginning - list all maps in dialog modes that start with the beginning. - - :mm[ap] beginning - list all maps in menu mode that start with the beginning. - - :nm[ap] beginning - list all maps in normal mode that start with the beginning. - - :qm[ap] beginning - list all maps in view mode that start with the beginning. - - :vm[ap] beginning - list all maps in visual mode that start with the beginning. - - :noremap - - :no[remap] lhs rhs - map the key sequence lhs to rhs for normal and visual modes, but - disallow mapping of rhs. - - :no[remap]! lhs rhs - map the key sequence lhs to rhs for command line mode, but dis- - allow mapping of rhs. - - :cnoremap :dnoremap :mnoremap :nnoremap :qnoremap - :vnoremap - - :cno[remap] lhs rhs - map the key sequence lhs to rhs for command line mode, but dis- - allow mapping of rhs. - - :dn[oremap] lhs rhs - map the key sequence lhs to rhs for dialog modes, but disallow - mapping of rhs. - - :mn[oremap] lhs rhs - map the key sequence lhs to rhs for menu mode, but disallow map- - ping of rhs. - - :nn[oremap] lhs rhs - map the key sequence lhs to rhs for normal mode, but disallow - mapping of rhs. - - :qn[oremap] lhs rhs - map the key sequence lhs to rhs for view mode, but disallow map- - ping of rhs. - - :vn[oremap] lhs rhs - map the key sequence lhs to rhs for visual mode, but disallow - mapping of rhs. - - :unmap - - :unm[ap] lhs - remove user mapping of lhs from normal and visual modes. - - :unm[ap]! lhs - remove user mapping of lhs from command line mode. - - :cunmap :dunmap :munmap :nunmap :qunmap - :vunmap - - :cu[nmap] lhs - remove user mapping of lhs from command line mode. - - :du[nmap] lhs - remove user mapping of lhs from dialog modes. - - :mu[nmap] lhs - remove user mapping of lhs from menu mode. - - :nun[map] lhs - remove user mapping of lhs from normal mode. - - :qun[map] lhs - remove user mapping of lhs from view mode. - - :vu[nmap] lhs - remove user mapping of lhs from visual mode. - -Ranges - The ranges implemented include: - 2,3 - from second to third file in the list (including it) - % - the entire directory. - . - the current position in the filelist. - $ - the end of the filelist. - 't - the mark position t. - - Examples: - - :%delete - - would delete all files in the directory. - - :2,4delete - - would delete the files in the list positions 2 through 4. - - :.,$delete - - would delete the files from the current position to the end of the - filelist. - - :3delete4 - - would delete the files in the list positions 3, 4, 5, 6. - - If a backward range is given :4,2delete - an query message is given and - user can chose what to do next. - - The builtin commands that accept a range are :d[elete] and :y[ank]. - -Command macros - The command macros may be used in user commands. - - %a User arguments. When user arguments contain macros, they are - expanded before preforming substitution of %a. - - %c %"c The current file under the cursor. - - %C %"C The current file under the cursor in the other directory. - - %f %"f All of the selected files, but see "Selection" section below. - - %F %"F All of the selected files in the other directory list, but see - "Selection" section below. - - %b %"b Same as %f %F. - - %d %"d Full path to current directory. - - %D %"D Full path to other file list directory. - - %rx %"rx - Full paths to files in the register {x}. In case of invalid - symbol in place of {x}, it's processed with the rest of the line - and default register is used. - - %m Show command output in a menu. - - %M Same as %m, but l (or Enter) key is handled like for :locate and - :find commands. - - %u Process command output as list of paths and compose custom view - out of it. - - %U Same as %u, but implies less list updates inside vifm, which is - absence of sorting at the moment. - - %Iu same as %u, but gives up terminal before running external com- - mand. - - %IU same as %U, but gives up terminal before running external com- - mand. - - %S Show command output in the status bar. - - %q redirect command output to quick view, which is activated if - disabled. - - %s Execute command in split window of active terminal multiplexer - (ignored if not running inside one). - - %n Forbid using of terminal multiplexer to run the command. - - %i Completely ignore command output. - - - %pc Marks the end of the main command and the beginning of the clear - command for graphical preview, which is invoked on closing pre- - view of a file. - - %pd Marks a preview command as one that directly communicates with - the terminal. Beware that this is for things like sixel which - are self-contained sequences that depend only on current cursor - position, using this with anything else is likely to mangle ter- - minal state. - - The following dimensions and coordinates are in characters: - - %px x coordinate of top-left corner of preview area. - - %py y coordinate of top-left corner of preview area. - - %pw width of preview area. - - %ph height of preview area. - - - Use %% if you need to put a percent sign in your command. - - Note that %m, %M, %s, %S, %i, %u and %U macros are mutually exclusive. - Only the last one of them on the command will take effect. - - You can use file name modifiers after %c, %C, %f, %F, %b, %d and %D - macros. Supported modifiers are: - - - :p - full path - - - :u - UNC name of path (e.g. "\\server" in - "\\server\share"), Windows only. Expands to current computer name - for not UNC paths. - - - :~ - relative to the home directory - - - :. - relative to current directory - - - :h - head of the file name - - - :t - tail of the file name - - - :r - root of the file name (without last extension) - - - :e - extension of the file name (last one) - - - :s?pat?sub? - substitute the first occurrence of pat with sub. - You can use any character for '?', but it must not occur in pat or - sub. - - - :gs?pat?sub? - like :s, but substitutes all occurrences of pat with - sub. - - See ':h filename-modifiers' in Vim's documentation for the detailed de- - scription. - - Using %x means expand corresponding macro escaping all characters that - have special meaning. And %"x means using of double quotes and escape - only backslash and double quote characters, which is more useful on - Windows systems. - - Position and quantity (if there is any) of %m, %M, %S or %s macros in - the command is unimportant. All their occurrences are removed from the - resulting command. - - %c and %f macros are expanded to file names only, when %C and %F are - expanded to full paths. %f and %F follow this in %b too. - - :com move mv %f %D - set the :move command to move all of the files selected in the - current directory to the other directory. - - The %a macro is replaced with any arguments given to an alias command. - All arguments are considered optional. - :com lsl !!ls -l %a - set the lsl command to execute ls -l with - or without an argument. - - :lsl - will list the directory contents of the current directory. - - :lsl filename - will list only the given filename. - - The macros can also be used in directly executing commands. ":!mv %f - %D" would move the current directory selected files to the other direc- - tory. - - Appending & to the end of a command causes it to be executed in the - background. Typically you want to run two kinds of external commands - in the background: - - - GUI applications that doesn't fork thus block vifm (:!sxiv %f &); - - - console tools that do not work with terminal (:!mv %f %D &). - - You don't want to run terminal commands, which require terminal input - or output something in background because they will mess up vifm's TUI. - Anyway, if you did run such a command, you can use Ctrl-L key to update - vifm's TUI. - - Rewriting the example command with macros given above with background- - ing: - - %m, %M, %s, %S, %u and %U macros cannot be combined with background - mark (" &") as it doesn't make much sense. - -Command backgrounding - Copy and move operation can take a lot of time to proceed. That's why - vifm supports backgrounding of this two operations. To run :copy, - :move or :delete command in the background just add " &" at the end of - a command. - - For each background operation a new thread is created. Job cancella- - tion can be requested in the :jobs menu via dd shortcut. - - You can see if command is still running in the :jobs menu. Back- - grounded commands have progress instead of process id at the line be- - ginning. - - Background operations cannot be undone. - -Cancellation - Note that cancellation works somewhat different on Windows platform due - to different mechanism of break signal propagation. One also might - need to use Ctrl-Break shortcut instead of Ctrl-C. - - There are two types of operations that can be cancelled: - - - file system operations; - - - mounting with FUSE (but not unmounting as it can cause loss of - data); - - - calls of external applications. - - Note that vifm never terminates applications, it sends SIGINT signal - and lets the application quit normally. - - When one of set of operations is cancelled (e.g. copying of 5th file of - 10 files), further operations are cancelled too. In this case undo - history will contain only actually performed operations. - - Cancelled operations are indicated by "(cancelled)" suffix appended to - information message on statusbar. - - File system operations - - Currently the following commands can be cancelled: :alink, :chmod, - :chown, :clone, :copy, :delete, :mkdir, :move, :restore, :rlink, - :touch. File putting (on p/P key) can be cancelled as well. It's not - hard to see that these are mainly long-running operations. - - Cancelling commands when they are repeated for undo/redo operations is - allowed for convenience, but is not recommended as further undo/redo - operations might get blocked by side-effects of partially cancelled - group of operations. - - These commands can't be cancelled: :empty, :rename, :substitute, :tr. - - Mounting with FUSE - - It's not considered to be an error, so only notification on the status - bar is shown. - - External application calls - - Each of this operations can be cancelled: :apropos, :find, :grep, :lo- - cate. - -Selection - If there is a selection, it's stashed before proceeding further unless - file under the cursor is part of that selection. This means that when - macros are expanded for :filetype or :filextype programs, `%f` and `%F` - become equivalent to `%c` and `%C` respectively if current file is not - selected. So you run selection by running one of selected files, oth- - erwise you're running a single file even if there are other selected - entries. - - When running a selection it must not include broken symbolic links, has - to be consistent and set of file handlers must be compatible. Consis- - tency means that selection contains either only directories (including - links to them) or only files, but not their mix. - - Compatibility is a more sophisticated check, but it's defined in a nat- - ural way so that you get what you'd expect. The following properties - of selection are taken into account while checking it for compatibility - and deciding how to handle it: - - - 1. If there any files for which handler isn't defined, then all files - are opened using 'vicmd' or 'vixcmd'. - - - 2. If all handlers match the following criteria: - - backgrounded - - include `%c` and/or `%C` - - include neither `%f` nor `%F` - then each file is executed independently of the rest. - - - 3. If all handlers are equal, the common handler is executed. This - handler might ignore selection and process only file under the - cursor. - - - 4. Otherwise, an error is reported, because handlers differ and they - don't support parallel execution. - -Patterns - :highlight, :filetype, :filextype, :fileviewer commands and 'classify' - option support globs, regular expressions and mime types to match file - names or their paths. - - There are six possible ways to write a single pattern: - - 1. [!]{comma-separated-name-globs} - - 2. [!]{{comma-separated-path-globs}} - - 3. [!]/name-regular-expression/[iI] - - 4. [!]//path-regular-expression//[iI] - - 5. [!] - - 6. undecorated-pattern - - First five forms can include leading exclamation mark that negates pat- - tern matching. - - The last form is implicitly refers to one of others. :highlight does - not accept undecorated form, while :filetype, :filextype, :fileviewer, - :select, :unselect and 'classify' treat it as list of name globs. - - Path patterns receive absolute path of the file that includes its name - component as well. - - To combine several patterns (AND them), make sure you're using one of - the first five forms and write patterns one after another, like this: - {*.vifm} - Mind that if you make a mistake the whole string will be treated as the - sixth form. - - :filetype, :filextype and :fileviewer commands accept comma-separated - list of patterns instead of a single pattern, thus effectively handling - OR operation on them: - {*.vifm},{*.pdf} - Forms that accept comma-separated lists of patterns also process them - as lists of alternatives. - - Patterns with regular expressions - - Regular expression patterns are case insensitive by default, see de- - scription of commands, which might override default behaviour. - - Flags of regular expressions mean the following: - - "i" makes filter case insensitive; - - "I" makes filter case sensitive. They can be repeated multiple - times, but the later one takes precedence (e.g. "iiiI" is equivalent - to "I" and "IiIi" is the same as "i"). - - There are no implicit `^` or `$`, so make sure to specify them explic- - itly if the pattern should match the whole name or path. - - Patterns with globs - - "Globs" section below provides short overview of globs and some impor- - tant points that one needs to know about them. - - Patterns with mime-types - - Mime type matching is essentially globs matching applied to mime type - of a file instead of its name/path. Note: mime types aren't detected - on Windows. - - Examples - - Associate `evince` to PDF-files only inside `/home/user/downloads/` di- - rectory (excluding its subdirectories): - - :filextype //^/home/user/downloads/[^/]*.pdf$// evince %f - - -Globs - Globs are always case insensitive as it makes sense in general case. - - `*`, `?`, `[` and `]` are treated as special symbols in the pattern. - E.g. - - :filetype * less %c - - matches all files. One can use character classes for escaping, so - - :filetype [*] less %c - - matches only one file name, the one which contains only asterisk sym- - bol. - - `*` means any number of any characters (possibly an empty substring), - with one exception: asterisk at the pattern beginning doesn't match dot - in the first position. E.g. - - :fileviewer *.zip,*.jar zip -sf %c - - associates using of `zip` program to preview all files with `zip` or - `jar` extensions as listing of their content, but `.file.zip` won't be - matched. - - `?` means any character at this position. E.g. - - :fileviewer ?.out file %c - - calls `file` tool for all files which have exactly one character before - their extension (e.g. a.out, b.out). - - Square brackets designate character class, which means that whole char- - acter class matches against any of characters listed in it. For exam- - ple - - :fileviewer *.[ch] highlight -O xterm256 -s dante --syntax c %c - - makes vifm call `highlight` program to colorize source and header files - in C language for a 256-color terminal. Equal command would be - - :fileviewer *.c,*.h highlight -O xterm256 -s dante --syntax c %c - - - Inside square brackets `^` or `!` can be used for symbol class negotia- - tion and the `-` symbol to set a range. `^` and `!` should appear - right after the opening square bracket. For example - - :filetype *.[!d]/ inspect_dir - - associates `inspect_dir` as additional handler for all directories that - have one character extension unless it's "d" letter. And - - :filetype [0-9].jpg sxiv - - associates `sxiv` picture viewer only for JPEG-files that contain sin- - gle digit in their name. - - If you need to include literal comma, which is normally separates mul- - tiple globs, double it. - -:set options - Local options - These are kind of options that are local to a specific view. So - you can set ascending sorting order for left pane and descending - order for right pane. - - In addition to being local to views, each such option also has - two values: - - - local to current directory (value associated with current - location); - - - global to current directory (value associated with the - pane). - - The idea is that current directory can be made a temporary ex- - ception to regular configuration of the view, until directory - change. Use :setlocal for that. :setglobal changes view value - not affecting settings until directory change. :set applies - changes immediately to all values. - - - 'aproposprg' - type: string - default: "apropos %a" - Specifies format for an external command to be invoked by the - :apropos command. The format supports expanding of macros, spe- - cific for a particular *prg option, and %% sequence for insert- - ing percent sign literally. This option should include the %a - macro to specify placement of arguments passed to the :apropos - command. If the macro is not used, it will be implicitly added - after a space to the value of this option. - - 'autochpos' - type: boolean - default: true - When disabled vifm will set cursor to the first line in the view - after :cd and :pushd commands instead of saved cursor position. - Disabling this will also make vifm clear information about cur- - sor position in the view history on :cd and :pushd commands (and - on startup if 'autochpos' is disabled in the vifmrc). l key in - the ":history ." and ":trashes" menus are treated like :cd com- - mand. This option also affects marks so that navigating to a - mark doesn't restore cursor position. - - When this option is enabled, more fine grained control over cur- - sor position is available via 'histcursor' option. - - 'columns' 'co' - type: integer - default: terminal width on startup - Terminal width in characters. - - 'caseoptions' - type: charset - default: "" - This option gives additional control over case sensitivity by - allowing overriding default behaviour to either always be case - sensitive or always be case insensitive. Possible values form - pairs of lower and upper case letters that configure specific - aspect of behaviour: - p - always ignore case of paths during completion. - P - always match case of paths during completion. - g - always ignore case of characters for f/F/;/,. - G - always match case of characters for f/F/;/,. - - At most one item of each pair takes affect, if both or more are - present, only the last one matters. When none of pair's ele- - ments are present, the behaviour is default (depends on operat- - ing system for path completion and on values of 'ignorecase' and - 'smartcase' options for file navigation). - - 'cdpath' 'cd' - type: string list - default: value of $CDPATH with commas instead of colons - Specifies locations to check on changing directory with relative - path that doesn't start with "./" or "../". When non-empty, - current directory is examined after directories listed in the - option. - - This option doesn't affect completion of :cd command. - - Example: - - set cdpath=~ - - This way ":cd bin" will switch to "~/bin" even if directory - named "bin" exists in current directory, while ":cd ./bin" com- - mand will ignore value of 'cdpath'. - - 'chaselinks' - type: boolean - default: false - When enabled path of view is always resolved to real path (with - all symbolic links expanded). - - 'classify' - type: string list - default: ":dir:/" - Specifies file name prefixes and suffixes depending on file type - or name. The format is either of: - - [{prefix}]:{filetype}:[{suffix}] - - [{prefix}]::{pattern}::[{suffix}] - Possible {pattern} forms are described in "Patterns" section - above. - - Priority rules: - - file name patterns have priority over type patterns - - file name patterns are matched in left-to-right order of - their appearance in this option - - Either {prefix} or {suffix} or both can be omitted (which is the - default for all unspecified file types), this means empty {pre- - fix} and/or {suffix}. {prefix} and {suffix} should consist of - at most eight characters. Elements are separated by commas. - Neither prefixes nor suffixes are part of file names, so they - don't affect commands which operate on file names in any way. - Comma (',') character can be inserted by doubling it. List of - file type names can be found in the description of filetype() - function. - - 'confirm' 'cf' - type: set - default: delete,permdelete - Defines which operations require confirmation: - - delete - moving files to trash (on d or :delete); - - permdelete - permanent deletion of files (on D or :delete! - command or on undo/redo operation). - - 'cpoptions' 'cpo' - type: charset - default: "fst" - Contains a sequence of single-character flags. Each flag en- - ables behaviour of older versions of vifm. Flags: - - f - when included, running :filter command results in not in- - verted (matching files are filtered out) and :filter! in in- - verted (matching files are left) filter, when omitted, meaning - of the exclamation mark changes to the opposite; - - s - when included, yy, dd and DD normal mode commands act on - selection, otherwise they operate on current file only; - - t - when included, (thus ) behave as and - switches active pane, otherwise and go forward in - the view history. It's possible to make both and to - work as expected by setting up the terminal to emit a custom se- - quence when is pressed; see :histnext for details. - - 'cvoptions' - type: set - default: - Specifies whether entering/leaving custom views triggers events - that normally happen on entering/leaving directories: - - autocmds - trigger autocommands on entering/leaving custom - views; - - localopts - reset local options on entering/leaving custom - views; - - localfilter - reset local filter on entering/leaving custom - views. - - 'deleteprg' - type: string - default: "" - Specifies program to run on files that are permanently removed. - When empty, files are removed as usual, otherwise this command - is invoked on each file by appending its name. If the command - doesn't remove files, they will remain on the file system. - - 'dirsize' - type: enumeration - default: size - Controls how size of directories is displayed in file views. - The following values are possible: - - size - size of directory (i.e., size used to store list of - files) - - nitems - number of entries in the directory (excluding . and - ..) - - Size obtained via ga/gA overwrites this setting so seeing count - of files and occasionally size of directories is possible. - - 'dotdirs' - type: set - default: nonrootparent,treeleafsparent - Controls displaying of dot directories. The following values - are possible: - - rootparent - show "../" in root directory of file system - - nonrootparent - show "../" in non-root directories of file - system - - treeleafsparent - show "../" in empty directories of tree - view - - Note that empty directories always contain "../" entry regard- - less of value of this option. "../" disappears at the moment at - least one file is created. - - 'dotfiles' - type: boolean - default: false - Whether dot files are shown in the view. Can be controlled with - z* bindings. - - 'fastrun' - type: boolean - default: false - With this option turned on you can run partially entered com- - mands with unambiguous beginning using :! (e.g. :!Te instead of - :!Terminal or :!Te). - - 'fillchars' 'fcs' - type: string list - default: "" - Sets characters used to fill borders. - - item default used for - vborder:c ' ' left, middle and right vertical bor- - ders - - If value is omitted, its default value is used. Example: - - set fillchars=vborder:. - - 'findprg' - type: string - default: "find %s %a -print , -type d \( ! -readable -o ! -exe- - cutable \) -prune" - Specifies format for an external command to be invoked by the - :find command. The format supports expansion of macros specific - for this particular option and %% sequence for inserting percent - sign literally. The macros are: - - macro value/meaning - %s literal arguments of :find or - list of paths to search in - - %A empty or - literal arguments of :find - %a empty or - literal arguments of :find or - predicate followed by escaped arguments of :find - %p empty or - literal arguments of :find or - escaped arguments (parameters) of :find - - %u redirect output to custom view instead of showing a - menu - %U redirect output to unsorted custom view instead of - showing a menu - - Predicate in %a is "-name" on *nix and "-iname" on Windows. - - If both %u and %U are specified, %U is chosen. - - Some macros can be added implicitly: - - if %s isn't present, it's appended - - if neither of %a, %A and %p is present, %a is appended - - if neither of %s, %a, %A and %p is present, %s and %a are ap- - pended in this order - - The macros slightly change their meaning depending on format of - :find's arguments: - - if the first argument points to an existing directory, %s is - assigned all arguments while %a, %A and %p are left empty - - otherwise: - - %s is assigned a dot (".") meaning current directory or - list of selected file names, if any - - %a, %A and %p are assigned literal arguments when first - argument starts with a dash ("-"), otherwise %a gets an escaped - version of the arguments with a predicate and %p contains es- - caped version of the arguments - - Starting with Windows Server 2003 a `where` command is avail- - able. One can configure vifm to use it in the following way: - - set findprg="where /R %s %A" - - As the syntax of this command is rather limited, one can't use - :find command with selection of more than one item because the - command ignores all directory paths except for the last one. - - When using find port on Windows, another option is to setup - 'findprg' like this: - - set findprg="find %s %a" - - - 'followlinks' - type: boolean - default: true - Follow links on l or Enter. That is navigate to destination - file instead of treating the link as if it were target file. - Doesn't affects links to directories, which are always entered - (use gf key for directories). - - 'fusehome' - type: string - default: "($XDG_DATA_HOME/.local/share | $VIFM)/fuse/" - Directory to be used as a root dir for FUSE mounts. Value of - the option can contain environment variables (in form "$en- - vname"), which will be expanded (prepend it with a slash to pre- - vent expansion). The value should expand to an absolute path. - - If you change this option, vifm won't remount anything. It af- - fects future mounts only. See "Automatic FUSE mounts" section - below for more information. - - 'gdefault' 'gd' - type: boolean - default: false - When on, 'g' flag is on for :substitute by default. - - 'grepprg' - type: string - default: "grep -n -H -I -r %i %a %s" - Specifies format for an external command to be invoked by the - :grep command. The format supports expanding of macros, spe- - cific for a particular *prg option, and %% sequence for insert- - ing percent sign literally. This option should include the %i - macro to specify placement of "-v" string when inversion of re- - sults is requested, %a or %A macro to specify placement of argu- - ments passed to the :grep command and the %s macro to specify - placement of list of files to search in. If some of the macros - are not used, they will be implicitly added after a space to the - value of the 'grepprg' option in the following order: %i, %a, - %s. Note that when neither %a nor %A are specified, it's %a - which is added implicitly. - - Optional %u or %U macro could be used (if both specified %U is - chosen) to force redirection to custom or unsorted custom view - respectively. - - See 'findprg' option for description of difference between %a - and %A. - - Example of setup to use ack (http://beyondgrep.com/) instead of - grep: - - set grepprg='ack -H -r %i %a %s' - - or The Silver Searcher (https://github.com/ggreer/the_sil- - ver_searcher): - - set grepprg='ag --line-numbers %i %a %s' - - - - 'histcursor' - type: set - default: startup,dirmark,direnter - Defines situations when cursor should be moved according to di- - rectory history: - - startup - on loading file lists during startup - - dirmark - after navigating to a mark that doesn't specify - file - - direnter - on opening directory from a file list - - This option has no effect when 'autochpos' is disabled. - - Note that the list is not exhaustive and there are other situa- - tions when cursor is positioned automatically. - - 'history' 'hi' - type: integer - default: 15 - Maximum number of stored items in all histories. - - 'hlsearch' 'hls' - type: boolean - default: true - Automatically select files that are search matches. - - 'iec' type: boolean - default: false - Use KiB, MiB, ... suffixes instead of K, M, ... when printing - size in human-friendly format. - - 'ignorecase' 'ic' - type: boolean - default: false - Ignore case in search patterns (:substitute, / and ? commands), - local filter (but not the rest of filters) and other things de- - tailed in the description of 'caseoptions'. - - 'incsearch' 'is' - type: boolean - default: false - When this option is set, search and view update for local filter - is be performed starting from initial cursor position each time - search pattern is changed. - - 'iooptions' - type: set - default: - Controls details of file operations. The following values are - available: - - fastfilecloning - perform fast file cloning (copy-on-write), - when available - (available on Linux and btrfs file system). - - 'laststatus' 'ls' - type: boolean - default: true - Controls if status bar is visible. - - 'lines' - type: integer - default: terminal height on startup - Terminal height in lines. - - 'locateprg' - type: string - default: "locate %a" - Specifies format for an external command to be invoked by the - :locate command. The format supports expanding of macros, spe- - cific for a particular *prg option, and %% sequence for insert- - ing percent sign literally. This option should include the %a - macro to specify placement of arguments passed to the :locate - command. If the macro is not used, it will be implicitly added - after a space to the value of this option. - - Optional %u or %U macro could be used (if both specified %U is - chosen) to force redirection to custom or unsorted custom view - respectively. - - 'mediaprg' - type: string - default: path to bundled script that supports udevil, udisks and - udisks2 - (using udisks2 requires python with dbus module in- - stalled) - OS X: path points to a python script that uses diskutil - {only for *nix} - Specifies command to be used to manage media devices. Used by - :media command. - - The command can be passed the following parameters: - - list -- list media - - mount {device} -- mount a device - - unmount {path} -- unmount given mount point - - The output of `list` subcommand is parsed in search of lines - that start with one of the following prefixes: - - device= - specifies device path (e.g., "/dev/sde") - - label= - specifies optional device label (e.g., "Memory - card") - - info= - specifies arbitrary text to display next to - device (by - default "[label]" is used, if label is pro- - vided) - - mount-point= - specifies a mount point (can be absent or ap- - pear more than once) - - All other lines are ignored. Each `device=` starts a new sec- - tion describing a device which should include two other possible - prefixes. - - `list` subcommand is assumed to always succeed, while exit code - of `mount` and `unmount` is taken into account to determine - whether operation was performed successfully. - - 'lsoptions' - type: string list - default: "" - scope: local - - Configures ls-like view. - - item used for - transposed filling view grid by columns rather than by - lines - - - 'lsview' - type: boolean - default: false - scope: local - When this option is set, directory view will be displayed in - multiple columns with file names similar to output of `ls -x` - command. See "ls-like view" section below for format descrip- - tion. This option has no effect if 'millerview' is on. - - 'milleroptions' - type: string list - default: "lsize:1,csize:1,rsize:1,rpreview:dirs" - scope: local - - Configures miller view. - - item default used for - lsize:num 0 left column - csize:num 1 center column (can't be disabled) - rsize:num 0 right column - rpreview:str dirs right column - - *size specifies ratios of columns. Each ratio is in the range - from 0 to 100 and values are adjusted to fit the limits. Zero - disables a column, but central (main) column can't be disabled. - - rpreview specifies what file-system objects should be previewed - in the right column and can take two values: dirs (only directo- - ries) or all. Both options don't include parent directory - (".."). - - Example of two-column mode which is useful in combination with - :view command: - - set milleroptions=lsize:1,csize:2 - - - 'millerview' - type: boolean - default: false - scope: local - When this option is set, directory view will be displayed in - multiple cascading columns. Ignores 'lsview'. - - 'mintimeoutlen' - type: integer - default: 150 - The fracture of 'timeoutlen' in milliseconds that is waited be- - tween subsequent input polls, which affects various asynchronous - operations (detecting changes made by external applications, - monitoring background jobs, redrawing UI). There are no strict - guarantees, however the higher this value is, the less is CPU - load in idle mode. - - 'number' 'nu' - type: boolean - default: false - scope: local - Print line number in front of each file name when 'lsview' op- - tion is turned off. Use 'numberwidth' to control width of line - number. Also see 'relativenumber'. - - 'numberwidth' 'nuw' - type: integer - default: 4 - scope: local - Minimal number of characters for line number field. - - 'previewprg' - type: string - default: "" - scope: local - - External command to be used instead of preview programs config- - ured via :fileviewer command. - - Example: - - " always show git log in preview of files inside some repository - au DirEnter '~/git-repo/**/*' setl previewprg='git log --color -- %c 2>&1' - - 'quickview' - type: boolean - default: false - Whether quick view (:view) is currently active or not. - - 'relativenumber' 'rnu' - type: boolean - default: false - scope: local - Print relative line number in front of each file name when - 'lsview' option is turned off. Use 'numberwidth' to control - width of line number. Various combinations of 'number' and - 'relativenumber' lead to such results: - - nonumber number - - norelativenumber | first | 1 first - | second | 2 second - | third | 3 third - - relativenumber | 1 first | 1 first - | 0 second |2 second - | 1 third | 1 third - - - 'rulerformat' 'ruf' - type: string - default: "%l/%S " - Determines the content of the ruler. Its minimal width is 13 - characters and it's right aligned. Following macros are sup- - ported: - %= - separation point between left and right aligned halves of - the line - %l - file number - %L - total number of files in view (including filtered out - ones) - %x - number of files excluded by filters - %0- - old name for %x macro - %S - number of displayed files - %= - separation point between left and right align items - %% - literal percent sign - %[ - designates beginning of an optional block - %] - designates end of an optional block - - Percent sign can be followed by optional minimum field width. - Add '-' before minimum field width if you want field to be right - aligned. - - Optional blocks are ignored unless at least one macro inside of - them is expanded to a non-empty value. - - Example: - - set rulerformat='%2l-%S%[ +%x%]' - - 'runexec' - type: boolean - default: false - Run executable file on Enter, l or Right Arrow key. Behaviour - of the last two depends on the value of the 'lsview' option. - - 'scrollbind' 'scb' - type: boolean - default: false - When this option is set, vifm will try to keep difference of - scrolling positions of two windows constant. - - 'scrolloff' 'so' - type: integer - default: 0 - Minimal number of screen lines to keep above and below the cur- - sor. If you want cursor line to always be in the middle of the - view (except at the beginning or end of the file list), set this - option to some large value (e.g. 999). - - 'sessionoptions' 'ssop' - sessionoptions ssop - type: set - default: tui,state,tabs,savedirs,dhistory - An equivalent of 'vifminfo' for sessions, uses the same values. - When both options include the same value, data from session file - has higher priority (data from vifminfo isn't necessarily com- - pletely discarded, instead it's merged with the state of a ses- - sion the same way state of multiple instances is merged on - exit). - - 'shell' 'sh' - type: string - default: $SHELL or "/bin/sh" or "cmd" (on MS-Windows) - Full path to the shell to use to run external commands. On *nix - a shell argument can be supplied. - - 'shellcmdflag' 'shcf' - type: string - default: "-c" or "/C" (for cmd.exe on MS-Windows) - Command-line option used to pass a command to 'shell'. It's - used in contexts where command comes from the user. - - Note that using this option to force interactive mode of the - shell is most likely a BAD IDEA. In general interactive host - and interactive child shell can't share the same terminal ses- - sion. You can't even run such a shell in background. Consider - writing a wrapper for your shell that preloads aliases and com- - mands without making the shell interactive and ending up using - it in a way it was not meant to be used. - - Note that this option is ignored when 'shell' is set to Power- - Shell due to the internal use of `-encodedCommand`. - - 'shortmess' 'shm' - type: charset - default: "p" - Contains a sequence of single-character flags. Each flag en- - ables shortening of some message displayed by vifm in the TUI. - Flags: - - L - display only last directory in tab line instead of full - path. - - M - shorten titles in windows of terminal multiplexers cre- - ated by vifm down to file name instead of using full path. - - T - truncate status-bar messages in the middle if they are - too long to fit on the command line. "..." will appear in the - middle. - - p - use tilde shortening in view titles. - - - 'showtabline' 'stal' - type: enumeration - default: multiple - Specifies when tab line should be displayed. Possible values: - - never - never display tab line - - multiple - show tab line only when there are at least two - tabs - - always - display tab line always - - Alternatively 0, 1 and 2 Vim-like values are also accepted and - correspond to "never", "multiple" and "always" respectively. - - - 'sizefmt' - type: string list - default: "units:iec" - Configures the way size is formatted in human-friendly way. - - item value meaning - units: iec Use 1024 byte units (K or KiB, - etc.). - See 'iec' option. - si Use 1000 byte units (KB, etc.). - precision: i > 0 How many fraction digits to con- - sider. - {not set} Precision of 1 for integer part - < 10, - 0 otherwise (provides old behav- - iour). - space {present} Insert space before unit sym- - bols. - This is the default. - nospace {present} Do not insert space before unit - symbols. - - Numbers are rounded from zero. Trailing zeros are dropped. - - Example: - - set sizefmt=units:iec,precision:2,nospace - - - 'slowfs' - type: string list - default: "" - only for *nix - A list of mounter fs name beginnings (first column in /etc/mtab - or /proc/mounts) or paths prefixes for fs/directories that work - too slow for you. This option can be used to stop vifm from - making some requests to particular kinds of file systems that - can slow down file browsing. Currently this means don't check - if directory has changed, skip check if target of symbolic links - exists, assume that link target located on slow fs to be a di- - rectory (allows entering directories and navigating to files via - gf). If you set the option to "*", it means all the systems are - considered slow (useful for cygwin, where all the checks might - render vifm very slow if there are network mounts). - - Example for autofs root /mnt/autofs: - - set slowfs+=/mnt/autofs - - 'smartcase' 'scs' - type: boolean - default: false - Overrides the ignorecase option if a pattern contains at least - one upper case character. Only used when 'ignorecase' option is - enabled. - - 'sort' type: string list - default: +name on *nix and +iname on Windows - scope: local - Sets list of sorting keys (first item is primary key, second is - secondary key, etc.): - [+-]ext - extension of files and directories - [+-]fileext - extension of files only - [+-]name - name (including extension) - [+-]iname - name (including extension, ignores case) - [+-]type - file type - (dir/reg/exe/link/char/block/sock/fifo) - [+-]dir - directory grouping (directory < file) - [+-]gid - group id (*nix only) - [+-]gname - group name (*nix only) - [+-]mode - file type derived from its mode (*nix only) - [+-]perms - permissions string (*nix only) - [+-]uid - owner id (*nix only) - [+-]uname - owner name (*nix only) - [+-]nlinks - number of hard links (*nix only) - [+-]inode - inode number (*nix only) - [+-]size - size - [+-]nitems - number of items in a directory (zero for files) - [+-]groups - groups extracted via regexps from 'sortgroups' - [+-]target - symbolic link target (empty for other file - types) - [+-]atime - time accessed (e.g. read, executed) - [+-]ctime - time changed (changes in metadata, e.g. mode) - [+-]mtime - time modified (when file contents is changed) - - Note: look for st_atime, st_ctime and st_mtime in "man 2 stat" - for more information on time keys. - - '+' means ascending sort for this key, and '-' means descending - sort. - - "dir" key is somewhat similar in this regard but it's added im- - plicitly: when "dir" is not specified, sorting behaves as if it - was the first key in the list. That's why if one wants sorting - algorithm to mix directories and files, "dir" should be appended - to sorting option, for example like this: - - set sort+=dir - - or - - set sort=-size,dir - - Value of the option is checked to include dir key and default - sorting key (name on *nix, iname on Windows). Here is what hap- - pens if one of them is missing: - - - type key is added at the beginning; - - - default key is added at the end; - - all other keys are left untouched (at most they are moved). - - This option also changes view columns according to primary sort- - ing key set, unless 'viewcolumns' option is not empty. - - 'sortnumbers' - type: boolean - default: false - scope: local - Natural sort of (version) numbers within text. - - 'sortgroups' - type: string - default: "" - scope: local - Sets comma-separated list of regular expressions for group type - of sorting. Double the comma to insert it literally. - - The regular expressions are used to extract substrings of file - names to serve as keys for sorting. It is essentially a way to - ignore uninteresting parts of file names during sorting by name. - - Each expression should contain at least one group or its value - will be considered to be always empty. Also, only the first - match of regular expression is processed. - - The first group divides list of files into sub-groups, each of - which is then sorted by substrings extracted using second regu- - lar expression and so on recursively. - - Example: - set sortgroups=-(todo|done).* - this would group files with "-done" in their names and files - with "-todo" separately. On ascending sorting, group containing - "-done" would appear before the other one. - - 'sortorder' - type: enumeration - default: ascending - Sets sort order for primary key: ascending, descending. - - 'statusline' 'stl' - type: string - default: "" - Determines the content of the status line (the line right above - command-line). Empty string means use same format like in pre- - vious versions. Following macros are supported: - - - %t - file name (considering value of the 'classify' option) - - - %T - symbolic link target (empty for other filetypes) - - - %f - file name relative to current directory (considers 'clas- - sify') - - - %A - file attributes (permissions on *nix or properties on - Windows) - - - %u - user name or uid (if it cannot be resolved) - - - %g - group name or gid (if it cannot be resolved) - - - %s - file size in human readable format - - - %E - size of selected files in human readable format, same as - %s when no files are selected, except that it will never show - size of ../ in visual mode, since it cannot be selected - - - %d - file modification date (uses 'timefmt' option) - - - %D - path of the other pane for single-pane layout - - - %a - amount of free space available at current partition - - - %z - short tips/tricks/hints that chosen randomly after one - minute period - - - %{} - evaluate arbitrary vifm expression '', e.g. - '&sort' - - - %* - resets or applies one of User1..User9 highlight groups; - reset happens when width field is 0 or not specified, one of - groups gets picked when width field is in the range from 1 to - 9 - - - all 'rulerformat' macros - - Percent sign can be followed by optional minimum field width. - Add '-' before minimum field width if you want field to be right - aligned. - - On Windows file properties include the following flags (upper - case means flag is on): - A - archive - H - hidden - I - content isn't indexed - R - readonly - S - system - C - compressed - D - directory - E - encrypted - P - reparse point (e.g. symbolic link) - Z - sparse file - - Example without colors: - - set statusline=" %t%= %A %10u:%-7g %15s %20d %{&sort} " - - Example with colors: - - highlight User1 ctermbg=yellow - highlight User2 ctermbg=blue ctermfg=white cterm=bold - set statusline="%1* %-26t %2* %= %1* %A %2* %7u:%-7g %1* %-5s %2* %d " - - - 'suggestoptions' - type: string list - default: - Controls when, for what and how suggestions are displayed. The - following values are available: - - normal - in normal mode; - - visual - in visual mode; - - view - in view mode; - - otherpane - use other pane to display suggestions, when - available; - - delay[:num] - display suggestions after a small delay (to - do not annoy if you just want to type a fast shortcut consisting - of multiple keys), num specifies the delay in ms (500 by de- - fault), 'timeoutlen' at most; - - keys - include shortcuts (commands and selectors); - - foldsubkeys - fold multiple keys with common prefix; - - marks - include marks; - - registers[:num] - include registers, at most num files (5 by - default). - - 'syncregs' - type: string - default: - Specifies identifier of group of instances that share registers - between each other. When several instances of vifm have this - option set to identical value, they automatically synchronize - contents of their registers on operations which use them. - - 'syscalls' - type: boolean - default: false - When disabled, vifm will rely on external applications to per- - form file-system operations, otherwise system calls are used in- - stead (much faster and supports progress tracking). The option - should eventually be removed. Mostly *nix-like systems are af- - fected. - - 'tablabel' - type: string - default: "" - When non-empty, determines format of the main part of a single - tab's label. - - When empty, tab label is set to either tab name for named tabs - or to view title (usually current path) for unnamed tabs. - - The following macros can appear in the format (see below for - what a flag is): - - - %C - flag of a current tab - - - %N - number of the tab - - - %T - flag of a tree mode - - - %c - description of a custom view - - - %n - name of the tab - - - %p - path of the view (handles filename modifiers) - - - %t - title of the view (affected by 'shortmess' flags) - - - %% - literal percent sign - - - %[ - designates beginning of an optional block - - - %] - designates end of an optional block - - - %*, %0* - resets highlighting - - - %1-%9 - applies one of User1..User9 highlight groups - - In global tabs the view in bullets above refers to currently ac- - tive view of that tab. - - Flag macros are a special kind of macros that always expand to - an empty value and are ment to be used inside optional blocks to - control their visibility. - - Optional blocks are ignored unless at least one macro inside of - them is expanded to a non-empty value or is a set flag macro. - - " %[(%n)%] -- optional name of the tab - " %[ -- optional description of the view - " %[%T{tree}%] -- mark of tree mode - " %[{%c}%] -- description of custom view - " @ -- just an extra separator before the path - ' %] - " %p:t -- tail part of view's location - set tablabel=%[(%n)%]%[%[%T{tree}%]%[{%c}%]@%]%p:t - - 'tabprefix' - type: string - default: "[%N:" - Determines prefix of a tab's label. Formatting is done as for - 'tablabel' option. - - 'tabscope' - type: enumeration - default: global - Picks style of tabs, which defines what a single tab contains. - Possible values: - - global - tab describes complete UI of two views and how they - are arranged - - pane - tab is located "inside" a pane and manages it and - quick view - - 'tabstop' 'ts' - type: integer - default: value from curses library - Number of spaces that a Tab in the file counts for. - - 'tabsuffix' - type: string - default: "]" - Determines suffix of a tab's label. Formatting is done as for - 'tablabel' option. - - 'timefmt' - type: string - default: "%m/%d %H:%M" - Format of time in file list. See "man 1 date" or "man 3 strf- - time" for details. - - 'timeoutlen' 'tm' - type: integer - default: 1000 - The time in milliseconds that is waited for a mapped key in case - of already typed key sequence is ambiguous. - - 'title' - type: boolean - default: true when title can be restored, false otherwise - When enabled, title of the terminal or terminal multiplexer's - window is updated according to current location. Because not - all terminals support setting title, this works only if `$TERM` - value matches one of the following conditions: - - equals "xterm" or starts with "xterm-" - - equals "rxvt" or starts with "rxvt-" - - equals "screen" or starts with "screen-" - - equals "aterm" - - equals "Eterm" - - 'trash' - type: boolean - default: true - Use trash directory. See "Trash directory" section below. - - 'trashdir' - type: string - default: on *nix: - "%r/.vifm-Trash-%u,$VIFM/Trash,%r/.vifm-Trash" - or if $VIFM/Trash doesn't exist - "%r/.vifm-Trash-%u,$XDG_DATA_HOME/vifm/Trash,%r/.vifm-Trash" - on Windows: - "%r/.vifm-Trash,$XDG_DATA_HOME/vifm/Trash" - List of trash directory path specifications, separated with com- - mas. Each list item either defines an absolute path to trash - directory or a path relative to a mount point root when list el- - ement starts with "%r/". Value of the option can contain envi- - ronment variables (of form "$envname"), which will be expanded - (prepend $ with a slash to prevent expansion). Environment - variables are expanded when the option is set. - - On *nix, if element ends with "%u", the mark is replaced with - real user ID and permissions are set so that only that only - owner is able to use it. - Note that even this setup is not completely secure when combined - with "%r/" and it's overall safer to keep files in home direc- - tory, but that implies cost of copying files between partitions. - - When new file gets cut (deleted) vifm traverses each element of - the option in the order of their appearance and uses first trash - directory that it was able to create or that is already - writable. - - Default value tries to use trash directory per mount point and - falls back to ~/.vifm/Trash on failure. - - Will attempt to create the directory if it does not exist. See - "Trash directory" section below. - - 'tuioptions' 'to' - type: charset - default: "psv" - Each flag configures some aspect of TUI appearance. The flags - are: - p - when included: - * file list inside a pane gets additional single character - padding on left and right sides; - * quick view and view mode get single character padding. - s - when included, left and right borders (side borders, hence - "s" character) are visible. - u - use Unicode characters in the TUI (Unicode ellipsis instead - of "..."). - v - vary width of middle border to equalize view sizes. - - 'undolevels' 'ul' - type: integer - default: 100 - Maximum number of changes that can be undone. Note that here - single file operation is used as a unit, not operation, i.e. - deletion of 101 files will exceed default limit. - - 'vicmd' - type: string - default: "vim" - Command used to edit files in various contexts. Ampersand sign - at the end (regardless whether it's preceded by space or not) - means backgrounding of command. - - Background flag is ignored in certain context where vifm waits - for the editor to finish. Such contexts include any command - that spawns editor to change list of file names or a command, - with :rename being one example. `-f` is also appended to pre- - vent forking in such cases, so the command needs to handle the - flag. - - Additionally `+{num}` and `+'call cursor()'` arguments are used - to position cursor when location is known. - - 'viewcolumns' - type: string - default: "" - scope: local - Format string containing list of columns in the view. When this - option is empty, view columns to show are chosen automatically - using sorting keys (see 'sort') as a base. Value of this option - is ignored if 'lsview' is set. See "Column view" section below - for format description. - - An example of setting the options for both panes (note :windo - command): - - windo set viewcolumns=-{name}..,6{size},11{perms} - - 'vixcmd' - type: string - default: value of 'vicmd' - Same as 'vicmd', but takes precedence over it when running in- - side a graphical environment. - - 'vifminfo' - type: set - default: bookmarks,bmarks - Controls what will be saved in the $VIFM/vifminfo file. - - bmarks - named bookmarks (see :bmark command) - bookmarks - marks, except special ones like '< and '> - tui - state of the user interface (sorting, number of - windows, quick - view state, active view) - dhistory - directory history - state - file name and dot filters and terminal multiplex- - ers integration - state - cs - primary color scheme - savedirs - save last visited directory - chistory - command line history - shistory - search history (/ and ? commands) - phistory - prompt history - fhistory - history of local filter (see description of the - "=" normal mode - command) - dirstack - directory stack overwrites previous stack, unless - stack of - current instance is empty - registers - registers content - tabs - global or pane tabs - options - all options that can be set with the :set command - (obsolete) - filetypes - associated programs and viewers (obsolete) - commands - user defined commands (see :command description) - (obsolete) - - 'vimhelp' - type: boolean - default: false - Use vim help format. - - 'wildmenu' 'wmnu' - type: boolean - default: false - Controls whether possible matches of completion will be shown - above the command line. - - 'wildstyle' - type: enumeration - default: bar - Picks presentation style of wild menu. Possible values: - - bar - one-line with left-to-right cursor - - popup - multi-line with top-to-bottom cursor - - 'wordchars' - type: string list - default: "1-8,14-31,33-255" (that is all non-whitespace charac- - ters) - Specifies which characters in command-line mode should be con- - sidered as part of a word. Value of the option is comma-sepa- - rated list of ranges. If both endpoints of a range match, sin- - gle endpoint is enough (e.g. "a" = "a-a"). Both endpoints are - inclusive. There are two accepted forms: character representing - itself or number encoding character according to ASCII table. - In case of ambiguous characters (dash, comma, digit) use numeric - form. Accepted characters are in the range from 0 to 255. Any - Unicode character with code greater than 255 is considered to be - part of a word. - - The option affects Alt-D, Alt-B and Alt-F, but not Ctrl-W. This - is intentionally to allow two use cases: - - - Moving by WORDS and deletion by words. - - Moving by words and deletion by WORDS. - - To get the latter use the following mapping: - - cnoremap - - Also used for abbreviations. - - 'wrap' type: boolean - default: true - Controls whether to wrap text in quick view. - - 'wrapscan' 'ws' - type: boolean - default: true - Searches wrap around end of the list. - -Mappings - Map arguments - - LHS of mappings can be preceded by arguments which take the form of - special sequences: - - - Postpone UI updates until RHS is completely processed. - - In case of builtin mapping causing conflict for a user-defined - mapping (e.g., `t` builtin to a partially typed `ta` user-de- - fined mapping), ignore the builtin mapping and wait for input - indefinitely as opposed to default behaviour of triggering the - builtin mapping after a delay defined by 'timeoutlen'. Example: - - nnoremap tw :set wrap! - nnoremap tn :set number! - nnoremap tr :set relativenumber! - - Special sequences - - Since it's not easy to enter special characters there are several spe- - cial sequences that can be used in place of them. They are: - - Enter key. - - Escape key. - - - Space key. - - Less-than character (<). - - provides a way to disable a mapping (by mapping it to ). - - Backspace key (see key conflict description below). - - - Tabulation and Shift+Tabulation keys. - - - Home/End. - - - Arrow keys. - - - PageUp/PageDown. - - - Delete key. and mean different codes, but - is more common. - - - Insert key. - - ,,...,,,,,, - Control + some key (see key conflict description below). - - only for *nix - Control + Space. - - ,,..., - ,,..., Alt + some key. - - ,,..., - ,,..., only for *nix - Alt + Ctrl + some key. - - - - Functional keys. - - - - only for MS-Windows - functional keys with Control key pressed. - - - - only for MS-Windows - functional keys with Alt key pressed. - - - - only for MS-Windows - functional keys with Shift key pressed. - - Note that due to the way terminals process their input, several key- - board keys might be mapped to single key code, for example: - - - and ; - - - and ; - - - and ; - - - etc. - - Most of the time they are defined consistently and don't cause sur- - prises, but and are treated differently in different envi- - ronments (although they match each other all the time), that's why they - correspond to different keys in vifm. As a consequence, if you map or be sure to repeat the mapping with the other one so that it - works in all environments. Alternatively, provide your mapping in one - form and add one of the following: - - " if mappings with in the LHS work - map - " if mappings with in the LHS work - map - - Whitespace - - vifm removes whitespace characters at the beginning and end of com- - mands. That's why you may want to use at the end of rhs in - mappings. For example: - - cmap man - - will put "man " in line when you hit the key in the command line - mode. - -Expression syntax - Supported expressions is a subset of what VimL provides. - - Expression syntax summary, from least to most significant: - - expr1 expr2 - expr2 || expr2 .. logical OR - - expr2 expr3 - expr3 && expr3 .. logical AND - - expr3 expr4 - expr4 == expr4 equal - expr4 != expr4 not equal - expr4 > expr4 greater than - expr4 >= expr4 greater than or equal - expr4 < expr4 smaller than - expr4 <= expr4 smaller than or equal - - expr4 expr5 - expr5 + expr5 .. number addition - expr5 - expr5 .. number subtraction - - expr5 expr6 - expr6 . expr6 .. string concatenation - - expr6 expr7 - - expr6 unary minus - + expr6 unary plus - ! expr6 logical NOT - - expr7 number number constant - "string" string constant, \ is special - 'string' string constant, ' is doubled - &option option value - $VAR environment variable - v:var builtin variable - function(expr1, ...) function call - (expr1) nested expression - - ".." indicates that the operations in this level can be concatenated. - - expr1 - ----- - expr2 || expr2 - - Arguments are converted to numbers before evaluation. - - Result is non-zero if at least one of arguments is non-zero. - - It's right associative and with short-circuiting, so sub-expressions - are evaluated from left to right until result of whole expression is - determined (i.e., until first non-zero) or end of the expression. - - expr2 - ----- - expr3 && expr3 - - Arguments are converted to numbers before evaluation. - - Result is non-zero only if both arguments are non-zero. - - It's right associative and with short-circuiting, so sub-expressions - are evaluated from left to right until result of whole expression is - determined (i.e., until first zero) or end of the expression. - - expr3 - ----- - expr4 {cmp} expr4 - - Compare two expr4 expressions, resulting in a 0 if it evaluates to - false or 1 if it evaluates to true. - - equal == - not equal != - greater than > - greater than or equal >= - smaller than < - smaller than or equal <= - - Examples: - - 'a' == 'a' == 1 - 'a' > 'b' == 1 - 'a' == 'b' == 0 - '2' > 'b' == 0 - 2 > 'b' == 1 - 2 > '1b' == 1 - 2 > '9b' == 0 - -1 == -'1' == 1 - 0 == '--1' == 1 - - expr4 - ----- - expr5 + expr5 .. number addition expr5 - expr5 .. number sub- - traction - - Examples: - - 1 + 3 - 3 == 1 - 1 + '2' == 3 - - expr5 - ----- - expr6 . expr6 .. string concatenation - - Examples: - - 'a' . 'b' == 'ab' - 'aaa' . '' . 'c' == 'aaac' - - expr6 - ----- - - - expr6 unary minus - + expr6 unary plus - ! expr6 logical NOT - - For '-' the sign of the number is changed. - For '+' the number is unchanged. - For '!' non-zero becomes zero, zero becomes one. - - A String will be converted to a Number first. - - These operations can be repeated and mixed. Examples: - - --9 == 9 - ---9 == -9 - -+9 == 9 - !-9 == 0 - !'' == 1 - !'x' == 0 - !!9 == 1 - - expr7 - ----- - - number number constant - ----- - - Decimal number. Examples: - - 0 == 0 - 0000 == 0 - 01 == 1 - 123 == 123 - 10000 == 10000 - - string - ------ - "string" string constant - - Note that double quotes are used. - - A string constant accepts these special characters: - \b backspace - \e escape - \n newline - \r return - \t tab - \\ backslash - \" double quote - - Examples: - - "\"Hello,\tWorld!\"" - "Hi,\nthere!" - - literal-string - -------------- - 'string' string constant - - Note that single quotes are used. - - This string is taken as it is. No backslashes are removed or have a - special meaning. The only exception is that two quotes stand for one - quote. - - Examples: - - 'All\slashes\are\saved.' - 'This string contains doubled single quotes ''here''' - - option - ------ - &option option value (local one is preferred, if exists) - &g:option global option value &l:option local - option value - - Examples: - - echo 'Terminal size: '.&columns.'x'.&lines - if &columns > 100 - - Any valid option name can be used here (note that "all" in ":set all" - is a pseudo option). See ":set options" section above. - - environment variable - -------------------- - $VAR environment variable - - The String value of any environment variable. When it is not defined, - the result is an empty string. - - Examples: - - 'This is my $PATH env: ' . $PATH - 'vifmrc at ' . $MYVIFMRC . ' is used.' - - builtin variable - -------------------- - v:var builtin variable - - Information exposed by vifm for use in scripting. - - v:count - count passed to : command, 0 by default. Can be used in mappings to - passthe count to a different command. - v:count1 - same as v:count, but 1 by default. - v:jobcount - number of active jobs (as can be seen in the :jobs menu). - v:session - name of the current session or empty string. - v:servername - See below. - - function call - ------------- - function(expr1, ...) function call - - See "Functions" section below. - - Examples: - - "'" . filetype('.') . "'" - filetype('.') == 'reg' - - expression nesting - ------------------ - (expr1) nested expression - - Groups any other expression of arbitrary complexity enforcing order in - which operators are applied. - - -Functions - USAGE RESULT DESCRIPTION - - chooseopt({opt}) String Queries choose parameters passed on - startup. - executable({expr}) Integer Checks whether {expr} command avail- - able. - expand({expr}) String Expands special keywords in {expr}. - extcached({cache}, {path}, {extcmd}) - String Caches output of {extcmd} per {cache} - and - {path} combination. - filetype({fnum} [, {resolve}]) - String Returns file type from position. - fnameescape({expr}) String Escapes {expr} for use in a :command. - getpanetype() String Returns type of current pane. - has({property}) Integer Checks whether instance has {prop- - erty}. - layoutis({type}) Integer Checks whether layout is of type - {type}. - paneisat({loc}) Integer Checks whether current pane is at - {loc}. - system({command}) String Executes shell command and returns - its output. - tabpagenr([{arg}]) Integer Returns number of current or last - tab. - term({command}) String Like system(), but for interactive - commands. - - chooseopt({opt}) - - Retrieves values of options related to file choosing. {opt} can be one - of: - files returns argument of --choose-files or empty string - dir returns argument of --choose-dir or empty string - cmd returns argument of --on-choose or empty string - delimiter returns argument of --delimiter or the default one (\n) - - executable({expr}) - - If {expr} is absolute or relative path, checks whether path destination - exists and refers to an executable, otherwise checks whether command - named {expr} is present in directories listed in $PATH. Checks for - various executable extensions on Windows. Returns boolean value de- - scribing result of the check. - - Example: - - " use custom default viewer script if it's available and installed - " in predefined system directory, otherwise try to find it elsewhere - if executable('/usr/local/bin/defviewer') - fileview * /usr/local/bin/defviewer %c - else - if executable('defviewer') - fileview * defviewer %c - endif - endif - - expand({expr}) - - Expands environment variables and macros in {expr} just like it's done - for command-line commands. Returns a string. See "Command macros" - section above. - - Examples: - - " percent sign - :echo expand('%%') - " the last part of directory name of the other pane - :echo expand('%D:t') - " $PATH environment variable (same as `:echo $PATH`) - :echo expand('$PATH') - - extcached({cache}, {path}, {extcmd}) - - Caches value of {extcmd} external command automatically updating it as - necessary based on monitoring change date of a {path}. The cache is - invalidated when file or its meta-data is updated. A single path can - have multiple caches associated with it. - - {path} value is normalized, but symbolic links in it aren't resolved. - - Example: - - " display number and size of blocks actually used by a file or directory - set statusline+=" Uses: %{ extcached('uses', - expand('%c'), - expand('stat --format=%%bx%%B %c')) }" - - filetype({fnum} [, {resolve}]) - - The result is a string, which represents file type and is one of the - list: - exe executables - reg regular files - link symbolic links - broken broken symbolic links (appears only when resolving) - dir directories - char character devices - block block devices - fifo pipes - sock *nix domain sockets - ? unknown file type (should not normally happen) or - non-file (pseudo-entries in compare view) - - The result can also be an empty string in case of invalid argument. - - Parameter {fnum} can have following values: - - '.' to get type of file under the cursor in the active pane - - numerical value base 1 to get type of file on specified line num- - ber - - Optional parameter {resolve} is treated as a boolean and specifies - whether symbolic links should be resolved. - - fnameescape({expr}) - - Escapes parameter to make it suitable for use as an argument of a :com- - mand. List of escaped characters includes %, which is doubled. - - Usage example: - - " navigate to most recently modified file in current directory - execute 'goto' fnameescape(system('ls -t | head -1')) - - getpanetype() - - Retrieves string describing type of current pane. Possible return val- - ues: - regular regular file listing of some directory - custom custom file list (%u) - very-custom very custom file list (%U) - tree tree view - - has({property}) - - Allows examining internal parameters from scripts to e.g. figure out - environment in which application is running. Returns 1 if property is - true/present, otherwise 0 is returned. Currently the following proper- - ties are supported (anything else will yield 0): - unix runs in *nix-like environment (including Cygwin) - win runs on Windows - - Usage example: - - " skip user/group on Windows - if !has('win') - let $RIGHTS = '%10u:%-7g ' - endif - - execute 'set' 'statusline=" %t%= %A '.$RIGHTS.'%15E %20d "' - - layoutis({type}) - - Checks whether current interface layout is {type} or not, where {type} - can be: - only single-pane mode - split double-pane mode (either vertical or horizontal split) - vsplit vertical split (left and right panes) - hsplit horizontal split (top and bottom panes) - - Usage example: - - " automatically split vertically before enabling preview - :nnoremap w :if layoutis('only') | vsplit | endif | view! - - paneisat({loc}) - - Checks whether position of active pane in current layout matches one of - the following locations: - top pane reaches top border - bottom pane reaches bottom border - left pane reaches left border - right pane reaches right border - - system({command}) - - Runs the command in shell and returns its output (joined standard out- - put and standard error streams). All trailing newline characters are - stripped to allow easy appending to command output. Ctrl-C should in- - terrupt the command. - - Use this function to consume output of external commands that don't re- - quire user interaction and term() for interactive commands that make - use of terminal and are capable of handling stream redirection. - - Usage example: - - " command to enter .git/ directory of git-repository (when ran inside one) - command! cdgit :execute 'cd' fnameescape(system('git rev-parse --git-dir')) - - tabpagenr([{arg}]) - - When called without arguments returns number of current tab page base - one. - - When called with "$" as an argument returns number of the last tab page - base one, which is the same as number of tabs. - - term({command}) - - Same as system() function, but user interface is shutdown during the - execution of the command, which makes sure that external interactive - applications won't affect the way terminal is used by vifm. - - Usage example: - - " command to change directory by picking it via fzf - command! fzfcd :execute 'cd' - fnameescape(term('find -type d | fzf 2> /dev/tty')) - -Menus and dialogs - When navigating to some path from a menu there is a difference in end - location depending on whether path has trailing slash or not. Files - normally don't have trailing slashes so "file/" won't work and one can - only navigate to a file anyway. On the other hand with directories - there are two options: navigate to a directory or inside of it. To al- - low both use cases, the first one is used on paths like "dir" and the - second one for "dir/". - - Commands - - :range navigate to a menu line. - - :exi[t][!] :q[uit][!] :x[it][!] - leave menu mode. - - :noh[lsearch] - reset search match highlighting. - - :w[rite] {dest} - write all menu lines into file specified by {dest}. - - General - - j, Ctrl-N - move down. - k, Ctrl-P - move up. - Enter, l - select and exit the menu. - Ctrl-L - redraw the menu. - - Escape, Ctrl-C, ZZ, ZQ, q - quit. - - In all menus - - The following set of keys has the same meaning as in normal mode. - - Ctrl-B, Ctrl-F - Ctrl-D, Ctrl-U - Ctrl-E, Ctrl-Y - /, ? - n, N - [count]G, [count]gg - H, M, L - zb, zt, zz - - zh - scroll menu items [count] characters to the right. - zl - scroll menu items [count] characters to the left. - zH - scroll menu items half of screen width characters to the right. - zL - scroll menu items half of screen width characters to the left. - - : - enter command line mode for menus (currently only :exi[t], :q[uit], - :x[it] and :{range} are supported). - - b - interpret content of the menu as list of paths and use it to create - custom view in place of previously active pane. See "Custom views" - section below. - B - same as above, but creates unsorted view. - - v - load menu content into quickfix list of the editor (Vim compatible - by assumption) or if list doesn't have separators after file names - (colons) open each line as a file name. - - - Below is description of additional commands and reaction on selection - in some menus and dialogs. - - Apropos menu - - Selecting menu item runs man on a given topic. Menu won't be closed - automatically to allow view several pages one by one. - - Command-line mode abbreviations menu - - Type dd on an abbreviation to remove it. - - c leaves menu preserving file selection and inserts right-hand side of - selected command into command-line. - - Color scheme menu - - Selecting name of a color scheme applies it the same way as if ":col- - orscheme " was executed on the command-line. - - Commands menu - - Selecting command executes it with empty arguments (%a). - - dd on a command to remove. - - Marks menu - - Selecting mark navigates to it. - - dd on a mark to remove it. - - Bookmarks menu - - Selecting a bookmark navigates to it. - - Type dd on a bookmark to remove it. - - gf and e also work to make it more convenient to bookmark files. - - Trash (:lstrash) menu - - r on a file name to restore it from trash. - - dd deletes file under the cursor. - - Trashes (:trashes) menu - - dd empties selected trash in background. - - Directory history and Trashes menus - - Selecting directory name will change directory of the current view as - if :cd command was used. - - Directory stack menu - - Selecting directory name will rotate stack to put selected directory - pair at the top of the stack. - - File (:file) menu - - Commands from vifmrc or typed in command-line are displayed above empty - line. All commands below empty line are from .desktop files. - - c leaves menu preserving file selection and inserts command after :! in - command-line mode. - - Grep, find, locate, bookmarks and user menu with navigation (%M macro) - - gf - navigate previously active view to currently selected item. - Leaves menu mode except for grep menu. Pressing Enter key has the same - effect. - - e - open selected path in the editor, stays in menu mode. - - c - leave menu preserving file selection and insert file name after :! - in command-line mode. - - User menu without navigation (%m macro) - - c leaves menu preserving file selection and inserts whole line after :! - in command-line mode. - - Grep menu - - Selecting file (via Enter or l key) opens it in editor set by 'vicmd' - at given line number. Menu won't be closed automatically to allow - viewing more than one result. - - See above for "gf" and "e" keys description. - - Command-line history menu - - Selecting an item executes it as command-line command, search query or - local filter. - - c leaves menu preserving file selection and inserts line into command- - line of appropriate kind. - - Volumes menu - - Selecting a drive navigates previously active pane to the root of that - drive. - - Fileinfo dialog - - Enter, q - close dialog - - Sort dialog - - h, Space - switch ascending/descending. - q - close dialog - - One shortcut per sorting key (see the dialog). - - Attributes (permissions or properties) dialog - - h, Space - check/uncheck. - q - close dialog - - Item states: - - - * - checked flag. - - - X - means that it has different value for files in selection. - - - d (*nix only) - (only for execute flags) means u-x+X, g-x+X or o-x+X - argument for the chmod program. If you're not on OS X and want to - remove execute permission bit from all files, but preserve it for di- - rectories, set all execute flags to 'd' and check 'Set Recursively' - flag. - - Jobs menu - - dd requests cancellation of job under cursor. The job won't be removed - from the list, but marked as being cancelled (if cancellation was suc- - cessfully requested). A message will pop up if the job has already - stopped. Note that on Windows cancelling external programs like this - might not work, because their parent shell doesn't have any windows. - - e key displays errors of selected job if any were collected. They are - displayed in a new menu, but you can get back to jobs menu by pressing - h. - - - Undolist menu - - r - reset undo position to group under the cursor. - - - Media menu - - Selecting a device either mounts (if it wasn't mounted yet) or navi- - gates to its first mount point. - - Selecting a mount point navigates to it. - - Selecting "not mounted" line causes mounting. - - Selecting any other line does nothing. - - r - reload the list. - - m - mount/unmount device (cursor should be positioned on lines under - device information). - - [ - put cursor on the previous device. - - ] - put cursor on the next device. - - -Custom views - Definition - - Normally file views contain list of files from a single directory, but - sometimes it's useful to populate them with list of files that do not - belong to the same directory, which is what custom views are for. - - Presentation - - Custom views are still related to directory they were in before custom - list was loaded. Path to that directory (original directory) can be - seen in the title of a custom view. - - Files in same directory have to be named differently, this doesn't hold - for custom views thus seeing just file names might be rather confusing. - In order to give an idea where files come from and when possible, rela- - tive paths to original directory of the view is displayed, otherwise - full path is used instead. - - Custom views normally don't contain any inexistent files. - - Navigation - - Custom views have some differences related to navigation in regular - views. - - gf - acts similar to gf on symbolic links and navigates to the file at - its real - location. - - h - go to closes parent node in tree view, otherwise return to the - original directory. - - gh - return to the original directory. - - Opening ".." entry also causes return to the original directory. - - History - - Custom list exists only while it's visible, once left one can't return - to it, so there is no appearances of it in any history. - - Filters - - Only local filter affects content of the view. This is intentional, - presumably if one loads list, precisely that list should be displayed - (except for inexistent paths, which are ignored). - - Search - - Although directory names are visible in listing, they are not search- - able. Only file names are taken into account (might be changed in fu- - ture, searching whole lines seems quite reasonable). - - Sorting - - Contrary to search sorting by name works on whole visible part of file - path. - - Highlight - - Whole file name is highlighted as one entity, even if there are direc- - tory elements. - - Updates - - Reloads can occur, though they are not automatic due to files being - scattered among different places. On a reload, inexistent files are - removed and meta-data of all other files is updated. - - Once custom view forgets about the file, it won't add it back even if - it's created again. So not seeing file previously affected by an oper- - ation, which was undone is normal. - - Operations - - All operations that add files are forbidden for custom views. For ex- - ample, moving/copying/putting files into a custom view doesn't work, - because it doesn't make much sense. - - On the other hand, operations that use files of a custom view as a - source (e.g. yanking, copying, moving file from custom view, deletion) - and operations that modify names are all allowed. - -Compare views - Kinds - - :compare can produce four different results depending on arguments: - - single compare view (ofone and either listall or listdups); - - single custom view (ofone and listunique); - - two compare views (ofboth and either listall or listdups); - - two custom views (ofboth and listunique). - - The first two display files of one file system tree. Here duplicates - are files that have at least one copy in the same tree. The other two - kinds of operation compare two trees, in which duplicates are files - that are found in both trees. - - Lists of unique files are presented in custom views because there is no - file grouping to preserve as all file ids are guaranteed to be dis- - tinct. - - Creation - - Arguments passed to :compare form four categories each with its own - prefix and is responsible for particular property of operation. - - Which files to compare: - - ofboth - compares files of two panes against each other; - - ofone - compares files of the same directory. - - How files are compared: - - byname - by their name only; - - bysize - only by their size; - - bycontents - by data they contain (combination of size and hash of - small chunk of contents is used as first approximation, so don't worry - too much about large files). - - Which files to display: - - listall - all files; - - listunique - unique files only; - - listdups - only duplicated files. - - How results are grouped (has no effect if "ofone" specified): - - groupids - files considered identical are always adjacent in out- - put; - - grouppaths - file system ordering is preferred (this also enables - displaying identically named files as mismatches). - - Which files to omit: - - skipempty - ignore empty files. - - Each argument can appear multiple times, the rightmost one of the group - is considered. Arguments alter default behaviour instead of substitut- - ing it. - - Examples - - The defaults corresponds to probably the most common use case of com- - paring files in two trees with grouping by paths, so the following are - equivalent: - - :compare - :compare bycontents grouppaths - :compare bycontents listall ofboth grouppaths - - Another use case is to find duplicates in the current sub-tree: - - :compare listdups ofone - - The following command lists files that are unique to each pane: - - :compare listunique - - Look - - The view can't switch to ls-like view as it's unable to display diff- - like data. - - Comparison views have second column displaying id of the file, files - with same id are considered to be equal. The view columns configura- - tion is predefined. - - Behaviour - - When two views are being compared against each other the following - changes to the regular behaviour apply: - - views are scrolled synchronously (as if 'scrollbind' was set); - - views' cursors are synchronized; - - local filtering is disabled (its results wouldn't be meaningful); - - zd excludes groups of adjacent identical files, 1zd gives usual be- - haviour; - - sorting is permanently disabled (ordering is fixed); - - removed files hide their counter pairs; - - exiting one of the views terminates the other immediately; - - renaming files isn't blocked, but isn't taken into account and might - require regeneration of comparison; - - entries which indicate absence of equivalent file have empty names - and can be matched as such; - - when unique files of both views are listed custom views can be - empty, this absence of unique files is stated clearly. - - One compare view has similar properties (those that are applicable for - single pane). - - Files are gathered in this way: - - recursively starting at current location of the view; - - dot files are excluded if view hides them at the moment of compari- - son; - - directories are not taken into account; - - symbolic links to directories are ignored. - -Startup - On startup vifm determines several variables that are used during exe- - cution. They are determined in the order they appear below. - - On *nix systems $HOME is normally present and used as is. On Windows - systems vifm tries to find correct home directory in the following or- - der: - - $HOME variable; - - $USERPROFILE variable (on Windows only); - - a combination of $HOMEDRIVE and $HOMEPATH variables (on Windows - only). - - vifm tries to find correct configuration directory by checking the fol- - lowing places: - - $VIFM variable; - - parent directory of the executable file (on Windows only); - - $HOME/.vifm directory; - - $APPDATA/Vifm directory (on Windows only); - - $XDG_CONFIG_HOME/vifm directory; - - $HOME/.config/vifm directory. - - vifm tries to find correct configuration file by checking the following - places: - - $MYVIFMRC variable; - - vifmrc in parent directory of the executable file (on Windows only); - - $VIFM/vifmrc file. - -Configure - See "Startup" section above for the explanations on $VIFM and $MYV- - IFMRC. - - The vifmrc file contains commands that will be executed on vifm - startup. There are two such files: global and local. Global one is at - {prefix}/etc/vifm/vifmrc, see $MYVIFMRC variable description for the - search algorithm used to find local vifmrc. Global vifmrc is loaded - before the local one, so that the later one can redefine anything con- - figured globally. - - Use vifmrc to set settings, mappings, filetypes etc. To use multi line - commands precede each next line with a slash (whitespace before slash - is ignored, but all spaces at the end of the lines are saved). For ex- - ample: - - set - \smartcase - - equals "setsmartcase". When - - set - \ smartcase - - equals "set smartcase". - - The $VIFM/vifminfo file contains generic state of the application. You - can control what is stored in vifminfo by setting 'vifminfo' option. - Vifm always writes this file on exit unless 'vifminfo' option is empty. - Marks, bookmarks, commands, histories, filetypes, fileviewers and reg- - isters in the file are merged with vifm configuration (which has bigger - priority). - - Generally, runtime configuration has bigger priority during merging, - but there are some exceptions: - - - directory stack stored in the file is not overwritten unless some- - thing is changed in vifm instance that performs merge; - - - each mark or bookmark is marked with a timestamp, so that newer - value is not overwritten by older one, thus no matter from where it - comes, the newer one wins; - - - all histories are marked with timestamps on storing, this means - that last instance to quit puts its elements on top of the list; - - - tabs are merged only if both current instance and stored state con- - tain exactly one tab of any kind. - - The $VIFM/scripts directory can contain shell scripts. vifm modifies - its PATH environment variable to let user run those scripts without - specifying full path. All subdirectories of the $VIFM/scripts will be - added to PATH too. Script in a subdirectory overlaps script with the - same name in all its parent directories. - - The $VIFM/colors/ and {prefix}/etc/vifm/colors/ directories contain - color schemes. Available color schemes are searched in that order, so - on name conflict the one in $VIFM/colors/ wins. - - Each color scheme should have ".vifm" extension. This wasn't the case - before and for this reason the following rules apply during lookup: - - - if there is no file with .vifm extension, all regular files are - listed; - - - otherwise only files with .vifm extension are listed (with the ex- - tension being truncated). - -Sessions - Sessions provide a way to have multiple persistent runtime configura- - tions. Think of them as second-level vifminfo files in addition to the - first-level one used by all sessions. In other words, they aren't a - replacement for vifminfo file that exists without sessions, but an ad- - dition to it. One can empty 'vifminfo' option and rely solely on ses- - sions, but in practice one might want to share some state among in- - stances in different sessions or have an "out-of-sessions" state for - tasks that don't deserve a session of their own. - - This leads to a two-level structure where data in session files has - higher priority than data in vifminfo files (where this makes sense) - following the same rules that merging of vifminfo file obeys. In addi- - tion to that, history items from session files are never ordered before - history items from vifminfo file. - - Format - - Sessions have the format of vifminfo files, they do not consist of se- - quence of command-line commands and are not meant to be sourced via - :source command. - - Storage and naming - - `$VIFM/sessions/` directory serves as a storage for sessions. Conse- - quently names should be valid filenames. The structure of the storage - is flat meaning that there are no subdirectories, that's why names of - sessions can't contain slashes. - - Usage model - - Contrary to Vim, vifm automates basic management of sessions. You can - start, switch, stop or delete a session using builtin means. - - Current session is saved at the same time vifminfo is saved (on normal - exits or explicitly on :write command) and right before switching to - another session. To avoid saving in those cases use :session command - to detach (without saving) from a session before proceeding. - - Related topics - - Commands: :session, :delsession - Options: 'sessionoptions' - Variables: v:session - -Automatic FUSE mounts - vifm has a builtin support of automated FUSE file system mounts. It is - implemented using file associations mechanism. To enable automated - mounts, one needs to use a specially formatted program line in filetype - or filextype commands. These use special macros, which differ from - macros in commands unrelated to FUSE. Currently three formats are sup- - ported: - - 1) FUSE_MOUNT This format should be used in case when all information - needed for mounting all files of a particular type is the same. E.g. - mounting of tar files don't require any file specific options. - - Format line: - FUSE_MOUNT|mounter %SOURCE_FILE %DESTINATION_DIR [%FOREGROUND] - - Example filetype command: - - :filetype FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR - - 2) FUSE_MOUNT2 This format allows one to use specially formatted files - to perform mounting and is useful for mounting remotes, for example re- - mote file systems over ftp or ssh. - - Format line: - FUSE_MOUNT2|mounter %PARAM %DESTINATION_DIR [%FOREGROUND] - - Example filetype command: - - :filetype *.ssh FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR - - Example file content: - - root@127.0.0.1:/ - - 3) FUSE_MOUNT3 - - This format is equivalent to FUSE_MOUNT, but omits unmounting. It is - useful for cases, when unmounting isn't needed, like when using AVFS. - - Example :filetype command: - - :filetype *.tar,*.tar.bz2,*.tbz2,*.tgz,*.tar.gz,*.tar.xz,*.txz,*.deb - \ {Mount with avfs} - \ FUSE_MOUNT3|mount-avfs %DESTINATION_DIR %SOURCE_FILE - - Example `mount-avfs` helper script: - - #!/bin/sh - - dest=$1 - file=$2 - - rmdir "$dest" - ln -s "$HOME/.avfs$file#/" "$dest" - - All % macros are expanded by vifm at runtime and have the following - meaning: - - %SOURCE_FILE is replaced by full path to selected file; - - %DESTINATION_DIR is replaced by full path to mount directory, which - is created by vifm basing on the value of 'fusehome' option; - - %PARAM value is filled from the first line of file (whole line), - though in the future it can be changed to whole file content; - - %FOREGROUND means that you want to run mount command as a regular - command (required to be able to provide input for communication with - mounter in interactive way). - - %FOREGROUND is an optional macro. Other macros are not mandatory, but - mount commands likely won't work without them. - - %CLEAR is obsolete name of %FOREGROUND, which is still supported, but - might be removed in future. Its use is discouraged. - - Unlike macros elsewhere, these are recognized only if they appear at - the end of a command or are followed by a space. There is no way to - escape % either. These are historical limitations, which might be ad- - dressed in the future. - - The mounted FUSE file systems will be automatically unmounted in two - cases: - - - when vifm quits (with ZZ, :q, etc. or when killed by signal); - - - when you explicitly leave mount point going up to its parent direc- - tory (with h, Enter on "../" or ":cd ..") and other pane is not in - the same directory or its child directories. - -View look - vifm supports displaying of file list view in two different ways: - - - in a table mode, when multiple columns can be set using 'view- - columns' option (see "Column view" section below for details); - - - in a multicolumn list manner which looks almost like `ls -x` com- - mand output (see "ls-like view" section below for details). - - The look is local for each view and can be chosen by changing value of - the 'lsview' boolean option. - - Depending on view look some of keys change their meaning to allow more - natural cursor moving. This concerns mainly h, j, k, l and other simi- - lar navigation keys. - - Also some of options can be ignored if they don't affect view display- - ing in selected look. For example value of 'viewcolumns' when 'lsview' - is set. - -ls-like view - When this view look is enabled by setting 'lsview' option on, vifm will - display files in multiple columns. Number of columns depends on the - length of the longest file name present in current directory of the - view. Whole file list is automatically reflowed on directory change, - terminal or view resize. - - View looks close to output of `ls -x` command, so files are listed left - to right in rows. - - In this mode file manipulation commands (e.g. d) don't work line-wise - like they do in Vim, since such operations would be uncommon for file - manipulation tasks. Thus, for example, dd will remove only current - file. - - By default the view is filled by lines, 'lsoptions' can be used to get - filling by columns. - - Note that tree-view and compare view inhibit ls-like view. - -Column view - View columns are described by a comma-separated list of column descrip- - tions, each of which has the following format - [ '-' ] [ fw ( [ '.' tw ] | '%' ) ] '{' type '}' '.'{0,3} - where fw stands for full width and tw stands for text width. - - So it basically consists of four parts: - 1. Optional alignment specifier - 2. Optional width specifier - 3. Mandatory column name - 4. Optional cropping specifier - - Alignment specifier - - It's an optional minus or asterisk sign as the first symbol of the - string. - - Specifies type of text alignment within a column. Three types are sup- - ported: - - - left align - - set viewcolumns=-{name} - - - right align (default) - - set viewcolumns={name} - - - dynamic align - - It's like left alignment, but when the text is bigger than the col- - umn, the alignment is made at the right (so the part of the field is - always visible). - - set viewcolumns=*{name} - - Width specifier - - It's a number followed by a percent sign, two numbers (second one - should be less than or equal to the first one) separated with a dot or - a single number. - - Specifies column width and its units. There are three size types: - - - absolute size - column width is specified in characters - - set viewcolumns=-100{name},20.15{ext} - - results in two columns with lengths of 100 and 20 and a reserved - space of five characters on the left of second column. - - - relative (percent) size - column width is specified in percents of - view width - - set viewcolumns=-80%{name},15%{ext},5%{mtime} - - results in three columns with lengths of 80/100, 15/100 and 5/100 of - view width. - - - auto size (default) - column width is automatically determined - - set viewcolumns=-{name},{ext},{mtime} - - results in three columns with length of one third of view width. - There is no size adjustment to content, since it will slow down ren- - dering. - - Columns of different sizing types can be freely mixed in one view. - Though sometimes some of columns can be seen partly or be completely - invisible if there is not enough space to display them. - - Column name - - This is just a sort key surrounded with curly braces or {root}, e.g. - - {name},{ext},{mtime} - - {name} and {iname} keys are the same and present both for consistency - with 'sort' option. - - Following keys don't have corresponding sorting keys: - - - {root} - display name without extension (as a complement for - {ext}) - - - {fileroot} - display name without extension for anything except for - directories and symbolic links to directories (as a complement for - {fileext}) - - Empty curly braces ({}) are replaced with the default secondary column - for primary sort key. So after the next command view will be displayed - almost as if 'viewcolumns' is empty, but adding ellipsis for long file - names: - - set viewcolumns=-{name}..,6{}. - - Cropping specifier - - It's from one to three dots after closing curly brace in column format. - - Specifies type of text truncation if it doesn't fit in the column. - Currently three types are supported: - - - truncation - text is truncated - - set viewcolumns=-{name}. - - results in truncation of names that are too long too fit in the - view. - - - adding of ellipsis - ellipsis on the left or right are added when - needed - - set viewcolumns=-{name}.. - - results in that ellipsis are added at the end of too long file - names. - - - none (default) - text can pass column boundaries - - set viewcolumns=-{name}...,{ext} - - results in that long file names can partially be written on the ext - column. - -Color schemes - The color schemes in vifm can be applied in two different ways: - - - as the primary color scheme; - - - as local to a pane color scheme. - - Both types are set using :colorscheme command, but of different forms: - - - :colorscheme color_scheme_name - for the primary color scheme; - - - :colorscheme color_scheme_name directory - for local color schemes. - - Look of different parts of the TUI (Text User Interface) is determined - in this way: - - - Border, TabLine, TabLineSel, TopLineSel, TopLine, CmdLine, Er- - rorMsg, StatusLine, JobLine, SuggestBox and WildMenu are always de- - termined by the primary color scheme; - - - CurrLine, Selected, Directory, Link, BrokenLink, Socket, Device, - Executable, Fifo, CmpMismatch, Win, AuxWin and OtherWin are deter- - mined by primary color scheme and a set of local color schemes, - which can be empty. - - There might be a set of local color schemes because they are structured - hierarchically according to file system structure. For example, having - the following piece of file system: - - ~ - `-- bin - | - `-- my - - Two color schemes: - - # ~/.vifm/colors/for_bin - highlight Win cterm=none ctermfg=white ctermbg=red - highlight CurrLine cterm=none ctermfg=red ctermbg=black - - # ~/.vifm/colors/for_bin_my - highlight CurrLine cterm=none ctermfg=green ctermbg=black - - And these three commands in the vifmrc file: - - colorscheme Default - colorscheme for_bin ~/bin - colorscheme for_bin_my ~/bin/my - - File list will look in the following way for each level: - - - ~/ - Default color scheme - black background - cursor with blue background - - - ~/bin/ - mix of Default and for_bin color schemes - red background - cursor with black background and red foreground - - - ~/bin/my/ - mix of Default, for_bin and for_bin_my color schemes - red background - cursor with black background and green foreground - -Trash directory - vifm has support of trash directory, which is used as temporary storage - for deleted files or files that were cut. Using trash is controlled by - the 'trash' option, and exact path to the trash can be set with - 'trashdir' option. Trash directory in vifm differs from the system- - wide one by default, because of possible incompatibilities of storing - deleted files among different file managers. But one can set - 'trashdir' to "~/.local/share/Trash" to use a "standard" trash direc- - tory. - - There are two scenarios of using trash in vifm: - - 1. As a place for storing files that were cut by "d" and may be in- - serted to some other place in file system. - - 2. As a storage of files, that are deleted but not purged yet. - - The first scenario uses deletion ("d") operations to put files to trash - and put ("p") operations to restore files from trash directory. Note - that such operations move files to and from trash directory, which can - be long term operations in case of different partitions or remote - drives mounted locally. - - The second scenario uses deletion ("d") operations for moving files to - trash directory and :empty command-line command to purge all previously - deleted files. - - Deletion and put operations depend on registers, which can point to - files in trash directory. Normally, there are no nonexistent files in - registers, but vifm doesn't keep track of modifications under trash di- - rectory, so one shouldn't expect value of registers to be absolutely - correct if trash directory was modified not by operation that are meant - for it. But this won't lead to any issues with operations, since they - ignore nonexistent files. - -Client-Server - vifm supports remote execution of command-line mode commands, remote - changing of directories and expression evaluation. This is possible - using --remote and --remote-expr command-line arguments. - - To execute a command remotely combine --remote argument with -c or +. For example: - - vifm --remote -c 'cd /' - vifm --remote '+cd /' - - To change directory not using command-line mode commands one can spec- - ify paths right after --remote argument, like this: - - vifm --remote / - vifm --remote ~ - vifm --remote /usr/bin /tmp - - Evaluating expression remotely might be useful to query information - about an instance, for example its location: - - vifm --remote-expr 'expand("%d")' - - If there are several running instances, the target can be specified - with --server-name option (otherwise, the first one lexicographically - is used): - - vifm --server-name work --remote ~/work/project - - List of names of running instances can be obtained via --server-list - option. Name of the current one is available via v:servername. - - - v:servername - server name of the running vifm instance. Empty if client- - server feature is disabled. - -Plugin - Plugin for using vifm in vim as a file selector. - - Commands: - - :EditVifm select a file or files to open in the current buffer. - :Vifm alias for :EditVifm. - :SplitVifm split buffer and select a file or files to open. - :VsplitVifm vertically split buffer and select a file or files to - open. - :DiffVifm select a file or files to compare to the current file - with - :vert diffsplit. - :TabVifm select a file or files to open in tabs. - - Each command accepts up to two arguments: left pane directory and right - pane directory. After arguments are checked, vifm process is spawned - in a special "file-picker" mode. To pick files just open them either - by pressing l, i or Enter keys, or by running :edit command. If no - files are selected, file under the cursor is opened, otherwise whole - selection is passed to the plugin and opened in vim. - - The plugin have only two settings. It's a string variable named - g:vifm_term to let user specify command to run GUI terminal. By de- - fault it's equal to 'xterm -e'. And another string variable named - g:vifm_exec, which equals "vifm" by default and specifies path to - vifm's executable. To pass arguments to vifm use g:vifm_exec_args, - which is empty by default. - - To use the plugin copy the vifm.vim file to either the system wide - vim/plugin directory or into ~/.vim/plugin. - - If you would prefer not to use the plugin and it is in the system wide - plugin directory add - - let loaded_vifm=1 - - to your ~/.vimrc file. - -Reserved - The following command names are reserved and shouldn't be used for user - commands. - - g[lobal] - v[global] - -ENVIRONMENT - VIFM Points to main configuration directory (usually ~/.vifm/). - - MYVIFMRC - Points to main configuration file (usually ~/.vifm/vifmrc). - - These environment variables are valid inside vifm and also can be used - to configure it by setting some of them before running vifm. - - When $MYVIFMRC isn't set, it's made as $VIFM/vifmrc (exception for Win- - dows: vifmrc in the same directory as vifm.exe has higher priority than - $VIFM/vifmrc). - - See "Startup" section above for more details. - - VIFM_FUSE_FILE - On execution of external commands this variable is set to the - full path of file used to initiate FUSE mount of the closest - mount point from current pane's directory up. It's not set when - outside FUSE mount point. When vifm is used inside terminal - multiplexer, it tries to set this variable as well (it doesn't - work this way on its own). - -SEE ALSO - vifm-convert-dircolors(1), vifm-pause(1) - - Website: https://vifm.info/ - Wiki: https://wiki.vifm.info/ - - Esperanto translation of the documentation by Sebastian Cyprych: - http://cyprych.neostrada.pl/tekstoj/komputiloj/vifm-help.eo.html - -AUTHOR - Vifm was written by ksteen - And currently is developed by xaizek - - - -vifm 0.11 September 24, 2020 VIFM(1) diff --git a/.config/vifm/vifminfo.json b/.config/vifm/vifminfo.json deleted file mode 100644 index fdd98a4..0000000 --- a/.config/vifm/vifminfo.json +++ /dev/null @@ -1 +0,0 @@ -{"gtabs":[{"panes":[{"ptabs":[{}]},{"ptabs":[{}]}]}],"trash":[{"trashed":"/tmp/.vifm-Trash-1000/000_lagrange","original":"/tmp/aurutils-1000/view.EqoSDzH/lagrange"}]} \ No newline at end of file diff --git a/.config/vifm/vifmrc b/.config/vifm/vifmrc deleted file mode 100644 index 0af31e7..0000000 --- a/.config/vifm/vifmrc +++ /dev/null @@ -1,503 +0,0 @@ -" vim: filetype=vifm : -" Sample configuration file for vifm (last updated: 9 September, 2020) -" You can edit this file by hand. -" The " character at the beginning of a line comments out the line. -" Blank lines are ignored. -" The basic format for each item is shown with an example. - -" ------------------------------------------------------------------------------ - -" Command used to edit files in various contexts. The default is vim. -" If you would like to use another vi clone such as Elvis or Vile -" you will need to change this setting. - -set vicmd=vim -" set vicmd=elvis\ -G\ termcap -" set vicmd=vile - -" This makes vifm perform file operations on its own instead of relying on -" standard utilities like `cp`. While using `cp` and alike is a more universal -" solution, it's also much slower when processing large amounts of files and -" doesn't support progress measuring. - -set syscalls - -" Trash Directory -" The default is to move files that are deleted with dd or :d to -" the trash directory. If you change this you will not be able to move -" files by deleting them and then using p to put the file in the new location. -" I recommend not changing this until you are familiar with vifm. -" This probably shouldn't be an option. - -set trash - -" This is how many directories to store in the directory history. - -set history=100 - -" Automatically resolve symbolic links on l or Enter. - -set nofollowlinks - -" With this option turned on you can run partially entered commands with -" unambiguous beginning using :! (e.g. :!Te instead of :!Terminal or :!Te). - -" set fastrun - -" Natural sort of (version) numbers within text. - -set sortnumbers - -" Maximum number of changes that can be undone. - -set undolevels=100 - -" Use Vim's format of help file (has highlighting and "hyperlinks"). -" If you would rather use a plain text help file set novimhelp. - -set vimhelp - -" If you would like to run an executable file when you -" press Enter, l or Right Arrow, set this. - -set norunexec - -" List of color schemes to try (picks the first one supported by the terminal) - -colorscheme gruvbox - -" Format for displaying time in file list. For example: -" TIME_STAMP_FORMAT=%m/%d-%H:%M -" See man date or man strftime for details. - -set timefmt=%m/%d\ %H:%M - -" Show list of matches on tab completion in command-line mode - -set wildmenu - -" Display completions in a form of popup with descriptions of the matches - -set wildstyle=popup - -" Display suggestions in normal, visual and view modes for keys, marks and -" registers (at most 5 files). In other view, when available. - -set suggestoptions=normal,visual,view,otherpane,keys,marks,registers - -" Ignore case in search patterns unless it contains at least one uppercase -" letter - -set ignorecase -set smartcase - -" Don't highlight search results automatically - -set nohlsearch - -" Use increment searching (search while typing) -set incsearch - -" Try to leave some space from cursor to upper/lower border in lists - -set scrolloff=4 - -" Don't do too many requests to slow file systems - -if !has('win') - set slowfs=curlftpfs -endif - -" Set custom status line look - -set statusline=" Hint: %z%= %A %10u:%-7g %15s %20d " - -" ------------------------------------------------------------------------------ - -" :mark mark /full/directory/path [filename] - -mark b ~/bin/ -mark h ~/ - -" ------------------------------------------------------------------------------ - -" :com[mand][!] command_name action -" The following macros can be used in a command -" %a is replaced with the user arguments. -" %c the current file under the cursor. -" %C the current file under the cursor in the other directory. -" %f the current selected file, or files. -" %F the current selected file, or files in the other directory. -" %b same as %f %F. -" %d the current directory name. -" %D the other window directory name. -" %m run the command in a menu window - -command! df df -h %m 2> /dev/null -command! diff vim -d %f %F -command! zip zip -r %f.zip %f -command! run !! ./%f -command! make !!make %a -command! mkcd :mkdir %a | cd %a -command! vgrep vim "+grep %a" -command! reload :write | restart full - -" ------------------------------------------------------------------------------ - -" The file type is for the default programs to be used with -" a file extension. -" :filetype pattern1,pattern2 defaultprogram,program2 -" :fileviewer pattern1,pattern2 consoleviewer -" The other programs for the file type can be accessed with the :file command -" The command macros like %f, %F, %d, %D may be used in the commands. -" The %a macro is ignored. To use a % you must put %%. - -" For automated FUSE mounts, you must register an extension with :file[x]type -" in one of following formats: -" -" :filetype extensions FUSE_MOUNT|some_mount_command using %SOURCE_FILE and %DESTINATION_DIR variables -" %SOURCE_FILE and %DESTINATION_DIR are filled in by vifm at runtime. -" A sample line might look like this: -" :filetype *.zip,*.jar,*.war,*.ear FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR -" -" :filetype extensions FUSE_MOUNT2|some_mount_command using %PARAM and %DESTINATION_DIR variables -" %PARAM and %DESTINATION_DIR are filled in by vifm at runtime. -" A sample line might look like this: -" :filetype *.ssh FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR -" %PARAM value is filled from the first line of file (whole line). -" Example first line for SshMount filetype: root@127.0.0.1:/ -" -" You can also add %CLEAR if you want to clear screen before running FUSE -" program. - -" Pdf -filextype {*.pdf}, zathura %c %i &, apvlv %c, xpdf %c -fileviewer {*.pdf}, pdftotext -nopgbrk %c - - -" PostScript -filextype {*.ps,*.eps,*.ps.gz}, - \ {View in zathura} - \ zathura %f, - \ {View in gv} - \ gv %c %i &, - -" Djvu -filextype {*.djvu}, - \ {View in zathura} - \ zathura %f, - \ {View in apvlv} - \ apvlv %f, - -" Audio -filetype {*.wav,*.mp3,*.flac,*.m4a,*.wma,*.ape,*.ac3,*.og[agx],*.spx,*.opus}, - \