package main import ( "flag" "fmt" "log" "os" "os/exec" "os/user" openPrivacyLog "git.openprivacy.ca/openprivacy/log" _ "github.com/mutecomm/go-sqlcipher/v4" tea "github.com/charmbracelet/bubbletea" ) const ( help = `cairde [options] A text-based user interface for metadata resistant online chat. Options: -a turn on the Tor ACN immediately -d turn on debug logging -v output version -h output help ` ) func main() { var ( acnFlag bool debugFlag bool versionFlag bool helpFlag bool ) flag.BoolVar(&helpFlag, "h", false, "output help") flag.BoolVar(&acnFlag, "a", false, "turn on the Tor ACN immediately") flag.BoolVar(&debugFlag, "d", false, "turn on debug logging") flag.BoolVar(&versionFlag, "v", false, "output version") flag.Parse() if helpFlag { fmt.Print(help) os.Exit(0) } if versionFlag { fmt.Print("cairde pre-alpha v0.1.0") // TODO os.Exit(0) } // NOTE(d1): pending https://git.coopcloud.tech/decentral1se/cairde/issues/1 _, err := exec.LookPath("tor") if err != nil { log.Fatal("could not find 'tor' command, is it installed?") } f, err := tea.LogToFile("cairde.log", "debug") if err != nil { log.Fatal(err) } defer f.Close() filelogger, err := openPrivacyLog.NewFile(openPrivacyLog.LevelInfo, "cwtch.log") if err == nil { openPrivacyLog.SetStd(filelogger) } user, err := user.Current() if err != nil { log.Fatalf("unable to determine current user: %s", err) } p := tea.NewProgram( newModel(user.Username, user.HomeDir, debugFlag), tea.WithAltScreen(), tea.WithMouseAllMotion(), ) if acnFlag { go func() { p.Send(acnOnMsg{}) }() } if _, err := p.Run(); err != nil { log.Fatal(err) } }