{"id":32911102,"url":"https://github.com/jeeftor/airgap-dev-kit","last_synced_at":"2026-07-02T02:03:34.142Z","repository":{"id":323521153,"uuid":"1093582839","full_name":"jeeftor/airgap-dev-kit","owner":"jeeftor","description":"Air Gap Dev Kit","archived":false,"fork":false,"pushed_at":"2026-06-28T06:10:56.000Z","size":28692,"stargazers_count":1,"open_issues_count":10,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-28T08:08:38.053Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jeeftor.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-11-10T15:08:18.000Z","updated_at":"2026-06-23T00:08:11.000Z","dependencies_parsed_at":null,"dependency_job_id":"32780fc1-8768-4ffe-991b-533c5062c7f3","html_url":"https://github.com/jeeftor/airgap-dev-kit","commit_stats":null,"previous_names":["jeeftor/airgap-dev-kit"],"tags_count":48,"template":false,"template_full_name":null,"purl":"pkg:github/jeeftor/airgap-dev-kit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeeftor%2Fairgap-dev-kit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeeftor%2Fairgap-dev-kit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeeftor%2Fairgap-dev-kit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeeftor%2Fairgap-dev-kit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jeeftor","download_url":"https://codeload.github.com/jeeftor/airgap-dev-kit/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeeftor%2Fairgap-dev-kit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35029797,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-02T02:00:06.368Z","response_time":173,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-11-10T18:00:26.855Z","updated_at":"2026-07-02T02:03:34.129Z","avatar_url":"https://github.com/jeeftor.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Air-Gap Development Kit\n\nA complete, offline-ready terminal development environment for Linux, designed for air-gapped systems. Choose the full package with WezTerm and fonts, or the CLI-only package for headless servers and SSH workflows. Both include tmux, Neovim, and modern CLI tools with zero internet dependency on the target machine.\n\n[![GitHub Actions](https://img.shields.io/github/actions/workflow/status/jeeftor/airgap-dev-kit/update-binaries.yml)](https://github.com/jeeftor/airgap-dev-kit/actions)\n[![Latest Release](https://img.shields.io/github/v/release/jeeftor/airgap-dev-kit)](https://github.com/jeeftor/airgap-dev-kit/releases/latest)\n\n## ⚡ Quick Start\n\n### Choose a Package\n\n| Package | Use When | Includes |\n| --- | --- | --- |\n| `airgap-dev-kit-linux-x86_64.tar.gz` | You want the full desktop-friendly kit | WezTerm, fonts, CLI tools, Neovim, config |\n| `airgap-dev-kit-cli.tar.gz` | You want headless Linux/SSH installs with no GUI prompts | CLI tools, tmux, Neovim, config; no WezTerm or fonts |\n\n`airgap-dev-kit.tar.gz` is the default full Linux package alias. For servers, CI workers, and air-gapped boxes accessed over SSH, use `airgap-dev-kit-cli.tar.gz`.\n\n### Full Linux Package (One-Liner)\n\n**Using curl:**\n```bash\ncurl -L https://github.com/jeeftor/airgap-dev-kit/releases/latest/download/airgap-dev-kit-linux-x86_64.tar.gz | tar -xz \u0026\u0026 cd airgap-dev-kit \u0026\u0026 ./install.sh\n```\n\n**Using wget:**\n```bash\nwget -qO- https://github.com/jeeftor/airgap-dev-kit/releases/latest/download/airgap-dev-kit-linux-x86_64.tar.gz | tar -xz \u0026\u0026 cd airgap-dev-kit \u0026\u0026 ./install.sh\n```\n\n### CLI-Only Linux Package (One-Liner)\n\n```bash\ncurl -L https://github.com/jeeftor/airgap-dev-kit/releases/latest/download/airgap-dev-kit-cli.tar.gz | tar -xz \u0026\u0026 cd airgap-dev-kit \u0026\u0026 ./install.sh\n```\n\nThe CLI-only package automatically runs in CLI-only mode. It skips WezTerm, skips font installation, disables GUI prompts, and asks before patching detected shell RC files for Starship, zoxide, fzf, and PATH. Set `AIRGAP_DEV_KIT_CONFIGURE_SHELLS=0` to skip shell RC edits, or `AIRGAP_DEV_KIT_CONFIGURE_SHELLS=1` to force shell setup in non-interactive installs.\n\n### Traditional Install (with verification)\n\n**Full Linux x86_64:**\n```bash\n# Download latest release\nwget https://github.com/jeeftor/airgap-dev-kit/releases/latest/download/airgap-dev-kit-linux-x86_64.tar.gz\nwget https://github.com/jeeftor/airgap-dev-kit/releases/latest/download/checksums.txt\n\n# Verify the selected package\ngrep ' airgap-dev-kit-linux-x86_64.tar.gz$' checksums.txt | sha256sum -c -\n\n# Extract and install\ntar -xzf airgap-dev-kit-linux-x86_64.tar.gz\ncd airgap-dev-kit\n./install.sh\n```\n\n**CLI-only Linux x86_64:**\n```bash\nwget https://github.com/jeeftor/airgap-dev-kit/releases/latest/download/airgap-dev-kit-cli.tar.gz\nwget https://github.com/jeeftor/airgap-dev-kit/releases/latest/download/checksums.txt\n\ngrep ' airgap-dev-kit-cli.tar.gz$' checksums.txt | sha256sum -c -\n\ntar -xzf airgap-dev-kit-cli.tar.gz\ncd airgap-dev-kit\n./install.sh\n```\n\n### Build From Source\n\n```bash\n# Clone repository\ngit clone https://github.com/jeeftor/airgap-dev-kit.git\ncd airgap-dev-kit\n\n# Download all binaries\nmake update\n\n# Verify downloads\nmake verify\n\n# Install on current machine\nmake install\n\n# Or create package for transfer\nmake package\n\n# Or create a CLI-only package for headless Linux installs\nmake package-cli\n```\n\n### For Air-Gapped Machines\n\n**Full package:**\n```bash\n# 1. Transfer airgap-dev-kit.tar.gz or airgap-dev-kit-linux-x86_64.tar.gz\n\n# 2. Extract\ntar -xzf airgap-dev-kit.tar.gz\ncd airgap-dev-kit\n\n# 3. Install\n./install.sh\n\n# 4. Add to PATH (add to ~/.bashrc or ~/.zshrc)\nexport PATH=\"$HOME/bin:$PATH\"\n\n# 5. Launch your environment\nwezterm start -- tmux new-session nvim\n```\n\n**CLI-only package:**\n```bash\n# 1. Transfer airgap-dev-kit-cli.tar.gz\n\n# 2. Extract\ntar -xzf airgap-dev-kit-cli.tar.gz\ncd airgap-dev-kit\n\n# 3. Install without GUI prompts\n./install.sh\n\n# 4. Add to PATH if using a user-local install\nexport PATH=\"$HOME/.local/bin:$PATH\"\n\n# 5. Launch your environment\ntmux new-session nvim\n```\n\n## 🎯 What's Included\n\n### Core Tools\n- **WezTerm** - GPU-accelerated terminal emulator\n- **tmux** - Terminal multiplexer with mouse support\n- **Neovim** - Modern text editor with LSP and plugins\n\n### CLI Essentials\n- **fzf** - Fuzzy finder for files and commands\n- **fd** - Fast, user-friendly alternative to `find`\n- **ripgrep (rg)** - Lightning-fast text search\n- **bat** - Cat with syntax highlighting and git integration\n- **starship** - Beautiful, fast shell prompt\n- **airgap-dev-kit** - Unified CLI wrapper for managing the kit\n\n### Optional Tools\n- **btop** - Beautiful resource monitor (replaces htop/top)\n- **lsd** - Modern ls with icons and colors\n- **zoxide** - Smarter cd that learns your habits\n- **direnv** - Automatic per-directory environment loader\n- **dust** - Fast, intuitive disk usage visualizer\n- **gdu** - Interactive disk usage analyzer with TUI\n- **mkcert** - Local HTTPS certificate generator (requires NSS tools on Linux)\n- **gopls** - Go language server for IDE features (autocomplete, diagnostics, goto definitions)\n- **delta** - Stunning git diff viewer with syntax highlighting\n- **svu** - Semantic version utility for release management\n- **stow** - GNU Stow for dotfile symlink management (bundled)\n- **gum** - Charm Bracelet TUI toolkit for pretty prompts (bundled)\n\n### Language Support\n- **Go** - Complete LSP support with gopls (autocomplete, diagnostics, goto definitions)\n- **Lua** - Built-in LSP support\n- **Shell** - Basic syntax highlighting and completion\n\n### Go Development Features\n- **gopls integration** - Full IDE features for Go development\n- **Quick commands** - `\u003cleader\u003elT` (test), `\u003cleader\u003elR` (run), `\u003cleader\u003elB` (build)\n- **Code generation** - Automatic Go code generation support\n- **Testing integration** - Run tests directly from Neovim\n- **Debugging support** - DAP integration (if delve is available)\n\n### Extras\n- **JetBrainsMono Nerd Font** - Patched font with programming ligatures and icons\n- **Pre-configured Neovim** - With lazy.nvim, LSP, Treesitter, Telescope, and more\n- **Shell completions** - For bash/zsh/fish\n- **Man pages** - Offline documentation\n\nThe CLI-only package omits WezTerm and JetBrainsMono Nerd Font to keep installs non-GUI and non-interactive.\n\n## 🚀 Features\n\n- ✅ **Zero Internet Dependency** - All binaries are static or self-contained\n- ✅ **Automated Updates** - GitHub Actions builds fresh releases weekly\n- ✅ **Linux-Focused** - Supports Linux x86_64 install and package workflows\n- ✅ **Air-Gap Ready** - Neovim plugins pre-bundled for offline use\n- ✅ **One-Command Install** - `./install.sh` does everything\n- ✅ **Installation Tracking** - Complete undo system with automatic backups\n- ✅ **Flexible Installation** - System-wide or user-local, with or without root\n- ✅ **Reproducible** - Checksums and version pinning\n\n## 📦 GitHub Actions Automation\n\nThis repository automatically builds fresh releases every Sunday with:\n- All latest stable binaries\n- Neovim plugins pre-downloaded via lazy.nvim\n- SHA256 checksums for verification\n- Ready-to-deploy packages\n\n**Trigger a build:**\n- Automatically: Every Sunday at midnight UTC\n- Manually: Go to Actions → \"Update Air-Gap Kit\" → \"Run workflow\"\n- On Push: When pushing config changes to master/main\n\n**Security \u0026 Provenance:**\n- ✅ **SLSA Attestations** - All releases include cryptographic provenance\n- ✅ **GitHub Artifact Attestations** - Built-in supply chain security\n- ✅ **Verified Builds** - Cryptographically signed build metadata\n\n## 🛠️ Makefile Commands\n\n```bash\nmake help              # Show all commands and status\nmake update            # Download all missing binaries\nmake verify            # Verify binaries are valid\nmake package           # Create full deployment tarball\nmake package-cli       # Create CLI-only tarball\nmake docker-test       # Smoke test full package in Docker\nmake test-cli-package  # Test CLI-only package layout and dry-run behavior\nmake install           # Install on current machine\nmake sync-nvim-config  # Sync ~/.config/nvim to repo\nmake clean             # Remove binaries (keep placeholders)\n```\n\n## 🚀 airgap-dev-kit CLI\n\nAfter installation, you can use the unified `airgap-dev-kit` command:\n\n```bash\nairgap-dev-kit version     # Show kit version and installation info\nairgap-dev-kit update      # Download/update all binaries (requires internet)\nairgap-dev-kit install     # Install missing tools from offline packages\nairgap-dev-kit status      # Show installation status of all tools\nairgap-dev-kit remove      # Completely uninstall the airgap-dev-kit\nairgap-dev-kit help        # Show help and available commands\n```\n\nThis provides a simple interface for managing your air-gap development environment without needing to remember individual make commands or script locations.\n\n## 🎨 Customization\n\n### Sync Your Neovim Config\n\n```bash\n# Copy your local Neovim config to the repo\nmake sync-nvim-config\n\n# Commit and push (triggers new build with your config)\ngit add config/nvim/.config/nvim\ngit commit -m \"Update Neovim config\"\ngit push\n```\n\n### Add Custom Tools\n\n1. Edit `Makefile` and add download target:\n```makefile\n@if [ ! -f offline-packages/linux/your-tool ]; then\n    curl -fL \"https://...\" -o offline-packages/linux/your-tool\n    chmod +x offline-packages/linux/your-tool\nfi\n```\n\n2. Update `install.sh` to copy the binary:\n```bash\ncp offline-packages/linux/your-tool ~/bin/\n```\n\n## 📋 Installation Details\n\n### What `install.sh` Does\n\n1. **Prompts for installation location** - System-wide (`/usr/local/bin`) or user-local (`~/.local/bin`); CLI-only packages default to user-local unless run as root\n2. **Checks OS** - Exits early outside Linux\n3. **Installs binaries** - Copies to chosen location with version checking\n4. **Extracts Neovim** - Unpacks and installs text editor\n5. **Installs plugins** - Extracts pre-downloaded Neovim plugins\n6. **Configures dotfiles** - Uses GNU Stow (if available) or direct copy\n7. **Installs fonts** - JetBrainsMono Nerd Font for icons in the full package only\n8. **Configures shell** - Optionally adds PATH and tool initialization to shell RC files; CLI-only packages prompt before patching interactive shells\n\n### Directory Structure After Install\n\n**System-wide install:**\n```\n/usr/local/bin/        # Binaries (requires sudo)\n├── tmux, nvim, fzf, fd, rg, bat, starship\n├── wezterm           # Full package only\n└── (optional: btop, lsd, zoxide, direnv, dust, delta, svu, gum)\n```\n\n**User-local install:**\n```\n~/.local/bin/          # Binaries (no sudo needed)\n├── tmux, nvim, fzf, fd, rg, bat, starship\n├── wezterm           # Full package only\n└── (optional: btop, lsd, zoxide, direnv, dust, delta, svu, gum)\n```\n\n**Configuration files (both install types):**\n```\n~/\n├── .config/\n│   ├── nvim/          # Neovim config (symlinked via Stow or copied)\n│   └── starship.toml  # Prompt config\n├── .tmux.conf         # Tmux config\n└── .local/share/\n    ├── fonts/         # JetBrainsMono Nerd Font\n    └── nvim/lazy/     # Pre-installed Neovim plugins\n```\n\nCLI-only installs do not create `~/.local/share/fonts/` from this kit and do not install `wezterm`.\n\n## 🔧 Requirements\n\n### Internet Machine (for building)\n- `curl` - Download binaries\n- `tar`, `gzip` - Archive tools\n- `make` - Build automation\n\n### Air-Gapped Machine (for installing)\n- **No external dependencies required!**\n  - GNU Stow is bundled in the package for dotfile management\n  - Falls back to direct copy if Stow fails\n  - Everything needed is included\n\n## 📖 Documentation\n\n- [INSTALLATION-TRACKING.md](INSTALLATION-TRACKING.md) - Installation tracking \u0026 undo system\n- [config/README.md](config/README.md) - GNU Stow configuration guide\n- [CHANGES.md](CHANGES.md) - Recent changes and improvements\n- [CLAUDE.md](CLAUDE.md) - Comprehensive developer guide\n- [Releases](https://github.com/jeeftor/airgap-dev-kit/releases) - Download pre-built packages\n- [Actions](https://github.com/jeeftor/airgap-dev-kit/actions) - View build status\n\n## 🐛 Troubleshooting\n\n**Binaries not found after user-local install:**\n```bash\n# Add to the RC file for your shell\nexport PATH=\"$HOME/.local/bin:$PATH\"\nsource ~/.bashrc  # bash\nsource ~/.zshrc   # zsh only; do not run this from bash\n\n# Or if you used ~/bin instead:\nexport PATH=\"$HOME/bin:$PATH\"\n```\n\n**Permission denied errors:**\n```bash\n# For user-local install\nchmod +x ~/.local/bin/*\n\n# For system-wide install (if needed)\nsudo chmod +x /usr/local/bin/*\n```\n\n**Can't install system-wide (no sudo access):**\n- Choose option 2 (user-local install) when prompted\n- Installer will automatically use `~/.local/bin`\n- Remember to add to PATH as shown above\n\n**Stow conflicts:**\n```bash\n# The installer now handles this automatically with backups\n# But if you need to manually fix:\n\n# Remove old symlinks\ncd config \u0026\u0026 stow -D -t ~ */\n\n# Backup conflicting files\nmv ~/.config/nvim ~/.config/nvim.backup\n\n# Re-stow\ncd config \u0026\u0026 stow -t ~ */\n```\n\n**Config directory structure issues:**\n```bash\n# If you're getting Stow errors, restructure the config directory:\n./restructure-config-for-stow.sh\n\n# See config/README.md for details on proper Stow structure\n```\n\n**Neovim plugins missing:**\n- Ensure `offline-packages/lazy-plugins.tar.gz` exists\n- GitHub Actions should bundle this automatically\n- Or manually run: `nvim --headless \"+Lazy! sync\" +qa` on internet machine\n\n**Installation fails with \"command not found\":**\n- Make sure you're running `./install.sh` from the extracted `airgap-dev-kit` directory\n- Check that install.sh is executable: `chmod +x install.sh`\n\n## 🗑️ Uninstallation\n\nThe kit includes a smart uninstaller that uses the installation log:\n\n```bash\n./uninstall.sh\n```\n\n**Features:**\n- ✅ Reads installation log (`~/.airgap-dev-kit-install.log`)\n- ✅ Shows exactly what will be removed\n- ✅ Preserves backups created during installation\n- ✅ Properly unstows Stow packages\n- ✅ Cleans shell configurations\n- ✅ Falls back to manual search if no log exists\n\n**What gets removed:**\n- All installed binaries\n- Configuration files (with confirmation)\n- Neovim plugins and data\n- Shell RC modifications\n- Fonts (optional)\n\n**What gets preserved:**\n- Backup files (`.backup-*` files)\n- Shell config backups (`.bashrc.airgap-backup`)\n- Custom modifications you made\n\nSee [INSTALLATION-TRACKING.md](INSTALLATION-TRACKING.md) for details.\n\n## 🔐 Security\n\n- Verify the package you downloaded, for example: `grep ' airgap-dev-kit-cli.tar.gz$' checksums.txt | sha256sum -c -`\n- All binaries from official GitHub releases\n- Use write-protected media for transfer to air-gap\n- Scan with antivirus before deployment\n\n## 📊 Package Size\n\n- **CLI-only release package**: smaller server-focused tarball without WezTerm or fonts\n- **Full release package**: desktop-friendly tarball with WezTerm and fonts\n- **Complete with plugins**: largest package because Neovim plugins and Mason payloads are bundled\n\nUse 1GB+ USB drive for comfortable transfer.\n\n## 🤝 Contributing\n\n1. Fork the repository\n2. Create your feature branch\n3. Test on Linux with the repo-native checks\n4. Submit pull request\n\n## 📝 License\n\nSee individual tool licenses in their respective repositories. This kit is a distribution/packaging project.\n\n## ⭐ Star History\n\nIf this project helps you, please star it on GitHub!\n\n---\n\n**Built for developers who work in secure, offline, or air-gapped environments** 🛡️\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeeftor%2Fairgap-dev-kit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjeeftor%2Fairgap-dev-kit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeeftor%2Fairgap-dev-kit/lists"}