{ config , lib , pkgs , inputs , ... } @ args: with lib; let cfg = config.my.programs.hyprland; hyprland-default = inputs.hyprland.packages.${pkgs.system}.default; hyprland-nvidia = hyprland-default.override { nvidiaPatches = true; }; hyprland = if cfg.nvidiaSupport then hyprland-nvidia else hyprland-default; in { options.my.programs.hyprland = { enable = mkEnableOption "hyprland"; nvidiaSupport = mkEnableOption "enable nvidia Support"; }; config = mkIf cfg.enable { home-manager.users.moritz = { imports = [ inputs.hyprland.homeManagerModules.default ]; programs.waybar = { enable = true; package = pkgs.waybar-hyprland; systemd.enable = true; settings = { mainBar = { layer = "top"; position = "top"; height = 30; output = [ "eDP-1" "HDMI-A-1" "HDMI-A-2" ]; modules-left = [ "wlr/workspaces" ]; modules-center = [ "hyprland/window" ]; modules-right = [ "network" "memory" "cpu" "battery" "clock" ]; modules = { "wlr/workspaces" = { on-click = "activate"; }; }; }; }; }; wayland.windowManager.hyprland = { enable = true; package = hyprland; extraConfig = import ./config.nix args; }; services.swayidle = { enable = true; events = [ { event = "before-sleep"; command = "${pkgs.swaylock-effects}/bin/swaylock -fF"; } { event = "lock"; command = "${pkgs.swaylock-effects}/bin/swaylock -fF"; } ]; timeouts = [ { timeout = 300; command = "${hyprland}/bin/hyprctl dispatch dpms off"; resumeCommand = "${hyprland}/bin/hyprctl dispatch dpms on"; } { timeout = 310; command = "${pkgs.systemd}/bin/loginctl lock-session"; } ]; }; # start swayidle as part of hyprland, not sway systemd.user.services.swayidle.Install.WantedBy = lib.mkForce [ "hyprland-session.target" ]; }; users.users.moritz.packages = with pkgs; [ swayidle swaylock-effects pamixer playerctl brightnessctl ]; security.pam.services.swaylock = { }; programs.hyprland = { enable = true; package = null; }; environment.sessionVariables = { XDG_CURRENT_DESKTOP = "Hyprland"; XDG_SESSION_TYPE = "wayland"; XDG_SESSION_DESKTOP = "Hyprland"; QT_AUTO_SCREEN_SCALE_FACTOR = "1"; QT_QPA_PLATFORM = "wayland;xcb"; QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; QT_QPA_PLATFORMTHEME = "qt5ct"; _JAVA_AWT_WM_NONEREPARENTING = "1"; } // (if cfg.nvidiaSupport then { LIBVA_DRIVER_NAME = "nvidia"; XDG_SESSION_TYPE = "wayland"; GBM_BACKEND = "nvidia-drm"; __GLX_VENDOR_LIBRARY_NAME = "nvidia"; WLR_NO_HARDWARE_CURSORS = "1"; __GL_VRR_ALLOWED = "0"; } else { }); services.xserver = { enable = true; displayManager = { gdm.enable = true; autoLogin = { enable = true; user = "moritz"; }; defaultSession = "hyprland"; sessionPackages = [ hyprland ]; }; }; xdg.portal = { enable = true; wlr.enable = true; }; }; }