^ ^ ^ ^ =(o.o)= ~byakuren =(o.o)= m m m m
My home directory follows a structured, minimalist layout inspired by traditional Unix filesystem hierarchies. Each top-level directory serves a specific purpose, keeping things organised and predictable across different machines.
bin dta etc gdf imp lib not rnd src tmp vcs
Every top-level directory starts with a unique letter. This means
navigating is as simple as cd followed by a single
character and tab—no ambiguity, no waiting for a completion menu.
| Key | Directory | Purpose |
|---|---|---|
b |
bin | Executables |
d |
dta | Program data |
e |
etc | System directories |
g |
gdf | Git diffs |
i |
imp | Important files |
l |
lib | Library files |
n |
not | Notes |
r |
rnd | Random files |
s |
src | Source code |
t |
tmp | Temporary files |
v |
vcs | Version control |
This extends to files too—anything placed directly in ~
gets a name that doesn’t collide with these prefixes. The result is
near-instantaneous navigation without ever needing to type more than two
or three characters.
All of my executables live here, organised by type and architecture.
bin/
├── amd64/ # Compiled binaries for x86-64
├── ln/ # Symlinks to binaries elsewhere
├── ni/ # Non-interactive scripts
├── paths # Additional $PATH entries
└── sh/ # Shell scripts
arm64).~/vcs/. This avoids cluttering
system directories while keeping tools accessible.$PATH, such as Go’s bin directory
or pip install locations.#!). I can always open them in an editor and know exactly
what they do.export PATH="$HOME/bin/sh:$HOME/bin/ln:$HOME/bin/amd64:$PATH"The order here is deliberate:
~/vcs/ and are typically more up-to-date than compiled
binaries, since they track the latest checkout.This precedence means I can progressively override commands: a script can wrap a symlinked binary, which can itself shadow a compiled one.
A centralised location for programs that store their data in a single directory. Examples include:
This keeps application data out of the home directory root while remaining easy to back up or migrate.
etc/
├── audio/
├── desktop/
├── documents/
├── downloads/
├── music/
├── pictures/
├── public/
├── sounds/
├── templates/
└── video/
Common system directories and mount points live here:
documents instead of
Documents).etc/ rather than
cluttering the home directory root.A directory for storing git diffs (patches). Useful for:
Each .gdf file is a self-contained diff that can be
applied with git apply.
Sensitive documents and files that warrant extra protection. This directory uses additional encryption beyond the standard home directory encryption.
Configuration files and assets that get symlinked into their required locations throughout the system:
.kbd, .xkb)/etc/issue and
/etc/motdBy keeping the canonical versions here, I maintain a single source of truth that can be version-controlled and easily deployed to new systems.
Quick notes and scratch files, used in conjunction with shell scripts. A simple, always-accessible location for jotting things down without ceremony.
A catch-all for files that don’t fit elsewhere but are worth keeping:
The name is deliberately short—it’s where things land when I need them accessible but haven’t decided on a permanent home.
src/
├── apl/
├── bash/
├── bqn/
├── c/
├── cpp/
├── futhark/
├── j/
├── lean/
├── mercury/
├── prolog/
├── python/
├── sh/
├── uiua/
├── unison/
├── uxn/
└── ...
All code I write lives here, organised first by language, then by project. This structure makes it easy to:
A tmpfs mount for ephemeral work:
Everything here is understood to be disposable. A reboot clears it completely.
All cloned repositories live here. When I git clone a
project, it goes into ~/vcs/.
The symlinks in ~/bin/ln/ typically point to executables
within these repositories, providing a clean separation between
“software I use” and “software I wrote.”
This layout reflects a few key principles:
The result is a home directory that stays clean and navigable, even after years of accumulated work.