5 KiB
title |
---|
Hyprland on NixOS |
The NixOS module enables critical components needed to run Hyprland properly, such as polkit, xdg-desktop-portal-hyprland, graphics drivers, fonts, dconf, xwayland, and adding a proper Desktop Entry to your Display Manager.
Make sure to check out the options of the NixOS module.
{{< callout >}}
- (Required) NixOS Module: enables critical components needed to run
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 configure Hyprland declaratively
through Home Manager.
- This module configures Hyprland and adds it to your user's
$PATH
, but does not make certain system-level changes such as adding a desktop session file for your display manager. This is handled by the NixOS module once you enable it.
- This module configures Hyprland and adds it to your user's
{{< /callout >}}
{{< tabs items="Nixpkgs,Flakes,Nix stable (flake-compat)" >}}
{{< tab "Nixpkgs" >}}
{
programs.hyprland.enable = true; # enable Hyprland
environment.systemPackages = [
# ... other packages
pkgs.kitty # required for the default Hyprland config
];
# Optional, hint Electron apps to use Wayland:
# environment.sessionVariables.NIXOS_OZONE_WL = "1";
}
This will use the Hyprland version included in the Nixpkgs release you're using.
{{< /tab >}}
{{< tab "Flake Package" >}}
{{< callout >}}
Please enable Cachix before using the flake package, so you don't have to compile Hyprland yourself.
{{< /callout >}}
In case you want to use the development version of Hyprland, you can add it like this:
{
inputs.hyprland.url = "github:hyprwm/Hyprland";
# ...
outputs = {nixpkgs, ...} @ inputs: {
nixosConfigurations.HOSTNAME = nixpkgs.lib.nixosSystem {
specialArgs = { inherit inputs; }; # this is the important part
modules = [
./configuration.nix
];
};
};
}
{inputs, pkgs, ...}: {
programs.hyprland = {
enable = true;
# set the flake package
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
# make sure to also set the portal package, so that they are in sync
portalPackage = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
};
}
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 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:
{pkgs, inputs, ...}: let
pkgs-unstable = inputs.hyprland.inputs.nixpkgs.legacyPackages.${pkgs.stdenv.hostPlatform.system};
in {
hardware.opengl = {
package = pkgs-unstable.mesa.drivers;
# if you also want 32-bit support (e.g for Steam)
driSupport32Bit = true;
package32 = pkgs-unstable.pkgsi686Linux.mesa.drivers;
};
}
For more details, see issue #5148.
{{< /tab >}}
{{< tab "Nix stable" >}}
{{< callout >}}
Please enable Cachix before using the flake package, so you don't have to compile Hyprland yourself.
{{< /callout >}}
{pkgs, ...}: let
flake-compat = builtins.fetchTarball "https://github.com/edolstra/flake-compat/archive/master.tar.gz";
hyprland = (import flake-compat {
src = builtins.fetchTarball "https://github.com/hyprwm/Hyprland/archive/main.tar.gz";
}).defaultNix;
in {
programs.hyprland = {
enable = true;
# set the flake package
package = hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
# make sure to also set the portal package, so that they are in sync
portalPackage = hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
};
}
{{< /tab >}}
{{< /tabs >}}
Fixing problems with themes
If your themes for mouse cursors, icons or windows don't load correctly, see the relevant section in Hyprland on Home Manager.
If you prefer not to use Home Manager, you can also resolve the issues with GTK themes using dconf like so:
exec-once = dconf write /org/gnome/desktop/interface/gtk-theme "'Adwaita'"
exec-once = dconf write /org/gnome/desktop/interface/icon-theme "'Flat-Remix-Red-Dark'"
exec-once = dconf write /org/gnome/desktop/interface/document-font-name "'Noto Sans Medium 11'"
exec-once = dconf write /org/gnome/desktop/interface/font-name "'Noto Sans Medium 11'"
exec-once = dconf write /org/gnome/desktop/interface/monospace-font-name "'Noto Sans Mono Medium 11'"