package main import ( "context" "fmt" "log/slog" "os" "os/signal" "path/filepath" "syscall" ) func main() { configDir, err := os.UserConfigDir() if err != nil { fmt.Fprintf(os.Stderr, "Error getting config dir: %v\n", err) os.Exit(1) } logFile := filepath.Join(configDir, "work", "workctl.log") _ = os.MkdirAll(filepath.Dir(logFile), 0750) file, err := os.OpenFile(logFile, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666) if err != nil { fmt.Fprintf(os.Stderr, "Failed to open log file: %v\n", err) os.Exit(1) } defer file.Close() logger := slog.New(slog.NewTextHandler(file, nil)) slog.SetDefault(logger) ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) defer cancel() app, err := NewApp() if err != nil { slog.Error("Unable to setup application", "error", err) fmt.Fprintf(os.Stderr, "Error setting up application: %v\n", err) os.Exit(1) } defer func() { if err := app.Close(); err != nil { slog.Error("Failed to close application resources", "error", err) } }() if err := app.Execute(ctx); err != nil { os.Exit(1) } }