A community-maintained, tldr-style lookup for Linux environment variables, shell parameters, and setopts β for GTK, ZSH, XDG, Qt, Wayland and more.
Requirements: python3 (β₯3.10) Β· python-pipx Β· optional: fzf for the interactive picker
git clone https://github.com/evoppuden/dotref
cd dotref
pipx install -e .The first run of dotref seeds ~/.dotref/data from the bundled database automatically β no manual cp step. To pull a fresh copy from the official repo any time:
dotref updatedotref # interactive fzf picker (if fzf is installed)
dotref list # list all available subsystems
dotref <subsystem> # list categories for a subsystem
dotref <subsystem> <category> # show all knobs in a category
dotref search <keyword> # search across every subsystem
dotref pick # explicit picker invocation
dotref versionColors auto-enable on a TTY. Override with NO_COLOR=1 or FORCE_COLOR=1. Override the data directory with --data-dir <path> β useful when iterating on data inside a checkout (python3 dotref.py --data-dir ./data zsh history).
dotref zsh # list zsh categories
dotref zsh history # show all zsh history knobs
dotref gtk environment # show GTK env vars
dotref hyprland input # Hyprland input config directives
dotref search theme # find every knob mentioning "theme"
dotref search XDG # find every XDG_* knob# zsh - history
========================================
HISTFILE (parameter)
Path to the file where history is persisted across sessions.
default: ~/.zsh_history
example: HISTFILE=~/.zsh_history
HISTSIZE (parameter)
Max number of events kept in memory during a session.
default: 10000
HIST_IGNORE_DUPS (setopt)
Don't record a command if identical to the previous one.
example: setopt HIST_IGNORE_DUPS
SHARE_HISTORY (setopt)
Share history in real time across all open zsh sessions.
example: setopt SHARE_HISTORY
The (parameter), (setopt), (env), (config) tags are color-coded in a TTY so types are scannable at a glance.
| Subsystem | Status | Description | Source |
|---|---|---|---|
xdg |
β shipped | Base directories, user dirs, session vars | freedesktop.org spec |
zsh |
β shipped | Parameters, setopts (history) | man zshparam, man zshoptions |
gtk |
β shipped | Theming, rendering, debug env | docs.gtk.org |
hyprland |
β shipped | input, monitors, decoration, animations, binds | wiki.hyprland.org |
systemd |
β shipped | unit, service, journal, environment | man systemd.unit, man systemd.service |
uwsm |
β shipped | Wayland session env, finalize vars | man uwsm |
bash |
π‘ planned | Parameters, shopts, prompt, history | man bash |
qt |
π‘ planned | Platform, scaling, theming | doc.qt.io |
mesa |
π‘ planned | GPU drivers, GLSL, Vulkan | docs.mesa3d.org |
wayland |
π‘ planned | Compositor, backend, display | wayland.freedesktop.org |
nvidia |
π‘ planned | Driver-specific vars | NVIDIA docs |
x11 |
π‘ planned | Display, rendering, input | x.org |
dbus |
π‘ planned | Session bus, activation | dbus.freedesktop.org |
locale |
π‘ planned | Language, encoding, formats | man locale |
color |
π‘ planned | NO_COLOR, COLORTERM | no-color.org |
π‘ planned = wanted, not yet contributed. PRs welcome.
Each subsystem lives in data/<subsystem>/, with one TOML file per category. Every knob is a [knob.<id>] table.
# data/zsh/history.toml
# Source: https://zsh.sourceforge.io/Doc/Release/Parameters.html
[knob.HISTFILE]
name = "HISTFILE"
type = "parameter"
description = "Path to the file where history is persisted across sessions."
default = "~/.zsh_history"
example = "HISTFILE=~/.zsh_history"
[knob.HIST_IGNORE_DUPS]
name = "HIST_IGNORE_DUPS"
type = "setopt"
description = "Don't record a command if identical to the previous one."
example = "setopt HIST_IGNORE_DUPS"- Source comment at top. First line(s) of every file should cite the upstream doc you sourced from (
# Source: β¦). - The table key (
HISTFILEhere) is just an internal identifier β onlynameis displayed. Use a safe identifier when the displayed name has spaces or punctuation:[knob.touchpad_natural_scroll] name = "touchpad:natural_scroll"
- Strip the file's section name from
name. A knob inhyprland/input.tomlshould bekb_layout, notinput:kb_layoutβ the file already conveys "input". Do keep sub-section nesting that conveys real structure:touchpad:natural_scroll,blur:enabled,[Install] WantedBy. typeis required. It controls the color tag and helps users tellenvapart fromsetoptapart fromconfig.
| Type | Meaning |
|---|---|
env |
Runtime environment variable (export FOO=bar) |
parameter |
Shell parameter (ZSH / Bash built-in variable) |
setopt |
ZSH setopt option |
shopt |
Bash shopt option |
config |
Config-file directive (e.g. systemd [Service] keys, Hyprland config lines) |
flag |
CLI flag also exposed via env or config |
python3 -c "import tomllib, pathlib; [tomllib.loads(p.read_text()) for p in pathlib.Path('data').rglob('*.toml')]"
python3 dotref.py --data-dir ./data <subsystem> <category> # spot-check renderingman zsh |
dotref zsh |
|
|---|---|---|
Finds HISTFILE |
β eventually | β instantly |
Finds GTK_THEME |
β wrong man page | β |
| Shows default values | β always | |
| Searchable by keyword | β
dotref search |
|
| Cross-subsystem search | β | β |
| Scannable at a glance | β | β |
Authoritative pages each subsystem's data should be sourced from:
- ZSH β
man zshparamΒ·man zshoptionsΒ· https://zsh.sourceforge.io - Bash β
man bash(PARAMETERS and SHELL BUILTIN COMMANDS sections) - GTK 3 β https://docs.gtk.org/gtk3/running.html
- GTK 4 β https://docs.gtk.org/gtk4/running.html
- Qt β https://doc.qt.io/qt-6/qtenvironment.html
- XDG Base Dir β https://specifications.freedesktop.org/basedir-spec/latest/
- XDG User Dirs β
man xdg-user-dirs - Wayland β https://wayland.freedesktop.org/docs/html/
- SDL2 β https://wiki.libsdl.org/SDL2/CategoryHints
- Mesa β https://docs.mesa3d.org/envvars.html
- NO_COLOR / Color β https://no-color.org Β· https://bixense.com/clicolors/
- D-Bus β https://dbus.freedesktop.org/doc/dbus-specification.html
| Tool | What it does | The gap |
|---|---|---|
| tldr-pages | Short CLI command reference | Commands only, not configuration knobs |
| navi | Interactive cheatsheet runner | Commands only, no env var database |
| cheat | Personal cheatsheets | Not curated per subsystem |
| Arch Wiki | Excellent env var docs | Browser only, not searchable from terminal |
man pages |
Authoritative and exhaustive | Slow, verbose, no cross-subsystem search |
dotref fills the gap none of these cover.
Working tool, early days. v0.2.0 ships with a CLI (~530 lines of Python), 9 subsystems, 31 files, ~430 knobs, an fzf-driven picker, color-coded type tags, ranked search, and --json/--plain output formats.
The real product is the data, not the code. The most valuable thing you can contribute is a .toml file for a subsystem you know β see the planned subsystems table for what's wanted.
-
dotref <subsystem> <name>β direct lookup (e.g.dotref zsh HISTFILE) -
dotref --json/--plainβ machine-readable output - Smarter
searchranking (exact > prefix > substring) -
[meta] docs = "..."block per file, surfaced in output -
dotref updateβ actually fetch latest data from the repo - More subsystems:
bash,qt,mesa,wayland,nvidia,x11,dbus,locale,color
You don't need to know how to code β contributing is just editing a TOML file:
- Fork this repo
- Find or create
data/<subsystem>/<category>.toml - Add your entry following the Data format above
- Validate with the snippet in that section
- Open a PR with a link to the source documentation
See CONTRIBUTING.md for the short version.
MIT β do whatever you want with it.
man zsh one too many times just to find HISTFILE.