{ config , pkgs , ... }: { programs.bash = { enable = true; historyControl = [ "erasedups" ]; historyFile = "\$HOME/.bash_history"; historyFileSize = 2000; historyIgnore = [ "ls" "exit" "kill" ]; historySize = 1000; shellAliases = { "..." = "cd -- ../.."; "...." = "cd -- ../../.."; grep = "grep --color=auto"; l = "ls -CF"; la = "ls -A"; ll = "ls -alF"; ls = "ls -F --color=always"; o = "xdg-open"; rless = "less -r"; tmux = "tmux -u"; tree = "tree -C"; tb = "nc termbin.com 9999"; # git aliases gb = "git branch -v"; gc = "git commit --verbose"; gd = "git diff --minimal"; gp = "git push"; gpf = "git push --force-with-lease"; gl = "git log -p --abbrev-commit --pretty=medium"; glo = "git log --pretty=oneline --abbrev-commit"; gst = "git status --short"; gwls = "git worktree list"; }; shellOptions = [ "histappend" "autocd" "globstar" "checkwinsize" "cdspell" "dirspell" "expand_aliases" "dotglob" "gnu_errfmt" "histreedit" "nocasematch" ]; sessionVariables = { TERM = "alacritty"; EDITOR = "nvim"; MANPAGER = "nvim +Man!"; GPG_TTY = "\$(tty)"; }; initExtra = '' export PATH=$PATH:"$HOME/scripts" export PROMPT_COMMAND="tmux refresh-client -S &> /dev/null"; export PS1="\n\001\e[0;36m\002λ\001\e[0m\002 "; export PS2="> "; # git functions function fuzzy_worktree () { # 1: function that operates on the fzf result # 2: an optional query query="''${2:- }" out=$( set -o pipefail && \ git worktree list | \ fzf --min-height=15 \ --preview-window=up,10 \ --preview='git log --color=always -n10 --decorate --oneline {2}' \ --cycle -1 \ -q "$query" | \ awk '{print $1}' ) [ $? -eq 0 ] && echo "$out" && $1 $out } function gwj () { fuzzy_worktree __cd $@ } function gwa () { git worktree add "$1" && cd "$1" } function gwrm () { fuzzy_worktree __rm $@ } function __cd() { cd "$1" } function __rm() { git worktree remove "$1" } ''; }; }