#!/bin/sh set -eu util_path="${GITHUB_ACTION_PATH:-.}/scripts/utils.sh" # shellcheck source=scripts/utils.sh . "${util_path}" system=$(nix eval --impure --json --expr 'builtins.currentSystem') # Extract the names of a flake attrset get_names() { nix eval --json --apply builtins.attrNames "$1" 2>/dev/null || echo '[]' } group "Show Packages for $system" packages=$(get_names .#packages."$system") [ -z "$packages" ] || log "$packages" endgroup group 'Show Home Manager Configurations' hmConfigs=$(get_names .#homeConfigurations) [ -z "$hmConfigs" ] || log "$hmConfigs" endgroup group 'Show NixOS Configurations' nixosConfigs=$(get_names .#nixosConfigurations) [ -z "$nixosConfigs" ] || log "$nixosConfigs" endgroup closure_size() { name=$1 path=$2 log "Calculating size of $name at $path" path_info=$(nix path-info --closure-size --json "$path") echo "$path_info" | jq --compact-output \ --arg pkg "$name" \ --arg path "$path" \ '.[] | {"name": $pkg, "path": $path, "size": .closureSize, "narSize": .narSize, "raw": .}' } pkgs_json() { for package in $packages; do log "Building $package" path=$(nix build --print-out-paths ".#$package") closure_size "$package" "$path" done } hm_configs_json() { for config in $hmConfigs; do log "Building $config" path=$(nix build --print-out-paths ".#homeConfigurations.$config.config.home.activationPackage") closure_size "$config" "$path" done } nixos_configs_json() { for config in $nixosConfigs; do log "Building $config" path=$(nix build --print-out-paths ".#nixosConfigurations.$config.config.system.build.toplevel") closure_size "$config" "$path" done } group 'Building packages' pkgs=$(pkgs_json | jq --slurp .) endgroup group 'Building Home Manager configurations' hmConfigs=$(hm_configs_json | jq --slurp .) endgroup group 'Building NixOS configurations' nixosConfigs=$(nixos_configs_json | jq --slurp .) endgroup echo "{}" | jq \ --argjson pkgs "$pkgs" \ --argjson hmConfigs "$hmConfigs" \ --argjson nixosConfigs "$nixosConfigs" \ '{"packages": $pkgs, "nixosConfigurations": $nixosConfigs, "homeConfigurations": $hmConfigs}' >"${1:-/dev/stdout}"