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