diff --git a/users/wpcarro/.envrc b/users/wpcarro/.envrc index 196758a93..b23a41fbd 100644 --- a/users/wpcarro/.envrc +++ b/users/wpcarro/.envrc @@ -1,2 +1,3 @@ source_up -export WPCARRO="$REPO_ROOT/users/wpcarro" +export PATH="${PWD}/bin:${PATH}" +export WPCARRO="${REPO_ROOT}/users/wpcarro" diff --git a/users/wpcarro/bin/__dispatch.sh b/users/wpcarro/bin/__dispatch.sh new file mode 100755 index 000000000..b7671562e --- /dev/null +++ b/users/wpcarro/bin/__dispatch.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +# This script dispatches invocations transparently to programs instantiated from +# Nix. +# +# To add a new tool, insert it into the case statement below by setting `attr` +# to the key in nixpkgs which represents the program you want to run. +set -ueo pipefail + +TARGET_TOOL=$(basename "$0") + +case "${TARGET_TOOL}" in + deploy-diogenes) + attr="users.wpcarro.nixos.deploy-diogenes" + ;; + *) + echo "The tool '${TARGET_TOOL}' is currently not installed in this repository." + exit 1 + ;; +esac + +result=$(nix-build --no-out-link --attr "${attr}" "${REPO_ROOT}") +PATH="${result}/bin:$PATH" + +exec "${TARGET_TOOL}" "${@}" diff --git a/users/wpcarro/bin/deploy-diogenes b/users/wpcarro/bin/deploy-diogenes new file mode 120000 index 000000000..8390ec9c9 --- /dev/null +++ b/users/wpcarro/bin/deploy-diogenes @@ -0,0 +1 @@ +__dispatch.sh \ No newline at end of file diff --git a/users/wpcarro/nixos/default.nix b/users/wpcarro/nixos/default.nix index b1a878c95..e7ae5490b 100644 --- a/users/wpcarro/nixos/default.nix +++ b/users/wpcarro/nixos/default.nix @@ -1,8 +1,22 @@ -{ depot, ... }: +{ depot, pkgs, ... }: let systemFor = sys: (depot.ops.nixos.nixosFor sys).system; in { marcusSystem = systemFor depot.users.wpcarro.nixos.marcus; + deploy-diogenes = pkgs.writeShellScriptBin "deploy-diogenes" '' + set -euo pipefail + readonly TF_STATE_DIR=/depot/users/wpcarro/terraform + rm -f $TF_STATE_DIR/*.json + readonly STORE_PATH="$(nix-build /depot -A users.wpcarro.nixos.diogenes)" + cp $STORE_PATH $TF_STATE_DIR + + function cleanup() { + rm -f "$TF_STATE_DIR/$(basename $STORE_PATH)" + } + + trap cleanup EXIT + ${pkgs.terraform}/bin/terraform -chdir="$TF_STATE_DIR" apply + ''; meta.targets = [ "marcusSystem" ]; }