Dev-Control is a modular CLI toolkit that automates customising and setting up repos (100% community standards), nested gitmodules, centralised and cleaned up .tmp and .bak folders, nested rootless podman docker containers, vscode mcp-servers, GitHub release (with lib tarbal, automated version tagging and signed latest + version tag) and app packages.
This attempts to make arduous CLI and Git tasks (such as signing woktrees with topology and surgically dropping commits) easy and robust, so you can focus on your code - while, ironically, I focus on optimising this. All functions have a --dry-run option, so test it out and feel free to let me know of any issues or requests! Contributions are also lauded!
# Install
git clone https://github.com/xaostech/dev-control.git && cd dev-control && ./install.sh
# Use
dc init # Set up a repo with templates, license, docs
dc repo # Create a GitHub repo from your local project
dc pr # Open a pull request in seconds
dc fix # Rewrite/sign/clean commit history safely
dc modules # Manage nested submodules automatically
dc licenses # Audit license compliance across repos
dc mcp # Configure AI coding assistants (MCP servers)
dc contain # Generate devcontainer.json for VS Code
dc package # Build tarballs, Homebrew, Snap, Deb, Nix, Docker
dca-alias # Sync (all) new alias and reload bashrc
- Why Dev-Control?
- Features at a Glance
- Quick Start
- Core Commands
- Plugin System
- Configuration
- Documentation
- Contributing
- Roadmap
- License
Managing modern software projects involves a lot of repetitive housekeeping:
- Initialising repos with consistent templates, licenses, and docs
- Keeping submodules in sync across complex monorepos
- Rewriting commit history to fix author dates or add GPG signatures
- Auditing license compliance when you have dozens of dependencies
- Spinning up devcontainers with the right mounts and settings
- Packaging your tool for multiple platforms (Homebrew, Snap, Nix, Docker…)
Dev-Control bundles all of this into a single, modular CLI. Each command is designed to be:
| Principle | How |
|---|---|
| Safe | Dry-run modes, automatic backup bundles, harness wrappers |
| Fast | Batch processing, parallel operations, minimal dependencies |
| Extensible | Plugin system, YAML config, themeable TUI |
| Portable | Pure Bash 4+, no exotic runtime, runs anywhere Git runs |
| Category | What You Get |
|---|---|
| Repo Setup | Template loading, license selection, README/CONTRIBUTING/SECURITY scaffolding, GitHub Actions workflows |
| Git Ops | History rewriting with GPG signing, date preservation, conflict auto-resolution, worktree sync |
| Submodules | Auto-generated .gitmodules, temp-folder consolidation, symlink pruning |
| Licensing | SPDX detection, compatibility checking, bulk apply, JSON export |
| DevEx | Devcontainer generation, MCP server setup (GitHub, StackOverflow, Firecrawl) |
| Packaging | Tarball + SHA256, Homebrew formula, Snap YAML, Debian .deb, Nix flake, Docker + ttyd web terminal |
| TUI Themes | Matrix, Hacker, Cyber aesthetics powered by Charmbracelet Gum |
- Bash 4.0+ or Zsh
- Git 2.0+
- GitHub CLI (
gh) for repo/PR commands - Optional:
gumorfzffor interactive TUI; GPG for signing
git clone https://github.com/xaostech/dev-control.git
cd dev-control
./install.sh # Adds `dc` to your PATH and installs aliases
source ~/.bashrc # Or restart your shelldc --version # Should print v2.x.x
dc --help # List all commandsBelow is a quick reference. Run dc <command> --help for full options.
Populate a repo with docs, license, workflows, and GitHub templates.
dc init # Interactive mode
dc init -f docs/SECURITY.md # Update a specific file
dc init --batch /projects/* # Initialise multiple reposPush your local project to a new GitHub repo in one step.
dc repo # Interactive prompts
dc repo --private --topics cli,bashOpen a PR from your current branch with auto-detected metadata.
dc pr # Interactive
dc pr --draft --label bugSafely rewrite commits—edit messages, sign, fix dates, drop commits.
dc fix # Interactive (last 10 commits)
dc fix --sign --range HEAD=all # GPG-sign entire branch
dc fix --dry-run --range main..HEAD # Preview changes
dc fix --restore # Recover from backup bundle
dc fix --drop hash # Surgically drop commit by hash
dc fix --sign --atomic-preserve --auto-resolve --range HEAD=5 # Preserve merge topology and autoresolve merge conflictsAuto-generate .gitmodules for nested repos; consolidate temp folders.
dc modules /path/to/monorepo
dc modules --aggressive --dry-run # Preview symlink + .gitignore changesDetect, check compatibility, and apply licenses across repos.
dc licenses # Scan current repo
dc licenses --deep # Include submodules
dc licenses --check GPL-3.0 # Verify compatibility
dc licenses --apply MIT # Apply license templateConfigure Model Context Protocol servers for AI coding assistants.
dc mcp # Interactive server selection
dc mcp --test # Verify GitHub MCP connectionGenerate a complete .devcontainer/ setup for VS Code.
dc contain # Interactive
dc contain --image mcr.microsoft.com/devcontainers/base:ubuntu
dc contain --base --dev-tools --defaults && \
cd subfolder && dc contain --img --dev-tools # Use the previous container image (tag=dev-tools) as a base
dc contain --nest <<< y # Discover, update and rebuild all containers recursively
dc contain --nest --regen # Agressively do same (remove config files and containers)
dc contain --nest --regen . # Include root in sameBuild distribution packages with a single command.
dc package --init # Create .dc-package.yaml
dc package --all # Build everything
dc package --docker --theme cyber # Docker image with ttyd + themeAdd productivity aliases for Git, Docker, system monitoring, and more.
dc aliases # Interactive category selection
source ~/.bashrcExtend Dev-Control with custom commands.
plugins/
└── my-plugin/
├── plugin.yaml # name, version, description, commands
└── commands/
└── greet.sh # becomes `dc greet`
dc plugin list # Show installed plugins
dc plugin install gh:user/repo # Install from GitHub
dc plugin remove my-pluginDev-Control uses a layered config system (highest priority first):
- Environment variables (
DC_*) - Project config (
.dc-init.yamlin repo root) - Global config (
~/.config/dev-control/config.yaml) - Built-in defaults
Example .dc-init.yaml:
project-name: my-project
default-license: MIT
default-branch: main
auto-sign-commits: true
github-org: my-orgSee config/example.dc-init.yaml for all options.
| Document | Description |
|---|---|
| Installation Guide | Detailed install & upgrade instructions |
| Contributing | How to contribute |
| Code of Conduct | Community guidelines |
| Security Policy | Reporting vulnerabilities |
| Testing Guide | Running and writing tests |
| Script | Purpose |
|---|---|
| dev-control.sh | Interactive main menu |
| template-loading.sh | Template init logic |
| fix-history.sh | History rewriting engine |
| module-nesting.sh | Submodule management |
| licenses.sh | License auditing |
| containerise.sh | Devcontainer generator |
| packaging.sh | Multi-platform packaging |
| mcp-setup.sh | MCP server configuration |
Located in scripts/lib/:
| Library | Purpose |
|---|---|
colours.sh |
ANSI terminal colours |
print.sh |
Formatted output (headers, boxes, spinners) |
config.sh |
YAML config parsing |
tui.sh |
Gum/fzf interactive prompts |
validation.sh |
Input validation |
git/*.sh |
Git utilities (dates, topology, worktrees, etc.) |
Contributions are welcome! Please read CONTRIBUTING.md first.
# Fork → Clone → Branch → Commit → PR
git checkout -b feature/amazing-feature
git commit -m "Add amazing feature"
git push origin feature/amazing-feature- Unified
dcCLI with command registry - Plugin system with GitHub install support
- Multi-platform packaging (tarball, Homebrew, Snap, Deb, Nix, Docker)
- MCP server configuration for AI assistants
- License auditing with SPDX detection
- Devcontainer generator
- Zsh compatibility layer
- Fish shell support
- GUI wrapper (Bubble Tea / Tauri)
- Remote plugin registry
See open issues for more.
GPL-3.0. See LICENSE.