#!/usr/bin/env bash set -eu util_path="${GITHUB_ACTION_PATH-.}/utils.sh" # shellcheck source=utils.sh . "${util_path}" group 'Retrieving Flake information' flake_info=$(nix flake show --json) endgroup group 'Show Packages' packages=$( jq --raw-output '.packages."x86_64-linux" | select(. != null) | keys[]' <<-EOF $flake_info EOF ) log "$packages" endgroup group 'Show NixOS Configurations' configurations=$( jq --raw-output '.nixosConfigurations | select(. != null) | keys[]' <<-EOF $flake_info EOF ) log "$configurations" endgroup pkgs_json() { group 'Building packages' trap endgroup RETURN for package in $packages; do log "Building $package" path=$(nix build --print-out-paths ".#$package") log "Calculating size of $package" nix path-info --closure-size --json "$path" | jq --compact-output --arg pkg "$package" '.[] | {"name": $pkg, "size": .closureSize, "narSize": .narSize}' done endgroup } configs_json() { group 'Building NixOS configurations' trap endgroup RETURN for config in $configurations; do log "Building $config" path=$(nix build --print-out-paths ".#nixosConfigurations.$config.config.system.build.toplevel") log "Calculating size of $config" nix path-info --closure-size --json "$path" | jq --compact-output --arg pkg "$config" '.[] | {"name": $pkg, "size": .closureSize, "narSize": .narSize}' done } pkgs=$(pkgs_json | jq --slurp '.') configs=$(configs_json | jq --slurp '.') echo "{}" | jq \ --argjson pkgs "$pkgs" \ --argjson configs "$configs" \ '{"packages": $pkgs, "nixosConfigurations": $configs}'