Compare commits

...

8 Commits

Author SHA1 Message Date
Simon Vedaa 77c96e887b
Merge c8ce6fd9a9 into f6aeef696e 2024-06-23 23:13:57 +03:00
Mihai Fufezan f6aeef696e
Nix: add Plugins, Contributing and Debugging, update files 2024-06-23 01:46:01 +03:00
Alexander 3102f765c8
feat: previous workspace per monitor (#689) 2024-06-22 23:52:55 +02:00
Jost Alemann 1b87a52c26
App Launchers: update anyrun github link (#695) 2024-06-22 21:10:09 +03:00
fuggy 943133522f
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 <mihai@fufexan.net>
2024-06-21 18:01:01 +03:00
phonetic112 3322706708
Nvidia: update info, fix grammar (#671) 2024-06-21 17:58:57 +03:00
Josua Sinaga 7acc633aee
performance: add enabled property to decoration:blur (#690) 2024-06-21 15:57:23 +02:00
Simon Vedaa c8ce6fd9a9
Simplify keybind generation code for workspaces
Change workspace keybind generation to use keycodes instead of 
numbers. This makes the code snippet work with different layouts.
Removed redundant code.
2024-05-07 20:30:08 +02:00
12 changed files with 336 additions and 182 deletions

View File

@ -118,7 +118,7 @@ set.
## Workspaces ## Workspaces
You have eight choices: You have nine choices:
- ID: e.g. `1`, `2`, or `3` - 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` - 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` - 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`

View File

@ -25,7 +25,7 @@ case, remove it completely.
**_Useful Optimizations_**: **_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. fancy but battery hungry effects.
- `misc:vfr = true`, since it'll lower the amount of sent frames when nothing is - `misc:vfr = true`, since it'll lower the amount of sent frames when nothing is

View File

@ -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 it or electron) don't. You need to pass
`--enable-features=UseOzonePlatform --ozone-platform=wayland` to them or use `--enable-features=UseOzonePlatform --ozone-platform=wayland` to them or use
`.conf` files where possible. Chromium-based browsers also should have a toggle `.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 For most electron apps, you should put the above in
`~/.config/electron-flags.conf`. VSCode is known to not work with that though. `~/.config/electron-flags.conf`. VSCode is known to not work with that though.

View File

@ -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
```

View File

@ -8,9 +8,11 @@ For a list of available options, check the
{{< callout >}} {{< callout >}}
- _(Required) NixOS Module_: enables critical components needed to run Hyprland - _(Required) NixOS Module_: enables critical components needed to run Hyprland
properly properly. Without this, you may have issues with XDG Portals, or missing
- _(Optional) Home-manager module_: lets you declaratively configure Hyprland session files in your Display Manager.
{{< /callout >}} - _(Optional) Home Manager module_: lets you declaratively configure Hyprland
{{< /callout >}}
## Installation ## Installation
@ -18,9 +20,6 @@ For a list of available options, check the
{{< tab "Home Manager" >}} {{< tab "Home Manager" >}}
Home Manager has options for Hyprland without needing to import the Flake
module.
```nix ```nix
{ {
wayland.windowManager.hyprland.enable = true; wayland.windowManager.hyprland.enable = true;
@ -66,7 +65,9 @@ Don't forget to replace `user@hostname` with your username and hostname!
modules = [ modules = [
hyprland.homeManagerModules.default hyprland.homeManagerModules.default
{wayland.windowManager.hyprland.enable = true;} {
wayland.windowManager.hyprland.enable = true;
}
# ... # ...
]; ];
}; };
@ -107,7 +108,7 @@ in {
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
enable = true; enable = true;
package = hyprland-flake.packages.${pkgs.system}.hyprland; package = hyprland-flake.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
} }
} }
``` ```
@ -119,11 +120,11 @@ in {
## Usage ## Usage
Once the module is enabled, you can use it to declaratively configure Hyprland. 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 Here is an example config:
module, or the flake-based Home Manager module.
```nix ```nix
# home.nix # home.nix
{ {
wayland.windowManager.hyprland.settings = { wayland.windowManager.hyprland.settings = {
"$mod" = "SUPER"; "$mod" = "SUPER";
@ -137,13 +138,10 @@ module, or the flake-based Home Manager module.
# binds $mod + [shift +] {1..10} to [move to] workspace {1..10} # binds $mod + [shift +] {1..10} to [move to] workspace {1..10}
builtins.concatLists (builtins.genList ( builtins.concatLists (builtins.genList (
x: let x: let
ws = let ws = builtins.toString (x + 10);
c = (x + 1) / 10;
in
builtins.toString (x + 1 - (c * 10));
in [ in [
"$mod, ${ws}, workspace, ${toString (x + 1)}" "$mod, code:${ws}, workspace, ${toString (x + 1)}"
"$mod SHIFT, ${ws}, movetoworkspace, ${toString (x + 1)}" "$mod SHIFT, code:${ws}, movetoworkspace, ${toString (x + 1)}"
] ]
) )
10) 10)
@ -157,16 +155,20 @@ module, or the flake-based Home Manager module.
Hyprland plugins can be added through the `plugins` option: Hyprland plugins can be added through the `plugins` option:
```nix ```nix
wayland.windowManager.hyprland.plugins = [ {
inputs.hyprland-plugins.packages.${pkgs.system}.hyprbars wayland.windowManager.hyprland.plugins = [
"/absolute/path/to/plugin.so" 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 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 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 setting them with `home.pointerCursor` and `gtk.theme`, which enable a bunch of
@ -175,34 +177,37 @@ compatibility options that should make the themes load in all situations.
Example configuration: Example configuration:
```nix ```nix
home.pointerCursor = { {
gtk.enable = true; home.pointerCursor = {
# x11.enable = true; gtk.enable = true;
package = pkgs.bibata-cursors; # x11.enable = true;
name = "Bibata-Modern-Classic"; package = pkgs.bibata-cursors;
size = 16; name = "Bibata-Modern-Classic";
}; size = 16;
gtk = {
enable = true;
theme = {
package = pkgs.flat-remix-gtk;
name = "Flat-Remix-GTK-Grey-Darkest";
}; };
iconTheme = { gtk = {
package = pkgs.gnome.adwaita-icon-theme; enable = true;
name = "Adwaita";
};
font = { theme = {
name = "Sans"; package = pkgs.flat-remix-gtk;
size = 11; 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 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 will not have knowledge of `PATH`, so it cannot run the commands in the

View File

@ -3,7 +3,7 @@ title: Hyprland on NixOS
--- ---
The NixOS module enables critical components needed to run Hyprland properly, 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), [xdg-desktop-portal-hyprland](https://github.com/hyprwm/xdg-desktop-portal-hyprland),
graphics drivers, fonts, dconf, xwayland, and adding a proper Desktop Entry to graphics drivers, fonts, dconf, xwayland, and adding a proper Desktop Entry to
your Display Manager. your Display Manager.
@ -14,8 +14,9 @@ Make sure to check out the options of the
{{< callout >}} {{< callout >}}
- _(Required) NixOS Module_: enables critical components needed to run Hyprland - _(Required) NixOS Module_: enables critical components needed to run Hyprland
properly properly. Without this, you may have issues with XDG Portals, or missing
- _(Optional) Home-manager module_: lets you declaratively configure Hyprland session files in your Display Manager.
- _(Optional) Home Manager Module_: lets you declaratively configure Hyprland
{{< /callout >}} {{< /callout >}}
@ -26,12 +27,12 @@ Make sure to check out the options of the
```nix ```nix
# configuration.nix # configuration.nix
{pkgs, ...}: { {
programs.hyprland.enable = true; 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 >}} {{< /tab >}}
@ -69,7 +70,7 @@ this:
{inputs, pkgs, ...}: { {inputs, pkgs, ...}: {
programs.hyprland = { programs.hyprland = {
enable = true; 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! 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 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. version mismatch between your system and Hyprland.
You can fix this issue by using `mesa` from Hyprland's `nixpkgs` input: You can fix this issue by using `mesa` from Hyprland's `nixpkgs` input:
@ -126,7 +127,7 @@ have to compile Hyprland yourself.
in { in {
programs.hyprland = { programs.hyprland = {
enable = true; enable = true;
package = hyprland.packages.${pkgs.system}.hyprland; package = hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
}; };
} }
``` ```

View File

@ -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). 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 First, [enable flakes](https://nixos.wiki/wiki/Flakes#Enable_flakes). Once you
have flakes working, install Hyprland through `nix profile`: have flakes working, install Hyprland through `nix profile`:

View File

@ -2,8 +2,8 @@
title: Options & Overrides title: Options & Overrides
--- ---
You can override the package through `.override` or `.overrideAttrs`. This is You can override the package through the `.override` or `.overrideAttrs`
easily achievable on [NixOS](../Hyprland-on-NixOS) or mechanisms. This is easily achievable on [NixOS](../Hyprland-on-NixOS) or
[Home Manager](../Hyprland-on-Home-Manager). [Home Manager](../Hyprland-on-Home-Manager).
## Package options ## Package options
@ -14,7 +14,7 @@ be changed by setting the appropriate option to `true`/`false`.
### Package ### Package
```nix ```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 enableXWayland = true; # whether to enable XWayland
legacyRenderer = false; # whether to use the legacy renderer (for old GPUs) legacyRenderer = false; # whether to use the legacy renderer (for old GPUs)
withSystemd = true; # whether to build with systemd support 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 ### NixOS & HM modules
```nix ```nix
programs.hyprland = { # or wayland.windowManager.hyprland {
enable = true; programs.hyprland = { # or wayland.windowManager.hyprland
xwayland.enable = true; enable = true;
}; xwayland.enable = true;
};
}
``` ```
## Options descriptions ## 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 XWayland is enabled by default in the Nix package. You can disable it either in
the package itself, or through the module options. the package itself, or through the module options.
### XWayland HiDPI
See [XWayland](../../Configuring/XWayland).
## Using Nix repl ## Using Nix repl
If you're using Nix (and not NixOS or Home Manager) and you want to override, If you're using Nix (and not NixOS or Home Manager) and you want to override,

121
pages/Nix/Plugins.md Normal file
View File

@ -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.<plugin>
];
}
```
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}.<plugin>
];
};
}
```
## 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.

View File

@ -8,27 +8,22 @@ To install Hyprland on NixOS, we provide a NixOS and a Home Manager module.
{{< callout title=Note >}} {{< callout title=Note >}}
- _(Required) NixOS Module_: enables critical components needed to run Hyprland - _(Required) NixOS Module_: enables critical components needed to run Hyprland
properly properly. Without this, you may have issues with XDG Portals, or missing
- _(Optional) Home-manager module_: lets you declaratively configure Hyprland session files in your Display Manager.
- _(Optional) Home Manager Module_: lets you declaratively configure Hyprland
{{< /callout >}} {{< /callout >}}
## NixOS module ## NixOS module
The module is now upstreamed into Nixpkgs, which means all you need in your
configuration is:
```nix ```nix
{config, pkgs, ...}: { {
programs.hyprland.enable = true; programs.hyprland.enable = true;
# Optional, hint electron apps to use wayland: # Optional, hint electron apps to use wayland:
# environment.sessionVariables.NIXOS_OZONE_WL = "1"; # 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 For more options, see
[module options](https://search.nixos.org/options?channel=unstable&from=0&size=50&sort=relevance&type=packages&query=hyprland). [module options](https://search.nixos.org/options?channel=unstable&from=0&size=50&sort=relevance&type=packages&query=hyprland).

View File

@ -11,88 +11,72 @@ have had success with the instructions on this page.
You can choose between the proprietary You can choose between the proprietary
[Nvidia drivers](https://wiki.archlinux.org/title/NVIDIA) or the open source [Nvidia drivers](https://wiki.archlinux.org/title/NVIDIA) or the open source
[Nouveau driver](https://wiki.archlinux.org/title/Nouveau). For the [Nouveau driver](https://wiki.archlinux.org/title/Nouveau). For the
proprietary drivers, there are 3 of them: the current closed source driver proprietary drivers, there are 3 varieties: the current closed source driver
named 'nvidia' (or 'nvidia-dkms' to use with custom linux kernels) which is named 'nvidia' (or 'nvidia-dkms') which is
under active development; the legacy closed source drivers 'nvidia-3xxxx' for older cards 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 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 currently an alpha stage attempt to open source a part of their closed source
driver for newer cards. driver for newer cards.
If the proprietary drivers support your graphics card, it's generally recommended If the proprietary drivers support your graphics card, it's generally recommended
to use them instead, as it includes significantly improved gaming performance to use them instead, as it has significantly improved performance
and power management for recent GPUs. and power management for newer GPUs.
However, keep in mind that if the proprietary Nvidia drivers do not work 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 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). [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 >}} {{< callout >}}
Even if your GPU is listed as supported by the `nvidia-open-dkms` driver, at this The `nvidia-open` drivers are still not up to feature parity with the proprietary drivers.
point in time, it is still not up to feature parity with the current closed source drivers. One issue is with [suspend](https://github.com/NVIDIA/open-gpu-kernel-modules/issues/472) (e.g. closing the lid on your laptop).
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.
{{< /callout >}} {{< /callout >}}
Take care to also install `egl-wayland` (`libnvidia-egl-wayland1` and # Proprietary drivers setup
`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.
Next up, you need to enable modeset for nvidia, this can be done via editing You can choose between the `nvidia` or the `nvidia-dkms` package. There are pros and cons
the kernel paramaters for your bootloader. 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) ## Installation
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`.
For others check out Install the following packages:
[kernel parameters](https://wiki.archlinux.org/title/Kernel_parameters) and how
to add `nvidia_drm.modeset=1` to your specific bootloader.
{{< 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` ## DRM kernel mode setting
is correct for this kernel parameter. It has been confirmed that either
of these will work.
{{< /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 Edit `/etc/mkinitcpio.conf`. In the `MODULES` array, add the following module names:
your `MODULES`
For example, a clean `MODULES` line would now look like this: ```ini
```sh MODULES=(... nvidia nvidia_modeset nvidia_uvm nvidia_drm ...)
MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)
``` ```
Now, run `sudo mkinitcpio -P`. This will regenerate the initcpios for all kernels Then, create and edit `/etc/modprobe.d/nvidia.conf`. Add this line to the file:
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.
More information is available here: ```ini
[https://wiki.archlinux.org/title/NVIDIA#DRM_kernel_mode_setting](https://wiki.archlinux.org/title/NVIDIA#DRM_kernel_mode_setting) 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 ```sh
env = LIBVA_DRIVER_NAME,nvidia env = LIBVA_DRIVER_NAME,nvidia
@ -112,8 +96,11 @@ Do not set it in your configs. Use `cursor:no_hardware_cursors` instead.
{{< /callout >}} {{< /callout >}}
Lastly, you also need to install a few packages to get some apps ## Finishing up
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).
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. Reboot your computer.
@ -123,35 +110,27 @@ It _should_ work now.
## VA-API hardware video acceleration ## 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 [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 solve specific issues in Electron apps.
for videos on the web, with benefits including higher performance video playback
and also higher power efficiency during video playback.
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: 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. repos.
- export this variable in your hyprland config: 2. Add this variable to your hyprland config:
```sh ```sh
env = NVD_BACKEND,direct 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.
- Enable the services `nvidia-suspend.service`, `nvidia-hibernate.service` and See [here](https://github.com/elFarto/nvidia-vaapi-driver?tab=readme-ov-file#upstream-regressions)
`nvidia-resume.service` for more information on this environment variable.
- Add `nvidia.NVreg_PreserveVideoMemoryAllocations=1` to your kernel parameters if You can check the README to get it working for Firefox.
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. ## Other issues
## Other issues to look out for
### Regarding environment variables ### 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 Otherwise, remove or comment the line
`env = __GLX_VENDOR_LIBRARY_NAME,nvidia`. `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 On a hybrid graphics device (a laptop with
both an Intel and an Nvidia GPU), you will need to remove the `optimus-manager` 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 package if installed (disabling the service does not work). You also need to
change your BIOS settings from hybrid graphics to discrete graphics. 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. 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 For most Electron apps, you should be fine just adding this
environment variable to your config: environment variable to your config:
@ -182,7 +161,7 @@ environment variable to your config:
env = ELECTRON_OZONE_PLATFORM_HINT,auto 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. work on other Electron apps as well.
For other apps, including CEF apps, you will need to launch them with these flags: 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 >}} {{< /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 to `1`, which should automatically configure Electron / CEF apps to run with native
Wayland for you. Wayland for you.
While it is best to have as many things as possible running natively in 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 Wayland, the flickering will likely be solved in the 555 series of Nvidia driver updates.
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 XWayland games may flicker or present frames out-of-order in a way which makes them unplayable.
a way which makes them unplayable. Repeated frames, random presenting of This is due to the lack of explicit synchronization in the driver.
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:
- Install xorg-xwayland-git (AUR). This git package includes this [PR](https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/967) There are a few fixes:
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.
- 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 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 More info about explicit sync is available
[on this blog](https://planet.kde.org/xavers-blog-2024-04-05-explicit-sync/). [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: If it does not, try:
- lowering your monitor's refresh rate, as this can stop the flickering 1. Lowering your monitor's refresh rate: This can stop the flickering
altogether altogether.
- using the [Nouveau driver](https://wiki.archlinux.org/title/Nouveau) as 2. Using the [Nouveau driver](https://wiki.archlinux.org/title/Nouveau) as
mentioned above mentioned above.
### Fixing suspend/wakeup issues ### Suspend/wakeup issues
Enable the services `nvidia-suspend.service`, `nvidia-hibernate.service` and Enable the services `nvidia-suspend.service`, `nvidia-hibernate.service` and
`nvidia-resume.service`, they will be started by systemd when needed. `nvidia-resume.service`, they will be started by systemd when needed.
@ -293,8 +272,8 @@ hardware.nvidia.powerManagement.enable = true;
hardware.nvidia.open = false; hardware.nvidia.open = false;
``` ```
## Still having issues? # Still having issues?
If you're still having issues after following this guide, you can join the 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 Discord](https://discord.gg/hQ9XvMUjjr) and ask for help in the
`#hyprland-nvidia` channel. Hopefully someone will be able to help you out. `#hyprland-nvidia` channel.

View File

@ -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 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. 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 ## Walker