Unverified Commit 70a3b2b9 authored by 0x4A6F's avatar 0x4A6F Committed by GitHub
Browse files

nixos/hardware.fw-fanctrl: add package option and refactor using...

nixos/hardware.fw-fanctrl: add package option and refactor using lib.attrsets.recursiveUpdate (#428029)
parents 5ae516b6 15ad2670
Loading
Loading
Loading
Loading
+31 −28
Original line number Diff line number Diff line
@@ -4,21 +4,18 @@
  pkgs,
  ...
}:

let
  cfg = config.hardware.fw-fanctrl;

  configFormat = pkgs.formats.json { };
  configOption = configFormat.generate "config.json" cfg.config;

  configFile = pkgs.runCommand "configFile" { } ''
    ${lib.getExe pkgs.jq} -s '.[0] * .[1]' ${pkgs.fw-fanctrl}/share/fw-fanctrl/config.json ${configOption} > $out
  '';
  cfg = config.hardware.fw-fanctrl;
in
{
  options.hardware.fw-fanctrl = {
    enable = lib.mkEnableOption "the fw-fanctrl systemd service and install the needed packages";

    package = lib.mkPackageOption pkgs "fw-fanctrl" { };

    ectoolPackage = lib.mkPackageOption pkgs "fw-ectool" { };

    disableBatteryTempCheck = lib.mkOption {
      type = lib.types.bool;
      default = false;
@@ -98,10 +95,16 @@ in
    };
  };

  config = lib.mkIf cfg.enable {
    environment.systemPackages = with pkgs; [
      fw-fanctrl
      fw-ectool
  config =
    let
      defaultConfig = builtins.fromJSON (builtins.readFile "${cfg.package}/share/fw-fanctrl/config.json");
      finalConfig = lib.attrsets.recursiveUpdate defaultConfig cfg.config;
      configFile = configFormat.generate "custom.json" finalConfig;
    in
    lib.mkIf cfg.enable {
      environment.systemPackages = [
        cfg.package
        cfg.ectoolPackage
      ];

      systemd.services.fw-fanctrl = {
@@ -110,18 +113,18 @@ in
        serviceConfig = {
          Type = "simple";
          Restart = "always";
        ExecStart = "${lib.getExe pkgs.fw-fanctrl} --output-format JSON run --config ${configFile} --silent ${lib.optionalString cfg.disableBatteryTempCheck "--no-battery-sensors"}";
        ExecStopPost = "${lib.getExe pkgs.fw-ectool} autofanctrl";
          ExecStart = "${lib.getExe cfg.package} --output-format JSON run --config ${configFile} --silent ${lib.optionalString cfg.disableBatteryTempCheck "--no-battery-sensors"}";
          ExecStopPost = "${lib.getExe cfg.ectoolPackage} autofanctrl";
        };
        wantedBy = [ "multi-user.target" ];
      };

      # Create suspend config
      environment.etc."systemd/system-sleep/fw-fanctrl-suspend.sh".source =
      "${pkgs.fw-fanctrl}/share/fw-fanctrl/fw-fanctrl-suspend";
        "${cfg.package}/share/fw-fanctrl/fw-fanctrl-suspend";
    };

  meta = {
    maintainers = pkgs.fw-fanctrl.meta.maintainers;
    maintainers = [ lib.maintainers.Svenum ];
  };
}