mirror of
https://github.com/daylinmorgan/oizys.git
synced 2024-12-22 14:20:44 -06:00
add system-path output option
This commit is contained in:
parent
d1cd4900b4
commit
c84ef6a384
3 changed files with 69 additions and 23 deletions
|
@ -14,6 +14,8 @@ var outputCmd = &cobra.Command{
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
rootCmd.AddCommand(outputCmd)
|
rootCmd.AddCommand(outputCmd)
|
||||||
|
outputCmd.Flags().BoolVar(&systemPath, "system-path", false, "show system-path drv")
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,11 +27,12 @@ func Execute() {
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
flake string
|
flake string
|
||||||
host string
|
host string
|
||||||
cacheName string
|
cacheName string
|
||||||
verbose bool
|
verbose bool
|
||||||
nom bool
|
nom bool
|
||||||
|
systemPath bool
|
||||||
)
|
)
|
||||||
|
|
||||||
var oizys = o.NewOizys()
|
var oizys = o.NewOizys()
|
||||||
|
@ -40,7 +41,7 @@ var rootCmd = &cobra.Command{
|
||||||
Use: "oizys",
|
Use: "oizys",
|
||||||
Short: "nix begat oizys",
|
Short: "nix begat oizys",
|
||||||
PersistentPreRun: func(cmd *cobra.Command, args []string) {
|
PersistentPreRun: func(cmd *cobra.Command, args []string) {
|
||||||
oizys.Set(flake, host, cacheName, verbose)
|
oizys.Set(flake, host, cacheName, verbose, systemPath)
|
||||||
oizys.CheckFlake()
|
oizys.CheckFlake()
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,10 +19,11 @@ import (
|
||||||
|
|
||||||
// verbose vs debug?
|
// verbose vs debug?
|
||||||
type Oizys struct {
|
type Oizys struct {
|
||||||
flake string
|
flake string
|
||||||
host string
|
host string
|
||||||
cache string
|
cache string
|
||||||
verbose bool
|
verbose bool
|
||||||
|
systemPath bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewOizys() *Oizys {
|
func NewOizys() *Oizys {
|
||||||
|
@ -42,7 +43,44 @@ func NewOizys() *Oizys {
|
||||||
return &Oizys{flake: flake, host: hostname, cache: "daylin"}
|
return &Oizys{flake: flake, host: hostname, cache: "daylin"}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *Oizys) Output() string {
|
type Derivation struct {
|
||||||
|
InputDrvs map[string]interface{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseSystemPath(derivation map[string]Derivation) (string, error) {
|
||||||
|
for _, nixosDrv := range derivation {
|
||||||
|
for drv := range nixosDrv.InputDrvs {
|
||||||
|
if strings.HasSuffix(drv, "system-path.drv") {
|
||||||
|
return drv, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "", errors.New("failed to find path for system-path.drv")
|
||||||
|
}
|
||||||
|
|
||||||
|
// recreating this command
|
||||||
|
// nix derivation show `oizys output` | jq -r '.[].inputDrvs | with_entries(select(.key|match("system-path";"i"))) | keys | .[]'
|
||||||
|
func (o *Oizys) getSystemPath() string {
|
||||||
|
cmd := exec.Command("nix", "derivation", "show", o.nixosConfigAttr())
|
||||||
|
log.Println("evaluating to get system-path")
|
||||||
|
cmd.Stderr = os.Stderr
|
||||||
|
out, err := cmd.Output()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var derivation map[string]Derivation
|
||||||
|
if err := json.Unmarshal(out, &derivation); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
systemPath, err := parseSystemPath(derivation)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
return systemPath
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Oizys) nixosConfigAttr() string {
|
||||||
return fmt.Sprintf(
|
return fmt.Sprintf(
|
||||||
"%s#nixosConfigurations.%s.config.system.build.toplevel",
|
"%s#nixosConfigurations.%s.config.system.build.toplevel",
|
||||||
o.flake,
|
o.flake,
|
||||||
|
@ -50,9 +88,17 @@ func (o *Oizys) Output() string {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (o *Oizys) Output() string {
|
||||||
|
if o.systemPath {
|
||||||
|
return o.getSystemPath()
|
||||||
|
} else {
|
||||||
|
return o.nixosConfigAttr()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (o *Oizys) Set(
|
func (o *Oizys) Set(
|
||||||
flake, host, cache string,
|
flake, host, cache string,
|
||||||
verbose bool,
|
verbose, systemPath bool,
|
||||||
) {
|
) {
|
||||||
if host != "" {
|
if host != "" {
|
||||||
o.host = host
|
o.host = host
|
||||||
|
@ -64,6 +110,7 @@ func (o *Oizys) Set(
|
||||||
o.cache = cache
|
o.cache = cache
|
||||||
}
|
}
|
||||||
o.verbose = verbose
|
o.verbose = verbose
|
||||||
|
o.systemPath = systemPath
|
||||||
}
|
}
|
||||||
|
|
||||||
func terminalSize() (int, int) {
|
func terminalSize() (int, int) {
|
||||||
|
@ -153,7 +200,11 @@ func (o *Oizys) git(rest ...string) *exec.Cmd {
|
||||||
}
|
}
|
||||||
|
|
||||||
func showFailedOutput(buf []byte) {
|
func showFailedOutput(buf []byte) {
|
||||||
arrow := lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color("9")).Render("->")
|
arrow := lipgloss.
|
||||||
|
NewStyle().
|
||||||
|
Bold(true).
|
||||||
|
Foreground(lipgloss.Color("9")).
|
||||||
|
Render("->")
|
||||||
for _, line := range strings.Split(strings.TrimSpace(string(buf)), "\n") {
|
for _, line := range strings.Split(strings.TrimSpace(string(buf)), "\n") {
|
||||||
fmt.Println(arrow, line)
|
fmt.Println(arrow, line)
|
||||||
}
|
}
|
||||||
|
@ -208,7 +259,7 @@ func showDryRunResult(nixOutput string, verbose bool) {
|
||||||
|
|
||||||
func (o *Oizys) NixDryRun(verbose bool, rest ...string) {
|
func (o *Oizys) NixDryRun(verbose bool, rest ...string) {
|
||||||
args := []string{
|
args := []string{
|
||||||
"build", o.Output(), "--dry-run",
|
"build", o.nixosConfigAttr(), "--dry-run",
|
||||||
}
|
}
|
||||||
args = append(args, rest...)
|
args = append(args, rest...)
|
||||||
cmd := exec.Command("nix", args...)
|
cmd := exec.Command("nix", args...)
|
||||||
|
@ -302,7 +353,7 @@ func (o *Oizys) Checks(nom bool, rest ...string) {
|
||||||
func (o *Oizys) CacheBuild(rest ...string) {
|
func (o *Oizys) CacheBuild(rest ...string) {
|
||||||
args := []string{
|
args := []string{
|
||||||
"watch-exec", o.cache, "--", "nix",
|
"watch-exec", o.cache, "--", "nix",
|
||||||
"build", o.Output(), "--print-build-logs",
|
"build", o.nixosConfigAttr(), "--print-build-logs",
|
||||||
"--accept-flake-config",
|
"--accept-flake-config",
|
||||||
}
|
}
|
||||||
args = append(args, rest...)
|
args = append(args, rest...)
|
||||||
|
@ -325,14 +376,6 @@ func (o *Oizys) CI(rest ...string) {
|
||||||
runCommand(cmd)
|
runCommand(cmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Output(flake string, host string) string {
|
|
||||||
return fmt.Sprintf(
|
|
||||||
"%s#nixosConfigurations.%s.config.system.build.toplevel",
|
|
||||||
flake,
|
|
||||||
host,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
func nixSpinner(host string) *spinner.Spinner {
|
func nixSpinner(host string) *spinner.Spinner {
|
||||||
msg := fmt.Sprintf("%s %s", " evaluating derivation for:",
|
msg := fmt.Sprintf("%s %s", " evaluating derivation for:",
|
||||||
lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color("6")).Render(host),
|
lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color("6")).Render(host),
|
||||||
|
|
Loading…
Reference in a new issue