Refactor Hyprland configs, introduce Sithego for theming, and add supporting scripts
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
package gtk
|
||||
|
||||
import (
|
||||
"Sithego/themer"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"text/template"
|
||||
)
|
||||
|
||||
type Adapter struct {
|
||||
OutputDir string
|
||||
}
|
||||
|
||||
type Option func(*Adapter)
|
||||
|
||||
func WithOutputDir(dir string) Option {
|
||||
return func(a *Adapter) {
|
||||
a.OutputDir = dir
|
||||
}
|
||||
}
|
||||
|
||||
func New(opt ...Option) *Adapter {
|
||||
home, _ := os.UserHomeDir()
|
||||
a := &Adapter{
|
||||
OutputDir: home + "/.themes/",
|
||||
}
|
||||
for _, o := range opt {
|
||||
o(a)
|
||||
}
|
||||
return a
|
||||
}
|
||||
|
||||
func (a *Adapter) Name() string {
|
||||
return "GTK"
|
||||
}
|
||||
|
||||
func (a *Adapter) Generate(t themer.Theme) error {
|
||||
components := []string{
|
||||
"template.css",
|
||||
"components/base.css",
|
||||
"components/headerbar.css",
|
||||
"components/buttons.css",
|
||||
"components/entries.css",
|
||||
"components/menus.css",
|
||||
"components/widgets.css",
|
||||
"components/checks.css",
|
||||
"components/scrollbars.css",
|
||||
"components/notebook.css",
|
||||
}
|
||||
|
||||
outputDir := a.OutputDir + t.Meta.Name + "/gtk-3.0"
|
||||
_ = os.RemoveAll(outputDir)
|
||||
outputGTK4 := a.OutputDir + t.Meta.Name + "/gtk-4.0"
|
||||
_ = os.RemoveAll(outputGTK4)
|
||||
|
||||
if err := os.MkdirAll(outputDir, 0775); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, component := range components {
|
||||
templatePath := filepath.Join("themer/adapters/gtk", component)
|
||||
templ, err := template.ParseFiles(templatePath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
outputName := filepath.Base(component)
|
||||
if outputName == "template.css" {
|
||||
outputName = "gtk.css"
|
||||
}
|
||||
outputPath := filepath.Join(outputDir, outputName)
|
||||
|
||||
file, err := os.Create(outputPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = templ.Execute(file, struct {
|
||||
Theme themer.Theme
|
||||
}{
|
||||
Theme: t,
|
||||
})
|
||||
_ = file.Close()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if err := os.MkdirAll(outputGTK4, 0775); err != nil {
|
||||
return err
|
||||
}
|
||||
return os.CopyFS(outputGTK4, os.DirFS(outputDir))
|
||||
}
|
||||
Reference in New Issue
Block a user