at 23.11-pre 1.5 kB view raw
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}