summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.Xresources55
-rw-r--r--.config/aliasrc56
-rw-r--r--.config/compton.conf40
-rw-r--r--.config/dunst/dunstrc313
-rw-r--r--.config/manual.part30
-rw-r--r--.config/newsboat/config45
-rw-r--r--.config/newsboat/urls43
-rw-r--r--.config/nvim/UltiSnips/rnoweb.snippets122
-rwxr-xr-x.config/nvim/init.vim289
-rw-r--r--.config/picom.conf47
-rw-r--r--.config/shortcutrc34
-rw-r--r--.config/sxhkd/sxhkdrc257
-rw-r--r--.config/todotxt-machine/config51
-rw-r--r--.config/vifm/colors/Default.vifm83
-rw-r--r--.config/vifm/colors/minimal.vifm26
-rwxr-xr-x.config/vifm/scripts/vifmimg97
-rw-r--r--.config/vifm/vifm-help.txt6103
-rw-r--r--.config/vifm/vifmrc297
-rw-r--r--.config/zathura/zathurarc27
-rwxr-xr-x.local/bin/Rinstall5
-rwxr-xr-x.local/bin/aliasgen14
-rwxr-xr-x.local/bin/bars22
-rwxr-xr-x.local/bin/blocks3
-rwxr-xr-x.local/bin/bloks59
-rwxr-xr-x.local/bin/bonsai554
-rwxr-xr-x.local/bin/camtoggle4
-rwxr-xr-x.local/bin/colorbars38
-rwxr-xr-x.local/bin/colorbars-sm35
-rwxr-xr-x.local/bin/colorscheme27
-rwxr-xr-x.local/bin/compiler40
-rwxr-xr-x.local/bin/cronbat8
-rwxr-xr-x.local/bin/crontog5
-rwxr-xr-x.local/bin/datetime3
-rwxr-xr-x.local/bin/define3
-rwxr-xr-x.local/bin/displaymenu73
-rwxr-xr-x.local/bin/displayselect72
-rwxr-xr-x.local/bin/dna46
-rwxr-xr-x.local/bin/dropbox-status9
-rwxr-xr-x.local/bin/dropdowntoggle17
-rwxr-xr-x.local/bin/dwmbar26
-rwxr-xr-x.local/bin/dwmbar-battery22
-rwxr-xr-x.local/bin/emoji-copy20
-rwxr-xr-x.local/bin/extract41
-rwxr-xr-x.local/bin/fixaudio8
-rwxr-xr-x.local/bin/gd2pdf3
-rwxr-xr-x.local/bin/getbib14
-rwxr-xr-x.local/bin/groffdown54
-rwxr-xr-x.local/bin/kblayout3
-rwxr-xr-x.local/bin/layouttoggle24
-rwxr-xr-x.local/bin/linkhandler22
-rwxr-xr-x.local/bin/makestereo9
-rwxr-xr-x.local/bin/manualgen19
-rwxr-xr-x.local/bin/mountmenu61
-rwxr-xr-x.local/bin/newsup15
-rwxr-xr-x.local/bin/opout11
-rwxr-xr-x.local/bin/pacman-colors48
-rwxr-xr-x.local/bin/pipes136
-rwxr-xr-x.local/bin/pipesx207
-rwxr-xr-x.local/bin/pod-dl30
-rwxr-xr-x.local/bin/podentr5
-rwxr-xr-x.local/bin/powermenu11
-rwxr-xr-x.local/bin/printermenu3
-rwxr-xr-x.local/bin/qndl13
-rwxr-xr-x.local/bin/queueandnotify15
-rwxr-xr-x.local/bin/rain100
-rwxr-xr-x.local/bin/recordmenu105
-rwxr-xr-x.local/bin/rssadd9
-rwxr-xr-x.local/bin/screenstatus4
-rwxr-xr-x.local/bin/setbg20
-rwxr-xr-x.local/bin/shortcutgen54
-rwxr-xr-x.local/bin/slendy35
-rwxr-xr-x.local/bin/surfmenu4
-rwxr-xr-x.local/bin/tdout9
-rwxr-xr-x.local/bin/test.sh9
-rwxr-xr-x.local/bin/texclear32
-rwxr-xr-x.local/bin/texinit6
-rwxr-xr-x.local/bin/tmux-mpsyt16
-rwxr-xr-x.local/bin/tmux-r18
-rwxr-xr-x.local/bin/tmux-shell18
-rwxr-xr-x.local/bin/tmux-vlc19
-rwxr-xr-x.local/bin/todotable23
-rwxr-xr-x.local/bin/trackpadtoggle15
-rwxr-xr-x.local/bin/transadd9
-rwxr-xr-x.local/bin/umountmenu42
-rwxr-xr-x.local/bin/unix25
-rwxr-xr-x.local/bin/vifmrun16
-rwxr-xr-x.local/bin/volumectl23
-rwxr-xr-x.local/bin/vpnmenu14
-rwxr-xr-x.local/bin/vpnstatus25
-rwxr-xr-x.local/bin/websearch31
-rwxr-xr-x.local/bin/wifi10
-rwxr-xr-x.local/bin/yadms15
-rw-r--r--.profile48
-rw-r--r--.tmux.conf113
-rw-r--r--.xinitrc21
-rw-r--r--.zshrc101
96 files changed, 10861 insertions, 0 deletions
diff --git a/.Xresources b/.Xresources
new file mode 100644
index 0000000..64b6d06
--- /dev/null
+++ b/.Xresources
@@ -0,0 +1,55 @@
+URxvt.iconFile: /usr/share/icons/Faenza/apps/scalable/urxvt.svg
+URxvt.transparent: false
+!URxvt.shading: 40 // 0 to 99 darkens, 101 to 200 lightens
+URxvt.scrollBar: off
+URxvt.font: xft:cure:size=9
+URxvt.perl-ext-common:default,url-select,keyboard-select,clipboard,autocomplete-ALL-the-things,
+URxvt.keysym.M-u:perl:url-select:select_next
+URxvt.keysym.M-slash: perl:aAtt:complete
+URxvt.urlLauncher:firefox
+URvxt.url-select.button: 1
+URxvt.underlineURLs:true
+URxvt.keysym.M-Escape: perl:keyboard-select:activate
+URxvt.keysym.M-c: perl:clipboard:copy
+URxvt.keysym.M-v: perl:clipboard:paste
+URxvt.keysym.M-C-v: perl:clipboard:paste_escaped
+URxvt.clipboard.copycmd: xsel -ib
+URxvt.clipboard.pastecmd: xsel -ob
+!AMBIANCE
+URxvt*background: #222D32
+URxvt.foreground: #F2F1F0
+URxvt.cursorColor: #F07746
+
+!black
+/* *color0: #222D32 */
+*color0: #182024
+*color8: #666666
+!red
+*color1: #E84F4F
+*color9: #D23D3D
+!green
+/* *color2: #B7CE42 */
+/* *color10: #BDE077 */
+*color2: #19B596
+*color10: #19B596
+!yellow
+/* *color3: #C4E969 */
+/* *color11: #C4E969 */
+*color3: #EADAB1
+*color11: #EBCB88
+!blue
+*color4: #66AABB
+*color12: #AACCBB
+!magenta
+*color5: #B7416E
+*color13: #E16A98
+!cyan
+*color6: #6D878D
+*color14: #42717B
+!white
+*color7: #F2F1F0
+*color15: #F2F1F0
+
+! SXIV COLORS
+Sxiv.background: #202020
+Sxiv.foreground: #565656
diff --git a/.config/aliasrc b/.config/aliasrc
new file mode 100644
index 0000000..f56cd58
--- /dev/null
+++ b/.config/aliasrc
@@ -0,0 +1,56 @@
+# _ _
+# | (_)
+# __ _| |_ __ _ ___ _ __ ___
+# / _` | | |/ _` / __| '__/ __|
+# | (_| | | | (_| \__ \ | | (__
+# \__,_|_|_|\__,_|___/_| \___|
+#
+#
+
+
+
+# #---Universal Shell Alias Configuration File---# #
+# First column contains the alias
+# Second column contains the command to execute
+
+|---------+----------------------------------------------------------------------|
+| :e | $EDITOR |
+| :q | exit |
+| adog | git log --all --decorate --oneline --graph |
+| cdd | cd .. |
+| cs | cowsay -f sodomized |
+| df | yadm |
+| dfa | yadm add |
+| dfc | yadm commit |
+| dfp | yadm pull |
+| dfup | yadm commit -a && yadm push && dwmbar |
+| e | $EDITOR |
+| ew | nvim ./main.rnw |
+| fetch | clear && printf '\n$(pfetch)\n$(bars)\n' |
+| fp | fontpreview |
+| fu | fuck |
+| f | vicd |
+| g | git |
+| goobook | goobook -c $HOME/.config/goobook/config |
+| gor | go run *.go |
+| less | nvimpager |
+| op | e main.rnw |
+| R | R -q |
+| td | todotxt-machine -c ~/.config/todotxt-machine/config |
+| tm | tmux |
+| tmcd | tmux attach-session -t |
+| tmdd | tmux kill-session -t |
+| tmls | tmux list-sessions |
+| t | todo.sh -d $HOME/.config/todo/todo.cfg |
+| ta | todo.sh -d $HOME/.config/todo/todo.cfg a |
+| tl | todo.sh -d $HOME/.config/todo/todo.cfg ls |
+| v | nvim |
+| vc | expressvpn connect && dwmbar |
+| vd | expressvpn disconnect && dwmbar |
+| vm | expressvpn connect camo && dwmbar |
+| vpn | expressvpn |
+| vs | expressvpn connect smart && dwmbar |
+| xx | chmod +x |
+| yadog | yadm log --all --decorate --oneline --graph |
+|---------+----------------------------------------------------------------------|
+
diff --git a/.config/compton.conf b/.config/compton.conf
new file mode 100644
index 0000000..49fab81
--- /dev/null
+++ b/.config/compton.conf
@@ -0,0 +1,40 @@
+# Blur
+blur-background = true;
+blur-method = "kawase";
+blur-strength = 4;
+
+# Fading
+fading = false;
+fade-in-step = 0.05;
+fade-out-step = 0.05;
+fade-exclude = [ ];
+
+# Other
+mark-wmwin-focused = true;
+mark-ovredir-focused = true;
+# use-ewmh-active-win = true;
+detect-rounded-corners = true;
+detect-client-opacity = true;
+refresh-rate = 0;
+vsync = true;
+dbe = false;
+# sw-opti = true;
+unredir-if-possible = false;
+# unredir-if-possible-delay = 5000;
+# unredir-if-possible-exclude = [ ];
+focus-exclude = [ "class_g = 'Cairo-clock'" ];
+detect-transient = true;
+detect-client-leader = true;
+invert-color-include = [ ];
+# resize-damage = 1;
+
+# GLX backend
+backend = "glx";
+glx-no-stencil = true;
+glx-copy-from-front = false;
+glx-swap-method = "undefined";
+glx-no-rebind-pixmap = true;
+# glx-use-copysubbuffermesa = true;
+# glx-use-gpushader4 = true;
+# xrender-sync = true;
+# xrender-sync-fence = true;
diff --git a/.config/dunst/dunstrc b/.config/dunst/dunstrc
new file mode 100644
index 0000000..b024aaf
--- /dev/null
+++ b/.config/dunst/dunstrc
@@ -0,0 +1,313 @@
+[global]
+ frame_width = 0
+ frame_color = "#788388"
+
+ Font = Hack Nerd Font Mono 14
+
+ # Allow a small subset of html markup:
+ # <b>bold</b>
+ # <i>italic</i>
+ # <s>strikethrough</s>
+ # <u>underline</u>
+ #
+ # For a complete reference see
+ # <http://developer.gnome.org/pango/stable/PangoMarkupFormat.html>.
+ # If markup is not allowed, those tags will be stripped out of the
+ # message.
+ markup = yes
+
+ # The format of the message. Possible variables are:
+ # %a appname
+ # %s summary
+ # %b body
+ # %i iconname (including its path)
+ # %I iconname (without its path)
+ # %p progress value if set ([ 0%] to [100%]) or nothing
+ # Markup is allowed
+ format = "<b>%a</b>\n%s %p\n%b"
+
+ # Sort messages by urgency.
+ sort = yes
+
+ # Show how many messages are currently hidden (because of geometry).
+ indicate_hidden = yes
+
+ # Alignment of message text.
+ # Possible values are "left", "center" and "right".
+ alignment = left
+
+ # The frequency with wich text that is longer than the notification
+ # window allows bounces back and forth.
+ # This option conflicts with "word_wrap".
+ # Set to 0 to disable.
+ bounce_freq = 5
+
+
+ # Show age of message if message is older than show_age_threshold
+ # seconds.
+ # Set to -1 to disable.
+ show_age_threshold = 60
+
+ # Split notifications into multiple lines if they don't fit into
+ # geometry.
+ word_wrap = no
+
+ # Ignore newlines '\n' in notifications.
+ ignore_newline = no
+
+
+ # The geometry of the window:
+ # [{width}]x{height}[+/-{x}+/-{y}]
+ # The geometry of the message window.
+ # The height is measured in number of notifications everything else
+ # in pixels. If the width is omitted but the height is given
+ # ("-geometry x2"), the message window expands over the whole screen
+ # (dmenu-like). If width is 0, the window expands to the longest
+ # message displayed. A positive x is measured from the left, a
+ # negative from the right side of the screen. Y is measured from
+ # the top and down respectevly.
+ # The width can be negative. In this case the actual width is the
+ # screen width minus the width defined in within the geometry option.
+ geometry = "0x4-25-25"
+
+ # Define the corner radius of the notification window
+ # in pixel size. If the radius is 0, you have no rounded
+ # corners.
+ # The radius will be automatically lowered if it exceeds half of the
+ # notification height to avoid clipping text and/or icons.
+ corner_radius=5
+
+ # Shrink window if it's smaller than the width. Will be ignored if
+ # width is 0.
+ shrink = yes
+
+ # The transparency of the window. Range: [0; 100].
+ # This option will only work if a compositing windowmanager is
+ # present (e.g. xcompmgr, compiz, etc.).
+ transparency = 0
+
+ # Don't remove messages, if the user is idle (no mouse or keyboard input)
+ # for longer than idle_threshold seconds.
+ # Set to 0 to disable.
+ # default 120
+ idle_threshold = 120
+
+ # Which monitor should the notifications be displayed on.
+ monitor = 0
+
+ # Display notification on focused monitor. Possible modes are:
+ # mouse: follow mouse pointer
+ # keyboard: follow window with keyboard focus
+ # none: don't follow anything
+ #
+ # "keyboard" needs a windowmanager that exports the
+ # _NET_ACTIVE_WINDOW property.
+ # This should be the case for almost all modern windowmanagers.
+ #
+ # If this option is set to mouse or keyboard, the monitor option
+ # will be ignored.
+ follow = mouse
+
+ # Should a notification popped up from history be sticky or timeout
+ # as if it would normally do.
+ sticky_history = yes
+
+ # Maximum amount of notifications kept in history
+ history_length = 20
+
+ # Display indicators for URLs (U) and actions (A).
+ show_indicators = yes
+
+ # The height of a single line. If the height is smaller than the
+ # font height, it will get raised to the font height.
+ # This adds empty space above and under the text.
+ line_height = 0
+
+ # Draw a line of "separator_height" pixel height between two
+ # notifications.
+ # Set to 0 to disable.
+ separator_height = 1
+
+ # Padding between text and separator.
+ # padding = 8
+ padding = 8
+
+ # Horizontal padding.
+ horizontal_padding = 10
+
+ # Define a color for the separator.
+ # possible values are:
+ # * auto: dunst tries to find a color fitting to the background;
+ # * foreground: use the same color as the foreground;
+ # * frame: use the same color as the frame;
+ # * anything else will be interpreted as a X color.
+ separator_color = auto
+ # separator_color = #263238
+
+ # Print a notification on startup.
+ # This is mainly for error detection, since dbus (re-)starts dunst
+ # automatically after a crash.
+ startup_notification = false
+
+ # dmenu path.
+ dmenu = /usr/bin/dmenu -p dunst:
+
+ # Browser for opening urls in context menu.
+ browser = firefox
+
+ # Align icons left/right/off
+ icon_position = right
+
+ # Paths to default icons.
+ icon_path = /usr/share/icons/Adwaita/16x16/status/:/usr/share/icons/Adwaita/16x16/devices/
+
+ # Limit icons size.
+ max_icon_size=100
+
+[shortcuts]
+
+ # Shortcuts are specified as [modifier+][modifier+]...key
+ # Available modifiers are "ctrl", "mod1" (the alt-key), "mod2",
+ # "mod3" and "mod4" (windows-key).
+ # Xev might be helpful to find names for keys.
+
+ # Close notification.
+ close = mod1+space
+
+ # Close all notifications.
+ # close_all = ctrl+shift+space
+ close_all = ctrl+mod1+space
+
+ # Redisplay last message(s).
+ # On the US keyboard layout "grave" is normally above TAB and left
+ # of "1".
+ history = ctrl+mod4+h
+
+ # Context menu.
+ context = ctrl+mod1+c
+
+[urgency_low]
+ # IMPORTANT: colors have to be defined in quotation marks.
+ # Otherwise the "#" and following would be interpreted as a comment.
+ background = "#263238"
+ foreground = "#556064"
+ timeout = 10
+
+[urgency_normal]
+ background = "#263238"
+ foreground = "#F9FAF9"
+ timeout = 10
+
+[urgency_critical]
+ background = "#D62929"
+ foreground = "#F9FAF9"
+ timeout = 0
+
+
+# Every section that isn't one of the above is interpreted as a rules to
+# override settings for certain messages.
+# Messages can be matched by "appname", "summary", "body", "icon", "category",
+# "msg_urgency" and you can override the "timeout", "urgency", "foreground",
+# "background", "new_icon" and "format".
+# Shell-like globbing will get expanded.
+#
+# SCRIPTING
+# You can specify a script that gets run when the rule matches by
+# setting the "script" option.
+# The script will be called as follows:
+# script appname summary body icon urgency
+# where urgency can be "LOW", "NORMAL" or "CRITICAL".
+#
+# NOTE: if you don't want a notification to be displayed, set the format
+# to "".
+# NOTE: It might be helpful to run dunst -print in a terminal in order
+# to find fitting options for rules.
+
+#[espeak]
+# summary = "*"
+# script = dunst_espeak.sh
+
+#[script-test]
+# summary = "*script*"
+# script = dunst_test.sh
+
+#[ignore]
+# # This notification will not be displayed
+# summary = "foobar"
+# format = ""
+
+#[signed_on]
+# appname = Pidgin
+# summary = "*signed on*"
+# urgency = low
+#
+#[signed_off]
+# appname = Pidgin
+# summary = *signed off*
+# urgency = low
+#
+#[says]
+# appname = Pidgin
+# summary = *says*
+# urgency = critical
+#
+#[twitter]
+# appname = Pidgin
+# summary = *twitter.com*
+# urgency = normal
+#
+#[Claws Mail]
+# appname = claws-mail
+# category = email.arrived
+# urgency = normal
+# background = "#2F899E"
+# foreground = "#FFA247"
+#
+#[mute.sh]
+# appname = mute
+# category = mute.sound
+# script = mute.sh
+#
+#[JDownloader]
+# appname = JDownloader
+# category = JD
+# background = "#FFA247"
+# foreground = "#FFFFFF"
+#
+[newsboat]
+ summary = *Feeds*
+ background = "#A8EB41"
+ foreground = "#FFFFFF"
+
+[irc]
+ appname = weechat
+ timeout = 0
+ background = "#0033bb"
+ foreground = "#dddddd"
+#
+[weechat hl]
+ appname = weechat
+ category = weechat.HL
+ background = "#FF5C47"
+ foreground = "#FFFFFF"
+#
+[weechat pn]
+ appname = weechat
+ category = weechat.PM
+ background = "#D53B84"
+ foreground = "#FFFFFF"
+#
+[expressvpn]
+ appname = ExpressVPN
+ category =
+#[CMUS]
+# appname = CMUS
+# category = cmus
+# background = "#6C4AB7"
+# foreground = "#FFE756"
+#
+#
+# background = "#30AB70"
+# foreground = "#F67245"
+#
+# vim: ft=cfg
diff --git a/.config/manual.part b/.config/manual.part
new file mode 100644
index 0000000..b34ba2a
--- /dev/null
+++ b/.config/manual.part
@@ -0,0 +1,30 @@
+---
+title: My dwm configuration
+author: Benjamin Chausse
+date: 2020-01-26
+---
+
+The idea behind this configuration is simple. Vim-keybindings, Quick access to frequently used apps, and
+Consistent design!
+
+# Useful info
+
+I use dwm, the dynamic window manager. All the bindings present in *Miscellaneous bindings*
+are dynamically generated from my sxhkd configuration file (`~/.config/sxhkd/sxhkdrc`).
+For that reason, some of it's syntax was borrowed when generating this manual:
+Lists of keys surrounded by `{}` are key choices where typing different keys inside the array will have different effects.
+The underscore `_` represents the lack of a key.
+Therefore, `super + {_,shift} + i` represents these keybindings:
+`super + i` **and**
+`super + shift + i`
+
+# Terminal Bindings (st)
+The default terminal is my build of st which itself is a variant
+of Luke Smith's build.
+- **Copy a commands's output**:`alt + o`
+- **Copy a url on the terminal screen**:`alt + y`
+- **Follow a url on the terminal screen**:`alt + l`
+- **Scroll down in the terminal**:`alt + j`
+- **Scroll up in the terminal**:`alt + k`
+
+# General Bindings
diff --git a/.config/newsboat/config b/.config/newsboat/config
new file mode 100644
index 0000000..4382f3f
--- /dev/null
+++ b/.config/newsboat/config
@@ -0,0 +1,45 @@
+# show-read-feeds no
+# auto-reload yes
+
+external-url-viewer "urlscan -dc -r 'linkhandler {}'"
+
+bind-key j down
+bind-key k up
+bind-key j next articlelist
+bind-key k prev articlelist
+bind-key J next-feed articlelist
+bind-key K prev-feed articlelist
+bind-key G end
+bind-key g home
+bind-key d pagedown
+bind-key u pageup
+bind-key l open
+bind-key h quit
+bind-key a toggle-article-read
+bind-key n next-unread
+bind-key N prev-unread
+bind-key D pb-download
+bind-key U show-urls
+bind-key x pb-delete
+bind-key ^t next-unread
+
+color listnormal cyan default
+color listfocus black yellow standout bold
+color listnormal_unread blue default
+color listfocus_unread yellow default bold
+color info red black bold
+color article cyan default
+
+browser $SCRIPTS/handling/linkhandler
+# external-url-viewer "less"
+macro , open-in-browser
+macro t set browser "tsp youtube-dl --add-metadata -ic"; open-in-browser ; set browser linkhandler
+macro a set browser "tsp youtube-dl --add-metadata -xic -f bestaudio/best"; open-in-browser ; set browser linkhandler
+macro v set browser "setsid nohup mpv"; open-in-browser ; set browser linkhandler
+macro w set browser "w3m"; open-in-browser ; set browser linkhandler
+# macro P external-url-viewer "grep"
+macro c set browser "xsel -b <<<" ; open-in-browser ; set browser linkandler
+
+player "$SCRIPTS/handling/pod-dl"
+download-path ~/Downloads/Podcasts
+
diff --git a/.config/newsboat/urls b/.config/newsboat/urls
new file mode 100644
index 0000000..1c47e8a
--- /dev/null
+++ b/.config/newsboat/urls
@@ -0,0 +1,43 @@
+#https://rss.app/feeds/nxTRC66uslhT5E22.xml #---Podcasts---# #
+http://feeds.wnyc.org/science-friday "Podcast" "~Podcast: Science Friday "
+https://feeds.buzzsprout.com/191338.rss "Podcast" "~Podcast: Our Ludicrous Future (Tim Dodd) "
+https://carpoolcritics.libsyn.com/rss "Podcast" "~Podcast: Carpool Critics "
+https://linustechtips.libsyn.com/wanshow "Podcast" "~Podcast: The WAN Show"
+
+# #---Youtube---# #
+https://www.youtube.com/feeds/videos.xml?channel_id=UCtI0Hodo5o5dUb67FeUjDeA "Youtube" "~Youtube: SpaceX"
+https://www.youtube.com/feeds/videos.xml?channel_id=UCxzC4EngIsMrPmbm6Nxvb-A "Youtube" "~Youtube: Scott Manley "
+https://www.youtube.com/feeds/videos.xml?channel_id=UC6uKrU_WqJ1R2HMTY3LIx5Q "Youtube" "~Youtube: Everyday Astronaut "
+https://www.youtube.com/feeds/videos.xml?channel_id=UCRS3mwPLCNjuNM8qhBlsIUg "Youtube" "~Youtube: SpaceXentric "
+https://www.youtube.com/feeds/videos.xml?channel_id=UC8jkbVLPvztz8TuE98OYo8Q "Youtube" "~Youtube: Front Page Tech"
+https://www.youtube.com/feeds/videos.xml?channel_id=UCXuqSBlHAE6Xw-yeJA0Tunw "Youtube" "~Youtube: Linus Tech Tips"
+https://www.youtube.com/feeds/videos.xml?channel_id=UCeeFfhMcJa1kjtfZAGskOCA "Youtube" "~Youtube: Techlinked"
+https://www.youtube.com/feeds/videos.xml?channel_id=UCdBK94H6oZT2Q7l0-b0xmMg "Youtube" "~Youtube: Short Circuit"
+https://www.youtube.com/feeds/videos.xml?channel_id=UCFLFc8Lpbwt4jPtY1_Ai5yA "Youtube" "~Youtube: LMG Clips"
+https://www.youtube.com/feeds/videos.xml?channel_id=UC2eEGT06FrWFU6VBnPOR9lg "Youtube" "~Youtube: Girlfriend Reviews"
+https://www.youtube.com/feeds/videos.xml?channel_id=UC6107grRI4m0o2-emgoDnAA "Youtube" "~Youtube: Smarter Everyday "
+https://www.youtube.com/feeds/videos.xml?channel_id=UC3DkFux8Iv-aYnTRWzwaiBA "Youtube" "~Youtube: Peter Mckinnon "
+https://www.youtube.com/feeds/videos.xml?channel_id=UCQ-AAXSt0M5Gx0-A9UGut8g "Youtube" "~Youtube: Larian Studios"
+https://www.youtube.com/feeds/videos.xml?channel_id=UC2eYFnH61tmytImy1mTYvhA "Youtube" "~Youtube: Luke Smith "
+https://www.youtube.com/feeds/videos.xml?channel_id=UCBa659QWEk1AI4Tg--mrJ2A "Youtube" "~Youtube: Tom Scott"
+# https://www.youtube.com/feeds/videos.xml?channel_id=<++> "Youtube" "~Youtube: <++>"
+
+# #---Twitter---# #
+http://twitrss.me/twitter_user_to_rss/?user=SpaceX "Twitter" "~Twitter: SpaceX "
+http://twitrss.me/twitter_user_to_rss/?user=Erdayastronaut "Twitter" "~Twitter: Everyday Astronaut "
+
+# #---Websites---# #
+https://chaussebenjamin.xyz/index.xml "Website" "~Website: My Site "
+https://www.spacex.com/news.xml "Website" "~Website: SpaceX Feed "
+https://xkcd.com/rss.xml "Website" "~Website: XKCD "
+# https://blogues.desjardins.com/press_release/atom.xml "Website" "~Website: Desjardins - Nouvelles"
+https://chausse.xyz/rss.xml "Website" "~Website: My personal Blog"
+https://lukesmith.xyz/rss.xml "Website" "~Website: Luke Smith's Blog"
+# https://www.ledevoir.com/rss/section/societe/science.xml "Website" "~Website: Le Devoir Sciences"
+# https://spacenews.com/feed/ "Website" "~Website: SpaceNews"
+
+# #---Facebook---# #
+https://bridge.noisebridge.info/?action=display&bridge=Facebook&context=User&u=LaDebarqueEscalade&media_type=all&limit=-1&format=Atom "Facebook" "~Facebook: La Debarque"
+
+# #---Flickr---# #
+https://www.flickr.com/services/feeds/photos_public.gne?id=130608600@N05&lang=en-us&format=rss_200 "Flickr" "~Flickr: Spacex Latest"
diff --git a/.config/nvim/UltiSnips/rnoweb.snippets b/.config/nvim/UltiSnips/rnoweb.snippets
new file mode 100644
index 0000000..4a52697
--- /dev/null
+++ b/.config/nvim/UltiSnips/rnoweb.snippets
@@ -0,0 +1,122 @@
+snippet \ "Begin/End Environments"
+\begin{${1:element}}
+${2:contents}
+\end{$1}
+
+endsnippet
+
+snippet v "Import R variable in LaTeX"
+\Sexpr{${1:var}}
+endsnippet
+
+snippet eqn "Floating Equation"
+\begin{eqfloat}[H]
+\begin{align}
+ ${3:E} &= ${4:mc^2}
+\end{align}
+cond$5
+\label{eqn:${2:title}}
+\caption{${1:A Title}}
+\end{eqfloat}
+
+endsnippet
+
+snippet x "Multiplication Dot"
+\cdot
+endsnippet
+
+snippet e "Scientific Notation"
+\cdot10^{${1:power}}
+endsnippet
+
+snippet cond "Conditions for Equations"
+\begin{conditions}
+ ${1:V} & ${2:Definition of V}
+\end{conditions}
+endsnippet
+
+snippet R "R Code"
+<<label='${1:label}',echo=${2:FALSE},results='${3:asis}'>>=
+${4:1+1}
+@
+endsnippet
+
+snippet csv "Import CSV in R"
+${1:variable_vame} <- read.csv("${2:path/to/file}.csv",
+header=${3:TRUE},
+sep="${4:;}"
+)
+
+endsnippet
+
+snippet xtable "Table made from R matrix"
+print(
+ xtable(${1:matrix_name},
+ caption="${2:Title of the table}",
+ label="tab:${3:table}",
+ digits=matrix($6
+ c(
+`!p
+from time import sleep
+try:
+ col = int(t[3])-1
+ paragraph = ""
+ for i in range(int(t[4])-1):
+ paragraph += " rep(0,"+str(col)+"), <++>,\n"
+ paragraph += " rep(0,"+str(col)+"), <++>"
+ snip.rv = paragraph
+except(ValueError):
+ sleep(1)
+# paragraph = ""
+# paragraph = " rep(0,"+t[3]+"), 0,\n"
+# for i in range(int(t[4])-2):
+# paragraph += " rep(0,"+t[3]+"), <++>,\n"
+# paragraph += " rep(0,"+t[3]+"), <++>"
+# snip.rv = paragraph
+`
+ ),
+ nrow=${5:6},
+ ncol=${4:3},
+ byrow=TRUE
+ ),
+ table.placement="H"
+ ),
+ include.rownames=FALSE,
+ table.placement="H"
+)
+
+endsnippet
+
+snippet img "Image"
+\begin{figure}[H]
+\begin{center}
+\includegraphics[scale=${1:1}]{${2:path/to/image}}
+\label{fig:${3/\s/_/g}}
+\caption{${3:A Title}}
+\end{center}
+\end{figure}
+endsnippet
+
+snippet b "Bold"
+\textbf{${1:text}}
+endsnippet
+
+snippet i "Italix"
+\textit{${1:text}}
+endsnippet
+
+snippet u "Underline"
+\uline{${1:text}}
+endsnippet
+
+snippet 1 "Section"
+\section{${1:Title}}
+endsnippet
+
+snippet 2 "Subsection"
+\subsection{${1:Title}}
+endsnippet
+
+snippet 3 "Subsubsection"
+\subsubsection{${1:Title}}
+endsnippet
diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim
new file mode 100755
index 0000000..5b11c2f
--- /dev/null
+++ b/.config/nvim/init.vim
@@ -0,0 +1,289 @@
+" _
+" (_)
+" __ ___ _ __ ___ _ __ ___
+" \ \ / / | '_ ` _ \| '__/ __|
+" \ V /| | | | | | | | | (__
+" \_/ |_|_| |_| |_|_| \___|
+"
+"
+" #---Plug Installer---# "
+if empty(glob('~/.vim/autoload/plug.vim'))
+ silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
+ \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
+ autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
+endif
+
+" #---Vim Plugins---# "
+call plug#begin()
+" if has('nvim')
+ " Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
+" else
+ " Plug 'Shougo/deoplete.nvim'
+ " Plug 'roxma/nvim-yarp'
+ " Plug 'roxma/vim-hug-neovim-rpc'
+" endif
+" Latex Deoplete source
+" Plug 'hisaknown/deoplete-latex'
+" Comment frames (for comment aesthetics)
+Plug 'cometsong/CommentFrame.vim'
+" Deoplete
+Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
+" Go Deoplete sources
+Plug 'stamblerre/gocode', { 'rtp': 'vim', 'do': '~/.vim/plugged/gocode/vim/symlink.sh' }
+Plug 'deoplete-plugins/deoplete-go', { 'do': 'make'}
+" LaTeX deoplete
+Plug 'hisaknown/deoplete-latex'
+" Turning vim into an R IDE
+Plug 'jalvesaq/Nvim-R'
+" Vim Sensible
+Plug 'tpope/vim-sensible'
+" Vim org tables
+Plug 'dhruvasagar/vim-table-mode'
+" Html linter enabler (for prettier AUR package)
+Plug 'dense-analysis/ale'
+" Vim Goyo
+Plug 'junegunn/goyo.vim'
+" Vim css hex highlight
+Plug 'chrisbra/Colorizer'
+" Bracket Completion
+Plug 'jiangmiao/auto-pairs'
+" csv filetype for vim
+Plug 'chrisbra/csv.vim'
+" Go developement
+Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }
+" sxhkd syntax
+Plug 'kovetskiy/sxhkd-vim'
+" Vim-Bling Search
+Plug 'ivyl/vim-bling'
+" Vim Hard Mode
+Plug 'wikitopian/hardmode'
+" I want to be a python ninja!
+Plug 'metakirby5/codi.vim'
+" Quickrun for python
+Plug 'thinca/vim-quickrun'
+" markdown preview vim
+Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install() }}
+" Emmet expansion for html
+Plug 'mattn/emmet-vim'
+" html preview
+Plug 'turbio/bracey.vim'
+" VimCompletesMe for VimTex
+Plug 'ajh17/VimCompletesMe'
+" Xresources colors
+Plug 'dylanaraps/wal.vim'
+" Nord colors
+Plug 'arcticicestudio/nord-vim'
+" My personal colorscheme
+Plug 'ChausseBenjamin/friffle-vim'
+" Vim Fugitive
+Plug 'tpope/vim-fugitive'
+" Vim-Surround
+Plug 'tpope/vim-surround'
+" Vim repeat for dot command on vim surround
+Plug 'tpope/vim-repeat'
+" Vimtex
+Plug 'lervag/vimtex'
+" C developement in vim
+Plug 'vim-scripts/c.vim'
+" NERDTree
+Plug 'scrooloose/nerdtree'
+" Git plugin for NERDTree
+Plug 'Xuyuanp/nerdtree-git-plugin'
+" Icons in NERDTree and Airline
+Plug 'ryanoasis/vim-devicons'
+" lightline
+Plug 'itchyny/lightline.vim'
+" Commentary
+Plug 'tpope/vim-commentary'
+" Vim markdown
+Plug 'godlygeek/tabular'
+" Ctrl-P fuzzy file finder
+Plug 'ctrlpvim/ctrlp.vim'
+" Vim snippet manager/tool
+Plug 'sirver/UltiSnips'
+" Vim snippet library
+Plug 'honza/vim-snippets'
+" Async shell commands
+Plug 'skywind3000/asyncrun.vim'
+" French grammar checker
+Plug 'dpelle/vim-Grammalecte'
+" All purpose grammar checker
+Plug 'dpelle/vim-LanguageTool'
+call plug#end()
+
+
+" #---Basics/Recomended---# "
+syntax on
+filetype plugin on
+set termguicolors
+set t_Co=256
+set encoding=utf-8
+set path+=** " Provides tab-completion for all file related tasks
+set wildmenu " Display all matching file when we tab complete
+" Spelling
+set complete+=kspell " Better Spell Checking
+set spelllang=fr
+nnoremap ;h <Esc>zg
+nnoremap ;j <Esc>]s
+nnoremap ;k <Esc>[s
+nnoremap ;l <Esc>z=1<CR><CR>
+nnoremap ;<Space> <Esc>z=1<CR><CR>
+" Enable autocompletion:
+ set wildmode=longest,list,full
+ set runtimepath+=~/.config/nvim/plugged/deoplete.nvim
+ let g:deoplete#enable_at_startup = 1
+" Splits open at the bottom and right, which is non-retarded, unlike vim defaults.
+set splitbelow splitright
+set rtp+=/usr/local/opt/fzf " Fuzzy File Finder
+set t_vi= " Autohide the cursor
+" Automatic wordwrap without creating newlines!
+set wrap
+set linebreak
+
+" #---Plugin Preferences---# "
+" Nvim-R
+let R_rconsole_width = 0
+" Emmet Expansion
+let g:user_emmet_leader_key=','
+" Enable kite autocompletion
+let g:kite_auto_complete=1
+" MarkdownPreview
+" let g:mkdp_browser = 'surf'
+" Bracey
+let g:bracey_browser_command = "chromium"
+" Grammalecte path
+let g:grammalecte_cli_py = "/usr/bin/grammalecte-cli"
+" Ale Linter with prettier
+let g:ale_linters_explicit = 1
+" autocmd BufWrite, *.css,*.html,*.js :ALEFix prettier
+" Ultisnips
+ " Trigger configuration. Do not use <tab> if you use https://github.com/Valloric/YouCompleteMe.
+ let g:UltiSnipsExpandTrigger="<Tab>"
+ let g:UltiSnipsJumpForwardTrigger=";<Space>"
+ let g:UltiSnipsJumpBackwardTrigger=";n"
+ " If you want :UltiSnipsEdit to split your window.
+ let g:UltiSnipsEditSplit="vertical"
+ " Snippet directory
+ let g:UltiSnipsSnippetDirectories=[$HOME.'/.config/nvim/UltiSnips']
+" Go deoplete
+let g:deoplete#sources#go#gocode_binary = '$GOPATH/bin/gocode'
+" Hexokinase
+let g:Hexokinase_highlighters = ['virtual']
+" GoRun Split Reuse
+function! ReuseVimGoTerm(cmd) abort
+ for w in nvim_list_wins()
+ if "goterm" == nvim_buf_get_option(nvim_win_get_buf(w), 'filetype')
+ call nvim_win_close(w, v:true)
+ break
+ endif
+ endfor
+ execute a:cmd
+endfunction
+let g:go_term_enabled = 1
+let g:go_term_mode = "silent keepalt rightbelow 35 vsplit"
+let g:go_def_reuse_buffer = 1
+autocmd FileType go nmap <leader>r :call ReuseVimGoTerm('GoRun')<Return>
+" Vimtex pdf viewer
+let g:latex_view_general_viewer = 'zathura'
+let g:vimtex_view_method = "zathura"
+
+" #---Document Compilation/Visualisation---# "
+" Compile document, be it groff/LaTeX/markdown/etc.
+map <leader>c :w! \| AsyncRun compiler <c-r>%<CR><CR>
+autocmd InsertLeave,TextChanged *.gd,*.ms,*.mom :w! | :execute 'silent AsyncRun compiler %'
+" autocmd InsertLeave *.rmd,*.rnw,*.tex :w! | :execute 'silent AsyncRun compiler %; todotable % TODO FIXME CHANGED XXX IDEA HACK NOTE REVIEW NB BUG QUESTION COMBAK'
+autocmd VimLeave *.rmd,*.rnw,*.tex !texclear %
+map <leader>x :w! \| AsyncRun todotable <c-r>% TODO FIXME CHANGED XXX IDEA HACK NOTE REVIEW NB BUG QUESTION COMBAK TEMP<CR><CR>
+" Open corresponding .pdf/.html or preview
+ map <leader>p :! opout <c-r>%<CR><CR>
+" Open corresponding .pdf/.html or preview
+ map <leader>o :! tdout <c-r>%<CR><CR>
+" Width tabstop
+set tabstop=2
+" when indenting with '>', use 4 spaces width
+set shiftwidth=2
+
+" #---Custom Keymaps---# "
+" Tab Buffer Navigation
+ nnoremap <S-k> :bp<CR>
+ nnoremap <S-j> :bn<CR>
+" Vim split resize
+ map <Up> <Esc>:resize<Space>+3<CR>
+ map <Down> <Esc>:resize<Space>-3<CR>
+ map <Left> <Esc>:vertical<Space>resize<Space>-3<CR>
+ map <Right> <Esc>:vertical<Space>resize<Space>+3<CR>
+ map <C-_> <Esc>:split<CR>
+ map <C-\> <Esc>:vsplit<CR>
+" Ninja python execution
+ map <F5> <Esc>:Codi!!<CR>
+ map <F6> <Esc>:QuickRun<CR>
+" Shortcutting split navigation, saving a keypress:
+ map <C-h> <C-w>h
+ map <C-j> <C-w>j
+ map <C-k> <C-w>k
+ map <C-l> <C-w>l
+" Create blank lines using Shift J and Shift K
+ nnoremap J o<Esc>
+ nnoremap K O<Esc>
+" Figlet dotfile titles
+command RcTitle .!figlet -s -f big
+" Easily escape terminal mode
+tnoremap <Esc> <C-\><C-n>
+" Pressing shift semicolon was too long:
+nnoremap <Space> :
+" Fastest :w in the west
+nnoremap <leader>w :w<CR>
+" #---Visual Enhancements---# "
+colorscheme friffle
+" Remove latex underscore errors
+let g:tex_no_error=1
+" let g:airline_powerline_fonts = 1
+" Lightline config
+let g:lightline = {
+ \ 'colorscheme': 'friffle',
+ \ }
+set noshowmode
+" Vim-go breakpoints and debug
+nnoremap mp :GoDebugBreakpoint<CR>
+nnoremap mn :GoDebugNext<CR>
+nnoremap ms :GoDebugStart<CR>
+nnoremap mq :GoDebugStop<CR>
+
+" #---Ease Of Use---# "
+" Normal/relative number toggle
+set number relativenumber
+augroup numbertoggle
+ autocmd!
+ autocmd BufEnter,FocusGained,InsertLeave * set relativenumber
+ autocmd BufLeave,FocusLost,InsertEnter * set norelativenumber
+augroup END
+" Remove all trailing spaces upon write {{{
+autocmd BufWritePre * %s/\s\+$//e
+" Soft Tabs
+filetype plugin indent on
+" NERDTRee Hotkey map
+map <C-n> :NERDTreeToggle<CR>
+ let NERDTreeDirArrowExpandable="|"
+ let NERDTreeDirArrowCollapsible="-"
+" Close vim if the only window left open is a NERDTree
+autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
+" Other NERDTree Preferences
+let NERDTreeMinimalUI = 1
+let NERDTreeDirArrows = 1
+let NERDTreeShowBookmarks=1
+let NERDTreeAutoDeleteBuffer = 1
+let NERDTreeQuitOnOpen = 1
+" Nvim-R send line
+nmap <C-Enter> <leader>l
+" Nvim folding
+ let r_syntax_folding = 1
+ set foldnestmax=1
+
+
+" #---Universal Macros---# "
+" Create and navigate Markers
+" inoremap ;m <++>
+inoremap ;; <Esc>/<++><CR>"_c4l
+inoremap << «
+inoremap >> »
+" #---Filetype Specific Settings---# "
diff --git a/.config/picom.conf b/.config/picom.conf
new file mode 100644
index 0000000..433f984
--- /dev/null
+++ b/.config/picom.conf
@@ -0,0 +1,47 @@
+# Blur
+blur-background = false;
+# blur-method = "kawase";
+blur-strength = 4;
+
+# Fading
+fading = false;
+fade-in-step = 0.05;
+fade-out-step = 0.05;
+fade-exclude = [ ];
+
+# Rounded Corners
+ corner-radius = 11;
+rounded-corners-exclude = [
+ "class_g = 'dwm'",
+];
+
+# Other
+mark-wmwin-focused = true;
+mark-ovredir-focused = true;
+# use-ewmh-active-win = true;
+detect-rounded-corners = true;
+detect-client-opacity = true;
+refresh-rate = 0;
+vsync = true;
+dbe = false;
+# sw-opti = true;
+unredir-if-possible = false;
+# unredir-if-possible-delay = 5000;
+# unredir-if-possible-exclude = [ ];
+focus-exclude = [ "class_g = 'Cairo-clock'" ];
+detect-transient = true;
+detect-client-leader = true;
+invert-color-include = [ ];
+use-damage = true;
+# resize-damage = 1;
+
+# GLX backend
+backend = "glx";
+glx-no-stencil = true;
+glx-copy-from-front = false;
+glx-swap-method = "undefined";
+glx-no-rebind-pixmap = true;
+# glx-use-copysubbuffermesa = true;
+glx-use-gpushader4 = true;
+xrender-sync = true;
+xrender-sync-fence = true;
diff --git a/.config/shortcutrc b/.config/shortcutrc
new file mode 100644
index 0000000..58c5364
--- /dev/null
+++ b/.config/shortcutrc
@@ -0,0 +1,34 @@
+# _____ _ _ _
+# / ____| | | | | |
+# | (___ | |__ ___ _ __| |_ ___ _ _| |_ _ __ ___
+# \___ \| '_ \ / _ \| '__| __/ __| | | | __| '__/ __|
+# ____) | | | | (_) | | | || (__| |_| | |_| | | (__
+# |_____/|_| |_|\___/|_| \__\___|\__,_|\__|_| \___|
+#
+
+
+
+# #---Universal Shortcut Configuration File---# #
+# First column should have the directory's Label
+# Second column should contain the shortcut itself
+# (without the modifier)
+# Third column should contain the directory itself
+# (It can contain environmental variables)
+
+|----------------+-----+--------------------------------------------------|
+| Bibliographies | bb | $HOME/Dropbox/A/Scholar/All/References |
+| Config | cf | $HOME/.config |
+| Downloads | dl | $HOME/Dropbox/Downloads |
+| Dropbox | db | $HOME/Dropbox |
+| Music | ms | $HOME/Music |
+| Neovim | vi | $HOME/.config/nvim |
+| Personnal | ps | $HOME/Dropbox/A/Personnal/ |
+| Wallpapers | wp | $HOME/Dropbox/A/Personnal/Photos/Wallpapers |
+| RSS | rss | $HOME/.config/newsboat |
+| Scholar | sf | $HOME/Dropbox/A/Scholar/1-CEGEP/Courses/session5 |
+| Workspace | ws | $HOME/Workspace |
+| Scripts | sc | $HOME/.scripts |
+| Hotkeys | sx | $HOME/.config/sxhkd |
+| Images | img | $HOME/Dropbox/A/Personnal/Photos/unsorted |
+| Compilation | cmp | $HOME/Compilation |
+|----------------+-----+--------------------------------------------------|
diff --git a/.config/sxhkd/sxhkdrc b/.config/sxhkd/sxhkdrc
new file mode 100644
index 0000000..9e0742d
--- /dev/null
+++ b/.config/sxhkd/sxhkdrc
@@ -0,0 +1,257 @@
+# _ _ _
+# | | | | | |
+# _____ _| |__ | | ____| |
+# / __\ \/ / '_ \| |/ / _` |
+# \__ \> <| | | | < (_| |
+# |___/_/\_\_| |_|_|\_\__,_|
+#
+#
+
+# Commands are procedurally added to the manual.
+
+# To do so, for every command, add a line starting
+# with `##` which has a generic description of what
+# the command does.
+
+# The pdf will associate it with the binding BELOW IT.
+
+# `#` followed by a space will be ignored and treated
+# as regular comments.
+
+# `#-#` at the beggining of a line will be converted to
+# a header in the manual.
+
+#-# dwm #-#
+## Quit dwm
+super + shift + q
+ dwmc quit
+## Toggle the dwm bar
+super + b
+ dwmc togglebar
+## Change layout to {tiling, monocle}
+super + {_,shift} t
+ dwmc setlayoutex {0,2}
+## Change layout to {grid, floating}
+super + {_,shift} g
+ dwmc setlayoutex {5,1}
+## Change layout to {centeredmaster, floatingcenteredmaster}
+super + {_,shift} m
+ dwmc setlayoutex {3,4}
+## Make window fullscreen
+super + f
+ dwmc togglefullscr
+## Make current window floating
+super + shift + space
+ dwmc togglefloating
+## Cycle up and down the window stack (change focus)
+super + {j,k}
+ dwmc focusstack {+,-}1
+## Rotate clockwise/counterclockwise the window stack
+super + shift + {j,k}
+ dwmc rotatestack {+,-}1
+## Move current window up/down the stack
+super + shift + {h,l}
+ dwmc movestack {-,+}1
+## Change focus to/swap the master window
+super + {_, shift} + s
+ dwmc {focusmaster, zoom}
+## Add/Remove windows from the master stack
+super + {_,shift} + i
+ dwmc incnmaster {+,-}1
+## Increase/Decrease master stack width
+super + {h,l}
+ dwmc setmfact {-,+}0.05
+## Toggle view next tag
+super + Tab
+ dwmc view
+## Cycle forward/backward through monitor focus
+super + {comma,period}
+ dwmc focusmon {-,+}1
+## Move current window to previous/next monitor
+super + shift + {comma,period}
+ dwmc tagmon {-,+}1
+## View all tags
+super + 0
+ dwmc viewall
+## Move current window to tag {1-9}
+super + shift + {1-9}
+ dwmc tagex {0-8}
+## Only view the tag {1-9}
+super + {1-9}
+ dwmc viewex {0-8}
+## Toggle the visibility tag {1-9}
+super + alt + {1-9}
+ dwmc toggleviewex {0-8}
+## Toggle (pin/unpin) the current window on tag {1-9}
+alt + {1-9}
+ dwmc toggletagex {0-8}
+## Pin current window to all tags
+super + shift + 0
+ dwmc tagall
+# ## Decrease/increase gaps
+# super + {minus, shift + equal}
+# dwmc setgaps {-,+}1
+# ## Set gaps to zero
+# super + equal
+# dwmc setgaps 0
+
+#-# Miscellaneous #-#
+## Quit Current App
+super + q
+ kill -15 `xdotool getwindowfocus getwindowpid`
+## Change Keyboard Layout
+alt + Return
+ layouttoggle
+## Find your cursor
+super + BackSpace
+ find-cursor -l 4 -c "#66aabb" -s 150
+## Toggle Compositor
+super + c
+ killall picom || setsid picom
+## Toggle Screenkey
+super + Insert
+ killall screenkey || screenkey --bg-color "#222d32" -s small -f HackGen -t 1 --font-color "#BABABA"
+## Open this manual
+super + alt + shift + h
+ $SCRIPTS/generation/manualgen
+## Start colorpicker
+super + shift + c
+ $SCRIPTS/handling/colorhandler
+
+#-# Standard Applications #-#
+## Terminal window
+super + Return
+ $TERMINAL
+## Default Browser
+super + w
+ $BROWSER
+## TUI Email Client (neomutt)
+super + e
+ killall neomutt || $TERMINAL -e neomutt ; $SCRIPTS/cron/dwmbar
+## TUI Calendar (calcurse)
+super + shift + e
+ killall calcurse || $TERMINAL -t dropdown_calendar -e calcurse
+## TUI RSS Reader (newsboat)
+super + n
+ killall newsboat || $TERMINAL -e newsboat ; $SCRIPTS/cron/dwmbar
+
+#-# Floating Apps/Utilities #-#
+## Network Manager
+super + shift + n
+ killall nmtui || dropdowntoggle network nmtui
+## TUI Audio Mixer (alsamixer)
+super + p
+ killall alsamixer || dropdowntoggle audio alsamixer -c 0
+## TODOs (todotxt-machine)
+super + space
+ killall todotxt-machine || dropdowntoggle todos todotxt-machine
+## Terminal Calculator
+super + a
+ dropdowntoggle calc tmux-r
+## Terminal Shell
+super + shift + a
+ dropdowntoggle shell tmux-shell
+## TUI Youtube (youtube-viewer)
+super + v
+ killall youtube || dropdowntoggle youtube tmux-yt-viewer
+## TUI Hacker News
+super + shift + v
+ killall hacker-news || dropdowntoggle hacker-news tmux-hn
+## Webcam
+super + shift + w
+ $SCRIPTS/utilities/camtoggle
+## Force Start VLC Podcast
+super + shift + p
+ $SCRIPTS/utilities/tmux-vlc
+
+#-# Prompts (dmenu) #-#
+## Application Launcher
+alt + d
+ j4-dmenu-desktop
+## Power Utility
+alt + q
+ powermenu
+## Quickly Search Google
+alt + shift + d
+ websearch
+## Open a bookmark in surf
+alt + shift + o
+ surfmenu
+## Emoji & Font-Awesome Selector
+alt + grave
+ emoji-copy
+## Mount/Unmount Devices Utility
+alt + {_,shift} + m
+ { mountmenu, umountmenu }
+## Recording Utility
+alt + r
+ recordmenu kill || recordmenu
+## Preview Fonts
+alt + f
+ fontpreview
+## Start SSH session
+alt + s
+ $SCRIPTS/handling/pickssh
+
+#-# PrintScreen Utilities #-#
+## Entire Screen
+Print
+ scrot -q 100 -z && notify-send -i "$HOME/.fonts/svg/image.svg" -a Screenshot "Full screenshot completed"
+## Current window
+alt + Print
+ scrot -q 100 -u -z && notify-send -i "$HOME/.fonts/svg/image.svg" -a Screenshot "Window screenshot completed"
+## Cursor Selection
+super + Print
+ scrot -q 100 -s -z && notify-send -i "$HOME/.fonts/svg/image.svg" -a Screenshot "Selection screenshot completed"
+
+#-# Special Keys #-#
+## Increase/decrease Volume
+{XF86AudioRaiseVolume, XF86AudioLowerVolume}
+ volumectl 5 {+,-}
+## Max-Out Volume
+shift + XF86AudioRaiseVolume
+ volumectl 100
+## Set Volume to 5 percent
+shift + XF86AudioLowerVolume
+ volumectl 5
+## Mute Audio
+XF86AudioMute
+ volumectl mute
+## Quit Current App
+super + q
+ kill -15 `xdotool getwindowfocus getwindowpid`
+## Increase/decrease Brightness
+{XF86MonBrightnessUp, XF86MonBrightnessDown}
+ xbacklight -time 50 -fps 60 -{inc,dec} 5 && screenstatus
+## Max-Out Brightness
+shift + XF86MonBrightnessUp
+ xbacklight -time 100 -fps 60 -set 100 && screenstatus
+## Set Brightness to 5 percent
+shift + XF86MonBrightnessDown
+ xbacklight -time 100 -fps 60 -set 5 && screenstatus
+## Display Setup Utility (mirror or extend displays)
+XF86Display
+ displaymenu
+## Disable Trackpad
+XF86Favorites
+ trackpadtoggle 0
+## Enable Trackpad
+shift + XF86Favorites
+ trackpadtoggle 1
+## Unmount Devices
+shift + XF86Tools
+ umountmenu
+## Mount Devices
+XF86Tools
+ mountmenu
+
+#-# Music Controls (using `playerctl`) #-#
+## Next/Previous Song (using playerctl)
+super + {bracketright, bracketleft}
+ playerctl {next, previous}
+## Higher/Lower music volume (using pla)
+super + shift + {bracketright, bracketleft}
+ playerctl volume 5 {+, -}
+## Toggle music playback
+super + backslash
+ playerctl play-pause
diff --git a/.config/todotxt-machine/config b/.config/todotxt-machine/config
new file mode 100644
index 0000000..1eca896
--- /dev/null
+++ b/.config/todotxt-machine/config
@@ -0,0 +1,51 @@
+[settings]
+file = ~/Dropbox/TODOtxt/InitialFiles/todo.txt-cli/todo.txt
+archive = ~/Dropbox/TODOtxt/InitialFiles/todo.txt-cli/done.txt
+auto-save = True
+show-toolbar = True
+show-filter-panel = False
+enable-borders = True
+enable-word-wrap = True
+colorscheme = myawesometheme
+[colorscheme-myawesometheme]
+plain=h250
+selected=,h238
+header_todo_count=h37
+header_todo_pending_count=h222
+header_todo_done_count=h188
+header_file=h244
+dialog_background=,h248
+dialog_color=,h240
+dialog_shadow=,h238
+footer=h39,h236
+search_match=h222,h236
+completed=h59
+context=h39
+project=h214
+creation_date=h135
+due_date=h37
+priority_a=h131
+priority_b=h222
+priority_c=h109
+priority_d=h139
+priority_e=h244
+priority_f=h244
+priority_g=h244
+priority_h=h244
+priority_i=h244
+priority_j=h244
+priority_k=h244
+priority_l=h244
+priority_m=h244
+priority_n=h244
+priority_o=h244
+priority_p=h244
+priority_q=h244
+priority_r=h244
+priority_s=h244
+priority_u=h244
+priority_v=h244
+priority_w=h244
+priority_x=h244
+priority_y=h244
+priority_z=h244
diff --git a/.config/vifm/colors/Default.vifm b/.config/vifm/colors/Default.vifm
new file mode 100644
index 0000000..fcfd799
--- /dev/null
+++ b/.config/vifm/colors/Default.vifm
@@ -0,0 +1,83 @@
+" You can edit this file by hand.
+" The " character at the beginning of a line comments out the line.
+" Blank lines are ignored.
+
+" The Default color scheme is used for any directory that does not have
+" a specified scheme and for parts of user interface like menus. A
+" color scheme set for a base directory will also
+" be used for the sub directories.
+
+" The standard ncurses colors are:
+" Default = -1 = None, can be used for transparency or default color
+" Black = 0
+" Red = 1
+" Green = 2
+" Yellow = 3
+" Blue = 4
+" Magenta = 5
+" Cyan = 6
+" White = 7
+
+" Light versions of colors are also available (set bold attribute):
+" LightBlack
+" LightRed
+" LightGreen
+" LightYellow
+" LightBlue
+" LightMagenta
+" LightCyan
+" LightWhite
+
+" Available attributes (some of them can be combined):
+" bold
+" underline
+" reverse or inverse
+" standout
+" italic (on unsupported systems becomes reverse)
+" none
+
+" Vifm supports 256 colors you can use color numbers 0-255
+" (requires properly set up terminal: set your TERM environment variable
+" (directly or using resources) to some color terminal name (e.g.
+" xterm-256color) from /usr/lib/terminfo/; you can check current number
+" of colors in your terminal with tput colors command)
+
+" highlight group cterm=attrs ctermfg=foreground_color ctermbg=background_color
+
+highlight clear
+
+highlight Win cterm=none ctermfg=white ctermbg=black
+highlight Directory cterm=bold ctermfg=cyan ctermbg=default
+highlight Link cterm=bold ctermfg=yellow ctermbg=default
+highlight BrokenLink cterm=bold ctermfg=red ctermbg=default
+highlight Socket cterm=bold ctermfg=magenta ctermbg=default
+highlight Device cterm=bold ctermfg=red ctermbg=default
+highlight Fifo cterm=bold ctermfg=cyan ctermbg=default
+highlight Executable cterm=bold ctermfg=green ctermbg=default
+highlight Selected cterm=bold ctermfg=magenta ctermbg=default
+highlight CurrLine cterm=bold,reverse ctermfg=default ctermbg=default
+highlight TopLine cterm=none ctermfg=black ctermbg=white
+highlight TopLineSel cterm=bold ctermfg=black ctermbg=default
+highlight StatusLine cterm=bold ctermfg=black ctermbg=white
+highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black
+highlight CmdLine cterm=none ctermfg=white ctermbg=black
+highlight ErrorMsg cterm=none ctermfg=red ctermbg=black
+highlight Border cterm=none ctermfg=black ctermbg=white
+highlight JobLine cterm=bold,reverse ctermfg=black ctermbg=white
+highlight SuggestBox cterm=bold ctermfg=default ctermbg=default
+highlight CmpMismatch cterm=bold ctermfg=white ctermbg=red
+highlight AuxWin cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight TabLine cterm=none ctermfg=white ctermbg=black
+highlight TabLineSel cterm=bold,reverse ctermfg=default ctermbg=default
+highlight User1 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User2 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User3 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User4 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User5 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User6 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User7 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User8 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User9 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight OtherWin cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+
+" vim: ft=vim
diff --git a/.config/vifm/colors/minimal.vifm b/.config/vifm/colors/minimal.vifm
new file mode 100644
index 0000000..e53c921
--- /dev/null
+++ b/.config/vifm/colors/minimal.vifm
@@ -0,0 +1,26 @@
+" colortheme
+highlight clear
+
+highlight Win cterm=none ctermfg=255 ctermbg=none
+highlight Directory cterm=bold ctermfg=12 ctermbg=default
+highlight Link cterm=bold ctermfg=216 ctermbg=default
+highlight BrokenLink cterm=bold ctermfg=9 ctermbg=default
+highlight Socket cterm=bold ctermfg=10 ctermbg=default
+highlight Device cterm=bold ctermfg=9 ctermbg=default
+highlight Fifo cterm=bold ctermfg=150 ctermbg=default
+highlight Executable cterm=none ctermfg=150 ctermbg=default
+highlight Selected cterm=none ctermfg=255 ctermbg=236
+highlight CurrLine cterm=reverse
+highlight TopLine cterm=none ctermfg=255 ctermbg=none
+highlight TopLineSel cterm=bold ctermfg=110 ctermbg=none
+highlight StatusLine cterm=none ctermfg=15 ctermbg=none
+highlight WildMenu cterm=reverse ctermfg=255 ctermbg=black
+highlight CmdLine cterm=none ctermfg=255 ctermbg=none
+highlight ErrorMsg cterm=none ctermfg=203 ctermbg=none
+highlight Border cterm=none ctermfg=black ctermbg=none
+highlight JobLine cterm=bold,reverse ctermfg=black ctermbg=255
+highlight SuggestBox cterm=bold ctermfg=255 ctermbg=default
+highlight CmpMismatch cterm=bold ctermfg=255 ctermbg=9
+highlight AuxWin cterm=bold,reverse ctermfg=default ctermbg=default
+
+" vim: ft=vim
diff --git a/.config/vifm/scripts/vifmimg b/.config/vifm/scripts/vifmimg
new file mode 100755
index 0000000..e45a903
--- /dev/null
+++ b/.config/vifm/scripts/vifmimg
@@ -0,0 +1,97 @@
+#!/usr/bin/env bash
+readonly ID_PREVIEW="preview"
+
+# Preview an image file directly
+function draw() {
+ declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW"
+ [x]="$2" [y]="$3" [width]="$4" [height]="$5" \
+ [path]="${PWD}/$6") \
+ > "$FIFO_UEBERZUG"
+}
+
+function font_preview() {
+ # if no preview found, generate one
+ if [ ! -f "/tmp${PWD}/$6.png" ]; then
+ fontpreview -i "$6" -o "/tmp${PWD}/$6.png"
+ fi
+ declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW"
+ [x]="$2" [y]="$3" [width]="$4" [height]="$5" \
+ [path]="/tmp${PWD}/$6.png") \
+ > "$FIFO_UEBERZUG"
+}
+
+function pdf_preview() {
+ # if no preview found, generate one
+ if [ ! -f "/tmp${PWD}/$6.png" ]; then
+ pdftoppm -png -singlefile "$6" "/tmp${PWD}/$6"
+ fi
+ declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW"
+ [x]="$2" [y]="$3" [width]="$4" [height]="$5" \
+ [path]="/tmp${PWD}/$6.png") \
+ > "$FIFO_UEBERZUG"
+}
+
+function audio_preview() {
+ # if no preview found, generate one
+ if [ ! -f "/tmp${PWD}/$6.png" ]; then
+ ffmpeg -i "$6" "/tmp${PWD}/$6.png" -y &> /dev/null
+ fi
+ declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW"
+ [x]="$2" [y]="$3" [width]="$4" [height]="$5" \
+ [path]="/tmp${PWD}/$6.png") \
+ > "$FIFO_UEBERZUG"
+}
+
+function video_preview() {
+ # if no preview found, generate one
+ if [ ! -f "/tmp${PWD}/$6.png" ]; then
+ ffmpegthumbnailer -i "${PWD}/$6" -o "/tmp${PWD}/$6.png" -s 0 -q 10
+ fi
+ declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW"
+ [x]="$2" [y]="$3" [width]="$4" [height]="$5" \
+ [path]="/tmp${PWD}/$6.png") \
+ > "$FIFO_UEBERZUG"
+}
+
+function epub_preview() {
+ if [ ! -f "/tmp$PWD/$6.png" ]; then
+ epub-thumbnailer "$6" "/tmp$PWD/$6.png" 1024
+ fi
+ declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW"
+ [x]="$2" [y]="$3" [width]="$4" [height]="$5" \
+ [path]="/tmp$PWD/$6.png") \
+ > "$FIFO_UEBERZUG"
+}
+
+# clear preview image
+function clear_preview() {
+ declare -p -A cmd=([action]=remove [identifier]="$ID_PREVIEW") \
+ > "$FIFO_UEBERZUG"
+}
+
+# Check all the dependencies that are needed to show all the file previews.
+# The reason why we are sending a notification incase a dependency does not
+# exist is because that is the easiest way to get the user's attention.
+dependencies=(ffmpeg ffmpegthumbnailer fontpreview pdftoppm epub-thumbnailer)
+for dependency in "${dependencies[@]}"; do
+ type -p "$dependency" &>/dev/null || {
+ notify-send "vifm" "Could not find '${dependency}', is it installed?"
+ exit 1
+ }
+done
+
+
+# Make sure ueberzug's fifo exists
+if [ -e "$FIFO_UEBERZUG" ]; then
+ # Make a temp dir for rendering if not exists
+ [ ! -d "/tmp${PWD}/" ] && mkdir -p "/tmp${PWD}/"
+ case "$1" in
+ draw) draw "$@" ;;
+ font) font_preview "$@" ;;
+ pdf) pdf_preview "$@" ;;
+ video) video_preview "$@" ;;
+ clear) clear_preview ;;
+ audio) audio_preview "$@" ;;
+ epub) epub_preview "$@" ;;
+ esac
+fi
diff --git a/.config/vifm/vifm-help.txt b/.config/vifm/vifm-help.txt
new file mode 100644
index 0000000..d488065
--- /dev/null
+++ b/.config/vifm/vifm-help.txt
@@ -0,0 +1,6103 @@
+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.
+
+ <path> Starts Vifm in the specified path.
+
+ <path> <path>
+ Starts Vifm in the specified paths.
+
+ Specifying two directories triggers split view even when vifm was in
+ single-view mode on finishing previous session. To suppress this be-
+ haviour :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 <path>
+ 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 <path>|-
+ Sets output file to write selection into on exit instead of
+ opening files. "-" means standard output. Use empty value to
+ disable it.
+
+ --choose-dir <path>|-
+ Sets output file to write last visited directory into on exit.
+ "-" means standard output. Use empty value to disable it.
+
+ --delimiter <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 <command>
+ 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[=<startup log path>]
+ 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>
+ 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 <command> or +<com-
+ mand> 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 <command> or +<command>
+ Run command-line mode <command> 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 launches a file,
+ otherwise move right one file.
+
+ 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.
+
+ 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.
+
+
+ [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]!<selector>
+ 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, <tab> and <c-i> switch active
+ pane just like <space> does, otherwise it goes forward through
+ directory history of current view. Nonexistent directories are
+ automatically skipped.
+
+ Ctrl-G create a window showing detailed information about the current
+ file.
+
+ Shift-Tab
+ enters 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).
+
+ 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<selector>
+ 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<selector>
+ 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}).
+
+ [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<selector>, 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 session (does nothing right after startup or :restart com-
+ mand). 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 to 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<Enter>
+
+ 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 stdout like "ls" create an error message showing
+ partial output 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.
+
+ :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.
+
+ :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.
+
+ :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.
+
+ :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]
+ create a menu window to alter a files properties.
+
+ :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.
+
+ :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.
+
+ :com[mand] beginning
+ display user defined commands that start with the beginning.
+
+ :com[mand] name action
+ set a new user command.
+ Trying to use a reserved command name will result in an error
+ message.
+ Use :com[mand]! to overwrite a previously set command.
+ Unlike vim user commands do not have to start with a capital
+ letter. User commands are run in a shell by default. To run a
+ command in the background you must set it as a background com-
+ mand with & at the end of the commands action (:com rm rm %f &).
+ Command name cannot contain numbers or special symbols (except
+ '?' and '!').
+
+ :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] cmd :commands
+ set kind of an alias for internal command (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.
+
+ :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.
+
+ :echo
+
+ :ec[ho] [<expr>...]
+ evaluate each argument as an expression and output them sepa-
+ rated with a space. See help on :let command for a definition
+ of <expr>.
+
+ :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] [<expr>...]
+ 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 <expr>.
+
+ :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.
+
+ :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.
+ See also "Automatic 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. See also "Automatic FUSE
+ mounts" section 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 presence of $DIS-
+ PLAY 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-<something>
+ 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')
+ - TopLineSel - top line color of the current pane
+ - TopLine - top line color of the other 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
+ - Selected - color of selected files
+ - Directory - color of directories
+ - Link - color of symbolic links in the views
+ - BrokenLink - color of broken symbolic links
+ - 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
+ File name specific highlights
+ Directory
+ Link
+ BrokenLink
+ Socket
+ Device
+ Fifo
+ Executable
+ Selected
+ CurrLine
+ OtherLine
+ TopLine
+ TopLineSel
+ TabLineSel (for pane tabs)
+ TabLine
+ TabLineSel
+
+ "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]
+ creates a pop-up menu of directories visited.
+
+ :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 renaming).
+ fi[lter] or = show filter history (see description of the "="
+ normal mode command).
+
+ :histnext
+
+ :histnext
+ same as <c-i>. The main use case for this command is to work
+ around the common pain point of <tab> and <c-i> 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 <f1> :histnext<cr>` in vifm, add "t" flag to the
+ 'cpoptions', and thus have both <c-i> and <tab> working as ex-
+ pected.
+
+ :histprev
+
+ :histprev
+ same as <c-o>.
+
+ :if
+
+ :if {expr1}
+ starts 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 shows menu of current backgrounded processes.
+
+ :let
+
+ :let $ENV_VAR = <expr>
+ sets environment variable. Warning: setting environment vari-
+ able to an empty string on Windows removes it.
+
+ :let $ENV_VAR .= <expr>
+ append value to environment variable.
+
+ :let &[l:|g:]opt = <expr>
+ sets option value.
+
+ :let &[l:|g:]opt .= <expr>
+ append value to string option.
+
+ :let &[l:|g:]opt += <expr>
+ increasing option value, adding sub-values.
+
+ :let &[l:|g:]opt -= <expr>
+ decreasing option value, removing sub-values.
+
+ Where <expr> 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.
+
+ :locate
+ repeats 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
+ displays a menu with list of files in trash. Each element of
+ the list is original path of a deleted file, thus the list can
+ contain duplicates.
+
+ :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.
+
+ :marks list ...
+ display the contents of the marks that are mentioned in list.
+
+ :media
+
+ :media only for *nix
+ display media management menu. 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
+ <esc> or <c-c> 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 changes 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 and vifmrc files and run startup commands passed in the
+ argument list, thus losing all unsaved changes (e.g. recent his-
+ tory or keys mapped in current session).
+
+ While many things get reset, some basic UI state and current lo-
+ cations are preserved, including tabs.
+
+ :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.
+
+ :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, when one can se-
+ lect primary sorting key. When 'viewcolumns' options is empty
+ and 'lsview' is off, changing primary sorting key will also af-
+ fect view look (in particular the second column of the view will
+ be changed).
+
+ :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.
+
+ :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.
+
+ :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. See also 'quickview' op-
+ tion.
+
+ :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.
+
+ :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 vifminfo file.
+
+ :wq
+
+ :wq[!] same as :quit, but ! only disables check of backgrounded com-
+ mands. :wqall
+
+ :wqa[ll][!]
+ same as :qall, but ! only disables check of backgrounded com-
+ mands.
+
+ :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.
+
+ %F %"F All of the selected files in the other directory list.
+
+ %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<Enter>
+ will list the directory contents of the current directory.
+
+ :lsl filename<Enter>
+ 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.
+
+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. [!]<comma-separated-mime-type-globs>
+
+ 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:
+ <text/plain>{*.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:
+ <text/plain>{*.vifm},<application/pdf>{*.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.
+
+: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, <tab> (thus <c-i>) behave as <space> and
+ switches active pane, otherwise <tab> and <c-i> go forward in
+ the view history. It's possible to make both <tab> and <c-i> to
+ work as expected by setting up the terminal to emit a custom se-
+ quence when <c-i> 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
+ 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
+
+ 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<tab>).
+
+ '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
+ Highlight all matches of search pattern.
+
+ '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)
+ and characters after f and F commands. It doesn't affect file
+ filtering.
+
+ '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
+ %% - 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.
+
+ Example:
+
+ set rulerformat='%2l-%S%[ +%x%]'
+
+ 'runexec'
+ type: boolean
+ default: false
+ Run executable file on Enter or l.
+
+ '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).
+
+ '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.
+
+ '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 the search pattern contains
+ at least one upper case character. Only used when ignorecase
+ option is enabled. It doesn't affect file filtering.
+
+ '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 to use for
+ group sorting, double comma is literal comma. Each expression
+ should contain at least one group or its value will be consid-
+ ered to be always empty. Only first match of each regular ex-
+ pression is considered. Groups are considered from right to
+ first similar to 'sort', first group divides list of files into
+ sub-groups, each of which is sorted by the second group and so
+ on.
+
+ Example:
+ set sortgroups=-(done|todo).*
+ this would put files with "-done" in their names above all files
+ with "-todo".
+
+ '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
+
+ - %{<expr>} - evaluate arbitrary vifm expression '<expr>', 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.
+
+ '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.
+
+ '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: "ps"
+ 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 "...").
+
+ '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
+ 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 (requires dhistory)
+ 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 session is empty
+ registers - registers content
+ 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 <c-w> <a-b><a-d>
+
+ 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:
+
+ <silent>
+ Postpone UI updates until RHS is completely processed.
+
+ <wait> 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 <wait> tw :set wrap!<cr>
+ nnoremap <wait> tn :set number!<cr>
+ nnoremap <wait> tr :set relativenumber!<cr>
+
+ 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:
+
+ <cr> Enter key.
+
+ <esc> Escape key.
+
+ <space>
+ Space key.
+
+ <lt> Less-than character (<).
+
+ <nop> provides a way to disable a mapping (by mapping it to <nop>).
+
+ <bs> Backspace key (see key conflict description below).
+
+ <tab> <s-tab>
+ Tabulation and Shift+Tabulation keys.
+
+ <home> <end>
+ Home/End.
+
+ <left> <right> <up> <down>
+ Arrow keys.
+
+ <pageup> <pagedown>
+ PageUp/PageDown.
+
+ <del> <delete>
+ Delete key. <del> and <delete> mean different codes, but
+ <delete> is more common.
+
+ <insert>
+ Insert key.
+
+ <c-a>,<c-b>,...,<c-z>,<c-[>,<c->,<c-]>,<c-^>,<c-_>
+ Control + some key (see key conflict description below).
+
+ <c-@> only for *nix
+ Control + Space.
+
+ <a-a>,<a-b>,...,<a-z>
+ <m-a>,<m-b>,...,<m-z> Alt + some key.
+
+ <a-c-a>,<a-c-b>,...,<a-c-z>
+ <m-c-a>,<m-c-b>,...,<m-c-z> only for *nix
+ Alt + Ctrl + some key.
+
+ <f0> - <f63>
+ Functional keys.
+
+ <c-f1> - <c-f12>
+ only for MS-Windows
+ functional keys with Control key pressed.
+
+ <a-f1> - <a-f12>
+ only for MS-Windows
+ functional keys with Alt key pressed.
+
+ <s-f1> - <s-f12>
+ 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:
+
+ - <cr> and <c-m>;
+
+ - <tab> and <c-i>;
+
+ - <c-h> and <bs>;
+
+ - etc.
+
+ Most of the time they are defined consistently and don't cause sur-
+ prises, but <c-h> and <bs> 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 <c-
+ h> or <bs> 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 <c-h> in the LHS work
+ map <c-h> <bs>
+ " if mappings with <bs> in the LHS work
+ map <bs> <c-h>
+
+ Whitespace
+
+ vifm removes whitespace characters at the beginning and end of com-
+ mands. That's why you may want to use <space> at the end of rhs in
+ mappings. For example:
+
+ cmap <f1> man<space>
+
+ will put "man " in line when you hit the <f1> 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 <bs>
+ \e escape <esc>
+ \n newline
+ \r return <cr>
+ \t tab <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
+ pass
+ count to a different command.
+ v:count1
+ same as v:count, but 1 by default.
+ 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 appear)
+
+ 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 horizon 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!<cr>
+
+ 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' 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' "'".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 <name>" 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 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.
+
+ Filetype 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 combination of size and hash of file contents.
+
+ 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 the
+ session. 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<space here>
+ \ smartcase
+
+ equals "set smartcase".
+
+ The $VIFM/vifminfo file contains session settings. You may edit it by
+ hand to change the settings, but it's not recommended to do that, edit
+ vifmrc instead. You can control what settings will be saved 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 registers 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 session 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.
+
+ 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).
+
+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 <com-
+ mand> or +<command>. 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 closes
+ mount point from current pane 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 <ksteen@users.sourceforge.net>
+ And currently is developed by xaizek <xaizek@posteo.net>
+
+
+
+vifm 0.10.1 July 29, 2019 VIFM(1)
diff --git a/.config/vifm/vifmrc b/.config/vifm/vifmrc
new file mode 100644
index 0000000..43fb5cc
--- /dev/null
+++ b/.config/vifm/vifmrc
@@ -0,0 +1,297 @@
+" {{{ General config
+" This is the actual command used to start vi. 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=nvim
+
+" 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
+
+" Open with preview window
+view
+
+" 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=1000
+
+" Automatically resolve symbolic links on l or Enter.
+set nofollowlinks
+
+" Natural sort of (version) numbers within text.
+set sortnumbers
+
+" Maximum number of changes that can be undone.
+set undolevels=100
+
+" If you would like to run an executable file when you
+" press return on the file name set this.
+set norunexec
+
+" Selected color scheme
+colorscheme minimal
+
+" 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
+
+" Things that should be stored in vifminfo
+set vifminfo=dhistory,chistory,state,shistory,phistory,fhistory,dirstack,registers,bookmarks,bmarks
+
+" Dont show delete confirmation
+set confirm-=delete
+
+" ------------------------------------------------------------------------------
+
+" :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
+
+" Empty the ruler. By default, it shows the number of directories+files.
+set rulerformat=
+" }}}
+
+
+" {{{ File preview & file opening
+" 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 %f, %F, %d, %F 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.
+
+
+" CSV/Excel
+filetype *.csv,*.xlsx libreoffice %c %i
+fileviewer *.csv sed "s/,,,,/,,-,,/g;s/,,/ /g" %c | column -t | sed "s/ - / /g" | cut -c -%pw
+
+" HTMLs
+fileviewer *.html w3m -dump %c
+filextype *.html,*.htm firefox %f 2>/dev/null &
+
+" Text based files
+filetype <text/*> nvim
+fileviewer <text/*> env -uCOLORTERM bat --color always --theme base16 --wrap never --pager never %c -p
+fileviewer *.[ch],*.[ch]pp,*.[ch]xx env -uCOLORTERM bat --color always --theme base16 --wrap never --pager never %c -p
+
+" PDFs
+filextype *.pdf zathura %c %i &
+fileviewer *.pdf
+ \ vifmimg pdf %px %py %pw %ph %c
+ \ %pc
+ \ vifmimg clear
+
+" ePUBs
+filextype *.epub zathura %c %i &
+fileviewer *.epub
+ \ vifmimg epub %px %py %pw %ph %c
+ \ %pc
+ \ vifmimg clear
+
+" Fonts
+fileviewer *.otf,*.ttf,*.woff
+ \ vifmimg font %px %py %pw %ph %c
+ \ %pc
+ \ vifmimg clear
+
+" Audios
+filetype <audio/*> mpv %c %i &
+fileviewer <audio/*>
+ \ vifmimg audio %px %py %pw %ph %c
+ \ %pc
+ \ vifmimg clear
+
+" Videos
+filetype <video/*> mpv %c %i &
+fileviewer <video/*>
+ \ vifmimg video %px %py %pw %ph %c
+ \ %pc
+ \ vifmimg clear
+
+" Images
+filextype <image/*> mpv %c %i &
+fileviewer <image/*>
+ \ vifmimg draw %px %py %pw %ph %c
+ \ %pc
+ \ vifmimg clear
+
+" Archives
+fileviewer *.zip,*.jar,*.war,*.ear,*.oxt zip -sf %c
+fileviewer *.tgz,*.tar.gz tar -tzf %c
+fileviewer *.tar.bz2,*.tbz2 tar -tjf %c
+fileviewer *.tar.txz,*.txz xz --list %c
+fileviewer *.tar tar -tf %c
+fileviewer *.rar unrar v %c
+fileviewer *.7z 7z l %c
+
+" Dont show preview on ../ as this confuses me at times
+fileview ../ echo >/dev/null
+
+" Show ls in the preview window, it creates a similar look as ranger.
+" The default directory tree thing is really messy
+fileviewer */ ls --color --group-directories-first
+fileviewer .*/ ls --color --group-directories-first
+
+" Other files
+" Using xdg-open to open the highlighted file with a compatible program and
+" the reason why I am using "file" to preview other files is so that "vifm"
+" does not lag when trying "cat" the file
+filetype * xdg-open %c
+fileviewer * file -b %c
+" }}}
+
+
+"{{{ Key mappings
+" Easily quit vifm by hitting q
+nmap q ZQ
+
+" Use comma to enter command mode
+nnoremap , :
+
+" Set highlighted image as wallpaper
+nnoremap bg :!sh ~/.scripts/control/setbg %c &<cr>
+
+" Upload highlighted file to 0x0.st and then save url to clipboard
+nnoremap 0x0 :!curl -s -F'file=@%c' https://0x0.st > /dev/null | xclip -sel clip && notify-send "vifm" "File uploaded: $(xclip -o -selection clipboard)" &<cr>
+
+" Reverse image search with Tiney
+nnoremap re :!bash ~/bin/utils/tineye %c &<cr>
+
+" Go to the file that is right before "../" for going to the top most file
+nnoremap gg ggj
+
+" Quick shortcuts to some dirs
+source ~/.cache/vifm-shortcuts
+nnoremap cd :cd<cr>
+
+
+" Start shell in current directory
+nnoremap s :shell<cr>
+
+" Display sorting dialog
+nnoremap S :sort<cr>
+
+" Toggle visibility of preview window
+nnoremap w :view<cr>
+vnoremap w :view<cr>gv
+
+" Open file in nvim
+nnoremap o :!nvim %f<cr>
+
+" Open file in the background using its default program
+nnoremap gb :file &<cr>l
+
+" Yank current directory path into the clipboard
+nnoremap yd :!echo %d | xclip -i -selection clipboard %i<cr>
+
+" Yank current file path into the clipboard
+nnoremap yf :!echo %c:p | xclip -i -selection clipboard %i<cr>
+
+" Mappings for faster renaming
+nnoremap I cw<c-a>
+nnoremap cc cw<c-u>
+nnoremap A cw
+
+" Extract an archive
+nnoremap x :!/home/siddharth/bin/utils/extract %f &<cr>
+
+" Make a new directory
+nnoremap mkd :mkdir<space>
+"}}}
+
+
+"{{{ Icons
+" file types
+set classify=' :dir:/, :exe:, :reg:, :link:'
+" various file names
+set classify+=' ::../::, ::*.sh::, ::*.[hc]pp::, ::*.[hc]::, ::/^copying|license$/::, ::.git/,,*.git/::, ::*.epub,,*.fb2,,*.djvu::, ::*.pdf::, ::*.htm,,*.html,,**.[sx]html,,*.xml::'
+set classify+=' ::*.go::, ::*.vim,,vimrc::, ::*.tex,,*.aux,,*.toc,,*.rnw,,*.rmd::, ::*.js::, ::*.css::, ::*.log,,*.db::, ::*.py,,*.pyc,,*.pyd,,*.pyo::, ::*.md::, ::*.json::, ::*.vcf::, ::*.rss::'
+" archives
+set classify+=' ::*.7z,,*.ace,,*.arj,,*.bz2,,*.cpio,,*.deb,,*.dz,,*.gz,,*.jar,,*.lzh,,*.lzma,,*.rar,,*.rpm,,*.rz,,*.tar,,*.taz,,*.tb2,,*.tbz,,*.tbz2,,*.tgz,,*.tlz,,*.trz,,*.txz,,*.tz,,*.tz2,,*.xz,,*.z,,*.zip,,*.zoo::'
+" images
+set classify+=' ::*.bmp,,*.gif,,*.jpeg,,*.jpg,,*.ico,,*.png,,*.ppm,,*.svg,,*.svgz,,*.tga,,*.tif,,*.tiff,,*.xbm,,*.xcf,,*.xpm,,*.xspf,,*.xwd,,*.webp::'
+" audio
+set classify+=' ::*.aac,,*.anx,,*.asf,,*.au,,*.axa,,*.flac,,*.m2a,,*.m4a,,*.mid,,*.midi,,*.mp3,,*.mpc,,*.oga,,*.ogg,,*.ogx,,*.ra,,*.ram,,*.rm,,*.spx,,*.wav,,*.wma,,*.ac3::'
+" media
+set classify+=' ::*.avi,,*.ts,,*.axv,,*.divx,,*.m2v,,*.m4p,,*.m4v,,.mka,,*.mkv,,*.mov,,*.mp4,,*.flv,,*.mp4v,,*.mpeg,,*.mpg,,*.nuv,,*.ogv,,*.pbm,,*.pgm,,*.qt,,*.vob,,*.wmv,,*.xvid::'
+" office files
+set classify+=' ::*.doc,,*.docx::, ::*.xls,,*.xls[mx]::, ::*.pptx,,*.ppt::'
+" miscelleneaous files
+"}}}
+
+" vim: ft=vim
diff --git a/.config/zathura/zathurarc b/.config/zathura/zathurarc
new file mode 100644
index 0000000..e0ea289
--- /dev/null
+++ b/.config/zathura/zathurarc
@@ -0,0 +1,27 @@
+set statusbar-h-padding 0
+set statusbar-v-padding 0
+set statusbar-basename true
+set window-title-basename true
+set window-title-page true
+set default-bg "rgba( 0, 0, 0, 0 )"
+set recolor-lightcolor "rgba( 24, 32, 36, 0.72 )"
+set recolor-darkcolor "rgba( 186, 196, 199, 1 )"
+set inputbar-fg "rgba( 186, 196, 199, 1 )"
+set inputbar-bg "rgba( 34, 45, 50, 0.9 )"
+set statusbar-fg "rgba( 186, 196, 199, 1 )"
+set statusbar-bg "rgba( 34, 45, 50, 0.9 )"
+set notification-warning-bg "rgba( 233, 217, 176, 0.9 )"
+set notification-warning-fg "rgba( 34, 45, 50, 1 )"
+set notification-error-bg "rgba( 102, 170, 187, 0.9 )"
+set notification-error-fg "rgba( 34, 45, 50, 1 )"
+set selection-clipboard clipboard
+set page-padding 1
+map u scroll half-up
+map d scroll half-down
+map D toggle_page_mode
+map r reload
+map R rotate
+map J zoom in
+map K zoom out
+map i recolor
+map p print
diff --git a/.local/bin/Rinstall b/.local/bin/Rinstall
new file mode 100755
index 0000000..8d2857e
--- /dev/null
+++ b/.local/bin/Rinstall
@@ -0,0 +1,5 @@
+#!/bin/sh
+for f in $*
+ do
+ sudo R --vanilla -e "install.packages('"$f"', repos='http://cran.us.r-project.org')"
+done
diff --git a/.local/bin/aliasgen b/.local/bin/aliasgen
new file mode 100755
index 0000000..bd351df
--- /dev/null
+++ b/.local/bin/aliasgen
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+# Removing unecessary comments and documentation
+raw=$(cat $HOME/.config/aliasrc | tail -n +17 "$HOME/.config/aliasrc" | sed "s/^|\s*//g;
+ s/\(.*\)|\(.*\)|\(.*\)|/\1|\2|\3/g;
+ s/\s*$//g;
+ /^$/d")
+
+# #---zsh---# #
+echo "$raw" | sed "s/^/alias\ /;
+ s/\s*|\s*/=\"/;
+ s/^.*-*+-*=\"$//;
+ s/\s*|$/\"/" > $HOME/.cache/zsh-aliases
+
diff --git a/.local/bin/bars b/.local/bin/bars
new file mode 100755
index 0000000..0e671b6
--- /dev/null
+++ b/.local/bin/bars
@@ -0,0 +1,22 @@
+#!/usr/bin/bash
+
+# ANSI color scheme script by pfh
+# Source: http://crunchbang.org/forums/viewtopic.php?pid=139126#p139126
+# Initializing mod by lolilolicon from Archlinux
+#
+
+f=3 b=4
+for j in f b; do
+ for i in {0..7}; do
+ printf -v $j$i %b "\e[${!j}${i}m"
+ done
+done
+bld=$'\e[1m'
+rst=$'\e[0m'
+inv=$'\e[7m'
+
+cat << EOF
+ $f1▬▬▬▬▬ $f2▬▬▬▬▬ $f3▬▬▬▬▬ $f4▬▬▬▬▬ $f5▬▬▬▬▬ $f6▬▬▬▬▬
+ $bld$f1▬▬▬▬▬ $f2▬▬▬▬▬ $f3▬▬▬▬▬ $f4▬▬▬▬▬ $f5▬▬▬▬▬ $f6▬▬▬▬▬
+ $rst
+EOF
diff --git a/.local/bin/blocks b/.local/bin/blocks
new file mode 100755
index 0000000..4e0ce6c
--- /dev/null
+++ b/.local/bin/blocks
@@ -0,0 +1,3 @@
+#!/usr/bin/sh
+pcs() { for i in {0..7}; do echo -en "\e[${1}$((30+$i))m \u2588\u2588 \e[0m"; done; }
+printf "\n%s\n%s\n\n" "$(pcs)" "$(pcs '1;')"
diff --git a/.local/bin/bloks b/.local/bin/bloks
new file mode 100755
index 0000000..3f06d93
--- /dev/null
+++ b/.local/bin/bloks
@@ -0,0 +1,59 @@
+#!/usr/bin/sh
+
+# ANSI Color -- use these variables to easily have different color
+# and format output. Make sure to output the reset sequence after
+# colors (f = foreground, b = background), and use the 'off'
+# feature for anything you turn on.
+
+initializeANSI()
+{
+ esc=""
+
+ blackf="${esc}[30m"; redf="${esc}[31m"; greenf="${esc}[32m"
+ yellowf="${esc}[33m" bluef="${esc}[34m"; purplef="${esc}[35m"
+ cyanf="${esc}[36m"; whitef="${esc}[37m"
+
+ blackb="${esc}[1;30m"; redb="${esc}[1;31m"; greenb="${esc}[1;32m"
+ yellowb="${esc}[1;33m" blueb="${esc}[1;34m"; purpleb="${esc}[1;35m"
+ cyanb="${esc}[1;36m"; whiteb="${esc}[1;37m"
+
+ boldon="${esc}[1m"; boldoff="${esc}[22m"
+ italicson="${esc}[3m"; italicsoff="${esc}[23m"
+ ulon="${esc}[4m"; uloff="${esc}[24m"
+ invon="${esc}[7m"; invoff="${esc}[27m"
+
+ reset="${esc}[0m"
+}
+
+# note in this first use that switching colors doesn't require a reset
+# first - the new color overrides the old one.
+
+numbers (){
+
+initializeANSI
+
+cat << EOF
+${blackf}11111111${reset} ${redf}22222222${reset} ${greenf}33333333${reset} ${yellowf}44444444${reset} ${bluef}55555555${reset} ${purplef}66666666${reset} ${cyanf}77777777${reset} ${whitef}88888888${reset}
+${blackb}11111111${reset} ${redb}22222222${reset} ${greenb}33333333${reset} ${yellowb}44444444${reset} ${blueb}55555555${reset} ${purpleb}66666666${reset} ${cyanb}77777777${reset} ${whiteb}88888888${reset}
+EOF
+
+}
+
+blocks (){
+
+initializeANSI
+
+cat << EOF
+${blackf}████${reset}${blackb}████${reset} ${redf}████${reset}${redb}████${reset} ${greenf}████${reset}${greenb}████${reset} ${yellowf}████${reset}${yellowb}████${reset} ${bluef}████${reset}${blueb}████${reset} ${purplef}████${reset}${purpleb}████${reset} ${cyanf}████${reset}${cyanb}████${reset} ${whitef}████${reset}${whiteb}████${reset}
+${blackf}████${reset}${blackb}████${reset} ${redf}████${reset}${redb}████${reset} ${greenf}████${reset}${greenb}████${reset} ${yellowf}████${reset}${yellowb}████${reset} ${bluef}████${reset}${blueb}████${reset} ${purplef}████${reset}${purpleb}████${reset} ${cyanf}████${reset}${cyanb}████${reset} ${whitef}████${reset}${whiteb}████${reset}
+${blackf}████${reset}${blackb}████${reset} ${redf}████${reset}${redb}████${reset} ${greenf}████${reset}${greenb}████${reset} ${yellowf}████${reset}${yellowb}████${reset} ${bluef}████${reset}${blueb}████${reset} ${purplef}████${reset}${purpleb}████${reset} ${cyanf}████${reset}${cyanb}████${reset} ${whitef}████${reset}${whiteb}████${reset}
+EOF
+
+}
+
+case $1 in
+ b) blocks;;
+ n) numbers;;
+ a) blocks && numbers;;
+ *) blocks && numbers;;
+esac
diff --git a/.local/bin/bonsai b/.local/bin/bonsai
new file mode 100755
index 0000000..ce74ab3
--- /dev/null
+++ b/.local/bin/bonsai
@@ -0,0 +1,554 @@
+#!/usr/bin/env bash
+
+# I'm a bonsai-making machine!
+
+#################################################
+##
+# author: John Allbritten
+# my website: theSynAck.com
+#
+# repo: https://gitlab.com/jallbrit
+# script can be found in the bin/bin/fun folder.
+#
+# license: this script is published under GPLv3.
+# I don't care what you do with it, but I do ask
+# that you leave this message please!
+#
+# inspiration: http://andai.tv/bonsai/
+# andai's version was written in JS and served
+# as the basis for this script. Originally, this
+# was just a port.
+##
+#################################################
+
+# ------ vars ------
+# CLI options
+
+flag_h=false
+live=false
+infinite=false
+
+termCols=$(tput cols)
+termRows=$(tput lines)
+geometry="$((termCols - 1)),$termRows"
+
+leafchar='&'
+termColors=false
+
+message=""
+flag_m=false
+basetype=1
+multiplier=5
+
+lifeStart=28
+steptime=0.01 # time between steps
+
+# non-CLI options
+lineWidth=4 # words per line
+
+# ------ parse options ------
+
+OPTS="hlt:ig:c:Tm:b:M:L:" # the colon means it requires a value
+LONGOPTS="help,live,time:,infinite,geo:,leaf:,termcolors,message:,base:,multiplier:,life:"
+
+parsed=$(getopt --options=$OPTS --longoptions=$LONGOPTS -- "$@")
+eval set -- "${parsed[@]}"
+
+while true; do
+ case "$1" in
+ -h|--help)
+ flag_h=true
+ shift
+ ;;
+
+ -l|--live)
+ live=true
+ shift
+ ;;
+
+ -t|--time)
+ steptime="$2"
+ shift 2
+ ;;
+
+ -i|--infinite)
+ infinite=true
+ shift
+ ;;
+
+ -g|--geo)
+ geo=$2
+ shift 2
+ ;;
+
+ -c|--leaf)
+ leafchar="$2"
+ shift 2
+ ;;
+
+ -T|--termcolors)
+ termColors=true
+ shift
+ ;;
+
+ -m|--message)
+ flag_m=true
+ message="$2"
+ shift 2
+ ;;
+
+ -b|--basetype)
+ basetype="$2"
+ shift 2
+ ;;
+
+ -M|--multiplier)
+ multiplier="$2"
+ shift 2
+ ;;
+
+ -L|--life)
+ lifeStart="$2"
+ shift 2
+ ;;
+
+ --) # end of arguments
+ shift
+ break
+ ;;
+
+ *)
+ echo "error while parsing CLI options"
+ flag_h=true
+ ;;
+ esac
+done
+
+HELP="Usage: bonsai [-h] [-i] [-l] [-T] [-m message] [-t time]
+ [-g x,y] [ -c char] [-M 0-9]
+
+bonsai.sh is a static and live bonsai tree generator, written in bash.
+
+optional args:
+ -l, --live enable live generation
+ -t, --time time time between each step of growth [default: 0.01]
+ -m, --message text attach a message to the tree
+ -b, --basetype 0-2 which ascii-art plant base to use (0 for none) [default: 1]
+ -i, --infinite keep generating trees until quit (2s between each)
+ -T, --termcolors use terminal colors
+ -g, --geo geo set custom geometry [default: fit to terminal]
+ -c, --leaf char character used for leaves [default: &]
+ -M, --multiplier 0-9 branch multiplier; higher equals more branching [default: 5]
+ -L, --life int life of tree; higher equals more overall growth [default: 28]
+ -h, --help show help"
+
+# check for help
+$flag_h && echo -e "$HELP" && exit 0
+
+# geometry processing
+cols=$(echo "$geometry" | cut -d ',' -f1) # width; X
+rows=$(echo "$geometry" | cut -d ',' -f2) # height; Y
+
+IFS=$'\n' # delimit strings by newline
+tabs 4 # set tabs to 4 spaces
+
+declare -A gridMessage
+
+# message processing
+if [ $flag_m = true ]; then
+
+ messageWidth=20
+
+ # make room for the message to go on the right side
+ cols=$((cols - messageWidth - 8 ))
+
+ # wordwrap message, delimiting by spaces
+ message="$(echo "$message" | fold -sw $messageWidth)"
+
+ # get number of lines in the message
+ messageLineCount=0
+ for line in $message; do
+ messageLineCount=$((messageLineCount + 1))
+ done
+
+ messageOffset=$((rows - messageLineCount - 7))
+
+ # put lines of message into a grid
+ index=$messageOffset
+ for line in $message; do
+ gridMessage[$index]="$line"
+ index=$((index + 1))
+ done
+fi
+
+# define colors
+if [ $termColors = true ]; then
+ LightBrown='\e[1;33m'
+ DarkBrown='\e[0;33m'
+ BrownGreen='\e[1;32m'
+ Green='\e[0;32m'
+else
+ LightBrown='\e[38;5;172m'
+ DarkBrown='\e[38;5;130m'
+ BrownGreen='\e[38;5;142m'
+ Green='\e[38;5;106m'
+fi
+Grey='\e[1;30m'
+R='\e[0m'
+
+# create ascii base in lines
+base=""
+case $basetype in
+ 0)
+ base="" ;;
+
+ 1)
+ width=15
+ art="\
+${Grey}:${Green}___________${DarkBrown}./~~\\.${Green}___________${Grey}:
+ \\ /
+ \\________________________/
+ (_) (_)"
+ ;;
+
+ 2)
+ width=7
+ art="\
+${Grey}(${Green}---${DarkBrown}./~~\\.${Green}---${Grey})
+ ( )
+ (________)"
+ ;;
+esac
+
+# get base height
+baseHeight=0
+for line in $art; do
+ baseHeight=$(( baseHeight + 1 ))
+done
+
+# add spaces before base so that it's in the middle of the terminal
+iter=1
+for line in $art; do
+ filler=''
+ for (( i=0; i < $(( (cols / 2) - width )); i++)); do
+ filler+=" "
+ done
+ base+="${filler}${line}"
+ [ $iter -ne $baseHeight ] && base+='\n'
+ iter=$((iter+1))
+done
+unset IFS # reset delimiter
+
+rows=$((rows - baseHeight))
+
+declare -A grid # must be done outside function for unknown reason
+
+trap 'echo "press q to quit"' SIGINT # disable CTRL+C
+
+init() {
+ branches=0
+ shoots=0
+
+ branchesMax=$((multiplier * 110))
+ shootsMax=$multiplier
+
+ # fill grid full of spaces
+ for (( row=0; row < $rows; row++ )); do
+ for (( col=0; col < $cols; col++ )); do
+ grid[$row,$col]=' '
+ done
+ done
+
+ # No echo stdin and hide the cursor
+ if [ $live = true ]; then
+ stty -echo
+ echo -ne "\e[?25l"
+
+ echo -ne "\e[2J"
+ fi
+}
+
+grow() {
+ local start=$((cols / 2))
+
+ local x=$((cols / 2)) # start halfway across the screen
+ local y=$rows # start just above the base
+
+ branch $x $y trunk $lifeStart
+}
+
+branch() {
+ # argument declarations
+ local x=$1
+ local y=$2
+ local type=$3
+ local life=$4
+ local dx=0
+ local dy=0
+
+ # check if the user is hitting q
+ timeout=0.001
+ [ $live = "false" ] && timeout=.0001
+ read -n 1 -t $timeout input
+ [ "$input" = "q" ] && clean "quit"
+
+ branches=$((branches + 1))
+
+ # as long as we're alive...
+ while [ $life -gt 0 ]; do
+
+ life=$((life - 1)) # ensure life ends
+
+ # case $life in
+ # [0]) type=dead ;;
+ # [1-4]) type=dying ;;
+ # esac
+
+ # set dy based on type
+ case $type in
+ shoot*) # if this is a shoot, trend horizontal/downward growth
+ case "$((RANDOM % 10))" in
+ [0-1]) dy=-1 ;;
+ [2-7]) dy=0 ;;
+ [8-9]) dy=1 ;;
+ esac
+ ;;
+
+ dying) # discourage vertical growth
+ case "$((RANDOM % 10))" in
+ [0-1]) dy=-1 ;;
+ [2-8]) dy=0 ;;
+ [9-10]) dy=1 ;;
+ esac
+ ;;
+
+ *) # otherwise, let it grow up/not at all
+ dy=0
+ [ $life -ne $lifeStart ] && [ $((RANDOM % 10)) -gt 2 ] && dy=-1
+ ;;
+ esac
+ # if we're about to hit the ground, cut it off
+ [ $dy -gt 0 ] && [ $y -gt $(( rows - 1 )) ] && dy=0
+ [ $type = "trunk" ] && [ $life -lt 4 ] && dy=0
+
+ # set dx based on type
+ case $type in
+ shootLeft) # tend left: dx=[-2,1]
+ case $(( RANDOM % 10 )) in
+ [0-1]) dx=-2 ;;
+ [2-5]) dx=-1 ;;
+ [6-8]) dx=0 ;;
+ [9]) dx=1 ;;
+ esac ;;
+
+ shootRight) # tend right: dx=[-1,2]
+ case $(( RANDOM % 10 )) in
+ [0-1]) dx=2 ;;
+ [2-5]) dx=1 ;;
+ [6-8]) dx=0 ;;
+ [9]) dx=-1 ;;
+ esac ;;
+
+ dying) # tend left/right: dx=[-3,3]
+ dx=$(( (RANDOM % 7) - 3)) ;;
+
+ *) # tend equal: dx=[-1,1]
+ dx=$(( (RANDOM % 3) - 1)) ;;
+
+ esac
+
+ # re-branch upon conditions
+ if [ $branches -lt $branchesMax ]; then
+
+ # branch is dead
+ if [ $life -lt 3 ]; then
+ branch $x $y dead $life
+
+ # branch is dying and needs to branch into leaves
+ elif [ $type = trunk ] && [ $life -lt $((multiplier + 2)) ]; then
+ branch $x $y dying $life
+
+ elif [[ $type = "shoot"* ]] && [ $life -lt $((multiplier + 2)) ]; then
+ branch $x $y dying $life
+
+ # re-branch if: not close to the base AND (pass a chance test OR be a trunk, not have too man shoots already, and not be about to die)
+ elif [[ $type = trunk && $life -lt $((lifeStart - 8)) \
+ && ( $(( RANDOM % (16 - multiplier) )) -eq 0 \
+ || ($type = trunk && $(( life % 5 )) -eq 0 && $life -gt 5) ) ]]; then
+
+ # if a trunk is splitting and not about to die, chance to create another trunk
+ if [ $((RANDOM % 3)) -eq 0 ] && [ $life -gt 7 ]; then
+ branch $x $y trunk $life
+
+ elif [ $shoots -lt $shootsMax ]; then
+
+ # give the shoot some life
+ tmpLife=$(( life + multiplier - 2 ))
+ [ $tmpLife -lt 0 ] && tmpLife=0
+
+ # first shoot is randomly directed
+ if [ $shoots -eq 0 ]; then
+ tmpType=shootLeft
+ [ $((RANDOM % 2)) -eq 0 ] && tmpType=shootRight
+
+
+ # secondary shoots alternate from the first
+ else
+ case $tmpType in
+ shootLeft) # last shoot was left, shoot right
+ tmpType=shootRight ;;
+ shootRight) # last shoot was right, shoot left
+ tmpType=shootLeft ;;
+ esac
+ fi
+ branch $x $y $tmpType $tmpLife
+ shoots=$((shoots + 1))
+ fi
+ fi
+ else # if we're past max branches but want to branch...
+ char='<>'
+ fi
+
+ # implement dx,dy
+ x=$((x + dx))
+ y=$((y + dy))
+
+ # choose color
+ case $type in
+ trunk|shoot*)
+ color=${DarkBrown}
+ [ $(( RANDOM % 4 )) -eq 0 ] && color=${LightBrown}
+ ;;
+
+ dying) color=${BrownGreen} ;;
+
+ dead) color=${Green} ;;
+ esac
+
+ # choose branch character
+ case $type in
+ trunk)
+ if [ $dx -lt 0 ]; then
+ char='\\'
+ elif [ $dx -eq 0 ]; then
+ char='/|'
+ elif [ $dx -gt 0 ]; then
+ char='/'
+ fi
+ [ $dy -eq 0 ] && char='/~' # not growing
+ #[ $dy -lt 0 ] && char='/~' # growing
+ ;;
+
+ # shoots tend to look horizontal
+ shootLeft)
+ case $dx in
+ [-3,-1]) char='\\|' ;;
+ [0]) char='/|' ;;
+ [1,3]) char='/' ;;
+ esac
+ #[ $dy -lt 0 ] && char='/~' # growing up
+ [ $dy -gt 0 ] && char='/' # growing down
+ [ $dy -eq 0 ] && char='\\_' # not growing
+ ;;
+
+ shootRight)
+ case $dx in
+ [-3,-1]) char='\\|' ;;
+ [0]) char='/|' ;;
+ [1,3]) char='/' ;;
+ esac
+ #[ $dy -lt 0 ] && char='' # growing up
+ [ $dy -gt 0 ] && char='\\' # growing down
+ [ $dy -eq 0 ] && char='_/' # not growing
+ ;;
+
+ #dead)
+ # #life=$((life + 1))
+ # char="${leafchar}"
+ # [ $dx -lt -2 ] || [ $dx -gt 2 ] && char="${leafchar}${leafchar}"
+ # ;;
+
+ esac
+
+ # set leaf if needed
+ [ $life -lt 4 ] && char="${leafchar}"
+
+ # uncomment for help debugging
+ #echo -e "$life:\t$x, $y: $char"
+
+ # put character in grid
+ grid[$y,$x]="${color}${char}${R}"
+
+ # if live, print what we have so far and let the user see it
+ if [ $live = true ]; then
+ print
+ sleep $steptime
+ fi
+ done
+}
+
+print() {
+ # parse grid for output
+ output=""
+ for (( row=0; row < $rows; row++)); do
+
+ line=""
+
+ for (( col=0; col < $cols; col++ )); do
+
+ # this prints a space at 0,0 and is necessary at the moment
+ [ $live = true ] && echo -ne "\e[0;0H "
+
+ # grab the character from our grid
+ line+="${grid[$row,$col]}"
+ done
+
+ # add our message
+ if [ $flag_m = true ]; then
+ # remove trailing whitespace before we add our message
+ line=$(sed -r 's/[ \t]*$//' <(printf "$line"))
+ line+=" \t${gridMessage[$row]}"
+ fi
+
+ line="${line}\n"
+
+ # end 'er with the ol' newline
+ output+="$line"
+ done
+
+ # add the ascii-art base we generated earlier
+ output+="$base"
+
+ # output, removing trailing whitespace
+ sed -r 's/[ \t]*$//' <(printf "$output")
+}
+
+clean() {
+ # Show cursor and echo stdin
+ if [ $live = true ]; then
+ echo -ne "\e[?25h"
+ stty echo
+ fi
+
+ echo "" # ensure the cursor resets to the next line
+
+ # if we wanna quit
+ if [ "$1" = "quit" ]; then
+ trap SIGINT
+ exit 0
+ fi
+}
+
+bonsai() {
+ init
+ grow
+ print
+ clean
+}
+
+bonsai
+
+while [ $infinite = true ]; do
+ sleep 2
+ bonsai
+done
diff --git a/.local/bin/camtoggle b/.local/bin/camtoggle
new file mode 100755
index 0000000..a71bdf7
--- /dev/null
+++ b/.local/bin/camtoggle
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+mpv --no-cache --no-osc --no-input-default-bindings --input-conf=/dev/null --title=webcam $(ls /dev/video[0,4,6,8] | tail -n 1)
+# mpv --no-cache --no-osc --no-input-default-bindings --input-conf=/dev/null --title=webcam $(ls /dev/video[0,2,4,6,8] | tail -n 1)
diff --git a/.local/bin/colorbars b/.local/bin/colorbars
new file mode 100755
index 0000000..4e3b8f7
--- /dev/null
+++ b/.local/bin/colorbars
@@ -0,0 +1,38 @@
+#!/bin/sh
+#
+# colorbars - smpte color bars in sh
+# http://git.io/colorbars
+
+echo
+
+for y in $(seq 0 13); do
+ printf %s ' '
+ for color in 7 3 6 2 5 1 4; do
+ tput setab ${color}
+ printf %s ' '
+ done
+ tput sgr0
+ echo
+done
+
+for y in 0 1; do
+ printf %s ' '
+ for color in 4 0 5 0 6 0 7; do
+ tput setab ${color}
+ printf %s ' '
+ done
+ tput sgr0
+ echo
+done
+
+for y in $(seq 0 4); do
+ printf %s ' '
+ for color in 4 4 4 4 4 7 7 7 7 7 5 5 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0; do
+ tput setab ${color}
+ printf %s ' '
+ done
+ tput sgr0
+ echo
+done
+
+echo
diff --git a/.local/bin/colorbars-sm b/.local/bin/colorbars-sm
new file mode 100755
index 0000000..e8e0b9d
--- /dev/null
+++ b/.local/bin/colorbars-sm
@@ -0,0 +1,35 @@
+#!/bin/sh
+echo
+
+# mini smpte color bars
+for y in $(seq 0 6); do
+ printf %s ' '
+ for color in 7 3 6 2 5 1 4; do
+ tput setab ${color}
+ printf %s ' '
+ done
+ tput sgr0
+ echo
+done
+
+for y in 0 1; do
+ printf %s ' '
+ for color in 4 0 5 0 6 0 7; do
+ tput setab ${color}
+ printf %s ' '
+ done
+ tput sgr0
+ echo
+done
+
+for y in $(seq 0 2); do
+ printf %s ' '
+ for color in 4 4 4 4 4 7 7 7 7 7 5 5 5 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0; do
+ tput setab ${color}
+ printf %s ' '
+ done
+ tput sgr0
+ echo
+done
+
+echo
diff --git a/.local/bin/colorscheme b/.local/bin/colorscheme
new file mode 100755
index 0000000..f2aa179
--- /dev/null
+++ b/.local/bin/colorscheme
@@ -0,0 +1,27 @@
+#!/bin/bash
+#
+# This file echoes a bunch of color codes to the
+# terminal to demonstrate what's available. Each
+# line is the color code of one forground color,
+# out of 17 (default + 16 escapes), followed by a
+# test use of that color on all nine background
+# colors (default + 8 escapes).
+#
+
+T='niX' # The test text
+
+echo -e "\n 40m 41m 42m 43m\
+ 44m 45m 46m 47m";
+
+for FGs in ' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' \
+ '1;32m' ' 33m' '1;33m' ' 34m' '1;34m' ' 35m' '1;35m' \
+ ' 36m' '1;36m' ' 37m' '1;37m';
+ do FG=${FGs// /}
+ echo -en " $FGs \033[$FG $T "
+ for BG in 40m 41m 42m 43m 44m 45m 46m 47m;
+ do echo -en "$EINS \033[$FG\033[$BG $T \033[0m";
+ done
+ echo;
+done
+echo
+
diff --git a/.local/bin/compiler b/.local/bin/compiler
new file mode 100755
index 0000000..5b4f8c4
--- /dev/null
+++ b/.local/bin/compiler
@@ -0,0 +1,40 @@
+#!/bin/sh
+# This script will compile or run another finishing operation on a document. I
+# have this script run via vim.
+#
+# Compiles .tex. groff (.mom, .ms), .rmd, .md.
+# Opens .sent files as sent presentations.
+# Runs scripts based on extention or shebang
+
+file=$(readlink -f "$1")
+dir=$(dirname "$file")
+base="${file%.*}"
+
+cd "$dir" || exit
+
+textype() { \
+ command="pdflatex"
+ ( sed 5q "$file" | grep -i -q 'xelatex' ) && command="xelatex"
+ $command --output-directory="$dir" "$base" &&
+ grep -i addbibresource "$file" >/dev/null &&
+ biber --input-directory "$dir" "$base" &&
+ $command --output-directory="$dir" "$base" &&
+ $command --output-directory="$dir" "$base"
+ }
+
+case "$file" in
+ *\.ms) refer -PS -e -p"$REFERBIB" "$file" | groff -me -ms -kejpt -T pdf > "$base".pdf ;;
+ *\.gd) groffdown "$file" | refer -PS -e "-p$REFERBIB" | groff -me -ms -kejpt -T pdf > "$base".pdf ;;
+ # *\.gd) groffdown "$file" | refer -PS -e "$REFERBIB" | groff -me -ms -kejpt -T pdf > "$base".pdf ;;
+ *\.mom) refer -PS -e -p"$REFERBIB" "$file" | groff -mom -kejpt -T pdf > "$base".pdf ;;
+ *\.rmd) echo "require(rmarkdown); render('$file')" | R -q --vanilla ;;
+ *\.rnw) Rscript -e "knitr::knit2pdf('"$file"')" ;;
+ *\.tex) textype "$file" ;;
+ *\.md) pandoc "$file" --pdf-engine=xelatex -o "$base".pdf ;;
+ *config.h) make && sudo make install ;;
+ *\.c) cc "$file" -o "$base" && "$base" ;;
+ *\.py) python "$file" ;;
+ *\.go) go run "$file" ;;
+ *\.sent) setsid sent "$file" 2>/dev/null & ;;
+ *) sed 1q "$file" | grep "^#!/" | sed "s/^#!//" | xargs -r -I % "$file" ;;
+esac
diff --git a/.local/bin/cronbat b/.local/bin/cronbat
new file mode 100755
index 0000000..c09ff42
--- /dev/null
+++ b/.local/bin/cronbat
@@ -0,0 +1,8 @@
+#!/bin/sh
+# Notify me with notify-send if my battery is below 25%.
+# You can set this to run via cron.
+
+[ "$(cat /sys/class/power_supply/BAT0/status)" = "Charging" ] && exit
+[ "$(cat /sys/class/power_supply/BAT0/capacity)" -lt 25 ] &&
+export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1001/bus &&
+notify-send -u critical "Battery critically low."
diff --git a/.local/bin/crontog b/.local/bin/crontog
new file mode 100755
index 0000000..93c2d30
--- /dev/null
+++ b/.local/bin/crontog
@@ -0,0 +1,5 @@
+#!/bin/sh
+# Toggles all cronjobs off/on.
+# Stores disabled crontabs in ~/.consaved until restored.
+
+([ -f ~/.config/cronsaved ] && crontab - < ~/.config/cronsaved && rm ~/.config/cronsaved && notify-send "🕓 Cronjobs re-enabled.") || ( crontab -l > ~/.config/cronsaved && crontab -r && notify-send "🕓 Cronjobs saved and disabled.")
diff --git a/.local/bin/datetime b/.local/bin/datetime
new file mode 100755
index 0000000..e2198bd
--- /dev/null
+++ b/.local/bin/datetime
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+date +"  %a %b %d |  %H:%M "
diff --git a/.local/bin/define b/.local/bin/define
new file mode 100755
index 0000000..ac3c61f
--- /dev/null
+++ b/.local/bin/define
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+sdcv --color $1 | less
diff --git a/.local/bin/displaymenu b/.local/bin/displaymenu
new file mode 100755
index 0000000..38b2d9b
--- /dev/null
+++ b/.local/bin/displaymenu
@@ -0,0 +1,73 @@
+#!/bin/sh
+
+# A UI for detecting and selecting all displays.
+# Probes xrandr for connected displays and lets user select one to use.
+# User may also select "manual selection" which opens arandr.
+# I plan on adding a routine from multi-monitor setups later.
+
+twoscreen() { # If multi-monitor is selected and there are two screens.
+
+ mirror=$(printf "no\\nyes" | dmenu -i -p "Mirror displays?")
+ # Mirror displays using native resolution of external display and a scaled
+ # version for the internal display
+ if [ "$mirror" = "yes" ]; then
+ external=$(echo "$screens" | dmenu -i -p "Optimize resolution for")
+ internal=$(echo "$screens" | grep -v "$external")
+
+ res_external=$(xrandr --query | sed -n "/^$external/,/\+/p" | \
+ tail -n 1 | awk '{print $1}')
+ res_internal=$(xrandr --query | sed -n "/^$internal/,/\+/p" | \
+ tail -n 1 | awk '{print $1}')
+
+ res_ext_x=$(echo $res_external | sed 's/x.*//')
+ res_ext_y=$(echo $res_external | sed 's/.*x//')
+ res_int_x=$(echo $res_internal | sed 's/x.*//')
+ res_int_y=$(echo $res_internal | sed 's/.*x//')
+
+ scale_x=$(echo "$res_ext_x / $res_int_x" | bc -l)
+ scale_y=$(echo "$res_ext_y / $res_int_y" | bc -l)
+
+ xrandr --output "$external" --auto --scale 1.0x1.0 \
+ --output "$internal" --auto --same-as "$external" \
+ --scale "$scale_x"x"$scale_y"
+ else
+
+ primary=$(echo "$screens" | dmenu -i -p "Select primary display")
+ secondary=$(echo "$screens" | grep -v "$primary")
+ direction=$(printf "left\\nright" | dmenu -i -p "What side of $primary should $secondary be on?")
+ xrandr --output "$primary" --auto --scale 1.0x1.0 --output "$secondary" --"$direction"-of "$primary" --auto --scale 1.0x1.0
+ fi
+ }
+
+morescreen() { # If multi-monitor is selected and there are more than two screens.
+ primary=$(echo "$screens" | dmenu -i -p "Select primary display")
+ secondary=$(echo "$screens" | grep -v "$primary" | dmenu -i -p "Select secondary display")
+ direction=$(printf "left\\nright" | dmenu -i -p "What side of $primary should $secondary be on?")
+ tertiary=$(echo "$screens" | grep -v "$primary" | grep -v "$secondary" | dmenu -i -p "Select third display")
+ xrandr --output "$primary" --auto --output "$secondary" --"$direction"-of "$primary" --auto --output "$tertiary" --"$(printf "left\\nright" | grep -v "$direction")"-of "$primary" --auto
+ }
+
+multimon() { # Multi-monitor handler.
+ case "$(echo "$screens" | wc -l)" in
+ 1) xrandr $(echo "$allposs" | grep -v "$screens" | awk '{print "--output", $1, "--off"}' | tr '\n' ' ') ;;
+ 2) twoscreen ;;
+ *) morescreen ;;
+ esac ;}
+
+# Get all possible displays
+allposs=$(xrandr -q | grep "connected")
+
+# Get all connected screens.
+screens=$(echo "$allposs" | grep " connected" | awk '{print $1}')
+
+# Get user choice including multi-monitor and manual selection:
+chosen=$(printf "%s\\nmulti-monitor\\nmanual selection" "$screens" | dmenu -i -p "Select display arangement") &&
+case "$chosen" in
+ "manual selection") arandr ; exit ;;
+ "multi-monitor") multimon ;;
+ *) xrandr --output "$chosen" --auto --scale 1.0x1.0 $(echo "$allposs" | grep -v "$chosen" | awk '{print "--output", $1, "--off"}' | tr '\n' ' ') ;;
+esac
+
+# setbg # Fix background if screen size/arangement has changed.
+remaps # Re-remap keys if keyboard added (for laptop bases)
+pgrep -x dunst >/dev/null && killall dunst && setsid dunst & # Restart dunst to ensure proper location on screen
diff --git a/.local/bin/displayselect b/.local/bin/displayselect
new file mode 100755
index 0000000..c0e3479
--- /dev/null
+++ b/.local/bin/displayselect
@@ -0,0 +1,72 @@
+#!/bin/sh
+
+# A UI for detecting and selecting all displays. Probes xrandr for connected
+# displays and lets user select one to use. User may also select "manual
+# selection" which opens arandr.
+
+twoscreen() { # If multi-monitor is selected and there are two screens.
+
+ mirror=$(printf "no\\nyes" | dmenu -i -p "Mirror displays?")
+ # Mirror displays using native resolution of external display and a scaled
+ # version for the internal display
+ if [ "$mirror" = "yes" ]; then
+ external=$(echo "$screens" | dmenu -i -p "Optimize resolution for:")
+ internal=$(echo "$screens" | grep -v "$external")
+
+ res_external=$(xrandr --query | sed -n "/^$external/,/\+/p" | \
+ tail -n 1 | awk '{print $1}')
+ res_internal=$(xrandr --query | sed -n "/^$internal/,/\+/p" | \
+ tail -n 1 | awk '{print $1}')
+
+ res_ext_x=$(echo $res_external | sed 's/x.*//')
+ res_ext_y=$(echo $res_external | sed 's/.*x//')
+ res_int_x=$(echo $res_internal | sed 's/x.*//')
+ res_int_y=$(echo $res_internal | sed 's/.*x//')
+
+ scale_x=$(echo "$res_ext_x / $res_int_x" | bc -l)
+ scale_y=$(echo "$res_ext_y / $res_int_y" | bc -l)
+
+ xrandr --output "$external" --auto --scale 1.0x1.0 \
+ --output "$internal" --auto --same-as "$external" \
+ --scale "$scale_x"x"$scale_y"
+ else
+
+ primary=$(echo "$screens" | dmenu -i -p "Select primary display:")
+ secondary=$(echo "$screens" | grep -v "$primary")
+ direction=$(printf "left\\nright" | dmenu -i -p "What side of $primary should $secondary be on?")
+ xrandr --output "$primary" --auto --scale 1.0x1.0 --output "$secondary" --"$direction"-of "$primary" --auto --scale 1.0x1.0
+ fi
+ }
+
+morescreen() { # If multi-monitor is selected and there are more than two screens.
+ primary=$(echo "$screens" | dmenu -i -p "Select primary display:")
+ secondary=$(echo "$screens" | grep -v "$primary" | dmenu -i -p "Select secondary display:")
+ direction=$(printf "left\\nright" | dmenu -i -p "What side of $primary should $secondary be on?")
+ tertiary=$(echo "$screens" | grep -v "$primary" | grep -v "$secondary" | dmenu -i -p "Select third display:")
+ xrandr --output "$primary" --auto --output "$secondary" --"$direction"-of "$primary" --auto --output "$tertiary" --"$(printf "left\\nright" | grep -v "$direction")"-of "$primary" --auto
+ }
+
+multimon() { # Multi-monitor handler.
+ case "$(echo "$screens" | wc -l)" in
+ 1) xrandr $(echo "$allposs" | grep -v "$screens" | awk '{print "--output", $1, "--off"}' | tr '\n' ' ') ;;
+ 2) twoscreen ;;
+ *) morescreen ;;
+ esac ;}
+
+# Get all possible displays
+allposs=$(xrandr -q | grep "connected")
+
+# Get all connected screens.
+screens=$(echo "$allposs" | grep " connected" | awk '{print $1}')
+
+# Get user choice including multi-monitor and manual selection:
+chosen=$(printf "%s\\nmulti-monitor\\nmanual selection" "$screens" | dmenu -i -p "Select display arangement:") &&
+case "$chosen" in
+ "manual selection") arandr ; exit ;;
+ "multi-monitor") multimon ;;
+ *) xrandr --output "$chosen" --auto --scale 1.0x1.0 $(echo "$allposs" | grep -v "$chosen" | awk '{print "--output", $1, "--off"}' | tr '\n' ' ') ;;
+esac
+
+setbg # Fix background if screen size/arangement has changed.
+remaps # Re-remap keys if keyboard added (for laptop bases)
+pgrep -x dunst >/dev/null && killall dunst && setsid dunst & # Restart dunst to ensure proper location on screen
diff --git a/.local/bin/dna b/.local/bin/dna
new file mode 100755
index 0000000..a049e0b
--- /dev/null
+++ b/.local/bin/dna
@@ -0,0 +1,46 @@
+#!/bin/bash
+#
+# ANSI color scheme script by pfh
+#
+# Initializing mod by lolilolicon from Archlinux
+#
+
+f=3 b=4
+for j in f b; do
+ for i in {0..7}; do
+ printf -v $j$i %b "\e[${!j}${i}m"
+ done
+done
+bld=$'\e[1m'
+rst=$'\e[0m'
+inv=$'\e[7m'
+
+cat << EOF
+
+ ${f1} █-----${bld}█ ${rst}${f2} █-----${bld}█${rst} ${f3} █-----${bld}█${rst} ${f4} █-----${bld}█${rst} ${f5} █-----${bld}█${rst} ${f6} █-----${bld}█${rst}
+ ${f1} █---${bld}█${rst} ${f2} █---${bld}█${rst} ${f3} █---${bld}█${rst} ${f4} █---${bld}█${rst} ${f5} █---${bld}█${rst} ${f6} █---${bld}█${rst}
+ ${f1} █-${bld}█${rst} ${f2} █-${bld}█${rst} ${f3} █-${bld}█${rst} ${f4} █-${bld}█${rst} ${f5} █-${bld}█${rst} ${f6} █-${bld}█${rst}
+ ${f1} █${rst} ${f2} █${rst} ${f3} █${rst} ${f4} █${rst} ${f5} █${rst} ${f6} █${rst}
+ ${f1}${bld} █-${rst}${f1}█${rst} ${f2}${bld} █_${rst}${f2}█${rst} ${f3}${bld} █-${rst}${f3}█${rst} ${f4}${bld} █-${rst}${f4}█${rst} ${f5}${bld} █-${rst}${f5}█${rst} ${f6}${bld} █-${rst}${f6}█${rst}
+ ${f1}${bld} █---${rst}${f1}█${rst} ${f2}${bld} █---${rst}${f2}█${rst} ${f3}${bld} █---${rst}${f3}█${rst} ${f4}${bld} █---${rst}${f4}█${rst} ${f5}${bld} █---${rst}${f5}█${rst} ${f6}${bld} █---${rst}${f6}█${rst}
+ ${f1}${bld} █-----${rst}${f1}█${rst} ${f2}${bld} █-----${rst}${f2}█${rst} ${f3}${bld} █-----${rst}${f3}█${rst} ${f4}${bld} █-----${rst}${f4}█${rst} ${f5}${bld} █-----${rst}${f5}█${rst} ${f6}${bld} █-----${rst}${f6}█${rst}
+ ${f1}${bld} █---${rst}${f1}█${rst} ${f2}${bld} █---${rst}${f2}█${rst} ${f3}${bld} █---${rst}${f3}█${rst} ${f4}${bld} █---${rst}${f4}█${rst} ${f5}${bld} █---${rst}${f5}█${rst} ${f6}${bld} █---${rst}${f6}█${rst}
+ ${f1}${bld} █-${rst}${f1}█${rst} ${f2}${bld} █-${rst}${f2}█${rst} ${f3}${bld} █-${rst}${f3}█${rst} ${f4}${bld} █-${rst}${f4}█${rst} ${f5}${bld} █-${rst}${f5}█${rst} ${f6}${bld} █-${rst}${f6}█${rst}
+ ${f1}${bld} █${rst} ${f2}${bld} █${rst} ${f3}${bld}█${rst} ${f4}${bld} █${rst} ${f5}${bld} █${rst} ${f6}${bld} █${rst}
+ ${f1} █-${bld}█${rst} ${f2} █-${bld}█${rst} ${f3} █-${bld}█${rst} ${f4} █-${bld}█${rst} ${f5} █-${bld}█${rst} ${f6} █-${bld}█${rst}
+ ${f1} █---${bld}█${rst} ${f2} █---${bld}█${rst} ${f3} █---${bld}█${rst} ${f4} █---${bld}█${rst} ${f5} █---${bld}█${rst} ${f6} █---${bld}█${rst}
+ ${f1} █-----${bld}█ ${rst}${f2} █-----${bld}█${rst} ${f3} █-----${bld}█${rst} ${f4} █-----${bld}█${rst} ${f5} █-----${bld}█${rst} ${f6} █-----${bld}█${rst}
+ ${f1} █---${bld}█${rst} ${f2} █---${bld}█${rst} ${f3} █---${bld}█${rst} ${f4} █---${bld}█${rst} ${f5} █---${bld}█${rst} ${f6} █---${bld}█${rst}
+ ${f1} █-${bld}█${rst} ${f2} █-${bld}█${rst} ${f3} █-${bld}█${rst} ${f4} █-${bld}█${rst} ${f5} █-${bld}█${rst} ${f6} █-${bld}█${rst}
+ ${f1} █${rst} ${f2}█${rst} ${f3} █${rst} ${f4} █${rst} ${f5} █${rst} ${f6} █${rst}
+ ${f1}${bld} █-${rst}${f1}█${rst} ${f2}${bld} █_${rst}${f2}█${rst} ${f3}${bld} █-${rst}${f3}█${rst} ${f4}${bld} █-${rst}${f4}█${rst} ${f5}${bld} █-${rst}${f5}█${rst} ${f6}${bld} █-${rst}${f6}█${rst}
+ ${f1}${bld} █---${rst}${f1}█${rst} ${f2}${bld} █---${rst}${f2}█${rst} ${f3}${bld} █---${rst}${f3}█${rst} ${f4}${bld} █---${rst}${f4}█${rst} ${f5}${bld} █---${rst}${f5}█${rst} ${f6}${bld} █---${rst}${f6}█${rst}
+ ${f1}${bld} █-----${rst}${f1}█${rst} ${f2}${bld} █-----${rst}${f2}█${rst} ${f3}${bld} █-----${rst}${f3}█${rst} ${f4}${bld} █-----${rst}${f4}█${rst} ${f5}${bld} █-----${rst}${f5}█${rst} ${f6}${bld} █-----${rst}${f6}█${rst}
+ ${f1}${bld} █---${rst}${f1}█${rst} ${f2}${bld} █---${rst}${f2}█${rst} ${f3}${bld} █---${rst}${f3}█${rst} ${f4}${bld} █---${rst}${f4}█${rst} ${f5}${bld} █---${rst}${f5}█${rst} ${f6}${bld} █---${rst}${f6}█${rst}
+ ${f1}${bld} █-${rst}${f1}█${rst} ${f2}${bld} █-${rst}${f2}█${rst} ${f3}${bld} █-${rst}${f3}█${rst} ${f4}${bld} █-${rst}${f4}█${rst} ${f5}${bld} █-${rst}${f5}█${rst} ${f6}${bld} █-${rst}${f6}█${rst}
+ ${f1}${bld} █${rst} ${f2}${bld} █${rst} ${f3}${bld} █${rst} ${f4}${bld} █${rst} ${f5}${bld} █${rst} ${f6}${bld} █${rst}
+ ${f1} █-${bld}█${rst} ${f2} █-${bld}█${rst} ${f3} █-${bld}█${rst} ${f4} █-${bld}█${rst} ${f5} █-${bld}█${rst} ${f6} █-${bld}█${rst}
+ ${f1} █---${bld}█${rst} ${f2} █---${bld}█${rst} ${f3} █---${bld}█${rst} ${f4} █---${bld}█${rst} ${f5} █---${bld}█${rst} ${f6} █---${bld}█${rst}
+ ${f1} █-----${bld}█ ${rst}${f2} █-----${bld}█${rst} ${f3} █-----${bld}█${rst} ${f4} █-----${bld}█${rst} ${f5} █-----${bld}█${rst} ${f6} █-----${bld}█${rst}
+
+EOF \ No newline at end of file
diff --git a/.local/bin/dropbox-status b/.local/bin/dropbox-status
new file mode 100755
index 0000000..05e6fda
--- /dev/null
+++ b/.local/bin/dropbox-status
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+case "$(dropbox-cli status | head -n 1)" in
+ "Up to date") icon="" ;;
+ "Syncing"*) icon=" " ;;
+ *) icon=" "
+esac
+
+echo " $icon "
diff --git a/.local/bin/dropdowntoggle b/.local/bin/dropdowntoggle
new file mode 100755
index 0000000..056a716
--- /dev/null
+++ b/.local/bin/dropdowntoggle
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+# Toggle dropdown terminal windows.
+# The first argument is the title of the window.
+# The rest of it is the program/command to be run
+# in the dropdown window.
+
+class="$1"
+title="dropdown_$class"
+active="$(xdotool search --name $title | wc -l)"
+shift
+
+
+case "$active" in
+ 0) $TERMINAL -c "dropdown" -t "$class" -e "$@" & ;;
+ *) kill -9 `xdotool search --name "$class" getwindowpid` ;;
+esac
diff --git a/.local/bin/dwmbar b/.local/bin/dwmbar
new file mode 100755
index 0000000..a322665
--- /dev/null
+++ b/.local/bin/dwmbar
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+# Refreshes the dwm bar using the scripts in:
+# $SCRIPTS/dwm/
+
+# When given the echo option, echo to stdout instead
+# of refreshing (useful for debugging)
+
+battery=$(battery)
+datetime=$(datetime)
+# dropbox=$(dropbox-status)
+kblayout=$(kblayout)
+# mailbox=$(mailbox)
+news=$(news)
+vpnstatus=$(vpnstatus)
+# wifi=$(wifi)
+yadms=$(yadms)
+
+bar="$yadms|$news|$datetime|$kblayout|$vpnstatus|$battery |"
+
+case "$1" in
+ echo) echo "$bar" ;;
+ *) xsetroot -name "$bar" ;;
+esac
+
+
diff --git a/.local/bin/dwmbar-battery b/.local/bin/dwmbar-battery
new file mode 100755
index 0000000..bb2b76e
--- /dev/null
+++ b/.local/bin/dwmbar-battery
@@ -0,0 +1,22 @@
+#!/bin/sh
+# Better battery manager for polybar
+
+# Charging: 
+# Discharching: 
+# Full: underscore: 
+# LOW BATTERY: 
+
+batstatus=$(acpi | tail -n 1)
+
+ico=""
+
+# Change the underscore color according to the charging state
+case "$batstatus" in
+ *Charging*) ico=" ";;
+ *Discharging*) ico="  " ;;
+ *) ico="  " ;;
+esac
+
+percentage=$( echo "$batstatus" | sed "s/.*\(\ [0-9]*\)\%.*$/\1/; s/\ //g; 1q")
+
+echo "$ico $percentage%"
diff --git a/.local/bin/emoji-copy b/.local/bin/emoji-copy
new file mode 100755
index 0000000..a52c171
--- /dev/null
+++ b/.local/bin/emoji-copy
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# Runs a prompt to choose an emoji to copy
+# to the clipboard. Some font-awesome icons are
+# also supported.
+
+choice=$( cat $SCRIPTS/utilities/.emoji-list.txt | dmenu -i -p "Emojis & Font Awesome")
+
+icon=$(echo $choice | sed "s/\(.\).*$/\1/")
+label=$(echo $choice | sed "s/^..\(.*\)/\1/")
+
+printf $icon | xsel -b
+
+echo "$icon"
+
+if [[ "$icon" == "" ]]; then
+ notify-send "Operation Cancelled"
+else
+ notify-send -i "$HOME/.fonts/svgs/$label.svg" "Clipboard:" "$label has been copied!"
+fi
diff --git a/.local/bin/extract b/.local/bin/extract
new file mode 100755
index 0000000..3258d2a
--- /dev/null
+++ b/.local/bin/extract
@@ -0,0 +1,41 @@
+#!/bin/sh
+# A general, all-purpose extraction script.
+#
+# Default behavior: Extract archive into new directory
+# Behavior with `-c` option: Extract contents into current directory
+
+while getopts "hc" o; do case "${o}" in
+ c) extracthere="True" ;;
+ *) printf "Options:\\n -c: Extract archive into current directory rather than a new one.\\n" && exit ;;
+esac done
+
+if [ -z "$extracthere" ]; then
+ archive="$(readlink -f "$*")" &&
+ directory="$(echo "$archive" | sed 's/\.[^\/.]*$//')" &&
+ mkdir -p "$directory" &&
+ cd "$directory" || exit
+else
+ archive="$(readlink -f "$(echo "$*" | cut -d' ' -f2)")"
+fi
+
+[ "$archive" = "" ] && printf "Give archive to extract as argument.\\n" && exit
+
+if [ -f "$archive" ] ; then
+ case "$archive" in
+ *.tar.bz2|*.tar.xz|*.tbz2) tar xvjf "$archive" ;;
+ *.tar.gz|*.tgz) tar xvzf "$archive" ;;
+ *.lzma) unlzma "$archive" ;;
+ *.bz2) bunzip2 "$archive" ;;
+ *.rar) unrar x -ad "$archive" ;;
+ *.gz) gunzip "$archive" ;;
+ *.tar) tar xvf "$archive" ;;
+ *.zip) unzip "$archive" ;;
+ *.Z) uncompress "$archive" ;;
+ *.7z|*.xpi) 7z x "$archive" ;;
+ *.xz) unxz "$archive" ;;
+ *.exe) cabextract "$archive" ;;
+ *) printf "extract: '%s' - unknown archive method\\n" "$archive" ;;
+ esac
+else
+ printf "File \"%s\" not found.\\n" "$archive"
+fi
diff --git a/.local/bin/fixaudio b/.local/bin/fixaudio
new file mode 100755
index 0000000..699218a
--- /dev/null
+++ b/.local/bin/fixaudio
@@ -0,0 +1,8 @@
+#!bin/sh
+
+base=$(basename "$1")
+ext="${base##*.}"
+base="${base%.*}"
+# ffmpeg -i "$1" -itsoffset 0.350 -i "$1" -c:v h264 -c:a aac -map 0:0 -map 1:1 "$base"_synced."ext" && \
+ffmpeg -i "$1" -itsoffset 0.250 -i "$1" -map 0:v -map 1:a -c copy "$base"_synced."$ext" && \
+notify-send -i "/home/master/.fonts/svg/headphones.svg" "Audio synced"
diff --git a/.local/bin/gd2pdf b/.local/bin/gd2pdf
new file mode 100755
index 0000000..057f13a
--- /dev/null
+++ b/.local/bin/gd2pdf
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+groffdown "$1" | refer -PS -e -p"$REFERBIB" | groff -me -ms -kejpt -T pdf | zathura -
diff --git a/.local/bin/getbib b/.local/bin/getbib
new file mode 100755
index 0000000..ed441c5
--- /dev/null
+++ b/.local/bin/getbib
@@ -0,0 +1,14 @@
+#!/bin/sh
+[ -z "$1" ] && echo "Give either a pdf file or a DOI as an argument." && exit
+
+if [ -f "$1" ]; then
+ # Try to get DOI from pdfinfo or pdftotext output.
+ doi=$(pdfinfo "$1" | grep -io "doi:.*") ||
+ doi=$(pdftotext "$1" 2>/dev/null - | grep -io "doi:.*" -m 1) ||
+ exit 1
+else
+ doi="$1"
+fi
+
+# Check crossref.org for the bib citation.
+curl -s "http://api.crossref.org/works/$doi/transform/application/x-bibtex" -w "\\n"
diff --git a/.local/bin/groffdown b/.local/bin/groffdown
new file mode 100755
index 0000000..f2810a5
--- /dev/null
+++ b/.local/bin/groffdown
@@ -0,0 +1,54 @@
+#!/bin/bash
+
+file=$(readlink -f "$1")
+dir=$(dirname "$file")
+base="${file%.*}"
+
+output=$( sed -e '1,1d
+ s/title:/\.TL\n/
+ s/author:/\.AU\n/
+ s/date:/\.ND\n/
+ s/institution:/\.AI\n/
+
+ s/\\begin{abstract}/\.AB/
+ s/\\end{abstract}/\.AE/
+
+ s/^\#####.\(.*\)/\.NH 5\n\1\n\.PP/g
+ s/^\####.\(.*\)/\.NH 4\n\1\n\.PP/g
+ s/^\###.\(.*\)/\.NH 3\n\1\n\.PP/g
+ s/^\##.\(.*\)/\.NH 2\n\1\n\.PP/g
+ s/^\#.\(.*\)/\.NH 1\n\1\n\.PP/g
+
+ s/\*\*\*\(.*\)\*\*\*$/\n\.BI\ \"\1\"\ /g
+ s/\*\*\*\(.*\)\*\*\*\(.\)$/\n\.BI\ \"\1\"\ \"\2\"/g
+ s/\*\*\*\(.*\)\*\*\*\(.\)/\n\.BI\ \"\1\"\ \"\2\"\n/g
+
+ s/\*\*\(.*\)\*\*$/\n\.B\ \"\1\"\ /g
+ s/\*\*\(.*\)\*\*\(.\)$/\n\.B\ \"\1\"\ \"\2\"/g
+ s/\*\*\(.*\)\*\*\(.\)/\n\.B\ \"\1\"\ \"\2\"\n/g
+
+ s/\*\(.*\)\*$/\n\.I\ \"\1\"\ /g
+ s/\*\(.*\)\*\(.\)$/\n\.I\ \"\1\"\ \"\2\"/g
+ s/\*\(.*\)\*\(.\)/\n\.I\ \"\1\"\ \"\2\"\n/g
+
+ s/`\(.*\)`$/\n\.CW\ \"\1\"\ /g
+ s/`\(.*\)`\(.\)$/\n\.CW\ \"\1\"\ \"\2\"/g
+ s/`\(.*\)`\(.\)/\n\.CW\ \"\1\"\ \"\2\"\n/g
+
+ s/^\ ...............-\ /.IP\ \\(bu\ 10\n/g
+ s/^\ ...........-\ /.IP\ \\(bu\ 8\n/g
+ s/^\ .......-\ /.IP\ \\(bu\ 6\n/g
+ s/^\ ...-\ /.IP\ \\(bu\ 4\n/g
+ s/^-\ /.IP\ \\(bu\ 2\n/g
+ s/^\ .*-\ /.IP\ \\(bu\ 12\n/g
+
+ ' $1)
+# echo "$output" | groff -me -ms -kejpt -T pdf > $base.pdf
+
+# echo "$output" > $base.ms
+# groff -ms $base.ms -T pdf > $base.pdf
+
+echo "$output"
+
+# $output >> output.ms
+# s/\*\*\*.*\*\*\*/Hi\1hi/g
diff --git a/.local/bin/kblayout b/.local/bin/kblayout
new file mode 100755
index 0000000..3cd1132
--- /dev/null
+++ b/.local/bin/kblayout
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+echo "  $(cat $HOME/.cache/layout) "
diff --git a/.local/bin/layouttoggle b/.local/bin/layouttoggle
new file mode 100755
index 0000000..4742080
--- /dev/null
+++ b/.local/bin/layouttoggle
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+layout=$(cat $HOME/.cache/layout)
+
+case "$layout" in
+ ca) setxkbmap -model pc104 -layout us -variant ,,
+ echo us > $HOME/.cache/layout
+ # pkill -RTMIN+46 dwmblocks
+ $SCRIPTS/cron/dwmbar
+ ;;
+ us) setxkbmap -model pc104 -layout ca -variant ,,
+ echo ca > $HOME/.cache/layout
+ # pkill -RTMIN+46 dwmblocks
+ $SCRIPTS/cron/dwmbar
+ ;;
+ *) setxkbmap -model pc104 -layout us -variant ,,
+ echo us > $HOME/.cache/layout
+ # pkill -RTMIN+46 dwmblocks
+ $SCRIPTS/cron/dwmbar
+ ;;
+ esac
+
+# [[ "$layout" == "us" ]] && setxkbmap -model pc104 -layout ca -variant ,, ; echo ca > $HOME/.cache/layout && $SCRIPTS/cron/dwmbar
+# [[ "$layout" == "us" ]] || setxkbmap -model pc104 -layout ca -variant ,, ; echo ca > $HOME/.cache/layout && $SCRIPTS/cron/dwmbar
diff --git a/.local/bin/linkhandler b/.local/bin/linkhandler
new file mode 100755
index 0000000..8b8ca76
--- /dev/null
+++ b/.local/bin/linkhandler
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+# Feed script a url or file location.
+# If an image, it will view in sxiv,
+# if a video or gif, it will view in mpv
+# if a music file or pdf, it will download,
+# otherwise it opens link in browser.
+
+# If no url given. Opens browser. For using script as $BROWSER.
+[ -z "$1" ] && { "$BROWSER"; exit; }
+
+case "$1" in
+ *mkv|*webm|*mp4|*youtube.com/watch*|*youtube.com/playlist*|*youtu.be*|*hooktube.com*|*bitchute.com*)
+ setsid -f mpv --no-config "$1" ;;
+ *png|*jpg|*jpe|*jpeg|*gif|*.webp)
+ curl -sL "$1" > "/tmp/$(echo "$1" | sed "s/.*\///")" && sxiv -a "/tmp/$(echo "$1" | sed "s/.*\///")" >/dev/null 2>&1 & ;;
+ *mp3|*flac|*opus|*mp3?source*)
+ setsid -f tsp curl -LO "$1" >/dev/null 2>&1 ;;
+ *)
+ if [ -f "$1" ]; then "$TERMINAL" -e "$EDITOR $1"
+ else setsid -f "$BROWSER" "$1" >/dev/null 2>&1; fi ;;
+esac
diff --git a/.local/bin/makestereo b/.local/bin/makestereo
new file mode 100755
index 0000000..f43a696
--- /dev/null
+++ b/.local/bin/makestereo
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+file=$(readlink -f "$1")
+dir=$(dirname "$file")
+base="${file##*/}"
+ext="${base##*.}"
+
+ffmpeg -i $file -af "pan=stereo|FL < 1.0*FL + 0.707*FC + 0.707*BL|FR < 1.0*FR + 0.707*FC + 0.707*BR" "$dir/stereo-$base.$ext"
+
diff --git a/.local/bin/manualgen b/.local/bin/manualgen
new file mode 100755
index 0000000..738ef5c
--- /dev/null
+++ b/.local/bin/manualgen
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+config=$(cat $HOME/.config/sxhkd/sxhkdrc | sed "
+s/^\s.*//g;
+s/^#\s.*//;
+s/^##\s/##\n-\ \*\*/;
+s/#-#\s*/##\n-->/;
+s/\s*#-#$/\n##/;
+/^$/d" | awk '/##/{if (x)print x;x="";next}{x=(!x)?$0:x"**:`"$0;}STOP{print x;}' |
+ sed "s/-->/##\ /;
+ s/:\(.*\)$/:\1\`/;
+ s/\s+\s/+/g;
+ s/#\*\*:.*//")
+
+manual=$(cat $HOME/.config/manual.part)
+
+printf " $manual \n $config" | gd2pdf
+
+# printf " $manual \n $config"
diff --git a/.local/bin/mountmenu b/.local/bin/mountmenu
new file mode 100755
index 0000000..6a48c0e
--- /dev/null
+++ b/.local/bin/mountmenu
@@ -0,0 +1,61 @@
+#!/bin/sh
+# Gives a dmenu prompt to mount unmounted drives.
+# If they're in /etc/fstab, they'll be mounted automatically.
+# Otherwise, you'll be prompted to give a mountpoint from already existsing directories.
+# If you input a novel directory, it will prompt you to create that directory.
+
+getmount() { \
+ [ -z "$chosen" ] && exit 1
+ mp="$(find $1 | dmenu -i -l 20 -p "Type in mount point")"
+ [ "$mp" = "" ] && exit 1
+ if [ ! -d "$mp" ]; then
+ mkdiryn=$(printf "No\\nYes" | dmenu -i -l 2 -p "$mp does not exist. Create it?")
+ [ "$mkdiryn" = "Yes" ] && (mkdir -p "$mp" || sudo -A mkdir -p "$mp")
+ fi
+ }
+
+mountusb() { \
+ chosen="$(echo "$usbdrives" | dmenu -i -l 20 -p "Mount which drive?" | awk '{print $1}')"
+ sudo -A mount "$chosen" && notify-send -i "$HOME/.fonts/svg/usb.svg" -a "USB mounting" "$chosen mounted." && exit 0
+ alreadymounted=$(lsblk -nrpo "name,type,mountpoint" | awk '$2=="part"&&$3!~/\/boot|\/games|\/home$|SWAP/&&length($3)>1{printf "-not \( -path *%s -prune \) \ \n",$3}')
+ getmount "/mnt /mount $HOME/Drives/Usb1 $HOME/Drives/Usb2 $HOME/Drives/Usb3 -type d $alreadymounted"
+ partitiontype="$(lsblk -no "fstype" "$chosen")"
+ case "$partitiontype" in
+ "vfat") sudo -A mount -t vfat "$chosen" "$mp" -o rw,umask=0000;;
+ *) sudo -A mount "$chosen" "$mp"; user="$(whoami)"; ug="$(groups | awk '{print $1}')"; sudo -A chown "$user":"$ug" 741 "$mp";;
+ esac
+ notify-send -i "$HOME/.fonts/svg/usb.svg" -a "USB mounting" "$chosen mounted to $mp."
+ }
+
+mountandroid() { \
+ chosen=$(echo "$anddrives" | dmenu -i -p "Which Android device?" | cut -d : -f 1)
+ getmount "$HOME -maxdepth 3 -type d"
+ simple-mtpfs --device "$chosen" "$mp"
+ notify-send -i "$HOME/.fonts/svg/android.svg" -a "Android Mounting
+ Android device mounted to $mp."
+ }
+
+asktype() { \
+ case $(printf "USB\\nAndroid" | dmenu -i -p "Mount a USB drive or Android device?") in
+ USB) mountusb ;;
+ Android) mountandroid ;;
+ esac
+ }
+
+anddrives=$(simple-mtpfs -l 2>/dev/null)
+usbdrives="$(lsblk -rpo "name,type,size,mountpoint" | awk '$2=="part"&&$4==""{printf "%s (%s)\n",$1,$3}' | sed 's/^.*1M.*$//; /^$/d')"
+echo $usbdrives
+
+if [ -z "$usbdrives" ]; then
+ [ -z "$anddrives" ] && notify-send -i "~/.fonts/svg/usb.svg" -a "USB Mounting" "No USB drive or Android device detected" && exit
+ echo "Android device(s) detected."
+ mountandroid
+else
+ if [ -z "$anddrives" ]; then
+ echo "USB drive(s) detected."
+ mountusb
+ else
+ echo "Mountable USB drive(s) and Android device(s) detected."
+ asktype
+ fi
+fi
diff --git a/.local/bin/newsup b/.local/bin/newsup
new file mode 100755
index 0000000..2f47b6f
--- /dev/null
+++ b/.local/bin/newsup
@@ -0,0 +1,15 @@
+#!/bin/sh
+# Set as a cron job to check for new RSS entries for newsboat.
+# If newsboat is open, sends it an "R" key to refresh.
+
+ping -q -c 1 1.1.1.1 > /dev/null || exit
+
+/usr/bin/notify-send -t 1 -i "$HOME/.fonts/svg/rss.svg" -a RSS "Updating RSS feeds..."
+
+pgrep -x newsboat >/dev/null && /usr/bin/xdotool key --window "$(/usr/bin/xdotool search --name newsboat)" R && exit
+
+echo "" > /tmp/newsupdate && dwmbar
+pkill -RTMIN+6 i3blocks
+/usr/bin/newsboat -x reload
+rm -f /tmp/newsupdate
+/usr/bin/notify-send -t 1 -i "$HOME/.fonts/svg/rss.svg" -a RSS "RSS feed update complete." && dwmbar
diff --git a/.local/bin/opout b/.local/bin/opout
new file mode 100755
index 0000000..2c61400
--- /dev/null
+++ b/.local/bin/opout
@@ -0,0 +1,11 @@
+#!/bin/sh
+# opout: "open output": A general handler for opening a file's intended output.
+# I find this useful especially running from vim.
+
+basename="$(echo "$1" | sed 's/\.[^\/.]*$//')"
+
+case "$1" in
+ *.tex|*.rnw|*.gd|*.md|*.rmd|*.ms|*.me|*.mom) setsid "$READER" "$basename".pdf >/dev/null 2>&1 & ;;
+ *.html) setsid "$BROWSER" --new-window "$basename".html >/dev/null 2>&1 & ;;
+ *.sent) setsid sent "$1" >/dev/null 2>&1 & ;;
+esac
diff --git a/.local/bin/pacman-colors b/.local/bin/pacman-colors
new file mode 100755
index 0000000..2b54b07
--- /dev/null
+++ b/.local/bin/pacman-colors
@@ -0,0 +1,48 @@
+#!/bin/bash
+#
+# ANSI color scheme script featuring PACMAN
+# by pfh
+#
+# Initializing procedure by lolilolicon
+#
+
+f=3 b=4
+for j in f b; do
+ for i in {0..7}; do
+ printf -v $j$i %b "\e[${!j}${i}m"
+ done
+done
+bld=$'\e[1m'
+rst=$'\e[0m'
+inv=$'\e[7m'
+
+
+cat << EOF
+
+$rst
+ $f3 ▄███████▄ $f1 ▄██████▄ $f2 ▄██████▄ $f4 ▄██████▄ $f5 ▄██████▄ $f6 ▄██████▄
+ $f3▄█████████▀▀ $f1▄$f7█▀█$f1██$f7█▀█$f1██▄ $f2▄█$f7█ █$f2██$f7█ █$f2█▄ $f4▄█$f7█ █$f4██$f7█ █$f4█▄ $f5▄█$f7█ █$f5██$f7█ █$f5█▄ $f6▄██$f7█▀█$f6██$f7█▀█$f6▄
+ $f3███████▀ $f7▄▄ ▄▄ ▄▄ $f1█$f7▄▄█$f1██$f7▄▄█$f1███ $f2██$f7███$f2██$f7███$f2██ $f4██$f7███$f4██$f7███$f4██ $f5██$f7███$f5██$f7███$f5██ $f6███$f7█▄▄$f6██$f7█▄▄$f6█
+ $f3███████▄ $f7▀▀ ▀▀ ▀▀ $f1████████████ $f2████████████ $f4████████████ $f5████████████ $f6████████████
+ $f3▀█████████▄▄ $f1██▀██▀▀██▀██ $f2██▀██▀▀██▀██ $f4██▀██▀▀██▀██ $f5██▀██▀▀██▀██ $f6██▀██▀▀██▀██
+ $f3 ▀███████▀ $f1▀ ▀ ▀ ▀ $f2▀ ▀ ▀ ▀ $f4▀ ▀ ▀ ▀ $f5▀ ▀ ▀ ▀ $f6▀ ▀ ▀ ▀
+$rst
+EOF
+
+# $rst
+# $f3 ▄███████▄ $f1 ▄██████▄ $f2 ▄██████▄ $f4 ▄██████▄ $f5 ▄██████▄ $f6 ▄██████▄
+# $f3▄█████████▀▀ $f1▄$f7█▀█$f1██$f7█▀█$f1██▄ $f2▄█$f7███$f2██$f7███$f2█▄ $f4▄█$f7███$f4██$f7███$f4█▄ $f5▄█$f7███$f5██$f7███$f5█▄ $f6▄██$f7█▀█$f6██$f7█▀█$f6▄
+# $f3███████▀ $f7▄▄ ▄▄ ▄▄ $f1█$f7▄▄█$f1██$f7▄▄█$f1███ $f2██$f7█ █$f2██$f7█ █$f2██ $f4██$f7█ █$f4██$f7█ █$f4██ $f5██$f7█ █$f5██$f7█ █$f5██ $f6███$f7█▄▄$f6██$f7█▄▄$f6█
+# $f3███████▄ $f7▀▀ ▀▀ ▀▀ $f1████████████ $f2████████████ $f4████████████ $f5████████████ $f6████████████
+# $f3▀█████████▄▄ $f1██▀██▀▀██▀██ $f2██▀██▀▀██▀██ $f4██▀██▀▀██▀██ $f5██▀██▀▀██▀██ $f6██▀██▀▀██▀██
+# $f3 ▀███████▀ $f1▀ ▀ ▀ ▀ $f2▀ ▀ ▀ ▀ $f4▀ ▀ ▀ ▀ $f5▀ ▀ ▀ ▀ $f6▀ ▀ ▀ ▀
+# $bld
+# $f3 ▄███████▄ $f1 ▄██████▄ $f2 ▄██████▄ $f4 ▄██████▄ $f5 ▄██████▄ $f6 ▄██████▄
+# $f3▄█████████▀▀ $f1▄$f7█▀█$f1██$f7█▀█$f1██▄ $f2▄█$f7█ █$f2██$f7█ █$f2█▄ $f4▄█$f7█ █$f4██$f7█ █$f4█▄ $f5▄█$f7█ █$f5██$f7█ █$f5█▄ $f6▄██$f7█▀█$f6██$f7█▀█$f6▄
+# $f3███████▀ $f7▄▄ ▄▄ ▄▄ $f1█$f7▄▄█$f1██$f7▄▄█$f1███ $f2██$f7███$f2██$f7███$f2██ $f4██$f7███$f4██$f7███$f4██ $f5██$f7███$f5██$f7███$f5██ $f6███$f7█▄▄$f6██$f7█▄▄$f6█
+# $f3███████▄ $f7▀▀ ▀▀ ▀▀ $f1████████████ $f2████████████ $f4████████████ $f5████████████ $f6████████████
+# $f3▀█████████▄▄ $f1██▀██▀▀██▀██ $f2██▀██▀▀██▀██ $f4██▀██▀▀██▀██ $f5██▀██▀▀██▀██ $f6██▀██▀▀██▀██
+# $f3 ▀███████▀ $f1▀ ▀ ▀ ▀ $f2▀ ▀ ▀ ▀ $f4▀ ▀ ▀ ▀ $f5▀ ▀ ▀ ▀ $f6▀ ▀ ▀ ▀
+# $rst
+# EOF
+
diff --git a/.local/bin/pipes b/.local/bin/pipes
new file mode 100755
index 0000000..4709745
--- /dev/null
+++ b/.local/bin/pipes
@@ -0,0 +1,136 @@
+#!/usr/bin/env bash
+# pipes.sh: Animated pipes terminal screensaver.
+#
+# This modified version is maintained at:
+#
+# https://github.com/pipeseroni/pipes.sh
+
+VERSION=1.2.0
+
+M=32768
+p=1
+f=75 s=13 r=2000 t=0
+w=80 h=24
+
+resize() {
+ w=$(tput cols) h=$(tput lines)
+}
+
+# ab -> idx = a*4 + b
+# 0: up, 1: right, 2: down, 3: left
+# 00 means going up , then going up -> ┃
+# 12 means going right, then going down -> ┓
+sets=(
+ "┃┏ ┓┛━┓ ┗┃┛┗ ┏━"
+ "│╭ ╮╯─╮ ╰│╯╰ ╭─"
+ "│┌ ┐┘─┐ └│┘└ ┌─"
+ "║╔ ╗╝═╗ ╚║╝╚ ╔═"
+ "|+ ++-+ +|++ +-"
+ "|/ \/-\ \|/\ /-"
+ ".. .... .... .."
+ ".o oo.o o.oo o."
+ "-\ /\|/ /-\/ \|" # railway
+ "╿┍ ┑┚╼┒ ┕╽┙┖ ┎╾" # knobby pipe
+)
+v=()
+RNDSTART=0
+BOLD=1
+NOCOLOR=0
+
+OPTIND=1
+while getopts "p:t:f:s:r:RBChv" arg; do
+case $arg in
+ p) ((p=(OPTARG>0)?OPTARG:p));;
+ t)
+ if [[ "$OPTARG" = c???????????????? ]]; then
+ V+=(${#sets[@]})
+ sets+=("${OPTARG:1}")
+ else
+ ((OPTARG>=0 && OPTARG<${#sets[@]})) && V+=($OPTARG)
+ fi
+ ;;
+ f) ((f=(OPTARG>19 && OPTARG<101)?OPTARG:f));;
+ s) ((s=(OPTARG>4 && OPTARG<16 )?OPTARG:s));;
+ r) ((r=(OPTARG>=0)?OPTARG:r));;
+ R) RNDSTART=1;;
+ B) BOLD=0;;
+ C) NOCOLOR=1;;
+ h) echo -e "Usage: $(basename $0) [OPTION]..."
+ echo -e "Animated pipes terminal screensaver.\n"
+ echo -e " -p [1-]\tnumber of pipes (D=1)."
+ echo -e " -t [0-$((${#sets[@]} - 1))]\ttype of pipes, can be used more than once (D=0)."
+ echo -e " -t c[16 chars]\tcustom type of pipes."
+ echo -e " -f [20-100]\tframerate (D=75)."
+ echo -e " -s [5-15]\tprobability of a straight fitting (D=13)."
+ echo -e " -r LIMIT\treset after x characters, 0 if no limit (D=2000)."
+ echo -e " -R \t\trandom starting point."
+ echo -e " -B \t\tno bold effect."
+ echo -e " -C \t\tno color."
+ echo -e " -h\t\thelp (this screen)."
+ echo -e " -v\t\tprint version number.\n"
+ exit 0;;
+ v) echo "$(basename -- "$0") $VERSION"
+ exit 0
+ esac
+done
+
+# set default values if not by options
+((${#V[@]})) || V=(0)
+
+cleanup() {
+ # clear up standard input
+ read -t 0.001 && cat </dev/stdin>/dev/null
+
+ # terminal has no smcup and rmcup capabilities
+ ((FORCE_RESET)) && reset && exit 0
+
+ tput rmcup
+ tput cnorm
+ stty echo
+ ((NOCOLOR)) && echo -ne '\x1b[0m'
+ exit 0
+}
+trap resize SIGWINCH
+trap cleanup HUP TERM
+trap 'break 2' INT
+
+resize
+
+for (( i=1; i<=p; i++ )); do
+ c[i]=$((i%8)) n[i]=0 l[i]=0
+ ((x[i]=RNDSTART==1?RANDOM*w/32768:w/2))
+ ((y[i]=RNDSTART==1?RANDOM*h/32768:h/2))
+ v[i]=${V[${#V[@]} * RANDOM / M]}
+done
+
+stty -echo
+tput smcup || FORCE_RESET=1
+tput civis
+tput clear
+# any key press exits the loop and this script
+while REPLY=; read -t 0.0$((1000/f)) -n 1 2>/dev/null; [[ -z $REPLY ]] ; do
+ for (( i=1; i<=p; i++ )); do
+ # New position:
+ ((${l[i]}%2)) && ((x[i]+=-${l[i]}+2,1)) || ((y[i]+=${l[i]}-1))
+
+ # Loop on edges (change color on loop):
+ ((${x[i]}>=w||${x[i]}<0||${y[i]}>=h||${y[i]}<0)) && ((c[i]=RANDOM%8, v[i]=V[${#V[@]}*RANDOM/M]))
+ ((x[i]=(x[i]+w)%w))
+ ((y[i]=(y[i]+h)%h))
+
+ # New random direction:
+ ((n[i]=RANDOM%s-1))
+ ((n[i]=(${n[i]}>1||${n[i]}==0)?${l[i]}:${l[i]}+${n[i]}))
+ ((n[i]=(${n[i]}<0)?3:${n[i]}%4))
+
+ # Print:
+ tput cup ${y[i]} ${x[i]}
+ echo -ne "\x1b[${BOLD}m"
+ [[ $NOCOLOR == 0 ]] && echo -ne "\x1b[3${c[i]}m"
+ echo -n "${sets[v[i]]:l[i]*4+n[i]:1}"
+ l[i]=${n[i]}
+ done
+ ((r>0 && t*p>=r)) && tput reset && tput civis && t=0 || ((t++))
+done
+
+cleanup
diff --git a/.local/bin/pipesx b/.local/bin/pipesx
new file mode 100755
index 0000000..2397b56
--- /dev/null
+++ b/.local/bin/pipesx
@@ -0,0 +1,207 @@
+#!/bin/bash
+# Animated pipes.sh terminal screensaver at an angle.
+# Copyright (c) 2013-2015 Yu-Jie Lin
+#
+# 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.
+#
+# Website: https://github.com/pipeseroni/pipesX.sh
+
+VERSION=1.1.0
+
+W=$(tput cols) H=$(tput lines)
+# maximal random value + 1
+M=32768
+
+SETS=('╱╲' '/\' '..' 'oo' '\/')
+COLORS=(31 32 33 34 35 36 37)
+
+# default values
+N=1
+T=()
+I=0.05
+P=25
+R=$((W * H / 4))
+
+HELP="Usage: $(basename $0) [OPTIONS]
+Animated pipes.sh terminal screensaver at an angle.
+
+Options:
+
+ -n [1-] number of pipes. (Default: $N)
+ -t [0-$((${#SETS[@]} - 1))] types of pipes, can be used more than once. (Default: $T)
+ -t c[2chs] custom type of pipes.
+ -i [float] piping interval or maze generation interval. (Default: $I)
+ -P [0-100] probability of a turning pipe or of \\ in maze generation. (Default: $P)
+ -r [LIMIT] reset after x characters, 0 if no limit. (Default: $R)
+ -R random starting point.
+ -C no color.
+ -X maze generation.
+ -h this help message.
+ -v print version number.
+"
+
+while getopts "n:t:i:P:r:RCXhv" arg; do
+ case $arg in
+ n)
+ ((N = OPTARG > 0 ? OPTARG : N))
+ ;;
+ t)
+ if [[ "$OPTARG" = c?? ]]; then
+ T+=(${#SETS[@]})
+ SETS+=("${OPTARG:1}")
+ else
+ T+=($(((OPTARG >= 0 && OPTARG < ${#SETS[@]}) ? OPTARG : T)))
+ fi
+ ;;
+ i)
+ I=$OPTARG
+ ;;
+ P)
+ ((P = (OPTARG >= 0 && OPTARG <= 100) ? OPTARG : P))
+ ;;
+ r)
+ ((R = OPTARG >= 0 ? OPTARG : R))
+ ;;
+ R)
+ RNDSTART=1
+ ;;
+ C)
+ NOCOLOR=1
+ ;;
+ X)
+ MAZE=1
+ ;;
+ h)
+ echo -e "$HELP"
+ exit 0
+ ;;
+ v)
+ echo "$(basename -- "$0") $VERSION"
+ exit 0
+ esac
+done
+
+# set to default values if not by options
+((${#T[@]})) || T=(0)
+
+do_exit() {
+ # clear up standard input
+ read -t 0.001 && cat </dev/stdin>/dev/null
+
+ # terminal has no smcup and rmcup capabilities
+ ((FORCE_RESET)) && reset && exit 0
+
+ tput rmcup
+ tput cnorm
+ stty echo
+ ((NOCOLOR)) && echo -ne '\e[0m'
+ exit 0
+ }
+trap do_exit HUP TERM
+trap 'break 2' INT
+
+# No echo stdin and hide the cursor
+stty -echo
+tput smcup || FORCE_RESET=1
+tput civis
+tput clear
+
+# maze geneartion
+while [[ $MAZE ]] && clear; do
+ [[ $NOCOLOR ]] || echo -ne "\e[1;${COLORS[${#COLORS[@]} * RANDOM / M]}m"
+ for ((i = 0; i < W * H; i++ )); do
+ echo -ne ${SETS[T]:100 * RANDOM / M < P:1}
+ done
+ read -t $I -n 1 && [[ $REPLY =~ q|Q ]] && do_exit
+done
+
+# initialze values
+for ((n = 0; n < N; n++)); do
+ ((X[n] = RNDSTART ? (W + 2) * RANDOM / M : W / 2))
+ ((Y[n] = RNDSTART ? (H + 2) * RANDOM / M : H / 2))
+ D[n]=$((4 * RANDOM / M))
+ C[n]=${COLORS[${#COLORS[@]} * RANDOM / M]}
+ t[n]=${T[${#T[@]} * RANDOM / M]}
+done
+
+clear
+while REPLY=; read -t $I -n 1; [[ -z $REPLY ]] ; do
+ for ((n = 0; n < N; n++, CC = 0)); do
+ x=${X[n]} y=${Y[n]}
+ d=${D[n]} c=${C[n]}
+
+ # calculate new direction `d`
+ # 1 0
+ # \/ 4 directions 0 to 3
+ # /\
+ # 2 3
+ # valid directions: d: dd', d' is the new direction
+ # d
+ # 0: / 00 \ 01 03
+ # / / /\
+ # 1: / 10 \ 11 12
+ # \ \ /\
+ # 2: \/ 21 / 22 / 23
+ # / \
+ # 3: \/ 30 \ 32 \ 33
+ # / \
+ ((d = (100 * RANDOM / M) < P ? ((d + 1) + 2 * (RANDOM % 2)) % 4 : d))
+ ((e = (d + 1) % 4))
+
+ # calculate new position
+ # d' x' y'
+ # 0: x+1 y-1
+ # 1: x-1 y-1
+ # 2: x-1 y+1
+ # 3: x+1 y+1
+ ((xn = e < 2 ? x + 1 : x - 1))
+ ((yn = d < 2 ? y - 1 : y + 1))
+
+ # adjust position and change color?
+ ((d < 2 && y == 0)) && ((yn--, CC=1))
+ ((e > 1 && x == 0)) && ((xn--, CC=1))
+ ((d > 1 && y == H)) && ((yn++, CC=1))
+ ((e < 2 && x == W)) && ((xn++, CC=1))
+ ((CC)) && c=${COLORS[${#COLORS[@]} * RANDOM / M]}
+ ((CC)) && t[n]=${T[${#T[@]} * RANDOM / M]}
+
+ # warp pipe
+ ((xn = (xn + W + 1) % (W + 1)))
+ ((yn = (yn + H + 1) % (H + 1)))
+
+ # calculate position in terminal
+ # d' xt yt
+ # 0: x' y'+1
+ # 1: x'+1 y'+1
+ # 2: x'+1 y'
+ # 3: x' y'
+ ((xt = e < 2 ? xn : xn + 1))
+ ((yt = d < 2 ? yn + 1 : yn))
+
+ echo -ne "\e[${yt};${xt}H"
+ [[ $NOCOLOR ]] || echo -ne "\e[1;${c}m"
+ echo -n "${SETS[t[n]]:d%2:1}"
+
+ X[n]=$xn Y[n]=$yn
+ D[n]=$d C[n]=$c
+ done
+ ((R)) && ((r += N, r >= R)) && r=0 && clear
+done
+
+do_exit
diff --git a/.local/bin/pod-dl b/.local/bin/pod-dl
new file mode 100755
index 0000000..07e1d6b
--- /dev/null
+++ b/.local/bin/pod-dl
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+tmux kill-session -t Podcast 2 > /dev/null
+
+file=$(tail -n 1 $HOME/.local/share/newsboat/queue)
+url=$(echo $file | sed 's/."\/home.*$//')
+dir=$(echo $file | sed 's/^.*"\/home/\/home/; s/.$//')
+
+$TERMINAL -c dropdown -t Podcast -e $SCRIPTS/utilities/tmux-vlc "$url"
+
+# notify-send -i "$HOME/.fonts/svg/rss.svg" "Download initiated"
+# wget -LO $dir $url && \
+# notify-send -i "$HOME/.fonts/svg/rss.svg" "Download Complete" && \
+# st -e $HOME/.scripts/tools/tm-vlc $dir
+
+
+#!/bin/sh
+
+# tmux kill-session -t tm-vlc
+# killall -q vlc
+
+# file=$(cat $HOME/.local/share/newsboat/queue | sed 2q | tail -n 1)
+# url=$(echo $file | sed 's/."\/home.*$//')
+# dir=$(echo $file | sed 's/^.*"\/home/\/home/; s/.$//')
+
+# notify-send -i "$HOME/.fonts/svg/rss.svg" "Download initiated"
+# setsid wget -LO $dir $url & sleep 2s && st -e $HOME/.scripts/tools/tm-vlc "$dir" && \
+# notify-send -i "$HOME/.fonts/svg/rss.svg" "Download Complete"
+
+# echo "" > $HOME/.local/share/newsboat/queue
diff --git a/.local/bin/podentr b/.local/bin/podentr
new file mode 100755
index 0000000..a0997ba
--- /dev/null
+++ b/.local/bin/podentr
@@ -0,0 +1,5 @@
+#!/bin/bash
+# entr command to run `queueandnotify` when newsboat queue is changed
+
+# [ "$(pgrep -x $(basename $0) | wc -l)" -gt 2 ] && exit
+echo /home/master/.local/share/newsboat/queue | entr -p $SCRIPTS/handling/pod-dl 2>/dev/null &
diff --git a/.local/bin/powermenu b/.local/bin/powermenu
new file mode 100755
index 0000000..994953e
--- /dev/null
+++ b/.local/bin/powermenu
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+choice=$(printf "Logout\\nShutdown\\nReboot\\nHibernate" | dmenu -i -p "Power Utility")
+
+case $choice in
+ *L*) $SCRIPTS/control/lockscreen ;;
+ *H*) systemctl suspend ;;
+ *R*) reboot ;;
+ *S*) shutdown -h now ;;
+ "") notify-send -i "$HOME/.fonts/svg/power-off.svg" -a Power "Operation suspended"
+esac
diff --git a/.local/bin/printermenu b/.local/bin/printermenu
new file mode 100755
index 0000000..4487eae
--- /dev/null
+++ b/.local/bin/printermenu
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+lpstat -p -d | sed 's/^printer\ //; s/\ .*$//; s/no//; /^$/d' | dmenu -p "Select printer"
diff --git a/.local/bin/qndl b/.local/bin/qndl
new file mode 100755
index 0000000..df0bedf
--- /dev/null
+++ b/.local/bin/qndl
@@ -0,0 +1,13 @@
+#!/bin/sh
+# $1 is a url; $2 is a command
+[ -z "$1" ] && exit
+base="$(basename "$1")"
+notify-send -i "$HOME/.fonts/svg/rss.svg" "Queuing $base..."
+cmd="$2"
+notify-send $cmd
+[ -z "$cmd" ] && cmd="youtube-dl --add-metadata"
+idnum="$(tsp $cmd "$1")"
+realname="$(echo "$base" | sed "s/?\(source\|dest\).*//;s/%20/ /g")"
+tsp -D "$idnum" mv "$base" "$HOME/Downloads/Podcasts/$realname"
+tsp -D "$idnum" notify-send -i "$HOME/.fonts/svg/check-circle.svg" "$realname done."
+tsp -D "$idnum" sleep 5s && st -e $HOME/.scripts/tools/tm-vlc "$HOME/Downloads/Podcasts/$realname"
diff --git a/.local/bin/queueandnotify b/.local/bin/queueandnotify
new file mode 100755
index 0000000..958b1be
--- /dev/null
+++ b/.local/bin/queueandnotify
@@ -0,0 +1,15 @@
+#!/bin/sh
+# Podboat sucks. This script replaces it.
+# It reads the newsboat queue, queuing downloads with taskspooler.
+# It also removes the junk from extentions.
+queuefile="$HOME/.local/share/newsboat/queue"
+
+while read -r line; do
+ [ -z "$line" ] && continue
+ url="$(echo "$line" | awk '{print $1}')"
+ qndl "$url" "curl -LO"
+done < "$queuefile"
+
+echo > "$queuefile"
+
+
diff --git a/.local/bin/rain b/.local/bin/rain
new file mode 100755
index 0000000..8a8d8f6
--- /dev/null
+++ b/.local/bin/rain
@@ -0,0 +1,100 @@
+#!/bin/bash
+RAINS=("|" "│" "┃" "┆" "┇" "┊" "┋" "╽" "╿")
+COLORS=("\e[37m" "\e[37;1m")
+# More from 256 color mode
+for i in {244..255}; do
+ COLORS=("${COLORS[@]}" "\e[38;5;${i}m")
+done
+NRAINS=${#RAINS[@]}
+NCOLORS=${#COLORS[@]}
+NUM_RAIN_METADATA=5
+
+
+sigwinch() {
+ TERM_WIDTH=$(tput cols)
+ TERM_HEIGHT=$(tput lines)
+ STEP_DURATION=0.025
+ ((MAX_RAINS = TERM_WIDTH * TERM_HEIGHT / 4))
+ ((MAX_RAIN_LENGTH = TERM_HEIGHT < 10 ? 1 : TERM_HEIGHT / 10))
+ # In percentage
+ ((NEW_RAIN_ODD = TERM_HEIGHT > 50 ? 100 : TERM_HEIGHT * 2))
+ ((NEW_RAIN_ODD = NEW_RAIN_ODD * 75 / 100))
+ ((FALLING_ODD = TERM_HEIGHT > 25 ? 100 : TERM_HEIGHT * 4))
+ ((FALLING_ODD = FALLING_ODD * 90 / 100))
+ }
+
+do_exit() {
+ echo -ne "\e[${TERM_HEIGHT};1H\e[0K"
+
+ # Show cursor and echo stdin
+ echo -ne "\e[?25h"
+ stty echo
+ exit 0
+ }
+
+do_render() {
+ # Clean screen first
+ for ((idx = 0; idx < num_rains * NUM_RAIN_METADATA; idx += NUM_RAIN_METADATA)); do
+ X=${rains[idx]}
+ Y=${rains[idx + 1]}
+ LENGTH=${rains[idx + 4]}
+ for ((y = Y; y < Y + LENGTH; y++)); do
+ (( y < 1 || y > TERM_HEIGHT )) && continue
+ echo -ne "\e[${y};${X}H "
+ done
+ done
+
+ for ((idx = 0; idx < num_rains * NUM_RAIN_METADATA; idx += NUM_RAIN_METADATA)); do
+ if ((100 * RANDOM / 32768 < FALLING_ODD)); then
+ # Falling
+ if ((++rains[idx + 1] > TERM_HEIGHT)); then
+ # Out of screen, bye sweet <3
+ rains=("${rains[@]:0:idx}"
+ "${rains[@]:idx+NUM_RAIN_METADATA:num_rains*NUM_RAIN_METADATA}")
+ ((num_rains--))
+ continue
+ fi
+ fi
+ X=${rains[idx]}
+ Y=${rains[idx + 1]}
+ RAIN=${rains[idx + 2]}
+ COLOR=${rains[idx + 3]}
+ LENGTH=${rains[idx + 4]}
+ for ((y = Y; y < Y + LENGTH; y++)); do
+ (( y < 1 || y > TERM_HEIGHT )) && continue
+ echo -ne "\e[${y};${X}H${COLOR}${RAIN}"
+ done
+ done
+ }
+
+trap do_exit TERM INT
+trap sigwinch WINCH
+# No echo stdin and hide the cursor
+stty -echo
+echo -ne "\e[?25l"
+
+echo -ne "\e[2J"
+rains=()
+sigwinch
+while :; do
+ read -n 1 -t $STEP_DURATION ch
+ case "$ch" in
+ q|Q)
+ do_exit
+ ;;
+ esac
+
+ if ((num_rains < MAX_RAINS)) && ((100 * RANDOM / 32768 < NEW_RAIN_ODD)); then
+ # Need new |, 1-based
+ RAIN="${RAINS[NRAINS * RANDOM / 32768]}"
+ COLOR="${COLORS[NCOLORS * RANDOM / 32768]}"
+ LENGTH=$((MAX_RAIN_LENGTH * RANDOM / 32768 + 1))
+ X=$((TERM_WIDTH * RANDOM / 32768 + 1))
+ Y=$((1 - LENGTH))
+ rains=("${rains[@]}" "$X" "$Y" "$RAIN" "$COLOR" "$LENGTH")
+ ((num_rains++))
+ fi
+
+ # Let rain fall!
+ do_render
+done \ No newline at end of file
diff --git a/.local/bin/recordmenu b/.local/bin/recordmenu
new file mode 100755
index 0000000..32b0a34
--- /dev/null
+++ b/.local/bin/recordmenu
@@ -0,0 +1,105 @@
+#!/bin/sh
+
+# Usage:
+# `record`: Ask for recording type via dmenu
+# `record screencast`: Record both audio and screen
+# `record video`: Record only screen
+# `record audio`: Record only audio
+# `record kill`: Kill existing recording
+#
+# If there is already a running instance, user will be prompted to end it.
+
+updateicon() { \
+ echo "$1" > /tmp/recordingicon
+ pkill -RTMIN+9 i3blocks
+ }
+
+killrecording() {
+ recpid="$(cat /tmp/recordingpid)"
+ # kill with SIGTERM, allowing finishing touches.
+ kill -15 "$recpid"
+ rm -f /tmp/recordingpid
+ updateicon ""
+ pkill -RTMIN+9 i3blocks
+ # even after SIGTERM, ffmpeg may still run, so SIGKILL it.
+ sleep 3
+ kill -9 "$recpid"
+ exit
+ }
+
+screencast() { \
+ ffmpeg -y \
+ -f x11grab \
+ -framerate 60 \
+ -s $(xdpyinfo | grep dimensions | awk '{print $2;}') \
+ -i :0.0 \
+ -f alsa -i default \
+ -r 30 \
+ -c:v libx264rgb -crf 0 -preset ultrafast -c:a flac \
+ "$HOME/screencast-$(date '+%y%m%d-%H%M-%S').mkv" &
+ echo $! > /tmp/recordingpid
+ updateicon ""
+ }
+
+video() { ffmpeg \
+ -f x11grab \
+ -s $(xdpyinfo | grep dimensions | awk '{print $2;}') \
+ -i :0.0 \
+ -c:v libx264 -qp 0 -r 30 \
+ "$HOME/video-$(date '+%y%m%d-%H%M-%S').mkv" &
+ echo $! > /tmp/recordingpid
+ updateicon ""
+ }
+
+webcamhidef() { ffmpeg \
+ -f v4l2 \
+ -i /dev/video0 \
+ -video_size 1920x1080 \
+ "$HOME/webcam-$(date '+%y%m%d-%H%M-%S').mkv" &
+ echo $! > /tmp/recordingpid
+ updateicon ""
+ }
+
+webcam() { ffmpeg \
+ -f v4l2 \
+ -i /dev/video0 \
+ -video_size 640x480 \
+ "$HOME/webcam-$(date '+%y%m%d-%H%M-%S').mkv" &
+ echo $! > /tmp/recordingpid
+ updateicon ""
+ }
+
+
+audio() { \
+ ffmpeg \
+ -f alsa -i default \
+ -c:a flac \
+ "$HOME/audio-$(date '+%y%m%d-%H%M-%S').flac" &
+ echo $! > /tmp/recordingpid
+ updateicon ""
+ }
+
+askrecording() { \
+ choice=$(printf "screencast\\nvideo\\naudio\\nwebcam\\nwebcam (hi-def)" | dmenu -i -p "Select recording style")
+ case "$choice" in
+ screencast) screencast;;
+ audio) audio;;
+ video) video;;
+ webcam) webcam;;
+ "webcam (hi-def)") webcamhidef;;
+ esac
+ }
+
+asktoend() { \
+ response=$(printf "No\\nYes" | dmenu -i -p "Recording still active. End recording?") &&
+ [ "$response" = "Yes" ] && killrecording
+ }
+
+
+case "$1" in
+ screencast) screencast;;
+ audio) audio;;
+ video) video;;
+ kill) killrecording;;
+ *) ([ -f /tmp/recordingpid ] && asktoend && exit) || askrecording;;
+esac
diff --git a/.local/bin/rssadd b/.local/bin/rssadd
new file mode 100755
index 0000000..8822fc5
--- /dev/null
+++ b/.local/bin/rssadd
@@ -0,0 +1,9 @@
+#!/bin/sh
+! echo "$1" | grep "https*://\S\+\.[A-Za-z]\+\S*" >/dev/null &&
+ notify-send "That doesn't look like a full URL." && exit
+RSSFILE="$HOME/.config/newsboat/urls"
+if awk '{print $1}' "$RSSFILE" | grep "^$1$" >/dev/null; then
+ notify-send "You already have this RSS feed."
+else
+ echo "$1" >> "$RSSFILE" && notify-send "RSS feed added."
+fi
diff --git a/.local/bin/screenstatus b/.local/bin/screenstatus
new file mode 100755
index 0000000..009c01f
--- /dev/null
+++ b/.local/bin/screenstatus
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+notify-send.sh --replace-file /tmp/vol-notif -a "Screen Brightness" "$(xbacklight -get)%"
+
diff --git a/.local/bin/setbg b/.local/bin/setbg
new file mode 100755
index 0000000..03f2bd0
--- /dev/null
+++ b/.local/bin/setbg
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# This script does the following:
+# Run by itself, set the wallpaper (at X start).
+# If given a file, set that as the new wallpaper.
+# If given a directory, choose random file in it.
+# If wal is installed, also generate a colorscheme.
+
+# Location of link to wallpaper link.
+bgloc="${XDG_CACHE_HOME:-$HOME/.cache/}/wall.png"
+
+[ -f "$1" ] && ln -sf "$(readlink -f "$1")" "$bgloc" && notify-send -i "$bgloc" "Changing wallpaper..."
+
+[ -d "$1" ] && ln -sf "$(find "$(readlink -f "$1")" -iregex '.*.\(jpg\|jpeg\|png\|gif\)' -type f | shuf -n 1)" "$bgloc" && notify-send -i "$bgloc" "Random Wallpaper chosen."
+
+# # If pywal is installed, use it.
+# wal -s -i "$(readlink -f "$bgloc")" -o "${XDG_CONFIG_HOME:-$HOME/.config}/wal/postrun" >/dev/null 2>&1
+
+xwallpaper --zoom "$bgloc" &
+
diff --git a/.local/bin/shortcutgen b/.local/bin/shortcutgen
new file mode 100755
index 0000000..aa4a452
--- /dev/null
+++ b/.local/bin/shortcutgen
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+# Removing unecessary comments and documentation
+raw=$(cat $HOME/.config/shortcutrc | tail -n +19 "$HOME/.config/shortcutrc" | sed "s/^|\s*//g;
+ s/\(.*\)|\(.*\)|\(.*\)|/\1|\2|\3/g;
+ s/\s*$//g;
+ /^$/d")
+# #---NERDTREE---# #
+echo "$raw" | sed "s/\(.*\)\s*|.*|\s\(.*\)/\1\2/g;
+ s/ \{1,\}/ /g;
+ s/.HOME/~/g;
+ s/-*+-*+-*|//g" > $HOME/.NERDTreeBookmarks
+
+# #---ZSH---# #
+# be sure to source $HOME/.cache/zsh-shortcuts in your .zshrc
+echo "$raw" | sed 's/^.*|\s\([A-Za-z0-9]*\)\s*|\s\(.*\)$/alias\ g\1="cd\ \2"/g; /^-*+-*+-*|$/d' > $HOME/.cache/zsh-shortcuts
+
+# #---RANGER---# #
+# Commands implemented:
+# g -> go
+# m -> move to...
+# t -> new tab
+# Y -> copy to...
+# awk '{print "map g"$1" cd "$2"\nmap t"$1" tab_new "$2"\nmap m"$1" shell mv -v %s "$2"\nmap Y"$1" shell cp -rv %s "$2}' >> "$ranger_shortcuts"
+manual=$(sed -n '/Automated Shortcut Generation/q;p' $HOME/.config/ranger/shortcuts.conf)
+printf '\n\n# #---Automated Shortcut Generation---#' >> $HOME/.config/ranger/shortcuts.conf
+echo "$raw" | sed 's/^.*|\s\(.*\)\s|\s\(.*\)$/map\ g\1\ cd\ \2\nmap\ t\1\ tab_new\ \2\nmap\ m\1\ shell\ mv\ -v\ %s\ \2\nmap\ Y\1\ shell\ cp\ -rv\ %s\ \2\n/g;
+ s/.HOME/~/g;
+ s/^-*+-*+-*|$//g' >> $HOME/.config/ranger/shortcuts.conf
+
+# #---ENVIRONMENTAL VARIABLES---# #
+echo "$raw" | sed 's/[A-z,a-z,0-9]*\s*|\s*/g/;
+ s/\s*|\s*/=/; s/$/"/;
+ s/-*+-*+.*$//
+ s/^[A-z]*=/\U&/g
+ s/"$//g' > ~/.cache/shell-vars
+
+# #---Vifm---# #
+vifm=$(echo "$raw" | sed "
+ s/^[A-Z,a-z,0-9]*\s*|//;
+ s/|/:cd/;
+ s/\$HOME/~/;
+ s/^-.*//"
+)
+vifmgo=$( echo "$vifm" | sed "
+ s/\s*/nnoremap\ g/;
+ s/$/<cr>/"
+)
+echo "$vifmgo" > ~/.cache/vifm-shortcuts
+
+# #---Testing---# #
+# echo "$raw" | sed "s/[A-z,a-z,0-9]*\s*|//"
+
+# echo "$raw"
diff --git a/.local/bin/slendy b/.local/bin/slendy
new file mode 100755
index 0000000..766e06c
--- /dev/null
+++ b/.local/bin/slendy
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+initializeANSI()
+{
+ esc=""
+
+ blackf="${esc}[30m"; redf="${esc}[31m"; greenf="${esc}[32m"
+ yellowf="${esc}[33m" bluef="${esc}[34m"; purplef="${esc}[35m"
+ cyanf="${esc}[36m"; whitef="${esc}[37m"
+
+ blackb="${esc}[40m"; redb="${esc}[41m"; greenb="${esc}[42m"
+ yellowb="${esc}[43m" blueb="${esc}[44m"; purpleb="${esc}[45m"
+ cyanb="${esc}[46m"; whiteb="${esc}[47m"
+
+ boldon="${esc}[1m"; boldoff="${esc}[22m"
+ italicson="${esc}[3m"; italicsoff="${esc}[23m"
+ ulon="${esc}[4m"; uloff="${esc}[24m"
+ invon="${esc}[7m"; invoff="${esc}[27m"
+
+ reset="${esc}[0m"
+}
+
+initializeANSI
+
+cat << EOF
+
+ ${reset}${blackf}| | | | |${reset}
+ ${redf}█ █${reset} ${blackf}|${reset} ${greenf}█ █${reset} ${blackf}|${reset} ${yellowf}█ █${reset} ${blackf}|${reset} ${bluef}█ █${reset} ${blackf}|${reset} ${purplef}█ █${reset} ${blackf}|${reset} ${cyanf}█ █${reset}
+ ${redf}███████${reset} ${blackf}|${reset} ${greenf}███████${reset} ${blackf}|${reset} ${yellowf}███████${reset} ${blackf}|${reset} ${bluef}███████${reset} ${blackf}|${reset} ${purplef}███████${reset} ${blackf}|${reset} ${cyanf}███████${reset}
+ ${redf}███${boldon}${redb}██${reset}${redf}█${boldon}${redb}██${reset}${redf}███${reset} ${blackf}|${reset} ${greenf}███${boldon}${greenb}██${reset}${greenf}█${boldon}${greenb}██${reset}${greenf}███${reset} ${blackf}|${reset} ${yellowf}███${boldon}${yellowb}██${reset}${yellowf}█${boldon}${yellowb}██${reset}${yellowf}███${reset} ${blackf}|${reset} ${bluef}███${boldon}${blueb}██${reset}${bluef}█${boldon}${blueb}██${reset}${bluef}███${reset} ${blackf}|${reset} ${purplef}███${boldon}${purpleb}██${reset}${purplef}█${boldon}${purpleb}██${reset}${purplef}███${reset} ${blackf}|${reset} ${cyanf}███${boldon}${cyanb}██${reset}${cyanf}█${boldon}${cyanb}██${reset}${cyanf}███${reset}
+ ${redf}████${boldon}${redb}█${reset}${redf}████${reset} ${blackf}|${reset} ${greenf}████${boldon}${greenb}█${reset}${greenf}████${reset} ${blackf}|${reset} ${yellowf}████${boldon}${yellowb}█${reset}${yellowf}████${reset} ${blackf}|${reset} ${bluef}████${boldon}${blueb}█${reset}${bluef}████${reset} ${blackf}|${reset} ${purplef}████${boldon}${purpleb}█${reset}${purplef}████${reset} ${blackf}|${reset} ${cyanf}████${boldon}${cyanb}█${reset}${cyanf}████${reset}
+ ${redf}█ █ ${boldon}█${reset} ${redf}█ █${reset} ${blackf}|${reset} ${greenf}█ █ ${boldon}█${reset} ${greenf}█ █${reset} ${blackf}|${reset} ${yellowf}█ █ ${boldon}█${reset} ${yellowf}█ █${reset} ${blackf}|${reset} ${bluef}█ █ ${boldon}█${reset} ${bluef}█ █${reset} ${blackf}|${reset} ${purplef}█ █ ${boldon}█${reset} ${purplef}█ █${reset} ${blackf}|${reset} ${cyanf}█ █ ${boldon}█${reset} ${cyanf}█ █${reset}
+ ${redf}█ █${reset} ${blackf}|${reset} ${greenf}█ █${reset} ${blackf}|${reset} ${yellowf}█ █${reset} ${blackf}|${reset} ${bluef}█ █${reset} ${blackf}|${reset} ${purplef}█ █${reset} ${blackf}|${reset} ${cyanf}█ █${reset}
+ ${blackf}| | | | |${reset}
+EOF \ No newline at end of file
diff --git a/.local/bin/surfmenu b/.local/bin/surfmenu
new file mode 100755
index 0000000..0f046e0
--- /dev/null
+++ b/.local/bin/surfmenu
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+url=$(cat ~/.surf/bookmarks | dmenu -i -p "Go: ")
+surf "$url"
diff --git a/.local/bin/tdout b/.local/bin/tdout
new file mode 100755
index 0000000..2d23464
--- /dev/null
+++ b/.local/bin/tdout
@@ -0,0 +1,9 @@
+#!/bin/sh
+# opout: "open output": A general handler for opening a file's intended output.
+# I find this useful especially running from vim.
+
+basename="$(echo "$1" | sed 's/\.[^\/.]*$//')"
+
+case "$1" in
+ *.tex|*.rnw|*.gd|*.md|*.rmd|*.ms|*.me|*.mom) setsid "$READER" "$basename"-tdtable.pdf >/dev/null 2>&1 & ;;
+esac
diff --git a/.local/bin/test.sh b/.local/bin/test.sh
new file mode 100755
index 0000000..a1d8a9e
--- /dev/null
+++ b/.local/bin/test.sh
@@ -0,0 +1,9 @@
+#!/usr/bin
+
+for i in $(ls ~/manjaro-dotfiles/.scripts/)
+do
+ for j in $(ls ~/manjaro-dotfiles/.scripts/$i)
+ do
+ cp ~/manjaro-dotfiles/.scripts/$i/$j ~/.local/bin/
+ done
+done
diff --git a/.local/bin/texclear b/.local/bin/texclear
new file mode 100755
index 0000000..88667e3
--- /dev/null
+++ b/.local/bin/texclear
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+# Clears the build files of a LaTeX/XeLaTeX build.
+# I have vim run this file whenever I exit a .tex file.
+
+case "$1" in
+ *.tex)
+ file=$(readlink -f "$1")
+ dir=$(dirname "$file")
+ base="${file%.*}"
+ find "$dir" -maxdepth 1 -type f -regextype gnu-awk -regex "^$base\\.(4tc|xref|tmp|pyc|pyo|fls|vrb|fdb_latexmk|bak|swp|aux|log|synctex\\(busy\\)|lof|lot|maf|idx|mtc|mtc0|nav|out|snm|toc|bcf|run\\.xml|synctex\\.gz|blg|bbl)" -delete
+ ;;
+ *.rnw)
+ file=$(readlink -f "$1")
+ dir=$(dirname "$file")
+ base="${file%.*}"
+ find "$dir" -maxdepth 1 -type f -regextype gnu-awk -regex "^$base\\.(4tc|xref|tmp|pyc|pyo|fls|vrb|fdb_latexmk|bak|swp|aux|log|synctex\\(busy\\)|lof|lot|maf|idx|mtc|mtc0|nav|out|snm|toc|bcf|run\\.xml|synctex\\.gz|blg|bbl|tex|Rout)" -delete
+ rm "$dir"/Rplots.pdf
+ rm "$dir"/.Rhistory
+ # rm "$dir"/.Rhistory
+ ;;
+ *.rmd)
+ file=$(readlink -f "$1")
+ dir=$(dirname "$file")
+ base="${file%.*}"
+ find "$dir" -maxdepth 1 -type f -regextype gnu-awk -regex "^$base\\.(4tc|xref|tmp|pyc|pyo|fls|vrb|fdb_latexmk|bak|swp|aux|log|synctex\\(busy\\)|lof|lot|maf|idx|mtc|mtc0|nav|out|snm|toc|bcf|run\\.xml|synctex\\.gz|blg|bbl|tex|Rout)" -delete
+ rm "$dir"/Rplots.pdf
+ rm "$dir"/.Rhistory
+ ;;
+ *) printf "Give .tex, .rnw, or .rmd file as argument.\\n" ;;
+esac
+
diff --git a/.local/bin/texinit b/.local/bin/texinit
new file mode 100755
index 0000000..5568c99
--- /dev/null
+++ b/.local/bin/texinit
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+cp $HOME/Dropbox/A/Scholar/All/Templates/Text/LaTeX/001personal/cegep-lanaudiere/article/* ./
+ln $BIB/citations.bib ./citations.bib
+mkdir archives
+
diff --git a/.local/bin/tmux-mpsyt b/.local/bin/tmux-mpsyt
new file mode 100755
index 0000000..b929d52
--- /dev/null
+++ b/.local/bin/tmux-mpsyt
@@ -0,0 +1,16 @@
+#!/bin/sh
+# This script ensures that i3 will spawn a youtube tui.
+session="mps-YouTube"
+
+# Check if the session exists, discarding output
+# We can check $? for the exit status (zero for success, non-zero for failure)
+tmux has-session -t $session 2>/dev/null
+
+if [ $? != 0 ]; then
+ # Set up your session
+ tmux new-session -d -s "$session" mpsyt
+fi
+
+# Attach to created session
+tmux attach-session -t $session
+
diff --git a/.local/bin/tmux-r b/.local/bin/tmux-r
new file mode 100755
index 0000000..14dd08a
--- /dev/null
+++ b/.local/bin/tmux-r
@@ -0,0 +1,18 @@
+#!/bin/sh
+# This script ensures that i3 will spawn a youtube tui.
+session="R"
+
+# Check if the session exists, discarding output
+# We can check $? for the exit status (zero for success, non-zero for failure)
+tmux has-session -t $session 2>/dev/null
+
+if [ $? != 0 ]; then
+ # Set up your session
+ tmux new-session -d -s "$session" R -q --no-save
+ # R -q --no-save
+ # ([ -e /usr/bin/R ] && R -q --no-save) || python -q
+fi
+
+# Attach to created session
+tmux attach-session -t $session
+
diff --git a/.local/bin/tmux-shell b/.local/bin/tmux-shell
new file mode 100755
index 0000000..9c95cf7
--- /dev/null
+++ b/.local/bin/tmux-shell
@@ -0,0 +1,18 @@
+#!/bin/sh
+# This script ensures that i3 will spawn a youtube tui.
+session="Shell"
+
+# Check if the session exists, discarding output
+# We can check $? for the exit status (zero for success, non-zero for failure)
+tmux has-session -t $session 2>/dev/null
+
+if [ $? != 0 ]; then
+ # Set up your session
+ tmux new-session -d -s "$session" zsh
+ # R -q --no-save
+ # ([ -e /usr/bin/R ] && R -q --no-save) || python -q
+fi
+
+# Attach to created session
+tmux attach-session -t $session
+
diff --git a/.local/bin/tmux-vlc b/.local/bin/tmux-vlc
new file mode 100755
index 0000000..dc26c49
--- /dev/null
+++ b/.local/bin/tmux-vlc
@@ -0,0 +1,19 @@
+#!/bin/sh
+# This script ensures that i3 will spawn a youtube tui.
+session="Podcast"
+url=$1
+
+# Check if the session exists, discarding output
+# We can check $? for the exit status (zero for success, non-zero for failure)
+tmux has-session -t $session 2>/dev/null
+
+if [ $? != 0 ]; then
+ # Set up your session
+ tmux new-session -d -s "$session" vlc -I ncurses "$url"
+ # R -q --no-save
+ # ([ -e /usr/bin/R ] && R -q --no-save) || python -q
+fi
+
+# Attach to created session
+tmux attach-session -t $session
+
diff --git a/.local/bin/todotable b/.local/bin/todotable
new file mode 100755
index 0000000..6609a1f
--- /dev/null
+++ b/.local/bin/todotable
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+file=$(readlink -f "$1")
+dir=$(dirname "$file")
+base="${file%.*}"
+
+contents="$1"
+shift
+for i in "$@"; do
+ output=$output"\n"$(cat "$contents" | grep -n "$i" | sed 's/\([0-9]*\):.*'"$i"'.\(.*\)$/-\ \*\*'"$i"':\*\*\ \2\ (line \1)/g'
+ )
+done
+
+
+if [ "$#" -eq $(printf $output | wc -l ) ];
+then
+ rm "$base"-tdtable.pdf
+ exit 0
+else
+ echo -e '---\ntitle: Checklist:\n.PP'"$output" | groffdown | refer -PS -e "-p$REFERBIB" | groff -me -ms -kejpt -T pdf > "$base"-tdtable.pdf
+fi
+# Uncomment for debugging:
+# echo -e '---\ntitle: TODOs\n.PP'"$output" > "$base"-tdtable.gd
diff --git a/.local/bin/trackpadtoggle b/.local/bin/trackpadtoggle
new file mode 100755
index 0000000..4bf01ae
--- /dev/null
+++ b/.local/bin/trackpadtoggle
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+# Give this the 1 argument to activate the Trackpad.
+# Give this 0 to disable it.
+
+input="$1"
+
+xinput --set-prop 12 "Device Enabled" $input
+
+case "$input" in
+ 0) notify-send -i "$HOME/.fonts/svg/mouse-pointer.svg" -a Trackpad "Trackpad successfully disabled" ;;
+ 1) notify-send -i "$HOME/.fonts/svg/mouse-pointer.svg" -a Trackpad "Trackpad successfully enabled" ;;
+ *) notify-send -i "$HOME/.fonts/svg/mouse-pointer.svg" -a Trackpad "Error" ;;
+esac
+
diff --git a/.local/bin/transadd b/.local/bin/transadd
new file mode 100755
index 0000000..f7e95d6
--- /dev/null
+++ b/.local/bin/transadd
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# Mimeapp script for adding torrent to transmission-daemon, but will also start the daemon first if not running.
+
+# transmission-daemon sometimes fails to take remote requests in its first moments.
+
+pgrep -x transmission-da || (transmission-daemon && notify-send "Starting transmission daemon..." && sleep 3 && pkill -RTMIN+7 i3blocks)
+
+transmission-remote -a "$@" && notify-send " Torrent added."
diff --git a/.local/bin/umountmenu b/.local/bin/umountmenu
new file mode 100755
index 0000000..39940a3
--- /dev/null
+++ b/.local/bin/umountmenu
@@ -0,0 +1,42 @@
+#!/bin/sh
+# A dmenu prompt to unmount drives.
+# Provides you with mounted partitions, select one to unmount.
+# Drives mounted at /, /boot, /games and /home will not be options to unmount.
+
+unmountusb() {
+ [ -z "$drives" ] && exit
+ chosen=$(echo "$drives" | dmenu -i -p "Unmount which drive?" | awk '{print $1}')
+ [ -z "$chosen" ] && exit
+ sudo -A umount "$chosen" && notify-send -i "$HOME/.fonts/svg/usb.svg" -a "USB Mounting" "$chosen unmounted."
+ }
+
+unmountandroid() { \
+ chosen=$(awk '/simple-mtpfs/ {print $2}' /etc/mtab | dmenu -i -p "Unmount which device?")
+ [ -z "$chosen" ] && exit
+ sudo -A umount -l "$chosen" && notify-send -i "$HOME/.fonts/svg/android.svg" -a "Android unmounting
+ $chosen unmounted."
+ }
+
+asktype() { \
+ case "$(printf "USB\\nAndroid" | dmenu -i -p "Unmount a USB drive or Android device?")" in
+ USB) unmountusb ;;
+ Android) unmountandroid ;;
+ esac
+ }
+
+drives=$(lsblk -nrpo "name,type,size,mountpoint" | awk '$2=="part"&&$4!~/\/boot|\/games|\/home$|SWAP/&&length($4)>1{printf "%s (%s)\n",$4,$3}')
+
+if ! grep simple-mtpfs /etc/mtab; then
+ [ -z "$drives" ] && notify-send -i "~/.fonts/svg/usb.svg" -a "USB Mounting" "No drives to unmount." && exit
+ echo "Unmountable USB drive detected."
+ unmountusb
+else
+ if [ -z "$drives" ]
+ then
+ echo "Unmountable Android device detected."
+ unmountandroid
+ else
+ echo "Unmountable USB drive(s) and Android device(s) detected."
+ asktype
+ fi
+fi
diff --git a/.local/bin/unix b/.local/bin/unix
new file mode 100755
index 0000000..14d7ef0
--- /dev/null
+++ b/.local/bin/unix
@@ -0,0 +1,25 @@
+#!/bin/sh
+#original artwork by http://www.sanderfocus.nl/#/portfolio/tech-heroes
+#converted to shell by #nixers @ irc.unix.chat
+
+cat << 'eof'
+ ,_ ,_==▄▂
+ , ▂▃▄▄▅▅▅▂▅¾. / /
+ ▄▆<´ "»▓▓▓%\ / / / /
+ ,▅7" ´>▓▓▓% / / > / >/%
+ ▐¶▓ ,»▓▓¾´ /> %/%// / /
+ ▓▃▅▅▅▃,,▄▅▅▅Æ\// ///>// />/ /
+ V║«¼.;→ ║<«.,`=// />//%/% / /
+ //╠<´ -²,)(▓~"-╝/¾/ %/>/ />
+ / / / ▐% -./▄▃▄▅▐, /7//;//% / /
+ / ////`▌▐ %zWv xX▓▇▌//&;% / /
+ / / / %//%/¾½´▌▃▄▄▄▄▃▃▐¶\/& /
+ </ /</%//`▓!%▓%╣[38;5;255;╣WY<Y)y&/`\
+ / / %/%//</%//\i7; ╠N>)VY>7; \_ UNIX IS VERY SIMPLE IT JUST NEEDS A
+ / /</ //<///<_/%\▓ V%W%£)XY _/%‾\_, GENIUS TO UNDERSTAND ITS SIMPLICITY
+ / / //%/_,=--^/%/%%\¾%¶%%} /%%%%%%;\,
+ %/< /_/ %%%%%;X%%\%%;, _/%%%;, \
+ / / %%%%%%;, \%%l%%;// _/%;, dmr
+ / %%%;, <;\-=-/ /
+ ;, l
+eof \ No newline at end of file
diff --git a/.local/bin/vifmrun b/.local/bin/vifmrun
new file mode 100755
index 0000000..69f2d22
--- /dev/null
+++ b/.local/bin/vifmrun
@@ -0,0 +1,16 @@
+#!/usr/bin/env bash
+
+export FIFO_UEBERZUG="/tmp/vifm-ueberzug-${PPID}"
+
+function cleanup() {
+ rm "$FIFO_UEBERZUG" 2>/dev/null
+ pkill -P $$ 2>/dev/null
+}
+
+rm "$FIFO_UEBERZUG" 2>/dev/null
+mkfifo "$FIFO_UEBERZUG"
+trap cleanup EXIT
+tail --follow "$FIFO_UEBERZUG" | ueberzug layer --silent --parser bash &
+
+vifm "$@"
+cleanup
diff --git a/.local/bin/volumectl b/.local/bin/volumectl
new file mode 100755
index 0000000..d8766b7
--- /dev/null
+++ b/.local/bin/volumectl
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+# Usage:
+
+# The first argument is the percentage by which you should
+# change the volume
+
+# The second argument should be `+` or `-`
+# to choose wether to increment or decrement audio.
+# If no second argument is given, the audio will be SET
+# to a set percentage fixed by the first argument.
+case "$1" in
+ mute) amixer set Master toggle ;;
+ *) pcnt="$1"
+ sign="$2"
+ amixer set Master $pcnt%$sign ;;
+esac
+
+mute=""
+vol=$(awk '/%/ {gsub(/[\[\]]/,""); print $4}' <(amixer sget Master))
+amixer sget Master | grep off && mute="(muted)"
+notify-send.sh -t 1000 --replace-file /tmp/vol-notif -a Volume "$vol $mute"
+
diff --git a/.local/bin/vpnmenu b/.local/bin/vpnmenu
new file mode 100755
index 0000000..d679c49
--- /dev/null
+++ b/.local/bin/vpnmenu
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+current=$(expressvpn status | sed "s/.......................//; 1q")
+
+location=$(expressvpn list recomend | sed "1,4d; s/^.*\t//" | head | dmenu -l 10)
+
+if [ ! -n "$location" ]
+then
+ notify-send -i "$HOME/.fonts/svg/shield.svg" -a "VPN Module" "Operation aborted"
+else
+ expressvpn disconnect; expressvpn connect "$location"
+fi
+
+# expressvpn disconnect; expressvpn connect "$location"
diff --git a/.local/bin/vpnstatus b/.local/bin/vpnstatus
new file mode 100755
index 0000000..908aa76
--- /dev/null
+++ b/.local/bin/vpnstatus
@@ -0,0 +1,25 @@
+#!/bin/bash
+# Outputs if Express VPN is connected or not
+
+vpnstatus=$(expressvpn status | head -n 1)
+
+case "$vpnstatus" in
+ *"Not"*) icon=""
+ ;;
+ *"Connected"*) icon=""
+ ;;
+ *"Connecting"*) icon=" "
+ ;;
+ *) icon=""
+esac
+
+echo " $icon "
+
+
+# \033]01;31\] # pink
+# \033]00m\] # white
+# \033]01;36\] # bold green
+# \033]02;36\] # green
+# \033]01;34\] # blue
+# \033]01;33\] # bold yellow
+# s/onnected\sto\s//;
diff --git a/.local/bin/websearch b/.local/bin/websearch
new file mode 100755
index 0000000..2de2c75
--- /dev/null
+++ b/.local/bin/websearch
@@ -0,0 +1,31 @@
+#!/bin/sh
+# Gives a dmenu prompt to search Google.
+# Without input, will open Google.com.
+# URLs will be directly handed to the browser.
+# Anything else, it search it.
+
+query=$(printf " " | dmenu -i -p " Search Google")
+
+echo "$query" | head -c 1
+
+if [ $(echo "$query" | head -c 1) == "\!" ]; then
+ $BROWSER "https://duckduckgo.com/?q=$query&t=ffab&atb=v1-1"
+else
+ $BROWSER "https://google.com/?q=$query&t=ffab&atb=v1-1"
+fi
+
+
+# # pgrep -x dmenu && exit
+# # pgrep -x dmenu
+
+# choice=$(echo "" | dmenu -i -p " Search DuckDuckGo") || exit 1
+
+# if [ "$choice" = "" ]; then
+# firefox "https://duckduckgo.com"
+# else
+# if echo "$choice" | grep "^(http:\/\/|https:\/\/)?[a-zA-Z0-9]+\.[a-zA-Z]+(/)?.*$"; then
+# firefox "$choice"
+# else
+# firefox "https://duckduckgo.com/?q=$choice&t=ffab&atb=v1-1"
+# fi
+# fi
diff --git a/.local/bin/wifi b/.local/bin/wifi
new file mode 100755
index 0000000..102a6a4
--- /dev/null
+++ b/.local/bin/wifi
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+case "$(cat /sys/class/net/wlp0s20f3/operstate)" in
+ up) echo "  " ;;
+ down) echo "  " ;;
+esac
+
+# 
+# 
+# 
diff --git a/.local/bin/yadms b/.local/bin/yadms
new file mode 100755
index 0000000..56e8fce
--- /dev/null
+++ b/.local/bin/yadms
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+dotfiles=$(yadm status | sed '1,3d;
+ 5,$d;
+ s/.$//g')
+
+if [[ ${dotfiles:0:1} == "n" ]]; then
+ warn=""
+else
+ warn="  "
+fi
+
+
+
+echo "  $warn"
diff --git a/.profile b/.profile
new file mode 100644
index 0000000..8684d7c
--- /dev/null
+++ b/.profile
@@ -0,0 +1,48 @@
+export GOPATH=$HOME/.go
+export SCRIPTS=$HOME/.scripts
+export PATH="$PATH:$(du "$HOME/.scripts/" | cut -f2 | tr '\n' ':')"
+export PATH=$PATH:/root/.local/bin
+export PATH=$PATH:$HOME/.local/bin
+export PATH=$PATH:$HOME/.cargo/bin
+export PATH=$GOPATH/bin:$PATH
+export QT_QPA_PLATFORMTHEME="qt5ct"
+export EDITOR=/usr/bin/nvim
+export READER=/usr/bin/zathura
+export GTK2_RC_FILES="$HOME/.gtkrc-2.0"
+export QT_QPA_PLATFORMTHEME="qt5ct"
+export GRDB="dropbox://default@/git-private"
+export TERM=st
+export TERMINAL=st
+export BIB=$HOME/Dropbox/A/Scholar/All/References
+export REFERBIB=$HOME/Dropbox/A/Scholar/All/References/bibliography.refer
+export DISTRIB_ID=arch
+export DISTRIB_RELEASE=$(uname -r)
+# export GOROOT=/usr/bin/go
+
+# fix "xdg-open fork-bomb" export your preferred browser from here
+export BROWSER=firefox
+
+# less/man colors
+export LESS=-R
+export LESS_TERMCAP_mb="$(printf '%b' '')" # begin bold
+export LESS_TERMCAP_md="$(printf '%b' '')" # begin blink
+export LESS_TERMCAP_me="$(printf '%b' '')" # reset bold/blink
+export LESS_TERMCAP_so="$(printf '%b' '')" # begin reverse video
+export LESS_TERMCAP_se="$(printf '%b' '')" # reset reverse video
+export LESS_TERMCAP_us="$(printf '%b' '')" #begin underline
+export LESS_TERMCAP_ue="$(printf '%b' '')" # reset underline
+
+# Start Desktop Environment if on the main TTY
+if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
+startx
+fi
+
+# Map CAPS_LOCK correctly:
+$SCRIPTS/remaps
+
+# gh completion
+eval "$(gh completion -s zsh)"
+
+# Generate shortcuts and aliases
+shortcutgen
+aliasgen
diff --git a/.tmux.conf b/.tmux.conf
new file mode 100644
index 0000000..2a4d744
--- /dev/null
+++ b/.tmux.conf
@@ -0,0 +1,113 @@
+set -g prefix C-a
+setw -g mode-keys vi
+
+# split panes using | and -
+bind | split-window -h
+bind = split-window -v
+unbind '"'
+unbind %
+# reload config file (change file location to your the tmux.conf you want to use)
+bind r source-file ~/.tmux.conf
+# switch panes using Alt-arrow without prefix
+bind -n M-Left select-pane -L
+bind -n M-Right select-pane -R
+bind -n M-Up select-pane -U
+bind -n M-Down select-pane -D
+# don't rename windows automatically
+set-option -g allow-rename off
+
+# escape-time
+set -sg escape-time 0
+
+# Shell naming
+set-option -g set-titles on
+set-option -g set-titles-string "dropdown_#S"
+
+# move around panes with hjkl, as one would in vim after pressing ctrl-w
+bind h select-pane -L
+bind j select-pane -D
+bind k select-pane -U
+bind l select-pane -R
+
+# swap pane
+bind-key -n C-S-Left swap-window -t -1
+bind-key -n C-S-Right swap-window -t +1
+
+# resize panes like vim
+# feel free to change the "1" to however many lines you want to resize by, only
+# one at a time can be slow
+bind < resize-pane -L 10
+bind > resize-pane -R 10
+bind - resize-pane -D 10
+bind + resize-pane -U 10
+
+# sync panes
+bind b setw synchronize-panes\; display 'Synchronize-panes'
+
+# vi-style controls for copy mode
+setw -g mode-keys vi
+
+# force a reload of the config file
+unbind r
+bind r source-file ~/.tmux.conf\; display "Reloaded!"
+
+# main vertical layout settings
+bind M-6 set-window-option main-pane-width '165'\; select-layout main-vertical
+
+# set window and pane index to 1 (0 by default)
+set-option -g base-index 1
+setw -g pane-base-index 1
+
+# set -g renumber-windows on
+
+# unicode support
+#setw -g utf8 on
+#set -g status-utf8 on
+
+# listen to alerts from all windows
+set -g bell-action any
+
+# auto rename window
+set-option -g allow-rename off
+
+set-option history-file ~/.tmux/.tmux_history
+
+#..........
+# Status line - http://dotshare.it/dots/963/
+# Colours,
+# for i in {0..255} ; do
+# printf "\x1b[38;5;${i}mcolour${i}\n"
+# done
+#..........
+set -g status-left ''
+set -g status-justify right
+set -g status-position bottom
+# set -g status-right '#[fg=colour176,bold,bg=colour236,bold] %B #[fg=colour146,bold,bg=colour236,bold]%d, #[fg=colour173,bold,bg=colour236,bold]%Y#[fg=default] #[fg=colour234,bold,bg=colour12,bold] %R '
+set -g status-right ''
+set -g status-right-length 100
+set -g status-bg default
+
+# Dusk and black
+# setw -g window-status-format '#[fg=colour180,bold,bg=colour236,bold] #I #[fg=colour236,bold,bg=colour180,bold] #W '
+# setw -g window-status-current-format '#[fg=colour236,bold,bg=colour180,bold] #I #[fg=colour180,bold,bg=colour236,bold] #W '
+
+# Black and white
+setw -g window-status-format '#[fg=white,bg=default]#{?window_zoomed_flag,(, }#I #W#{?window_zoomed_flag,), }'
+# setw -g window-status-current-format '#[fg=colour232,bold,bg=white,bold] #I #W '
+#setw -g window-status-current-format '#{?window_zoomed_flag,#[bg=white]#[fg=red](,}#[fg=colour232,bold,bg=white,bold]#I #W#{?window_zoomed_flag,#[fg=red]),}'
+setw -g window-status-current-format '#[fg=colour232,bold,bg=white]#{?window_zoomed_flag,(, }#I #W#{?window_zoomed_flag,), }'
+
+# Bold Purple and black
+# setw -g window-status-format '#[fg=colour213,bg=colour236] #I #[fg=colour213,bg=colour236] #W '
+# setw -g window-status-current-format '#[fg=colour236,bold,bg=colour213,bold] #I #[fg=colour213,bold,bg=colour236,bold] #W '
+
+# Chark Purple and black
+# setw -g window-status-format '#[fg=colour176,bg=colour236] #I #[fg=colour176,bg=colour236] #W '
+# setw -g window-status-current-format '#[fg=colour236,bold,bg=colour176,bold] #I #[fg=colour176,bold,bg=colour236,bold] #W '
+
+setw -g window-status-format '#[fg=colour1,bg=colour1] #I #[fg=colour253,bg=colour52] #W '
+setw -g window-status-current-format '#[fg=colour30,bold,bg=colour253,bold] #I #[fg=colour253,bold,bg=colour30,bold] #W '
+#..........
+# Other good status line
+# 1. http://dotshare.it/dots/586/
+#..........
diff --git a/.xinitrc b/.xinitrc
new file mode 100644
index 0000000..0be1368
--- /dev/null
+++ b/.xinitrc
@@ -0,0 +1,21 @@
+xwallpaper --zoom ~/.cache/wall.png &
+crond &
+crond -f $HOME/.config/scron/crontab &
+nm-applet &
+blueman-applet &
+pnmixer &
+dropbox &
+sxhkd &
+$SCRIPTS/remaps &
+dunst &
+protonmail-bridge --no-window &
+xautolock -time 5 -detectsleep -locker slock &
+picom -b &
+flashfocus &
+echo "/tmp/imapsyncicon_$USER" | entr $SCRIPTS/cron/dwmbar &
+echo "" > $HOME/.local/share/newsboat/queue
+echo us > $HOME/.cache/layout
+xrdb -load $HOME/.Xresources
+$SCRIPTS/cron/dwmbar &
+exec dwm
+# vim:filetype=sh
diff --git a/.zshrc b/.zshrc
new file mode 100644
index 0000000..feb342c
--- /dev/null
+++ b/.zshrc
@@ -0,0 +1,101 @@
+# ______ _____ _ _
+# |___ // ____| | | |
+# / /| (___ | |__| |
+# / / \___ \| __ |
+# / /__ ____) | | | |
+# /_____|_____/|_| |_|
+#
+
+# The following lines were added by compinstall
+zstyle ':completion:*' completer _complete _ignored _correct _approximate
+zstyle ':completion:*' file-sort name
+zstyle ':completion:*' matcher-list '' 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' 'r:|[._-,]=** r:|=**'
+zstyle ':completion:*' preserve-prefix '//[^/]##/'
+zstyle ':completion:*' squeeze-slashes true
+zstyle :compinstall filename '/home/master/.zshrc'
+
+autoload -Uz compinit
+zstyle ':completion:*' menu select
+zmodload zsh/complist
+
+compinit
+# End of lines added by compinstall
+
+# Vim keys in tab complete menu:
+bindkey -M menuselect 'h' vi-backward-char
+bindkey -M menuselect 'k' vi-up-line-or-history
+bindkey -M menuselect 'l' vi-forward-char
+bindkey -M menuselect 'j' vi-down-line-or-history
+
+export KEYTIMEOUT=1
+
+# Change cursor shape for different vi modes.
+function zle-keymap-select {
+ if [[ ${KEYMAP} == vicmd ]] ||
+ [[ $1 = 'block' ]]; then
+ echo -ne '\e[1 q'
+
+ elif [[ ${KEYMAP} == main ]] ||
+ [[ ${KEYMAP} == viins ]] ||
+ [[ ${KEYMAP} = '' ]] ||
+ [[ $1 = 'beam' ]]; then
+ echo -ne '\e[5 q'
+ fi
+}
+zle -N zle-keymap-select
+
+zle-line-init() {
+ zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere)
+ echo -ne "\e[5 q"
+}
+zle -N zle-line-init
+
+# Use beam shape cursor on startup.
+echo -ne '\e[5 q'
+# Use beam shape cursor for each new prompt.
+preexec() { echo -ne '\e[5 q' ;}
+
+
+# Lines configured by zsh-newuser-install
+HISTFILE=~/.cache/zsh-history
+HISTSIZE=1000
+SAVEHIST=10000
+setopt appendhistory autocd extendedglob nomatch
+unsetopt beep notify
+bindkey -v
+# End of lines configured by zsh-newuser-install
+
+# Git current branch setup
+autoload -Uz vcs_info
+precmd_vcs_info() { vcs_info }
+precmd_functions+=( precmd_vcs_info )
+setopt prompt_subst
+
+# Prompt theme
+PROMPT=" %B%F{blue}π %b%F{yellow}"
+RPROMPT="\$vcs_info_msg_0_ %B%F{magenta}(%B%F{cyan}%1/%B%F{magenta})"
+
+zstyle ':vcs_info:git:*' formats '%b'
+
+# Loading shortcuts made by aliasgen and shortcutgen
+source $HOME/.cache/zsh-aliases*
+source $HOME/.cache/zsh-shortcuts
+source $HOME/.cache/shell-vars
+
+# Making ranger useful:
+alias ranger='ranger --choosedir=$HOME/.rangerdir; LASTDIR=`cat $HOME/.rangerdir`; cd "$LASTDIR"'
+
+# Vifm with sensible cd option
+vicd()
+{
+ local dst="$(command vifmrun --choose-dir - "$@")"
+ [[ "$dst" == "" ]] && \
+ echo 'Directory picking cancelled/failed' && \
+ return 1 \
+ || cd "$dst"
+}
+
+# Load zsh-syntax-highlighting; should be last.
+source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh 2>/dev/null
+
+eval $(thefuck --alias)