about summary refs log tree commit diff
path: root/nixpkgs/nixos/modules/programs/wayland/hyprland.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/nixos/modules/programs/wayland/hyprland.nix')
-rw-r--r--nixpkgs/nixos/modules/programs/wayland/hyprland.nix82
1 files changed, 82 insertions, 0 deletions
diff --git a/nixpkgs/nixos/modules/programs/wayland/hyprland.nix b/nixpkgs/nixos/modules/programs/wayland/hyprland.nix
new file mode 100644
index 000000000000..9061ce5da83a
--- /dev/null
+++ b/nixpkgs/nixos/modules/programs/wayland/hyprland.nix
@@ -0,0 +1,82 @@
+{ config
+, lib
+, pkgs
+, ...
+}:
+with lib; let
+  cfg = config.programs.hyprland;
+
+  finalPortalPackage = cfg.portalPackage.override {
+    hyprland = cfg.finalPackage;
+  };
+in
+{
+  options.programs.hyprland = {
+    enable = mkEnableOption null // {
+      description = mdDoc ''
+        Hyprland, the dynamic tiling Wayland compositor that doesn't sacrifice on its looks.
+
+        You can manually launch Hyprland by executing {command}`Hyprland` on a TTY.
+
+        A configuration file will be generated in {file}`~/.config/hypr/hyprland.conf`.
+        See <https://wiki.hyprland.org> for more information.
+      '';
+    };
+
+    package = mkPackageOption pkgs "hyprland" { };
+
+    finalPackage = mkOption {
+      type = types.package;
+      readOnly = true;
+      default = cfg.package.override {
+        enableXWayland = cfg.xwayland.enable;
+      };
+      defaultText = literalExpression
+        "`programs.hyprland.package` with applied configuration";
+      description = mdDoc ''
+        The Hyprland package after applying configuration.
+      '';
+    };
+
+    portalPackage = mkPackageOption pkgs "xdg-desktop-portal-hyprland" { };
+
+    xwayland.enable = mkEnableOption (mdDoc "XWayland") // { default = true; };
+  };
+
+  config = mkIf cfg.enable {
+    environment.systemPackages = [ cfg.finalPackage ];
+
+    fonts.enableDefaultPackages = mkDefault true;
+    hardware.opengl.enable = mkDefault true;
+
+    programs = {
+      dconf.enable = mkDefault true;
+      xwayland.enable = mkDefault cfg.xwayland.enable;
+    };
+
+    security.polkit.enable = true;
+
+    services.xserver.displayManager.sessionPackages = [ cfg.finalPackage ];
+
+    xdg.portal = {
+      enable = mkDefault true;
+      extraPortals = [ finalPortalPackage ];
+      configPackages = mkDefault [ cfg.finalPackage ];
+    };
+  };
+
+  imports = with lib; [
+    (mkRemovedOptionModule
+      [ "programs" "hyprland" "xwayland" "hidpi" ]
+      "XWayland patches are deprecated. Refer to https://wiki.hyprland.org/Configuring/XWayland"
+    )
+    (mkRemovedOptionModule
+      [ "programs" "hyprland" "enableNvidiaPatches" ]
+      "Nvidia patches are no longer needed"
+    )
+    (mkRemovedOptionModule
+      [ "programs" "hyprland" "nvidiaPatches" ]
+      "Nvidia patches are no longer needed"
+    )
+  ];
+}