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