From 55c124cadbbae4001dabc128e29edd113d795f6b Mon Sep 17 00:00:00 2001 From: Bobby Rong Date: Fri, 6 Oct 2023 16:10:22 +0800 Subject: [PATCH 1/6] gnome.gnome-panel: Use autoconf271 I don't see any build issues with it. --- pkgs/desktops/gnome/default.nix | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pkgs/desktops/gnome/default.nix b/pkgs/desktops/gnome/default.nix index 3b827dcb2761..f9c782117c79 100644 --- a/pkgs/desktops/gnome/default.nix +++ b/pkgs/desktops/gnome/default.nix @@ -238,9 +238,7 @@ lib.makeScope pkgs.newScope (self: with self; { gnome-flashback = callPackage ./misc/gnome-flashback { }; - gnome-panel = callPackage ./misc/gnome-panel { - autoreconfHook = pkgs.autoreconfHook269; - }; + gnome-panel = callPackage ./misc/gnome-panel { }; gnome-tweaks = callPackage ./misc/gnome-tweaks { }; From f6345cd25941b8eb17a7e7768b9a3de0b494eb43 Mon Sep 17 00:00:00 2001 From: Bobby Rong Date: Fri, 6 Oct 2023 16:40:53 +0800 Subject: [PATCH 2/6] gnome.gnome-panel-with-modules: init Setting X_GNOME_PANEL_MODULESDIR in gnome-session wrapper is confusing to me. --- .../services/x11/desktop-managers/gnome.nix | 6 +- pkgs/desktops/gnome/default.nix | 2 + .../gnome/misc/gnome-flashback/default.nix | 26 ++------ .../gnome/misc/gnome-panel/wrapper.nix | 66 +++++++++++++++++++ 4 files changed, 78 insertions(+), 22 deletions(-) create mode 100644 pkgs/desktops/gnome/misc/gnome-panel/wrapper.nix diff --git a/nixos/modules/services/x11/desktop-managers/gnome.nix b/nixos/modules/services/x11/desktop-managers/gnome.nix index ce8f2548a5ad..97df50588500 100644 --- a/nixos/modules/services/x11/desktop-managers/gnome.nix +++ b/nixos/modules/services/x11/desktop-managers/gnome.nix @@ -229,7 +229,7 @@ in panelModulePackages = mkOption { default = [ pkgs.gnome.gnome-applets ]; defaultText = literalExpression "[ pkgs.gnome.gnome-applets ]"; - type = types.listOf types.path; + type = types.listOf types.package; description = lib.mdDoc '' Packages containing modules that should be made available to `gnome-panel` (usually for applets). @@ -295,7 +295,6 @@ in (wm: pkgs.gnome.gnome-flashback.mkSessionForWm { inherit (wm) wmName wmLabel wmCommand enableGnomePanel; - inherit (cfg.flashback) panelModulePackages; } ) flashbackWms; @@ -309,6 +308,9 @@ in environment.systemPackages = with pkgs.gnome; [ gnome-flashback + (gnome-panel-with-modules.override { + panelModulePackages = cfg.flashback.panelModulePackages; + }) ]; }) diff --git a/pkgs/desktops/gnome/default.nix b/pkgs/desktops/gnome/default.nix index f9c782117c79..d356094942f3 100644 --- a/pkgs/desktops/gnome/default.nix +++ b/pkgs/desktops/gnome/default.nix @@ -240,6 +240,8 @@ lib.makeScope pkgs.newScope (self: with self; { gnome-panel = callPackage ./misc/gnome-panel { }; + gnome-panel-with-modules = callPackage ./misc/gnome-panel/wrapper.nix { }; + gnome-tweaks = callPackage ./misc/gnome-tweaks { }; gpaste = callPackage ./misc/gpaste { }; diff --git a/pkgs/desktops/gnome/misc/gnome-flashback/default.nix b/pkgs/desktops/gnome/misc/gnome-flashback/default.nix index cfe0903cce7b..fd2abf1b51fc 100644 --- a/pkgs/desktops/gnome/misc/gnome-flashback/default.nix +++ b/pkgs/desktops/gnome/misc/gnome-flashback/default.nix @@ -23,6 +23,7 @@ , upower , pam , wrapGAppsHook +, makeWrapper , writeTextFile , xkeyboard_config , xorg @@ -127,7 +128,7 @@ let versionPolicy = "odd-unstable"; }; - mkSessionForWm = { wmName, wmLabel, wmCommand, enableGnomePanel, panelModulePackages }: + mkSessionForWm = { wmName, wmLabel, wmCommand, enableGnomePanel }: let wmApplication = writeTextFile { name = "gnome-flashback-${wmName}-wm"; @@ -156,28 +157,15 @@ let ''; }; - # gnome-panel will only look for applets in a single directory so symlink them into here. - panelModulesEnv = buildEnv { - name = "gnome-panel-modules-env"; - # We always want to find the built-in panel applets. - paths = [ gnome-panel gnome-flashback ] ++ panelModulePackages; - pathsToLink = [ "/lib/gnome-panel/modules" ]; - }; - executable = stdenv.mkDerivation { name = "gnome-flashback-${wmName}"; - nativeBuildInputs = [ glib wrapGAppsHook ]; - buildInputs = [ gnome-flashback ] ++ lib.optionals enableGnomePanel ([ gnome-panel ] ++ panelModulePackages); - # We want to use the wrapGAppsHook mechanism to wrap gnome-session - # with the environment that gnome-flashback and gnome-panel need to - # run, including the configured applet packages. This is only possible - # in the fixup phase, so turn everything else off. + nativeBuildInputs = [ makeWrapper ]; + dontUnpack = true; dontConfigure = true; dontBuild = true; dontInstall = true; - dontWrapGApps = true; # We want to do the wrapping ourselves. # gnome-flashback and gnome-panel need to be added to XDG_DATA_DIRS so that their .desktop files can be found by gnome-session. # We need to pass the --builtin flag so that gnome-session invokes gnome-session-binary instead of systemd. @@ -186,9 +174,7 @@ let makeWrapper ${gnome-session}/bin/gnome-session $out \ --add-flags "--session=gnome-flashback-${wmName} --builtin" \ --set-default XDG_CURRENT_DESKTOP 'GNOME-Flashback:GNOME' \ - --prefix XDG_DATA_DIRS : '${lib.makeSearchPath "share" ([ wmApplication gnomeSession gnome-flashback ] ++ lib.optional enableGnomePanel gnome-panel)}' \ - "''${gappsWrapperArgs[@]}" \ - ${lib.optionalString enableGnomePanel "--set NIX_GNOME_PANEL_MODULESDIR '${panelModulesEnv}/lib/gnome-panel/modules'"} + --prefix XDG_DATA_DIRS : '${lib.makeSearchPath "share" [ wmApplication gnomeSession gnome-flashback ]}' ''; }; @@ -211,7 +197,7 @@ let }; mkSystemdTargetForWm = { wmName, wmLabel, wmCommand, enableGnomePanel }: - runCommand "gnome-flashback-${wmName}.target" {} '' + runCommand "gnome-flashback-${wmName}.target" { } '' mkdir -p $out/lib/systemd/user cp -r "${gnome-flashback}/lib/systemd/user/gnome-session@gnome-flashback-metacity.target.d" \ "$out/lib/systemd/user/gnome-session@gnome-flashback-${wmName}.target.d" diff --git a/pkgs/desktops/gnome/misc/gnome-panel/wrapper.nix b/pkgs/desktops/gnome/misc/gnome-panel/wrapper.nix new file mode 100644 index 000000000000..6afee1051af4 --- /dev/null +++ b/pkgs/desktops/gnome/misc/gnome-panel/wrapper.nix @@ -0,0 +1,66 @@ +{ stdenv +, lib +, buildEnv +, gnome-panel +, gnome-flashback +, xorg +, glib +, wrapGAppsHook +, panelModulePackages ? [ ] +}: + +let + # We always want to find the built-in panel applets. + selectedPanelModulePackages = [ gnome-panel gnome-flashback ] ++ panelModulePackages; + + panelModulesEnv = buildEnv { + name = "gnome-panel-modules-env"; + paths = selectedPanelModulePackages; + pathsToLink = [ "/lib/gnome-panel/modules" ]; + }; +in +stdenv.mkDerivation { + pname = "${gnome-panel.pname}-with-modules"; + inherit (gnome-panel) version; + + nativeBuildInputs = [ + glib + wrapGAppsHook + ]; + + buildInputs = selectedPanelModulePackages ++ + lib.forEach selectedPanelModulePackages (x: x.buildInputs or [ ]); + + dontUnpack = true; + dontConfigure = true; + dontBuild = true; + + preferLocalBuild = true; + allowSubstitutes = false; + + installPhase = '' + runHook preInstall + + mkdir -p $out + ${xorg.lndir}/bin/lndir -silent ${gnome-panel} $out + + rm -r $out/lib/gnome-panel/modules + ${xorg.lndir}/bin/lndir -silent ${panelModulesEnv} $out + + rm $out/share/applications/gnome-panel.desktop + + substitute ${gnome-panel}/share/applications/gnome-panel.desktop \ + $out/share/applications/gnome-panel.desktop --replace \ + "Exec=${gnome-panel}/bin/gnome-panel" "Exec=$out/bin/gnome-panel" + + runHook postInstall + ''; + + preFixup = '' + gappsWrapperArgs+=( + --set NIX_GNOME_PANEL_MODULESDIR "$out/lib/gnome-panel/modules" + ) + ''; + + meta = gnome-panel.meta // { outputsToInstall = [ "out" ]; }; +} From 21f5cd377acbaa9c94130c4db38695d8a4fa053d Mon Sep 17 00:00:00 2001 From: Bobby Rong Date: Fri, 6 Oct 2023 17:56:38 +0800 Subject: [PATCH 3/6] gnome.gnome-flashback: Add mkWmApplication Having this in environment.systemPackages shouldn't be worse than adding as XDG_DATA_DIRS in gnome-session. --- .../services/x11/desktop-managers/gnome.nix | 4 +- .../gnome/misc/gnome-flashback/default.nix | 37 ++++++++++--------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/nixos/modules/services/x11/desktop-managers/gnome.nix b/nixos/modules/services/x11/desktop-managers/gnome.nix index 97df50588500..2f9c75bbfb3e 100644 --- a/nixos/modules/services/x11/desktop-managers/gnome.nix +++ b/nixos/modules/services/x11/desktop-managers/gnome.nix @@ -311,7 +311,9 @@ in (gnome-panel-with-modules.override { panelModulePackages = cfg.flashback.panelModulePackages; }) - ]; + ] + # For /share/applications/${wmName}.desktop + ++ (map (wm: gnome-flashback.mkWmApplication { inherit (wm) wmName wmLabel wmCommand; }) flashbackWms); }) (mkIf serviceCfg.core-os-services.enable { diff --git a/pkgs/desktops/gnome/misc/gnome-flashback/default.nix b/pkgs/desktops/gnome/misc/gnome-flashback/default.nix index fd2abf1b51fc..8e769cc6a3af 100644 --- a/pkgs/desktops/gnome/misc/gnome-flashback/default.nix +++ b/pkgs/desktops/gnome/misc/gnome-flashback/default.nix @@ -128,25 +128,26 @@ let versionPolicy = "odd-unstable"; }; + mkWmApplication = { wmName, wmLabel, wmCommand }: + writeTextFile { + name = "gnome-flashback-${wmName}-wm"; + destination = "/share/applications/${wmName}.desktop"; + text = '' + [Desktop Entry] + Type=Application + Encoding=UTF-8 + Name=${wmLabel} + Exec=${wmCommand} + NoDisplay=true + X-GNOME-WMName=${wmLabel} + X-GNOME-Autostart-Phase=WindowManager + X-GNOME-Provides=windowmanager + X-GNOME-Autostart-Notify=false + ''; + }; + mkSessionForWm = { wmName, wmLabel, wmCommand, enableGnomePanel }: let - wmApplication = writeTextFile { - name = "gnome-flashback-${wmName}-wm"; - destination = "/share/applications/${wmName}.desktop"; - text = '' - [Desktop Entry] - Type=Application - Encoding=UTF-8 - Name=${wmLabel} - Exec=${wmCommand} - NoDisplay=true - X-GNOME-WMName=${wmLabel} - X-GNOME-Autostart-Phase=WindowManager - X-GNOME-Provides=windowmanager - X-GNOME-Autostart-Notify=false - ''; - }; - gnomeSession = writeTextFile { name = "gnome-flashback-${wmName}-gnome-session"; destination = "/share/gnome-session/sessions/gnome-flashback-${wmName}.session"; @@ -174,7 +175,7 @@ let makeWrapper ${gnome-session}/bin/gnome-session $out \ --add-flags "--session=gnome-flashback-${wmName} --builtin" \ --set-default XDG_CURRENT_DESKTOP 'GNOME-Flashback:GNOME' \ - --prefix XDG_DATA_DIRS : '${lib.makeSearchPath "share" [ wmApplication gnomeSession gnome-flashback ]}' + --prefix XDG_DATA_DIRS : '${lib.makeSearchPath "share" [ gnomeSession gnome-flashback ]}' ''; }; From ba82dd7148e0decc2d972600cce35e2d2176a499 Mon Sep 17 00:00:00 2001 From: Bobby Rong Date: Fri, 6 Oct 2023 18:07:17 +0800 Subject: [PATCH 4/6] gnome.gnome-flashback: Add mkGnomeSession Having this in environment.systemPackages shouldn't be worse than adding as XDG_DATA_DIRS in gnome-session. --- .../services/x11/desktop-managers/gnome.nix | 6 +++-- .../gnome/misc/gnome-flashback/default.nix | 25 ++++++++++--------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/nixos/modules/services/x11/desktop-managers/gnome.nix b/nixos/modules/services/x11/desktop-managers/gnome.nix index 2f9c75bbfb3e..8b5daf83de1d 100644 --- a/nixos/modules/services/x11/desktop-managers/gnome.nix +++ b/nixos/modules/services/x11/desktop-managers/gnome.nix @@ -294,7 +294,7 @@ in map (wm: pkgs.gnome.gnome-flashback.mkSessionForWm { - inherit (wm) wmName wmLabel wmCommand enableGnomePanel; + inherit (wm) wmName wmLabel wmCommand; } ) flashbackWms; @@ -313,7 +313,9 @@ in }) ] # For /share/applications/${wmName}.desktop - ++ (map (wm: gnome-flashback.mkWmApplication { inherit (wm) wmName wmLabel wmCommand; }) flashbackWms); + ++ (map (wm: gnome-flashback.mkWmApplication { inherit (wm) wmName wmLabel wmCommand; }) flashbackWms) + # For /share/gnome-session/sessions/gnome-flashback-${wmName}.session + ++ (map (wm: gnome-flashback.mkGnomeSession { inherit (wm) wmName wmLabel enableGnomePanel; }) flashbackWms); }) (mkIf serviceCfg.core-os-services.enable { diff --git a/pkgs/desktops/gnome/misc/gnome-flashback/default.nix b/pkgs/desktops/gnome/misc/gnome-flashback/default.nix index 8e769cc6a3af..c908dca0540b 100644 --- a/pkgs/desktops/gnome/misc/gnome-flashback/default.nix +++ b/pkgs/desktops/gnome/misc/gnome-flashback/default.nix @@ -146,18 +146,19 @@ let ''; }; - mkSessionForWm = { wmName, wmLabel, wmCommand, enableGnomePanel }: - let - gnomeSession = writeTextFile { - name = "gnome-flashback-${wmName}-gnome-session"; - destination = "/share/gnome-session/sessions/gnome-flashback-${wmName}.session"; - text = '' - [GNOME Session] - Name=GNOME Flashback (${wmLabel}) - ${requiredComponents wmName enableGnomePanel} - ''; - }; + mkGnomeSession = { wmName, wmLabel, enableGnomePanel }: + writeTextFile { + name = "gnome-flashback-${wmName}-gnome-session"; + destination = "/share/gnome-session/sessions/gnome-flashback-${wmName}.session"; + text = '' + [GNOME Session] + Name=GNOME Flashback (${wmLabel}) + ${requiredComponents wmName enableGnomePanel} + ''; + }; + mkSessionForWm = { wmName, wmLabel, wmCommand }: + let executable = stdenv.mkDerivation { name = "gnome-flashback-${wmName}"; @@ -175,7 +176,7 @@ let makeWrapper ${gnome-session}/bin/gnome-session $out \ --add-flags "--session=gnome-flashback-${wmName} --builtin" \ --set-default XDG_CURRENT_DESKTOP 'GNOME-Flashback:GNOME' \ - --prefix XDG_DATA_DIRS : '${lib.makeSearchPath "share" [ gnomeSession gnome-flashback ]}' + --prefix XDG_DATA_DIRS : '${lib.makeSearchPath "share" [ gnome-flashback ]}' ''; }; From ad65c25dfb3acfe9526d05e5c66a15ee9cec5524 Mon Sep 17 00:00:00 2001 From: Bobby Rong Date: Fri, 6 Oct 2023 18:34:48 +0800 Subject: [PATCH 5/6] gnome.gnome-flashback: Drop --builtin We should be able to find the session and desktop files now. --- .../gnome/misc/gnome-flashback/default.nix | 26 +------------------ 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/pkgs/desktops/gnome/misc/gnome-flashback/default.nix b/pkgs/desktops/gnome/misc/gnome-flashback/default.nix index c908dca0540b..ceb7d8d59a3d 100644 --- a/pkgs/desktops/gnome/misc/gnome-flashback/default.nix +++ b/pkgs/desktops/gnome/misc/gnome-flashback/default.nix @@ -23,7 +23,6 @@ , upower , pam , wrapGAppsHook -, makeWrapper , writeTextFile , xkeyboard_config , xorg @@ -158,29 +157,6 @@ let }; mkSessionForWm = { wmName, wmLabel, wmCommand }: - let - executable = stdenv.mkDerivation { - name = "gnome-flashback-${wmName}"; - - nativeBuildInputs = [ makeWrapper ]; - - dontUnpack = true; - dontConfigure = true; - dontBuild = true; - dontInstall = true; - - # gnome-flashback and gnome-panel need to be added to XDG_DATA_DIRS so that their .desktop files can be found by gnome-session. - # We need to pass the --builtin flag so that gnome-session invokes gnome-session-binary instead of systemd. - # If systemd is used, it doesn't use the environment we set up here and so it can't find the .desktop files. - preFixup = '' - makeWrapper ${gnome-session}/bin/gnome-session $out \ - --add-flags "--session=gnome-flashback-${wmName} --builtin" \ - --set-default XDG_CURRENT_DESKTOP 'GNOME-Flashback:GNOME' \ - --prefix XDG_DATA_DIRS : '${lib.makeSearchPath "share" [ gnome-flashback ]}' - ''; - }; - - in writeTextFile { name = "gnome-flashback-${wmName}-xsession"; @@ -189,7 +165,7 @@ let [Desktop Entry] Name=GNOME Flashback (${wmLabel}) Comment=This session logs you into GNOME Flashback with ${wmLabel} - Exec=${executable} + Exec=${gnome-session}/bin/gnome-session --session=gnome-flashback-${wmName} TryExec=${wmCommand} Type=Application DesktopNames=GNOME-Flashback;GNOME; From 3db8e68328de7e56d03d609907185a0aca18d3f2 Mon Sep 17 00:00:00 2001 From: Bobby Rong Date: Fri, 6 Oct 2023 18:18:23 +0800 Subject: [PATCH 6/6] nixos/tests/gnome-flashback: Restore wait_for_x test Should be passing now. --- nixos/tests/gnome-flashback.nix | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/nixos/tests/gnome-flashback.nix b/nixos/tests/gnome-flashback.nix index 3e59e3fc0340..f486dabc5c40 100644 --- a/nixos/tests/gnome-flashback.nix +++ b/nixos/tests/gnome-flashback.nix @@ -32,14 +32,7 @@ import ./make-test-python.nix ({ pkgs, lib, ...} : { xauthority = "/run/user/${uid}/gdm/Xauthority"; in '' with subtest("Login to GNOME Flashback with GDM"): - # wait_for_x() checks graphical-session.target, which is expected to be - # inactive on gnome-flashback before #228946 (i.e. systemd managed - # gnome-session) is done. - # https://github.com/NixOS/nixpkgs/pull/208060 - # - # Previously this was unconditionally touched by xsessionWrapper but was - # changed in #233981 (we have GNOME-Flashback:GNOME in XDG_CURRENT_DESKTOP). - # machine.wait_for_x() + machine.wait_for_x() machine.wait_until_succeeds('journalctl -t gnome-session-binary --grep "Entering running state"') # Wait for alice to be logged in" machine.wait_for_unit("default.target", "${user.name}")