about summary refs log tree commit diff stats
path: root/modules/by-name/zs/zsh/module.nix
diff options
context:
space:
mode:
Diffstat (limited to 'modules/by-name/zs/zsh/module.nix')
-rw-r--r--modules/by-name/zs/zsh/module.nix94
1 files changed, 94 insertions, 0 deletions
diff --git a/modules/by-name/zs/zsh/module.nix b/modules/by-name/zs/zsh/module.nix
new file mode 100644
index 00000000..98e0d28a
--- /dev/null
+++ b/modules/by-name/zs/zsh/module.nix
@@ -0,0 +1,94 @@
+{
+  config,
+  pkgs,
+  lib,
+  shell_library,
+  system,
+  ...
+}: let
+  cfg = config.soispha.programs.zsh;
+  homeConfig = config.home-manager.users.soispha;
+in {
+  options.soispha.programs.zsh = {
+    enable = lib.mkEnableOption "zsh";
+  };
+
+  config.home-manager.users.soispha = lib.mkIf cfg.enable {
+    home.sessionPath = [];
+
+    programs.zsh = {
+      enable = true;
+      enableCompletion = true;
+      autosuggestion.enable = true;
+      syntaxHighlighting.enable = true;
+
+      autocd = true;
+
+      # Must be relative to the users home directory (for whatever reason)
+      # Thus no `${homeConfig.xdg.configHome}`
+      dotDir = ".config/zsh";
+
+      history = {
+        extended = true;
+        ignoreDups = false;
+        expireDuplicatesFirst = false;
+        ignoreSpace = false;
+
+        path = "${homeConfig.xdg.dataHome}/zsh/history";
+        save = 9000000; # number of lines to save
+        size = 9000000; # number of lines to keep
+        share = false; # share between sessions
+      };
+      historySubstringSearch = {
+        enable = true;
+        searchDownKey = "^[[B"; # DOWN Arrow key
+        searchUpKey = "^[[A"; # UP Arrow key
+      };
+
+      loginExtra =
+        "setopt " # The extra space is important
+        + lib.concatStringsSep "\nsetopt " [
+          "AUTO_CD"
+          "AUTO_PUSHD"
+          "CHASE_DOTS"
+
+          "ALWAYS_TO_END"
+
+          "EXTENDED_HISTORY"
+          "HIST_ALLOW_CLOBBER"
+          "HIST_VERIFY"
+          "HIST_FCNTL_LOCK"
+          "APPEND_HISTORY"
+
+          "DVORAK"
+          "CORRECT"
+
+          "PROMPT_SUBST"
+          "TRANSIENT_RPROMPT" # maybe?
+
+          "COMBINING_CHARS"
+          "VI"
+        ];
+
+      initExtraFirst =
+        builtins.readFile ./config/zsh-init.zsh
+        + ''
+          SHELL_LIBRARY_VERSION="2.1.2" source ${shell_library.rawLib.${system}}
+          # This next line buffers the first line of the following item:
+
+        ''
+        # NOTE: This must be before the insult, as we otherwise override the previous handler <2024-02-28>
+        + builtins.readFile ./config/command_not_found.sh
+        + builtins.readFile ./config/command_not_found_insult.sh
+        + builtins.readFile ./config/custom_cursor.zsh
+        + builtins.readFile "${pkgs.fzf}/share/fzf/key-bindings.zsh";
+
+      shellAliases = {
+        ll = ". ll";
+        lm = ". lm";
+
+        hisea = "history 0 | grep";
+      };
+    };
+  };
+}