Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

zsh: allow setting custom syntax highlighting styles #4122

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 34 additions & 6 deletions modules/programs/zsh.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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: <link xlink:href="https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/docs/highlighters.md"/>
'';
};
};
};

in

{
imports = [
(mkRenamedOptionModule [ "programs" "zsh" "enableSyntaxHighlighting" ] [ "programs" "zsh" "syntaxHighlighting" "enable" ])
];

options = {
programs.zsh = {
enable = mkEnableOption "Z shell (Zsh)";
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions tests/modules/programs/zsh/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
23 changes: 23 additions & 0 deletions tests/modules/programs/zsh/syntax-highlighting.nix
Original file line number Diff line number Diff line change
@@ -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'"
'';
};
}