Skip to content

Dev-Control

GitHub repo GitHub release Licence

CI Status Issues Pull Requests Stars

Last Commit Shell Stability Maintenance


Dev-Control is a modular Bash CLI that automates the repetitive parts of running many repositories: scaffolding repos to community standards, nested submodules, consolidated .tmp/.bak folders, rootless Podman devcontainers, VS Code MCP servers, signed GitHub releases (library tarballs, re-releases and automated version tagging) and multi-platform packages.

It aims to make awkward Git and CLI tasks — signing a worktree while preserving topology, or surgically dropping a commit — routine and reversible. Every command has a --dry-run mode. Issues and contributions are welcome.

# Install
git clone https://github.com/xaostech/dev-control.git && cd dev-control && ./install.sh

# Use
dc init          # Set up a repo with templates, licence, 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 licences      # Audit licence 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

📋 Table of Contents


💡 Why Dev-Control?

Managing modern software projects involves a lot of repetitive housekeeping:

  • Initialising repos with consistent templates, licences, and docs
  • Keeping submodules in sync across complex monorepos
  • Rewriting commit history to fix author dates or add GPG signatures
  • Auditing licence compliance when you have dozens of dependencies
  • Making devcontainers with the right mounts and settings and reusable category images
  • 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

✨ Features at a Glance

Category What You Get
Repo Setup Template loading, licence 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

🚀 Quick Start

Prerequisites

  • Bash 4.0+ or Zsh
  • Git 2.0+
  • GitHub CLI (gh) for repo/PR commands
  • Optional: gum or fzf for interactive TUI; GPG for signing

Install

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 shell

Verify

dc --version          # Print the installed version
dc --help             # List all commands

🔧 Core Commands

Run dc <command> --help for full options.

Command Purpose
dc alias Install shell aliases for Git, Docker and system monitoring
dc init Populate a repo with docs, licence, workflows and GitHub templates
dc repo Create a GitHub repo from the local project
dc pr Open a pull request from the current branch
dc fix Rewrite commits — edit messages, sign, fix dates, drop or combine
dc modules Auto-generate .gitmodules; consolidate temp folders
dc licences Detect, check compatibility and apply licences
dc mcp Configure MCP servers for AI coding assistants
dc contain Generate a .devcontainer/ setup
dc package Build tarball, Homebrew, Snap, Deb, Nix and Docker packages
Command examples ›

dc aliases — Shell Alias Installer

Add productivity aliases for Git, Docker, system monitoring, and more.

dc alias    # Interactive category selection
source ~/.bashrc

Example aliases

gpf         # git push --force-with-lease
dca-alias   # Apply and source all aliases
gcda        # Stage, amend and push with preserved author date
gcda        # Restore original author date

dc init — Repository Initialisation

Populate a repo with docs, licence, workflows, and GitHub templates.

dc init                     # Interactive mode
dc init --defaults          # Skip repo owner/slug and bot credentials (envVars) prompts
dc init -f docs/SECURITY.md # Update a specific file
dc init --batch /projects/* # Initialise multiple repos

dc repo — Create GitHub Repository

Push your local project to a new GitHub repo in one step. Defaults to repo config generated by dc-init.

dc repo                     # Interactive prompts
dc repo --private --topics cli,bash

dc pr — Pull Request Creator

Open a PR from your current branch with auto-detected metadata.

dc pr                       # Interactive
dc pr --draft --label bug

dc fix — History Rewriting

Safely 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 conflicts

dc modules — Submodule Management

Auto-generate .gitmodules for nested repos; consolidate temp folders.

dc modules /path/to/monorepo
dc modules --aggressive --dry-run   # Preview symlink + .gitignore changes

dc licences — Licence Auditor

Detect, check compatibility, and apply licences across repos.

dc licences                         # Scan current repo
dc licences --deep                  # Include submodules
dc licences --check GPL-3.0         # Verify compatibility
dc licences --apply MIT             # Apply licence template

dc mcp — MCP Server Setup

Configure Model Context Protocol servers for AI coding assistants.

dc mcp                              # Interactive server selection
dc mcp --test                       # Verify GitHub MCP connection
dc mcp --create-pat                 # Interactive Github PAT creation
dc mcp --config                     # Only generate .vscode/mcp.json

dc container — Devcontainer Generator

Generate 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 same
dc contain --nest --regen --dev-tools                             # Filter rebuild to one category; multiple categories supported (--web-dev --streaming)

Git identity (user.name / user.email) is sourced from ~/.config/dev-control/container.yaml if present, falling back to the host's global git config — so git config --global user.email on the host is both the simplest and most resilient setup, with the YAML file as an optional explicit override.

dc package — Multi-Platform Packaging

Build 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 + theme

🔌 Plugin System

Extend 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-plugin

⚙️ Configuration

Dev-Control uses a layered config system (highest priority first):

  1. Environment variables (DC_*)
  2. Project config (.dc-init.yaml in repo root)
  3. Global config (~/.config/dev-control/config.yaml)
  4. Built-in defaults

Example .dc-init.yaml:

project-name: my-project
default-licence: MIT
default-branch: main
auto-sign-commits: true
github-org: my-org

See config/example.dc-init.yaml for all options.


📚 Documentation

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 Reference

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
licences.sh Licence auditing
containerise.sh Devcontainer generator
packaging.sh Multi-platform packaging
mcp-setup.sh MCP server configuration

Shared Libraries

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.)

🤝 Contributing

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

🗺️ Roadmap

  • Unified dc CLI with command registry
  • Plugin system with GitHub install support
  • Multi-platform packaging (tarball, Homebrew, Snap, Deb, Nix, Docker)
  • MCP server configuration for AI assistants
  • Licence 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.


📄 Licence

GPL-3.0. See LICENCE.

Git Tree Visualisation

Full SVG · Interactive version · View data

About

A collection of powerful CLI tools, scripts and templates for streamlined Git workflow, repository management, and shell productivity.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages