targets.shell: Shell-Tooling Targets#
Zsh prompt colors, lsd, dircolors, fzf, starship, delta, btop.
Follows irix.targets.terminals.KittyTarget’s shape (module-level row tables, Target.anchor for every resolved value, a two-line generated-file header, live deploy_dest).
Six of the seven targets here (zshcolors, lsd, fzf, starship, delta, btop) anchor through the shell entry of irix/data/anchors/shell.yaml, same as terminals.yaml does for kitty.
dircolors is the deliberate exception: it compiles a pre-existing, non-artifact, per-extension spec file (out/shell/dircolors.yaml) directly at render time rather than duplicating that file’s ~60 finer-grained entries into the anchor table.
lsd regenerates out/shell/lsd/colors.yaml, correcting 15 of its 32 # hue-role annotated entries that had drifted to a neighboring rung’s hex after a later palette move.
Shell-tooling targets: zsh prompt colors, lsd, dircolors, fzf, starship, delta, btop.
Follows irix.targets.terminals.KittyTarget’s shape (module-level row tables, Target.anchor
for every resolved value, a two-line generated-file header, live deploy_dest). Six of the
seven targets here (zshcolors, lsd, fzf, starship, delta, btop) anchor through the
shell entry of irix/data/anchors/shell.yaml, same as terminals.yaml does for kitty.
dircolors is the deliberate exception: it compiles a pre-existing, non-artifact, per-extension
spec file (out/shell/dircolors.yaml) directly at render time rather than duplicating that
file’s ~60 finer-grained entries into the anchor table – see DircolorsTarget’s docstring.
lsd regenerates out/shell/lsd/colors.yaml, correcting 15 of its 32 # hue-role annotated
entries that had drifted to a neighboring rung’s hex after a later palette move – see
LsdTarget’s docstring and anchors/shell.yaml’s header comment for the derivation note.
- class irix.targets.shell.ZshColorsTarget(*, name: str = 'zshcolors', family: str = 'shell')#
Bases:
TargetThe zsh prompt color fragment
robbd.zsh-themesources, rendered for both modes.Absorbs the original
scripts/generate_shell_colors.py’s rendering logic (sameALL_COLORSvar table, samelocal var="value" # hue-shadeline shape); that script is now a thin deprecated wrapper around this target’s dark render (see its module docstring). Dark-mode body output is byte-identical to the old script’s, apart from the two-line generated-file header (the old script’s header named itself and its own regenerate command; this target’s header names the anchor table and mode instead) and the old script’s now-redundant# Dark Backgrounds (shape1 shade):label, which is dropped here – it described only the first four (NEUTRAL) rows, not the SYSTEM/ SEMANTIC/GIT rows below it, and does not generalize to light mode.Generate-only (
deploy_destisTarget’s defaultNone): the operator’s zsh startup still consumes the legacy wrapper’s admin-tree copy, not this target’sout/artifact.- model_config = {}#
Configuration for the model, should be a dictionary conforming to [
ConfigDict][pydantic.config.ConfigDict].
- class irix.targets.shell.LsdTarget(*, name: str = 'lsd', family: str = 'shell')#
Bases:
Targetlsd’s
colors.yamlcustom theme, regenerated fromanchors/shell.yaml’slsdtable.The original hand-authored
out/shell/lsd/colors.yamlcarried its intended role table as trailing# hue-rolecomments, but 15 of its 32 annotated entries had drifted to hold a neighboring rung’s hex after a later palette move – e.g.permission.aclwas annotatedcyan-text2but heldcyan-text1’s hex. Those comments, not the stale hexes beside them, are whatanchors/shell.yaml’slsdtable transcribes; every value below is resolved fresh from that table on every render, so a role’s hex and its trailing comment can never disagree the way the old file’s could.- render(mode: Mode) dict[str, str]#
Render lsd’s
colors.yamlformode, preserving the file’s exact tree shape.
- deploy_dest(relpath: str) Path | None#
Return
$XDG_CONFIG_HOME/lsd/<basename>for either rendered file.Both
colors.yamlandcolors-light.yamldeploy side by side; lsd’s ownconfig.yaml(color.theme: custom) names whichever one is live.
- model_config = {}#
Configuration for the model, should be a dictionary conforming to [
ConfigDict][pydantic.config.ConfigDict].
- class irix.targets.shell.DircolorsTarget(*, name: str = 'dircolors', family: str = 'shell')#
Bases:
TargetCompiles
out/shell/dircolors.yaml’s symbolic spec into a real GNU dircolors config.Unlike every other target in this family, this target’s role table is not
anchors/shell.yaml– it isout/shell/dircolors.yamlitself: a pre-existing, per-extension spec (codes + ~60 extensions + files + dirs) too fine-grained to usefully centralize, and a file this target reads but never writes (it stays the tracked source, not a generated artifact – the registry does not delete it).Each entry is
'hue-shade [BOLD]';BOLDprefixes the SGR sequence with01;.mh(MULTIHARDLINK) has no value in the source spec (mh:with nothing after the colon) and is omitted rather than emitted as an empty, malformed SGR line – GNUlsfalls back to its own built-in default for any code that is simply absent.files:anddirs:entries render as*nameglob patterns (fnmatch against the full filename, so e.g.*LICENSEalso matchesMY-LICENSE); GNUlsonly ever applies pattern entries – extensions and globs alike – to non-directory files, so thedirs:entries are inert under stock GNU ls/dircolors and are carried through only for other consumers (eza, lsd) that do support directory-name patterns.Generate-only (
deploy_destisTarget’s defaultNone).- model_config = {}#
Configuration for the model, should be a dictionary conforming to [
ConfigDict][pydantic.config.ConfigDict].
- class irix.targets.shell.FzfTarget(*, name: str = 'fzf', family: str = 'shell')#
Bases:
Targetfzf’s
FZF_DEFAULT_OPTS --colorexport, matched to the kitty terminal palette.Neutrals (
bg/fg/bg+/fg+/header) are slate, mirroringterminals.yaml’skittyentry; accents (hl/hl+/info/prompt/pointer/marker/spinner) reuse kitty’s cyan/purple/jade/magma/amber/indigo ANSI role hues so fzf reads as part of the same terminal rather than a separately-themed overlay.Generate-only (
deploy_destisTarget’s defaultNone).- model_config = {}#
Configuration for the model, should be a dictionary conforming to [
ConfigDict][pydantic.config.ConfigDict].
- class irix.targets.shell.StarshipTarget(*, name: str = 'starship', family: str = 'shell')#
Bases:
TargetA starship
[palettes.irix]/[palettes.irix-light]table naming every hue.Each hue gets its
sign1(saturated accent) andtext1(readable-on-background) rungs – the two rungs starship modules actually reach for – plus three slate neutral roles (bg/fg/muted). Dark renders section[palettes.irix], light renders[palettes.irix-light], so both fragments can be pasted into onestarship.tomland switched at runtime via the top-levelpalettekey.Generate-only (
deploy_destisTarget’s defaultNone).- model_config = {}#
Configuration for the model, should be a dictionary conforming to [
ConfigDict][pydantic.config.ConfigDict].
- class irix.targets.shell.DeltaTarget(*, name: str = 'delta', family: str = 'shell')#
Bases:
TargetA
[delta]gitconfig section: jade-tinted additions, magma-tinted deletions.Deliberately syntax-theme-free – no
syntax-theme =, no baresyntaxkeyword inplus-style/minus-style– so delta’s own syntax highlighting is left untouched; only the diff-semantic colors (added/removed backgrounds, line numbers, file/hunk headers) come from the palette.Generate-only (
deploy_destisTarget’s defaultNone).- model_config = {}#
Configuration for the model, should be a dictionary conforming to [
ConfigDict][pydantic.config.ConfigDict].
- class irix.targets.shell.BtopTarget(*, name: str = 'btop', family: str = 'shell')#
Bases:
TargetA btop
theme[key]="#hex"file: boxes/text in slate, gradients from chamber ramps.temp/cpuare cross-hue jade -> amber -> magma ramps (green -> yellow -> red severity – the same semantic git-status uses – atsign1andtext1rungs respectively so the two gradients don’t collide value-for-value);free/cached/available/used/download/uploadare monochromeline2->sign1->text1ramps within one hue each (jade/cyan/amber/magma/cyan/indigo). Process pausing and following usemagma/indigo/purplebanner backgrounds withslate-text2text.- deploy_dest(relpath: str) Path | None#
Return
$XDG_CONFIG_HOME/btop/themes/<basename>for either rendered file.
- model_config = {}#
Configuration for the model, should be a dictionary conforming to [
ConfigDict][pydantic.config.ConfigDict].