{ pkgs, lib, config, ... }: let inherit (lib.lists) optional; 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 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 = /*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' ''; 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 = "golang-autocomplete"; src = pkgs.oh-my-zsh; file = "share/oh-my-zsh/plugins/golang/golang.plugin.zsh"; } ] # ++ optional (config.profile.podman.enable) { # name = "podman"; # src = pkgs.oh-my-zsh; # file = "share/oh-my-zsh/plugins/podman/podman.plugin.zsh"; # } ; # Antidote should only be used for loading completions # antidote = { # enable = true; # plugins = [ # "ohmyzsh/ohmyzsh path:plugins/golang" # ] # ++ optional (config.profile.podman.enable) "ohmyzsh/ohmyzsh path:plugins/podman" # ; # }; }; }