{ description = "Homelab configuration tools"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-parts.url = "github:hercules-ci/flake-parts"; }; outputs = { self, flake-parts, ... }: flake-parts.lib.mkFlake { inherit self; } { systems = [ "x86_64-linux" "aarch64-darwin" ]; perSystem = { config, self', inputs', pkgs, system, ... }: let to-docker-compose = pkgs.writeShellApplication { name = "to-docker-compose"; runtimeInputs = [ pkgs.jsonnet ]; text = let vars = [ "PLEX_CLAIM" "PLEX_ADVERTISE_IP" "FIREFLY_APP_KEY" ]; varRow = var: "${var}: '\$${var}',"; in '' jsonnet services.jsonnet \ --tla-code secrets="{ ${pkgs.lib.concatMapStrings varRow vars} }" ''; }; remote-docker-compose = pkgs.writeShellApplication { name = "remote-docker-compose"; runtimeInputs = [ to-docker-compose ]; text = '' host=$1 shift cmd="docker compose -f - $*" # shellcheck disable=SC2029 to-docker-compose | ssh "$host" "tee remote-docker-compose.json | $cmd" ''; }; in { devShells.default = pkgs.mkShell { buildInputs = with pkgs; [ jsonnet to-docker-compose remote-docker-compose ]; }; }; }; }