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:
Fernando Ayats 2023-07-17 18:14:43 +02:00 committed by GitHub
parent 3d83cc67ce
commit 9a9d89b96a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 155 additions and 129 deletions

View file

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

View file

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

View file

@ -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).

View file

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

View file

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

View file

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

View file

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

View file

@ -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).