Arch Linux package management that never leaves the terminal.
Search, inspect, install, update, remove and clean your system from one keyboard-driven
interface - a TUI wrapped around pacman, your AUR helper, and fzf.
Documentation · Themes · Install · Report an issue
⚠️ Disclaimer: This project leverages AI-assisted development for its creation and ongoing maintenance. If you run into any bugs or rough edges, please report them!
Catppuccin Mocha, one of eleven built-in themes. See the rest in the theme picker at gaur.prbhtkumr.xyz.
Search & install
- Fuzzy ranking powered by
fzf, with match highlighting - Repo-scoped queries -
c:,e:,m:,a:- and they combine:ae:firefox - Mark anything with
Tab, ship it all in one command - A live details pane: repository, version, license, upstream URL
Maintenance
- Dashboard with package counts, disk usage bars and repository distribution
- Full system update, or a hand-picked subset via selective update
- Cache cleaner with keep policies, plus per-package selective cleaning
- Orphan detection and one-key removal
Interface
- Eleven themes built in, custom TOML themes, live preview while you scroll
- Mode-specific coloring, centered dialogs, full mouse wheel support
- Settings menu (
,) - swap theme, AUR helper and border without restarting
Security: every command is built as an argument array, never a shell string. Package names are checked against a strict allowlist, config values are clamped instead of trusted, and CI runs dedicated command-injection, privilege-escalation and TUI-spoofing tests alongside gosec, CodeQL and govulncheck.
- Arch Linux or an Arch-based distribution
- An AUR helper - paru or yay
- fzf for fuzzy ranking
- paccache from
pacman-contrib - Go 1.24+ - only if you build from source
paru -S gaur-bin # or: yay -S gaur-bin
gaurFrom source:
git clone https://github.com/prbhtkumr/gaur.git
cd gaur
go build -o gaur .
sudo install -Dm755 gaur /usr/local/bin/gaurOr straight into your GOBIN:
go install github.com/prbhtkumr/gaur@latestOnce it is running:
gaur # default mode
gaur -d # open on the dashboard
gaur -i # open on install
gaur --theme dracula| Key | Action |
|---|---|
i · d · r · u |
Switch mode: install, dashboard, remove, update (Alt+2 · Alt+1 · Alt+4 · Alt+3) |
/ |
Focus the search box |
↑ ↓ · j k |
Move one item · PgUp PgDn jump ten |
Tab |
Mark or unmark the selected package |
Enter |
Run the operation on the marked set |
* |
Focus the selection panel |
Esc |
Leave the search box · clear marks |
s |
Selective update (update mode) |
m |
Mirror list editor (update mode) |
, |
Settings |
q · Ctrl+C |
Quit |
On the dashboard: t e f o jump straight into remove mode filtered to all /
explicit / foreign / orphaned · c opens the cache menu · R removes every orphan ·
Ctrl+R reloads the stats.
In dialogs: Enter or y confirms, Esc or n cancels, ↑ ↓ scrolls the list.
Mouse: the wheel scrolls lists, split panes and dialogs - left pane scrolls the list, right pane scrolls the details.
| Mode | Prefix | Matches |
|---|---|---|
| install | c: |
core repository |
| install | e: |
extra repository |
| install | m: |
multilib repository |
| install | a: |
AUR only |
| remove | t: |
all installed packages |
| remove | e: / l: |
explicitly installed |
| remove | f: / a: |
foreign (AUR) packages |
| remove | o: |
orphaned |
Prefixes combine: ae:firefox searches AUR and Extra, of:google finds orphaned AUR
packages matching "google".
gaur writes ~/.config/gaur/config.toml on first run. Most of it can also be edited live
from the settings menu (,).
[startup]
default_mode = "install" # dashboard | install | remove | update
[ui]
theme = "catppuccin-mocha" # gaur --list-themes
border_type = "rounded" # rounded | normal | thick | double
[commands]
aur_helper = "paru" # paru | yay
install_flags = "" # extra flags for installs
remove_flags = "-Rns"
cache_tool = "paccache"
[advanced]
debounce_ms = 150 # package details delay
cache_dir = "" # absolute path, empty = defaultFull reference in the configuration docs.
Eleven themes ship baked into the binary: Catppuccin Mocha / Frappe / Macchiato, Dracula, Gruvbox Dark, Monokai Pro, One Dark, Rose Pine, Solarized Dark, and Tokyonight Night / Storm.
gaur --list-themes # print them all
gaur --theme dracula # use one
gaur --export-themes # copy defaults out so you can edit themPress , in the app to cycle themes with a live preview.
Write your own theme
Themes are plain TOML files in $XDG_CONFIG_HOME/gaur/themes/
(typically ~/.config/gaur/themes/).
gaur --export-themes # start from the defaults
$EDITOR ~/.config/gaur/themes/my_theme.toml # edit
gaur --theme my-theme # or pick it from settings# base
border = "#6c7086"
selected = "#cba6f7"
text = "#cdd6f4"
subtle = "#6c7086"
title = "#f9e2af"
# ui elements
scrollbar_track = "#181825"
scrollbar_thumb = "#6c7086"
selection_bg = "#313244"
dim_text = "#6c7086"
# mode colors
install = "#89b4fa"
dashboard = "#f5c2e7"
remove = "#f38ba8"
update = "#a6e3a1"
cache = "#cba6f7"
# source colors
core = "#a6e3a1"
extra = "#89b4fa"
multilib = "#fab387"
aur = "#cba6f7"
# status colors
success = "#a6e3a1"
warning = "#f9e2af"
error = "#f38ba8"
highlight = "#f9e2af"
# dashboard colors
dashboard_label = "#cdd6f4"
dashboard_value = "#89dceb"
dashboard_warning = "#f38ba8"
dashboard_desc = "#a6adc8"
# dialog colors
dialog_border = "#cba6f7"
confirm_install = "#89b4fa"
confirm_remove = "#fab387"
confirm_clean = "#a6e3a1"
confirm_nuke = "#f38ba8"
confirm_selective = "#cba6f7"Filenames become display names: my_theme.toml shows up as My Theme - underscores and
hyphens turn into spaces and title-case.
- Local first - repository packages are read once with
pacman -Sland held in memory. Typing never shells out to pacman. - Ranked by fzf - each keystroke pipes the combined repo + AUR list through
fzf --filterand maps the indices back. - AUR queries are gated, not debounced - two characters minimum, no repeat of the same query, one request in flight, stale responses dropped.
- Hands off the terminal - installs, removals and updates run through
tea.ExecProcess, so sudo prompts, conflict resolution and license prompts behave exactly as they do outside gaur. - Refreshes itself - after any change the dashboard, both package lists and the update count are rebuilt from the system rather than patched up.
The long version lives in the internals docs.
GPL-3.0 - see LICENSE.
