Merge remote-tracking branch 'cd/master'
This commit is contained in:
commit
baa20586b8
12
Makefile
12
Makefile
@ -48,6 +48,14 @@ $(if $(target_user),,$(error unbound variable: target_user))
|
||||
$(if $(target_port),,$(error unbound variable: target_port))
|
||||
$(if $(target_path),,$(error unbound variable: target_path))
|
||||
|
||||
build = \
|
||||
nix-build \
|
||||
--no-out-link \
|
||||
--show-trace \
|
||||
-I nixos-config=$(nixos-config) \
|
||||
-I stockholm=$(stockholm) \
|
||||
-E "let build = import <stockholm>; in $(1)"
|
||||
|
||||
evaluate = \
|
||||
nix-instantiate \
|
||||
--eval \
|
||||
@ -74,6 +82,10 @@ deploy:
|
||||
env STOCKHOLM_VERSION="$$STOCKHOLM_VERSION" \
|
||||
nixos-rebuild switch --show-trace -I $(target_path)
|
||||
|
||||
# usage: make build.pkgs.get
|
||||
build build.:;@$(call build,$${expr-eval})
|
||||
build.%:;@$(call build,$@)
|
||||
|
||||
# usage: make LOGNAME=shared system=wolf eval.config.krebs.build.host.name
|
||||
eval eval.:;@$(call evaluate,$${expr-eval})
|
||||
eval.%:;@$(call evaluate,$@)
|
||||
|
@ -20,6 +20,10 @@ let
|
||||
type = types.filename;
|
||||
default = config._module.args.name;
|
||||
};
|
||||
envp = mkOption {
|
||||
type = types.attrsOf types.str;
|
||||
default = {};
|
||||
};
|
||||
filename = mkOption {
|
||||
type = mkOptionType {
|
||||
# TODO unyuck string and merge with toC
|
||||
@ -57,7 +61,7 @@ let
|
||||
};
|
||||
config.activate = let
|
||||
src = pkgs.execve config.name {
|
||||
inherit (config) filename;
|
||||
inherit (config) envp filename;
|
||||
};
|
||||
dst = "${wrapperDir}/${config.name}";
|
||||
in ''
|
||||
|
@ -286,6 +286,19 @@ types // rec {
|
||||
};
|
||||
};
|
||||
|
||||
haskell.conid = mkOptionType {
|
||||
name = "Haskell constructor identifier";
|
||||
check = x:
|
||||
isString x && match "[[:upper:]][[:lower:]_[:upper:]0-9']*" x != null;
|
||||
merge = mergeOneOption;
|
||||
};
|
||||
|
||||
haskell.modid = mkOptionType {
|
||||
name = "Haskell module identifier";
|
||||
check = x: isString x && all haskell.conid.check (splitString "." x);
|
||||
merge = mergeOneOption;
|
||||
};
|
||||
|
||||
# RFC952, B. Lexical grammar, <hname>
|
||||
hostname = mkOptionType {
|
||||
name = "hostname";
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
{ config, pkgs, ... }:
|
||||
with config.krebs.lib;
|
||||
rec {
|
||||
execve = name: { filename, argv ? null, envp ? {}, destination ? "" }: let
|
||||
@ -28,6 +28,21 @@ rec {
|
||||
|
||||
execveBin = name: cfg: execve name (cfg // { destination = "/bin/${name}"; });
|
||||
|
||||
writeBash = name: text: pkgs.writeScript name ''
|
||||
#! ${pkgs.bash}/bin/bash
|
||||
${text}
|
||||
'';
|
||||
|
||||
writeBashBin = name: text: pkgs.writeTextFile {
|
||||
executable = true;
|
||||
destination = "/bin/${name}";
|
||||
name = name;
|
||||
text = ''
|
||||
#! ${pkgs.bash}/bin/bash
|
||||
${text}
|
||||
'';
|
||||
};
|
||||
|
||||
writeC = name: { destination ? "" }: src: pkgs.runCommand name {} ''
|
||||
PATH=${makeBinPath (with pkgs; [
|
||||
binutils
|
||||
@ -66,50 +81,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}
|
||||
${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}
|
||||
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
|
||||
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
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -1,6 +1,7 @@
|
||||
{ pkgs, ... }:
|
||||
pkgs.writeHaskellBin "xmonad-tv" {
|
||||
depends = [
|
||||
pkgs.writeHaskell "xmonad-tv" {
|
||||
executables.xmonad = {
|
||||
extra-depends = [
|
||||
"containers"
|
||||
"unix"
|
||||
"X11"
|
||||
@ -8,7 +9,7 @@ pkgs.writeHaskellBin "xmonad-tv" {
|
||||
"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]
|
||||
''
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user