%global hyprland_commit 7d3a817ffbf1d2df9ef6cf44d0795874a46ace3d %global hyprland_shortcommit %(c=%{hyprland_commit}; echo ${c:0:7}) %global bumpver 66 %global commits_count 7835 %global commit_date Tue Sep 29 17:28:13 2026 %global protocols_commit cc9a8fd253bdc00f48a967ecf4828211ef08751f %global protocols_shortcommit %(c=%{protocols_commit}; echo ${c:0:7}) %global udis86_commit 5336633af70f3917760a6d441ff02d93477b0c86 %global udis86_shortcommit %(c=%{udis86_commit}; echo ${c:0:7}) %global libxkbcommon_version 1.11.0 Name: hyprland-git Version: 0.56.2%{?bumpver:^%{bumpver}.git%{hyprland_shortcommit}} Release: 2%{?dist} %define debug_package %{nil} Summary: Dynamic tiling Wayland compositor that doesn't sacrifice on its looks # hyprland: BSD-3-Clause # subprojects/hyprland-protocols: BSD-3-Clause # subproject/udis86: BSD-2-Clause # protocols/ext-workspace-unstable-v1.xml: HPND-sell-variant # protocols/wlr-foreign-toplevel-management-unstable-v1.xml: HPND-sell-variant # protocols/wlr-layer-shell-unstable-v1.xml: HPND-sell-variant # protocols/idle.xml: LGPL-2.1-or-later License: BSD-3-Clause AND BSD-2-Clause AND HPND-sell-variant AND LGPL-2.1-or-later URL: https://github.com/hyprwm/Hyprland Source0: %{url}/archive/%{hyprland_commit}/%{name}-%{hyprland_shortcommit}.tar.gz Source2: https://github.com/hyprwm/hyprland-protocols/archive/%{protocols_commit}/protocols-%{protocols_shortcommit}.tar.gz Source3: https://github.com/canihavesomecoffee/udis86/archive/%{udis86_commit}/udis86-%{udis86_shortcommit}.tar.gz Source4: macros.hyprland BuildRequires: cmake BuildRequires: gcc-c++ BuildRequires: meson # CMakeLists pins glaze 7.2.0 via FetchContent when the buildroot's glaze # is newer, and FetchContent clones with git BuildRequires: git-core BuildRequires: muParser-devel BuildRequires: glaze-static BuildRequires: pkgconfig(aquamarine) BuildRequires: pkgconfig(cairo) BuildRequires: pkgconfig(egl) BuildRequires: pkgconfig(gbm) BuildRequires: pkgconfig(gio-2.0) BuildRequires: pkgconfig(glesv2) BuildRequires: pkgconfig(glslang) BuildRequires: pkgconfig(hwdata) BuildRequires: pkgconfig(hyprcursor) BuildRequires: pkgconfig(hyprgraphics) BuildRequires: pkgconfig(hyprlang) BuildRequires: pkgconfig(hyprutils) BuildRequires: pkgconfig(hyprwayland-scanner) BuildRequires: pkgconfig(hyprwire) BuildRequires: pkgconfig(lcms2) BuildRequires: pkgconfig(libcanberra) BuildRequires: pkgconfig(libdisplay-info) BuildRequires: pkgconfig(libdrm) BuildRequires: pkgconfig(libeis-1.0) BuildRequires: pkgconfig(libinput) >= 1.28 BuildRequires: pkgconfig(libliftoff) BuildRequires: pkgconfig(libseat) BuildRequires: pkgconfig(libudev) BuildRequires: pkgconfig(lua) BuildRequires: pkgconfig(pango) BuildRequires: pkgconfig(pangocairo) BuildRequires: pkgconfig(pixman-1) BuildRequires: pkgconfig(re2) BuildRequires: pkgconfig(readline) BuildRequires: pkgconfig(sdbus-c++) BuildRequires: pkgconfig(systemd) BuildRequires: pkgconfig(tomlplusplus) BuildRequires: pkgconfig(uuid) BuildRequires: pkgconfig(wayland-client) BuildRequires: pkgconfig(wayland-protocols) >= 1.45 BuildRequires: pkgconfig(wayland-scanner) BuildRequires: pkgconfig(wayland-server) BuildRequires: pkgconfig(xcb-composite) BuildRequires: pkgconfig(xcb-dri3) BuildRequires: pkgconfig(xcb-errors) BuildRequires: pkgconfig(xcb-ewmh) BuildRequires: pkgconfig(xcb-icccm) BuildRequires: pkgconfig(xcb-present) BuildRequires: pkgconfig(xcb-render) BuildRequires: pkgconfig(xcb-renderutil) BuildRequires: pkgconfig(xcb-res) BuildRequires: pkgconfig(xcb-shm) BuildRequires: pkgconfig(xcb-util) BuildRequires: pkgconfig(xcb-xfixes) BuildRequires: pkgconfig(xcb-xinput) BuildRequires: pkgconfig(xcb) BuildRequires: pkgconfig(xcursor) BuildRequires: pkgconfig(xkbcommon) BuildRequires: pkgconfig(xwayland) %if 0%{?rhel} == 10 BuildRequires: gcc-toolset-15 BuildRequires: gcc-toolset-15-gcc-c++ BuildRequires: gcc-toolset-15-annobin-plugin-gcc %endif # udis86 is packaged in Fedora, but the copy bundled here is actually a # modified fork. Provides: bundled(udis86) = 1.7.2^1.%{udis86_shortcommit} Requires: xorg-x11-server-Xwayland%{?_isa} Requires: aquamarine%{?_isa} >= 0.9.2 Requires: hyprcursor%{?_isa} >= 0.1.13 Requires: hyprgraphics%{?_isa} >= 0.1.6 Requires: hyprlang%{?_isa} >= 0.6.3 Requires: hyprutils%{?_isa} >= 0.8.4 %{lua:do if string.match(rpm.expand('%{name}'), '%-git$') then print('Conflicts: hyprland'..'\n') print('Obsoletes: hyprland-nvidia-git < 0.32.3^30.gitad3f688-2'..'\n') print(rpm.expand('Provides: hyprland-nvidia-git = %{version}-%{release}')..'\n') print('Obsoletes: hyprland-aquamarine-git < 0.41.2^20.git4b84029-2'..'\n') elseif not string.match(rpm.expand('%{name}'), 'hyprland$') then print(rpm.expand('Provides: hyprland = %{version}-%{release}')..'\n') print('Conflicts: hyprland'..'\n') else print('Obsoletes: hyprland-nvidia < 1:0.32.3-2'..'\n') print(rpm.expand('Provides: hyprland-nvidia = %{version}-%{release}')..'\n') print('Obsoletes: hyprland-legacyrenderer < 0.49.0'..'\n') end end} # Used in the default configuration Recommends: kitty Recommends: wofi Recommends: playerctl Recommends: brightnessctl Recommends: hyprland-guiutils # Lack of graphical drivers may hurt the common use case Recommends: mesa-dri-drivers # Logind needs polkit to create a graphical session Recommends: polkit # https://wiki.hyprland.org/Useful-Utilities/Systemd-start Recommends: %{name}-uwsm Recommends: (qt5-qtwayland if qt5-qtbase-gui) Recommends: (qt6-qtwayland if qt6-qtbase-gui) %description Hyprland is a dynamic tiling Wayland compositor that doesn't sacrifice on its looks. It supports multiple layouts, fancy effects, has a very flexible IPC model allowing for a lot of customization, a powerful plugin system and more. %package uwsm Summary: Files for a uwsm-managed session Requires: uwsm %description uwsm Files for a uwsm-managed session. %package devel Summary: Header and protocol files for %{name} License: BSD-3-Clause Requires: %{name}%{?_isa} = %{version}-%{release} Requires: cpio %{lua:do if string.match(rpm.expand('%{name}'), 'hyprland%-git$') then print('Conflicts: hyprland-devel'..'\n') print('Obsoletes: hyprland-nvidia-git-devel < 0.32.3^30.gitad3f688-2'..'\n') print(rpm.expand('Provides: hyprland-nvidia-git-devel = %{version}-%{release}')..'\n') print('Obsoletes: hyprland-aquamarine-git-devel < 0.41.2^20.git4b84029-2'..'\n') elseif string.match(rpm.expand('%{name}'), 'hyprland$') then print('Obsoletes: hyprland-nvidia-devel < 1:0.32.3-2'..'\n') print(rpm.expand('Provides: hyprland-nvidia-devel = %{version}-%{release}')..'\n') print('Obsoletes: hyprland-legacyrenderer-devel < 0.49.0'..'\n') end end} Requires: git-core Requires: pkgconfig(aquamarine) Requires: pkgconfig(cairo) Requires: pkgconfig(hyprcursor) Requires: pkgconfig(hyprgraphics) Requires: pkgconfig(hyprlang) Requires: pkgconfig(hyprutils) Requires: pkgconfig(pixman-1) Requires: pkgconfig(wayland-client) Requires: pkgconfig(xkbcommon) %description devel %{summary}. %prep %autosetup -n Hyprland-%{hyprland_commit} -N # Fedora names it lua.pc . The correct version is ensured in the BuildRequires section sed -i 's/lua55/lua/g' CMakeLists.txt %if 0%{?fedora} == 43 sed -i 's/\.subview(/ .substr(/g' src/ipc/s1/S1.cpp sed -i '/return (.* || std::ranges::starts_with(str_view, prefixes));/c\ auto check = [&](auto prefix) { return std::string(str_view.begin(), str_view.end()).starts_with(prefix); };\ return (... || check(prefixes));' src/helpers/MiscFunctions.cpp %endif tar -xf %{SOURCE2} -C subprojects/hyprland-protocols --strip=1 tar -xf %{SOURCE3} -C subprojects/udis86 --strip=1 sed -e '/GIT_COMMIT_HASH/s/unknown/%{hyprland_commit}/' \ -e '/GIT_BRANCH/s/unknown/main/' \ -e '/GIT_COMMIT_DATE/s/unknown/%{commit_date}/' \ -e '/GIT_TAG/s/unknown/%{lua:print((rpm.expand("%{version}"):gsub("[%^~].*", "")))}/' \ -e '/GIT_DIRTY/s/unknown/clean/' \ -e '/GIT_COMMITS/s/0/%{commits_count}/' \ -i CMakeLists.txt cp -p subprojects/hyprland-protocols/LICENSE LICENSE-hyprland-protocols cp -p subprojects/udis86/LICENSE LICENSE-udis86 sed -i \ -e "s|@@HYPRLAND_VERSION@@|%{version}|g" \ %{SOURCE4} %build %if 0%{?rhel} == 10 source /usr/lib/gcc-toolset/15-env.source %endif %cmake \ -GNinja \ -DCMAKE_BUILD_TYPE=Release \ -DNO_TESTS=TRUE \ -DBUILD_TESTING=FALSE %cmake_build %install %if 0%{?rhel} == 10 source /usr/lib/gcc-toolset/15-env.source %endif %cmake_install install -Dpm644 %{SOURCE4} -t %{buildroot}%{_rpmconfigdir}/macros.d # upstream CMake installs the session target into lib64/systemd/user (its # LIBDIR default) — a directory systemd never searches on Fedora (Arch uses # plain lib, where the same install lands correctly) — move it to the real # user unit dir, or the target would sit dead in the filesystem mkdir -p %{buildroot}%{_userunitdir} mv %{buildroot}%{_libdir}/systemd/user/hyprland-session.target \ %{buildroot}%{_userunitdir}/hyprland-session.target # upstream's lowercase compat name for the binary is created as an absolute # symlink; rpm's file check rejects absolute symlinks inside one package — # recreate it relative (same directory) ln -sf Hyprland %{buildroot}%{_bindir}/hyprland %files %license LICENSE LICENSE-udis86 LICENSE-hyprland-protocols %{_bindir}/[Hh]yprland %{_bindir}/hyprctl %{_bindir}/hyprpm %{_bindir}/start-hyprland %{_datadir}/hypr/ %{_datadir}/wayland-sessions/hyprland.desktop %{_datadir}/xdg-desktop-portal/hyprland-portals.conf %{_userunitdir}/hyprland-session.target %{_mandir}/man1/hyprctl.1* %{_mandir}/man1/Hyprland.1* %{bash_completions_dir}/hypr* %{fish_completions_dir}/hypr*.fish %{zsh_completions_dir}/_hypr* %files uwsm %{_datadir}/wayland-sessions/hyprland-uwsm.desktop %files devel %{_datadir}/pkgconfig/hyprland.pc %{_includedir}/hyprland/ %{_rpmconfigdir}/macros.d/macros.hyprland %changelog * Sun Sep 27 2026 ahsan - 0.56.2^64.git9a1ea29-2 - fix the Copr check-files failures: claim hyprland-session.target (upstream CMake installs it under lib64/systemd/user, which systemd never searches on Fedora — moved to the user unit dir) and make the lowercase hyprland compat symlink relative (rpm rejects absolute symlinks inside one package) * Sun Sep 27 2026 halcyon-autoupdate - 0.56.2^64.git9a1ea29-1 - switch to hyprland-git snapshot tracking main branch * Wed Sep 23 2026 halcyon-autobump - converted to an explicit Release and changelog for the anda build