DevChest simplifies and accelerates the setup of your Linux environment with a curated collection of Bash automation scripts. It installs and configures a consistent set of development and everyday tools across supported Linux distributions.
For implementation details and contracts (for humans and AI agents), see REQUIREMENTS.md.
DevChest provides a single entry point for installing and uninstalling tools:
install.sh– install selected tools.uninstall.sh– uninstall selected tools.
The entry scripts:
- Detect your OS and validate support.
- Run pre-flight checks (sudo, package manager, network, curl/wget).
- Discover tools from
tools/*.shdynamically. - Present a multi-select menu to install or uninstall tools.
- Run each tool script in an idempotent, distro-aware way.
DevChest v1 supports the following distributions and versions:
- Ubuntu: 20.04 and newer (LTS).
- Debian: 10 and newer.
- RHEL / CentOS (including Stream): 8 and newer.
- Fedora: 39 and newer.
If your OS or version is not supported, DevChest will abort early with a clear message instead of failing midway.
Runtime and environment:
- A supported Linux distribution (see above).
- Bash 4.0+.
sudo(or run as root).- Network access (for fetching packages and repositories).
- At least one of:
curlwget
Git is only required if you choose to clone the repository locally. Remote one-liner usage does not require git.
DevChest will check for required dependencies at startup and offer to install missing ones when possible, or abort with a clear error if it cannot safely continue.
Install DevChest tools directly via curl:
sudo bash -c "$(curl -fsSL https://raw.githubusercontent.com/groot-arena/devchest/main/install.sh)"Or via wget:
sudo bash -c "$(wget -qO- https://raw.githubusercontent.com/groot-arena/devchest/main/install.sh)"This will:
- Detect your OS.
- Run pre-flight checks (sudo, package manager, network, curl/wget).
- Show a multi-select menu of available tools.
- Install each selected tool for your distro.
Clone and run from a local checkout:
git clone https://github.com/groot-arena/devchest.git
cd devchest
sudo bash install.shTo uninstall tools from a local checkout:
sudo bash uninstall.shFlags:
--help— show usage and exit.--verbose— enable verbose logging (or setDC_VERBOSE=1).--keep-workdir— when using the remote one-liner, keep the temporary directory after the run (debug; or setDC_KEEP_WORKDIR=1).
Local usage is functionally equivalent to the remote one-liners, but makes it easier to inspect and modify scripts.
You can uninstall tools the same way you installed them.
Remote uninstall (via curl):
sudo bash -c "$(curl -fsSL https://raw.githubusercontent.com/groot-arena/devchest/main/uninstall.sh)"Remote uninstall (via wget):
sudo bash -c "$(wget -qO- https://raw.githubusercontent.com/groot-arena/devchest/main/uninstall.sh)"From a local clone:
sudo bash uninstall.shThe uninstall flow:
- Detects which tools DevChest believes are installed (via tool-specific checks).
- Presents a multi-select uninstall menu.
- For each chosen tool:
- Removes packages and system integration DevChest added.
- Optionally asks whether to remove user data/config (default is no).
- Prints a summary of:
- Installed / removed successfully.
- Skipped (with reason).
- Failed (with reason).
High-level architecture:
-
Entry scripts
install.shanduninstall.share thin shims.- Handle OS detection, sudo, pre-flight dependency checks, and library loading.
- Delegate to
dc_main_install/dc_main_uninstallinlib/.
-
Libraries (
lib/)common.sh: strict mode, OS detection, logging, core dependency checks, sudo helpers.debian.sh: APT helpers for Debian/Ubuntu.redhat.sh: DNF/YUM helpers for RHEL/CentOS/Fedora.menu.sh: menu rendering viawhiptail,dialog, or a text-only fallback.
-
Tools (
tools/*.sh)- One script per tool, with:
- Metadata (
TOOL_ID,TOOL_DISPLAY_NAME,TOOL_DESCRIPTION, optional categories and OS support). install_<tool_id>anduninstall_<tool_id>functions.- Optional
is_<tool_id>_installeddetection function.
- Metadata (
- Each tool script is idempotent and uses the shared helpers instead of doing its own OS detection or package-manager plumbing.
- One script per tool, with:
For full contracts and examples (especially for new tools or automated agents), see REQUIREMENTS.md.
Tools are discovered dynamically from tools/*.sh – nothing is hard-coded in the entry scripts.
Included in v1:
- docker — Docker Engine (official Docker repo).
- vscode — Visual Studio Code (official Microsoft repo).
- nvm — Node Version Manager (script-based install).
- google-chrome — Google Chrome browser (official Google repo).
Each tool script:
- Declares a stable
TOOL_IDand display metadata. - Declares optional dependency metadata (packages and commands).
- Implements install/uninstall for all supported distros.
- May restrict itself to specific OS IDs via metadata (in which case it will be hidden on unsupported distros).
For the full tool contract (metadata, function names, idempotency), see REQUIREMENTS.md.
Contributions are welcome—whether you want to:
- Add a new tool script under
tools/. - Improve the core framework in
lib/. - Fix bugs or improve robustness.
- Enhance documentation.
Before contributing:
- Read CONTRIBUTING.md for:
- Branching and commit guidelines.
- Code style and CI expectations.
- How to open issues and pull requests.
- Read REQUIREMENTS.md for:
- Architecture and responsibilities (entry scripts vs
lib/vs tools). - Tool metadata conventions and naming.
- Dependency handling and idempotency rules.
- Security and forbidden patterns.
- Architecture and responsibilities (entry scripts vs
All shell scripts should:
- Target Bash 4.0+.
- Pass
shellcheckandshfmtin CI. - Follow the
dc_*/DC_*namespacing and strict-mode conventions.
If you run into issues or have questions:
- Open an issue at: https://github.com/groot-arena/devchest/issues
Please include:
- Your distro and version.
- The exact command you ran.
- Relevant output from DevChest (especially the final summary and any
[ERROR]logs).
DevChest is open source software. See LICENSE for details.