From cc1f67c2427d81f1dfe261b7f83ed9c861bbb0d6 Mon Sep 17 00:00:00 2001 From: Przegryw321 <65826466+Przegryw321@users.noreply.github.com> Date: Wed, 19 Jun 2024 23:19:28 +0200 Subject: [PATCH 01/13] Update pseudo dispatcher to feature the new argument (#687) --- pages/Configuring/Dwindle-Layout.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/Configuring/Dwindle-Layout.md b/pages/Configuring/Dwindle-Layout.md index ac2c2e4..b45eb42 100644 --- a/pages/Configuring/Dwindle-Layout.md +++ b/pages/Configuring/Dwindle-Layout.md @@ -34,7 +34,7 @@ category name: `dwindle` | dispatcher | description | params | | --- | --- | --- | -| pseudo | toggles the focused window's pseudo mode | none | +| pseudo | toggles the given window's pseudo mode | left empty / `active` for current, or `window` for a specific window | ## Layout messages From 7acc633aeee2530fc9d1c0be2223a4dc63baca86 Mon Sep 17 00:00:00 2001 From: Josua Sinaga Date: Fri, 21 Jun 2024 20:57:23 +0700 Subject: [PATCH 02/13] performance: add enabled property to decoration:blur (#690) --- pages/Configuring/Performance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/Configuring/Performance.md b/pages/Configuring/Performance.md index d255dda..182c275 100644 --- a/pages/Configuring/Performance.md +++ b/pages/Configuring/Performance.md @@ -25,7 +25,7 @@ case, remove it completely. **_Useful Optimizations_**: -- `decoration:blur = false` and `decoration:drop_shadow = false` to disable +- `decoration:blur:enabled = false` and `decoration:drop_shadow = false` to disable fancy but battery hungry effects. - `misc:vfr = true`, since it'll lower the amount of sent frames when nothing is From 33227067082bcdcad980d3033159a32f858d6837 Mon Sep 17 00:00:00 2001 From: phonetic112 <73647246+phonetic112@users.noreply.github.com> Date: Fri, 21 Jun 2024 10:58:57 -0400 Subject: [PATCH 03/13] Nvidia: update info, fix grammar (#671) --- pages/Nvidia/_index.md | 187 ++++++++++++++++++----------------------- 1 file changed, 83 insertions(+), 104 deletions(-) diff --git a/pages/Nvidia/_index.md b/pages/Nvidia/_index.md index bc2a5a6..f1dbe83 100644 --- a/pages/Nvidia/_index.md +++ b/pages/Nvidia/_index.md @@ -11,88 +11,72 @@ have had success with the instructions on this page. You can choose between the proprietary [Nvidia drivers](https://wiki.archlinux.org/title/NVIDIA) or the open source [Nouveau driver](https://wiki.archlinux.org/title/Nouveau). For the -proprietary drivers, there are 3 of them: the current closed source driver -named 'nvidia' (or 'nvidia-dkms' to use with custom linux kernels) which is +proprietary drivers, there are 3 varieties: the current closed source driver +named 'nvidia' (or 'nvidia-dkms') which is under active development; the legacy closed source drivers 'nvidia-3xxxx' for older cards which Nvidia no longer actively supports; and the 'nvidia-open' driver which is currently an alpha stage attempt to open source a part of their closed source driver for newer cards. If the proprietary drivers support your graphics card, it's generally recommended -to use them instead, as it includes significantly improved gaming performance -and power management for recent GPUs. +to use them instead, as it has significantly improved performance +and power management for newer GPUs. However, keep in mind that if the proprietary Nvidia drivers do not work properly on your computer, the Nouveau driver might work fine. This will -most likely be the case for +likely be the case for [older cards](https://wiki.archlinux.org/title/NVIDIA#Unsupported_drivers). -## How to get Hyprland to possibly run on Nvidia (Proprietary) - -Install the correct headers package for your current kernel. For the example of -the `linux-zen` kernel on Arch Linux, this package would be `linux-zen-headers`. - -Install the required nvidia packages. For most cases, this would be `nvidia-dkms` -(or `nvidia-open-dkms` for the open source ones), -and `nvidia-utils`. If you'd like to game via Wine or even natively, it would be -in your best interest to also install `lib32-nvidia-utils`. - {{< callout >}} -Even if your GPU is listed as supported by the `nvidia-open-dkms` driver, at this -point in time, it is still not up to feature parity with the current closed source drivers. -One issue with the open drivers is that it could cause problems with suspend in -general, let that be closing the lid on your laptop or by manually triggering one. -Overall, you'd be better off with `nvidia-dkms` right now, but Hyprland should work -similarly between the two. +The `nvidia-open` drivers are still not up to feature parity with the proprietary drivers. +One issue is with [suspend](https://github.com/NVIDIA/open-gpu-kernel-modules/issues/472) (e.g. closing the lid on your laptop). {{< /callout >}} -Take care to also install `egl-wayland` (`libnvidia-egl-wayland1` and -`libnvidia-egl-gbm1` on Ubuntu) if you are using the proprietary drivers. -It provides the necessary compatibility layer, instead of falling back to -zink/Vulkan. +# Proprietary drivers setup -Next up, you need to enable modeset for nvidia, this can be done via editing -the kernel paramaters for your bootloader. +You can choose between the `nvidia` or the `nvidia-dkms` package. There are pros and cons +for each, but it is generally recommended to use the `dkms` package, +as you won't have to rebuild the initramfs [manually](https://wiki.archlinux.org/title/NVIDIA#mkinitcpio) every time the kernel and drivers update, for example. +If you're using a kernel that isn't `linux` or `linux-lts`, the `dkms` package is *required*. -If you use [systemd-boot](https://wiki.archlinux.org/title/systemd-boot) -you can do this adding `nvidia_drm.modeset=1` to the end of -`/boot/loader/entries/arch.conf`. If you use -[grub](https://wiki.archlinux.org/title/GRUB) you can do this by adding -`nvidia_drm.modeset=1` to the end of `GRUB_CMDLINE_LINUX_DEFAULT=` in -`/etc/default/grub`, then running `sudo grub-mkconfig -o /boot/grub/grub.cfg`. +## Installation -For others check out -[kernel parameters](https://wiki.archlinux.org/title/Kernel_parameters) and how -to add `nvidia_drm.modeset=1` to your specific bootloader. +Install the following packages: -{{< callout >}} +1. `nvidia` or `nvidia-dkms`: The driver itself. Optionally, the open source drivers +from NVIDIA can be installed as `nvidia-open` or `nvidia-open-dkms`. +2. `nvidia-utils`: The userspace graphics drivers. You need this for running Vulkan +applications. If you'd like to use apps like Steam or Wine, install `lib32-nvidia-utils` as well. +3. `egl-wayland` (`libnvidia-egl-wayland1` and `libnvidia-egl-gbm1` on Ubuntu): This is required +in order to enable compatibility between the EGL API and the Wayland protocol. -There has been a lot of debate on which of `nvidia_drm` or `nvidia-drm` -is correct for this kernel parameter. It has been confirmed that either -of these will work. +## DRM kernel mode setting -{{< /callout >}} +Since NVIDIA does not load kernel mode setting by default, enabling it is +required to make Wayland compositors function properly. To enable it, the NVIDIA +driver modules need to be added to the initramfs. -in `/etc/mkinitcpio.conf` add `nvidia nvidia_modeset nvidia_uvm nvidia_drm` to -your `MODULES` +Edit `/etc/mkinitcpio.conf`. In the `MODULES` array, add the following module names: -For example, a clean `MODULES` line would now look like this: -```sh -MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm) +```ini +MODULES=(... nvidia nvidia_modeset nvidia_uvm nvidia_drm ...) ``` -Now, run `sudo mkinitcpio -P`. This will regenerate the initcpios for all kernels -currently installed on the system. If you see any errors here about missing -nvidia modules, it is highly probable that you forgot to install the correct -headers package. Make sure you install the headers package for your kernel and -run this command again. +Then, create and edit `/etc/modprobe.d/nvidia.conf`. Add this line to the file: -More information is available here: -[https://wiki.archlinux.org/title/NVIDIA#DRM_kernel_mode_setting](https://wiki.archlinux.org/title/NVIDIA#DRM_kernel_mode_setting) +```ini +options nvidia_drm modeset=1 fbdev=1 +``` -Export these variables in your hyprland config: +Lastly, rebuild the initramfs with `sudo mkinitcpio -P`, and reboot. + +More information is available [here](https://wiki.archlinux.org/title/NVIDIA#DRM_kernel_mode_setting). + +## Environment variables + +Add these variables to your Hyprland config: ```sh env = LIBVA_DRIVER_NAME,nvidia @@ -112,8 +96,11 @@ Do not set it in your configs. Use `cursor:no_hardware_cursors` instead. {{< /callout >}} -Lastly, you also need to install a few packages to get some apps -to function natively with Wayland. Have a look at [the Master Tutorial](https://wiki.hyprland.org/Getting-Started/Master-Tutorial/#force-apps-to-use-wayland). +## Finishing up + +Install a few packages to get some apps to function natively with Wayland for the +best compatibility and performance. +See the [the Master Tutorial](https://wiki.hyprland.org/Getting-Started/Master-Tutorial/#force-apps-to-use-wayland). Reboot your computer. @@ -123,35 +110,27 @@ It _should_ work now. ## VA-API hardware video acceleration -We can achieve VA-API acceleration on Nvidia and Wayland with the help of the +Hardware video acceleration on Nvidia and Wayland is possible with the [nvidia-vaapi-driver](https://github.com/elFarto/nvidia-vaapi-driver). This may -solve certain issues in Electron apps, and it will also allow for GPU decoding -for videos on the web, with benefits including higher performance video playback -and also higher power efficiency during video playback. +solve specific issues in Electron apps. -Its install instructions are available in the README, however, a quick guide will +The install instructions are available in the README, however, a quick guide will be given here: -- Install the package. On Arch, this is `libva-nvidia-driver` in the official +1. Install the package. On Arch, this is `libva-nvidia-driver` in the official repos. -- export this variable in your hyprland config: - ```sh - env = NVD_BACKEND,direct - ``` - see [here](https://github.com/elFarto/nvidia-vaapi-driver?tab=readme-ov-file#upstream-regressions) - for more information on this environment variable. +2. Add this variable to your hyprland config: + ```sh + env = NVD_BACKEND,direct + ``` -- Enable the services `nvidia-suspend.service`, `nvidia-hibernate.service` and -`nvidia-resume.service` + See [here](https://github.com/elFarto/nvidia-vaapi-driver?tab=readme-ov-file#upstream-regressions) + for more information on this environment variable. -- Add `nvidia.NVreg_PreserveVideoMemoryAllocations=1` to your kernel parameters if -you don't have it already. This will solve issues with corrupted desktop / videos -after waking. +You can check the README to get it working for Firefox. -- You can check the README to get it working for Firefox. - -## Other issues to look out for +## Other issues ### Regarding environment variables @@ -163,17 +142,17 @@ working in Zoom, first try running them in Native Wayland (more details below). Otherwise, remove or comment the line `env = __GLX_VENDOR_LIBRARY_NAME,nvidia`. -### How to possibly get multi-monitor working with hybrid graphics +### Multi-monitor with hybrid graphics On a hybrid graphics device (a laptop with both an Intel and an Nvidia GPU), you will need to remove the `optimus-manager` package if installed (disabling the service does not work). You also need to change your BIOS settings from hybrid graphics to discrete graphics. -### Fixing flickering in Electron / CEF apps +### Flickering in Electron / CEF apps This flickering is likely caused by these apps running in XWayland. -To fix the flickering, try running the apps with native Wayland instead. +To fix the flickering, try running the apps in native Wayland instead. For most Electron apps, you should be fine just adding this environment variable to your config: @@ -182,7 +161,7 @@ environment variable to your config: env = ELECTRON_OZONE_PLATFORM_HINT,auto ``` -This has been confirmed to work on Vesktop, VSCodium and Obsidian and will probably +This has been confirmed to work on Vesktop, VSCodium, Obsidian and will probably work on other Electron apps as well. For other apps, including CEF apps, you will need to launch them with these flags: @@ -212,31 +191,31 @@ you will lose hardware acceleration for whichever app is run with these flags. {{< /callout >}} -With NixOS, you can also try setting the `NIXOS_OZONE_WL` environment variable +For NixOS, you can set the `NIXOS_OZONE_WL` environment variable to `1`, which should automatically configure Electron / CEF apps to run with native Wayland for you. While it is best to have as many things as possible running natively in -Wayland, the root cause of the flickering will likely be solved -in the 555 series of Nvidia driver updates. +Wayland, the flickering will likely be solved in the 555 series of Nvidia driver updates. -### Fixing flickering in XWayland games specifically +### Flickering in XWayland games -The symptoms of this widespread issue include XWayland games flickering in -a way which makes them unplayable. Repeated frames, random presenting of -black frames, and overall weirdness. This is a result of a multitude of -issues which will be solved soon via Nvidia driver updates, but for now -you have a few possible fixes: +XWayland games may flicker or present frames out-of-order in a way which makes them unplayable. +This is due to the lack of explicit synchronization in the driver. -- Install xorg-xwayland-git (AUR). This git package includes this [PR](https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/967) - which implements the "Explicit Sync" protocol. - This will fix it in some, if not all cases. However if it doesn't, - try the next solution. Once the 555 series of drivers are released, this - should completely fix the issue. +There are a few fixes: -- Install older nvidia drivers which do not exhibit this problem. The +1. Install the latest versions of `xorg-xwayland` and `wayland-protocols`. + Ensure `xorg-xwayland` is at least version 24.1 and `wayland-protocols` is at least version 1.34. + Both versions include the explicit sync patches. + +2. Install the older Nvidia drivers which do not exhibit this issue. The last ones which would work will be the 535xx series of drivers. These - can be installed easily on Arch via [these AUR packages](https://aur.archlinux.org/packages?O=0&K=535xx) + can be installed on Arch via [these AUR packages](https://aur.archlinux.org/packages?O=0&K=535xx) + +3. Install the 555 beta driver. This version contains official support for explicit sync, but is still in beta. + These can be installed from the + [AUR](https://aur.archlinux.org/packages?O=0&SeB=nd&K=nvidia+beta&outdated=off&SB=p&SO=d&PP=50&submit=Go). More info about explicit sync is available [on this blog](https://planet.kde.org/xavers-blog-2024-04-05-explicit-sync/). @@ -259,12 +238,12 @@ Reboot your computer and it should be working. If it does not, try: -- lowering your monitor's refresh rate, as this can stop the flickering - altogether -- using the [Nouveau driver](https://wiki.archlinux.org/title/Nouveau) as - mentioned above +1. Lowering your monitor's refresh rate: This can stop the flickering + altogether. +2. Using the [Nouveau driver](https://wiki.archlinux.org/title/Nouveau) as + mentioned above. -### Fixing suspend/wakeup issues +### Suspend/wakeup issues Enable the services `nvidia-suspend.service`, `nvidia-hibernate.service` and `nvidia-resume.service`, they will be started by systemd when needed. @@ -293,8 +272,8 @@ hardware.nvidia.powerManagement.enable = true; hardware.nvidia.open = false; ``` -## Still having issues? +# Still having issues? If you're still having issues after following this guide, you can join the -[Hyprland Discord](https://discord.gg/hypr) and ask for help in the -`#hyprland-nvidia` channel. Hopefully someone will be able to help you out. +[Hyprland Discord](https://discord.gg/hQ9XvMUjjr) and ask for help in the +`#hyprland-nvidia` channel. From 943133522fab155c2445d38c9d8d648b9489ffcf Mon Sep 17 00:00:00 2001 From: fuggy <45698918+nonetrix@users.noreply.github.com> Date: Fri, 21 Jun 2024 10:01:01 -0500 Subject: [PATCH 04/13] Master tutorial: document `NIXOS_OZONE_WL=1` (#693) Documents nifty NixOS specific environment variable that allows Electron apps to run under Wayland Co-authored-by: Mihai Fufezan --- pages/Getting Started/Master-Tutorial.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pages/Getting Started/Master-Tutorial.md b/pages/Getting Started/Master-Tutorial.md index c8949ce..1ab6600 100644 --- a/pages/Getting Started/Master-Tutorial.md +++ b/pages/Getting Started/Master-Tutorial.md @@ -112,7 +112,8 @@ A lot of apps will use Wayland by default. Chromium (and other browsers based on it or electron) don't. You need to pass `--enable-features=UseOzonePlatform --ozone-platform=wayland` to them or use `.conf` files where possible. Chromium-based browsers also should have a toggle -in `chrome://flags`. Search for _"ozone"_ and select Wayland. +in `chrome://flags`. Search for _"ozone"_ and select Wayland. If you are on NixOS +you can also set the environment variable `NIXOS_OZONE_WL=1` in your configuration. For most electron apps, you should put the above in `~/.config/electron-flags.conf`. VSCode is known to not work with that though. From 1b87a52c265b73748366f060cc03120f2ee63708 Mon Sep 17 00:00:00 2001 From: Jost Alemann <58050402+ddogfoodd@users.noreply.github.com> Date: Sat, 22 Jun 2024 20:10:09 +0200 Subject: [PATCH 05/13] App Launchers: update anyrun github link (#695) --- pages/Useful Utilities/App-Launchers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/Useful Utilities/App-Launchers.md b/pages/Useful Utilities/App-Launchers.md index 6c9a2ac..dfb22fd 100644 --- a/pages/Useful Utilities/App-Launchers.md +++ b/pages/Useful Utilities/App-Launchers.md @@ -42,7 +42,7 @@ For the config you can check out [DistroTube's Configuring Emacs](https://gitlab Anyrun is a Wayland-native krunner-like runner, made with customizability in mind. It is modular and extensible through plugins. It can be used as an app launcher with its Applications Plugin. -[GitHub](https://github.com/Kirottu/anyrun) +[GitHub](https://github.com/anyrun-org/anyrun) ## Walker From 3102f765c81f5c4f6d7f81a973a9482eee499091 Mon Sep 17 00:00:00 2001 From: Alexander <51529891+Truenya@users.noreply.github.com> Date: Sun, 23 Jun 2024 00:52:55 +0300 Subject: [PATCH 06/13] feat: previous workspace per monitor (#689) --- pages/Configuring/Dispatchers.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pages/Configuring/Dispatchers.md b/pages/Configuring/Dispatchers.md index 56266ba..71606c8 100644 --- a/pages/Configuring/Dispatchers.md +++ b/pages/Configuring/Dispatchers.md @@ -118,7 +118,7 @@ set. ## Workspaces -You have eight choices: +You have nine choices: - ID: e.g. `1`, `2`, or `3` @@ -132,7 +132,7 @@ You have eight choices: - Name: e.g. `name:Web`, `name:Anime` or `name:Better anime` -- Previous workspace: `previous` +- Previous workspace: `previous`, or `previous_per_monitor` - First available empty workspace: `empty`, suffix with `m` to only search on monitor. and/or `n` to make it the *next* available empty workspace. e.g. `emptynm` From f6aeef696e2946eac7d7d9c816a35d84ed18bdf6 Mon Sep 17 00:00:00 2001 From: Mihai Fufezan Date: Sun, 23 Jun 2024 01:46:01 +0300 Subject: [PATCH 07/13] Nix: add Plugins, Contributing and Debugging, update files --- pages/Nix/Contributing and Debugging.md | 53 +++++++++++ pages/Nix/Hyprland on Home Manager.md | 84 ++++++++-------- pages/Nix/Hyprland on NixOS.md | 17 ++-- pages/Nix/Hyprland on other distros.md | 3 +- pages/Nix/Options & Overrides.md | 20 ++-- pages/Nix/Plugins.md | 121 ++++++++++++++++++++++++ pages/Nix/_index.md | 13 +-- 7 files changed, 244 insertions(+), 67 deletions(-) create mode 100644 pages/Nix/Contributing and Debugging.md create mode 100644 pages/Nix/Plugins.md diff --git a/pages/Nix/Contributing and Debugging.md b/pages/Nix/Contributing and Debugging.md new file mode 100644 index 0000000..3a162fb --- /dev/null +++ b/pages/Nix/Contributing and Debugging.md @@ -0,0 +1,53 @@ +--- +title: Contributing and Debugging +--- + +Everything needed to build and debug Hyprland is included inside the provided +`devShell`. + +To use it in the cloned repo, simply run `nix develop`. + +## Build in debug mode + +A debug build is already provided through +`hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland-debug`. + +## Bisecting an issue + +Follow the +[Bisecting an issue](https://wiki.hyprland.org/Crashes-and-Bugs/#bisecting-an-issue) +guide. To build, run `nix build '.?submodules=1'`. + +To view logs, pass the `--print-build-logs` (`-L`) flag. + +To keep a failed build directory, pass the `--keep-failed` flag. + +## Building the Wayland stack with ASan + +Run `nix develop` first, then follow the +[Building with ASan](https://wiki.hyprland.org/Crashes-and-Bugs/#bisecting-an-issue) +guide. + +## Manual building + +Nix works differently than other build systems, so it has its own abstractions +over popular build systems such as Meson, CMake and Ninja. + +In order to manually build Hyprland, you can run the following commands, while +in the `nix develop` shell. + +For CMake: + +```bash +$ cmakeConfigurePhase # to run the CMake configure phase +$ ninjaBuildPhase # to run the Ninja build phase +$ ninjaInstallPhase # to run the Ninja install phase +``` + +For Meson: + +```bash +$ mesonConfigurePhase # to run the Meson configure phase +$ ninjaBuildPhase # to run the Ninja build phase +$ mesonInstallPhase # to run the Meson install phase +``` diff --git a/pages/Nix/Hyprland on Home Manager.md b/pages/Nix/Hyprland on Home Manager.md index c973cfb..c73a087 100644 --- a/pages/Nix/Hyprland on Home Manager.md +++ b/pages/Nix/Hyprland on Home Manager.md @@ -8,9 +8,11 @@ For a list of available options, check the {{< callout >}} - _(Required) NixOS Module_: enables critical components needed to run Hyprland - properly -- _(Optional) Home-manager module_: lets you declaratively configure Hyprland - {{< /callout >}} + properly. Without this, you may have issues with XDG Portals, or missing + session files in your Display Manager. +- _(Optional) Home Manager module_: lets you declaratively configure Hyprland + +{{< /callout >}} ## Installation @@ -18,9 +20,6 @@ For a list of available options, check the {{< tab "Home Manager" >}} -Home Manager has options for Hyprland without needing to import the Flake -module. - ```nix { wayland.windowManager.hyprland.enable = true; @@ -66,7 +65,9 @@ Don't forget to replace `user@hostname` with your username and hostname! modules = [ hyprland.homeManagerModules.default - {wayland.windowManager.hyprland.enable = true;} + { + wayland.windowManager.hyprland.enable = true; + } # ... ]; }; @@ -107,7 +108,7 @@ in { wayland.windowManager.hyprland = { enable = true; - package = hyprland-flake.packages.${pkgs.system}.hyprland; + package = hyprland-flake.packages.${pkgs.stdenv.hostPlatform.system}.hyprland; } } ``` @@ -119,11 +120,11 @@ in { ## Usage Once the module is enabled, you can use it to declaratively configure Hyprland. -Here is an example config, made to work with either the upstream Home Manager -module, or the flake-based Home Manager module. +Here is an example config: ```nix # home.nix + { wayland.windowManager.hyprland.settings = { "$mod" = "SUPER"; @@ -157,16 +158,20 @@ module, or the flake-based Home Manager module. Hyprland plugins can be added through the `plugins` option: ```nix -wayland.windowManager.hyprland.plugins = [ - inputs.hyprland-plugins.packages.${pkgs.system}.hyprbars - "/absolute/path/to/plugin.so" -]; +{ + wayland.windowManager.hyprland.plugins = [ + inputs.hyprland-plugins.packages.${pkgs.stdenv.hostPlatform.system}.hyprbars + "/absolute/path/to/plugin.so" + ]; +} ``` For examples on how to build Hyprland plugins using Nix, see the -[official plugins](https://github.com/hyprwm/hyprland-plugins). +[Nix/Plugins](../Plugins) page. -## Fixing problems with themes +## FAQ + +### Fixing problems with themes If your themes for mouse cursors, icons or windows don't load correctly, try setting them with `home.pointerCursor` and `gtk.theme`, which enable a bunch of @@ -175,34 +180,37 @@ compatibility options that should make the themes load in all situations. Example configuration: ```nix -home.pointerCursor = { - gtk.enable = true; - # x11.enable = true; - package = pkgs.bibata-cursors; - name = "Bibata-Modern-Classic"; - size = 16; -}; - -gtk = { - enable = true; - theme = { - package = pkgs.flat-remix-gtk; - name = "Flat-Remix-GTK-Grey-Darkest"; +{ + home.pointerCursor = { + gtk.enable = true; + # x11.enable = true; + package = pkgs.bibata-cursors; + name = "Bibata-Modern-Classic"; + size = 16; }; - iconTheme = { - package = pkgs.gnome.adwaita-icon-theme; - name = "Adwaita"; - }; + gtk = { + enable = true; - font = { - name = "Sans"; - size = 11; + theme = { + package = pkgs.flat-remix-gtk; + name = "Flat-Remix-GTK-Grey-Darkest"; + }; + + iconTheme = { + package = pkgs.gnome.adwaita-icon-theme; + name = "Adwaita"; + }; + + font = { + name = "Sans"; + size = 11; + }; }; -}; +} ``` -## Programs don't work in systemd services, but do on the terminal +### Programs don't work in systemd services, but do on the terminal This problem is related to systemd not importing the environment by default. It will not have knowledge of `PATH`, so it cannot run the commands in the diff --git a/pages/Nix/Hyprland on NixOS.md b/pages/Nix/Hyprland on NixOS.md index b6407fc..93052de 100644 --- a/pages/Nix/Hyprland on NixOS.md +++ b/pages/Nix/Hyprland on NixOS.md @@ -3,7 +3,7 @@ title: Hyprland on NixOS --- The NixOS module enables critical components needed to run Hyprland properly, -such as: polkit, +such as polkit, [xdg-desktop-portal-hyprland](https://github.com/hyprwm/xdg-desktop-portal-hyprland), graphics drivers, fonts, dconf, xwayland, and adding a proper Desktop Entry to your Display Manager. @@ -14,8 +14,9 @@ Make sure to check out the options of the {{< callout >}} - _(Required) NixOS Module_: enables critical components needed to run Hyprland - properly -- _(Optional) Home-manager module_: lets you declaratively configure Hyprland + properly. Without this, you may have issues with XDG Portals, or missing + session files in your Display Manager. +- _(Optional) Home Manager Module_: lets you declaratively configure Hyprland {{< /callout >}} @@ -26,12 +27,12 @@ Make sure to check out the options of the ```nix # configuration.nix -{pkgs, ...}: { +{ programs.hyprland.enable = true; } ``` -This will use the Hyprland version that Nixpkgs has. +This will use the Hyprland version included in the Nixpkgs release you're using. {{< /tab >}} @@ -69,7 +70,7 @@ this: {inputs, pkgs, ...}: { programs.hyprland = { enable = true; - package = inputs.hyprland.packages.${pkgs.system}.hyprland; + package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland; }; } ``` @@ -77,7 +78,7 @@ this: Don't forget to change the `HOSTNAME` to your actual hostname! If you start experiencing lag and FPS drops in games or programs like Blender on -**stable** NixOS when using the Hyprland flake, it most likely is a `mesa` +**stable** NixOS when using the Hyprland flake, it is most likely a `mesa` version mismatch between your system and Hyprland. You can fix this issue by using `mesa` from Hyprland's `nixpkgs` input: @@ -126,7 +127,7 @@ have to compile Hyprland yourself. in { programs.hyprland = { enable = true; - package = hyprland.packages.${pkgs.system}.hyprland; + package = hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland; }; } ``` diff --git a/pages/Nix/Hyprland on other distros.md b/pages/Nix/Hyprland on other distros.md index 47ff797..dba61cc 100644 --- a/pages/Nix/Hyprland on other distros.md +++ b/pages/Nix/Hyprland on other distros.md @@ -6,7 +6,8 @@ If you use Nix on distros other than NixOS, you can still use Hyprland. The best option would be through [Home Manager](../Hyprland-on-Home-Manager). -However, if Home Manager is not for you, you can use it as a normal package. +However, if Home Manager is not for you, Hyprland can be installed as a normal +package. First, [enable flakes](https://nixos.wiki/wiki/Flakes#Enable_flakes). Once you have flakes working, install Hyprland through `nix profile`: diff --git a/pages/Nix/Options & Overrides.md b/pages/Nix/Options & Overrides.md index 6f81348..a108f8e 100644 --- a/pages/Nix/Options & Overrides.md +++ b/pages/Nix/Options & Overrides.md @@ -2,8 +2,8 @@ title: Options & Overrides --- -You can override the package through `.override` or `.overrideAttrs`. This is -easily achievable on [NixOS](../Hyprland-on-NixOS) or +You can override the package through the `.override` or `.overrideAttrs` +mechanisms. This is easily achievable on [NixOS](../Hyprland-on-NixOS) or [Home Manager](../Hyprland-on-Home-Manager). ## Package options @@ -14,7 +14,7 @@ be changed by setting the appropriate option to `true`/`false`. ### Package ```nix -(pkgs.hyprland.override { # or inputs.hyprland.packages.${pkgs.system}.hyprland +(pkgs.hyprland.override { # or inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland enableXWayland = true; # whether to enable XWayland legacyRenderer = false; # whether to use the legacy renderer (for old GPUs) withSystemd = true; # whether to build with systemd support @@ -24,10 +24,12 @@ be changed by setting the appropriate option to `true`/`false`. ### NixOS & HM modules ```nix -programs.hyprland = { # or wayland.windowManager.hyprland - enable = true; - xwayland.enable = true; -}; +{ + programs.hyprland = { # or wayland.windowManager.hyprland + enable = true; + xwayland.enable = true; + }; +} ``` ## Options descriptions @@ -37,10 +39,6 @@ programs.hyprland = { # or wayland.windowManager.hyprland XWayland is enabled by default in the Nix package. You can disable it either in the package itself, or through the module options. -### XWayland HiDPI - -See [XWayland](../../Configuring/XWayland). - ## Using Nix repl If you're using Nix (and not NixOS or Home Manager) and you want to override, diff --git a/pages/Nix/Plugins.md b/pages/Nix/Plugins.md new file mode 100644 index 0000000..bfc947c --- /dev/null +++ b/pages/Nix/Plugins.md @@ -0,0 +1,121 @@ +--- +title: Plugins +--- + +Hyprland plugins are managed differently on Nix than on other distros. The most +notable change is that `hyprpm` is unsupported, but we have our own way of +building plugins. + +## Using plugins from Nixpkgs + +In Nixpkgs, there are Hyprland plugins packaged for the Hyprland version in +Nixpkgs. You can use them like this: + +```nix +{pkgs, ...}: { + wayland.windowManager.hyprland.plugins = [ + pkgs.hyprlandPlugins. + ]; +} +``` + +You can find which plugins are included using +`nix search nixpkgs#hyprlandPlugins`. + +## hyprland-plugins + +Official plugins made/maintained by vaxry. + +To use these plugins, it is recommended that you are already using the Hyprland +flake, and **not** the Nixpkgs version. + +First, add the flake to your flake inputs: + +```nix +{ + inputs = { + hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1"; + + hyprland-plugins = { + url = "github:hyprwm/hyprland-plugins"; + inputs.hyprland.follows = "hyprland"; + }; + + # ... + } +} +``` + +The `inputs.hyprland.follows` line makes hyprland-plugins use the exact Hyprland +revision you have locked. This means there aren't any version mismatches, as +long as you update both inputs at once. + +The next step is adding the plugins to Hyprland: + +```nix +{inputs, pkgs, ...}: { + wayland.windowManager.hyprland = { + enable = true; + + plugins = [ + inputs.hyprland-plugins.packages.${pkgs.stdenv.hostPlatform.system}. + ]; + }; +} +``` + +## Building plugins with Nix + +The plugins inside Nixpkgs, as well as the ones in `hyprland-plugins`, are built +using a general function, `mkHyprlandPlugin`. Any plugin can be made to work +with it. The general usage is presented below, exemplified through hy3's +derivation: + +```nix +{pkgs, ...}: { + hy3 = pkgs.callPackage ({ + lib, + fetchFromGitHub, + cmake, + hyprland, + hyprlandPlugins, + }: + hyprlandPlugins.mkHyprlandPlugin pkgs.hyprland { + pluginName = "hy3"; + version = "0.39.1"; + + src = fetchFromGitHub { + owner = "outfoxxed"; + repo = "hy3"; + rev = "hl0.39.1"; + hash = "sha256-PqVld+oFziSt7VZTNBomPyboaMEAIkerPQFwNJL/Wjw="; + }; + + # any nativeBuildInputs required for the plugin + nativeBuildInputs = [cmake]; + + # set any buildInputs that are not already included in Hyprland + # by default, Hyprland and its dependencies are included + buildInputs = []; + + meta = { + homepage = "https://github.com/outfoxxed/hy3"; + description = "Hyprland plugin for an i3 / sway like manual tiling layout"; + license = lib.licenses.gpl3; + platforms = lib.platforms.linux; + maintainers = with lib.maintainers; [aacebedo]; + }; + }); +} +``` + +In a similar manner to `stdenv.mkDerivation`, `mkHyprlandPlugin` takes an +attrset with mostly the same options as `mkDerivation`, as it is essentially a +wrapper around it. + +The exception is that it also takes a `hyprland` package before the attrset, in +case you want to build with a different package than the one in Nixpkgs. + +This is not always the best way to build for a different version, and it is +recommended that you use an overlay to apply your desired Hyprland package in +Nixpkgs instead. diff --git a/pages/Nix/_index.md b/pages/Nix/_index.md index 0889dda..cd248c3 100644 --- a/pages/Nix/_index.md +++ b/pages/Nix/_index.md @@ -8,27 +8,22 @@ To install Hyprland on NixOS, we provide a NixOS and a Home Manager module. {{< callout title=Note >}} - _(Required) NixOS Module_: enables critical components needed to run Hyprland - properly -- _(Optional) Home-manager module_: lets you declaratively configure Hyprland + properly. Without this, you may have issues with XDG Portals, or missing + session files in your Display Manager. +- _(Optional) Home Manager Module_: lets you declaratively configure Hyprland {{< /callout >}} ## NixOS module -The module is now upstreamed into Nixpkgs, which means all you need in your -configuration is: - ```nix -{config, pkgs, ...}: { +{ programs.hyprland.enable = true; # Optional, hint electron apps to use wayland: # environment.sessionVariables.NIXOS_OZONE_WL = "1"; } ``` -Note that the command to run hyprland is `Hyprland` (with a capital `H`) and not -`hyprland`. - For more options, see [module options](https://search.nixos.org/options?channel=unstable&from=0&size=50&sort=relevance&type=packages&query=hyprland). From d59d2c18f3d3371582f7591a8029ba0dd50d36f6 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Tue, 25 Jun 2024 13:54:04 +0200 Subject: [PATCH 08/13] selector: add 0.41.2 --- pages/version-selector.md | 1 + 1 file changed, 1 insertion(+) diff --git a/pages/version-selector.md b/pages/version-selector.md index b11f456..9740187 100644 --- a/pages/version-selector.md +++ b/pages/version-selector.md @@ -6,6 +6,7 @@ weight: 1 Select your preferred wiki version below: - [Latest Git](https://wiki.hyprland.org/) +- [v0.41.2](https://wiki.hyprland.org/0.41.2/) - [v0.41.1](https://wiki.hyprland.org/0.41.1/) - [v0.41.0](https://wiki.hyprland.org/0.41.0/) - [v0.40.0](https://wiki.hyprland.org/0.40.0/) From 13ea15aa9c8472367af4816f52babb8b76a36e62 Mon Sep 17 00:00:00 2001 From: Leon <99900077+leon-erd@users.noreply.github.com> Date: Tue, 25 Jun 2024 21:09:07 +0200 Subject: [PATCH 09/13] Using hyprctl: clarify usage of `hyprctl setprop` and `exec` dispatcher with dynamic rules (#696) --- pages/Configuring/Dispatchers.md | 5 ++++- pages/Configuring/Using-hyprctl.md | 33 ++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/pages/Configuring/Dispatchers.md b/pages/Configuring/Dispatchers.md index 71606c8..c4e1d7f 100644 --- a/pages/Configuring/Dispatchers.md +++ b/pages/Configuring/Dispatchers.md @@ -180,6 +180,9 @@ bind = SUPER, C, movetoworkspace, special The `exec` dispatcher supports adding rules. Please note some windows might work better, some worse. It records the PID of the spawned process and uses that. For example, if your process forks and then the fork opens a window, this will not work. +Rules will only be applied once. This means dynamic rules will be overridden as soon as a +property of the window changes (e.g. switching focus). To make dynamic rules stick around +use `hyprctl setprop` (see [Using hyprctl](./Using-hyprctl)). The syntax is: @@ -190,5 +193,5 @@ bind = mod, key, exec, [rules...] command For example: ``` -bind = SUPER, E, exec, [workspace 2 silent;float;noanim] kitty +bind = SUPER, E, exec, [workspace 2 silent; float; move 0 0] kitty ``` diff --git a/pages/Configuring/Using-hyprctl.md b/pages/Configuring/Using-hyprctl.md index ec72f9c..e427523 100644 --- a/pages/Configuring/Using-hyprctl.md +++ b/pages/Configuring/Using-hyprctl.md @@ -198,6 +198,38 @@ Sets a window prop. Can be locked by adding `lock` at the end. If `lock` is not added, will be unlocked. Locking means a dynamic windowrule _cannot_ override this setting. +Usage: +```sh +hyprctl setprop [lock] +``` + +Regex supports different modes. The supported modes are: +```ini +class - class +title - title +initialclass - initialClass +initialtitle - initialTitle +active - active window +address - address prefixed with 0x +pid - process ID +floating - first floating window on the current workspace +tiled - first tiled window on the current workspace +``` + +If no mode is specified `class` is used by default. + +{{< callout type=info >}} + +To get more information about a window, you can use `hyprctl clients`. + +{{< /callout >}} + +{{< callout type=warning >}} + +Please beware that `hyprctl clients` will display the fields as **initialClass** and **initialTitle** while the regex mode uses `initialclass` and `initialtitle`. + +{{< /callout >}} + Prop List: | prop | comment | | --- | --- | @@ -228,6 +260,7 @@ Prop List: | activebordercolor | gradient, -1 means not set | | inactivebordercolor | gradient, -1 means not set | +For example: ```sh hyprctl setprop address:0x13371337 forcenoanims 1 lock # with locking hyprctl setprop address:0x13371337 nomaxsize 0 # without locking From bc3c0663218213b14ba7a6f7ec6cb3da761c3ead Mon Sep 17 00:00:00 2001 From: Leon Date: Tue, 25 Jun 2024 18:43:18 +0200 Subject: [PATCH 10/13] Nix/Contributing: fix typo --- pages/Nix/Contributing and Debugging.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/Nix/Contributing and Debugging.md b/pages/Nix/Contributing and Debugging.md index 3a162fb..2c9f36e 100644 --- a/pages/Nix/Contributing and Debugging.md +++ b/pages/Nix/Contributing and Debugging.md @@ -25,7 +25,7 @@ To keep a failed build directory, pass the `--keep-failed` flag. ## Building the Wayland stack with ASan Run `nix develop` first, then follow the -[Building with ASan](https://wiki.hyprland.org/Crashes-and-Bugs/#bisecting-an-issue) +[Building with ASan](https://wiki.hyprland.org/Crashes-and-Bugs/#building-the-wayland-stack-with-asan) guide. ## Manual building From 33bd679037ce9bba7a11cd202053f671a4d0414c Mon Sep 17 00:00:00 2001 From: fuggy <45698918+nonetrix@users.noreply.github.com> Date: Tue, 25 Jun 2024 14:17:51 -0500 Subject: [PATCH 11/13] Status bars: add short intro what Eww is (#697) Co-authored-by: Mihai Fufezan --- pages/Useful Utilities/Status-Bars.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pages/Useful Utilities/Status-Bars.md b/pages/Useful Utilities/Status-Bars.md index ec63189..47636fc 100644 --- a/pages/Useful Utilities/Status-Bars.md +++ b/pages/Useful Utilities/Status-Bars.md @@ -77,6 +77,10 @@ configuration: ## Eww +[Eww](https://github.com/elkowar/eww) (ElKowar's Wacky Widgets) is a widget system made in Rust, which lets you +create your own widgets similarly to how you can in AwesomeWM. The key difference +is that it is independent of your window manager/compositor. + In order to use [Eww](https://github.com/elkowar/eww), you first have to install it, either using your distro's package manager, by searching `eww-wayland`, or by manually compiling. In the latter case, you can follow the From 5d8d145f30bf260712fbefb85943ddda1ef75eeb Mon Sep 17 00:00:00 2001 From: Leon <99900077+leon-erd@users.noreply.github.com> Date: Tue, 25 Jun 2024 22:36:08 +0200 Subject: [PATCH 12/13] Dispatchers: fix typo --- pages/Configuring/Dispatchers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/Configuring/Dispatchers.md b/pages/Configuring/Dispatchers.md index c4e1d7f..798d5d4 100644 --- a/pages/Configuring/Dispatchers.md +++ b/pages/Configuring/Dispatchers.md @@ -182,7 +182,7 @@ better, some worse. It records the PID of the spawned process and uses that. For your process forks and then the fork opens a window, this will not work. Rules will only be applied once. This means dynamic rules will be overridden as soon as a property of the window changes (e.g. switching focus). To make dynamic rules stick around -use `hyprctl setprop` (see [Using hyprctl](./Using-hyprctl)). +use `hyprctl setprop` (see [Using hyprctl](../Using-hyprctl)). The syntax is: From 1e1848b6844ccd8154e0d49ac3e70f97e99240ab Mon Sep 17 00:00:00 2001 From: Dylen Brandon Rivera Date: Wed, 26 Jun 2024 17:16:50 -0400 Subject: [PATCH 13/13] Master Tutorial: reword foreword (#700) --- pages/Getting Started/Master-Tutorial.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/Getting Started/Master-Tutorial.md b/pages/Getting Started/Master-Tutorial.md index 1ab6600..9e8d71c 100644 --- a/pages/Getting Started/Master-Tutorial.md +++ b/pages/Getting Started/Master-Tutorial.md @@ -6,7 +6,7 @@ title: Master tutorial If you are coming to Hyprland for the first time, this is the main tutorial to read. -Due to a lot of people doing stupid stuff, this tutorial will cover literally +This tutorial will cover literally everything you need to just get things going. It does link to other pages where necessary.