{ userName, pkgs, customUtils, lib, config, ... }: { config = { home-manager.users.${userName} = let sysConfig = config; in { config, ... }: { config = { programs.zsh = { dotDir = ".config/zsh"; enable = true; autocd = true; enableCompletion = true; enableVteIntegration = true; history = { append = true; expireDuplicatesFirst = true; extended = true; findNoDups = true; }; syntaxHighlighting.enable = true; zsh-abbr = { enable = true; abbreviations = { re = "systemctl restart"; ure = "systemctl --user restart"; }; globalAbbreviations = { "L" = "| less"; "S" = "&> /dev/null"; "G" = "| grep"; "B" = "&> /dev/null &"; "BB" = "&> /dev/null &!"; }; }; plugins = [ { name = "powerlevel10k"; file = "share/zsh-powerlevel10k/powerlevel10k.zsh-theme"; src = pkgs.zsh-powerlevel10k; } ]; initContent = lib.mkMerge [ (lib.mkBefore '' if [[ $TERM == "dumb" ]]; then unsetopt zle PS1='$ ' return fi '') (lib.mkOrder 550 '' source "$HOME/${config.xdg.configFile."zsh/.p10k.zsh".target}" '') (lib.mkAfter '' source ${./zshrc} '') ]; }; xdg.configFile."zsh/.p10k.zsh".source = ./p10k.zsh; }; }; programs.zsh.enable = true; environment.pathsToLink = [ "/share/zsh" ]; environment.shellAliases = lib.mkOverride 90 {}; nixpkgs.externalConfig.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "zsh-abbr" ]; }; }