mirror of
https://github.com/ivuorinen/dotfiles.git
synced 2026-03-22 03:07:08 +00:00
feat(claude): add scaffolding and validation skills
This commit is contained in:
38
.claude/skills/dotbot-validate/SKILL.md
Normal file
38
.claude/skills/dotbot-validate/SKILL.md
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
---
|
||||||
|
name: dotbot-validate
|
||||||
|
description: >-
|
||||||
|
Validate Dotbot install.conf.yaml files after editing.
|
||||||
|
Apply when writing or modifying any install.conf.yaml.
|
||||||
|
user-invocable: false
|
||||||
|
allowed-tools: Bash, Read
|
||||||
|
---
|
||||||
|
|
||||||
|
After editing any `install.conf.yaml` file, validate it:
|
||||||
|
|
||||||
|
## 1. YAML syntax
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yamllint -d relaxed <file>
|
||||||
|
```
|
||||||
|
|
||||||
|
If yamllint is not available, fall back to:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 -c "import yaml; yaml.safe_load(open('<file>'))"
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2. Link target verification
|
||||||
|
|
||||||
|
For each `link` entry, verify the source path exists relative
|
||||||
|
to the repo root. Report any missing source files.
|
||||||
|
|
||||||
|
## 3. Host-specific configs
|
||||||
|
|
||||||
|
Files in `hosts/<hostname>/install.conf.yaml` overlay the
|
||||||
|
global config. Verify that any `include` directives reference
|
||||||
|
existing files.
|
||||||
|
|
||||||
|
## Key locations
|
||||||
|
|
||||||
|
- `install.conf.yaml` — global config
|
||||||
|
- `hosts/*/install.conf.yaml` — per-host overlays
|
||||||
58
.claude/skills/host-override/SKILL.md
Normal file
58
.claude/skills/host-override/SKILL.md
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
---
|
||||||
|
name: host-override
|
||||||
|
description: >-
|
||||||
|
Create or extend host-specific config overlays
|
||||||
|
in hosts/<hostname>/ for machine-specific settings.
|
||||||
|
user-invocable: true
|
||||||
|
allowed-tools: Bash, Read, Write, Edit
|
||||||
|
---
|
||||||
|
|
||||||
|
When creating host-specific configuration overrides:
|
||||||
|
|
||||||
|
## 1. Determine hostname
|
||||||
|
|
||||||
|
```bash
|
||||||
|
hostname -s
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2. Directory structure
|
||||||
|
|
||||||
|
Host overrides live in `hosts/<hostname>/` mirroring the
|
||||||
|
global layout:
|
||||||
|
|
||||||
|
```
|
||||||
|
hosts/<hostname>/
|
||||||
|
base/ -> ~/.*
|
||||||
|
config/ -> ~/.config/
|
||||||
|
install.conf.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3. Create install.conf.yaml
|
||||||
|
|
||||||
|
If it doesn't exist, create `hosts/<hostname>/install.conf.yaml`
|
||||||
|
following the Dotbot format. Use `include` to layer on top of
|
||||||
|
the global config:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- defaults:
|
||||||
|
link:
|
||||||
|
create: true
|
||||||
|
relink: true
|
||||||
|
force: true
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4. Git config overrides
|
||||||
|
|
||||||
|
The most common override is `hosts/<hostname>/config/git/overrides/config`.
|
||||||
|
This is where host-specific git user, signing keys, and credential
|
||||||
|
helpers go. Always `[include]` the shared config:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[include]
|
||||||
|
path = ~/.dotfiles/config/git/shared
|
||||||
|
```
|
||||||
|
|
||||||
|
## 5. Test
|
||||||
|
|
||||||
|
Run `./install` to apply. Dotbot processes
|
||||||
|
`hosts/<hostname>/install.conf.yaml` after the global config.
|
||||||
40
.claude/skills/new-fish-function/SKILL.md
Normal file
40
.claude/skills/new-fish-function/SKILL.md
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
---
|
||||||
|
name: new-fish-function
|
||||||
|
description: >-
|
||||||
|
Scaffold a new fish function in config/fish/functions/
|
||||||
|
with proper conventions and event handling.
|
||||||
|
user-invocable: true
|
||||||
|
allowed-tools: Bash, Read, Write, Edit
|
||||||
|
---
|
||||||
|
|
||||||
|
When creating a new fish function in `config/fish/functions/`:
|
||||||
|
|
||||||
|
## 1. Create the function file
|
||||||
|
|
||||||
|
Create `config/fish/functions/<name>.fish`:
|
||||||
|
|
||||||
|
```fish
|
||||||
|
function <name> --description '<one-line description>'
|
||||||
|
# Function logic here
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
- One function per file, filename must match function name
|
||||||
|
- Always include `--description`
|
||||||
|
- Use `--argument-names` for named parameters
|
||||||
|
|
||||||
|
## 2. Conventions
|
||||||
|
|
||||||
|
- Do NOT use `_tide_` prefix (reserved for tide prompt plugin)
|
||||||
|
- Use `--wraps` if the function wraps an existing command
|
||||||
|
- For abbreviation-like functions, prefer fish abbreviations
|
||||||
|
in `config/fish/alias.fish` instead
|
||||||
|
|
||||||
|
## 3. Validate
|
||||||
|
|
||||||
|
Run the fish-validate skill checks:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
fish --no-execute config/fish/functions/<name>.fish
|
||||||
|
fish_indent --check config/fish/functions/<name>.fish
|
||||||
|
```
|
||||||
53
.claude/skills/new-script/SKILL.md
Normal file
53
.claude/skills/new-script/SKILL.md
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
---
|
||||||
|
name: new-script
|
||||||
|
description: >-
|
||||||
|
Scaffold a new helper script in local/bin/ with proper
|
||||||
|
boilerplate, msgr sourcing, and documentation tag.
|
||||||
|
user-invocable: true
|
||||||
|
allowed-tools: Bash, Read, Write, Edit
|
||||||
|
---
|
||||||
|
|
||||||
|
When creating a new script in `local/bin/`, follow this template:
|
||||||
|
|
||||||
|
## 1. Script file
|
||||||
|
|
||||||
|
Create `local/bin/<name>` with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# @description <one-line description>
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# shellcheck source=msgr
|
||||||
|
. "$(dirname "$0")/msgr"
|
||||||
|
|
||||||
|
# Script logic here
|
||||||
|
```
|
||||||
|
|
||||||
|
- Use `msgr` functions for output: `msgr msg`, `msgr run`,
|
||||||
|
`msgr yay`, `msgr err`, `msgr warn`
|
||||||
|
- The `@description` tag is required — `dfm scripts` discovers
|
||||||
|
scripts by it
|
||||||
|
- POSIX scripts (`/bin/sh`) should NOT source msgr
|
||||||
|
|
||||||
|
## 2. Make executable
|
||||||
|
|
||||||
|
```bash
|
||||||
|
chmod +x local/bin/<name>
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3. Generate docs
|
||||||
|
|
||||||
|
Run `dfm docs script <name>` or manually create `local/bin/<name>.md`
|
||||||
|
with a usage summary.
|
||||||
|
|
||||||
|
## 4. Validate
|
||||||
|
|
||||||
|
Run the shell-validate skill checks (syntax + shellcheck).
|
||||||
|
|
||||||
|
## Naming conventions
|
||||||
|
|
||||||
|
- `x-` prefix for standalone utilities (e.g., `x-ssl-expiry-date`)
|
||||||
|
- Short names for frequently used commands (e.g., `a`, `ad`, `ae`)
|
||||||
|
- `git-` prefix for git subcommands (e.g., `git-dirty`)
|
||||||
Reference in New Issue
Block a user