at 21.11-pre 1.7 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 }; 37in { 38 options = { 39 hardware.system76 = { 40 enableAll = mkEnableOption "all recommended configuration for system76 systems"; 41 42 firmware-daemon.enable = mkOption { 43 default = cfg.enableAll; 44 example = true; 45 description = "Whether to enable the system76 firmware daemon"; 46 type = types.bool; 47 }; 48 49 kernel-modules.enable = mkOption { 50 default = cfg.enableAll; 51 example = true; 52 description = "Whether to make the system76 out-of-tree kernel modules available"; 53 type = types.bool; 54 }; 55 }; 56 }; 57 58 config = mkMerge [ moduleConfig firmwareConfig ]; 59}