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 "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*" >}}
>>>>>>> b147dc5 (clear-up nixos installation)
Hyprland is part of factory, starting with snapshot 20230411. To install it simply use zypper
```sh

View file

@ -1,5 +1,5 @@
NOTE: This page only applies to the flake package. You can safely skip this if you use
the Nixpkgs package.
NOTE: This page only applies to the flake package. You can safely skip this if
you use the Nixpkgs package.
Hyprland is not built by Hydra and cached in `cache.nixos.org`, like the rest
of the Nixpkgs packages.
@ -13,13 +13,7 @@ The [Hyprland Cachix](https://app.cachix.org/cache/hyprland) exists to cache the
{{< hint >}}
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.
{{< /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.
enabling the Hyprland flake package.
{{< /hint >}}
```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
[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
# 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!
## Without flakes
{{< tab "No flakes (with flake-compat)" >}}
```nix
# 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
[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
# 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
version of Hyprland, you can add it like this:
{{< /tab >}}
{{< 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
# flake.nix
@ -32,7 +43,9 @@ version of Hyprland, you can add it like this:
outputs = {nixpkgs, ...} @ inputs: {
nixosConfigurations.HOSTNAME = nixpkgs.lib.nixosSystem {
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
{inputs, pkgs, ...}: {
programs.hyprland.package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.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;}
# ...
];
};
programs.hyprland = {
enable = true;
package = inputs.hyprland.packages.${pkgs.system}.hyprland;
};
}
```
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 >}}
If you're using Hyprland through an overlay, set
`programs.hyprland.package = pkgs.hyprland;`. This also means the `xwayland`
and `nvidiaPatches` options no longer apply.
Please enable [Cachix](../Cachix) before using the flake package, so you don't
have to compile Hyprland yourself.
{{< /hint >}}
```nix
@ -82,24 +76,16 @@ and `nvidiaPatches` options no longer apply.
{pkgs, ...}: let
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";
}).defaultNix;
in {
imports = [hyprland.nixosModules.default];
programs.hyprland = {
enable = true;
# default options, you don't need to set them
package = hyprland.packages.${pkgs.system}.default;
xwayland = {
enable = true;
hidpi = false;
};
nvidiaPatches = false;
package = hyprland-flake.packages.${pkgs.system}.hyprland;
};
}
```
{{< /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.
## 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:
@ -12,16 +17,18 @@ The easiest method is to get Hyprland directly from Nixpkgs:
nix profile install nixpkgs#hyprland
```
## From the Flake
{{< /tab >}}
{{< tab "From the Flake" >}}
First, [enable flakes](https://nixos.wiki/wiki/Flakes#Enable_flakes).
Once you have flakes working, install Hyprland through `nix profile`:
NOTE: Make sure to enable [Cachix](../Cachix) first.
```sh
nix profile install github:hyprwm/Hyprland
```
{{< /tab >}}
{{< /tabs >}}
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).
@ -52,3 +59,4 @@ nix profile upgrade '.*'
Check the
[nix profile](https://nixos.org/manual/nix/stable/command-ref/new-cli/nix3-profile.html)
command documentation for other upgrade options.

View file

@ -1,5 +1,5 @@
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
@ -9,7 +9,7 @@ can be changed by setting the appropriate option to `true`/`false`.
### Package
```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;
hidpiXWayland = false;
nvidiaPatches = false;
@ -62,23 +62,9 @@ env = XCURSOR_SIZE,48
```
{{< 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 >}}
### 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 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
the [flake](https://github.com/hyprwm/Hyprland/blob/main/flake.nix) (directly
from the main branch).
To install Hyprland on NixOS, we provide a NixOS and a Home Manager module.
If you use the flake, it is a good idea to set up [Cachix](./Cachix) before
continuing with installing Hyprland.
{{< hint title=note >}}
- *(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
for both. Make sure the package options are the same for both modules.
```nix
{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
[Hyprland on Home Manager](./Hyprland-on-Home-Manager).
For more options, see
[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
will have to enable all the options the NixOS module enables.
## Home-manager module
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).