diff --git a/cmd/create.go b/cmd/create.go index 3a4aafc..31629b0 100644 --- a/cmd/create.go +++ b/cmd/create.go @@ -71,6 +71,10 @@ var createCmd = &cobra.Command{ env := utils.Environment{Name: environment, ProjectID: dbProject.ID, Data: utils.ParseEnv(string(envFile))} utils.DB.Create(&env) + envy.Set("envy.current", environment) + err = utils.WriteEnvy(envy) + utils.StopIfErr(err) + fmt.Printf("Created environment %s for project %s.\n", environment, project) } @@ -127,7 +131,7 @@ var createCmd = &cobra.Command{ filePath := path.Join(cwd, "envy.toml") - err = os.WriteFile(filePath, []byte(fmt.Sprintf("[envy]\nproject = \"%s\"\nenv = \"%s\"\n", project, environment)), 0644) + err = os.WriteFile(filePath, []byte(fmt.Sprintf("[envy]\nproject = \"%s\"\nenv = \"%s\"\ncurrent = \"%s\"\n", project, environment, environment)), 0644) if err != nil { log.Println("Error creating envy.toml file:", err) return diff --git a/cmd/list.go b/cmd/list.go index 7e9eb0f..d6a49d1 100644 --- a/cmd/list.go +++ b/cmd/list.go @@ -21,6 +21,7 @@ var listCmd = &cobra.Command{ project := envy.Get("envy.project").(string) pinned := envy.Get("envy.env").(string) + current := envy.Get("envy.current").(string) if project == "" { utils.ErrPrint("Project name is empty. envy.toml file might have been modified.") @@ -45,12 +46,17 @@ var listCmd = &cobra.Command{ } pinStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("#0FF")) + currentStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("#0F0")) + for _, en := range envs { + extra := "" if en.Name == pinned { - fmt.Println(" * " + en.Name + pinStyle.Render(" [pinned]")) - } else { - fmt.Println(" * " + en.Name) + extra += pinStyle.Render("[+]") } + if en.Name == current { + extra += currentStyle.Render("[*]") + } + fmt.Printf(" • %s %s\n", en.Name, extra) } }, } diff --git a/cmd/switch.go b/cmd/switch.go index 00c656b..fd382fa 100644 --- a/cmd/switch.go +++ b/cmd/switch.go @@ -24,6 +24,7 @@ var switchCmd = &cobra.Command{ utils.StopIfErr(err) project := envy.Get("envy.project").(string) + current := envy.Get("envy.current").(string) dbProject, err := utils.GetProject(project) utils.StopIfErr(err) @@ -35,26 +36,34 @@ var switchCmd = &cobra.Command{ envs, err := utils.GetEnvironments(dbProject.ID) utils.StopIfErr(err) - form := huh.NewForm( - huh.NewGroup( - huh.NewSelect[string](). - Title("Select environment"). - Description("Select an environment to switch to"). - OptionsFunc(func() []huh.Option[string] { - var options []huh.Option[string] - for _, en := range envs { - options = append(options, huh.NewOption(en.Name, en.Name)) - } - return options - }, &env). - Value(&env), - ), - ) + if len(envs) == 2 { + for _, en := range envs { + if en.Name != current { + env = en.Name + } + } + } else { + form := huh.NewForm( + huh.NewGroup( + huh.NewSelect[string](). + Title("Select environment"). + Description("Select an environment to switch to"). + OptionsFunc(func() []huh.Option[string] { + var options []huh.Option[string] + for _, en := range envs { + options = append(options, huh.NewOption(en.Name, en.Name)) + } + return options + }, &env). + Value(&env), + ), + ) - err = form.Run() - utils.StopIfErr(err) - if env == "" { - return + err = form.Run() + utils.StopIfErr(err) + if env == "" { + return + } } } @@ -72,6 +81,10 @@ var switchCmd = &cobra.Command{ utils.StopIfErr(err) os.WriteFile(path.Join(cwd, ".env"), []byte(selectedEnv.Data), 0744) + envy.Set("envy.current", env) + err = utils.WriteEnvy(envy) + utils.StopIfErr(err) + fmt.Printf("Switched to environment %v.\n", env) }, } diff --git a/cmd/utils/other.go b/cmd/utils/other.go index f7c7491..af3fdde 100644 --- a/cmd/utils/other.go +++ b/cmd/utils/other.go @@ -44,6 +44,21 @@ func GetEnvy() (*toml.Tree, error) { } } +func WriteEnvy(tree *toml.Tree) error { + data, err := tree.Marshal() + if err != nil { + return err + } + + cwd, err := os.Getwd() + if err != nil { + return err + } + os.WriteFile(path.Join(cwd, "envy.toml"), data, 0744) + + return nil +} + func GetProject(name string) (Project, error) { InitDb() @@ -106,7 +121,7 @@ func ParseEnv(env string) string { } var comment = "" if !enabled { - comment = "# " + comment = "#" } envs += fmt.Sprintf("%v%v=%v\n", comment, key, value) }