My personal configuration files for Fedora Workstation with Hyprland, including Zsh, Neovim, Kitty, Rofi, Waybar, and more.
- Setting Up a New PC
- Quick Start
- Scripts Overview
- Repository Management
- Package Management
- Updating Configurations
- How It Works
- Development Tools
- SSH Key Setup
- Daily Workflow
- Troubleshooting
- Quick Reference
Do NOT manually install Hyprland first! JaKooLit's script handles everything.
Start with a fresh Fedora Workstation installation.
This handles all system setup (Hyprland, SDDM, audio pipelines, systemd services, etc.):
git clone --depth=1 https://github.com/JaKooLit/Fedora-Hyprland.git
cd Fedora-Hyprland
./install.sh
# Reboot into Hyprland
sudo reboot# Clone your personal dotfiles
git clone git@github.com:LoicPil/dotfiles.git ~/dotfiles
cd ~/dotfiles# Setup all required repositories
./setup-repos.shThis installs:
- RPM Fusion (Free & Nonfree)
- Visual Studio Code
- Google Chrome
- Opera Browser
- Belgian eID
- All COPR repos (Hyprland, PyCharm, SwayNotificationCenter, etc.)
# Install DNF packages
sudo dnf install $(cat packages.txt)
# Install Flatpaks
cat flatpaks.txt | xargs -I {} flatpak install -y flathub {}# Apply your configs (automatically creates backups and symlinks)
./install.sh# Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
# Install UV (Python package manager)
curl -LsSf https://astral.sh/uv/install.sh | shYour personalized Hyprland setup is now ready! π
# Clone the repository
git clone git@github.com:LoicPil/dotfiles.git ~/dotfiles
cd ~/dotfiles
# Setup repositories (REQUIRED FIRST!)
./setup-repos.sh
# Install dotfiles
./install.sh
# Optional: Install all packages from backup
sudo dnf install $(cat packages.txt)
cat flatpaks.txt | xargs -I {} flatpak install -y flathub {}cd ~/dotfiles
./uninstall.shAll scripts are organized in the scripts/ directory. Symlinks at the root provide easy access.
| Script | Purpose |
|---|---|
install.sh |
Creates symlinks, initializes submodules, sets up dotfiles |
uninstall.sh |
Removes all symlinks |
sync-configs.sh |
Syncs configs after external installers break symlinks |
backup-system.sh |
Full system backup (repos + packages + flatpaks) |
restore-system.sh |
Full system restore from backup |
cleanup-backups.sh |
Keep only the 2 most recent backups |
| Script | Purpose |
|---|---|
setup-repos.sh |
Configures all required DNF repositories |
update-repos.sh |
Saves current repository configuration |
update-packages.sh |
Updates package lists (DNF + Flatpak) |
cd ~/dotfiles
# Full system backup
./backup-system.sh
# Restore everything on a new system
./restore-system.sh
# Clean old backups (keeps only 2 most recent)
./cleanup-backups.sh
# Setup repositories only
./setup-repos.sh
# Update package lists only
./update-packages.shcd ~/dotfiles
./setup-repos.shThis configures:
- RPM Fusion (Free & Nonfree) - Additional software packages
- Visual Studio Code - Microsoft's code editor
- Google Chrome - Google's web browser
- Opera - Opera web browser
- Belgian eID - Belgian electronic ID card support
- COPR Repositories: Hyprland, PyCharm, SwayNotificationCenter, lazygit, and more
cd ~/dotfiles
./update-repos.sh
git add repos.txt
git commit -m "Update repository list"
git pushcd ~/dotfiles
./update-packages.shThis updates both:
packages.txt- All user-installed DNF packagesflatpaks.txt- All installed Flatpak applications
# FIRST: Setup repositories
cd ~/dotfiles
./setup-repos.sh
# THEN: Install packages
sudo dnf install $(cat packages.txt)
cat flatpaks.txt | xargs -I {} flatpak install -y flathub {}- Click the update button in Waybar
- Compares your local version with JaKooLit's GitHub
- Shows notification if update available
- One-click update process
cd ~/dotfiles
git status
git diff
git add .
git commit -m "Update from JaKooLit v2.X.X"
git pushcd ~/Hyprland-Dots
git pull
~/.config/hypr/UserScripts/upgrade-custom.sh
cd ~/dotfiles
git add .
git commit -m "Update from JaKooLit"
git pushcd ~/dotfiles
./sync-configs.sh
git add .
git commit -m "Sync configs after external update"
git pushThe install script creates symlinks from your home directory to the dotfiles repository:
~/.config/nvim β ~/dotfiles/nvim
~/.config/hypr β ~/dotfiles/hypr
~/.zshrc β ~/dotfiles/zsh/.zshrc
~/.gitconfig β ~/dotfiles/git/gitconfig
# etc...
dotfiles/
βββ backup/ # Timestamped backups (gitignored)
βββ backups/ # System backups from backup-system.sh
βββ consign/ # Complete recovery & installation guide
βββ scripts/ # ALL scripts organized here
β βββ install.sh
β βββ uninstall.sh
β βββ sync-configs.sh
β βββ backup-system.sh
β βββ restore-system.sh
β βββ cleanup-backups.sh
β βββ setup-repos.sh
β βββ update-repos.sh
β βββ update-packages.sh
βββ btop/ # System monitor configuration
βββ cava/ # Audio visualizer
βββ emacs/ # Emacs configuration
βββ git/ # Git configuration
βββ hypr/ # Hyprland window manager
βββ kitty/ # Kitty terminal emulator
βββ Kvantum/ # Theme engine
βββ nvim/ # Neovim configuration
βββ oh-my-zsh/ # Oh My Zsh framework (submodule)
βββ qt5ct/ qt6ct/ # Qt configuration
βββ rofi/ # Application launcher
βββ ssh/ # SSH config (keys NOT tracked!)
βββ swaync/ # Notification daemon
βββ swappy/ # Screenshot tool
βββ wallust/ # Wallpaper & color scheme manager
βββ waybar/ # Status bar
βββ wlogout/ # Logout menu
βββ zsh/ # Zsh configuration
βββ flatpaks.txt # Flatpak applications list
βββ packages.txt # DNF packages list
βββ repos.txt # Repository configuration
βββ [symlinks to scripts/*.sh]
UV is a fast Python package installer and resolver.
curl -LsSf https://astral.sh/uv/install.sh | shmkdir ~/my-python-project
cd ~/my-python-project
uv init
# Or with specific Python version
uv init --python 3.12# Add dependencies
uv add requests pandas numpy
# Add development dependencies
uv add --dev pytest black ruff
# Install all dependencies
uv sync
# Run Python with virtual environment
uv run python script.pyuv add <package> # Add a package
uv remove <package> # Remove a package
uv sync # Install all dependencies
uv run <command> # Run command in virtual environment
uv pip list # List installed packages
uv pip freeze # Export dependencies
uv lock # Update lockfileRust is a systems programming language focused on safety, speed, and concurrency.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
# Verify installation
rustc --version
cargo --versionmkdir ~/projects
cd ~/projects
cargo new my-appcd project-name
cargo build # Build in debug mode
cargo build --release # Build optimized
cargo run # Build and run
cargo test # Run tests
cargo check # Check code without building
cargo clippy # Run linter
cargo fmt # Format code
# Dependencies
cargo add serde # Add a dependency
cargo remove serde # Remove a dependency
cargo update # Update dependenciescargo new <name> # Create new project
cargo build # Build project
cargo run # Build and run
cargo test # Run tests
cargo check # Fast compile check
cargo clippy # Linting
cargo fmt # Format code
cargo clean # Clean build artifacts
cargo doc --open # Generate and open docsrustup update
rustc --versionssh-keygen -t ed25519 -C "your-email@example.com"eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519cat ~/.ssh/id_ed25519.pubCopy the output and add it at GitHub SSH Keys
Add to ~/.zshrc:
# Start SSH agent if not running
if ! pgrep -u "$USER" ssh-agent > /dev/null; then
eval "$(ssh-agent -s)"
fi
# Add SSH keys
ssh-add ~/.ssh/id_ed25519 2>/dev/nullssh -T git@github.com# Edit any config file
nvim ~/dotfiles/hypr/hyprland.conf
# Changes apply immediately (it's a symlink!)
# Commit when satisfied
cd ~/dotfiles
git add .
git commit -m "Update Hyprland keybinds"
git pushcd ~/dotfiles
git pull
# Changes apply immediately via symlinkscd ~/dotfiles
./update-packages.sh
git add packages.txt flatpaks.txt
git commit -m "Update package lists"
git pushcd ~/dotfiles
./update-repos.sh
git add repos.txt
git commit -m "Update repository list"
git push- Repositories First: Always run
./setup-repos.shBEFORE installing packages - SSH Keys: Private keys are NOT tracked in git (see
.gitignore) - Backups: Created automatically in
~/dotfiles/backup/TIMESTAMP/during updates - Oh-my-zsh: Managed as a git submodule (automatically initialized by
install.sh) - Package Lists: Auto-generated by
update-packages.sh- don't edit manually - Repository List: Auto-generated by
update-repos.sh- don't edit manually - Protected Configs: UserConfigs/, UserScripts/, and personal waybar styles are never overwritten
- JaKooLit First: Always install JaKooLit's Hyprland setup before applying your dotfiles
"Package not found" errors during installation
# You probably forgot to setup repositories first!
cd ~/dotfiles
./setup-repos.sh
# Then retry package installation
sudo dnf install $(cat packages.txt)Check which repositories are enabled
dnf repolist"No update available" message
# You're already on the latest version
# Check manually:
ls ~/Hyprland-Dots/config/hypr/v*List available backups:
ls ~/dotfiles/backup/Restore specific config:
cp -r ~/dotfiles/backup/TIMESTAMP/hypr ~/dotfiles/
cd ~/dotfiles
git add .
git commit -m "Restore hypr config from backup"
git push# Verify symlinks are correct
ls -la ~/.config/nvim # Should show β /home/username/dotfiles/nvim
ls -la ~/.config/hypr # Should show β /home/username/dotfiles/hypr# 1. Install JaKooLit's Hyprland
git clone --depth=1 https://github.com/JaKooLit/Fedora-Hyprland.git
cd Fedora-Hyprland && ./install.sh && sudo reboot
# 2. Clone your dotfiles
git clone git@github.com:LoicPil/dotfiles.git ~/dotfiles
cd ~/dotfiles
# 3. Setup repositories FIRST (CRITICAL!)
./setup-repos.sh
# 4. Install packages
sudo dnf install $(cat packages.txt)
cat flatpaks.txt | xargs -I {} flatpak install -y flathub {}
# 5. Apply dotfiles
./install.sh
# 6. Install development tools (optional)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
curl -LsSf https://astral.sh/uv/install.sh | sh# Full system backup (repos + packages + flatpaks)
./backup-system.sh
# Full system restore
./restore-system.sh
# Update package lists only
./update-packages.sh
# Update repository list only
./update-repos.sh
# Clean old backups (keeps 2 most recent)
./cleanup-backups.sh
# Reinstall dotfiles
./uninstall.sh && ./install.sh
# Restore from backup
cp -r backup/20260831_114623/hypr ~/dotfiles/Keep your dotfiles safe and your system consistent! π