diff options
Diffstat (limited to 'fedora/.config/bash')
| -rw-r--r-- | fedora/.config/bash/autocomplete.bash | 4 | ||||
| -rw-r--r-- | fedora/.config/bash/bash_profile | 112 | ||||
| -rw-r--r-- | fedora/.config/bash/bashrc | 13 | ||||
| -rw-r--r-- | fedora/.config/bash/completions/bat.bash | 249 | ||||
| -rw-r--r-- | fedora/.config/bash/completions/rg.bash | 783 | ||||
| -rw-r--r-- | fedora/.config/bash/completions/ya.bash | 647 | ||||
| -rw-r--r-- | fedora/.config/bash/completions/yazi.bash | 66 | ||||
| -rw-r--r-- | fedora/.config/bash/completions/zoxide.bash | 243 | ||||
| -rw-r--r-- | fedora/.config/bash/keymaps.bash | 238 | ||||
| -rw-r--r-- | fedora/.config/bash/packages.bash | 2 | ||||
| -rw-r--r-- | fedora/.config/bash/scripts.bash | 354 |
11 files changed, 2449 insertions, 262 deletions
diff --git a/fedora/.config/bash/autocomplete.bash b/fedora/.config/bash/autocomplete.bash index 0aeeedd..3ee6183 100644 --- a/fedora/.config/bash/autocomplete.bash +++ b/fedora/.config/bash/autocomplete.bash @@ -147,7 +147,7 @@ expand_alias_and_accept_line() { # Bind Space to our function so pressing space triggers alias-expansion behavior. # Use bind -x to call expand_alias_space (it will both expand and insert space when appropriate). # WARNING: this overrides normal space key behavior; our function handles insertion. -bind -x '" "':expand_alias_space +# bind -x '" "':expand_alias_space # optional: bind Ctrl-Space to the same (a bypass key like zsh had) # Many terminals send "\C-@" for ctrl-space; try both common sequences: @@ -169,7 +169,7 @@ _bash_accept_line() { # (This is a conservative behavior to avoid interfering unexpectedly.) return 0 } -bind -x '"\C-m":_bash_accept_line' +#bind -x '"\C-m":_bash_accept_line' # ---------- helper: background starter ---------- background() { diff --git a/fedora/.config/bash/bash_profile b/fedora/.config/bash/bash_profile index 068e3f5..d74e372 100644 --- a/fedora/.config/bash/bash_profile +++ b/fedora/.config/bash/bash_profile @@ -1,34 +1,106 @@ -#!/bin/sh +#!/bin/bash umask 022 -####################################################### -# EXPORTS -####################################################### +################################################### +### --- 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" +################################################### +### --- 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" + +################################################### +### --- ENV PATH --- ### +################################################### +# Add all directories in each subdirectory to $PATH +[ -d ~/.local/bin ] && export PATH="$(find ~/.local/bin -path '*/.git*' -prune -o \( -type f -o -type l \) -perm -u=x -exec dirname {} \; | sort -u | paste -sd ':' -):$PATH" +[ -d ~/.local/share/.password-store ] && export PATH="$(find ~/.local/share/.password-store -type d -name '.extensions' | paste -sd ':' -):$PATH" +export PATH="$ASDF_DATA_DIR/shims:$PATH" +command -v asdf >/dev/null 2>&1 && export PATH="$(find -L ~/.local/share/asdf/installs -name bin -type d -print 2>/dev/null | sort -u | paste -s -d ':' -):$PATH" +command -v npm >/dev/null 2>&1 && export PATH="$(find -L ~/.local/share/npm -name bin -type d -print 2>/dev/null | sort -u | paste -s -d ':' -):$PATH" + +unsetopt PROMPT_SP 2>/dev/null ####################################################### # Source global/local definitions @@ -38,3 +110,7 @@ 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" +for file in "${XDG_CONFIG_HOME:-${HOME}/.config}/bash/completions"/*.bash; do + [ -f "$file" ] && . "$file" +done +[ ! -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..ec1cc46 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! @@ -164,6 +163,18 @@ bind '"\C-g":"lfcd\n"' eval "$(dircolors)" +[ -f "$HOME/.config/bash/git.bash" ] && . "$HOME/.config/bash/git.bash" +[ -f "$HOME/.config/bash/p10k.bash" ] && . "$HOME/.config/bash/p10k.bash" +[ -f "$HOME/.config/bash/autocomplete.bash" ] && . "$HOME/.config/bash/autocomplete.bash" +[ -f "$HOME/.config/bash/scripts.bash" ] && . "$HOME/.config/bash/scripts.bash" +[ -f "$HOME/.config/bash/keymaps.bash" ] && . "$HOME/.config/bash/keymaps.bash" +[ -f "$HOME/.config/bash/plugins.bash" ] && . "$HOME/.config/bash/plugins.bash" +[ -f "$HOME/.config/bash/packages.bash" ] && . "$HOME/.config/bash/packages.bash" +[ -f "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/aliasrc" ] && . "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/aliasrc" +[ -f "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/git-aliasrc" ] && . "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/git-aliasrc" +[ -f "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/shortcutrc" ] && . "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/shortcutrc" +[ -f "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/shortcutenvrc" ] && . "${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutenvrc" +[ -f "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/zshnameddirrc" ] && . "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/zshnameddirrc" [ -f "${XDG_SCRIPTS_HOME:-${HOME}/.local/bin}/bash-preexec" ] && . "${XDG_SCRIPTS_HOME:-${HOME}/.local/bin}/bash-preexec" [ -f "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/rootshortcutrc" ] && . "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/rootshortcutrc" [ -f "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/rootzshnameddirrc" ] && . "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/rootzshnameddirrc" diff --git a/fedora/.config/bash/completions/bat.bash b/fedora/.config/bash/completions/bat.bash new file mode 100644 index 0000000..fa0f712 --- /dev/null +++ b/fedora/.config/bash/completions/bat.bash @@ -0,0 +1,249 @@ +# shellcheck disable=SC2207 + +# Requires https://github.com/scop/bash-completion + +# Macs have bash3 for which the bash-completion package doesn't include +# _init_completion. This is a minimal version of that function. +__bat_init_completion() +{ + COMPREPLY=() + _get_comp_words_by_ref "$@" cur prev words cword +} + +__bat_escape_completions() +{ + # Do not escape if completing a quoted value. + [[ $cur == [\"\']* ]] && return 0 + if (( + BASH_VERSINFO[0] > 5 || \ + BASH_VERSINFO[0] == 5 && BASH_VERSINFO[1] >= 3 + )); then + # bash >= 5.3 has "compopt -o fullquote", which exactly does + # what this function tries to do. + compopt -o fullquote + elif (( + BASH_VERSINFO[0] > 4 || \ + BASH_VERSINFO[0] == 4 && BASH_VERSINFO[1] > 0 + )); then + # printf -v to an array index is available in bash >= 4.1. + # Use it if available, as -o filenames is semantically + # incorrect if we are not actually completing filenames, and it + # has side effects (e.g. adds trailing slash to candidates + # matching present dirs). + local i + for i in ${!COMPREPLY[*]}; do + printf -v "COMPREPLY[i]" %q "${COMPREPLY[i]}" + done + + # We can use "compopt -o noquote" available in bash >= 4.3 to + # prevent further quoting by the shell, which would be + # unexpectedly applied when a quoted result matches a filename. + if (( + BASH_VERSINFO[0] > 4 || \ + BASH_VERSINFO[0] == 4 && BASH_VERSINFO[1] >= 3 + )); then + compopt -o noquote + fi + else + compopt -o filenames + fi +} + +_bat() { + local cur prev words split=false + if declare -F _init_completion >/dev/null 2>&1; then + _init_completion -s || return 0 + else + __bat_init_completion -n "=" || return 0 + _split_longopt && split=true + fi + + if [[ ${words[1]-} == cache ]]; then + case $prev in + --source | --target) + _filedir -d + return 0 + ;; + esac + COMPREPLY=($(compgen -W " + --build + --clear + --source + --target + --blank + --help + " -- "$cur")) + return 0 + fi + + case $prev in + -l | --language) + local IFS=$'\n' + COMPREPLY=($(compgen -W "$( + "$1" --list-languages | while IFS=: read -r lang _; do + printf "%s\n" "$lang" + done + )" -- "$cur")) + __bat_escape_completions + return 0 + ;; + -H | --highlight-line | \ + --diff-context | \ + --tabs | \ + --terminal-width | \ + -m | --map-syntax | \ + --ignored-suffix | \ + --list-themes | \ + --squeeze-limit | \ + --line-range | \ + -L | --list-languages | \ + --lessopen | \ + --no-paging | \ + --diagnostic | \ + --acknowledgements | \ + -h | --help | \ + -V | --version | \ + --cache-dir | \ + --config-dir | \ + --config-file | \ + --generate-config-file) + # argument required but no completion available, or option + # causes an exit + return 0 + ;; + --file-name) + _filedir + return 0 + ;; + --wrap) + COMPREPLY=($(compgen -W "auto never character" -- "$cur")) + return 0 + ;; + --binary) + COMPREPLY=($(compgen -W "no-printing as-text" -- "$cur")) + return 0 + ;; + --nonprintable-notation) + COMPREPLY=($(compgen -W "unicode caret" -- "$cur")) + return 0 + ;; + --strip-ansi) + COMPREPLY=($(compgen -W "auto never always" -- "$cur")) + return 0 + ;; + --completion) + COMPREPLY=($(compgen -W "bash fish zsh ps1" -- "$cur")) + return 0 + ;; + --color | --decorations | --paging) + COMPREPLY=($(compgen -W "auto never always" -- "$cur")) + return 0 + ;; + --italic-text) + COMPREPLY=($(compgen -W "always never" -- "$cur")) + return 0 + ;; + --pager) + COMPREPLY=($(compgen -c -- "$cur")) + return 0 + ;; + --theme) + local IFS=$'\n' + COMPREPLY=($(compgen -W "auto${IFS}auto:always${IFS}auto:system${IFS}dark${IFS}light${IFS}$("$1" --list-themes)" -- "$cur")) + __bat_escape_completions + return 0 + ;; + --theme-dark | \ + --theme-light) + local IFS=$'\n' + COMPREPLY=($(compgen -W "$("$1" --list-themes)" -- "$cur")) + __bat_escape_completions + return 0 + ;; + --style) + # shellcheck disable=SC2034 + local -a styles=( + default + full + auto + plain + changes + header + header-filename + header-filesize + grid + rule + numbers + snip + ) + # shellcheck disable=SC2016 + if declare -F _comp_delimited >/dev/null 2>&1; then + # bash-completion > 2.11 + _comp_delimited , -W '"${styles[@]}"' + else + COMPREPLY=($(compgen -W '${styles[@]}' -- "$cur")) + fi + return 0 + esac + + $split && return 0 + + if [[ $cur == -* ]]; then + # --unbuffered excluded intentionally (no-op) + COMPREPLY=($(compgen -W " + --show-all + --nonprintable-notation + --binary + --plain + --language + --highlight-line + --file-name + --diff + --diff-context + --tabs + --wrap + --chop-long-lines + --terminal-width + --number + --color + --italic-text + --decorations + --force-colorization + --paging + --no-paging + --pager + --map-syntax + --ignored-suffix + --theme + --theme-dark + --theme-light + --list-themes + --squeeze-blank + --squeeze-limit + --strip-ansi + --style + --line-range + --list-languages + --lessopen + --completion + --diagnostic + --acknowledgements + --set-terminal-title + --help + --version + --cache-dir + --config-dir + --config-file + --generate-config-file + --no-config + --no-custom-assets + --no-lessopen + " -- "$cur")) + return 0 + fi + + _filedir + + ## Completion of the 'cache' command itself is removed for better UX + ## See https://github.com/sharkdp/bat/issues/2085#issuecomment-1271646802 +} && complete -F _bat bat diff --git a/fedora/.config/bash/completions/rg.bash b/fedora/.config/bash/completions/rg.bash new file mode 100644 index 0000000..12d1039 --- /dev/null +++ b/fedora/.config/bash/completions/rg.bash @@ -0,0 +1,783 @@ +_rg() { + local i cur prev opts cmds + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + prev="${COMP_WORDS[COMP_CWORD-1]}" + cmd="" + opts="" + + for i in ${COMP_WORDS[@]}; do + case "${i}" in + rg) + cmd="rg" + ;; + *) + ;; + esac + done + + case "${cmd}" in + rg) + opts="--regexp -e --file -f --after-context -A --before-context -B --binary --no-binary --block-buffered --no-block-buffered --byte-offset -b --no-byte-offset --case-sensitive -s --color --colors --column --no-column --context -C --context-separator --no-context-separator --count -c --count-matches --crlf --no-crlf --debug --dfa-size-limit --encoding -E --no-encoding --engine --field-context-separator --field-match-separator --files --files-with-matches -l --files-without-match --fixed-strings -F --no-fixed-strings --follow -L --no-follow --generate --glob -g --glob-case-insensitive --no-glob-case-insensitive --heading --no-heading --help -h --hidden -. --no-hidden --hostname-bin --hyperlink-format --iglob --ignore-case -i --ignore-file --ignore-file-case-insensitive --no-ignore-file-case-insensitive --include-zero --no-include-zero --invert-match -v --no-invert-match --json --no-json --line-buffered --no-line-buffered --line-number -n --no-line-number -N --line-regexp -x --max-columns -M --max-columns-preview --no-max-columns-preview --max-count -m --max-depth -d --max-filesize --mmap --no-mmap --multiline -U --no-multiline --multiline-dotall --no-multiline-dotall --no-config --no-ignore --ignore --no-ignore-dot --ignore-dot --no-ignore-exclude --ignore-exclude --no-ignore-files --ignore-files --no-ignore-global --ignore-global --no-ignore-messages --ignore-messages --no-ignore-parent --ignore-parent --no-ignore-vcs --ignore-vcs --no-messages --messages --no-require-git --require-git --no-unicode --unicode --null -0 --null-data --one-file-system --no-one-file-system --only-matching -o --path-separator --passthru --pcre2 -P --no-pcre2 --pcre2-version --pre --no-pre --pre-glob --pretty -p --quiet -q --regex-size-limit --replace -r --search-zip -z --no-search-zip --smart-case -S --sort --sortr --stats --no-stats --stop-on-nonmatch --text -a --no-text --threads -j --trace --trim --no-trim --type -t --type-not -T --type-add --type-clear --type-list --unrestricted -u --version -V --vimgrep --with-filename -H --no-filename -I --word-regexp -w --auto-hybrid-regex --no-auto-hybrid-regex --no-pcre2-unicode --pcre2-unicode --sort-files --no-sort-files <PATTERN> <PATH>..." + if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then + COMPREPLY=($(compgen -W "${opts}" -- "${cur}")) + return 0 + fi + case "${prev}" in + + --regexp) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -e) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --file) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -f) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --after-context) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -A) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --before-context) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -B) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --binary) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-binary) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --block-buffered) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-block-buffered) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --byte-offset) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -b) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-byte-offset) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --case-sensitive) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -s) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --color) + COMPREPLY=($(compgen -W "never auto always ansi" -- "${cur}")) + return 0 + ;; + --colors) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --column) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-column) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --context) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -C) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --context-separator) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-context-separator) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --count) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -c) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --count-matches) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --crlf) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-crlf) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --debug) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --dfa-size-limit) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --encoding) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -E) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-encoding) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --engine) + COMPREPLY=($(compgen -W "default pcre2 auto" -- "${cur}")) + return 0 + ;; + --field-context-separator) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --field-match-separator) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --files) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --files-with-matches) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -l) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --files-without-match) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --fixed-strings) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -F) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-fixed-strings) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --follow) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -L) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-follow) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --generate) + COMPREPLY=($(compgen -W "man complete-bash complete-zsh complete-fish complete-powershell" -- "${cur}")) + return 0 + ;; + --glob) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -g) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --glob-case-insensitive) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-glob-case-insensitive) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --heading) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-heading) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --help) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -h) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --hidden) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -.) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-hidden) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --hostname-bin) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --hyperlink-format) + COMPREPLY=($(compgen -W "default none cursor file grep+ kitty macvim textmate vscode vscode-insiders vscodium" -- "${cur}")) + return 0 + ;; + --iglob) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --ignore-case) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -i) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --ignore-file) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --ignore-file-case-insensitive) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-ignore-file-case-insensitive) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --include-zero) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-include-zero) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --invert-match) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -v) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-invert-match) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --json) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-json) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --line-buffered) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-line-buffered) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --line-number) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -n) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-line-number) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -N) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --line-regexp) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -x) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --max-columns) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -M) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --max-columns-preview) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-max-columns-preview) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --max-count) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -m) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --max-depth) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -d) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --max-filesize) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --mmap) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-mmap) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --multiline) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -U) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-multiline) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --multiline-dotall) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-multiline-dotall) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-config) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-ignore) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --ignore) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-ignore-dot) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --ignore-dot) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-ignore-exclude) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --ignore-exclude) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-ignore-files) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --ignore-files) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-ignore-global) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --ignore-global) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-ignore-messages) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --ignore-messages) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-ignore-parent) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --ignore-parent) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-ignore-vcs) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --ignore-vcs) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-messages) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --messages) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-require-git) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --require-git) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-unicode) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --unicode) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --null) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -0) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --null-data) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --one-file-system) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-one-file-system) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --only-matching) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -o) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --path-separator) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --passthru) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --pcre2) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -P) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-pcre2) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --pcre2-version) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --pre) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-pre) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --pre-glob) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --pretty) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -p) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --quiet) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -q) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --regex-size-limit) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --replace) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -r) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --search-zip) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -z) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-search-zip) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --smart-case) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -S) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --sort) + COMPREPLY=($(compgen -W "none path modified accessed created" -- "${cur}")) + return 0 + ;; + --sortr) + COMPREPLY=($(compgen -W "none path modified accessed created" -- "${cur}")) + return 0 + ;; + --stats) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-stats) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --stop-on-nonmatch) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --text) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -a) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-text) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --threads) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -j) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --trace) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --trim) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-trim) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --type) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -t) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --type-not) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -T) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --type-add) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --type-clear) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --type-list) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --unrestricted) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -u) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --version) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -V) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --vimgrep) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --with-filename) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -H) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-filename) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -I) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --word-regexp) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -w) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --auto-hybrid-regex) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-auto-hybrid-regex) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-pcre2-unicode) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --pcre2-unicode) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --sort-files) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --no-sort-files) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + esac + COMPREPLY=($(compgen -W "${opts}" -- "${cur}")) + return 0 + ;; + esac +} + +complete -F _rg -o bashdefault -o default rg diff --git a/fedora/.config/bash/completions/ya.bash b/fedora/.config/bash/completions/ya.bash new file mode 100644 index 0000000..b24e3e5 --- /dev/null +++ b/fedora/.config/bash/completions/ya.bash @@ -0,0 +1,647 @@ +_ya() { + local i cur prev opts cmd + COMPREPLY=() + if [[ "${BASH_VERSINFO[0]}" -ge 4 ]]; then + cur="$2" + else + cur="${COMP_WORDS[COMP_CWORD]}" + fi + prev="$3" + cmd="" + opts="" + + for i in "${COMP_WORDS[@]:0:COMP_CWORD}" + do + case "${cmd},${i}" in + ",$1") + cmd="ya" + ;; + ya,emit) + cmd="ya__emit" + ;; + ya,emit-to) + cmd="ya__emit__to" + ;; + ya,help) + cmd="ya__help" + ;; + ya,pack) + cmd="ya__pack" + ;; + ya,pkg) + cmd="ya__pkg" + ;; + ya,pub) + cmd="ya__pub" + ;; + ya,pub-to) + cmd="ya__pub__to" + ;; + ya,sub) + cmd="ya__sub" + ;; + ya__help,emit) + cmd="ya__help__emit" + ;; + ya__help,emit-to) + cmd="ya__help__emit__to" + ;; + ya__help,help) + cmd="ya__help__help" + ;; + ya__help,pack) + cmd="ya__help__pack" + ;; + ya__help,pkg) + cmd="ya__help__pkg" + ;; + ya__help,pub) + cmd="ya__help__pub" + ;; + ya__help,pub-to) + cmd="ya__help__pub__to" + ;; + ya__help,sub) + cmd="ya__help__sub" + ;; + ya__help__pkg,add) + cmd="ya__help__pkg__add" + ;; + ya__help__pkg,delete) + cmd="ya__help__pkg__delete" + ;; + ya__help__pkg,install) + cmd="ya__help__pkg__install" + ;; + ya__help__pkg,list) + cmd="ya__help__pkg__list" + ;; + ya__help__pkg,upgrade) + cmd="ya__help__pkg__upgrade" + ;; + ya__pkg,add) + cmd="ya__pkg__add" + ;; + ya__pkg,delete) + cmd="ya__pkg__delete" + ;; + ya__pkg,help) + cmd="ya__pkg__help" + ;; + ya__pkg,install) + cmd="ya__pkg__install" + ;; + ya__pkg,list) + cmd="ya__pkg__list" + ;; + ya__pkg,upgrade) + cmd="ya__pkg__upgrade" + ;; + ya__pkg__help,add) + cmd="ya__pkg__help__add" + ;; + ya__pkg__help,delete) + cmd="ya__pkg__help__delete" + ;; + ya__pkg__help,help) + cmd="ya__pkg__help__help" + ;; + ya__pkg__help,install) + cmd="ya__pkg__help__install" + ;; + ya__pkg__help,list) + cmd="ya__pkg__help__list" + ;; + ya__pkg__help,upgrade) + cmd="ya__pkg__help__upgrade" + ;; + *) + ;; + esac + done + + case "${cmd}" in + ya) + opts="-V -h --version --help emit emit-to pkg pack pub pub-to sub help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__emit) + opts="-h --help <NAME> [ARGS]..." + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__emit__to) + opts="-h --help <RECEIVER> <NAME> [ARGS]..." + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__help) + opts="emit emit-to pkg pack pub pub-to sub help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__help__emit) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__help__emit__to) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__help__help) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__help__pack) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__help__pkg) + opts="add delete install list upgrade" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__help__pkg__add) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__help__pkg__delete) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__help__pkg__install) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__help__pkg__list) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__help__pkg__upgrade) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__help__pub) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__help__pub__to) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__help__sub) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__pack) + opts="-a -d -i -l -u -h --add --delete --install --list --upgrade --help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --add) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -a) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --delete) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -d) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__pkg) + opts="-h --help add delete install list upgrade help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__pkg__add) + opts="-h --help [IDS]..." + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__pkg__delete) + opts="-h --help [IDS]..." + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__pkg__help) + opts="add delete install list upgrade help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__pkg__help__add) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__pkg__help__delete) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__pkg__help__help) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__pkg__help__install) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__pkg__help__list) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__pkg__help__upgrade) + opts="" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__pkg__install) + opts="-h --help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__pkg__list) + opts="-h --help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__pkg__upgrade) + opts="-h --help" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__pub) + opts="-h --str --json --list --help <KIND>" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --str) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --json) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --list) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__pub__to) + opts="-h --str --json --list --help <RECEIVER> <KIND>" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --str) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --json) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --list) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + ya__sub) + opts="-h --help <KINDS>" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + esac +} + +if [[ "${BASH_VERSINFO[0]}" -eq 4 && "${BASH_VERSINFO[1]}" -ge 4 || "${BASH_VERSINFO[0]}" -gt 4 ]]; then + complete -F _ya -o nosort -o bashdefault -o default ya +else + complete -F _ya -o bashdefault -o default ya +fi diff --git a/fedora/.config/bash/completions/yazi.bash b/fedora/.config/bash/completions/yazi.bash new file mode 100644 index 0000000..ae2d3a1 --- /dev/null +++ b/fedora/.config/bash/completions/yazi.bash @@ -0,0 +1,66 @@ +_yazi() { + local i cur prev opts cmd + COMPREPLY=() + if [[ "${BASH_VERSINFO[0]}" -ge 4 ]]; then + cur="$2" + else + cur="${COMP_WORDS[COMP_CWORD]}" + fi + prev="$3" + cmd="" + opts="" + + for i in "${COMP_WORDS[@]:0:COMP_CWORD}" + do + case "${cmd},${i}" in + ",$1") + cmd="yazi" + ;; + *) + ;; + esac + done + + case "${cmd}" in + yazi) + opts="-V -h --cwd-file --chooser-file --clear-cache --client-id --local-events --remote-events --debug --version --help [ENTRIES]..." + if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --cwd-file) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --chooser-file) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --client-id) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --local-events) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --remote-events) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + esac +} + +if [[ "${BASH_VERSINFO[0]}" -eq 4 && "${BASH_VERSINFO[1]}" -ge 4 || "${BASH_VERSINFO[0]}" -gt 4 ]]; then + complete -F _yazi -o nosort -o bashdefault -o default yazi +else + complete -F _yazi -o bashdefault -o default yazi +fi diff --git a/fedora/.config/bash/completions/zoxide.bash b/fedora/.config/bash/completions/zoxide.bash new file mode 100644 index 0000000..1c2ed84 --- /dev/null +++ b/fedora/.config/bash/completions/zoxide.bash @@ -0,0 +1,243 @@ +_zoxide() { + local i cur prev opts cmd + COMPREPLY=() + if [[ "${BASH_VERSINFO[0]}" -ge 4 ]]; then + cur="$2" + else + cur="${COMP_WORDS[COMP_CWORD]}" + fi + prev="$3" + cmd="" + opts="" + + for i in "${COMP_WORDS[@]:0:COMP_CWORD}" + do + case "${cmd},${i}" in + ",$1") + cmd="zoxide" + ;; + zoxide,add) + cmd="zoxide__add" + ;; + zoxide,edit) + cmd="zoxide__edit" + ;; + zoxide,import) + cmd="zoxide__import" + ;; + zoxide,init) + cmd="zoxide__init" + ;; + zoxide,query) + cmd="zoxide__query" + ;; + zoxide,remove) + cmd="zoxide__remove" + ;; + zoxide__edit,decrement) + cmd="zoxide__edit__decrement" + ;; + zoxide__edit,delete) + cmd="zoxide__edit__delete" + ;; + zoxide__edit,increment) + cmd="zoxide__edit__increment" + ;; + zoxide__edit,reload) + cmd="zoxide__edit__reload" + ;; + *) + ;; + esac + done + + case "${cmd}" in + zoxide) + opts="-h -V --help --version add edit import init query remove" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + zoxide__add) + opts="-s -h -V --score --help --version <PATHS>..." + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --score) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + -s) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + zoxide__edit) + opts="-h -V --help --version decrement delete increment reload" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + zoxide__edit__decrement) + opts="-h -V --help --version <PATH>" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + zoxide__edit__delete) + opts="-h -V --help --version <PATH>" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + zoxide__edit__increment) + opts="-h -V --help --version <PATH>" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + zoxide__edit__reload) + opts="-h -V --help --version" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + zoxide__import) + opts="-h -V --from --merge --help --version <PATH>" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --from) + COMPREPLY=($(compgen -W "autojump z" -- "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + zoxide__init) + opts="-h -V --no-cmd --cmd --hook --help --version bash elvish fish nushell posix powershell tcsh xonsh zsh" + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --cmd) + COMPREPLY=($(compgen -f "${cur}")) + return 0 + ;; + --hook) + COMPREPLY=($(compgen -W "none prompt pwd" -- "${cur}")) + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + zoxide__query) + opts="-a -i -l -s -h -V --all --interactive --list --score --exclude --help --version [KEYWORDS]..." + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + --exclude) + COMPREPLY=() + if [[ "${BASH_VERSINFO[0]}" -ge 4 ]]; then + compopt -o plusdirs + fi + return 0 + ;; + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + zoxide__remove) + opts="-h -V --help --version [PATHS]..." + if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + fi + case "${prev}" in + *) + COMPREPLY=() + ;; + esac + COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) + return 0 + ;; + esac +} + +if [[ "${BASH_VERSINFO[0]}" -eq 4 && "${BASH_VERSINFO[1]}" -ge 4 || "${BASH_VERSINFO[0]}" -gt 4 ]]; then + complete -F _zoxide -o nosort -o bashdefault -o default zoxide +else + complete -F _zoxide -o bashdefault -o default zoxide +fi diff --git a/fedora/.config/bash/keymaps.bash b/fedora/.config/bash/keymaps.bash index cf355ad..15bd7e2 100644 --- a/fedora/.config/bash/keymaps.bash +++ b/fedora/.config/bash/keymaps.bash @@ -11,101 +11,131 @@ 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 last_cmd + last_cmd=$(history 1 | sed 's/^[ ]*[0-9]*[ ]*//') + + if [[ $last_cmd != sudo* ]]; then + READLINE_LINE="sudo $last_cmd" + READLINE_POINT=${#READLINE_LINE} + fi } # ---------- 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 +144,14 @@ 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; } +lastfiles() { command -v lastfiles >/dev/null 2>&1 && lastfiles "$@" || printf 'lastfiles: 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; } +lastfiles_l() { command -v lastfiles >/dev/null 2>&1 && lastfiles -l || printf 'lastfiles: not found\n' >&2; } # ---------- Readline key bindings (bind -x) ---------- # basic movement @@ -133,68 +162,57 @@ 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 +#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":lastfiles' bind -x '"\C-o":tmo' bind -x '"\C-p":fzfpass' bind -x '"\C-q":htop' bind -x '"\C-t":sessionizer' -bind -x '"\C-y":lfcd' -bind -x '"\C-z":upd' +bind -x '"\C-z":pd' # ^_ (Ctrl-_) mapped to cht (from '^ucht' -> 'cht') bind -x $'"\C-_":cht' # ^X^... sequences (Ctrl-X then key) bind -x '"\C-x\C-a":ali' -bind -x '"\C-x\C-b":gitopenbranch' 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":lastfiles_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-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-s":sshadd' -bind -x '"\C-x\C-x\C-y":yay_remaps' +bind -x '"\C-x\C-_":fzffns' # ^X^_ diff --git a/fedora/.config/bash/packages.bash b/fedora/.config/bash/packages.bash index f45925a..27d396e 100644 --- a/fedora/.config/bash/packages.bash +++ b/fedora/.config/bash/packages.bash @@ -2,7 +2,7 @@ # --- Packages (bash version) --- declare -A packages=( - [zoxide]="--cmd cd --hook prompt" + # [zoxide]="--cmd cd --hook prompt" ) eval_packages() { diff --git a/fedora/.config/bash/scripts.bash b/fedora/.config/bash/scripts.bash index fa0abbc..400265d 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,79 @@ 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)" +} + +########################################################################################### +########################################################################################### +### --- CURSOR --- ### +# vi-mode cursor change +function update_cursor { + if [[ $READLINE_LINE == * ]]; then + if [[ $READLINE_POINT -eq 0 ]]; then + echo -ne '\e[6 q' # insert mode + else + echo -ne '\e[2 q' # command mode + fi + fi +} + +# vi-command, vi-insert 모드 hook 등록 +bind -m vi-insert '":": "\C-o update_cursor"' +bind -m vi-command '":": "\C-o update_cursor"' + +########################################################################################### +########################################################################################### +### --- DISTRIBUTION --- ### # Show the current distribution distribution() { local dtype @@ -206,34 +246,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 +332,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 +363,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 +401,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 |
