Files
dotfiles/.bashrc
Felix Nehrke ff2bdb2eca Initialize zoxide correctly, so I get proper completions
I used zoxide wrong all the time... By simply initiating it correctly it
immediately get's smarter and better. Imagine you have a dir like this:

  ~/deep/level/nested/but-with-very-specific-name/xy11-with-many-more

Imagine further that in your current directory is nothing that starts
with `xy`, then you only have to enter `cd xy` and zoxide will figure
out that you meant the deeply nested complicated name and change the
directory to there! - How awesome is that!

So, keep in mind use zoxide correct and it becomes easy to use!
2025-09-18 15:09:39 +02:00

95 lines
3.7 KiB
Bash

# vim: ft=sh
# resource .profile, to make sure updates are applied immediately, not only after the next login
test -r "$HOME/.profile" && . "$HOME/.profile"
# init homebrew first, because otherwise macos is actually unusable...
test -n "$HOMEBREW_PREFIX" && test -f "$HOMEBREW_PREFIX/bin/brew" && eval "$($HOMEBREW_PREFIX/bin/brew shellenv)"
# init sdkman to provide java, gradle, maven, etc.
test -r "$SDKMAN_DIR/bin/sdkman-init.sh" && . "$SDKMAN_DIR/bin/sdkman-init.sh"
# init nvm to provide node.js
test -r "$NVM_DIR/nvm.sh" && . "$NVM_DIR/nvm.sh"
### HERE WE'RE DONE WITH ALL GENERAL PURPOSE CONFIGS
###
### The following is only relevant for interactive
### shells!
# determine if we're interactive otherwise stop here
! [[ $- = *i* ]] && return
GIT_PROMPT_SH=/usr/lib/git-core/git-sh-prompt
test -n "$HOMEBREW_PREFIX" && GIT_PROMPT_SH="$HOMEBREW_PREFIX/opt/git/etc/bash_completion.d/git-prompt.sh"
# Note that the var "NEMO_GIT_STATUS" is only filled when we are in a git directory!
PS1='\033[01;32m\u@\h\033[0m: \033[01;34m\w\033[0m \t\n$NEMO_GIT_STATUS\$ '
if test -r "$GIT_PROMPT_SH"; then
. $GIT_PROMPT_SH
PROMPT_COMMAND='NEMO_GIT_STATUS="$(__git_ps1 | sed "s/^ //;s/)$/) /")";'
fi
unset GIT_PROMPT_SH
# keep history on multiple shells in parallel
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
# log history on a daily basis, too (with more context)
HIST_LOG_DIR="$XDG_STATE_HOME/bash/log/"
HIST_LOG_COMMAND='if [ "$(id -u)" -ne 0 ]; then echo "$(date "+%Y-%m-%d.%H:%M:%S") $(pwd) $(history 1)" >> '$HIST_LOG_DIR'/bash-history-$(date "+%Y-%m-%d").log; fi'
test -d "$HIST_LOG_DIR" || mkdir -p -m 700 "$HIST_LOG_DIR"
PROMPT_COMMAND="$HIST_LOG_COMMAND; $PROMPT_COMMAND"
unset HIST_LOG_DIR \
HIST_LOG_COMMAND
# load bash_completion
__bash_completion_dir=/usr/share/bash-completion
test -n "$HOMEBREW_PREFIX" && __bash_completion_dir="$HOMEBREW_PREFIX/etc"
if test -r "$__bash_completion_dir/bash_completion"; then
. "$__bash_completion_dir/bash_completion"
# For whatever reason git and ssh autocompletion doesn't load immediately on my Linux...
test -r "$__bash_completion_dir/completions/git" && . "$__bash_completion_dir/completions/git"
test -r "$__bash_completion_dir/completions/ssh" && . "$__bash_completion_dir/completions/ssh"
fi
unset __bash_completion_dir
# nvm has this separated for whatever reason
test -r "$NVM_DIR/bash_completion" && . "$NVM_DIR/bash_completion"
# init zoxide and set alias cd
which zoxide > /dev/null && eval "$(zoxide init --cmd cd bash)"
# setup fzf to use it e.g. for Ctrl+r
which fzf > /dev/null && fzf --bash > /dev/null && eval "$(fzf --bash)"
# standard alias
alias z=cd
alias cz='(pushd $(git rev-parse --show-toplevel); $(which cz); popd)'
alias e='eza --icons --long --time-style=long-iso --group'
alias ls='eza --time-style=long-iso --group'
alias lg='git lg'
alias lgb='git lgb'
alias co='git checkout'
alias push='git push'
alias commit='git commit'
alias gc='git commit'
alias st='git status'
alias gd='git diff'
alias gdl='GIT_PAGER=less git diff'
alias gt='git gt'
alias gtl='GIT_PAGER=less git gt'
alias gdc='gd --cached'
alias gdcl='GIT_PAGER=less gd --cached'
alias c='git commit'
alias vimwiki='vim -c VimwikiIndex -c "cd %:p:h" -c "silent Git pull"'
alias wiki='vim -c VimwikiIndex -c "cd %:p:h" -c "silent Git pull"'
alias g=goto
alias ff="fd | fzf --preview 'my-cli-preview {}'"
alias ffv="ff | xargs vim"
# reboot required notice
test -f /var/run/reboot-required && (>&2 echo -e "\n\033[01;31mReboot required to apply updates"'!'"\033[0m\n")
# config changed notice
test -n "$(cd dotfiles && git status --short)" && (>&2 echo -e "\n\033[01;33mCurrent configuration is not committed"'!'"\033[0m\nSwitch to ~/dotfiles and run "'"'"\033[01mgit status\033[0m"'"'" for further information\n")