package main import ( "flag" "fmt" "os" "path/filepath" "git.meatbag.se/vlv/shell-history/internal/add" "git.meatbag.se/vlv/shell-history/internal/db" "git.meatbag.se/vlv/shell-history/internal/importer" "git.meatbag.se/vlv/shell-history/internal/search" "git.meatbag.se/vlv/shell-history/internal/stats" "git.meatbag.se/vlv/shell-history/internal/sync" ) func main() { global := flag.NewFlagSet("verbatim", flag.ExitOnError) dbPath := global.String("db", defaultDBPath(), "path to database") global.Usage = usage global.Parse(os.Args[1:]) args := global.Args() if len(args) < 1 { usage() } cmd := args[0] rest := args[1:] d, err := db.Open(*dbPath) if err != nil { fmt.Fprintf(os.Stderr, "verbatim: %v\n", err) os.Exit(1) } defer d.Close() switch cmd { case "add": err = add.Run(d, rest) case "search": err = search.Run(d, rest) case "sync": err = sync.Run(d, rest) case "import": err = importer.Run(d, rest) case "stats": err = stats.Run(d) default: usage() } if err != nil { fmt.Fprintf(os.Stderr, "verbatim %s: %v\n", cmd, err) os.Exit(1) } } func defaultDBPath() string { home, err := os.UserHomeDir() if err != nil { return "history.db" } return filepath.Join(home, ".local", "share", "verbatim", "history.db") } func usage() { fmt.Fprintln(os.Stderr, `usage: verbatim [--db PATH] [flags] commands: add record a command search search history sync export, git sync, import import one-time import from log files stats show statistics`) os.Exit(1) }