// Command glint is a modeless terminal markdown editor with live styling. package main import ( "flag" "fmt" "os" "glint/internal/app" "glint/internal/config" tea "github.com/charmbracelet/bubbletea" ) // version is the build version, overridden at release time via // -ldflags "-X main.version=" (the Homebrew formula sets it). var version = "dev" func main() { if a := os.Args[1:]; len(a) > 0 && (a[0] == "version" || a[0] == "--version" || a[0] == "-v") { fmt.Println("glint", version) return } cfg, err := config.Load() if err != nil { fmt.Fprintln(os.Stderr, "glint: config:", err) } a := app.New(cfg) // Subcommands run before flag parsing. if args := os.Args[1:]; len(args) > 0 { switch args[0] { case "new": // `glint new [name]` — blank buffer, or a named note under the inbox name := "" if len(args) > 1 { name = args[1] } if err := a.StartNew(name); err != nil { fmt.Fprintln(os.Stderr, "glint:", err) os.Exit(1) } run(a) return case "vault": // `glint vault` — open the picker over the configured vault, from anywhere if err := a.StartVault(); err != nil { fmt.Fprintln(os.Stderr, "glint:", err) os.Exit(1) } run(a) return } } daily := flag.Bool("daily", false, "open today's daily note") flag.Parse() var path string if args := flag.Args(); len(args) > 0 { path = args[0] } if err := a.Start(path, *daily); err != nil { fmt.Fprintln(os.Stderr, "glint:", err) os.Exit(1) } run(a) } // run drives the Bubbletea program in the alternate screen. func run(a *app.App) { if _, err := tea.NewProgram(a, tea.WithAltScreen()).Run(); err != nil { fmt.Fprintln(os.Stderr, "glint:", err) os.Exit(1) } }