diff --git a/configuration/common/programs.nix b/configuration/common/programs.nix index 23e7db2..f68ac3c 100644 --- a/configuration/common/programs.nix +++ b/configuration/common/programs.nix @@ -16,6 +16,7 @@ colmena agenix clerie-sops + clerie-sops-edit sops # Debugging diff --git a/flake.nix b/flake.nix index 1dd9579..08b3f9b 100644 --- a/flake.nix +++ b/flake.nix @@ -132,6 +132,7 @@ clerie-update-nixfiles clerie-sops clerie-sops-config + clerie-sops-edit chromium-incognito iot-data nix-remove-result-links diff --git a/pkgs/clerie-sops/clerie-sops-edit.nix b/pkgs/clerie-sops/clerie-sops-edit.nix new file mode 100644 index 0000000..c0ab33b --- /dev/null +++ b/pkgs/clerie-sops/clerie-sops-edit.nix @@ -0,0 +1,10 @@ +{ pkgs, ... }: + +pkgs.writeShellApplication { + name = "clerie-sops-edit"; + text = builtins.readFile ./clerie-sops-edit.sh; + runtimeInputs = with pkgs; [ + clerie-sops + jq + ]; +} diff --git a/pkgs/clerie-sops/clerie-sops-edit.sh b/pkgs/clerie-sops/clerie-sops-edit.sh new file mode 100755 index 0000000..220660a --- /dev/null +++ b/pkgs/clerie-sops/clerie-sops-edit.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +# Edit a single attribute of a sops json file +# Helps working with multiline strings in json + +set -euo pipefail + +SECRETS_FILE="$1" +KEY="$2" + +if [[ -n $EDITOR ]]; then + EDITOR=vim +fi + +TMP_FILE="$(mktemp)" + +clerie-sops --decrypt --extract "[\"${KEY}\"]" "${SECRETS_FILE}" > "${TMP_FILE}" + +vim "${TMP_FILE}" + +JSON_QUOTED_SECRET="$(jq -Rs '.' "${TMP_FILE}")" + +rm "${TMP_FILE}" + +clerie-sops --set "[\"${KEY}\"] ${JSON_QUOTED_SECRET}" "${SECRETS_FILE}" diff --git a/pkgs/overlay.nix b/pkgs/overlay.nix index 2b6ae5a..d0e44da 100644 --- a/pkgs/overlay.nix +++ b/pkgs/overlay.nix @@ -4,6 +4,7 @@ final: prev: { clerie-merge-nixfiles-update = final.callPackage ./clerie-update-nixfiles/clerie-merge-nixfiles-update.nix {}; clerie-sops = final.callPackage ./clerie-sops/clerie-sops.nix {}; clerie-sops-config = final.callPackage ./clerie-sops/clerie-sops-config.nix {}; + clerie-sops-edit = final.callPackage ./clerie-sops/clerie-sops-edit.nix {}; clerie-update-nixfiles = final.callPackage ./clerie-update-nixfiles/clerie-update-nixfiles.nix {}; chromium-incognito = final.callPackage ./chromium-incognito {}; iot-data = final.python3.pkgs.callPackage ./iot-data {};