247 lines
No EOL
6.5 KiB
Markdown
247 lines
No EOL
6.5 KiB
Markdown
# curator - A Home-Manager Like Tool for Universal Blue builds
|
|
|
|
A lightweight CLI that provides repository and dotfile management and package installation functionality through a centralized TOML configuration. Ported and expanded from [forge](https://github.com/ijadux2/forge) and inspired by [home-manager](https://github.com/nix-community/home-manager/).
|
|
|
|
## Overview
|
|
|
|
curator is a Python CLI that helps you manage your Fedora system configuration by:
|
|
- Managing COPR repositories (enable/disable automatically)
|
|
- Installing and managing system packages via `dnf` or `rpm-ostree`
|
|
- Installing and managing userspace packages via `brew`, `flatpak`, or `nix`
|
|
- Managing dotfiles through symlinks to actual files
|
|
- Centralized configuration via a single `inventory.toml` file
|
|
- Declarative user-level configuration similar to `home-manager`/`nixos`
|
|
- Automatic backup of existing files before replacement
|
|
|
|
## Installation
|
|
|
|
Install the CLI directly from GitHub with [uv](https://github.com/astral-sh/uv):
|
|
|
|
```bash
|
|
uv tool install --from git+https://codeberg.org/randogoth/curator/ curator
|
|
```
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
# Initialize the configuration structure
|
|
curator init
|
|
|
|
# Edit the configuration file to add packages and dotfiles
|
|
nano ~/.config/curator/inventory.toml
|
|
|
|
# Apply configuration
|
|
curator switch
|
|
|
|
# Check status
|
|
curator status
|
|
```
|
|
|
|
## Commands
|
|
|
|
### `init`
|
|
Initialize the configuration structure and create `inventory.toml`.
|
|
|
|
```bash
|
|
curator init
|
|
# or ./curator init
|
|
```
|
|
|
|
Creates:
|
|
- `~/.config/curator/` - Main configuration directory
|
|
- `~/.config/curator/inventory.toml` - Central configuration file
|
|
|
|
### `switch`
|
|
Apply the current configuration (enable COPR, install packages, deploy dotfiles). Use `--rollback` to restore the previous `inventory.toml` snapshot before applying.
|
|
|
|
```bash
|
|
curator switch
|
|
# or ./curator switch
|
|
# rollback to the previous inventory.toml and apply it
|
|
curator switch --rollback
|
|
```
|
|
|
|
This command:
|
|
1. Enables all COPR repositories listed in `inventory.toml`
|
|
2. Disables COPR repositories that are no longer configured
|
|
3. Installs all packages listed in `inventory.toml`
|
|
4. Creates symlinks for all configured dotfiles
|
|
5. Creates backups of existing files before replacing them
|
|
6. Updates the last switch timestamp
|
|
|
|
### `status`
|
|
Show current configuration status and information.
|
|
|
|
```bash
|
|
curator status
|
|
# or ./curator status
|
|
```
|
|
|
|
Displays:
|
|
- Configuration directory paths
|
|
- Last switch timestamp
|
|
- List of configured COPR repositories, packages and dotfiles
|
|
|
|
### `help`
|
|
Show help message with all available commands.
|
|
|
|
```bash
|
|
curator help
|
|
# or ./curator help
|
|
```
|
|
|
|
### `from`
|
|
Import currently installed packages/repos for a manager into `inventory.toml` so curator can manage them.
|
|
|
|
```bash
|
|
curator from dnf
|
|
curator from brew
|
|
curator from flatpak
|
|
curator from rpm-ostree
|
|
curator from nix
|
|
curator from copr
|
|
```
|
|
|
|
### `add` / `remove`
|
|
Add or remove entries directly in `inventory.toml` using `section:value` pairs. Supports `dnf`, `brew`, `flatpak`, `rpm-ostree`, `nix`, and `copr`.
|
|
|
|
```bash
|
|
curator add dnf:uv nix:micro
|
|
curator remove dnf:curl flatpak:org.mozilla.firefox
|
|
```
|
|
|
|
### `reset`
|
|
Remove the rollback snapshot (`inventory.toml.rollback`).
|
|
|
|
```bash
|
|
curator reset
|
|
```
|
|
|
|
## Configuration
|
|
|
|
### inventory.toml
|
|
The central configuration file located at `~/.config/curator/inventory.toml`:
|
|
|
|
```toml
|
|
# curator Configuration File
|
|
# User-level configuration similar to home-manager/nixos
|
|
|
|
[curator]
|
|
version = "1.0"
|
|
last_switch = ""
|
|
|
|
[copr]
|
|
# copr.fedorainfracloud.org/username/repository
|
|
# copr.fedorainfracloud.org/anotheruser/anotherrepo
|
|
|
|
[dnf]
|
|
# git
|
|
# vim
|
|
# curl
|
|
# wget
|
|
|
|
[brew]
|
|
# wget
|
|
# coreutils
|
|
|
|
[flatpak]
|
|
# org.mozilla.firefox
|
|
# com.spotify.Client
|
|
|
|
[rpm-ostree]
|
|
# podman
|
|
# htop
|
|
|
|
[nix]
|
|
# nixpkgs#git # or just "git" (curator will prefix nixpkgs#)
|
|
# nixpkgs#htop # or just "htop"
|
|
|
|
[dotfiles]
|
|
# Dotfiles to manage with symlinks
|
|
# Format: "target_path" = "source_path"
|
|
# target_path: where the symlink should be created (relative to home directory)
|
|
# source_path: where the actual file is stored (relative to dotfiles directory)
|
|
".bashrc" = ".bashrc"
|
|
".config/vimrc" = "vimrc"
|
|
".config/alacritty/alacritty.yml" = "alacritty.yml"
|
|
|
|
[options]
|
|
# Additional options
|
|
backup = true
|
|
backup_dir = "backup"
|
|
```
|
|
|
|
### Configuration Sections
|
|
|
|
#### `[curator]`
|
|
- `version`: Configuration file version
|
|
- `last_switch`: Timestamp of last switch operation (auto-updated)
|
|
|
|
#### `[copr]`
|
|
List of COPR repositories to enable via `dnf copr enable`. **One repository per line**—presence means enable, absence means don't enable.
|
|
|
|
**Examples:**
|
|
```toml
|
|
[copr]
|
|
copr.fedorainfracloud.org/username/repository
|
|
copr.fedorainfracloud.org/anotheruser/anotherrepo
|
|
```
|
|
|
|
To remove a COPR repository, simply delete the line containing the repository name. curator will automatically disable it during the next switch.
|
|
|
|
#### `[dnf]`
|
|
List of packages to install via dnf. **One package per line**—presence means install, absence means don't install.
|
|
|
|
**Examples:**
|
|
```toml
|
|
[dnf]
|
|
git
|
|
vim
|
|
curl
|
|
wget
|
|
nodejs
|
|
npm
|
|
```
|
|
|
|
To remove a package, simply delete the line containing the package name.
|
|
|
|
#### `[brew]`
|
|
List of packages to install via Homebrew. **One package per line**—presence means install.
|
|
|
|
#### `[flatpak]`
|
|
List of Flatpak refs to install. **One ref per line**—presence means install.
|
|
|
|
#### `[rpm-ostree]`
|
|
List of rpm-ostree layered packages. **One package per line**—presence means install.
|
|
|
|
#### `[nix]`
|
|
List of nix packages. **One package per line**—presence means install. You can specify plain names (e.g., `neovim`) or `nixpkgs#name`; curator will prefix `nixpkgs#` for installs and use the base name for removals.
|
|
|
|
#### `[dotfiles]`
|
|
Dotfile mappings using symlinks:
|
|
- **Key**: Target path where symlink should be created (relative to home directory)
|
|
- **Value**: Source path where actual file is stored (relative to dotfiles directory)
|
|
- Note: Source path automatically prefixed with "dotfiles/" if not present
|
|
|
|
#### `[options]`
|
|
Additional configuration options:
|
|
- `backup`: Enable/disable backup of existing files (default: true)
|
|
- `backup_dir`: Directory name for backups (relative to curator directory)
|
|
|
|
## File Structure
|
|
|
|
```
|
|
~/.config/curator/
|
|
├── inventory.toml # Main configuration file
|
|
├── dotfiles/ # Your actual dotfiles (source files)
|
|
│ ├── .bashrc
|
|
│ ├── vimrc
|
|
│ └── alacritty.yml
|
|
└── backup/ # Backups of replaced files
|
|
├── .bashrc.20231121_143022.bak
|
|
└── vimrc.20231121_143022.bak
|
|
```
|
|
|
|
## Environment Variables
|
|
|
|
- `CURATOR_DIR`: Override the default configuration directory (default: `~/.config/curator`) |