summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2016-06-04 19:09:19 +0200
committertv <tv@krebsco.de>2016-06-04 19:48:43 +0200
commitfc826f8f7a613c68e595e16fd793b0b318425af8 (patch)
treeacb2172fb23c408f7b42dc821d9425f8dbcbe83c
parented56f41ddc1775ef8938befa88dcb7d029bf6450 (diff)
krebs pkgs.{writeHaskellBin => writeHaskell}
-rw-r--r--krebs/5pkgs/builders.nix98
-rw-r--r--tv/2configs/xserver/default.nix4
-rw-r--r--tv/5pkgs/xmonad-tv.nix25
3 files changed, 96 insertions, 31 deletions
diff --git a/krebs/5pkgs/builders.nix b/krebs/5pkgs/builders.nix
index 39b91d144..ac355991a 100644
--- a/krebs/5pkgs/builders.nix
+++ b/krebs/5pkgs/builders.nix
@@ -1,4 +1,4 @@
-{ config, lib, pkgs, ... }:
+{ config, pkgs, ... }:
with config.krebs.lib;
rec {
execve = name: { filename, argv ? null, envp ? {}, destination ? "" }: let
@@ -66,50 +66,112 @@ rec {
mv "$textPath" $out
'';
- writeHaskellBin =
+ writeHaskell =
k:
let
k' = parseDrvName k;
name = k'.name;
version = if k'.version != "" then k'.version else "0";
in
- { build-depends ? ["base"] ++ depends
- , depends ? []
+ { base-depends ? ["base"]
+ , executables ? {}
, ghc-options ? ["-Wall" "-O3" "-threaded" "-rtsopts"]
, haskellPackages ? pkgs.haskellPackages
+ , library ? null
, license ? "WTFPL"
}:
- main-text:
let
+ isExecutable = executables != {};
+ isLibrary = library != null;
+
cabal-file = pkgs.writeText "${name}-${version}.cabal" ''
build-type: Simple
cabal-version: >= 1.2
name: ${name}
version: ${version}
-
- executable ${name}
- build-depends: ${concatStringsSep "," build-depends}
- ghc-options: ${toString ghc-options}
- main-is: ${main-file.name}
+ ${concatStringsSep "\n" (mapAttrsToList exe-section executables)}
+ ${optionalString isLibrary (lib-section library)}
'';
- main-file = pkgs.writeText "${name}-${version}.hs" main-text;
+
+ exe-install =
+ exe-name:
+ { file ? pkgs.writeText "${name}-${exe-name}.hs" text
+ , relpath ? "${exe-name}.hs"
+ , text
+ , ... }:
+ if types.filename.check exe-name
+ then "install -D ${file} $out/${relpath}"
+ else throw "argument ‘exe-name’ is not a ${types.filename.name}";
+
+ exe-section =
+ exe-name:
+ { build-depends ? base-depends ++ extra-depends
+ , extra-depends ? []
+ , file ? pkgs.writeText "${name}-${exe-name}.hs" text
+ , relpath ? "${exe-name}.hs"
+ , text
+ , ... }: ''
+ executable ${exe-name}
+ build-depends: ${concatStringsSep "," build-depends}
+ ghc-options: ${toString ghc-options}
+ main-is: ${relpath}
+ '';
+
+ get-depends =
+ { build-depends ? base-depends ++ extra-depends
+ , extra-depends ? []
+ , ...
+ }:
+ build-depends;
+
+ lib-install =
+ { exposed-modules
+ , ... }:
+ concatStringsSep "\n" (mapAttrsToList mod-install exposed-modules);
+
+ lib-section =
+ { build-depends ? base-depends ++ extra-depends
+ , extra-depends ? []
+ , exposed-modules
+ , ... }: ''
+ library
+ build-depends: ${concatStringsSep "," build-depends}
+ ghc-options: ${toString ghc-options}
+ exposed-modules: ${concatStringsSep "," (attrNames exposed-modules)}
+ '';
+
+ mod-install =
+ mod-name:
+ { file ? pkgs.writeText "${name}-${mod-name}.hs" text
+ , relpath ? "${replaceStrings ["."] ["/"] mod-name}.hs"
+ , text
+ , ... }:
+ if types.haskell.modid.check mod-name
+ then "install -D ${file} $out/${relpath}"
+ else throw "argument ‘mod-name’ is not a ${types.haskell.modid.name}";
in
- haskellPackages.mkDerivation rec {
- inherit license version;
- executableHaskellDepends = attrVals build-depends haskellPackages;
- isExecutable = true;
- isLibrary = false;
+ haskellPackages.mkDerivation {
+ inherit isExecutable isLibrary license version;
+ executableHaskellDepends =
+ attrVals
+ (concatMap get-depends (attrValues executables))
+ haskellPackages;
+ libraryHaskellDepends =
+ attrVals
+ (optionals isLibrary (get-depends library))
+ haskellPackages;
pname = name;
src = pkgs.runCommand "${name}-${version}-src" {} ''
install -D ${cabal-file} $out/${cabal-file.name}
- install -D ${main-file} $out/${main-file.name}
+ ${optionalString isLibrary (lib-install library)}
+ ${concatStringsSep "\n" (mapAttrsToList exe-install executables)}
'';
};
writeNixFromCabal =
trace (toString [
"The function `writeNixFromCabal` has been deprecated in favour of"
- "`writeHaskellBin'."
+ "`writeHaskell`."
])
(name: path: pkgs.runCommand name {} ''
${pkgs.cabal2nix}/bin/cabal2nix ${path} > $out
diff --git a/tv/2configs/xserver/default.nix b/tv/2configs/xserver/default.nix
index 965c3bbe1..c41c0a81e 100644
--- a/tv/2configs/xserver/default.nix
+++ b/tv/2configs/xserver/default.nix
@@ -74,8 +74,8 @@ in {
};
serviceConfig = {
SyslogIdentifier = "xmonad";
- ExecStart = "${pkgs.xmonad-tv}/bin/xmonad-tv";
- ExecStop = "${pkgs.xmonad-tv}/bin/xmonad-tv --shutdown";
+ ExecStart = "${pkgs.xmonad-tv}/bin/xmonad";
+ ExecStop = "${pkgs.xmonad-tv}/bin/xmonad --shutdown";
User = user.name;
WorkingDirectory = user.home;
};
diff --git a/tv/5pkgs/xmonad-tv.nix b/tv/5pkgs/xmonad-tv.nix
index 74e43dc79..04e7e8359 100644
--- a/tv/5pkgs/xmonad-tv.nix
+++ b/tv/5pkgs/xmonad-tv.nix
@@ -1,14 +1,15 @@
{ pkgs, ... }:
-pkgs.writeHaskellBin "xmonad-tv" {
- depends = [
- "containers"
- "unix"
- "X11"
- "xmonad"
- "xmonad-contrib"
- "xmonad-stockholm"
- ];
-} ''
+pkgs.writeHaskell "xmonad-tv" {
+ executables.xmonad = {
+ extra-depends = [
+ "containers"
+ "unix"
+ "X11"
+ "xmonad"
+ "xmonad-contrib"
+ "xmonad-stockholm"
+ ];
+ text = ''
{-# LANGUAGE DeriveDataTypeable #-} -- for XS
{-# LANGUAGE FlexibleContexts #-} -- for xmonad'
{-# LANGUAGE LambdaCase #-}
@@ -299,4 +300,6 @@ wGSConfig = def
allWorkspaceNames :: W.StackSet i l a sid sd -> X [i]
allWorkspaceNames ws =
return $ map W.tag (W.hidden ws) ++ [W.tag $ W.workspace $ W.current ws]
-''
+ '';
+ };
+}