53 lines
996 B
Go

package main
import (
"fmt"
"os"
"strings"
"gensokyo.uk/nix"
)
func formatInstallable(name string, installable *string, flagNixOS bool, args []string) error {
if len(args) != 1 {
return commandHandlerError(name + " requires exactly 1 argument")
}
*installable = args[0]
if !flagNixOS {
return nil
}
fields := strings.SplitN(*installable, "#", 2)
switch len(fields) {
case 2:
*installable = nix.InstallableNixOS(fields[0], fields[1])
return nil
case 1:
hostname, err := os.Hostname()
if err != nil {
return commandHandlerError(fmt.Sprintf("cannot get hostname: %v", err))
}
*installable = nix.InstallableNixOS(fields[0], hostname)
return nil
default:
return commandHandlerError("unexpected installable")
}
}
func replaceFromEnviron(v map[string]*string) error {
for key, p := range v {
if *p != "env" {
continue
}
if s, ok := os.LookupEnv(key); !ok {
return commandHandlerError(key + " not set")
} else {
*p = s
}
}
return nil
}