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