Personal dotfiles for a Debian/Linux desktop.
Most stuff tracked here ends up living at the same relative path under ~.
# Symlink all tracked files into $HOME
# (replaces existing files, no confirmation prompt)
./_link.sh
# print what would be linked, without touching the filesystem
DRY=1 ./_link.sh- Login shell (
.profile) sources.profile.d/
(PATH, env exports, etc.) - Interactive shell (
.bashrc) sources.bashrc.d/
(history, tool config, etc.)
Standalone utilities, each a self-contained executable.
Only text-files (with +x and a shebang) allowed, no binary blobs.
For a new script, copy the required helpers from an existing one.
.local/share/bash-completion/completions/_complete is one generic helper shared by every script that has completion.
Link _complete under that script name and add --list-commands to print one name<TAB>args line per subcommand.
The header of _complete documents the arg placeholders and what each one completes.
Ask the user before adding any new placeholders.
Lint: ./_lint.sh
Format: ./_fmt.sh
There is no test suite.
- Shell:
set -eu(sh) orset -eu -o pipefail(bash).- Match whatever
./_fmt.sh/.local/bin/shellfmtproduces. - Use
testinstead of[[or[, when feasible.
- Also respect
.editorconfig
Sourced-only shell files (no shebang, e.g. completion script) must have # shellcheck shell=bash
or # shellcheck shell=sh as the first line; _fmt.sh detects them by it.