diff --git a/modules/programs/zsh.nix b/modules/programs/zsh.nix index f06d0d0b..e595e5c2 100644 --- a/modules/programs/zsh.nix +++ b/modules/programs/zsh.nix @@ -188,6 +188,28 @@ let }; }; + historySubstringSearchModule = types.submodule { + options = { + enable = mkEnableOption "history substring search"; + searchUpKey = mkOption { + type = types.str; + default = "^[[A"; + description = '' + The key code to be used when searching up. + The default of ^[[A corresponds to the UP key. + ''; + }; + searchDownKey = mkOption { + type = types.str; + default = "^[[B"; + description = '' + The key code to be used when searching down. + The default of ^[[B corresponds to the DOWN key. + ''; + }; + }; + }; + in { @@ -295,6 +317,12 @@ in description = "Enable zsh syntax highlighting"; }; + historySubstringSearch = mkOption { + type = historySubstringSearchModule; + default = {}; + description = "Options related to zsh-history-substring-search."; + }; + history = mkOption { type = historyModule; default = {}; @@ -555,10 +583,18 @@ in ${dirHashesStr} ${optionalString cfg.enableSyntaxHighlighting - # Load zsh-syntax-highlighting last, after all custom widgets have been created + # Load zsh-syntax-highlighting after all custom widgets have been created # https://github.com/zsh-users/zsh-syntax-highlighting#faq "source ${pkgs.zsh-syntax-highlighting}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" } + ${optionalString (cfg.historySubstringSearch.enable or false) + # Load zsh-history-substring-search after zsh-syntax-highlighting + # https://github.com/zsh-users/zsh-history-substring-search#usage + '' + source ${pkgs.zsh-history-substring-search}/share/zsh-history-substring-search/zsh-history-substring-search.zsh + bindkey '${cfg.historySubstringSearch.searchUpKey}' history-substring-search-up + bindkey '${cfg.historySubstringSearch.searchDownKey}' history-substring-search-down + ''} ''; }