diff --git a/niveum-deploy b/niveum-deploy deleted file mode 100755 index 2a4b833..0000000 --- a/niveum-deploy +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -niveum_dir="$HOME/projects/niveum" - -[ $# -eq 1 ] || echo >&2 "Usage: niveum-deploy SYSTEM" - -eval "$(nix-build --no-out-link "$niveum_dir/deploy.nix" -A "$1")" diff --git a/niveum-status b/niveum-status deleted file mode 100755 index 87af4a8..0000000 --- a/niveum-status +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh -version_file=/etc/niveum/version -niveum_dir="$HOME/projects/niveum" - -machine_status () { - hostname="$1" - - if commit_id="$(ssh "$hostname" cat $version_file 2>/dev/null)"; then - machine_status="$(git -C "$niveum_dir" log -1 --oneline "$commit_id")" - else - machine_status=offline - fi - - printf "\033[1m%11s\033[0m %s\n" "$hostname" "$machine_status" -} - -for system in "$niveum_dir"/systems/*; do - hostname="$(basename "$system")" - machine_status "$hostname" -done diff --git a/niveum-update b/niveum-update deleted file mode 100755 index 7f89329..0000000 --- a/niveum-update +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/sh -NIXOS_VERSION=20.03 - -fetch() { - rev=$1 - output=$2 - url=${3:-https://github.com/NixOS/nixpkgs-channels.git} - - printf "\033[1m$url\033[0m $rev\n" - nix-prefetch-git \ - --url "${url}" \ - --rev "${rev}" \ - > "${output}" -} - -nixpkgs() { - fetch "refs/heads/nixos-$NIXOS_VERSION" .versions/nixpkgs.json -} - -nixpkgs_unstable() { - fetch "refs/heads/nixos-unstable" .versions/nixpkgs-unstable.json -} - -home_manager() { - fetch "refs/heads/release-$NIXOS_VERSION" .versions/home-manager.json "https://github.com/rycee/home-manager.git" -} - -krops() { - fetch "refs/tags/v1.21.0" .versions/krops.json "https://cgit.krebsco.de/krops" -} - -stockholm() { - fetch "refs/heads/master" .versions/stockholm.json "https://cgit.krebsco.de/stockholm" -} - -usage() { - echo >&2 "Usage: $0 [--all | REPO... ] - - Where REPO is one of nixpkgs, home-manager, krops, stockholm" - exit 1 -} - -if [ $# -eq 0 ]; then - usage -else - for arg in "$@"; do - case $arg in - nixpkgs) - nixpkgs & - nixpkgs_unstable & ;; - home-manager) - home_manager & ;; - krops) - krops & ;; - stockholm) - stockholm & ;; - --all) - nixpkgs & - nixpkgs_unstable & - home_manager & - krops & - stockholm & ;; - *) - usage ;; - esac - shift - done - wait -fi diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..4b7d64c --- /dev/null +++ b/shell.nix @@ -0,0 +1,79 @@ +{ pkgs ? import { } }: +let + inherit (pkgs) lib; + + dependencies = let nixosVersion = "20.03"; + in { + nixpkgs = { + ref = "refs/heads/nixos-${nixosVersion}"; + url = "https://github.com/NixOS/nixpkgs-channels.git"; + path = ".versions/nixpkgs.json"; + }; + nixpkgs-unstable = { + ref = "refs/heads/nixos-unstable"; + url = "https://github.com/NixOS/nixpkgs-channels.git"; + path = ".versions/nixpkgs-unstable.json"; + }; + home-manager = { + ref = "refs/heads/release-${nixosVersion}"; + url = "https://github.com/rycee/home-manager.git"; + path = ".versions/home-manager.json"; + }; + krops = { + ref = "refs/tags/v1.21.0"; + url = "https://cgit.krebsco.de/krops"; + path = ".versions/krops.nix"; + }; + stockholm = { + ref = "refs/heads/master"; + url = "https://cgit.krebsco.de/stockholm"; + path = ".versions/stockholm.json"; + }; + }; + + updateScript = name: dependency: '' + ${pkgs.nix-prefetch-git}/bin/nix-prefetch-git --url "${dependency.url}" --rev "${dependency.ref}" > "${toString ./.}/${dependency.path}"''; + + updateScripts = + lib.mapAttrsToList + (name: dependency: pkgs.writers.writeDashBin "niveum-update-${name}" (updateScript name dependency)) + dependencies; + + updateAllScript = pkgs.writers.writeDashBin "niveum-update" (lib.concatStringsSep " &\n" (lib.mapAttrsToList updateScript dependencies)); +in pkgs.mkShell { + + buildInputs = updateScripts ++ [ updateAllScript ] ++ [ + (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" '' + ${pkgs.parallel}/bin/parallel --line-buffer --tagstring '{}' -q ${deployCommand} '{1}' ::: "$@" + '') + + (pkgs.writers.writeDashBin "niveum-status" '' + cd "${toString ./.}" + + version_file=/etc/niveum/version + + machine_status () { + hostname="$1" + + if commit_id="$(${pkgs.openssh}/bin/ssh "$hostname" cat $version_file 2>/dev/null)"; then + machine_status="$(${pkgs.git}/bin/git log -1 --oneline "$commit_id")" + else + machine_status=offline + fi + + printf "\033[1m%11s\033[0m %s\n" "$hostname" "$machine_status" + } + + for system in systems/*; do + hostname="$(basename "$system")" + machine_status "$hostname" + done + '') + ]; + + shellHook = "export HISTFILE=${toString ./.history}"; +}