-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
83 lines (70 loc) · 2.32 KB
/
main.go
File metadata and controls
83 lines (70 loc) · 2.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package main
import (
"context"
_ "embed"
"os"
"path"
"text/template"
"time"
"gopkg.in/natefinch/lumberjack.v2"
"log/slog"
)
type Config struct {
FlatpakDir string
}
type Flatpak struct {
Application struct {
Name string `ini:"name"`
Command string `ini:"command"`
} `ini:"Application"`
Timestamp time.Time `ini:"-"`
}
//go:embed script.gotmpl
var scriptTemplateRaw string
var log *slog.Logger
func parseArgs() Config {
config := Config{}
if len(os.Args) > 1 {
config.FlatpakDir = os.Args[1]
} else {
config.FlatpakDir = "/var/lib/flatpak"
}
return config
}
func prepare(ctx context.Context, config *Config) (*template.Template, *lumberjack.Logger) {
logFile := &lumberjack.Logger{
Filename: path.Join(config.FlatpakDir, "flatpak-alias.log"), // Path to the log file
MaxSize: 1, // Maximum size in MB before rotation
MaxBackups: 3, // Maximum number of old log files to retain
MaxAge: 365, // Maximum number of days to retain old log files
Compress: true, // Compress rotated files
}
textHandler := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelInfo})
jsonHandler := slog.NewJSONHandler(logFile, &slog.HandlerOptions{Level: slog.LevelInfo})
log = slog.New(multiHandler{handlers: []slog.Handler{textHandler, jsonHandler}})
slog.SetDefault(log)
scriptTemplate, err := template.New("script").Parse(scriptTemplateRaw)
if err != nil {
log.ErrorContext(ctx, "Error parsing template", "err", err)
os.Exit(1)
}
config.FlatpakDir = path.Join(config.FlatpakDir, "aliases")
log.InfoContext(ctx, "Writing script", "path", config.FlatpakDir)
err = os.MkdirAll(config.FlatpakDir, 0755)
if err != nil {
log.ErrorContext(ctx, "Error creating directory", "err", err)
os.Exit(1)
}
return scriptTemplate, logFile
}
func main() {
ctx := context.Background()
config := parseArgs()
scriptTemplate, logFile := prepare(ctx, &config)
defer logFile.Close()
log.InfoContext(ctx, "Starting flatpak-alias")
log.InfoContext(ctx, "Writing script", "path", config.FlatpakDir, "args", os.Args)
apps := getAllFlatpakApps(ctx)
removeOldScripts(ctx, config)
generateScripts(ctx, apps, scriptTemplate, config)
}