diff --git a/nixos/modules/services/misc/packagekit.nix b/nixos/modules/services/misc/packagekit.nix
index 325c4e84e0d..93bd206bd98 100644
--- a/nixos/modules/services/misc/packagekit.nix
+++ b/nixos/modules/services/misc/packagekit.nix
@@ -1,55 +1,60 @@
{ config, lib, pkgs, ... }:
-with lib;
-
let
-
cfg = config.services.packagekit;
- packagekitConf = ''
- [Daemon]
- DefaultBackend=${cfg.backend}
- KeepCache=false
- '';
+ inherit (lib)
+ mkEnableOption mkOption mkIf mkRemovedOptionModule types
+ listToAttrs recursiveUpdate;
- vendorConf = ''
- [PackagesNotFound]
- DefaultUrl=https://github.com/NixOS/nixpkgs
- CodecUrl=https://github.com/NixOS/nixpkgs
- HardwareUrl=https://github.com/NixOS/nixpkgs
- FontUrl=https://github.com/NixOS/nixpkgs
- MimeUrl=https://github.com/NixOS/nixpkgs
- '';
+ iniFmt = pkgs.formats.ini { };
+
+ confFiles = [
+ (iniFmt.generate "PackageKit.conf" (recursiveUpdate
+ {
+ Daemon = {
+ DefaultBackend = "test_nop";
+ KeepCache = false;
+ };
+ }
+ cfg.settings))
+
+ (iniFmt.generate "Vendor.conf" (recursiveUpdate
+ {
+ PackagesNotFound = rec {
+ DefaultUrl = "https://github.com/NixOS/nixpkgs";
+ CodecUrl = DefaultUrl;
+ HardwareUrl = DefaultUrl;
+ FontUrl = DefaultUrl;
+ MimeUrl = DefaultUrl;
+ };
+ }
+ cfg.vendorSettings))
+ ];
in
-
{
+ imports = [
+ (mkRemovedOptionModule [ "services" "packagekit" "backend" ] "The only backend that doesn't blow up is `test_nop`.")
+ ];
- options = {
+ options.services.packagekit = {
+ enable = mkEnableOption ''
+ PackageKit provides a cross-platform D-Bus abstraction layer for
+ installing software. Software utilizing PackageKit can install
+ software regardless of the package manager.
+ '';
- services.packagekit = {
- enable = mkEnableOption
- ''
- PackageKit provides a cross-platform D-Bus abstraction layer for
- installing software. Software utilizing PackageKit can install
- software regardless of the package manager.
- '';
+ settings = mkOption {
+ type = iniFmt.type;
+ default = { };
+ description = "Additional settings passed straight through to PackageKit.conf";
+ };
- # TODO: integrate with PolicyKit if the nix backend matures to the point
- # where it will require elevated permissions
- backend = mkOption {
- type = types.enum [ "test_nop" ];
- default = "test_nop";
- description = ''
- PackageKit supports multiple different backends and auto which
- should do the right thing.
-
-
- On NixOS however, we do not have a backend compatible with nix 2.0
- (refer to this issue so we have to force
- it to test_nop for now.
- '';
- };
+ vendorSettings = mkOption {
+ type = iniFmt.type;
+ default = { };
+ description = "Additional settings passed straight through to Vendor.conf";
};
};
@@ -59,7 +64,9 @@ in
systemd.packages = with pkgs; [ packagekit ];
- environment.etc."PackageKit/PackageKit.conf".text = packagekitConf;
- environment.etc."PackageKit/Vendor.conf".text = vendorConf;
+ environment.etc = listToAttrs (map
+ (e:
+ lib.nameValuePair "PackageKit/${e.name}" { source = e; })
+ confFiles);
};
}