Add dqs cmd

This commit is contained in:
dwrz
2026-10-26 15:14:51 +00:00
parent 0399a8777a
commit 45ba9200d9
2 changed files with 110 additions and 0 deletions
+76
View File
@@ -0,0 +1,76 @@
package config
import (
"flag"
"fmt"
"os"
"time"
"code.chimeric.al/dwrz/dqs/internal/dqs/entry"
)
const (
defaultDir = ""
dirUsage = "path to the dqs directory (default: $XDG_CONFIG_HOME/dqs)"
defaultDate = ""
dateUsage = "entry date in YYYYMMDD format (default: today)"
)
type Config struct {
Date time.Time
Dir string
}
func Get() (*Config, error) {
var (
cfg = &Config{}
date string
)
flag.StringVar(&cfg.Dir, "dir", defaultDir, dirUsage)
flag.StringVar(&date, "d", defaultDate, dateUsage)
flag.StringVar(&date, "date", defaultDate, dateUsage)
flag.Parse()
// If unset, use the default directory.
if cfg.Dir == "" {
dir, err := DefaultDirectory()
if err != nil {
return nil, err
}
cfg.Dir = dir
}
// Parse and set the date.
// If unset, use the current date.
switch date {
case defaultDate:
now := time.Now()
cfg.Date = time.Date(
now.Year(), now.Month(), now.Day(),
0, 0, 0, 0, time.Local,
)
default:
var err error
cfg.Date, err = time.Parse(entry.DateFormat, date)
if err != nil {
return nil, fmt.Errorf("invalid date: %w", err)
}
}
return cfg, nil
}
func DefaultDirectory() (string, error) {
dir, err := os.UserConfigDir()
if err != nil {
return "", fmt.Errorf(
"failed to get user config dir: %w", err,
)
}
return fmt.Sprintf("%s/dqs", dir), nil
}
+34
View File
@@ -0,0 +1,34 @@
package main
import (
"flag"
"log/slog"
"os"
"code.chimeric.al/dwrz/dqs/cmd/dqs/config"
"code.chimeric.al/dwrz/dqs/internal/dqs"
)
func main() {
var log = slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{
AddSource: true,
Level: slog.LevelDebug,
}))
cfg, err := config.Get()
if err != nil {
log.Error("bad config", slog.Any("error", err))
os.Exit(1)
}
cmd, err := dqs.New(dqs.Config{Dir: cfg.Dir})
if err != nil {
log.Error("failed to initialize dqs", slog.Any("error", err))
os.Exit(1)
}
if err := cmd.Run(flag.Args(), cfg.Date); err != nil {
log.Error("failed", slog.Any("error", err))
os.Exit(1)
}
}