diff --git a/modules/programs/zsh.nix b/modules/programs/zsh.nix index b7ab76155..34df1a76b 100644 --- a/modules/programs/zsh.nix +++ b/modules/programs/zsh.nix @@ -208,9 +208,30 @@ let }; }; + syntaxHighlightingModule = types.submodule { + options = { + enable = mkEnableOption "zsh syntax highlighting"; + + package = mkPackageOption pkgs "zsh-syntax-highlighting" { }; + + styles = mkOption { + type = types.attrsOf types.str; + default = {}; + description = '' + Custom styles for syntax highlighting. + See each highlighter's options: + ''; + }; + }; + }; + in { + imports = [ + (mkRenamedOptionModule [ "programs" "zsh" "enableSyntaxHighlighting" ] [ "programs" "zsh" "syntaxHighlighting" "enable" ]) + ]; + options = { programs.zsh = { enable = mkEnableOption "Z shell (Zsh)"; @@ -312,9 +333,10 @@ in description = "Enable zsh autosuggestions"; }; - enableSyntaxHighlighting = mkOption { - default = false; - description = "Enable zsh syntax highlighting"; + syntaxHighlighting = mkOption { + type = syntaxHighlightingModule; + default = {}; + description = "Options related to zsh-syntax-highlighting."; }; historySubstringSearch = mkOption { @@ -584,11 +606,17 @@ in ${dirHashesStr} '') - (optionalString cfg.enableSyntaxHighlighting + (optionalString cfg.syntaxHighlighting.enable # 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" - ) + '' + source ${cfg.syntaxHighlighting.package}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh + ${lib.concatStringsSep "\n" ( + lib.mapAttrsToList + (name: value: "ZSH_HIGHLIGHT_STYLES[${lib.escapeShellArg name}]=${lib.escapeShellArg value}") + cfg.syntaxHighlighting.styles + )} + '') (optionalString (cfg.historySubstringSearch.enable or false) # Load zsh-history-substring-search after zsh-syntax-highlighting diff --git a/tests/modules/programs/zsh/default.nix b/tests/modules/programs/zsh/default.nix index b9dc1b8ce..fcfb642ff 100644 --- a/tests/modules/programs/zsh/default.nix +++ b/tests/modules/programs/zsh/default.nix @@ -7,4 +7,5 @@ zsh-history-ignore-pattern = ./history-ignore-pattern.nix; zsh-history-substring-search = ./history-substring-search.nix; zsh-prezto = ./prezto.nix; + zsh-syntax-highlighting = ./syntax-highlighting.nix; } diff --git a/tests/modules/programs/zsh/syntax-highlighting.nix b/tests/modules/programs/zsh/syntax-highlighting.nix new file mode 100644 index 000000000..be2ad37ed --- /dev/null +++ b/tests/modules/programs/zsh/syntax-highlighting.nix @@ -0,0 +1,23 @@ +{ config, lib, pkgs, ... }: + +with lib; + +{ + config = { + programs.zsh = { + enable = true; + syntaxHighlighting = { + enable = true; + package = pkgs.hello; + styles.comment = "fg=#6c6c6c"; + }; + }; + + test.stubs.zsh = { }; + + nmt.script = '' + assertFileContains home-files/.zshrc "source ${pkgs.hello}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" + assertFileContains home-files/.zshrc "ZSH_HIGHLIGHT_STYLES['comment']='fg=#6c6c6c'" + ''; + }; +}