This commit is contained in:
Thomas G. Lopes
2026-03-04 15:26:32 +00:00
parent 59dbfd8162
commit a788760593
3 changed files with 51 additions and 16 deletions
+3
View File
@@ -39,3 +39,6 @@ sigil unlink ~/.config/wezterm/wezterm.lua
## Notes ## Notes
- If a repo file is missing, stale links should be pruned. - If a repo file is missing, stale links should be pruned.
- Prefer `sigil add` over manual moves into `files/`. - Prefer `sigil add` over manual moves into `files/`.
## Development
- When modifying this repo, rebuild and install the binary: `go build -o ~/.local/bin/sigil .`
+2
View File
@@ -34,6 +34,8 @@ return {
target = { target = {
linux = "~/.config/nvim", linux = "~/.config/nvim",
macos = "~/Library/Application Support/nvim", macos = "~/Library/Application Support/nvim",
-- use false to skip applying on that platform
windows = false,
default = "~/.config/nvim", default = "~/.config/nvim",
}, },
} }
+46 -16
View File
@@ -20,9 +20,12 @@ const (
) )
type packageConfig struct { type packageConfig struct {
targets map[string]string targets map[string]string
disabled map[string]bool
} }
var errTargetDisabled = errors.New("target disabled for this platform")
func main() { func main() {
if len(os.Args) < 2 { if len(os.Args) < 2 {
usage() usage()
@@ -179,8 +182,11 @@ func resolvePathSpec(pathSpec, repoAbs string) (string, string, error) {
if err != nil { if err != nil {
continue continue
} }
targetRoot, err := selectTarget(cfg.targets) targetRoot, err := selectTarget(cfg)
if err != nil { if err != nil {
if errors.Is(err, errTargetDisabled) {
continue
}
continue continue
} }
absTarget, err := filepath.Abs(expandHome(targetRoot)) absTarget, err := filepath.Abs(expandHome(targetRoot))
@@ -240,8 +246,11 @@ func applyCmd(args []string) error {
return fmt.Errorf("%s: %w", entry.Name(), err) return fmt.Errorf("%s: %w", entry.Name(), err)
} }
targetRoot, err := selectTarget(cfg.targets) targetRoot, err := selectTarget(cfg)
if err != nil { if err != nil {
if errors.Is(err, errTargetDisabled) {
continue
}
return fmt.Errorf("%s: %w", entry.Name(), err) return fmt.Errorf("%s: %w", entry.Name(), err)
} }
@@ -427,7 +436,7 @@ func unlinkCmd(args []string) error {
return err return err
} }
targetRoot, err := selectTarget(cfg.targets) targetRoot, err := selectTarget(cfg)
if err != nil { if err != nil {
return err return err
} }
@@ -487,7 +496,7 @@ func removeCmd(args []string) error {
return err return err
} }
targetRoot, err := selectTarget(cfg.targets) targetRoot, err := selectTarget(cfg)
if err != nil { if err != nil {
return err return err
} }
@@ -620,19 +629,31 @@ func loadConfig(path string) (*packageConfig, error) {
} }
targets := make(map[string]string) targets := make(map[string]string)
disabled := make(map[string]bool)
targetTbl.ForEach(func(k, v lua.LValue) { targetTbl.ForEach(func(k, v lua.LValue) {
ks, ok1 := k.(lua.LString) ks, ok := k.(lua.LString)
vs, ok2 := v.(lua.LString) if !ok {
if ok1 && ok2 { return
targets[string(ks)] = expandHome(string(vs))
} }
if v == lua.LNil || v == lua.LFalse {
disabled[string(ks)] = true
return
}
vs, ok := v.(lua.LString)
if !ok {
return
}
targets[string(ks)] = expandHome(string(vs))
}) })
if len(targets) == 0 { if len(targets) == 0 && len(disabled) == 0 {
return nil, errors.New("config.target is empty") return nil, errors.New("config.target is empty")
} }
return &packageConfig{targets: targets}, nil return &packageConfig{targets: targets, disabled: disabled}, nil
} }
func statusCmd() error { func statusCmd() error {
@@ -658,8 +679,11 @@ func statusCmd() error {
return fmt.Errorf("%s: %w", entry.Name(), err) return fmt.Errorf("%s: %w", entry.Name(), err)
} }
targetRoot, err := selectTarget(cfg.targets) targetRoot, err := selectTarget(cfg)
if err != nil { if err != nil {
if errors.Is(err, errTargetDisabled) {
continue
}
return fmt.Errorf("%s: %w", entry.Name(), err) return fmt.Errorf("%s: %w", entry.Name(), err)
} }
@@ -682,15 +706,18 @@ func statusCmd() error {
return nil return nil
} }
func selectTarget(targets map[string]string) (string, error) { func selectTarget(cfg *packageConfig) (string, error) {
osKey := runtime.GOOS osKey := runtime.GOOS
if osKey == "darwin" { if osKey == "darwin" {
osKey = "macos" osKey = "macos"
} }
if target, ok := targets[osKey]; ok { if cfg.disabled[osKey] {
return "", errTargetDisabled
}
if target, ok := cfg.targets[osKey]; ok {
return expandHome(target), nil return expandHome(target), nil
} }
if target, ok := targets["default"]; ok { if target, ok := cfg.targets["default"]; ok {
return expandHome(target), nil return expandHome(target), nil
} }
return "", fmt.Errorf("missing target for %s and default", osKey) return "", fmt.Errorf("missing target for %s and default", osKey)
@@ -877,8 +904,11 @@ func findPackageByTarget(repo, targetRoot string) (string, error) {
if err != nil { if err != nil {
continue continue
} }
target, err := selectTarget(cfg.targets) target, err := selectTarget(cfg)
if err != nil { if err != nil {
if errors.Is(err, errTargetDisabled) {
continue
}
continue continue
} }
absPkgTarget, err := filepath.Abs(expandHome(target)) absPkgTarget, err := filepath.Abs(expandHome(target))