An opinionated installer for turning a fresh Linux environment into a ready-to-use development workstation.
| Area | Tools |
|---|---|
| System | Git, GitHub CLI, Make, archive utilities, and awk when missing |
| Runtimes | Latest Go and latest Node.js LTS through NVM |
| Shell | ShellCheck, shfmt, jq, ripgrep, and actionlint |
| AI (optional) | Claude Code and/or Codex CLI, with Bubblewrap, Ponytail, interface skills, find-skills, and selected Go skills for each selected agent. context-handoff is installed only with Codex. |
| Releases | gh-release-flow and user-wide make targets |
The installer supports x86-64 and ARM64 on Ubuntu, Debian, Fedora, and RHEL-family distributions using apt, dnf, or yum.
Run the complete installer as your regular user:
curl -fsSL https://setup.engmariz.com | bashWith wget:
wget -qO- https://setup.engmariz.com | bashThe installer asks for sudo before making system changes. It starts with a menu that shows what is already installed:
[?] Components to install or update
Up/Down move, Space or number toggles, Enter installs
> [x] 1) System packages: git, gh, make, tar installed
[x] 2) Go go1.27.2
[x] 3) Node.js LTS through nvm v24.21.0
[x] 4) Shell tools: jq, ShellCheck, rg, shfmt installed
[x] 5) GitHub release flow not installed
[x] 6) Claude Code 2.1.296 (Claude Code)
[ ] 7) Codex CLI not installed
[ ] 8) Ubuntu cleanup: remove Snap, disable MOTD news Snap present
Components 1 to 7 start checked. Move with the arrow keys and toggle with Space, or press an item's number to toggle it. Enter installs the checked items. The cleanup appears only on Ubuntu and starts unchecked. Without a terminal, the installer prints the list and uses the default selection.
Installed components are updated in place. Before a step replaces something you may have set up yourself, it asks first, and the default answer keeps what you have:
| Step | It asks before |
|---|---|
| System packages | Replacing a GitHub CLI package source that has different content |
| Go | Replacing another Go installation or a different /etc/profile.d/go.sh |
| Node.js | Installing next to a Node.js that nvm does not manage, or changing a custom nvm default |
| Shell tools | Adding a copy in ~/.local/bin when the tool already exists elsewhere |
| Release flow | Replacing a ~/.config/make/release-flow.mk that has different content |
| Git identity | Changing an identity that is already set |
| GitHub | Re-running setup when the GitHub CLI is already authenticated |
To review the entrypoint first:
curl -fsSL https://setup.engmariz.com -o install.sh
less install.sh
bash install.shSkip changes to global Codex and Claude instruction files:
LINUX_TOOLBOX_SKIP_AGENT_GUIDANCE=1 bash install.shSkip the menu and every prompt. This installs or updates components 1 to 7, keeps anything you set up yourself, and skips the Ubuntu cleanup:
LINUX_TOOLBOX_NONINTERACTIVE=1 bash install.shInstall the AI tools for a single agent directly:
./install-ai-tools.sh claude
./install-ai-tools.sh codexConfigure both Git identity and GitHub authentication:
./setup-git.shConfigure them separately:
./setup-git.sh identity
./setup-git.sh githubExisting Git name and email values are kept when you press Enter. GitHub CLI authenticates over HTTPS and becomes Git's credential helper.
Choose option 8 in the installer menu to run the cleanup. It removes Snap applications, blocks snapd from being reinstalled, disables Ubuntu MOTD news, and purges apport (crash reporter), multipath-tools (SAN-only, spams the journal) and kdump-tools (reserves crashkernel RAM). On bare-metal installs where cloud-init has no datasource it also disables cloud-init (/etc/cloud/cloud-init.disabled); cloud, Proxmox and WSL hosts are left alone. This is destructive and intended only for Ubuntu hosts.
To review and run it on its own:
curl -fLO https://raw.githubusercontent.com/mordilloSan/linux-toolbox/main/ubuntu-cleanup.sh
less ubuntu-cleanup.sh
sudo bash ubuntu-cleanup.shRun the local installer from the repository root:
./install.shLocal runs use the sibling scripts in the checkout. Piped installs download child scripts from the entrypoint's configured remote source.
The installer provides release targets without requiring a repository Makefile:
make start-dev VERSION=v1.7.0
# Commit your changes, then:
make open-pr
make merge-releaseRun source ~/.bashrc or open a new terminal after first installing the targets. Release branches use the dev/v* naming convention.
Run make check for syntax and style checks, and make test for the isolated installer behavior tests. Pull requests run both targets, and a release is published only when the PR's Check workflow passed. Merging a release PR then creates the tag, publishes all scripts as release assets, and pins the entrypoint to that release.
No credentials, API keys, access tokens, private keys, or personal configuration are intentionally stored in this repository. Tracked content consists only of public project files.
Authentication is handled interactively by the installed CLIs. Their credentials remain in the current user's local configuration and are not copied into this repository. Never commit .env files, tokens, generated credentials, or machine-specific configuration.
Licensed under the MIT License.