top-level default.nix provides stockholm

Collaterally, define krebs/default.nix's output in a concise way.
This commit is contained in:
tv 2015-10-20 03:31:38 +02:00
parent a2b455c786
commit 433479bc51
2 changed files with 136 additions and 144 deletions

View File

@ -47,7 +47,7 @@ let out = {
inherit (eval {}) pkgs;
};
krebs = import ./krebs current;
krebs = import ./krebs (current // { stockholm = out; });
inherit (krebs) lib;
# Path resolvers for common and individual files.

View File

@ -1,21 +1,29 @@
{ current-date
, current-host-name
, current-user-name
}@current: rec {
, stockholm
}:
let out = {
inherit deploy;
inherit infest;
inherit init;
inherit lib;
};
deploy =
{ system ? current-host-name
, target ? system
}@args: let
config = lib.get-config system;
config = get-config system;
in ''
#! /bin/sh
# ${current-date} ${current-user-name}@${current-host-name}
# krebs.deploy
set -efu
(${lib.populate args})
${lib.rootssh target ''
${lib.install args}
(${populate args})
${rootssh target ''
${install args}
${config.krebs.build.profile}/bin/switch-to-configuration switch
''}
echo OK
@ -66,17 +74,17 @@
)"
}
# Location to insert lib.install
# Location to insert install
i=$(sed -n '/^echo "building the system configuration/=' "$src")
{
cat_src | sed -n "1,$i{p}"
cat ${lib.doc (lib.install args)}
cat ${lib.doc (install args)}
cat_src | sed -n "$i,\''${$i!p}"
} > nixos-install
chmod +x nixos-install
## Wrap inserted lib.install into chroot.
## Wrap inserted install into chroot.
#nix_env=$(cat_src | sed -n '
# s:.*\(/nix/store/[a-z0-9]*-nix-[0-9.]\+/bin/nix-env\).*:\1:p;T;q
#')
@ -95,7 +103,7 @@
init =
{ system ? current-host-name
}@args: let
config = lib.get-config system;
config = get-config system;
in ''
#! /bin/sh
# ${current-date} ${current-user-name}@${current-host-name}
@ -128,16 +136,9 @@
'';
lib = import ./4lib { lib = import <nixpkgs/lib>; } // rec {
stockholm-path = ../.;
stockholm = import stockholm-path current;
nspath = ns: p: stockholm-path + "/${ns}/${p}";
get-config = system:
stockholm.users.${current-user-name}.${system}.config
or (abort "unknown system: ${system}, user: ${current-user-name}");
};
doc = s:
let b = "EOF${builtins.hashString "sha256" s}"; in
@ -147,23 +148,15 @@
${b}
'';
rootssh = target: script:
"ssh root@${target} -T ${lib.doc ''
set -efu
${script}
''}";
get-config = system:
stockholm.users.${current-user-name}.${system}.config
or (abort "unknown system: ${system}, user: ${current-user-name}");
install =
{ system ? current-host-name
, target ? system
}:
let
stockholm = import ../. {
inherit current-date;
inherit current-host-name;
inherit current-user-name;
};
config = get-config system;
nix-path =
@ -177,7 +170,6 @@
nix-env \
--show-trace \
-f '<stockholm>' \
-Q \
--argstr current-date ${lib.shell.escape current-date} \
--argstr current-host-name ${lib.shell.escape current-host-name} \
--argstr current-user-name ${lib.shell.escape current-user-name} \
@ -206,12 +198,6 @@
["dir" "git"])}
'';
stockholm = import ../. {
inherit current-date;
inherit current-host-name;
inherit current-user-name;
};
config = get-config system;
current-host = config.krebs.hosts.${current-host-name};
@ -242,7 +228,7 @@
throw "cannot source ${url}";
methods.git = config:
lib.rootssh target ''
rootssh target ''
mkdir -p ${config.target-path}
cd ${config.target-path}
if ! test -e .git; then
@ -263,5 +249,11 @@
git clean -dxf
'';
in out;
};
}
rootssh = target: script:
"ssh root@${target} -T ${doc ''
set -efu
${script}
''}";
in out