A self-contained, offline-first toolkit for engineering work environments.
- Old Linux distros
- Limited or no internet access
- No
sudo/ no root - Built from 30+ years of engineering workflow experience
- All built on AlmaLinux 8.10 (RHEL 8 clone), glibc 2.28
- Compatible with RHEL 9.x and beyond
Drop the release tarball onto a locked-down workstation, run one command,
and you have modern Linux tooling and sane configurations in your $HOME --
no installer, no admin, no internet.
Download the .tar.gz release archive from the
latest release,
then extract and run -- nothing is built or compiled, the archive ships every
binary, library, font, and config file ready to install:
tar xzf engineering-loadout-v*.tar.gz
cd engineering-loadout-v*/
./tools/fetch-stash # Neovim plugins -- see below
./loadout install @engineering-loadoutThat installs the @engineering-loadout group -- a curated set of
command-line tools, editors, fonts, and configuration files -- into
~/.local and ~/.config. Reload your shell with exec bash when it
finishes.
The plugin stash is a separate release asset, not part of the tarball --
it is ~328 MB of bz2'd git packfiles, so committing it would grow every clone
permanently. ./tools/fetch-stash downloads and verifies it against the release.
If this machine cannot reach GitHub, download nvim-plugin-stash.tar.bz2 and
sha256sums.txt from the release on any machine that has GitHub access, copy
both over, and pair them by hand:
./tools/fetch-stash --from-file /path/to/nvim-plugin-stash.tar.bz2 \
--sums /path/to/sha256sums.txt--sums is required: without it there is nothing to verify against, and a
stash that fails its hash is deleted rather than left on disk. Do not copy
the asset into place manually -- .content-manifest is a strict allowlist, so
a hand-placed stash is refused, not silently trusted.
Skipping it is safe only for a core/editor-only Neovim: Neovim still installs,
but the installer cannot run the offline headless Lazy sync that makes the first
interactive launch warning-free. For a normal env-nvim install, fetch and
install the stash so Lazy.nvim and the active plugins are cloned from local
mirrors before the user ever starts Neovim.
Re-run the same command against a newer release tarball to update. Unchanged files are skipped, so re-runs are quick.
Deploying to a compute farm or an air-gapped site? The steps above are the single-machine case. For a shared read-only tree, per-user config, the Neovim plugin stash, and getting everything across a network whose policy changes --- see the Deployment Runbook. Full install details are in Installation.
Name packages or groups the same way dnf or apt works:
./loadout install @engineering-loadout # the curated set
./loadout install octave # one package
./loadout install parity-plot # parity-plot CLI + local designer
./loadout install @gui-suite # a group
./loadout install @engineering-loadout --skip @fonts-all # curated set minus fonts
./loadout list # browse packages
./loadout list vim helix # name matches either filter
./loadout list --tag editor # filter by tag
./loadout search vim # substring search
./loadout info gvim # details for one package
./loadout install octave --dry-run # preview only| Component | Description |
|---|---|
| Bash | Layered shell config, 100+ aliases, fzf / zoxide / eza / bat integration |
| Neovim | LSP, 326 offline Tree-sitter parsers, curated plugin set |
| Vim | Vim 9.2 with NERDTree, SimpylFold, and vim-liberty bundled |
| Tmux | Sessions that survive reboot (resurrect + continuum), Ctrl-\ prefix |
| Helix | Ready to run offline |
| Starship | Cross-shell prompt, Linux config |
| WezTerm | Terminal emulator config |
| EditorConfig | Consistent formatting across all editors |
| Command-line tools | 100+ modern CLI utilities, ready offline -- see table below |
| Nerd Fonts | 12 font families |
Offline-first. Plugins, parsers, fonts, and binaries are bundled. Nothing is fetched at install time. Ship it to an air-gapped workstation and it just works.
No root. Everything lands in $HOME (or --dest-dir). No package
manager, no sudo, no IT ticket.
Shared-tree installs stay relocatable: bundled runtime/data assets live under
~/.local/share (or the staged prefix) and shell init exports the paths
needed for discovery, including TERMINFO_DIRS for bundled st terminfo.
Multi-platform Linux. RedHat 7 / 8 / 9, Suse, x86_64 / ARM / PowerPC. Windows and macOS are not supported (the platform vocabulary was retired 2026-08-31); Linux-only is the whole surface.
Layered configuration. Shell settings flow from lowest to highest precedence:
Global -> Corp -> Site -> Team -> Project -> User
Each layer overrides the previous without touching the upstream files.
Personal tweaks, team conventions, and corporate defaults all coexist
without forking anything. Pull a loadout update and your overrides still
work. Neovim and tmux use the smaller Global -> User chain: loadout updates
the global defaults while personal configuration remains untouched.
Opinionated but escapable. Sensible defaults out of the box. Every
preference is a LOADOUT_CFG_* variable you can override in your user layer:
# envs/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
export LOADOUT_CFG_ENABLE_WEZTERM_SHELL_INTEGRATION=0 # disable wezterm OSC integrationThe whole suite has one entry point:
tests/run-all # Tier 1 fast checks + Tier 2 integration installs
tests/run-all --fast # Tier 1 only
tests/run-all --container # adds the Tier 3 clean-container smoke (Docker)Stock AlmaLinux 8 is the verification baseline for install behavior -- a developer machine accumulates packages that mask missing-dependency bugs.
For maximum Linux binary coverage, run the AlmaLinux 8.10 container smoke. It
uses a clean base image, copies this checkout inside the container, installs
@shared into a temp --dest-dir, and probes every installed executable with
only the staged local/bin plus a basic system PATH. The container does not
install Python for the harness; it uses ./loadout to bootstrap the bundled
Python 3.14 first. The smoke reports deliberate host contracts as skips: cloc
needs host Perl, meld needs EL8 /usr/bin/python3.6, and OpenGL GUI apps need
host GLVND dispatchers such as libGL.so.1.
KLayout ships one EL8-compatible build for all supported Linux distributions.
Its launchers prefer host Fontconfig and avoid exporting bundled Mesa paths when
host GL is available. With DISPLAY present, Qt defaults to xcb (X11/XWayland);
an explicitly set QT_QPA_PLATFORM always wins. Native Wayland visibility is not
verified. The shared LOADOUT_GUI_HOST_GL and LOADOUT_GUI_HOST_FONTCONFIG
overrides also apply to KLayout; no system configuration changes are needed.
tests/prebuilt-binaries-almalinux8 # binary probe only
tests/prebuilt-binaries-almalinux8 --full # + doctor, resolvers, unit tests,
# and both integration installsFor the shared-tree deployment model, run the split install smoke. It installs
@shared into a temp non-home tree, installs @envs into a separate temp
HOME with LOADOUT_CFG_SHARED_PREFIX=<shared>/local, then checks Bash
startup, shared PATH, terminfo, WezTerm completions, and core tool startup.
@envs installs Bash configuration only (plus its Starship recommendation);
install other config bundles explicitly or use @envs-all when every shell
and editor config is intentional. Env installs copy config files into ~/.config; old symlinked config
subdirectories that point back into the repo are replaced with real
directories so installs cannot mutate the checkout.
tests/install-split-shared-envsEach row is a package you can install by name with
./loadout install <name>. Groups (@engineering-loadout, @gui-suite,
@core-cli, ...) bundle related packages so you can install many at once.
Run ./loadout list to see every package and every group, or
./loadout list --groups to see just the groups.
Add one or more positional filters to match package or group names
case-insensitively; any matching filter includes a row. Descriptions are not
searched, for example: ./loadout list vim helix or
./loadout list --groups editor cli.
The optional openssh package provides modern ssh-keygen for SSH commit/tag
signing on EL8 and an explicit ssh10 client. It does not install bare
ssh/scp/sftp, so normal SSH stays the host-integrated system client.
FIDO security keys (-t ed25519-sk) and PKCS#11 tokens are not supported by
the bundled binaries (their libexec helpers are not shipped) -- use the system
OpenSSH for those.
| Package | Kind | Version | Description |
|---|---|---|---|
| agent-deck | bin | 1.16.10 | TUI dashboard for AI agent orchestration |
| amux | bin | 0.0.20 | TUI for orchestrating parallel coding agents via git worktrees + tmux |
| bash | bin | 5.3.20 | Portable GNU Bash ahead of EL8 system version |
| bash-docs | runtime | 5.3.9 | GNU Bash man page (bash.1) and info pages; extracted from bash 5.3 source |
| bat | bin | 0.26.1 | cat clone with syntax highlighting and line numbers |
| biome | bin | 2.5.14 | Fast Rust JSON/JS/TS/CSS formatter, linter, and LSP (static-pie musl build, no glibc dep) |
| broot | bin | 1.60.1 | Interactive tree navigator with fuzzy search |
| gtkwave | bin | 3.3.116 | GTKWave — VCD/FST/LXT2/VZT waveform viewer (GTK3) plus the headless format-converter suite (fst2vcd, vcd2fst, vcd2vzt, ...); Tcl scripting not compiled in |
| ipython | python-tool | 9.17.1 | Enhanced interactive Python REPL (tab completion, magics, history, introspection) |
| klayout | bin | 0.30.12 | KLayout — GDSII/OASIS/DXF/CIF/LEF-DEF mask layout viewer and editor with scriptable DRC/LVS (Qt5); embeds the loadout Ruby 3.3 and portable Python 3.14 |
| verilator | bin | 5.052 | Verilator — Verilog/SystemVerilog to C++ simulator (lint, coverage, cycle-accurate regression models); needs host perl and the user’s own g++ |
| yazi | bin | 26.9.1 | Blazing-fast terminal file manager (static-pie musl build, no glibc dep); ships the ya CLI companion |
| btm | bin | 0.14.9 | Cross-platform system resource monitor (TUI) |
| btop | bin | 1.4.7 | Resource monitor with graphs and mouse support |
| liberty-filter | bin | 1.0.1 | liberty-filter — strip unneeded data from Liberty (.lib) timing files; Rust CLI, system-libs only |
| lefdef-tools | python-tool | v2026.9.0 | lefdef-tools — fast LEF/DEF parsing and query tools (Rust backend) |
| liberty-tools | python-tool | v2026.06.01.1-35-g73af358 | liberty-tools — Liberty .lib parser/query library (Rust backend) with liberty-format and liberty-view CLI tools |
| vcd-toggle-profiler | runtime | 891a391 | VCD toggle profiler — C++17 VCD signal toggle analysis with offline self-contained HTML reports |
| pdftotext | bin | 26.04.0 | pdftotext (poppler-utils) — extract plain text from PDF files; static libpoppler, bundles liblcms2+libopenjp2 and poppler-data (CJK CMaps) with a relocatable wrapper |
| p7zip | bin | 16.02 | p7zip — Unix port of 7-Zip; 7za standalone binary (LZMA2, zip, gzip, bzip2, tar, cab, etc.) |
| bzip2 | bin | 1.0.8 | Block-sorting file compressor |
| choose | bin | 1.3.7 | awk/cut alternative for column field selection |
| clang | bin | 23.0git | LLVM/Clang 23 compiler toolchain (clang, lld, clangd, clang-format, clang-tidy, llvm-ar/nm/objcopy/objdump/symbolizer/cov/profdata/link) |
| cloc | bin | 2.10 | Count Lines of Code by language (blank/comment/code). Self-contained Perl script; requires host perl |
| scc | bin | 4.1.0 | Sloc, Cloc and Code — fast code counter with complexity estimates (GitHub's counter). Go static binary, no deps |
| tokei | bin | 15.0.0 | Fast code counter by language. Rust; EL8 source build (v14 ships no prebuilt), links system libs only, glibc 2.28 |
| dasel | bin | 3.11.2 | Query and modify YAML/JSON/TOML/XML/CSV data |
| delta | bin | 0.19.2 | Git diff pager with syntax highlighting |
| duf | bin | 0.9.1 | df replacement with colored usage table |
| dust | bin | 1.2.6 | du replacement with visual bar chart |
| expect | bin | 5.45.4 | Tcl-based tool for automating interactive CLI programs |
| eza | bin | 0.23.5 | ls replacement with icons, colors, git status |
| fd | bin | 10.5.0 | Fast and user-friendly find alternative |
| fio | bin | 3.42 | Flexible I/O tester — storage and filesystem performance benchmark |
| fzf | bin | 0.74.4 | General-purpose command-line fuzzy finder |
| gnuplot | bin | 6.0.5 | Command-line graphing and plotting utility |
| glow | bin | 3.0.0 | Terminal markdown renderer/pager with styles |
| gocheat | bin | 0.1.1 | Interactive terminal cheatsheet browser (EL8 source build, CGO_ENABLED=0 static) |
| keyb | bin | 0.8.0 | Customizable TUI cheatsheet for keybindings/aliases; fuzzy filter, fzf/rofi export |
| gping | bin | 1.21.0 | Ping with live graph visualization |
| htop | bin | 3.5.3 | Interactive process viewer and manager |
| hx | bin | 25.07-984-g079a789e | Modern modal text editor with tree-sitter and LSP |
| hyperfine | bin | 1.20.0 | Command-line benchmarking tool |
| ncdu | bin | 2.9.2 | NCurses disk usage — interactive disk space analyzer (Zig v2) |
| openssh | bin | 10.4p1 | OpenSSH 10.4p1 signer tools plus explicit ssh10 client (ssh10/ssh10.bin/ssh-keygen/ssh-add/ssh-agent/ssh-keyscan), EL8 source build linking system libcrypto/zlib; provides ssh-keygen -Y sign for git commit/tag signing that stock EL8 8.0p1 lacks. Optional — opt in with ./loadout install openssh; does not install bare ssh/scp/sftp, so normal ssh stays host-integrated. |
| jq | bin | 1.8.2 | Lightweight JSON processor and formatter |
| just | bin | 1.58.0 | Command runner, ergonomic Makefile alternative |
| lazygit | bin | 0.65.1 | TUI git client for staging, committing, rebasing |
| less | bin | 704 | less pager — the standard terminal file viewer; EL8 ships less 530 from 2017, so this bundles the current upstream release (POSIX regex backend, no gui_libs coupling) |
| llvm-bolt | bin | 23.0git | LLVM BOLT binary optimizer + perf2bolt profile converter + merge-fdata |
| micro | bin | 2.0.15 | Beginner-friendly terminal text editor |
| miller | bin | 6.21.0 | CSV/TSV/JSON/NDJSON data processor (mlr) |
| mermaid-ascii | bin | 1.6.1 | Terminal mermaid-to-ASCII renderer — flowcharts as text diagrams |
| ninja | bin | 1.13.2 | Fast build system used by CMake and LLVM |
| numr | bin | 0.8.0 | Text calculator for natural-language expressions with a vim-style TUI (units, currency, variables) |
| fresh | bin | 0.5.1 | Fresh text editor (Rust, tree-sitter, TypeScript/JavaScript config) |
| nvim | bin | 0.12.5 | Hyperextensible Vim-based text editor |
| patchelf | bin | 0.12 | Modify ELF RPATH and interpreter in-place |
| pigz | bin | 2.8 | Parallel implementation of gzip |
| procs | bin | 0.14.12 | ps replacement with colors and process tree |
| pv | bin | 1.6.6 | Monitor and show progress of data through a pipe |
| rg | bin | 15.2.0 | Extremely fast grep alternative (ripgrep) |
| restic | bin | 0.19.1 | Fast, secure, user-space backup to a local repo -- content-defined deduplication, zstd compression, incremental snapshots, authenticated encryption. Single static binary, no root. |
| rsync | bin | 3.5.0 | Efficient file sync with delta-transfer algorithm |
| ruby | bin | 3.3.10 | Ruby 3.3 interpreter from the AlmaLinux 8 ruby:3.3 module stream — stdlib, default gems and rubygems, relocated via a RUBYLIB-deriving launcher |
| ruff | bin | 0.16.8 | Extremely fast Python linter and formatter |
| sd | bin | 1.1.0 | sed alternative with simpler regex syntax |
| shfmt | bin | 3.14.1 | Shell script formatter and parser |
| shellcheck | bin | 0.11.0 | Static analysis linter for shell scripts |
| sqlite | bin | 3.53.4 | SQLite database CLI and library — EL8 ships 3.26 from 2018; current upstream with readline line-editing and FTS4/5 + RTREE + session extensions |
| starship | bin | 1.26.0 | Cross-shell customizable minimal prompt |
| strace | bin | 7.2 | System call tracer — EL8 ships 5.18 (2022) with stale syscall tables; current upstream (built without libunwind/libselinux: EPEL-only / absent on newer distros, both unused by strace-ui) |
| strace-ui | bin | b48e51a | Interactive TUI for strace output (Jane Street OxCaml/Bonsai_term) — syscall browser with FD provenance tracking. Opt-in: install with ./loadout install strace-ui |
| stylua | bin | 2.5.2 | Opinionated Lua code formatter |
| tkdiff | bin | 6.0 | Tcl/Tk visual diff and merge tool |
| tldr | bin | 1.9.0 | Simplified community man pages (tealdeer) |
| valgrind | bin | 3.27.1 | Valgrind memory debugging + profiling (memcheck, cachegrind, callgrind, helgrind, massif) — EL8 ships 3.22 from 2022; current upstream with AVX-512 support and six releases of fixes |
| tmux | bin | 3.7c | Terminal multiplexer with session management |
| tree-sitter | bin | 0.27.0 | Incremental parser generator and query tool |
| ty | bin | 0.0.82 | Fast Python type checker (Astral) |
| gnu-coreutils | bin | 9.7 | GNU coreutils — individual binaries (ls, cp, mv, etc.) built from source on EL8 |
| uv | bin | 0.12.17 | Extremely fast Python package and project manager |
| vim | bin | 9.2.1119 | Vi IMproved text editor |
| gvim | bin | 9.2.1119 | GTK3 GUI Vim with clipboard and font rendering |
| surfer | bin | 0.7.0 | Surfer — waveform viewer (VCD/FST/GHW) for digital hardware debugging; egui/OpenGL GUI. Opt-in: install with ./loadout install surfer |
| mesa3d_libs | runtime | 23.1.4 | Mesa 3D userspace runtime — Mesa EGL vendor library, GBM, libglapi, DRI drivers, and LLVM runtime (no GLVND dispatcher libs) |
| gui_libs | lib-bundle | Qt5/GTK3/X11/Wayland shared library bundle (for headless compute farm GUI forwarding) | |
| xsel | bin | 1.2.1 | X11 clipboard command-line access tool |
| yara | bin | 4.5.8 | Malware pattern matching and classification tool |
| xterm | bin | 411 | X11 terminal emulator with Unicode and color |
| urxvt | bin | 9.31 | rxvt-unicode — X11 terminal with Unicode, Xft, and daemon mode (perl extensions disabled) |
| wezterm | bin | 20260618_095146_c10636f3 | WezTerm terminal emulator — shanghai bundle from system install; sample app for bundled Mesa 3D runtime |
| st | bin | 0.9.3 | suckless st — minimal X11 terminal with undercurl patch (UNDERCURL_CURLY) |
| xephyr | bin | 1.20.11-28.el8_10.3 | Xephyr — nested X server, plus the xdesk launcher: run any window manager or desktop session in a window inside the session you already have (no root, no display-manager change, no listening port) |
| yank | bin | 1.4.0 | Select terminal output and copy to clipboard |
| yq | bin | 4.53.6 | YAML/JSON/XML/CSV processor (jq for YAML) |
| zellij | bin | 0.45.1 | Terminal workspace multiplexer (no-web build; WASM plugins disabled) |
| zoxide | bin | 0.10.0 | Smarter cd with frecency ranking (z/zi) |
| octave | bin | 11.3.0 | GNU scientific computing language (MATLAB-compatible) |
| ngspice | bin | 46 | ngspice — open-source mixed-level SPICE circuit simulator (XSPICE + CIDER enabled, no-X11 headless build); relocatable wrapper loads spinit + codemodels from the install prefix |
| spice-subckt-rc-reduce | bin | 0.1.1 | Reduce parasitic RC networks in SPICE .subckt models (TICER / merge), preserving port behavior to cut simulation time |
| spice-netlist-ls | bin | 2026.8.0 | spice-netlist-ls — gofmt for SPICE netlists: formatter, linter, and LSP server for the classic SPICE circuit-simulation netlist format (HSPICE, NGSPICE, Spectre-SPICE, LTspice dialects). Ships spicefmt (CLI) + spice-netlist-ls (LSP); .scs files get per-section dialect routing. Member of @eda |
| visidata | python-tool | 3.4 | TUI spreadsheet for CSV/TSV/JSON data |
| meld | bin | 3.20.4 | GTK3 visual diff and merge tool (shanghai bundle — system py3.6 + bundled PyGObject/GtkSource) |
| mate-terminal | bin | 1.26.1 | MATE Terminal — GTK3 tabbed VTE terminal (shanghai bundle from EL8 EPEL; GSettings keyfile backend, no dconf-service needed) |
| firefox | bin | 140.14.0 | Mozilla Firefox ESR (shanghai bundle from EL8 BaseOS; thin POSIX-sh launcher exec's bundled firefox-bin). Ships a decode-only FFmpeg, so H.264/AAC sites (Facebook Reels, AVC YouTube) play on hosts with no system FFmpeg |
| zsh | bin | 5.9 | Z shell — powerful interactive shell with advanced tab completion; dynamically-loaded modules (regex, pcre, mathfunc, stat, mapfile, parameter, complist, zprof, zpty, socket, tcp, zftp, system, cap, clone, datetime, langinfo, terminfo, zutil, files, watch, attr, nearcolor, zselect) shipped via runtime archive |
| fish | bin | 4.9.3 | Fish shell — friendly interactive shell with autosuggestions and syntax highlighting |
| tcl | bin | 9.0.3 | Tcl scripting language — tclsh interpreter and runtime library |
| tclint | python-tool | 0.9.0 | tclint — modern dev tools for Tcl: tclint linter, tclfmt formatter, and tclsp language server (LSP for nvim/helix). Pure-Python wheel; zero-ver project (0ver.org). Covers .tcl and EDA constraint dialects (.sdc/.xdc/.upf). Drives envs/nvim/lsp/tclsp.lua and envs/helix/languages.toml |
| tk | bin | 9.0.3 | Tk GUI toolkit — wish interpreter and embedded Tk runtime |
| nodejs | bin | 26.9.0 | Node.js LTS JavaScript runtime with npm/npx (for LSP servers, JS tooling) |
| jupyterlab | python-tool | 4.6.1 | Web-based interactive development environment for notebooks, code, and data |
| time-plot | python-tool | v2026.9.15 | Plot arbitrary data vs. zero-based time with plugins for custom data file parsers |
| text-serdes | python-tool | 361bbf0 | text-serdes — short-lived encrypted text transport for copy/paste workflows (enc/dec) |
| cicwave | python-tool | 0.7.2 | cicwave — PyQtGraph waveform viewer (ngspice/Xyce/VCD/CSV). loadout PyQt6 fork of the upstream PySide6 app (PySide6 has no EL8 glibc-2.28 + Python 3.14 wheel). Opt-in: ./loadout install cicwave |
| parity-plot | python-tool | v0.7.0 | 45-degree Plotly parity plots with an offline NiceGUI designer; generated HTML embeds Plotly for air-gapped viewing |
| pygwalker | python-tool | 0.5.0.1 | Turn pandas DataFrames into an interactive Tableau-style data explorer (Jupyter or pygwalker serve) |
| portable-python | python-base | 3.14.7 | BOLT-optimized portable CPython build with bundled install.sh |
| gobject-typelibs | typelib | GObject introspection typelibs (GLib/Gtk3/GtkSource3/Pango/Atk/cairo) | |
| tldr-data | data | Bundled tldr-pages cache for offline tealdeer use | |
| treesitter-parsers | data | Pre-built tree-sitter parsers (.so), queries, parser-info, registry, and build-info for 300+ languages | |
| git-nvim | runtime | 2.43.7 | PRIVATE git for nvim/lazy only -- installed to lib/loadout-git/, never on the user's PATH (a loadout git would shadow the corp git and break its subcommands/credential helpers, cf. openssh/ssh10). Optional: @shared-all or by name. nvim uses it only when the system has no git. |
| nvim-plugin-stash | data | Offline git stash for nvim plugins -- 78 bare mirrors covering the active set plus catalog, read-only, shared. lazy clones from it into the user's lazy/ and :Lazy update/sync fetches from it, so plugin updates work with no network. The installer runs headless Lazy! sync from this stash whenever a loadout nvim binary and env-nvim config are both present. Needs git (system, or the optional git-nvim package). |
|
| models | bin | 0.14.1 | TUI/CLI to browse AI models + benchmarks from models.dev (needs network for live data) |
| modules | runtime | 5.6.1 | Environment Modules — module load/unload for shell environment management (HPC-style) |
| rust | runtime | 1.96.0 | Rust toolchain — rustc + cargo + std libraries (offline source build target) |
| rust-crate-store | data | Offline Cargo local-registry (top crates.io crates + full dependency closure) | |
| espresso | bin | 1.1.1 | Berkeley espresso two-level logic minimizer -- reduce a boolean function (PLA truth table) to a minimal sum-of-products |
| rust-analyzer | bin | 410 | Rust language server (LSP) — diagnostics, go-to-def, completions |
| gopls | bin | 0.23.0 | Go language server (LSP) — diagnostics, go-to-def, completions |
| yosys | bin | 0.69 | Yosys — open-source RTL synthesis (Verilog/SystemVerilog → netlist; write_json/write_verilog/write_blif, ABC mapping bundled as yosys-abc). Complements the bundled simulators: iverilog simulates, verilator lints and generates C++ models, yosys synthesises |
| sby | bin | b1a1e98 | SymbiYosys — front-end for Yosys-based formal hardware verification (bmc/prove/cover via yosys-smtbmc + Z3). Pure Python; commit-pinned (upstream has no releases). Member of @eda |
| z3 | bin | 5.1.0.0 | Z3 — SMT solver from Microsoft Research, bundled as sby's prove/bmc engine (also usable standalone). From the official manylinux wheel; runs on stock EL8. Member of @eda |
| bitwuzla | bin | 0.9.1 | Bitwuzla — SMT solver for bit-vectors, floating-point arithmetic, arrays and uninterpreted functions (SMT2/BTOR2 input, model generation, unsat cores). EL8 source build (static GMP 6.3 + MPFR 4.2.2); sby accepts it as an smtbmc bitwuzla engine. Member of @eda |
| netlistsvg | bin | 1.0.2 | netlistsvg — Yosys-netlist-to-SVG schematic renderer (netlistsvg + netlistsvg-dumplayout); upstream npm package plus vendored production deps on loadout's bundled Node.js, fully offline. Member of @eda |
| iverilog | bin | 13.0 | Icarus Verilog — Verilog/SystemVerilog event simulator (iverilog compiler driver, vvp runtime, iverilog-vpi VPI module builder). Compiles to a .vvp file that runs directly; writes VCD for gtkwave/surfer. Unlike verilator this simulates rather than generating a C++ model, so it needs no host g++ to run a design |
| openroad | bin | 26Q3 | OpenROAD — RTL-to-GDS place & route: floorplanning, placement, clock-tree synthesis, global/detailed routing and parasitic extraction, driven from Tcl or Python. Ships sta (standalone OpenSTA timing) alongside. Completes the open flow already here: yosys synthesises → openroad places & routes → klayout views the layout |
| openvaf | bin | 23.5.0 | OpenVAF — Verilog-A compiler: compiles Verilog-A compact model files to OSDI shared objects for circuit simulators (ngspice, Melange). GPL-3.0, Rust + statically-linked LLVM (no runtime LLVM dep). Member of @eda |
| lua-language-server | bin | 3.19.1 | Lua language server (LSP) — useful for nvim config and Lua tooling |
| markdown-oxide | bin | 0.25.12 | PKM markdown language server — wikilinks, backlinks, daily notes and unresolved-link creation over a plain directory of markdown. Obsidian-vault compatible (reads a .obsidian root), so it indexes a vault a user maintains with Obsidian installed separately; Obsidian itself is not redistributable and is not bundled. Drives envs/nvim/lsp/markdown_oxide.lua. |
| pyright | bin | 1.1.411 | Python language server (LSP) — type-checking, go-to-def, completions; upstream npm package on loadout's bundled Node.js (no PyPI wrapper, no runtime downloads) |
| typescript-language-server | bin | 6.0.0 | TypeScript/JavaScript language server (LSP) — upstream npm package plus bundled TypeScript 6.x on loadout's bundled Node.js; drives envs/nvim/lsp/ts_ls.lua with no npm install or runtime downloads |
| taplo | bin | 0.10.0 | TOML toolkit — linter, formatter and language server in one binary. Ships an offline JSON Schema catalog (49 SchemaStore schemas: Cargo.toml, pyproject.toml, ruff, uv, rustfmt, starship …) so taplo lint validates keys on an air-gapped node instead of silently degrading to grammar-only. Drives envs/nvim/lsp/taplo.lua and envs/helix/languages.toml |
| tmux-path-store | python-tool | 2026.8.26 | Tmux window-name-keyed directory/file path store — shell aliases for per-window path bookmarks |
Portable Python's standard-library sqlite3 uses its own bundled SQLite,
separate from the sqlite3 CLI, with FTS5 built into that private library.
To apply the fix on another machine, obtain the updated
checkout/archive, run ./loadout reinstall portable-python -y, and restart
Python processes, including notebook kernels; already-running processes retain
the old mapped library. Verify with:
~/.local/bin/python3.14 -c 'import sqlite3; c = sqlite3.connect(":memory:"); c.execute("CREATE VIRTUAL TABLE probe USING fts5(body)"); print("FTS5 OK")'./loadout install parity-plot installs the CLI and its local designer, with no
Python packages fetched at install time. parity-plot plot measurements.csv --no-open-browser --output parity.html creates a self-contained HTML report:
the Plotly runtime is embedded so it renders on an air-gapped machine. PNG, SVG,
and PDF export still need a compatible Chrome/Chromium already on the host for
Kaleido; loadout deliberately does not download or bundle a browser.
If your machine doesn't already have GTK3 / Qt5 / X11 / Wayland libraries
installed (common on remote compute nodes), install gui_libs alongside
any GUI application:
./loadout install gvim gui_libs
# Or use the group, which pulls gui_libs for you:
./loadout install @gui-suiteGPU-accelerated apps such as WezTerm also pull mesa3d_libs, which installs
Mesa's EGL vendor library, GBM, DRI drivers, and LLVM runtime without bundling
host display-driver dispatchers like libGL.so.1. The WezTerm bundle keeps
wezterm, wezterm-gui, and wezterm-mux-server as sibling real binaries
under ~/.local/lib/wezterm/, with PATH wrappers in ~/.local/bin. Its zsh
completion is installed by env-zsh; bash completion can be generated with
wezterm shell-completion --shell bash. WezTerm shell integration (semantic
zones / OSC 7 cwd / user vars -- distinct from completion) is vendored at
envs/bash/global/wezterm/wezterm.sh and sourced by the bash config from
user-writable space (never /etc), so wezterm users get it with or without tmux;
toggle with LOADOUT_CFG_ENABLE_WEZTERM_SHELL_INTEGRATION. Outside a real
WezTerm session, bash still sources the vendored script for its bash-preexec
driver but disables all WezTerm OSC hooks, so other terminals do not print raw
escape sequences or stall in wezterm set-working-directory.
Python 3.14.4 -- a portable Python build that
installs to ~/.local. Use python3.14 and pip3.14 to pin this build.
The full nvim-treesitter parser registry is bundled and installs offline
to ~/.local/share/nvim/tree-sitter-parsers/. All 326 languages work out
of the box, no internet required. Default LSP integrations are command-guarded,
so installing only env-nvim does not produce errors for optional tools you did
not install.
Twelve font families bundled and installed to ~/.local/share/fonts:
| Font | Notes |
|---|---|
| Cascadia Code | Microsoft coding font |
| DejaVu Sans Mono | Broad Unicode coverage |
| 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 |
| Meslo LG | Powerlevel10k default family |
| Roboto Mono | Google monospace family |
| Source Code Pro | Adobe's open-source workhorse |
| Ubuntu Mono | Ubuntu monospace family |
Use ./loadout install ... --skip @fonts-all to skip every font, or
--skip font-firacode to skip a single family. By default, an existing
~/.local/share/fonts directory is moved aside to fonts.bak* before the
vendored fonts are extracted. With --no-backup, the installer reuses the
existing fonts directory in place and overwrites only matching font files. Font
extraction uses the same progress bar style as other bulk install phases.
@envs installs both majority-shell configs: bash leads, and tcsh mirrors the
bash architecture/capability set where tcsh can support it. Both use the same
six-layer override chain (global -> corp -> site -> team -> project -> user),
LOADOUT_CFG_* knobs, shared-prefix install model, and curated alias surface:
b/bb/bbb... --cd ..up 1, 2, 3 levelscdd/cddd... --cdto the N-th most recently modified directoryg-- ripgrep with sensible defaults (smart case, hidden, no-ignore)f--fdwith sensible defaults, falls back tofindgs/gc/gp/gd/ga-- git status / commit / push / diff / addvi/vim-- your preferred editor (nvimby default)cat--batwith no pagingll/la/lh--lsvariants (sizes, all files, human-readable)
tcsh uses aliases plus POSIX-sh helpers for bash features that need functions,
and keeps home-local override layers active even when TCSH_CONFIG_ROOT_DIR
points at a shared tcsh config root.
Prefix Ctrl-\. Shift-arrows for pane navigation, Ctrl-arrows for windows,
Prefix+1-5 for layout presets, Prefix+6 to reapply the custom 3-column
layout, Prefix+o to open a new seven-pane 3-column work window, and
Prefix+v to capture the pane buffer into nvim. tmux-resurrect and
tmux-continuum bundled -- your sessions come back after a reboot.
~/.tmux.conf links to the XDG dispatcher at ~/.config/tmux/tmux.conf.
That dispatcher loads the managed tmux.global.conf, then the persistent
tmux.user.conf, and finally initializes TPM. Put personal settings and plugin
declarations in ~/.config/tmux/tmux.user.conf; reinstalling env-tmux never
overwrites it. When an older ~/.tmux.local.conf is found, an interactive
install offers to move it to the new user-layer path. Declined or unattended
migrations keep loading the legacy file until tmux.user.conf exists.