Releases: hyprwm/Hyprland
v0.46.2
Another round of minor fixes and patches for 0.46.0. Mostly edge-case crashes.
Fixes backported
- windowrules: fixup duplicate rule enum tags
- hyprctl: fix hyprctl batch json command (#8749)
- core: avoid activating toplevel-less surfaces
- xwayland: fixes to no_xwayland builds
- xwm: fixup targets in selection requests
- core: unbreak build on FreeBSD (#8762)
- hyprpm: fix hyprpm sometimes returning 0 despite errors occurring (#8761)
- core: fix possible crash on null workspace
- layout: apply groups after window creation (#8779)
Special Thanks
As always, special thanks for donating to:
- Xoores
- taigrr
- SomeMediocreGamer
- Azelphur
- maltbeverage
- johndoe42
- yyyyyyyan
- alukortti
- Theory_Lukas
- MasterHowToLearn
- ari-cake
- AuHunter
- Amaan Q.
- Jas Singh
- Hongdu
- Gerenier
- DEFLATE
- Matej Drobnic
- Snootiful
- al
- niraami
- Ricebal
- benvonh
- John Oberhauser
- loseardes77
- matipan
- SViN Drawing
Full Changelog: v0.46.0...v0.46.2
v0.46.1
A minor release with a patch backported from main.
Fixes backported
- windowrules: fixup duplicate rule enum tags
Special Thanks
Special thanks as always to these chads for donating $$$:
- Xoores
- taigrr
- SomeMediocreGamer
- Azelphur
- maltbeverage
- johndoe42
- yyyyyyyan
- alukortti
- Theory_Lukas
- MasterHowToLearn
- ari-cake
- AuHunter
- Amaan Q.
- Jas Singh
- Hongdu
- Gerenier
- DEFLATE
- Matej Drobnic
- Snootiful
- al
- niraami
- Ricebal
- benvonh
Full Changelog: v0.46.0...v0.46.1
v0.46.0
The Hyprland overlord (also known as Santa in December) is proudly bringing you 0.46.0.
Merry Hypr Christmas!
Breaking changes
- window/layer rule regexes now require a full match (not any match) to trigger.
cursor:dumb_copy
is gone in favor ofcursor:use_cpu_buffer
. This should allow no-downsides Nvidia hardware cursors. Please note it's experimental.
Notes for packagers
- New deps: hyprgraphics, re2
New features:
- binds: add option to allow fullscreening a pinned window (#8526)
- config: add 'force' option for 'cursor:warp_on_change_workspace' (#8681)
- core: Add support for hyprqtutils' update screen (#8651)
- core: add a few festive splashes
- core: move colorspace handling to oklab (#8635)
- dispatchers: Add an option to prioritize focus change within groups with movefocus (#8601)
- hooks: add pre connected/disconnected monitor events (#8503)
- hyprctl: add an inhibitingIdle field to windows
- hyprctl: add directScanout to hyprctl monitors
- hyprctl: add json output on hyprctl -j plugins list (#8480)
- input: add warp_back_after_non_mouse_input
- logging: Add some context to config error logs (#8326)
- makefile: add stub to discourage direct make
- pointer: add drm dumb buffers for cursors (#8399)
- renderer: add lockdead_screen_delay (#8467)
- renderer: add option to blur IME popups (#8521)
- version: add link versions for other utils (#8619)
- windowrules: add rules for mouse and touchpad scroll factors (#8655)
- xwayland: Support cross DnD from Wayland (#8708)
Fixes:
- Fix example config name in auto-generated cfg header (#8509)
- animationmgr: fixup stack-use-after-return
- compositor: fix monitor arrangement with mixed auto directions
- core/data-device: expand damage region to fix minor px errors
- core: Add clang-tidy (#8664)
- core: Fix workspace selector parsing (#8687)
- data-device: fixup wrong box expansion
- defaultConfig: fixup smart gaps rules
- hyprpm: fix incomplete unmet dependencies message
- internal: fix changeWindowZOrder reordering incorrectly (#8494)
- internal: fix some misused configStringToInt conversions
- internal: fixup some missed updateColorsOk() calls
- layerrules: fix ignorezero not working
- monitor: fix default focus when switching to a fs workspace
- opengl: fixup invalid ogl uniform reads
- opengl: fixup missed /4 in oklab parsing
- renderer: fix incorrect early return (#8590)
- renderer: fixup blur optimization considitons
- seat: fix double scrolling in some applications (#8583)
- shm: fix shm fd size check before creating or resizing shm_pool (#8572)
- windowrules: fix prop rules with boolean values
- workspace: fix missing name via focusworkspaceoncurrentmonitor (#8484)
Other:
- CI/Nix: temporarily disable cross build
- Lock uwsm desktop file behind feature flag
- Nix: create TAG info from version
- Nix: disable uwsm desktop file installation
- bezier: optimize setup of bezier curves (#8528)
- bind: new long press option (#8302)
- cleanup: remove leftover var in ThreadManager.cpp (#8611)
- config: Changed the default value of decoration:blur:ignore_opacity to true (#8418)
- config: don't overwrite errors in gradients
- config: throw an error explicitly when parsing colors in gradients
- config: update the configStringToInt implementation (#8476)
- constraints: don't warp pointer position on release (#8491)
- core/data: Use pointer focus for DnD operations (#8707)
- core/output: don't send enter too aggresively
- core: Move regex from stdlib to re2 (#8736)
- core: Optimize window/layer rule application and scanning (#8735)
- core: drop using deques in favor of vectors
- core: feeling a bit quirky today.
- core: guard pmonitor in focuswindow
- core: move to os/Process from hyprutils
- core: move version include to hyprctl
- core: removed Herobrine
- core: workspace-related function cleanup / refactor
- crashreporter: avoid clang warning
- debug: clean up fetching of the contents of /proc/device-tree (#8413)
- debug: clean up opening of files in HyprCtl (#8401)
- descriptions: change allow_pin_fullscreen value to false (#8592)
- drm: enable explit out fence in AQ (#8431)
- github: mention PR guidelines in the template
- hyprctl: avoid crash on null pwuid
- hyprctl: verify runtime dir exists in instances()
- hyprland-uwsm.desktop: Just reference plain entry (#8553)
- hyprpm: move temp files to XDG_RUNTIME_DIR
- hyprpm: target installed instead of running version (#8634)
- internal: minor cleanups for color results
- keybinds: actually suppress internal keybinds instead of passing them along (#8538)
- keybinds: allow repeating multiple binds (#8290)
- keybinds: don't animate fullscreen size/pos changes coming in
- keybinds: move to managed pointers
- layersurface: use lastMonitor and not monitor from cursor for new ls
- master: make center ignore reserved areas (#8625)
- meson: autodetect systemd
- miscfunctions: move configStringToInt to std::expected
- nix/meson: add re2 dependency (#8738)
- pointer: map devices across all outputs by default (#8352)
- protocols: mark primarySelection as not privileged
- rename hyprland-systemd.desktop and remove hyprland-session.service
- renderer: don't render unmapped popups
- renderer: drop requesting OUT_FENCE_PTR
- renderer: restore discard mode after IME render pass
- renderer: scaled surfaces could have zero area (#8423)
- renderer: simplify blur enabling logic
- shell: don't use fgrep, prefer grep -F
- shell: propagate new machanism from hyprctl to miscfunctions
- snap: account for position of multiple monitors (#8543)
- snap: bias reserved area when its size is greater than zero (#8694)
- snap: check which corner is being grabbed for monitor snapping (#8637)
- snap: use the bit mask to check if snapping occurred (#8659)
- systemd: hyprland-systemd.desktop -> hyprland-uwsm.desktop
- versionkeeper: init version to 0.0.0 if no file is present
- windows/xdg: minor cleanup of min/max size calculations
- windows: allow replacing existing fullscreen (#8566)
- workspace: update hasFullscreenWindow in updateWindows
- workspacerules: Do not check 'on-created-empty' if using a workspace windowrule (#8486)
- xcursors: store themes in a std:set to order it (#8474)
- xdg-shell: don't report invalid min/max sizes on unset
- xdg-shell: even more robust layout min/max size
Special Thanks
Massive thanks to these chads for donating $$$ to keep this ball rollin:
- Xoores
- taigrr
- SomeMediocreGamer
- Azelphur
- maltbeverage
- johndoe42
- yyyyyyyan
- alukortti
- Theory_Lukas
- MasterHowToLearn
- ari-cake
- AuHunter
- Amaan Q.
- Jas Singh
- Hongdu
- Gerenier
- DEFLATE
- Matej Drobnic
- Snootiful
- al
- niraami
- Ricebal
MRs
- debug: clean up opening of files in HyprCtl by @WavyEbuilder in #8401
- debug: clean up fetching of the contents of /proc/device-tree by @WavyEbuilder in #8413
- pointer: map devices across all outputs by default by @JManch in #8352
- renderer: scaled surfaces could have zero area by @dawsers in #8423
- systemd-desktop - replace contents to rely on uwsm to start a systemd session. Remove hyprland-session.service by @izmyname in #8376
- Changed the default value of decoration:blur:ignore_opacity to true by @nnra6864 in #8418
- Add some context to config error logs by @SoSeDiK in #8326
- drm dumb buffers for cursors by @vaxerski in #8399
- xcursors store themes in a std:set to order it by @gulafaran in #8474
- Enable explicit out fence in AQ by @UjinT34 in #8431
- bind: new long press option by @littleblack111 in #8302
- Fix: Workspace name not assigned via hyprctl dispatch focusworkspaceoncurrentmonitor by @sslater11 in #8484
- Window/Workspace Rules: If workspace is created by a windowrule, don't create it as empty workspace by @alyanser in #8486
- fix: json output on hyprctl -j plugins list by @tetrois in #8480
- renderer: add the lockdead_screen_delay by @aacebedo in #8467
- Plugins: add pre connected/disconnected monitor events by @levnikmyskin in #8503
- pointer constraints: don't warp pointer position on release by @hanatos in #8491
- fix changeWindowZOrder by @Aqa-Ib in #8494
- Fix example config name @ auto-generated cfg header by @webknjaz in #8509
- config: update the configStringToInt implementation by @PaideiaDilemma in #8476
- allow repeating multiple binds by @MightyPlaza in #8290
- bezier: optimize setup of bezier curves by @gulafaran in #8528
- actually suppress internal keybinds instead of passing them along by @m4rch3n1ng in #8538
- renderer: add option to blur IME popups by @ErrorNoInternet in #8521
- binds: option to fullscreen pinned window by @littleblack111 in #8526
- snap: account for position of multiple monitors by @myQwil in #8543
- protocols: fix shm fd size ...
v0.45.2
Another minor release with 2 patches backported on top of 0.45.1.
Fixes backported
- internal: fix changeWindowZOrder reordering incorrectly (#8494)
- xdg-shell: don't report invalid min/max sizes on unset
Special thanks
Special thanks as always to these chads for donating:
- Plyply
- Xoores
- ari-cake
- taigrr
- SomeMediocreGamer
- Azelphur
- maltbeverage
- alukortti
- MasterHowToLearn
- Theory_Lukas
- johndoe42
- Milan
- yyyyyyyan
- AuHunter
- Amaan Q.
- Jas Singh
Full Changelog: v0.45.1...v0.45.2
v0.45.1
A minor update to 0.45.0 with a few fixes backported from main.
Fixes backported
- makefile: add stub to discourage direct make
- defaultConfig: fixup smart gaps rules
- hyprpm: fix format crash
- workspace: fix missing name via focusworkspaceoncurrentmonitor (#8484)
- constraints: don't warp pointer position on release (#8491)
- core: guard pmonitor in focuswindow
- protocols: mark primarySelection as not privileged
- renderer: don't render unmapped popups
- renderer: scaled surfaces could have zero area (#8423)
- shell: don't use fgrep, prefer grep -F
- windows/xdg: minor cleanup of min/max size calculations
- workspacerules: Do not check 'on-created-empty' if using a workspace windowrule (#8486)
- xcursors: store themes in a std:set to order it (#8474)
Special thanks
Special thanks to these chads for donating $$$ to keep this ball rollin':
- Xoores
- ari-cake
- taigrr
- SomeMediocreGamer
- Azelphur
- maltbeverage
- alukortti
- MasterHowToLearn
- Theory_Lukas
- johndoe42
- Milan
- yyyyyyyan
- AuHunter
- Amaan Q.
- Jas Singh
- emilnymann
- William Theesfeld
- fizzial
- Different Name
- Grzegina
Full Changelog: v0.45.0...v0.45.1
v0.45.0
A big update, with tons of fixes, improvements and new stuff!
Breaking changes
no_gaps_when_only
has been removed. See the wiki for equivalent workspace rules.decoration:shadow_
variables have moved. See here for the new names.
New features:
- feat: add a custom made treewide formatter (#7992)
- groups: add group_on_movetoworkspace (#8159)
- groups: add merge_groups_on_groupbar (#8362)
- hyprctl: add caps/num lock state for keyboards (#8145)
- hyprctl: add mirrorOf to hyprctl monitors
- hyprpm: Add option to notify on fail and keep original notify (#8167)
- input: add snapping to floating windows (#8088)
- layout: add drag_into_group to control merging dragging windows (#8004)
- layout: add merge_floated_into_tiled_on_groupbar (#8042)
- pointer: add default auto for no_hw_cursors
- protocols: Add support for hyprland-ctm-control-v1 (#8023)
- renderer: Add a missing texture asset and a user check
- renderer: add expand_undersized_textures
- shadow: add sharp and refactor options
- snap: add option
border_overlap
and other improvements (#8289)
Fixes:
- CMake: systemd fixes
- IME: Fixup IME popup candidate windows position when scale is not 1.0 (#8117)
- Makefile: fix legacyrendererdebug typo (#8214)
- Systemd fixes
- config: fix generateConfig loop (#8164)
- core: fix group members disappearing when you move the group to another monitor (#8237)
- drm-lease: fix crashes and implementation (#8116)
- drm-syncobj: fix crash on missing timelines
- drm-timeline: Add check for conflicting acquire and release points (#8083)
- group: fix moveWindowIntoGroup (#8297)
- groups: fix swallowing (#8223)
- hyprerror: fix height calc with bottom bar (#8043)
- hyprpm: Fix crashes due to misplaced fmt argument(s) (#8140)
- input: Fix VRR for constrained cursors (#6877)
- internal: cleanup CMonitor usage and fix a few ref hogs
- keybinds: fixup xkb_states for resolve_by_sym
- layersurface: fixup brace style
- layout: fix auto group when opening a new window in a non-focused workspace using window rules (#8006)
- layout: window snapping cleanup + fixes
- makefile: fix typo (#8127)
- misc: Fix bad links to wiki (#8240)
- monitors: fix vrr breaking monitor disconnect (#8314)
- notif-overlay: add a bit of padding for icons
- renderer: fix floating window damage (#8182)
- renderer: minor fixup to window rendering logic (#8359)
- screencopy: fix build with legacyrenderer
- screencopy: fix screencopy frames not being cleaned up (#8017)
- shaders: fixup jagged edges in texture rounded corners
- shadow: fix double premultiplication
- xwayland: minor cleanups and fixes (#8076)
- xwayland: minor fixups for stability (#8323)
Other:
- Build with hyprland-session.service (#8251)
- config/example: add optional smart gaps to the default config
- defaultConfig: add a nofocus rule for weird X windows
- Improve hyprland-session.service (#8225)
- Nix: build aquamarine and hyprutils in debug when using hyprland-debug
- compositor: make sure we don't ret early on no surface
- config/layout: nuke no_gaps_when_only (#8072)
- config: give simple help for super+q not working
- core: move internal structures to monitor pointers (#8266)
- default/config: improve default animations
- defaultConfig: improve smart gaps
- defaultConfig: update default config values for shadows (#8360)
- dispatchers: allow leading whitespace in window parameter (#8016)
- example: update desktop file to include DesktopNames
- example/hyprland-session.service: add support for xdg autostart (#8230)
- foreign-toplevel-wlr: don't send updates to X11 OR windows
- foreign-toplevel: don't send updates to X11 OR windows
- gammactrl: guard pMonitor in setGamma
- groupbar: set locked color when groups are globally locked (#8257)
- hyprctl: convert std::cout and std::cerr to std::println()
- hyprctl: move setprop into dispatchers (#8275)
- hyprctl: reload windowrules on reloadAll
- hyprerror: make hyprerror reserve space (#8040)
- hyprland-systemd.desktop improvements (#8318)
- hyprland-systemd.desktop: change name back to Hyprland (#8351)
- hyprland: convert std::cout and std::cerr to std::println()
- hyprpm: convert std::cout and std::cerr to std::println()
- hyprpm: disallow shallow on unknown branch
- input: Refocus window on scrolling if follows mouse (#8361)
- input: cleanup device naming logic
- input: ignore non-kb ls-es in refocusLastWindow
- internal: Move CMonitor to SP (#8178)
- internal: Remove some unused lambda captures (#8218)
- internal: check size limit in layouts (#8298)
- internal: few more marginal optimisations from profiling (#8271)
- internal: improve version query and define HYPRLAND_VERSION (#8034)
- internal: more profiling less calls and local copies (#8300)
- internal: optimize cursor move a bit (#8264)
- internal: removed Herobrine
- internal: use clampWindowSize to unify min/maxsize handling (#8014)
- keyboard: update group state on change for the sym resolve state
- layershell: check if workspace is valid in onMap
- layershell: minor cleanups and improvements to focus
- layersurface: round geom in arrangeLayerArray
- layout: deny auto-grouping a new floating window into a tiled group (#8108)
- layout: don't snap to self and allow same-pid snaps
- layout: enable group rules for new floating windows (#8122)
- layout: move applyGroupRules() to onWindowCreated() (#8139)
- layout: remove unnecessary check after 45e8219 (#8037)
- layout: simplify the conditions to autogroup (#8120)
- layout: slight adjustments to snapping logic (#8273)
- misc: refactor version command (#8027)
- monitor: avoid crash on released buffer in surf
- monitor: modernize/refactor last legacy-handled events
- output/xdg-output: avoid sending events to released globals
- output: send enter events on late wl_output binds
- output: update state even if no owner exists (#8044)
- pointer: expand sw cursor damage box
- renderer: don't rely on datarootdir for local share
- renderer: improve api around new framebuffer changes
- renderer: reserve space for error at the bottom if that's set
- renderer: safeguard against non-sampleable currentFB in blurMainFb
- seat: avoid sending pointless 'keymap' and 'repeat_info' events (#8276)
- security-context: avoid UB in C macro (#8229)
- security-context: close client fds after disconnect
- security-context: implement protocol
- session-lock: reset seat grab on a new session lock (#8147)
- shaders: improve corner AA in borders shader
- swallow: check if swallow_regex doesn't exist (#8265)
- tablet: use inputMgr unified naming scheme
- window: properly break cycles in X11TransientFor
- windowrules: allow specifying max size in size window rule (#8021)
- xcursor: don't crash on broken permissions in X themes
- xwm: avoid infinite parent lookup loop in lookupParentExists
Special Thanks
Special thanks as always to these chads for donating some $$$ to keep this thing goin':
- Xoores
- ari-cake
- taigrr
- SomeMediocreGamer
- Azelphur
- maltbeverage
- alukortti
- MasterHowToLearn
- Theory_Lukas
- johndoe42
- Milan
- yyyyyyyyyan
- different-name
- AuHunter
- Daisetsu
- Steven Rotelli
- Amaan Q.
- awsumatt
- Jakub Komarek
- Eike
- Captain duh
- quiet__owo
- Jas Singh
- Octatonic Sunrise
- exnihilo
MRs
- layout: fix auto group when opening a new window in a non-focused workspace using window rules by @Aqa-Ib in #8006
- flake.nix: add xdph follows by @timon-schelling in #8012
- feat: add a custom made treewide formatter by @amadalusia in #7992
- use clampWindowSize to unify min/maxsize handling by @MightyPlaza in #8014
- fix screencopy frame leaks by @ikalco in #8017
- layout: add drag_into_group by @Aqa-Ib in #8004
- misc: refactor version command by @davc0n in #8027
- Support hyprland-ctm-control-v1 by @vaxerski in #8023
- dispatchers: allow leading whitespace in window parameter by @JManch in #8016
- layout: remove unnecessary check after 45e8219 by @Aqa-Ib in #8037
- Make hyprerror reserve space by @vaxerski in #8040
- output: update state even if no owner exists by @Trimutex in #8044
- hyprerror: fix height calc with bottom bar by @JManch in #8043
- layout: add merge_floated_into_tiled_on_groupbar to fine control merging dragging windows by @Aqa-Ib in #8042
- layouts: Nuke no_gaps_when_only by @vaxerski in #8072
- xwaylandmanager minor fixes by @JassonCordones in #8076
- improve version query and some code and add HYPRLAND_VERSION by @Toni500github in #8034
- Add check for conflicting acquire and release points by @Edgars-Cirulis in #8083
- Fix VRR for constrained cursors by @UjinT34 in #6877
- convert std::cout and std::cerr to std::println() by @Toni500github in #8085
- layout: deny automatically grouping a new floated window into a tiled group by @Aqa-Ib in #8108
- fix drm ...
v0.44.1
A minor patch release with a few patches backported from main to 0.44.0.
Fixes backported
- output/xdg-output: avoid sending events to released globals
- keyboard: update group state on change for the sym resolve state
- defaultConfig: add a nofocus rule for weird X windows
- pointer: expand sw cursor damage box
- keybinds: fixup xkb_states for resolve_by_sym
- config: give simple help for super+q not working
- screencopy: fix screencopy frames not being cleaned up
- layout: fix auto group when opening a new window in a non-focused workspace
Special thanks
Special thanks to these people for donating to help support the project:
- Xoores
- taigrr
- SomeMediocreGamer
- Azelphur
- ari-cake
- alukortti
- MasterHowToLearn
- Theory_Lukas
- maltbeverage
- johndoe42
- Milan
- yyyyyyyan
Full Changelog: v0.44.0...v0.44.1
v0.44.0
An update full of bugfixes and new niceties has landed upon us :)
New features:
- args: add --version to binary args
- config: add descriptions for dwindle and master layout options (#7933)
- config: add order rule for layers (#7697)
- core: add HYPRLAND_CONFIG environment variable (#7851)
- core: add a --systeminfo parameter to gather systeminfo without running
- dwindle: add config option
split_bias
(#7920) - dwindle: add movetoroot method to layout messages (#7903)
- hyprctl: add defaultName to workspacerules
- hyprctl: add solitary field to hyprctl monitors
- hyprctl: add submap request
- layout: add auto_group to control default grouping (#7883)
- userchecks: add an xdg_current_desktop check
Fixes:
- Meson: fix protocols, clean up
- Nix: fix meson PCH flag
- Meson: add tracy dependency
- Nix: re-add hyprland-protocols
- byteoperations: add missing header
- core: Fix Musl builds (#7934)
- dispatchers: fixup dpms toggle (#7875)
- gammactrl: fix potential crash on monitor removed (#7828)
- github(nix-build): switch to better nix installer, attempt at fixing hash mismatch (#7701)
- internal: Fix change group current fullscreen state query (#7802)
- internal: fix initial cursor warping (#7793)
- internal: fix missing include directive (#7984)
- layout: fix dragging a window into a group after e242694 (#7976)
- man: Fixed the man page to show the new information (#7713)
- meson: fix arch build with new protocol
- protocol: fix missing include
- renderer: Fix resize artifacts (stretching, bumps) (#7499)
- renderer: fix uvBR calculation (#7975)
- textinput: fix tiv3 leave (#7761)
- tiv1: fix deleting first character (#7716)
Other:
- CMake: use hyprland-protocols from pkg-config, fallback to subproject
- CMake: use udis86 from pkg-config, fallback to subproject
- Internal: move to Mat3x3 from hyprutils (#7902)
- Meson: pass AQUAMARINE_VERSION argument
- Meson: try to find udis86 through pkgconfig, fallback to subproject
- assets: Remove execute permission from lockdead.png (#7715)
- build: Set cmake_minimum_required to version 3.30 (#7709)
- cmake: drop ninja dep
- compositor/wayland: up the max buffer size to avoid disconnects when app hangs
- compositor: update all xdg outputs on arrange
- config: Limit max volume to 100%
- config: include XF86Audio* key bindings to default cfg (#7695)
- data-device: conform to reported source actions
- data-device: don't send default action of move
- data-device: send clock time in motion events
- dispatchers: allow moveintogroup when floating (#7818)
- dmabuffer: attempt importing failed dmabufs as implicit
- eventloop: dispatch pending in session on start
- github: encourage usage of --systeminfo if Hyprland won't launch
- github: improve issue template (#7699)
- hyprctl: allow parsing empty value
- hyprctl: use the getMonitorData helper everywhere
- input: move dmps activation to input listeners (#7721)
- internal: removed Herobrine
- internal: Delay monitor events/hooks (#7797)
- internal: move to hyprutils' scopeguard
- internal: nuke wlsignal and related
- monitor: arrange monitors on connect and disconnect
- monitor: cleanup and modernize scheduleDone
- monitor: use a scope guard for disconnect events
- opengl: use GL_CLAMP_TO_EDGE instead of GL_CLAMP
- pointermgr: Hide hardware cursor on leave (#7806)
- pointermgr: avoid derefing null outputs
- pointermgr: avoid hogging CMonitor refs
- protocolmgr: don't expose the fallback output
- shm: send a static list of shm formats
- single-pixel-buffer: new protocol impl
- single-pixel: set buffer size to 1,1
- textinput: don't reset if ti isn't enabled (#7798)
- textinput: handle IME resetting (#7731)
- version: log build aquamarine version
- wayland/output: send geometry in updateState
- wlr-output-configuration: Improve output configuration (#7571)
- wlr-output-management: accept 0 refresh rates
- xdg-output: minor cleanups
- xwayland: Some readability improvements (#7807)
- xwayland: remove extra x11 deactivation (#7755)
- xwayland: use proper path for the XWayland sockets (#7852)
- xwm: Minor cleanup, add wrappers for basic types (#7856)
Special Thanks
Special thanks to these chads for donating some moolah:
- Xoores
- taigrr
- SomeMediocreGamer
- Azelphur
- ari-cake
- alukortti
- MasterHowToLearn
- Theory_Lukas
- maltbeverage
- johndoe42
- Milan
- yyyyyyyyyan
- Mikey G
- Piotr
- herrkami
- frozenkro
- Leicham
- crispy caesus
- andresilva
- embed-the-world
MRs
- github(nix-build): switch to better nix installer, attempt at fixing hash mismatch by @diniamo in #7701
- config: Limit max volume to 100% by @davc0n in #7703
- github: improve issue template by @Aqa-Ib in #7699
- feat: add XF86Audio* key bindings by @RichAyotte in #7695
- tiv1: fix deleting first character by @sungyoonc in #7716
- Remove execute permission from lockdead.png by @davc0n in #7715
- Add order rule for layers by @darkwater in #7697
- Fixed the man page to show the new information by @DemonKingSwarn in #7713
- input: move dmps activation to input listeners by @PaideiaDilemma in #7721
- build: Set cmake_minimum_required to version 3.30 by @davc0n in #7709
- update xdph commit in flake.lock by @aacebedo in #7705
- textinput: handle reset by @sungyoonc in #7731
- xwayland: remove extra x11 deactivation by @Trimutex in #7755
- textinput: fix tiv3 leave by @sungyoonc in #7761
- nix: use meson by @diniamo in #7774
- nix: remove cmake remnants by @diniamo in #7778
- fix cursor:default_monitor by @ikalco in #7793
- textinput: don't reset if ti isn't enabled by @sungyoonc in #7798
- Fix change group current messing up fullscreen by @AlvinaNancy in #7802
- Delay monitor messages by @leiserfg in #7797
- core: fix crash on monitor removed with gamma control by @andresilva in #7828
- dispatcher: allow moveintogroup when windows are floating by @Aqa-Ib in #7818
- Some readability improvements for xwayland server by @JassonCordones in #7807
- Hide cursor on leave by @vaxerski in #7806
- fix: use proper path for the XWayland sockets, fixes #7849 by @Arisa-Snowbell in #7852
- Some fixes to XWM by @JassonCordones in #7856
- flake: update xdph by @diniamo in #7871
- core: add HYPRLAND_CONFIG environment variable by @amadalusia in #7851
- Internal: move to Mat3x3 from hyprutils by @vaxerski in #7902
- Fix dpms toggle by @Kam1k4dze in #7875
- Improve output configuration via wlr-output-configuration by @vaxerski in #7571
- also test cross build by @Mic92 in #6344
- CMake, Meson: suproject improvements by @fufexan in #7885
- dwindle: add config option
split_bias
by @myQwil in #7920 - Fix Musl builds by @bivsk in #7934
- config: add descriptions for dwindle and master layout options by @myQwil in #7933
- add movetoroot method to dwindle layout by @LukeXuan in #7903
- flake.lock: update by @Gliczy in #7952
- meson: fix arch build with new protocol by @Trimutex in #7959
- feat: auto_group by @Aqa-Ib in #7883
- layout: fix dragging a window into a group after e242694 by @Aqa-Ib in #7976
- renderer: fix uvBR calculation by @PaideiaDilemma in #7975
- fix: add missing include directive by @theoparis in #7984
New Contributors
- @RichAyotte made their first contribution in #7695
- @DemonKingSwarn made their first contribution in #7713
- @aacebedo made their first contribution in #7705
- @AlvinaNancy made their first contribution in #7802
- @JassonCordones made their first contribution in #7807
- @Arisa-Snowbell made their first contribution in #7852
- @amadalusia made their first contribution in #7851
- @Kam1k4dze made their first contribution in #7875
- @Mic92 made their first contribution in #6344
- @myQwil made their first contribution in #7920
- @bivsk made ...
v0.43.0
A new, big update 0.43.0 brought to you by Yours Truly.
Many bugfixes, and new features, as always.
Notes for packagers
- Hyprland now requires C++26 support to build. gcc>=14 or clang>=18 will be needed.
- Installable assets have moved to
assets/install/
. All pngs there should be installed to$PREFIX/share/hypr/
New features:
- IPC: Add config descriptions (#7377)
- animations: add workspace in/out configs
- config: Add a variable to prevent groups from merging after being dragged (#7650)
- config: Add a window rule to render while unfocused (#7582)
- config: Added default button mapping for xf86 keys (#7672)
- config: add exec-shutdown for running commands on shutdown (#7683)
- core: add option to control which window to focus on close (#7368)
- cursormgr: add a new setting to sync gsettings (#7253)
- env: Add HYPRLAND_NO_SD_VARS env condition (#7358)
- hyprctl: add active and all to switchxkblayout
- logs: Add file path to asset ERR log (#7336)
- windowrules: add fullscreenstate field (#7466)
- xwayland: add option to enable/disable xwayland (#7633)
Fixes:
- Fix crash reports having execute permission
- Fix missing include needed by clang
- build: Fix NO_XWAYLAND compilation (#7538)
- config: add missing header for libc++ after 92744b5 (#7403)
- config: fix explicit sync option warning (#7293)
- config: fix uninitialized values with mode parsing
- core: fix crash on monitor removed with gammaControl (#7601)
- core: fix data race and a unsigned int rollover (#7278)
- cursormgr: fix cursor gsettings on session change (#7295)
- data-device: Fix selection mismatch when wlr resets primary selection (#7598)
- decorations: fix manual resize not recalculating decos (#7323)
- example/config: fix typo in default config (#7446)
- gamma-control: fix crash on monitor disconnect (#7353)
- helpers: fix: revert to signed arithmetic for cycling through workspaces (#7339)
- hyprpm: Fix checking dependencies (#7504)
- input: Fix disabling tap-to-click (#7304)
- input: Fix modifier keys getting stuck if depressed during config reload (#7486)
- install: Prepend ${DESTDIR} when creating hyprland symbolic link (fixes #7280). (#7281)
- keybinds: Fix fullscreenState toggling behaviour (#7288)
- keybinds: Fix syncFullscreen inconsistent with state when set by fullscreenState (#7343)
- keybinds: fixup misused kb state
- misc: fix some minor typos (#7530)
- pointermgr: fix initial cursorwarp (#7286)
- presentation-feedback: minor fixups
- protocol: fix logm template checks
- render: fixup format mismatch after leaving DS
- renderer: minor direct scanout fixes (#7594)
- screencopy: fix 10b format r/b flip
- screencopy: fixup 10-bit sharing via shm on nvidia
- sessionLock: fix misc:allow_session_lock_restore (#7511)
- textinput: fix ime activation in some edge cases (#7660)
- workspacerules: fix on-created-empty window focus (#7657)
Other:
- CI: clarify Nix CI jobs; disable on forked repositories
- CI: disable stale workflow on forks (#7535)
- CMake: drop duplicate -luuid after 5262292
- CMake: drop unused deps after 016da23
- CMakeLists: wayland.xml is in wayland-scanner pkgdatadir
- Nix: exclude wayland-scanner until next staging merge
- Nix: include xcursor regardless of xwayland
- Nix: remove unused dependencies
- README: Change image sources from vaxerski/Hyprland to hyprwm/Hyprland (#7315)
- Revert "syncobj: wait for deadline instead of available"
- Update aquamarine input in flake
- compositor: update suspendstate on window move (#7396)
- core: Include cstring whenever strncpy is used (#7267)
- core: Move to C++26 and use native_handle to CLOEXEC the debug fd (#7219)
- core: Preserve existing XDG_CURRENT_DESKTOP (#7347)
- core: make most for loops use const references (#7527)
- cursor: make inactive_timeout setting a float (#7268)
- data-device: send dndFinished when dnd offer is destroyed while unfinished
- eventloop: don't dispatch in enterLoop
- examples: more systemd examples (#7409)
- headers: set correct paths to header files (#7245)
- hyprctl: avoid parsing string::npos on invalid cmd (#7544)
- hyprpm, hyprctl: update shell completions
- hyprpm, hyprctl: remove Makefiles
- input: don't emit idle activity when calling simulateMouseMovement (#7649)
- input: kb focus mouse focused window if unset (#7666)
- input: move idle notify to input handlers (#7659)
- input: try to refocus a focusable window when seat grabs are reset (#7669)
- internal: introduce new types to avoid unsigned int rollover and signed int overflow (#7216)
- internal: removed Herobrine
- keybinds: refactor dispatchers to be better (#7331)
- keybinds: release mods after sendshortcut (#7581)
- layersurface: don't unref from monitor until dtor
- layersurface: dont rollover on size_t (#7451)
- layersurface: remove layer on destroy from monitor (#7457)
- linux-dmabuf: allow on split-node systems
- logs: don't get timezone every time logging (#7550)
- meson: explicitly specify path for find(1) (#7590)
- misc: Rename all instances of "emtpy" to "empty" (#7522)
- misc: constify the remaining for loops (#7534)
- monitor: avoid dangling references to old monitors being undestroyed
- monitors: avoid crash on wayland output removal
- output: dont cast enum out of range (#7448)
- protocols: avoid crashing in drmlease (#7290)
- protocols: destroy new xdgDialog protocol at right time (#7600)
- protocols: refactor protocol logging to a macro (#7324)
- renderbuffer: ensure framebuffer gets deleted (#7363)
- renderer: better lockscreen dead behavior (#7574)
- renderer: fade out windows on silent moves
- renderer: pass custom modelines to aq
- screencopy: nuke unused stuff
- sessionLock: ensure sls focus in some edge cases (#7647)
- shm: align size to stride (#7383)
- syncobj: wait for deadline instead of available
- textinput: don't deactivate ime if another ti is focused (#7617)
- textinput: send deactivate to ime on destory ti (#7614)
- window/xwayland: minor property cleanup
- window: don't focus on activate if window isn't mapped yet
- windows: support size with pseudo tiled
- xcursor: handle file errors when loading xcursor themes (#7326)
- xcursormgr: dont apply scale on gsettings (#7316)
- xdg-dialog: implement new protocol
- xwayland: deactivate xwayland focus if wayland is focused (#7458)
- xwayland: update overrideRedirect on map and configure (#7575)
- xwaylandmgr: minor refactor to activateSurface
- xwm: don't mark selection events as succeeded
- xwm: read atom name from xcb (#7546)
Special Thanks
Special thanks to these chads for donating, as always:
- Xoores
- taigrr
- SomeMediocreGamer
- Azelphur
- ari-cake
- alukortti
- MasterHowToLearn
- Theory_Lukas
- maltbeverage
- Plyply
- Poor as shit
- Milan
- johndoe42
- yyyyyyyan
- seb
- Cromat_tux
- DaGaugl
- Philipp Soldunov
- nico
- atomicptr
- ircurry
- normal
- Mikey G
- JPEG
- Sven
- neoney
- Valentin MATHIEU
- Morally2412
- Enzi
- Logno
- Mihail
- niraami
- KelpShake
MRs
- core: Move to C++26 and use native_handle to CLOEXEC the debug fd by @vaxerski in #7219
- type conversion to new types to avoid unsigned int rollover and signed int overflow by @gulafaran in #7216
- fix: set correct paths to header files by @matt1432 in #7245
- xcursmgr add a new setting to sync gsettings by @gulafaran in #7253
- Include cstring whenever strncpy is used by @earboxer in #7267
- cursor: make inactive_timeout setting a float by @wwaltb in #7268
- fix initial cursorwarp by @gulafaran in #7286
- Prepend ${DESTDIR} when creating hyprland symbolic link fixes #7280) by @yangyingchao in #7281
- fix explicit sync option warning by @ikalco in #7293
- fix data race and a unsigned int rollover by @gulafaran in #7278
- Fix fullscreenState toggling behaviour by @txkyel in #7288
- protocols avoid crashing in drmlease by @gulafaran in #7290
- fix cursor gsettings on session change by @ikalco in #7295
- readme: Change image sources from vaxerski/Hyprland to hyprwm/Hyprland by @PaddeCraft in #7315
- fix resizing by @MightyPlaza in #7323
- Add file path to asset ERR log by @davc0n in #7336
- handle file errors when loading xcursor themes by @ikalco in #7326
- helpers: fix: revert to signed arithmetic for cycling through workspaces by @ErynGalen in #7339
- Fix syncFullscreen inconsistent with state when set by fullscreenState by @txkyel in #7343
- gamma-control: fix crash on monitor disconnect by @PaideiaDilemma in #7353
- Preserve existing XDG_CURRENT_DESKTOP by @Vladimir-csp in #7347
- protocols refactor protocol logging to a macro by @gulafaran in #7324
- Add HYPRLAND_NO_SD_VARS env condition by @Vladimir-csp in #7358
- renderbuffer ensure framebuffer gets deleted by @gulafaran in #7363
- xcursormgr dont apply scale on gsettings by @gulafaran in htt...
v0.42.0
At last, a very large update 0.42.0 has finally dropped!
Notable changes
- Wlroots has been dropped, and is no longer a dependency of Hyprland.
- Explicit sync support has been added and will be automatically turned on/off depending on your setup. For some select nvidia users, this might cause glitches. In such cases, disable it with
render:explicit_sync = false
- Old protocol implementations redone in our newer, more memory-safe impl style (thanks @ikalco!)
- In-house XCursor implementation for legacy themes (thanks @gulafaran!)
- Tons and tons of fixes and performance improvements!
Breaking changes
misc:no_direct_scanout
->render:direct_scanout
fakefullscreen
has been dropped in favor of the newfullscreenstate
dispatcher- custom modelines are not working anymore (fixed on git)
News for packagers
- New dependency: aquamarine
- Dropped submodule: wlroots
- Assets installation directory changed from
$DATAROOTDIR/hyprland
to$DATAROOTDIR/hypr
New features:
- config: add option to exit window while retaining fullscreen (#516) (#6880)
- core: Add missing header for libc++ after e989a0b (#7158)
- core: add a destructor to CHyprOpenglImpl and avoid wl_container_of undefined behaviour (#7101)
- crashreporter: add date and flags to crash report (#7028)
- debug: add Nvidia driver info (#6715)
- flake: add clang-tools to devShell (#6916)
- gitignore: add CMake residual files
- hyprpm: add short error code explanations
- internal: Add functions to hyprctl header (#6745)
- keybinds: add bindp and noshortcutsinhibit (#7017)
- keybinds: add safeguard to mousebinds (#7034)
- pluginapi: Add force reload of config at the end of plugin initialization (#7099)
- pointer: change min cursor padding to 0 (#6027)
- socket2: Add windowtitlev2 event which includes the window address (#6856)
- touch: add touch swipe invert config (#6940)
Fixes:
- border: fixup infinite recursion
- compositor: fix general:extend_border_grab_area (#7214)
- compositor: fix log typos (#7111)
- configmgr: fix warning
- core/surface/buffer: Buffer lock/release fixes (#7110)
- core/surface: fixup a few pointer handling edge cases
- core: Fix crash on opening chromium (#6932)
- core: fix a few ubsan issues reported at exit of hyprland (#6699)
- decorations: fix infinite recursion on no_gaps when only (#7169)
- drm-syncobj: fixup fd leak with timelines
- hyprctl: increase hyprctl timeout to 5s to fix #6801 (#7152)
- ime-relay: fix crash on nullptr surface focus
- input: Fix
hyprctl switchxkblayout
not actually changing layout (#7070) - input: fix capabilities enum types passed
- input: fix invalid usage of dev in setTouchDeviceConfigs
- input: fix keyboard leds with multiple keyboards (#7079)
- input: fix leds on kb creation (#7206)
- internal: fix fullscreen typos (#7134)
- keybinds: fix NoSymbol keybinds (#7199)
- keybinds: fix movewindow float to 0 (#6777)
- layersurface: fixup focus issues in onUnmap
- layout: fix dynamic rules not updating after setting fullscreen (#7129)
- meson: fix wlroots-hyprland dep checks (for libliftoff patch to work) (#6736)
- output: minor tearing fixes
- pointer: fix buffer crash (#7131)
- presentation-feedback: fix invalid values sent after aq merge
- renderer: Explicit sync fixes (#7151)
- renderer: fix a few xray regressions (#6855)
- renderer: fixup crashes on inaccessible files for bg
- renderer: fixup nvidia driver version checks
- renderer: partially revert previous xray fix (#6868)
- session: fix activate events being always treated as on (#6696)
- sessionLock: fix the check for locking a locked session (#6843)
- shortcutsInhibit: fix crash
- style: fix clang-format
- surface: fix zero_scaling xwayland damage
- surface: fixup logical damage size calculations
- toplevelexport: fix flipped r/b channels when sharing windows (#6861)
- touch: fix touch swipe invert config (#7014)
- virtual-pointer: fixup virtual pointer warp events
- wayland/compositor: fixup buffer damage tracking for wl_shm buffers
- wayland/compositor: fixup double buffer releases
- wayland/surface: fixup self-owning surface roles
- xdg-shell: fix xdg-positioner y-flip (#7094)
- xdg-shell: fixup unassigned wl surfaces to xdg surfaces
- xwayland: fix high cpu idle usage
- xwayland: fix setting title prop (#6809)
- xwayland: fixup WM_SIZE_HINTS handling according to ICCCM
- xwm: Fix xwayland black window bug after losing focus (#6966)
Other:
- CMake, Meson, Nix: replace props.json with VERSION
- CMake, Meson: install config and wallpapers to DATADIR/hypr
- CMake: Suppress CMake warning about GNUInstallDirs
- Completions: use only awk (#6763)
- Core: Move to aquamarine (#6608)
- Nix: remove meson (used by wlroots)
- compositor: ignore setting surface scanout if DS is disabled
- compositor: implement wayland socket handover (#6930)
- compositor: minor cleanups for fading out layers
- compositor: simplify getWindowFromSurface
- config: avoid using initial ws tracking for exec-once
- config: don't crash when getenv HOME returns null
- config: use hyprutils helper (#6891)
- core/surface: drop map/unmap events in member funcs
- core: Improve handling of window properties (#6776)
- core: Properly shutdown wl display (#7018)
- core: avoid locking 2 wayland sockets (#6971)
- core: emit unmap event after unmap in surface destroy
- core: move to steady_clock where applicable
- cursor: Better xcursor implementation (#7178)
- cursormgr: avoid scanning ill formed inherit (#7211)
- cursormgr: implement inheriting themes for xcursor (#7197)
- debug: dont manually unlock the lock_guard (#7210)
- debug: get rid of useless 1s in logs (#6969)
- egl: attempt a 3.2 egl context first
- egl: avoid setting debug mode and handle legacyrenderer
- egl: require gles 3.0 only
- egl: support getting the device via platform_device
- ext-foreign-toplevel: Send done after title and class (#6857)
- hyprctl completions: Use only awk rather than grep + awk
- hyprctl: link to much less libraries (#7212)
- hyprerror: minor stylistic changes
- hyprpm: execute all git commands regardless of fails
- hyprpm: init submodules after resets
- input: Emulate discrete scrolling from v120 events (#6881)
- input: don't simulate mouse movement on focus change in follow_mouse = 2/3 if no_warps is false (#7015)
- input: refocus last window on keyboard unfocusable surfaces
- input: unify removing currentlyDraggedWindow (#7071)
- inputmgr: ensure we dont divide by zero (#6713)
- internal: refactor fullscreen states (#7104)
- internal: removed Herobrine
- internal: some minor fd/socket cleanups and make logging thread safe (#7123)
- keybinds: allow toggling fullscreenstate (#7128)
- keybinds: handle monitor change in moveWindowIntoGroup (#7030)
- keybinds: handle null monitor in pinActive (#7122)
- keybinds: improve fullscreenstate toggling (#7174)
- keybinds: never switch to another monitor with per_monitor (#6665)
- keybinds: remove toggleopaque (#7024)
- keyboard: properly update keymap state and fd on keymap changes
- keyboard: update xkb state after key event
- layer-shell: avoid crashes on unmap (#7092)
- layer-shell: properly map and unmap surface and propagate unmap events
- layer-shell: validate exclusiveEdge and don't set it as top by default (#7006)
- layershell: don't throw misaligned error on exclusive edge 0
- layersurface: null check for surface validity before unmap()
- layout: update workspace rules on layout change (#6878)
- meson: install wayland.hpp header
- opengl: destroy cairo image surface after use
- output: submit damage to kms
- pointer-constraint: set lifetime correctly
- pointer/hw: extend cursor swapchain to 3
- pointer: round position when rendering software cursors
- pointer: update geometry after unplug events
- pointer: use preMonitorCommit for resetting render state
- protocols: Move globalshortcuts impl (#7102)
- protocols: move screencopy and toplevel export to hyprwayland-scanner (#7065)
- protocols: move text-input-v1 to hyprwayland-scanner (#7096)
- renderer/layer-shell: use explicitly set exclusiveEdge (#6984)
- renderer: Make shader time always count from zero (#6903)
- renderer: don't skip back background on preBlurQueued
- renderer: don't use the surface counter in popup iterations
- renderer: drastically optimize bg texture creation
- renderer: drop redundant spammy trace log
- renderer: guard layer in renderLayer
- renderer: untransform textures matching display transform
- renderer: use session lock alpha for rendering lacking locks
- seat: don't send keyboard data without a keyboard cap (#6697)
- session-lock: send
locked
after the lock screen is properly rendered (#6850) - sessionLock: don't sendLocked when session lock has already been destoyed (#7150)
- sessionLock: focus lock on creation based on mouse position (#6658)
- surface: avoid crashes on fading out layers
- surface: emit unmap before unmapping and releasing the buffers
- tablet: Send .frame() on .proximity_out() (#6761)
- touch: set lastInputTouch on every event
- virtualptr: allow binding to output
- virtualptr: map to entire screen if no output is provided
- wayland/compositor: drop pending buffer ref if synchronous
- wayland/compositor: release buffers on unmap
- wayland/output: avoid sending events to dead outputs
- window/ls: reset core signals after destroy
- window: drop ack requirement for applying pending reported size
- window: override noMaximize if new window takes over fullscreen (#6812) (#6870)
- wl_seat: avoid sending events to objects without caps
- workspaces: don't try to reopen special workspaces (#6802)
- xcursor: rework bootleg xcursor (#7140)
- xdg-shell: completely rewrite xdg-...