#!/usr/bin/env bash set -eo pipefail toplevel="$(git rev-parse --show-toplevel)" # Build just the single installable and forward any other arguments too just() { # uses nix-output-monitor (nom) if available if command -v nom &> /dev/null; then nom build "$@" else nix build -L "$@" fi if [ ! -z "$ATTIC_TOKEN" ]; then # historical "conduit" store for compatibility purposes, same as conduwuit nix run --inputs-from "$toplevel" attic -- \ login \ conduit \ "${ATTIC_ENDPOINT:-https://attic.kennel.juneis.dog/conduit}" \ "$ATTIC_TOKEN" readarray -t outputs < <(nix path-info "$@") readarray -t derivations < <(nix path-info "$@" --derivation) # Push the target installable and its build dependencies nix run --inputs-from "$toplevel" attic -- \ push \ conduit \ "${outputs[@]}" \ "${derivations[@]}" # main "conduwuit" store nix run --inputs-from "$toplevel" attic -- \ login \ conduwuit \ "${ATTIC_ENDPOINT:-https://attic.kennel.juneis.dog/conduwuit}" \ "$ATTIC_TOKEN" # Push the target installable and its build dependencies nix run --inputs-from "$toplevel" attic -- \ push \ conduwuit \ "${outputs[@]}" \ "${derivations[@]}" else echo "\$ATTIC_TOKEN is unset, skipping uploading to the binary cache" fi } # Build and cache things needed for CI ci() { cache=( --inputs-from "$toplevel" # Keep sorted "$toplevel#devShells.x86_64-linux.default.inputDerivation" attic#default nixpkgs#direnv nixpkgs#jq nixpkgs#nix-direnv ) just "${cache[@]}" } # Build and cache *all* the package outputs from the flake.nix packages() { declare -a cache="($( nix flake show --json 2> /dev/null | nix run --inputs-from "$toplevel" nixpkgs#jq -- \ -r \ '.packages."x86_64-linux" | keys | map("'"$toplevel"'#" + .) | @sh' ))" just "${cache[@]}" } eval "$@"