nixos/gnome3: add GNOME Flashback sessions option
This commit is contained in:
parent
d06f3ca44e
commit
b25095bcda
8 changed files with 316 additions and 88 deletions
|
@ -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 = {
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
|
@ -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: ''
|
||||
|
@ -177,6 +219,9 @@ in {
|
|||
"/share/nautilus-python/extensions"
|
||||
];
|
||||
|
||||
security.pam.services.gnome-screensaver = mkIf flashbackEnabled {
|
||||
enableGnomeKeyring = true;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -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 = ''
|
||||
|
|
|
@ -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 { };
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
, glib
|
||||
, gnome-bluetooth
|
||||
, gnome-desktop
|
||||
, gnome-panel
|
||||
, gnome-session
|
||||
, gnome3
|
||||
, gsettings-desktop-schemas
|
||||
|
@ -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 =[
|
||||
(substituteAll {
|
||||
src = ./fix-paths.patch;
|
||||
inherit metacity;
|
||||
gnomeSession = gnome-session;
|
||||
})
|
||||
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";
|
||||
})
|
||||
];
|
||||
|
||||
# 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
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [
|
||||
autoreconfHook
|
||||
gettext
|
||||
libxml2
|
||||
pkgconfig
|
||||
];
|
||||
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)
|
||||
|
||||
buildInputs = [
|
||||
glib
|
||||
gnome-bluetooth
|
||||
gnome-desktop
|
||||
gsettings-desktop-schemas
|
||||
gtk
|
||||
ibus
|
||||
libcanberra-gtk3
|
||||
libpulseaudio
|
||||
libxkbfile
|
||||
polkit
|
||||
upower
|
||||
xkeyboard_config
|
||||
];
|
||||
rm -r $out/share/gnome-session
|
||||
rm -r $out/share/xsessions
|
||||
rm -r $out/libexec
|
||||
'';
|
||||
|
||||
doCheck = true;
|
||||
nativeBuildInputs = [
|
||||
autoreconfHook
|
||||
gettext
|
||||
libxml2
|
||||
pkgconfig
|
||||
wrapGAppsHook
|
||||
];
|
||||
|
||||
enableParallelBuilding = true;
|
||||
buildInputs = [
|
||||
glib
|
||||
gnome-bluetooth
|
||||
gnome-desktop
|
||||
gsettings-desktop-schemas
|
||||
gtk
|
||||
ibus
|
||||
libcanberra-gtk3
|
||||
libpulseaudio
|
||||
libxkbfile
|
||||
polkit
|
||||
upower
|
||||
xkeyboard_config
|
||||
];
|
||||
|
||||
passthru = {
|
||||
updateScript = gnome3.updateScript {
|
||||
packageName = pname;
|
||||
attrPath = "gnome3.${pname}";
|
||||
doCheck = true;
|
||||
|
||||
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
|
||||
|
|
|
@ -1,30 +0,0 @@
|
|||
--- a/data/Makefile.am
|
||||
+++ b/data/Makefile.am
|
||||
@@ -22,7 +22,7 @@
|
||||
echo 'if [ -z $$XDG_CURRENT_DESKTOP ]; then' && \
|
||||
echo ' export XDG_CURRENT_DESKTOP="GNOME-Flashback:GNOME"' && \
|
||||
echo 'fi' && echo '' && \
|
||||
- echo 'exec gnome-session --session=gnome-flashback-compiz "$$@"') > $@
|
||||
+ echo 'exec @gnomeSession@/bin/gnome-session --session=gnome-flashback-compiz "$$@"') > $@
|
||||
$(AM_V_at) chmod a+x $@
|
||||
|
||||
gnome-flashback-metacity: Makefile
|
||||
@@ -30,7 +30,7 @@
|
||||
echo 'if [ -z $$XDG_CURRENT_DESKTOP ]; then' && \
|
||||
echo ' export XDG_CURRENT_DESKTOP="GNOME-Flashback:GNOME"' && \
|
||||
echo 'fi' && echo '' && \
|
||||
- echo 'exec gnome-session --session=gnome-flashback-metacity --disable-acceleration-check "$$@"') > $@
|
||||
+ echo 'exec @gnomeSession@/bin/gnome-session --session=gnome-flashback-metacity --disable-acceleration-check "$$@"') > $@
|
||||
$(AM_V_at) chmod a+x $@
|
||||
|
||||
CLEANFILES = \
|
||||
--- a/data/xsessions/gnome-flashback-metacity.desktop.in.in
|
||||
+++ b/data/xsessions/gnome-flashback-metacity.desktop.in.in
|
||||
@@ -2,6 +2,6 @@
|
||||
Name=GNOME Flashback (Metacity)
|
||||
Comment=This session logs you into GNOME Flashback with Metacity
|
||||
Exec=@libexecdir@/gnome-flashback-metacity
|
||||
-TryExec=metacity
|
||||
+TryExec=@metacity@/bin/metacity
|
||||
Type=Application
|
||||
DesktopNames=GNOME-Flashback;GNOME;
|
|
@ -8,6 +8,7 @@
|
|||
, gettext
|
||||
, glib
|
||||
, gnome-desktop
|
||||
, gnome-flashback
|
||||
, gnome-menus
|
||||
, gnome3
|
||||
, gtk
|
||||
|
@ -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
|
||||
|
|
96
pkgs/desktops/gnome-3/misc/gnome-screensaver/default.nix
Normal file
96
pkgs/desktops/gnome-3/misc/gnome-screensaver/default.nix
Normal file
|
@ -0,0 +1,96 @@
|
|||
{ stdenv
|
||||
, fetchgit
|
||||
, fetchurl
|
||||
, autoreconfHook
|
||||
, dbus-glib
|
||||
, glib
|
||||
, gnome-common
|
||||
, gnome-desktop
|
||||
, gnome3
|
||||
, gtk
|
||||
, gsettings-desktop-schemas
|
||||
, pkgconfig
|
||||
, intltool
|
||||
, pam
|
||||
, systemd
|
||||
, wrapGAppsHook
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "gnome-screensaver";
|
||||
version = "3.6.1";
|
||||
|
||||
# the original package is deprecated and the Ubuntu version has a number of useful patches
|
||||
src = fetchgit {
|
||||
url = "https://git.launchpad.net/ubuntu/+source/gnome-screensaver";
|
||||
rev = "4f7b666131dec060a5aac9117f395ac522a627b4";
|
||||
sha256 = "15xqgcpm825cy3rm8pj00qlblq66svmh06lcw8qi74a3g0xcir87";
|
||||
};
|
||||
|
||||
# from debian/patches/series
|
||||
patches = map (patch: "debian/patches/${patch}") [
|
||||
"00git_logind_check.patch"
|
||||
"01_no_autostart.patch"
|
||||
"03_fix_ltsp-fading.patch"
|
||||
"05_dbus_service.patch"
|
||||
"10_legacy_scrsvr_inhibit.patch"
|
||||
"13_nvidia_gamma_fade_fallback.patch"
|
||||
"14_no_fade_on_user_switch.patch"
|
||||
"15_dont_crash_on_no_fade.patch"
|
||||
"16_dont_crash_in_kvm.patch"
|
||||
"17_remove_top_panel.patch"
|
||||
"18_unity_dialog_layout.patch"
|
||||
"24_use_user_settings.patch"
|
||||
"25_fix_lock_command.patch"
|
||||
"27_lightdm_switch_user.patch"
|
||||
"28_blocking_return.patch"
|
||||
"29_handle_expired_creds.patch"
|
||||
# these two patches are ubuntu-specific
|
||||
# "30_ubuntu-lock-on-suspend_gsetting.patch"
|
||||
# "31_lock_screen_on_suspend.patch"
|
||||
"32_input_sources_switcher.patch"
|
||||
"move-not-nuke.patch"
|
||||
"allow-replacement"
|
||||
"libsystemd.patch"
|
||||
"0001-gs-lock-plug-Disconnect-signal-handler-from-right-ob.patch"
|
||||
"33_budgie_support.patch"
|
||||
] ++ [ ./fix-dbus-service-dir.patch ];
|
||||
|
||||
nativeBuildInputs = [
|
||||
autoreconfHook
|
||||
intltool
|
||||
wrapGAppsHook
|
||||
gnome-common
|
||||
pkgconfig
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
glib
|
||||
gtk
|
||||
gnome-desktop
|
||||
dbus-glib
|
||||
pam
|
||||
systemd
|
||||
];
|
||||
|
||||
configureFlags = [ "--enable-locking" "--with-systemd=yes" ];
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
doCheck = true;
|
||||
|
||||
passthru = {
|
||||
updateScript = gnome3.updateScript {
|
||||
packageName = pname;
|
||||
attrPath = "gnome3.${pname}";
|
||||
};
|
||||
};
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "Component of Gnome Flashback that provides screen locking";
|
||||
homepage = https://wiki.gnome.org/Projects/GnomeScreensaver;
|
||||
license = licenses.gpl2Plus;
|
||||
maintainers = gnome3.maintainers;
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
--- a/configure.ac 2019-01-20 20:28:01.309231507 +0100
|
||||
+++ b/configure.ac 2019-01-20 20:31:54.927978927 +0100
|
||||
@@ -137,7 +137,7 @@
|
||||
|
||||
# Find out where the session service file goes
|
||||
# The sad sed hack is recomended by section 27.10 of the automake manual.
|
||||
-DBUS_SESSION_SERVICE_DIR=`pkg-config --variable session_bus_services_dir dbus-1 | sed -e 's,/usr/share,${datarootdir},g'`
|
||||
+DBUS_SESSION_SERVICE_DIR=`pkg-config --variable session_bus_services_dir dbus-1 --define-variable 'datadir=${datadir}'`
|
||||
AC_SUBST(DBUS_SESSION_SERVICE_DIR)
|
||||
|
||||
dnl ---------------------------------------------------------------------------
|
Loading…
Reference in a new issue