package main import ( "bytes" "errors" "flag" "fmt" "log" "os" "os/exec" "strings" "time" ) func main() { sb := os.Getenv("SECOND_BRAIN") ParseFlags(sb) } func ParseFlags(sb string) { note := sb + "/notes" daily := sb + "/periodic/daily" templates := sb + "/templates" quickPtr := flag.Bool("q", false, "Open quick file for notes") listPtr := flag.Bool("l", false, "List files in notes directory") dailyPtr := flag.Bool("d", false, "Create/Edit daily journal entry") flag.Parse() fileName := flag.Args() if *quickPtr { file := note + "/quick.md" OpenNvim(file) os.Exit(0) } if *listPtr { files, err := os.ReadDir(note) if err != nil { log.Fatal(err) } for _, f := range files { file := f.Name() fmt.Println(strings.ReplaceAll(file, ".md", "")) } os.Exit(0) } if *dailyPtr { date := time.Now().Local().Format("2006-01-02") file := daily + "/" + date + ".md" dailyTemplate := templates + "/daily.md" // If the file doesn't exist, create it if _, err := os.Stat(file); errors.Is(err, os.ErrNotExist) { // Read template file t, _ := os.ReadFile(dailyTemplate) // Replace yesterday and tomorrow with specific dates t = bytes.ReplaceAll(t, []byte("YESTERDAY"), []byte(time.Now().Local().AddDate(0, 0, -1).Format("2006-01-02"))) t = bytes.ReplaceAll(t, []byte("TOMORROW"), []byte(time.Now().Local().AddDate(0, 0, 1).Format("2006-01-02"))) // write the file os.WriteFile(file, t, 0644) } OpenNvim(file) os.Exit(0) } if len(fileName) == 0 { fmt.Println("You didn't specify a note name") os.Exit(1) } file := note + "/" + fileName[0] + ".md" OpenNvim(file) } func OpenNvim(file string) { nvim := exec.Command("nvim", file) nvim.Stdin = os.Stdin nvim.Stdout = os.Stdout nvim.Stderr = os.Stderr err := nvim.Run() if err != nil { panic(err) } }