This is a short overview of my GNU/Linux system, how I organise my home directory and how I keep track of my configuration.
I use Artix, a fork of Arch where systemd is replaced with either OpenRC, runit or s6. I use runit as my init system and don't use any of the desktop environments that can come preinstalled. I use Artix because it is very barebones and can be fully configured to my liking.
I use the terminal for many things, because command-line programs are generally simpler, are more extensible (they can be used in scripts), are more configurable and use less resources.
A lot of the software I use is made by suckless or follows the suckless philosophy. The suckless philosophy is based on the unix philosophy and focuses on minimalism, usability, customizability/hackability and catering to experienced users. I use suckless software because it does its job well and is very configurable.
I generally name my files using kebab-case, no uppercase letters. Directory names are usually a single word. Files and directories are only hidden if I never edit them directly (i.e. cache files, data files or other files created and used by programs only). This means that my config directory is ~/config, not ~/.config. Exceptions to this are files used by programs that can't be renamed, like ~/.zshenv.
My home directory itself contains very little files and directories. It is split up into archive, config, projects, school and tmp. ~/archive is for files like images, videos, documents and other things I don't edit and access very often. ~/config is for configuration. ~/projects is for personal projects, like programs and this site. ~/school is for school-related things. ~/tmp is for downloads and other temporary files created by myself, it doesn't contain any important files and I often wipe it.
To keep my home directory clean, I use the XDG directories:
These are my XDG environment variables:
XDG_CONFIG_HOME: ~/config/dotfiles XDG_CACHE_HOME: ~/.cache XDG_DATA_HOME: ~/.local/share XDG_STATE_HOME: ~/.local/state
Although my home directory is mostly clean this way, some programs don't follow this specification and still create files directly in my home directory. There isn't much you can do about this, except avoiding using these programs.
Most of my configuration files are in my ~/config directory. It is split up info dotfiles, programs and scripts. In config/dotfiles are the configuration files for the programs I use (like vimrc), config/scripts contains scripts I wrote and config/programs is for suckless programs.
I save all my configuration in my config repository, which is just a repository of my ~/config directory. It contains all suckless programs I use as git submodules. If a program creates config files directly in my home directory which can't be put in my XDG_CONFIG_HOME (like zsh's .zshenv), I store it in config/dotfiles anyway and create a symlink to it in my home.