Hyprland: Difference between revisions

m Update deprecated use of `mesa.drivers` to `mesa`
Phobos (talk | contribs)
m Updates
 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:
[https://hyprland.org/ Hyprland] is an independent, extensible, bleeding-edge [[Wayland]] compositor written in modern C++ with an emphasis on looks. In addition, Hyprland also offers a number of first-party tools as well as a custom plugin system. The most up-to-date and complete documentation can be found in the project's own [https://wiki.hyprland.org/ wiki].  
[https://hyprland.org/ Hyprland] is an independent, extensible, bleeding-edge [[Wayland]] compositor written in modern C++ with an emphasis on looks. In addition, Hyprland also offers a number of first-party tools as well as a custom plugin system. The most up-to-date and complete documentation may be found on the project's own [https://wiki.hyprland.org/ wiki].  


Some of the most notable features of Hyprland are:
Some of the most notable features of Hyprland are:
* '''Independent Wayland implementation''': does not rely on wlroots or other external libraries and provides in-house alternatives to common components (screen locking, idle daemon, etc).
* '''Independent Wayland implementation''': Does not rely on wlroots or other external libraries, and provides an in-house alternatives to common components (screen locking, idle daemon, etc).
* '''Easy to configure''': uses a live reloading config file in plain-text with useful defaults.
* '''Easy to configure''': Uses a live reloading config file in plain-text with useful defaults.
* '''Dynamic tiling support''': supports both automatic tiling and floating mode with multiple layouts.
* '''Dynamic tiling support''': Supports both automatic tiling and floating mode with multiple layouts.
* '''Socket-based IPC''': allows controlling the compositor at runtime via UNIX socket.
* '''Socket-based IPC''': Allows controlling the compositor at runtime via UNIX socket.
* '''Global shortcuts''': permits setting global keybinds for any application (for apps such as [[OBS Studio]]).
* '''Global shortcuts''': Permits setting global keybinds for any application (for apps such as [[OBS Studio]]).
* '''Window/Workspace Rules''': set special behaviors for certain windows and workspaces.
* '''Window/Workspace Rules''': Set special behaviors for certain windows and workspaces.


== Installation ==
== Installation ==
NixOS 24.11 added support for launching Hyprland with [https://github.com/Vladimir-csp/uwsm Universal Wayland Session Manager] (UWSM) and is the recommended way to launch Hyprland as it neatly integrates with [[Systemd]].
NixOS 24.11 added support for launching Hyprland with [https://github.com/Vladimir-csp/uwsm Universal Wayland Session Manager] (UWSM) and is the recommended way to launch Hyprland as it neatly integrates with [[Systemd]]. [[UWSM|Options for configuring UWSM may be found here]]. Also see the Hyprland wiki [https://wiki.hypr.land/Useful-Utilities/Systemd-start/#uwsm page for UWSM here].


{{file|configuration.nix|nix|<nowiki>
{{file|||<nowiki>
{
{
   programs.hyprland = {
   programs.hyprland = {
Line 20: Line 20:
   };
   };
}
}
</nowiki>}}
</nowiki>|name=/etc/nixos/configuration.nix|lang=nix}}{{Warning|If you use the Home Manager module, make sure to disable systemd integration, as it conflicts with UWSM.
</br>
{{File|3=wayland.windowManager.hyprland.systemd.enable = false;
|name=/etc/nixos/home.nix|lang=nix}}}}


=== Nix on Non-NixOS Systems ===
=== Nix on Non-NixOS Systems ===
Line 129: Line 132:
=== Display Manager Support ===
=== Display Manager Support ===
By default, Hyprland does not come with a [https://wiki.nixos.org/wiki/Wayland#Display_Managers display manager] and does not advertise support for one. Though one can start hyprland directly from tty with <code>Hyprland</code> or with <code>uwsm start select</code>, some display managers packaged in NixOS are compatible including but may not be limited to:
By default, Hyprland does not come with a [https://wiki.nixos.org/wiki/Wayland#Display_Managers display manager] and does not advertise support for one. Though one can start hyprland directly from tty with <code>Hyprland</code> or with <code>uwsm start select</code>, some display managers packaged in NixOS are compatible including but may not be limited to:
* SDDM
* [[SDDM]]
* GDM (works but crashes Hyprland on first launch)
* [[GDM]] (works but crashes Hyprland on first launch)
* greetd (especially with ReGreet)
* [[Greetd]] (especially with ReGreet)
* ly (not recommended but works)
* [[Ly]] (not recommended but works)


== Configuration ==
== Configuration ==
Line 138: Line 141:


=== Using [[Home Manager]] ===
=== Using [[Home Manager]] ===
Home Manager allows for declarative configuration of Hyprland using Nix syntax.
Home Manager allows for declarative configuration of Hyprland using Nix syntax. Entries with the same key should be written as lists. Variables’ and colors’ names should be quoted.
 
Find additional options under [https://home-manager.dev/manual/23.11/options.xhtml#opt-wayland.windowManager.hyprland.enable Home Manager - wayland.windowManager.hyprland]. Also, see the [https://wiki.hypr.land/Nix/Hyprland-on-Home-Manager/ Hyprland Page for Home Manager] for more examples.


{{file|/etc/nixos/home.nix or ~/.config/home-manager/home.nix|nix|<nowiki>
{{File|3=wayland.windowManager.hyprland = {
{
   systemd.enable = false;
   wayland.windowManager.hyprland.settings = {
  settings = {
     decoration = {
     decoration = {
       shadow_offset = "0 5";
       shadow_offset = "0 5";
Line 149: Line 154:


     "$mod" = "SUPER";
     "$mod" = "SUPER";
    bind = [
      # Execute Rofi with only the SUPER key
      "$mod, Super_L, exec, pkill rofi {{!}}{{!}} rofi -show drun"
      "$mod, F, exec, librewolf"
      "CONTROL ALT, T, exec, wezterm"
    ];
    # Startup Apps
    exec-once = [
      "hyprpanel"
    ];


     bindm = [
     bindm = [
Line 157: Line 176:
     ];
     ];
   };
   };
  # ...
};|name=/etc/nixos/home.nix|lang=nix}}
}
</nowiki>}}


== Plugin Support ==
== Plugin Support ==
Line 166: Line 183:
The [[Home Manager]] module for Hyprland should be used instead:
The [[Home Manager]] module for Hyprland should be used instead:


{{file|/etc/nixos/home.nix or ~/.config/home-manager/home.nix|nix|<nowiki>
{{File|3={
{
   wayland.windowManager.hyprland.plugins = [
   wayland.windowManager.hyprland.plugins = [
     pkgs.hyprlandPlugins.PLUGIN_NAME
     pkgs.hyprlandPlugins.PLUGIN_NAME
   ];
   ];
}
}|name=/etc/nixos/home.nix|lang=nix}}
</nowiki>}}


=== hyprland-plugins ===
[https://github.com/hyprwm/hyprland-plugins hyprland-plugins] is a repository of first-party plugins. If you wish to use these plugins it is recommended to use the Hyprland flake instead of the Nixpkgs version, and to use the [[Home Manager]] module for configuration.
[https://github.com/hyprwm/hyprland-plugins hyprland-plugins] is a repository of first-party plugins. If you wish to use these plugins then it's recommended to use the Hyprland flake instead of the Nixpkgs version as well as using the [[Home Manager]] module.


Add the flake to your flake inputs:
Add the flake into your flake inputs:
{{file|flake.nix|nix|<nowiki>
{{file|flake.nix|nix|<nowiki>
{
{
Line 193: Line 207:
</nowiki>}}
</nowiki>}}


And then add the plugin using the hyprland-plugins input:
Then, add the plugin using the hyprland-plugins input:


{{file|/etc/nixos/home.nix or ~/.config/home-manager/home.nix|nix|<nowiki>
{{file|/etc/nixos/home.nix or ~/.config/home-manager/home.nix|nix|<nowiki>