From 59677f3b9ca9b792f76b0a16eef0203eca8f187c Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Fri, 3 Jan 2025 22:32:55 +0100 Subject: [PATCH 01/12] qutebrowser: Include sessions into qutedmenu script If 'yq' is found on the system, the qutedmenu script will now also traverse any saved sessions for urls (either active or historic) and display those as well. Also added a simple check for the sqlite3 and yq tools and spit out a warning if either isn't found. Program will continue unhindered and just ignore the history/session urls respectively. --- qutebrowser/scripts/qutedmenu | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/qutebrowser/scripts/qutedmenu b/qutebrowser/scripts/qutedmenu index a6b69b8..d32b47f 100755 --- a/qutebrowser/scripts/qutedmenu +++ b/qutebrowser/scripts/qutedmenu @@ -7,6 +7,11 @@ #:bind o spawn --userscript /path/to/userscripts/qutedmenu open #:bind O spawn --userscript /path/to/userscripts/qutedmenu tab +warn() { + echo "$1" >&2 +} + + readonly confdir=${XDG_CONFIG_HOME:-$HOME/.config} readonly datadir=${XDG_DATA_HOME:-$HOME/.local/share} readonly optsfile=$confdir/dmenu/bemenucolors @@ -24,8 +29,21 @@ create_menu() { printf -- '%s\n' "$url" done <"$QUTE_CONFIG_DIR"/bookmarks/urls + # Saved sessions + if type yq >/dev/null 2>&1; then + while read -r url; do + printf -- '%s\n' "$url" + done < <(yq ".windows.[].tabs.[].history.[].url" "${QUTE_DATA_DIR}"/sessions/*.yml | sed -e 's/^"\(.*\)"$/\1/') + else + warn "Did not find yq executable, not searching saved sessions." + fi + # Finally history - printf -- '%s\n' "$(sqlite3 -separator ' ' "$QUTE_DATA_DIR/history.sqlite" 'select title, url from CompletionHistory')" + if type sqlite3 >/dev/null 2>&1; then + printf -- '%s\n' "$(sqlite3 -separator ' ' "$QUTE_DATA_DIR/history.sqlite" 'select title, url from CompletionHistory')" + else + warn "Did not find sqlite3 executable, not searching history." + fi } get_selection() { @@ -56,5 +74,6 @@ url=${url/*http/http} case $1 in open) printf '%s' "open $url" >>"$QUTE_FIFO" || qutebrowser "$url" ;; +print) echo "$url" ;; tab | *) printf '%s' "open -t $url" >>"$QUTE_FIFO" || qutebrowser "$url" ;; esac From 81bf5b46e5856bdc2a663ca6e5e4ca592528913d Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Fri, 3 Jan 2025 22:33:16 +0100 Subject: [PATCH 02/12] vifm: Prefer vimiv to other viewers --- terminal/.config/vifm/vifmrc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/terminal/.config/vifm/vifmrc b/terminal/.config/vifm/vifmrc index 35f7f2a..55c2f90 100644 --- a/terminal/.config/vifm/vifmrc +++ b/terminal/.config/vifm/vifmrc @@ -441,6 +441,8 @@ fileviewer *.[1-8] man ./%c | col -b " Images filextype *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm + \ {View in vimiv} + \ vimiv %f, \ {View in imv} \ imv %f %i, \ {View in viu} @@ -449,8 +451,6 @@ filextype *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm \ vifm-thumbnailer %c, \ {View in nsxiv} \ nsxiv %f, - \ {View in vimiv} - \ vimiv %f, \ {View in sxiv} \ sxiv %f, \ {View in feh} From 77348e09c7ea9573b22d05be199dc34376336bac Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Fri, 3 Jan 2025 22:33:57 +0100 Subject: [PATCH 03/12] mpv: Update legacy options --- multimedia/.config/mpv/mpv.conf | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/multimedia/.config/mpv/mpv.conf b/multimedia/.config/mpv/mpv.conf index d928d32..302d642 100644 --- a/multimedia/.config/mpv/mpv.conf +++ b/multimedia/.config/mpv/mpv.conf @@ -39,13 +39,11 @@ osd-font='Iosevka Nerd Font' osd-font-size=15 ### Subtitles - ## options and compatibility -# vsfilter backward compatibility -sub-ass-vsfilter-blur-compat=yes +sub-ass-use-video-data=all sub-ass-scale-with-window=no # custom ass style params -sub-ass-force-style=Kerning=yes +sub-ass-style-overrides=Kerning=yes # fuzzy-search available subs in folder sub-auto=fuzzy # search for external subs in these relative subdirectories @@ -85,7 +83,6 @@ audio-pitch-correction=yes ### Video hwdec=auto -profile=opengl-hq opengl-early-flush=auto opengl-pbo=no # ever so slightly up saturation From dc067c860d5e76d38dc7a94355a89fed31cc6660 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 4 Jan 2025 10:45:06 +0100 Subject: [PATCH 04/12] vifm: Add zoxide integration If zoxide is found on the system, vifm will automatically add any paths traversed into the zoxide database. It will also have a new internal command 'zoxide' with which you can open a menu to search all zoxide-known paths - it is also added as a mapping to z. --- terminal/.config/vifm/vifmrc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/terminal/.config/vifm/vifmrc b/terminal/.config/vifm/vifmrc index 55c2f90..0e96c5c 100644 --- a/terminal/.config/vifm/vifmrc +++ b/terminal/.config/vifm/vifmrc @@ -325,6 +325,14 @@ nnoremap ,T :!vifm-thumbnailer -r -t %u %c " batch rename or delete files in current dir nnoremap ,r :!vidir +if executable('zoxide') + " integrate zoxide search and add any vifm-visited paths automatically + " adapted from https://q2a.vifm.info/949/how-can-i-integrate-zoxide-into-vifm + command! zoxide :set noquickview | :execute 'cd' fnameescape(system('zoxide query --interactive "%a" 2>/dev/tty')) '%IU' | redraw + nnoremap z :zoxide + autocmd DirEnter * !zoxide add %d %i +endif + " allows preview to work for normal view and single pane view noremap w : if layoutis('only') \| if &lines + 50 < &columns | vsplit | else | split | endif From 0237b7d56907637f4312d4f558b067727dbcc9db Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 4 Jan 2025 10:48:16 +0100 Subject: [PATCH 05/12] qutebrowser: Replace defunct qwant maps with facilmap I would love to replace it with osmapp instead but have not found a way to send a query in a qutebrowser-enabled post format. --- qutebrowser/config/searchengines.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qutebrowser/config/searchengines.py b/qutebrowser/config/searchengines.py index cbbfdcd..42dab38 100644 --- a/qutebrowser/config/searchengines.py +++ b/qutebrowser/config/searchengines.py @@ -18,7 +18,7 @@ c.url.searchengines = { "l": "https://links.martyoeh.me/?searchterm={}&searchtags=", "lib": "http://libgen.fun/search.php?req={}", "man": "https://manned.org/browse/search?q={}", - "maps": "https://www.qwant.com/maps/?q={}", + "maps": "https://facilmap.org/#q={}", "pcw": "https://www.pcgamingwiki.com/w/index.php?search={}", "py": "https://pypi.org/search/?q={}", "r": "https://www.reddit.com/r/{}", From 2c1487ab9399e26e664596585754b6b5be7f5ae7 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 4 Jan 2025 10:57:40 +0100 Subject: [PATCH 06/12] repo: Remove traces of tmux configuration While I never disliked tmux I have not been using it for absolute ages now, ever since starting to multiplex with wezterm. Wezterm can (at least with my current setup) *not* replace all tmux functionality - especially running multiple sessions in a detachable way on a remote server - but I have never needed those in a long time now. Detachable sessions I can create instead with `abduco`. --- README.md | 5 +- bootstrap/packages_stable.tsv | 1 - nvim/.config/nvim/lua/core/mappings.lua | 2 +- sh/.config/sh/xdg | 1 - terminal/.config/sh/alias.d/tmux.sh | 57 ------ terminal/.config/tmux/sessions/dot.session | 13 -- terminal/.config/tmux/sessions/music.session | 9 - terminal/.config/tmux/sessions/notes.session | 7 - terminal/.config/tmux/sessions/social.session | 10 - terminal/.config/tmux/sessions/sport.session | 4 - terminal/.config/tmux/sessions/todo.session | 15 -- terminal/.config/tmux/tmux.conf | 183 ------------------ terminal/.config/tmux/tmux.remote.conf | 10 - .../zsh/completions/_tmux_attach_start | 12 -- .../.local/bin/test/tmux_attach_start.bats | 39 ---- terminal/.local/bin/tmux_attach_start | 154 --------------- terminal/.local/bin/tmux_pane_tree | 20 -- 17 files changed, 3 insertions(+), 539 deletions(-) delete mode 100644 terminal/.config/sh/alias.d/tmux.sh delete mode 100644 terminal/.config/tmux/sessions/dot.session delete mode 100644 terminal/.config/tmux/sessions/music.session delete mode 100644 terminal/.config/tmux/sessions/notes.session delete mode 100644 terminal/.config/tmux/sessions/social.session delete mode 100644 terminal/.config/tmux/sessions/sport.session delete mode 100644 terminal/.config/tmux/sessions/todo.session delete mode 100644 terminal/.config/tmux/tmux.conf delete mode 100644 terminal/.config/tmux/tmux.remote.conf delete mode 100755 terminal/.config/zsh/completions/_tmux_attach_start delete mode 100644 terminal/.local/bin/test/tmux_attach_start.bats delete mode 100755 terminal/.local/bin/tmux_attach_start delete mode 100755 terminal/.local/bin/tmux_pane_tree diff --git a/README.md b/README.md index 3d97a7e..46cca40 100644 --- a/README.md +++ b/README.md @@ -53,13 +53,12 @@ Enjoy! * [`waybar`](https://github.com/Alexays/Waybar) - Easily customizable statusbar for wayland * [`bemenu`](https://github.com/Cloudef/bemenu) - Extended dmenu replacement for wayland, X11 and ncurses * [`fontconfig`] - System-wide font replacements and styling settings -* [`wezterm`](https://wezfurlong.org/wezterm/) - Terminal emulator (fast, understandable and lua configurable) -* [`tmux`](https://github.com/tmux/tmux/) - terminal multiplexer (slowly migrating away in favor of wezterm) +* [`wezterm`](https://wezfurlong.org/wezterm/) - Terminal emulator and multiplexer (fast, understandable and lua configurable) * [`nvim`](https://neovim.io/) - Neovim configuration * [`vifm`](https://github.com/vifm/vifm) - vim-like file-manager * [`qutebrowser`](https://github.com/qutebrowser/qutebrowser) - vim-key enabled web browser * [`pass`](pass/README.md) - Password management suite -* [`bibtex`] - LateX/BibteX/pandoc plaintext writing & reference suite +* [`bibtex`] - LateX/BibteX/pandoc plaintext writing & reference suite (slowly migrating toward [typst](https://typst.app)) * [`git`](git/README.md) - distributed version control system. * [`office`](office/README.md) - office/productivity software for writing e-mail and setting appointments diff --git a/bootstrap/packages_stable.tsv b/bootstrap/packages_stable.tsv index 3d77a6e..284174d 100644 --- a/bootstrap/packages_stable.tsv +++ b/bootstrap/packages_stable.tsv @@ -311,7 +311,6 @@ tidy-viewer CLI csv pretty printer that uses column styling A timew Timewarrior, A command line time tracking application R tinyxxd Standalone version of the hex dump utility that comes with ViM R tlp Linux Advanced Power Management R -tmux Terminal multiplexer R toilet free replacement for the FIGlet utility. A topgrade-bin Invoke the upgrade procedure of multiple package managers A traceroute Tracks the route taken by packets over an IP network R diff --git a/nvim/.config/nvim/lua/core/mappings.lua b/nvim/.config/nvim/lua/core/mappings.lua index 7f457e9..c0c5880 100644 --- a/nvim/.config/nvim/lua/core/mappings.lua +++ b/nvim/.config/nvim/lua/core/mappings.lua @@ -113,7 +113,7 @@ map("t", "\\\\", [[]], { desc = "exit terminal mode" }) map("n", "/", ":noh", { desc = "remove highlights" }) -- split buffers vertically/horizontally with the leader \ or - (mirrors my --- tmux setup) +-- multiplexer setup) map("n", "-", ":sp", { desc = "open horiz split" }) map("n", "\\", ":vsp", { desc = "open vert split" }) -- open actual new tab with leader-T diff --git a/sh/.config/sh/xdg b/sh/.config/sh/xdg index 38bbd99..0b62166 100644 --- a/sh/.config/sh/xdg +++ b/sh/.config/sh/xdg @@ -61,7 +61,6 @@ fi export PYTHONSTARTUP="$XDG_CONFIG_HOME/python/pythonrc" export SQLITE_HISTORY="$XDG_STATE_HOME/sqlite_history" export TEXMFVAR="$XDG_CACHE_HOME/texlive/texmf-var" -export TMUX_PLUGIN_MANAGER_PATH="$XDG_DATA_HOME/tmux" export VAGRANT_HOME="$XDG_DATA_HOME/vagrant" export WINEPREFIX="$XDG_DATA_HOME/wine" export ZDOTDIR="$XDG_CONFIG_HOME/zsh" diff --git a/terminal/.config/sh/alias.d/tmux.sh b/terminal/.config/sh/alias.d/tmux.sh deleted file mode 100644 index 12459be..0000000 --- a/terminal/.config/sh/alias.d/tmux.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env sh - -exist() { type "$1" >/dev/null 2>&1; } - -# alias tmux to follow xdg-specification -# shellcheck disable=2139 -alias tmux="tmux -f ${XDG_CONFIG_HOME:-$HOME/.config}/tmux/tmux.conf" - -# fzf -if exist fzf; then - # fzf select a tmux session to connect to, with pane preview - alias tm='_fzf_tmux_attach_start_session' - alias tl=tm -else - alias tm='tmux_attach_start' - # show a list of running tmux sessions - alias tl='tmux list-sessions -F "#{session_name}" 2>/dev/null ' -fi - -_fzf_tmux_list_sessions() { - tmux list-sessions -F "#{session_name}" 2>/dev/null | fzf \ - --layout=reverse \ - --height=50% \ - --border \ - --prompt="Session> " \ - --preview="tmux_pane_tree {}" \ - --preview-window=right:80% \ - --print-query -} - -_fzf_tmux_attach_start_session() { - if [ -z "$1" ]; then - result=$(_fzf_tmux_list_sessions) - case "$?" in - 0) - # found a session, attaching - tmux_attach_start "$(echo "$result" | tail --lines=1)" - ;; - 1) - # did not find a session, creating - result=$(echo "$result" | head --lines=1) - # if . was only thing entered, create one for current dir - if [ "$result" = "." ]; then - tmux_attach_start - # create for query name - else - tmux_attach_start "$result" - fi - ;; - esac - else - tmux_attach_start "$1" - fi -} - -unset choice -unset -f exist diff --git a/terminal/.config/tmux/sessions/dot.session b/terminal/.config/tmux/sessions/dot.session deleted file mode 100644 index abb88c6..0000000 --- a/terminal/.config/tmux/sessions/dot.session +++ /dev/null @@ -1,13 +0,0 @@ -rename-window dot-git -send-keys "cd ~/.dotfiles; while true; do [[ -z $(git status -s) ]] && { fd -t f --hidden | entr -cd tea issue ;} || { fd -t f --hidden | entr -cd git -c color.ui=always diff ;} ; done" -split-window -h "cd ~/.dotfiles; while true; do fd -t f --hidden --exclude .git/objects | entr -cd git -c color.ui=always status; done" -split-window -v -send-keys "cd ~/.dotfiles; clear" C-m L C-m -select-pane -t 1 -split-window -v "cd ~/.dotfiles; while true; do fd -t f --hidden --exclude .git/objects | entr -cd git -c color.ui=always log --graph --date=short --decorate --oneline --all --remotes; done" -select-pane -t 4 -new-window -n code -send-keys "cd ~/.dotfiles; v ." C-m zo -new-window -n test -select-window -t 1 -attach-session -t . -c ~/.dotfiles diff --git a/terminal/.config/tmux/sessions/music.session b/terminal/.config/tmux/sessions/music.session deleted file mode 100644 index 0ae173a..0000000 --- a/terminal/.config/tmux/sessions/music.session +++ /dev/null @@ -1,9 +0,0 @@ -rename-window server -send-keys "mopidy" C-m -new-window -n player -send-keys "ncmpcpp" C-m -new-window -n mixer -send-keys "pulsemixer" C-m -new-window -n bluetooth -send-keys "bluetoothctl" C-m -select-window -t 2 diff --git a/terminal/.config/tmux/sessions/notes.session b/terminal/.config/tmux/sessions/notes.session deleted file mode 100644 index 266f002..0000000 --- a/terminal/.config/tmux/sessions/notes.session +++ /dev/null @@ -1,7 +0,0 @@ -rename-window notes -send-keys vm Space $WIKIROOT Space $LIBRARY C-m -new-window -n notepad -send-keys cd Space $WIKIROOT C-m -send-keys v C-m -send-keys Space w w -attach-session -t . -c $WIKIROOT diff --git a/terminal/.config/tmux/sessions/social.session b/terminal/.config/tmux/sessions/social.session deleted file mode 100644 index c81074b..0000000 --- a/terminal/.config/tmux/sessions/social.session +++ /dev/null @@ -1,10 +0,0 @@ -rename-window mail -send-keys "neomutt" C-m -new-window -n news -send-keys "newsboat" C-m -split-window -h -send-keys "tut" C-m -new-window -n matrix -send-keys "gomuks" C-m -new-window -n signal -send-keys "siggo" C-m diff --git a/terminal/.config/tmux/sessions/sport.session b/terminal/.config/tmux/sessions/sport.session deleted file mode 100644 index 0bbca19..0000000 --- a/terminal/.config/tmux/sessions/sport.session +++ /dev/null @@ -1,4 +0,0 @@ -rename-window stats -send-keys "cd ~/documents/records; v workout.md" C-m -new-window -n routine -send-keys "cd ~/documents/records; sc-im workout.csv" C-m diff --git a/terminal/.config/tmux/sessions/todo.session b/terminal/.config/tmux/sessions/todo.session deleted file mode 100644 index 7fd71ad..0000000 --- a/terminal/.config/tmux/sessions/todo.session +++ /dev/null @@ -1,15 +0,0 @@ -rename-window focus -send-keys tasksh C-m "+TODAY" C-m -new-window -n dash -send-keys "cd ${XDG_DATA_HOME:-~/.local/share}/task/; fd . | entr -c task next" C-m -split-window -h -l 71 -send-keys "cd ${XDG_DATA_HOME:-~/.local/share}/task/; fd . | entr -c task summary" C-m -split-window -v "cd ${XDG_DATA_HOME:-~/.local/share}/task/; fd . | entr -c task status:pending or +ACTIVE burndown" -select-pane -t 1 -split-window -v -l 5 -send-keys "t" Space -new-window -n journal -send-keys "calcurse" C-m -split-window -h -l 35% "ls ~/documents/records/jrnl.md | entr -c jrnl -5" -split-window -v -l 10% -select-window -t 2 diff --git a/terminal/.config/tmux/tmux.conf b/terminal/.config/tmux/tmux.conf deleted file mode 100644 index 5e477b4..0000000 --- a/terminal/.config/tmux/tmux.conf +++ /dev/null @@ -1,183 +0,0 @@ -# Layout of this conf file: -# 1. Global Settings -# 2. Plugins -# 3. Keybinds -# 4. Theme - -# For rapid change prototyping, disabled normally: -# bind-key r source-file ~/.config/tmux/tmux.conf \; display-message "config reloaded." - -###################### -### 1. GLOBAL SETTINGS -###################### - -# show that activity happens but don't display a huge 'activity happening' notification -setw -g monitor-activity on -set -g visual-activity off - -# Start counting windows and panes at 1 -set -g base-index 1 -setw -g pane-base-index 1 -set -g renumber-windows on - -# Terminal improvements -set-window-option -g automatic-rename on -set-option -g set-titles on -set -g mouse on -# allow truecolor support -set -g default-terminal 'xterm-256color' -set -ga terminal-overrides ',xterm-256color:Tc' -set -g status-keys vi -set-window-option -g mode-keys vi -set -g history-limit 10000 - -# Screen size is based on the smallest client looking at the current windows, not the smallest -# client connected to the overall session. If two clients are connected to the same session but not -# looking at the same window, why would they care about each others screen size? -setw -g aggressive-resize on - -# No delay for escape key press -set -sg escape-time 0 - -# to enable autoread option in neovim -set-option -g focus-events on - -#################### -## 2. PLUGINS ## -#################### - -set -g @tpm_plugins ' \ - tmux-plugins/tpm \ - tmux-plugins/tmux-sensible \ - christoomey/vim-tmux-navigator \ - Morantron/tmux-fingers \ - ' - -set -g @fingers-key F - -# make sure tpm is installed -if-shell "test ! -d $TMUX_PLUGIN_MANAGER_PATH/tpm" \ - "run 'git clone https://github.com/tmux-plugins/tpm $TMUX_PLUGIN_MANAGER_PATH/tpm && $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins'" \ - -# optinally add this to install plugins on each start -- adds small lag to startup - # "run-shell $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins" - -##################### -## 3. KEYBINDINGS ## -##################### - -# Unbind some defaults -unbind '"' -unbind % - -# Custom modifier key -set -g prefix C-a -unbind-key C-b -bind-key -r C-a send-prefix - -# Window Navigation - Prefix + Vim Keys -bind-key -r C-h select-window -t :- -bind-key -r C-l select-window -t :+ - -# Resize Panes -bind-key -r H resize-pane -L 3 -bind-key -r J resize-pane -D 1 -bind-key -r K resize-pane -U 1 -bind-key -r L resize-pane -R 3 - -bind-key -r C-H resize-pane -L 10 -bind-key -r C-J resize-pane -D 5 -bind-key -r C-K resize-pane -U 5 -bind-key -r C-L resize-pane -R 10 - -# Send Pane to a new window (but stay on current window), join it back into the current window -bind-key B break-pane -d -bind-key C-b command-prompt -p "join pane from: " "join-pane -h -s '%%'" - -# Swap panes within the current window (swaps pane # entered with currently selected pane) -bind-key b display-panes\; command-prompt -p "pane #: " "swap-pane -t '%%'" - -# Kill tabs quicker -bind-key x kill-pane -bind-key C-x kill-window - -# Split Window into panes - automatically handled by plugin -bind-key '\' split-window -h -c '#{pane_current_path}' -bind-key '-' split-window -v -c '#{pane_current_path}' - -# Open a sessions chooser -bind C-s split-window -v "tmux list-sessions | sed -E 's/:.*$//' | grep -v \"^$(tmux display-message -p '#S')\$\" | fzf --reverse | xargs tmux switch-client -t" - -# Make visual selections act a little more like vim -bind-key -T copy-mode-vi v send -X begin-selection -bind-key -T copy-mode-vi V send -X select-line -bind-key -T copy-mode-vi y send -X copy-pipe-and-cancel 'wl-copy' \; send -X rectangle-off -bind-key -T copy-mode-vi 'C-v' send -X begin-selection \; send -X rectangle-on - -##################### -## 4. THEME ## -##################### - -# Status update interval -set -g status-interval 1 -# Clock mode -set -g clock-mode-colour colour24 -set -g clock-mode-style 24 - -# This tmux statusbar config was created by tmuxline.vim -# on Wed, 13 Mar 2019 - -set -g message-command-style bg="#2e2e2e",fg="#c8c8c8" -set -g message-style bg="#2e2e2e",fg="#c8c8c8" -set -g pane-active-border-style fg="#2e2e2e" -set -g pane-border-style fg="#2e2e2e" -set -g status-justify "centre" -set -g status "on" -set -g status-style "none" -set -g status-style "none" -set -g status-left-length "100" -set -g status-right-length "100" -setw -g window-status-style fg="#c8c8c8",bg="#2e2e2e","none" -setw -g window-status-activity-style bg="#2e2e2e",fg="#c8c8c8","underscore" -setw -g window-status-separator "" -set -g status-left "#[fg=#c8c8c8,bg=#2e2e2e] #S #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e] #I:#P #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e] #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]" -set -g status-right "#[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics] #[fg=#c8c8c8,bg=#2e2e2e] #{?client_prefix,#[fg=colour232]#[bg=brightblue],} #(whoami) #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e] %d-%b-%y #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e] #H " -setw -g window-status-format "#[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[default] #I #W #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]" -setw -g window-status-current-format "#[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e]  #I #W #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]" - -######################## -## 5. Nested Sessions ## -######################## -# from: https://github.com/samoshkin/tmux-config/blob/master/tmux/tmux.conf -# all credit to samoshkin - -# Session is considered to be remote when we ssh into host -if-shell 'test -n "$SSH_CLIENT"' \ - 'source-file $XDG_CONFIG_HOME/tmux/tmux.remote.conf' - -# We want to have single prefix key "C-a", usable both for local and remote session -# we don't want to "C-a" + "a" approach either -# Idea is to turn off all key bindings and prefix handling on local session, -# so that all keystrokes are passed to inner/remote session - -# see: toggle on/off all keybindings · Issue #237 · tmux/tmux - https://github.com/tmux/tmux/issues/237 - -# Also, change some visual styles when window keys are off -bind -T root F12 \ - set prefix None \;\ - set key-table off \;\ - set status-style fg="colour245",bg="colour238" \;\ - set window-status-current-format "#[fg=$color_window_off_status_bg,bg=$color_window_off_status_current_bg]$separator_powerline_right#[default] #I:#W# #[fg=$color_window_off_status_current_bg,bg=$color_window_off_status_bg]$separator_powerline_right#[default]" \;\ - set window-status-current-style fg="colour232",bg="colour254","bold" \;\ - if -F '#{pane_in_mode}' 'send-keys -X cancel' \;\ - refresh-client -S \;\ - -bind -T off F12 \ - set -u prefix \;\ - set -u key-table \;\ - set -u status-style \;\ - set -u window-status-current-style \;\ - set -u window-status-current-format \;\ - refresh-client -S - -run -b "$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm" diff --git a/terminal/.config/tmux/tmux.remote.conf b/terminal/.config/tmux/tmux.remote.conf deleted file mode 100644 index defe108..0000000 --- a/terminal/.config/tmux/tmux.remote.conf +++ /dev/null @@ -1,10 +0,0 @@ -# show status bar at bottom for remote session, -set -g status-position bottom - -# Set port of SSH remote tunnel, where tmux will pipe buffers to transfer on local machine for copy -set -g @copy_backend_remote_tunnel_port 11988 - -# In remote mode we don't show "clock" and "battery status" widgets -set -g status-left "#[fg=#c8c8c8,bg=#2e2e2e][SSH]#S #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e] #(whoami) #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e] #I:#P #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]" -set -g status-right "#{prefix_highlight} $wg_is_keys_off $wg_is_zoomed #{sysstat_cpu} | #{sysstat_mem} | #{sysstat_loadavg} | $wg_user_host | #{online_status}" -set -g status-right "#[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#{prefix_highlight} #H " diff --git a/terminal/.config/zsh/completions/_tmux_attach_start b/terminal/.config/zsh/completions/_tmux_attach_start deleted file mode 100755 index da73e36..0000000 --- a/terminal/.config/zsh/completions/_tmux_attach_start +++ /dev/null @@ -1,12 +0,0 @@ -#compdef _tmux_attach_start -# -# Requires tmux_attach_start script in path -# -# Enables completion for zsh of tmux_attach_start function -# with currently open sessions, or tmux options. - -_tmux_attach_start() { - _alternative \ - "sessions:user sessions:($(tmux list-sessions -F'#{session_name}' 2>/dev/null))" -} - diff --git a/terminal/.local/bin/test/tmux_attach_start.bats b/terminal/.local/bin/test/tmux_attach_start.bats deleted file mode 100644 index 941d8ea..0000000 --- a/terminal/.local/bin/test/tmux_attach_start.bats +++ /dev/null @@ -1,39 +0,0 @@ -setup() { - fut="$BATS_TEST_DIRNAME/../tmux_attach_start" -} - -teardown() { - rm -rf $BATS_TMPDIR/xdg/* -} - -@test "runs correctly if invoked without arguments" { - run $fut - echo "$BATS_TEST_DIRNAME/../tmux_attach_start" - [ "$status" -eq 0 ] -} - -@test "Errors out if passed a non-existent session file (and some session name)" { - run $fut IDONT_EXIST_HERE.session sessionname - echo "STATUS: $output" - [ "$status" -eq 1 ] - echo "OUTPUT: $output" - [ "$output" = "can not source session file: 'IDONT_EXIST_HERE.session' does not exist." ] -} - -@test "Runs without errors when session file exists in PWD" { - touch $PWD/exists.session - run $fut exists.session sessionname - rm $PWD/exists.session - - [ "$status" -eq 0 ] -} - -@test "Runs without errors when session file exists in XDG_CONFIG_HOME/tmux/sessions/" { - export XDG_CONFIG_HOME=$BATS_TMPDIR - mkdir -p $XDG_CONFIG_HOME/tmux/sessions - sesdir=$XDG_CONFIG_HOME/tmux/sessions - touch $sesdir/exists.session - run $fut exists.session sessionname - - [ "$status" -eq 0 ] -} diff --git a/terminal/.local/bin/tmux_attach_start b/terminal/.local/bin/tmux_attach_start deleted file mode 100755 index e6ffc26..0000000 --- a/terminal/.local/bin/tmux_attach_start +++ /dev/null @@ -1,154 +0,0 @@ -#!/bin/sh -# -# Attach to a tmux session, or create it if it doesnt exist - -if [ "$1" = '-h' ] || [ "$1" = '--help' ]; then - cat <<-EOF - Usage: $0 [FILE] [NAME] - Attach to an existing tmux session, or bootstrap a new session. - - If no session exists which fits the criteria, this will create a new one and - load it up obeying the commands contained in the FILE argument passed in. It - must contain commands which are tmux-command compatible since they will be - passed to tmux unmodified. If a session exists and a valid configuration FILE is - passed, it will attach itself to the session and execute the session setup inside. - - It will load the default tmux.conf in the following order: - - XDG_CONFIG_HOME/tmux/tmux.conf (usually ~/.config/tmux/tmux.conf) - - ~/.tmux.conf - - /etc/tmux.conf - Afterwards, it will apply the contents of the FILE argument passed into the command. - - If no FILE argument is passed it will create an empty session, or attach itself to - the session specified. - - If no NAME argument is passed it will automatically create a session name from the - FILE argument passed. - - If creating a new session without passing in a FILE argument, and the current directory - contains a .tmux.session file, it will automatically use that to set up the session. - - By default, it also looks for valid session files in XDG_CONFIG_HOME/tmux/sessions/ - This path can be changed by setting the TM_SESSION_PATH environment variable. -EOF - exit 0 -fi - -# Make tmux obey the XDG specification on startup -if [ -e "$XDG_CONFIG_HOME/tmux/tmux.conf" ]; then - start="tmux -f $XDG_CONFIG_HOME/tmux/tmux.conf" -else - start=tmux -fi - -_file_exists() { - if [ -f "$1" ]; then - true - else - false - fi -} - -_not_in_tmux() { - [ -z "$TMUX" ] -} - -_session_exists() { - if tmux has-session -t "$session_name" >/dev/null 2>&1; then - true - else - false - fi -} - -_create_detached_session() { - ($start new-session -d -s "$session_name") -} - -_load_env_session_file() { - if [ -f ./.tmux.session ]; then - xargs -L1 tmux <./.tmux.session - fi -} - -_load_session_file() { - if [ -f "$session_file" ]; then - xargs -L1 tmux <"$session_file" - fi -} - -_set_session_file_path() { - # Prefer local dir if file exists there, fall back to root dir - if _file_exists "${1}"; then - session_file="${1}" - elif _file_exists "${session_dir}${1}"; then - session_file="${session_dir}${1}" - fi -} - -_set_session_vars() { - session_dir=${TM_SESSION_DIR:-"$XDG_CONFIG_HOME/tmux/sessions/"} - - # set up session name and config file - if passed in as arguments - if [ "$#" -eq 2 ]; then - if ! _file_exists "$1" && ! _file_exists "${session_dir}${1}"; then - echo >&2 "can not source session file: '${1}' does not exist." - exit 1 - fi - _set_session_file_path "$1" - session_name=${2} - elif [ "$#" -eq 1 ]; then - _set_session_file_path "$1" - if ! _file_exists "$session_file"; then - session_name=${1} - fi - fi - - # set default session name if none was passed - if [ -z "$session_name" ]; then - # only if we have a filename should we append it to the session name - if [ -n "$session_file" ]; then - fname=/$(basename "$session_file" .session) - fi - # default to parent directory name / config file name for the session - session_name=$(basename "$PWD" | sed 's/[^a-zA-Z0-9\-]//g' | tr . -)"$fname" - fi -} - -_attach_or_create() { - # first create a new session if one doesn't exist - if ! _session_exists; then - _create_detached_session - # look for .tmux.session file if no file has been explicitly passed in - # session files always take precedence over environment files when specifically passed in - if ! _file_exists "$session_file"; then - _load_env_session_file - fi - fi - - _load_session_file - - # then attach or switch to the session - if _not_in_tmux; then - $start attach -t "$session_name" - else - $start switch-client -t "$session_name" - fi - - _unset_functions -} - -_unset_functions() { - unset _set_session_vars - unset _set_session_file_path - unset _attach_or_create - unset _load_session_file - unset _create_detached_session - unset _session_exists - unset _not_in_tmux - unset _file_exists -} - -_set_session_vars "$@" -_attach_or_create -exit 0 diff --git a/terminal/.local/bin/tmux_pane_tree b/terminal/.local/bin/tmux_pane_tree deleted file mode 100755 index 19f38f8..0000000 --- a/terminal/.local/bin/tmux_pane_tree +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash -# create a tree-style view -# of all open tmux panes -# and the command they are currently running - -tmux ls -F'#{session_id}' | while read -r s; do - S=$(tmux ls -F'#{session_id}#{session_name}: #{T:tree_mode_format}' | grep ^"$s") - session_info=${S##$s} - session_name=$(echo "$session_info" | cut -d ':' -f 1) - if [[ -n "$1" ]] && [[ "$1" == "$session_name" ]]; then - echo -e "\033[1;34m$session_info\033[0m" - tmux lsw -t"$s" -F'#{window_id}' | while read -r w; do - W=$(tmux lsw -t"$s" -F'#{window_id}#{T:tree_mode_format} - #{pane_current_command}' | grep ^"$w") - H=$(tmux lsw -t"$s" -F'#{window_id}#H' | grep ^"$w") - echo " ﬌ ${W##$w}" | sed "s/\"${H##$w}\" //" - done - else - echo -e "\033[1m$session_info\033[0m" - fi -done From a70f1d226ac28ec91bb2a45afff421819986f0ed Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 4 Jan 2025 11:38:56 +0100 Subject: [PATCH 07/12] sh: Add automatic top program selection When invoking top it will automatically alias to a selection of newer system monitoring software instead, using the first preferred application it finds (e.g. bottom over btop++ over gotop over glances and so on, ending with regular top). --- sh/.config/sh/alias.d/top.sh | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 sh/.config/sh/alias.d/top.sh diff --git a/sh/.config/sh/alias.d/top.sh b/sh/.config/sh/alias.d/top.sh new file mode 100644 index 0000000..5966525 --- /dev/null +++ b/sh/.config/sh/alias.d/top.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env sh +## Use the preferred system monitoring application +# when invoking top. + +if exist btm; then + alias top="btm" +elif exist btop; then + alias top="btop" +elif exist gotop; then + alias top="gotop" +elif exist glances; then + alias top="glances" +elif exist bpytop; then + alias top="bpytop" +elif exist bashtop; then + alias top="bashtop" +elif exist htop; then + alias top="htop" +elif exist top; then + alias top="top" +fi From 086ad20add2fbd5da09a1838aef3c8da3df60e77 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 4 Jan 2025 14:19:44 +0100 Subject: [PATCH 08/12] vifm: Switch from vidir to edir invocation edir is a slightly improved version of the morutils tool 'vidir'. We switch to it to change directories, files and only sub-directories (Invoked with ,rr / ,rf / ,rd respectively). --- bootstrap/packages_stable.tsv | 1 + terminal/.config/vifm/vifmrc | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/bootstrap/packages_stable.tsv b/bootstrap/packages_stable.tsv index 284174d..c243efd 100644 --- a/bootstrap/packages_stable.tsv +++ b/bootstrap/packages_stable.tsv @@ -65,6 +65,7 @@ dos2unix Text file format converter R dotter-rs-bin A dotfile manager and templater written in Rust A duf Disk Usage/Free Utility R dust A more intuitive version of du in rust R +edir Program to rename, remove, and copy files and directories using your editor A efm-langserver General purpose Language Server A enca Charset analyser and converter R entr Run arbitrary commands when files change R diff --git a/terminal/.config/vifm/vifmrc b/terminal/.config/vifm/vifmrc index 0e96c5c..bfb03aa 100644 --- a/terminal/.config/vifm/vifmrc +++ b/terminal/.config/vifm/vifmrc @@ -323,7 +323,9 @@ nnoremap ,t :!vifm-thumbnailer -t %u %c nnoremap ,T :!vifm-thumbnailer -r -t %u %c " batch rename or delete files in current dir -nnoremap ,r :!vidir +nnoremap ,rr :!edir +nnoremap ,rf :!edir --files +nnoremap ,rd :!edir --dirs if executable('zoxide') " integrate zoxide search and add any vifm-visited paths automatically From 6bc3f0e8c14f2adde7d45b27757ec7bb2d784eea Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 4 Jan 2025 14:36:23 +0100 Subject: [PATCH 09/12] vifm: Make external commands conditional on executables Only create shortcuts for external commands if those have associated executables on the system. If we don't have an `atool` installed, it does not make sense to have shortcuts for invoking it - likewise for vidir, find, and so on. --- terminal/.config/vifm/vifmrc | 41 ++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/terminal/.config/vifm/vifmrc b/terminal/.config/vifm/vifmrc index bfb03aa..35d133f 100644 --- a/terminal/.config/vifm/vifmrc +++ b/terminal/.config/vifm/vifmrc @@ -305,16 +305,21 @@ nnoremap C :fzfcdhome nnoremap w :grep " external commands -" extract currently selected file(s) -noremap ,xx :!atool -x %f -" compress currently selected file(s) -noremap ,xc :!atool -a %c:r.tar.gz %f -" archive currently selected file(s) -noremap ,xa :!atool -a %c:r.tar %f -" zip currently selected file(s) -noremap ,xz :!atool -a %c:r.zip %f -" combine selected PDFs into single one (named output.pdf) -noremap ,pc :!pdftk %f cat output output.pdf +if executable('atool') + " extract currently selected file(s) + noremap ,xx :!atool -x %f + " compress currently selected file(s) + noremap ,xc :!atool -a %c:r.tar.gz %f + " archive currently selected file(s) + noremap ,xa :!atool -a %c:r.tar %f + " zip currently selected file(s) + noremap ,xz :!atool -a %c:r.zip %f +endif + +if executable('pdftk') + " combine selected PDFs into single one (named output.pdf) + noremap ,pc :!pdftk %f cat output output.pdf +endif " preview thumbnails of current folder " select thumbnails with m/M in nsxiv @@ -323,9 +328,19 @@ nnoremap ,t :!vifm-thumbnailer -t %u %c nnoremap ,T :!vifm-thumbnailer -r -t %u %c " batch rename or delete files in current dir -nnoremap ,rr :!edir -nnoremap ,rf :!edir --files -nnoremap ,rd :!edir --dirs +if executable('edir') + nnoremap ,rr :!edir + nnoremap ,rf :!edir --files + nnoremap ,rd :!edir --dirs + nnoremap ,rR :!edir --all --depth=10 +elseif executable('vidir') + nnoremap ,rr :!vidir + if executable('find') + nnoremap ,rf :!find . -maxdepth 1 -type f | vidir - + nnoremap ,rd :!find . -maxdepth 1 -type d | vidir - + nnoremap ,rR :!find . | vidir - + endif +endif if executable('zoxide') " integrate zoxide search and add any vifm-visited paths automatically From a0802d69f8c6ba4550be8c2cca2724fdc395ad3e Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sat, 4 Jan 2025 14:37:10 +0100 Subject: [PATCH 10/12] terminal: Add starship prompt configuration I have been relying on my starship configuration for a *long* time now, but seemingly never added it into my dotfiles. This rectifies that. --- terminal/.config/starship.toml | 79 ++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 terminal/.config/starship.toml diff --git a/terminal/.config/starship.toml b/terminal/.config/starship.toml new file mode 100644 index 0000000..16a4bce --- /dev/null +++ b/terminal/.config/starship.toml @@ -0,0 +1,79 @@ +format = """ +$custom\ +$sudo\ +$username\ +$directory\ +$git_state\ +$git_status\ +$status\ +$character +""" + +right_format =""" +$cmd_duration\ +$hostname\ +$git_branch\ +$fossil_branch\ +$go\ +$lua\ +$nodejs\ +$python\ +$package +""" + +[directory] +style = "blue" +fish_style_pwd_dir_length = 1 +read_only = " " +read_only_style = "purple" + +[character] +success_symbol = "[❯](purple)" +error_symbol = "[❯](red)" +vimcmd_symbol = "[❮](green)" + +[git_branch] +format = "[$branch]($style) " +style = "bright-black" + +[git_status] +format = "[[(*$conflicted$untracked$modified$staged$renamed$deleted)](218) ($ahead_behind$stashed)]($style) " +style = "cyan" +conflicted = "​" +untracked = "​" +modified = "​" +staged = "​" +renamed = "​" +deleted = "​" +stashed = "≡" + +[git_state] +format = '\([$state( $progress_current/$progress_total)]($style)\) ' +style = "bright-black" + +[cmd_duration] +format = "[$duration]($style) " +style = "yellow" + +[python] +format = "[$virtualenv]($style) " +style = "bright-black" + +[fossil_branch] + +[line_break] +disabled = true + +[package] +symbol = "" +style = "blue" + +[status] +disabled = false +symbol = " " + +[sudo] +disabled = false +symbol = " 󱍔 " +style = 'bold yellow' +format = "[$symbol]($style)" From 5b723ddfb04a74b75e1aa6520bc3e30d4b8a034b Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sun, 5 Jan 2025 16:43:52 +0100 Subject: [PATCH 11/12] sh: Switch from sfz to miniserve in serve alias Serve alias (now also with a more appropriately named file) will now look for miniserve before any other static file serve program. I also replaced sfz with miniserve in my installed programs. That is because sfz has been unmaintained for a long time and miniserve completely fulfills all my needs while still being maintained and recommended. --- bootstrap/packages_stable.tsv | 2 +- sh/.config/sh/alias.d/{sfz.sh => serve.sh} | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) rename sh/.config/sh/alias.d/{sfz.sh => serve.sh} (73%) diff --git a/bootstrap/packages_stable.tsv b/bootstrap/packages_stable.tsv index c243efd..2461276 100644 --- a/bootstrap/packages_stable.tsv +++ b/bootstrap/packages_stable.tsv @@ -167,6 +167,7 @@ mermaid-cli Generation of diagram and flowchart from text in a similar manner as mimeo Open files by MIME-type or file name using regular expressions. A minidlna A DLNA/UPnP-AV Media server (aka ReadyDLNA) R minio-client Replacement for ls, cp, mkdir, diff and rsync commands for filesystems and object storage R +miniserve Tool to serve files via HTTP R mopidy-bandcamp Mopidy backend for Bandcamp A mopidy-iris A Mopidy Web client that utilizes the Spotify and EchoNest frameworks. (Formerly Spotmop) A mopidy-local Mopidy extension for local media playback A @@ -282,7 +283,6 @@ scc-bin Sloc, Cloc and Code: scc is a very fast accurate code counter with compl scrcpy Display and control your Android device R screen Full-screen window manager that multiplexes a physical terminal R sd Intuitive find & replace R -sfz A simple static file server A shellcheck-bin Shell script analysis tool (binary release, static) A shfmt Format shell programs R sioyek PDF viewer for research papers and technical books. A diff --git a/sh/.config/sh/alias.d/sfz.sh b/sh/.config/sh/alias.d/serve.sh similarity index 73% rename from sh/.config/sh/alias.d/sfz.sh rename to sh/.config/sh/alias.d/serve.sh index 6d0daf8..d58d216 100644 --- a/sh/.config/sh/alias.d/sfz.sh +++ b/sh/.config/sh/alias.d/serve.sh @@ -2,7 +2,9 @@ ## Quickly bring up a file server for # the current directory. -if exist sfz; then +if exist miniserve; then + alias serve="miniserve" +elif exist sfz; then alias serve="sfz" elif exist gossa; then alias serve="gossa" From 1ed9e44ffa92a878f80e4756c4d56c8e69ff0d8e Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Sun, 5 Jan 2025 16:45:01 +0100 Subject: [PATCH 12/12] bootstrap: Move to bottom for system monitoring Removed btop and glances since I've never used them in any serious capacity. With my top being aliased to any of the monitors, I will only really make use of bottom and htop in the foreseeable future. --- bootstrap/packages_stable.tsv | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bootstrap/packages_stable.tsv b/bootstrap/packages_stable.tsv index 2461276..fb736d2 100644 --- a/bootstrap/packages_stable.tsv +++ b/bootstrap/packages_stable.tsv @@ -41,8 +41,8 @@ bind A complete, highly portable implementation of the DNS protocol R bluetuith-bin A TUI based bluetooth manager A bluez-utils Development and debugging utilities for the bluetooth protocol stack R booster Fast and secure initramfs generator R +bottom A graphical process/system monitor R brightnessctl Lightweight brightness control tool R -btop A monitor of system resources, bpytop ported to C++ R caddy Fast web server with automatic HTTPS R calcurse A text-based personal organizer R catdoc A convertor for Microsoft Word, Excel, PowerPoint and RTF Files to text R @@ -90,7 +90,6 @@ git-lfs Git extension for versioning large files R gitlint Git commit message linter A gitui Blazing fast terminal-ui for git written in Rust R gk6x-bin Configure keys, macros, and lighting on GK6X keyboards (GK64, GK84, GK61, etc) A -glances CLI curses-based monitoring tool R glfw-wayland A free, open source, portable framework for graphical application development (wayland) R glow Command-line markdown renderer R gnu-netcat GNU rewrite of netcat, the network piping application R