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 | 110 | ||||
| -rw-r--r-- | fedora/.config/bash/bashrc | 13 | ||||
| -rw-r--r-- | fedora/.config/bash/keymaps.bash | 235 | ||||
| -rw-r--r-- | fedora/.config/bash/scripts.bash | 354 |
5 files changed, 459 insertions, 257 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..4938bb5 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" | . $MYGVIMRC' +export VIMINIT='let $MYVIMRC="$XDG_CONFIG_HOME/vim/vimrc" | . $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..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/keymaps.bash b/fedora/.config/bash/keymaps.bash index cf355ad..e355d20 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 )) + # history에서 가장 마지막 명령어 가져오기 + local last_cmd + last_cmd=$(history 1 | sed 's/^[ ]*[0-9]*[ ]*//') + + # 이미 sudo로 시작하면 그대로 + 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 +146,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,49 +164,47 @@ 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' # ^_ (Ctrl-_) mapped to cht (from '^ucht' -> 'cht') bind -x $'"\C-_":cht' @@ -185,16 +214,10 @@ 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/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 |
