diff --git a/nixos/modules/i18n/input-method/ibus.nix b/nixos/modules/i18n/input-method/ibus.nix index cf24ecf58631..b4746b21b653 100644 --- a/nixos/modules/i18n/input-method/ibus.nix +++ b/nixos/modules/i18n/input-method/ibus.nix @@ -64,7 +64,7 @@ in # Without dconf enabled it is impossible to use IBus programs.dconf.enable = true; - programs.dconf.packages = [ ibusPackage ]; + programs.dconf.profiles.ibus = "${ibusPackage}/etc/dconf/profile/ibus"; services.dbus.packages = [ ibusAutostart diff --git a/nixos/modules/programs/dconf.nix b/nixos/modules/programs/dconf.nix index 30fbd72a9abf..6702e8efd1cb 100644 --- a/nixos/modules/programs/dconf.nix +++ b/nixos/modules/programs/dconf.nix @@ -4,24 +4,13 @@ with lib; let cfg = config.programs.dconf; - cfgDir = pkgs.symlinkJoin { - name = "dconf-system-config"; - paths = map (x: "${x}/etc/dconf") cfg.packages; - postBuild = '' - mkdir -p $out/profile - mkdir -p $out/db - '' + ( - concatStringsSep "\n" ( - mapAttrsToList ( - name: path: '' - ln -s ${path} $out/profile/${name} - '' - ) cfg.profiles - ) - ) + '' - ${pkgs.dconf}/bin/dconf update $out/db - ''; - }; + + mkDconfProfile = name: path: + { + name = "dconf/profile/${name}"; + value.source = path; + }; + in { ###### interface @@ -33,22 +22,18 @@ in profiles = mkOption { type = types.attrsOf types.path; default = {}; - description = "Set of dconf profile files, installed at /etc/dconf/profiles/name."; + description = "Set of dconf profile files."; internal = true; }; - packages = mkOption { - type = types.listOf types.package; - default = []; - description = "A list of packages which provide dconf profiles and databases in /etc/dconf."; - }; }; }; ###### implementation config = mkIf (cfg.profiles != {} || cfg.enable) { - environment.etc.dconf.source = mkIf (cfg.profiles != {} || cfg.packages != []) cfgDir; + environment.etc = optionalAttrs (cfg.profiles != {}) + (mapAttrs' mkDconfProfile cfg.profiles); services.dbus.packages = [ pkgs.dconf ]; diff --git a/nixos/tests/installed-tests/ibus.nix b/nixos/tests/installed-tests/ibus.nix index a4bc2a7d7de0..af54b612b507 100644 --- a/nixos/tests/installed-tests/ibus.nix +++ b/nixos/tests/installed-tests/ibus.nix @@ -5,12 +5,16 @@ makeInstalledTest { testConfig = { i18n.inputMethod.enabled = "ibus"; - systemd.user.services.ibus-daemon = { - serviceConfig.ExecStart = "${pkgs.ibus}/bin/ibus-daemon --xim --verbose"; - wantedBy = [ "graphical-session.target" ]; - partOf = [ "graphical-session.target" ]; - }; }; + preTestScript = '' + # ibus has ibus-desktop-testing-runner but it tries to manage desktop session so we just spawn ibus-daemon ourselves + machine.succeed("ibus-daemon --daemonize --verbose") + ''; + withX11 = true; + + # TODO: ibus-daemon is currently crashing or something + # maybe make ibus systemd service that auto-restarts? + meta.broken = true; } diff --git a/pkgs/tools/inputmethods/ibus/default.nix b/pkgs/tools/inputmethods/ibus/default.nix index 238e133495c9..644fd5eef3b2 100644 --- a/pkgs/tools/inputmethods/ibus/default.nix +++ b/pkgs/tools/inputmethods/ibus/default.nix @@ -16,7 +16,6 @@ , gtk2 , gtk3 , gtk-doc -, runCommand , isocodes , cldr-emoji-annotation , unicode-character-database @@ -48,14 +47,6 @@ let makeWrapper ${glib.dev}/bin/glib-mkenums $out/bin/glib-mkenums --unset PYTHONPATH ''; }; - # make-dconf-override-db.sh needs to execute dbus-launch in the sandbox, - # it will fail to read /etc/dbus-1/session.conf unless we add this flag - dbus-launch = runCommand "sandbox-dbus-launch" { - nativeBuildInputs = [ makeWrapper ]; - } '' - makeWrapper ${dbus}/bin/dbus-launch $out/bin/dbus-launch \ - --add-flags --config-file=${dbus.daemon}/share/dbus-1/session.conf - ''; in stdenv.mkDerivation rec { @@ -80,7 +71,7 @@ stdenv.mkDerivation rec { outputs = [ "out" "dev" "installedTests" ]; postPatch = '' - patchShebangs --build data/dconf/make-dconf-override-db.sh + echo \#!${runtimeShell} > data/dconf/make-dconf-override-db.sh cp ${buildPackages.gtk-doc}/share/gtk-doc/data/gtk-doc.make . ''; @@ -114,7 +105,6 @@ stdenv.mkDerivation rec { python3BuildEnv vala wrapGAppsHook - dbus-launch ]; propagatedBuildInputs = [