README
This commit is contained in:
parent
7f41f379da
commit
d11639ea8f
1 changed files with 235 additions and 0 deletions
235
README.md
Normal file
235
README.md
Normal file
|
|
@ -0,0 +1,235 @@
|
|||
# fedora-home-manager
|
||||
|
||||
A home-manager like script for Fedora that provides dotfile management and package installation functionality.
|
||||
|
||||
## Overview
|
||||
|
||||
fedora-home-manager is a bash script that helps you manage your Fedora system configuration by:
|
||||
- Installing and managing system packages via dnf
|
||||
- Deploying and managing dotfiles to your home directory
|
||||
- Automatically cleaning up packages that are no longer needed
|
||||
- Tracking state of managed files and packages
|
||||
|
||||
## Installation
|
||||
|
||||
1. Clone or download this repository
|
||||
2. Make the script executable:
|
||||
```bash
|
||||
chmod +x forge
|
||||
```
|
||||
3. Optionally, move it to a directory in your PATH:
|
||||
```bash
|
||||
sudo mv forge /usr/local/bin/fedora-home-manager
|
||||
```
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Initialize the configuration structure
|
||||
./forge init
|
||||
|
||||
# Add a dotfile to management
|
||||
./forge add ~/.bashrc
|
||||
|
||||
# Add packages to install (edit the packages file)
|
||||
echo "git" >> ~/.config/fedora-home-manager/packages.txt
|
||||
echo "vim" >> ~/.config/fedora-home-manager/packages.txt
|
||||
|
||||
# Apply configuration
|
||||
./forge switch
|
||||
```
|
||||
|
||||
## Commands
|
||||
|
||||
### `init`
|
||||
Initialize the configuration structure and create example files.
|
||||
|
||||
```bash
|
||||
./forge init
|
||||
```
|
||||
|
||||
Creates:
|
||||
- `~/.config/fedora-home-manager/` - Main configuration directory
|
||||
- `~/.config/fedora-home-manager/dotfiles/` - Directory for your dotfiles
|
||||
- `~/.config/fedora-home-manager/packages.txt` - List of packages to install
|
||||
- `~/.config/fedora-home-manager/state.json` - State tracking file
|
||||
- `~/.config/fedora-home-manager/backup/` - Backup directory for existing files
|
||||
|
||||
### `switch`
|
||||
Apply the current configuration (install packages, deploy dotfiles, cleanup old packages).
|
||||
|
||||
```bash
|
||||
./forge switch
|
||||
```
|
||||
|
||||
This command:
|
||||
1. Installs all packages listed in `packages.txt`
|
||||
2. Uninstalls packages that are no longer in `packages.txt`
|
||||
3. Deploys all dotfiles from the dotfiles directory to your home
|
||||
4. Creates backups of existing files before overwriting
|
||||
5. Updates the state tracking
|
||||
|
||||
### `build`
|
||||
Alias for `switch` command.
|
||||
|
||||
```bash
|
||||
./forge build
|
||||
```
|
||||
|
||||
### `add <file>`
|
||||
Add a file to dotfiles management.
|
||||
|
||||
```bash
|
||||
./forge add ~/.bashrc
|
||||
./forge add ~/.vimrc
|
||||
./forge add ~/.config/alacritty/alacritty.yml
|
||||
```
|
||||
|
||||
The file is copied to the dotfiles directory while maintaining its relative path structure.
|
||||
|
||||
### `remove <path>`
|
||||
Remove a dotfile from management.
|
||||
|
||||
```bash
|
||||
./forge remove .bashrc
|
||||
./forge remove .config/alacritty/alacritty.yml
|
||||
```
|
||||
|
||||
Optionally restores the original file from backup.
|
||||
|
||||
### `list`
|
||||
List all managed files and packages.
|
||||
|
||||
```bash
|
||||
./forge list
|
||||
```
|
||||
|
||||
Shows:
|
||||
- All dotfiles currently under management
|
||||
- All packages that will be installed
|
||||
|
||||
### `status`
|
||||
Show current status and configuration information.
|
||||
|
||||
```bash
|
||||
./forge status
|
||||
```
|
||||
|
||||
Displays:
|
||||
- Configuration directory paths
|
||||
- Last switch timestamp
|
||||
- List of managed files and packages
|
||||
|
||||
### `help`
|
||||
Show help message with all available commands.
|
||||
|
||||
```bash
|
||||
./forge help
|
||||
```
|
||||
|
||||
## Configuration Files
|
||||
|
||||
### packages.txt
|
||||
List of Fedora packages to install, one package per line:
|
||||
```
|
||||
# Comments start with #
|
||||
git
|
||||
vim
|
||||
curl
|
||||
wget
|
||||
neofetch
|
||||
```
|
||||
|
||||
### dotfiles directory
|
||||
Place your dotfiles in `~/.config/fedora-home-manager/dotfiles/` maintaining the same directory structure as in your home:
|
||||
|
||||
```
|
||||
~/.config/fedora-home-manager/dotfiles/
|
||||
├── .bashrc
|
||||
├── .vimrc
|
||||
└── .config/
|
||||
└── alacritty/
|
||||
└── alacritty.yml
|
||||
```
|
||||
|
||||
### state.json
|
||||
Internal state tracking file (managed automatically):
|
||||
- Tracks installed packages for cleanup
|
||||
- Records last switch timestamp
|
||||
- Maintains list of managed files
|
||||
|
||||
## Features
|
||||
|
||||
### Automatic Package Cleanup
|
||||
When you remove a package from `packages.txt` and run `switch`, the package will be automatically uninstalled from your system.
|
||||
|
||||
### Backup System
|
||||
Before overwriting existing files, the script creates timestamped backups in the backup directory.
|
||||
|
||||
### State Tracking
|
||||
Previously installed packages are tracked to enable intelligent cleanup operations.
|
||||
|
||||
## Environment Variables
|
||||
|
||||
- `HOME_MANAGER_DIR`: Override the default configuration directory (default: `~/.config/fedora-home-manager`)
|
||||
|
||||
## Dependencies
|
||||
|
||||
- `dnf` - Fedora package manager
|
||||
- `jq` - JSON processor (optional, for enhanced state tracking)
|
||||
|
||||
## Examples
|
||||
|
||||
### Basic Setup
|
||||
```bash
|
||||
# Initialize
|
||||
./forge init
|
||||
|
||||
# Add your shell configuration
|
||||
./forge add ~/.bashrc
|
||||
./forge add ~/.bash_profile
|
||||
|
||||
# Add development tools
|
||||
echo "git" >> ~/.config/fedora-home-manager/packages.txt
|
||||
echo "vim" >> ~/.config/fedora-home-manager/packages.txt
|
||||
echo "nodejs" >> ~/.config/fedora-home-manager/packages.txt
|
||||
echo "npm" >> ~/.config/fedora-home-manager/packages.txt
|
||||
|
||||
# Apply configuration
|
||||
./forge switch
|
||||
```
|
||||
|
||||
### Managing Configuration Files
|
||||
```bash
|
||||
# Add application configurations
|
||||
./forge add ~/.config/alacritty/alacritty.yml
|
||||
./forge add ~/.config/git/config
|
||||
./forge add ~/.config/nvim/init.vim
|
||||
|
||||
# Check what's managed
|
||||
./forge list
|
||||
|
||||
# Apply changes
|
||||
./forge switch
|
||||
```
|
||||
|
||||
### Removing Packages
|
||||
```bash
|
||||
# Edit packages.txt and remove lines for packages you don't want
|
||||
# Then run switch to uninstall them
|
||||
./forge switch
|
||||
```
|
||||
|
||||
## File Structure
|
||||
|
||||
```
|
||||
~/.config/fedora-home-manager/
|
||||
├── dotfiles/ # Your dotfiles to deploy
|
||||
├── packages.txt # List of packages to install
|
||||
├── state.json # State tracking
|
||||
└── backup/ # Backups of replaced files
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
This project is open source. Feel free to contribute or report issues.
|
||||
Loading…
Add table
Add a link
Reference in a new issue