summary refs log tree commit diff
path: root/nixos
diff options
context:
space:
mode:
authorPatrick Chilton <chpatrick@gmail.com>2019-01-09 09:52:58 +0100
committerPatrick Chilton <chpatrick@gmail.com>2019-01-21 11:17:49 +0100
commitb25095bcda9a8f8d401b7ed27f412654c905adf0 (patch)
tree053879d2b0fe59b8b0bb49d53e4956e0c0a2d0ed /nixos
parentd06f3ca44eb76b8d1c98d56f86d7f811b2395bf0 (diff)
downloadnixpkgs-b25095bcda9a8f8d401b7ed27f412654c905adf0.tar
nixpkgs-b25095bcda9a8f8d401b7ed27f412654c905adf0.tar.gz
nixpkgs-b25095bcda9a8f8d401b7ed27f412654c905adf0.tar.bz2
nixpkgs-b25095bcda9a8f8d401b7ed27f412654c905adf0.tar.lz
nixpkgs-b25095bcda9a8f8d401b7ed27f412654c905adf0.tar.xz
nixpkgs-b25095bcda9a8f8d401b7ed27f412654c905adf0.tar.zst
nixpkgs-b25095bcda9a8f8d401b7ed27f412654c905adf0.zip
nixos/gnome3: add GNOME Flashback sessions option
Diffstat (limited to 'nixos')
-rw-r--r--nixos/modules/services/x11/desktop-managers/gnome3.nix49
1 files changed, 47 insertions, 2 deletions
diff --git a/nixos/modules/services/x11/desktop-managers/gnome3.nix b/nixos/modules/services/x11/desktop-managers/gnome3.nix
index ecc7ca0e8fb..7544ba4638a 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;
+    };
   };