#!/usr/bin/env bash

source common.sh

# test help output

nix-build --help
nix-shell --help

nix-env --help
nix-env --install --help
nix-env --upgrade --help
nix-env --uninstall --help
nix-env --set --help
nix-env --set-flag --help
nix-env --query --help
nix-env --switch-profile --help
nix-env --list-generations --help
nix-env --delete-generations --help
nix-env --switch-generation --help
nix-env --rollback --help

nix-store --help
nix-store --realise --help
nix-store --serve --help
nix-store --gc --help
nix-store --delete --help
nix-store --query --help
nix-store --add --help
nix-store --add-fixed --help
nix-store --verify --help
nix-store --verify-path --help
nix-store --repair-path --help
nix-store --dump --help
nix-store --restore --help
nix-store --export --help
nix-store --import --help
nix-store --optimise --help
nix-store --read-log --help
nix-store --dump-db --help
nix-store --load-db --help
nix-store --print-env --help
nix-store --generate-binary-cache-key --help

nix-channel --help
nix-collect-garbage --help
nix-copy-closure --help
nix-daemon --help
nix-hash --help
nix-instantiate --help
nix-prefetch-url --help

function subcommands() {
  jq -r '
def recurse($prefix):
    to_entries[] |
    ($prefix + [.key]) as $newPrefix |
    (if .value | has("commands") then
      ($newPrefix, (.value.commands | recurse($newPrefix)))
    else
      $newPrefix
    end);
.args.commands | recurse([]) | join(" ")
'
}

nix __dump-cli | subcommands | while IFS= read -r cmd; do
    # shellcheck disable=SC2086 # word splitting of cmd is intended
    nix $cmd --help
done
