1
0
mirror of https://github.com/kmein/niveum synced 2026-03-16 10:11:08 +01:00
Files
niveum/shell.nix

112 lines
3.5 KiB
Nix
Raw Normal View History

{ pkgs ? import <nixpkgs> { }
2021-06-01 19:14:00 +02:00
, release ? "21.05"
}:
2020-09-08 21:28:58 +02:00
let
inherit (pkgs) lib;
dependencies = {
2020-09-08 21:28:58 +02:00
nixpkgs = {
ref = "refs/heads/nixos-${release}";
url = "https://github.com/NixOS/nixpkgs.git";
2020-09-08 22:01:22 +02:00
path = toString .versions/nixpkgs.json;
2020-09-08 21:28:58 +02:00
};
nixpkgs-unstable = {
ref = "refs/heads/master";
url = "https://github.com/NixOS/nixpkgs.git";
path = toString .versions/nixpkgs-unstable.json;
};
2020-09-08 21:28:58 +02:00
home-manager = {
ref = "refs/heads/release-${release}";
2021-02-07 18:45:01 +01:00
url = "https://github.com/nix-community/home-manager.git";
2020-09-08 22:01:22 +02:00
path = toString .versions/home-manager.json;
2020-09-08 21:28:58 +02:00
};
krops = {
ref = "refs/tags/v1.25.0";
2020-09-08 21:28:58 +02:00
url = "https://cgit.krebsco.de/krops";
2020-10-05 21:27:20 +02:00
path = toString .versions/krops.json;
2020-09-08 21:28:58 +02:00
};
stockholm = {
ref = "refs/heads/master";
2021-06-05 18:13:08 +02:00
url = "https://cgit.krebsco.de/stockholm";
2020-09-08 22:01:22 +02:00
path = toString .versions/stockholm.json;
2020-09-08 21:28:58 +02:00
};
2020-10-18 17:27:43 +02:00
retiolum = {
ref = "refs/heads/master";
url = "https://github.com/krebs/retiolum";
path = toString .versions/retiolum.json;
};
2021-06-02 08:53:35 +02:00
nur = {
ref = "refs/heads/master";
url = "https://github.com/nix-community/NUR";
path = toString .versions/nur.json;
};
2021-06-02 10:27:43 +02:00
nixpkgs-mozilla = {
ref = "refs/heads/master";
url = "https://github.com/mozilla/nixpkgs-mozilla";
path = toString .versions/nixpkgs-mozilla.json;
};
2020-09-08 21:28:58 +02:00
};
in pkgs.mkShell {
buildInputs = [
(let
updateCommand = pkgs.writers.writeDash "niveum-update-one" ''
[ $# -eq 1 ] || {
echo "Please provide a dependency to update." >&2
exit 1
}
case "$1" in
${lib.concatStringsSep "\n" (lib.mapAttrsToList (name: dependency: ''
${name})
${pkgs.nix-prefetch-git}/bin/nix-prefetch-git --url "${dependency.url}" --rev "${dependency.ref}" > "${dependency.path}";;
'') dependencies)}
esac
'';
in pkgs.writers.writeDashBin "niveum-update" ''
if [ $# -gt 0 ]; then
dependencies="$@"
else
dependencies="${lib.concatStringsSep " " (lib.attrNames dependencies)}"
fi
${pkgs.parallel}/bin/parallel --line-buffer --tagstring '{}' -q ${updateCommand} '{1}' ::: $dependencies
'')
2020-09-08 22:01:22 +02:00
2020-09-08 21:28:58 +02:00
(let
deployCommand = pkgs.writers.writeDash "niveum-deploy-one" ''
eval "$(${pkgs.nix}/bin/nix-build --no-out-link "${toString ./.}/deploy.nix" -A "$1")"
'';
in pkgs.writers.writeDashBin "niveum-deploy" ''
if [ -z "$(${pkgs.git}/bin/git status --porcelain)" ]; then
${pkgs.parallel}/bin/parallel --line-buffer --tagstring '{}' -q ${deployCommand} '{1}' ::: "$@"
else
echo Working directory is dirty. Not deploying.
exit 1
fi
2020-09-08 21:28:58 +02:00
'')
(let
statusCommand = pkgs.writers.writeDash "niveum-status-one" ''
[ $# -eq 1 ] || {
echo "Please provide a niveum system hostname." >&2
exit 1
}
2020-09-08 21:28:58 +02:00
hostname="$1"
version_file=/etc/niveum/version
2020-09-08 21:28:58 +02:00
if commit_id="$(${pkgs.coreutils}/bin/timeout 2s ${pkgs.openssh}/bin/ssh "$hostname" cat $version_file 2>/dev/null)"; then
${pkgs.git}/bin/git log -1 --oneline "$commit_id"
2020-09-08 21:28:58 +02:00
else
echo offline
2020-09-08 21:28:58 +02:00
fi
'';
in pkgs.writers.writeDashBin "niveum-status" ''
if [ $# -gt 0 ]; then
systems="$@"
else
systems="$(ls ${toString ./.}/systems)"
fi
${pkgs.parallel}/bin/parallel --line-buffer --tagstring '{}' -q ${statusCommand} '{1}' ::: $systems
2020-09-08 21:28:58 +02:00
'')
];
}