summary refs log tree commit diff
path: root/nixos
diff options
context:
space:
mode:
authorMoritz Ulrich <moritz@tarn-vedra.de>2013-12-12 22:33:51 +0100
committerVladimír Čunát <vcunat@gmail.com>2013-12-28 09:29:53 +0100
commit5890215501972ae6805f3adba46f003dd48ce647 (patch)
tree49bd0e6ff6c7ff293db01ed10fec1e527cacb25f /nixos
parent5331088ba14231d09f2f0dacf32213684d79d953 (diff)
downloadnixpkgs-5890215501972ae6805f3adba46f003dd48ce647.tar
nixpkgs-5890215501972ae6805f3adba46f003dd48ce647.tar.gz
nixpkgs-5890215501972ae6805f3adba46f003dd48ce647.tar.bz2
nixpkgs-5890215501972ae6805f3adba46f003dd48ce647.tar.lz
nixpkgs-5890215501972ae6805f3adba46f003dd48ce647.tar.xz
nixpkgs-5890215501972ae6805f3adba46f003dd48ce647.tar.zst
nixpkgs-5890215501972ae6805f3adba46f003dd48ce647.zip
windowManager.xmonad: Make it configurable and extensible.
PR #1366
The previous windowManager.xmonad option only starts xmonad and
doesn't make ghc available. This assumes that the user has GHC with
access to the xmonad package in his PATH when using xmonad.

Xmonad in Nix is now patched to accept the XMONAD_{GHC,XMESSAGE}
environment variables which define the path to either ghc or xmessage.
These are set automatically when using xmonad through
windowManager.xmonad.

My (or specific: @aristidb and my) changes make it possible to use
Xmonad without adding GHC to any profile. This is useful if you want
to add a different GHC to your profile.

This commit introduces some options:

- xmonad.haskellPackages: Controls which Haskell package set & GHC set
  is used to (re)build Xmonad

- xmonad.extraPackages: Function returning a list of additional
  packages to make available to GHC when rebuilding Xmonad

- xmonad.enableContribExtras: Boolean option to build xmonadContrib
  and xmonadExtras.

Signed-off-by: Moritz Ulrich <moritz@tarn-vedra.de>
Diffstat (limited to 'nixos')
-rw-r--r--nixos/modules/services/x11/window-managers/xmonad.nix55
1 files changed, 47 insertions, 8 deletions
diff --git a/nixos/modules/services/x11/window-managers/xmonad.nix b/nixos/modules/services/x11/window-managers/xmonad.nix
index 2cbb5002d6c..87eff38a028 100644
--- a/nixos/modules/services/x11/window-managers/xmonad.nix
+++ b/nixos/modules/services/x11/window-managers/xmonad.nix
@@ -1,10 +1,14 @@
 {pkgs, config, ...}:
 
 let
-  inherit (pkgs.lib) mkOption mkIf;
+  inherit (pkgs.lib) mkOption mkIf optionals literalExample;
   cfg = config.services.xserver.windowManager.xmonad;
+  xmonadEnv = cfg.haskellPackages.ghcWithPackages(self: [
+    self.xmonad
+  ] ++ optionals cfg.enableContribAndExtras [ self.xmonadContrib self.xmonadExtras]
+    ++ optionals (cfg.extraPackages != null) (cfg.extraPackages self));
+  xmessage = pkgs.xlibs.xmessage;
 in
-
 {
   options = {
     services.xserver.windowManager.xmonad = {
@@ -13,18 +17,53 @@ in
         example = true;
         description = "Enable the xmonad window manager.";
       };
+
+      haskellPackages = mkOption {
+        default = pkgs.haskellPackages;
+        defaultText = "pkgs.haskellPackages";
+        example = literalExample "pkgs.haskellPackages_ghc701";
+        description = ''
+          haskellPackages used to build Xmonad and other packages.
+          This can be used to change the GHC version used to build
+          Xmonad and the packages listed in
+          <varname>extraPackages</varname>.
+        '';
+      };
+
+      extraPackages = mkOption {
+        default = null;
+        example = literalExample ''
+          haskellPackages: [
+            haskellPackages.xmonadContrib
+            haskellPackages.monadLogger
+          ]
+        '';
+        description = ''
+          Extra packages available to ghc when rebuilding Xmonad. The
+          value must be a function which receives the attrset defined
+          in <varname>haskellpackages</varname> as the sole argument.
+        '';
+      };
+
+      enableContribAndExtras = mkOption {
+        default = false;
+        example = true;
+        type = pkgs.lib.types.bool;
+        description = "Enable xmonad-{contrib,extras} in Xmonad.";
+      };
     };
   };
-
-  config = {
+  config = mkIf cfg.enable {
     services.xserver.windowManager = {
-      session = mkIf cfg.enable [{
+      session = [{
         name = "xmonad";
-        start = "
-          ${pkgs.haskellPackages.xmonad}/bin/xmonad &
+        start = ''
+          XMONAD_GHC=${xmonadEnv}/bin/ghc XMONAD_XMESSAGE=${xmessage}/bin/xmessage xmonad &
           waitPID=$!
-        ";
+        '';
       }];
     };
+
+    environment.systemPackages = [ cfg.haskellPackages.xmonad ];
   };
 }