{ config, pkgs, lib, ... }: let cfg = config.my.home.shell; aliases = config.my.home.shell.aliases; in { config = lib.mkIf (cfg.name == "zsh") { home.packages = with pkgs; [ zsh-completions ]; programs.zsh = { enable = true; dotDir = ".config/zsh"; enableCompletion = true; history = { size = 500000; save = 500000; extended = false; ignoreSpace = true; ignoreDups = true; share = false; # see # https://github.com/nix-community/home-manager/blob/32a7da69dc53c9eb5ad0675eb7fdc58f7fe35272/modules/programs/zsh.nix#L537 path = ".local/share/zsh/zsh_history"; }; localVariables = { # Print timing statistics for everything which takes longer than 5 seconds of # user + system time. REPORTTIME = 5; }; shellAliases = aliases; defaultKeymap = "emacs"; # the order matters for sway.zsh: I want to load it first # to start the session if I log on a machine where it's # available. # it can't be loaded with `initExtraFirst` because the session # variables from home-manager are not set yet otherwise (and I # need them for things like firefox or emacs). initExtra = lib.concatMapStrings builtins.readFile [ ./sway.zsh ./completion-style.zsh ./options.zsh ./prompt.zsh ./tmux.zsh ]; }; }; }