A self-contained, offline-first package manager + dotfiles bundle for Engineering work environments.
- Old Linux distro versions
- Limited, or no, internet access
- No sudo/root
- Built from 30+ years of Electrical Engineering workflow experience
- All built on AlmaLinux8.10 (Redhat 8.10 clone), GLIBC2.28
- Compatible with RHEL9.X and beyond
- Redhat7 is EoL. If you see any Redhat7 zombies 🧟 walking around, please stab them in the head 🔪.
If you can get the singular tar file into your work environment (an sftp pipeline is usually available), then you can start working with modern Linux tools and "sane" configurations. "Sane" as defined by me of course 😃.
The Loadout is a typed package registry (pre_built/packages.json, schema_version: 2) that
names every installable thing — binary, library bundle, runtime archive,
config bundle, font, data cache. Packages declare dependencies; groups
bundle them; a built-in resolver walks the graph; the CLI gives you
list / describe / resolve / doctor subcommands and --add /
--skip / --only selection flags.
In other words, it does basic package-management stuff.
| Component | Description |
|---|---|
| Package manager | ./engineering-loadout — typed registry, group expansion, depends/recommends resolver, kind-dispatched install (bin/lib-bundle/runtime/env/font/data/...) |
| Bash | Layered config (global→corp→site→project→user), 100+ power aliases, fzf/zoxide/eza/bat integration |
| Neovim | Kickstart.nvim base, Lazy.nvim, LSP, 326 offline Tree-sitter parsers, locked plugin versions |
| Vim | Bundled plugins (NERDTree, SimpylFold, vim-liberty), vendored runtime, pre-built binary |
| Tmux | Bundled plugins (resurrect, continuum, better-mouse-mode), Ctrl-\ prefix |
| Helix | Vendored runtime archive, ready to run offline |
| Starship | Cross-shell prompt, starship/starship.linux.toml and starship/starship.windows.toml |
| PowerShell | Aliases, Unix coreutils wrappers, PSReadLine, Starship, zoxide, PSFzf |
| WezTerm | Terminal emulator config |
| AutoHotKey | AHK v2 flat script, optional features via loadout_keys.toml |
| EditorConfig | Consistent formatting across all editors |
| Pre-built binaries | 52 default + 9 optional modern CLI tools, zero internet required — see table below |
| Nerd Fonts | 7 font families, split-archive support for GitHub's 50 MB limit |
All binaries shipped in this repo pass a three-layer scan (ClamAV + YARA-Forge + upstream SHA-256) before each release. Details
./engineering-loadout reads pre_built/packages.json (schema_version: 2)
and resolves a selection into a flat install set.
Package kinds (kind field): bin, lib-bundle, runtime, typelib,
python-base, python-tool, env, font, data, group. Every package
also has default: true|false, platforms: [...], optional tags, and per-kind
artifact fields (bins / libs / archive / source / wheels / etc.).
Groups are entries whose names start with @ and carry a members list.
They expand recursively with cycle detection. The synthetic @default group
expands at runtime to every default: true package.
Dependencies are declared per package:
depends— hard. Skipping one while a depender is selected raisesResolverErrorunless--no-depsor--force.recommends— soft. Auto-pulled when available; silently dropped if skipped or unknown.
Resolution order (resolve_tool_selection): parse --skip → build initial set
from @default ∪ --add (or --only) → subtract --skip → walk hard depends
→ walk soft recommends → filter by current platform.
./engineering-loadout list # every package
./engineering-loadout list --groups # every @-group + member count
./engineering-loadout list --tag editor # filter by tag
./engineering-loadout describe gvim # full metadata + reverse-deps + group memberships
./engineering-loadout describe @core-cli # group members
./engineering-loadout resolve gvim # dry-run resolver; prints set grouped by kind
./engineering-loadout doctor # platform + registry integrity check
./engineering-loadout --dry-run --add octave # resolve + print; no writes
./engineering-loadout --add @gui-suite # add a group
./engineering-loadout --skip @fonts-all # drop all font packages
./engineering-loadout --profile engineering-loadout # alias for --only @engineering-loadoutSee the full CLI surface under Installation → Subcommands & options below.
Offline-first. Plugins, parsers, fonts, and binaries are all bundled. Nothing is fetched at install time. Ship it to an air-gapped EDA workstation and it just works.
No root. Everything lands in $HOME. No package manager, no sudo, no IT ticket.
Multi-platform. RedHat 7/8/9, Suse, x86_64/ARM/PowerPC, and Windows. Platform directories
(el8.x86_64.glibc2p28) select binaries by OS family, architecture, and glibc version. A
compatible-ABI build is used when an exact match is absent.
Layered. Configuration flows from lowest to highest precedence:
Global → Corp → Site → Project → User
Each layer overrides the previous without touching upstream files. Corp secrets, site-specific EDA tool paths, and personal tweaks all coexist without forking. Pull a loadout update and your overrides still work.
Opinionated but escapable. Sensible defaults ship out of the box. Every preference is a
LOADOUT_CFG_* variable you can override in your user layer:
# bash/user/config.sh
export LOADOUT_CFG_PREFERRED_VI=vim # use vim instead of nvim
export LOADOUT_CFG_ENABLE_STARSHIP=0 # use the built-in prompt
export LOADOUT_CFG_ATTACH_TO_TMUX=1 # auto-attach tmux on loginAll binaries are stripped, bzip2-compressed, and verified clean before release. RPATH is
pre-baked into each binary in the repo ($ORIGIN/../lib64:$ORIGIN/../lib) so the installer
is pure decompress + chmod — no runtime patchelf, no LD_LIBRARY_PATH hacks.
| Binary | Version | Description |
|---|---|---|
| agent-deck | 1.9.12 | TUI dashboard for AI agent orchestration |
| bash | 5.3.9 | The GNU Bourne Again SHell |
| bat | 0.26.1 | cat with syntax highlighting and Git integration |
| biome | 2.4.15 | Fast Rust JSON/JS/TS/CSS formatter, linter, and LSP (static-pie musl build, no glibc dep) |
| broot | 1.56.2 | Interactive tree navigator and fuzzy finder |
| btm | 0.12.3 | Cross-platform system monitor (CPU, memory, process tree) |
| btop | 1.4.7 | Resource monitor — top for people who care about aesthetics |
| bzip2 | 1.0.8 | High-quality block-sorting file compressor |
| choose | 1.3.7 | Human-friendly cut and awk replacement |
| dasel | 3.8.1 | Select, update, and convert data across JSON/YAML/TOML/XML/CSV |
| delta | 0.19.2 | Git diff pager with syntax highlighting and line numbers |
| duf | 0.9.1 | df replacement with colored disk usage table |
| dust | 1.2.4 | Intuitive du — shows disk usage by size, at a glance |
| eza | 0.23.4 | Modern ls with color, icons, Git status, and tree view |
| fd | 10.4.2 | Fast, ergonomic find replacement |
| fzf | 0.62.0 | Blazing-fast fuzzy finder for files, history, anything |
| gnuplot | 6.0.2 | Portable command-line graphing utility |
| gping | 1.20.1 | ping with a real-time ASCII graph |
| htop | 3.2.1 | Interactive process viewer — the original top upgrade |
| hx | 25.07.1 | Helix modal editor — Kakoune-inspired, batteries included |
| hyperfine | 1.20.0 | Command-line benchmarking tool with statistical output |
| jq | 1.8.1 | Lightweight and flexible command-line JSON processor |
| just | 1.50.0 | Command runner — sane make replacement for project tasks |
| kak | 2026.04.12 | Kakoune — selection-first modal editor |
| lazygit | 0.61.1 | TUI git client for staging, committing, and rebasing |
| micro | 2.0.15 | Modern, intuitive terminal text editor — Ctrl+S just works |
| miller | 6.18.1 | CSV/TSV/JSON/NDJSON/XML data processor (mlr) |
| nvim | 0.12.2 | Hyperextensible Vim-based text editor |
| patchelf | 0.12 | Modify ELF binary RPATHs and interpreters at install time |
| pigz | 2.8 | Parallel gzip — multi-core gzip/gunzip replacement |
| procs | 0.14.11 | ps replacement with colors and process tree |
| pv | 1.6.6 | Monitor progress of data through a pipe |
| resize | 331 | XTerm terminal resize utility — fixes $COLUMNS/$LINES |
| rg | 15.1.0 | ripgrep — recursive search that respects .gitignore |
| rsync | 3.4.1 | Fast, incremental file transfer |
| ruff | 0.15.12 | Extremely fast Python linter and formatter, written in Rust |
| sd | 1.0.0 | Intuitive sed replacement — sd 'old' 'new' just works |
| shfmt | 3.13.1 | Shell script formatter (bash/sh/mksh/bats) |
| starship | 1.25.1 | Cross-shell prompt — fast, informative, configurable |
| stylua | 2.4.1 | Opinionated Lua code formatter |
| tealdeer / tldr | 1.8.1 | Fast tldr client with offline page cache |
| tkdiff | 6.0 | Tcl/Tk visual diff and merge tool (requires wish) |
| tmux | 3.6a | Terminal multiplexer |
| tree-sitter | 0.26.8 | Parser generator tool and incremental parsing library |
| ty | 0.0.35 | Extremely fast Python type checker by Astral |
| uv | 0.11.13 | Extremely fast Python package installer and resolver |
| vim | 9.2 | Vim 9.2 pre-built binary + shell wrapper |
| xsel | 1.2.0 | X11 clipboard command-line access tool |
| xterm | 331 | X Window System terminal emulator |
| yank | 1.3.0 | Select terminal output and copy to clipboard |
| yara | 4.5.5 | Malware pattern matching and classification |
| yq | 4.53.2 | jq for YAML, JSON, XML, CSV, TOML, and properties files |
| zoxide | 0.9.9 | Smarter cd — learns your most-used directories |
Not installed by default. Add with ./engineering-loadout --add <name> or view all with ./engineering-loadout list.
| Binary | Version | Description |
|---|---|---|
| gvim | 9.2 | GTK3 GUI vim — gvim.bin (stripped binary) + gvim wrapper setting VIM/VIMRUNTIME |
| nedit-ng | 2025.1 | Qt5 rewrite of NEdit — single self-contained binary, no runtime files |
| octave | 11.1.0 | GNU Octave scientific computing (~163 MB uncompressed; see notes below) |
| gui_libs | — | ~80 bundled Qt5/GTK3/xcb/Wayland shared libs for headless farm nodes |
| visidata | 3.3 | TUI spreadsheet for exploring CSV/TSV/JSON/NDJSON data |
| meld | 3.20.4 | GTK3 visual diff and merge tool (shanghai bundle — system py3.6 + PyGObject) |
| zsh | — | Z shell — advanced tab completion, powerful scripting |
| fish | 4.7.1 | Fish shell — autosuggestions, syntax highlighting, no config needed |
| jupyterlab | 4.5.7 | Web-based interactive notebooks (Python via uv tool, opens in browser) |
| urxvt | 9.31 | rxvt-unicode — X11 terminal with Unicode, Xft, and daemon mode (urxvt/urxvtc/urxvtd; perl extensions disabled) |
| st | 0.9.3 | suckless st — minimal X11 terminal with undercurl patch (UNDERCURL_CURLY style for LSP/spell-check diagnostics) |
| time-plot | 0.1.0 | Plot arbitrary data vs. zero-based time with pluggable file-parser plugins (uPlot HTML output) |
gui_libs targets headless EE farm/LSF nodes that have no GUI libraries but run GUI tools with DISPLAY forwarded back to a workstation. It includes Qt5 5.15.3, GTK3 3.22, ICU 60, cairo, pango, xcb extensions, xkbcommon, and Wayland client libs. All are patchelf'd with $ORIGIN RPATH so they find each other in ~/.local/lib64/.
# Install GUI editors — gui_libs + vim92-runtime are auto-pulled as dependencies.
./engineering-loadout --no-backup --skip @fonts-all,tldr-data --add gvim,nedit-ng
# Or use the bundled group:
./engineering-loadout --no-backup --add @gui-suiteWSLg note: Qt5's XCB backend corrupts XWayland's global cursor state (all X11 apps in the session lose their cursor). Fix: add export QT_QPA_PLATFORM=wayland to ~/.config/bash/user/bashrc. The Wayland backend (included in gui_libs) routes cursor management through the compositor directly, bypassing XWayland.
| Package | Version | Description |
|---|---|---|
| Python | 3.14.4 | LLVM BOLT-optimized portable Python build for EL8. Installs to ~/.local via bundled install.sh. Generic python3/pip3 links are left in place, so python3 on PATH resolves to 3.14. Tools that hard-require system Python 3.6 must invoke /usr/bin/python3 explicitly. Use python3.14 and pip3.14 to pin this build. |
Runtime dependencies vendored alongside binaries — no system library assumptions. ~28 always-installed core libs + ~80 in the opt-in gui_libs bundle for Qt5/GTK3/xcb/Wayland on headless farm nodes. Details
The full nvim-treesitter parser registry is prebuilt and bundled for
linux-x86_64-glibc. All 326 language parsers install offline to
~/.local/share/nvim/tree-sitter-parsers/ with queries, parser-info, and
build metadata. Build your own or refresh with ./treesitter/build_parsers.
Six font families bundled and installed to ~/.local/share/fonts:
| Font | Notes |
|---|---|
| Envy Code R | Clean, distinctive coding font |
| Fira Code | Ligature-rich monospace |
| Hack | Designed for source code |
| Inconsolata | Humanist monospace |
| Iosevka Term | Ultra-narrow, highly legible |
| JetBrains Mono | Designed for long coding sessions |
| Source Code Pro | Adobe's open-source workhorse |
Large archives are split into *.zip.part-* chunks (≤ 45 MiB) to stay below
GitHub's 50 MB file warning. The installer rejoins them in /tmp before
extracting. Use ./engineering-loadout --skip @fonts-all to skip every font, or
--skip font-firacode to skip a single family.
Download Source code (tar.gz) from the latest release, then extract and run:
tar xzf engineering-loadout-v*.tar.gz
cd engineering-loadout-v*/
./engineering-loadoutOr, if curl and the GitHub API are reachable from the target machine:
curl -fsSL \
"$(curl -fsSL https://api.github.com/repos/smprather/engineering-loadout/releases/latest \
| python3 -c 'import sys,json; print(json.load(sys.stdin)["tarball_url"])')" \
| tar xz --one-top-level=engineering-loadout --strip-components=1
cd engineering-loadout
./engineering-loadoutSingle Python 3.6-compatible executable. Re-run with a new release tarball to update
(idempotent; unchanged files skip the install step). Reload your shell with
exec bash afterward.
.\engineering-loadout.ps1 # PowerShell 7+
.\engineering-loadout-pwsh-bootstrap.ps1 # if starting from PowerShell 5.1No elevation required.
Full subcommand reference, install destinations, post-install hooks, backup restore, and Windows AHK feature flags: Details
Five-layer override chain (global → corp → site → project → user), LOADOUT_CFG_* knobs, 7 startup hook-injection points, and a curated alias set (b/bb/… directory hopping, g/f for rg/fd with fallbacks, gs/gc/gp git shortcuts, etc.). Details
Prefix Ctrl-\. Shift-arrows for pane nav, Ctrl-arrows for windows, Prefix+1–5 layouts, Prefix+v capture-to-nvim, tmux-resurrect + continuum bundled. Details
Recipes for adding/updating pre-built binaries (strip → patchelf → bzip2), importing portable Python, refreshing tldr/tmux-plugins/Tree-sitter parsers, and installing the repo git hooks: Details. Per-tool update playbook (check-versions → per-kind build path → smoke + commit + release) covered there too.
After extracting a release and running ./engineering-loadout to install the runtime, run ./dev-onboard once to add the system-level packages, dev headers, and per-user toolchains required to rebuild any bundled tool from source. Six phases: dnf repos → toolchains (gcc-toolset-14, llvm, go) → dev headers (X11/Qt5/GTK3/ncurses/Octave) → release/CI (gh, docker) → per-user (rustup, nvm, uv tool meson) → sanity checks. Idempotent; --check for dry-run, --yes for non-interactive.
EE Linux Tools — companion repo providing pre-built modern CLI binaries (RipGrep, Tmux, EZA, and more) for offline/locked-down Linux environments. The tools in engineering-loadout are also available there in standalone form.