about summary refs log tree commit diff
path: root/home/shell/zsh/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'home/shell/zsh/default.nix')
-rw-r--r--home/shell/zsh/default.nix54
1 files changed, 54 insertions, 0 deletions
diff --git a/home/shell/zsh/default.nix b/home/shell/zsh/default.nix
new file mode 100644
index 0000000..14ddd6c
--- /dev/null
+++ b/home/shell/zsh/default.nix
@@ -0,0 +1,54 @@
+{ config, pkgs, lib, ... }:
+let cfg = config.my.home.shell;
+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 = {
+        ll = "ls -l --color=auto";
+        lt = "ls -ltrh --color=auto";
+      };
+
+      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
+        ./gerrit.zsh
+        ./options.zsh
+        ./prompt.zsh
+        ./tmux.zsh
+      ];
+    };
+  };
+}