330 lines
7.7 KiB
Org Mode
330 lines
7.7 KiB
Org Mode
#+TITLE: Bash Configuration
|
|
#+SETUPFILE: ./setup/org-setup-file.org
|
|
#+PROPERTY: header-args :tangle-mode (identity #o444)
|
|
|
|
* =~/.bashrc=
|
|
:PROPERTIES:
|
|
:header-args:bash: :tangle ~/.bashrc
|
|
:header-args:bash+: :comments both :mkdirp yes
|
|
:CUSTOM_ID: bashrc
|
|
:END:
|
|
|
|
** If not running interactively, don't do anything
|
|
#+BEGIN_SRC bash
|
|
[[ $- != *i* ]] && return
|
|
#+END_SRC
|
|
|
|
** Bash Completion
|
|
#+BEGIN_SRC bash
|
|
[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion
|
|
#+END_SRC
|
|
|
|
** Miniconda
|
|
#+begin_src bash
|
|
[ -f /opt/miniconda3/etc/profile.d/conda.sh ] && source /opt/miniconda3/etc/profile.d/conda.sh
|
|
#+end_src
|
|
|
|
|
|
** FZF
|
|
#+begin_src bash
|
|
. /usr/share/fzf/completion.bash
|
|
. /usr/share/fzf/key-bindings.bash
|
|
#+end_src
|
|
|
|
** Ignore case for auto-completion
|
|
#+BEGIN_SRC bash
|
|
bind "set completion-ignore-case on"
|
|
bind "set show-all-if-ambiguous on"
|
|
#+END_SRC
|
|
|
|
** Use Color
|
|
#+BEGIN_SRC bash
|
|
use_color=true
|
|
#+END_SRC
|
|
|
|
** Some config
|
|
#+BEGIN_SRC bash
|
|
# Unset some variables
|
|
unset use_color safe_term match_lhs sh
|
|
|
|
# Allow local processes with root privileges to connect to the locally running X server
|
|
xhost +local:root > /dev/null 2>&1
|
|
|
|
# Autocomplete sudo commands
|
|
complete -cf sudo
|
|
|
|
# Line wrap on window resize
|
|
shopt -s checkwinsize
|
|
|
|
# Enable history expansion with space
|
|
# E.g. typing !!<space> will replace the !! with your last command
|
|
bind Space:magic-space
|
|
|
|
# Expand Aliases
|
|
shopt -s expand_aliases
|
|
|
|
# Auto "cd" when entering just a path
|
|
shopt -s autocd
|
|
|
|
# Enable history appending instead of overwriting
|
|
shopt -s histappend
|
|
|
|
# Save multi-line commands as one command
|
|
shopt -s cmdhist
|
|
#+END_SRC
|
|
|
|
** Prompt - =PS1=
|
|
#+BEGIN_SRC bash
|
|
export PS1="\[$(tput bold)\]\[$(tput setaf 1)\][\[$(tput setaf 3)\]\u\[$(tput setaf 2)\]@\[$(tput setaf 4)\]\h \[$(tput setaf 5)\]\W\[$(tput setaf 1)\]]\[$(tput setaf 7)\]\\$ \[$(tput sgr0)\]"
|
|
#+END_SRC
|
|
|
|
** Rebind up and down arrow keys to search through bash history
|
|
#+BEGIN_SRC bash
|
|
bind '"\e[A": history-search-backward'
|
|
bind '"\e[B": history-search-forward'
|
|
#+END_SRC
|
|
|
|
** Kitty for SSH
|
|
#+begin_src bash
|
|
[ "$TERM" = "xterm-kitty" ] && alias ssh="kitty +kitten ssh"
|
|
#+end_src
|
|
|
|
** Aliases
|
|
*** Better defaults for some commands
|
|
#+BEGIN_SRC bash
|
|
alias ls='ls -hN --color=auto --group-directories-first'
|
|
alias grep='grep --colour=auto'
|
|
alias cp="cp -i" # confirm before overwriting something
|
|
alias df='df -h' # human-readable sizes
|
|
alias free='free -m' # show sizes in MB
|
|
alias mutt="neomutt"
|
|
#+END_SRC
|
|
|
|
Change default configuration file location:
|
|
#+BEGIN_SRC bash
|
|
alias tmux='tmux -f $XDG_CONFIG_HOME/tmux/tmux.conf'
|
|
alias mbsync='mbsync -c $XDG_CONFIG_HOME/isync/mbsyncrc'
|
|
#+END_SRC
|
|
|
|
*** Neovim
|
|
#+begin_src bash
|
|
command -v nvim >/dev/null && alias vim="nvim" vimdiff="nvim -d" # Use neovim for vim if present.
|
|
#+end_src
|
|
|
|
*** Print each PATH entry on a separate line
|
|
#+BEGIN_SRC bash
|
|
alias path='echo -e ${PATH//:/\\n}'
|
|
#+END_SRC
|
|
|
|
** Functions
|
|
*** =mkd= - Create a new directory and enter it
|
|
#+BEGIN_SRC bash
|
|
function mkd() {
|
|
mkdir -p "$@" && cd "$_";
|
|
}
|
|
#+END_SRC
|
|
|
|
** Bash History
|
|
Undocumented feature which sets the size to "unlimited". http://stackoverflow.com/questions/9457233/unlimited-bash-history
|
|
|
|
#+BEGIN_SRC bash
|
|
# Huge history. Doesn't appear to slow things down, so why not?
|
|
HISTSIZE=500000
|
|
HISTFILESIZE=100000
|
|
|
|
# Avoid duplicate entries
|
|
HISTCONTROL="erasedups:ignoreboth"
|
|
|
|
# Don't record some commands
|
|
export HISTIGNORE="&:[ ]*:exit:ls:bg:fg:history:clear"
|
|
|
|
# Use standard ISO 8601 timestamp
|
|
# %F equivalent to %Y-%m-%d
|
|
# %T equivalent to %H:%M:%S (24-hours format)
|
|
HISTTIMEFORMAT='%F %T '
|
|
#+END_SRC
|
|
|
|
Change the file location because certain bash sessions truncate =.bash_history= file upon close. http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
|
|
|
|
#+BEGIN_SRC bash
|
|
export HISTFILE=~/.bash_eternal_history
|
|
#+END_SRC
|
|
|
|
Force prompt to write history after every command. http://superuser.com/questions/20900/bash-history-loss
|
|
|
|
#+BEGIN_SRC bash
|
|
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
|
|
#+END_SRC
|
|
|
|
** Zoxide
|
|
#+BEGIN_SRC bash
|
|
eval "$(zoxide init bash)"
|
|
#+end_src
|
|
|
|
* =~/.bash_profile=
|
|
:PROPERTIES:
|
|
:header-args:bash: :tangle ~/.bash_profile
|
|
:header-args:bash+: :comments both :mkdirp yes
|
|
:CUSTOM_ID: bash_profile
|
|
:END:
|
|
|
|
#+BEGIN_SRC bash
|
|
[[ -f ~/.profile ]] && . ~/.profile
|
|
[[ -f ~/.bashrc ]] && . ~/.bashrc
|
|
#+END_SRC
|
|
|
|
* =~/.profile=
|
|
:PROPERTIES:
|
|
:header-args:bash: :tangle ~/.profile
|
|
:header-args:bash+: :comments both :mkdirp yes
|
|
:CUSTOM_ID: profile
|
|
:END:
|
|
|
|
** QT And GTK Themes
|
|
#+begin_src bash
|
|
export QT_QPA_PLATFORMTHEME="qt5ct"
|
|
export GTK2_RC_FILES="$HOME/.config/gtk-2.0/gtkrc.mine"
|
|
#+END_SRC
|
|
|
|
** Gui program to ask for sudo password
|
|
#+begin_src bash
|
|
export SUDO_ASKPASS=~/.local/bin/askpass-rofi
|
|
#+END_SRC
|
|
|
|
** Export some default applications
|
|
#+begin_src bash
|
|
export EDITOR="nvim"
|
|
export TERMINAL="kitty"
|
|
export BROWSER="qutebrowser"
|
|
export READER="zathura"
|
|
export FILE="yazi"
|
|
#+END_SRC
|
|
|
|
** Exports
|
|
*** XDG Default
|
|
#+begin_src bash
|
|
export XDG_CONFIG_HOME="$HOME/.config"
|
|
export XDG_DATA_HOME="$HOME/.local/share"
|
|
export XDG_STATE_HOME="$HOME/.local/state"
|
|
export XDG_CACHE_HOME="$HOME/.cache"
|
|
#+end_src
|
|
|
|
#+begin_src bash
|
|
export XCURSOR_SIZE=24
|
|
#+end_src
|
|
|
|
#+begin_src bash
|
|
export LESSHISTFILE=-
|
|
export GNUPGHOME="$XDG_DATA_HOME/gnupg"
|
|
export _JAVA_OPTIONS=-Djava.util.prefs.userRoot="$XDG_CONFIG_HOME/java"
|
|
export PASSWORD_STORE_DIR="$XDG_DATA_HOME/pass"
|
|
export INPUTRC="$XDG_CONFIG_HOME/readline/inputrc"
|
|
export XINITRC="$XDG_CONFIG_HOME/X11/xinitrc"
|
|
export CARGO_HOME="$XDG_DATA_HOME/cargo"
|
|
export GTK2_RC_FILES="$XDG_CONFIG_HOME/gtkrc-2.0"
|
|
export MATLAB_LOG_DIR="$XDG_CACHE_HOME/matlab"
|
|
#+end_src
|
|
|
|
*** Use Ripgrep for FZF
|
|
#+begin_src bash
|
|
export FZF_DEFAULT_COMMAND='rg --files --no-ignore --hidden --follow --glob "!.git/*"'
|
|
export FZF_DEFAULT_OPTS='--layout=reverse --height=20'
|
|
#+end_src
|
|
|
|
*** Latex Path
|
|
#+begin_src bash
|
|
export TEXMFHOME=$HOME/.local/share/texmf
|
|
#+end_src
|
|
|
|
*** Linkding
|
|
#+begin_src bash
|
|
export LINKDING_URL=`pass nas/linkding_url`
|
|
export LINKDING_TOKEN=`pass nas/linkding_token`
|
|
#+end_src
|
|
|
|
*** Restic
|
|
#+begin_src bash
|
|
if [ "$(hostname)" = "ldehaeze" ]; then
|
|
export RESTIC_REPOSITORY=sftp:thomas@homelab:/srv/storage/Backups/esrf-laptop
|
|
export RESTIC_PASSWORD_COMMAND="pass show restic"
|
|
fi
|
|
#+end_src
|
|
|
|
** Path
|
|
#+begin_src bash
|
|
PATH=~/.local/bin:$PATH
|
|
export PATH
|
|
#+END_SRC
|
|
|
|
** Automatically run =startx=
|
|
#+begin_src bash
|
|
if [ -z "${DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then
|
|
exec startx
|
|
fi
|
|
#+end_src
|
|
|
|
* =inputrc=
|
|
:PROPERTIES:
|
|
:header-args: :tangle ~/.config/readline/inputrc
|
|
:header-args+: :comments both :mkdirp yes
|
|
:CUSTOM_ID: inputrc
|
|
:END:
|
|
|
|
Completion:
|
|
#+BEGIN_SRC conf
|
|
# Single tab for autocompletion
|
|
set show-all-if-ambiguous on
|
|
|
|
# Ignore case for completion
|
|
set completion-ignore-case on
|
|
#+END_SRC
|
|
|
|
vi mode:
|
|
#+BEGIN_SRC conf
|
|
# VI mode (works in bash and zsh)
|
|
set editing-mode vi
|
|
|
|
# Show which mode (normal or insert)
|
|
set show-mode-in-prompt on
|
|
|
|
# Show the mode by changing the cursor
|
|
set vi-ins-mode-string \1\e[6 q\2
|
|
set vi-cmd-mode-string \1\e[2 q\2
|
|
#+END_SRC
|
|
|
|
Key-bindings for vi-mode:
|
|
#+BEGIN_SRC conf
|
|
set keymap vi-command
|
|
# these are for vi-command mode
|
|
Control-l: clear-screen
|
|
Control-a: beginning-of-line
|
|
Control-e: end-of-line
|
|
Control-w: "\C-aisudo \C-e"
|
|
|
|
set keymap vi-insert
|
|
# these are for vi-insert mode
|
|
Control-l: clear-screen
|
|
Control-a: beginning-of-line
|
|
Control-e: end-of-line
|
|
Control-w: "\C-asudo \C-e"
|
|
#+END_SRC
|
|
|
|
Colorized completion
|
|
#+begin_src conf
|
|
# Color files by types
|
|
set colored-stats On
|
|
# Append char to indicate type
|
|
set visible-stats On
|
|
# Mark symlinked directories
|
|
set mark-symlinked-directories On
|
|
# Color the common prefix
|
|
set colored-completion-prefix On
|
|
# Color the common prefix in menu-complete
|
|
set menu-complete-display-prefix On
|
|
#+end_src
|
|
|
|
Don't echo =^C= after =Ctrl+C= is pressed.
|
|
#+begin_src conf
|
|
set echo-control-characters off
|
|
#+end_src
|