Skip to content

Commit

Permalink
nixos/gnome3: add GNOME Flashback sessions option
Browse files Browse the repository at this point in the history
  • Loading branch information
chpatrick committed Jan 21, 2019
1 parent d06f3ca commit b25095b
Show file tree
Hide file tree
Showing 8 changed files with 321 additions and 93 deletions.
49 changes: 47 additions & 2 deletions nixos/modules/services/x11/desktop-managers/gnome3.nix
Expand Up @@ -36,6 +36,8 @@ let
${pkgs.glib.dev}/bin/glib-compile-schemas $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas/
'';

flashbackEnabled = cfg.flashback.enableMetacity || length cfg.flashback.customSessions > 0;

in {

options = {
Expand Down Expand Up @@ -71,6 +73,36 @@ in {
};

debug = mkEnableOption "gnome-session debug messages";

flashback = {
enableMetacity = mkEnableOption "Enable the standard GNOME Flashback session with Metacity.";

customSessions = mkOption {
type = types.listOf (types.submodule {
options = {
wmName = mkOption {
type = types.str;
description = "The filename-compatible name of the window manager to use.";
example = "xmonad";
};

wmLabel = mkOption {
type = types.str;
description = "The pretty name of the window manager to use.";
example = "XMonad";
};

wmCommand = mkOption {
type = types.str;
description = "The executable of the window manager to use.";
example = "\${pkgs.haskellPackages.xmonad}/bin/xmonad";
};
};
});
default = [];
description = "Other GNOME Flashback sessions to enable.";
};
};
};

environment.gnome3.excludePackages = mkOption {
Expand Down Expand Up @@ -113,7 +145,9 @@ in {
services.telepathy.enable = mkDefault true;
networking.networkmanager.enable = mkDefault true;
services.upower.enable = config.powerManagement.enable;
services.dbus.packages = mkIf config.services.printing.enable [ pkgs.system-config-printer ];
services.dbus.packages =
optional config.services.printing.enable pkgs.system-config-printer ++
optional flashbackEnabled pkgs.gnome3.gnome-screensaver;
services.colord.enable = mkDefault true;
services.packagekit.enable = mkDefault true;
hardware.bluetooth.enable = mkDefault true;
Expand All @@ -127,7 +161,15 @@ in {

fonts.fonts = [ pkgs.dejavu_fonts pkgs.cantarell-fonts ];

services.xserver.displayManager.extraSessionFilePackages = [ pkgs.gnome3.gnome-session ];
services.xserver.displayManager.extraSessionFilePackages = [ pkgs.gnome3.gnome-session ]
++ map
(wm: pkgs.gnome3.gnome-flashback.mkSessionForWm {
inherit (wm) wmName wmLabel wmCommand;
}) (optional cfg.flashback.enableMetacity {
wmName = "metacity";
wmLabel = "Metacity";
wmCommand = "${pkgs.gnome3.metacity}/bin/metacity";
} ++ cfg.flashback.customSessions);

environment.extraInit = ''
${concatMapStrings (p: ''
Expand Down Expand Up @@ -177,6 +219,9 @@ in {
"/share/nautilus-python/extensions"
];

security.pam.services.gnome-screensaver = mkIf flashbackEnabled {
enableGnomeKeyring = true;
};
};


Expand Down
8 changes: 8 additions & 0 deletions pkgs/desktops/gnome-3/core/tracker/default.nix
Expand Up @@ -46,6 +46,14 @@ in stdenv.mkDerivation rec {
postPatch = ''
patchShebangs utils/g-ir-merge/g-ir-merge
patchShebangs utils/data-generators/cc/generate
# make .desktop Exec absolute
patch -p0 <<END_PATCH
+++ src/tracker-store/tracker-store.desktop.in.in
@@ -4 +4 @@
-Exec=gdbus call -e -d org.freedesktop.DBus -o /org/freedesktop/DBus -m org.freedesktop.DBus.StartServiceByName org.freedesktop.Tracker1 0
+Exec=${glib.dev}/bin/gdbus call -e -d org.freedesktop.DBus -o /org/freedesktop/DBus -m org.freedesktop.DBus.StartServiceByName org.freedesktop.Tracker1 0
END_PATCH
'';

postInstall = ''
Expand Down
2 changes: 2 additions & 0 deletions pkgs/desktops/gnome-3/default.nix
Expand Up @@ -348,6 +348,8 @@ lib.makeScope pkgs.newScope (self: with self; {

gnome-panel = callPackage ./misc/gnome-panel { };

gnome-screensaver = callPackage ./misc/gnome-screensaver { };

gnome-tweaks = callPackage ./misc/gnome-tweaks { };

gpaste = callPackage ./misc/gpaste { };
Expand Down
200 changes: 139 additions & 61 deletions pkgs/desktops/gnome-3/misc/gnome-flashback/default.nix
Expand Up @@ -6,6 +6,7 @@
, glib
, gnome-bluetooth
, gnome-desktop
, gnome-panel
, gnome-session
, gnome3
, gsettings-desktop-schemas
Expand All @@ -16,77 +17,154 @@
, libpulseaudio
, libxkbfile
, libxml2
, metacity
, pkgconfig
, polkit
, substituteAll
, upower
, xkeyboard_config }:
, wrapGAppsHook
, writeTextFile
, writeShellScriptBin
, xkeyboard_config
}:

let
pname = "gnome-flashback";
version = "3.30.0";
in stdenv.mkDerivation rec {
name = "${pname}-${version}";
requiredComponents = wmName: "RequiredComponents=${wmName};gnome-flashback-init;gnome-flashback;gnome-panel;org.gnome.SettingsDaemon.A11ySettings;org.gnome.SettingsDaemon.Clipboard;org.gnome.SettingsDaemon.Color;org.gnome.SettingsDaemon.Datetime;org.gnome.SettingsDaemon.Housekeeping;org.gnome.SettingsDaemon.Keyboard;org.gnome.SettingsDaemon.MediaKeys;org.gnome.SettingsDaemon.Mouse;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.Wacom;org.gnome.SettingsDaemon.XSettings;";
gnome-flashback = stdenv.mkDerivation rec {
name = "${pname}-${version}";

src = fetchurl {
url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
sha256 = "18rwql2pi78155l9zp1i50xfi5z8xz2l08m9d81x6qqbfr1nyy57";
};
src = fetchurl {
url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${name}.tar.xz";
sha256 = "18rwql2pi78155l9zp1i50xfi5z8xz2l08m9d81x6qqbfr1nyy57";
};

patches =[
# overrides do not respect gsettingsschemasdir
# https://gitlab.gnome.org/GNOME/gnome-flashback/issues/9
(fetchpatch {
url = https://gitlab.gnome.org/GNOME/gnome-flashback/commit/a55530f58ccd600414a5420b287868ab7d219705.patch;
sha256 = "1la94lhhb9zlw7bnbpl6hl26zv3kxbsvgx996mhph720wxg426mh";
})
];

# make .desktop Execs absolute
postPatch = ''
patch -p0 <<END_PATCH
+++ data/applications/gnome-flashback-init.desktop.in
@@ -4 +4 @@
-Exec=gnome-flashback --initialize
+Exec=$out/bin/gnome-flashback --initialize
+++ data/applications/gnome-flashback.desktop.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"}' $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 -r $out/libexec
'';

nativeBuildInputs = [
autoreconfHook
gettext
libxml2
pkgconfig
wrapGAppsHook
];

buildInputs = [
glib
gnome-bluetooth
gnome-desktop
gsettings-desktop-schemas
gtk
ibus
libcanberra-gtk3
libpulseaudio
libxkbfile
polkit
upower
xkeyboard_config
];

doCheck = true;

patches =[
(substituteAll {
src = ./fix-paths.patch;
inherit metacity;
gnomeSession = gnome-session;
})

# overrides do not respect gsettingsschemasdir
# https://gitlab.gnome.org/GNOME/gnome-flashback/issues/9
(fetchpatch {
url = https://gitlab.gnome.org/GNOME/gnome-flashback/commit/a55530f58ccd600414a5420b287868ab7d219705.patch;
sha256 = "1la94lhhb9zlw7bnbpl6hl26zv3kxbsvgx996mhph720wxg426mh";
})
];

nativeBuildInputs = [
autoreconfHook
gettext
libxml2
pkgconfig
];

buildInputs = [
glib
gnome-bluetooth
gnome-desktop
gsettings-desktop-schemas
gtk
ibus
libcanberra-gtk3
libpulseaudio
libxkbfile
polkit
upower
xkeyboard_config
];

doCheck = true;

enableParallelBuilding = true;

passthru = {
updateScript = gnome3.updateScript {
packageName = pname;
attrPath = "gnome3.${pname}";
enableParallelBuilding = true;

passthru = {
updateScript = gnome3.updateScript {
packageName = pname;
attrPath = "gnome3.${pname}";
};

mkSessionForWm = { wmName, wmLabel, wmCommand }:
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}
'';
};

executable = writeShellScriptBin "gnome-flashback-${wmName}" ''
if [ -z $XDG_CURRENT_DESKTOP ]; then
export XDG_CURRENT_DESKTOP="GNOME-Flashback:GNOME"
fi
export XDG_DATA_DIRS=${wmApplication}/share:${gnomeSession}/share:${gnome-flashback}/share:${gnome-panel}/share:$XDG_DATA_DIRS
exec ${gnome-session}/bin/gnome-session --session=gnome-flashback-${wmName} "$@"
'';

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}/bin/gnome-flashback-${wmName}
TryExec=${wmCommand}
Type=Application
DesktopNames=GNOME-Flashback;GNOME;
'';
};
};
};

meta = with stdenv.lib; {
description = "GNOME 2.x-like session for GNOME 3";
homepage = https://wiki.gnome.org/Projects/GnomeFlashback;
license = licenses.gpl2;
maintainers = gnome3.maintainers;
platforms = platforms.linux;
meta = with stdenv.lib; {
description = "GNOME 2.x-like session for GNOME 3";
homepage = https://wiki.gnome.org/Projects/GnomeFlashback;
license = licenses.gpl2;
maintainers = gnome3.maintainers;
platforms = platforms.linux;
};
};
}
in gnome-flashback
30 changes: 0 additions & 30 deletions pkgs/desktops/gnome-3/misc/gnome-flashback/fix-paths.patch

This file was deleted.

18 changes: 18 additions & 0 deletions pkgs/desktops/gnome-3/misc/gnome-panel/default.nix
Expand Up @@ -8,6 +8,7 @@
, gettext
, glib
, gnome-desktop
, gnome-flashback
, gnome-menus
, gnome3
, gtk
Expand Down Expand Up @@ -43,6 +44,23 @@ in stdenv.mkDerivation rec {
})
];

# make .desktop Exec absolute
postPatch = ''
patch -p0 <<END_PATCH
+++ gnome-panel/gnome-panel.desktop.in
@@ -7 +7 @@
-Exec=gnome-panel
+Exec=$out/bin/gnome-panel
END_PATCH
'';

preFixup = ''
gappsWrapperArgs+=(
--prefix XDG_DATA_DIRS : "${gnome-menus}/share:${gnome-flashback}/share"
--prefix XDG_CONFIG_DIRS : "${gnome-menus}/etc/xdg:${gnome-flashback}/etc/xdg"
)
'';

nativeBuildInputs = [
autoreconfHook
gettext
Expand Down

0 comments on commit b25095b

Please sign in to comment.