diff --git a/nixos/modules/services/x11/desktop-managers/gnome3.nix b/nixos/modules/services/x11/desktop-managers/gnome3.nix index ecc7ca0e8fb57f..7544ba4638acfb 100644 --- a/nixos/modules/services/x11/desktop-managers/gnome3.nix +++ b/nixos/modules/services/x11/desktop-managers/gnome3.nix @@ -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; + }; }; diff --git a/pkgs/desktops/gnome-3/core/tracker/default.nix b/pkgs/desktops/gnome-3/core/tracker/default.nix index 14795064cb49f6..d744fc6c87c76e 100644 --- a/pkgs/desktops/gnome-3/core/tracker/default.nix +++ b/pkgs/desktops/gnome-3/core/tracker/default.nix @@ -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 < $@ -+ 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; diff --git a/pkgs/desktops/gnome-3/misc/gnome-panel/default.nix b/pkgs/desktops/gnome-3/misc/gnome-panel/default.nix index b9522e1e3f408b..f9cc0a8aa4f951 100644 --- a/pkgs/desktops/gnome-3/misc/gnome-panel/default.nix +++ b/pkgs/desktops/gnome-3/misc/gnome-panel/default.nix @@ -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 <