{ pkgs, lib, config, ... }: let inherit (lib.strings) optionalString concatStrings; in { home.packages = with pkgs; [ eza bat gojq nix-zsh-completions ]; programs.zsh = { enable = true; autosuggestion.enable = true; enableCompletion = true; defaultKeymap = "emacs"; dirHashes = { docs = "$HOME/Documents"; dl = "$HOME/Downloads"; videos = "$HOME/Videos"; pictures = "$HOME/Pictures"; }; shellAliases = { ls = "eza -lah"; cat = "bat"; update = "sudo nixos-rebuild switch --flake $HOME/dotfiles"; superupdate = "(cd $HOME/dotfiles && nix flake update && sudo nixos-rebuild switch --flake $HOME/dotfiles)"; lg = "lazygit"; du = "dust -H"; uptest = "sudo nixos-rebuild test --flake $HOME/dotfiles"; dry = "sudo nixos-rebuild dry-activate --flake $HOME/dotfiles"; jq = "gojq"; n = "neovide"; v = "nvim"; cd = "z"; }; dotDir = ".config/zsh"; history = { expireDuplicatesFirst = true; extended = true; ignoreAllDups = true; ignoreSpace = true; path = "$HOME/.local/share/zsh/zsh_history"; save = 40000; size = 40000; }; syntaxHighlighting.enable = true; initExtraFirst = /*bash*/ '' export ZSH_CACHE_DIR=$HOME/.cache/zsh mkdir -p $ZSH_CACHE_DIR/completions if [ -f $HOME/.config/zsh/.p10k.zsh ]; then source $HOME/.config/zsh/.p10k.zsh fi _ZSH_COLOR_SCHEME_FILE=$HOME/.cache/wallust/sequences if [ -f "$_ZSH_COLOR_SCHEME_FILE" ]; then (cat "$_ZSH_COLOR_SCHEME_FILE" &) fi ''; initExtra = concatStrings [ /*bash*/ '' packfiles() { find $(nix build "nixpkgs#$1" --no-link --print-out-paths) } # Completion settings ## Case insensitive completion zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' # FZF Tab configurations # # disable sort when completing `git checkout` zstyle ':completion:*:git-checkout:*' sort false # set descriptions format to enable group support # NOTE: don't use escape sequences here, fzf-tab will ignore them zstyle ':completion:*:descriptions' format '[%d]' # set list-colors to enable filename colorizing zstyle ':completion:*' list-colors ''${(s.:.)LS_COLORS} # force zsh not to show completion menu, which allows fzf-tab to capture the unambiguous prefix zstyle ':completion:*' menu no # preview directory's content with eza when completing cd zstyle ':fzf-tab:complete:cd:*' fzf-preview 'eza -1 --color=always $realpath' # switch group using `<` and `>` zstyle ':fzf-tab:*' switch-group '<' '>' # Preview fzf zstyle ':fzf-tab:*' fzf-preview 'eza -1 --color=always $realpath' '' (optionalString config.profile.podman.enable /*bash*/ '' zsh-defer source <(podman completion zsh) '') ]; plugins = [ { name = "fzf-tab"; src = pkgs.zsh-fzf-tab; file = "share/fzf-tab/fzf-tab.plugin.zsh"; } { name = "powerlevel10k"; src = pkgs.zsh-powerlevel10k; file = "share/zsh-powerlevel10k/powerlevel10k.zsh-theme"; } { name = "auto-suggestions"; src = pkgs.zsh-autosuggestions; file = "share/zsh-autosuggestions/zsh-autosuggestions.plugin.zsh"; } { name = "zsh-nix-shell"; src = pkgs.zsh-nix-shell; file = "share/zsh-nix-shell/nix-shell.plugin.zsh"; } { name = "zsh-history-substring-search"; src = pkgs.zsh-history-substring-search; file = "share/zsh-history-substring-search/zsh-history-substring-search.zsh"; } { name = "zsh-defer"; src = pkgs.zsh-defer; file = "share/zsh-defer/zsh-defer.plugin.zsh"; } ]; }; }