My terminal setup for Omarchy: bash with suggestions, colours and a prompt that actually tells me something.
While I type
- Grey text suggests the rest of the command from my history.
→accepts it. - Commands turn green when they exist, red when they do not.
Tabopens a menu with descriptions.
In the prompt
- Which folder I am in, with an icon
- Git branch, short commit, and what changed:
✚staged,!modified,?untracked,⇡⇣ahead or behind - Node, Python, Rust or Go version, but only in a project that uses one
- How long the last command took, if it took over 3 seconds
- Battery and clock on the right
- The
❯turns red and shows the exit code when a command fails
Keys
| Key | What it does |
|---|---|
→ |
Accept the grey suggestion |
Tab |
Completion menu |
Ctrl-R |
Search my history |
Ctrl-T |
Pick a file |
Alt-C |
Pick a folder and go there |
z name |
Jump to a folder I have been in before |
Commands
About 90 aliases and a few functions, in nine groups you can switch on and
off with aliasgroup. Type myalias to list what is active.
- kubernetes:
k,kpf,kev,klogs,events,kdebug,k9 - docker:
dps,dex,dlog,dc,dcu,dcl,dprune - terraform:
tf,tfp,tfa,tff - git:
gpr,gprune - github:
ghpr,ghprs,ghrun - python:
uvr,uva,uvenv - security scans:
secscan,glscan - system:
update(upgrades everything),myip,localip,ports,mem,cpu
Anything that needs a tool I have not installed simply does not appear.
| Piece | What it does |
|---|---|
| ble.sh | Suggestions, colours, Tab menu |
| starship | The prompt |
| ghostty | The terminal |
| atuin, fzf, zoxide, eza, bat | History, fuzzy find, jumping, listing |
Omarchy already ships everything except ble.sh.
On a fresh Omarchy machine:
git clone https://github.com/aganet/omarchy-terminal.git ~/omarchy-terminal
~/omarchy-terminal/install.sh
yay -S --needed blesh-gitOpen a new terminal. Done.
install.sh on its own shows a menu. Nothing is forced on you:
Which parts do you want?
> ✓ prompt The starship prompt: folder, git state, versions, clock
✓ typing ble.sh: suggestions, syntax colours, Tab menu, Enter fix
✓ aliases ~90 aliases in groups you can switch on and off
✓ terminal Ghostty: font, padding, keys (opinionated)
x toggles a line, Enter confirms. Or name the parts directly:
./install.sh prompt typing # just those two
./install.sh --all # everything, no questions
./install.sh --list # what the parts are, then stopThe bashrc is always installed, because it is the file that loads the others. Everything already in place is backed up first, with the date in the name, and running it again is safe.
Not sure? Ask it what it would do:
$ ./install.sh --all --dry-run
Dry run. Nothing will be changed.
Would install: prompt typing aliases terminal
would link ~/.bashrc
would back up ~/.config/starship.toml -> ~/.config/starship.toml.2026-09-26, then link it
would link ~/.blerc
...
Nothing was changed. Run it without --dry-run to do it for real.It tells you exactly which files it would touch and which it would back up
first. --dry-run works with any of the forms above.
My aliases are mine. You probably do not want my kubernetes ones. So they are split into nine groups, and you switch them on and off by name:
$ aliasgroup
on core Everyday shortcuts and the group switch
on system System update, network and process helpers
on git git and the GitHub CLI
on docker Docker and compose
on kubernetes kubectl, kubectx, stern, k9s, kind
on iac Terraform, OpenTofu and Helm
on cloud AWS and Azure
on python uv
on security Secret, dependency, container and IaC scanners
$ aliasgroup off kubernetes
kubernetes off. Open a new terminal.Turning one off writes its name to ~/.config/bash/aliases.disabled. The
repo files are never touched, so git pull keeps working and git status
stays clean. aliasgroup on kubernetes brings it back.
Do not want any of them? ./install.sh --no-aliases and you still get the
prompt and the typing setup.
Want your own instead? Drop a file in ~/.bash_aliases.d/. Anything in
there is loaded, and 90-mine sorts after my groups so it wins.
Run myalias to see what is actually defined, or myalias docker to
filter. Every alias is wrapped in command -v anyway, so one for a tool
you have not installed does not exist in the first place.
The aliases cover tools I do not always need. Install the ones you want:
# in the Arch repos
sudo pacman -S --needed git-delta kubectl kubectx helm k9s stern kind \
opentofu terraform aws-cli azure-cli gitleaks trivy syft cosign sops age \
dive tflint osv-scanner popeye crane
# from the AUR
yay -S --needed trufflehog grype kube-score kubescape hadolint conftest
# python tools
uv tool install checkov
uv tool install semgrepThen make git use delta for diffs:
git config --global core.pager "delta"
git config --global interactive.diffFilter "delta --color-only"
git config --global delta.navigate true
git config --global delta.line-numbers true
git config --global delta.side-by-side true
git config --global merge.conflictstyle "zdiff3"For work hostnames or anything I do not want on GitHub:
cp ~/omarchy-terminal/home/bashrc.local.example ~/.bashrc.localThat file is not in git. ~/.bashrc reads it last, so it can override
anything.
| File | Goes to |
|---|---|
home/bashrc |
~/.bashrc |
home/blerc |
~/.blerc |
home/aliases.d/ |
~/.bash_aliases.d/ |
home/bashrc.local.example |
~/.bashrc.local, by hand |
config/starship.toml |
~/.config/starship.toml |
config/ghostty/config |
~/.config/ghostty/config |
- Suggestions too dark or too bright: change
fg=245inhome/blerc. 232 is dark, 255 is light. - No clock: delete the
right_formatline inconfig/starship.toml. - No battery: set
disabled = trueunder[battery]. - One line instead of two: take
$characteroff its own line informat.
The files in my home folder are links into this repo, so editing
~/.bashrc edits the repo:
cd ~/omarchy-terminal
git add -A && git commit -m "what changed" && git pushOn another machine: git pull, then open a new terminal.
Prompt colours are palette names, not fixed colours. The prompt follows whatever Omarchy theme is active.
shell-integration = none in the ghostty config is deliberate. .bashrc
loads ghostty's integration itself. Without it ble.sh attaches too late and
the first prompt is drawn twice.
Enter is rebound in home/blerc so a pasted multi-line command runs. That
rebind sits in ble.sh's keymap_emacs after-load hook, because ble.sh
installs its own keymap after .blerc is read. Alt-Enter adds a line by
hand.
- omarchy-sysmon — a small CPU, memory and network widget for the Omarchy bar
- zsh — the same idea in zsh, for my other machines. Most of the aliases here came from there.
