From 09b0a4b0da86c12a57976028bbda3897137c9528 Mon Sep 17 00:00:00 2001 From: Rosario Pulella Date: Thu, 5 Jun 2025 16:06:51 -0400 Subject: [PATCH] dconf: revert: dconf: Provide dconf (#7215) Providing dconf via hm in this manner provided to be problematic for user with systems that were already providing dconf (like ubunut). Revert ff73544e4a59dce43a6de7051858a453186ae9bb --- modules/misc/dconf.nix | 127 +++++++++--------- .../home-environment/session-variables.nix | 1 - 2 files changed, 63 insertions(+), 65 deletions(-) diff --git a/modules/misc/dconf.nix b/modules/misc/dconf.nix index ef03a1fc6..ec2484659 100644 --- a/modules/misc/dconf.nix +++ b/modules/misc/dconf.nix @@ -33,7 +33,8 @@ in options = { dconf = { - enable = lib.mkEnableOption "dconf" // { + enable = lib.mkOption { + type = types.bool; # While technically dconf on darwin could work, our activation step # requires dbus, which only *lightly* supports Darwin in general, and # not at all in the way it's packaged in nixpkgs. Because of this, we @@ -42,6 +43,13 @@ in # re-enabled, unclear whether there's actual value in it though. default = !pkgs.stdenv.hostPlatform.isDarwin; visible = false; + description = '' + Whether to enable dconf settings.Add commentMore actions + Note, if you use NixOS then you must add + `programs.dconf.enable = true` + to your system configuration. Otherwise you will see a systemd error + message when your configuration is activated. + ''; }; settings = lib.mkOption { @@ -76,79 +84,70 @@ in }; }; - config = lib.mkMerge [ - (lib.mkIf cfg.enable { - home.packages = [ pkgs.dconf ]; - dbus.packages = [ pkgs.dconf ]; - home.sessionVariablesExtra = '' - export GIO_EXTRA_MODULES="${pkgs.dconf.lib}/lib/gio/modules''${GIO_EXTRA_MODULES:+:}$GIO_EXTRA_MODULES" - ''; - }) - (lib.mkIf (cfg.enable && cfg.settings != { }) { - # Make sure the dconf directory exists. - xdg.configFile."dconf/.keep".source = builtins.toFile "keep" ""; + config = lib.mkIf (cfg.enable && cfg.settings != { }) { + # Make sure the dconf directory exists. + xdg.configFile."dconf/.keep".source = builtins.toFile "keep" ""; - home.extraBuilderCommands = '' - mkdir -p $out/state/ - ln -s ${stateDconfKeys} $out/state/${stateDconfKeys.name} - ''; + home.extraBuilderCommands = '' + mkdir -p $out/state/ + ln -s ${stateDconfKeys} $out/state/${stateDconfKeys.name} + ''; - home.activation.dconfSettings = lib.hm.dag.entryAfter [ "installPackages" ] ( - let - iniFile = pkgs.writeText "hm-dconf.ini" (toDconfIni cfg.settings); + home.activation.dconfSettings = lib.hm.dag.entryAfter [ "installPackages" ] ( + let + iniFile = pkgs.writeText "hm-dconf.ini" (toDconfIni cfg.settings); - statePath = "state/${stateDconfKeys.name}"; + statePath = "state/${stateDconfKeys.name}"; - cleanup = pkgs.writeShellScript "dconf-cleanup" '' - set -euo pipefail + cleanup = pkgs.writeShellScript "dconf-cleanup" '' + set -euo pipefail - ${config.lib.bash.initHomeManagerLib} + ${config.lib.bash.initHomeManagerLib} - PATH=${ - lib.makeBinPath [ - pkgs.dconf - pkgs.jq - ] - }''${PATH:+:}$PATH + PATH=${ + lib.makeBinPath [ + pkgs.dconf + pkgs.jq + ] + }''${PATH:+:}$PATH - oldState="$1" - newState="$2" + oldState="$1" + newState="$2" - # Can't do cleanup if we don't know the old state. - if [[ ! -f $oldState ]]; then - exit 0 - fi - - # Reset all keys that are present in the old generation but not the new - # one. - jq -r -n \ - --slurpfile old "$oldState" \ - --slurpfile new "$newState" \ - '($old[] - $new[])[]' \ - | while read -r key; do - verboseEcho "Resetting dconf key \"$key\"" - run $DCONF_DBUS_RUN_SESSION dconf reset "$key" - done - ''; - in - '' - if [[ -v DBUS_SESSION_BUS_ADDRESS ]]; then - export DCONF_DBUS_RUN_SESSION="" - else - export DCONF_DBUS_RUN_SESSION="${pkgs.dbus}/bin/dbus-run-session --dbus-daemon=${pkgs.dbus}/bin/dbus-daemon" + # Can't do cleanup if we don't know the old state. + if [[ ! -f $oldState ]]; then + exit 0 fi - if [[ -v oldGenPath ]]; then - ${cleanup} \ - "$oldGenPath/${statePath}" \ - "$newGenPath/${statePath}" - fi + # Reset all keys that are present in the old generation but not the new + # one. + jq -r -n \ + --slurpfile old "$oldState" \ + --slurpfile new "$newState" \ + '($old[] - $new[])[]' \ + | while read -r key; do + verboseEcho "Resetting dconf key \"$key\"" + run $DCONF_DBUS_RUN_SESSION dconf reset "$key" + done + ''; + in + '' + if [[ -v DBUS_SESSION_BUS_ADDRESS ]]; then + export DCONF_DBUS_RUN_SESSION="" + else + export DCONF_DBUS_RUN_SESSION="${pkgs.dbus}/bin/dbus-run-session --dbus-daemon=${pkgs.dbus}/bin/dbus-daemon" + fi - run $DCONF_DBUS_RUN_SESSION ${pkgs.dconf}/bin/dconf load / < ${iniFile} + if [[ -v oldGenPath ]]; then + ${cleanup} \ + "$oldGenPath/${statePath}" \ + "$newGenPath/${statePath}" + fi - unset DCONF_DBUS_RUN_SESSION - '' - ); - }) - ]; + run $DCONF_DBUS_RUN_SESSION ${pkgs.dconf}/bin/dconf load / < ${iniFile} + + unset DCONF_DBUS_RUN_SESSION + '' + ); + }; } diff --git a/tests/modules/home-environment/session-variables.nix b/tests/modules/home-environment/session-variables.nix index 19b65f79c..957fb019e 100644 --- a/tests/modules/home-environment/session-variables.nix +++ b/tests/modules/home-environment/session-variables.nix @@ -17,7 +17,6 @@ let export XDG_DATA_HOME="/home/hm-user/.local/share" export XDG_STATE_HOME="/home/hm-user/.local/state" - export GIO_EXTRA_MODULES="${pkgs.dconf}/lib/gio/modules''${GIO_EXTRA_MODULES:+:}$GIO_EXTRA_MODULES" ''; darwinExpected = ''