checkpoint: only manage the configs lists in host config
This commit is contained in:
parent
a7d30e9c01
commit
cef88ba317
6 changed files with 64 additions and 6 deletions
|
@ -16,6 +16,17 @@
|
||||||
"Projects"
|
"Projects"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"applicationConfigurations": [
|
||||||
|
"alacritty",
|
||||||
|
"amfora",
|
||||||
|
"git",
|
||||||
|
"lf",
|
||||||
|
"logrotate",
|
||||||
|
"tmux",
|
||||||
|
"user-dirs.dirs",
|
||||||
|
"user-dirs.locale",
|
||||||
|
"zk"
|
||||||
|
],
|
||||||
"git": {
|
"git": {
|
||||||
"gpgSign": true,
|
"gpgSign": true,
|
||||||
"user": {
|
"user": {
|
||||||
|
|
|
@ -4,6 +4,15 @@
|
||||||
"includeXDGDirectories": true,
|
"includeXDGDirectories": true,
|
||||||
"additionalDirectories": [],
|
"additionalDirectories": [],
|
||||||
},
|
},
|
||||||
|
"applicationConfigurations": [
|
||||||
|
"git",
|
||||||
|
"lf",
|
||||||
|
"logrotate",
|
||||||
|
"river",
|
||||||
|
"tmux",
|
||||||
|
"user-dirs.dirs",
|
||||||
|
"user-dirs.locale"
|
||||||
|
],
|
||||||
"git": {
|
"git": {
|
||||||
"gpgSign": false,
|
"gpgSign": false,
|
||||||
"user": {
|
"user": {
|
||||||
|
|
|
@ -8,6 +8,7 @@ import (
|
||||||
"io/fs"
|
"io/fs"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"slices"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -119,3 +120,13 @@ func ensureSymlink(source, dest string) error {
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func applicationConfigurationSet(applicationConfigurationList []string) map[string]struct{} {
|
||||||
|
set := make(map[string]struct{})
|
||||||
|
|
||||||
|
for _, app := range slices.All(applicationConfigurationList) {
|
||||||
|
set[app] = struct{}{}
|
||||||
|
}
|
||||||
|
|
||||||
|
return set
|
||||||
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ import (
|
||||||
|
|
||||||
type config struct {
|
type config struct {
|
||||||
Directories configDirectories `json:"directories"`
|
Directories configDirectories `json:"directories"`
|
||||||
|
ApplicationConfigurations []string `json:"applicationConfigurations"`
|
||||||
Git configGit `json:"git"`
|
Git configGit `json:"git"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,5 +86,6 @@ func defaultConfig() config {
|
||||||
SigningKey: "",
|
SigningKey: "",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
ApplicationConfigurations: []string{},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,14 +22,21 @@ func Files() error {
|
||||||
return fmt.Errorf("unable to get the user's home configuration directory: %w", err)
|
return fmt.Errorf("unable to get the user's home configuration directory: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = filepath.WalkDir(rootFilesDir, manageFilesFunc(homeConfigDirectory)); err != nil {
|
config, err := newConfig()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("unable to load the configuration: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
appConfigSet := applicationConfigurationSet(config.ApplicationConfigurations)
|
||||||
|
|
||||||
|
if err = filepath.WalkDir(rootFilesDir, manageFilesFunc(homeConfigDirectory, appConfigSet)); err != nil {
|
||||||
return fmt.Errorf("received an error while processing the files: %w", err)
|
return fmt.Errorf("received an error while processing the files: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func manageFilesFunc(homeConfigDirectory string) fs.WalkDirFunc {
|
func manageFilesFunc(homeConfigDirectory string, appConfigSet map[string]struct{}) fs.WalkDirFunc {
|
||||||
return func(path string, d fs.DirEntry, err error) error {
|
return func(path string, d fs.DirEntry, err error) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -41,6 +48,12 @@ func manageFilesFunc(homeConfigDirectory string) fs.WalkDirFunc {
|
||||||
|
|
||||||
relativePath := strings.TrimPrefix(path, rootFilesDir+"/")
|
relativePath := strings.TrimPrefix(path, rootFilesDir+"/")
|
||||||
|
|
||||||
|
appConfigName := strings.SplitN(relativePath, "/", 2)[0]
|
||||||
|
|
||||||
|
if _, exists := appConfigSet[appConfigName]; !exists {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
managedPath := filepath.Join(rootManagedDir, relativePath)
|
managedPath := filepath.Join(rootManagedDir, relativePath)
|
||||||
configPath := filepath.Join(homeConfigDirectory, relativePath)
|
configPath := filepath.Join(homeConfigDirectory, relativePath)
|
||||||
|
|
||||||
|
@ -56,6 +69,8 @@ func manageFilesFunc(homeConfigDirectory string) fs.WalkDirFunc {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fmt.Println("Processing file:", relativePath)
|
||||||
|
|
||||||
if err := sh.Copy(managedPath, path); err != nil {
|
if err := sh.Copy(managedPath, path); err != nil {
|
||||||
return fmt.Errorf("unable to copy %s to %s: %w", path, managedPath, err)
|
return fmt.Errorf("unable to copy %s to %s: %w", path, managedPath, err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,14 +28,16 @@ func Templates() error {
|
||||||
return fmt.Errorf("unable to load the configuration: %w", err)
|
return fmt.Errorf("unable to load the configuration: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = filepath.WalkDir(rootTemplateDir, manageTemplatesFunc(homeConfigDirectory, config)); err != nil {
|
appConfigSet := applicationConfigurationSet(config.ApplicationConfigurations)
|
||||||
|
|
||||||
|
if err = filepath.WalkDir(rootTemplateDir, manageTemplatesFunc(homeConfigDirectory, config, appConfigSet)); err != nil {
|
||||||
return fmt.Errorf("received an error while processing the templates: %w", err)
|
return fmt.Errorf("received an error while processing the templates: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func manageTemplatesFunc(homeConfigDirectory string, config config) fs.WalkDirFunc {
|
func manageTemplatesFunc(homeConfigDirectory string, config config, appConfigSet map[string]struct{}) fs.WalkDirFunc {
|
||||||
funcMap := template.FuncMap{
|
funcMap := template.FuncMap{
|
||||||
"env": env,
|
"env": env,
|
||||||
}
|
}
|
||||||
|
@ -51,6 +53,12 @@ func manageTemplatesFunc(homeConfigDirectory string, config config) fs.WalkDirFu
|
||||||
|
|
||||||
relativePath := strings.TrimPrefix(templatePath, rootTemplateDir+"/")
|
relativePath := strings.TrimPrefix(templatePath, rootTemplateDir+"/")
|
||||||
|
|
||||||
|
appConfigName := strings.SplitN(relativePath, "/", 2)[0]
|
||||||
|
|
||||||
|
if _, exists := appConfigSet[appConfigName]; !exists {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
if d.IsDir() {
|
if d.IsDir() {
|
||||||
managedDir := filepath.Join(rootManagedDir, relativePath)
|
managedDir := filepath.Join(rootManagedDir, relativePath)
|
||||||
configDir := filepath.Join(homeConfigDirectory, relativePath)
|
configDir := filepath.Join(homeConfigDirectory, relativePath)
|
||||||
|
@ -77,6 +85,8 @@ func manageTemplatesFunc(homeConfigDirectory string, config config) fs.WalkDirFu
|
||||||
managedPath := filepath.Join(rootManagedDir, strings.TrimSuffix(relativePath, templateExtension))
|
managedPath := filepath.Join(rootManagedDir, strings.TrimSuffix(relativePath, templateExtension))
|
||||||
configPath := filepath.Join(homeConfigDirectory, strings.TrimSuffix(relativePath, templateExtension))
|
configPath := filepath.Join(homeConfigDirectory, strings.TrimSuffix(relativePath, templateExtension))
|
||||||
|
|
||||||
|
fmt.Println("Processing template:", relativePath)
|
||||||
|
|
||||||
if err := renderTemplate(config, templatePath, managedPath, funcMap); err != nil {
|
if err := renderTemplate(config, templatePath, managedPath, funcMap); err != nil {
|
||||||
return fmt.Errorf(
|
return fmt.Errorf(
|
||||||
"unable to generate %s from template %s: %w",
|
"unable to generate %s from template %s: %w",
|
||||||
|
|
Loading…
Reference in a new issue