A read-only mirror of https://github.com/hyprwm/Hyprland
Find a file
Nikolai Nechaev d4c6ff434c
hyprtester: minor refactoring/restructure (#14154)
* hyprtester: Minor misc fixes

- Use `std::filesystem::path` instead of `std::string` in some places;
- Use `std::ranges::sort`, as suggested by clang-tidy;
- Reset colors at the end of every log line;
- Give more specific error messages in main.

* hyprtester: Fix a bug in `hyprlandAlive()`

Successful standard library calls are permitted to (and do) modify the
value of `errno` arbitrarily. Checking the value of `errno` only makes
sense when the library function returns an error. So, the correct
condition of a successful signal delivery is that the call to `kill`
returns 0.

Btw, given the possible other error values of `kill(2)`, should we even
consider `errno` at all?

* hyprtester: Restructure main

Split main's `main()` into multiple functions, separate responsibilities
more cleanly.

Add default values for cmd-line options to the help message.

* hyprtester: Remove redundant path canonicalization

* hyprtester: Run unified clean up code before every test

* tests: Use RAII for clients in client tests

Turn clients in client tests into classes. Constructors
initialize, destructors deinitialize.

Not only is it better design when entities (clients) are
modeled as classes, keeping all the methods connected,
this also ensures the tests perform their custom cleanup.

This will be especially important when we introduce early
termination on failure into the tests.

* hyprtester: Rewrite the testing framework!

- Implement a new test definition system used via the `TEST_CASE` and
  `SUBTEST` macros.

- Adds `ASSERT*` and reimplements `EXPECT*` macros. The former now
  terminate the test immediately. Also add some new macros, such as
  `FAIL_TEST`.

- Move existing tests to the new system. For trivial cases, break
  existing test functions down to multiple test cases.

- For non-trivial cases and a few other possible improvements, leave
  TODOs.

* tests: Use `EXPECT*` instead of `ASSERT*` in some places

`ASSERT*` macros terminate the test as soon as they fail. They are
appropriate to use when, if something fails, the rest of the test
does not make sense and more error messages from failing checks will
just pollute the output.

`EXPECT*` macros mark the test as failed but its execution continues.
It makes sense to use them when error messages from the following checks
in the test may be useful for someone who will be reading the log.

I changed some uses of `ASSERT*` in main tests to `EXPECT*`. But I was
not reading tests very carefully, so maybe I was wrong in some places.
My rule of thumb was:
- Checks that ensure that a kitty opens / a certain set/number of
  windows exists are fatal;
- A series of checks, especially on the same string returned by
  `Hyprland`, are non-fatal;
- Checks in tests with tightly coupled steps (i.e., do this, check,
  do this with the result of the previous step, check, etc) are fatal.
2026-04-28 11:17:12 +01:00
.github config/lua: init lua config manager, use lua if available (#13817) 2026-04-26 15:16:36 +01:00
assets meson: drop 2025-11-17 08:54:47 +02:00
debug-tools debug-tools: add flame 2026-04-04 08:50:36 -04:00
docs [gha] build man pages 2026-04-26 14:16:54 +00:00
example examples: fix missing permissions entry in lua example config (#14177) 2026-04-27 22:39:16 +01:00
hyprctl config/lua: init lua config manager, use lua if available (#13817) 2026-04-26 15:16:36 +01:00
hyprpm build: add glaze dependency with FetchContent fallback (#13666) 2026-03-16 00:53:28 +02:00
hyprtester hyprtester: minor refactoring/restructure (#14154) 2026-04-28 11:17:12 +01:00
meta config/lua: init lua config manager, use lua if available (#13817) 2026-04-26 15:16:36 +01:00
nix config/lua: init lua config manager, use lua if available (#13817) 2026-04-26 15:16:36 +01:00
protocols render/cm: various updates, remove old protocols (#12693) 2025-12-27 18:01:46 +01:00
scripts renderer: shader variants refactor (#13434) 2026-03-06 21:05:10 +00:00
src config/actions: remove spammy errors and make them silent 2026-04-27 23:55:50 +01:00
start internal: silence compiler warnings about unused return values (#13997) 2026-04-05 14:45:27 +01:00
subprojects subprojects: bump tracy 2026-01-05 12:57:40 +01:00
systemd desktop: Update Exec command for UWSM Hyprland desktop entry (#12580) 2025-12-07 17:48:14 +00:00
tests config/lua: init lua config manager, use lua if available (#13817) 2026-04-26 15:16:36 +01:00
.clang-format touch up the clang format and format all files 2022-12-20 02:18:47 +00:00
.clang-format-ignore style/ci: apply clang-format and verify it in ci (#4039) 2023-12-06 22:54:56 +00:00
.clang-tidy config/lua: init lua config manager, use lua if available (#13817) 2026-04-26 15:16:36 +01:00
.gitattributes Initial commit 2022-03-16 20:49:02 +01:00
.gitignore debug-tools: add flame 2026-04-04 08:50:36 -04:00
.gitmodules Core: Move to aquamarine (#6608) 2024-07-21 13:09:54 +02:00
CMakeLists.txt cmake: install the default example hyprland.lua (#14174) 2026-04-27 20:59:45 +01:00
CODE_OF_CONDUCT.md doc: Add a CoC (#3366) 2023-09-20 19:38:44 +01:00
flake.lock [gha] Nix: update inputs 2026-04-25 21:17:24 +00:00
flake.nix treewide: alejandra -> nixfmt 2026-03-02 21:03:44 +02:00
hyprland.pc.in hyprland.pc.in: add src include flag 2026-03-13 22:57:49 +02:00
LICENSE LICENSE: update year 2026-01-11 16:13:52 +01:00
Makefile config/lua: init lua config manager, use lua if available (#13817) 2026-04-26 15:16:36 +01:00
README.md README: add link to CI from badge (#11085) 2025-07-18 21:13:56 +03:00
SECURITY.md SECURITY: init security policy 2025-04-27 00:07:00 +02:00
VERSION version: bump to 0.54.0 2026-02-27 18:03:19 +00:00

banner

Badge Workflow Badge License Badge Language Badge Pull Requests Badge Issues Badge Hi Mom


Hyprland is a 100% independent, dynamic tiling Wayland compositor that doesn't sacrifice on its looks.

It provides the latest Wayland features, is highly customizable, has all the eyecandy, the most powerful plugins, easy IPC, much more QoL stuff than other compositors and more...



Install

Quick Start

Configure

Contribute



Features

  • All of the eyecandy: gradient borders, blur, animations, shadows and much more
  • A lot of customization
  • 100% independent, no wlroots, no libweston, no kwin, no mutter.
  • Custom bezier curves for the best animations
  • Powerful plugin support
  • Built-in plugin manager
  • Tearing support for better gaming performance
  • Easily expandable and readable codebase
  • Fast and active development
  • Not afraid to provide bleeding-edge features
  • Config reloaded instantly upon saving
  • Fully dynamic workspaces
  • Two built-in layouts and more available as plugins
  • Global keybinds passed to your apps of choice
  • Tiling/pseudotiling/floating/fullscreen windows
  • Special workspaces (scratchpads)
  • Window groups (tabbed mode)
  • Powerful window/monitor/layer rules
  • Socket-based IPC
  • Native IME and Input Panels Support
  • and much more...


Gallery


Preview A


Preview B


Preview C



Special Thanks


wlroots - For powering Hyprland in the past

tinywl - For showing how 2 do stuff

Sway - For showing how 2 do stuff the overkill way

Vivarium - For showing how 2 do stuff the simple way

dwl - For showing how 2 do stuff the hacky way

Wayfire - For showing how 2 do some graphics stuff