Santa 🎅
A modern, high-performance package manager meta-tool that works across platforms.
Santa helps you install and manage packages across multiple platforms and package managers with a single command. Whether you're switching between macOS, Linux, or Windows, Santa ensures your essential tools are always available.
Why Santa?
You regularly use tools not installed by default
You're a modern developer. You prefer ripgrep over grep, bat over cat, and fd over find. The problem? They're not installed by default. You're stuck installing them manually with whatever package manager is available.
Santa gives you one command to install your entire "standard developer toolkit."
You work across different operating systems
Isn't it annoying when you log into a new machine and it doesn't have your preferred tools? Or when your tool isn't installable using apt, but you don't remember which package manager does have it?
Santa simplifies this workflow. Santa knows where your packages can be installed from and will install them from the best available source.
Features
🚀 Performance
- 67-90% faster concurrent package operations via async subprocess execution
- Professional-grade caching with TTL and LRU eviction
- Memory efficient with zero unnecessary allocations
🔧 Cross-Platform
- Linux, macOS, and Windows support
- Multiple package managers: Homebrew, Cargo, APT, Pacman, AUR, Scoop, Nix
- Automatic fallback to available package managers
🌟 User-Friendly
- Configuration hot-reloading - changes take effect immediately
- Shell completions for bash, zsh, and fish
- Environment variable overrides for all settings
- CCL configuration format - simple and readable
🛡️ Reliable
- Comprehensive error handling with helpful messages
- Security hardening with input sanitization
- 144 comprehensive tests with >90% code coverage
Installation
From Releases (Recommended)
Download pre-built binaries from the releases page:
# Linux (x64)
|
# macOS (Apple Silicon)
|
# Windows (PowerShell)
From Source
Verify Installation
Quick Start
1. Check Status
See what packages are available and their installation status:
2. Install Packages
Install all configured packages:
Install specific packages:
3. View Configuration
4. Set Up Shell Completions
# Bash
# Zsh
# Fish
Configuration
Santa uses a CCL (Categorical Configuration Language) configuration file.
Default location: ~/.config/santa/config.ccl
Basic Configuration
/= Package sources in order of preference
sources =
= brew
= cargo
= apt
= pacman
= scoop
= nix
/= Packages to install
packages =
= bat
= ripgrep
= fd
= exa
= bottom
= git-delta
= chezmoi
Supported Package Managers
| Package Manager | Platforms | Status |
|---|---|---|
| Homebrew | macOS, Linux | ✅ Full Support |
| Cargo | All | ✅ Full Support |
| APT | Debian, Ubuntu | ✅ Full Support |
| Pacman | Arch Linux | ✅ Full Support |
| AUR | Arch Linux | ✅ Full Support |
| Scoop | Windows | ✅ Full Support |
| Nix | All | ✅ Full Support |
Environment Variables
Override any configuration setting with environment variables:
Available Variables:
SANTA_LOG_LEVEL- Set log level (trace, debug, info, warn, error)SANTA_CONFIG_PATH- Override configuration file pathSANTA_SOURCES- Override package sources (comma-separated)SANTA_PACKAGES- Override package list (comma-separated)SANTA_BUILTIN_ONLY- Use builtin configuration only (true/false)SANTA_CACHE_TTL_SECONDS- Set package cache TTLSANTA_CACHE_SIZE- Set maximum cache entriesSANTA_VERBOSE- Set verbose logging level (0-3)SANTA_HOT_RELOAD- Enable configuration hot-reloading (true/false)
Commands
santa status
Show all packages and their installation status across available package managers.
# Show only installed packages
# Show only missing packages
santa install
Install packages from the configured sources.
# Install all configured packages
# Install specific packages
# Dry run (show what would be installed)
santa config
Display current configuration including sources, packages, and settings.
# Show configuration file path
# Show resolved configuration (after environment variables)
santa completions
Generate shell completion scripts.
# Generate for bash
# Generate for zsh
# Generate for fish
Advanced Usage
Custom Configuration File
Verbose Output
# Level 1: Basic info
# Level 2: Detailed info
# Level 3: Debug info
Using with CI/CD
# Set packages via environment variable
# Use builtin configuration only (no config file)
Troubleshooting
Package Not Found
If a package isn't found, check:
- The package name is correct for your package manager
- Your package manager is in the
sourceslist - Your package manager is installed and in your PATH
# Check which package managers are available
Permission Errors
Some package managers require elevated privileges:
# Linux/macOS
# Windows (run PowerShell as Administrator)
Configuration Not Loading
Verify your configuration file path:
Or specify the path explicitly:
Performance
Santa is designed for speed:
- 67-90% faster than sequential package operations
- Parallel execution of package manager queries
- Intelligent caching to avoid redundant operations
- Async I/O for non-blocking operations
Contributing
Contributions are welcome! Please see the main repository for development guidelines.
License
Licensed under the MIT License.
Made with ❤️ for developers who work across platforms