#shellcheck shell=bash

use_pkgs() {
    if ! has nix; then
        # shellcheck disable=2016
        log_error 'use_pkgs: `nix` is not in PATH'
        return 1
    fi

    # Use user-provided default value, or fallback to nixpkgs
    local DEFAULT_FLAKE="${DIRENV_DEFAULT_FLAKE:-nixpkgs}"
    # Additional args that should be forwarded to `nix`
    local args=()

    # Allow changing the default flake through a command line switch
    while true; do
        case "$1" in
            -b|--broken)
                args+=(--impure)
                export NIXPKGS_ALLOW_BROKEN=1
                shift
                ;;
            -f|--flake)
                DEFAULT_FLAKE="$2"
                shift 2
                ;;
            -i|--impure)
                args+=(--impure)
                shift
                ;;
            -s|--insecure)
                args+=(--impure)
                export NIXPKGS_ALLOW_INSECURE=1
                shift
                ;;
            -u|--unfree)
                args+=(--impure)
                export NIXPKGS_ALLOW_UNFREE=1
                shift
                ;;
            --)
                shift
                break
                ;;
            *)
                break
                ;;
        esac
    done


    # Allow specifying a full installable, or just a package name and use the default flake
    local packages=()
    for pkg; do
        if [[ $pkg =~ .*#.* ]]; then
            packages+=("$pkg")
        else
            packages+=("$DEFAULT_FLAKE#$pkg")
        fi
    done

    # shellcheck disable=2154
    direnv_load nix shell "${args[@]}" "${packages[@]}" --command "$direnv" dump

    # Clean-up after ourselves (assumes the user does not set them before us)
    unset NIXPKGS_ALLOW_BROKEN
    unset NIXPKGS_ALLOW_INSECURE
    unset NIXPKGS_ALLOW_UNFREE
}