-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50
-
51
{ config, lib, pkgs, ... }:
let
cfg = config.features.data.nushell;
colorGroup = lib.types.attrsOf (lib.types.either lib.types.nonEmptyStr colorGroup);
serializeGroup = g:
let
lines = lib.attrsets.mapAttrsToList
(name: colorOrSubGroup:
"${name}: ${if (builtins.isString colorOrSubGroup) then "\"${colorOrSubGroup}\"" else (serializeGroup colorOrSubGroup)}"
)
g;
in
"{ ${lib.strings.concatStringsSep " " lines} }";
in
{
options = {
features.data.nushell.colorConfig = lib.mkOption {
description = ''
Nushell color config object.
See https://www.nushell.sh/book/coloring_and_theming.html#theming for details.
'';
type = colorGroup;
default = { };
};
};
config = lib.mkIf config.features.data.enable {
programs.nushell = {
enable = lib.mkDefault true;
configFile.text = ''
$env.config = {
show_banner: false
color_config: ${serializeGroup cfg.colorConfig}
edit_mode: vi
ls: {
use_ls_colors: true
}
}
'';
envFile.text = ''
'';
};
};
}