# My Modular Global Bash Setup Shell configuration is split across modular files rather than a single `.bashrc`. The global `/etc/bash.bashrc` sources every `.sh` file in `/etc/bashrc.d/` in order. Each file handles one concern. ## The Loader `/etc/bash.bashrc` checks for an interactive shell, then sources each readable `.sh` file in `/etc/bashrc.d/`: ```bash case $- in *i*) ;; *) return;; esac if [ -d "/etc/bashrc.d" ]; then for f in "/etc/bashrc.d"/*.sh; do [ -f "$f" ] && [ -r "$f" ] && . "$f" done fi ``` ## Per-User Customization Each project runs under its own limited user account. The global `/etc/bashrc.d/` directory gives every user the same base configuration without per-user setup. `95-user_bash.sh` adds an optional per-user extension point: ```bash [[ -f "$HOME/.user_bash" ]] && . "$HOME/.user_bash" ``` If `~/.user_bash` exists in a user's home directory, it is sourced. If it does not exist, nothing happens. The `95-` prefix places it late in the load order, so per-user settings apply after all global defaults.