mirror of
https://github.com/ilyakooo0/nixpkgs.git
synced 2024-11-11 04:02:55 +03:00
17c59fd8d5
Three autostarted desktop services are failing to start in the gnome-flashback desktop manager service, leaving warnings in the log: gnome-flashback-clipboard gnome-flashback-idle-monitor gnome-flashback-media-keys Fix by only remove $out/libexec/gnome-flashback-metacity (which is still not useful since we implement that ourselves) instead of the entire $out/libexec. The consequence of gnome-flashback-idle-monitor not running is that the desktop manager does not get the message that the system is idle, so the screen never dims or locks.
231 lines
7.7 KiB
Nix
231 lines
7.7 KiB
Nix
{ stdenv
|
|
, lib
|
|
, autoreconfHook
|
|
, fetchurl
|
|
, gettext
|
|
, glib
|
|
, gnome-bluetooth
|
|
, gnome-desktop
|
|
, gnome-panel
|
|
, gnome-session
|
|
, gnome
|
|
, gsettings-desktop-schemas
|
|
, gtk3
|
|
, ibus
|
|
, libcanberra-gtk3
|
|
, libpulseaudio
|
|
, libxkbfile
|
|
, libxml2
|
|
, pkg-config
|
|
, polkit
|
|
, gdm
|
|
, systemd
|
|
, upower
|
|
, pam
|
|
, wrapGAppsHook
|
|
, writeTextFile
|
|
, xkeyboard_config
|
|
, xorg
|
|
, runCommand
|
|
, buildEnv
|
|
}:
|
|
let
|
|
pname = "gnome-flashback";
|
|
version = "3.46.0";
|
|
|
|
# From data/sessions/Makefile.am
|
|
requiredComponentsCommon = enableGnomePanel:
|
|
[ "gnome-flashback" ]
|
|
++ lib.optional enableGnomePanel "gnome-panel";
|
|
requiredComponentsGsd = [
|
|
"org.gnome.SettingsDaemon.A11ySettings"
|
|
"org.gnome.SettingsDaemon.Color"
|
|
"org.gnome.SettingsDaemon.Datetime"
|
|
"org.gnome.SettingsDaemon.Housekeeping"
|
|
"org.gnome.SettingsDaemon.Keyboard"
|
|
"org.gnome.SettingsDaemon.MediaKeys"
|
|
"org.gnome.SettingsDaemon.Power"
|
|
"org.gnome.SettingsDaemon.PrintNotifications"
|
|
"org.gnome.SettingsDaemon.Rfkill"
|
|
"org.gnome.SettingsDaemon.ScreensaverProxy"
|
|
"org.gnome.SettingsDaemon.Sharing"
|
|
"org.gnome.SettingsDaemon.Smartcard"
|
|
"org.gnome.SettingsDaemon.Sound"
|
|
"org.gnome.SettingsDaemon.UsbProtection"
|
|
"org.gnome.SettingsDaemon.Wacom"
|
|
"org.gnome.SettingsDaemon.XSettings"
|
|
];
|
|
requiredComponents = wmName: enableGnomePanel: "RequiredComponents=${lib.concatStringsSep ";" ([ wmName ] ++ requiredComponentsCommon enableGnomePanel ++ requiredComponentsGsd)};";
|
|
|
|
gnome-flashback = stdenv.mkDerivation rec {
|
|
name = "${pname}-${version}";
|
|
|
|
src = fetchurl {
|
|
url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${name}.tar.xz";
|
|
sha256 = "sha256-eo1cAzEOTfrdGKZeAKN3QQMq/upUGN1oBKl1xLCYAEU=";
|
|
};
|
|
|
|
# make .desktop Execs absolute
|
|
postPatch = ''
|
|
patch -p0 <<END_PATCH
|
|
+++ data/applications/gnome-flashback.desktop.in.in
|
|
@@ -4 +4 @@
|
|
-Exec=gnome-flashback
|
|
+Exec=$out/bin/gnome-flashback
|
|
END_PATCH
|
|
'';
|
|
|
|
postInstall = ''
|
|
# Check that our expected RequiredComponents match the stock session files, but then don't install them.
|
|
# They can be installed using mkSessionForWm.
|
|
grep '${requiredComponents "metacity" true}' $out/share/gnome-session/sessions/gnome-flashback-metacity.session || (echo "RequiredComponents have changed, please update gnome-flashback/default.nix."; false)
|
|
|
|
rm -r $out/share/gnome-session
|
|
rm -r $out/share/xsessions
|
|
rm $out/libexec/gnome-flashback-metacity
|
|
'';
|
|
|
|
nativeBuildInputs = [
|
|
autoreconfHook
|
|
gettext
|
|
libxml2
|
|
pkg-config
|
|
wrapGAppsHook
|
|
];
|
|
|
|
buildInputs = [
|
|
glib
|
|
gnome-bluetooth
|
|
gnome-desktop
|
|
gsettings-desktop-schemas
|
|
gtk3
|
|
ibus
|
|
libcanberra-gtk3
|
|
libpulseaudio
|
|
libxkbfile
|
|
xorg.libXxf86vm
|
|
polkit
|
|
gdm
|
|
gnome-panel
|
|
systemd
|
|
upower
|
|
pam
|
|
xkeyboard_config
|
|
];
|
|
|
|
doCheck = true;
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
PKG_CONFIG_LIBGNOME_PANEL_LAYOUTSDIR = "${placeholder "out"}/share/gnome-panel/layouts";
|
|
PKG_CONFIG_LIBGNOME_PANEL_MODULESDIR = "${placeholder "out"}/lib/gnome-panel/modules";
|
|
|
|
passthru = {
|
|
updateScript = gnome.updateScript {
|
|
packageName = pname;
|
|
attrPath = "gnome.${pname}";
|
|
versionPolicy = "odd-unstable";
|
|
};
|
|
|
|
mkSessionForWm = { wmName, wmLabel, wmCommand, enableGnomePanel, panelModulePackages }:
|
|
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";
|
|
text = ''
|
|
[GNOME Session]
|
|
Name=GNOME Flashback (${wmLabel})
|
|
${requiredComponents wmName enableGnomePanel}
|
|
'';
|
|
};
|
|
|
|
# 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.
|
|
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.
|
|
# 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" ([ wmApplication gnomeSession gnome-flashback ] ++ lib.optional enableGnomePanel gnome-panel)}' \
|
|
"''${gappsWrapperArgs[@]}" \
|
|
${lib.optionalString enableGnomePanel "--set NIX_GNOME_PANEL_MODULESDIR '${panelModulesEnv}/lib/gnome-panel/modules'"}
|
|
'';
|
|
};
|
|
|
|
in
|
|
writeTextFile
|
|
{
|
|
name = "gnome-flashback-${wmName}-xsession";
|
|
destination = "/share/xsessions/gnome-flashback-${wmName}.desktop";
|
|
text = ''
|
|
[Desktop Entry]
|
|
Name=GNOME Flashback (${wmLabel})
|
|
Comment=This session logs you into GNOME Flashback with ${wmLabel}
|
|
Exec=${executable}
|
|
TryExec=${wmCommand}
|
|
Type=Application
|
|
DesktopNames=GNOME-Flashback;GNOME;
|
|
'';
|
|
} // {
|
|
providedSessions = [ "gnome-flashback-${wmName}" ];
|
|
};
|
|
|
|
mkSystemdTargetForWm = { wmName, wmLabel, wmCommand, enableGnomePanel }:
|
|
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"
|
|
'';
|
|
};
|
|
|
|
meta = with lib; {
|
|
description = "GNOME 2.x-like session for GNOME 3";
|
|
homepage = "https://wiki.gnome.org/Projects/GnomeFlashback";
|
|
license = licenses.gpl2;
|
|
maintainers = teams.gnome.members;
|
|
platforms = platforms.linux;
|
|
};
|
|
};
|
|
in
|
|
gnome-flashback
|