nixos/xmonad: move to haskell-ng and make a wrapper

This commit is contained in:
Nikolay Amiantov 2015-02-03 01:05:23 +03:00
parent f8038b0c6c
commit b7bb524f04
6 changed files with 46 additions and 15 deletions

View File

@ -3,11 +3,12 @@
let let
inherit (lib) mkOption mkIf optionals literalExample; inherit (lib) mkOption mkIf optionals literalExample;
cfg = config.services.xserver.windowManager.xmonad; cfg = config.services.xserver.windowManager.xmonad;
xmonadEnv = cfg.haskellPackages.ghcWithPackages(self: [ xmonad = pkgs.xmonad-with-packages.override {
self.xmonad ghcWithPackages = cfg.haskellPackages.ghcWithPackages;
] ++ optionals cfg.enableContribAndExtras [ self.xmonadContrib self.xmonadExtras] packages = self: cfg.extraPackages self ++
++ optionals (cfg.extraPackages != null) (cfg.extraPackages self)); optionals cfg.enableContribAndExtras
xmessage = pkgs.xlibs.xmessage; [ self.xmonad-contrib self.xmonad-extras ];
};
in in
{ {
options = { options = {
@ -19,9 +20,9 @@ in
}; };
haskellPackages = mkOption { haskellPackages = mkOption {
default = pkgs.haskellPackages; default = pkgs.haskellngPackages;
defaultText = "pkgs.haskellPackages"; defaultText = "pkgs.haskellngPackages";
example = literalExample "pkgs.haskellPackages_ghc701"; example = literalExample "pkgs.haskell-ng.packages.ghc784";
description = '' description = ''
haskellPackages used to build Xmonad and other packages. haskellPackages used to build Xmonad and other packages.
This can be used to change the GHC version used to build This can be used to change the GHC version used to build
@ -31,17 +32,17 @@ in
}; };
extraPackages = mkOption { extraPackages = mkOption {
default = null; default = self: [];
example = literalExample '' example = literalExample ''
haskellPackages: [ haskellPackages: [
haskellPackages.xmonadContrib haskellPackages.xmonad-contrib
haskellPackages.monadLogger haskellPackages.monad-logger
] ]
''; '';
description = '' description = ''
Extra packages available to ghc when rebuilding Xmonad. The Extra packages available to ghc when rebuilding Xmonad. The
value must be a function which receives the attrset defined value must be a function which receives the attrset defined
in <varname>haskellpackages</varname> as the sole argument. in <varname>haskellPackages</varname> as the sole argument.
''; '';
}; };
@ -58,12 +59,12 @@ in
session = [{ session = [{
name = "xmonad"; name = "xmonad";
start = '' start = ''
XMONAD_GHC=${xmonadEnv}/bin/ghc XMONAD_XMESSAGE=${xmessage}/bin/xmessage xmonad & ${xmonad}/bin/xmonad &
waitPID=$! waitPID=$!
''; '';
}]; }];
}; };
environment.systemPackages = [ cfg.haskellPackages.xmonad ]; environment.systemPackages = [ xmonad ];
}; };
} }

View File

@ -18,7 +18,7 @@ cabal.mkDerivation (self: {
''; '';
patches = [ patches = [
# Patch to make xmonad use XMONAD_{GHC,XMESSAGE} (if available). # Patch to make xmonad use XMONAD_{GHC,XMESSAGE} (if available).
./xmonad_ghc_var_0.11.patch ../../../development/haskell-modules/xmonad-nix.patch
]; ];
meta = { meta = {
homepage = "http://xmonad.org"; homepage = "http://xmonad.org";

View File

@ -0,0 +1,22 @@
{ stdenv, buildEnv, ghcWithPackages, xmessage, makeWrapper, packages }:
let
xmonadEnv = ghcWithPackages (self: [ self.xmonad ] ++ packages self);
drv = buildEnv {
name = "xmonad-with-packages";
paths = [ xmonadEnv ];
postBuild = ''
# TODO: This could be avoided if buildEnv could be forced to create all directories
rm $out/bin
mkdir $out/bin
for i in ${xmonadEnv}/bin/*; do
ln -s $i $out/bin
done
wrapProgram $out/bin/xmonad \
--set XMONAD_GHC "${xmonadEnv}/bin/ghc" \
--set XMONAD_XMESSAGE "${xmessage}/bin/xmessage"
'';
};
in stdenv.lib.overrideDerivation drv (x : { buildInputs = x.buildInputs ++ [ makeWrapper ]; })

View File

@ -409,6 +409,9 @@ self: super: {
# https://github.com/seagreen/hjsonschema/issues/4 # https://github.com/seagreen/hjsonschema/issues/4
hjsonschema = dontCheck super.hjsonschema; hjsonschema = dontCheck super.hjsonschema;
# Nix-specific workaround
xmonad = appendPatch super.xmonad ./xmonad-nix.patch;
} // { } // {
# Not on Hackage. # Not on Hackage.

View File

@ -11805,6 +11805,11 @@ let
xkb_switch = callPackage ../tools/X11/xkb-switch { }; xkb_switch = callPackage ../tools/X11/xkb-switch { };
xmonad-with-packages = callPackage ../applications/window-managers/xmonad/wrapper.nix {
ghcWithPackages = haskellngPackages.ghcWithPackages;
packages = self: [];
};
xmonad_log_applet_gnome2 = callPackage ../applications/window-managers/xmonad-log-applet { xmonad_log_applet_gnome2 = callPackage ../applications/window-managers/xmonad-log-applet {
desktopSupport = "gnome2"; desktopSupport = "gnome2";
inherit (xfce) libxfce4util xfce4panel; inherit (xfce) libxfce4util xfce4panel;