{ description = "NixOS adaptation of end-4's dots-hyprland - self-contained installer replication"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; quickshell.url = "github:outfoxxed/quickshell"; }; outputs = { self, nixpkgs, home-manager, quickshell, ... }: let system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; overlays = [ self.overlays.default ]; }; # Import our utility packages utilityPackages = import ./packages { inherit pkgs; }; in { overlays.default = final: prev: { # Enhanced quickshell with Qt5Compat support for dots-hyprland quickshell = quickshell.packages.${system}.default.overrideAttrs (oldAttrs: { # Add Qt5Compat as a runtime dependency buildInputs = (oldAttrs.buildInputs or []) ++ [ final.qt6.qt5compat ]; # Use Qt's wrapper to ensure QML modules are found nativeBuildInputs = (oldAttrs.nativeBuildInputs or []) ++ [ final.qt6.wrapQtAppsHook ]; # Set up QML import paths properly using the correct Qt6 variable preFixup = (oldAttrs.preFixup or "") + '' qtWrapperArgs+=( --prefix QML2_IMPORT_PATH : "${final.qt6.qt5compat}/${final.qt6.qtbase.qtQmlPrefix}" --prefix NIXPKGS_QT6_QML_IMPORT_PATH : "${final.qt6.qt5compat}/${final.qt6.qtbase.qtQmlPrefix}" --prefix QT_PLUGIN_PATH : "${final.qt6.qt5compat}/lib/qt-6/plugins" ) ''; }); }; packages.${system} = utilityPackages // { default = utilityPackages.update-flake; }; devShells.${system}.default = pkgs.mkShell { buildInputs = with pkgs; [ nixpkgs-fmt nil git jq ] ++ (with utilityPackages; [ update-flake test-python-env test-quickshell compare-modes ]); shellHook = builtins.readFile ./packages/scripts/dev-shell-hook.sh; }; homeManagerModules.default = import ./modules/home-manager.nix; homeManagerModules.dots-hyprland = self.homeManagerModules.default; homeConfigurations = { declarative = home-manager.lib.homeManagerConfiguration { inherit pkgs; modules = [ self.homeManagerModules.default { home.username = "celes"; home.homeDirectory = "/home/celes"; home.stateVersion = "24.05"; programs.dots-hyprland = { enable = true; source = ./configs; # Use local configs packageSet = "essential"; mode = "declarative"; # 🎨 Quickshell Configuration quickshell = { appearance = { extraBackgroundTint = true; fakeScreenRounding = 2; # When not fullscreen transparency = false; }; bar = { bottom = false; # Top bar cornerStyle = 0; # Hug style topLeftIcon = "spark"; showBackground = true; verbose = true; utilButtons = { showScreenSnip = true; showColorPicker = true; # 🎯 Enable color picker! showMicToggle = false; showKeyboardToggle = true; showDarkModeToggle = true; showPerformanceProfileToggle = false; }; workspaces = { monochromeIcons = true; shown = 10; showAppIcons = true; alwaysShowNumbers = false; showNumberDelay = 300; }; }; battery = { low = 20; critical = 5; automaticSuspend = true; suspend = 3; }; apps = { terminal = "foot"; bluetooth = "kcmshell6 kcm_bluetooth"; network = "plasmawindowed org.kde.plasma.networkmanagement"; taskManager = "plasma-systemmonitor --page-name Processes"; }; time = { format = "hh:mm"; dateFormat = "ddd, dd/MM"; }; }; # 🖥️ Hyprland Configuration hyprland = { general = { gapsIn = 4; gapsOut = 7; borderSize = 2; allowTearing = false; }; decoration = { rounding = 16; blurEnabled = true; }; gestures = { workspaceSwipe = true; }; monitors = [ # Add your monitor config here, e.g.: # "eDP-1,1920x1080@60,0x0,1" ]; }; # 🖥️ Terminal Configuration terminal = { scrollback = { lines = 1000; multiplier = 3.0; }; cursor = { style = "beam"; blink = false; beamThickness = 1.5; }; colors = { alpha = 0.95; }; mouse = { hideWhenTyping = false; alternateScrollMode = true; }; }; }; } ]; }; writable = home-manager.lib.homeManagerConfiguration { inherit pkgs; modules = [ self.homeManagerModules.default { home.username = "celes"; home.homeDirectory = "/home/celes"; home.stateVersion = "24.05"; programs.dots-hyprland = { enable = true; source = ./configs; # Use local configs packageSet = "essential"; mode = "writable"; writable = { stagingDir = ".configstaging"; setupScript = "initialSetup.sh"; backupExisting = true; }; }; } ]; }; example = self.homeConfigurations.declarative; }; }; }