Last active
October 29, 2025 02:41
-
-
Save BluSyn/f8585a5da073532020e4ebcd1e3ecaef to your computer and use it in GitHub Desktop.
Custom hyprland 0.51 build with patches for ARM GCC 14.2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Maintainer: FabioLolix | |
| # Maintainer: éclairevoyant | |
| # Maintainer: alba4k <blaskoazzolaaaron[at]gmail.com> | |
| # Contributor: ThatOneCalculator <kainoa at t1c dot dev> | |
| _pkgname="hyprland" | |
| pkgname="$_pkgname-git" | |
| pkgver=0.51.0.r123.g309c3c7 | |
| pkgrel=1 | |
| pkgdesc="Hyprland is an independent, highly customizable, dynamic tiling Wayland compositor that doesn't sacrifice on its looks" | |
| arch=('x86_64' 'aarch64') | |
| url="https://github.com/hyprwm/Hyprland" | |
| license=('BSD-3-Clause') | |
| depends=( | |
| aquamarine | |
| cairo | |
| gcc-libs | |
| glib2 | |
| glibc | |
| glslang | |
| hyprcursor | |
| hyprgraphics | |
| hyprland-qtutils | |
| hyprlang | |
| hyprutils | |
| libdisplay-info | |
| libdrm | |
| libglvnd | |
| libinput | |
| libliftoff | |
| libx11 | |
| libxcb | |
| libxcomposite | |
| libxcursor | |
| libxfixes | |
| libxkbcommon | |
| libxrender | |
| mesa | |
| opengl-driver | |
| pango | |
| pixman | |
| polkit | |
| re2 | |
| seatd | |
| systemd-libs | |
| tomlplusplus | |
| util-linux-libs | |
| wayland | |
| wayland-protocols | |
| xcb-proto | |
| xcb-util | |
| xcb-util-errors | |
| xcb-util-image | |
| xcb-util-keysyms | |
| xcb-util-renderutil | |
| xcb-util-wm | |
| xorg-xwayland | |
| ) | |
| makedepends=( | |
| cmake | |
| git | |
| glaze | |
| hyprland-protocols | |
| hyprwayland-scanner | |
| ninja | |
| patch | |
| #pkgconf | |
| python # required by udis86 | |
| xorgproto | |
| ) | |
| optdepends=( | |
| 'cmake: to build and install plugins using hyprpm' | |
| 'cpio: to build and install plugins using hyprpm' | |
| 'glaze: to build and install plugins using hyprpm' | |
| 'hyprqt6engine-git: the recommended way to manage qt styles' | |
| 'meson: to build and install plugins using hyprpm' | |
| 'uwsm: the recommended way to start Hyprland' | |
| ) | |
| conflicts=("$_pkgname") | |
| provides=("$_pkgname=${pkgver%%.r*}" "wayland-compositor") | |
| _pkgsrc=$_pkgname | |
| source=( | |
| "$_pkgsrc::git+$url.git" | |
| "udis86::git+https://github.com/canihavesomecoffee/udis86.git" | |
| ) | |
| sha256sums=( | |
| 'SKIP' | |
| 'SKIP' | |
| ) | |
| backup=("usr/share/xdg-desktop-portal/hyprland-portals.conf") | |
| prepare() { | |
| cd "$_pkgsrc" | |
| git submodule init | |
| git config submodule.subprojects/udis86.url "$srcdir/udis86" | |
| git config submodule.subprojects/tracy.update none | |
| git -c protocol.file.allow=always submodule update | |
| if [[ -z "$(git config --get user.name)" ]]; then | |
| git config user.name local && git config user.email '<>' && git config commit.gpgsign false | |
| fi | |
| ## Patching fixes to allow hyprland 0.51 to build on gcc 14.2 (latest version available for archlinuxarm) | |
| patch -p1 <<'EOF' | |
| diff --git a/hyprctl/main.cpp b/hyprctl/main.cpp | |
| index e15a17f5f..a121fe607 100644 | |
| --- a/hyprctl/main.cpp | |
| +++ b/hyprctl/main.cpp | |
| @@ -204,7 +204,7 @@ int request(std::string_view arg, int minArgs = 0, bool needRoll = false) { | |
| sockaddr_un serverAddress = {0}; | |
| serverAddress.sun_family = AF_UNIX; | |
| - std::string socketPath = getRuntimeDir() + "/" + instanceSignature + "/.socket.sock"; | |
| + std::string socketPath = getRuntimeDir() + "/" + std::string(instanceSignature) + "/.socket.sock"; | |
| strncpy(serverAddress.sun_path, socketPath.c_str(), sizeof(serverAddress.sun_path) - 1); | |
| @@ -270,7 +270,7 @@ int requestIPC(std::string_view filename, std::string_view arg) { | |
| sockaddr_un serverAddress = {0}; | |
| serverAddress.sun_family = AF_UNIX; | |
| - std::string socketPath = getRuntimeDir() + "/" + instanceSignature + "/" + filename; | |
| + std::string socketPath = getRuntimeDir() + "/" + std::string(instanceSignature) + "/" + std::string(filename); | |
| strncpy(serverAddress.sun_path, socketPath.c_str(), sizeof(serverAddress.sun_path) - 1); | |
| diff --git a/src/config/defaultConfig.hpp b/src/config/defaultConfig.hpp | |
| index 8bdfea39d..e6f46c0b8 100644 | |
| --- a/src/config/defaultConfig.hpp | |
| +++ b/src/config/defaultConfig.hpp | |
| @@ -11,8 +11,311 @@ inline constexpr std::string_view AUTOGENERATED_PREFIX = R"#( | |
| autogenerated = 1 # remove this line to remove the warning | |
| )#"; | |
| -inline constexpr char EXAMPLE_CONFIG_BYTES[] = { | |
| -#embed "../../example/hyprland.conf" | |
| -}; | |
| +inline constexpr std::string_view EXAMPLE_CONFIG = R"#( | |
| +# This is an example Hyprland config file. | |
| +# Refer to the wiki for more information. | |
| +# https://wiki.hypr.land/Configuring/ | |
| -inline constexpr std::string_view EXAMPLE_CONFIG = {EXAMPLE_CONFIG_BYTES, sizeof(EXAMPLE_CONFIG_BYTES)}; | |
| +# Please note not all available settings / options are set here. | |
| +# For a full list, see the wiki | |
| + | |
| +# You can split this configuration into multiple files | |
| +# Create your files separately and then link them to this file like this: | |
| +# source = ~/.config/hypr/myColors.conf | |
| + | |
| + | |
| +################ | |
| +### 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 = kitty | |
| +$fileManager = dolphin | |
| +$menu = wofi --show drun | |
| + | |
| + | |
| +################# | |
| +### AUTOSTART ### | |
| +################# | |
| + | |
| +# Autostart necessary processes (like notifications daemons, status bars, etc.) | |
| +# Or execute your favorite apps at launch like this: | |
| + | |
| +# exec-once = $terminal | |
| +# exec-once = nm-applet & | |
| +# exec-once = waybar & hyprpaper & firefox | |
| + | |
| + | |
| +############################# | |
| +### ENVIRONMENT VARIABLES ### | |
| +############################# | |
| + | |
| +# See https://wiki.hypr.land/Configuring/Environment-variables/ | |
| + | |
| +env = XCURSOR_SIZE,24 | |
| +env = HYPRCURSOR_SIZE,24 | |
| + | |
| + | |
| +################### | |
| +### 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 | |
| +general { | |
| + gaps_in = 5 | |
| + gaps_out = 20 | |
| + | |
| + border_size = 2 | |
| + | |
| + # https://wiki.hypr.land/Configuring/Variables/#variable-types for info about colors | |
| + col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg | |
| + col.inactive_border = rgba(595959aa) | |
| + | |
| + # 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 = 10 | |
| + 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(1a1a1aee) | |
| + } | |
| + | |
| + # 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 { | |
| + pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below | |
| + 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 = -1 # Set to 0 or 1 to disable the anime mascot wallpapers | |
| + disable_hyprland_logo = false # 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 = | |
| + kb_options = | |
| + 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, M, exit, | |
| +bind = $mainMod, E, exec, $fileManager | |
| +bind = $mainMod, V, togglefloating, | |
| +bind = $mainMod, R, exec, $menu | |
| +bind = $mainMod, P, pseudo, # dwindle | |
| +bind = $mainMod, J, togglesplit, # dwindle | |
| + | |
| +# Move focus with mainMod + arrow keys | |
| +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 | |
| + | |
| +# Example special workspace (scratchpad) | |
| +bind = $mainMod, S, togglespecialworkspace, magic | |
| +bind = $mainMod SHIFT, S, 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 | |
| +bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ | |
| +bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- | |
| +bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle | |
| +bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle | |
| +bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+ | |
| +bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%- | |
| + | |
| +# Requires playerctl | |
| +bindl = , XF86AudioNext, exec, playerctl next | |
| +bindl = , XF86AudioPause, exec, playerctl play-pause | |
| +bindl = , XF86AudioPlay, exec, playerctl play-pause | |
| +bindl = , XF86AudioPrev, exec, playerctl previous | |
| + | |
| +############################## | |
| +### 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 = suppressevent maximize, class:.* | |
| + | |
| +# Fix some dragging issues with XWayland | |
| +windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0 | |
| +)#"; | |
| + | |
| +//inline constexpr std::string_view EXAMPLE_CONFIG = {EXAMPLE_CONFIG_BYTES, sizeof(EXAMPLE_CONFIG_BYTES)}; | |
| diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp | |
| index e12a4bff0..a568dc4aa 100644 | |
| --- a/src/helpers/Monitor.cpp | |
| +++ b/src/helpers/Monitor.cpp | |
| @@ -619,7 +619,13 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) { | |
| std::ranges::sort(sortedModes, sortFunc); | |
| if (sortedModes.size() > 3) | |
| sortedModes.erase(sortedModes.begin() + 3, sortedModes.end()); | |
| - requestedModes.insert_range(requestedModes.end(), sortedModes | std::views::reverse); | |
| + | |
| + // ---- C++11 compatible reverse + insert (wrap in CSharedPointer) ---- | |
| + std::vector<Hyprutils::Memory::CSharedPointer<Aquamarine::SOutputMode>> reversed; | |
| + reversed.reserve(sortedModes.size()); | |
| + for (auto it = sortedModes.rbegin(); it != sortedModes.rend(); ++it) | |
| + reversed.emplace_back(*it); // copy the CSharedPointer itself | |
| + requestedModes.insert(requestedModes.end(), reversed.begin(), reversed.end()); | |
| }; | |
| // last fallback is always preferred mode | |
| diff --git a/src/xwayland/XWM.hpp b/src/xwayland/XWM.hpp | |
| index b03ab4b2d..5a9c286b7 100644 | |
| --- a/src/xwayland/XWM.hpp | |
| +++ b/src/xwayland/XWM.hpp | |
| @@ -213,7 +213,7 @@ class CXWM { | |
| std::vector<SP<CX11DataOffer>> m_dndDataOffers; | |
| inline xcb_connection_t* getConnection() { | |
| - return m_connection ? *m_connection : nullptr; | |
| + return m_connection ? *m_connection : (xcb_connection_t*)nullptr; | |
| } | |
| struct { | |
| CHyprSignalListener newWLSurface; | |
| EOF | |
| } | |
| #pkgver() { | |
| # cd "$_pkgsrc" | |
| # git describe --long --tags --abbrev=7 | sed 's/^v//;s/\([^-]*-g\)/r\1/;s/-/./g' | |
| #} | |
| build() { | |
| local cmake_options=( | |
| -B build | |
| -S "$_pkgsrc" | |
| -G Ninja | |
| -W no-dev | |
| -D CMAKE_BUILD_TYPE=None | |
| -D CMAKE_INSTALL_PREFIX=/usr | |
| ) | |
| cmake "${cmake_options[@]}" | |
| cmake --build build | |
| } | |
| package() { | |
| DESTDIR="$pkgdir" cmake --install build | |
| install -Dm0644 "$_pkgsrc/LICENSE" -t "$pkgdir/usr/share/licenses/${pkgname}/" | |
| install -Dm0644 "$_pkgsrc/subprojects/udis86/LICENSE" "$pkgdir/usr/share/licenses/$pkgname/LICENSE-udis86" | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment