Merge pull request #5025 from abbradar/xmonad-wrapper

nixos/xmonad: make a wrapper
This commit is contained in:
Peter Simons 2015-02-03 11:52:09 +01:00
commit b7ecd5e729
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

@ -11812,6 +11812,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;