Overview
This dotfiles configuration follows a modular, 12-factor design philosophy, making it easy to extend, customize, and maintain. All components are designed to be portable, configurable via environment variables, and version-controlled.Design Philosophy
12-Factor Configuration
The configuration implements 12-factor app principles:- Config: All settings via environment variables
- Dependencies: Explicit path management
- Dev/Prod Parity: Same config across machines
- Portability: Works on any Linux distribution
Modular Structure
Hyprland Modules
Hyprland configuration is split into focused modules:Benefits of Modular Design
- Focused editing - Only touch relevant files
- Easy backup - Back up specific modules
- Shareable - Share keybindings without sharing everything
- Maintainable - Clear organization
- Conflict-free - Multiple people can edit different modules
Adding New Hyprland Modules
Step 1: Create Module File
Step 2: Add Configuration
Step 3: Source Module
Step 4: Reload Configuration
Extending Fish Configuration
Adding Functions
Create a new function file:Adding Abbreviations
Edit config.fish:Adding Environment Variables
12-factor way (with defaults):Tool Integrations
Adding new tool initialization:Creating Custom Modules
Example: Custom Waybar Module
1. Create script:Example: Custom Rofi Menu
Create script:Version Control Best Practices
What to Commit
DO commit:- Configuration files
- Scripts and functions
- Theme files
- Documentation
- Font configurations
- Keybinding definitions
- Cache files (
.cache/) - Secret keys or tokens
- Machine-specific absolute paths
- Large binary files
- IDE project files (unless dotfiles-related)
Using .gitignore
Branching for Customization
Machine-Specific Configuration
Using Hostname Detection
Conditional Module Loading
Environment-Based Theming
Sharing Your Customizations
Extract Portable Module
Create Template Variables
Document Dependencies
Testing Changes Safely
Backup Before Editing
Test in Isolation
Incremental Changes
- Change one thing at a time
- Test immediately
- Commit if it works
- Repeat
Advanced Patterns
Dynamic Configuration Generation
Configuration Validation
Auto-Sync Across Machines
Getting Help
Debugging Your Extensions
Fish:Useful Resources
- Hyprland Wiki: https://wiki.hyprland.org
- Fish Documentation: https://fishshell.com/docs/current/
- Waybar Wiki: https://github.com/Alexays/Waybar/wiki
- Nerd Fonts: https://www.nerdfonts.com
Quick Start Checklist
To extend this configuration:- Understand the modular structure
- Identify which module to edit
- Backup before making changes
- Make one change at a time
- Test immediately
- Commit working changes
- Document custom additions
- Keep secrets out of version control