package nixbuild

import (
	"context"
	"os/exec"
)

const (
	nixExtraExperimentalFeatures  = "--extra-experimental-features"
	nixExperimentalFeaturesFlakes = "nix-command flakes"
)

// since flakes are supposedly experimental
var nixEnableFlakes = []string{nixExtraExperimentalFeatures, nixExperimentalFeaturesFlakes}

// Nix returns the [exec.Cmd] struct to execute a nix command.
func Nix(ctx context.Context, arg ...string) *exec.Cmd {
	return exec.CommandContext(ctx, "nix", append(nixEnableFlakes, arg...)...)
}

const (
	nixosSuffix0 = "#nixosConfigurations."
	nixosSuffix1 = ".config.system.build.toplevel"
)

// NixOSInstallable returns the nixos installable for a given flake and host.
func NixOSInstallable(flake, host string) string { return flake + nixosSuffix0 + host + nixosSuffix1 }
