diff --git a/nixos/doc/manual/from_md/release-notes/rl-2305.section.xml b/nixos/doc/manual/from_md/release-notes/rl-2305.section.xml
index f57b3ca5b629..17fb70531054 100644
--- a/nixos/doc/manual/from_md/release-notes/rl-2305.section.xml
+++ b/nixos/doc/manual/from_md/release-notes/rl-2305.section.xml
@@ -238,6 +238,14 @@
the Nix store.
+
+
+ The services.fwupd module now allows
+ arbitrary daemon settings to be configured in a structured
+ manner
+ (services.fwupd.daemonSettings).
+
+
The unifi-poller package and corresponding
diff --git a/nixos/doc/manual/release-notes/rl-2305.section.md b/nixos/doc/manual/release-notes/rl-2305.section.md
index e64a80c6f713..b7f90ec01ef5 100644
--- a/nixos/doc/manual/release-notes/rl-2305.section.md
+++ b/nixos/doc/manual/release-notes/rl-2305.section.md
@@ -70,4 +70,6 @@ In addition to numerous new and upgraded packages, this release has the followin
- Resilio sync secret keys can now be provided using a secrets file at runtime, preventing these secrets from ending up in the Nix store.
+- The `services.fwupd` module now allows arbitrary daemon settings to be configured in a structured manner ([`services.fwupd.daemonSettings`](#opt-services.fwupd.daemonSettings)).
+
- The `unifi-poller` package and corresponding NixOS module have been renamed to `unpoller` to match upstream.
diff --git a/nixos/modules/services/hardware/fwupd.nix b/nixos/modules/services/hardware/fwupd.nix
index 98f837bd7824..8d7651f97c39 100644
--- a/nixos/modules/services/hardware/fwupd.nix
+++ b/nixos/modules/services/hardware/fwupd.nix
@@ -7,13 +7,16 @@ with lib;
let
cfg = config.services.fwupd;
+ format = pkgs.formats.ini {
+ listToValue = l: lib.concatStringsSep ";" (map (s: generators.mkValueStringDefault {} s) l);
+ mkKeyValue = generators.mkKeyValueDefault {} "=";
+ };
+
customEtc = {
"fwupd/daemon.conf" = {
- source = pkgs.writeText "daemon.conf" ''
- [fwupd]
- DisabledDevices=${lib.concatStringsSep ";" cfg.disabledDevices}
- DisabledPlugins=${lib.concatStringsSep ";" cfg.disabledPlugins}
- '';
+ source = format.generate "daemon.conf" {
+ fwupd = cfg.daemonSettings;
+ };
};
"fwupd/uefi_capsule.conf" = {
source = pkgs.writeText "uefi_capsule.conf" ''
@@ -67,24 +70,6 @@ in {
'';
};
- disabledDevices = mkOption {
- type = types.listOf types.str;
- default = [];
- example = [ "2082b5e0-7a64-478a-b1b2-e3404fab6dad" ];
- description = lib.mdDoc ''
- Allow disabling specific devices by their GUID
- '';
- };
-
- disabledPlugins = mkOption {
- type = types.listOf types.str;
- default = [];
- example = [ "udev" ];
- description = lib.mdDoc ''
- Allow disabling specific plugins
- '';
- };
-
extraTrustedKeys = mkOption {
type = types.listOf types.path;
default = [];
@@ -120,18 +105,49 @@ in {
Which fwupd package to use.
'';
};
+
+ daemonSettings = mkOption {
+ type = types.submodule {
+ freeformType = format.type.nestedTypes.elemType;
+ options = {
+ DisabledDevices = mkOption {
+ type = types.listOf types.str;
+ default = [];
+ example = [ "2082b5e0-7a64-478a-b1b2-e3404fab6dad" ];
+ description = lib.mdDoc ''
+ List of device GUIDs to be disabled.
+ '';
+ };
+
+ DisabledPlugins = mkOption {
+ type = types.listOf types.str;
+ default = [];
+ example = [ "udev" ];
+ description = lib.mdDoc ''
+ List of plugins to be disabled.
+ '';
+ };
+ };
+ };
+ default = {};
+ description = lib.mdDoc ''
+ Configurations for the fwupd daemon.
+ '';
+ };
};
};
imports = [
- (mkRenamedOptionModule [ "services" "fwupd" "blacklistDevices"] [ "services" "fwupd" "disabledDevices" ])
- (mkRenamedOptionModule [ "services" "fwupd" "blacklistPlugins"] [ "services" "fwupd" "disabledPlugins" ])
+ (mkRenamedOptionModule [ "services" "fwupd" "blacklistDevices"] [ "services" "fwupd" "daemonSettings" "DisabledDevices" ])
+ (mkRenamedOptionModule [ "services" "fwupd" "blacklistPlugins"] [ "services" "fwupd" "daemonSettings" "DisabledPlugins" ])
+ (mkRenamedOptionModule [ "services" "fwupd" "disabledDevices" ] [ "services" "fwupd" "daemonSettings" "DisabledDevices" ])
+ (mkRenamedOptionModule [ "services" "fwupd" "disabledPlugins" ] [ "services" "fwupd" "daemonSettings" "DisabledPlugins" ])
];
###### implementation
config = mkIf cfg.enable {
# Disable test related plug-ins implicitly so that users do not have to care about them.
- services.fwupd.disabledPlugins = cfg.package.defaultDisabledPlugins;
+ services.fwupd.daemonSettings.DisabledPlugins = cfg.package.defaultDisabledPlugins;
environment.systemPackages = [ cfg.package ];