A Suckless-style PTY proxy in Zig.
Composed at compile time, not loaded at run time.
Ghost-text suggestions in bash and zsh. Dangerous-command
guardrails. #: intent rewritten by an LLM
into a real shell command. A status bar that follows you
across every terminal.
The dispatch loop is one inline for over
your config tuple. Disabled modules don't ship as dead
code — they don't ship at all. No plugin loader, no
*anyopaque, no runtime branching.
Your config is a Zig file. Edit it, recompile, done.
git pull won't fight you — defaults come from
struct fields, your overrides live in a gitignored sibling.
dwm's config.h pattern, but type-checked.
One line gets you a working atty. The full walkthrough lives in Getting started.
curl -fsSL https://bin.atty.sh | sh
Detects your CPU, verifies the SHA256, drops the binary at ~/.local/bin/atty.
curl -fsSL https://get.atty.sh | sh
Clones the repo, bootstraps Zig 0.16, prompts you to look at src/config.zig before building.
curl -fsSL https://tui.atty.sh | sh
Installs attop at ~/.local/bin/attop — the dashboard that opens on a setup wizard.
# Either point your terminal emulator at atty …
command = atty bash # ~/.config/ghostty/config
# … or eval the init snippet from your .bashrc / .zshrc:
eval "$(atty init bash)"