feat(theming): integrate NvChad chadrc rewrite into Apply

This commit is contained in:
MDietermann
2026-04-14 13:14:47 +02:00
parent 4fa580f226
commit 770bdcf3a2
4 changed files with 109 additions and 0 deletions

View File

@@ -88,6 +88,44 @@ func (m Module) resolvedTheme() string {
return "gruvbox"
}
// WriteChadrc renders chadrc.lua for the given NvChad theme name and writes
// it to ~/.config/nvim/lua/chadrc.lua. If the file does not already exist
// and the surrounding nvim config dir does not exist, the function returns
// nil without writing anything (the user hasn't installed neovim yet).
//
// Exported so the theming package can re-render chadrc on theme switches
// without re-running the full Module pipeline.
func WriteChadrc(nvChadThemeName string) error {
home, err := os.UserHomeDir()
if err != nil {
return err
}
cfg := filepath.Join(home, ".config", "nvim")
chadrcPath := filepath.Join(cfg, "lua", "chadrc.lua")
// If chadrc doesn't exist, only write when the parent dir exists. A
// fresh system where nvim was never installed should be a no-op.
if _, err := os.Stat(chadrcPath); err != nil {
if _, err := os.Stat(cfg); err != nil {
return nil
}
}
tmplBytes, err := assets.ReadFile("assets/chadrc.lua.tmpl")
if err != nil {
return err
}
tmpl, err := template.New("chadrc").Parse(string(tmplBytes))
if err != nil {
return err
}
var buf bytes.Buffer
if err := tmpl.Execute(&buf, struct{ NvChadTheme string }{NvChadTheme: nvChadThemeName}); err != nil {
return err
}
return platform.WriteUserFile(chadrcPath, buf.Bytes(), 0o644)
}
func (m Module) renderChadrc() ([]byte, error) {
tmplBytes, err := assets.ReadFile("assets/chadrc.lua.tmpl")
if err != nil {

View File

@@ -177,4 +177,34 @@ func TestUnknownThemeFallsBackToFirst(t *testing.T) {
}
}
func TestWriteChadrcWritesFile(t *testing.T) {
home := t.TempDir()
t.Setenv("HOME", home)
cfg := filepath.Join(home, ".config", "nvim")
if err := os.MkdirAll(cfg, 0o755); err != nil {
t.Fatal(err)
}
if err := WriteChadrc("dracula"); err != nil {
t.Fatal(err)
}
data, err := os.ReadFile(filepath.Join(cfg, "lua", "chadrc.lua"))
if err != nil {
t.Fatal(err)
}
if !strings.Contains(string(data), `theme = "dracula"`) {
t.Fatalf("theme not applied: %s", data)
}
}
func TestWriteChadrcNoopWithoutConfigDir(t *testing.T) {
home := t.TempDir()
t.Setenv("HOME", home)
if err := WriteChadrc("gruvbox"); err != nil {
t.Fatal(err)
}
if _, err := os.Stat(filepath.Join(home, ".config", "nvim", "lua", "chadrc.lua")); !os.IsNotExist(err) {
t.Fatal("chadrc should not be created on a bare system")
}
}
var _ module.Module = Module{}