grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / hardware / asusd.nix
blob2dfe761a217245dde4ad343eb8c095a962ce7f02
1 { config, lib, pkgs, ... }:
3 let
4   cfg = config.services.asusd;
5 in
7   options = {
8     services.asusd = {
9       enable = lib.mkEnableOption "the asusd service for ASUS ROG laptops";
11       package = lib.mkPackageOption pkgs "asusctl" { };
13       enableUserService = lib.mkOption {
14         type = lib.types.bool;
15         default = false;
16         description = ''
17           Activate the asusd-user service.
18         '';
19       };
21       animeConfig = lib.mkOption {
22         type = lib.types.nullOr lib.types.str;
23         default = null;
24         description = ''
25           The content of /etc/asusd/anime.ron.
26           See https://asus-linux.org/asusctl/#anime-control.
27         '';
28       };
30       asusdConfig = lib.mkOption {
31         type = lib.types.nullOr lib.types.str;
32         default = null;
33         description = ''
34           The content of /etc/asusd/asusd.ron.
35           See https://asus-linux.org/asusctl/.
36         '';
37       };
39       auraConfig = lib.mkOption {
40         type = lib.types.nullOr lib.types.str;
41         default = null;
42         description = ''
43           The content of /etc/asusd/aura.ron.
44           See https://asus-linux.org/asusctl/#led-keyboard-control.
45         '';
46       };
48       profileConfig = lib.mkOption {
49         type = lib.types.nullOr lib.types.str;
50         default = null;
51         description = ''
52           The content of /etc/asusd/profile.ron.
53           See https://asus-linux.org/asusctl/#profiles.
54         '';
55       };
57       fanCurvesConfig = lib.mkOption {
58       type = lib.types.nullOr lib.types.str;
59       default = null;
60       description = ''
61           The content of /etc/asusd/fan_curves.ron.
62           See https://asus-linux.org/asusctl/#fan-curves.
63         '';
64       };
66       userLedModesConfig = lib.mkOption {
67         type = lib.types.nullOr lib.types.str;
68         default = null;
69         description = ''
70           The content of /etc/asusd/asusd-user-ledmodes.ron.
71           See https://asus-linux.org/asusctl/#led-keyboard-control.
72         '';
73       };
74     };
75   };
77   config = lib.mkIf cfg.enable {
78     environment.systemPackages = [ cfg.package ];
80     environment.etc =
81       let
82         maybeConfig = name: cfg: lib.mkIf (cfg != null) {
83           source = pkgs.writeText name cfg;
84           mode = "0644";
85         };
86       in
87       {
88         "asusd/anime.ron" = maybeConfig "anime.ron" cfg.animeConfig;
89         "asusd/asusd.ron" = maybeConfig "asusd.ron" cfg.asusdConfig;
90         "asusd/aura.ron" = maybeConfig "aura.ron" cfg.auraConfig;
91         "asusd/profile.conf" = maybeConfig "profile.ron" cfg.profileConfig;
92         "asusd/fan_curves.ron" = maybeConfig "fan_curves.ron" cfg.fanCurvesConfig;
93         "asusd/asusd_user_ledmodes.ron" = maybeConfig "asusd_user_ledmodes.ron" cfg.userLedModesConfig;
94       };
96     services.dbus.enable = true;
97     systemd.packages = [ cfg.package ];
98     services.dbus.packages = [ cfg.package ];
99     services.udev.packages = [ cfg.package ];
100     services.supergfxd.enable = lib.mkDefault true;
102     systemd.user.services.asusd-user.enable = cfg.enableUserService;
103   };
105   meta.maintainers = pkgs.asusctl.meta.maintainers;