Add hybrid configuration mode as default

 NEW FEATURE: Hybrid Configuration Mode

🎯 HYBRID MODE (now default):
- Hyprland: Fully declarative (easy to customize inline)
- Quickshell: Copy QML files (complex structure, proven to work)
- Best of both worlds: customizable + reliable

🔧 IMPLEMENTATION:
- Added 'hybrid' to mode enum options
- Set hybrid as default mode
- Smart configuration copying logic:
  - copyMiscConfig = true (Quickshell QML files)
  - copyHyprlandConfig = false (use overrides instead)
  - copyFishConfig = true (fish shell config)

🎨 USER BENEFITS:
- Hyprland errors? Fix declaratively in home.nix
- Quickshell complex? Use proven copied files
- No more 'broken config dir?' issues
- Perfect for NixOS users who want control + reliability

Modes available:
- hybrid (default): Hyprland declarative + Quickshell copied
- declarative: Everything managed by Home Manager
- writable: Everything copied to ~/.config for editing
This commit is contained in:
Celes Renata
2025-08-09 13:05:43 -07:00
parent a13a9352ed
commit cd7e9840fe
+9 -6
View File
@@ -36,10 +36,11 @@ in
};
mode = mkOption {
type = types.enum [ "declarative" "writable" ];
default = "declarative";
type = types.enum [ "declarative" "writable" "hybrid" ];
default = "hybrid";
description = ''
Configuration mode:
- hybrid: Hyprland declarative + Quickshell copied (recommended)
- declarative: Files managed by Home Manager (read-only)
- writable: Files staged to .configstaging, user copies and modifies
'';
@@ -95,11 +96,13 @@ in
};
# Enable configuration management based on mode
programs.dots-hyprland.configuration = mkIf (cfg.mode == "declarative") {
enable = false; # Temporarily disabled for rich config testing
programs.dots-hyprland.configuration = mkIf (cfg.mode == "declarative" || cfg.mode == "hybrid") {
enable = mkDefault (cfg.mode == "hybrid"); # Enable copying for hybrid mode
source = cfg.source;
# Disable copying specific configs if we're managing them with rich config
copyMiscConfig = !(cfg ? quickshell || cfg ? terminal);
# In hybrid mode, copy Quickshell but not Hyprland (use overrides instead)
copyMiscConfig = mkDefault (cfg.mode == "hybrid");
copyFishConfig = mkDefault true;
copyHyprlandConfig = mkDefault (cfg.mode == "declarative"); # Only copy in pure declarative mode
};
# Enable writable mode