mirror of
https://github.com/hyprwm/hyprland-wiki.git
synced 2024-11-22 20:55:59 +01:00
Nix: simplify pages (#187)
* clear-up nixos installation * Nix: clear up wording * Nix: add example config for HM Co-authored-by: Mihai Fufezan <fufexan@protonmail.com>
This commit is contained in:
parent
3d83cc67ce
commit
9a9d89b96a
8 changed files with 155 additions and 129 deletions
|
@ -38,8 +38,19 @@ hyprland - binary x86 tagged release
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< /tab >}}
|
{{< /tab >}}
|
||||||
{{< tab "Nix" >}}Read the [Nix page](../../Nix).{{< /tab >}}
|
{{< tab "Nix" >}}
|
||||||
|
|
||||||
|
Enable Hyprland in your NixOS configuration:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
programs.hyprland.enable = true;
|
||||||
|
```
|
||||||
|
|
||||||
|
For more details, read the [Nix page](../../Nix).
|
||||||
|
|
||||||
|
{{< /tab >}}
|
||||||
{{< tab "openSUSE*" >}}
|
{{< tab "openSUSE*" >}}
|
||||||
|
>>>>>>> b147dc5 (clear-up nixos installation)
|
||||||
Hyprland is part of factory, starting with snapshot 20230411. To install it simply use zypper
|
Hyprland is part of factory, starting with snapshot 20230411. To install it simply use zypper
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
NOTE: This page only applies to the flake package. You can safely skip this if you use
|
NOTE: This page only applies to the flake package. You can safely skip this if
|
||||||
the Nixpkgs package.
|
you use the Nixpkgs package.
|
||||||
|
|
||||||
Hyprland is not built by Hydra and cached in `cache.nixos.org`, like the rest
|
Hyprland is not built by Hydra and cached in `cache.nixos.org`, like the rest
|
||||||
of the Nixpkgs packages.
|
of the Nixpkgs packages.
|
||||||
|
@ -13,13 +13,7 @@ The [Hyprland Cachix](https://app.cachix.org/cache/hyprland) exists to cache the
|
||||||
|
|
||||||
{{< hint >}}
|
{{< hint >}}
|
||||||
In order for Nix to take advantage of the cache, it has to be enabled **before**
|
In order for Nix to take advantage of the cache, it has to be enabled **before**
|
||||||
enabling the Hyprland module(s) or adding the package.
|
enabling the Hyprland flake package.
|
||||||
{{< /hint >}}
|
|
||||||
|
|
||||||
{{< hint type=important >}}
|
|
||||||
Overriding Hyprland's `nixpkgs` input
|
|
||||||
(`inputs.hyprland.inputs.nixpkgs.follows = "nixpkgs";`) will make the cache
|
|
||||||
useless, since you're building from a different Nixpkgs commit.
|
|
||||||
{{< /hint >}}
|
{{< /hint >}}
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
|
@ -31,3 +25,12 @@ useless, since you're building from a different Nixpkgs commit.
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
{{< hint type=important >}}
|
||||||
|
Do **not** override Hyprland's `nixpkgs` input unless you know what you are
|
||||||
|
doing.
|
||||||
|
|
||||||
|
Doing so will make the cache useless, since you're building from a different
|
||||||
|
Nixpkgs commit.
|
||||||
|
{{< /hint >}}
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,18 @@ You can use the Home Manager module by adding it to your configuration:
|
||||||
For a list of available options, check the
|
For a list of available options, check the
|
||||||
[module file](https://github.com/hyprwm/Hyprland/blob/main/nix/hm-module.nix).
|
[module file](https://github.com/hyprwm/Hyprland/blob/main/nix/hm-module.nix).
|
||||||
|
|
||||||
## With flakes
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
The following snippets of code try to show how to bring the Hyprland flake from
|
||||||
|
the flake input and import it into the module system. Feel free to make any
|
||||||
|
adjustment for your setup.
|
||||||
|
|
||||||
|
{{< tabs "uniqueid" >}}
|
||||||
|
|
||||||
|
{{< tab "Flakes" >}}
|
||||||
|
|
||||||
|
Don't forget to replace `user@hostname` with your username and hostname!
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
# flake.nix
|
# flake.nix
|
||||||
|
@ -33,11 +44,9 @@ For a list of available options, check the
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
{{< /tab >}}
|
||||||
|
|
||||||
Don't forget to replace `user@hostname` with your username and hostname!
|
{{< tab "No flakes (with flake-compat)" >}}
|
||||||
|
|
||||||
## Without flakes
|
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
# home config
|
# home config
|
||||||
|
|
||||||
|
@ -62,3 +71,54 @@ in {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
{{< /tab >}}
|
||||||
|
|
||||||
|
{{< /tabs >}}
|
||||||
|
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Once the module is enabled, you can use it to declaratively configure Hyprland:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
# home.nix
|
||||||
|
{config, pkgs, ...}: {
|
||||||
|
wayland.windowManager.hyprland.extraConfig = ''
|
||||||
|
$mod = SUPER
|
||||||
|
|
||||||
|
bind = $mod, F, exec, firefox
|
||||||
|
bind = , Print, exec, grimblast copy area
|
||||||
|
|
||||||
|
# workspaces
|
||||||
|
# binds $mod + [shift +] {1..10} to [move to] workspace {1..10}
|
||||||
|
${builtins.concatStringsSep "\n" (builtins.genList (
|
||||||
|
x: let
|
||||||
|
ws = let
|
||||||
|
c = (x + 1) / 10;
|
||||||
|
in
|
||||||
|
builtins.toString (x + 1 - (c * 10));
|
||||||
|
in ''
|
||||||
|
bind = $mod, ${ws}, workspace, ${toString (x + 1)}
|
||||||
|
bind = $mod SHIFT, ${ws}, movetoworkspace, ${toString (x + 1)}
|
||||||
|
''
|
||||||
|
)
|
||||||
|
10)}
|
||||||
|
|
||||||
|
# ...
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Plugins
|
||||||
|
|
||||||
|
Hyprland plugins can be added through an option:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
wayland.windowManager.hyprland.plugins = [
|
||||||
|
inputs.hyprland-plugins.packages.${pkgs.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).
|
||||||
|
|
|
@ -7,7 +7,9 @@ your Display Manager.
|
||||||
Make sure to check out the options of the
|
Make sure to check out the options of the
|
||||||
[NixOS module](https://search.nixos.org/options?channel=unstable&from=0&size=50&sort=relevance&type=packages&query=hyprland).
|
[NixOS module](https://search.nixos.org/options?channel=unstable&from=0&size=50&sort=relevance&type=packages&query=hyprland).
|
||||||
|
|
||||||
## From Nixpkgs
|
{{< tabs "uniqueid" >}}
|
||||||
|
|
||||||
|
{{< tab "Nixpkgs" >}}
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
# configuration.nix
|
# configuration.nix
|
||||||
|
@ -17,10 +19,19 @@ Make sure to check out the options of the
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Using unstable Hyprland
|
This will use the Hyprland version that Nixpkgs has.
|
||||||
|
|
||||||
In case you want to use the module from Nixpkgs, but also want the development
|
{{< /tab >}}
|
||||||
version of Hyprland, you can add it like this:
|
|
||||||
|
{{< tab "Flake package" >}}
|
||||||
|
|
||||||
|
{{< hint >}}
|
||||||
|
Please enable [Cachix](../Cachix) before using the flake package, so you don't
|
||||||
|
have to compile Hyprland yourself.
|
||||||
|
{{< /hint >}}
|
||||||
|
|
||||||
|
In case you want to use the development version of Hyprland, you can add it
|
||||||
|
like this:
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
# flake.nix
|
# flake.nix
|
||||||
|
@ -31,8 +42,10 @@ version of Hyprland, you can add it like this:
|
||||||
|
|
||||||
outputs = {nixpkgs, ...} @ inputs: {
|
outputs = {nixpkgs, ...} @ inputs: {
|
||||||
nixosConfigurations.HOSTNAME = nixpkgs.lib.nixosSystem {
|
nixosConfigurations.HOSTNAME = nixpkgs.lib.nixosSystem {
|
||||||
specialArgs = {inherit inputs;}; # this is the important part
|
specialArgs = { inherit inputs; }; # this is the important part
|
||||||
modules = [./configuration.nix];
|
modules = [
|
||||||
|
./configuration.nix
|
||||||
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,40 +53,21 @@ version of Hyprland, you can add it like this:
|
||||||
# configuration.nix
|
# configuration.nix
|
||||||
|
|
||||||
{inputs, pkgs, ...}: {
|
{inputs, pkgs, ...}: {
|
||||||
programs.hyprland.package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
|
programs.hyprland = {
|
||||||
}
|
enable = true;
|
||||||
```
|
package = inputs.hyprland.packages.${pkgs.system}.hyprland;
|
||||||
|
|
||||||
## From the Flake
|
|
||||||
|
|
||||||
```nix
|
|
||||||
# flake.nix
|
|
||||||
{
|
|
||||||
inputs = {
|
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
||||||
hyprland.url = "github:hyprwm/Hyprland";
|
|
||||||
};
|
|
||||||
|
|
||||||
outputs = {nixpkgs, hyprland, ...}: {
|
|
||||||
nixosConfigurations.HOSTNAME = nixpkgs.lib.nixosSystem {
|
|
||||||
modules = [
|
|
||||||
hyprland.nixosModules.default
|
|
||||||
{programs.hyprland.enable = true;}
|
|
||||||
# ...
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
Don't forget to change the `HOSTNAME` to your actual hostname!
|
||||||
|
|
||||||
Don't forget to replace `HOSTNAME` with your hostname!
|
{{< /tab >}}
|
||||||
|
|
||||||
## From the Flake, on Nix stable
|
{{< tab "Flake package, Nix stable" >}}
|
||||||
|
|
||||||
{{< hint >}}
|
{{< hint >}}
|
||||||
If you're using Hyprland through an overlay, set
|
Please enable [Cachix](../Cachix) before using the flake package, so you don't
|
||||||
`programs.hyprland.package = pkgs.hyprland;`. This also means the `xwayland`
|
have to compile Hyprland yourself.
|
||||||
and `nvidiaPatches` options no longer apply.
|
|
||||||
{{< /hint >}}
|
{{< /hint >}}
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
|
@ -82,24 +76,16 @@ and `nvidiaPatches` options no longer apply.
|
||||||
{pkgs, ...}: let
|
{pkgs, ...}: let
|
||||||
flake-compat = builtins.fetchTarball "https://github.com/edolstra/flake-compat/archive/master.tar.gz";
|
flake-compat = builtins.fetchTarball "https://github.com/edolstra/flake-compat/archive/master.tar.gz";
|
||||||
|
|
||||||
hyprland = (import flake-compat {
|
hyprland-flake = (import flake-compat {
|
||||||
src = builtins.fetchTarball "https://github.com/hyprwm/Hyprland/archive/master.tar.gz";
|
src = builtins.fetchTarball "https://github.com/hyprwm/Hyprland/archive/master.tar.gz";
|
||||||
}).defaultNix;
|
}).defaultNix;
|
||||||
in {
|
in {
|
||||||
imports = [hyprland.nixosModules.default];
|
|
||||||
|
|
||||||
programs.hyprland = {
|
programs.hyprland = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
package = hyprland-flake.packages.${pkgs.system}.hyprland;
|
||||||
# default options, you don't need to set them
|
|
||||||
package = hyprland.packages.${pkgs.system}.default;
|
|
||||||
|
|
||||||
xwayland = {
|
|
||||||
enable = true;
|
|
||||||
hidpi = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
nvidiaPatches = false;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
{{< /tab >}}
|
||||||
|
{{< /tabs >}}
|
||||||
|
|
|
@ -4,7 +4,12 @@ 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, you can use it as a normal package.
|
||||||
|
|
||||||
## From Nixpkgs
|
First, [enable flakes](https://nixos.wiki/wiki/Flakes#Enable_flakes).
|
||||||
|
Once you have flakes working, install Hyprland through `nix profile`:
|
||||||
|
|
||||||
|
{{< tabs "uniqueid" >}}
|
||||||
|
|
||||||
|
{{< tab "From Nixpkgs" >}}
|
||||||
|
|
||||||
The easiest method is to get Hyprland directly from Nixpkgs:
|
The easiest method is to get Hyprland directly from Nixpkgs:
|
||||||
|
|
||||||
|
@ -12,16 +17,18 @@ The easiest method is to get Hyprland directly from Nixpkgs:
|
||||||
nix profile install nixpkgs#hyprland
|
nix profile install nixpkgs#hyprland
|
||||||
```
|
```
|
||||||
|
|
||||||
## From the Flake
|
{{< /tab >}}
|
||||||
|
{{< tab "From the Flake" >}}
|
||||||
|
|
||||||
First, [enable flakes](https://nixos.wiki/wiki/Flakes#Enable_flakes).
|
NOTE: Make sure to enable [Cachix](../Cachix) first.
|
||||||
|
|
||||||
Once you have flakes working, install Hyprland through `nix profile`:
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
nix profile install github:hyprwm/Hyprland
|
nix profile install github:hyprwm/Hyprland
|
||||||
```
|
```
|
||||||
|
|
||||||
|
{{< /tab >}}
|
||||||
|
{{< /tabs >}}
|
||||||
|
|
||||||
Since you're using Hyprland outside of NixOS, it won't be able to find graphics
|
Since you're using Hyprland outside of NixOS, it won't be able to find graphics
|
||||||
drivers. To get around that, you can use [nixGL](https://github.com/guibou/nixGL).
|
drivers. To get around that, you can use [nixGL](https://github.com/guibou/nixGL).
|
||||||
|
|
||||||
|
@ -52,3 +59,4 @@ nix profile upgrade '.*'
|
||||||
Check the
|
Check the
|
||||||
[nix profile](https://nixos.org/manual/nix/stable/command-ref/new-cli/nix3-profile.html)
|
[nix profile](https://nixos.org/manual/nix/stable/command-ref/new-cli/nix3-profile.html)
|
||||||
command documentation for other upgrade options.
|
command documentation for other upgrade options.
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
You can override the package through `.override` or `.overrideAttrs`. This is
|
You can override the package through `.override` or `.overrideAttrs`. This is
|
||||||
easily achievable through NixOS or Home Manager.
|
easily achievable through [NixOS](../Hyprland-on-NixOS) or [Home Manager](../Hyprland-on-Home-Manager).
|
||||||
|
|
||||||
## Package options
|
## Package options
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ can be changed by setting the appropriate option to `true`/`false`.
|
||||||
### Package
|
### Package
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
(pkgs.hyprland.override { # or inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.default
|
(pkgs.hyprland.override { # or inputs.hyprland.packages.${pkgs.system}.hyprland
|
||||||
enableXWayland = true;
|
enableXWayland = true;
|
||||||
hidpiXWayland = false;
|
hidpiXWayland = false;
|
||||||
nvidiaPatches = false;
|
nvidiaPatches = false;
|
||||||
|
@ -62,23 +62,9 @@ env = XCURSOR_SIZE,48
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< hint >}}
|
{{< hint >}}
|
||||||
The GDK_SCALE variable won't conflict with wayland-native GTK programs.
|
The `GDK_SCALE` environment variable won't conflict with Wayland-native GTK programs.
|
||||||
{{< /hint >}}
|
{{< /hint >}}
|
||||||
|
|
||||||
### Plugins
|
|
||||||
|
|
||||||
Hyprland plugins can be added through the home manager module.
|
|
||||||
|
|
||||||
```nix
|
|
||||||
wayland.windowManager.hyprland.plugins = [
|
|
||||||
inputs.hyprland-plugins.packages.${pkgs.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).
|
|
||||||
|
|
||||||
### Nvidia Patches
|
### Nvidia Patches
|
||||||
|
|
||||||
Nvidia is notorious for not working by default with wlroots. That's why we
|
Nvidia is notorious for not working by default with wlroots. That's why we
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
`xdg-desktop-portal-hyprland` (xdph) is a fork of `xdg-desktop-portal-wlr`
|
|
||||||
(xdpw), which supports window sharing and region sharing (currently broken),
|
|
||||||
apart from output (per-screen) sharing.
|
|
||||||
|
|
||||||
Due to the internal workings, `xdph` depends on the Hyprland package for
|
|
||||||
getting the window list. However, we cannot make a cross-dependency betwen
|
|
||||||
the Hyprland flake and the `xdph` flake.
|
|
||||||
|
|
||||||
The best solution we found to make everything work properly was to override
|
|
||||||
the Hyprland package that `xdph` builds with.
|
|
||||||
|
|
||||||
In the Hyprland flake, it's done like this:
|
|
||||||
```nix
|
|
||||||
xdg-desktop-portal-hyprland = inputs.xdph.packages.${prev.system}.default.override {
|
|
||||||
hyprland-share-picker = inputs.xdph.packages.${prev.system}.hyprland-share-picker.override {inherit hyprland;};
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
{{< hint >}}
|
|
||||||
A similar override is done inside the [NixOS module](../Hyprland-on-NixOS), so
|
|
||||||
you do not have to tinker with it if you use the module.
|
|
||||||
{{< /hint >}}
|
|
||||||
|
|
||||||
If you don't use the module, you will want to do a similar override in your
|
|
||||||
configuration.
|
|
|
@ -1,30 +1,27 @@
|
||||||
Hyprland on Nix can be installed either from Nixpkgs (release version) or from
|
To install Hyprland on NixOS, we provide a NixOS and a Home Manager module.
|
||||||
the [flake](https://github.com/hyprwm/Hyprland/blob/main/flake.nix) (directly
|
|
||||||
from the main branch).
|
|
||||||
|
|
||||||
If you use the flake, it is a good idea to set up [Cachix](./Cachix) before
|
{{< hint title=note >}}
|
||||||
continuing with installing Hyprland.
|
- *(Required) NixOS Module*: enables critical components needed to run Hyprland properly
|
||||||
|
- *(Optional) Home-manager module*: lets you declaratively configure Hyprland
|
||||||
|
{{< /hint >}}
|
||||||
|
|
||||||
The methods of installation are described below:
|
## NixOS module
|
||||||
|
|
||||||
## NixOS + Home Manager (recommended)
|
The module is now upstreamed into Nixpkgs, which means all you need in your configuration is:
|
||||||
|
|
||||||
If you're on NixOS and also use HM, it is a good idea to use Hyprland modules
|
```nix
|
||||||
for both. Make sure the package options are the same for both modules.
|
{config, pkgs, ...}: {
|
||||||
|
programs.hyprland.enable = true;
|
||||||
|
# Optional, hint electron apps to use wayland:
|
||||||
|
# environment.sessionVariables.NIXOS_OZONE_WL = "1";
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
Read [Hyprland on NixOS](./Hyprland-on-NixOS) and
|
For more options, see
|
||||||
[Hyprland on Home Manager](./Hyprland-on-Home-Manager).
|
[module options](https://search.nixos.org/options?channel=unstable&from=0&size=50&sort=relevance&type=packages&query=hyprland).
|
||||||
|
|
||||||
## Home Manager only
|
For other NixOS options, see [Hyprland on NixOS](./Hyprland-on-NixOS).
|
||||||
|
|
||||||
If you do not plan on using the NixOS module, but want to use the HM module, you
|
## Home-manager module
|
||||||
will have to enable all the options the NixOS module enables.
|
|
||||||
|
|
||||||
Read [Hyprland on Home Manager](./Hyprland-on-Home-Manager).
|
Read [Hyprland on Home Manager](./Hyprland-on-Home-Manager).
|
||||||
|
|
||||||
## On your own
|
|
||||||
|
|
||||||
If you don't plan on using any module, manually enable all the options that the
|
|
||||||
modules have set.
|
|
||||||
|
|
||||||
Read [the sources](https://github.com/hyprwm/Hyprland/tree/main/nix).
|
|
||||||
|
|
Loading…
Reference in a new issue