summary refs log tree commit diff
path: root/nixos
diff options
context:
space:
mode:
authorlassulus <lassulus@lassul.us>2018-11-28 23:08:20 +0100
committerlassulus <lassulus@lassul.us>2018-12-15 14:50:20 +0100
commit3eefc0b90923c02adad9d841b34e22c14adfdc08 (patch)
tree6a98025b2f165dc0c7fed2f934ea99ac23ec5add /nixos
parente814fba3168703eed6e2b67200299ea40beca418 (diff)
downloadnixpkgs-3eefc0b90923c02adad9d841b34e22c14adfdc08.tar
nixpkgs-3eefc0b90923c02adad9d841b34e22c14adfdc08.tar.gz
nixpkgs-3eefc0b90923c02adad9d841b34e22c14adfdc08.tar.bz2
nixpkgs-3eefc0b90923c02adad9d841b34e22c14adfdc08.tar.lz
nixpkgs-3eefc0b90923c02adad9d841b34e22c14adfdc08.tar.xz
nixpkgs-3eefc0b90923c02adad9d841b34e22c14adfdc08.tar.zst
nixpkgs-3eefc0b90923c02adad9d841b34e22c14adfdc08.zip
xmonad service: add .config option
Diffstat (limited to 'nixos')
-rw-r--r--nixos/modules/services/x11/window-managers/xmonad.nix33
-rw-r--r--nixos/tests/xmonad.nix10
2 files changed, 42 insertions, 1 deletions
diff --git a/nixos/modules/services/x11/window-managers/xmonad.nix b/nixos/modules/services/x11/window-managers/xmonad.nix
index 43de746ab1f..a6055f26789 100644
--- a/nixos/modules/services/x11/window-managers/xmonad.nix
+++ b/nixos/modules/services/x11/window-managers/xmonad.nix
@@ -10,6 +10,14 @@ let
                      optionals cfg.enableContribAndExtras
                      [ self.xmonad-contrib self.xmonad-extras ];
   };
+  xmonadBin = pkgs.writers.writeHaskell "xmonad" {
+    ghc = cfg.haskellPackages.ghc;
+    libraries = [ cfg.haskellPackages.xmonad ] ++
+                cfg.extraPackages cfg.haskellPackages ++
+                optionals cfg.enableContribAndExtras
+                (with cfg.haskellPackages; [ xmonad-contrib xmonad-extras ]);
+  } cfg.config;
+
 in
 {
   options = {
@@ -48,13 +56,36 @@ in
         type = lib.types.bool;
         description = "Enable xmonad-{contrib,extras} in Xmonad.";
       };
+
+      config = mkOption {
+        default = null;
+        type = with lib.types; nullOr (either path string);
+        description = ''
+          Configuration from which XMonad gets compiled. If no value
+          is specified, the xmonad config from $HOME/.xmonad is taken.
+          If you use xmonad --recompile, $HOME/.xmonad will be taken as
+          the configuration, but on the next restart of display-manager
+          this config will be reapplied.
+        '';
+        example = ''
+          import XMonad
+
+          main = launch defaultConfig
+                 { modMask = mod4Mask -- Use Super instead of Alt
+                 , terminal = "urxvt"
+                 }
+        '';
+      };
     };
   };
   config = mkIf cfg.enable {
     services.xserver.windowManager = {
       session = [{
         name = "xmonad";
-        start = ''
+        start = if (cfg.config != null) then ''
+          ${xmonadBin}
+          waitPID=$!
+        '' else ''
           ${xmonad}/bin/xmonad &
           waitPID=$!
         '';
diff --git a/nixos/tests/xmonad.nix b/nixos/tests/xmonad.nix
index 61fa7c1a67d..a552e9dc5e0 100644
--- a/nixos/tests/xmonad.nix
+++ b/nixos/tests/xmonad.nix
@@ -12,6 +12,12 @@ import ./make-test.nix ({ pkgs, ...} : {
       enable = true;
       enableContribAndExtras = true;
       extraPackages = with pkgs.haskellPackages; haskellPackages: [ xmobar ];
+      config = ''
+        import XMonad
+        import XMonad.Util.EZConfig
+        main = launch $ def `additionalKeysP` myKeys
+        myKeys = [ ("M-C-x", spawn "xterm") ]
+      '';
     };
   };
 
@@ -19,6 +25,10 @@ import ./make-test.nix ({ pkgs, ...} : {
     $machine->waitForX;
     $machine->waitForFile("/home/alice/.Xauthority");
     $machine->succeed("xauth merge ~alice/.Xauthority");
+    $machine->sendKeys("alt-ctrl-x");
+    $machine->waitForWindow(qr/machine.*alice/);
+    $machine->sleep(1);
+    $machine->screenshot("terminal");
     $machine->waitUntilSucceeds("xmonad --restart");
     $machine->sleep(3);
     $machine->sendKeys("alt-shift-ret");