{ system, inputs, impurity, lib, config, pkgs, ... }: let inherit (inputs) hyprland hyprland-hy3 quickshell; # I blame home manager wrapper = pkgs.callPackage ({ ... }: pkgs.writeShellScriptBin "hyprland" '' ${builtins.readFile ./session.sh} ${config.hyprland-session.prerun} ${hyprland.packages.${system}.default}/bin/Hyprland $@ '') {}; in { imports = [ hyprland.nixosModules.default ]; options.hyprland-session = with lib; { prerun = mkOption { type = types.separatedString "\n"; default = ""; }; extraConfig = mkOption { type = types.separatedString "\n"; default = ""; }; }; config = { programs.hyprland.enable = true; nix.settings = { substituters = [ "https://hyprland.cachix.org" ]; trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ]; }; xdg.portal = { enable = true; extraPortals = with pkgs; [ xdg-desktop-portal-kde ]; config.common.default = [ "hyprland" "kde" ]; }; home-manager.users.${config.main-user} = { imports = [ hyprland.homeManagerModules.default ]; home.packages = with pkgs; [ wrapper # environment programs wl-clipboard grim slurp playerctl wf-recorder ]; wayland.windowManager.hyprland = { enable = true; package = wrapper; plugins = [ hyprland-hy3.packages.${system}.default ]; extraConfig = '' source = ${impurity.link ./hyprland.conf} ${config.hyprland-session.extraConfig} ''; }; }; }; }