aboutsummaryrefslogtreecommitdiff
path: root/snowfall/modules/home/desktop/default.nix
blob: 5f8c905964945c2aed7c1160da883503f034db56 (plain)
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
52
53
54
{ options, config, lib, namespace, ... }:

with lib; with lib.${namespace}; let
  cfg = config.${namespace}.desktop;
in {
  options.${namespace}.desktop = with types; {
    background = mkOption {
      type = enum [
        "lycoris.png"
        "matama.png"
        "mem.png"
        "nonon.png"
        "ryo.png"
        "shinobu.png"
        "skull.png"
      ];
    };

    theme = {
      name = mkOption {
        type = enum [ "gruvbox" ];
        default = "gruvbox";
      };
  
      colors = let
        mkColorOption = name: {
          inherit name;
          value = mkOption {
            type = strMatching "[a-fA-F0-9]{6}";
            default = "ff00ff";
            example = "23ce94";
            description = ''
              Hex value for color "${name}".
            '';
          };
        };
      in listToAttrs (map mkColorOption [
        "accent"
  
        "black" "red" "green" "yellow" "blue" "magenta" "cyan" "white"
        "brightBlack" "brightRed" "brightGreen" "brightYellow" "brightBlue" "brightMagenta" "brightCyan" "brightWhite"
  
        "bg" "bg0" "bg1" "bg2" "bg3" "bg4"
        "fg" "fg0" "fg1" "fg2" "fg3" "fg4"
  
        "orange" "brightOrange"
      ]);
    };
  };

  config = {
    cxl.desktop.theme.colors = import ./theme/${cfg.theme.name}.nix;
  };
}