Skip to content

smprather/engineering-loadout

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

287 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Engineering Loadout

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.


What's Inside

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

Security

All binaries shipped in this repo pass a three-layer scan (ClamAV + YARA-Forge + upstream SHA-256) before each release. Details


Package Manager

./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 raises ResolverError unless --no-deps or --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-loadout

See the full CLI surface under Installation → Subcommands & options below.


Design Goals

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 login

Pre-Built Binaries — el8.x86_64.glibc2p28

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

Tools

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

Optional Tools

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-suite

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

Python

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.

Vendored Shared Libraries

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


Neovim — 326 Offline Tree-sitter Parsers

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.


Nerd Fonts

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.


Installation

Linux

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-loadout

Or, 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-loadout

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

Windows

.\engineering-loadout.ps1                  # PowerShell 7+
.\engineering-loadout-pwsh-bootstrap.ps1   # if starting from PowerShell 5.1

No elevation required.

Full subcommand reference, install destinations, post-install hooks, backup restore, and Windows AHK feature flags: Details


Bash Configuration

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


Tmux

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


Maintenance

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.

Onboarding a new developer

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.


Related

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.

About

No description, website, or topics provided.

Resources

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors