53 lines
996 B
Go
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
|
|
}
|