lol

gnome.gnome-panel-with-modules: init

Setting X_GNOME_PANEL_MODULESDIR in gnome-session wrapper is confusing to me.

+78 -22
+4 -2
nixos/modules/services/x11/desktop-managers/gnome.nix
··· 229 229 panelModulePackages = mkOption { 230 230 default = [ pkgs.gnome.gnome-applets ]; 231 231 defaultText = literalExpression "[ pkgs.gnome.gnome-applets ]"; 232 - type = types.listOf types.path; 232 + type = types.listOf types.package; 233 233 description = lib.mdDoc '' 234 234 Packages containing modules that should be made available to `gnome-panel` (usually for applets). 235 235 ··· 295 295 (wm: 296 296 pkgs.gnome.gnome-flashback.mkSessionForWm { 297 297 inherit (wm) wmName wmLabel wmCommand enableGnomePanel; 298 - inherit (cfg.flashback) panelModulePackages; 299 298 } 300 299 ) flashbackWms; 301 300 ··· 309 308 310 309 environment.systemPackages = with pkgs.gnome; [ 311 310 gnome-flashback 311 + (gnome-panel-with-modules.override { 312 + panelModulePackages = cfg.flashback.panelModulePackages; 313 + }) 312 314 ]; 313 315 }) 314 316
+2
pkgs/desktops/gnome/default.nix
··· 240 240 241 241 gnome-panel = callPackage ./misc/gnome-panel { }; 242 242 243 + gnome-panel-with-modules = callPackage ./misc/gnome-panel/wrapper.nix { }; 244 + 243 245 gnome-tweaks = callPackage ./misc/gnome-tweaks { }; 244 246 245 247 gpaste = callPackage ./misc/gpaste { };
+6 -20
pkgs/desktops/gnome/misc/gnome-flashback/default.nix
··· 23 23 , upower 24 24 , pam 25 25 , wrapGAppsHook 26 + , makeWrapper 26 27 , writeTextFile 27 28 , xkeyboard_config 28 29 , xorg ··· 127 128 versionPolicy = "odd-unstable"; 128 129 }; 129 130 130 - mkSessionForWm = { wmName, wmLabel, wmCommand, enableGnomePanel, panelModulePackages }: 131 + mkSessionForWm = { wmName, wmLabel, wmCommand, enableGnomePanel }: 131 132 let 132 133 wmApplication = writeTextFile { 133 134 name = "gnome-flashback-${wmName}-wm"; ··· 156 157 ''; 157 158 }; 158 159 159 - # gnome-panel will only look for applets in a single directory so symlink them into here. 160 - panelModulesEnv = buildEnv { 161 - name = "gnome-panel-modules-env"; 162 - # We always want to find the built-in panel applets. 163 - paths = [ gnome-panel gnome-flashback ] ++ panelModulePackages; 164 - pathsToLink = [ "/lib/gnome-panel/modules" ]; 165 - }; 166 - 167 160 executable = stdenv.mkDerivation { 168 161 name = "gnome-flashback-${wmName}"; 169 - nativeBuildInputs = [ glib wrapGAppsHook ]; 170 - buildInputs = [ gnome-flashback ] ++ lib.optionals enableGnomePanel ([ gnome-panel ] ++ panelModulePackages); 162 + 163 + nativeBuildInputs = [ makeWrapper ]; 171 164 172 - # We want to use the wrapGAppsHook mechanism to wrap gnome-session 173 - # with the environment that gnome-flashback and gnome-panel need to 174 - # run, including the configured applet packages. This is only possible 175 - # in the fixup phase, so turn everything else off. 176 165 dontUnpack = true; 177 166 dontConfigure = true; 178 167 dontBuild = true; 179 168 dontInstall = true; 180 - dontWrapGApps = true; # We want to do the wrapping ourselves. 181 169 182 170 # gnome-flashback and gnome-panel need to be added to XDG_DATA_DIRS so that their .desktop files can be found by gnome-session. 183 171 # We need to pass the --builtin flag so that gnome-session invokes gnome-session-binary instead of systemd. ··· 186 174 makeWrapper ${gnome-session}/bin/gnome-session $out \ 187 175 --add-flags "--session=gnome-flashback-${wmName} --builtin" \ 188 176 --set-default XDG_CURRENT_DESKTOP 'GNOME-Flashback:GNOME' \ 189 - --prefix XDG_DATA_DIRS : '${lib.makeSearchPath "share" ([ wmApplication gnomeSession gnome-flashback ] ++ lib.optional enableGnomePanel gnome-panel)}' \ 190 - "''${gappsWrapperArgs[@]}" \ 191 - ${lib.optionalString enableGnomePanel "--set NIX_GNOME_PANEL_MODULESDIR '${panelModulesEnv}/lib/gnome-panel/modules'"} 177 + --prefix XDG_DATA_DIRS : '${lib.makeSearchPath "share" [ wmApplication gnomeSession gnome-flashback ]}' 192 178 ''; 193 179 }; 194 180 ··· 211 197 }; 212 198 213 199 mkSystemdTargetForWm = { wmName, wmLabel, wmCommand, enableGnomePanel }: 214 - runCommand "gnome-flashback-${wmName}.target" {} '' 200 + runCommand "gnome-flashback-${wmName}.target" { } '' 215 201 mkdir -p $out/lib/systemd/user 216 202 cp -r "${gnome-flashback}/lib/systemd/user/gnome-session@gnome-flashback-metacity.target.d" \ 217 203 "$out/lib/systemd/user/gnome-session@gnome-flashback-${wmName}.target.d"
+66
pkgs/desktops/gnome/misc/gnome-panel/wrapper.nix
··· 1 + { stdenv 2 + , lib 3 + , buildEnv 4 + , gnome-panel 5 + , gnome-flashback 6 + , xorg 7 + , glib 8 + , wrapGAppsHook 9 + , panelModulePackages ? [ ] 10 + }: 11 + 12 + let 13 + # We always want to find the built-in panel applets. 14 + selectedPanelModulePackages = [ gnome-panel gnome-flashback ] ++ panelModulePackages; 15 + 16 + panelModulesEnv = buildEnv { 17 + name = "gnome-panel-modules-env"; 18 + paths = selectedPanelModulePackages; 19 + pathsToLink = [ "/lib/gnome-panel/modules" ]; 20 + }; 21 + in 22 + stdenv.mkDerivation { 23 + pname = "${gnome-panel.pname}-with-modules"; 24 + inherit (gnome-panel) version; 25 + 26 + nativeBuildInputs = [ 27 + glib 28 + wrapGAppsHook 29 + ]; 30 + 31 + buildInputs = selectedPanelModulePackages ++ 32 + lib.forEach selectedPanelModulePackages (x: x.buildInputs or [ ]); 33 + 34 + dontUnpack = true; 35 + dontConfigure = true; 36 + dontBuild = true; 37 + 38 + preferLocalBuild = true; 39 + allowSubstitutes = false; 40 + 41 + installPhase = '' 42 + runHook preInstall 43 + 44 + mkdir -p $out 45 + ${xorg.lndir}/bin/lndir -silent ${gnome-panel} $out 46 + 47 + rm -r $out/lib/gnome-panel/modules 48 + ${xorg.lndir}/bin/lndir -silent ${panelModulesEnv} $out 49 + 50 + rm $out/share/applications/gnome-panel.desktop 51 + 52 + substitute ${gnome-panel}/share/applications/gnome-panel.desktop \ 53 + $out/share/applications/gnome-panel.desktop --replace \ 54 + "Exec=${gnome-panel}/bin/gnome-panel" "Exec=$out/bin/gnome-panel" 55 + 56 + runHook postInstall 57 + ''; 58 + 59 + preFixup = '' 60 + gappsWrapperArgs+=( 61 + --set NIX_GNOME_PANEL_MODULESDIR "$out/lib/gnome-panel/modules" 62 + ) 63 + ''; 64 + 65 + meta = gnome-panel.meta // { outputsToInstall = [ "out" ]; }; 66 + }