{ pkgs, inputs, config, lib, ... }: let cfg = config.my.desktop.hyprland; in { imports = [ inputs.hyprland.nixosModules.default ]; options.my.desktop.hyprland = { enable = lib.mkEnableOption null; }; config = lib.mkIf cfg.enable { programs.hyprland = { enable = true; portalPackage = inputs.xdph.packages.${pkgs.system}.default; }; xdg.portal = { enable = true; extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; }; services.greetd = { enable = true; settings = let session = rec { user = config.my.user.username; command = let sessionVars = "/etc/profiles/per-user/${user}/etc/profile.d/hm-session-vars.sh"; in pkgs.writeShellScript "hyprland-hm-session-vars" '' [ -f ${sessionVars} ] && . ${sessionVars} exec ${config.programs.hyprland.package}/bin/Hyprland ''; }; in { initial_session = session; default_session = session; }; }; environment.etc."greetd/environments".text = '' Hyprland ''; boot.extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ]; security = { polkit.enable = lib.mkDefault true; pam = { services = { greeetd.gnupg.enable = true; login.enableGnomeKeyring = true; swaylock = {}; hyprlock = {}; }; }; }; }; }