From 4036c37e5578d9d8558bacbf590becc09c7d51b2 Mon Sep 17 00:00:00 2001 From: Mihai Fufezan Date: Mon, 15 Dec 2025 17:59:08 +0200 Subject: [PATCH 1/3] hyprctl: add nix flag (#12653) --- CMakeLists.txt | 4 ++++ nix/default.nix | 1 + src/debug/HyprCtl.cpp | 8 +++++++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a192a6942..d3af715d3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -321,6 +321,10 @@ if(CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES DEBUG) endif() endif() +if(BUILT_WITH_NIX) + add_compile_definitions(BUILT_WITH_NIX) +endif() + check_include_file("execinfo.h" EXECINFOH) if(EXECINFOH) message(STATUS "Configuration supports execinfo") diff --git a/nix/default.nix b/nix/default.nix index 27ecdf604..dc9c0bb13 100644 --- a/nix/default.nix +++ b/nix/default.nix @@ -192,6 +192,7 @@ in dontStrip = debug; cmakeFlags = mapAttrsToList cmakeBool { + "BUILT_WITH_NIX" = true; "NO_XWAYLAND" = !enableXWayland; "LEGACY_RENDERER" = legacyRenderer; "NO_SYSTEMD" = !withSystemd; diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index ad7f592c5..5e21d6992 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -1067,7 +1067,7 @@ std::string versionRequest(eHyprCtlOutputFormat format, std::string request) { result += __hyprland_api_get_hash(); result += "\n"; -#if (!ISDEBUG && !defined(NO_XWAYLAND)) +#if (!ISDEBUG && !defined(NO_XWAYLAND) && !defined(BUILT_WITH_NIX)) result += "no flags were set\n"; #else result += "flags set:\n"; @@ -1077,6 +1077,9 @@ std::string versionRequest(eHyprCtlOutputFormat format, std::string request) { #ifdef NO_XWAYLAND result += "no xwayland\n"; #endif +#ifdef BUILT_WITH_NIX + result += "nix\n"; +#endif #endif return result; } else { @@ -1113,6 +1116,9 @@ std::string versionRequest(eHyprCtlOutputFormat format, std::string request) { #ifdef NO_XWAYLAND result += "\"no xwayland\","; #endif +#ifdef BUILT_WITH_NIX + result += "\"nix\","; +#endif trimTrailingComma(result); From 6b491e4d6ba12598b82363c4c5cbcc26a2a06ae6 Mon Sep 17 00:00:00 2001 From: Mason Davy <54364725+Nosamdaman@users.noreply.github.com> Date: Mon, 15 Dec 2025 16:37:48 -0500 Subject: [PATCH 2/3] core/compositor: remove a monitor reset on cleanup (#12645) I've tested this change with different modes from the monitor default and validated that dpms still works, at least on my machine. If there's a good reason why this exists, feel free to correct me, but this helps get us closer to a flicker-free experience. --- src/Compositor.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 3c67979f7..0eabed055 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -574,9 +574,6 @@ void CCompositor::cleanup() { for (auto const& m : m_monitors) { g_pHyprOpenGL->destroyMonitorResources(m); - - m->m_output->state->setEnabled(false); - m->m_state.commit(); } g_pXWayland.reset(); From 6e09eb2e6cc1744687f158f2a576de844be59f4e Mon Sep 17 00:00:00 2001 From: Lichie <90825386+lichie567@users.noreply.github.com> Date: Mon, 15 Dec 2025 14:19:13 -0800 Subject: [PATCH 3/3] desktop/windowRules: fix disabling binary window rules with override (#12635) --- .../rule/windowRule/WindowRuleApplicator.hpp | 11 +++++------ src/desktop/view/Window.cpp | 19 ++++++------------- 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/src/desktop/rule/windowRule/WindowRuleApplicator.hpp b/src/desktop/rule/windowRule/WindowRuleApplicator.hpp index ba80e17b5..272cefe5f 100644 --- a/src/desktop/rule/windowRule/WindowRuleApplicator.hpp +++ b/src/desktop/rule/windowRule/WindowRuleApplicator.hpp @@ -41,12 +41,11 @@ namespace Desktop::Rule { std::string monitor, workspace, group; std::optional floating; - - bool fullscreen = false; - bool maximize = false; - bool pseudo = false; - bool pin = false; - bool noInitialFocus = false; + std::optional fullscreen; + std::optional maximize; + std::optional pseudo; + std::optional pin; + std::optional noInitialFocus; std::optional fullscreenStateClient; std::optional fullscreenStateInternal; diff --git a/src/desktop/view/Window.cpp b/src/desktop/view/Window.cpp index 2fc15566a..0eadc3262 100644 --- a/src/desktop/view/Window.cpp +++ b/src/desktop/view/Window.cpp @@ -2047,14 +2047,10 @@ void CWindow::mapWindow() { requestedFSMonitor = MONITOR_INVALID; } - if (m_ruleApplicator->static_.floating.has_value()) - m_isFloating = m_ruleApplicator->static_.floating.value(); - - if (m_ruleApplicator->static_.pseudo) - m_isPseudotiled = true; - - if (m_ruleApplicator->static_.noInitialFocus) - m_noInitialFocus = true; + m_isFloating = m_ruleApplicator->static_.floating.value_or(m_isFloating); + m_isPseudotiled = m_ruleApplicator->static_.pseudo.value_or(m_isPseudotiled); + m_noInitialFocus = m_ruleApplicator->static_.noInitialFocus.value_or(m_noInitialFocus); + m_pinned = m_ruleApplicator->static_.pin.value_or(m_pinned); if (m_ruleApplicator->static_.fullscreenStateClient || m_ruleApplicator->static_.fullscreenStateInternal) { requestedFSState = Desktop::View::SFullscreenState{ @@ -2080,13 +2076,10 @@ void CWindow::mapWindow() { } } - if (m_ruleApplicator->static_.pin) - m_pinned = true; - - if (m_ruleApplicator->static_.fullscreen) + if (m_ruleApplicator->static_.fullscreen.value_or(false)) requestedInternalFSMode = FSMODE_FULLSCREEN; - if (m_ruleApplicator->static_.maximize) + if (m_ruleApplicator->static_.maximize.value_or(false)) requestedInternalFSMode = FSMODE_MAXIMIZED; if (!m_ruleApplicator->static_.group.empty()) {