anchor.diff:      };
     };
   
  -  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.user.services.dbus = {
  -      # Don't restart dbus-daemon. Bad things tend to happen if we do.
  -      reloadIfChanged = true;
  -      restartTriggers = [
  -        configDir
  +      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
  +        ];
  +      };
  +
  +    })
  +
  +    (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
  +        ];
  +      };
  +    })
  +
  +  ]);
   }
  
positive.code:           Whether to start the D-Bus message bus daemon, which is
            required by many other system services and applications.
          '';
        };
  
        packages = mkOption {
  
negative.code:     serviceDirectories = cfg.packages;
    };
  
    inherit (lib) mkOption mkIf mkMerge types;
  
  in
  
  