diff options
| -rw-r--r-- | fedora/.config/bash/bash_profile | 110 | ||||
| -rw-r--r-- | fedora/.config/bash/bashrc | 1 | ||||
| -rw-r--r-- | fedora/.config/bash/keymaps.bash | 226 | ||||
| -rw-r--r-- | fedora/.config/bash/scripts.bash | 336 | ||||
| -rw-r--r-- | fedora/.config/shell/aliasrc | 22 | ||||
| -rw-r--r-- | fedora/.config/shell/bm-dirs | 1 | ||||
| -rw-r--r-- | fedora/.config/shell/profile | 151 | ||||
| -rw-r--r-- | fedora/.config/shell/scripts.bash | 54 | ||||
| -rw-r--r-- | fedora/.config/tmux/tmux.conf | 91 | ||||
| -rw-r--r-- | fedora/.config/vim/init.vim | 403 | ||||
| -rwxr-xr-x | fedora/.local/bin/bmshortcuts (renamed from fedora/.local/bin/shortcuts) | 4 | ||||
| -rwxr-xr-x | fedora/.local/bin/bookmarks | 211 | ||||
| -rwxr-xr-x | fedora/.local/bin/lastnvim | 77 | ||||
| -rwxr-xr-x | fedora/.local/bin/lastvim | 115 | ||||
| -rwxr-xr-x | fedora/.local/bin/openfiles | 12 | ||||
| -rwxr-xr-x | fedora/.local/bin/restartvim (renamed from fedora/.local/bin/restartnvim) | 8 | ||||
| -rwxr-xr-x | fedora/.local/bin/rgafiles | 4 | ||||
| -rwxr-xr-x | fedora/.local/bin/tmuxopen | 42 | ||||
| -rw-r--r-- | fedora/Dockerfile | 2 |
19 files changed, 678 insertions, 1192 deletions
diff --git a/fedora/.config/bash/bash_profile b/fedora/.config/bash/bash_profile index 068e3f5..2e8eab7 100644 --- a/fedora/.config/bash/bash_profile +++ b/fedora/.config/bash/bash_profile @@ -1,34 +1,107 @@ -#!/bin/sh +#!/bin/bash umask 022 -####################################################### -# EXPORTS -####################################################### +################################################### +### --- ENV PATH --- ### +################################################### +# Add all directories in each subdirectory to $PATH +export PATH="$PATH:$(find ~/.local/bin -path '*/.git*' -prune -o \( -type f -o -type l \) -perm -u=x -exec dirname {} \; | sort -u | paste -sd ':' -)" +export PATH="$PATH:$(find ~/.local/share/.password-store -type d -name '.extensions' | paste -sd ':' -)" +command -v asdf >/dev/null 2>&1 && export PATH="$PATH:$(find -L ~/.local/share/asdf/installs -name bin -type d -print 2>/dev/null | sort -u | paste -s -d ':' -)" +command -v npm >/dev/null 2>&1 && export PATH="$PATH:$(find -L ~/.local/share/npm -name bin -type d -print 2>/dev/null | sort -u | paste -s -d ':' -)" + +unsetopt PROMPT_SP 2>/dev/null +################################################### +### --- DEFAULT PROGRAMS --- ### +################################################### +if command -v nvim >/dev/null 2>&1; then + export EDITOR="nvim" +elif command -v vim >/dev/null 2>&1; then + export EDITOR="vim" +else + export EDITOR="vi" +fi +# export FILE_MANAGER="lf $(lf -version)" +export KEYTIMEOUT=10 +export SUDO_EDITOR=$EDITOR +export TERM="xterm-256color" +export VISUAL=$EDITOR +export TERM="xterm-256color" +export GVIMINIT='let $MYGVIMRC="$XDG_CONFIG_HOME/vim/gvimrc" | source $MYGVIMRC' +export VIMINIT='let $MYVIMRC="$XDG_CONFIG_HOME/vim/vimrc" | source $MYVIMRC' + +################################################### +### --- XDG ENV PATHES --- ### +################################################### +### --- XDG DEFAULT --- ### export XDG_CACHE_HOME="$HOME/.cache" export XDG_CONFIG_HOME="$HOME/.config" export XDG_DATA_HOME="$HOME/.local/share" export XDG_STATE_HOME="$HOME/.local/state" + +### --- XDG CUSTOMS --- ### +export XDG_DOTFILES_DIR="$HOME/.dotfiles" +export XDG_SCRIPTS_HOME="$HOME/.local/bin" +export XDG_SOURCES_HOME="$HOME/.local/src" +export XDG_DESKTOP_DIR="$HOME/Desktop" +export XDG_DOCUMENTS_DIR="$HOME/Documents" +export XDG_DOWNLOAD_DIR="$HOME/Downloads" +export XDG_MUSIC_DIR="$HOME/Music" +export XDG_PICTURES_DIR="$HOME/Pictures" +export XDG_PUBLICSHARE_DIR="$HOME/Public" +export XDG_TEMPLATES_DIR="$HOME/Templates" +export XDG_VIDEOS_DIR="$HOME/Videos" + +####################################################### +# EXPORTS +####################################################### + export CLICOLOR=1 -export EDITOR="vim" export HISTFILE="${XDG_DATA_HOME:-${HOME}/.local/share}/history/sh_history" export INPUTRC="${XDG_CONFIG_HOME:-${HOME}/.config}/shell/inputrc" -export LESS="R" -export LESS_TERMCAP_mb="$(printf '%b' '[1;31m')" -export LESS_TERMCAP_md="$(printf '%b' '[1;36m')" -export LESS_TERMCAP_me="$(printf '%b' '[0m')" -export LESS_TERMCAP_so="$(printf '%b' '[01;44;33m')" -export LESS_TERMCAP_se="$(printf '%b' '[0m')" -export LESS_TERMCAP_us="$(printf '%b' '[1;32m')" -export LESS_TERMCAP_ue="$(printf '%b' '[0m')" -export LESSOPEN="| /usr/bin/highlight -O ansi %s 2>/dev/null" + +### --- MANPAGER --- ### +([ -x "$(command -v batcat)" ] || [ -x "$(command -v batman)" ]) && { + export MANPAGER="sh -c 'col -bx | bat -l man -p'" + export MANROFFOPT="-c" +} || { + export MANPAGER='less -s' + export LESS="R" + export LESS_TERMCAP_mb="$(printf '%b' '[1;31m')" + export LESS_TERMCAP_md="$(printf '%b' '[1;36m')" + export LESS_TERMCAP_me="$(printf '%b' '[0m')" + export LESS_TERMCAP_so="$(printf '%b' '[01;44;33m')" + export LESS_TERMCAP_se="$(printf '%b' '[0m')" + export LESS_TERMCAP_us="$(printf '%b' '[1;32m')" + export LESS_TERMCAP_ue="$(printf '%b' '[0m')" + export LESSOPEN="| lesspipe.sh %s" +} + export LS_COLORS="no=00:fi=00:di=00;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.ogg=01;35:*.mp3=01;35:*.wav=01;35:*.xml=00;31:" export LS_OPTIONS="--color=auto" -export TERM="xterm-256color" -export GVIMINIT='let $MYGVIMRC="$XDG_CONFIG_HOME/vim/gvimrc" | source $MYGVIMRC' -export VIMINIT='let $MYVIMRC="$XDG_CONFIG_HOME/vim/vimrc" | source $MYVIMRC' -export VISUAL=$EDITOR + +### --- PASSWORD STORE --- ### +export PASSWORD_STORE_DIR="$XDG_DATA_HOME/.password-store" +export PASSWORD_STORE_CLIP_TIME=180 # Specifies the number of seconds to wait before restoring the clipboard, by default 45 seconds. +# export PASSWORD_STORE_GENERATED_LENGTH=18 # by default 25. +# export PASSWORD_STORE_CHARACTER_SET='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_=+[]{};:,.<>?' +# export PASSWORD_STORE_CHARACTER_SET_NO_SYMBOLS='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_=+[]{};:,.<>?' +export PASSWORD_STORE_ENABLE_EXTENSIONS="true" +# export PASSWORD_STORE_EXTENSIONS_DIR="$PASSWORD_STORE_DIR/.extensions" +# export BASH_COMPLETION_USER_DIR=$XDG_DATA_HOME/bash-completion/completions + +### --- TMUX --- ### +export TMUX_TMPDIR="$XDG_RUNTIME_DIR" + +### --- VIM --- ### +# export GVIMINIT='let $MYGVIMRC = !has("nvim") ? "$XDG_CONFIG_HOME/vim/gvimrc" : "$XDG_CONFIG_HOME/nvim/init.lua" | so $MYGVIMRC' +# export VIMINIT='let $MYVIMRC = !has("nvim") ? "$XDG_CONFIG_HOME/vim/vimrc" : "$XDG_CONFIG_HOME/nvim/init.lua" | so $MYVIMRC' + +### --- ZSH --- ### +export ZDOTDIR="$XDG_CONFIG_HOME/zsh" +export ZPLUGINDIR="$XDG_SCRIPTS_HOME/zsh" ####################################################### # Source global/local definitions @@ -38,3 +111,4 @@ export VISUAL=$EDITOR [ -f /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion [ -f /etc/bash/bashrc ] && . /etc/bash/bashrc [ -f "${XDG_CONFIG_HOME:-${HOME}/.config}/bash/bashrc" ] && . "${XDG_CONFIG_HOME:-${HOME}/.config}/bash/bashrc" +[ ! -f "$XDG_CONFIG_HOME/shell/shortcutrc" ] && setsid -f bmshortcuts >/dev/null 2>&1 diff --git a/fedora/.config/bash/bashrc b/fedora/.config/bash/bashrc index 2c60286..9343b1a 100644 --- a/fedora/.config/bash/bashrc +++ b/fedora/.config/bash/bashrc @@ -32,7 +32,6 @@ bind "set show-all-if-ambiguous on" ####################################################### # Set command prompt ####################################################### -alias cpu="grep 'cpu ' /proc/stat | awk '{usage=(\$2+\$4)*100/(\$2+\$4+\$5)} END {print usage}' | awk '{printf(\"%.1f\n\", \$1)}'" function __setprompt { local LAST_COMMAND=$? # Must come first! diff --git a/fedora/.config/bash/keymaps.bash b/fedora/.config/bash/keymaps.bash index cf355ad..8335f3e 100644 --- a/fedora/.config/bash/keymaps.bash +++ b/fedora/.config/bash/keymaps.bash @@ -11,101 +11,133 @@ PROMPT_COMMAND='echo -ne "\e[5 q"' # ---------- helper: pre_cmd ---------- pre_cmd() { - local txt="$1" - if [[ -z "${READLINE_LINE+set}" ]]; then - printf '%s ' "$txt" - return - fi - local left=${READLINE_LINE:0:READLINE_POINT} - local right=${READLINE_LINE:READLINE_POINT} - READLINE_LINE="${left}${txt} ${right}" - READLINE_POINT=$(( READLINE_POINT + ${#txt} + 1 )) + local txt="$1" + if [[ -z "${READLINE_LINE+set}" ]]; then + printf '%s ' "$txt" + return + fi + local left=${READLINE_LINE:0:READLINE_POINT} + local right=${READLINE_LINE:READLINE_POINT} + READLINE_LINE="${left}${txt} ${right}" + READLINE_POINT=$((READLINE_POINT + ${#txt} + 1)) } # ---------- Clipboard detection ---------- _detect_clipboard_setup() { - if command -v pbcopy >/dev/null 2>&1 && command -v pbpaste >/dev/null 2>&1; then - clipcopy() { cat "${1:-/dev/stdin}" | pbcopy; } - clippaste() { pbaste; } - return 0 - fi - if command -v wl-copy >/dev/null 2>&1 && command -v wl-paste >/dev/null 2>&1; then - clipcopy() { cat "${1:-/dev/stdin}" | wl-copy; } - clippaste() { wl-paste --no-newline; } - return 0 - fi - if command -v xclip >/dev/null 2>&1; then - clipcopy() { cat "${1:-/dev/stdin}" | xclip -selection clipboard; } - clippaste() { xclip -selection clipboard -out; } - return 0 - fi - if command -v xsel >/dev/null 2>&1; then - clipcopy() { cat "${1:-/dev/stdin}" | xsel --clipboard --input; } - clippaste() { xsel --clipboard --output; } - return 0 - fi - if command -v clip.exe >/dev/null 2>&1; then - clipcopy() { cat "${1:-/dev/stdin}" | clip.exe; } - clippaste() { powershell.exe -noprofile -command Get-Clipboard 2>/dev/null; } - return 0 - fi - if command -v tmux >/dev/null 2>&1 && [ -n "${TMUX:-}" ]; then - clipcopy() { tmux load-buffer -; } - clippaste() { tmux save-buffer -; } - return 0 - fi - return 1 + if command -v pbcopy >/dev/null 2>&1 && command -v pbpaste >/dev/null 2>&1; then + clipcopy() { cat "${1:-/dev/stdin}" | pbcopy; } + clippaste() { pbaste; } + return 0 + fi + if command -v wl-copy >/dev/null 2>&1 && command -v wl-paste >/dev/null 2>&1; then + clipcopy() { cat "${1:-/dev/stdin}" | wl-copy; } + clippaste() { wl-paste --no-newline; } + return 0 + fi + if command -v xclip >/dev/null 2>&1; then + clipcopy() { cat "${1:-/dev/stdin}" | xclip -selection clipboard; } + clippaste() { xclip -selection clipboard -out; } + return 0 + fi + if command -v xsel >/dev/null 2>&1; then + clipcopy() { cat "${1:-/dev/stdin}" | xsel --clipboard --input; } + clippaste() { xsel --clipboard --output; } + return 0 + fi + if command -v clip.exe >/dev/null 2>&1; then + clipcopy() { cat "${1:-/dev/stdin}" | clip.exe; } + clippaste() { powershell.exe -noprofile -command Get-Clipboard 2>/dev/null; } + return 0 + fi + if command -v tmux >/dev/null 2>&1 && [ -n "${TMUX:-}" ]; then + clipcopy() { tmux load-buffer -; } + clippaste() { tmux save-buffer -; } + return 0 + fi + return 1 } _detect_clipboard_setup || true paste_clipboard_to_readline() { - if ! command -v clippaste >/dev/null 2>&1; then - _detect_clipboard_setup || { printf 'No clipboard helper found\n' >&2; return 1; } - fi - local clip - clip=$(clippaste 2>/dev/null) || return 1 - clip="${clip%$'\n'}" - if [[ -z "${READLINE_LINE+set}" ]]; then - printf '%s' "$clip" - return - fi - local left=${READLINE_LINE:0:READLINE_POINT} - local right=${READLINE_LINE:READLINE_POINT} - READLINE_LINE="${left}${clip}${right}" - READLINE_POINT=$(( READLINE_POINT + ${#clip} )) + if ! command -v clippaste >/dev/null 2>&1; then + _detect_clipboard_setup || { + printf 'No clipboard helper found\n' >&2 + return 1 + } + fi + local clip + clip=$(clippaste 2>/dev/null) || return 1 + clip="${clip%$'\n'}" + if [[ -z "${READLINE_LINE+set}" ]]; then + printf '%s' "$clip" + return + fi + local left=${READLINE_LINE:0:READLINE_POINT} + local right=${READLINE_LINE:READLINE_POINT} + READLINE_LINE="${left}${clip}${right}" + READLINE_POINT=$((READLINE_POINT + ${#clip})) } copy_readline_to_clipboard() { - if [[ -z "${READLINE_LINE+set}" ]]; then - printf 'No current line to copy\n' >&2 - return 1 - fi - if ! command -v clipcopy >/dev/null 2>&1; then - _detect_clipboard_setup || { printf 'No clipboard helper found\n' >&2; return 1; } - fi - printf '%s' "${READLINE_LINE}" | clipcopy + if [[ -z "${READLINE_LINE+set}" ]]; then + printf 'No current line to copy\n' >&2 + return 1 + fi + if ! command -v clipcopy >/dev/null 2>&1; then + _detect_clipboard_setup || { + printf 'No clipboard helper found\n' >&2 + return 1 + } + fi + printf '%s' "${READLINE_LINE}" | clipcopy } # ---------- basic utilities ---------- -clear_tree_2() { clear; tree -L 2 2>/dev/null || true; } -clear_tree_3() { clear; tree -L 3 2>/dev/null || true; } +clear_tree_2() { + clear + tree -L 2 2>/dev/null || true +} +clear_tree_3() { + clear + tree -L 3 2>/dev/null || true +} insert_current_date() { - local txt="$(date -I)" - if [[ -z "${READLINE_LINE+set}" ]]; then printf '%s' "$txt"; return; fi - local left=${READLINE_LINE:0:READLINE_POINT}; local right=${READLINE_LINE:READLINE_POINT} - READLINE_LINE="${left}${txt}${right}"; READLINE_POINT=$(( READLINE_POINT + ${#txt} )) + local txt="$(date -I)" + if [[ -z "${READLINE_LINE+set}" ]]; then + printf '%s' "$txt" + return + fi + local left=${READLINE_LINE:0:READLINE_POINT} + local right=${READLINE_LINE:READLINE_POINT} + READLINE_LINE="${left}${txt}${right}" + READLINE_POINT=$((READLINE_POINT + ${#txt})) } insert_unix_timestamp() { - local txt="$(date +%s)" - if [[ -z "${READLINE_LINE+set}" ]]; then printf '%s' "$txt"; return; fi - local left=${READLINE_LINE:0:READLINE_POINT}; local right=${READLINE_LINE:READLINE_POINT} - READLINE_LINE="${left}${txt}${right}"; READLINE_POINT=$(( READLINE_POINT + ${#txt} )) + local txt="$(date +%s)" + if [[ -z "${READLINE_LINE+set}" ]]; then + printf '%s' "$txt" + return + fi + local left=${READLINE_LINE:0:READLINE_POINT} + local right=${READLINE_LINE:READLINE_POINT} + READLINE_LINE="${left}${txt}${right}" + READLINE_POINT=$((READLINE_POINT + ${#txt})) +} +git_status_clear() { + clear + git status 2>/dev/null || git status --short 2>/dev/null || true +} +tmux_left_pane() { + tmux select-pane -L 2>/dev/null || true + tmux resize-pane -Z 2>/dev/null || true } -git_status_clear() { clear; git status 2>/dev/null || git status --short 2>/dev/null || true; } -tmux_left_pane() { tmux select-pane -L 2>/dev/null || true; tmux resize-pane -Z 2>/dev/null || true; } vi_append_clip_selection() { paste_clipboard_to_readline; } copybuffer() { copy_readline_to_clipboard; } -background_start() { local cmd="$1"; shift || return 0; for arg in "$@"; do "$cmd" "$arg" &>/dev/null & done; } +background_start() { + local cmd="$1" + shift || return 0 + for arg in "$@"; do "$cmd" "$arg" &>/dev/null & done +} # ---------- pre_cmd widgets ---------- man_command_line() { pre_cmd "man"; } @@ -114,15 +146,15 @@ sudo_command_line() { pre_cmd "sudo"; } # ---------- wrappers (u-prefix REMOVED) ---------- bc() { command -v bc >/dev/null 2>&1 && /usr/bin/env bc "$@" || printf 'bc: not found\n' >&2; } cdi() { command -v cdi >/dev/null 2>&1 && cdi "$@" || printf 'cdi: not found\n' >&2; } -lastvim() { command -v lastnvim >/dev/null 2>&1 && lastvim "$@" || printf 'lastvim: not found\n' >&2; } +lastvim() { command -v lastvim >/dev/null 2>&1 && lastvim "$@" || printf 'lastvim: not found\n' >&2; } htop() { command -v htop >/dev/null 2>&1 && htop "$@" || printf 'htop: not found\n' >&2; } sessionizer() { command -v sessionizer >/dev/null 2>&1 && sessionizer "$@" || printf 'sessionizer: not found\n' >&2; } upd() { command -v upd >/dev/null 2>&1 && upd "$@" || printf 'upd: not found\n' >&2; } -cht() { command -v cht >/dev/null 2>&1 && cht "$@" || printf 'cht: not found\n' >&2; } # from '^ucht' -> 'cht' +cht() { command -v cht >/dev/null 2>&1 && cht "$@" || printf 'cht: not found\n' >&2; } # from '^ucht' -> 'cht' ali() { command -v ali >/dev/null 2>&1 && ali "$@" || printf 'ali: not found\n' >&2; } fD() { command -v fD >/dev/null 2>&1 && fD "$@" || printf 'fD: not found\n' >&2; } rgafiles() { command -v rgafiles >/dev/null 2>&1 && rgafiles "$@" || printf 'rgafiles: not found\n' >&2; } -lastvim_l() { command -v lastnvim >/dev/null 2>&1 && lastvim -l || printf 'lastvim: not found\n' >&2; } +lastvim_l() { command -v lastvim >/dev/null 2>&1 && lastvim -l || printf 'lastvim: not found\n' >&2; } # ---------- Readline key bindings (bind -x) ---------- # basic movement @@ -133,44 +165,44 @@ bind '"\C-e": end-of-line' bind -x '"\C-x\C-e":clear_tree_2' bind -x '"\C-x\C-w":clear_tree_3' bind -x '"\C-x\C-s":git_status_clear' -bind -x '"\C-x\C-x\C-t":insert_current_date' # ^X^X^T (alternate: C-x C-t) +bind -x '"\C-x\C-x\C-t":insert_current_date' # ^X^X^T (alternate: C-x C-t) bind -x '"\C-x\C-t":insert_current_date' bind -x '"\C-x\C-x\C-u":insert_unix_timestamp' # ^X^X^U bind -x '"\C-x\C-u":insert_unix_timestamp' # clipboard binds -bind -x '"\C-x\C-p":paste_clipboard_to_readline' # ^X^P -bind -x '"\C-x\C-y":copy_readline_to_clipboard' # ^X^Y +bind -x '"\C-x\C-p":paste_clipboard_to_readline' # ^X^P +bind -x '"\C-x\C-y":copy_readline_to_clipboard' # ^X^Y # edit in editor edit_command_line() { - local tmp content - tmp=$(mktemp /tmp/bash-edit.XXXXXX) || return - printf '%s' "${READLINE_LINE:-}" > "$tmp" - "${EDITOR:-vim}" "$tmp" - content=$(<"$tmp") - READLINE_LINE="$content" - READLINE_POINT=${#content} - rm -f "$tmp" + local tmp content + tmp=$(mktemp /tmp/bash-edit.XXXXXX) || return + printf '%s' "${READLINE_LINE:-}" >"$tmp" + "${EDITOR:-vim}" "$tmp" + content=$(<"$tmp") + READLINE_LINE="$content" + READLINE_POINT=${#content} + rm -f "$tmp" } -bind -x '"\C-x\C-v":edit_command_line' # ^X^V +bind -x '"\C-x\C-v":edit_command_line' # ^X^V # man & sudo insertion -bind -x '"\C-x\C-m":man_command_line' # ^X^M +bind -x '"\C-x\C-m":man_command_line' # ^X^M stty -ixon 2>/dev/null || true -bind -x '"\C-s":sudo_command_line' # ^S (stty -ixon to avoid flow control) +bind -x '"\C-s":sudo_command_line' # ^S (stty -ixon to avoid flow control) # tmux left pane (bind ESC + backslash) bind -x $'\e\\':tmux_left_pane # ---------- mappings of the original bindkey -s lines (u removed) ---------- -bind -x '"\C-b":__bc' # will call function __bc below +bind -x '"\C-b":__bc' # will call function __bc below __bc() { bc -lq "$@"; } bind -x '"\C-d":cdi' bind -x '"\C-f":fzffiles' bind -x '"\C-g":lf' -bind -x '"\C-n":lastnvim' +bind -x '"\C-n":lastvim' bind -x '"\C-o":tmo' bind -x '"\C-p":fzfpass' bind -x '"\C-q":htop' @@ -187,14 +219,14 @@ bind -x '"\C-x\C-d":fD' bind -x '"\C-x\C-f":gitfiles' bind -x '"\C-x\C-g":rgafiles' bind -x '"\C-x\C-l":gloac' -bind -x '"\C-x\C-n":lastnvim_l' +bind -x '"\C-x\C-n":lastvim_l' bind -x '"\C-x\C-q":fpkill' bind -x '"\C-x\C-r":fgst' bind -x '"\C-x\C-t":gitstagedfiles' bind -x '"\C-x\C-u":gitupdate' -bind -x '"\C-x\C-_":fzffns' # ^X^_ +bind -x '"\C-x\C-_":fzffns' # ^X^_ bind -x '"\C-x\C-x\C-b":rbackup' bind -x '"\C-x\C-x\C-p":pcyr' -bind -x '"\C-x\C-x\C-r":rbackup' # rbackup -r not directly supported via bind -x args; call rbackup then ask user for flags if needed +bind -x '"\C-x\C-x\C-r":rbackup' # rbackup -r not directly supported via bind -x args; call rbackup then ask user for flags if needed bind -x '"\C-x\C-x\C-s":sshadd' bind -x '"\C-x\C-x\C-y":yay_remaps' diff --git a/fedora/.config/bash/scripts.bash b/fedora/.config/bash/scripts.bash index fa0abbc..76644e3 100644 --- a/fedora/.config/bash/scripts.bash +++ b/fedora/.config/bash/scripts.bash @@ -1,97 +1,64 @@ #!/bin/bash -# Use the best version of pico installed -edit() { - if [ "$(type -t jpico)" = "file" ]; then - # Use JOE text editor http://joe-editor.sourceforge.net/ - jpico -nonotice -linums -nobackups "$@" - elif [ "$(type -t nano)" = "file" ]; then - nano -c "$@" - elif [ "$(type -t pico)" = "file" ]; then - pico "$@" +########################################################################################### +########################################################################################### +### --- APACHE --- ### +# View Apache logs +apachelog() { + if [ -f /etc/httpd/conf/httpd.conf ]; then + cd /var/log/httpd && ls -xAh && multitail --no-repeat -c -s 2 /var/log/httpd/*_log else - vim "$@" + cd /var/log/apache2 && ls -xAh && multitail --no-repeat -c -s 2 /var/log/apache2/*.log fi } -sedit() { - if [ "$(type -t jpico)" = "file" ]; then - # Use JOE text editor http://joe-editor.sourceforge.net/ - sudo jpico -nonotice -linums -nobackups "$@" - elif [ "$(type -t nano)" = "file" ]; then - sudo nano -c "$@" - elif [ "$(type -t pico)" = "file" ]; then - sudo pico "$@" +# Edit the Apache configuration +apacheconfig() { + if [ -f /etc/httpd/conf/httpd.conf ]; then + sedit /etc/httpd/conf/httpd.conf + elif [ -f /etc/apache2/apache2.conf ]; then + sedit /etc/apache2/apache2.conf else - sudo vim "$@" + echo "Error: Apache config file could not be found." + echo "Searching for possible locations:" + sudo updatedb && locate httpd.conf && locate apache2.conf fi } -# Extracts any archive(s) (if unp isn't installed) -extract() { - for archive in $*; do - if [ -f $archive ]; then - case $archive in - *.tar.bz2) tar xvjf $archive ;; - *.tar.gz) tar xvzf $archive ;; - *.bz2) bunzip2 $archive ;; - *.rar) rar x $archive ;; - *.gz) gunzip $archive ;; - *.tar) tar xvf $archive ;; - *.tbz2) tar xvjf $archive ;; - *.tgz) tar xvzf $archive ;; - *.zip) unzip $archive ;; - *.Z) uncompress $archive ;; - *.7z) 7z x $archive ;; - *) echo "don't know how to extract '$archive'..." ;; - esac - else - echo "'$archive' is not a valid file!" - fi - done -} - -# Searches for text in all files in the current folder -ftext() { - # -i case-insensitive - # -I ignore binary files - # -H causes filename to be printed - # -r recursive search - # -n causes line number to be printed - # optional: -F treat search term as a literal, not a regular expression - # optional: -l only print filenames and not the matching lines ex. grep -irl "$1" * - grep -iIHrn --color=always "$1" . | less -r -} - -# Copy file with a progress bar -cpf() { - set -e - strace -q -ewrite cp -- "${1}" "${2}" 2>&1 | - awk '{ - count += $NF - if (count % 10 == 0) { - percent = count / total_size * 100 - printf "%3d%% [", percent - for (i=0;i<=percent;i++) - printf "=" - printf ">" - for (i=percent;i<100;i++) - printf " " - printf "]\r" - } - } - END { print "" }' total_size=$(stat -c '%s' "${1}") count=0 -} +########################################################################################### +########################################################################################### +### --- BASH --- ### +# Automatically install the needed support files for this .bashrc file +install_bashrc_support() { + local dtype + dtype=$(distribution) -# Copy and go to the directory -cpg() { - if [ -d "$2" ]; then - cp $1 $2 && cd $2 + if [ $dtype == "redhat" ]; then + sudo yum install multitail tree joe + elif [ $dtype == "suse" ]; then + sudo zypper install multitail + sudo zypper install tree + sudo zypper install joe + elif [ $dtype == "debian" ]; then + sudo apt-get install multitail tree joe + elif [ $dtype == "gentoo" ]; then + sudo emerge multitail + sudo emerge tree + sudo emerge joe + elif [ $dtype == "mandriva" ]; then + sudo urpmi multitail + sudo urpmi tree + sudo urpmi joe + elif [ $dtype == "slackware" ]; then + echo "No install support for Slackware" else - cp $1 $2 + echo "Unknown distribution" fi } +########################################################################################### +########################################################################################### +### --- CD --- ### # Move and go to the directory mvg() { if [ -d "$2" ]; then @@ -106,7 +73,7 @@ mc() { mkdir -p $1 && cd $1 } -# Goes up a specified number of directories (i.e. up 4) +# Go up a specified number of directories (i.e. up 4) up() { local d="" limit=$1 @@ -134,6 +101,61 @@ pwdtail() { pwd | awk -F/ '{nlast = NF -1;print $nlast"/"$NF}' } +########################################################################################### +########################################################################################### +### --- COMMAND OUTPUT --- ### +alias ilco=insert_last_command_output +insert_last_command_output() { + local last_cmd + last_cmd=$(history | tail -n 2 | head -n 1 | sed 's/^[ ]*[0-9]\+[ ]*//') + eval "$last_cmd" +} + +########################################################################################### +########################################################################################### +### --- COPY --- ### +# Copy file with a progress bar +cpf() { + set -e + strace -q -ewrite cp -- "${1}" "${2}" 2>&1 | + awk '{ + count += $NF + if (count % 10 == 0) { + percent = count / total_size * 100 + printf "%3d%% [", percent + for (i=0;i<=percent;i++) + printf "=" + printf ">" + for (i=percent;i<100;i++) + printf " " + printf "]\r" + } + } + END { print "" }' total_size=$(stat -c '%s' "${1}") count=0 +} + +# Copy and go to the directory +cpg() { + if [ -d "$2" ]; then + cp $1 $2 && cd $2 + else + cp $1 $2 + fi +} + +########################################################################################### +########################################################################################### +### --- CREATE --- ### +alias mc=mkcd +mkcd() { mkdir -p "$1" && cd "$1" || return; } + +mkdt() { + mkdir -p "${1:+$1/}$(date +%F)" +} + +########################################################################################### +########################################################################################### +### --- DISTRIBUTION --- ### # Show the current distribution distribution() { local dtype @@ -206,34 +228,64 @@ ver() { fi } -# Automatically install the needed support files for this .bashrc file -install_bashrc_support() { - local dtype - dtype=$(distribution) +########################################################################################### +########################################################################################### +### --- EDIT --- ### +edit() { + if [ "$(type -t jpico)" = "file" ]; then + # Use JOE text editor http://joe-editor.sourceforge.net/ + jpico -nonotice -linums -nobackups "$@" + elif [ "$(type -t nano)" = "file" ]; then + nano -c "$@" + elif [ "$(type -t pico)" = "file" ]; then + pico "$@" + else + vim "$@" + fi +} - if [ $dtype == "redhat" ]; then - sudo yum install multitail tree joe - elif [ $dtype == "suse" ]; then - sudo zypper install multitail - sudo zypper install tree - sudo zypper install joe - elif [ $dtype == "debian" ]; then - sudo apt-get install multitail tree joe - elif [ $dtype == "gentoo" ]; then - sudo emerge multitail - sudo emerge tree - sudo emerge joe - elif [ $dtype == "mandriva" ]; then - sudo urpmi multitail - sudo urpmi tree - sudo urpmi joe - elif [ $dtype == "slackware" ]; then - echo "No install support for Slackware" +sedit() { + if [ "$(type -t jpico)" = "file" ]; then + # Use JOE text editor http://joe-editor.sourceforge.net/ + sudo jpico -nonotice -linums -nobackups "$@" + elif [ "$(type -t nano)" = "file" ]; then + sudo nano -c "$@" + elif [ "$(type -t pico)" = "file" ]; then + sudo pico "$@" else - echo "Unknown distribution" + sudo vim "$@" fi } +########################################################################################### +########################################################################################### +### --- EXTRACT --- ### +extract() { + for archive in $*; do + if [ -f $archive ]; then + case $archive in + *.tar.bz2) tar xvjf $archive ;; + *.tar.gz) tar xvzf $archive ;; + *.bz2) bunzip2 $archive ;; + *.rar) rar x $archive ;; + *.gz) gunzip $archive ;; + *.tar) tar xvf $archive ;; + *.tbz2) tar xvjf $archive ;; + *.tgz) tar xvzf $archive ;; + *.zip) unzip $archive ;; + *.Z) uncompress $archive ;; + *.7z) 7z x $archive ;; + *) echo "don't know how to extract '$archive'..." ;; + esac + else + echo "'$archive' is not a valid file!" + fi + done +} + +########################################################################################### +########################################################################################### +### --- NETWORK --- ### # Show current network information netinfo() { echo "--------------- Network Information ---------------" @@ -262,28 +314,18 @@ function whatsmyip() { wget http://smart-ip.net/myip -O - -q } -# View Apache logs -apachelog() { - if [ -f /etc/httpd/conf/httpd.conf ]; then - cd /var/log/httpd && ls -xAh && multitail --no-repeat -c -s 2 /var/log/httpd/*_log - else - cd /var/log/apache2 && ls -xAh && multitail --no-repeat -c -s 2 /var/log/apache2/*.log - fi -} +########################################################################################### +########################################################################################### +### --- PASS --- ### +pass_otp() { pass otp uri -q "$1"; } +pass_otp_insert() { pass otp insert "$1"; } -# Edit the Apache configuration -apacheconfig() { - if [ -f /etc/httpd/conf/httpd.conf ]; then - sedit /etc/httpd/conf/httpd.conf - elif [ -f /etc/apache2/apache2.conf ]; then - sedit /etc/apache2/apache2.conf - else - echo "Error: Apache config file could not be found." - echo "Searching for possible locations:" - sudo updatedb && locate httpd.conf && locate apache2.conf - fi -} +alias cpqr=pass_qr +pass_qr() { qrencode -o "$1.png" -t png -Sv 40 <"$1.pgp"; } +########################################################################################### +########################################################################################### +### --- PHP --- ### # Edit the PHP configuration file phpconfig() { if [ -f /etc/php.ini ]; then @@ -303,6 +345,23 @@ phpconfig() { fi } +########################################################################################### +########################################################################################### +### --- SEARCH --- ### +ftext() { + # -i case-insensitive + # -I ignore binary files + # -H causes filename to be printed + # -r recursive search + # -n causes line number to be printed + # optional: -F treat search term as a literal, not a regular expression + # optional: -l only print filenames and not the matching lines ex. grep -irl "$1" * + grep -iIHrn --color=always "$1" . | less -r +} + +########################################################################################### +########################################################################################### +### --- SQL --- ### # Edit the MySQL configuration file mysqlconfig() { if [ -f /etc/my.cnf ]; then @@ -324,16 +383,33 @@ mysqlconfig() { fi } -# For some reason, rot13 pops up everywhere -rot13() { - if [ $# -eq 0 ]; then - tr '[a-m][n-z][A-M][N-Z]' '[n-z][a-m][N-Z][A-M]' - else - echo $* | tr '[a-m][n-z][A-M][N-Z]' '[n-z][a-m][N-Z][A-M]' +########################################################################################### +########################################################################################### +### --- STOW --- ### +alias dstw=dotfiles_stw +dotfiles_stw() { + "${XDG_DOTFILES_DIR:-${HOME}/.dotfiles}/$(whereami)/.local/bin/stw" +} + +########################################################################################### +########################################################################################### +### --- SUDO --- ### +pre_cmd() { + local prepend_command="$1" + local buffer="${READLINE_LINE:-}" + + if [ -z "$buffer" ]; then + buffer=$(history | tail -n 2 | head -n 1 | sed 's/^[ ]*[0-9]\+[ ]*//') fi + + READLINE_LINE="$prepend_command $buffer" + READLINE_POINT=${#READLINE_LINE} } +bind -x '"\es":pre_cmd sudo' -# Trim leading and trailing spaces (for scripts) +########################################################################################### +########################################################################################### +### --- TRIM --- ### trim() { local var=$@ var='${var#"${var%%[![:space:]]*}"}' # remove leading whitespace characters diff --git a/fedora/.config/shell/aliasrc b/fedora/.config/shell/aliasrc index 6b35701..7d9e652 100644 --- a/fedora/.config/shell/aliasrc +++ b/fedora/.config/shell/aliasrc @@ -58,6 +58,9 @@ alias pwdc='pwd | xclip -selection clipboard' # count alias countfiles="for t in files links directories; do echo \`find . -type \${t:0:1} | wc -l\` \$t; done 2> /dev/null" +# cpu +alias cpu="grep 'cpu ' /proc/stat | awk '{usage=(\$2+\$4)*100/(\$2+\$4+\$5)} END {print usage}' | awk '{printf(\"%.1f\n\", \$1)}'" + # curl ialias curl='curl --silent --show-error' balias clh='curl localhost:' @@ -225,10 +228,6 @@ alias mv="mv -i" alias ping="ping -c 10" alias ps="ps auxf" alias rm="rm -iv" -alias svi="sudo vi" -alias v="vim" -alias vi="vim" -alias vis="vim '+set si'" # move ialias mv='mv -iv' @@ -236,19 +235,12 @@ ialias mv='mv -iv' # nginx alias ngx="cd /etc/nginx" -# nvim +# vim alias v='$EDITOR' alias v.='$EDITOR .' alias ve='$EDITOR -c enew' -alias nv.='nvim .' -alias nve='nvim -c enew' -alias nts='NVIM_APPNAME=TheSiahxyz nvim' -alias nav='NVIM_APPNAME=AstroNvim nvim' -alias nlu='NVIM_APPNAME=LunarVim nvim' -alias nlv='NVIM_APPNAME=LazyVim nvim' -alias nnc='NVIM_APPNAME=NvChad nvim' -alias snv='sudo nvim' -alias vll='lastnvim -l' +alias vis="$EDITOR '+set si'" +alias vll='lastvim -l' alias vln='$EDITOR -c '\''execute "edit " . v:oldfiles[0] | normal ''0'\' # ports @@ -362,7 +354,7 @@ alias -g C='| xclip -selection clipboard' alias -g Fj='| jq .' alias -g Fy='| yq .' alias -g Fx='| xmllint --format -' -alias -g V='| nvim -' +alias -g V='| vim -' # unzip alias uz='unzip' diff --git a/fedora/.config/shell/bm-dirs b/fedora/.config/shell/bm-dirs index 2afa0b0..72558e9 100644 --- a/fedora/.config/shell/bm-dirs +++ b/fedora/.config/shell/bm-dirs @@ -6,7 +6,6 @@ cac ${XDG_CACHE_HOME:-${HOME}/.cache} cbc ${XDG_CONFIG_HOME:-${HOME}/.config}/bash cfg ${XDG_CONFIG_HOME:-${HOME}/.config} cgc ${XDG_CONFIG_HOME:-${HOME}/.config}/git -cnv ${XDG_CONFIG_HOME:-${HOME}/.config}/nvim csh ${XDG_CONFIG_HOME:-${HOME}/.config}/shell ctm ${XDG_CONFIG_HOME:-${HOME}/.config}/tmux cts ${XDG_CONFIG_HOME:-${HOME}/.config}/TheSiahxyz diff --git a/fedora/.config/shell/profile b/fedora/.config/shell/profile deleted file mode 100644 index 677943a..0000000 --- a/fedora/.config/shell/profile +++ /dev/null @@ -1,151 +0,0 @@ -################################################### -### --- PROFILE --- ### -################################################### -[ "$(tty)" = "/dev/tty1" ] && set -e # Exit immediately if a command exits with a non-zero status. - -################################################### -### --- ENV PATH --- ### -################################################### -# Add all directories in each subdirectory to $PATH -export PATH="$PATH:$(find ~/.local/bin -path '*/.git*' -prune -o \( -type f -o -type l \) -perm -u=x -exec dirname {} \; | sort -u | paste -sd ':' -)" -export PATH="$PATH:$(find ~/.local/share/.password-store -type d -name '.extensions' | paste -sd ':' -)" -command -v asdf >/dev/null 2>&1 && export PATH="$PATH:$(find -L ~/.local/share/asdf/installs -name bin -type d -print 2>/dev/null | sort -u | paste -s -d ':' -)" -command -v npm >/dev/null 2>&1 && export PATH="$PATH:$(find -L ~/.local/share/npm -name bin -type d -print 2>/dev/null | sort -u | paste -s -d ':' -)" - -unsetopt PROMPT_SP 2>/dev/null - -################################################### -### --- DEFAULT PROGRAMS --- ### -################################################### -export EDITOR="nvim" -export EDITOR2="vim" -# export FILE_MANAGER="lf $(lf -version)" -export KEYTIMEOUT=10 -export SUDO_EDITOR=$EDITOR -export TERM="xterm-256color" -export VISUAL=$EDITOR - -################################################### -### --- XDG ENV PATHES --- ### -################################################### -### --- XDG DEFAULT --- ### -export XDG_CACHE_HOME="$HOME/.cache" -export XDG_CONFIG_HOME="$HOME/.config" -export XDG_DATA_HOME="$HOME/.local/share" -export XDG_STATE_HOME="$HOME/.local/state" - -### --- XDG CUSTOMS --- ### -export XDG_DOTFILES_DIR="$HOME/.dotfiles" -export XDG_SCRIPTS_HOME="$HOME/.local/bin" -export XDG_SOURCES_HOME="$HOME/.local/src" -export XDG_DESKTOP_DIR="$HOME/Desktop" -export XDG_DOCUMENTS_DIR="$HOME/Documents" -export XDG_DOWNLOAD_DIR="$HOME/Downloads" -export XDG_MUSIC_DIR="$HOME/Music" -export XDG_PICTURES_DIR="$HOME/Pictures" -export XDG_PUBLICSHARE_DIR="$HOME/Public" -export XDG_TEMPLATES_DIR="$HOME/Templates" -export XDG_VIDEOS_DIR="$HOME/Videos" - -################################################### -### --- DEFAULT ENV PATHES FOR ALL PROGRAMS --- ### -################################################### -### --- ANDROID --- ### -export ANDROID_SDK_HOME="$XDG_CONFIG_HOME/android" - -### --- ANSIBLE --- ### -export ANSIBLE_CONFIG="$XDG_CONFIG_HOME/ansible/ansible.cfg" - -### --- BAT --- ### -export BAT_CONFIG_PATH="$XDG_CONFIG_HOME/bat/config" - -### --- CARGO --- ### -export CARGO_HOME="$XDG_DATA_HOME/cargo" - -### --- DICS --- ### -export DICS="/usr/share/stardict/dic/" - -### --- ELECTRUM --- ### -export ELECTRUMDIR="$XDG_DATA_HOME/electrum" - -### --- HISTORY --- ### -export HISTFILE="$XDG_DATA_HOME/history/sh_history" - -### --- INPUTRC --- ### -export INPUTRC="$XDG_CONFIG_HOME/shell/inputrc" - -### --- JAVA --- ### -export AWT_TOOLKIT="MToolkit wmname LG3D" # May have to install wmname -export _JAVA_AWT_WM_NONREPARENTING=1 # Fix for Java applications in dwm - -### --- MANPAGER --- ### -([ -x "$(command -v batcat)" ] || [ -x "$(command -v batman)" ]) && { - export MANPAGER="sh -c 'col -bx | bat -l man -p'" - export MANROFFOPT="-c" -} || { - export MANPAGER='less -s' - export LESS="R" - export LESS_TERMCAP_mb="$(printf '%b' '[1;31m')" - export LESS_TERMCAP_md="$(printf '%b' '[1;36m')" - export LESS_TERMCAP_me="$(printf '%b' '[0m')" - export LESS_TERMCAP_so="$(printf '%b' '[01;44;33m')" - export LESS_TERMCAP_se="$(printf '%b' '[0m')" - export LESS_TERMCAP_us="$(printf '%b' '[1;32m')" - export LESS_TERMCAP_ue="$(printf '%b' '[0m')" - export LESSOPEN="| lesspipe.sh %s" -} - -### --- NPM --- ### -export NPM_CONFIG_USERCONFIG="~/.config/npm/.npmrc" - -### --- NVM --- ### -export NVM_DIR="$XDG_CONFIG_HOME/nvm" - -### --- PASSWORD STORE --- ### -export PASSWORD_STORE_DIR="$XDG_DATA_HOME/.password-store" -export PASSWORD_STORE_CLIP_TIME=180 # Specifies the number of seconds to wait before restoring the clipboard, by default 45 seconds. -# export PASSWORD_STORE_GENERATED_LENGTH=18 # by default 25. -# export PASSWORD_STORE_CHARACTER_SET='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_=+[]{};:,.<>?' -# export PASSWORD_STORE_CHARACTER_SET_NO_SYMBOLS='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_=+[]{};:,.<>?' -export PASSWORD_STORE_ENABLE_EXTENSIONS="true" -# export PASSWORD_STORE_EXTENSIONS_DIR="$PASSWORD_STORE_DIR/.extensions" -# export BASH_COMPLETION_USER_DIR=$XDG_DATA_HOME/bash-completion/completions - -### --- POWERLEVEL10K --- ### -export POWERLEVEL9K_INSTALLATION_DIR="/usr/share/zsh-theme-powerlevel10k" - -### --- PYTHON --- ### -export PYTHONPYCACHEPREFIX=$XDG_CACHE_HOME/python -export PYTHONSTARTUP="$XDG_CONFIG_HOME/python/pythonrc" - -### --- RUST --- ### -export RUSTUP_HOME="$XDG_DATA_HOME/rustup" - -### --- SQLITE --- ### -export SQLITE_HISTORY="$XDG_DATA_HOME/history/sqlite_history" - -### --- TMUX --- ### -export TMUX_TMPDIR="$XDG_RUNTIME_DIR" - -### --- VIM --- ### -# export GVIMINIT='let $MYGVIMRC = !has("nvim") ? "$XDG_CONFIG_HOME/vim/gvimrc" : "$XDG_CONFIG_HOME/nvim/init.lua" | so $MYGVIMRC' -# export VIMINIT='let $MYVIMRC = !has("nvim") ? "$XDG_CONFIG_HOME/vim/vimrc" : "$XDG_CONFIG_HOME/nvim/init.lua" | so $MYVIMRC' - -### --- VIRTUAL ENVIRONMENT --- ### -export WORKON_HOME="$XDG_DATA_HOME/venvs" - -### --- VISUAL STUDIO CODE --- ### -export VSCODE_PORTABLE="$XDG_DATA_HOME/vscode" - -### --- WGET --- ### -export WGETRC="$XDG_CONFIG_HOME/wget/wgetrc" - -### --- ZSH --- ### -export ZDOTDIR="$XDG_CONFIG_HOME/zsh" -export ZPLUGINDIR="$XDG_SCRIPTS_HOME/zsh" - -### --- SHORTCUTS --- ### -[ ! -f "$XDG_CONFIG_HOME/shell/shortcutrc" ] && setsid -f shortcuts >/dev/null 2>&1 - -### --- LAPTOP KEYMAP --- ### -sudo -n loadkeys "$XDG_DATA_HOME/thesiah/ttymaps.kmap" 2>/dev/null diff --git a/fedora/.config/shell/scripts.bash b/fedora/.config/shell/scripts.bash deleted file mode 100644 index f257809..0000000 --- a/fedora/.config/shell/scripts.bash +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash - -########################################################################################### -########################################################################################### -### --- COMMAND OUTPUT --- ### -alias ilco=insert_last_command_output -insert_last_command_output() { - local last_cmd - last_cmd=$(history | tail -n 2 | head -n 1 | sed 's/^[ ]*[0-9]\+[ ]*//') - eval "$last_cmd" -} - -########################################################################################### -########################################################################################### -### --- CREATE --- ### -alias mc=mkcd -mkcd() { mkdir -p "$1" && cd "$1" || return; } - -mkdt() { - mkdir -p "${1:+$1/}$(date +%F)" -} - -########################################################################################### -########################################################################################### -### --- PASS --- ### -pass_otp() { pass otp uri -q "$1"; } -pass_otp_insert() { pass otp insert "$1"; } - -alias cpqr=pass_qr -pass_qr() { qrencode -o "$1.png" -t png -Sv 40 < "$1.pgp"; } - -########################################################################################### -########################################################################################### -### --- STOW --- ### -alias dstw=dotfiles_stw -dotfiles_stw() { - "${XDG_DOTFILES_DIR:-${HOME}/.dotfiles}/$(whereami)/.local/bin/stw" -} - -########################################################################################### -########################################################################################### -### --- SUDO --- ### -pre_cmd() { - local prepend_command="$1" - local buffer="${READLINE_LINE:-}" - - if [ -z "$buffer" ]; then - buffer=$(history | tail -n 2 | head -n 1 | sed 's/^[ ]*[0-9]\+[ ]*//') - fi - - READLINE_LINE="$prepend_command $buffer" - READLINE_POINT=${#READLINE_LINE} -} -bind -x '"\es":pre_cmd sudo' diff --git a/fedora/.config/tmux/tmux.conf b/fedora/.config/tmux/tmux.conf new file mode 100644 index 0000000..3b78628 --- /dev/null +++ b/fedora/.config/tmux/tmux.conf @@ -0,0 +1,91 @@ +### --- Settings --- ### +# general +set -as terminal-features 'xterm*:extkeys' +set -g base-index 1 +set -g pane-base-index 1 +set -g default-shell /bin/bash +set -g detach-on-destroy off +set -s extended-keys on +set -g focus-events on +set -g history-limit 1000000 +set -g mouse on +set -g renumber-windows on +set -g set-clipboard on +set -g xterm-keys on +set -gq allow-passthrough on +set -ga update-environment TERM +set -ga update-environment TERM_PROGRAM +set -sg escape-time 0 +setw -g mode-keys vi +setw -g aggressive-resize on + +# activity +set -g monitor-activity on +set -g visual-activity off + +# color +set -g default-terminal "xterm-256color" +set -ga terminal-overrides ',xterm-256color:Tc' +set -sa terminal-features ',xterm-256color:RGB' + +# status +set -g status-interval 1 +set -g status-justify absolute-centre +set -g status-left "" +set -g status-left-length 10 +set -g status-position top +set -g status-right "" +set -g status-style "bg=default" + + +### --- Key Bindings --- ### +# clear +bind 'l' "send-keys C-l; send-keys -R; clear-history" + +# copy-mode +bind 'v' copy-mode + +# pane +bind '%' split-window -h -c '#{pane_current_path}' +bind '"' split-window -v -c '#{pane_current_path}' +bind '|' split-window -h +bind '-' split-window -v +bind -r 'C-down' resize-pane -D 5 +bind -r 'C-up' resize-pane -U 5 +bind -r 'C-left' resize-pane -L 5 +bind -r 'C-right' resize-pane -R 5 +bind '@' choose-window 'join-pane -h -s "%%"' +bind '#' choose-window 'join-pane -s "%%"' +bind 'x' kill-pane +bind 'a' kill-pane -a +bind 'X' kill-window +bind 'A' kill-window -a +bind -n 'M-k' move-pane -h -t '.{up-of}' +bind -n 'M-l' move-pane -t '.{right-of}' +bind -n 'M-h' move-pane -t '.{left-of}' +bind -n 'M-j' move-pane -h -t '.{down-of}' + +# prefix +unbind 'C-b' +set -g prefix 'C-Space' +bind 'C-Space' send-prefix + +# reload +unbind 'r' +bind 'r' source-file "~/.config/tmux/tmux.conf" + +# session +bind -r '(' switch-client -p \; refresh-client -S +bind -r ')' switch-client -n \; refresh-client -S +bind -nr 'M-<' switch-client -p \; refresh-client -S +bind -nr 'M->' switch-client -n \; refresh-client -S +bind "'" switch-client -t'{marked}' +bind -r 'BSpace' switch-client -l + +# window +bind -r '<' swap-window -d -t -1 +bind -r '>' swap-window -d -t +1 +bind -nr 'M-,' previous-window \; refresh-client -S +bind -nr 'M-.' next-window \; refresh-client -S +bind 'c' new-window -c "#{pane_current_path}" +bind -nr 'M-BSpace' last-window diff --git a/fedora/.config/vim/init.vim b/fedora/.config/vim/init.vim index fbb9097..d12ce78 100644 --- a/fedora/.config/vim/init.vim +++ b/fedora/.config/vim/init.vim @@ -9,21 +9,10 @@ autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o " Nerd tree autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif -" Runs a script that cleans out tex build files whenever I close out of a .tex file. -autocmd VimLeave *.tex !texclear % - " Text files -let g:vimwiki_ext2syntax = {'.Rmd': 'markdown', '.rmd': 'markdown','.md': 'markdown', '.markdown': 'markdown', '.mdown': 'markdown'} -let g:vimwiki_list = [{'path': '~/.local/share/nvim/vimwiki', 'syntax': 'markdown', 'ext': '.md'}] -autocmd BufRead,BufNewFile /tmp/calcurse*,~/.calcurse/notes/* set filetype=markdown autocmd BufRead,BufNewFile *.ms,*.me,*.mom,*.man set filetype=groff autocmd BufRead,BufNewFile *.tex set filetype=tex -" Enable Goyo by default for mutt writing -autocmd BufRead,BufNewFile /tmp/neomutt* :Goyo 80 | call feedkeys("jk") -autocmd BufRead,BufNewFile /tmp/neomutt* map ZZ :Goyo!\|x!<CR> -autocmd BufRead,BufNewFile /tmp/neomutt* map ZQ :Goyo!\|q!<CR> - " Automatically deletes all trailing whitespace and newlines at end of file on save. & reset cursor position autocmd BufWritePre * let currPos = getpos(".") autocmd BufWritePre * %s/\s\+$//e @@ -35,17 +24,6 @@ autocmd BufWritePre * cal cursor(currPos[1], currPos[2]) " When shortcut files are updated, renew bash and ranger configs with new material: autocmd BufWritePost bm-files,bm-dirs !shortcuts -" Run xrdb whenever Xdefaults or Xresources are updated. -autocmd BufRead,BufNewFile Xresources,Xdefaults,xresources,xdefaults set filetype=xdefaults -autocmd BufWritePost Xresources,Xdefaults,xresources,xdefaults !xrdb % - -" Recompile dwmblocks on config edit. -autocmd BufWritePost ${XDG_SOURCES_HOME:-$HOME/.local/src}/suckless/dwmblocks/config.h !cd ${XDG_SOURCES_HOME:-$HOME/.local/src}/suckless/dwmblocks/; sudo make install && { killall -q dwmblocks;setsid -f dwmblocks } - -" Which key description -autocmd! User vim-which-key call which_key#register('<Space>', 'g:which_key_map') -let g:which_key_map = {} - " }}} @@ -60,387 +38,10 @@ endif " }}} -" PLUGINS INIT ----------------------------------------------------------- {{{ - -let config_path = empty($XDG_CONFIG_HOME) ? expand("$HOME/.config") : expand("$XDG_CONFIG_HOME") -if filereadable(config_path . "/vim/plugins.vim") - silent! call mkdir(config_path . "/vim/plugged", "p") - execute "source " . config_path . "/vim/plugins.vim" -endif - -" goyo -let g:is_goyo_active = v:false -function! GoyoEnter() - if executable('tmux') && strlen($TMUX) - silent !tmux set status off - silent !tmux list-panes -F '\#F' | grep -q Z || tmux resize-pane -Z - endif - - let g:default_colorscheme = exists('g:colors_name') ? g:colors_name : 'desert' - set background=light - set linebreak - set wrap - set textwidth=0 - set wrapmargin=0 - - Goyo 80x85% - colorscheme seoul256 - let g:is_goyo_active = v:true -endfunction - -function! GoyoLeave() - if executable('tmux') && strlen($TMUX) - silent !tmux set status on - silent !tmux list-panes -F '\#F' | grep -q Z && tmux resize-pane -Z - endif - - Goyo! - execute 'colorscheme ' . g:default_colorscheme - let g:is_goyo_active = v:false -endfunction - -function! ToggleGoyo() - if g:is_goyo_active - call GoyoLeave() - else - call GoyoEnter() - endif -endfunction - -" }}} - - -" PLUGIN MAPPINGS & SETTINGS -------------------------------------------------------- {{{ - -" Open quickfix/location list -let g:which_key_map.o = { - \ 'name' : '+Open' , - \ 'q' : 'Quickfix-list' , - \ 'l' : 'Location-list' , - \ } - -" Check health -nnoremap <Leader>ch :CheckHealth<CR> -let g:which_key_map.c = { 'name' : 'Check' } -let g:which_key_map.c.h = 'Check-health' - -" Bookmarks -let g:bookmark_no_default_key_mappings = 1 -let g:bookmark_save_per_working_dir = 1 -let g:bookmark_auto_save = 1 -nmap <Leader>mm <Plug>BookmarkToggle -nmap <Leader>mi <Plug>BookmarkAnnotate -nmap <Leader>ma <Plug>BookmarkShowAll -nmap <Leader>m] <Plug>BookmarkNext -nmap <Leader>m[ <Plug>BookmarkPrev -nmap <Leader>mc <Plug>BookmarkClear -nmap <Leader>mx <Plug>BookmarkClearAll -nmap <Leader>mk <Plug>BookmarkMoveUp -nmap <Leader>mj <Plug>BookmarkMoveDown -nmap <Leader>mg <Plug>BookmarkMoveToLine - -" Fugitive -nnoremap <Leader>gs :Git<CR> -let g:which_key_map.g = { 'name' : 'Git/Goyo' } -let g:which_key_map.g.s = 'Git' - -" Goyo plugin makes text more readable when writing prose: -nnoremap <Leader>gy :call ToggleGoyo()<CR> -let g:which_key_map.g.y = 'Toggle-goyo' - -" Nerd tree -map <Leader>n :NERDTreeToggle<CR> -let g:which_key_map.n = 'Toggle-nerd-tree' - -" Undotree -nnoremap <Leader>u :UndotreeToggle<CR> -let g:which_key_map.u = 'Toggle-undo-tree' - -" vimwiki -map <Leader>vw :VimwikiIndex<CR> -let g:which_key_map.v = { 'name' : '+Vim-wiki' } -let g:which_key_map.v.w = 'Vim-wiki-index' - -" vim-plug -nnoremap <Leader>pc :PlugClean<CR> -nnoremap <Leader>pi :PlugInstall<CR> -nnoremap <Leader>pu :PlugUpdate<CR> -let g:which_key_map.p = { 'name' : '+Plug' } -let g:which_key_map.p.c = 'Plug-clean' -let g:which_key_map.p.i = 'Plug-install' -let g:which_key_map.p.u = 'Plug-update' - -" whichkey -nnoremap <silent> <Leader> :<C-U>WhichKey '<Space>'<CR> -nnoremap <silent> <localleader> :<C-U>WhichKey '\'<CR> - -" lsp -if executable('pylsp') - " pip install python-lsp-server - au User lsp_setup call lsp#register_server({ - \ 'name': 'pylsp', - \ 'cmd': {server_info->['pylsp']}, - \ 'allowlist': ['python'], - \ }) -endif - -function! s:on_lsp_buffer_enabled() abort - setlocal omnifunc=lsp#complete - setlocal signcolumn=yes - if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif - nmap <buffer> gd <plug>(lsp-definition) - nmap <buffer> gs <plug>(lsp-document-symbol-search) - nmap <buffer> gS <plug>(lsp-workspace-symbol-search) - nmap <buffer> gr <plug>(lsp-references) - nmap <buffer> gi <plug>(lsp-implementation) - nmap <buffer> gt <plug>(lsp-type-definition) - nmap <buffer> <Leader>lr <plug>(lsp-rename) - nmap <buffer> [t <plug>(lsp-previous-diagnostic) - nmap <buffer> ]t <plug>(lsp-next-diagnostic) - nmap <buffer> K <plug>(lsp-hover) - " nnoremap <buffer> <expr><C-D> lsp#scroll(+4) - " nnoremap <buffer> <expr><C-U> lsp#scroll(-4) - - let g:lsp_format_sync_timeout = 1000 - autocmd! BufWritePre *.rs,*.go,*.py call execute('LspDocumentFormatSync') - - " refer to doc to add more commands -endfunction - -let g:which_key_map.g = { - \ 'name' : '+Goto' , - \ 'd' : 'Definition' , - \ 's' : 'Symbol' , - \ 'S' : 'Workspace-symbol' , - \ 'r' : 'References' , - \ 'i' : 'Implementation' , - \ 't' : 'Type-definition' , - \ } - -let g:which_key_map['['] = { 'name' : '+Previous' } -let g:which_key_map[']'] = { 'name' : '+Next' } -let g:which_key_map['[t'] = 'Diagnostic' -let g:which_key_map[']t'] = 'Diagnostic' -let g:which_key_map.K = 'Keyword' - -augroup lsp_install - au! - " call s:on_lsp_buffer_enabled only for languages that has the server registered. - autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled() -augroup END - -let g:lsp_fold_enabled = 0 -let g:lsp_log_verbose = 1 -let g:lsp_log_file = expand('~/.cache/vim/vim-lsp.log') -let g:asyncomplete_log_file = expand('~/.cache/vim/asyncomplete.log') -let g:lsp_settings_filetype_python = ['pyright-langserver', 'ruff', 'ruff-lsp'] - -nnoremap <Leader>li :LspInstallServer<CR> - -" vim-airline -if !exists('g:airline_symbols') - let g:airline_symbols = {} -endif -let g:airline_symbols.colnr = ' C:' -let g:airline_symbols.linenr = ' L:' -let g:airline_symbols.maxlinenr = ' ' -let g:airline#extensions#whitespace#symbol = '!' - -" colorscheme -if isdirectory(expand("${XDG_CONFIG_HOME:-$HOME/.config}/vim/plugged/catppuccin")) - let g:airline_theme = 'catppuccin_mocha' - colorscheme catppuccin_mocha -endif - -" fzf -let g:fzf_vim = {} -let $FZF_DEFAULT_OPTS = "--layout=default --preview-window 'right:60%' --preview 'bat --style=numbers --line-range :300 {}' - \ --bind ctrl-y:preview-up, - \ ctrl-e:preview-down, - \ ctrl-b:preview-page-up, - \ ctrl-f:preview-page-down, - \ ctrl-u:preview-half-page-up, - \ ctrl-d:preview-half-page-down, - \ shift-up:preview-top, - \ shift-down:preview-bottom, - \ alt-up:half-page-up, - \ alt-down:half-page-down - \ " - -" tmux -if exists('$TMUX') - let g:fzf_layout = { 'tmux': '90%,70%' } - let g:tmux_navigator_no_wrap = 1 -else - let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6, 'relative': v:true } } -endif -let g:fzf_vim.preview_window = ['right,50%,<70(up,40%)', 'ctrl-/'] -let g:fzf_vim.commits_log_options = '--graph --color=always --format="%C(auto)%h%d %s %C(black)%C(bold)%cr"' -let g:fzf_vim.tags_command = 'ctags -R' - -function! s:build_quickfix_list(lines) - call setqflist(map(copy(a:lines), '{ "filename": v:val, "lnum": 1 }')) - copen - cc -endfunction - -let g:fzf_action = { - \ 'ctrl-q' : function('s:build_quickfix_list'), - \ 'ctrl-t' : 'tab split' , - \ 'ctrl-x' : 'split' , - \ 'ctrl-v' : 'vsplit' , - \ } - -nnoremap <Leader>cl :Colors<CR> -nnoremap <Leader>fb :Files ~/.local/bin<CR> -nnoremap <Leader>fc :Files ~/.config<CR> -nnoremap <Leader>fd :Files ~/.dotfiles<CR> -nnoremap <Leader>ff :Files .<CR> -nnoremap <Leader>fF :Files ~<CR> -nnoremap <Leader>fg :GFiles<CR> -nnoremap <Leader>fG :GFiles?<CR> -nnoremap <Leader>fs :Files ~/.local/src/suckless<CR> -nnoremap <Leader>fv :Files ~/.config/vim<CR> -nnoremap <Leader>sb :Buffers<CR> -nnoremap <Leader>sc :Changes<CR> -nnoremap <Leader>sC :Commands<CR> -nnoremap <Leader>sg :Rg<CR> -nnoremap <Leader>sG :RG<CR> -nnoremap <Leader>shc :History:<CR> -nnoremap <Leader>shh :History<CR> -nnoremap <Leader>shp :Helptags<CR> -nnoremap <Leader>shs :History/<CR> -nnoremap <Leader>sj :Jumps<CR> -nnoremap <Leader>sk :Maps<CR> -nnoremap <Leader>sl :Locate<CR> -nnoremap <Leader>sm :Marks<CR> -nnoremap <Leader>sn :Snippets<CR> -nnoremap <Leader>st :Filetypes<CR> -nnoremap <Leader>gc :Commits<CR> -nnoremap <Leader>gC :BCommits<CR> - -let g:which_key_map.c = 'Color-schemes' -let g:which_key_map.f = { - \ 'name' : '+Find' , - \ 'b' : 'Scripts' , - \ 'c' : 'Config' , - \ 'd' : 'Dotfiles' , - \ 'f' : 'Files' , - \ 'F' : 'Root-files' , - \ 'g' : 'Git-files' , - \ 'G' : 'Git-status' , - \ 's' : 'Suckless' , - \ 'v' : 'Vim-config' , - \ } - -let g:which_key_map.g = { - \ 'name' : '+Git' , - \ 'c' : 'Commits' , - \ 'C' : 'Buffer-commits' , - \ } - -let g:which_key_map.s = { - \ 'name' : '+Search' , - \ 'b' : 'Buffers' , - \ 'c' : 'Changes' , - \ 'C' : 'Commands' , - \ 'g' : 'Rip-grep' , - \ 'G' : 'Rip-Grep' , - \ 'h' : { - \ 'name' : '+History' , - \ 'c' : 'Command-history' , - \ 'h' : 'History' , - \ 'p' : 'Help-tags' , - \ 's' : 'Search-history' , - \ }, - \ 'j' : 'Jumps' , - \ 'k' : 'Key-maps' , - \ 'l' : 'Locate' , - \ 'm' : 'Marks' , - \ 'n' : 'Snippets' , - \ 't' : 'File-types' , - \ } - - -" snippets -let g:SuperTabDefaultCompletionType = '<C-N>' -let g:SuperTabCrMapping = 0 -let g:UltiSnipsExpandTrigger = '<C-E>' -let g:UltiSnipsJumpForwardTrigger = '<tab>' -let g:UltiSnipsJumpBackwardTrigger = '<s-tab>' -let g:UltiSnipsEditSplit = 'vertical' -let g:UltiSnipsAutoTrigger = 1 -let g:asyncomplete_auto_completeopt = 0 -let g:asyncomplete_auto_popup = 1 - -set completeopt=menuone,noinsert,noselect,preview -autocmd! CompleteDone * if pumvisible() == 0 | pclose | endif - -if has('python3') - call asyncomplete#register_source(asyncomplete#sources#ultisnips#get_source_options({ - \ 'name': 'ultisnips', - \ 'allowlist': ['*'], - \ 'completor': function('asyncomplete#sources#ultisnips#completor'), - \ })) -endif - -inoremap <expr> <Tab> pumvisible() ? "\<C-N>" : "\<Tab>" -inoremap <expr> <S-Tab> pumvisible() ? "\<C-P>" : "\<S-Tab>" -inoremap <expr> <CR> pumvisible() ? asyncomplete#close_popup() : "\<CR>" - -" whichkey -set timeoutlen=500 - -let g:which_key_map.a = 'Select-all-the-text' -let g:which_key_map.b = { 'name' : '+Buffer' } -let g:which_key_map.b.n = 'New/open-buffer' -let g:which_key_map.c = { 'name' : '+Format' } -let g:which_key_map.c.f = 'Format-buffer' -let g:which_key_map.e = 'Explorer' -let g:which_key_map.h = { 'name' : '+Hex' } -let g:which_key_map.h.x = 'Toggle-hex/reverse-conversion' -let g:which_key_map.l = { 'name' : '+Lex/Lsp' } -let g:which_key_map.l.e = 'Open-lex' -let g:which_key_map.l.i = 'Lsp-install-server' -let g:which_key_map.l.r = 'Rename' -let g:which_key_map.o = { 'name' : '+Open' } -let g:which_key_map.o.g = 'Orthography' -let g:which_key_map.Q = 'Force-quit-all' -let g:which_key_map.r = { 'name' : '+Replace' } -let g:which_key_map.r.w = 'Replace word' -let g:which_key_map.s = { 'name' : '+Surround' } -let g:which_key_map.s.o = 'Source-file' -let g:which_key_map.s.w = 'Surround-word' -let g:which_key_map.t = 'Go-to-tab' -let g:which_key_map["'"] = 'Register' -let g:which_key_map['w'] = { - \ 'name' : '+windows' , - \ 'd' : ['<C-W>c' , 'Delete-window'] , - \ 'h' : ['<C-W>h' , 'Window-left'] , - \ 'H' : ['<C-W>5<' , 'Expand-window-left'] , - \ 'j' : ['<C-W>j' , 'Window-below'] , - \ 'J' : [':resize +5' , 'Expand-window-below'] , - \ 'k' : ['<C-W>k' , 'Window-up'] , - \ 'K' : [':resize -5' , 'Expand-window-up'] , - \ 'l' : ['<C-W>l' , 'Window-right'] , - \ 'L' : ['<C-W>5>' , 'Expand-window-right'] , - \ 's' : ['<C-W>s' , 'Split-window-below'] , - \ 'v' : ['<C-W>v' , 'Split-window-below'] , - \ 'w' : ['<C-W>w' , 'Other-window'] , - \ '2' : ['<C-W>v' , 'Layout-double-columns'] , - \ '-' : ['<C-W>s' , 'Split-window-below'] , - \ '|' : ['<C-W>v' , 'Split-window-right'] , - \ '=' : ['<C-W>=' , 'Balance-window'] , - \ '?' : ['Windows' , 'Fzf-window'] , - \ } - -" }}} - - " SHORTCUTS ---------------------------------------------------------------- {{{ -if filereadable(expand("${XDG_CONFIG_HOME:-$HOME/.config}/nvim/shortcuts.vim")) - silent! source ${XDG_CONFIG_HOME:-$HOME/.config}/nvim/shortcuts.vim +if filereadable(expand("${XDG_CONFIG_HOME:-$HOME/.config}/vim/shortcuts.vim")) + silent! source ${XDG_CONFIG_HOME:-$HOME/.config}/vim/shortcuts.vim endif " }}} diff --git a/fedora/.local/bin/shortcuts b/fedora/.local/bin/bmshortcuts index ab5e69d..c425b2f 100755 --- a/fedora/.local/bin/shortcuts +++ b/fedora/.local/bin/bmshortcuts @@ -12,7 +12,7 @@ command -v vim && vim_shortcuts="${XDG_CONFIG_HOME:-${HOME}/.config}/vim/shortcu command -v nvim && nvim_shortcuts="${XDG_CONFIG_HOME:-${HOME}/.config}/nvim/shortcuts.lua" || nvim_shortcuts="/dev/null" command -v yazi && yazi_shortcuts="${XDG_CONFIG_HOME:-${HOME}/.config}/yazi/keymap.toml" || yazi_shortcuts="/dev/null" command -v ranger && ranger_shortcuts="${XDG_CONFIG_HOME:-${HOME}/.config}/ranger/shortcuts.conf" || ranger_shortcuts="/dev/null" -command -v qutebrowser && qute_shortcuts="${XDG_CONFIG_HOME:-${HOME}/.config}/qutebrowser/shortcuts.py" || qute_shortcuts="/dev/null" +command -v qutebrowser && qute_shortcuts="$HOME/.qutebrowser/shortcuts.py" || qute_shortcuts="/dev/null" command -v fish && fish_shortcuts="${XDG_CONFIG_HOME:-${HOME}/.config}/fish/shortcuts.fish" || fish_shortcuts="/dev/null" command -v vifm && vifm_shortcuts="${XDG_CONFIG_HOME:-${HOME}/.config}/vifm/shortcuts.rc" || vifm_shortcuts="/dev/null" @@ -22,7 +22,7 @@ printf "# vim: filetype=sh\\n" >"$fish_shortcuts" printf "# vim: filetype=sh\\nalias " >"$shell_shortcuts" printf "# vim: filetype=sh\\n" >"$shell_env_shortcuts" printf "\" vim: filetype=vim\\n" >"$vifm_shortcuts" -cp "$HOME/.config/yazi/keymap-default.toml" "$yazi_shortcuts" +[ -f "$HOME/.config/yazi/keymap-default.toml" ] && cp "$HOME/.config/yazi/keymap-default.toml" "$yazi_shortcuts" # Format the `directories` file in the correct syntax and sent it to all three configs. eval "echo \"$(cat "$bmdirs")\"" | diff --git a/fedora/.local/bin/bookmarks b/fedora/.local/bin/bookmarks deleted file mode 100755 index a892a33..0000000 --- a/fedora/.local/bin/bookmarks +++ /dev/null @@ -1,211 +0,0 @@ -#!/bin/sh - -usage() { - echo "Open bookmarks, URLs, or browser history in a program." - echo "" - echo "Usage: ${0##*/} [OPTIONS]" - echo "" - echo "Options:" - echo " -h : Show this message" - echo " -b : Open a browser bookmark" - echo " -c : Copy a URL from snippets/urls to the clipboard" - echo " -o : Get a URL from snippets/urls and open it in a new browser window" - echo " -p : Get a URL from snippets/urls and open it in a private browser window" - echo " -s : Open browser history" - echo " -t : Get a URL from snippets/urls and type it using xdotool" - echo " -v : Open a browser bookmark in private browser window" - echo "" - echo "Programs:" - echo " browser : System default browser" - echo " lynx : A text browser for World Wide Web" - echo " w3m : A text WWW browser, similar to lynx" - echo "" - echo "Examples:" - echo " ${0##*/} -b # Opens a browser bookmark in a program" - echo " ${0##*/} -c # Copies a URL from snippets/urls to the clipboard" - echo " ${0##*/} -o # Opens a URL from snippets/urls in a new browser window" - echo " ${0##*/} -p # Opens a URL in a private browser window" - echo " ${0##*/} -s # Opens browser history in a program" - echo " ${0##*/} -v # Opens browser boomark in private browser window" -} - -addurls() { - url=$(echo | dmenu -i -p "Enter a url: ") - [ -z "$url" ] && printf "Error: url must be provided\n\n" && exit 0 - - description=$(echo | dmenu -i -p "Enter a description of the url: ") - [ -z "$description" ] && echo "https://$url" >>~/.local/share/thesiah/snippets - [ -n "$description" ] && echo "$description https://$url" >>~/.local/share/thesiah/snippets -} - -opentool() { - available_tools="" - command -v xdg-open 2>/dev/null | grep -v "alias" -q && available_tools="$available_tools xdg-open" - command -v open 2>/dev/null | grep -v "alias" -q && available_tools="$available_tools open" - command -v lynx 2>/dev/null | grep -v "alias" -q && available_tools="$available_tools lynx" - command -v w3m 2>/dev/null | grep -v "alias" -q && available_tools="$available_tools w3m" - available_tools=$(printf "%s" "$available_tools" | awk '{$1=$1; print}' | tr ' ' '\n') - if [ -z "$available_tools" ]; then - printf "No browser found\n" >&2 - exit 1 - fi - - opentool=$(printf "%s\n" "$available_tools" | dmenu -i -p "Choose an open tool:") - - # Set the selected tool to the variable 'open' - case "$opentool" in - xdg-open) xdg-open "$1" ;; - open) - case "$(uname -s)" in - Darwin) open "$1" ;; - *) xdg-open "$1" ;; - esac - ;; - lynx) setsid -f "$TERMINAL" -e lynx "$1" ;; - w3m) setsid -f "$TERMINAL" -e w3m "$1" ;; - *) echo "Invalid selection" >&2 && exit 1 ;; - esac -} - -openwindow() { - if [ "$1" = "private" ]; then - case "$BROWSER" in - *qutebrowser*) "$BROWSER" --target private-window "$url" ;; - *firefox* | *librewolf*) "$BROWSER" --private-window "$url" ;; - esac - else - case "$BROWSER" in - *qutebrowser*) "$BROWSER" --target window "$url" ;; - *firefox* | *librewolf*) "$BROWSER" --new-window "$url" ;; - esac - fi -} - -openinbrowser() { - # Extract only the default part of the profile name - case $BROWSER in - *firefox*) - profiles_ini_path="$HOME/.mozilla/firefox/profiles.ini" - profile=$(awk '/\[Install/ {found=1} found && /^Default=/ {split($0, arr, "."); print arr[2]; exit}' "$profiles_ini_path") - profile_dir=$(find ~/.mozilla/firefox -type d -name "*.$profile*" | head -n 1) - db_path="$profile_dir/places.sqlite" - ;; - *librewolf*) - profiles_ini_path="$HOME/.librewolf/profiles.ini" - profile=$(awk '/\[Install/ {found=1} found && /^Default=/ {split($0, arr, "."); print arr[2]; exit}' "$profiles_ini_path") - profile_dir=$(find ~/.librewolf -type d -name "*.$profile*" | head -n 1) - db_path="$profile_dir/places.sqlite" - ;; - *qutebrowser*) - profile_dir="${XDG_DATA_HOME:-${HOME}/.local/share}/qutebrowser" - db_path="$profile_dir/history.sqlite" - ;; - *) echo "Default browser path is needed." && exit ;; - esac - - tmp_file="$(mktemp)" - cp -f "$db_path" "$tmp_file" - - type dmenu >/dev/null 2>&1 && - selection="dmenu -i -l 20 -p \"Choose a $1 to open:\"" || - selection="fzf-tmux --reverse --cycle --ansi --delimiter='|' --with-nth=1..-2" - - cols=$((${COLUMNS:-90} / 3)) - case "$1" in - *bookmark*) - case "$BROWSER" in - qutebrowser) bookmarks -o ;; - *firefox* | *librewolf*) - sqlite_query=" - SELECT substr(b.title, 1, $cols) || ' | ' || p.url AS bookmark - FROM moz_bookmarks b - JOIN moz_places p ON b.fk = p.id - WHERE b.type = 1 AND p.url LIKE 'http%' AND b.title NOT NULL - ORDER BY b.title; - " - ;; - *qutebrowser*) geturls && openwindow && exit ;; - esac - ;; - *history*) - case "$BROWSER" in - *qutebrowser*) - sqlite_query=" - SELECT substr(h.title, 1, $cols) || ' | ' || h.url AS bookmark - FROM CompletionHistory h - ORDER BY h.last_atime DESC - LIMIT 100; - " - ;; - *firefox* | *librewolf*) - sqlite_query=" - SELECT substr(p.title, 1, $cols) || ' | ' || p.url - FROM moz_places p - JOIN moz_historyvisits hv ON hv.place_id = p.id - ORDER BY hv.visit_date DESC - LIMIT 100; - " - ;; - esac - ;; - esac - choice=$(sqlite3 "$tmp_file" "$sqlite_query" | eval "$selection" | cut -d'|' -f2 | sed 's|.*\(https://\)|\1|' | xargs) - if [ -n "$choice" ]; then - if echo "$1" | grep -q "private"; then - "$BROWSER" --private-window "$choice" - else - opentool "$choice" - fi - else - exit - fi - rm "$tmp_file" -} - -geturls() { - urls=$(cat ~/.config/qutebrowser/quickmarks ~/.config/qutebrowser/bookmarks/urls ~/.local/share/thesiah/snippets ~/.local/share/thesiah/urls 2>/dev/null) - choice=$(echo "$urls" | grep -v -e '^#' -e '^$' | awk ' - { - if ($1 ~ /^https?:\/\//) { alias = substr($0, index($0, $2)) } # Case 2: URL first - else { alias = substr($0, 1, length($0) - length($NF) - 1) } # Case 1: URL last - print alias - }' | dmenu -i -l 50 -p "Choose an alias $1:") - - [ -z "$choice" ] && exit - url=$(echo "$urls" | grep -v -e '^#' -e '^$' | awk -v choice="$choice" ' - { - if ($1 ~ /^https?:\/\//) { url = $1; alias = substr($0, index($0, $2)) } # Case 2 - else { alias = substr($0, 1, length($0) - length($NF) - 1); url = $NF } # Case 1 - if (alias == choice) print url - }') -} - -copytoclipboard() { - if command -v xclip >/dev/null 2>&1; then - printf "%s" "$url" | xclip -selection clipboard - elif command -v clipcopy >/dev/null 2>&1; then - printf "%s" "$url" | clipcopy - elif command -v xsel >/dev/null 2>&1; then - printf "%s" "$url" | xsel --clipboard --input - else - echo "Clipboard utility not found. Install xclip, clipcopy, or xsel." >&2 - exit 1 - fi - notify-send "'$choice' copied in clipbaord" "$url" -} - -[ $# -eq 0 ] && usage && exit 1 - -while getopts "abchopstv" opt; do - case $opt in - a) addurls ;; - b) openinbrowser "bookmark" ;; - c) geturls "to copy" && copytoclipboard ;; - o) geturls "to open in $BROWSER" && openwindow ;; - p) geturls "to open in private $BROWSER" && openwindow private ;; - s) openinbrowser "history" ;; - t) geturls "to type under cursor" && xdotool type "$url" ;; - v) openinbrowser "private bookmark" ;; - h | *) usage && exit 0 ;; - esac -done diff --git a/fedora/.local/bin/lastnvim b/fedora/.local/bin/lastnvim deleted file mode 100755 index b1ab6c9..0000000 --- a/fedora/.local/bin/lastnvim +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/sh - -# Display help message -usage() { - echo "Open the most recent file or the list of old files in fzf edited by nvim." - echo "" - echo "Usage: ${0##*/} [OPTION]" - echo "" - echo "Options:" - echo " : Open the most recent old file in Neovim." - echo " -h, --help : Show this help message." - echo " -l, --list : Show all recent files in Neovim using fzf." - echo "" - echo "Examples:" - echo " ${0##*/} # Open the most recent file." - echo " ${0##*/} -l # Show all recent files in fzf and select to open." - exit 0 -} - -# List and handle oldfiles -list_oldfiles() { - # Fetch the oldfiles list from Neovim - oldfiles=$(nvim -u NONE --headless +'lua io.write(table.concat(vim.v.oldfiles, "\n") .. "\n")' +qa) - - # Exit if no oldfiles are found - [ -z "$oldfiles" ] && { - echo "No recent files found in Neovim." >&2 - exit 1 - } - - case "$1" in - -h | --help) - usage - ;; - -l | --list) - # Filter valid files - valid_files=$(echo "$oldfiles" | while IFS= read -r file; do - [ -f "$file" ] && printf "%s\n" "$file" - done) - - # Exit if no valid files exist - [ -z "$valid_files" ] && { - echo "No valid files found." >&2 - exit 1 - } - - # Use fzf to select files - selected_files=$(echo "$valid_files" | - fzf-tmux \ - --multi \ - --preview 'bat -n --color=always --line-range=:500 {} 2>/dev/null || echo "Error previewing file"' \ - --height=70% \ - --reverse) - - # Exit if no files were selected - [ -z "$selected_files" ] && exit 1 - - # Open selected files in Neovim - openfiles "$selected_files" - ;; - *) - # Open the most recent file - for file in $oldfiles; do - if [ -f "$file" ]; then - openfiles "$file" - exit 0 - fi - done - - echo "No valid recent files found." >&2 - exit 1 - ;; - esac -} - -# Parse command-line arguments -list_oldfiles "$@" diff --git a/fedora/.local/bin/lastvim b/fedora/.local/bin/lastvim new file mode 100755 index 0000000..435dfba --- /dev/null +++ b/fedora/.local/bin/lastvim @@ -0,0 +1,115 @@ +#!/bin/sh + +# Display help message +usage() { + echo "Open the most recent file or the list of old files edited by vim." + echo "" + echo "Usage: ${0##*/} [OPTION]" + echo "" + echo "Options:" + echo " : Open the most recent old file in Vim." + echo " -h, --help : Show this help message." + echo " -l, --list : Show all recent files and select by number." + echo "" + echo "Examples:" + echo " ${0##*/} # Open the most recent file." + echo " ${0##*/} -l # Show all recent files and select by number." + exit 0 +} + +# Function to open files in vim +openfiles() { + files="$1" + if [ -n "$files" ]; then + # Convert newlines to spaces for vim arguments + file_args=$(echo "$files" | tr '\n' ' ') + vim $file_args + fi +} + +# List and handle oldfiles +list_oldfiles() { + # Fetch the oldfiles list from Vim + # Use vim's :oldfiles command and capture output + temp_file="/tmp/vim_oldfiles_$$.txt" + vim -u NONE -c "redir >> $temp_file | oldfiles | redir END | q" 2>/dev/null + + # Parse vim's oldfiles output (format: " 1: /path/to/file") + oldfiles=$(cat "$temp_file" 2>/dev/null | + sed -n 's/^[[:space:]]*[0-9]*:[[:space:]]*\(.*\)$/\1/p' | + grep -v '^$') + + rm -f "$temp_file" 2>/dev/null + + # Exit if no oldfiles are found + [ -z "$oldfiles" ] && { + echo "No recent files found in Vim." >&2 + exit 1 + } + + case "$1" in + -h | --help) + usage + ;; + -l | --list) + # Filter valid files first + paths_file="/tmp/vim_file_paths_$$.txt" + + echo "$oldfiles" | while IFS= read -r file; do + [ -f "$file" ] && printf "%s\n" "$file" + done >"$paths_file" + + # Count valid files + valid_count=$(wc -l <"$paths_file" 2>/dev/null | tr -d ' ') + + # Exit if no valid files exist + [ -z "$valid_count" ] || [ "$valid_count" -eq 0 ] && { + echo "No valid files found." >&2 + rm -f "$paths_file" 2>/dev/null + exit 1 + } + + # Display numbered file list + file_num=1 + while IFS= read -r file; do + printf "%d: %s\n" "$file_num" "$file" + file_num=$((file_num + 1)) + done <"$paths_file" + + echo "" + printf "Select file number (1-%d) or 'q' to quit: " "$valid_count" + read selection + + # Handle quit + [ "$selection" = "q" ] || [ "$selection" = "Q" ] && { + rm -f "$paths_file" 2>/dev/null + exit 0 + } + + # Validate selection + if [ -n "$selection" ] && [ "$selection" -ge 1 ] && [ "$selection" -le "$valid_count" ] 2>/dev/null; then + selected_file=$(sed -n "${selection}p" "$paths_file") + rm -f "$paths_file" 2>/dev/null + openfiles "$selected_file" + else + echo "Invalid selection." >&2 + rm -f "$paths_file" 2>/dev/null + exit 1 + fi + ;; + *) + # Open the most recent file + for file in $oldfiles; do + if [ -f "$file" ]; then + openfiles "$file" + exit 0 + fi + done + echo "No valid recent files found." >&2 + exit 1 + ;; + esac +} + +# Parse command-line arguments +list_oldfiles "$@" diff --git a/fedora/.local/bin/openfiles b/fedora/.local/bin/openfiles index 5b4f7e2..f35aef1 100755 --- a/fedora/.local/bin/openfiles +++ b/fedora/.local/bin/openfiles @@ -1,7 +1,7 @@ #!/bin/sh -if ! command -v nvim >/dev/null 2>&1; then - echo "Error: 'nvim' is not installed." >&2 +if ! command -v vim >/dev/null 2>&1; then + echo "Error: 'vim' is not installed." >&2 exit 1 fi @@ -20,15 +20,15 @@ count=$# case "$count" in 2) - ${EDITOR:-nvim} -O +'silent! normal g;' "$@" -c 'wincmd t' + ${EDITOR:-vim} -O +'silent! normal g;' "$@" -c 'wincmd t' ;; 3) - ${EDITOR:-nvim} -O "$1" -c 'wincmd j' -c "silent! vsplit $2" -c "silent! split $3" -c 'wincmd t' + ${EDITOR:-vim} -O "$1" -c 'wincmd j' -c "silent! vsplit $2" -c "silent! split $3" -c 'wincmd t' ;; 4) - ${EDITOR:-nvim} -O "$1" -c "silent! vsplit $2" -c "silent! split $3" -c 'wincmd h' -c "silent! split $4" -c 'wincmd t' + ${EDITOR:-vim} -O "$1" -c "silent! vsplit $2" -c "silent! split $3" -c 'wincmd h' -c "silent! split $4" -c 'wincmd t' ;; *) - ${EDITOR:-nvim} "$@" + ${EDITOR:-vim} "$@" ;; esac diff --git a/fedora/.local/bin/restartnvim b/fedora/.local/bin/restartvim index ab040ab..3c63f8b 100755 --- a/fedora/.local/bin/restartnvim +++ b/fedora/.local/bin/restartvim @@ -15,11 +15,11 @@ fi # Get the current tmux pane ID tmux_pane=$(tmux display-message -p '#D') -# Send Escape, :wq, and Enter to Neovim in the tmux pane +# Send Escape, :wq, and Enter to Vim in the tmux pane tmux send-keys -t "$tmux_pane" Escape C-m ':wq' C-m -# Wait to ensure Neovim exits +# Wait to ensure Vim exits sleep 0.5 -# Detach the script from Neovim and wait a bit to ensure Neovim exits -(nohup sh -c "sleep 0.5; tmux send-keys -t \"$tmux_pane\" 'nvim -c \"execute \\\"edit \\\" . v:oldfiles[0] | normal '\''0\"' C-m" >/dev/null 2>&1 &) +# Detach the script from Vim and wait a bit to ensure Vim exits +(nohup sh -c "sleep 0.5; tmux send-keys -t \"$tmux_pane\" 'vim -c \"execute \\\"edit \\\" . v:oldfiles[0] | normal '\''0\"' C-m" >/dev/null 2>&1 &) diff --git a/fedora/.local/bin/rgafiles b/fedora/.local/bin/rgafiles index e8b5e72..ac4471b 100755 --- a/fedora/.local/bin/rgafiles +++ b/fedora/.local/bin/rgafiles @@ -17,7 +17,7 @@ usage() { echo "Examples:" echo " ${0##*/} -p TODO 'KEYWORD' # Search for 'KEYWORD' in files tagged with 'TODO' in the project directories" echo " ${0##*/} -l -p 'KEYWORD' # List files associated with the default 'PROJECT' tag and 'KEYWORD'" - echo " ${0##*/} 'KEYWORD' # Open files containing 'KEYWORD' in nvim" + echo " ${0##*/} 'KEYWORD' # Open files containing 'KEYWORD' in vim" exit 0 } @@ -86,7 +86,7 @@ list_or_open_project_files() { if [ "$list_mode" -eq 1 ]; then echo "$rga_output" else - # Otherwise, open the files with nvim + # Otherwise, open the files with vim set -- "$(printf "%s\n" "$rga_output")" openfiles "$@" fi diff --git a/fedora/.local/bin/tmuxopen b/fedora/.local/bin/tmuxopen index 5362215..87e4f36 100755 --- a/fedora/.local/bin/tmuxopen +++ b/fedora/.local/bin/tmuxopen @@ -16,7 +16,7 @@ wrapper() { echo " Ctrl+d Search directories" echo "" echo "Environment Variables:" - echo " NVIM_SEARCH_REGISTRY Set to the search query, allowing Neovim to highlight matches" + echo " VIM_SEARCH_REGISTRY Set to the search query, allowing Neovim to highlight matches" echo "" echo "Example:" echo " tmuxopen # Run the normal search and open" @@ -79,32 +79,32 @@ wrapper() { --prompt "🔎 " } - set_nvim_search_variable() { + set_vim_search_variable() { raw_output="$1" tmp_content_query="/tmp/search-content-query-$$" if [ -f "$tmp_content_query" ]; then saved_query=$(cat "$tmp_content_query" 2>/dev/null) if [ -n "$saved_query" ]; then - export NVIM_SEARCH_REGISTRY="$saved_query" + export VIM_SEARCH_REGISTRY="$saved_query" return fi fi query=$(echo "$raw_output" | head -n1) - export NVIM_SEARCH_REGISTRY="$query" + export VIM_SEARCH_REGISTRY="$query" } - open_files_in_nvim() { + open_files_in_vim() { pane="$1" shift file_indices="$*" - nvim_cmd="nvim" + vim_cmd="vim" for index in $file_indices; do file=$(echo "$files" | awk -v idx="$index" '{print $idx}') line=$(echo "$lines" | awk -v idx="$index" '{print $idx}') - nvim_cmd="$nvim_cmd +$line $file" + vim_cmd="$vim_cmd +$line $file" done - nvim_cmd="$nvim_cmd -c 'let @/=\"$NVIM_SEARCH_REGISTRY\"'" - tmux send-keys -t "$pane" "$nvim_cmd" C-m + vim_cmd="$vim_cmd -c 'let @/=\"$VIM_SEARCH_REGISTRY\"'" + tmux send-keys -t "$pane" "$vim_cmd" C-m } # Parse command line arguments @@ -123,7 +123,7 @@ wrapper() { done raw_output=$(get_fzf_output) - set_nvim_search_variable "$raw_output" + set_vim_search_variable "$raw_output" # Split the newline-delimited output into an array, skipping the first line (query) selections=$(echo "$raw_output" | sed 1d) @@ -158,42 +158,42 @@ EOF fi if [ "$count" -eq 1 ]; then - open_files_in_nvim "$(tmux display-message -p '#P')" 1 + open_files_in_vim "$(tmux display-message -p '#P')" 1 else window_name="$(date +%s)" tmux new-window -n "$window_name" case "$count" in 2) tmux split-window -t "$window_name" -h -p 50 - open_files_in_nvim "$window_name.1" 1 - open_files_in_nvim "$window_name.2" 2 + open_files_in_vim "$window_name.1" 1 + open_files_in_vim "$window_name.2" 2 tmux select-pane -t "$window_name.1" ;; 3) tmux split-window -t "$window_name" -h -p 50 tmux split-window -t "$window_name.2" -v -p 50 - open_files_in_nvim "$window_name.1" 1 - open_files_in_nvim "$window_name.2" 2 - open_files_in_nvim "$window_name.3" 3 + open_files_in_vim "$window_name.1" 1 + open_files_in_vim "$window_name.2" 2 + open_files_in_vim "$window_name.3" 3 ;; *) tmux split-window -t "$window_name" -h -p 50 tmux split-window -t "$window_name.1" -v -p 50 tmux split-window -t "$window_name.3" -v -p 50 - open_files_in_nvim "$window_name.1" 1 - open_files_in_nvim "$window_name.2" 2 - open_files_in_nvim "$window_name.3" 3 + open_files_in_vim "$window_name.1" 1 + open_files_in_vim "$window_name.2" 2 + open_files_in_vim "$window_name.3" 3 remaining_indices="" for i in $(seq 4 "$count"); do remaining_indices="$remaining_indices $i" done - open_files_in_nvim "$window_name.4" "$remaining_indices" + open_files_in_vim "$window_name.4" "$remaining_indices" ;; esac fi } -for cmd in rg fzf bat tmux nvim; do +for cmd in rg fzf bat tmux vim; do if ! command -v $cmd >/dev/null 2>&1; then echo "Error: $cmd not found" >&2 exit 1 diff --git a/fedora/Dockerfile b/fedora/Dockerfile index 0a08f75..090a48a 100644 --- a/fedora/Dockerfile +++ b/fedora/Dockerfile @@ -6,7 +6,7 @@ LABEL name="$NAME" \ summary="Fedora toolbox container" \ maintainer="TheSiahxyz" -ENV EDITOR=nvim +ENV EDITOR=vim ENV NODE_VERSION=21.7.1 |
