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