{ config, pkgs, lib, ... }: { options = { crony.zsh.enable = lib.mkEnableOption "Enable zsh and customize it."; }; config = lib.mkIf config.crony.zsh.enable { # Setup zsh programs.zsh = { enable = true; enableCompletion = true; autosuggestion.enable = true; historySubstringSearch.enable = true; dotDir = ".config/zsh"; shellAliases = { # General aliases grep = "grep --color=auto"; cp = "cp -iv"; rm = "rm -iv"; mkd = "mkdir -pv"; less = "less -R"; df = "df -h -x devtmpfs -x tmpfs -x usbfs -x loop"; free = "free -mht"; # nnn on crack nnn = ''LC_COLLATE="C" nnn -xeaiH''; # Buku powerup b = "buku -p"; # fzf shenanigans vif = ''nvim $(fzf --preview="bat --color=always {}")''; }; initExtra = '' ${pkgs.nerdfetch}/bin/nerdfetch # VI Mode escape timeout fix export KEYTIMEOUT=1 # Substring search settings export HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND="bg=blue,fg=black,bold" export HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND='bg=red,fg=black,bold' bindkey -M vicmd 'k' history-substring-search-up bindkey -M vicmd 'j' history-substring-search-down [[ -f "$HOME/.config/zsh/functions.zsh" ]] && source "$HOME/.config/zsh/functions.zsh" ''; initExtraFirst = '' # Tmux autostart if [ -x "$(command -v tmux)" ] && [ -n "$DISPLAY" ] && [ -z "$TMUX" ]; then exec tmux new-session -A -s default >/dev/null 2>&1 fi ''; antidote = { enable = true; plugins = [ "zap-zsh/supercharge" "zap-zsh/completions" "zap-zsh/vim" "chivalryq/git-alias" "zdharma-continuum/fast-syntax-highlighting" "zsh-users/zsh-history-substring-search" "MichaelAquilina/zsh-you-should-use" ]; }; }; # Link my functions file to ~/.config/zsh/functions.zsh home.file = { ".config/zsh/functions.zsh".source = ./configs/zsh-functions.zsh; }; }; }