107 lines
3.6 KiB
Nix
107 lines
3.6 KiB
Nix
|
{ config, lib, pkgs, ... }:
|
||
|
|
||
|
let
|
||
|
cfg = config.programs.zsh.syntaxHighlighting;
|
||
|
in
|
||
|
{
|
||
|
imports = [
|
||
|
(lib.mkRenamedOptionModule [ "programs" "zsh" "enableSyntaxHighlighting" ] [ "programs" "zsh" "syntaxHighlighting" "enable" ])
|
||
|
(lib.mkRenamedOptionModule [ "programs" "zsh" "syntax-highlighting" "enable" ] [ "programs" "zsh" "syntaxHighlighting" "enable" ])
|
||
|
(lib.mkRenamedOptionModule [ "programs" "zsh" "syntax-highlighting" "highlighters" ] [ "programs" "zsh" "syntaxHighlighting" "highlighters" ])
|
||
|
(lib.mkRenamedOptionModule [ "programs" "zsh" "syntax-highlighting" "patterns" ] [ "programs" "zsh" "syntaxHighlighting" "patterns" ])
|
||
|
];
|
||
|
|
||
|
options = {
|
||
|
programs.zsh.syntaxHighlighting = {
|
||
|
enable = lib.mkEnableOption "zsh-syntax-highlighting";
|
||
|
|
||
|
highlighters = lib.mkOption {
|
||
|
default = [ "main" ];
|
||
|
|
||
|
# https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/docs/highlighters.md
|
||
|
type = lib.types.listOf(lib.types.enum([
|
||
|
"main"
|
||
|
"brackets"
|
||
|
"pattern"
|
||
|
"cursor"
|
||
|
"regexp"
|
||
|
"root"
|
||
|
"line"
|
||
|
]));
|
||
|
|
||
|
description = ''
|
||
|
Specifies the highlighters to be used by zsh-syntax-highlighting.
|
||
|
|
||
|
The following defined options can be found here:
|
||
|
https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/docs/highlighters.md
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
patterns = lib.mkOption {
|
||
|
default = {};
|
||
|
type = lib.types.attrsOf lib.types.str;
|
||
|
|
||
|
example = lib.literalExpression ''
|
||
|
{
|
||
|
"rm -rf *" = "fg=white,bold,bg=red";
|
||
|
}
|
||
|
'';
|
||
|
|
||
|
description = ''
|
||
|
Specifies custom patterns to be highlighted by zsh-syntax-highlighting.
|
||
|
|
||
|
Please refer to the docs for more information about the usage:
|
||
|
https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/docs/highlighters/pattern.md
|
||
|
'';
|
||
|
};
|
||
|
styles = lib.mkOption {
|
||
|
default = {};
|
||
|
type = lib.types.attrsOf lib.types.str;
|
||
|
|
||
|
example = lib.literalExpression ''
|
||
|
{
|
||
|
"alias" = "fg=magenta,bold";
|
||
|
}
|
||
|
'';
|
||
|
|
||
|
description = ''
|
||
|
Specifies custom styles to be highlighted by zsh-syntax-highlighting.
|
||
|
|
||
|
Please refer to the docs for more information about the usage:
|
||
|
https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/docs/highlighters/main.md
|
||
|
'';
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
config = lib.mkIf cfg.enable {
|
||
|
environment.systemPackages = [ pkgs.zsh-syntax-highlighting ];
|
||
|
|
||
|
assertions = [
|
||
|
{
|
||
|
assertion = builtins.length(builtins.attrNames cfg.patterns) > 0 -> builtins.elem "pattern" cfg.highlighters;
|
||
|
message = ''
|
||
|
When highlighting patterns, "pattern" needs to be included in the list of highlighters.
|
||
|
'';
|
||
|
}
|
||
|
];
|
||
|
|
||
|
programs.zsh.interactiveShellInit =
|
||
|
lib.mkAfter (lib.concatStringsSep "\n" ([
|
||
|
"source ${pkgs.zsh-syntax-highlighting}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
|
||
|
] ++ lib.optional (builtins.length(cfg.highlighters) > 0)
|
||
|
"ZSH_HIGHLIGHT_HIGHLIGHTERS=(${builtins.concatStringsSep " " cfg.highlighters})"
|
||
|
++ lib.optionals (builtins.length(builtins.attrNames cfg.patterns) > 0)
|
||
|
(lib.mapAttrsToList (
|
||
|
pattern: design:
|
||
|
"ZSH_HIGHLIGHT_PATTERNS+=('${pattern}' '${design}')"
|
||
|
) cfg.patterns)
|
||
|
++ lib.optionals (builtins.length(builtins.attrNames cfg.styles) > 0)
|
||
|
(lib.mapAttrsToList (
|
||
|
styles: design:
|
||
|
"ZSH_HIGHLIGHT_STYLES[${styles}]='${design}'"
|
||
|
) cfg.styles)
|
||
|
));
|
||
|
};
|
||
|
}
|