Minimal registry-driven script launcher and picker CLI.
sks reads a single global config file at ~/.config/sks/sks.yaml.
Scripts are registered explicitly; the tool does not scan directories or parse script headers.
Each registered script has only three fields:
idpathcommand
path is resolved relative to the YAML file that defines it. Only the global config may declare imports.
Global config:
imports:
- lang/python.yaml
scripts:
- id: 1
path: scripts/hello.py
command: python {{path}}Imported config:
scripts:
- id: 2
path: tools/build.py
command: python {{path}}Rules:
- only relative paths are allowed
- imported files cannot declare
imports idmust be globally uniquecommandmust contain{{path}}
sks init
sks list
sks pick
sks run 1 foo --bar bazinitcreates~/.config/sks/sks.yamllistoutputs all registered scripts as YAMLpickopens the interactive picker with a table-style list and syntax-highlighted file previewrun <id> [args...]replaces{{path}}incommandand appends all remaining args
pick shows three columns:
IDPATHCOMMAND
The preview pane renders the full script file with embedded syntect highlighting. The current default theme is GitHub Dark, with preview background handled by skim.
run is intentionally simple:
sks run 12 input.txt --mode fastThis means:
- find script
id: 12 - replace
{{path}}incommand - append
input.txt --mode fastto the command
run treats everything after <id> as passthrough arguments. It does not keep its own option parsing layer.
From source:
cargo install --path .