Author: Nima Shafie
Forkable template for teams to add custom tools to the airgap-devkit ecosystem.
Fork this repo to create your team's tool image. Add your tools, profiles, and config — then wire it into any airgap-devkit-based team image as a submodule.
Click Fork on GitHub. Name your fork something like my-company-devkit-teams.
git clone git@github.com:your-org/my-company-devkit-teams.git
cd my-company-devkit-teamscp -r tools/example-tool/ tools/my-new-tool/
# Edit tools/my-new-tool/devkit.json and tools/my-new-tool/setup.shairgap-devkit --tools ./toolsOr wire this fork as a submodule in a team image repo (see .github/FORK_INSTRUCTIONS.md for the full setup).
-
Copy the example tool directory:
cp -r tools/example-tool/ tools/<your-tool-name>/
-
Edit
tools/<your-tool-name>/devkit.json:- Set
"id"to match the directory name. - Set
"name","description","version", and"source"(your team name). - Set
"category"to one of:Toolchains,Build Tools,Languages,Developer Tools,Frameworks,Security,Testing,Custom. - Set
"platform"to"windows","linux", or"both". - Set
"setup"to the path of your install script relative todevkit.json(e.g."setup.sh"). - Set
"check_cmd"to a shell command that exits 0 when the tool is installed (e.g."mytool --version"). - Set
"receipt_name"to the subdirectory name under the install prefix whereINSTALL_RECEIPT.txtis written — defaults to"id"when omitted.
- Set
-
Edit
tools/<your-tool-name>/setup.sh:- Fill in SECTION 1 (detect OS, set archive names).
- Fill in SECTION 2 (detect admin vs. user install, set
INSTALL_PREFIX). - Fill in SECTION 3 (extract/copy/build your tool into
INSTALL_PREFIX). - Leave SECTION 4 (write receipt) unchanged.
-
Syntax-check your script:
bash -n tools/<your-tool-name>/setup.sh && echo OK
-
Run a test install:
bash tools/<your-tool-name>/setup.sh
-
Commit:
git add tools/<your-tool-name>/ git commit -m "feat: add <your-tool-name>"
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | Yes | Unique ID — must match the directory name |
name |
string | Yes | Display name shown in the dashboard |
version |
string | Yes | Semver or date string |
description |
string | No | One-sentence description |
category |
string | Yes | Dashboard grouping (Developer Tools, Build Tools, Toolchains, etc.) |
platform |
string | Yes | "windows", "linux", or "both" |
setup |
string | Yes | Path to the install script relative to devkit.json (e.g. "setup.sh") |
check_cmd |
string | Yes | Shell command that exits 0 when the tool is installed (e.g. "mytool --version") |
receipt_name |
string | No | Subdirectory under the install prefix where INSTALL_RECEIPT.txt is written — defaults to id |
check_cmd_windows |
string | No | Overrides check_cmd on Windows |
check_cmd_linux |
string | No | Overrides check_cmd on Linux |
estimate |
string | No | Estimated install time shown in the UI (e.g. "~2min") |
uses_prebuilt |
bool | No | true if the tool installs from a prebuilt archive |
sort_order |
int | No | Controls display order in the dashboard (lower = first) |
source |
string | No | Team name — identifies the tool's origin fork |
homepage |
string | No | URL to the tool's homepage |
license |
string | No | License identifier (e.g. "MIT", "Apache-2.0") |
github_repo |
string | No | GitHub repository URL |
-
Copy the example profile:
cp profiles/example-profile.json profiles/<your-profile-id>.json
-
Edit the new file:
- Set
"id"to match the filename (without.json). - Set
"name"and"description". - List the tool IDs to install in
"tool_ids". - Optionally set
"color"to a CSS color name or hex value for the profile badge.
- Set
-
Reference the profile in
devkit.config.jsonif it should be the default:{ "default_profile": "<your-profile-id>" } -
Commit:
git add profiles/<your-profile-id>.json git commit -m "feat: add <your-profile-id> profile"
The intended deployment model is a team image repo that pulls in this fork alongside the core devkit. See .github/FORK_INSTRUCTIONS.md for the complete setup.
In short — in your team image repo:
git submodule add git@github.com:your-org/my-company-devkit-teams.git tools/team/Then run airgap-devkit with both tool paths:
airgap-devkit --tools ./tools/default/ --tools ./tools/team/The "source" field in each devkit.json identifies which fork a tool came from, so tools from the upstream devkit and from your team fork are always distinguishable in the dashboard.
airgap-devkit-teams/
+-- README.md <- you are here
+-- devkit.config.json <- team-level devkit configuration
+-- .gitignore
|
+-- tools/
| +-- example-tool/
| +-- devkit.json <- fully commented field reference
| +-- setup.sh <- install stub with marked sections
|
+-- profiles/
| +-- example-profile.json <- example install profile
|
+-- .github/
+-- FORK_INSTRUCTIONS.md <- full team image repo setup guide
Copyright (c) 2024-present Nima Shafie. All Rights Reserved.
Source-available. See LICENSE for permitted and restricted uses. Commercial licensing available — contact github.com/NimaShafie.