Modular bash configuration with fish-style abbreviations, declarative aliases, auto-detected shell completions, and Starship prompt support.
curl -sL https://raw.githubusercontent.com/arch-err/bash-conf/main/install.sh | bashOr manually:
git clone --recurse-submodules https://github.com/arch-err/bash-conf.git ~/.config/bash/bash-conf
cd ~/.config/bash/bash-conf && make installbash-conf/
├── .bashrc # Main entrypoint — sources everything
├── inputrc # Readline config (menu-complete, colors)
├── history.bash # History (fzf/sk fuzzy search, XDG)
├── shellopts.bash # Shell options (autocd, globstar, etc.)
├── prompt.bash # Prompt (Starship or fallback PS1)
├── completions.bash # Auto-detected shell completions
├── aliases/ # Declarative alias files
│ └── *.alias
├── abbr/ # Fish-style abbreviation files
│ └── *.abbr
├── plugins/
│ └── bash-abbrev-alias/ # Abbreviation engine (submodule)
├── Makefile # install / uninstall
└── install.sh # One-liner install script
Uses Starship when available, otherwise falls back to a clean PS1 with directory, git branch/status, and exit code.
Starship config is managed separately at ~/.config/starship.toml.
Tuned native history with fuzzy search via fzf:
- Ctrl-R opens fzf fuzzy finder (falls back to native reverse search)
- XDG-compliant storage at
~/.local/state/bash/history - 50,000 entries in memory, 100,000 on disk
- Deduplication, timestamps, trivial command exclusion
| Option | Effect |
|---|---|
autocd |
Type a directory name to cd into it |
cdspell |
Autocorrect minor cd typos |
globstar |
** for recursive globbing |
checkwinsize |
Keep LINES/COLUMNS in sync |
direxpand |
Expand variables in path completion |
dirspell |
Autocorrect directory names in completion |
no_empty_cmd_completion |
Don't complete on empty line |
Tab cycles through completions (menu-complete), Shift-Tab goes backward. Case-insensitive, colored stats and prefix highlighting.
Simple key = value files in aliases/. Comments and blank lines are ignored.
# aliases/editors.alias
v = $EDITOR
nv = nvim
Add new files and they're picked up automatically — no need to touch .bashrc.
Fish-style abbreviations powered by bash-abbrev-alias. Type an abbreviation and press Space to expand it inline.
Files live in abbr/ and contain abbrev-alias calls:
# abbr/git.abbr
abbrev-alias gs="git status"
abbrev-alias gco="git checkout"Included groups: git, k8s, docker, podman, helm
| Flag | Description | Example |
|---|---|---|
| (default) | Expands in command position | abbrev-alias gs="git status" |
-g |
Expands anywhere on the line | abbrev-alias -g G="| grep" |
-e |
Evaluates expression on expand | abbrev-alias -ge B='$(git branch --show-current)' |
completions.bash auto-detects installed tools and loads their bash completions via a background cache. Only tools found on $PATH are loaded.
Standard (<cmd> completion bash):
kubectl, helm, docker, podman, argocd, oc, harbor
Special cases: gh, npm, pip, rustup, cargo, uv, uvx, terraform, tea, drone
To add a standard tool, append to the __comp_standard array. For anything else, add a guarded one-liner under special cases.
cd ~/.config/bash/bash-conf && make uninstallThis removes the ~/.bashrc shim and the symlink in ~/.config/bash/.