{ lib, config, pkgs, ... }: let cfg = config.this.laptop.thinkpad; mkZcfanConf = c: lib.generators.toKeyValue { mkKeyValue = lib.generators.mkKeyValueDefault {} " "; } c; zcfanConf = mkZcfanConf cfg.zcfan.settings; in { options = { this.laptop.thinkpad = { enable = lib.mkEnableOption "thinkpad settings"; zcfan = { settings = lib.mkOption { type = with lib.types; attrsOf (oneOf [int str]); default = { }; description = "Settings for zcfan."; }; }; }; }; config = lib.mkIf cfg.enable { boot.extraModprobeConfig = "options thinkpad_acpi fan_control=1"; environment.etc."zcfan.conf" = lib.mkIf (zcfanConf != "") { text = zcfanConf; }; environment.systemPackages = [ pkgs.zcfan ]; systemd.packages = [ pkgs.zcfan ]; systemd.services.zcfan.wantedBy = [ "multi-user.target" ]; }; }