https://github.com/open-technology-foundation/manpage
Automatically generate and install UNIX man pages from README.md files using AI assistance.
https://github.com/open-technology-foundation/manpage
bash claude-code manpage-generator
Last synced: 5 months ago
JSON representation
Automatically generate and install UNIX man pages from README.md files using AI assistance.
- Host: GitHub
- URL: https://github.com/open-technology-foundation/manpage
- Owner: Open-Technology-Foundation
- License: gpl-3.0
- Created: 2025-09-22T01:37:22.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2025-09-22T03:06:36.000Z (5 months ago)
- Last Synced: 2025-09-22T03:33:29.636Z (5 months ago)
- Topics: bash, claude-code, manpage-generator
- Language: Shell
- Homepage: https://yatti.id/
- Size: 39.1 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# manpage
Automatically generates and installs professional man pages from README.md files using Claude AI assistance. Transform your existing documentation into properly formatted man pages with a single command.
## Features
- **Automatic Conversion**: Transforms README.md files into properly formatted troff/man pages using Claude AI
- **Smart Installation**: Auto-detects installation context (user vs system-wide)
- **Path Intelligence**: Automatically finds README.md files in command directories
- **Standard Compliance**: Generates man pages following UNIX conventions with all standard sections
- **Validation Support**: Includes comprehensive test suite for man page validation
- **Error Recovery**: Robust error handling with informative messages
- **Color Output**: Terminal-aware colored output for better readability
## Installation
### Quick Install (Recommended)
Install with a single command:
```bash
# System-wide installation (recommended)
curl -sSL https://raw.githubusercontent.com/Open-Technology-Foundation/manpage/main/install.sh | sudo bash
# Or with wget
wget -qO- https://raw.githubusercontent.com/Open-Technology-Foundation/manpage/main/install.sh | sudo bash
# User-local installation (no sudo required)
curl -sSL https://raw.githubusercontent.com/Open-Technology-Foundation/manpage/main/install.sh | bash -s -- --user
```
This will install:
- The `manpage` command to `/usr/local/bin/` (or `~/.local/bin/` for user install)
- Bash completion support to `/etc/bash_completion.d/`
- The man page to `/usr/local/share/man/man1/`
### Manual Installation
```bash
# Clone the repository
git clone https://github.com/Open-Technology-Foundation/manpage.git
cd manpage
# Make executable
chmod +x manpage
# Generate and install manpage's own man page (user-local)
./manpage generate -i manpage
# Or install system-wide
sudo ./manpage generate -i manpage
```
### Uninstall
```bash
# System-wide uninstall
curl -sSL https://raw.githubusercontent.com/Open-Technology-Foundation/manpage/main/install.sh | sudo bash -s -- --uninstall
# User-local uninstall
curl -sSL https://raw.githubusercontent.com/Open-Technology-Foundation/manpage/main/install.sh | bash -s -- --uninstall --user
```
## Quick Start
```bash
# Generate a man page for your script
manpage generate ./myscript
# Generate and install in one command
manpage generate -i ./myscript
# View the generated man page
man myscript
```
## Usage
```
manpage [options] [arguments]
```
### Commands
#### `generate` - Create man page from README.md
```bash
manpage generate [-i|--install] []
```
Converts a README.md file to a properly formatted man page using Claude AI.
**Arguments:**
- ``: Path to the command/script to document (required)
- ``: Optional path to README.md file (defaults to command's directory)
**Options:**
- `-i, --install`: Install the man page immediately after generation
**Behavior:**
- Resolves full paths using `readlink -en` for reliability
- Searches for README.md in the command's directory if not specified
- Generates `.1` file in the same directory as the README
- Validates output by checking for `.TH` directive
- Exits with error if README.md not found or generation fails
**Output:**
- Creates `.1` man page file
- Displays success message with file path
- Shows warnings for validation issues
#### `install` - Install generated man page
```bash
manpage install
```
Installs a previously generated man page to the appropriate directory.
**Arguments:**
- ``: Path to the command whose man page to install
**Installation Locations:**
- **System-wide**: `/usr/local/share/man/man1/` (when running as root/sudo)
- **User-local**: `~/.local/share/man/man1/` (for regular users)
**Behavior:**
- Auto-detects root/sudo context for installation type
- Creates destination directories if needed
- Updates man database (`mandb` or `makewhatis`)
- Checks MANPATH configuration for user installations
- Sets appropriate file permissions (644)
### Global Options
- `-h, --help`: Display help message and exit
- `-v, --verbose`: Enable verbose output (default)
- `-q, --quiet`: Disable verbose output
- `-V, --version`: Show version information
## Examples
### Basic Usage
```bash
# Generate man page for a script in current directory
manpage generate ./myscript
# Generate for a system command
manpage generate /usr/local/bin/mytool
# Generate with explicit README location
manpage generate mytool ~/projects/mytool/docs/README.md
# Generate and install immediately
manpage generate -i ./myscript
```
### Installation Examples
```bash
# Install for current user
manpage install ./myscript
# Install system-wide
sudo manpage install ./myscript
# Quiet mode installation
manpage -q install ./myscript
```
### Advanced Examples
```bash
# Generate man page for a symlinked command
manpage generate $(which mycommand)
# Generate from a specific branch's README
git show feature-branch:README.md > /tmp/README.md
manpage generate mycommand /tmp/README.md
# Batch processing
for script in scripts/*.sh; do
manpage generate -i "$script"
done
```
## How It Works
### Architecture Overview
The `manpage` utility follows a clean, modular architecture:
1. **Path Resolution Layer**
- Uses `readlink -en` for reliable path resolution
- Handles symlinks, relative paths, and special characters
- Falls back to alternative resolution methods if needed
2. **README Discovery Engine**
- Intelligent search algorithm for locating README.md files
- Checks command directory first, then accepts explicit paths
- Validates file existence before processing
3. **AI Conversion Pipeline**
- Constructs optimized prompts for Claude AI
- Specifies troff formatting directives and man page structure
- Includes all standard man page sections in proper order
- Handles complex markdown formatting conversions
4. **Man Page Generation**
- Creates section 1 (user commands) man pages
- Validates output with `.TH` directive checks
- Stores generated files alongside source README
- Preserves original documentation structure
5. **Smart Installation System**
- Auto-detects execution context (root/sudo vs user)
- Creates necessary directory structures
- Sets proper file permissions (644)
- Updates man database for immediate availability
6. **Error Handling Framework**
- Comprehensive error checking at each step
- Informative error messages with exit codes
- Graceful fallback mechanisms
- Color-coded output for better visibility
## Requirements
### Core Dependencies
- **claude**: Claude CLI tool (required for AI conversion)
```bash
# Check if installed
which claude || echo "Claude CLI not found"
```
- **bash**: Version 4.0 or later
```bash
# Check version
bash --version
```
- **Standard UNIX utilities**:
- `readlink` - Path resolution
- `grep` - Pattern matching
- `install` - File installation
- `mandb` or `makewhatis` - Man database updates
### Optional Dependencies
- **groff**: For rendering and testing man pages locally
- **man**: For viewing generated man pages
- **shellcheck**: For validating bash script syntax
## Technical Details
### Man Page Format
Generated man pages follow the troff/groff format with standard sections:
1. **`.TH`** - Title header (name, section, date, version, manual)
2. **NAME** - Command name and one-line description
3. **SYNOPSIS** - Usage syntax with options
4. **DESCRIPTION** - Detailed explanation of functionality
5. **OPTIONS** - Command-line flags and parameters
6. **EXAMPLES** - Practical usage demonstrations
7. **EXIT STATUS** - Return codes and their meanings
8. **ENVIRONMENT** - Environment variables used
9. **FILES** - Configuration files and paths
10. **NOTES** - Additional important information
11. **BUGS** - Known issues or bug reporting
12. **SEE ALSO** - Related commands and documentation
13. **AUTHOR** - Creator and maintainer information
14. **COPYRIGHT** - License and legal notices
### Environment Configuration
#### MANPATH Configuration
For user-local installations, ensure your MANPATH includes the local directory:
```bash
# Add to ~/.bashrc or ~/.zshrc
export MANPATH="$HOME/.local/share/man:$MANPATH"
# Verify MANPATH
manpath
# Rebuild man database
mandb
```
#### Claude CLI Configuration
The script uses Claude with specific options:
- Model: Opus (configurable in script)
- Flags: `-p --dangerously-skip-permissions`
- Purpose: Bypasses interactive prompts for automation
### File Locations
- **Generated man pages**: `/.1`
- **User installation**: `~/.local/share/man/man1/`
- **System installation**: `/usr/local/share/man/man1/`
- **Man database**: Updated via `mandb` or `makewhatis`
## Troubleshooting
### Common Issues
#### "claude command not found"
The Claude CLI tool is required for AI conversion:
```bash
# Check if claude is installed
which claude
# Install instructions available at:
# https://github.com/anthropics/claude-cli
```
#### "Cannot find README.md"
The script searches for README.md in the command's directory:
```bash
# Check if README exists
ls -la /path/to/command/README.md
# Specify README path explicitly
manpage generate mycommand /custom/path/README.md
```
#### Man page not found after installation
For user installations, verify MANPATH configuration:
```bash
# Check current MANPATH
manpath
# Add local man directory
echo 'export MANPATH="$HOME/.local/share/man:$MANPATH"' >> ~/.bashrc
source ~/.bashrc
# Rebuild database
mandb
```
#### Permission denied errors
```bash
# For system installation, use sudo
sudo manpage install mycommand
# Check file permissions
ls -la ~/.local/share/man/man1/
```
#### Invalid man page format
```bash
# Validate generated man page
groff -man -T ascii mycommand.1 > /dev/null
# Check for .TH directive
head -n 1 mycommand.1
```
### Debugging Tips
```bash
# Enable verbose mode for detailed output
manpage -v generate mycommand
# Check generated file before installation
less mycommand.1
# Test man page rendering
man -l mycommand.1
# Verify installation location
find /usr/local/share/man ~/.local/share/man -name "mycommand.1" 2>/dev/null
```
## Testing
### Test Suite
The project includes a comprehensive test framework:
```bash
# Run complete test suite
./test/test_manpage.sh
# Run with verbose output
./test/test_manpage.sh -v
# Validate specific man page
./test/validate_man.sh mycommand.1
# Validate with detailed output
./test/validate_man.sh -v mycommand.1
```
### Test Coverage
The test suite validates:
- **Core Functionality**
- Man page generation from README
- Installation to user and system directories
- Path resolution and discovery
- **Edge Cases**
- Paths with spaces and special characters
- Symlinks and relative paths
- Missing or invalid README files
- Non-existent commands
- **Man Page Validation**
- Proper troff/groff syntax
- Required sections presence
- Format compliance
- Rendering without errors
- **Error Handling**
- Missing dependencies
- Permission issues
- Invalid arguments
- Claude CLI failures
### Running Tests
```bash
# Quick validation
shellcheck -x manpage
# Full test run
cd test && ./test_manpage.sh
# Specific test category
./test/test_manpage.sh --category=generation
```
## Development
### Project Structure
```
manpage/
├── manpage # Main executable script
├── README.md # Project documentation (this file)
├── LICENSE # GPL-3 license file
├── test/ # Test suite directory
│ ├── test_manpage.sh # Comprehensive test runner
│ ├── validate_man.sh # Man page format validator
│ └── fixtures/ # Test data and examples
│ ├── sample.md # Example README files
│ └── expected/ # Expected output files
└── manpage.1 # Generated man page for manpage itself
```
### Contributing
#### Development Workflow
1. **Fork and Clone**
```bash
git clone https://github.com/yourusername/manpage.git
cd manpage
```
2. **Create Feature Branch**
```bash
git checkout -b feature/your-feature
```
3. **Make Changes**
- Follow [BASH-CODING-STANDARD](https://github.com/Open-Technology-Foundation/bash-coding-standard)
- Maintain 2-space indentation
- Use `set -euo pipefail` for error handling
- Document new features in README
4. **Test Thoroughly**
```bash
# Syntax check
shellcheck -x manpage
# Run test suite
./test/test_manpage.sh
# Test your changes
./manpage generate -i testscript
```
5. **Submit Pull Request**
- Clear description of changes
- Reference any related issues
- Include test results
#### Code Style Guidelines
- **Bash Version**: Target bash 4.0+ compatibility
- **Error Handling**: Use proper exit codes and error messages
- **Functions**: Prefix internal functions with underscore
- **Variables**: Use uppercase for globals, lowercase for locals
- **Comments**: Document complex logic and non-obvious code
#### Testing Guidelines
- Add tests for new features
- Update existing tests when modifying behavior
- Ensure 100% pass rate before submitting PR
- Include edge cases and error conditions
### API Stability
The command-line interface is considered stable. Any breaking changes will:
- Be documented in CHANGELOG
- Increment major version number
- Provide migration guide
### Release Process
1. Update version in script header
2. Update README.md version reference
3. Generate new man page
4. Create git tag
5. Push to repository
## Support
### Getting Help
- **Documentation**: Read this README and generated man pages
- **Issues**: [GitHub Issues](https://github.com/Open-Technology-Foundation/manpage/issues)
- **Discussions**: [GitHub Discussions](https://github.com/Open-Technology-Foundation/manpage/discussions)
### Reporting Bugs
When reporting issues, please include:
- Operating system and version
- Bash version (`bash --version`)
- Claude CLI version
- Complete error output
- Steps to reproduce
## License
This project is licensed under the GNU General Public License v3.0 (GPL-3).
Key points:
- Free to use, modify, and distribute
- Source code must remain open
- Modifications must use same license
- No warranty provided
See [LICENSE](LICENSE) file for full details.
## Credits
### Author
Created and maintained by the [Indonesian Open Technology Foundation](https://yatti.id) for automating man page generation from existing documentation.