initial commit
This commit is contained in:
commit
078bd90570
9 changed files with 374 additions and 0 deletions
0
.gitignore
vendored
Normal file
0
.gitignore
vendored
Normal file
6
Justfile
Normal file
6
Justfile
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
paletteURL := "https://raw.githubusercontent.com/catppuccin/palette/refs/heads/main/palette.json"
|
||||
|
||||
download-palette:
|
||||
wget -O palette.json {{ paletteURL }}
|
||||
generate: download-palette
|
||||
go generate
|
||||
29
README.md
Normal file
29
README.md
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
# lipgloss-catppuccin
|
||||
|
||||
auto-generated lipgloss colors for catppuccin palettes
|
||||
|
||||
## usage
|
||||
1. `go get git.red-panda.pet/pandaware/lipgloss-catppuccin`
|
||||
2. import and use like so:
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/charmbracelet/lipgloss"
|
||||
"git.red-panda.pet/pandaware/lipgloss-catppuccin"
|
||||
)
|
||||
|
||||
func main() {
|
||||
coolStyle := lipgloss.NewStyle().
|
||||
Foreground(catppuccin.Mocha.Sky).
|
||||
Background(catppuccin.Mocha.Surface0)
|
||||
}
|
||||
```
|
||||
|
||||
## developing
|
||||
1. install `just` and `go` >= 1.23
|
||||
2. run `just generate`
|
||||
|
||||
## todo
|
||||
-[ ] make some of the generated names (like those with numbers) a bit friendlier
|
||||
-[ ] clean up `tools/generate.go`
|
||||
145
colors.go
Normal file
145
colors.go
Normal file
|
|
@ -0,0 +1,145 @@
|
|||
package catppuccin
|
||||
|
||||
import "github.com/charmbracelet/lipgloss"
|
||||
|
||||
type Palette struct {
|
||||
Rosewater lipgloss.Color
|
||||
Flamingo lipgloss.Color
|
||||
Pink lipgloss.Color
|
||||
Mauve lipgloss.Color
|
||||
Red lipgloss.Color
|
||||
Maroon lipgloss.Color
|
||||
Peach lipgloss.Color
|
||||
Yellow lipgloss.Color
|
||||
Green lipgloss.Color
|
||||
Teal lipgloss.Color
|
||||
Sky lipgloss.Color
|
||||
Sapphire lipgloss.Color
|
||||
Blue lipgloss.Color
|
||||
Lavender lipgloss.Color
|
||||
Text lipgloss.Color
|
||||
Subtext1 lipgloss.Color
|
||||
Subtext0 lipgloss.Color
|
||||
Overlay2 lipgloss.Color
|
||||
Overlay1 lipgloss.Color
|
||||
Overlay0 lipgloss.Color
|
||||
Surface2 lipgloss.Color
|
||||
Surface1 lipgloss.Color
|
||||
Surface0 lipgloss.Color
|
||||
Base lipgloss.Color
|
||||
Mantle lipgloss.Color
|
||||
Crust lipgloss.Color
|
||||
}
|
||||
|
||||
var Frappe = Palette{
|
||||
Base: lipgloss.Color("#303446"),
|
||||
Blue: lipgloss.Color("#8caaee"),
|
||||
Crust: lipgloss.Color("#232634"),
|
||||
Flamingo: lipgloss.Color("#eebebe"),
|
||||
Green: lipgloss.Color("#a6d189"),
|
||||
Lavender: lipgloss.Color("#babbf1"),
|
||||
Mantle: lipgloss.Color("#292c3c"),
|
||||
Maroon: lipgloss.Color("#ea999c"),
|
||||
Mauve: lipgloss.Color("#ca9ee6"),
|
||||
Overlay0: lipgloss.Color("#737994"),
|
||||
Overlay1: lipgloss.Color("#838ba7"),
|
||||
Overlay2: lipgloss.Color("#949cbb"),
|
||||
Peach: lipgloss.Color("#ef9f76"),
|
||||
Pink: lipgloss.Color("#f4b8e4"),
|
||||
Red: lipgloss.Color("#e78284"),
|
||||
Rosewater: lipgloss.Color("#f2d5cf"),
|
||||
Sapphire: lipgloss.Color("#85c1dc"),
|
||||
Sky: lipgloss.Color("#99d1db"),
|
||||
Subtext0: lipgloss.Color("#a5adce"),
|
||||
Subtext1: lipgloss.Color("#b5bfe2"),
|
||||
Surface0: lipgloss.Color("#414559"),
|
||||
Surface1: lipgloss.Color("#51576d"),
|
||||
Surface2: lipgloss.Color("#626880"),
|
||||
Teal: lipgloss.Color("#81c8be"),
|
||||
Text: lipgloss.Color("#c6d0f5"),
|
||||
Yellow: lipgloss.Color("#e5c890"),
|
||||
}
|
||||
var Latte = Palette{
|
||||
Base: lipgloss.Color("#eff1f5"),
|
||||
Blue: lipgloss.Color("#1e66f5"),
|
||||
Crust: lipgloss.Color("#dce0e8"),
|
||||
Flamingo: lipgloss.Color("#dd7878"),
|
||||
Green: lipgloss.Color("#40a02b"),
|
||||
Lavender: lipgloss.Color("#7287fd"),
|
||||
Mantle: lipgloss.Color("#e6e9ef"),
|
||||
Maroon: lipgloss.Color("#e64553"),
|
||||
Mauve: lipgloss.Color("#8839ef"),
|
||||
Overlay0: lipgloss.Color("#9ca0b0"),
|
||||
Overlay1: lipgloss.Color("#8c8fa1"),
|
||||
Overlay2: lipgloss.Color("#7c7f93"),
|
||||
Peach: lipgloss.Color("#fe640b"),
|
||||
Pink: lipgloss.Color("#ea76cb"),
|
||||
Red: lipgloss.Color("#d20f39"),
|
||||
Rosewater: lipgloss.Color("#dc8a78"),
|
||||
Sapphire: lipgloss.Color("#209fb5"),
|
||||
Sky: lipgloss.Color("#04a5e5"),
|
||||
Subtext0: lipgloss.Color("#6c6f85"),
|
||||
Subtext1: lipgloss.Color("#5c5f77"),
|
||||
Surface0: lipgloss.Color("#ccd0da"),
|
||||
Surface1: lipgloss.Color("#bcc0cc"),
|
||||
Surface2: lipgloss.Color("#acb0be"),
|
||||
Teal: lipgloss.Color("#179299"),
|
||||
Text: lipgloss.Color("#4c4f69"),
|
||||
Yellow: lipgloss.Color("#df8e1d"),
|
||||
}
|
||||
var Macchiato = Palette{
|
||||
Base: lipgloss.Color("#24273a"),
|
||||
Blue: lipgloss.Color("#8aadf4"),
|
||||
Crust: lipgloss.Color("#181926"),
|
||||
Flamingo: lipgloss.Color("#f0c6c6"),
|
||||
Green: lipgloss.Color("#a6da95"),
|
||||
Lavender: lipgloss.Color("#b7bdf8"),
|
||||
Mantle: lipgloss.Color("#1e2030"),
|
||||
Maroon: lipgloss.Color("#ee99a0"),
|
||||
Mauve: lipgloss.Color("#c6a0f6"),
|
||||
Overlay0: lipgloss.Color("#6e738d"),
|
||||
Overlay1: lipgloss.Color("#8087a2"),
|
||||
Overlay2: lipgloss.Color("#939ab7"),
|
||||
Peach: lipgloss.Color("#f5a97f"),
|
||||
Pink: lipgloss.Color("#f5bde6"),
|
||||
Red: lipgloss.Color("#ed8796"),
|
||||
Rosewater: lipgloss.Color("#f4dbd6"),
|
||||
Sapphire: lipgloss.Color("#7dc4e4"),
|
||||
Sky: lipgloss.Color("#91d7e3"),
|
||||
Subtext0: lipgloss.Color("#a5adcb"),
|
||||
Subtext1: lipgloss.Color("#b8c0e0"),
|
||||
Surface0: lipgloss.Color("#363a4f"),
|
||||
Surface1: lipgloss.Color("#494d64"),
|
||||
Surface2: lipgloss.Color("#5b6078"),
|
||||
Teal: lipgloss.Color("#8bd5ca"),
|
||||
Text: lipgloss.Color("#cad3f5"),
|
||||
Yellow: lipgloss.Color("#eed49f"),
|
||||
}
|
||||
var Mocha = Palette{
|
||||
Base: lipgloss.Color("#1e1e2e"),
|
||||
Blue: lipgloss.Color("#89b4fa"),
|
||||
Crust: lipgloss.Color("#11111b"),
|
||||
Flamingo: lipgloss.Color("#f2cdcd"),
|
||||
Green: lipgloss.Color("#a6e3a1"),
|
||||
Lavender: lipgloss.Color("#b4befe"),
|
||||
Mantle: lipgloss.Color("#181825"),
|
||||
Maroon: lipgloss.Color("#eba0ac"),
|
||||
Mauve: lipgloss.Color("#cba6f7"),
|
||||
Overlay0: lipgloss.Color("#6c7086"),
|
||||
Overlay1: lipgloss.Color("#7f849c"),
|
||||
Overlay2: lipgloss.Color("#9399b2"),
|
||||
Peach: lipgloss.Color("#fab387"),
|
||||
Pink: lipgloss.Color("#f5c2e7"),
|
||||
Red: lipgloss.Color("#f38ba8"),
|
||||
Rosewater: lipgloss.Color("#f5e0dc"),
|
||||
Sapphire: lipgloss.Color("#74c7ec"),
|
||||
Sky: lipgloss.Color("#89dceb"),
|
||||
Subtext0: lipgloss.Color("#a6adc8"),
|
||||
Subtext1: lipgloss.Color("#bac2de"),
|
||||
Surface0: lipgloss.Color("#313244"),
|
||||
Surface1: lipgloss.Color("#45475a"),
|
||||
Surface2: lipgloss.Color("#585b70"),
|
||||
Teal: lipgloss.Color("#94e2d5"),
|
||||
Text: lipgloss.Color("#cdd6f4"),
|
||||
Yellow: lipgloss.Color("#f9e2af"),
|
||||
}
|
||||
3
gen.go
Normal file
3
gen.go
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
package catppuccin
|
||||
|
||||
//go:generate go run ./tool/generate.go
|
||||
20
go.mod
Normal file
20
go.mod
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
module git.red-panda.pet/pandaware/lipgloss-catppuccin
|
||||
|
||||
go 1.23.2
|
||||
|
||||
require github.com/charmbracelet/lipgloss v1.1.0
|
||||
|
||||
require (
|
||||
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
|
||||
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect
|
||||
github.com/charmbracelet/x/ansi v0.8.0 // indirect
|
||||
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd // indirect
|
||||
github.com/charmbracelet/x/term v0.2.1 // indirect
|
||||
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
|
||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
github.com/mattn/go-runewidth v0.0.16 // indirect
|
||||
github.com/muesli/termenv v0.16.0 // indirect
|
||||
github.com/rivo/uniseg v0.4.7 // indirect
|
||||
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
|
||||
golang.org/x/sys v0.30.0 // indirect
|
||||
)
|
||||
30
go.sum
Normal file
30
go.sum
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
|
||||
github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
|
||||
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc h1:4pZI35227imm7yK2bGPcfpFEmuY1gc2YSTShr4iJBfs=
|
||||
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc/go.mod h1:X4/0JoqgTIPSFcRA/P6INZzIuyqdFY5rm8tb41s9okk=
|
||||
github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY=
|
||||
github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30=
|
||||
github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE=
|
||||
github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q=
|
||||
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd h1:vy0GVL4jeHEwG5YOXDmi86oYw2yuYUGqz6a8sLwg0X8=
|
||||
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs=
|
||||
github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ=
|
||||
github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg=
|
||||
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
|
||||
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
|
||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
|
||||
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
||||
github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc=
|
||||
github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk=
|
||||
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
|
||||
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
|
||||
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
|
||||
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
|
||||
golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561 h1:MDc5xs78ZrZr3HMQugiXOAkSZtfTpbJLDr/lwfgO53E=
|
||||
golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
|
||||
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
129
tool/generate.go
Normal file
129
tool/generate.go
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
_ "embed"
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"go/format"
|
||||
"os"
|
||||
"strings"
|
||||
"text/template"
|
||||
)
|
||||
|
||||
//go:embed template.gotmpl
|
||||
var tmpl string
|
||||
|
||||
type hsl struct {
|
||||
H float64 `json:"h"`
|
||||
S float64 `json:"s"`
|
||||
L float64 `json:"l"`
|
||||
}
|
||||
|
||||
type rgb struct {
|
||||
R float64 `json:"r"`
|
||||
G float64 `json:"g"`
|
||||
B float64 `json:"b"`
|
||||
}
|
||||
|
||||
type paletteColor struct {
|
||||
Name string `json:"name"`
|
||||
Order uint `json:"order"`
|
||||
Hex string `json:"hex"`
|
||||
RGB rgb `json:"rgb"`
|
||||
HSL hsl `json:"hsl"`
|
||||
Accent bool `json:"accent"`
|
||||
}
|
||||
|
||||
func (c paletteColor) VarName() string {
|
||||
return strings.Join(strings.Split(c.Name, " "), "")
|
||||
}
|
||||
|
||||
type palette struct {
|
||||
Name string `json:"name"`
|
||||
Emoji string `json:"emoji"`
|
||||
Order int `json:"order"`
|
||||
Dark bool `json:"dark"`
|
||||
Colors map[string]paletteColor `json:"colors"`
|
||||
VarName string
|
||||
}
|
||||
|
||||
type paletteFile struct {
|
||||
Version string `json:"version"`
|
||||
Latte palette `json:"latte"`
|
||||
Frappe palette `json:"frappe"`
|
||||
Macchiato palette `json:"macchiato"`
|
||||
Mocha palette `json:"mocha"`
|
||||
}
|
||||
|
||||
func exists(file string) bool {
|
||||
_, err := os.Stat(file)
|
||||
if err != nil {
|
||||
|
||||
}
|
||||
return !os.IsNotExist(err)
|
||||
}
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
if !exists("palette.json") {
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
f, err := os.Open("palette.json")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
var paletteFile paletteFile
|
||||
err = json.NewDecoder(f).Decode(&paletteFile)
|
||||
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
buf := new(bytes.Buffer)
|
||||
|
||||
funcs := template.FuncMap{
|
||||
"palettes": func() map[string]palette {
|
||||
return map[string]palette{
|
||||
"Latte": paletteFile.Latte,
|
||||
"Frappe": paletteFile.Frappe,
|
||||
"Macchiato": paletteFile.Macchiato,
|
||||
"Mocha": paletteFile.Mocha,
|
||||
}
|
||||
},
|
||||
"colorVars": func() []string {
|
||||
keys := make([]string, len(paletteFile.Latte.Colors))
|
||||
|
||||
for _, c := range paletteFile.Latte.Colors {
|
||||
keys[c.Order] = c.VarName()
|
||||
}
|
||||
|
||||
return keys
|
||||
},
|
||||
}
|
||||
|
||||
t, err := template.New("").Funcs(funcs).Parse(tmpl)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
err = t.Execute(buf, nil)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
bs, err := format.Source(buf.Bytes())
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
f, err = os.Create("colors.go")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
f.Write(bs)
|
||||
}
|
||||
12
tool/template.gotmpl
Normal file
12
tool/template.gotmpl
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
package catppuccin
|
||||
|
||||
import "github.com/charmbracelet/lipgloss"
|
||||
|
||||
type Palette struct {
|
||||
{{ range colorVars }}{{ "\t" }}{{ . }} lipgloss.Color{{ "\n" }}{{ end }}
|
||||
}
|
||||
{{ range $var, $p := palettes }}
|
||||
var {{ $var }} = Palette{
|
||||
{{ range $_, $c := $p.Colors }}{{ "\t" }}{{ .VarName }}: lipgloss.Color("{{ .Hex }}"),{{ "\n" }}{{ end }}
|
||||
}{{ end }}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue