Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package hyprland for openSUSE:Factory checked in at 2026-01-26 11:00:58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/hyprland (Old) and /work/SRC/openSUSE:Factory/.hyprland.new.1928 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "hyprland" Mon Jan 26 11:00:58 2026 rev:46 rq:1329024 version:0.53.3 Changes: -------- --- /work/SRC/openSUSE:Factory/hyprland/hyprland.changes 2026-01-06 17:46:54.491362523 +0100 +++ /work/SRC/openSUSE:Factory/.hyprland.new.1928/hyprland.changes 2026-01-26 11:01:26.927771180 +0100 @@ -1,0 +2,38 @@ +Sat Jan 24 20:13:29 UTC 2026 - Florian "spirit" <[email protected]> + +- Update to version 0.53.3: + + This is a standard patch release backporting a few fixes from + main on top of 0.53.2. + + Fixes backported: + - hyprctl: remove trailing comma from json object + +------------------------------------------------------------------- +Fri Jan 23 15:27:33 UTC 2026 - Florian "spirit" <[email protected]> + +- Update to version 0.53.2: + + This is a standard patch release backporting a few fixes from + main on top of 0.53.1. + + Fixes backported: + - pluginsystem: fix crash when unloading plugin hyprctl commands + - testers: add missing #include <unistd.h> + - config: return windowrulev2 and layerrulev2 error messages + - start: add parent-desth handling for BSDs + - start: use nixGL if Hyprland is nix but not NixOS + - config: don't crash on permission with a config check + - desktop/reservedArea: clamp to 0 + - animationMgr: avoid uaf in ::tick() if handleUpdate destroys AV + - fix: handle fullscreen windows on special workspaces + - desktop/window: track explicit workspace assignments to prevent + X11 configure overwrites + - desktop/workspaceHistory: fix tracking for multiple monitors + - desktop/window: avoid uaf on instant removal of a window + - desktop/ruleApplicator: fix typo in border color rule parsing + - anr: remove window on closewindow + - hyprerror: clear reserved area on destroy + - animation: reset tick state on session activation + - desktop: restore invisible floating window alpha/opacity when + focused over fullscreen + +- Added "start_hyprland_no_nixgl.patch" + +------------------------------------------------------------------- Old: ---- hyprland-0.53.1.tar.xz New: ---- hyprland-0.53.3.tar.xz start_hyprland_no_nixgl.patch ----------(New B)---------- New: - Added "start_hyprland_no_nixgl.patch" ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ hyprland.spec ++++++ --- /var/tmp/diff_new_pack.EPWDWg/_old 2026-01-26 11:01:29.747888482 +0100 +++ /var/tmp/diff_new_pack.EPWDWg/_new 2026-01-26 11:01:29.751888649 +0100 @@ -2,7 +2,7 @@ # spec file for package hyprland # # Copyright (c) 2026 SUSE LLC and contributors -# Copyright (c) 2022-25 Florian "sp1rit" <[email protected]> +# Copyright (c) 2022-26 Florian "sp1rit" <[email protected]> # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -20,7 +20,7 @@ %define shortname hypr Name: hyprland -Version: 0.53.1 +Version: 0.53.3 Release: 0 Summary: Dynamic tiling Wayland compositor License: BSD-3-Clause @@ -28,6 +28,7 @@ Source0: %{name}-%{version}.tar.xz Source99: %{name}.rpmlintrc Patch0: disable-donation-nag-popup.patch +Patch1: start_hyprland_no_nixgl.patch BuildRequires: cmake BuildRequires: gcc-c++ >= 14 BuildRequires: git ++++++ hyprland-0.53.1.tar.xz -> hyprland-0.53.3.tar.xz ++++++ /work/SRC/openSUSE:Factory/hyprland/hyprland-0.53.1.tar.xz /work/SRC/openSUSE:Factory/.hyprland.new.1928/hyprland-0.53.3.tar.xz differ: char 15, line 1 ++++++ start_hyprland_no_nixgl.patch ++++++ >From 9af8b97f52bd35ae3cd911f4d8c18b70a38babe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20=22sp1rit=22=E2=80=8B?= <[email protected]> Date: Fri, 23 Jan 2026 16:42:37 +0100 Subject: [PATCH] start: drop support for nix-gl handling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit we do not need it and it breaks with our libglaze Signed-off-by: Florian "sp1rit" <[email protected]> --- start/src/core/Instance.cpp | 8 +-- start/src/core/State.hpp | 1 - start/src/helpers/Nix.cpp | 110 ------------------------------------ start/src/helpers/Nix.hpp | 9 --- start/src/main.cpp | 12 ---- 5 files changed, 1 insertion(+), 139 deletions(-) delete mode 100644 start/src/helpers/Nix.cpp delete mode 100644 start/src/helpers/Nix.hpp diff --git a/start/src/core/Instance.cpp b/start/src/core/Instance.cpp index 2f5007bd..ec56cc75 100644 --- a/start/src/core/Instance.cpp +++ b/start/src/core/Instance.cpp @@ -1,7 +1,6 @@ #include "Instance.hpp" #include "State.hpp" #include "../helpers/Logger.hpp" -#include "../helpers/Nix.hpp" #include <cstdlib> #include <cstring> @@ -55,12 +54,7 @@ void CHyprlandInstance::runHyprlandThread(bool safeMode) { procctl(P_PID, getpid(), PROC_PDEATHSIG_CTL, &sig); #endif - if (Nix::shouldUseNixGL()) { - argsStd.insert(argsStd.begin(), g_state->customPath.value_or("Hyprland")); - args.insert(args.begin(), strdup(argsStd.front().c_str())); - execvp("nixGL", args.data()); - } else - execvp(g_state->customPath.value_or("Hyprland").c_str(), args.data()); + execvp(g_state->customPath.value_or("Hyprland").c_str(), args.data()); g_logger->log(Hyprutils::CLI::LOG_ERR, "fork(): execvp failed: {}", strerror(errno)); std::fflush(stdout); diff --git a/start/src/core/State.hpp b/start/src/core/State.hpp index d00a1757..6cf73a96 100644 --- a/start/src/core/State.hpp +++ b/start/src/core/State.hpp @@ -8,7 +8,6 @@ struct SState { std::span<const char*> rawArgvNoBinPath; std::optional<std::string> customPath; - bool noNixGl = false; }; inline UP<SState> g_state = makeUnique<SState>(); \ No newline at end of file diff --git a/start/src/helpers/Nix.cpp b/start/src/helpers/Nix.cpp deleted file mode 100644 index 07cd2a4a..00000000 --- a/start/src/helpers/Nix.cpp +++ /dev/null @@ -1,110 +0,0 @@ -#include "Nix.hpp" - -#include "Logger.hpp" -#include "../core/State.hpp" - -#include <filesystem> -#include <algorithm> -#include <hyprutils/string/VarList2.hpp> -#include <hyprutils/string/String.hpp> -#include <hyprutils/os/Process.hpp> -#include <hyprutils/os/File.hpp> - -#include <glaze/glaze.hpp> - -using namespace Hyprutils::String; -using namespace Hyprutils::OS; - -using namespace Hyprutils::File; - -static std::optional<std::string> getFromEtcOsRelease(const std::string_view& sv) { - static std::string content = ""; - static bool once = true; - - if (once) { - once = false; - - auto read = readFileAsString("/etc/os-release"); - content = read.value_or(""); - } - - static CVarList2 vars(std::move(content), 0, '\n', true); - - for (const auto& v : vars) { - if (v.starts_with(sv) && v.contains('=')) { - // found - auto value = trim(v.substr(v.find('=') + 1)); - - if (value.back() == value.front() && value.back() == '"') - value = value.substr(1, value.size() - 2); - - return std::string{value}; - } - } - - return std::nullopt; -} - -static bool executableExistsInPath(const std::string& exe) { - const char* PATHENV = std::getenv("PATH"); - if (!PATHENV) - return false; - - CVarList2 paths(PATHENV, 0, ':', true); - std::error_code ec; - - for (const auto& PATH : paths) { - std::filesystem::path candidate = std::filesystem::path(PATH) / exe; - if (!std::filesystem::exists(candidate, ec) || ec) - continue; - if (!std::filesystem::is_regular_file(candidate, ec) || ec) - continue; - auto perms = std::filesystem::status(candidate, ec).permissions(); - if (ec) - continue; - if ((perms & std::filesystem::perms::others_exec) != std::filesystem::perms::none) - return true; - } - - return false; -} - -std::expected<void, std::string> Nix::nixEnvironmentOk() { - if (!shouldUseNixGL()) - return {}; - - if (!executableExistsInPath("nixGL")) - return std::unexpected( - "Hyprland was installed using Nix, but you're not on NixOS. This requires nixGL to be installed as well.\nYou can install nixGL by running \"nix profile install " - "github:guibou/nixGL --impure\" in your terminal."); - - return {}; -} - -bool Nix::shouldUseNixGL() { - if (g_state->noNixGl) - return false; - - // check if installed hyprland is nix'd - CProcess proc("Hyprland", {"--version-json"}); - if (!proc.runSync()) { - g_logger->log(Hyprutils::CLI::LOG_ERR, "failed to obtain hyprland version string"); - return false; - } - - auto json = glz::read_json<glz::generic>(proc.stdOut()); - if (!json) { - g_logger->log(Hyprutils::CLI::LOG_ERR, "failed to obtain hyprland version string (bad json)"); - return false; - } - - const auto FLAGS = (*json)["flags"].get_array(); - const bool IS_NIX = std::ranges::any_of(FLAGS, [](const auto& e) { return e.get_string() == std::string_view{"nix"}; }); - - if (IS_NIX) { - const auto NAME = getFromEtcOsRelease("NAME"); - return !NAME || *NAME != "NixOS"; - } - - return false; -} diff --git a/start/src/helpers/Nix.hpp b/start/src/helpers/Nix.hpp deleted file mode 100644 index edc01b19..00000000 --- a/start/src/helpers/Nix.hpp +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -#include <expected> -#include <string> - -namespace Nix { - std::expected<void, std::string> nixEnvironmentOk(); - bool shouldUseNixGL(); -}; \ No newline at end of file diff --git a/start/src/main.cpp b/start/src/main.cpp index e73fcfa5..8a408b2b 100644 --- a/start/src/main.cpp +++ b/start/src/main.cpp @@ -3,7 +3,6 @@ #include <print> #include "helpers/Logger.hpp" -#include "helpers/Nix.hpp" #include "core/State.hpp" #include "core/Instance.hpp" @@ -21,7 +20,6 @@ Any arguments after -- are passed to Hyprland. For Hyprland help, run start-hypr Additional arguments for start-hyprland: --path [path] -> Override Hyprland path - --no-nixgl -> Force disable nixGL )#"; // @@ -76,7 +74,6 @@ int main(int argc, const char** argv, const char** envp) { continue; } if (arg == "--no-nixgl") { - g_state->noNixGl = true; continue; } } @@ -87,15 +84,6 @@ int main(int argc, const char** argv, const char** envp) { if (!g_state->rawArgvNoBinPath.empty()) g_logger->log(Hyprutils::CLI::LOG_WARN, "Arguments after -- are passed to Hyprland"); - // check if our environment is OK - if (const auto RET = Nix::nixEnvironmentOk(); !RET) { - g_logger->log(Hyprutils::CLI::LOG_ERR, "Nix environment check failed:\n{}", RET.error()); - return 1; - } - - if (Nix::shouldUseNixGL()) - g_logger->log(Hyprutils::CLI::LOG_DEBUG, "Hyprland was compiled with Nix - will use nixGL"); - bool safeMode = false; while (true) { g_instance = makeUnique<CHyprlandInstance>(); -- 2.50.1
