diff --git a/main.go b/main.go index c6a7bfb..5298502 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,7 @@ package main import ( "archive/zip" + "bufio" "errors" "fmt" "io" @@ -22,19 +23,28 @@ import ( func main() { commands := defaultCommands() args := os.Args[1:] - if len(args) > 0 { - if args[0] == "--" { - args = args[1:] - } - if len(args) > 0 { - if err := runCommandByName(commands, args[0]); err != nil { - log.Fatal(err) - } - return - } + if len(args) > 0 && args[0] == "--" { + args = args[1:] } - if err := tea.NewProgram(newModel()).Start(); err != nil { + if len(args) == 0 { + printUsage(commands) + return + } + + if isHelpFlag(args[0]) { + printUsage(commands) + return + } + + if args[0] == "menu" { + if err := tea.NewProgram(newModel()).Start(); err != nil { + log.Fatal(err) + } + return + } + + if err := runCommandByName(commands, args[0]); err != nil { log.Fatal(err) } } @@ -66,6 +76,24 @@ func runCommandByName(commands []command, name string) error { return fmt.Errorf("unknown command %q", name) } +func printUsage(commands []command) { + fmt.Println("Usage: pb [options]") + fmt.Println() + fmt.Println("Options:") + fmt.Println(" -h, --help show this help message") + fmt.Println() + fmt.Println("Commands:") + for _, cmd := range commands { + fmt.Printf(" %-10s %s\n", cmd.name, cmd.description) + } + fmt.Println() + fmt.Println("Use \"pb menu\" for an interactive helper.") +} + +func isHelpFlag(arg string) bool { + return arg == "-h" || arg == "--help" +} + func newModel() model { return model{commands: defaultCommands()} } @@ -182,7 +210,11 @@ func runInit() error { return err } - serviceName := generateServiceName() + defaultName := generateServiceName() + serviceName, err := promptServiceName(defaultName) + if err != nil { + return err + } if err := writePBConfig(pbPath, serviceName); err != nil { return err @@ -198,7 +230,7 @@ func runInit() error { return err } - if err := ensureGitignoreEntries(filepath.Join(cwd, ".gitignore"), []string{"bin/pocketbase", "pb_data"}); err != nil { + if err := ensureGitignoreEntries(filepath.Join(cwd, ".gitignore"), []string{"bin/pocketbase", "pb_data", ".env", ".DS_store"}); err != nil { return err } @@ -261,6 +293,20 @@ func generateServiceName() string { return fmt.Sprintf("%s-%s", adjective, noun) } +func promptServiceName(defaultName string) (string, error) { + reader := bufio.NewReader(os.Stdin) + fmt.Printf("Service name [%s]: ", defaultName) + input, err := reader.ReadString('\n') + if err != nil { + return "", err + } + input = strings.TrimSpace(input) + if input == "" { + return defaultName, nil + } + return input, nil +} + func pocketbaseBinaryName(goos string) string { if goos == "windows" { return "pocketbase.exe"