2022-08-12 20:46:36 +02:00
# Foreword
2022-08-24 06:41:31 +02:00
Due to their proprietary nature, Nvidia GPUs have limited compatibility with
Hyprland. If you want to try Hyprland on Nvidia regardless
(many people have reported successes), follow the [Nvidia page ](../../Nvidia )
after installing Hyprland.
2022-08-12 20:46:36 +02:00
2022-10-23 16:35:39 +02:00
## Distros
2022-08-12 20:46:36 +02:00
2022-08-22 14:06:25 +02:00
Arch, NixOS and openSUSE Tumbleweed are very supported. For any other distro
(not based on Arch/Nix) you might have varying amounts of success. However,
since Hyprland is extremely bleeding-edge, distros like Pop!\_OS, Ubuntu, etc.
might have **major** issues running Hyprland.
2022-08-12 20:46:36 +02:00
2022-10-23 16:35:39 +02:00
## Installation
2022-08-12 20:46:36 +02:00
Installing Hyprland is very easy. Either you install it from your local package
provider (if they provide pkgs for Hyprland) or you install/build it yourself.
2022-08-13 10:41:13 +02:00
{{< hint title = note > }}
This project is under development and is constantly
2022-08-13 01:47:48 +02:00
changing. If you want to keep up to date with the latest commits, please
consider updating your packages with `yay -Syu --devel` , or your other preferred
2022-08-24 06:41:31 +02:00
package manager.
2022-08-13 10:41:13 +02:00
{{< / hint > }}
2022-08-12 20:46:36 +02:00
2022-10-23 16:35:39 +02:00
### Packages
2022-08-12 20:46:36 +02:00
**WARNING:** I do not maintain any packages. If they are broken, try building
from source first.
2022-08-13 10:41:13 +02:00
{{< tabs " uniqueid " > }}
2022-08-12 20:46:36 +02:00
2023-04-06 20:49:50 +02:00
{{< tab " Arch Linux " > }}
2022-08-13 01:45:14 +02:00
```plain
2023-04-06 20:49:50 +02:00
hyprland-git (AUR) - compiles from latest source
hyprland - binary x86 tagged release
2022-08-12 20:46:36 +02:00
```
2022-08-13 10:41:13 +02:00
{{< / tab > }}
2023-07-17 18:14:43 +02:00
{{< tab " Nix " > }}
Enable Hyprland in your NixOS configuration:
```nix
programs.hyprland.enable = true;
```
For more details, read the [Nix page ](../../Nix ).
{{< / tab > }}
2023-07-16 00:32:40 +02:00
{{< tab " openSUSE * " > }}
2023-04-13 16:09:46 +02:00
Hyprland is part of factory, starting with snapshot 20230411. To install it simply use zypper
2022-08-22 14:06:25 +02:00
```sh
2023-04-13 16:09:46 +02:00
sudo zypper in hyprland
2022-08-22 14:06:25 +02:00
```
2023-04-13 16:09:46 +02:00
or install the "hyprland" package via YaST2 Software.
2022-08-22 14:27:36 +02:00
Alternatively, you can also follow the instructions under ["Manual (Manual Build)" ](#manual-manual-build )
2022-08-22 14:06:25 +02:00
to build Hyprland yourself.
2022-10-23 16:35:39 +02:00
Note: _Hyprland is not available for Leap, as most libraries (and compiler) that Hyprland needs are too old._
2022-08-22 14:06:25 +02:00
{{< / tab > }}
2023-12-03 18:46:26 +01:00
{{< tab " Fedora * " > }}
On Fedora 39 and Rawhide, run:
```sh
sudo dnf install hyprland
2023-12-07 18:58:45 +01:00
sudo dnf install hyprland-devel # If you want to build plugins
2023-12-03 18:46:26 +01:00
```
2023-12-07 18:58:45 +01:00
Builds for Fedora 38 and additional packages are available in the [solopasha/hyprland ](https://copr.fedorainfracloud.org/coprs/solopasha/hyprland ) Copr repository.
If you are on an older version of Fedora, you can also compile it yourself by following the instructions [here ](https://github.com/hyprwm/Hyprland/discussions/284 )
2023-12-03 18:46:26 +01:00
{{< / tab > }}
2023-07-16 00:32:40 +02:00
{{< tab " Gentoo * " > }}
2024-01-05 12:45:06 +01:00
The hyprland package is available in the main tree:
2023-07-21 10:24:15 +02:00
```sh
emerge --ask gui-wm/hyprland
```
2024-01-05 12:45:06 +01:00
Additional packages like xdg-desktop-portal-hyprland, hyprland-plugins, hyprpaper and hyprpicker are available in the [GURU ](https://wiki.gentoo.org/wiki/Project:GURU ) overlay. Community-contributed scripts are also available in GURU as part of the hyprland-contrib package.
2022-08-24 06:41:31 +02:00
2022-08-20 22:52:51 +02:00
```sh
2023-02-19 21:59:58 +01:00
eselect repository enable guru
emaint sync -r guru
2024-01-05 12:45:06 +01:00
emerge --ask gui-libs/xdg-desktop-portal-hyprland
2023-07-21 10:24:15 +02:00
emerge --ask gui-apps/hyprland-plugins
emerge --ask gui-apps/hyprpaper
emerge --ask gui-apps/hyprpicker
emerge --ask gui-wm/hyprland-contrib
2022-08-20 22:52:51 +02:00
```
2022-08-24 06:41:31 +02:00
2023-07-21 10:24:15 +02:00
For USE flags and more details, read the [Gentoo wiki page ](https://wiki.gentoo.org/wiki/Hyprland ) about Hyprland.
2022-12-20 17:09:42 +01:00
{{< / tab > }}
2023-07-16 00:32:40 +02:00
{{< tab " FreeBSD * " > }}
2022-12-20 17:09:42 +01:00
Hyprland and related are in the default repository:
- [hyprland ](https://www.freshports.org/x11-wm/hyprland )
- [hyprpaper ](https://www.freshports.org/x11/hyprpaper )
- [hyprpicker ](https://www.freshports.org/x11/hyprpicker )
- [xdg-desktop-portal-hyprland ](https://www.freshports.org/x11/xdg-desktop-portal-hyprland )
- [Other Wayland stuff ](https://www.freshports.org/wayland/ )
2023-05-01 16:47:32 +02:00
{{< / tab > }}
2023-07-16 00:32:40 +02:00
{{< tab " Ubuntu 23 . 04 * " > }}
2023-05-01 16:47:32 +02:00
Build Dependencies:
```bash
2023-12-07 18:20:30 +01:00
sudo apt-get install -y meson wget build-essential ninja-build cmake-extras cmake gettext gettext-base fontconfig libfontconfig-dev libffi-dev libxml2-dev libdrm-dev libxkbcommon-x11-dev libxkbregistry-dev libxkbcommon-dev libpixman-1-dev libudev-dev libseat-dev seatd libxcb-dri3-dev libegl-dev libgles2 libegl1-mesa-dev glslang-tools libinput-bin libinput-dev libxcb-composite0-dev libavutil-dev libavcodec-dev libavformat-dev libxcb-ewmh2 libxcb-ewmh-dev libxcb-present-dev libxcb-icccm4-dev libxcb-render-util0-dev libxcb-res0-dev libxcb-xinput-dev xdg-desktop-portal-wlr libtomlplusplus3
2023-05-01 16:47:32 +02:00
```
you will also need to build the latest wayland, wayland-protocols, and libdisplay-info tagged releases from source
for more info refer to the [Ubuntu Guide For Installing And Building Hyprland Gist ](https://gist.github.com/Vertecedoc4545/3b077301299c20c5b9b4db00f4ca6000 )
{{< hint type = warning > }}
Please note that since Ubuntu is generally behind with dependencies, it's not guaranteed
that the build process will work at all. Even if it is, it's likely that it will break at some point in the future.
Refer to the gist if anything fails.
{{< / hint > }}
2022-08-20 22:52:51 +02:00
{{< / tab > }}
2023-07-16 00:32:40 +02:00
{{< tab " Void Linux * " > }}
2023-11-04 20:36:56 +01:00
Hyprland is not available for Void Linux from the official repositories [as Hyprland doesn't build against tagged wlroots ](https://github.com/void-linux/void-packages/issues/37544 ),
2023-06-27 13:34:27 +02:00
however template files are available [from a third party ](https://github.com/Makrennel/hyprland-void ) which can build Hyprland [using xbps-src ](https://github.com/void-linux/void-packages ).
For further instructions on building with the third party resource, refer to the [README ](https://github.com/Makrennel/hyprland-void/blob/master/README.md ).
{{< hint type = warning > }}
As always, when using third party scripts exercise caution and understand what the script does.
{{< / hint > }}
2023-09-03 13:32:28 +02:00
{{< / tab > }}
2023-09-06 13:19:11 +02:00
{{< tab " Slackware * " > }}
2023-09-03 13:32:28 +02:00
```plain
hyprland-bin (SlackBuilds) - Prebuilt release for Slackware ready for install
```
Hyprland is not installed by default on the current release of Slackware.
For detailed instructions on installing this build see [here ](https://slackbuilds.org/repository/15.0/desktop/hyprland-bin/ )
2023-06-27 13:34:27 +02:00
{{< / tab > }}
2022-08-12 20:46:36 +02:00
2022-08-13 10:41:13 +02:00
{{< / tabs > }}
2022-08-12 20:46:36 +02:00
2023-07-16 00:32:40 +02:00
***\* Unofficial, no official support is provided. These instructions are community-driven, and no guarantee is provided for their validity.***
2022-12-20 17:09:42 +01:00
### Manual (Releases, Linux-only)
2022-08-12 20:46:36 +02:00
Download the most recent release.
copy the binary (Hyprland) to `/usr/bin/` .
copy hyprctl to `/usr/bin/` .
2022-11-09 21:07:45 +01:00
copy the wlroots .so (`libwlroots.so.XX032`) to `/usr/lib/` .
2022-08-12 20:46:36 +02:00
2023-10-24 18:51:53 +02:00
copy the desktop entry (`example/hyprland.desktop`) to
2022-08-12 20:46:36 +02:00
`/usr/share/wayland-sessions/`
2023-10-24 18:51:53 +02:00
the example config is in `example/hyprland.conf` .
2022-08-12 20:46:36 +02:00
For updating later on, you can overwrite the binaries (hyprctl, hyprland and
libwlroots), you don't need to update anything else.
2022-10-23 16:35:39 +02:00
### Manual (Manual Build)
2022-08-12 20:46:36 +02:00
2022-10-23 16:35:39 +02:00
_Arch dependencies_:
2022-08-12 20:46:36 +02:00
2022-08-13 01:45:14 +02:00
```plain
2023-12-07 18:20:30 +01:00
yay -S gdb ninja gcc cmake meson libxcb xcb-proto xcb-util xcb-util-keysyms libxfixes libx11 libxcomposite xorg-xinput libxrender pixman wayland-protocols cairo pango seatd libxkbcommon xcb-util-wm xorg-xwayland libinput libliftoff libdisplay-info cpio tomlplusplus
2022-08-13 01:45:14 +02:00
```
2022-08-12 20:46:36 +02:00
2022-10-25 16:18:25 +02:00
_(Please make a pull request or open an issue if any packages are missing from the list)_
2022-08-12 20:46:36 +02:00
2022-10-23 16:35:39 +02:00
_openSUSE dependencies_:
2022-08-22 14:06:25 +02:00
```sh
zypper in gcc-c++ git meson cmake "pkgconfig(cairo)" "pkgconfig(egl)" "pkgconfig(gbm)" "pkgconfig(gl)" "pkgconfig(glesv2)" "pkgconfig(libdrm)" "pkgconfig(libinput)" "pkgconfig(libseat)" "pkgconfig(libudev)" "pkgconfig(pango)" "pkgconfig(pangocairo)" "pkgconfig(pixman-1)" "pkgconfig(vulkan)" "pkgconfig(wayland-client)" "pkgconfig(wayland-protocols)" "pkgconfig(wayland-scanner)" "pkgconfig(wayland-server)" "pkgconfig(xcb)" "pkgconfig(xcb-icccm)" "pkgconfig(xcb-renderutil)" "pkgconfig(xkbcommon)" "pkgconfig(xwayland)" glslang-devel Mesa-libGLESv3-devel "pkgconfig(xcb-errors)"
```
2022-08-22 14:27:36 +02:00
(this should also work on RHEL/Fedora if you remove `Mesa-libGLESv3-devel` and `pkgconfig(xcb-errors)` )
2022-08-22 14:06:25 +02:00
Installation: drop GCC dependency on FreeBSD
System tomlplusplus is built against libc++ which conflicts with
libstdc++ used by GCC. While tomlplusplus can be bundled it's only
easy to do via Meson (--force-fallback-for).
/usr/local/bin/ld: hyprpm/CMakeFiles/hyprpm.dir/src/core/DataState.cpp.o: in function `DataState::addNewPluginRepo(SPluginRepository const&)':
DataState.cpp:(.text+0x16b4): undefined reference to `toml::v3::table::get_lower_bound(std::basic_string_view<char, std::char_traits<char> >)'
/usr/local/bin/ld: DataState.cpp:(.text+0x1793): undefined reference to `toml::v3::table::insert_with_hint(toml::v3::impl::table_iterator<true>, toml::v3::key&&, std::unique_ptr<toml::v3::node, std::default_delete<toml::v3::node> >&&)'
/usr/local/bin/ld: DataState.cpp:(.text+0x2c59): undefined reference to `toml::v3::impl::print_to_stream(std::ostream&, toml::v3::table const&)'
/usr/local/bin/ld: hyprpm/CMakeFiles/hyprpm.dir/src/core/DataState.cpp.o: in function `DataState::pluginRepoExists(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
DataState.cpp:(.text+0x3739): undefined reference to `toml::v3::ex::parse_file(std::basic_string_view<char, std::char_traits<char> >)'
/usr/local/bin/ld: DataState.cpp:(.text+0x3783): undefined reference to `toml::v3::table::get(std::basic_string_view<char, std::char_traits<char> >)'
/usr/local/bin/ld: DataState.cpp:(.text+0x37ab): undefined reference to `toml::v3::table::get(std::basic_string_view<char, std::char_traits<char> >)'
[...]
2024-01-05 17:54:14 +01:00
_FreeBSD >= 13.3/14.0 dependencies_:
2022-12-20 17:09:42 +01:00
```plain
Installation: drop GCC dependency on FreeBSD
System tomlplusplus is built against libc++ which conflicts with
libstdc++ used by GCC. While tomlplusplus can be bundled it's only
easy to do via Meson (--force-fallback-for).
/usr/local/bin/ld: hyprpm/CMakeFiles/hyprpm.dir/src/core/DataState.cpp.o: in function `DataState::addNewPluginRepo(SPluginRepository const&)':
DataState.cpp:(.text+0x16b4): undefined reference to `toml::v3::table::get_lower_bound(std::basic_string_view<char, std::char_traits<char> >)'
/usr/local/bin/ld: DataState.cpp:(.text+0x1793): undefined reference to `toml::v3::table::insert_with_hint(toml::v3::impl::table_iterator<true>, toml::v3::key&&, std::unique_ptr<toml::v3::node, std::default_delete<toml::v3::node> >&&)'
/usr/local/bin/ld: DataState.cpp:(.text+0x2c59): undefined reference to `toml::v3::impl::print_to_stream(std::ostream&, toml::v3::table const&)'
/usr/local/bin/ld: hyprpm/CMakeFiles/hyprpm.dir/src/core/DataState.cpp.o: in function `DataState::pluginRepoExists(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
DataState.cpp:(.text+0x3739): undefined reference to `toml::v3::ex::parse_file(std::basic_string_view<char, std::char_traits<char> >)'
/usr/local/bin/ld: DataState.cpp:(.text+0x3783): undefined reference to `toml::v3::table::get(std::basic_string_view<char, std::char_traits<char> >)'
/usr/local/bin/ld: DataState.cpp:(.text+0x37ab): undefined reference to `toml::v3::table::get(std::basic_string_view<char, std::char_traits<char> >)'
[...]
2024-01-05 17:54:14 +01:00
pkg install git pkgconf gmake evdev-proto cmake wayland-protocols wayland libglvnd libxkbcommon libinput cairo pango pixman tomlplusplus libxcb
2024-01-05 17:15:54 +01:00
pkg install meson jq `pkg rquery %dn wlroots` hwdata
Installation: drop GCC dependency on FreeBSD
System tomlplusplus is built against libc++ which conflicts with
libstdc++ used by GCC. While tomlplusplus can be bundled it's only
easy to do via Meson (--force-fallback-for).
/usr/local/bin/ld: hyprpm/CMakeFiles/hyprpm.dir/src/core/DataState.cpp.o: in function `DataState::addNewPluginRepo(SPluginRepository const&)':
DataState.cpp:(.text+0x16b4): undefined reference to `toml::v3::table::get_lower_bound(std::basic_string_view<char, std::char_traits<char> >)'
/usr/local/bin/ld: DataState.cpp:(.text+0x1793): undefined reference to `toml::v3::table::insert_with_hint(toml::v3::impl::table_iterator<true>, toml::v3::key&&, std::unique_ptr<toml::v3::node, std::default_delete<toml::v3::node> >&&)'
/usr/local/bin/ld: DataState.cpp:(.text+0x2c59): undefined reference to `toml::v3::impl::print_to_stream(std::ostream&, toml::v3::table const&)'
/usr/local/bin/ld: hyprpm/CMakeFiles/hyprpm.dir/src/core/DataState.cpp.o: in function `DataState::pluginRepoExists(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
DataState.cpp:(.text+0x3739): undefined reference to `toml::v3::ex::parse_file(std::basic_string_view<char, std::char_traits<char> >)'
/usr/local/bin/ld: DataState.cpp:(.text+0x3783): undefined reference to `toml::v3::table::get(std::basic_string_view<char, std::char_traits<char> >)'
/usr/local/bin/ld: DataState.cpp:(.text+0x37ab): undefined reference to `toml::v3::table::get(std::basic_string_view<char, std::char_traits<char> >)'
[...]
2024-01-05 17:54:14 +01:00
export CXXFLAGS=-fexperimental-library
2022-12-20 17:09:42 +01:00
```
2023-05-01 16:47:32 +02:00
_Ubuntu 23.04 dependencies_:
2023-05-24 15:50:41 +02:00
refer to the Ubuntu tab above
2023-05-01 16:47:32 +02:00
2022-08-12 20:46:36 +02:00
Please note Hyprland builds `wlroots` . Make sure you have the dependencies of
wlroots installed, you can make sure you have them by installing wlroots
separately (Hyprland doesn't mind)
2022-12-20 17:09:42 +01:00
Also note that Hyprland uses the C++23 standard, so both your compiler
Installation: recommend Clang 17 for best libc++ compatibility
Clang/libc++ 16 requires CXXFLAGS += -fexperimental-library
Clang < 16 fails with libc++ >= 16:
In file included from ../src/protocols/GlobalShortcuts.cpp:1:
In file included from /wrkdirs/usr/ports/x11-wm/hyprland/work/Hyprland-0.34.0/_build/../src/pch/pch.hpp:1:
In file included from ../src/protocols/../Compositor.hpp:3:
In file included from /usr/include/c++/v1/memory:898:
In file included from /usr/include/c++/v1/__memory/shared_ptr.h:31:
/usr/include/c++/v1/__memory/unique_ptr.h:686:30: error: no matching constructor for initialization of 'SShortcutClient'
return unique_ptr<_Tp>(new _Tp(_VSTD::forward<_Args>(__args)...));
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../src/protocols/GlobalShortcuts.cpp:56:34: note: in instantiation of function template specialization 'std::make_unique<SShortcutClient, wl_client *&>' requested here
m_vClients.emplace_back(std::make_unique<SShortcutClient>(client));
^
../src/protocols/GlobalShortcuts.hpp:12:8: note: candidate constructor (the implicit copy constructor) not viable: cannot convert argument of incomplete type 'wl_client *' to 'const SShortcutClient' for 1st argument
struct SShortcutClient {
^
../src/protocols/GlobalShortcuts.hpp:12:8: note: candidate constructor (the implicit move constructor) not viable: cannot convert argument of incomplete type 'wl_client *' to 'SShortcutClient' for 1st argument
../src/protocols/GlobalShortcuts.hpp:12:8: note: candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided
In file included from ../src/protocols/XDGOutput.cpp:1:
In file included from /wrkdirs/usr/ports/x11-wm/hyprland/work/Hyprland-0.34.0/_build/../src/pch/pch.hpp:1:
In file included from ../src/protocols/../Compositor.hpp:3:
In file included from /usr/include/c++/v1/memory:898:
In file included from /usr/include/c++/v1/__memory/shared_ptr.h:31:
/usr/include/c++/v1/__memory/unique_ptr.h:686:30: error: no matching constructor for initialization of 'SXDGOutput'
return unique_ptr<_Tp>(new _Tp(_VSTD::forward<_Args>(__args)...));
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../src/protocols/XDGOutput.cpp:79:62: note: in instantiation of function template specialization 'std::make_unique<SXDGOutput, CMonitor *const &>' requested here
SXDGOutput* pXDGOutput = m_vXDGOutputs.emplace_back(std::make_unique<SXDGOutput>(PMONITOR)).get();
^
../src/protocols/XDGOutput.hpp:8:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'CMonitor *const' to 'const SXDGOutput' for 1st argument
struct SXDGOutput {
^
../src/protocols/XDGOutput.hpp:8:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'CMonitor *const' to 'SXDGOutput' for 1st argument
../src/protocols/XDGOutput.hpp:8:8: note: candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided
In file included from ../src/render/decorations/DecorationPositioner.cpp:1:
In file included from /wrkdirs/usr/ports/x11-wm/hyprland/work/Hyprland-0.34.0/_build/../src/pch/pch.hpp:1:
In file included from ../src/render/decorations/../../Compositor.hpp:3:
In file included from /usr/include/c++/v1/memory:898:
In file included from /usr/include/c++/v1/__memory/shared_ptr.h:31:
/usr/include/c++/v1/__memory/unique_ptr.h:686:30: error: no matching constructor for initialization of 'CDecorationPositioner::SWindowPositioningData'
return unique_ptr<_Tp>(new _Tp(_VSTD::forward<_Args>(__args)...));
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../src/render/decorations/DecorationPositioner.cpp:80:67: note: in instantiation of function template specialization 'std::make_unique<CDecorationPositioner::SWindowPositioningData, CWindow *&, IHyprWindowDecoration *&>' requested here
const auto DATA = m_vWindowPositioningDatas.emplace_back(std::make_unique<CDecorationPositioner::SWindowPositioningData>(pWindow, pDecoration)).get();
^
../src/render/decorations/DecorationPositioner.hpp:75:12: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided
struct SWindowPositioningData {
^
../src/render/decorations/DecorationPositioner.hpp:75:12: note: candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 2 were provided
../src/render/decorations/DecorationPositioner.hpp:75:12: note: candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 2 were provided
Clang >= 16 fails with libc++ < 16:
In file included from ../src/pch/pch.hpp:1:
In file included from ../src/Compositor.hpp:7:
In file included from ../src/defines.hpp:2:
../src/debug/Log.hpp:60:35: error: call to consteval function 'std::basic_format_string<char, std::chrono::duration<long, std::ratio<3600>>, std::chrono::duration<long, std::ratio<60>>, std::chrono::duration<long long, std::ratio<1, 1000000>>>::basic_format_string<char[18]>' is not a constant expression
logMsg += std::format("{:%H}:{:%M}:{:%S}", c.hours(), c.minutes(), c.subseconds());
^
/usr/include/c++/v1/format:483:46: note: initializer of '__types_' is not a constant expression
_Context{__types_.data(), __handles_.data(), sizeof...(_Args)});
^
../src/debug/Log.hpp:60:35: note: in call to 'basic_format_string("{:%H}:{:%M}:{:%S}")'
logMsg += std::format("{:%H}:{:%M}:{:%S}", c.hours(), c.minutes(), c.subseconds());
^
/usr/include/c++/v1/format:495:63: note: declared here
static constexpr array<__format::__arg_t, sizeof...(_Args)> __types_{
^
In file included from ../src/pch/pch.hpp:1:
In file included from ../src/Compositor.hpp:7:
In file included from ../src/defines.hpp:1:
In file included from ../src/includes.hpp:149:
In file included from ../src/helpers/Vector2D.hpp:4:
/usr/include/c++/v1/format:496:7: error: call to deleted function '__determine_arg_t'
__format::__determine_arg_t<_Context, remove_cvref_t<_Args>>()...};
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/v1/format:483:37: note: in instantiation of static data member 'std::basic_format_string<char, std::chrono::duration<long, std::ratio<3600>>, std::chrono::duration<long, std::ratio<60>>, std::chrono::duration<long long, std::ratio<1, 1000000>>>::__types_' requested here
_Context{__types_.data(), __handles_.data(), sizeof...(_Args)});
^
../src/debug/Log.hpp:60:35: note: in instantiation of function template specialization 'std::basic_format_string<char, std::chrono::duration<long, std::ratio<3600>>, std::chrono::duration<long, std::ratio<60>>, std::chrono::duration<long long, std::ratio<1, 1000000>>>::basic_format_string<char[18]>' requested here
logMsg += std::format("{:%H}:{:%M}:{:%S}", c.hours(), c.minutes(), c.subseconds());
^
/usr/include/c++/v1/__format/format_arg_store.h:153:19: note: candidate function [with _Context = std::__format::__compile_time_basic_format_context<char>, _Tp = std::chrono::duration<long, std::ratio<3600>>] has been explicitly deleted
consteval __arg_t __determine_arg_t() = delete;
^
/usr/include/c++/v1/__format/format_arg_store.h:147:19: note: candidate function [with _Context = std::__format::__compile_time_basic_format_context<char>, _Tp = std::chrono::duration<long, std::ratio<3600>>]
consteval __arg_t __determine_arg_t() {
^
/usr/include/c++/v1/__format/format_arg_store.h:41:19: note: candidate template ignored: constraints not satisfied [with $0 = _Context, _Tp = remove_cvref_t<duration<long, ratio<3600, 1>>>]
consteval __arg_t __determine_arg_t() {
^
/usr/include/c++/v1/__format/format_arg_store.h:40:18: note: because 'same_as<std::chrono::duration<long, std::ratio<3600> >, _Bool>' evaluated to false
template <class, same_as<bool> _Tp>
^
/usr/include/c++/v1/__concepts/same_as.h:29:19: note: because '__same_as_impl<std::chrono::duration<long, std::ratio<3600> >, _Bool>' evaluated to false
concept same_as = __same_as_impl<_Tp, _Up> && __same_as_impl<_Up, _Tp>;
^
/usr/include/c++/v1/__concepts/same_as.h:26:26: note: because '_IsSame<duration<long, ratio<3600> >, _Bool>::value' evaluated to false
concept __same_as_impl = _IsSame<_Tp, _Up>::value;
^
/usr/include/c++/v1/__format/format_arg_store.h:47:19: note: candidate template ignored: constraints not satisfied [with _Context = _Context, _Tp = remove_cvref_t<duration<long, ratio<3600, 1>>>]
consteval __arg_t __determine_arg_t() {
^
/usr/include/c++/v1/__format/format_arg_store.h:46:27: note: because 'same_as<std::chrono::duration<long, std::ratio<3600> >, typename __compile_time_basic_format_context<char>::char_type>' evaluated to false
template <class _Context, same_as<typename _Context::char_type> _Tp>
^
/usr/include/c++/v1/__concepts/same_as.h:29:19: note: because '__same_as_impl<std::chrono::duration<long, std::ratio<3600> >, char>' evaluated to false
concept same_as = __same_as_impl<_Tp, _Up> && __same_as_impl<_Up, _Tp>;
^
/usr/include/c++/v1/__concepts/same_as.h:26:26: note: because '_IsSame<duration<long, ratio<3600> >, char>::value' evaluated to false
concept __same_as_impl = _IsSame<_Tp, _Up>::value;
^
/usr/include/c++/v1/__format/format_arg_store.h:53:19: note: candidate template ignored: constraints not satisfied [with _Context = _Context, _CharT = remove_cvref_t<duration<long, ratio<3600, 1>>>]
consteval __arg_t __determine_arg_t() {
^
/usr/include/c++/v1/__format/format_arg_store.h:52:12: note: because 'same_as<typename __compile_time_basic_format_context<char>::char_type, wchar_t>' evaluated to false
requires(same_as<typename _Context::char_type, wchar_t> && same_as<_CharT, char>)
^
/usr/include/c++/v1/__concepts/same_as.h:29:19: note: because '__same_as_impl<char, wchar_t>' evaluated to false
concept same_as = __same_as_impl<_Tp, _Up> && __same_as_impl<_Up, _Tp>;
^
/usr/include/c++/v1/__concepts/same_as.h:26:26: note: because '_IsSame<char, wchar_t>::value' evaluated to false
concept __same_as_impl = _IsSame<_Tp, _Up>::value;
^
/usr/include/c++/v1/__format/format_arg_store.h:60:19: note: candidate template ignored: constraints not satisfied [with $0 = _Context, _Tp = remove_cvref_t<duration<long, ratio<3600, 1>>>]
consteval __arg_t __determine_arg_t() {
^
/usr/include/c++/v1/__format/format_arg_store.h:59:18: note: because 'std::chrono::duration<long, std::ratio<3600>>' does not satisfy '__libcpp_signed_integer'
template <class, __libcpp_signed_integer _Tp>
^
/usr/include/c++/v1/__concepts/arithmetic.h:44:35: note: because '__libcpp_is_signed_integer<duration<long, ratio<3600> > >::value' evaluated to false
concept __libcpp_signed_integer = __libcpp_is_signed_integer<_Tp>::value;
^
/usr/include/c++/v1/__format/format_arg_store.h:75:19: note: candidate template ignored: constraints not satisfied [with $0 = _Context, _Tp = remove_cvref_t<duration<long, ratio<3600, 1>>>]
consteval __arg_t __determine_arg_t() {
^
/usr/include/c++/v1/__format/format_arg_store.h:74:18: note: because 'std::chrono::duration<long, std::ratio<3600>>' does not satisfy '__libcpp_unsigned_integer'
template <class, __libcpp_unsigned_integer _Tp>
^
/usr/include/c++/v1/__concepts/arithmetic.h:42:37: note: because '__libcpp_is_unsigned_integer<duration<long, ratio<3600> > >::value' evaluated to false
concept __libcpp_unsigned_integer = __libcpp_is_unsigned_integer<_Tp>::value;
^
/usr/include/c++/v1/__format/format_arg_store.h:90:19: note: candidate template ignored: constraints not satisfied [with $0 = _Context, _Tp = remove_cvref_t<duration<long, ratio<3600, 1>>>]
consteval __arg_t __determine_arg_t() {
^
/usr/include/c++/v1/__format/format_arg_store.h:89:18: note: because 'same_as<std::chrono::duration<long, std::ratio<3600> >, float>' evaluated to false
template <class, same_as<float> _Tp>
^
/usr/include/c++/v1/__concepts/same_as.h:29:19: note: because '__same_as_impl<std::chrono::duration<long, std::ratio<3600> >, float>' evaluated to false
concept same_as = __same_as_impl<_Tp, _Up> && __same_as_impl<_Up, _Tp>;
^
/usr/include/c++/v1/__concepts/same_as.h:26:26: note: because '_IsSame<duration<long, ratio<3600> >, float>::value' evaluated to false
concept __same_as_impl = _IsSame<_Tp, _Up>::value;
^
/usr/include/c++/v1/__format/format_arg_store.h:94:19: note: candidate template ignored: constraints not satisfied [with $0 = _Context, _Tp = remove_cvref_t<duration<long, ratio<3600, 1>>>]
consteval __arg_t __determine_arg_t() {
^
/usr/include/c++/v1/__format/format_arg_store.h:93:18: note: because 'same_as<std::chrono::duration<long, std::ratio<3600> >, double>' evaluated to false
template <class, same_as<double> _Tp>
^
/usr/include/c++/v1/__concepts/same_as.h:29:19: note: because '__same_as_impl<std::chrono::duration<long, std::ratio<3600> >, double>' evaluated to false
concept same_as = __same_as_impl<_Tp, _Up> && __same_as_impl<_Up, _Tp>;
^
/usr/include/c++/v1/__concepts/same_as.h:26:26: note: because '_IsSame<duration<long, ratio<3600> >, double>::value' evaluated to false
concept __same_as_impl = _IsSame<_Tp, _Up>::value;
^
/usr/include/c++/v1/__format/format_arg_store.h:98:19: note: candidate template ignored: constraints not satisfied [with $0 = _Context, _Tp = remove_cvref_t<duration<long, ratio<3600, 1>>>]
consteval __arg_t __determine_arg_t() {
^
/usr/include/c++/v1/__format/format_arg_store.h:97:18: note: because 'same_as<std::chrono::duration<long, std::ratio<3600> >, long double>' evaluated to false
template <class, same_as<long double> _Tp>
^
/usr/include/c++/v1/__concepts/same_as.h:29:19: note: because '__same_as_impl<std::chrono::duration<long, std::ratio<3600> >, long double>' evaluated to false
concept same_as = __same_as_impl<_Tp, _Up> && __same_as_impl<_Up, _Tp>;
^
/usr/include/c++/v1/__concepts/same_as.h:26:26: note: because '_IsSame<duration<long, ratio<3600> >, long double>::value' evaluated to false
concept __same_as_impl = _IsSame<_Tp, _Up>::value;
^
/usr/include/c++/v1/__format/format_arg_store.h:105:19: note: candidate template ignored: constraints not satisfied [with _Context = _Context, _Tp = remove_cvref_t<duration<long, ratio<3600, 1>>>]
consteval __arg_t __determine_arg_t() {
^
/usr/include/c++/v1/__format/format_arg_store.h:104:12: note: because 'same_as<typename __compile_time_basic_format_context<char>::char_type *, std::chrono::duration<long, std::ratio<3600> > >' evaluated to false
requires(same_as<typename _Context::char_type*, _Tp> || same_as<const typename _Context::char_type*, _Tp>)
^
/usr/include/c++/v1/__concepts/same_as.h:29:19: note: because '__same_as_impl<char *, std::chrono::duration<long, std::ratio<3600> > >' evaluated to false
concept same_as = __same_as_impl<_Tp, _Up> && __same_as_impl<_Up, _Tp>;
^
/usr/include/c++/v1/__concepts/same_as.h:26:26: note: because '_IsSame<char *, duration<long, ratio<3600> > >::value' evaluated to false
concept __same_as_impl = _IsSame<_Tp, _Up>::value;
^
/usr/include/c++/v1/__format/format_arg_store.h:104:59: note: and 'same_as<const typename __compile_time_basic_format_context<char>::char_type *, std::chrono::duration<long, std::ratio<3600> > >' evaluated to false
requires(same_as<typename _Context::char_type*, _Tp> || same_as<const typename _Context::char_type*, _Tp>)
^
/usr/include/c++/v1/__concepts/same_as.h:29:19: note: because '__same_as_impl<const char *, std::chrono::duration<long, std::ratio<3600> > >' evaluated to false
concept same_as = __same_as_impl<_Tp, _Up> && __same_as_impl<_Up, _Tp>;
^
/usr/include/c++/v1/__concepts/same_as.h:26:26: note: because '_IsSame<const char *, duration<long, ratio<3600> > >::value' evaluated to false
concept __same_as_impl = _IsSame<_Tp, _Up>::value;
^
/usr/include/c++/v1/__format/format_arg_store.h:112:19: note: candidate template ignored: constraints not satisfied [with _Context = _Context, _Tp = remove_cvref_t<duration<long, ratio<3600, 1>>>]
consteval __arg_t __determine_arg_t() {
^
/usr/include/c++/v1/__format/format_arg_store.h:111:12: note: because 'is_array_v<std::chrono::duration<long, std::ratio<3600> > >' evaluated to false
requires(is_array_v<_Tp> && same_as<_Tp, typename _Context::char_type[extent_v<_Tp>]>)
^
/usr/include/c++/v1/__format/format_arg_store.h:120:19: note: candidate template ignored: constraints not satisfied [with _Context = _Context, _Tp = remove_cvref_t<duration<long, ratio<3600, 1>>>]
consteval __arg_t __determine_arg_t() {
^
/usr/include/c++/v1/__format/format_arg_store.h:118:64: note: because substituted constraint expression is ill-formed: no type named 'value_type' in 'std::chrono::duration<long, std::ratio<3600>>'
requires(same_as<typename _Context::char_type, typename _Tp::value_type> &&
^
/usr/include/c++/v1/__format/format_arg_store.h:129:19: note: candidate template ignored: constraints not satisfied [with _Context = _Context, _Tp = remove_cvref_t<duration<long, ratio<3600, 1>>>]
consteval __arg_t __determine_arg_t() {
^
/usr/include/c++/v1/__format/format_arg_store.h:127:59: note: because substituted constraint expression is ill-formed: no type named 'value_type' in 'std::chrono::duration<long, std::ratio<3600>>'
same_as<typename _Context::char_type, typename _Tp::value_type> &&
^
/usr/include/c++/v1/__format/format_arg_store.h:136:19: note: candidate template ignored: constraints not satisfied [with $0 = _Context, _Ptr = remove_cvref_t<duration<long, ratio<3600, 1>>>]
consteval __arg_t __determine_arg_t() {
^
/usr/include/c++/v1/__format/format_arg_store.h:135:12: note: because 'same_as<std::chrono::duration<long, std::ratio<3600> >, void *>' evaluated to false
requires(same_as<_Ptr, void*> || same_as<_Ptr, const void*> || same_as<_Ptr, nullptr_t>)
^
/usr/include/c++/v1/__concepts/same_as.h:29:19: note: because '__same_as_impl<std::chrono::duration<long, std::ratio<3600> >, void *>' evaluated to false
concept same_as = __same_as_impl<_Tp, _Up> && __same_as_impl<_Up, _Tp>;
^
/usr/include/c++/v1/__concepts/same_as.h:26:26: note: because '_IsSame<duration<long, ratio<3600> >, void *>::value' evaluated to false
concept __same_as_impl = _IsSame<_Tp, _Up>::value;
^
/usr/include/c++/v1/__format/format_arg_store.h:135:36: note: and 'same_as<std::chrono::duration<long, std::ratio<3600> >, const void *>' evaluated to false
requires(same_as<_Ptr, void*> || same_as<_Ptr, const void*> || same_as<_Ptr, nullptr_t>)
^
/usr/include/c++/v1/__concepts/same_as.h:29:19: note: because '__same_as_impl<std::chrono::duration<long, std::ratio<3600> >, const void *>' evaluated to false
concept same_as = __same_as_impl<_Tp, _Up> && __same_as_impl<_Up, _Tp>;
^
/usr/include/c++/v1/__concepts/same_as.h:26:26: note: because '_IsSame<duration<long, ratio<3600> >, const void *>::value' evaluated to false
concept __same_as_impl = _IsSame<_Tp, _Up>::value;
^
/usr/include/c++/v1/__format/format_arg_store.h:135:66: note: and 'same_as<std::chrono::duration<long, std::ratio<3600> >, nullptr_t>' evaluated to false
requires(same_as<_Ptr, void*> || same_as<_Ptr, const void*> || same_as<_Ptr, nullptr_t>)
^
/usr/include/c++/v1/__concepts/same_as.h:29:19: note: because '__same_as_impl<std::chrono::duration<long, std::ratio<3600> >, std::nullptr_t>' evaluated to false
concept same_as = __same_as_impl<_Tp, _Up> && __same_as_impl<_Up, _Tp>;
^
/usr/include/c++/v1/__concepts/same_as.h:26:26: note: because '_IsSame<duration<long, ratio<3600> >, std::nullptr_t>::value' evaluated to false
concept __same_as_impl = _IsSame<_Tp, _Up>::value;
^
2023-04-25 16:37:33 +02:00
and your C++ library has to support that (`gcc>=13.0.0` or `clang>=17` ).
On Clang-based systems with old libc++ by default pass `-stdlib=libstdc++`
or switch to GCC.
2022-08-12 20:46:36 +02:00
### CMake (recommended)
2022-08-13 01:45:14 +02:00
```Plain
2022-08-12 20:46:36 +02:00
git clone --recursive https://github.com/hyprwm/Hyprland
cd Hyprland
2023-10-14 19:52:53 +02:00
make all & & sudo make install
2022-08-12 20:46:36 +02:00
```
2023-05-03 22:31:29 +02:00
_CMake is always recommended as it's the intended way Hyprland should be installed._
2022-08-12 20:46:36 +02:00
### Meson
2022-08-13 01:45:14 +02:00
```plain
2023-04-25 16:34:10 +02:00
git clone --recursive https://github.com/hyprwm/Hyprland
cd Hyprland
2023-05-16 23:18:25 +02:00
meson setup build
2023-04-25 16:07:21 +02:00
meson compile -C build
meson install -C build --skip-subprojects
2022-08-12 20:46:36 +02:00
```
2022-08-13 01:47:48 +02:00
Refer to [Debugging ](../../Contributing-and-Debugging ) to see how to build &
debug.
2022-08-12 20:46:36 +02:00
2022-08-13 01:45:14 +02:00
## Crash on launch
2022-08-12 20:46:36 +02:00
2022-08-13 19:56:20 +02:00
See [Crashes and Bugs ](../../Crashes-and-Bugs ).
2022-08-12 20:46:36 +02:00
## Custom installation (legacy renderer, etc)
cd into the hyprland repo.
for legacy renderer:
2022-08-13 01:45:14 +02:00
```plain
2023-10-14 19:52:53 +02:00
make legacyrenderer & & sudo cp ./build/Hyprland /usr/bin & & sudo cp ./example/hyprland.desktop /usr/share/wayland-sessions
2022-08-12 20:46:36 +02:00
```
2022-10-23 16:35:39 +02:00
_please note the legacy renderer may not support some graphical features._
2022-08-12 20:46:36 +02:00
< br />< br /> Any other config: (replace \[PRESET\] with your preset, `release`
`debug` `legacyrenderer` `legacyrendererdebug` )
2022-08-13 01:45:14 +02:00
```plain
2023-10-14 19:52:53 +02:00
make [PRESET] & & sudo cp ./build/Hyprland /usr/bin & & sudo cp ./example/hyprland.desktop /usr/share/wayland-sessions
2022-08-12 20:46:36 +02:00
```
## Custom Build flags
To apply custom build flags, you'll have to ditch make.
Supported custom build flags:
2022-08-13 01:45:14 +02:00
```plain
2022-08-12 20:46:36 +02:00
NO_XWAYLAND - Removes XWayland support
2023-01-11 16:29:34 +01:00
NO_SYSTEMD - Removes systemd dependencies
2022-08-12 20:46:36 +02:00
```
How to?
Go to the root repo.
Then, configure CMake:
2022-08-13 01:45:14 +02:00
```plain
2022-08-12 20:46:36 +02:00
mkdir -p build & & cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -D< YOUR_FLAG > :STRING=true -H./ -B./build -G Ninja
```
Change `<YOUR_FLAG>` to one of the custom build flags. You **are allowed to**
use multiple at once, then add another `-D<YOUR_FLAG_2>:STRING=true`
You can of course also change the `BUILD_TYPE` to `Debug` .
Now, build:
2022-08-13 01:45:14 +02:00
```plain
2022-08-22 00:05:38 +02:00
cmake --build ./build --config Release --target all -j $(nproc)
2022-08-12 20:46:36 +02:00
```
If you configured in `Debug` , change the `--config` to `Debug` as well.
Now, of course, install manually.
2022-08-13 01:45:14 +02:00
```plain
2022-08-12 20:46:36 +02:00
sudo cp ./build/Hyprland /usr/bin & & sudo cp ./example/hyprland.desktop /usr/share/wayland-sessions
2023-01-22 08:26:42 +01:00
```