From ad1e8bb782ed91b4966ab5b642f9b2c5813354ce Mon Sep 17 00:00:00 2001 From: Rosario Pulella Date: Thu, 15 May 2025 13:59:12 -0400 Subject: [PATCH] dbus: Create with pacakges options (#7064) This adds a module for dbus with only one option, `packages`. The `dbus.packages` options allows users to specify packages to have their dbus service files (from `/share/dbus-1/services`) linked to the users dbus services directory (`$XDG_DATA_HOME/dbus-1/services/`), effectively enabling the services. --- modules/dbus.nix | 36 +++++++++++++++++++++++++++++++++ modules/modules.nix | 1 + tests/default.nix | 1 + tests/modules/dbus/default.nix | 3 +++ tests/modules/dbus/packages.nix | 21 +++++++++++++++++++ 5 files changed, 62 insertions(+) create mode 100644 modules/dbus.nix create mode 100644 tests/modules/dbus/default.nix create mode 100644 tests/modules/dbus/packages.nix diff --git a/modules/dbus.nix b/modules/dbus.nix new file mode 100644 index 000000000..38d046923 --- /dev/null +++ b/modules/dbus.nix @@ -0,0 +1,36 @@ +{ + config, + pkgs, + lib, + ... +}: +let + cfg = config.dbus; +in +{ + meta.maintainers = [ lib.hm.maintainers.rosuavio ]; + + options.dbus = { + packages = lib.mkOption { + type = with lib.types; types.listOf types.package; + default = [ ]; + description = '' + Packages whose D-Bus configuration files should be included in + the configuration of the D-Bus session-wide message bus. Specifically, + files in «pkg»/share/dbus-1/services will be included in the user's + $XDG_DATA_HOME/dbus-1/services directory. + ''; + }; + }; + + config = { + xdg.dataFile."dbus-1/services" = { + recursive = true; + source = pkgs.symlinkJoin { + name = "user-dbus-services"; + paths = cfg.packages; + stripPrefix = "/share/dbus-1/services"; + }; + }; + }; +} diff --git a/modules/modules.nix b/modules/modules.nix index 96e914404..345dfac98 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -490,6 +490,7 @@ let ./services/xsuspender.nix ./services/yubikey-agent.nix ./systemd.nix + ./dbus.nix ./targets/darwin ./targets/generic-linux.nix ./wayland.nix diff --git a/tests/default.nix b/tests/default.nix index 1f62fdf13..d5566de50 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -502,6 +502,7 @@ import nmtSrc { ./modules/services/yubikey-agent ./modules/systemd ./modules/targets-linux + ./modules/dbus ] ); } diff --git a/tests/modules/dbus/default.nix b/tests/modules/dbus/default.nix new file mode 100644 index 000000000..e2f87c39f --- /dev/null +++ b/tests/modules/dbus/default.nix @@ -0,0 +1,3 @@ +{ + dbus-packages = ./packages.nix; +} diff --git a/tests/modules/dbus/packages.nix b/tests/modules/dbus/packages.nix new file mode 100644 index 000000000..3df8af6ac --- /dev/null +++ b/tests/modules/dbus/packages.nix @@ -0,0 +1,21 @@ +{ pkgs, config, ... }: +let + inherit (config.lib.test) mkStubPackage; +in +{ + dbus.packages = [ + (mkStubPackage { + name = "test"; + buildScript = '' + mkdir -p $out/share/dbus-1/services + printf '%s' test > $out/share/dbus-1/services/test.service + ''; + }) + ]; + + nmt.script = '' + serviceFile=home-files/.local/share/dbus-1/services/test.service + assertFileExists $serviceFile + assertFileContent $serviceFile "${pkgs.writeText "expected" "test"}" + ''; +}