Compare commits

...

12 commits

Author SHA1 Message Date
1ed9e44ffa
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.
2025-01-05 16:45:01 +01:00
5b723ddfb0
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.
2025-01-05 16:43:52 +01:00
a0802d69f8
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.
2025-01-04 14:37:10 +01:00
6bc3f0e8c1
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.
2025-01-04 14:36:23 +01:00
086ad20add
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).
2025-01-04 14:19:44 +01:00
a70f1d226a
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).
2025-01-04 11:38:56 +01:00
2c1487ab93
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`.
2025-01-04 10:57:48 +01:00
0237b7d569
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.
2025-01-04 10:48:16 +01:00
dc067c860d
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 <space>z.
2025-01-04 10:45:06 +01:00
77348e09c7
mpv: Update legacy options 2025-01-03 22:33:57 +01:00
81bf5b46e5
vifm: Prefer vimiv to other viewers 2025-01-03 22:33:16 +01:00
59677f3b9c
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.
2025-01-03 22:32:55 +01:00
24 changed files with 170 additions and 563 deletions

View file

@ -53,13 +53,12 @@ Enjoy!
* [`waybar`](https://github.com/Alexays/Waybar) - Easily customizable statusbar for wayland * [`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 * [`bemenu`](https://github.com/Cloudef/bemenu) - Extended dmenu replacement for wayland, X11 and ncurses
* [`fontconfig`] - System-wide font replacements and styling settings * [`fontconfig`] - System-wide font replacements and styling settings
* [`wezterm`](https://wezfurlong.org/wezterm/) - Terminal emulator (fast, understandable and lua configurable) * [`wezterm`](https://wezfurlong.org/wezterm/) - Terminal emulator and multiplexer (fast, understandable and lua configurable)
* [`tmux`](https://github.com/tmux/tmux/) - terminal multiplexer (slowly migrating away in favor of wezterm)
* [`nvim`](https://neovim.io/) - Neovim configuration * [`nvim`](https://neovim.io/) - Neovim configuration
* [`vifm`](https://github.com/vifm/vifm) - vim-like file-manager * [`vifm`](https://github.com/vifm/vifm) - vim-like file-manager
* [`qutebrowser`](https://github.com/qutebrowser/qutebrowser) - vim-key enabled web browser * [`qutebrowser`](https://github.com/qutebrowser/qutebrowser) - vim-key enabled web browser
* [`pass`](pass/README.md) - Password management suite * [`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. * [`git`](git/README.md) - distributed version control system.
* [`office`](office/README.md) - office/productivity software for writing e-mail and setting appointments * [`office`](office/README.md) - office/productivity software for writing e-mail and setting appointments

View file

@ -41,8 +41,8 @@ bind A complete, highly portable implementation of the DNS protocol R
bluetuith-bin A TUI based bluetooth manager A bluetuith-bin A TUI based bluetooth manager A
bluez-utils Development and debugging utilities for the bluetooth protocol stack R bluez-utils Development and debugging utilities for the bluetooth protocol stack R
booster Fast and secure initramfs generator R booster Fast and secure initramfs generator R
bottom A graphical process/system monitor R
brightnessctl Lightweight brightness control tool 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 caddy Fast web server with automatic HTTPS R
calcurse A text-based personal organizer R calcurse A text-based personal organizer R
catdoc A convertor for Microsoft Word, Excel, PowerPoint and RTF Files to text R catdoc A convertor for Microsoft Word, Excel, PowerPoint and RTF Files to text R
@ -65,6 +65,7 @@ dos2unix Text file format converter R
dotter-rs-bin A dotfile manager and templater written in Rust A dotter-rs-bin A dotfile manager and templater written in Rust A
duf Disk Usage/Free Utility R duf Disk Usage/Free Utility R
dust A more intuitive version of du in rust 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 efm-langserver General purpose Language Server A
enca Charset analyser and converter R enca Charset analyser and converter R
entr Run arbitrary commands when files change R entr Run arbitrary commands when files change R
@ -89,7 +90,6 @@ git-lfs Git extension for versioning large files R
gitlint Git commit message linter A gitlint Git commit message linter A
gitui Blazing fast terminal-ui for git written in Rust R 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 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 glfw-wayland A free, open source, portable framework for graphical application development (wayland) R
glow Command-line markdown renderer R glow Command-line markdown renderer R
gnu-netcat GNU rewrite of netcat, the network piping application R gnu-netcat GNU rewrite of netcat, the network piping application R
@ -166,6 +166,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 mimeo Open files by MIME-type or file name using regular expressions. A
minidlna A DLNA/UPnP-AV Media server (aka ReadyDLNA) R 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 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-bandcamp Mopidy backend for Bandcamp A
mopidy-iris A Mopidy Web client that utilizes the Spotify and EchoNest frameworks. (Formerly Spotmop) 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 mopidy-local Mopidy extension for local media playback A
@ -281,7 +282,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 scrcpy Display and control your Android device R
screen Full-screen window manager that multiplexes a physical terminal R screen Full-screen window manager that multiplexes a physical terminal R
sd Intuitive find & replace R sd Intuitive find & replace R
sfz A simple static file server A
shellcheck-bin Shell script analysis tool (binary release, static) A shellcheck-bin Shell script analysis tool (binary release, static) A
shfmt Format shell programs R shfmt Format shell programs R
sioyek PDF viewer for research papers and technical books. A sioyek PDF viewer for research papers and technical books. A
@ -311,7 +311,6 @@ tidy-viewer CLI csv pretty printer that uses column styling A
timew Timewarrior, A command line time tracking application R timew Timewarrior, A command line time tracking application R
tinyxxd Standalone version of the hex dump utility that comes with ViM R tinyxxd Standalone version of the hex dump utility that comes with ViM R
tlp Linux Advanced Power Management R tlp Linux Advanced Power Management R
tmux Terminal multiplexer R
toilet free replacement for the FIGlet utility. A toilet free replacement for the FIGlet utility. A
topgrade-bin Invoke the upgrade procedure of multiple package managers A topgrade-bin Invoke the upgrade procedure of multiple package managers A
traceroute Tracks the route taken by packets over an IP network R traceroute Tracks the route taken by packets over an IP network R

Can't render this file because it has a wrong number of fields in line 32.

View file

@ -39,13 +39,11 @@ osd-font='Iosevka Nerd Font'
osd-font-size=15 osd-font-size=15
### Subtitles ### Subtitles
## options and compatibility ## options and compatibility
# vsfilter backward compatibility sub-ass-use-video-data=all
sub-ass-vsfilter-blur-compat=yes
sub-ass-scale-with-window=no sub-ass-scale-with-window=no
# custom ass style params # custom ass style params
sub-ass-force-style=Kerning=yes sub-ass-style-overrides=Kerning=yes
# fuzzy-search available subs in folder # fuzzy-search available subs in folder
sub-auto=fuzzy sub-auto=fuzzy
# search for external subs in these relative subdirectories # search for external subs in these relative subdirectories
@ -85,7 +83,6 @@ audio-pitch-correction=yes
### Video ### Video
hwdec=auto hwdec=auto
profile=opengl-hq
opengl-early-flush=auto opengl-early-flush=auto
opengl-pbo=no opengl-pbo=no
# ever so slightly up saturation # ever so slightly up saturation

View file

@ -113,7 +113,7 @@ map("t", "\\\\", [[<C-\><C-n>]], { desc = "exit terminal mode" })
map("n", "<leader>/", ":noh<cr>", { desc = "remove highlights" }) map("n", "<leader>/", ":noh<cr>", { desc = "remove highlights" })
-- split buffers vertically/horizontally with the leader \ or - (mirrors my -- split buffers vertically/horizontally with the leader \ or - (mirrors my
-- tmux setup) -- multiplexer setup)
map("n", "<leader>-", ":sp<cr>", { desc = "open horiz split" }) map("n", "<leader>-", ":sp<cr>", { desc = "open horiz split" })
map("n", "<leader>\\", ":vsp<cr>", { desc = "open vert split" }) map("n", "<leader>\\", ":vsp<cr>", { desc = "open vert split" })
-- open actual new tab with leader-T -- open actual new tab with leader-T

View file

@ -18,7 +18,7 @@ c.url.searchengines = {
"l": "https://links.martyoeh.me/?searchterm={}&searchtags=", "l": "https://links.martyoeh.me/?searchterm={}&searchtags=",
"lib": "http://libgen.fun/search.php?req={}", "lib": "http://libgen.fun/search.php?req={}",
"man": "https://manned.org/browse/search?q={}", "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={}", "pcw": "https://www.pcgamingwiki.com/w/index.php?search={}",
"py": "https://pypi.org/search/?q={}", "py": "https://pypi.org/search/?q={}",
"r": "https://www.reddit.com/r/{}", "r": "https://www.reddit.com/r/{}",

View file

@ -7,6 +7,11 @@
#:bind o spawn --userscript /path/to/userscripts/qutedmenu open #:bind o spawn --userscript /path/to/userscripts/qutedmenu open
#:bind O spawn --userscript /path/to/userscripts/qutedmenu tab #:bind O spawn --userscript /path/to/userscripts/qutedmenu tab
warn() {
echo "$1" >&2
}
readonly confdir=${XDG_CONFIG_HOME:-$HOME/.config} readonly confdir=${XDG_CONFIG_HOME:-$HOME/.config}
readonly datadir=${XDG_DATA_HOME:-$HOME/.local/share} readonly datadir=${XDG_DATA_HOME:-$HOME/.local/share}
readonly optsfile=$confdir/dmenu/bemenucolors readonly optsfile=$confdir/dmenu/bemenucolors
@ -24,8 +29,21 @@ create_menu() {
printf -- '%s\n' "$url" printf -- '%s\n' "$url"
done <"$QUTE_CONFIG_DIR"/bookmarks/urls 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 # 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() { get_selection() {
@ -56,5 +74,6 @@ url=${url/*http/http}
case $1 in case $1 in
open) printf '%s' "open $url" >>"$QUTE_FIFO" || qutebrowser "$url" ;; open) printf '%s' "open $url" >>"$QUTE_FIFO" || qutebrowser "$url" ;;
print) echo "$url" ;;
tab | *) printf '%s' "open -t $url" >>"$QUTE_FIFO" || qutebrowser "$url" ;; tab | *) printf '%s' "open -t $url" >>"$QUTE_FIFO" || qutebrowser "$url" ;;
esac esac

View file

@ -2,7 +2,9 @@
## Quickly bring up a file server for ## Quickly bring up a file server for
# the current directory. # the current directory.
if exist sfz; then if exist miniserve; then
alias serve="miniserve"
elif exist sfz; then
alias serve="sfz" alias serve="sfz"
elif exist gossa; then elif exist gossa; then
alias serve="gossa" alias serve="gossa"

View file

@ -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

View file

@ -61,7 +61,6 @@ fi
export PYTHONSTARTUP="$XDG_CONFIG_HOME/python/pythonrc" export PYTHONSTARTUP="$XDG_CONFIG_HOME/python/pythonrc"
export SQLITE_HISTORY="$XDG_STATE_HOME/sqlite_history" export SQLITE_HISTORY="$XDG_STATE_HOME/sqlite_history"
export TEXMFVAR="$XDG_CACHE_HOME/texlive/texmf-var" 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 VAGRANT_HOME="$XDG_DATA_HOME/vagrant"
export WINEPREFIX="$XDG_DATA_HOME/wine" export WINEPREFIX="$XDG_DATA_HOME/wine"
export ZDOTDIR="$XDG_CONFIG_HOME/zsh" export ZDOTDIR="$XDG_CONFIG_HOME/zsh"

View file

@ -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

View file

@ -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)"

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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"

View file

@ -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 "

View file

@ -305,16 +305,21 @@ nnoremap <space>C :fzfcdhome<cr>
nnoremap <space>w :grep<space> nnoremap <space>w :grep<space>
" external commands " external commands
" extract currently selected file(s) if executable('atool')
noremap ,xx :!atool -x %f<cr> " extract currently selected file(s)
" compress currently selected file(s) noremap ,xx :!atool -x %f<cr>
noremap ,xc :!atool -a %c:r.tar.gz %f<cr> " compress currently selected file(s)
" archive currently selected file(s) noremap ,xc :!atool -a %c:r.tar.gz %f<cr>
noremap ,xa :!atool -a %c:r.tar %f<cr> " archive currently selected file(s)
" zip currently selected file(s) noremap ,xa :!atool -a %c:r.tar %f<cr>
noremap ,xz :!atool -a %c:r.zip %f<cr> " zip currently selected file(s)
" combine selected PDFs into single one (named output.pdf) noremap ,xz :!atool -a %c:r.zip %f<cr>
noremap ,pc :!pdftk %f cat output output.pdf 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 " preview thumbnails of current folder
" select thumbnails with m/M in nsxiv " select thumbnails with m/M in nsxiv
@ -323,7 +328,27 @@ nnoremap ,t :!vifm-thumbnailer -t %u %c<cr>
nnoremap ,T :!vifm-thumbnailer -r -t %u %c<cr> nnoremap ,T :!vifm-thumbnailer -r -t %u %c<cr>
" batch rename or delete files in current dir " batch rename or delete files in current dir
nnoremap ,r :!vidir<cr> if executable('edir')
nnoremap ,rr :!edir<cr>
nnoremap ,rf :!edir --files<cr>
nnoremap ,rd :!edir --dirs<cr>
nnoremap ,rR :!edir --all --depth=10<cr>
elseif executable('vidir')
nnoremap ,rr :!vidir<cr>
if executable('find')
nnoremap ,rf :!find . -maxdepth 1 -type f | vidir -<cr>
nnoremap ,rd :!find . -maxdepth 1 -type d | vidir -<cr>
nnoremap ,rR :!find . | vidir -<cr>
endif
endif
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 <space>z :zoxide<cr>
autocmd DirEnter * !zoxide add %d %i
endif
" allows preview to work for normal view and single pane view " allows preview to work for normal view and single pane view
noremap <silent> w : if layoutis('only') noremap <silent> w : if layoutis('only')
@ -441,6 +466,8 @@ fileviewer *.[1-8] man ./%c | col -b
" Images " Images
filextype *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm filextype *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm
\ {View in vimiv}
\ vimiv %f,
\ {View in imv} \ {View in imv}
\ imv %f %i, \ imv %f %i,
\ {View in viu} \ {View in viu}
@ -449,8 +476,6 @@ filextype *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm
\ vifm-thumbnailer %c, \ vifm-thumbnailer %c,
\ {View in nsxiv} \ {View in nsxiv}
\ nsxiv %f, \ nsxiv %f,
\ {View in vimiv}
\ vimiv %f,
\ {View in sxiv} \ {View in sxiv}
\ sxiv %f, \ sxiv %f,
\ {View in feh} \ {View in feh}

View file

@ -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))"
}

View file

@ -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 ]
}

View file

@ -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

View file

@ -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