diff options
6 files changed, 90 insertions, 87 deletions
diff --git a/nixos/modules/programs/hyprland.nix b/nixos/modules/programs/hyprland.nix index faeaa8973fa97..e0ee5b6bd2a45 100644 --- a/nixos/modules/programs/hyprland.nix +++ b/nixos/modules/programs/hyprland.nix @@ -32,11 +32,10 @@ in readOnly = true; default = cfg.package.override { enableXWayland = cfg.xwayland.enable; - hidpiXWayland = cfg.xwayland.hidpi; - nvidiaPatches = cfg.nvidiaPatches; + enableNvidiaPatches = cfg.enableNvidiaPatches; }; defaultText = literalExpression - "`wayland.windowManager.hyprland.package` with applied configuration"; + "`programs.hyprland.package` with applied configuration"; description = mdDoc '' The Hyprland package after applying configuration. ''; @@ -44,17 +43,9 @@ in portalPackage = mkPackageOptionMD pkgs "xdg-desktop-portal-hyprland" { }; - xwayland = { - enable = mkEnableOption (mdDoc "XWayland") // { default = true; }; - hidpi = mkEnableOption null // { - description = mdDoc '' - Enable HiDPI XWayland, based on [XWayland MR 733](https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/733). - See <https://wiki.hyprland.org/Nix/Options-Overrides/#xwayland-hidpi> for more info. - ''; - }; - }; + xwayland.enable = mkEnableOption (mdDoc "XWayland") // { default = true; }; - nvidiaPatches = mkEnableOption (mdDoc "patching wlroots for better Nvidia support"); + enableNvidiaPatches = mkEnableOption (mdDoc "patching wlroots for better Nvidia support"); }; config = mkIf cfg.enable { @@ -77,4 +68,15 @@ in extraPortals = [ finalPortalPackage ]; }; }; + + imports = with lib; [ + (mkRemovedOptionModule + [ "programs" "hyprland" "xwayland" "hidpi" ] + "XWayland patches are deprecated. Refer to https://wiki.hyprland.org/Configuring/XWayland" + ) + (mkRenamedOptionModule + [ "programs" "hyprland" "nvidiaPatches" ] + [ "programs" "hyprland" "enableNvidiaPatches" ] + ) + ]; } diff --git a/pkgs/applications/window-managers/hyprwm/hyprland/default.nix b/pkgs/applications/window-managers/hyprwm/hyprland/default.nix index b6af6a34151ca..7d611d1f0d505 100644 --- a/pkgs/applications/window-managers/hyprwm/hyprland/default.nix +++ b/pkgs/applications/window-managers/hyprwm/hyprland/default.nix @@ -2,8 +2,10 @@ , stdenv , fetchFromGitHub , pkg-config +, makeWrapper , meson , ninja +, binutils , cairo , git , hyprland-protocols @@ -24,34 +26,35 @@ , xcbutilwm , xwayland , debug ? false +, enableNvidiaPatches ? false , enableXWayland ? true -, hidpiXWayland ? false , legacyRenderer ? false -, nvidiaPatches ? false , withSystemd ? true +, wrapRuntimeDeps ? true + # deprecated flags +, nvidiaPatches ? false +, hidpiXWayland ? false }: -let - assertXWayland = lib.assertMsg (hidpiXWayland -> enableXWayland) '' - Hyprland: cannot have hidpiXWayland when enableXWayland is false. - ''; -in -assert assertXWayland; +assert lib.assertMsg (!nvidiaPatches) "The option `nvidiaPatches` has been renamed `enableNvidiaPatches`"; +assert lib.assertMsg (!hidpiXWayland) "The option `hidpiXWayland` has been removed. Please refer https://wiki.hyprland.org/Configuring/XWayland"; stdenv.mkDerivation (finalAttrs: { pname = "hyprland" + lib.optionalString debug "-debug"; - version = "0.27.0"; + version = "unstable-2023-08-08"; src = fetchFromGitHub { owner = "hyprwm"; repo = finalAttrs.pname; - rev = "v${finalAttrs.version}"; - hash = "sha256-mEKF6Wcx+wSF/eos/91A7LxhFLDYhSnQnLpwZF13ntg="; + rev = "8e04a80e60983f5def26bdcaea701040fea9a7ae"; + hash = "sha256-5/vEdU3SzAdeIyPykjks/Zxkvh9luPTIei6oa77OY2Q="; }; patches = [ # make meson use the provided dependencies instead of the git submodules - "${finalAttrs.src}/nix/meson-build.patch" + "${finalAttrs.src}/nix/patches/meson-build.patch" # look into $XDG_DESKTOP_PORTAL_DIR instead of /usr; runtime checks for conflicting portals - "${finalAttrs.src}/nix/portals.patch" + # NOTE: revert back to the patch inside SRC on the next version bump + # "${finalAttrs.src}/nix/patches/portals.patch" + ./portals.patch ]; postPatch = '' @@ -64,6 +67,7 @@ stdenv.mkDerivation (finalAttrs: { nativeBuildInputs = [ jq + makeWrapper meson ninja pkg-config @@ -90,7 +94,7 @@ stdenv.mkDerivation (finalAttrs: { wayland-protocols pango pciutils - (wlroots.override { inherit enableXWayland hidpiXWayland nvidiaPatches; }) + (wlroots.override { inherit enableNvidiaPatches; }) ] ++ lib.optionals enableXWayland [ libxcb xcbutilwm xwayland ] ++ lib.optionals withSystemd [ systemd ]; @@ -106,6 +110,14 @@ stdenv.mkDerivation (finalAttrs: { (lib.optional withSystemd "-Dsystemd=enabled") ]; + postInstall = '' + ln -s ${wlroots}/include/wlr $dev/include/hyprland/wlroots + ${lib.optionalString wrapRuntimeDeps '' + wrapProgram $out/bin/Hyprland \ + --suffix PATH : ${lib.makeBinPath [binutils pciutils]} + ''} + ''; + passthru.providedSessions = [ "hyprland" ]; meta = with lib; { diff --git a/pkgs/applications/window-managers/hyprwm/hyprland/portals.patch b/pkgs/applications/window-managers/hyprwm/hyprland/portals.patch new file mode 100644 index 0000000000000..cb3d97c371cae --- /dev/null +++ b/pkgs/applications/window-managers/hyprwm/hyprland/portals.patch @@ -0,0 +1,28 @@ +diff --git a/src/Compositor.cpp b/src/Compositor.cpp +index 1d978aed..56665389 100644 +--- a/src/Compositor.cpp ++++ b/src/Compositor.cpp +@@ -2365,17 +2365,16 @@ void CCompositor::performUserChecks() { + + static auto* const PSUPPRESSPORTAL = &g_pConfigManager->getConfigValuePtr("misc:suppress_portal_warnings")->intValue; + +- if (!*PSUPPRESSPORTAL) { +- if (std::ranges::any_of(BAD_PORTALS, [&](const std::string& portal) { return std::filesystem::exists("/usr/share/xdg-desktop-portal/portals/" + portal + ".portal"); })) { ++ static auto* const PORTALDIRENV = getenv("XDG_DESKTOP_PORTAL_DIR"); ++ ++ static auto const PORTALDIR = PORTALDIRENV != NULL ? std::string(PORTALDIRENV) : ""; ++ ++ if (!*PSUPPRESSPORTAL && PORTALDIR != "") { ++ if (std::ranges::any_of(BAD_PORTALS, [&](const std::string& portal) { return std::filesystem::exists(PORTALDIR + "/" + portal + ".portal"); })) { + // bad portal detected + g_pHyprNotificationOverlay->addNotification("You have one or more incompatible xdg-desktop-portal impls installed. Please remove incompatible ones to avoid issues.", + CColor(0), 15000, ICON_ERROR); + } +- +- if (std::filesystem::exists("/usr/share/xdg-desktop-portal/portals/hyprland.portal") && std::filesystem::exists("/usr/share/xdg-desktop-portal/portals/wlr.portal")) { +- g_pHyprNotificationOverlay->addNotification("You have xdg-desktop-portal-hyprland and -wlr installed simultaneously. Please uninstall one to avoid issues.", CColor(0), +- 15000, ICON_ERROR); +- } + } + } + diff --git a/pkgs/applications/window-managers/hyprwm/hyprland/wlroots.nix b/pkgs/applications/window-managers/hyprwm/hyprland/wlroots.nix index e1d6bfc7e516f..7b44e9cf5212d 100644 --- a/pkgs/applications/window-managers/hyprwm/hyprland/wlroots.nix +++ b/pkgs/applications/window-managers/hyprwm/hyprland/wlroots.nix @@ -1,15 +1,11 @@ { fetchFromGitLab , hyprland , wlroots -, xwayland -, fetchpatch , lib , libdisplay-info , libliftoff , hwdata -, hidpiXWayland ? true -, enableXWayland ? true -, nvidiaPatches ? false +, enableNvidiaPatches ? false }: let libdisplay-info-new = libdisplay-info.overrideAttrs (old: { @@ -38,10 +34,7 @@ let ]; }); in -assert (lib.assertMsg (hidpiXWayland -> enableXWayland) '' - wlroots-hyprland: cannot have hidpiXWayland when enableXWayland is false. -''); -(wlroots.overrideAttrs +wlroots.overrideAttrs (old: { version = "0.17.0-dev"; @@ -49,65 +42,31 @@ assert (lib.assertMsg (hidpiXWayland -> enableXWayland) '' domain = "gitlab.freedesktop.org"; owner = "wlroots"; repo = "wlroots"; - rev = "7e7633abf09b362d0bad9e3fc650fd692369291d"; - hash = "sha256-KovjVFwcuoUO0eu/UiWrnD3+m/K+SHSAVIz4xF9K1XA="; + rev = "e8d545a9770a2473db32e0a0bfa757b05d2af4f3"; + hash = "sha256-gv5kjss6REeQG0BmvK2gTx7jHLRdCnP25po6It6I6N8="; }; pname = old.pname + "-hyprland" - + ( - if hidpiXWayland - then "-hidpi" - else "" - ) - + ( - if nvidiaPatches - then "-nvidia" - else "" - ); + + lib.optionalString enableNvidiaPatches "-nvidia"; patches = (old.patches or [ ]) - ++ (lib.optionals (enableXWayland && hidpiXWayland) [ - "${hyprland.src}/nix/wlroots-hidpi.patch" - (fetchpatch { - url = "https://gitlab.freedesktop.org/wlroots/wlroots/-/commit/18595000f3a21502fd60bf213122859cc348f9af.diff"; - sha256 = "sha256-jvfkAMh3gzkfuoRhB4E9T5X1Hu62wgUjj4tZkJm0mrI="; - revert = true; - }) - ]) - ++ (lib.optionals nvidiaPatches [ - (fetchpatch { - url = "https://aur.archlinux.org/cgit/aur.git/plain/0001-nvidia-format-workaround.patch?h=hyprland-nvidia-screenshare-git&id=2830d3017d7cdd240379b4cc7e5dd6a49cf3399a"; - sha256 = "A9f1p5EW++mGCaNq8w7ZJfeWmvTfUm4iO+1KDcnqYX8="; - }) + ++ (lib.optionals enableNvidiaPatches [ + "${hyprland.src}/nix/patches/nvidia.patch" ]); postPatch = (old.postPatch or "") + ( - if nvidiaPatches - then '' - substituteInPlace render/gles2/renderer.c --replace "glFlush();" "glFinish();" - '' - else "" + lib.optionalString enableNvidiaPatches + ''substituteInPlace render/gles2/renderer.c --replace "glFlush();" "glFinish();"'' ); - buildInputs = - old.buildInputs - ++ [ - hwdata - libdisplay-info-new - libliftoff-new - ]; - })).override { - xwayland = xwayland.overrideAttrs (old: { - patches = - (old.patches or [ ]) - ++ (lib.optionals hidpiXWayland [ - "${hyprland.src}/nix/xwayland-vsync.patch" - "${hyprland.src}/nix/xwayland-hidpi.patch" - ]); - }); -} + buildInputs = old.buildInputs ++ [ + hwdata + libdisplay-info-new + libliftoff-new + ]; + }) diff --git a/pkgs/applications/window-managers/hyprwm/hyprpaper/default.nix b/pkgs/applications/window-managers/hyprwm/hyprpaper/default.nix index f329c0ea7fbd3..32c2a8085d13e 100644 --- a/pkgs/applications/window-managers/hyprwm/hyprpaper/default.nix +++ b/pkgs/applications/window-managers/hyprwm/hyprpaper/default.nix @@ -2,6 +2,7 @@ , stdenv , fetchFromGitHub , cmake +, file , libjpeg , mesa , pango @@ -13,13 +14,13 @@ stdenv.mkDerivation (finalAttrs: { pname = "hyprpaper"; - version = "0.3.0"; + version = "0.4.0"; src = fetchFromGitHub { owner = "hyprwm"; repo = finalAttrs.pname; rev = "v${finalAttrs.version}"; - hash = "sha256-/ehJbAtSJS86NlqHVOeR2ViBKlImKH4guFVPacTmCr8="; + hash = "sha256-V5ulB9CkGh1ghiC4BKvRdoYKZzpaiOKzAOUmJIFkgM0="; }; nativeBuildInputs = [ @@ -29,6 +30,7 @@ stdenv.mkDerivation (finalAttrs: { ]; buildInputs = [ + file libjpeg mesa pango diff --git a/pkgs/applications/window-managers/hyprwm/xdg-desktop-portal-hyprland/source.nix b/pkgs/applications/window-managers/hyprwm/xdg-desktop-portal-hyprland/source.nix index 6b26f0eff4268..cb4c3efad1373 100644 --- a/pkgs/applications/window-managers/hyprwm/xdg-desktop-portal-hyprland/source.nix +++ b/pkgs/applications/window-managers/hyprwm/xdg-desktop-portal-hyprland/source.nix @@ -3,7 +3,7 @@ , wayland }: let - version = "0.4.0"; + version = "0.5.0"; in { inherit version; @@ -12,7 +12,7 @@ in owner = "hyprwm"; repo = "xdg-desktop-portal-hyprland"; rev = "v${version}"; - hash = "sha256-r+XMyOoRXq+hlfjayb+fyi9kq2JK48TrwuNIAXqlj7U="; + hash = "sha256-C5AO0KnyAFJaCkOn+5nJfWm0kyiPn/Awh0lKTjhgr7Y="; }; meta = with lib; { |