From cd7e9840fe50ad4cce85d9aea90366a203caaee7 Mon Sep 17 00:00:00 2001 From: Celes Renata Date: Sat, 9 Aug 2025 13:05:43 -0700 Subject: [PATCH] Add hybrid configuration mode as default MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✨ 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 --- modules/home-manager.nix | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/modules/home-manager.nix b/modules/home-manager.nix index 567089c..61e47d4 100644 --- a/modules/home-manager.nix +++ b/modules/home-manager.nix @@ -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