diff options
author | WORLDofPEACE <worldofpeace@protonmail.ch> | 2021-02-12 04:36:23 -0500 |
---|---|---|
committer | Peter Hoeg <peter@hoeg.com> | 2022-11-22 09:36:22 +0800 |
commit | de6f2b0a0701954a35bd7de525f7baadeda1812e (patch) | |
tree | ab4a7aee8aa82d99c5716ebff374e89312b71d3d /nixos | |
parent | 3be2a76832fa540b32cefd8bf8e9095037f97391 (diff) | |
download | nixlib-de6f2b0a0701954a35bd7de525f7baadeda1812e.tar nixlib-de6f2b0a0701954a35bd7de525f7baadeda1812e.tar.gz nixlib-de6f2b0a0701954a35bd7de525f7baadeda1812e.tar.bz2 nixlib-de6f2b0a0701954a35bd7de525f7baadeda1812e.tar.lz nixlib-de6f2b0a0701954a35bd7de525f7baadeda1812e.tar.xz nixlib-de6f2b0a0701954a35bd7de525f7baadeda1812e.tar.zst nixlib-de6f2b0a0701954a35bd7de525f7baadeda1812e.zip |
nixos/dbus: support dbus-broker
Diffstat (limited to 'nixos')
-rw-r--r-- | nixos/modules/services/system/dbus.nix | 160 |
1 files changed, 110 insertions, 50 deletions
diff --git a/nixos/modules/services/system/dbus.nix b/nixos/modules/services/system/dbus.nix index b87e48f2945d..c677088101f0 100644 --- a/nixos/modules/services/system/dbus.nix +++ b/nixos/modules/services/system/dbus.nix @@ -14,7 +14,7 @@ let serviceDirectories = cfg.packages; }; - inherit (lib) mkOption types; + inherit (lib) mkOption mkIf mkMerge types; in @@ -33,6 +33,18 @@ in ''; }; + implementation = mkOption { + type = types.enum [ "dbus" "broker" ]; + default = "dbus"; + description = lib.mdDoc '' + The implementation to use for the message bus defined by the D-Bus specification. + Can be either the classic dbus daemon or dbus-broker, which aims to provide high + performance and reliability, while keeping compatibility to the D-Bus + reference implementation. + ''; + + }; + packages = mkOption { type = types.listOf types.path; default = [ ]; @@ -66,66 +78,114 @@ in }; }; - config = lib.mkIf cfg.enable { - environment.systemPackages = [ - pkgs.dbus - ]; + config = mkIf cfg.enable (mkMerge [ + { + environment.etc."dbus-1".source = configDir; - environment.etc."dbus-1".source = configDir; + environment.pathsToLink = [ + "/etc/dbus-1" + "/share/dbus-1" + ]; - users.users.messagebus = { - uid = config.ids.uids.messagebus; - description = "D-Bus system message bus daemon user"; - home = homeDir; - group = "messagebus"; - }; + users.users.messagebus = { + uid = config.ids.uids.messagebus; + description = "D-Bus system message bus daemon user"; + home = homeDir; + group = "messagebus"; + }; - users.groups.messagebus.gid = config.ids.gids.messagebus; + users.groups.messagebus.gid = config.ids.gids.messagebus; - systemd.packages = [ - pkgs.dbus - ]; + # You still need the dbus reference implementation installed to use dbus-broker + systemd.packages = [ + pkgs.dbus + ]; - security.wrappers.dbus-daemon-launch-helper = { - source = "${pkgs.dbus}/libexec/dbus-daemon-launch-helper"; - owner = "root"; - group = "messagebus"; - setuid = true; - setgid = false; - permissions = "u+rx,g+rx,o-rx"; - }; + services.dbus.packages = [ + pkgs.dbus + config.system.path + ]; - services.dbus.packages = [ - pkgs.dbus - config.system.path - ]; + systemd.user.sockets.dbus.wantedBy = [ + "sockets.target" + ]; + } - systemd.services.dbus = { - # Don't restart dbus-daemon. Bad things tend to happen if we do. - reloadIfChanged = true; - restartTriggers = [ - configDir + (mkIf (cfg.implementation == "dbus") { + environment.systemPackages = [ + pkgs.dbus ]; - environment = { - LD_LIBRARY_PATH = config.system.nssModules.path; + + security.wrappers.dbus-daemon-launch-helper = { + source = "${pkgs.dbus}/libexec/dbus-daemon-launch-helper"; + owner = "root"; + group = "messagebus"; + setuid = true; + setgid = false; + permissions = "u+rx,g+rx,o-rx"; + }; + + systemd.services.dbus = { + # Don't restart dbus-daemon. Bad things tend to happen if we do. + reloadIfChanged = true; + restartTriggers = [ + configDir + ]; + environment = { + LD_LIBRARY_PATH = config.system.nssModules.path; + }; }; - }; - systemd.user.services.dbus = { - # Don't restart dbus-daemon. Bad things tend to happen if we do. - reloadIfChanged = true; - restartTriggers = [ - configDir + systemd.user.services.dbus = { + # Don't restart dbus-daemon. Bad things tend to happen if we do. + reloadIfChanged = true; + restartTriggers = [ + configDir + ]; + }; + + }) + + (mkIf (cfg.implementation == "broker") { + environment.systemPackages = [ + pkgs.dbus-broker ]; - }; - systemd.user.sockets.dbus.wantedBy = [ - "sockets.target" - ]; + systemd.packages = [ + pkgs.dbus-broker + ]; - environment.pathsToLink = [ - "/etc/dbus-1" - "/share/dbus-1" - ]; - }; + # Just to be sure we don't restart through the unit alias + systemd.services.dbus.reloadIfChanged = true; + systemd.user.services.dbus.reloadIfChanged = true; + + # NixOS Systemd Module doesn't respect 'Install' + # https://github.com/NixOS/nixpkgs/issues/108643 + systemd.services.dbus-broker = { + aliases = [ + "dbus.service" + ]; + # Don't restart dbus. Bad things tend to happen if we do. + reloadIfChanged = true; + restartTriggers = [ + configDir + ]; + environment = { + LD_LIBRARY_PATH = config.system.nssModules.path; + }; + }; + + systemd.user.services.dbus-broker = { + aliases = [ + "dbus.service" + ]; + # Don't restart dbus. Bad things tend to happen if we do. + reloadIfChanged = true; + restartTriggers = [ + configDir + ]; + }; + }) + + ]); } |