at 22.05-pre 2.5 kB view raw
1{ config, lib, pkgs, ... }: 2 3let 4 inherit (lib) mkOption mkEnableOption types mkIf mkMerge optional versionOlder; 5 cfg = config.hardware.system76; 6 7 kpkgs = config.boot.kernelPackages; 8 modules = [ "system76" "system76-io" ] ++ (optional (versionOlder kpkgs.kernel.version "5.5") "system76-acpi"); 9 modulePackages = map (m: kpkgs.${m}) modules; 10 moduleConfig = mkIf cfg.kernel-modules.enable { 11 boot.extraModulePackages = modulePackages; 12 13 boot.kernelModules = modules; 14 15 services.udev.packages = modulePackages; 16 }; 17 18 firmware-pkg = pkgs.system76-firmware; 19 firmwareConfig = mkIf cfg.firmware-daemon.enable { 20 # Make system76-firmware-cli usable by root from the command line. 21 environment.systemPackages = [ firmware-pkg ]; 22 23 services.dbus.packages = [ firmware-pkg ]; 24 25 systemd.services.system76-firmware-daemon = { 26 description = "The System76 Firmware Daemon"; 27 28 serviceConfig = { 29 ExecStart = "${firmware-pkg}/bin/system76-firmware-daemon"; 30 31 Restart = "on-failure"; 32 }; 33 34 wantedBy = [ "multi-user.target" ]; 35 }; 36 }; 37 38 power-pkg = config.boot.kernelPackages.system76-power; 39 powerConfig = mkIf cfg.power-daemon.enable { 40 # Make system76-power usable by root from the command line. 41 environment.systemPackages = [ power-pkg ]; 42 43 services.dbus.packages = [ power-pkg ]; 44 45 systemd.services.system76-power = { 46 description = "System76 Power Daemon"; 47 serviceConfig = { 48 ExecStart = "${power-pkg}/bin/system76-power daemon"; 49 Restart = "on-failure"; 50 Type = "dbus"; 51 BusName = "com.system76.PowerDaemon"; 52 }; 53 wantedBy = [ "multi-user.target" ]; 54 }; 55 }; 56in { 57 options = { 58 hardware.system76 = { 59 enableAll = mkEnableOption "all recommended configuration for system76 systems"; 60 61 firmware-daemon.enable = mkOption { 62 default = cfg.enableAll; 63 example = true; 64 description = "Whether to enable the system76 firmware daemon"; 65 type = types.bool; 66 }; 67 68 kernel-modules.enable = mkOption { 69 default = cfg.enableAll; 70 example = true; 71 description = "Whether to make the system76 out-of-tree kernel modules available"; 72 type = types.bool; 73 }; 74 75 power-daemon.enable = mkOption { 76 default = cfg.enableAll; 77 example = true; 78 description = "Whether to enable the system76 power daemon"; 79 type = types.bool; 80 }; 81 }; 82 }; 83 84 config = mkMerge [ moduleConfig firmwareConfig powerConfig ]; 85}