{ lib, config, pkgs, ... }: let cfg = config.this.laptop.thinkpad; mkZcfanConf = c: lib.generators.toKeyValue { mkKeyValue = lib.generators.mkKeyValueDefault {} " "; } c; zcfanConf = mkZcfanConf cfg.zcfan.settings; inherit (builtins) toString; in { options = { this.laptop.thinkpad = { enable = lib.mkEnableOption "thinkpad settings"; trackpoint = { sensitivity = lib.mkOption { type = lib.types.int; default = 255; }; speed = lib.mkOption { type = lib.types.int; default = 127; }; }; 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"; services.udev.extraRules = '' ACTION=="add", SUBSYSTEM=="input", ATTR{name}=="TPPS/2 IBM TrackPoint", ATTR{device/sensitivity}="${toString cfg.trackpoint.sensitivity}", ATTR{device/speed}="${toString cfg.trackpoint.speed}" ''; environment.etc."zcfan.conf" = lib.mkIf (zcfanConf != "") { text = zcfanConf; }; environment.systemPackages = [ pkgs.zcfan ]; systemd.packages = [ pkgs.zcfan ]; systemd.services.zcfan.wantedBy = [ "multi-user.target" ]; }; }