diff --git a/AGENTS.md b/AGENTS.md index 86eb83a..8f414e2 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -39,3 +39,6 @@ sigil unlink ~/.config/wezterm/wezterm.lua ## Notes - If a repo file is missing, stale links should be pruned. - Prefer `sigil add` over manual moves into `files/`. + +## Development +- When modifying this repo, rebuild and install the binary: `go build -o ~/.local/bin/sigil .` diff --git a/README.md b/README.md index aa5db96..89fb19b 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,8 @@ return { target = { linux = "~/.config/nvim", macos = "~/Library/Application Support/nvim", + -- use false to skip applying on that platform + windows = false, default = "~/.config/nvim", }, } diff --git a/main.go b/main.go index b5b1e29..f8c0122 100644 --- a/main.go +++ b/main.go @@ -20,9 +20,12 @@ const ( ) 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() { if len(os.Args) < 2 { usage() @@ -179,8 +182,11 @@ func resolvePathSpec(pathSpec, repoAbs string) (string, string, error) { if err != nil { continue } - targetRoot, err := selectTarget(cfg.targets) + targetRoot, err := selectTarget(cfg) if err != nil { + if errors.Is(err, errTargetDisabled) { + continue + } continue } absTarget, err := filepath.Abs(expandHome(targetRoot)) @@ -240,8 +246,11 @@ func applyCmd(args []string) error { return fmt.Errorf("%s: %w", entry.Name(), err) } - targetRoot, err := selectTarget(cfg.targets) + targetRoot, err := selectTarget(cfg) if err != nil { + if errors.Is(err, errTargetDisabled) { + continue + } return fmt.Errorf("%s: %w", entry.Name(), err) } @@ -427,7 +436,7 @@ func unlinkCmd(args []string) error { return err } - targetRoot, err := selectTarget(cfg.targets) + targetRoot, err := selectTarget(cfg) if err != nil { return err } @@ -487,7 +496,7 @@ func removeCmd(args []string) error { return err } - targetRoot, err := selectTarget(cfg.targets) + targetRoot, err := selectTarget(cfg) if err != nil { return err } @@ -620,19 +629,31 @@ func loadConfig(path string) (*packageConfig, error) { } targets := make(map[string]string) + disabled := make(map[string]bool) targetTbl.ForEach(func(k, v lua.LValue) { - ks, ok1 := k.(lua.LString) - vs, ok2 := v.(lua.LString) - if ok1 && ok2 { - targets[string(ks)] = expandHome(string(vs)) + ks, ok := k.(lua.LString) + if !ok { + return } + + 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 &packageConfig{targets: targets}, nil + return &packageConfig{targets: targets, disabled: disabled}, nil } func statusCmd() error { @@ -658,8 +679,11 @@ func statusCmd() error { return fmt.Errorf("%s: %w", entry.Name(), err) } - targetRoot, err := selectTarget(cfg.targets) + targetRoot, err := selectTarget(cfg) if err != nil { + if errors.Is(err, errTargetDisabled) { + continue + } return fmt.Errorf("%s: %w", entry.Name(), err) } @@ -682,15 +706,18 @@ func statusCmd() error { return nil } -func selectTarget(targets map[string]string) (string, error) { +func selectTarget(cfg *packageConfig) (string, error) { osKey := runtime.GOOS if osKey == "darwin" { 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 } - if target, ok := targets["default"]; ok { + if target, ok := cfg.targets["default"]; ok { return expandHome(target), nil } return "", fmt.Errorf("missing target for %s and default", osKey) @@ -877,8 +904,11 @@ func findPackageByTarget(repo, targetRoot string) (string, error) { if err != nil { continue } - target, err := selectTarget(cfg.targets) + target, err := selectTarget(cfg) if err != nil { + if errors.Is(err, errTargetDisabled) { + continue + } continue } absPkgTarget, err := filepath.Abs(expandHome(target))