krebs pkgs.{writeHaskellBin => writeHaskell}
This commit is contained in:
parent
ed56f41ddc
commit
fc826f8f7a
@ -1,4 +1,4 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
{ config, pkgs, ... }:
|
||||||
with config.krebs.lib;
|
with config.krebs.lib;
|
||||||
rec {
|
rec {
|
||||||
execve = name: { filename, argv ? null, envp ? {}, destination ? "" }: let
|
execve = name: { filename, argv ? null, envp ? {}, destination ? "" }: let
|
||||||
@ -66,50 +66,112 @@ rec {
|
|||||||
mv "$textPath" $out
|
mv "$textPath" $out
|
||||||
'';
|
'';
|
||||||
|
|
||||||
writeHaskellBin =
|
writeHaskell =
|
||||||
k:
|
k:
|
||||||
let
|
let
|
||||||
k' = parseDrvName k;
|
k' = parseDrvName k;
|
||||||
name = k'.name;
|
name = k'.name;
|
||||||
version = if k'.version != "" then k'.version else "0";
|
version = if k'.version != "" then k'.version else "0";
|
||||||
in
|
in
|
||||||
{ build-depends ? ["base"] ++ depends
|
{ base-depends ? ["base"]
|
||||||
, depends ? []
|
, executables ? {}
|
||||||
, ghc-options ? ["-Wall" "-O3" "-threaded" "-rtsopts"]
|
, ghc-options ? ["-Wall" "-O3" "-threaded" "-rtsopts"]
|
||||||
, haskellPackages ? pkgs.haskellPackages
|
, haskellPackages ? pkgs.haskellPackages
|
||||||
|
, library ? null
|
||||||
, license ? "WTFPL"
|
, license ? "WTFPL"
|
||||||
}:
|
}:
|
||||||
main-text:
|
|
||||||
let
|
let
|
||||||
|
isExecutable = executables != {};
|
||||||
|
isLibrary = library != null;
|
||||||
|
|
||||||
cabal-file = pkgs.writeText "${name}-${version}.cabal" ''
|
cabal-file = pkgs.writeText "${name}-${version}.cabal" ''
|
||||||
build-type: Simple
|
build-type: Simple
|
||||||
cabal-version: >= 1.2
|
cabal-version: >= 1.2
|
||||||
name: ${name}
|
name: ${name}
|
||||||
version: ${version}
|
version: ${version}
|
||||||
|
${concatStringsSep "\n" (mapAttrsToList exe-section executables)}
|
||||||
|
${optionalString isLibrary (lib-section library)}
|
||||||
|
'';
|
||||||
|
|
||||||
executable ${name}
|
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}
|
build-depends: ${concatStringsSep "," build-depends}
|
||||||
ghc-options: ${toString ghc-options}
|
ghc-options: ${toString ghc-options}
|
||||||
main-is: ${main-file.name}
|
main-is: ${relpath}
|
||||||
'';
|
'';
|
||||||
main-file = pkgs.writeText "${name}-${version}.hs" main-text;
|
|
||||||
|
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
|
in
|
||||||
haskellPackages.mkDerivation rec {
|
haskellPackages.mkDerivation {
|
||||||
inherit license version;
|
inherit isExecutable isLibrary license version;
|
||||||
executableHaskellDepends = attrVals build-depends haskellPackages;
|
executableHaskellDepends =
|
||||||
isExecutable = true;
|
attrVals
|
||||||
isLibrary = false;
|
(concatMap get-depends (attrValues executables))
|
||||||
|
haskellPackages;
|
||||||
|
libraryHaskellDepends =
|
||||||
|
attrVals
|
||||||
|
(optionals isLibrary (get-depends library))
|
||||||
|
haskellPackages;
|
||||||
pname = name;
|
pname = name;
|
||||||
src = pkgs.runCommand "${name}-${version}-src" {} ''
|
src = pkgs.runCommand "${name}-${version}-src" {} ''
|
||||||
install -D ${cabal-file} $out/${cabal-file.name}
|
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 =
|
writeNixFromCabal =
|
||||||
trace (toString [
|
trace (toString [
|
||||||
"The function `writeNixFromCabal` has been deprecated in favour of"
|
"The function `writeNixFromCabal` has been deprecated in favour of"
|
||||||
"`writeHaskellBin'."
|
"`writeHaskell`."
|
||||||
])
|
])
|
||||||
(name: path: pkgs.runCommand name {} ''
|
(name: path: pkgs.runCommand name {} ''
|
||||||
${pkgs.cabal2nix}/bin/cabal2nix ${path} > $out
|
${pkgs.cabal2nix}/bin/cabal2nix ${path} > $out
|
||||||
|
@ -74,8 +74,8 @@ in {
|
|||||||
};
|
};
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
SyslogIdentifier = "xmonad";
|
SyslogIdentifier = "xmonad";
|
||||||
ExecStart = "${pkgs.xmonad-tv}/bin/xmonad-tv";
|
ExecStart = "${pkgs.xmonad-tv}/bin/xmonad";
|
||||||
ExecStop = "${pkgs.xmonad-tv}/bin/xmonad-tv --shutdown";
|
ExecStop = "${pkgs.xmonad-tv}/bin/xmonad --shutdown";
|
||||||
User = user.name;
|
User = user.name;
|
||||||
WorkingDirectory = user.home;
|
WorkingDirectory = user.home;
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
pkgs.writeHaskellBin "xmonad-tv" {
|
pkgs.writeHaskell "xmonad-tv" {
|
||||||
depends = [
|
executables.xmonad = {
|
||||||
|
extra-depends = [
|
||||||
"containers"
|
"containers"
|
||||||
"unix"
|
"unix"
|
||||||
"X11"
|
"X11"
|
||||||
@ -8,7 +9,7 @@ pkgs.writeHaskellBin "xmonad-tv" {
|
|||||||
"xmonad-contrib"
|
"xmonad-contrib"
|
||||||
"xmonad-stockholm"
|
"xmonad-stockholm"
|
||||||
];
|
];
|
||||||
} ''
|
text = ''
|
||||||
{-# LANGUAGE DeriveDataTypeable #-} -- for XS
|
{-# LANGUAGE DeriveDataTypeable #-} -- for XS
|
||||||
{-# LANGUAGE FlexibleContexts #-} -- for xmonad'
|
{-# LANGUAGE FlexibleContexts #-} -- for xmonad'
|
||||||
{-# LANGUAGE LambdaCase #-}
|
{-# LANGUAGE LambdaCase #-}
|
||||||
@ -299,4 +300,6 @@ wGSConfig = def
|
|||||||
allWorkspaceNames :: W.StackSet i l a sid sd -> X [i]
|
allWorkspaceNames :: W.StackSet i l a sid sd -> X [i]
|
||||||
allWorkspaceNames ws =
|
allWorkspaceNames ws =
|
||||||
return $ map W.tag (W.hidden ws) ++ [W.tag $ W.workspace $ W.current ws]
|
return $ map W.tag (W.hidden ws) ++ [W.tag $ W.workspace $ W.current ws]
|
||||||
''
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user