{ moduleWithSystem, self, inputs, ... }: { flake.nixosModules.hyprland = moduleWithSystem ({ self', pkgs, inputs', ... }: {config, ...}: let modules = with self.nixosModules; [ audio systemTheme ]; runtimePkgs = self'.packages.hyprland.passthru.runtimePackages; lib = pkgs.lib; runtimeTarget = name: pkg: if config.security.wrappers ? ${name} then "/run/wrappers/bin/${name}" else lib.getExe pkg; in { imports = modules; options = { hyprland.enablePlugins = lib.mkOption { type = lib.types.bool; default = false; description = "Enable plugins, basically just touchscreen support"; }; }; config = { programs.hyprland = { enable = true; package = self'.packages.hyprland; }; services.displayManager.defaultSession = "hyprland"; services.xserver.enable = true; security.polkit.enable = true; environment.systemPackages = with pkgs; [ gsettings-desktop-schemas ]; system.activationScripts.hyprRuntimeEnv = lib.stringAfter ["specialfs"] '' mkdir -p /run/hypr-runtime-env/bin ${lib.concatStringsSep "\n" (lib.mapAttrsToList (name: pkg: '' ln -sfn ${runtimeTarget name pkg} /run/hypr-runtime-env/bin/${name} '') runtimePkgs)} ''; system.activationScripts.hyprConfig = let pluginFile = builtins.toFile "plugins.lua" '' hl.on("hyprland.start", function () ${lib.optionalString config.hyprland.enablePlugins '' hl.exec("hyprctl plugin load ${inputs'.hyprgrass.packages.default}/lib/libhyprgrass.so") ''} end) ''; in lib.stringAfter ["specialfs"] '' mkdir -p /run/hypr/config rm -rf /run/hypr/config/* ln -sfn ${inputs'.hyprland.packages.repo-files}/* /run/hypr/config ln -sfn ${pluginFile} /run/hypr/config/plugins.lua ''; }; }); perSystem = { self', system, inputs', ... }: { packages = { hyprland = inputs'.hyprland.packages.default.override { flags."--config" = "/run/hypr/config/hyprland.lua"; env."MODULES_ROOT" = "/run/hypr/config/modules"; runtimePackages = inputs.hyprland.lib.defaultRuntimePkgs.${system} // { wpaperd = self'.packages.wpaperd; kitty = self'.packages.kitty; gotify-desktop = self'.packages.gotify-desktop; otter-launcher = self'.packages.otter-launcher; hyprlock = self'.packages.hyprlock; quickshell = self'.packages.quickshell; wshowkeys = self'.packages.wshowkeys; waybar = self'.packages.waybar; way-edges = self'.packages.way-edges; }; }; }; }; }