# 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.