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

Changed files
+46 -15
nixos
modules
services
x11
window-managers
pkgs
applications
window-managers
development
top-level
+15 -14
nixos/modules/services/x11/window-managers/xmonad.nix
···
let
inherit (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 = {
···
};
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
···
};
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.
'';
};
···
session = [{
name = "xmonad";
start = ''
-
XMONAD_GHC=${xmonadEnv}/bin/ghc XMONAD_XMESSAGE=${xmessage}/bin/xmessage xmonad &
waitPID=$!
'';
}];
};
-
environment.systemPackages = [ cfg.haskellPackages.xmonad ];
};
}
···
let
inherit (lib) mkOption mkIf optionals literalExample;
cfg = config.services.xserver.windowManager.xmonad;
+
xmonad = pkgs.xmonad-with-packages.override {
+
ghcWithPackages = cfg.haskellPackages.ghcWithPackages;
+
packages = self: cfg.extraPackages self ++
+
optionals cfg.enableContribAndExtras
+
[ self.xmonad-contrib self.xmonad-extras ];
+
};
in
{
options = {
···
};
haskellPackages = mkOption {
+
default = pkgs.haskellngPackages;
+
defaultText = "pkgs.haskellngPackages";
+
example = literalExample "pkgs.haskell-ng.packages.ghc784";
description = ''
haskellPackages used to build Xmonad and other packages.
This can be used to change the GHC version used to build
···
};
extraPackages = mkOption {
+
default = self: [];
example = literalExample ''
haskellPackages: [
+
haskellPackages.xmonad-contrib
+
haskellPackages.monad-logger
]
'';
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.
'';
};
···
session = [{
name = "xmonad";
start = ''
+
${xmonad}/bin/xmonad &
waitPID=$!
'';
}];
};
+
environment.systemPackages = [ xmonad ];
};
}
+1 -1
pkgs/applications/window-managers/xmonad/default.nix
···
'';
patches = [
# Patch to make xmonad use XMONAD_{GHC,XMESSAGE} (if available).
-
./xmonad_ghc_var_0.11.patch
];
meta = {
homepage = "http://xmonad.org";
···
'';
patches = [
# Patch to make xmonad use XMONAD_{GHC,XMESSAGE} (if available).
+
../../../development/haskell-modules/xmonad-nix.patch
];
meta = {
homepage = "http://xmonad.org";
+22
pkgs/applications/window-managers/xmonad/wrapper.nix
···
···
+
{ 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 ]; })
pkgs/applications/window-managers/xmonad/xmonad_ghc_var_0.11.patch pkgs/development/haskell-modules/xmonad-nix.patch
+3
pkgs/development/haskell-modules/configuration-common.nix
···
# https://github.com/seagreen/hjsonschema/issues/4
hjsonschema = dontCheck super.hjsonschema;
} // {
# Not on Hackage.
···
# https://github.com/seagreen/hjsonschema/issues/4
hjsonschema = dontCheck super.hjsonschema;
+
# Nix-specific workaround
+
xmonad = appendPatch super.xmonad ./xmonad-nix.patch;
+
} // {
# Not on Hackage.
+5
pkgs/top-level/all-packages.nix
···
xkb_switch = callPackage ../tools/X11/xkb-switch { };
xmonad_log_applet_gnome2 = callPackage ../applications/window-managers/xmonad-log-applet {
desktopSupport = "gnome2";
inherit (xfce) libxfce4util xfce4panel;
···
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 {
desktopSupport = "gnome2";
inherit (xfce) libxfce4util xfce4panel;