- Shell 100%
| user-selection | ||
| zshrc.d | ||
| fastfetch.sh | ||
| firebadnofire.zsh-theme | ||
| golang.sh | ||
| init.sh | ||
| LICENSE | ||
| README.md | ||
| zsh.sh | ||
| zshrc | ||
zshrc
Multi-distro Zsh deployment repository for installing a shared shell setup across several Linux distributions and FreeBSD.
Overview
This repository is organized around a simple deployment pipeline:
init.shis the remote bootstrap script.zsh.shis the interactive installer and deployment entry point.zshrcis the runtime shell entry point.zshrc.d/*.zrccontains shared shell modules.user-selection/*.zrccontains distro-specific and optional feature overlays.
The installer deploys a common Zsh base, then adds overlays for the selected package manager and optional features.
The repository can now be used in two ways:
- remote-first through the published bootstrap URL
- locally from a checked-out clone, where
zsh.shcopies assets from the repository instead of re-downloading them
Bootstrap
To start from the published remote bootstrap script:
curl -fSsL https://pubcode.archuser.org/firebadnofire/zshrc/raw/branch/main/init.sh | bash
Short redirect form:
curl -fSsL archuser.org/zshrc | bash
The shorter archuser.org/zshrc form relies on HTTP redirection, so curl -L is required.
init.sh downloads the current installer payloads into /tmp and prompts you to run /tmp/zsh.sh.
You can also run the installer directly from a local checkout:
bash ./zsh.sh
When run locally, zsh.sh prefers repository files over remote downloads.
Repository Layout
.
├── README.md
├── init.sh
├── zsh.sh
├── zshrc
├── fastfetch.sh
├── golang.sh
├── firebadnofire.zsh-theme
├── zshrc.d/
│ ├── 00-paths.zrc
│ ├── 02-git-signing.zrc
│ ├── 03-system-aliases.zrc
│ ├── 05-tools.zrc
│ ├── 99-post.zrc
│ └── suppress-warning.zrc
└── user-selection/
├── 04-pkg-arch.zrc
├── 04-pkg-debian.zrc
├── 04-pkg-freebsd.zrc
├── 04-pkg-gentoo.zrc
├── 04-pkg-opensuse-tumble.zrc
├── 04-pkg-rhel.zrc
├── 06-mullvad.zrc
└── 07-warn-docker.zrc
Key Components
init.sh
Remote bootstrap script intended to be fetched over curl | bash. It downloads:
zsh.shfastfetch.shgolang.sh
zsh.sh
Main deployment script. It provides an interactive menu for:
- installing base packages for a supported distro
- deploying the shared Zsh configuration
- installing Rust
- installing Fastfetch
- installing Go
- enabling Mullvad aliases
- enabling Docker SELinux reminders
- generating a local SSH key
This script is the main place where distro package installation is defined. It now centralizes:
- shared remote asset path handling
- local-versus-remote asset deployment
- distro overlay selection
- backup of an existing
~/.zshrcbefore replacement
zshrc
Runtime shell entry point. It:
- exits for non-interactive shells
- sets common environment defaults
- bootstraps Oh My Zsh
- ensures the custom theme is present
- loads all
~/.zshrc.d/*.zrcmodules
If Oh My Zsh is missing, it exits cleanly instead of partially bootstrapping a broken shell.
zshrc.d/
Shared modules loaded for every configured shell:
00-paths.zrc: commonPATHand tool environment setup02-git-signing.zrc: Git signing configuration using SSH or GPG03-system-aliases.zrc: general aliases and helper commands05-tools.zrc: network/tool variables and helper aliases99-post.zrc: startup diagnostics and final shell post-load actionssuppress-warning.zrc: placeholder file to avoid empty-glob issues
user-selection/
Selectable overlays copied into ~/.zshrc.d by the installer.
Package manager overlays:
04-pkg-arch.zrc04-pkg-debian.zrc04-pkg-freebsd.zrc04-pkg-gentoo.zrc04-pkg-opensuse-tumble.zrc04-pkg-rhel.zrc
Each package overlay defines a common user-facing interface:
- package upgrade count on shell startup
insupdateupgradesearchremPKGMGR
Optional overlays:
06-mullvad.zrc: adds themlexalias whenmullvad-excludeis installed07-warn-docker.zrc: warns before selected Docker commands to remind about:Zflags
Supported Distros
Current base package installation support in zsh.sh:
- Debian
- Arch Linux
- RHEL-compatible systems
- OpenSUSE
- FreeBSD
- Gentoo
Additional distro-aware support exists in fastfetch.sh, which includes several extra platforms for Fastfetch installation.
golang.sh is intentionally Linux-only and now exits clearly on unsupported operating systems.
Deployment Model
The project separates installation from runtime behavior:
- installation logic lives in
zsh.sh - runtime shell behavior lives in
zshrcplus the.zshrc.dmodules - distro-specific runtime behavior is injected by copying one of the
04-pkg-*.zrcfiles into~/.zshrc.d
This means the runtime shell config stays mostly uniform while package-manager commands vary by selected distro.
Typical Flow
- Run the bootstrap command.
- Execute
/tmp/zsh.sh. - Select your distro to install base packages and the matching package-manager overlay.
- Select
Install Zshrcto deploy the runtime configuration. - Optionally install Rust, Fastfetch, Go, Mullvad aliases, or Docker reminders.
- Start a new Zsh session.
Notes and Caveats
init.shis still a remote bootstrap script, butzsh.shcan now deploy directly from a local checkout.- Startup diagnostics remain enabled by default, but they can now be disabled by setting
ZSHRC_SHOW_STARTUP_INFO=0. - Some shared aliases assume Linux tooling such as
systemctl, so not every shared module is fully portable across every supported platform. - The theme fetch path is now aligned with the repository's raw asset path through
ZSHRC_REMOTE_BASE. - Install-time generated files still exist, such as
~/.zshrc.d/08-golang.zrc.
Development
When changing this repository, keep the current layering intact:
- update
zsh.shwhen changing installer behavior - update
zshrcfor shell bootstrap/runtime changes - update
zshrc.d/for shared shell behavior - update
user-selection/for distro-specific or optional overlays
If you add a new distro, update both:
- the package installation logic in
zsh.sh - the matching
user-selection/04-pkg-*.zrcoverlay