vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / hardware / uni-sync.nix
blobdd230ae419a1555b222110c4cc29080d5e3a3d6f
1 { config
2 , lib
3 , pkgs
4 , ...
5 }:
6 with lib; let
7   cfg = config.hardware.uni-sync;
8 in
10   meta.maintainers = with maintainers; [ yunfachi ];
12   options.hardware.uni-sync = {
13     enable = mkEnableOption "udev rules and software for Lian Li Uni Controllers";
14     package = mkPackageOption pkgs "uni-sync" { };
16     devices = mkOption {
17       default = [ ];
18       example = literalExpression ''
19         [
20           {
21             device_id = "VID:1111/PID:11111/SN:1111111111";
22             sync_rgb = true;
23             channels = [
24               {
25                 mode = "PWM";
26               }
27               {
28                 mode = "Manual";
29                 speed = 100;
30               }
31               {
32                 mode = "Manual";
33                 speed = 54;
34               }
35               {
36                 mode = "Manual";
37                 speed = 0;
38               }
39             ];
40           }
41           {
42             device_id = "VID:1010/PID:10101/SN:1010101010";
43             sync_rgb = false;
44             channels = [
45               {
46                 mode = "Manual";
47                 speed = 0;
48               }
49             ];
50           }
51         ]
52       '';
53       description = "List of controllers with their configurations.";
54       type = types.listOf (types.submodule {
55         options = {
56           device_id = mkOption {
57             type = types.str;
58             example = "VID:1111/PID:11111/SN:1111111111";
59             description = "Unique device ID displayed at each startup.";
60           };
61           sync_rgb = mkOption {
62             type = types.bool;
63             default = false;
64             example = true;
65             description = "Enable ARGB header sync.";
66           };
67           channels = mkOption {
68             default = [ ];
69             example = literalExpression ''
70               [
71                 {
72                   mode = "PWM";
73                 }
74                 {
75                   mode = "Manual";
76                   speed = 100;
77                 }
78                 {
79                   mode = "Manual";
80                   speed = 54;
81                 }
82                 {
83                   mode = "Manual";
84                   speed = 0;
85                 }
86               ]
87             '';
88             description = "List of channels connected to the controller.";
89             type = types.listOf (types.submodule {
90               options = {
91                 mode = mkOption {
92                   type = types.enum [ "Manual" "PWM" ];
93                   default = "Manual";
94                   example = "PWM";
95                   description = "\"PWM\" to enable PWM sync. \"Manual\" to set speed.";
96                 };
97                 speed = mkOption {
98                   type = types.int;
99                   default = "50";
100                   example = "100";
101                   description = "Fan speed as percentage (clamped between 0 and 100).";
102                 };
103               };
104             });
105           };
106         };
107       });
108     };
109   };
111   config = mkIf cfg.enable {
112     environment.etc."uni-sync/uni-sync.json".text = mkIf (cfg.devices != [ ]) (builtins.toJSON { configs = cfg.devices; });
114     environment.systemPackages = [ cfg.package ];
115     services.udev.packages = [ cfg.package ];
116   };