95 lines
1.6 KiB
Go
95 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"embed"
|
|
"fmt"
|
|
"math/rand"
|
|
"os"
|
|
"os/exec"
|
|
"path"
|
|
"strings"
|
|
|
|
"github.com/charmbracelet/glamour"
|
|
"github.com/charmbracelet/huh"
|
|
)
|
|
|
|
//go:embed banners/*
|
|
var banners embed.FS
|
|
|
|
//go:embed md/*
|
|
var md embed.FS
|
|
|
|
func banner() (string, error) {
|
|
dirs, err := banners.ReadDir("banners")
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
mx := len(dirs)
|
|
ix := rand.Intn(mx)
|
|
content, err := banners.ReadFile(path.Join("banners", dirs[ix].Name()))
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return string(content), nil
|
|
|
|
}
|
|
|
|
func pager() *exec.Cmd {
|
|
return exec.Command("/usr/bin/bat")
|
|
}
|
|
|
|
func _main() error {
|
|
b, err := banner()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
fmt.Println(b)
|
|
|
|
var mode string
|
|
|
|
huh.NewSelect[string]().Title("whuddyu wanna doo?").
|
|
Options(
|
|
huh.NewOption("Get an info dump", "info"),
|
|
huh.NewOption("RSVP", "rsvp"),
|
|
huh.NewOption("Submit a talk proposal or finished work", "submit"),
|
|
huh.NewOption("Propose a creative jam", "jam"),
|
|
huh.NewOption("Quit", "quit"),
|
|
).Value(&mode).Run()
|
|
|
|
switch mode {
|
|
case "info":
|
|
infoContent, err := md.ReadFile("md/info.md")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
out, err := glamour.Render(string(infoContent), "dracula")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
cmd := pager()
|
|
cmd.Stdin = strings.NewReader(out)
|
|
cmd.Stdout = os.Stdout
|
|
err = cmd.Run()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
case "rsvp":
|
|
case "submit":
|
|
case "jam":
|
|
case "quit":
|
|
default:
|
|
return fmt.Errorf("wtf '%s'", mode)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func main() {
|
|
if err := _main(); err != nil {
|
|
fmt.Fprintf(os.Stderr, ":( failed: %s\n", err.Error())
|
|
os.Exit(1)
|
|
}
|
|
}
|