// Command genicon writes the application icon for packaging. // // genicon -hicolor /x/apps/keeporg.png, the Linux icon theme layout // genicon -iconset /icon_x[@2x].png, the input iconutil turns into .icns package main import ( "flag" "fmt" "os" "path/filepath" "cc.tiredsysadmin.keeporg/internal/icon" ) func main() { hicolor := flag.String("hicolor", "", "write a hicolor icon theme tree under this directory") iconset := flag.String("iconset", "", "write a macOS .iconset directory") flag.Parse() if *hicolor == "" && *iconset == "" { flag.Usage() os.Exit(2) } if *hicolor != "" { for _, n := range []int{16, 32, 48, 64, 128, 256, 512} { write(filepath.Join(*hicolor, fmt.Sprintf("%dx%d", n, n), "apps", "keeporg.png"), n) } } if *iconset != "" { for _, n := range []int{16, 32, 128, 256, 512} { write(filepath.Join(*iconset, fmt.Sprintf("icon_%dx%d.png", n, n)), n) write(filepath.Join(*iconset, fmt.Sprintf("icon_%dx%d@2x.png", n, n)), 2*n) } } } func write(path string, size int) { if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil { fmt.Fprintln(os.Stderr, "genicon:", err) os.Exit(1) } if err := os.WriteFile(path, icon.PNG(icon.App(size)), 0o644); err != nil { fmt.Fprintln(os.Stderr, "genicon:", err) os.Exit(1) } }