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