From d49c2eccc95641cee5967a12aeb2abd0d18ca082 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 26 Oct 2026 23:58:34 +0000 Subject: [PATCH 1/4] pkg: consolidate pending package upgrades Rolls the latest version from each open package-update PR into one change so COPR builds a single consistent set. Bumps: aquamarine 0.15.1, bluetui 0.8.2, hyprland 0.56.2, hyprland-protocols 0.8.0, hyprpolkitagent 0.2.0, hyprtoolkit 0.6.0, hyprutils 0.14.3, iamb 0.13.1, lazygit 0.66.2, lazysql 0.7.0, lua55 5.5.1, quickshell 0.3.2, resterm 1.16.1, resvg 0.49.0, starship 1.27.0, uwsm 0.27.1, yazi 26.9.1, zellij 0.45.1. Fixes the bot bumps would have missed: - aquamarine: SONAME 13 -> 14 in %files - hyprtoolkit: SONAME 5 -> 6 in %files, add abseil BuildRequires - hyprpaper, hyprland-guiutils: release bump to rebuild against the new aquamarine/hyprtoolkit SONAMEs - hyprpolkitagent 0.2.0 is a hyprtoolkit rewrite: drop Qt deps, bundle static sdbus-cpp like hypridle, require polkit for the helper - lua55: drop 5.5.0 bug1/bug2 patches, both fixed upstream in 5.5.1 - iamb/yazi/starship: raise rust BuildRequires to upstream MSRV glaze stays on 7.9.1: Hyprland 0.56 requires glaze 7.x (find_package(glaze 7...<8)). Add VERSION_PINS to the version checker so it stops opening glaze 8/9 PRs. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_015S2eLxUcy5sGRvu1X8TmFk --- packages/aquamarine/aquamarine.spec | 7 ++- packages/bluetui/bluetui.spec | 4 +- .../hyprland-guiutils/hyprland-guiutils.spec | 4 +- .../hyprland-protocols.spec | 4 +- packages/hyprland/hyprland.spec | 4 +- packages/hyprpaper/hyprpaper.spec | 4 +- packages/hyprpolkitagent/hyprpolkitagent.spec | 45 ++++++++++++++----- packages/hyprtoolkit/hyprtoolkit.spec | 12 +++-- packages/hyprutils/hyprutils.spec | 4 +- packages/iamb/iamb.spec | 8 ++-- packages/lazygit/lazygit.spec | 4 +- packages/lazysql/lazysql.spec | 4 +- packages/lua55/lua-5.5.0-bug1.patch | 12 ----- packages/lua55/lua-5.5.0-bug2.patch | 12 ----- packages/lua55/lua55.spec | 12 ++--- packages/quickshell/quickshell.spec | 6 ++- packages/resterm/resterm.spec | 4 +- packages/resvg/resvg.spec | 4 +- packages/starship/starship.spec | 8 ++-- packages/uwsm/uwsm.spec | 4 +- packages/yazi/yazi.spec | 8 ++-- packages/zellij/zellij.spec | 6 ++- scripts/packages/config.sh | 14 ++++-- scripts/packages/get-upstream-version.sh | 13 +++++- 24 files changed, 130 insertions(+), 77 deletions(-) delete mode 100644 packages/lua55/lua-5.5.0-bug1.patch delete mode 100644 packages/lua55/lua-5.5.0-bug2.patch diff --git a/packages/aquamarine/aquamarine.spec b/packages/aquamarine/aquamarine.spec index d0786eca..0fa6c415 100644 --- a/packages/aquamarine/aquamarine.spec +++ b/packages/aquamarine/aquamarine.spec @@ -1,5 +1,5 @@ Name: aquamarine -Version: 0.14.0 +Version: 0.15.1 Release: 1%{?dist} Summary: A very light linux rendering backend library @@ -49,7 +49,7 @@ Development files for %{name}. %license LICENSE %doc README.md %{_libdir}/lib%{name}.so.%{version} -%{_libdir}/lib%{name}.so.13 +%{_libdir}/lib%{name}.so.14 %files devel %{_includedir}/%{name}/ @@ -57,6 +57,9 @@ Development files for %{name}. %{_libdir}/pkgconfig/%{name}.pc %changelog +* Fri Oct 23 2026 Hypercube - 0.15.1-1 +- Update to 0.15.1 +- libaquamarine SONAME 13 -> 14 * Tue Jul 28 2026 Hypercube - 0.14.0-1 - Update to 0.14.0 - Bump SONAME from 12 to 13 to match 0.14.0 diff --git a/packages/bluetui/bluetui.spec b/packages/bluetui/bluetui.spec index 6b4aa17f..21f0dbdd 100644 --- a/packages/bluetui/bluetui.spec +++ b/packages/bluetui/bluetui.spec @@ -4,7 +4,7 @@ %global debug_package %{nil} Name: bluetui -Version: 0.8.1 +Version: 0.8.2 Release: 1%{?dist} Summary: TUI for managing Bluetooth devices @@ -39,5 +39,7 @@ install -Dpm 0755 target/release/bluetui %{buildroot}%{_bindir}/bluetui %{_bindir}/bluetui %changelog +* Thu Oct 08 2026 Hypercube - 0.8.2-1 +- Update to 0.8.2 * Thu Jan 30 2026 Hypercube - 0.8.1-1 - Initial package for Hypercube diff --git a/packages/hyprland-guiutils/hyprland-guiutils.spec b/packages/hyprland-guiutils/hyprland-guiutils.spec index 469b680b..285f667a 100644 --- a/packages/hyprland-guiutils/hyprland-guiutils.spec +++ b/packages/hyprland-guiutils/hyprland-guiutils.spec @@ -1,6 +1,6 @@ Name: hyprland-guiutils Version: 0.2.2 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Hyprland GUI utilities (successor to hyprland-qtutils) License: BSD-3-Clause @@ -55,6 +55,8 @@ and welcome. %{_bindir}/hyprland-welcome %changelog +* Mon Oct 26 2026 Hypercube - 0.2.2-3 +- Rebuild against aquamarine 0.15.1 (SONAME 13 -> 14) and hyprtoolkit 0.6.0 (SONAME 5 -> 6) * Sun Aug 23 2026 Hypercube - 0.2.2-2 - Rebuild against hyprtoolkit 0.5.4-2 / hyprutils 0.14.1 / aquamarine 0.14.0 * Tue Jul 21 2026 Hypercube - 0.2.2-1 diff --git a/packages/hyprland-protocols/hyprland-protocols.spec b/packages/hyprland-protocols/hyprland-protocols.spec index 4aa901f8..6f333a6e 100644 --- a/packages/hyprland-protocols/hyprland-protocols.spec +++ b/packages/hyprland-protocols/hyprland-protocols.spec @@ -1,5 +1,5 @@ Name: hyprland-protocols -Version: 0.7.0 +Version: 0.8.0 Release: 1%{?dist} Summary: Wayland protocol extensions for Hyprland BuildArch: noarch @@ -36,5 +36,7 @@ Summary: Wayland protocol extensions for Hyprland %{_datadir}/%{name}/ %changelog +* Sat Oct 17 2026 Hypercube - 0.8.0-1 +- Update to 0.8.0 * Mon Dec 16 2024 Hypercube - 0.7.0-1 - Initial package for Hypercube (based on sdegler/hyprland COPR) diff --git a/packages/hyprland/hyprland.spec b/packages/hyprland/hyprland.spec index 39d52c28..d622fe79 100644 --- a/packages/hyprland/hyprland.spec +++ b/packages/hyprland/hyprland.spec @@ -1,5 +1,5 @@ Name: hyprland -Version: 0.56.1 +Version: 0.56.2 Release: 1%{?dist} Summary: Dynamic tiling Wayland compositor that doesn't sacrifice on its looks @@ -158,6 +158,8 @@ cp -p subprojects/udis86/LICENSE LICENSE-udis86 %{_includedir}/hyprland/ %changelog +* Fri Oct 23 2026 Hypercube - 0.56.2-1 +- Update to 0.56.2 * Tue Jul 28 2026 Hypercube - 0.56.1-1 - Update to 0.56.1 * Tue Jul 21 2026 Hypercube - 0.56.0-1 diff --git a/packages/hyprpaper/hyprpaper.spec b/packages/hyprpaper/hyprpaper.spec index c9f83c7e..294ca19e 100644 --- a/packages/hyprpaper/hyprpaper.spec +++ b/packages/hyprpaper/hyprpaper.spec @@ -1,6 +1,6 @@ Name: hyprpaper Version: 0.8.4 -Release: 3%{?dist} +Release: 4%{?dist} Summary: Blazing fast wayland wallpaper utility with IPC controls License: BSD-3-Clause AND HPND-sell-variant @@ -56,6 +56,8 @@ wlroots-based compositors, though. %{_userunitdir}/%{name}.service %changelog +* Mon Oct 26 2026 Hypercube - 0.8.4-4 +- Rebuild against aquamarine 0.15.1 (SONAME 13 -> 14) and hyprtoolkit 0.6.0 (SONAME 5 -> 6) * Sun Aug 23 2026 Hypercube - 0.8.4-3 - Rebuild against hyprtoolkit 0.5.4-2 / hyprutils 0.14.1 / aquamarine 0.14.0 * Tue Jul 21 2026 Hypercube - 0.8.4-2 diff --git a/packages/hyprpolkitagent/hyprpolkitagent.spec b/packages/hyprpolkitagent/hyprpolkitagent.spec index 07667882..8a1f6874 100644 --- a/packages/hyprpolkitagent/hyprpolkitagent.spec +++ b/packages/hyprpolkitagent/hyprpolkitagent.spec @@ -1,34 +1,51 @@ +%global sdbus_version 2.1.0 + Name: hyprpolkitagent -Version: 0.1.3 +Version: 0.2.0 Release: 1%{?dist} Summary: A simple polkit authentication agent for Hyprland License: BSD-3-Clause URL: https://github.com/hyprwm/hyprpolkitagent -Source: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz +Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz +Source1: https://github.com/Kistler-Group/sdbus-cpp/archive/v%{sdbus_version}/sdbus-%{sdbus_version}.tar.gz ExcludeArch: %{ix86} BuildRequires: cmake -BuildRequires: desktop-file-utils BuildRequires: gcc-c++ BuildRequires: systemd-rpm-macros -BuildRequires: cmake(Qt6Quick) -BuildRequires: cmake(Qt6QuickControls2) -BuildRequires: cmake(Qt6Widgets) +BuildRequires: pkgconfig(hyprgraphics) +BuildRequires: pkgconfig(hyprlang) +BuildRequires: pkgconfig(hyprtoolkit) >= 0.6.0 BuildRequires: pkgconfig(hyprutils) -BuildRequires: pkgconfig(polkit-agent-1) -BuildRequires: pkgconfig(polkit-qt6-1) +BuildRequires: pkgconfig(libdrm) +BuildRequires: pkgconfig(libsystemd) +BuildRequires: pkgconfig(pixman-1) +BuildRequires: pkgconfig(xkbcommon) + +Requires: polkit -Requires: hyprland-qt-support%{?_isa} +Provides: bundled(sdbus-cpp) = %{sdbus_version} %description -A simple polkit authentication agent for Hyprland, written in QT/QML. +A simple polkit authentication agent for Hyprland, written in C++ with +hyprtoolkit. %prep -%autosetup -p1 +%autosetup -p1 -a1 %build +pushd sdbus-cpp-%{sdbus_version} +%cmake \ + -DCMAKE_INSTALL_PREFIX=%{_builddir}/sdbus \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=OFF +%cmake_build +cmake --install %{__cmake_builddir} +popd +export PKG_CONFIG_PATH=%{_builddir}/sdbus/%{_lib}/pkgconfig + %cmake %cmake_build @@ -41,6 +58,9 @@ A simple polkit authentication agent for Hyprland, written in QT/QML. %preun %systemd_user_preun %{name}.service +%postun +%systemd_user_postun %{name}.service + %files %license LICENSE %doc README.md @@ -49,5 +69,8 @@ A simple polkit authentication agent for Hyprland, written in QT/QML. %{_userunitdir}/%{name}.service %changelog +* Mon Oct 26 2026 Hypercube - 0.2.0-1 +- Update to 0.2.0 (rewritten on hyprtoolkit; drops Qt/hyprland-qt-support) +- Talks to polkit over D-Bus via a bundled static sdbus-cpp, like hypridle * Mon Dec 16 2024 Hypercube - 0.1.3-1 - Initial package for Hypercube (based on sdegler/hyprland COPR) diff --git a/packages/hyprtoolkit/hyprtoolkit.spec b/packages/hyprtoolkit/hyprtoolkit.spec index 36dd2ee0..dee88e49 100644 --- a/packages/hyprtoolkit/hyprtoolkit.spec +++ b/packages/hyprtoolkit/hyprtoolkit.spec @@ -1,6 +1,6 @@ Name: hyprtoolkit -Version: 0.5.4 -Release: 2%{?dist} +Version: 0.6.0 +Release: 1%{?dist} Summary: A modern C++ Wayland-native GUI toolkit License: BSD-3-Clause @@ -12,13 +12,14 @@ ExcludeArch: %{ix86} BuildRequires: cmake BuildRequires: gcc-c++ BuildRequires: mesa-libGLES-devel +BuildRequires: pkgconfig(absl_flat_hash_map) BuildRequires: pkgconfig(aquamarine) BuildRequires: pkgconfig(cairo) BuildRequires: pkgconfig(egl) BuildRequires: pkgconfig(gbm) BuildRequires: pkgconfig(hyprgraphics) BuildRequires: pkgconfig(hyprlang) -BuildRequires: pkgconfig(hyprutils) +BuildRequires: pkgconfig(hyprutils) >= 0.14.2 BuildRequires: pkgconfig(hyprwayland-scanner) BuildRequires: pkgconfig(iniparser) BuildRequires: pkgconfig(libdrm) @@ -52,7 +53,7 @@ Development files for %{name}. %files %license LICENSE %doc README.md -%{_libdir}/lib%{name}.so.5 +%{_libdir}/lib%{name}.so.6 %{_libdir}/lib%{name}.so.%{version} %files devel @@ -61,6 +62,9 @@ Development files for %{name}. %{_libdir}/pkgconfig/%{name}.pc %changelog +* Fri Oct 23 2026 Hypercube - 0.6.0-1 +- Update to 0.6.0 +- libhyprtoolkit SONAME 5 -> 6; new BuildRequires on abseil (absl_flat_hash_map) * Sun Aug 23 2026 Hypercube - 0.5.4-2 - Rebuild against hyprutils 0.14.1 (SONAME 12 -> 13) and aquamarine 0.14.0 * Mon May 11 2026 Hypercube - 0.5.4-1 diff --git a/packages/hyprutils/hyprutils.spec b/packages/hyprutils/hyprutils.spec index 510ec121..6b04d57b 100644 --- a/packages/hyprutils/hyprutils.spec +++ b/packages/hyprutils/hyprutils.spec @@ -1,5 +1,5 @@ Name: hyprutils -Version: 0.14.0 +Version: 0.14.3 Release: 1%{?dist} Summary: Hyprland utilities library used across the ecosystem @@ -48,6 +48,8 @@ Development files for %{name}. %{_libdir}/pkgconfig/%{name}.pc %changelog +* Fri Oct 23 2026 Hypercube - 0.14.3-1 +- Update to 0.14.3 * Tue Jul 21 2026 Hypercube - 0.14.0-1 - Update to 0.14.0 - Bump SONAME from 12 to 13 to match 0.14.0 diff --git a/packages/iamb/iamb.spec b/packages/iamb/iamb.spec index 20b0dfe2..2026d923 100644 --- a/packages/iamb/iamb.spec +++ b/packages/iamb/iamb.spec @@ -4,7 +4,7 @@ %global debug_package %{nil} Name: iamb -Version: 0.0.11 +Version: 0.13.1 Release: 1%{?dist} Summary: Matrix chat client with Vim-like keybindings @@ -12,8 +12,8 @@ License: Apache-2.0 URL: https://github.com/ulyssa/iamb Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz -BuildRequires: cargo >= 1.83 -BuildRequires: rust >= 1.83 +BuildRequires: cargo >= 1.96 +BuildRequires: rust >= 1.96 BuildRequires: gcc %description @@ -41,5 +41,7 @@ install -Dpm 0755 target/release/iamb %{buildroot}%{_bindir}/iamb %{_bindir}/iamb %changelog +* Thu Oct 22 2026 Hypercube - 0.13.1-1 +- Update to 0.13.1 * Fri Jan 30 2026 Hypercube - 0.0.11-1 - Initial package for Hypercube diff --git a/packages/lazygit/lazygit.spec b/packages/lazygit/lazygit.spec index 92771769..6e0434bb 100644 --- a/packages/lazygit/lazygit.spec +++ b/packages/lazygit/lazygit.spec @@ -4,7 +4,7 @@ %global debug_package %{nil} Name: lazygit -Version: 0.63.1 +Version: 0.66.2 Release: 1%{?dist} Summary: Simple terminal UI for git commands @@ -35,6 +35,8 @@ install -Dpm 0755 %{name} %{buildroot}%{_bindir}/%{name} %{_bindir}/%{name} %changelog +* Sat Oct 17 2026 Hypercube - 0.66.2-1 +- Update to 0.66.2 * Thu Jul 16 2026 Hypercube - 0.63.1-1 - Update to 0.63.1 * Sun Jul 05 2026 Hypercube - 0.63.0-1 diff --git a/packages/lazysql/lazysql.spec b/packages/lazysql/lazysql.spec index b002494f..f36fa2bb 100644 --- a/packages/lazysql/lazysql.spec +++ b/packages/lazysql/lazysql.spec @@ -4,7 +4,7 @@ %global debug_package %{nil} Name: lazysql -Version: 0.5.5 +Version: 0.7.0 Release: 1%{?dist} Summary: TUI database management client @@ -37,6 +37,8 @@ install -Dpm 0755 %{name} %{buildroot}%{_bindir}/%{name} %{_bindir}/%{name} %changelog +* Tue Oct 13 2026 Hypercube - 0.7.0-1 +- Update to 0.7.0 * Tue Jun 30 2026 Hypercube - 0.5.5-1 - Update to 0.5.5 * Tue Jun 09 2026 Hypercube - 0.5.4-1 diff --git a/packages/lua55/lua-5.5.0-bug1.patch b/packages/lua55/lua-5.5.0-bug1.patch deleted file mode 100644 index ed7b7c1b..00000000 --- a/packages/lua55/lua-5.5.0-bug1.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up lua-5.5.0/src/lapi.c.bug1 lua-5.5.0/src/lapi.c ---- lua-5.5.0/src/lapi.c.bug1 2026-01-06 10:46:04.363172258 -0500 -+++ lua-5.5.0/src/lapi.c 2026-01-06 10:47:24.415699829 -0500 -@@ -1205,6 +1205,8 @@ LUA_API int lua_gc (lua_State *L, int wh - g->gcstp = 0; /* allow GC to run (other bits must be zero here) */ - if (n <= 0) - n = g->GCdebt; /* force to run one basic step */ -+ else if (g->GCdebt < n - MAX_LMEM) /* overflow? */ -+ n = MAX_LMEM + g->GCdebt; /* trim 'n' (debt must be negative) */ - luaE_setdebt(g, g->GCdebt - n); - luaC_condGC(L, (void)0, work = 1); - if (work && g->gcstate == GCSpause) /* end of cycle? */ diff --git a/packages/lua55/lua-5.5.0-bug2.patch b/packages/lua55/lua-5.5.0-bug2.patch deleted file mode 100644 index 38485945..00000000 --- a/packages/lua55/lua-5.5.0-bug2.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up lua-5.5.0/src/lstrlib.c.bug2 lua-5.5.0/src/lstrlib.c ---- lua-5.5.0/src/lstrlib.c.bug2 2026-01-14 16:33:13.073440361 -0500 -+++ lua-5.5.0/src/lstrlib.c 2026-01-14 16:33:41.019926479 -0500 -@@ -1726,7 +1726,7 @@ static int str_packsize (lua_State *L) { - luaL_argcheck(L, opt != Kstring && opt != Kzstr, 1, - "variable-length format"); - size += ntoalign; /* total space used by option */ -- luaL_argcheck(L, totalsize <= LUA_MAXINTEGER - size, -+ luaL_argcheck(L, totalsize <= MAX_SIZE - size, - 1, "format result too large"); - totalsize += size; - } diff --git a/packages/lua55/lua55.spec b/packages/lua55/lua55.spec index 46e217f8..02c26929 100644 --- a/packages/lua55/lua55.spec +++ b/packages/lua55/lua55.spec @@ -13,7 +13,7 @@ Name: lua55 -Version: %{major_version}.0 +Version: 5.5.1 Release: 1%{?dist} Summary: Powerful light-weight programming language (version %{major_version}) License: MIT @@ -40,9 +40,6 @@ Patch7: lua-5.4.8-bug1.patch Patch8: lua-5.4.8-bug2.patch Patch9: lua-5.4.8-bug3.patch %endif -# https://www.lua.org/bugs.html -Patch10: lua-5.5.0-bug1.patch -Patch11: lua-5.5.0-bug2.patch BuildRequires: automake autoconf libtool readline-devel ncurses-devel BuildRequires: make @@ -105,10 +102,6 @@ mv src/luaconf.h src/luaconf.h.template.in #%% patch -P2 -p1 -z .luac-shared %patch -P3 -p1 -z .configure-linux -# Bug patches here -%patch -P10 -p1 -b .bug1 -%patch -P11 -p1 -b .bug2 - # Put proper version in configure.ac, patch0 hardcodes 5.5.0 sed -i 's|5.5.0|%{version}|g' configure.ac autoreconf -ifv @@ -253,6 +246,9 @@ LD_LIBRARY_PATH=$RPM_BUILD_ROOT/%{_libdir} $RPM_BUILD_ROOT/%{_bindir}/lua%{major %{_libdir}/liblua-%{major_version}.a %changelog +* Thu Sep 10 2026 Hypercube - 5.5.1-1 +- Update to 5.5.1 +- Drop lua-5.5.0-bug1/bug2 patches (fixed upstream in 5.5.1) * Fri Jun 06 2026 Hypercube - 5.5.0-1 - Rename to lua55 for parallel installation alongside system lua 5.4 - Version all installed paths: headers, pkg-config, binaries, man pages diff --git a/packages/quickshell/quickshell.spec b/packages/quickshell/quickshell.spec index f14c9126..4843b9b7 100644 --- a/packages/quickshell/quickshell.spec +++ b/packages/quickshell/quickshell.spec @@ -1,6 +1,6 @@ Name: quickshell -Version: 0.3.0 -Release: 2%{?dist} +Version: 0.3.2 +Release: 1%{?dist} Summary: Flexible QtQuick based desktop shell toolkit License: LGPL-3.0-or-later @@ -78,6 +78,8 @@ managers. It supports Hyprland, Sway, and other Wayland compositors. %{_datadir}/icons/hicolor/scalable/apps/org.quickshell.svg %changelog +* Fri Oct 09 2026 Hypercube - 0.3.2-1 +- Update to 0.3.2 * Sat Jun 06 2026 Hypercube - 0.3.0-2 - Rename CRASH_REPORTER cmake option to CRASH_HANDLER for 0.3.0 * Wed May 06 2026 Hypercube - 0.3.0-1 diff --git a/packages/resterm/resterm.spec b/packages/resterm/resterm.spec index e6680e04..1dd30993 100644 --- a/packages/resterm/resterm.spec +++ b/packages/resterm/resterm.spec @@ -4,7 +4,7 @@ %global debug_package %{nil} Name: resterm -Version: 0.49.3 +Version: 1.16.1 Release: 1%{?dist} Summary: TUI REST, gRPC, and WebSocket API client @@ -35,6 +35,8 @@ install -Dpm 0755 %{name} %{buildroot}%{_bindir}/%{name} %{_bindir}/%{name} %changelog +* Fri Oct 23 2026 Hypercube - 1.16.1-1 +- Update to 1.16.1 * Sat Aug 01 2026 Hypercube - 0.49.3-1 - Update to 0.49.3 * Tue Jul 21 2026 Hypercube - 0.47.3-1 diff --git a/packages/resvg/resvg.spec b/packages/resvg/resvg.spec index 11713505..dd861fb3 100644 --- a/packages/resvg/resvg.spec +++ b/packages/resvg/resvg.spec @@ -4,7 +4,7 @@ %global debug_package %{nil} Name: resvg -Version: 0.47.0 +Version: 0.49.0 Release: 1%{?dist} Summary: SVG rendering library and CLI tool @@ -35,6 +35,8 @@ install -Dpm 0755 target/release/resvg %{buildroot}%{_bindir}/resvg %{_bindir}/resvg %changelog +* Sun Oct 25 2026 Hypercube - 0.49.0-1 +- Update to 0.49.0 * Wed Feb 11 2026 Hypercube - 0.47.0-1 - Update to 0.47.0 * Thu Jan 30 2026 Hypercube - 0.46.0-1 diff --git a/packages/starship/starship.spec b/packages/starship/starship.spec index 358b5a08..8871521f 100644 --- a/packages/starship/starship.spec +++ b/packages/starship/starship.spec @@ -1,7 +1,7 @@ %global debug_package %{nil} Name: starship -Version: 1.26.0 +Version: 1.27.0 Release: 1%{?dist} Summary: Minimal, blazing-fast, and infinitely customizable prompt for any shell @@ -9,8 +9,8 @@ License: ISC URL: https://github.com/starship/starship Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz -BuildRequires: cargo >= 1.80 -BuildRequires: rust >= 1.80 +BuildRequires: cargo >= 1.95 +BuildRequires: rust >= 1.95 BuildRequires: gcc BuildRequires: cmake BuildRequires: pkgconfig(openssl) @@ -54,6 +54,8 @@ rm -f %{buildroot}%{_prefix}/.crates2.json %{_datadir}/fish/vendor_completions.d/%{name}.fish %changelog +* Sun Oct 18 2026 Hypercube - 1.27.0-1 +- Update to 1.27.0 * Mon Jun 29 2026 Hypercube - 1.26.0-1 - Update to 1.26.0 * Fri May 01 2026 Hypercube - 1.25.1-1 diff --git a/packages/uwsm/uwsm.spec b/packages/uwsm/uwsm.spec index 3812593f..5da32748 100644 --- a/packages/uwsm/uwsm.spec +++ b/packages/uwsm/uwsm.spec @@ -1,5 +1,5 @@ Name: uwsm -Version: 0.26.6 +Version: 0.27.1 Release: 1%{?dist} Summary: Universal Wayland Session Manager @@ -81,6 +81,8 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %{_userunitdir}/wayland-*.target %changelog +* Fri Oct 16 2026 Hypercube - 0.27.1-1 +- Update to 0.27.1 * Mon Jun 29 2026 Hypercube - 0.26.6-1 - Update to 0.26.6 * Sun Jun 14 2026 Hypercube - 0.26.5-1 diff --git a/packages/yazi/yazi.spec b/packages/yazi/yazi.spec index 59dacdb2..38adfd2c 100644 --- a/packages/yazi/yazi.spec +++ b/packages/yazi/yazi.spec @@ -4,7 +4,7 @@ %global debug_package %{nil} Name: yazi -Version: 26.5.6 +Version: 26.9.1 Release: 1%{?dist} Summary: Blazing fast terminal file manager written in Rust @@ -12,8 +12,8 @@ License: MIT URL: https://github.com/sxyazi/yazi Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz -BuildRequires: cargo >= 1.80 -BuildRequires: rust >= 1.80 +BuildRequires: cargo >= 1.95 +BuildRequires: rust >= 1.95 BuildRequires: gcc BuildRequires: make BuildRequires: git @@ -73,6 +73,8 @@ rm -f %{buildroot}%{_prefix}/.crates2.json %{_datadir}/zsh/site-functions/_ya %changelog +* Wed Sep 02 2026 Hypercube - 26.9.1-1 +- Update to 26.9.1 * Wed May 06 2026 Hypercube - 26.5.6-1 - Update to 26.5.6 * Thu Jan 30 2026 Hypercube - 26.1.22-1 diff --git a/packages/zellij/zellij.spec b/packages/zellij/zellij.spec index 63f30899..dc58820f 100644 --- a/packages/zellij/zellij.spec +++ b/packages/zellij/zellij.spec @@ -4,8 +4,8 @@ %global debug_package %{nil} Name: zellij -Version: 0.44.3 -Release: 2%{?dist} +Version: 0.45.1 +Release: 1%{?dist} Summary: A terminal workspace and multiplexer License: MIT @@ -83,6 +83,8 @@ mkdir -p %{buildroot}%{_datadir}/fish/vendor_completions.d %{_datadir}/fish/vendor_completions.d/%{name}.fish %changelog +* Sat Aug 29 2026 Hypercube - 0.45.1-1 +- Update to 0.45.1 * Sun Jun 28 2026 Hypercube - 0.44.3-2 - Set OPENSSL_NO_VENDOR=1 so openssl-sys links the chroot's system OpenSSL instead of vendoring its own copy, which failed to configure (missing diff --git a/scripts/packages/config.sh b/scripts/packages/config.sh index 01af56e2..56eaf32f 100755 --- a/scripts/packages/config.sh +++ b/scripts/packages/config.sh @@ -52,6 +52,13 @@ declare -gA VERSION_SOURCES=( [lua55]="tag" ) +# Version pins: only consider upstream versions starting with this prefix. +# Use when a dependent can't build against a newer major series yet. +declare -gA VERSION_PINS=( + # Hyprland 0.56 does find_package(glaze 7...<8); glaze 8+ breaks the build + [glaze]="7." +) + # Package dependencies (for determining build order) declare -gA PACKAGE_DEPS=( # Base packages with no dependencies @@ -90,7 +97,7 @@ declare -gA PACKAGE_DEPS=( [hypridle]="hyprland-protocols hyprlang hyprutils hyprwayland-scanner" [hyprpaper]="hyprgraphics hyprlang hyprutils hyprwayland-scanner hyprwire hyprtoolkit" [xdg-desktop-portal-hyprland]="hyprland-protocols hyprlang hyprutils hyprwayland-scanner" - [hyprpolkitagent]="hyprutils hyprland-qt-support" + [hyprpolkitagent]="hyprgraphics hyprlang hyprutils hyprtoolkit" [hyprtoolkit]="aquamarine hyprgraphics hyprlang hyprutils hyprwayland-scanner" [hyprland-guiutils]="aquamarine hyprtoolkit hyprlang hyprutils" ) @@ -100,12 +107,13 @@ declare -gA BUILD_BATCHES=( [1]="hyprutils hyprwayland-scanner hyprland-protocols hyprwire glaze uwsm eza starship lazygit quickshell livesys-scripts wifitui resvg yazi bluetui iamb meli lazyjournal lazysql resterm zellij alacritty lua55" [2]="hyprlang hyprgraphics aquamarine" [3]="hyprcursor hyprland-qt-support" - [4]="hyprland hyprlock hypridle xdg-desktop-portal-hyprland hyprpolkitagent hyprtoolkit" - [5]="hyprpaper hyprland-guiutils" + [4]="hyprland hyprlock hypridle xdg-desktop-portal-hyprland hyprtoolkit" + [5]="hyprpaper hyprland-guiutils hyprpolkitagent" ) # Export for use in other scripts export PACKAGE_REPOS export VERSION_SOURCES +export VERSION_PINS export PACKAGE_DEPS export BUILD_BATCHES diff --git a/scripts/packages/get-upstream-version.sh b/scripts/packages/get-upstream-version.sh index 9020b9a5..147f63c0 100755 --- a/scripts/packages/get-upstream-version.sh +++ b/scripts/packages/get-upstream-version.sh @@ -33,9 +33,20 @@ fi REPO="${PACKAGE_REPOS[$PACKAGE]}" VERSION_SOURCE="${VERSION_SOURCES[$PACKAGE]:-release}" +VERSION_PIN="${VERSION_PINS[$PACKAGE]:-}" + # Get upstream version from GitHub # Try gh first (if authenticated), fall back to curl -if command -v gh &> /dev/null && gh auth status &> /dev/null; then +if [[ -n "$VERSION_PIN" ]]; then + # Pinned: newest tag within the pinned series + PIN_RE="^v?${VERSION_PIN//./\\.}" + if command -v gh &> /dev/null && gh auth status &> /dev/null; then + TAGS=$(gh api "repos/$REPO/tags?per_page=100" --jq '.[].name' 2>/dev/null || echo "") + else + TAGS=$(curl -sf "https://api.github.com/repos/$REPO/tags?per_page=100" 2>/dev/null | jq -r '.[].name' 2>/dev/null || echo "") + fi + UPSTREAM=$(echo "$TAGS" | grep -E "$PIN_RE" | grep -E '^v?[0-9]+(\.[0-9]+)*$' | sed 's/^v//' | sort -V | tail -1 || true) +elif command -v gh &> /dev/null && gh auth status &> /dev/null; then # Use gh CLI (faster and more reliable if authenticated) if [[ "$VERSION_SOURCE" == "tag" ]]; then UPSTREAM=$(gh api "repos/$REPO/tags" --jq '.[0].name' 2>/dev/null || echo "") From a97e76720921219ee91b7501d775b9d02eccc0ec Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 1 Aug 2026 15:39:37 +0000 Subject: [PATCH 2/4] Migrate Hyprland config from hyprlang to Lua Hyprland 0.55 deprecates the hyprlang (.conf) config format in favor of Lua (~/.config/hypr/hyprland.lua). Port the Hypercube compositor configs to the new API. - Convert hyprland.conf -> hyprland.lua (monitors, autostart via hl.on("hyprland.start"), env, look-and-feel via hl.config(), curves and animations, input, gestures, per-device config, keybinds via hl.bind() / hl.dsp.*, window/layer rules). - Convert hyprland-kiosk.conf -> hyprland-kiosk.lua. - Add recommended .luarc.json so the Lua LSP loads Hyprland's stubs from /usr/share/hypr/stubs for manual editing. - Update the /etc/skel stub to require() the system Lua config instead of the old hyprlang `source =` directive. - Update the live-ISO hook to append Lua to hyprland.lua. - Update doc/comment references (CONTRIBUTING.md tree, dark-mode note). hypridle/hyprlock/hyprpaper remain hyprlang (.conf); those Hypr ecosystem tools still use hyprlang, only the compositor moved to Lua. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01T97eCv6imHgfkVWxqBJrmH --- CONTRIBUTING.md | 4 +- build_files/hypercube/03-hypercube-configs.sh | 22 +- dot_files/hypr/.luarc.json | 16 + dot_files/hypr/hyprland-kiosk.conf | 106 ----- dot_files/hypr/hyprland-kiosk.lua | 117 +++++ dot_files/hypr/hyprland.conf | 382 ----------------- dot_files/hypr/hyprland.lua | 399 ++++++++++++++++++ iso_files/hook-post-rootfs.sh | 39 +- .../dconf/db/local.d/01-hypercube-dark-mode | 2 +- 9 files changed, 569 insertions(+), 518 deletions(-) create mode 100644 dot_files/hypr/.luarc.json delete mode 100644 dot_files/hypr/hyprland-kiosk.conf create mode 100644 dot_files/hypr/hyprland-kiosk.lua delete mode 100644 dot_files/hypr/hyprland.conf create mode 100644 dot_files/hypr/hyprland.lua diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 428d01b4..17bba8a7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -29,7 +29,9 @@ hypercube/ │ ├── gtk-3.0/ # GTK3 settings │ ├── gtk-4.0/ # GTK4 settings │ ├── hypr/ # Hyprland configs -│ │ ├── hyprland.conf # Main compositor config +│ │ ├── hyprland.lua # Main compositor config (Lua, 0.55+) +│ │ ├── hyprland-kiosk.lua # Kiosk-mode compositor config +│ │ ├── .luarc.json # Lua LSP config for editing hyprland.lua │ │ ├── hyprlock.conf # Lock screen │ │ ├── hypridle.conf # Idle management │ │ └── hyprpaper.conf # Wallpaper diff --git a/build_files/hypercube/03-hypercube-configs.sh b/build_files/hypercube/03-hypercube-configs.sh index b6a53886..13a3fb6a 100755 --- a/build_files/hypercube/03-hypercube-configs.sh +++ b/build_files/hypercube/03-hypercube-configs.sh @@ -60,19 +60,21 @@ import = ["/usr/share/hypercube/config/alacritty/alacritty.toml"] # Your customizations below: EOF -### Hyprland - stub that sources system config -# Users can customize by adding settings after the source line -# Hyprland parses linearly: system config first, then user customizations +### Hyprland - stub that requires system config +# Since Hyprland 0.55 the config is Lua (~/.config/hypr/hyprland.lua). +# Users can customize by adding settings after the require line. +# Hyprland evaluates linearly: system config first, then user customizations +# (later hl.config() calls override earlier values). mkdir -p /etc/skel/.config/hypr -cat > /etc/skel/.config/hypr/hyprland.conf << 'EOF' -# Hypercube Hyprland Configuration -# System defaults are sourced below. Add your customizations after this line. -# Settings defined after source will override the defaults. -# To replace defaults entirely, remove or comment out the source line. +cat > /etc/skel/.config/hypr/hyprland.lua << 'EOF' +-- Hypercube Hyprland Configuration +-- System defaults are required below. Add your customizations after this line. +-- Settings defined after the require will override the defaults. +-- To replace defaults entirely, remove or comment out the require line. -source = /usr/share/hypercube/config/hypr/hyprland.conf +require("/usr/share/hypercube/config/hypr/hyprland.lua") -# Your customizations below: +-- Your customizations below: EOF diff --git a/dot_files/hypr/.luarc.json b/dot_files/hypr/.luarc.json new file mode 100644 index 00000000..98686dfd --- /dev/null +++ b/dot_files/hypr/.luarc.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://raw.githubusercontent.com/LuaLS/vscode-lua/master/setting/schema.json", + "workspace": { + "library": [ + "/usr/share/hypr/stubs" + ] + }, + "runtime": { + "version": "Lua 5.4" + }, + "diagnostics": { + "globals": [ + "hl" + ] + } +} diff --git a/dot_files/hypr/hyprland-kiosk.conf b/dot_files/hypr/hyprland-kiosk.conf deleted file mode 100644 index 0395b461..00000000 --- a/dot_files/hypr/hyprland-kiosk.conf +++ /dev/null @@ -1,106 +0,0 @@ -# Hyprland Kiosk Mode Configuration -# Used for desktop kiosk mode applications -# - No keybindings (locked down) -# - Single fullscreen application -# - Exits when the application closes -# -# Usage: Set KIOSK_CMD environment variable before launching -# KIOSK_CMD="your-app" Hyprland -c /path/to/hyprland-kiosk.conf - -################ -### MONITORS ### -################ - -# Enable all monitors - kiosk app shows on primary, others show wallpaper -monitor=,preferred,auto,auto - -################# -### AUTOSTART ### -################# - -# Wallpaper on all monitors -exec-once = hyprpaper -c /usr/share/hypercube/config/hypr/hyprpaper.conf - -# Launch the kiosk application from environment variable -exec-once = $KIOSK_CMD - -# Exit Hyprland when the last window closes -exec-once = handle=$(hyprctl -j clients | jq -r '.[0].address // empty'); while [ -n "$handle" ]; do sleep 0.5; handle=$(hyprctl -j clients | jq -r '.[0].address // empty'); done; hyprctl dispatch exit - -############################# -### ENVIRONMENT VARIABLES ### -############################# - -env = XCURSOR_SIZE,24 -env = HYPRCURSOR_SIZE,24 - -##################### -### LOOK AND FEEL ### -##################### - -general { - gaps_in = 0 - gaps_out = 0 - border_size = 0 - col.active_border = rgba(00000000) - col.inactive_border = rgba(00000000) - resize_on_border = false - allow_tearing = false - layout = dwindle -} - -decoration { - rounding = 0 - active_opacity = 1.0 - inactive_opacity = 1.0 - shadow { - enabled = false - } - blur { - enabled = false - } -} - -animations { - enabled = false -} - -dwindle { - preserve_split = true -} - -misc { - force_default_wallpaper = 0 - disable_hyprland_logo = true -} - -############# -### INPUT ### -############# - -input { - kb_layout = us - kb_variant = - kb_model = - kb_options = - kb_rules = - follow_mouse = 1 - sensitivity = 0 - touchpad { - natural_scroll = false - } -} - -################### -### KEYBINDINGS ### -################### - -# No keybindings - kiosk mode is locked down - -############################## -### WINDOWS AND WORKSPACES ### -############################## - -# Force all windows to fullscreen -windowrule = fullscreen, match:class .* -windowrule = nofocus, match:class ^$, match:title ^$ diff --git a/dot_files/hypr/hyprland-kiosk.lua b/dot_files/hypr/hyprland-kiosk.lua new file mode 100644 index 00000000..23197fed --- /dev/null +++ b/dot_files/hypr/hyprland-kiosk.lua @@ -0,0 +1,117 @@ +-- Hyprland Kiosk Mode Configuration +-- Used for desktop kiosk mode applications +-- - No keybindings (locked down) +-- - Single fullscreen application +-- - Exits when the application closes +-- +-- Since Hyprland 0.55, hyprlang (.conf) is deprecated in favor of Lua. +-- +-- Usage: Set KIOSK_CMD environment variable before launching +-- KIOSK_CMD="your-app" Hyprland -c /path/to/hyprland-kiosk.lua + +------------------ +---- MONITORS ---- +------------------ + +-- Enable all monitors - kiosk app shows on primary, others show wallpaper +hl.monitor({ output = "", mode = "preferred", position = "auto", scale = "auto" }) + +------------------- +---- AUTOSTART ---- +------------------- + +hl.on("hyprland.start", function() + -- Wallpaper on all monitors + hl.exec_cmd("hyprpaper -c /usr/share/hypercube/config/hypr/hyprpaper.conf") + + -- Launch the kiosk application from the KIOSK_CMD environment variable + -- (exec_cmd runs via `sh -c`, so the variable is expanded by the shell) + hl.exec_cmd("$KIOSK_CMD") + + -- Exit Hyprland when the last window closes + hl.exec_cmd([[handle=$(hyprctl -j clients | jq -r '.[0].address // empty'); while [ -n "$handle" ]; do sleep 0.5; handle=$(hyprctl -j clients | jq -r '.[0].address // empty'); done; hyprctl dispatch 'hl.dsp.exit()']]) +end) + +------------------------------- +---- ENVIRONMENT VARIABLES ---- +------------------------------- + +hl.env("XCURSOR_SIZE", "24") +hl.env("HYPRCURSOR_SIZE", "24") + +----------------------- +---- LOOK AND FEEL ---- +----------------------- + +hl.config({ + general = { + gaps_in = 0, + gaps_out = 0, + border_size = 0, + col = { + active_border = "rgba(00000000)", + inactive_border = "rgba(00000000)", + }, + resize_on_border = false, + allow_tearing = false, + layout = "dwindle", + }, + + decoration = { + rounding = 0, + active_opacity = 1.0, + inactive_opacity = 1.0, + shadow = { + enabled = false, + }, + blur = { + enabled = false, + }, + }, + + animations = { + enabled = false, + }, + + dwindle = { + preserve_split = true, + }, + + misc = { + force_default_wallpaper = 0, + disable_hyprland_logo = true, + }, +}) + +--------------- +---- INPUT ---- +--------------- + +hl.config({ + input = { + kb_layout = "us", + kb_variant = "", + kb_model = "", + kb_options = "", + kb_rules = "", + follow_mouse = 1, + sensitivity = 0, + touchpad = { + natural_scroll = false, + }, + }, +}) + +--------------------- +---- KEYBINDINGS ---- +--------------------- + +-- No keybindings - kiosk mode is locked down + +-------------------------------- +---- WINDOWS AND WORKSPACES ---- +-------------------------------- + +-- Force all windows to fullscreen +hl.window_rule({ name = "kiosk-fullscreen", match = { class = ".*" }, fullscreen = true }) +hl.window_rule({ match = { class = "^$", title = "^$" }, no_focus = true }) diff --git a/dot_files/hypr/hyprland.conf b/dot_files/hypr/hyprland.conf deleted file mode 100644 index b135552a..00000000 --- a/dot_files/hypr/hyprland.conf +++ /dev/null @@ -1,382 +0,0 @@ - -# ####################################################################################### -# HYPRLAND CONFIG - Tokyo Night Theme with Vim-like Keybindings -# ####################################################################################### -# -# Tokyo Night Color Palette: -# - Background: #1a1b26 -# - Foreground: #c0caf5 -# - Blue (accent): #7aa2f7 -# - Purple (accent): #bb9af7 -# - Cyan: #7dcfff -# - Green: #9ece6a -# - Red: #f7768e -# - Border inactive: #414868 -# -# Keybindings: -# - Vim-like navigation: SUPER + h/j/k/l (left/down/up/right) -# - Move windows: SUPER + SHIFT + h/j/k/l -# - Resize windows: SUPER + CTRL + h/j/k/l -# - App launcher: SUPER + R (opens left sidebar with search) -# - Quick settings: SUPER + N (opens right sidebar) -# -# ####################################################################################### - -# Refer to the wiki for more information. -# https://wiki.hypr.land/Configuring/ - - -################ -### MONITORS ### -################ - -# See https://wiki.hypr.land/Configuring/Monitors/ -monitor=,preferred,auto,auto - - -################### -### MY PROGRAMS ### -################### - -# See https://wiki.hypr.land/Configuring/Keywords/ - -# Set programs that you use -$terminal = ghostty -$fileManager = files -$menu = qs ipc call shell toggleSidebarLeft - -################# -### AUTOSTART ### -################# - -# Export the Wayland session environment to the systemd user manager and the -# D-Bus activation environment. Without this, D-Bus-activated services such as -# xdg-desktop-portal fail to start when Hyprland is launched directly (i.e. not -# via uwsm), breaking dark-mode detection, file pickers, and screen sharing. -# Runs first so the services started below inherit a populated environment. -exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_TYPE HYPRLAND_INSTANCE_SIGNATURE - -# Quickshell - Launcher, Notifications, OSD -exec-once = quickshell - -# Wallpaper -exec-once = hyprpaper -c /usr/share/hypercube/config/hypr/hyprpaper.conf - -# Idle / Lock -exec-once = hypridle -c /usr/share/hypercube/config/hypr/hypridle.conf - -# Hyprland Polkit Authentication Agent (for privilege escalation) -exec-once = systemctl --user start hyprpolkitagent - -# GNOME Keyring (for secrets management, SSH keys, and certificates) -exec-once = gnome-keyring-daemon --start - -############################# -### ENVIRONMENT VARIABLES ### -############################# - -# See https://wiki.hypr.land/Configuring/Environment-variables/ - -# Desktop identity - lets xdg-desktop-portal select the Hyprland backend -# (hyprland-portals.conf) and route the Settings/color-scheme interface. -env = XDG_CURRENT_DESKTOP,Hyprland - -# XDG directories - required for quickshell and other apps to find Hypercube configs -env = XDG_CONFIG_DIRS,/etc/xdg:/usr/share/hypercube/config -env = XDG_DATA_DIRS,/usr/local/share:/usr/share:/usr/share/hypercube/data - -env = XCURSOR_SIZE,24 -env = HYPRCURSOR_SIZE,24 - -# SSH agent socket from GNOME Keyring -env = SSH_AUTH_SOCK,$XDG_RUNTIME_DIR/keyring/ssh - - -################### -### PERMISSIONS ### -################### - -# See https://wiki.hypr.land/Configuring/Permissions/ -# Please note permission changes here require a Hyprland restart and are not applied on-the-fly -# for security reasons - -# ecosystem { -# enforce_permissions = 1 -# } - -# permission = /usr/(bin|local/bin)/grim, screencopy, allow -# permission = /usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow -# permission = /usr/(bin|local/bin)/hyprpm, plugin, allow - - -##################### -### LOOK AND FEEL ### -##################### - -# Refer to https://wiki.hypr.land/Configuring/Variables/ - -# https://wiki.hypr.land/Configuring/Variables/#general -# Tokyo Night Theme Colors -general { - gaps_in = 5 - gaps_out = 5 - - border_size = 2 - - # Tokyo Night colors - active border uses accent blue/purple gradient - col.active_border = rgba(7aa2f7ee) rgba(bb9af7ee) 45deg - col.inactive_border = rgba(414868aa) - - # Set to true enable resizing windows by clicking and dragging on borders and gaps - resize_on_border = false - - # Please see https://wiki.hypr.land/Configuring/Tearing/ before you turn this on - allow_tearing = false - - layout = dwindle -} - -# https://wiki.hypr.land/Configuring/Variables/#decoration -decoration { - rounding = 0 - rounding_power = 2 - - # Change transparency of focused and unfocused windows - active_opacity = 1.0 - inactive_opacity = 1.0 - - shadow { - enabled = true - range = 4 - render_power = 3 - color = rgba(1a1b26ee) # Tokyo Night background - } - - # https://wiki.hypr.land/Configuring/Variables/#blur - blur { - enabled = true - size = 3 - passes = 1 - - vibrancy = 0.1696 - } -} - -# https://wiki.hypr.land/Configuring/Variables/#animations -animations { - enabled = yes, please :) - - # Default curves, see https://wiki.hypr.land/Configuring/Animations/#curves - # NAME, X0, Y0, X1, Y1 - bezier = easeOutQuint, 0.23, 1, 0.32, 1 - bezier = easeInOutCubic, 0.65, 0.05, 0.36, 1 - bezier = linear, 0, 0, 1, 1 - bezier = almostLinear, 0.5, 0.5, 0.75, 1 - bezier = quick, 0.15, 0, 0.1, 1 - - # Default animations, see https://wiki.hypr.land/Configuring/Animations/ - # NAME, ONOFF, SPEED, CURVE, [STYLE] - animation = global, 1, 10, default - animation = border, 1, 5.39, easeOutQuint - animation = windows, 1, 4.79, easeOutQuint - animation = windowsIn, 1, 4.1, easeOutQuint, popin 87% - animation = windowsOut, 1, 1.49, linear, popin 87% - animation = fadeIn, 1, 1.73, almostLinear - animation = fadeOut, 1, 1.46, almostLinear - animation = fade, 1, 3.03, quick - animation = layers, 1, 3.81, easeOutQuint - animation = layersIn, 1, 4, easeOutQuint, fade - animation = layersOut, 1, 1.5, linear, fade - animation = fadeLayersIn, 1, 1.79, almostLinear - animation = fadeLayersOut, 1, 1.39, almostLinear - animation = workspaces, 1, 1.94, almostLinear, fade - animation = workspacesIn, 1, 1.21, almostLinear, fade - animation = workspacesOut, 1, 1.94, almostLinear, fade - animation = zoomFactor, 1, 7, quick -} - -# Ref https://wiki.hypr.land/Configuring/Workspace-Rules/ -# "Smart gaps" / "No gaps when only" -# uncomment all if you wish to use that. -# workspace = w[tv1], gapsout:0, gapsin:0 -# workspace = f[1], gapsout:0, gapsin:0 -# windowrule = bordersize 0, floating:0, onworkspace:w[tv1] -# windowrule = rounding 0, floating:0, onworkspace:w[tv1] -# windowrule = bordersize 0, floating:0, onworkspace:f[1] -# windowrule = rounding 0, floating:0, onworkspace:f[1] - -# See https://wiki.hypr.land/Configuring/Dwindle-Layout/ for more -dwindle { - preserve_split = true # You probably want this -} - -# See https://wiki.hypr.land/Configuring/Master-Layout/ for more -master { - new_status = master -} - -# https://wiki.hypr.land/Configuring/Variables/#misc -misc { - force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers - disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :( -} - - -############# -### INPUT ### -############# - -# https://wiki.hypr.land/Configuring/Variables/#input -input { - kb_layout = us - kb_variant = - kb_model = - # caps:ctrl_modifier - Caps Lock acts as Ctrl - kb_options = caps:ctrl_modifier - kb_rules = - follow_mouse = 1 - sensitivity = 0 # -1.0 - 1.0, 0 means no modification. - touchpad { - natural_scroll = false - } -} - -# See https://wiki.hypr.land/Configuring/Gestures -gesture = 3, horizontal, workspace - -# Example per-device config -# See https://wiki.hypr.land/Configuring/Keywords/#per-device-input-configs for more -device { - name = epic-mouse-v1 - sensitivity = -0.5 -} - - -################### -### KEYBINDINGS ### -################### - -# See https://wiki.hypr.land/Configuring/Keywords/ -$mainMod = SUPER # Sets "Windows" key as main modifier - -# Example binds, see https://wiki.hypr.land/Configuring/Binds/ for more -bind = $mainMod, Q, exec, $terminal -bind = $mainMod, C, killactive, -bind = $mainMod, E, exec, $fileManager -bind = $mainMod, V, togglefloating, -bind = $mainMod, F, fullscreen, 0 # Fullscreen -bind = $mainMod, R, exec, $menu -# bind = $mainMod, A, exec, qs ipc call shell toggleSidebarLeft # Removed - use SUPER+R instead -bind = $mainMod, N, exec, qs ipc call shell toggleSidebarRight # Notifications/quick settings -bind = $mainMod, Escape, exec, qs ipc call shell closeAll # Close all panels -bind = $mainMod, P, pseudo, # dwindle -bind = $mainMod, S, layoutmsg, togglesplit # dwindle -bind = $mainMod CTRL, Escape, exec, hyprlock # Lock screen - -# Move focus with mainMod + vim keys (h/j/k/l) -bind = $mainMod, H, movefocus, l -bind = $mainMod, L, movefocus, r -bind = $mainMod, K, movefocus, u -bind = $mainMod, J, movefocus, d - -# Move focus with mainMod + arrow keys (alternative) -bind = $mainMod, left, movefocus, l -bind = $mainMod, right, movefocus, r -bind = $mainMod, up, movefocus, u -bind = $mainMod, down, movefocus, d - -# Switch workspaces with mainMod + [0-9] -bind = $mainMod, 1, workspace, 1 -bind = $mainMod, 2, workspace, 2 -bind = $mainMod, 3, workspace, 3 -bind = $mainMod, 4, workspace, 4 -bind = $mainMod, 5, workspace, 5 -bind = $mainMod, 6, workspace, 6 -bind = $mainMod, 7, workspace, 7 -bind = $mainMod, 8, workspace, 8 -bind = $mainMod, 9, workspace, 9 -bind = $mainMod, 0, workspace, 10 - -# Move active window to a workspace with mainMod + SHIFT + [0-9] -bind = $mainMod SHIFT, 1, movetoworkspace, 1 -bind = $mainMod SHIFT, 2, movetoworkspace, 2 -bind = $mainMod SHIFT, 3, movetoworkspace, 3 -bind = $mainMod SHIFT, 4, movetoworkspace, 4 -bind = $mainMod SHIFT, 5, movetoworkspace, 5 -bind = $mainMod SHIFT, 6, movetoworkspace, 6 -bind = $mainMod SHIFT, 7, movetoworkspace, 7 -bind = $mainMod SHIFT, 8, movetoworkspace, 8 -bind = $mainMod SHIFT, 9, movetoworkspace, 9 -bind = $mainMod SHIFT, 0, movetoworkspace, 10 - -# Move windows with vim keys (mainMod + SHIFT + h/j/k/l) -bind = $mainMod SHIFT, H, movewindow, l -bind = $mainMod SHIFT, L, movewindow, r -bind = $mainMod SHIFT, K, movewindow, u -bind = $mainMod SHIFT, J, movewindow, d - -# Resize windows with vim keys (mainMod + CTRL + h/j/k/l) -bind = $mainMod CTRL, H, resizeactive, -50 0 -bind = $mainMod CTRL, L, resizeactive, 50 0 -bind = $mainMod CTRL, K, resizeactive, 0 -50 -bind = $mainMod CTRL, J, resizeactive, 0 50 - -# Example special workspace (scratchpad) -bind = $mainMod, T, togglespecialworkspace, magic -bind = $mainMod SHIFT, T, movetoworkspace, special:magic - -# Scroll through existing workspaces with mainMod + scroll -bind = $mainMod, mouse_down, workspace, e+1 -bind = $mainMod, mouse_up, workspace, e-1 - -# Move/resize windows with mainMod + LMB/RMB and dragging -bindm = $mainMod, mouse:272, movewindow -bindm = $mainMod, mouse:273, resizewindow - -# Laptop multimedia keys for volume and LCD brightness -# Volume control with OSD -bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+ && qs ipc call shell showOsdVolume "$(wpctl get-volume @DEFAULT_AUDIO_SINK@ | awk '{print $2}')" -bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%- && qs ipc call shell showOsdVolume "$(wpctl get-volume @DEFAULT_AUDIO_SINK@ | awk '{print $2}')" -bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle && qs ipc call shell showOsdVolume "$(wpctl get-volume @DEFAULT_AUDIO_SINK@ | awk '{print $2}')" -bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle && qs ipc call shell showOsdMic "$(wpctl get-volume @DEFAULT_AUDIO_SOURCE@ | grep -q MUTED && echo true || echo false)" - -# Brightness control with OSD -bindel = ,XF86MonBrightnessUp, exec, brightnessctl set 5%+ && qs ipc call shell showOsdBrightness "$(brightnessctl -m | cut -d, -f4 | tr -d '%' | awk '{print $1/100}')" -bindel = ,XF86MonBrightnessDown, exec, brightnessctl set 5%- && qs ipc call shell showOsdBrightness "$(brightnessctl -m | cut -d, -f4 | tr -d '%' | awk '{print $1/100}')" - -# Requires playerctl -bindl = , XF86AudioNext, exec, playerctl next -bindl = , XF86AudioPause, exec, playerctl play-pause -bindl = , XF86AudioPlay, exec, playerctl play-pause -bindl = , XF86AudioPrev, exec, playerctl previous - -# Screenshot with Gradia (Print Screen key) -bind = , Print, exec, flatpak run be.alexandervanhee.gradia --screenshot=INTERACTIVE - -# App Switcher (Super+Tab to switch between windows across all workspaces) -bind = $mainMod, Tab, exec, qs ipc call shell nextWindow -bind = $mainMod SHIFT, Tab, exec, qs ipc call shell prevWindow - -############################## -### WINDOWS AND WORKSPACES ### -############################## - -# See https://wiki.hypr.land/Configuring/Window-Rules/ for more -# See https://wiki.hypr.land/Configuring/Workspace-Rules/ for workspace rules - -# Example windowrule -# windowrule = float,class:^(kitty)$,title:^(kitty)$ - -# Ignore maximize requests from apps. You'll probably like this. -windowrule = suppress_event maximize, match:class .* - -# Fix some dragging issues with XWayland -windowrule = no_focus on, match:class ^$, match:title ^$, match:xwayland true, match:float true, match:fullscreen false, match:pin false - -# Quickshell launcher layer rules -layerrule = blur on, match:namespace quickshell -layerrule = ignore_alpha 0, match:namespace quickshell -layerrule = animation slide, match:namespace quickshell - -# App switcher layer rules -layerrule = animation fade, match:namespace appswitcher diff --git a/dot_files/hypr/hyprland.lua b/dot_files/hypr/hyprland.lua new file mode 100644 index 00000000..9c5234d5 --- /dev/null +++ b/dot_files/hypr/hyprland.lua @@ -0,0 +1,399 @@ +-- ####################################################################################### +-- HYPRLAND CONFIG - Tokyo Night Theme with Vim-like Keybindings +-- ####################################################################################### +-- +-- Tokyo Night Color Palette: +-- - Background: #1a1b26 +-- - Foreground: #c0caf5 +-- - Blue (accent): #7aa2f7 +-- - Purple (accent): #bb9af7 +-- - Cyan: #7dcfff +-- - Green: #9ece6a +-- - Red: #f7768e +-- - Border inactive: #414868 +-- +-- Keybindings: +-- - Vim-like navigation: SUPER + h/j/k/l (left/down/up/right) +-- - Move windows: SUPER + SHIFT + h/j/k/l +-- - Resize windows: SUPER + CTRL + h/j/k/l +-- - App launcher: SUPER + R (opens left sidebar with search) +-- - Quick settings: SUPER + N (opens right sidebar) +-- +-- ####################################################################################### + +-- Since Hyprland 0.55, hyprlang (.conf) is deprecated in favor of Lua. +-- Refer to the wiki for more information. +-- https://wiki.hypr.land/Configuring/ + + +------------------ +---- MONITORS ---- +------------------ + +-- See https://wiki.hypr.land/Configuring/Basics/Monitors/ +hl.monitor({ output = "", mode = "preferred", position = "auto", scale = "auto" }) + + +--------------------- +---- MY PROGRAMS ---- +--------------------- + +-- See https://wiki.hypr.land/Configuring/Basics/Variables/ + +-- Set programs that you use +local terminal = "ghostty" +local fileManager = "files" +local menu = "qs ipc call shell toggleSidebarLeft" + + +------------------- +---- AUTOSTART ---- +------------------- + +-- See https://wiki.hypr.land/Configuring/Basics/Autostart/ +hl.on("hyprland.start", function() + -- Export the Wayland session environment to the systemd user manager and the + -- D-Bus activation environment. Without this, D-Bus-activated services such as + -- xdg-desktop-portal fail to start when Hyprland is launched directly (i.e. not + -- via uwsm), breaking dark-mode detection, file pickers, and screen sharing. + -- Runs first so the services started below inherit a populated environment. + hl.exec_cmd("dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_TYPE HYPRLAND_INSTANCE_SIGNATURE") + + -- Quickshell - Launcher, Notifications, OSD + hl.exec_cmd("quickshell") + + -- Wallpaper + hl.exec_cmd("hyprpaper -c /usr/share/hypercube/config/hypr/hyprpaper.conf") + + -- Idle / Lock + hl.exec_cmd("hypridle -c /usr/share/hypercube/config/hypr/hypridle.conf") + + -- Hyprland Polkit Authentication Agent (for privilege escalation) + hl.exec_cmd("systemctl --user start hyprpolkitagent") + + -- GNOME Keyring (for secrets management, SSH keys, and certificates) + hl.exec_cmd("gnome-keyring-daemon --start") +end) + + +------------------------------- +---- ENVIRONMENT VARIABLES ---- +------------------------------- + +-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Environment-variables/ + +-- Desktop identity - lets xdg-desktop-portal select the Hyprland backend +-- (hyprland-portals.conf) and route the Settings/color-scheme interface. +hl.env("XDG_CURRENT_DESKTOP", "Hyprland") + +-- XDG directories - required for quickshell and other apps to find Hypercube configs +hl.env("XDG_CONFIG_DIRS", "/etc/xdg:/usr/share/hypercube/config") +hl.env("XDG_DATA_DIRS", "/usr/local/share:/usr/share:/usr/share/hypercube/data") + +hl.env("XCURSOR_SIZE", "24") +hl.env("HYPRCURSOR_SIZE", "24") + +-- SSH agent socket from GNOME Keyring +hl.env("SSH_AUTH_SOCK", os.getenv("XDG_RUNTIME_DIR") .. "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/keyring/ssh") + + +----------------------- +----- PERMISSIONS ----- +----------------------- + +-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Permissions/ +-- Please note permission changes here require a Hyprland restart and are not applied on-the-fly +-- for security reasons + +-- hl.config({ +-- ecosystem = { +-- enforce_permissions = true, +-- }, +-- }) + +-- hl.permission("/usr/(bin|local/bin)/grim", "screencopy", "allow") +-- hl.permission("/usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland", "screencopy", "allow") +-- hl.permission("/usr/(bin|local/bin)/hyprpm", "plugin", "allow") + + +----------------------- +---- LOOK AND FEEL ---- +----------------------- + +-- Refer to https://wiki.hypr.land/Configuring/Basics/Variables/ +-- Tokyo Night Theme Colors +hl.config({ + -- https://wiki.hypr.land/Configuring/Basics/Variables/#general + general = { + gaps_in = 5, + gaps_out = 5, + + border_size = 2, + + col = { + -- Tokyo Night colors - active border uses accent blue/purple gradient + active_border = { colors = { "rgba(7aa2f7ee)", "rgba(bb9af7ee)" }, angle = 45 }, + inactive_border = "rgba(414868aa)", + }, + + -- Set to true to enable resizing windows by clicking and dragging on borders and gaps + resize_on_border = false, + + -- Please see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Tearing/ before you turn this on + allow_tearing = false, + + layout = "dwindle", + }, + + -- https://wiki.hypr.land/Configuring/Basics/Variables/#decoration + decoration = { + rounding = 0, + rounding_power = 2, + + -- Change transparency of focused and unfocused windows + active_opacity = 1.0, + inactive_opacity = 1.0, + + shadow = { + enabled = true, + range = 4, + render_power = 3, + color = "rgba(1a1b26ee)", -- Tokyo Night background + }, + + -- https://wiki.hypr.land/Configuring/Basics/Variables/#blur + blur = { + enabled = true, + size = 3, + passes = 1, + vibrancy = 0.1696, + }, + }, + + -- https://wiki.hypr.land/Configuring/Basics/Variables/#animations + animations = { + enabled = true, + }, +}) + +-- Default curves, see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Animations/#curves +hl.curve("easeOutQuint", { type = "bezier", points = { { 0.23, 1 }, { 0.32, 1 } } }) +hl.curve("easeInOutCubic", { type = "bezier", points = { { 0.65, 0.05 }, { 0.36, 1 } } }) +hl.curve("linear", { type = "bezier", points = { { 0, 0 }, { 1, 1 } } }) +hl.curve("almostLinear", { type = "bezier", points = { { 0.5, 0.5 }, { 0.75, 1 } } }) +hl.curve("quick", { type = "bezier", points = { { 0.15, 0 }, { 0.1, 1 } } }) + +-- Default animations, see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Animations/ +hl.animation({ leaf = "global", enabled = true, speed = 10, bezier = "default" }) +hl.animation({ leaf = "border", enabled = true, speed = 5.39, bezier = "easeOutQuint" }) +hl.animation({ leaf = "windows", enabled = true, speed = 4.79, bezier = "easeOutQuint" }) +hl.animation({ leaf = "windowsIn", enabled = true, speed = 4.1, bezier = "easeOutQuint", style = "popin 87%" }) +hl.animation({ leaf = "windowsOut", enabled = true, speed = 1.49, bezier = "linear", style = "popin 87%" }) +hl.animation({ leaf = "fadeIn", enabled = true, speed = 1.73, bezier = "almostLinear" }) +hl.animation({ leaf = "fadeOut", enabled = true, speed = 1.46, bezier = "almostLinear" }) +hl.animation({ leaf = "fade", enabled = true, speed = 3.03, bezier = "quick" }) +hl.animation({ leaf = "layers", enabled = true, speed = 3.81, bezier = "easeOutQuint" }) +hl.animation({ leaf = "layersIn", enabled = true, speed = 4, bezier = "easeOutQuint", style = "fade" }) +hl.animation({ leaf = "layersOut", enabled = true, speed = 1.5, bezier = "linear", style = "fade" }) +hl.animation({ leaf = "fadeLayersIn", enabled = true, speed = 1.79, bezier = "almostLinear" }) +hl.animation({ leaf = "fadeLayersOut", enabled = true, speed = 1.39, bezier = "almostLinear" }) +hl.animation({ leaf = "workspaces", enabled = true, speed = 1.94, bezier = "almostLinear", style = "fade" }) +hl.animation({ leaf = "workspacesIn", enabled = true, speed = 1.21, bezier = "almostLinear", style = "fade" }) +hl.animation({ leaf = "workspacesOut", enabled = true, speed = 1.94, bezier = "almostLinear", style = "fade" }) +hl.animation({ leaf = "zoomFactor", enabled = true, speed = 7, bezier = "quick" }) + +-- Ref https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/ +-- "Smart gaps" / "No gaps when only" +-- uncomment all if you wish to use that. +-- hl.workspace_rule({ workspace = "w[tv1]", gaps_out = 0, gaps_in = 0 }) +-- hl.workspace_rule({ workspace = "f[1]", gaps_out = 0, gaps_in = 0 }) +-- hl.window_rule({ match = { float = false, workspace = "w[tv1]" }, border_size = 0 }) +-- hl.window_rule({ match = { float = false, workspace = "w[tv1]" }, rounding = 0 }) +-- hl.window_rule({ match = { float = false, workspace = "f[1]" }, border_size = 0 }) +-- hl.window_rule({ match = { float = false, workspace = "f[1]" }, rounding = 0 }) + +-- See https://wiki.hypr.land/Configuring/Layouts/Dwindle-Layout/ for more +hl.config({ + dwindle = { + preserve_split = true, -- You probably want this + }, +}) + +-- See https://wiki.hypr.land/Configuring/Layouts/Master-Layout/ for more +hl.config({ + master = { + new_status = "master", + }, +}) + +-- https://wiki.hypr.land/Configuring/Basics/Variables/#misc +hl.config({ + misc = { + force_default_wallpaper = 0, -- Set to 0 or 1 to disable the anime mascot wallpapers + disable_hyprland_logo = true, -- If true disables the random hyprland logo / anime girl background. :( + }, +}) + + +--------------- +---- INPUT ---- +--------------- + +-- https://wiki.hypr.land/Configuring/Basics/Variables/#input +hl.config({ + input = { + kb_layout = "us", + kb_variant = "", + kb_model = "", + -- caps:ctrl_modifier - Caps Lock acts as Ctrl + kb_options = "caps:ctrl_modifier", + kb_rules = "", + + follow_mouse = 1, + + sensitivity = 0, -- -1.0 - 1.0, 0 means no modification. + + touchpad = { + natural_scroll = false, + }, + }, +}) + +-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Gestures/ +hl.gesture({ fingers = 3, direction = "horizontal", action = "workspace" }) + +-- Example per-device config +-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Devices/ for more +hl.device({ + name = "epic-mouse-v1", + sensitivity = -0.5, +}) + + +--------------------- +---- KEYBINDINGS ---- +--------------------- + +-- See https://wiki.hypr.land/Configuring/Basics/Binds/ +local mainMod = "SUPER" -- Sets "Windows" key as main modifier + +hl.bind(mainMod .. " + Q", hl.dsp.exec_cmd(terminal)) +hl.bind(mainMod .. " + C", hl.dsp.window.close()) +hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(fileManager)) +hl.bind(mainMod .. " + V", hl.dsp.window.float({ action = "toggle" })) +hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ mode = "fullscreen" })) -- Fullscreen +hl.bind(mainMod .. " + R", hl.dsp.exec_cmd(menu)) +-- hl.bind(mainMod .. " + A", hl.dsp.exec_cmd("qs ipc call shell toggleSidebarLeft")) -- Removed - use SUPER+R instead +hl.bind(mainMod .. " + N", hl.dsp.exec_cmd("qs ipc call shell toggleSidebarRight")) -- Notifications/quick settings +hl.bind(mainMod .. " + Escape", hl.dsp.exec_cmd("qs ipc call shell closeAll")) -- Close all panels +hl.bind(mainMod .. " + P", hl.dsp.window.pseudo()) -- dwindle +hl.bind(mainMod .. " + S", hl.dsp.layout("togglesplit")) -- dwindle +hl.bind(mainMod .. " + CTRL + Escape", hl.dsp.exec_cmd("hyprlock")) -- Lock screen + +-- Move focus with mainMod + vim keys (h/j/k/l) +hl.bind(mainMod .. " + H", hl.dsp.focus({ direction = "left" })) +hl.bind(mainMod .. " + L", hl.dsp.focus({ direction = "right" })) +hl.bind(mainMod .. " + K", hl.dsp.focus({ direction = "up" })) +hl.bind(mainMod .. " + J", hl.dsp.focus({ direction = "down" })) + +-- Move focus with mainMod + arrow keys (alternative) +hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" })) +hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" })) +hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" })) +hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" })) + +-- Switch workspaces with mainMod + [0-9] +-- Move active window to a workspace with mainMod + SHIFT + [0-9] +for i = 1, 10 do + local key = i % 10 -- 10 maps to key 0 + hl.bind(mainMod .. " + " .. key, hl.dsp.focus({ workspace = i })) + hl.bind(mainMod .. " + SHIFT + " .. key, hl.dsp.window.move({ workspace = i })) +end + +-- Move windows with vim keys (mainMod + SHIFT + h/j/k/l) +hl.bind(mainMod .. " + SHIFT + H", hl.dsp.window.move({ direction = "left" })) +hl.bind(mainMod .. " + SHIFT + L", hl.dsp.window.move({ direction = "right" })) +hl.bind(mainMod .. " + SHIFT + K", hl.dsp.window.move({ direction = "up" })) +hl.bind(mainMod .. " + SHIFT + J", hl.dsp.window.move({ direction = "down" })) + +-- Resize windows with vim keys (mainMod + CTRL + h/j/k/l) +hl.bind(mainMod .. " + CTRL + H", hl.dsp.window.resize({ x = -50, y = 0, relative = true })) +hl.bind(mainMod .. " + CTRL + L", hl.dsp.window.resize({ x = 50, y = 0, relative = true })) +hl.bind(mainMod .. " + CTRL + K", hl.dsp.window.resize({ x = 0, y = -50, relative = true })) +hl.bind(mainMod .. " + CTRL + J", hl.dsp.window.resize({ x = 0, y = 50, relative = true })) + +-- Example special workspace (scratchpad) +hl.bind(mainMod .. " + T", hl.dsp.workspace.toggle_special("magic")) +hl.bind(mainMod .. " + SHIFT + T", hl.dsp.window.move({ workspace = "special:magic" })) + +-- Scroll through existing workspaces with mainMod + scroll +hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" })) +hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" })) + +-- Move/resize windows with mainMod + LMB/RMB and dragging +hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true }) +hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true }) + +-- Laptop multimedia keys for volume and LCD brightness +-- Volume control with OSD +hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd([[wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+ && qs ipc call shell showOsdVolume "$(wpctl get-volume @DEFAULT_AUDIO_SINK@ | awk '{print $2}')"]]), { locked = true, repeating = true }) +hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd([[wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%- && qs ipc call shell showOsdVolume "$(wpctl get-volume @DEFAULT_AUDIO_SINK@ | awk '{print $2}')"]]), { locked = true, repeating = true }) +hl.bind("XF86AudioMute", hl.dsp.exec_cmd([[wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle && qs ipc call shell showOsdVolume "$(wpctl get-volume @DEFAULT_AUDIO_SINK@ | awk '{print $2}')"]]), { locked = true, repeating = true }) +hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd([[wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle && qs ipc call shell showOsdMic "$(wpctl get-volume @DEFAULT_AUDIO_SOURCE@ | grep -q MUTED && echo true || echo false)"]]), { locked = true, repeating = true }) + +-- Brightness control with OSD +hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd([[brightnessctl set 5%+ && qs ipc call shell showOsdBrightness "$(brightnessctl -m | cut -d, -f4 | tr -d '%' | awk '{print $1/100}')"]]), { locked = true, repeating = true }) +hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd([[brightnessctl set 5%- && qs ipc call shell showOsdBrightness "$(brightnessctl -m | cut -d, -f4 | tr -d '%' | awk '{print $1/100}')"]]), { locked = true, repeating = true }) + +-- Requires playerctl +hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true }) +hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true }) +hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true }) +hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true }) + +-- Screenshot with Gradia (Print Screen key) +hl.bind("Print", hl.dsp.exec_cmd("flatpak run be.alexandervanhee.gradia --screenshot=INTERACTIVE")) + +-- App Switcher (Super+Tab to switch between windows across all workspaces) +hl.bind(mainMod .. " + Tab", hl.dsp.exec_cmd("qs ipc call shell nextWindow")) +hl.bind(mainMod .. " + SHIFT + Tab", hl.dsp.exec_cmd("qs ipc call shell prevWindow")) + + +-------------------------------- +---- WINDOWS AND WORKSPACES ---- +-------------------------------- + +-- See https://wiki.hypr.land/Configuring/Basics/Window-Rules/ for more +-- See https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/ for workspace rules + +-- Example windowrule +-- hl.window_rule({ match = { class = "^(kitty)$", title = "^(kitty)$" }, float = true }) + +-- Ignore maximize requests from apps. You'll probably like this. +hl.window_rule({ + name = "suppress-maximize-events", + match = { class = ".*" }, + suppress_event = "maximize", +}) + +-- Fix some dragging issues with XWayland +hl.window_rule({ + name = "fix-xwayland-drags", + match = { + class = "^$", + title = "^$", + xwayland = true, + float = true, + fullscreen = false, + pin = false, + }, + no_focus = true, +}) + +-- Quickshell launcher layer rules +hl.layer_rule({ match = { namespace = "quickshell" }, blur = true }) +hl.layer_rule({ match = { namespace = "quickshell" }, ignore_alpha = 0 }) +hl.layer_rule({ match = { namespace = "quickshell" }, animation = "slide" }) + +-- App switcher layer rules +hl.layer_rule({ match = { namespace = "appswitcher" }, animation = "fade" }) diff --git a/iso_files/hook-post-rootfs.sh b/iso_files/hook-post-rootfs.sh index fc1bbc06..900d3cd9 100644 --- a/iso_files/hook-post-rootfs.sh +++ b/iso_files/hook-post-rootfs.sh @@ -86,24 +86,27 @@ if [[ -d /usr/share/hypercube/config/hypr ]]; then cp /usr/share/hypercube/config/hypr/* /usr/share/hypr/config.live.d/ # Add live environment configuration - cat >> /usr/share/hypr/config.live.d/hyprland.conf << 'EOF' - -# Live ISO - Environment variables for XDG config discovery -# These are normally set by systemd user session but greetd skips that -env = XDG_CONFIG_DIRS,/etc/xdg:/usr/share/hypercube/config -env = XDG_DATA_DIRS,/usr/local/share:/usr/share:/usr/share/hypercube/data -env = GTK_THEME,Tokyonight-Dark -env = QT_QPA_PLATFORMTHEME,qt6ct - -# Live ISO - Window rules for Anaconda installer -# Prevent fullscreen, keep as tiled window so user can access terminal -windowrule = tile, class:^(anaconda)$ -windowrule = tile, class:^(liveinst)$ -windowrule = noinitialfocus, class:^(anaconda)$ -windowrule = noinitialfocus, class:^(liveinst)$ - -# Live ISO - Auto-launch installer -exec-once = liveinst + # Since Hyprland 0.55 the config is Lua, so append Lua to hyprland.lua. + cat >> /usr/share/hypr/config.live.d/hyprland.lua << 'EOF' + +-- Live ISO - Environment variables for XDG config discovery +-- These are normally set by systemd user session but greetd skips that +hl.env("XDG_CONFIG_DIRS", "/etc/xdg:/usr/share/hypercube/config") +hl.env("XDG_DATA_DIRS", "/usr/local/share:/usr/share:/usr/share/hypercube/data") +hl.env("GTK_THEME", "Tokyonight-Dark") +hl.env("QT_QPA_PLATFORMTHEME", "qt6ct") + +-- Live ISO - Window rules for Anaconda installer +-- Prevent fullscreen, keep as tiled window so user can access terminal +hl.window_rule({ match = { class = "^(anaconda)$" }, tile = true }) +hl.window_rule({ match = { class = "^(liveinst)$" }, tile = true }) +hl.window_rule({ match = { class = "^(anaconda)$" }, no_initial_focus = true }) +hl.window_rule({ match = { class = "^(liveinst)$" }, no_initial_focus = true }) + +-- Live ISO - Auto-launch installer +hl.on("hyprland.start", function() + hl.exec_cmd("liveinst") +end) EOF fi diff --git a/system_files/shared/etc/dconf/db/local.d/01-hypercube-dark-mode b/system_files/shared/etc/dconf/db/local.d/01-hypercube-dark-mode index 23216692..8ec47cf3 100644 --- a/system_files/shared/etc/dconf/db/local.d/01-hypercube-dark-mode +++ b/system_files/shared/etc/dconf/db/local.d/01-hypercube-dark-mode @@ -7,4 +7,4 @@ gtk-theme='Tokyonight-Dark' icon-theme='Tokyonight-Dark' cursor-theme='Adwaita' -# Note: XKB options are now configured in Hyprland (hyprland.conf) +# Note: XKB options are now configured in Hyprland (hyprland.lua) From 27a6fcc43e899efeb2a9ea6932e55a31ac133e0f Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 27 Oct 2026 00:07:03 +0000 Subject: [PATCH 3/4] config: finish Hyprland Lua migration Builds on the hyprlang -> Lua port of hyprland.conf / hyprland-kiosk.conf. With a Lua config, `hyprctl dispatch ` is evaluated as `hl.dispatch()`, so every legacy dispatch string is now a Lua syntax error. Port the remaining callers: - hypridle: dpms on/off -> hl.dsp.dpms({ action = ... }), otherwise the screen never blanks or wakes on idle - quickshell app switcher: focuswindow -> hl.dsp.focus({ window = ... }) - quickshell logout: exit -> hl.dsp.exit() Existing users keep their old ~/.config/hypr/hyprland.conf stub, which Hyprland now skips in favour of the system hyprland.lua, silently dropping their customizations. Add migration 003 to write the Lua stub for them and carry any custom hyprlang lines over as comments to port. Also ship .luarc.json into ~/.config/hypr so editors find the hl stubs. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_015S2eLxUcy5sGRvu1X8TmFk --- build_files/hypercube/03-hypercube-configs.sh | 2 + dot_files/hypr/hypridle.conf | 6 +- dot_files/quickshell/services/Power.qml | 2 +- dot_files/quickshell/services/Windows.qml | 4 +- .../003-hyprland-lua-user-config.sh | 66 +++++++++++++++++++ 5 files changed, 74 insertions(+), 6 deletions(-) create mode 100755 system_files/shared/usr/share/hypercube/migrations/003-hyprland-lua-user-config.sh diff --git a/build_files/hypercube/03-hypercube-configs.sh b/build_files/hypercube/03-hypercube-configs.sh index 13a3fb6a..860efa91 100755 --- a/build_files/hypercube/03-hypercube-configs.sh +++ b/build_files/hypercube/03-hypercube-configs.sh @@ -77,6 +77,8 @@ require("/usr/share/hypercube/config/hypr/hyprland.lua") -- Your customizations below: EOF +# LuaLS config so editors pick up the hl API stubs in ~/.config/hypr +install -Dm644 "${CONFIG_DIR}/hypr/.luarc.json" /etc/skel/.config/hypr/.luarc.json ### Neovim - devcube sandbox overrides # The editor config + AI agents ship baked into the devcube podman image diff --git a/dot_files/hypr/hypridle.conf b/dot_files/hypr/hypridle.conf index c28d1679..b86c92c5 100644 --- a/dot_files/hypr/hypridle.conf +++ b/dot_files/hypr/hypridle.conf @@ -4,7 +4,7 @@ general { lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances before_sleep_cmd = loginctl lock-session # lock before suspend - after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display + after_sleep_cmd = hyprctl dispatch 'hl.dsp.dpms({ action = "on" })' # to avoid having to press a key twice to turn on the display } # Dim screen after 2.5 minutes of inactivity @@ -30,8 +30,8 @@ listener { # Turn off screen after 5.5 minutes of inactivity (30 seconds after lock) listener { timeout = 330 # 5.5 minutes - on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed - on-resume = hyprctl dispatch dpms on # screen on when activity is detected after timeout has fired + on-timeout = hyprctl dispatch 'hl.dsp.dpms({ action = "off" })' # screen off when timeout has passed + on-resume = hyprctl dispatch 'hl.dsp.dpms({ action = "on" })' # screen on when activity is detected after timeout has fired } # Suspend system after 30 minutes of inactivity diff --git a/dot_files/quickshell/services/Power.qml b/dot_files/quickshell/services/Power.qml index 23136c75..a540c288 100644 --- a/dot_files/quickshell/services/Power.qml +++ b/dot_files/quickshell/services/Power.qml @@ -93,7 +93,7 @@ Singleton { Process { id: logoutProcess - command: ["sh", "-c", "hyprctl dispatch exit || loginctl terminate-session $XDG_SESSION_ID"] + command: ["sh", "-c", "hyprctl dispatch 'hl.dsp.exit()' || loginctl terminate-session $XDG_SESSION_ID"] } function lock() { diff --git a/dot_files/quickshell/services/Windows.qml b/dot_files/quickshell/services/Windows.qml index 360a86d3..4304c9f8 100644 --- a/dot_files/quickshell/services/Windows.qml +++ b/dot_files/quickshell/services/Windows.qml @@ -52,7 +52,7 @@ Singleton { Process { id: focusProcess - command: ["hyprctl", "dispatch", "focuswindow", "address:0x0"] + command: ["hyprctl", "dispatch", "hl.dsp.focus({ window = \"address:0x0\" })"] } function refresh() { @@ -82,7 +82,7 @@ Singleton { } const window = windows[currentIndex] - focusProcess.command = ["hyprctl", "dispatch", "focuswindow", "address:" + window.address] + focusProcess.command = ["hyprctl", "dispatch", "hl.dsp.focus({ window = \"address:" + window.address + "\" })"] focusProcess.running = true switcherActive = false } diff --git a/system_files/shared/usr/share/hypercube/migrations/003-hyprland-lua-user-config.sh b/system_files/shared/usr/share/hypercube/migrations/003-hyprland-lua-user-config.sh new file mode 100755 index 00000000..b6fed56a --- /dev/null +++ b/system_files/shared/usr/share/hypercube/migrations/003-hyprland-lua-user-config.sh @@ -0,0 +1,66 @@ +#!/bin/bash +# Migration: Move users' Hyprland stub config from hyprlang to Lua +# +# Hyprland 0.55+ prefers hyprland.lua anywhere on the config search path over +# hyprland.conf, and the system default is now hyprland.lua. Existing users +# still have the old ~/.config/hypr/hyprland.conf stub, which sources a file +# that no longer exists and is ignored in favour of the system hyprland.lua. +# +# For each user with a hyprland.conf but no hyprland.lua, write the new Lua +# stub. Any customizations they added to the old stub are carried over as +# comments so they can be ported by hand. hyprland.conf is left in place. + +set -euo pipefail + +SYSTEM_CONFIG="/usr/share/hypercube/config/hypr/hyprland.lua" + +[[ -f "$SYSTEM_CONFIG" ]] || exit 0 + +while IFS=: read -r user _ uid gid _ home _; do + [[ "$uid" -ge 1000 && "$uid" -lt 60000 ]] || continue + + hypr_dir="$home/.config/hypr" + old="$hypr_dir/hyprland.conf" + new="$hypr_dir/hyprland.lua" + + # Don't follow symlinks into places we shouldn't write (e.g. dotfile repos) + [[ -f "$old" && ! -L "$old" && ! -L "$hypr_dir" ]] || continue + [[ -e "$new" || -L "$new" ]] && continue + + echo "Migrating Hyprland config for $user to Lua..." + + # Everything the user wrote besides the stock stub lines + custom=$(grep -vE '^\s*(#|$)|^\s*source\s*=\s*/usr/share/hypercube/config/hypr/hyprland\.conf\s*$' "$old" || true) + + tmp=$(mktemp) + cat >"$tmp" <>"$tmp" + fi + + install -m 0644 -o "$uid" -g "$gid" "$tmp" "$new" + rm -f "$tmp" + + luarc="/usr/share/hypercube/config/hypr/.luarc.json" + if [[ -f "$luarc" && ! -e "$hypr_dir/.luarc.json" ]]; then + install -m 0644 -o "$uid" -g "$gid" "$luarc" "$hypr_dir/.luarc.json" + fi +done < <(getent passwd) + +echo "Hyprland user config migration complete" From 02715bde3a400048976019b27aba58ab87541545 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 27 Oct 2026 00:53:27 +0000 Subject: [PATCH 4/4] pkg(hyprland-protocols): build with CMake for 0.8.0 Upstream 0.8.0 replaced meson.build with CMakeLists.txt, so the meson build failed in COPR. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_015S2eLxUcy5sGRvu1X8TmFk --- packages/hyprland-protocols/hyprland-protocols.spec | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/hyprland-protocols/hyprland-protocols.spec b/packages/hyprland-protocols/hyprland-protocols.spec index 6f333a6e..5773b621 100644 --- a/packages/hyprland-protocols/hyprland-protocols.spec +++ b/packages/hyprland-protocols/hyprland-protocols.spec @@ -8,7 +8,8 @@ License: BSD-3-Clause URL: https://github.com/hyprwm/hyprland-protocols Source: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz -BuildRequires: meson +BuildRequires: cmake +BuildRequires: gcc %description %{summary}. @@ -23,11 +24,11 @@ Summary: Wayland protocol extensions for Hyprland %autosetup -p1 %build -%meson -%meson_build +%cmake +%cmake_build %install -%meson_install +%cmake_install %files devel %license LICENSE @@ -38,5 +39,6 @@ Summary: Wayland protocol extensions for Hyprland %changelog * Sat Oct 17 2026 Hypercube - 0.8.0-1 - Update to 0.8.0 +- Upstream switched from meson to CMake * Mon Dec 16 2024 Hypercube - 0.7.0-1 - Initial package for Hypercube (based on sdegler/hyprland COPR)