1{
2 config,
3 lib,
4 pkgs,
5 ...
6}:
7
8let
9 cfg = config.services.hardware.argonone;
10in
11{
12 options.services.hardware.argonone = {
13 enable = lib.mkEnableOption "the driver for Argon One Raspberry Pi case fan and power button";
14 package = lib.mkOption {
15 type = lib.types.package;
16 default = pkgs.argononed;
17 defaultText = lib.literalExpression "pkgs.argononed";
18 description = ''
19 The package implementing the Argon One driver
20 '';
21 };
22 };
23
24 config = lib.mkIf cfg.enable {
25 hardware.i2c.enable = true;
26 hardware.deviceTree.overlays = [
27 {
28 name = "argononed";
29 dtboFile = "${cfg.package}/boot/overlays/argonone.dtbo";
30 }
31 {
32 name = "i2c1-okay-overlay";
33 dtsText = ''
34 /dts-v1/;
35 /plugin/;
36 / {
37 compatible = "brcm,bcm2711";
38 fragment@0 {
39 target = <&i2c1>;
40 __overlay__ {
41 status = "okay";
42 };
43 };
44 };
45 '';
46 }
47 ];
48 environment.systemPackages = [ cfg.package ];
49 systemd.services.argononed = {
50 description = "Argon One Raspberry Pi case Daemon Service";
51 wantedBy = [ "multi-user.target" ];
52 serviceConfig = {
53 Type = "forking";
54 ExecStart = "${cfg.package}/bin/argononed";
55 PIDFile = "/run/argononed.pid";
56 Restart = "on-failure";
57 };
58 };
59 };
60
61 meta.maintainers = with lib.maintainers; [ misterio77 ];
62
63}