Files
sigil/README.md
T
Thomas G. Lopes 0c40072aa8 update sigil
2026-03-04 19:48:46 +00:00

70 lines
1.5 KiB
Markdown

# Sigil
Sigil is a minimal symlink-based dotfile manager with per-package Lua config.
## Install (dev)
```
go run . <command>
```
## Commands
- `sigil apply` — apply symlinks from `~/.dotfiles`
- `sigil apply --prune` — prune stale links without prompting
- `sigil add <path>` — add a file/dir to the repo and symlink it
- `sigil status` — show stale links
- `sigil unlink <spec>` — restore file(s) and remove from repo
- `sigil remove <spec>` — same as unlink, plus remove package/subpath
## Repo layout
```
~/.dotfiles/
<package>/
config.lua
files/
...
```
## `config.lua`
```lua
---@class SigilConfig
---@field target table<string, string|boolean>
---@field ignore? string[]
---@type SigilConfig
local config = {
target = {
linux = "~/.config/nvim",
macos = "~/Library/Application Support/nvim",
-- use false to skip applying on that platform
windows = false,
default = "~/.config/nvim",
},
ignore = {
"**/.DS_Store",
"**/*.tmp",
"cache/**",
},
}
return config
```
## Spec formats
`unlink/remove` accept:
- `package`
- `package:relative/path`
- repo path: `~/.dotfiles/<pkg>/files/...`
- target path: e.g. `~/.config/<app>/...`
## Notes
- Uses `SIGIL_REPO` env var to override the repo path.
- Conflicts are detected (existing non-symlink files will stop apply).
- `config.ignore` supports gitignore-like globs (`*`, `?`, `**`) relative to each package `files/` directory.
- Prefer `sigil add` over manual edits in `files/`.