gzh-cli-shellforge

module
v0.0.0-...-1e5d451 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 26, 2026 License: MIT

README

Shellforge

Build tool for modular shell configurations with automatic dependency resolution

Transform your monolithic .zshrc/.bashrc into organized, maintainable modules with automatic dependency resolution and OS-specific filtering.

Tests Coverage Go Version License

Quick Start | Documentation | Examples


What It Does

  • Automatic dependency resolution - Modules load in correct order
  • OS-specific filtering - Different configs for Mac/Linux
  • Validation - Catch errors before deployment
  • Migration - Convert existing configs automatically
  • Templates - Generate common modules quickly
  • Backup/Restore - Version control with git

Quick Start

Install
# Install via Go
go install github.com/gizzahub/gzh-cli-shellforge/cmd/shellforge@latest

# Or build from source
make install
Migrate Your Config (5 minutes)
# 1. Backup your current config
gz-shellforge backup --file ~/.zshrc

# 2. Migrate to modular structure
mkdir ~/shellforge && cd ~/shellforge
gz-shellforge migrate ~/.zshrc

# 3. Build for your OS
gz-shellforge build --os Mac --output ~/.zshrc.new

# 4. Test and deploy
gz-shellforge diff ~/.zshrc ~/.zshrc.new
mv ~/.zshrc.new ~/.zshrc

Complete tutorial →


Core Features

Dependency Resolution

Automatically sorts modules using topological sort (Kahn's algorithm). No more manual ordering or "works by accident" configs.

OS Filtering

Write once, deploy everywhere. Modules tagged with os: [Mac] only load on macOS, os: [Linux] only on Linux.

Migration Tools

Convert your existing monolithic .zshrc to organized modules automatically. Detects sections, infers dependencies, and categorizes content.

Template System

Generate common modules from 6 built-in templates: PATH, environment variables, aliases, tool initialization, and more.

Backup & Restore

Git-backed versioning with timestamped snapshots. Rollback to any previous configuration instantly.

Diff Comparison

Compare original and generated configs with 4 output formats: summary, unified, context, side-by-side.


Example: Module Structure

# manifest.yaml
modules:
  - name: os-detection
    file: init.d/00-os-detection.sh
    requires: []
    os: [Mac, Linux]

  - name: brew-path
    file: init.d/05-brew-path.sh
    requires: [os-detection]
    os: [Mac]

  - name: nvm
    file: rc_pre.d/nvm.sh
    requires: [brew-path]
    os: [Mac, Linux]
modules/
├── init.d/             # Early initialization
├── rc_pre.d/           # Tool setup (nvm, rbenv)
└── rc_post.d/          # Aliases, functions

See complete examples →


Commands

# Validate configuration
gz-shellforge validate

# Build for specific OS
gz-shellforge build --os Mac --output ~/.zshrc

# List modules with filtering
gz-shellforge list --filter Mac

# Migrate existing config
gz-shellforge migrate ~/.zshrc

# Generate from template
gz-shellforge template generate alias my-aliases

# Backup current config
gz-shellforge backup --file ~/.zshrc

# Restore from snapshot
gz-shellforge restore --file ~/.zshrc --snapshot 2025-11-28_14-30-45

# Compare configs
gz-shellforge diff ~/.zshrc ~/.zshrc.new

Full command reference →


Documentation

For Users
For Developers

Performance

Go implementation is significantly faster than Python version:

Metric Python Go Improvement
Startup ~200ms <10ms 20x faster
Build (10 modules) ~300ms <50ms 6x faster
Memory ~80MB <10MB 8x lighter
Binary size ~40MB ~8MB 5x smaller

Why Shellforge?

Problem
  • Manual shell script concatenation causes ordering errors
  • No dependency tracking leads to tools loading before dependencies
  • OS-specific logic scattered everywhere, hard to maintain
  • No validation until runtime errors occur
Solution
  • Automatic dependency resolution with topological sort
  • OS-specific module filtering (Mac/Linux)
  • Pre-deployment validation catches errors early
  • Modular structure makes maintenance easy
  • Version control friendly for team collaboration
Compared to Alternatives
Feature Shellforge dotbot chezmoi stow
Multi-file unified management
Build/deploy separation
Automatic dependency resolution
OS auto-detection
Shell-config specialized
Migration tooling
Template system
Single binary
Who It's For
  • Individual developers — sync shell config across machines, unify Mac/Linux setups, track config change history
  • Teams & organizations — share a standard dev environment, simplify onboarding, collaborate through version control
  • DevOps — automate shell config in CI/CD, manage container-image configs, treat configuration as code

Status

Version: 0.5.1 Test Coverage: 70.1% (235 tests passing) Status: Active development

Implemented Features
  • ✅ Build, validate, list commands
  • ✅ Migration from monolithic configs
  • ✅ Template generation (6 types)
  • ✅ Backup/restore with git versioning
  • ✅ Diff comparison (4 formats)
  • ✅ OS filtering (Mac/Linux)
Planned Features
  • ⏳ Plugin system for custom validators
  • ⏳ BSD support (FreeBSD 13+)
  • ⏳ Fish shell support

Installation

Prerequisites
  • Go 1.21 or later
  • Git (for backup/restore features)
From Source
git clone https://github.com/gizzahub/gzh-cli-shellforge.git
cd gzh-cli-shellforge
make install
Verify Installation
gz-shellforge --version
# Output: shellforge version 0.5.1

Contributing

Contributions welcome! Please:

  1. Read the Contributing Guide
  2. Fork the repository
  3. Create a feature branch
  4. Write tests for new features
  5. Ensure all tests pass: make test
  6. Submit a pull request

See Development Guide for architecture details.


License

MIT License - see LICENSE file for details.


Support


Built with Go, designed for shell power users 🚀

Directories

Path Synopsis
cmd
shellforge command
internal
app
Package app provides application services for building, deploying, validating, and maintaining shell configurations.
Package app provides application services for building, deploying, validating, and maintaining shell configurations.
cli
Package cli implements the Shellforge command-line interface and command handlers.
Package cli implements the Shellforge command-line interface and command handlers.
cli/errors
Package errors defines error handling helpers for command-line operations.
Package errors defines error handling helpers for command-line operations.
cli/factory
Package factory constructs application services used by command-line handlers.
Package factory constructs application services used by command-line handlers.
cli/helpers
Package helpers provides common utility functions for CLI commands.
Package helpers provides common utility functions for CLI commands.
cli/output
Package output formats command-line configuration and operation results.
Package output formats command-line configuration and operation results.
domain
Package domain defines Shellforge domain models, validation, dependency resolution, and related errors.
Package domain defines Shellforge domain models, validation, dependency resolution, and related errors.
domain/shellmeta
Package shellmeta provides shell profile metadata loading and querying.
Package shellmeta provides shell profile metadata loading and querying.
infra/diffcomparator
Package diffcomparator compares generated shell configuration content.
Package diffcomparator compares generated shell configuration content.
infra/filesystem
Package filesystem provides file-reading and file-writing infrastructure.
Package filesystem provides file-reading and file-writing infrastructure.
infra/rcparser
Package rcparser parses shell runtime-configuration files.
Package rcparser parses shell runtime-configuration files.
infra/snapshot
Package snapshot manages snapshots of shell configuration files.
Package snapshot manages snapshots of shell configuration files.
infra/template
Package template provides built-in templates and template rendering infrastructure.
Package template provides built-in templates and template rendering infrastructure.
infra/yamlparser
Package yamlparser parses Shellforge YAML configuration files.
Package yamlparser parses Shellforge YAML configuration files.
pkg
cmd
Package cmd provides public API for embedding shellforge commands.
Package cmd provides public API for embedding shellforge commands.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL