at 16.09-beta 2.0 kB view raw
1{pkgs, lib, config, ...}: 2 3with lib; 4let 5 inherit (lib) mkOption mkIf optionals literalExample; 6 cfg = config.services.xserver.windowManager.xmonad; 7 xmonad = pkgs.xmonad-with-packages.override { 8 ghcWithPackages = cfg.haskellPackages.ghcWithPackages; 9 packages = self: cfg.extraPackages self ++ 10 optionals cfg.enableContribAndExtras 11 [ self.xmonad-contrib self.xmonad-extras ]; 12 }; 13in 14{ 15 options = { 16 services.xserver.windowManager.xmonad = { 17 enable = mkEnableOption "xmonad"; 18 haskellPackages = mkOption { 19 default = pkgs.haskellPackages; 20 defaultText = "pkgs.haskellPackages"; 21 example = literalExample "pkgs.haskell.packages.ghc784"; 22 description = '' 23 haskellPackages used to build Xmonad and other packages. 24 This can be used to change the GHC version used to build 25 Xmonad and the packages listed in 26 <varname>extraPackages</varname>. 27 ''; 28 }; 29 30 extraPackages = mkOption { 31 default = self: []; 32 example = literalExample '' 33 haskellPackages: [ 34 haskellPackages.xmonad-contrib 35 haskellPackages.monad-logger 36 ] 37 ''; 38 description = '' 39 Extra packages available to ghc when rebuilding Xmonad. The 40 value must be a function which receives the attrset defined 41 in <varname>haskellPackages</varname> as the sole argument. 42 ''; 43 }; 44 45 enableContribAndExtras = mkOption { 46 default = false; 47 example = true; 48 type = lib.types.bool; 49 description = "Enable xmonad-{contrib,extras} in Xmonad."; 50 }; 51 }; 52 }; 53 config = mkIf cfg.enable { 54 services.xserver.windowManager = { 55 session = [{ 56 name = "xmonad"; 57 start = '' 58 ${xmonad}/bin/xmonad & 59 waitPID=$! 60 ''; 61 }]; 62 }; 63 64 environment.systemPackages = [ xmonad ]; 65 }; 66}