mirror of
https://github.com/hyprwm/hyprland-wiki.git
synced 2024-11-24 05:35:58 +01:00
wiki: prepare for hextra
treewide: replace hint with callout treewide: remove ToC header remove <toc>, since it's autogenerated add missing _index.md treewide: add frontmatter treewide: fix headings add weights Configuring,Getting Started: expand in sidebar Add version selector fix links
This commit is contained in:
parent
27b9014e80
commit
0aae54eb6a
63 changed files with 2027 additions and 1134 deletions
|
@ -1,8 +1,9 @@
|
||||||
# Table of contents
|
---
|
||||||
|
weight: 9
|
||||||
|
title: Animations
|
||||||
|
---
|
||||||
|
|
||||||
{{< toc >}}
|
## General
|
||||||
|
|
||||||
# General
|
|
||||||
|
|
||||||
Animations are declared with the `animation` keyword.
|
Animations are declared with the `animation` keyword.
|
||||||
|
|
||||||
|
@ -12,7 +13,8 @@ or
|
||||||
animation=NAME,ONOFF,SPEED,CURVE
|
animation=NAME,ONOFF,SPEED,CURVE
|
||||||
```
|
```
|
||||||
|
|
||||||
`ONOFF` can be either 0 or 1, 0 to disable, 1 to enable. _note:_ if it's 0, you can omit further args.
|
`ONOFF` can be either 0 or 1, 0 to disable, 1 to enable. _note:_ if it's 0, you
|
||||||
|
can omit further args.
|
||||||
|
|
||||||
`SPEED` is the amount of ds (1ds = 100ms) the animation will take
|
`SPEED` is the amount of ds (1ds = 100ms) the animation will take
|
||||||
|
|
||||||
|
@ -23,7 +25,7 @@ animation=NAME,ONOFF,SPEED,CURVE
|
||||||
The animations are a tree. If an animation is unset, it will inherit its
|
The animations are a tree. If an animation is unset, it will inherit its
|
||||||
parent's values. See [the animation tree](#animation-tree).
|
parent's values. See [the animation tree](#animation-tree).
|
||||||
|
|
||||||
## Examples
|
### Examples
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
animation=workspaces,1,8,default
|
animation=workspaces,1,8,default
|
||||||
|
@ -31,7 +33,7 @@ animation=windows,1,10,myepiccurve,slide
|
||||||
animation=fade,0
|
animation=fade,0
|
||||||
```
|
```
|
||||||
|
|
||||||
## Animation tree
|
### Animation tree
|
||||||
|
|
||||||
```txt
|
```txt
|
||||||
global
|
global
|
||||||
|
@ -53,7 +55,7 @@ global
|
||||||
↳ specialWorkspace - styles: same as workspaces
|
↳ specialWorkspace - styles: same as workspaces
|
||||||
```
|
```
|
||||||
|
|
||||||
# Curves
|
## Curves
|
||||||
|
|
||||||
Defining your own Bezier curve can be done with the `bezier` keyword:
|
Defining your own Bezier curve can be done with the `bezier` keyword:
|
||||||
|
|
||||||
|
@ -63,28 +65,30 @@ bezier=NAME,X0,Y0,X1,Y1
|
||||||
|
|
||||||
where `NAME` is the name, and the rest are two points for the Cubic Bezier. A
|
where `NAME` is the name, and the rest are two points for the Cubic Bezier. A
|
||||||
good website to design your bezier can be found
|
good website to design your bezier can be found
|
||||||
[here, on cssportal.com](https://www.cssportal.com/css-cubic-bezier-generator/), but
|
[here, on cssportal.com](https://www.cssportal.com/css-cubic-bezier-generator/),
|
||||||
if you want to instead choose from a list of beziers, you can check out [easings.net](https://easings.net).
|
but if you want to instead choose from a list of beziers, you can check out
|
||||||
|
[easings.net](https://easings.net).
|
||||||
|
|
||||||
## Example
|
### Example
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
bezier=overshot,0.05,0.9,0.1,1.1
|
bezier=overshot,0.05,0.9,0.1,1.1
|
||||||
```
|
```
|
||||||
|
|
||||||
# Extras
|
### Extras
|
||||||
|
|
||||||
For animation style `popin` in `windows`, you can specify a minimum percentage
|
For animation style `popin` in `windows`, you can specify a minimum percentage
|
||||||
to start from. For example, the following will make the animation 80% -> 100% of the size:
|
to start from. For example, the following will make the animation 80% -> 100% of
|
||||||
|
the size:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
animation=windows,1,8,default,popin 80%
|
animation=windows,1,8,default,popin 80%
|
||||||
```
|
```
|
||||||
|
|
||||||
For animation styles `slidefade` and `slidefadevert` in `workspaces`, you can specify a movement
|
For animation styles `slidefade` and `slidefadevert` in `workspaces`, you can
|
||||||
percentage. For example, the following will make windows move 20% of the screen width:
|
specify a movement percentage. For example, the following will make windows move
|
||||||
|
20% of the screen width:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
animation=workspaces,1,8,default,slidefade 20%
|
animation=workspaces,1,8,default,slidefade 20%
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
# Table of Contents
|
---
|
||||||
|
weight: 5
|
||||||
|
title: Binds
|
||||||
|
---
|
||||||
|
|
||||||
{{< toc >}}
|
## Basic
|
||||||
|
|
||||||
# Basic
|
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
bind=MODS,key,dispatcher,params
|
bind=MODS,key,dispatcher,params
|
||||||
|
@ -16,18 +17,20 @@ bind=SUPER_SHIFT,Q,exec,firefox
|
||||||
|
|
||||||
will bind opening firefox to <key>SUPER</key> + <key>SHIFT</key> + <key>Q</key>
|
will bind opening firefox to <key>SUPER</key> + <key>SHIFT</key> + <key>Q</key>
|
||||||
|
|
||||||
{{< hint type=tip >}}
|
{{< callout type=info >}}
|
||||||
|
|
||||||
For binding keys without a modkey, leave it empty:
|
For binding keys without a modkey, leave it empty:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
bind=,Print,exec,grim
|
bind=,Print,exec,grim
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< /hint >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
_For a complete mod list, see [Variables](../Variables/#variable-types)._
|
_For a complete mod list, see [Variables](../variables/#variable-types)._
|
||||||
|
|
||||||
_The dispatcher list can be found in [Dispatchers](../Dispatchers/#list-of-dispatchers)._
|
_The dispatcher list can be found in
|
||||||
|
[Dispatchers](../dispatchers/#list-of-dispatchers)._
|
||||||
|
|
||||||
## Uncommon syms / binding with a keycode
|
## Uncommon syms / binding with a keycode
|
||||||
|
|
||||||
|
@ -35,11 +38,11 @@ See the
|
||||||
[xkbcommon-keysyms.h header](https://github.com/xkbcommon/libxkbcommon/blob/master/include/xkbcommon/xkbcommon-keysyms.h)
|
[xkbcommon-keysyms.h header](https://github.com/xkbcommon/libxkbcommon/blob/master/include/xkbcommon/xkbcommon-keysyms.h)
|
||||||
for all the keysyms. The name you should use is the segment after `XKB_KEY_`.
|
for all the keysyms. The name you should use is the segment after `XKB_KEY_`.
|
||||||
|
|
||||||
If you are unsure of what your key's name is, you can
|
If you are unsure of what your key's name is, you can use `xev` or `wev` to find
|
||||||
use `xev` or `wev` to find that information.
|
that information.
|
||||||
|
|
||||||
If you want to bind by a keycode, you can just input it in the KEY position with a `code:` prefix,
|
If you want to bind by a keycode, you can just input it in the KEY position with
|
||||||
e.g.:
|
a `code:` prefix, e.g.:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
bind=SUPER,code:28,exec,amongus
|
bind=SUPER,code:28,exec,amongus
|
||||||
|
@ -48,9 +51,9 @@ bind=SUPER,code:28,exec,amongus
|
||||||
Will bind <key>SUPER</key> + <key>T</key>. (<key>T</key> is keycode 28.) - You
|
Will bind <key>SUPER</key> + <key>T</key>. (<key>T</key> is keycode 28.) - You
|
||||||
can also use `xev` or `wev` to find keycodes.
|
can also use `xev` or `wev` to find keycodes.
|
||||||
|
|
||||||
# Misc
|
## Misc
|
||||||
|
|
||||||
## Unbind
|
### Unbind
|
||||||
|
|
||||||
You can also unbind with `unbind`, e.g.:
|
You can also unbind with `unbind`, e.g.:
|
||||||
|
|
||||||
|
@ -64,7 +67,7 @@ May be useful for dynamic keybindings with `hyprctl`.
|
||||||
hyprctl keyword unbind SUPER,O
|
hyprctl keyword unbind SUPER,O
|
||||||
```
|
```
|
||||||
|
|
||||||
## Mouse buttons
|
### Mouse buttons
|
||||||
|
|
||||||
You can also bind mouse buttons, by prefacing the mouse keycode with `mouse:`,
|
You can also bind mouse buttons, by prefacing the mouse keycode with `mouse:`,
|
||||||
for example:
|
for example:
|
||||||
|
@ -75,7 +78,7 @@ bind=SUPER,mouse:272,exec,amongus
|
||||||
|
|
||||||
will bind it to <key>SUPER</key> + <key>LMB</key>.
|
will bind it to <key>SUPER</key> + <key>LMB</key>.
|
||||||
|
|
||||||
## Only modkeys
|
### Only modkeys
|
||||||
|
|
||||||
For binding only modkeys, you need to use the TARGET modmask (with the
|
For binding only modkeys, you need to use the TARGET modmask (with the
|
||||||
activating mod) and the `r` flag, e.g.:
|
activating mod) and the `r` flag, e.g.:
|
||||||
|
@ -84,9 +87,10 @@ activating mod) and the `r` flag, e.g.:
|
||||||
bindr=SUPERALT,Alt_L,exec,amongus
|
bindr=SUPERALT,Alt_L,exec,amongus
|
||||||
```
|
```
|
||||||
|
|
||||||
## Mouse wheel
|
### Mouse wheel
|
||||||
|
|
||||||
You can also bind the mouse wheel with `mouse_up` and `mouse_down` (or `mouse_left` and `mouse_right` if your wheel supports horizontal scrolling):
|
You can also bind the mouse wheel with `mouse_up` and `mouse_down` (or
|
||||||
|
`mouse_left` and `mouse_right` if your wheel supports horizontal scrolling):
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
bind=SUPER,mouse_down,workspace,e-1
|
bind=SUPER,mouse_down,workspace,e-1
|
||||||
|
@ -94,7 +98,7 @@ bind=SUPER,mouse_down,workspace,e-1
|
||||||
|
|
||||||
(control the reset time with `binds:scroll_event_delay`)
|
(control the reset time with `binds:scroll_event_delay`)
|
||||||
|
|
||||||
## Switches
|
### Switches
|
||||||
|
|
||||||
Useful for binding e.g. the lid close/open event:
|
Useful for binding e.g. the lid close/open event:
|
||||||
|
|
||||||
|
@ -109,9 +113,10 @@ bindl=,switch:off:[switch name],exec,hyprctl keyword monitor "eDP-1, 2560x1600,
|
||||||
|
|
||||||
check out your switches in `hyprctl devices`.
|
check out your switches in `hyprctl devices`.
|
||||||
|
|
||||||
## Multiple binds to one key
|
### Multiple binds to one key
|
||||||
|
|
||||||
You can trigger multiple actions with one keybind by assigning multiple binds to one combination, e.g.:
|
You can trigger multiple actions with one keybind by assigning multiple binds to
|
||||||
|
one combination, e.g.:
|
||||||
|
|
||||||
```
|
```
|
||||||
# to switch between windows in a floating workspace
|
# to switch between windows in a floating workspace
|
||||||
|
@ -121,7 +126,7 @@ bind = SUPER,Tab,bringactivetotop, # bring it to the top
|
||||||
|
|
||||||
The keybinds will be executed in the order they were created. (top to bottom)
|
The keybinds will be executed in the order they were created. (top to bottom)
|
||||||
|
|
||||||
# Bind flags
|
## Bind flags
|
||||||
|
|
||||||
`bind` supports flags in this format:
|
`bind` supports flags in this format:
|
||||||
|
|
||||||
|
@ -162,10 +167,10 @@ bindr=SUPER, SUPER_L, exec, pkill wofi || wofi
|
||||||
# See Mouse Binds section for bindm usage
|
# See Mouse Binds section for bindm usage
|
||||||
```
|
```
|
||||||
|
|
||||||
# Mouse Binds
|
## Mouse Binds
|
||||||
|
|
||||||
Mouse binds are binds that heavily rely on a mouse, usually its movement.
|
Mouse binds are binds that heavily rely on a mouse, usually its movement. They
|
||||||
They will have one less arg, and look for example like this:
|
will have one less arg, and look for example like this:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
bindm=ALT,mouse:272,movewindow
|
bindm=ALT,mouse:272,movewindow
|
||||||
|
@ -177,8 +182,8 @@ with your mouse.
|
||||||
_Available mouse binds_:
|
_Available mouse binds_:
|
||||||
|
|
||||||
| Name | Description | Params |
|
| Name | Description | Params |
|
||||||
| -----|------------ |--------|
|
| --- | --- | --- |
|
||||||
| movewindow | moves the active window | none |
|
| movewindow | moves the active window | none |
|
||||||
| resizewindow | resizes the active window | 1 - resize and keep window aspect ratio, 2 - resize and ignore `keepaspectratio` window rule/prop, none or anything else for normal resize |
|
| resizewindow | resizes the active window | 1 - resize and keep window aspect ratio, 2 - resize and ignore `keepaspectratio` window rule/prop, none or anything else for normal resize |
|
||||||
|
|
||||||
_Common mouse buttons' codes:_
|
_Common mouse buttons' codes:_
|
||||||
|
@ -190,12 +195,15 @@ RMB -> 273
|
||||||
|
|
||||||
_for more, you can of course use `wev` to check._
|
_for more, you can of course use `wev` to check._
|
||||||
|
|
||||||
{{< hint type=tip >}}
|
{{< callout type=info >}}
|
||||||
Mouse binds, despite their name, behave like normal binds. You are free to use
|
|
||||||
whatever keys / mods you please. When held, the mouse function will be activated.
|
|
||||||
{{< /hint >}}
|
|
||||||
|
|
||||||
# Binding mods
|
Mouse binds, despite their name, behave like normal binds. You are free to use
|
||||||
|
whatever keys / mods you please. When held, the mouse function will be
|
||||||
|
activated.
|
||||||
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
|
## Binding mods
|
||||||
|
|
||||||
You can bind a mod alone like this:
|
You can bind a mod alone like this:
|
||||||
|
|
||||||
|
@ -203,13 +211,14 @@ You can bind a mod alone like this:
|
||||||
bindr=ALT,Alt_L,exec,amongus
|
bindr=ALT,Alt_L,exec,amongus
|
||||||
```
|
```
|
||||||
|
|
||||||
# Global Keybinds
|
## Global Keybinds
|
||||||
|
|
||||||
|
### Classic
|
||||||
|
|
||||||
## Classic
|
|
||||||
Yes, you heard this right, Hyprland does support global keybinds for ALL apps,
|
Yes, you heard this right, Hyprland does support global keybinds for ALL apps,
|
||||||
including OBS, Discord, Firefox, etc.
|
including OBS, Discord, Firefox, etc.
|
||||||
|
|
||||||
See the [`pass` dispatcher](../Dispatchers/#list-of-dispatchers) for keybinds.
|
See the [`pass` dispatcher](../dispatchers/#list-of-dispatchers) for keybinds.
|
||||||
|
|
||||||
Let's take OBS as an example: the "Start/Stop Recording" keybind is set to
|
Let's take OBS as an example: the "Start/Stop Recording" keybind is set to
|
||||||
<key>SUPER</key> + <key>F10</key>, and you want to make it work globally.
|
<key>SUPER</key> + <key>F10</key>, and you want to make it work globally.
|
||||||
|
@ -231,21 +240,24 @@ bind=,mouse:276,pass,^(TeamSpeak 3)$
|
||||||
|
|
||||||
Will pass MOUSE5 to TeamSpeak3.
|
Will pass MOUSE5 to TeamSpeak3.
|
||||||
|
|
||||||
{{< hint type=important >}}
|
{{< callout >}}
|
||||||
|
|
||||||
XWayland is a bit wonky. Make sure that what you're passing is a "global Xorg
|
XWayland is a bit wonky. Make sure that what you're passing is a "global Xorg
|
||||||
keybind", otherwise passing from a different XWayland app may not work.
|
keybind", otherwise passing from a different XWayland app may not work.
|
||||||
|
|
||||||
It works flawlessly with all native Wayland applications though.
|
It works flawlessly with all native Wayland applications though.
|
||||||
{{< /hint >}}
|
|
||||||
|
|
||||||
## DBus Global Shortcuts
|
{{< /callout >}}
|
||||||
|
|
||||||
Some applications may already support the GlobalShortcuts portal in xdg-desktop-portal.
|
### DBus Global Shortcuts
|
||||||
|
|
||||||
|
Some applications may already support the GlobalShortcuts portal in
|
||||||
|
xdg-desktop-portal.
|
||||||
|
|
||||||
If that's the case, then it's recommended to use this method instead of `pass`.
|
If that's the case, then it's recommended to use this method instead of `pass`.
|
||||||
|
|
||||||
Open your desired app and issue `hyprctl globalshortcuts`. This will give you a list
|
Open your desired app and issue `hyprctl globalshortcuts`. This will give you a
|
||||||
of currently registered shortcuts with their description(s).
|
list of currently registered shortcuts with their description(s).
|
||||||
|
|
||||||
Choose whichever you like, for example `coolApp:myToggle`
|
Choose whichever you like, for example `coolApp:myToggle`
|
||||||
|
|
||||||
|
@ -255,16 +267,18 @@ Bind it to whatever you want with the `global` dispatcher:
|
||||||
bind = SUPERSHIFT, A, global, coolApp:myToggle
|
bind = SUPERSHIFT, A, global, coolApp:myToggle
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< hint type=tip >}}
|
{{< callout type=info >}}
|
||||||
Please note that this function will _only_ work with [XDPH](../../Useful-Utilities/Hyprland-desktop-portal).
|
|
||||||
{{</ hint >}}
|
|
||||||
|
|
||||||
# Submaps
|
Please note that this function will _only_ work with
|
||||||
|
[XDPH](../../hyprland-ecosystem/xdg-desktop-portal-hyprland).
|
||||||
|
|
||||||
|
{{</ callout >}}
|
||||||
|
|
||||||
|
## Submaps
|
||||||
|
|
||||||
If you want keybind submaps, also known as _modes_ or _groups_, for example if
|
If you want keybind submaps, also known as _modes_ or _groups_, for example if
|
||||||
you press <key>ALT</key> + <key>R</key>, you can enter a "resize" mode,
|
you press <key>ALT</key> + <key>R</key>, you can enter a "resize" mode, resize
|
||||||
resize with arrow keys, and leave
|
with arrow keys, and leave with escape, do it like this:
|
||||||
with escape, do it like this:
|
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
# will switch to a submap called resize
|
# will switch to a submap called resize
|
||||||
|
@ -288,11 +302,16 @@ submap=reset
|
||||||
# keybinds further down will be global again...
|
# keybinds further down will be global again...
|
||||||
```
|
```
|
||||||
|
|
||||||
**IMPORTANT:** do not forget a keybind to reset the keymap while inside it! (In
|
{{< callout type=warning >}}
|
||||||
this case, `escape`)
|
|
||||||
|
Do not forget a keybind to reset the keymap while inside it! (In this case,
|
||||||
|
`escape`)
|
||||||
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
If you get stuck inside a keymap, you can use `hyprctl dispatch submap reset` to
|
If you get stuck inside a keymap, you can use `hyprctl dispatch submap reset` to
|
||||||
go back. If you do not have a terminal open, tough luck buddy. You have been warned.
|
go back. If you do not have a terminal open, tough luck buddy. You have been
|
||||||
|
warned.
|
||||||
|
|
||||||
You can also set the same keybind to perform multiple actions, such as resize
|
You can also set the same keybind to perform multiple actions, such as resize
|
||||||
and close the submap, like so:
|
and close the submap, like so:
|
||||||
|
@ -314,16 +333,18 @@ assigning multiple actions per bind is possible.
|
||||||
|
|
||||||
## Catch-All
|
## Catch-All
|
||||||
|
|
||||||
You can also define a keybind via the special `catchall` keyword, which activates no matter which key is pressed.
|
You can also define a keybind via the special `catchall` keyword, which
|
||||||
This can be used to prevent any keys from passing to your active application while in a submap or to exit it immediately when any unknown key is pressed:
|
activates no matter which key is pressed. This can be used to prevent any keys
|
||||||
|
from passing to your active application while in a submap or to exit it
|
||||||
|
immediately when any unknown key is pressed:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
bind=,catchall,submap,reset
|
bind=,catchall,submap,reset
|
||||||
```
|
```
|
||||||
|
|
||||||
# Example Binds
|
## Example Binds
|
||||||
|
|
||||||
## Media
|
### Media
|
||||||
|
|
||||||
These binds set the expected behavior for regular keyboard media volume keys,
|
These binds set the expected behavior for regular keyboard media volume keys,
|
||||||
including when the screen is locked:
|
including when the screen is locked:
|
||||||
|
|
|
@ -1,9 +1,16 @@
|
||||||
|
---
|
||||||
|
weight: 1
|
||||||
|
title: Configuring Hyprland
|
||||||
|
---
|
||||||
|
|
||||||
The config is located in `~/.config/hypr/hyprland.conf`.
|
The config is located in `~/.config/hypr/hyprland.conf`.
|
||||||
|
|
||||||
You can tell Hyprland to use a specific configuration file by using the `--config` (or `-c`) argument.
|
You can tell Hyprland to use a specific configuration file by using the
|
||||||
|
`--config` (or `-c`) argument.
|
||||||
|
|
||||||
Hyprland will automatically generate an example config for you if
|
Hyprland will automatically generate an example config for you if you don't have
|
||||||
you don't have one. You can find an example config [here](https://github.com/hyprwm/Hyprland/blob/main/example/hyprland.conf).
|
one. You can find an example config
|
||||||
|
[here](https://github.com/hyprwm/Hyprland/blob/main/example/hyprland.conf).
|
||||||
|
|
||||||
By removing the line `autogenerated=1` you'll remove the yellow warning.
|
By removing the line `autogenerated=1` you'll remove the yellow warning.
|
||||||
|
|
||||||
|
@ -11,16 +18,18 @@ There is no "reload" keybind. The config is reloaded the moment you save it.
|
||||||
|
|
||||||
Start a section with `name {` and end in `}` **_in separate lines!_**
|
Start a section with `name {` and end in `}` **_in separate lines!_**
|
||||||
|
|
||||||
{{< hint type=important >}}
|
{{< callout >}}
|
||||||
The default config is not complete and does not list all the options / features of Hyprland.
|
|
||||||
Please refer to this wiki page and the pages
|
|
||||||
linked further down here for full configuration instructions.
|
|
||||||
|
|
||||||
**Make sure to read the [Variables](../Variables) page as well**. It covers all the
|
The default config is not complete and does not list all the options / features
|
||||||
toggleable / numerical options.
|
of Hyprland. Please refer to this wiki page and the pages linked further down
|
||||||
{{< /hint >}}
|
here for full configuration instructions.
|
||||||
|
|
||||||
# Line style
|
**Make sure to read the [Variables](../variables) page as well**. It covers all
|
||||||
|
the toggleable / numerical options.
|
||||||
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
|
## Line style
|
||||||
|
|
||||||
Every config line is a command followed by a value.
|
Every config line is a command followed by a value.
|
||||||
|
|
||||||
|
@ -41,22 +50,21 @@ COMMAND = VALUE
|
||||||
|
|
||||||
is valid.
|
is valid.
|
||||||
|
|
||||||
## Comments
|
### Comments
|
||||||
|
|
||||||
Comments are started with the `#` character.
|
Comments are started with the `#` character.
|
||||||
|
|
||||||
If you want to escape it (put an actual `#` and not start a comment)
|
If you want to escape it (put an actual `#` and not start a comment) you can use
|
||||||
you can use `##`. It will be turned into a single `#` that WILL be a part of your
|
`##`. It will be turned into a single `#` that WILL be a part of your line.
|
||||||
line.
|
|
||||||
|
|
||||||
# Basic configuring
|
## Basic configuring
|
||||||
|
|
||||||
To configure the "options" of Hyprland, animations, styling, etc. see
|
To configure the "options" of Hyprland, animations, styling, etc. see
|
||||||
[Variables](../Variables).
|
[Variables](../variables).
|
||||||
|
|
||||||
# Advanced configuring
|
## Advanced configuring
|
||||||
|
|
||||||
Some keywords (binds, curves, execs, monitors, etc.) are not variables but define
|
Some keywords (binds, curves, execs, monitors, etc.) are not variables but
|
||||||
special behavior.
|
define special behavior.
|
||||||
|
|
||||||
See all of them in [Keywords](../Keywords) and the sidebar.
|
See all of them in [Keywords](../keywords) and the sidebar.
|
||||||
|
|
|
@ -1,14 +1,15 @@
|
||||||
# Table of contents
|
---
|
||||||
|
weight: 6
|
||||||
{{< toc >}}
|
title: Dispatchers
|
||||||
|
---
|
||||||
|
|
||||||
Please keep in mind some layout-specific dispatchers will be listed in the
|
Please keep in mind some layout-specific dispatchers will be listed in the
|
||||||
layout pages (See the sidebar).
|
layout pages (See the sidebar).
|
||||||
|
|
||||||
# Parameter explanation
|
## Parameter explanation
|
||||||
|
|
||||||
| Param type | Description |
|
| Param type | Description |
|
||||||
| ---------- | ----------- |
|
| --- | --- |
|
||||||
| window | a window. Any of the following: Class regex, `title:` and a title regex, `pid:` and the pid, `address:` and the address, `floating`, `tiled` |
|
| window | a window. Any of the following: Class regex, `title:` and a title regex, `pid:` and the pid, `address:` and the address, `floating`, `tiled` |
|
||||||
| workspace | see below. |
|
| workspace | see below. |
|
||||||
| direction | `l` `r` `u` `d` left right up down |
|
| direction | `l` `r` `u` `d` left right up down |
|
||||||
|
@ -17,10 +18,10 @@ layout pages (See the sidebar).
|
||||||
| floatvalue | a relative float delta (e.g `-0.2` or `+0.2`) or `exact` followed by a the exact float value (e.g. `exact 0.5`) |
|
| floatvalue | a relative float delta (e.g `-0.2` or `+0.2`) or `exact` followed by a the exact float value (e.g. `exact 0.5`) |
|
||||||
| zheight | `top` or `bottom` |
|
| zheight | `top` or `bottom` |
|
||||||
|
|
||||||
# List of Dispatchers
|
## List of Dispatchers
|
||||||
|
|
||||||
| Dispatcher | Description | Params |
|
| Dispatcher | Description | Params |
|
||||||
| ---------- | ----------- | ------ |
|
| --- | --- | --- |
|
||||||
| exec | executes a shell command | command (supports rules, see [below]({{< relref "#executing-with-rules" >}})) |
|
| exec | executes a shell command | command (supports rules, see [below]({{< relref "#executing-with-rules" >}})) |
|
||||||
| execr | executes a raw shell command (does not support rules) | command |
|
| execr | executes a raw shell command (does not support rules) | command |
|
||||||
| pass | passes the key (with mods) to a specified window. Can be used as a workaround to global keybinds not working on Wayland. | window |
|
| pass | passes the key (with mods) to a specified window. Can be used as a workaround to global keybinds not working on Wayland. | window |
|
||||||
|
@ -33,11 +34,11 @@ layout pages (See the sidebar).
|
||||||
| fullscreen | toggles the focused window's fullscreen state | 0 - fullscreen (takes your entire screen), 1 - maximize (keeps gaps and bar(s)), 2 - fullscreen (same as fullscreen except doesn't alter window's internal fullscreen state) |
|
| fullscreen | toggles the focused window's fullscreen state | 0 - fullscreen (takes your entire screen), 1 - maximize (keeps gaps and bar(s)), 2 - fullscreen (same as fullscreen except doesn't alter window's internal fullscreen state) |
|
||||||
| fakefullscreen | toggles the focused window's internal fullscreen state without altering the geometry | none |
|
| fakefullscreen | toggles the focused window's internal fullscreen state without altering the geometry | none |
|
||||||
| dpms | sets all monitors' DPMS status. Do not use with a keybind directly. | `on`, `off`, or `toggle`. For specific monitor add monitor name after a space |
|
| dpms | sets all monitors' DPMS status. Do not use with a keybind directly. | `on`, `off`, or `toggle`. For specific monitor add monitor name after a space |
|
||||||
| pin | pins a window (i.e. show it on all workspaces) *note: floating only* | left empty / `active` for current, or `window` for a specific window |
|
| pin | pins a window (i.e. show it on all workspaces) _note: floating only_ | left empty / `active` for current, or `window` for a specific window |
|
||||||
| movefocus | moves the focus in a direction | direction |
|
| movefocus | moves the focus in a direction | direction |
|
||||||
| movewindow | moves the active window in a direction or to a monitor. For floating windows, moves the window to the screen edge in that direction | direction or `mon:` and a monitor |
|
| movewindow | moves the active window in a direction or to a monitor. For floating windows, moves the window to the screen edge in that direction | direction or `mon:` and a monitor |
|
||||||
| swapwindow | swaps the active window with another window in the given direction | direction |
|
| swapwindow | swaps the active window with another window in the given direction | direction |
|
||||||
| centerwindow | center the active window *note: floating only* | none (for monitor center) or 1 (to respect monitor reserved area) |
|
| centerwindow | center the active window _note: floating only_ | none (for monitor center) or 1 (to respect monitor reserved area) |
|
||||||
| resizeactive | resizes the active window | resizeparams |
|
| resizeactive | resizes the active window | resizeparams |
|
||||||
| moveactive | moves the active window | resizeparams |
|
| moveactive | moves the active window | resizeparams |
|
||||||
| resizewindowpixel | resizes a selected window | `resizeparams,window`, e.g. `100 100,^(kitty)$` |
|
| resizewindowpixel | resizes a selected window | `resizeparams,window`, e.g. `100 100,^(kitty)$` |
|
||||||
|
@ -57,12 +58,12 @@ layout pages (See the sidebar).
|
||||||
| focusworkspaceoncurrentmonitor | Focuses the requested workspace on the current monitor, swapping the current workspace to a different monitor if necessary. If you want XMonad/Qtile-style workspace switching, replace `workspace` in your config with this. | workspace |
|
| focusworkspaceoncurrentmonitor | Focuses the requested workspace on the current monitor, swapping the current workspace to a different monitor if necessary. If you want XMonad/Qtile-style workspace switching, replace `workspace` in your config with this. | workspace |
|
||||||
| moveworkspacetomonitor | Moves a workspace to a monitor | workspace and a monitor separated by a space |
|
| moveworkspacetomonitor | Moves a workspace to a monitor | workspace and a monitor separated by a space |
|
||||||
| swapactiveworkspaces | Swaps the active workspaces between two monitors | two monitors separated by a space |
|
| swapactiveworkspaces | Swaps the active workspaces between two monitors | two monitors separated by a space |
|
||||||
| bringactivetotop | *Deprecated* in favor of alterzorder. Brings the current window to the top of the stack | none |
|
| bringactivetotop | _Deprecated_ in favor of alterzorder. Brings the current window to the top of the stack | none |
|
||||||
| alterzorder | Modify the window stack order of the active or specified window. Note: this cannot be used to move a floating window behind a tiled one. | zheight[,window] |
|
| alterzorder | Modify the window stack order of the active or specified window. Note: this cannot be used to move a floating window behind a tiled one. | zheight[,window] |
|
||||||
| togglespecialworkspace | toggles a special workspace on/off | none (for the first) or name for named (name has to be a special workspace's name) |
|
| togglespecialworkspace | toggles a special workspace on/off | none (for the first) or name for named (name has to be a special workspace's name) |
|
||||||
| focusurgentorlast | Focuses the urgent window or the last window | none |
|
| focusurgentorlast | Focuses the urgent window or the last window | none |
|
||||||
| togglegroup | toggles the current active window into a group | none |
|
| togglegroup | toggles the current active window into a group | none |
|
||||||
| changegroupactive | switches to the next window in a group. | b - back, f - forward, or index start at 1 |
|
| changegroupactive | switches to the next window in a group. | b - back, f - forward, or index start at 1 |
|
||||||
| focuscurrentorlast | Switch focus from current to previously focused window | none |
|
| focuscurrentorlast | Switch focus from current to previously focused window | none |
|
||||||
| lockgroups | Locks the groups (all groups will not accept new windows) | `lock` for locking, `unlock` for unlocking, `toggle` for toggle |
|
| lockgroups | Locks the groups (all groups will not accept new windows) | `lock` for locking, `unlock` for unlocking, `toggle` for toggle |
|
||||||
| lockactivegroup | Lock the focused group (the current group will not accept new windows or be moved to other groups) | `lock` for locking, `unlock` for unlocking, `toggle` for toggle |
|
| lockactivegroup | Lock the focused group (the current group will not accept new windows or be moved to other groups) | `lock` for locking, `unlock` for unlocking, `toggle` for toggle |
|
||||||
|
@ -72,35 +73,43 @@ layout pages (See the sidebar).
|
||||||
| movegroupwindow | Swaps the active window with the next or previous in a group | `b` for back, anything else for forward |
|
| movegroupwindow | Swaps the active window with the next or previous in a group | `b` for back, anything else for forward |
|
||||||
| denywindowfromgroup | Prohibit the active window from becoming or being inserted into group | `on`, `off` or, `toggle` |
|
| denywindowfromgroup | Prohibit the active window from becoming or being inserted into group | `on`, `off` or, `toggle` |
|
||||||
| setignoregrouplock | Temporarily enable or disable binds:ignore_group_lock | `on`, `off`, or `toggle` |
|
| setignoregrouplock | Temporarily enable or disable binds:ignore_group_lock | `on`, `off`, or `toggle` |
|
||||||
| global | Executes a Global Shortcut using the GlobalShortcuts portal. See [here](../Binds/#global-keybinds) | name |
|
| global | Executes a Global Shortcut using the GlobalShortcuts portal. See [here](../binds/#global-keybinds) | name |
|
||||||
| submap | Change the current mapping group. See [Submaps](../Binds/#submaps) | `reset` or name |
|
| submap | Change the current mapping group. See [Submaps](../binds/#submaps) | `reset` or name |
|
||||||
|
|
||||||
{{< hint type=warning >}}
|
{{< callout type=warning >}}
|
||||||
it is NOT recommended to set DPMS with a keybind directly, as it
|
|
||||||
might cause undefined behavior. Instead, consider something like
|
it is NOT recommended to set DPMS with a keybind directly, as it might cause
|
||||||
|
undefined behavior. Instead, consider something like
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
bind = MOD,KEY,exec,sleep 1 && hyprctl dispatch dpms off
|
bind = MOD,KEY,exec,sleep 1 && hyprctl dispatch dpms off
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< /hint >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
## Grouped (tabbed) windows
|
### Grouped (tabbed) windows
|
||||||
|
|
||||||
Hyprland allows you to make a group from the current active window with the `togglegroup` bind dispatcher.
|
Hyprland allows you to make a group from the current active window with the
|
||||||
|
`togglegroup` bind dispatcher.
|
||||||
|
|
||||||
A group is like i3wm’s “tabbed” container. It takes the space of one window, and you can change the window to the next one in the tabbed “group” with the `changegroupactive` bind dispatcher.
|
A group is like i3wm’s “tabbed” container. It takes the space of one window, and
|
||||||
|
you can change the window to the next one in the tabbed “group” with the
|
||||||
|
`changegroupactive` bind dispatcher.
|
||||||
|
|
||||||
The new group’s border colors are configurable with the appropriate `col.` settings in the `group` config section.
|
The new group’s border colors are configurable with the appropriate `col.`
|
||||||
|
settings in the `group` config section.
|
||||||
|
|
||||||
You can lock a group with the `lockactivegroup` dispatcher in order to stop new window from entering this group.
|
You can lock a group with the `lockactivegroup` dispatcher in order to stop new
|
||||||
In addition, the `lockgroups` dispatcher can be used to toggle an independent global group lock that will prevent
|
window from entering this group. In addition, the `lockgroups` dispatcher can be
|
||||||
new window from entering any groups, regardless of their local group lock stat.
|
used to toggle an independent global group lock that will prevent new window
|
||||||
|
from entering any groups, regardless of their local group lock stat.
|
||||||
|
|
||||||
You can prevent a window from being added to group or becoming a group with the `denywindowfromgroup` dispatcher.
|
You can prevent a window from being added to group or becoming a group with the
|
||||||
`movewindoworgroup` will behave like `movewindow` if current active window or window in direction has this property set.
|
`denywindowfromgroup` dispatcher. `movewindoworgroup` will behave like
|
||||||
|
`movewindow` if current active window or window in direction has this property
|
||||||
|
set.
|
||||||
|
|
||||||
# Workspaces
|
## Workspaces
|
||||||
|
|
||||||
You have eight choices:
|
You have eight choices:
|
||||||
|
|
||||||
|
@ -122,28 +131,36 @@ You have eight choices:
|
||||||
|
|
||||||
- Special Workspace: `special` or `special:name` for named special workspaces.
|
- Special Workspace: `special` or `special:name` for named special workspaces.
|
||||||
|
|
||||||
{{< hint type=warning >}}
|
{{< callout type=warning >}}
|
||||||
`special` is supported ONLY on
|
|
||||||
`movetoworkspace` and `movetoworkspacesilent`. Any other dispatcher will result in undocumented behavior.
|
|
||||||
{{< /hint >}}
|
|
||||||
|
|
||||||
{{< hint type=important >}}
|
`special` is supported ONLY on `movetoworkspace` and `movetoworkspacesilent`.
|
||||||
Numerical workspaces (e.g. `1`, `2`, `13371337`) are allowed
|
Any other dispatcher will result in undocumented behavior.
|
||||||
**ONLY** between 1 and 2147483647 (inclusive)
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
|
{{< callout >}}
|
||||||
|
|
||||||
|
Numerical workspaces (e.g. `1`, `2`, `13371337`) are allowed **ONLY** between 1
|
||||||
|
and 2147483647 (inclusive)
|
||||||
|
|
||||||
Neither `0` nor negative numbers are allowed.
|
Neither `0` nor negative numbers are allowed.
|
||||||
{{< /hint >}}
|
|
||||||
|
|
||||||
# Special Workspace
|
{{< /callout >}}
|
||||||
|
|
||||||
|
## Special Workspace
|
||||||
|
|
||||||
A special workspace is what is called a "scratchpad" in some other places. A
|
A special workspace is what is called a "scratchpad" in some other places. A
|
||||||
workspace that you can toggle on/off on any monitor.
|
workspace that you can toggle on/off on any monitor.
|
||||||
|
|
||||||
{{< hint >}}
|
{{< callout type=info >}}
|
||||||
You can define multiple named special workspaces, but the amount of those is limited to 97 at a time.
|
|
||||||
{{< /hint >}}
|
|
||||||
|
|
||||||
For example, to move a window/application to a special workspace you can use the following syntax:
|
You can define multiple named special workspaces, but the amount of those is
|
||||||
|
limited to 97 at a time.
|
||||||
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
|
For example, to move a window/application to a special workspace you can use the
|
||||||
|
following syntax:
|
||||||
|
|
||||||
```
|
```
|
||||||
bind = SUPER, C, movetoworkspace, special
|
bind = SUPER, C, movetoworkspace, special
|
||||||
|
@ -151,17 +168,20 @@ bind = SUPER, C, movetoworkspace, special
|
||||||
#To see the hidden window you can use the togglespecialworkspace dispatcher mentioned above.
|
#To see the hidden window you can use the togglespecialworkspace dispatcher mentioned above.
|
||||||
```
|
```
|
||||||
|
|
||||||
# Executing with rules
|
## Executing with rules
|
||||||
The `exec` dispatcher supports adding rules. Please note some windows might work better, some
|
|
||||||
worse. It records the PID of the spawned process and uses that. If your process e.g. forks and then
|
The `exec` dispatcher supports adding rules. Please note some windows might work
|
||||||
the fork opens a window, this will not work.
|
better, some worse. It records the PID of the spawned process and uses that. If
|
||||||
|
your process e.g. forks and then the fork opens a window, this will not work.
|
||||||
|
|
||||||
The syntax is:
|
The syntax is:
|
||||||
|
|
||||||
```
|
```
|
||||||
bind = mod, key, exec, [rules...] command
|
bind = mod, key, exec, [rules...] command
|
||||||
```
|
```
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
```
|
```
|
||||||
bind = SUPER, E, exec, [workspace 2 silent;float;noanim] kitty
|
bind = SUPER, E, exec, [workspace 2 silent;float;noanim] kitty
|
||||||
```
|
```
|
||||||
|
|
|
@ -1,47 +1,53 @@
|
||||||
Dwindle is a BSPWM-like layout, where every window on a workspace is a member
|
---
|
||||||
of a binary tree.
|
weight: 11
|
||||||
|
title: Dwindle Layout
|
||||||
|
---
|
||||||
|
|
||||||
# Quirks
|
Dwindle is a BSPWM-like layout, where every window on a workspace is a member of
|
||||||
|
a binary tree.
|
||||||
|
|
||||||
|
## Quirks
|
||||||
|
|
||||||
Dwindle splits are NOT PERMANENT. The split is determined dynamically with the
|
Dwindle splits are NOT PERMANENT. The split is determined dynamically with the
|
||||||
W/H ratio of the parent node. If W > H, it's side-by-side. If H > W, it's
|
W/H ratio of the parent node. If W > H, it's side-by-side. If H > W, it's
|
||||||
top-and-bottom. You can make them permanent by enabling `preserve_split`.
|
top-and-bottom. You can make them permanent by enabling `preserve_split`.
|
||||||
|
|
||||||
# Config
|
## Config
|
||||||
|
|
||||||
category name: `dwindle`
|
category name: `dwindle`
|
||||||
|
|
||||||
| name | description | type | default |
|
| name | description | type | default |
|
||||||
|---|---|---|---|
|
| --- | --- | --- | --- |
|
||||||
| pseudotile | enable pseudotiling. Pseudotiled windows retain their floating size when tiled. | bool | false |
|
| pseudotile | enable pseudotiling. Pseudotiled windows retain their floating size when tiled. | bool | false |
|
||||||
| force_split | 0 -> split follows mouse, 1 -> always split to the left (new = left or top) 2 -> always split to the right (new = right or bottom) | int | 0 |
|
| force_split | 0 -> split follows mouse, 1 -> always split to the left (new = left or top) 2 -> always split to the right (new = right or bottom) | int | 0 |
|
||||||
| preserve_split | if enabled, the split (side/top) will not change regardless of what happens to the container. | bool | false |
|
| preserve_split | if enabled, the split (side/top) will not change regardless of what happens to the container. | bool | false |
|
||||||
| smart_split | if enabled, allows a more precise control over the window split direction based on the cursor's position. The window is conceptually divided into four triangles, and cursor's triangle determines the split direction. This feature also turns on preserve_split. | bool | false |
|
| smart_split | if enabled, allows a more precise control over the window split direction based on the cursor's position. The window is conceptually divided into four triangles, and cursor's triangle determines the split direction. This feature also turns on preserve_split. | bool | false |
|
||||||
| smart_resizing | if enabled, resizing direction will be determined by the mouse's position on the window (nearest to which corner). Else, it is based on the window's tiling position. | bool | true |
|
| smart_resizing | if enabled, resizing direction will be determined by the mouse's position on the window (nearest to which corner). Else, it is based on the window's tiling position. | bool | true |
|
||||||
| permanent_direction_override | if enabled, makes the preselect direction persist until either this mode is turned off, another direction is specified, or a non-direction is specified (anything other than l,r,u/t,d/b) | bool | false |
|
| permanent_direction_override | if enabled, makes the preselect direction persist until either this mode is turned off, another direction is specified, or a non-direction is specified (anything other than l,r,u/t,d/b) | bool | false |
|
||||||
| special_scale_factor | specifies the scale factor of windows on the special workspace [0 - 1] | float | 1 |
|
| special_scale_factor | specifies the scale factor of windows on the special workspace [0 - 1] | float | 1 |
|
||||||
| split_width_multiplier | specifies the auto-split width multiplier | float | 1.0 |
|
| split_width_multiplier | specifies the auto-split width multiplier | float | 1.0 |
|
||||||
| no_gaps_when_only | whether to apply gaps when there is only one window on a workspace, aka. smart gaps. (default: disabled - 0) no border - 1, with border - 2 [0/1/2] | int | 0 |
|
| no_gaps_when_only | whether to apply gaps when there is only one window on a workspace, aka. smart gaps. (default: disabled - 0) no border - 1, with border - 2 [0/1/2] | int | 0 |
|
||||||
| use_active_for_splits | whether to prefer the active window or the mouse position for splits | bool | true |
|
| use_active_for_splits | whether to prefer the active window or the mouse position for splits | bool | true |
|
||||||
| default_split_ratio | the default split ratio on window open. 1 means even 50/50 split. [0.1 - 1.9] | float | 1.0 |
|
| default_split_ratio | the default split ratio on window open. 1 means even 50/50 split. [0.1 - 1.9] | float | 1.0 |
|
||||||
|
|
||||||
# Bind Dispatchers
|
## Bind Dispatchers
|
||||||
|
|
||||||
| dispatcher | description | params |
|
| dispatcher | description | params |
|
||||||
|---|---|---|
|
| --- | --- | --- |
|
||||||
| pseudo | toggles the focused window's pseudo mode | none |
|
| pseudo | toggles the focused window's pseudo mode | none |
|
||||||
|
|
||||||
# Layout messages
|
## Layout messages
|
||||||
|
|
||||||
Dispatcher `layoutmsg` params:
|
Dispatcher `layoutmsg` params:
|
||||||
|
|
||||||
| param | description | args |
|
| param | description | args |
|
||||||
|---|---|---|
|
| --- | --- | --- |
|
||||||
| togglesplit | toggles the split (top/side) of the current window. `preserve_split` must be enabled for toggling to work. | none |
|
| togglesplit | toggles the split (top/side) of the current window. `preserve_split` must be enabled for toggling to work. | none |
|
||||||
| swapsplit | swaps the two halves of the split of the current window. | none |
|
| swapsplit | swaps the two halves of the split of the current window. | none |
|
||||||
| preselect | A onetime override for the split direction. (valid for the next window to be opened, only works on tiled windows) | direction |
|
| preselect | A onetime override for the split direction. (valid for the next window to be opened, only works on tiled windows) | direction |
|
||||||
|
|
||||||
e.g.:
|
e.g.:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
bind = SUPER, A, layoutmsg, preselect l
|
bind = SUPER, A, layoutmsg, preselect l
|
||||||
```
|
```
|
||||||
|
|
|
@ -1,81 +1,112 @@
|
||||||
You can use the `env` keyword to set environment variables prior to the initialization of
|
---
|
||||||
the Display Server, e.g.:
|
weight: 15
|
||||||
|
title: Environment variables
|
||||||
|
---
|
||||||
|
|
||||||
|
You can use the `env` keyword to set environment variables prior to the
|
||||||
|
initialization of the Display Server, e.g.:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
env = GTK_THEME,Nord
|
env = GTK_THEME,Nord
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< hint type=important >}}
|
{{< callout >}}
|
||||||
Hyprland puts the raw string to the envvar with the `env` keyword. You should _not_ add quotes around the values.
|
|
||||||
|
Hyprland puts the raw string to the envvar with the `env` keyword. You should
|
||||||
|
_not_ add quotes around the values.
|
||||||
|
|
||||||
e.g.:
|
e.g.:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
env = QT_QPA_PLATFORM,wayland
|
env = QT_QPA_PLATFORM,wayland
|
||||||
```
|
```
|
||||||
|
|
||||||
and ***NOT***
|
and _**NOT**_
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
env = QT_QPA_PLATFORM,"wayland"
|
env = QT_QPA_PLATFORM,"wayland"
|
||||||
```
|
```
|
||||||
{{< /hint >}}
|
|
||||||
|
|
||||||
Please avoid putting those environment variables in /etc/environment. That will cause all
|
{{< /callout >}}
|
||||||
sessions (including Xorg ones) to pick up your wayland-specific environment on traditional
|
|
||||||
Linux distros.
|
Please avoid putting those environment variables in /etc/environment. That will
|
||||||
|
cause all sessions (including Xorg ones) to pick up your wayland-specific
|
||||||
|
environment on traditional Linux distros.
|
||||||
|
|
||||||
|
## Hyprland Environment Variables
|
||||||
|
|
||||||
# Hyprland Environment Variables
|
|
||||||
- `HYPRLAND_LOG_WLR=1` - Enables more verbose logging of wlroots.
|
- `HYPRLAND_LOG_WLR=1` - Enables more verbose logging of wlroots.
|
||||||
- `HYPRLAND_NO_RT=1` - Disables realtime priority setting by Hyprland.
|
- `HYPRLAND_NO_RT=1` - Disables realtime priority setting by Hyprland.
|
||||||
- `HYPRLAND_NO_SD_NOTIFY=1` - If systemd, disables the `sd_notify` calls.
|
- `HYPRLAND_NO_SD_NOTIFY=1` - If systemd, disables the `sd_notify` calls.
|
||||||
|
|
||||||
# Toolkit Backend Variables
|
## Toolkit Backend Variables
|
||||||
- `GDK_BACKEND=wayland,x11` - GTK: Use wayland if available, fall back to x11 if not.
|
|
||||||
- `QT_QPA_PLATFORM="wayland;xcb"` - Qt: Use wayland if available, fall back to x11 if not.
|
|
||||||
- `SDL_VIDEODRIVER=wayland` - Run SDL2 applications on Wayland. Remove or set to `x11` if games that provide older versions of SDL cause
|
|
||||||
compatibility issues
|
|
||||||
- `CLUTTER_BACKEND=wayland` - Clutter package already has wayland enabled, this variable will force Clutter applications
|
|
||||||
to try and use the Wayland backend
|
|
||||||
|
|
||||||
# XDG Specifications
|
- `GDK_BACKEND=wayland,x11` - GTK: Use wayland if available, fall back to x11 if
|
||||||
|
not.
|
||||||
|
- `QT_QPA_PLATFORM="wayland;xcb"` - Qt: Use wayland if available, fall back to
|
||||||
|
x11 if not.
|
||||||
|
- `SDL_VIDEODRIVER=wayland` - Run SDL2 applications on Wayland. Remove or set to
|
||||||
|
`x11` if games that provide older versions of SDL cause compatibility issues
|
||||||
|
- `CLUTTER_BACKEND=wayland` - Clutter package already has wayland enabled, this
|
||||||
|
variable will force Clutter applications to try and use the Wayland backend
|
||||||
|
|
||||||
|
## XDG Specifications
|
||||||
|
|
||||||
- `XDG_CURRENT_DESKTOP=Hyprland`
|
- `XDG_CURRENT_DESKTOP=Hyprland`
|
||||||
- `XDG_SESSION_TYPE=wayland`
|
- `XDG_SESSION_TYPE=wayland`
|
||||||
- `XDG_SESSION_DESKTOP=Hyprland`
|
- `XDG_SESSION_DESKTOP=Hyprland`
|
||||||
|
|
||||||
XDG specific environment variables are often detected through portals and applications that may
|
XDG specific environment variables are often detected through portals and
|
||||||
set those for you, however it is not a bad idea to set them explicitly.
|
applications that may set those for you, however it is not a bad idea to set
|
||||||
|
them explicitly.
|
||||||
|
|
||||||
# Qt Variables
|
## Qt Variables
|
||||||
|
|
||||||
- `QT_AUTO_SCREEN_SCALE_FACTOR=1` - [(From the Qt documentation)](https://doc.qt.io/qt-5/highdpi.html)
|
- `QT_AUTO_SCREEN_SCALE_FACTOR=1` -
|
||||||
enables automatic scaling, based on the monitor's pixel density
|
[(From the Qt documentation)](https://doc.qt.io/qt-5/highdpi.html) enables
|
||||||
- `QT_QPA_PLATFORM=wayland;xcb` - Tell Qt applications to use the Wayland backend, and fall back to x11 if Wayland is unavailable
|
automatic scaling, based on the monitor's pixel density
|
||||||
- `QT_WAYLAND_DISABLE_WINDOWDECORATION=1` - Disables window decorations on Qt applications
|
- `QT_QPA_PLATFORM=wayland;xcb` - Tell Qt applications to use the Wayland
|
||||||
- `QT_QPA_PLATFORMTHEME=qt5ct` - Tells Qt based applications to pick your theme from qt5ct, use with Kvantum.
|
backend, and fall back to x11 if Wayland is unavailable
|
||||||
|
- `QT_WAYLAND_DISABLE_WINDOWDECORATION=1` - Disables window decorations on Qt
|
||||||
|
applications
|
||||||
|
- `QT_QPA_PLATFORMTHEME=qt5ct` - Tells Qt based applications to pick your theme
|
||||||
|
from qt5ct, use with Kvantum.
|
||||||
|
|
||||||
# NVIDIA Specific
|
## NVIDIA Specific
|
||||||
|
|
||||||
To force GBM as a backend, set the following environment variables:
|
To force GBM as a backend, set the following environment variables:
|
||||||
|
|
||||||
- `GBM_BACKEND=nvidia-drm`
|
- `GBM_BACKEND=nvidia-drm`
|
||||||
- `__GLX_VENDOR_LIBRARY_NAME=nvidia`
|
- `__GLX_VENDOR_LIBRARY_NAME=nvidia`
|
||||||
|
|
||||||
> See [Archwiki Wayland Page](https://wiki.archlinux.org/title/Wayland#Requirements) for more details on those variables.
|
> See
|
||||||
|
> [Archwiki Wayland Page](https://wiki.archlinux.org/title/Wayland#Requirements)
|
||||||
|
> for more details on those variables.
|
||||||
|
|
||||||
- `LIBVA_DRIVER_NAME=nvidia` - Hardware acceleration on NVIDIA GPUs
|
- `LIBVA_DRIVER_NAME=nvidia` - Hardware acceleration on NVIDIA GPUs
|
||||||
|
|
||||||
> See [Archwiki Hardware Acceleration Page](https://wiki.archlinux.org/title/Hardware_video_acceleration)
|
> See
|
||||||
|
> [Archwiki Hardware Acceleration Page](https://wiki.archlinux.org/title/Hardware_video_acceleration)
|
||||||
> for details and necessary values before setting this variable.
|
> for details and necessary values before setting this variable.
|
||||||
|
|
||||||
- `__GL_GSYNC_ALLOWED` - Controls if G-Sync capable monitors should use Variable Refresh Rate (VRR)
|
- `__GL_GSYNC_ALLOWED` - Controls if G-Sync capable monitors should use Variable
|
||||||
|
Refresh Rate (VRR)
|
||||||
|
|
||||||
> See [Nvidia Documentation](https://download.nvidia.com/XFree86/Linux-32bit-ARM/375.26/README/openglenvvariables.html) for details.
|
> See
|
||||||
|
> [Nvidia Documentation](https://download.nvidia.com/XFree86/Linux-32bit-ARM/375.26/README/openglenvvariables.html)
|
||||||
|
> for details.
|
||||||
|
|
||||||
- `__GL_VRR_ALLOWED` - Controls if Adaptive Sync should be used. Recommended to set as "0" to avoid having problems on some games.
|
- `__GL_VRR_ALLOWED` - Controls if Adaptive Sync should be used. Recommended to
|
||||||
|
set as "0" to avoid having problems on some games.
|
||||||
|
|
||||||
- `WLR_DRM_NO_ATOMIC=1` - use legacy DRM interface instead of atomic mode setting. Might fix flickering issues.
|
- `WLR_DRM_NO_ATOMIC=1` - use legacy DRM interface instead of atomic mode
|
||||||
|
setting. Might fix flickering issues.
|
||||||
|
|
||||||
# Theming Related Variables
|
## Theming Related Variables
|
||||||
|
|
||||||
- `GTK_THEME` - Set a GTK theme manually, for those who want to avoid appearance tools such as lxappearance or nwg-look
|
- `GTK_THEME` - Set a GTK theme manually, for those who want to avoid appearance
|
||||||
- `XCURSOR_THEME` - Set your cursor theme. The theme needs to be installed and readable by your user.
|
tools such as lxappearance or nwg-look
|
||||||
- `XCURSOR_SIZE` - Set cursor size. See [here](../../FAQ/) for why you might want this variable set.
|
- `XCURSOR_THEME` - Set your cursor theme. The theme needs to be installed and
|
||||||
|
readable by your user.
|
||||||
|
- `XCURSOR_SIZE` - Set cursor size. See [here](../../faq/) for why you might
|
||||||
|
want this variable set.
|
||||||
|
|
|
@ -1,37 +1,49 @@
|
||||||
This page houses links to a few repositories with beautiful Hyprland configurations
|
---
|
||||||
for you to get inspired from or learn how to configure Hyprland from
|
weight: 18
|
||||||
a more tangible example.
|
title: Example configurations
|
||||||
|
---
|
||||||
|
|
||||||
|
This page houses links to a few repositories with beautiful Hyprland
|
||||||
|
configurations for you to get inspired from or learn how to configure Hyprland
|
||||||
|
from a more tangible example.
|
||||||
|
|
||||||
### end_4
|
### end_4
|
||||||
|
|
||||||
![](https://camo.githubusercontent.com/5ca3a06db6bcbec4b51448a6989c941d76b4dcac2e150452a45ae913793adfe9/68747470733a2f2f63646e2e646973636f72646170702e636f6d2f6174746163686d656e74732f313039313536393837323533353831343138352f313130373637353836363130313732333237372f73637265656e73686f742d73756d6d65722e706e67)
|
![](https://camo.githubusercontent.com/5ca3a06db6bcbec4b51448a6989c941d76b4dcac2e150452a45ae913793adfe9/68747470733a2f2f63646e2e646973636f72646170702e636f6d2f6174746163686d656e74732f313039313536393837323533353831343138352f313130373637353836363130313732333237372f73637265656e73686f742d73756d6d65722e706e67)
|
||||||
[https://github.com/end-4/dots-hyprland/tree/summer-gruv](https://github.com/end-4/dots-hyprland/tree/summer-gruv)
|
[https://github.com/end-4/dots-hyprland/tree/summer-gruv](https://github.com/end-4/dots-hyprland/tree/summer-gruv)
|
||||||
|
|
||||||
### fufexan
|
### fufexan
|
||||||
|
|
||||||
![](https://user-images.githubusercontent.com/36706276/192147190-cf9cf4df-94cb-4a3b-b9d8-137ed0c2538f.png)
|
![](https://user-images.githubusercontent.com/36706276/192147190-cf9cf4df-94cb-4a3b-b9d8-137ed0c2538f.png)
|
||||||
|
|
||||||
[https://github.com/fufexan/dotfiles](https://github.com/fufexan/dotfiles)
|
[https://github.com/fufexan/dotfiles](https://github.com/fufexan/dotfiles)
|
||||||
|
|
||||||
### linuxmobile
|
### linuxmobile
|
||||||
|
|
||||||
![](https://i.ibb.co/kGrhpKd/68747470733a2f2f692e696d6775722e636f6d2f553173336a69372e706e67.png)
|
![](https://i.ibb.co/kGrhpKd/68747470733a2f2f692e696d6775722e636f6d2f553173336a69372e706e67.png)
|
||||||
|
|
||||||
[https://github.com/linuxmobile/hyprland-dots](https://github.com/linuxmobile/hyprland-dots)
|
[https://github.com/linuxmobile/hyprland-dots](https://github.com/linuxmobile/hyprland-dots)
|
||||||
|
|
||||||
### flick0
|
### flick0
|
||||||
|
|
||||||
![](https://raw.githubusercontent.com/flick0/dotfiles/aurora/assets/fetch.png)
|
![](https://raw.githubusercontent.com/flick0/dotfiles/aurora/assets/fetch.png)
|
||||||
|
|
||||||
[https://github.com/flick0/dotfiles](https://github.com/flick0/dotfiles)
|
[https://github.com/flick0/dotfiles](https://github.com/flick0/dotfiles)
|
||||||
|
|
||||||
### iamverysimp1e
|
### iamverysimp1e
|
||||||
|
|
||||||
![](https://github.com/iamverysimp1e/dots/raw/main/ScreenShots/HyprLand/Rice1.png)
|
![](https://github.com/iamverysimp1e/dots/raw/main/ScreenShots/HyprLand/Rice1.png)
|
||||||
|
|
||||||
[https://github.com/iamverysimp1e/dots](https://github.com/iamverysimp1e/dots)
|
[https://github.com/iamverysimp1e/dots](https://github.com/iamverysimp1e/dots)
|
||||||
|
|
||||||
### notusknot
|
### notusknot
|
||||||
|
|
||||||
![](https://github.com/notusknot/dotfiles-nix/raw/main/pics/screenshot.png)
|
![](https://github.com/notusknot/dotfiles-nix/raw/main/pics/screenshot.png)
|
||||||
|
|
||||||
[https://github.com/notusknot/dotfiles-nix](https://github.com/notusknot/dotfiles-nix)
|
[https://github.com/notusknot/dotfiles-nix](https://github.com/notusknot/dotfiles-nix)
|
||||||
|
|
||||||
### coffebar
|
### coffebar
|
||||||
|
|
||||||
![](https://github.com/coffebar/dotfiles/raw/6a5d595c594f108cd10219df08d338e98e1d2d7d/screenshot.png)
|
![](https://github.com/coffebar/dotfiles/raw/6a5d595c594f108cd10219df08d338e98e1d2d7d/screenshot.png)
|
||||||
|
|
||||||
[https://github.com/coffebar/dotfiles](https://github.com/coffebar/dotfiles)
|
[https://github.com/coffebar/dotfiles](https://github.com/coffebar/dotfiles)
|
||||||
|
|
|
@ -1,13 +1,17 @@
|
||||||
|
---
|
||||||
|
weight: 13
|
||||||
|
title: Expanding functionality
|
||||||
|
---
|
||||||
|
|
||||||
Hyprland exposes two powerful sockets for you to use.
|
Hyprland exposes two powerful sockets for you to use.
|
||||||
|
|
||||||
The first, socket1, can be fully controlled with `hyprctl`, see its usage
|
The first, socket1, can be fully controlled with `hyprctl`, see its usage
|
||||||
[here](../Using-hyprctl).
|
[here](../using-hyprctl).
|
||||||
|
|
||||||
The second, socket2, sends events for certain changes / actions and can be used
|
The second, socket2, sends events for certain changes / actions and can be used
|
||||||
to react to different events. See its description
|
to react to different events. See its description [here](../../ipc/).
|
||||||
[here](../../IPC/).
|
|
||||||
|
|
||||||
# Example script
|
## Example script
|
||||||
|
|
||||||
This bash script will change the outer gaps to 20 if the currently focused
|
This bash script will change the outer gaps to 20 if the currently focused
|
||||||
monitor is DP-1, and 30 otherwise.
|
monitor is DP-1, and 30 otherwise.
|
||||||
|
|
|
@ -1,9 +1,15 @@
|
||||||
Keywords are not variables, but "commands" for more advanced configuring. On this
|
---
|
||||||
page, you will be presented with some that do not deserve their own page.
|
weight: 3
|
||||||
|
title: Keywords
|
||||||
|
---
|
||||||
|
|
||||||
See the sidebar for more keywords to control binds, animations, monitors, et cetera.
|
Keywords are not variables, but "commands" for more advanced configuring. On
|
||||||
|
this page, you will be presented with some that do not deserve their own page.
|
||||||
|
|
||||||
{{< hint type=important >}}
|
See the sidebar for more keywords to control binds, animations, monitors, et
|
||||||
|
cetera.
|
||||||
|
|
||||||
|
{{< callout >}}
|
||||||
|
|
||||||
Please remember, that for ALL arguments separated by a comma, if you want to
|
Please remember, that for ALL arguments separated by a comma, if you want to
|
||||||
leave one of them empty, you cannot reduce the number of commas, _unless told
|
leave one of them empty, you cannot reduce the number of commas, _unless told
|
||||||
|
@ -19,13 +25,9 @@ three_param_keyword = A, , C # OK
|
||||||
three_param_keyword = A, B, # OK
|
three_param_keyword = A, B, # OK
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< /hint >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
# Table of contents
|
## Executing
|
||||||
|
|
||||||
{{< toc format=html >}}
|
|
||||||
|
|
||||||
# Executing
|
|
||||||
|
|
||||||
you can execute a shell script on startup of the compositor or on each time it's
|
you can execute a shell script on startup of the compositor or on each time it's
|
||||||
reloaded.
|
reloaded.
|
||||||
|
@ -34,7 +36,7 @@ reloaded.
|
||||||
|
|
||||||
`exec=command` will execute on each reload
|
`exec=command` will execute on each reload
|
||||||
|
|
||||||
# Defining variables
|
## Defining variables
|
||||||
|
|
||||||
You can define your own custom variables like this:
|
You can define your own custom variables like this:
|
||||||
|
|
||||||
|
@ -60,7 +62,7 @@ You ARE allowed to do this:
|
||||||
col.active_border=ff$MyRedValue1111
|
col.active_border=ff$MyRedValue1111
|
||||||
```
|
```
|
||||||
|
|
||||||
# Sourcing (multi-file)
|
## Sourcing (multi-file)
|
||||||
|
|
||||||
Use the `source` keyword to source another file.
|
Use the `source` keyword to source another file.
|
||||||
|
|
||||||
|
@ -75,14 +77,14 @@ And Hyprland will enter that file and parse it like a Hyprland config.
|
||||||
Please note it's LINEAR. Meaning lines above the `source=` will be parsed first,
|
Please note it's LINEAR. Meaning lines above the `source=` will be parsed first,
|
||||||
then lines inside `~/.config/hypr/myColors.conf`, then lines below.
|
then lines inside `~/.config/hypr/myColors.conf`, then lines below.
|
||||||
|
|
||||||
# Gestures
|
## Gestures
|
||||||
|
|
||||||
Use something like
|
Use something like
|
||||||
[libinput-gestures](https://github.com/bulletmark/libinput-gestures), with
|
[libinput-gestures](https://github.com/bulletmark/libinput-gestures), with
|
||||||
`hyprctl` if you want to expand Hyprland's gestures beyond what's offered in
|
`hyprctl` if you want to expand Hyprland's gestures beyond what's offered in
|
||||||
[Variables](../Variables).
|
[Variables](../variables).
|
||||||
|
|
||||||
# Per-device input configs
|
## Per-device input configs
|
||||||
|
|
||||||
Per-device config options will overwrite your options set in the `input`
|
Per-device config options will overwrite your options set in the `input`
|
||||||
section. It's worth noting that ONLY values explicitly changed will be
|
section. It's worth noting that ONLY values explicitly changed will be
|
||||||
|
@ -111,10 +113,11 @@ touchdevice:transform -> transform
|
||||||
touchdevice:output -> output
|
touchdevice:output -> output
|
||||||
```
|
```
|
||||||
|
|
||||||
You can also use the `output` setting for tablets to bind them to outputs. Remember to
|
You can also use the `output` setting for tablets to bind them to outputs.
|
||||||
use the name of the `Tablet` and not `Tablet Pad` or `Tablet tool`.
|
Remember to use the name of the `Tablet` and not `Tablet Pad` or `Tablet tool`.
|
||||||
|
|
||||||
Additional properties only present in per-device configs:
|
Additional properties only present in per-device configs:
|
||||||
|
|
||||||
```plain
|
```plain
|
||||||
enabled -> (only for mice / touchpads / touchdevices / keyboards) enables / disables the device (connects / disconnects from the on-screen cursor) - default: Enabled
|
enabled -> (only for mice / touchpads / touchdevices / keyboards) enables / disables the device (connects / disconnects from the on-screen cursor) - default: Enabled
|
||||||
```
|
```
|
||||||
|
@ -130,25 +133,28 @@ device {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< hint type=info >}}
|
{{< callout type=info >}}
|
||||||
|
|
||||||
Per-device layouts will by default not alter the keybind keymap, so for example with a global keymap of `us`
|
Per-device layouts will by default not alter the keybind keymap, so for example with a global keymap of `us`
|
||||||
and a per-device one of `fr`, the keybinds will still act as if you were on `us`.
|
and a per-device one of `fr`, the keybinds will still act as if you were on `us`.
|
||||||
|
|
||||||
You can change this behavior by setting `resolve_binds_by_sym = 1`.
|
You can change this behavior by setting `resolve_binds_by_sym = 1`.
|
||||||
In that case you'll need to type the symbol specified in the bind to activate it.
|
In that case you'll need to type the symbol specified in the bind to activate it.
|
||||||
{{< /hint >}}
|
|
||||||
|
|
||||||
# Wallpapers
|
{{< /callout >}}
|
||||||
|
|
||||||
|
## Wallpapers
|
||||||
|
|
||||||
The hyprland background you see when you first start Hyprland is **NOT A
|
The hyprland background you see when you first start Hyprland is **NOT A
|
||||||
WALLPAPER**, it's the default image rendered at the bottom of the render stack.
|
WALLPAPER**, it's the default image rendered at the bottom of the render stack.
|
||||||
|
|
||||||
To set a wallpaper, use a wallpaper utility like
|
To set a wallpaper, use a wallpaper utility like
|
||||||
[hyprpaper](https://github.com/hyprwm/hyprpaper) or [swaybg](https://github.com/swaywm/swaybg).
|
[hyprpaper](https://github.com/hyprwm/hyprpaper) or
|
||||||
|
[swaybg](https://github.com/swaywm/swaybg).
|
||||||
|
|
||||||
More can be found in [Useful Utilities](../../Useful-Utilities).
|
More can be found in [Useful Utilities](../../useful-utilities).
|
||||||
|
|
||||||
# Blurring layerSurfaces
|
## Blurring layerSurfaces
|
||||||
|
|
||||||
LayerSurfaces are not windows. These are for example: Your wallpapers,
|
LayerSurfaces are not windows. These are for example: Your wallpapers,
|
||||||
notification overlays, bars, etc.
|
notification overlays, bars, etc.
|
||||||
|
@ -175,32 +181,44 @@ For example:
|
||||||
layerrule = unset,NAMESPACE
|
layerrule = unset,NAMESPACE
|
||||||
```
|
```
|
||||||
|
|
||||||
# Setting the environment
|
## Setting the environment
|
||||||
|
|
||||||
{{< hint type=note >}}
|
{{< callout type=info >}}
|
||||||
The `env` keyword works just like `exec-once`, meaning it will only fire once on Hyprland's launch.
|
|
||||||
{{< /hint >}}
|
The `env` keyword works just like `exec-once`, meaning it will only fire once on
|
||||||
|
Hyprland's launch.
|
||||||
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
|
You can use the `env` keyword to set environment variables at Hyprland's start,
|
||||||
|
e.g.:
|
||||||
|
|
||||||
You can use the `env` keyword to set environment variables at Hyprland's start, e.g.:
|
|
||||||
```ini
|
```ini
|
||||||
env = XCURSOR_SIZE,24
|
env = XCURSOR_SIZE,24
|
||||||
```
|
```
|
||||||
|
|
||||||
You can also add a `d` flag if you want the env var to be exported to D-Bus (systemd only)
|
You can also add a `d` flag if you want the env var to be exported to D-Bus
|
||||||
|
(systemd only)
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
envd = XCURSOR_SIZE,24
|
envd = XCURSOR_SIZE,24
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< hint type=important >}}
|
{{< callout >}}
|
||||||
Hyprland puts the raw string to the envvar. You should _not_ add quotes around the values.
|
|
||||||
|
Hyprland puts the raw string to the envvar. You should _not_ add quotes around
|
||||||
|
the values.
|
||||||
|
|
||||||
e.g.:
|
e.g.:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
env = QT_QPA_PLATFORM,wayland
|
env = QT_QPA_PLATFORM,wayland
|
||||||
```
|
```
|
||||||
|
|
||||||
and ***NOT***
|
and _**NOT**_
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
env = QT_QPA_PLATFORM,"wayland"
|
env = QT_QPA_PLATFORM,"wayland"
|
||||||
```
|
```
|
||||||
{{< /hint >}}
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
|
@ -1,15 +1,21 @@
|
||||||
The master layout makes one (or more) window(s) be the "master", taking (by default) the left part of the
|
---
|
||||||
screen, and tiles the rest on the right. You can change the orientation on per-workspace basis
|
weight: 11
|
||||||
if you want to use anything other than the default left/right split.
|
title: Master Layout
|
||||||
|
---
|
||||||
|
|
||||||
|
The master layout makes one (or more) window(s) be the "master", taking (by
|
||||||
|
default) the left part of the screen, and tiles the rest on the right. You can
|
||||||
|
change the orientation on per-workspace basis if you want to use anything other
|
||||||
|
than the default left/right split.
|
||||||
|
|
||||||
![master1](https://user-images.githubusercontent.com/43317083/179357849-321f042c-f536-44b3-9e6f-371df5321836.gif)
|
![master1](https://user-images.githubusercontent.com/43317083/179357849-321f042c-f536-44b3-9e6f-371df5321836.gif)
|
||||||
|
|
||||||
# Config
|
## Config
|
||||||
|
|
||||||
_category name `master`_
|
_category name `master`_
|
||||||
|
|
||||||
| name | description | type | default |
|
| name | description | type | default |
|
||||||
|---|---|---|---|
|
| --- | --- | --- | --- |
|
||||||
| allow_small_split | enable adding additional master windows in a horizontal split style | bool | false |
|
| allow_small_split | enable adding additional master windows in a horizontal split style | bool | false |
|
||||||
| special_scale_factor | the scale of the special workspace windows. [0.0 - 1.0] | float | 1 |
|
| special_scale_factor | the scale of the special workspace windows. [0.0 - 1.0] | float | 1 |
|
||||||
| mfact | master split factor, the ratio of master split [0.0 - 1.0] | float | 0.55 |
|
| mfact | master split factor, the ratio of master split [0.0 - 1.0] | float | 0.55 |
|
||||||
|
@ -20,10 +26,9 @@ _category name `master`_
|
||||||
| inherit_fullscreen | inherit fullscreen status when cycling/swapping to another window (e.g. monocle layout) | bool | true |
|
| inherit_fullscreen | inherit fullscreen status when cycling/swapping to another window (e.g. monocle layout) | bool | true |
|
||||||
| always_center_master | when using orientation=center, keep the master window centered, even when it is the only window in the workspace. | bool | false |
|
| always_center_master | when using orientation=center, keep the master window centered, even when it is the only window in the workspace. | bool | false |
|
||||||
| smart_resizing | if enabled, resizing direction will be determined by the mouse's position on the window (nearest to which corner). Else, it is based on the window's tiling position. | bool | true |
|
| smart_resizing | if enabled, resizing direction will be determined by the mouse's position on the window (nearest to which corner). Else, it is based on the window's tiling position. | bool | true |
|
||||||
| drop_at_cursor | when enabled, dragging and dropping windows will put them at the cursor position. Otherwise, when dropped at the stack side, they will go to the top/bottom of the stack depending on new_on_top. | bool | true |
|
| drop_at_cursor | when enabled, dragging and dropping windows will put them at the cursor position. Otherwise, when dropped at the stack side, they will go to the top/bottom of the stack depending on new_on_top. | bool | true |
|
||||||
|
|
||||||
|
## Dispatchers
|
||||||
# Dispatchers
|
|
||||||
|
|
||||||
`layoutmsg` commands:
|
`layoutmsg` commands:
|
||||||
|
|
||||||
|
@ -51,7 +56,8 @@ _category name `master`_
|
||||||
|
|
||||||
params for the commands are separated by a single space
|
params for the commands are separated by a single space
|
||||||
|
|
||||||
{{< hint type=info >}}
|
{{< callout type=info >}}
|
||||||
|
|
||||||
example usage:
|
example usage:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
|
@ -60,15 +66,13 @@ bind=MOD,KEY,layoutmsg,cyclenext
|
||||||
bind=MOD,KEY,layoutmsg,swapwithmaster master
|
bind=MOD,KEY,layoutmsg,swapwithmaster master
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< /hint >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
|
## Workspace Rules
|
||||||
|
|
||||||
# Workspace Rules
|
`layoutopt` rules: | rule | description | type | | --- | --- | --- | |
|
||||||
|
orientation:[o] | Sets the orientation of a workspace. For available
|
||||||
`layoutopt` rules:
|
orientations, see [Config->orientation](#config) | string |
|
||||||
| rule | description | type |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| orientation:[o] | Sets the orientation of a workspace. For available orientations, see [Config->orientation](#config) | string |
|
|
||||||
|
|
||||||
Example usage:
|
Example usage:
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
# Table of contents
|
---
|
||||||
|
weight: 4
|
||||||
|
title: Monitors
|
||||||
|
---
|
||||||
|
|
||||||
{{< toc format=html >}}
|
## General
|
||||||
|
|
||||||
# General
|
|
||||||
|
|
||||||
The general config of a monitor looks like this
|
The general config of a monitor looks like this
|
||||||
|
|
||||||
|
@ -16,8 +17,8 @@ A common example:
|
||||||
monitor=DP-1,1920x1080@144,0x0,1
|
monitor=DP-1,1920x1080@144,0x0,1
|
||||||
```
|
```
|
||||||
|
|
||||||
will tell Hyprland to make the monitor on `DP-1` a `1920x1080` display, at 144Hz,
|
will tell Hyprland to make the monitor on `DP-1` a `1920x1080` display, at
|
||||||
`0x0` off from the top left corner, with a scale of 1 (unscaled).
|
144Hz, `0x0` off from the top left corner, with a scale of 1 (unscaled).
|
||||||
|
|
||||||
To list all available monitors (active and inactive):
|
To list all available monitors (active and inactive):
|
||||||
|
|
||||||
|
@ -29,32 +30,37 @@ Monitors are positioned on a virtual "layout". The `position` is the position of
|
||||||
said display in the layout. (calculated from the top-left corner)
|
said display in the layout. (calculated from the top-left corner)
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
monitor=DP-1, 1920x1080, 0x0, 1
|
monitor=DP-1, 1920x1080, 0x0, 1
|
||||||
monitor=DP-2, 1920x1080, 1920x0, 1
|
monitor=DP-2, 1920x1080, 1920x0, 1
|
||||||
```
|
```
|
||||||
|
|
||||||
will tell hyprland to make DP-1 on the _left_ of DP-2, while
|
will tell hyprland to make DP-1 on the _left_ of DP-2, while
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
monitor=DP-1, 1920x1080, 1920x0, 1
|
monitor=DP-1, 1920x1080, 1920x0, 1
|
||||||
monitor=DP-2, 1920x1080, 0x0, 1
|
monitor=DP-2, 1920x1080, 0x0, 1
|
||||||
```
|
```
|
||||||
|
|
||||||
will tell hyprland to make DP-1 on the _right_.
|
will tell hyprland to make DP-1 on the _right_.
|
||||||
|
|
||||||
The `position` may contain _negative_ values, so the above example could also be
|
The `position` may contain _negative_ values, so the above example could also be
|
||||||
written as
|
written as
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
monitor=DP-1, 1920x1080, 0x0, 1
|
monitor=DP-1, 1920x1080, 0x0, 1
|
||||||
monitor=DP-2, 1920x1080, -1920x0, 1
|
monitor=DP-2, 1920x1080, -1920x0, 1
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< hint type=tip >}}
|
{{< callout type=info >}}
|
||||||
|
|
||||||
The position is calculated with the scaled (and transformed) resolution, meaning if
|
The position is calculated with the scaled (and transformed) resolution, meaning
|
||||||
you want your 4K monitor with scale 2 to the left of your 1080p one, you'd use
|
if you want your 4K monitor with scale 2 to the left of your 1080p one, you'd
|
||||||
the position `1920x0` for the second screen. (3840 / 2)
|
use the position `1920x0` for the second screen. (3840 / 2) If the monitor is
|
||||||
If the monitor is also rotated 90 degrees (vertical), you'd use `1080x0`.
|
also rotated 90 degrees (vertical), you'd use `1080x0`.
|
||||||
|
|
||||||
{{</ hint >}}
|
{{</ callout >}}
|
||||||
|
|
||||||
Leaving the name empty will define a fallback rule to use when no other rules
|
Leaving the name empty will define a fallback rule to use when no other rules
|
||||||
match.
|
match.
|
||||||
|
@ -62,8 +68,8 @@ match.
|
||||||
You can use `preferred` as a resolution to use the display's preferred size and
|
You can use `preferred` as a resolution to use the display's preferred size and
|
||||||
`auto` as a position to let Hyprland decide on a position for you.
|
`auto` as a position to let Hyprland decide on a position for you.
|
||||||
|
|
||||||
You can also use `auto` as a scale to let Hyprland decide on a scale for you. These
|
You can also use `auto` as a scale to let Hyprland decide on a scale for you.
|
||||||
depend on the PPI of the monitor.
|
These depend on the PPI of the monitor.
|
||||||
|
|
||||||
Recommended rule for quickly plugging in random monitors:
|
Recommended rule for quickly plugging in random monitors:
|
||||||
|
|
||||||
|
@ -89,9 +95,9 @@ for a focus on resolution this:
|
||||||
monitor=,highres,auto,1
|
monitor=,highres,auto,1
|
||||||
```
|
```
|
||||||
|
|
||||||
For more specific rules, you can also use the output's description
|
For more specific rules, you can also use the output's description (see
|
||||||
(see `hyprctl monitors` for more details).
|
`hyprctl monitors` for more details). If the output of `hyprctl monitors` looks
|
||||||
If the output of `hyprctl monitors` looks like the following:
|
like the following:
|
||||||
|
|
||||||
```
|
```
|
||||||
Monitor eDP-1 (ID 0):
|
Monitor eDP-1 (ID 0):
|
||||||
|
@ -102,8 +108,8 @@ Monitor eDP-1 (ID 0):
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
|
|
||||||
then the `description` value up to the portname `(eDP-1)` can be used
|
then the `description` value up to the portname `(eDP-1)` can be used to specify
|
||||||
to specify the monitor:
|
the monitor:
|
||||||
|
|
||||||
```
|
```
|
||||||
monitor=desc:Chimei Innolux Corporation 0x150C,preferred,auto,1.5
|
monitor=desc:Chimei Innolux Corporation 0x150C,preferred,auto,1.5
|
||||||
|
@ -111,15 +117,16 @@ monitor=desc:Chimei Innolux Corporation 0x150C,preferred,auto,1.5
|
||||||
|
|
||||||
Remember to remove the `(portname)`!
|
Remember to remove the `(portname)`!
|
||||||
|
|
||||||
## Custom modelines
|
### Custom modelines
|
||||||
|
|
||||||
You can set up a custom modeline by changing the resolution field to a modeline, for example:
|
You can set up a custom modeline by changing the resolution field to a modeline,
|
||||||
|
for example:
|
||||||
|
|
||||||
```
|
```
|
||||||
monitor = DP-1, modeline 1071.101 3840 3848 3880 3920 2160 2263 2271 2277 +hsync -vsync, 0x0, 1
|
monitor = DP-1, modeline 1071.101 3840 3848 3880 3920 2160 2263 2271 2277 +hsync -vsync, 0x0, 1
|
||||||
```
|
```
|
||||||
|
|
||||||
## Disabling a monitor
|
### Disabling a monitor
|
||||||
|
|
||||||
To disable a monitor, use
|
To disable a monitor, use
|
||||||
|
|
||||||
|
@ -127,15 +134,16 @@ To disable a monitor, use
|
||||||
monitor=name,disable
|
monitor=name,disable
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< hint type=tip >}}
|
{{< callout >}}
|
||||||
|
|
||||||
Disabling a monitor will literally remove it from the layout, moving all windows and workspaces
|
Disabling a monitor will literally remove it from the layout, moving all windows
|
||||||
to any remaining ones. If you want to disable your monitor in a screensaver style (just turn
|
and workspaces to any remaining ones. If you want to disable your monitor in a
|
||||||
off the monitor) use the `dpms` [dispatcher](../Dispatchers).
|
screensaver style (just turn off the monitor) use the `dpms`
|
||||||
|
[dispatcher](../dispatchers).
|
||||||
|
|
||||||
{{</ hint >}}
|
{{</ callout >}}
|
||||||
|
|
||||||
# Custom reserved area
|
## Custom reserved area
|
||||||
|
|
||||||
If your workflow requires custom reserved area, you can add it with
|
If your workflow requires custom reserved area, you can add it with
|
||||||
|
|
||||||
|
@ -147,18 +155,20 @@ Where `TOP` `BOTTOM` `LEFT` `RIGHT` are integers in pixels of the reserved area
|
||||||
to add. This does stack on top of the calculated one, (e.g. bars) but you may
|
to add. This does stack on top of the calculated one, (e.g. bars) but you may
|
||||||
only use one of these rules per monitor in the config.
|
only use one of these rules per monitor in the config.
|
||||||
|
|
||||||
# Extra args
|
## Extra args
|
||||||
|
|
||||||
You can combine extra arguments at the end of the monitor rule, examples:
|
You can combine extra arguments at the end of the monitor rule, examples:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
monitor=eDP-1,2880x1800@90,0x0,1,transform,1,mirror,DP-2,bitdepth,10
|
monitor=eDP-1,2880x1800@90,0x0,1,transform,1,mirror,DP-2,bitdepth,10
|
||||||
```
|
```
|
||||||
|
|
||||||
See bellow for more detail about each argument.
|
See bellow for more detail about each argument.
|
||||||
|
|
||||||
## Mirrored displays
|
### Mirrored displays
|
||||||
|
|
||||||
If you want to mirror a display, add a `,mirror,[NAME]` at the end of the monitor
|
If you want to mirror a display, add a `,mirror,[NAME]` at the end of the
|
||||||
rule, examples:
|
monitor rule, examples:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
monitor=DP-3,1920x1080@60,0x0,1,mirror,DP-2
|
monitor=DP-3,1920x1080@60,0x0,1,mirror,DP-2
|
||||||
|
@ -170,30 +180,36 @@ second monitor, so if mirroring a 1080p screen onto a 4K one, the resolution
|
||||||
will still be 1080p on the 4K display. This also means squishing and stretching
|
will still be 1080p on the 4K display. This also means squishing and stretching
|
||||||
will occur on non-matching resolutions.
|
will occur on non-matching resolutions.
|
||||||
|
|
||||||
## 10 bit support
|
### 10 bit support
|
||||||
|
|
||||||
|
If you want to enable 10 bit support for your display, add a `,bitdepth,10` at
|
||||||
|
the end of the monitor rule, e.g.:
|
||||||
|
|
||||||
If you want to enable 10 bit support for your display, add a `,bitdepth,10` at the
|
|
||||||
end of the monitor rule, e.g.:
|
|
||||||
```ini
|
```ini
|
||||||
monitor=eDP-1,2880x1800@90,0x0,1,bitdepth,10
|
monitor=eDP-1,2880x1800@90,0x0,1,bitdepth,10
|
||||||
```
|
```
|
||||||
**NOTE** Colors registered in Hyprland (e.g. the border color) do _not_support 10 bit.
|
|
||||||
|
**NOTE** Colors registered in Hyprland (e.g. the border color) do _not_support
|
||||||
|
10 bit.
|
||||||
|
|
||||||
**NOTE** Some applications do _not_support screen capture with 10 bit enabled.
|
**NOTE** Some applications do _not_support screen capture with 10 bit enabled.
|
||||||
|
|
||||||
## VRR
|
### VRR
|
||||||
|
|
||||||
Per-display VRR can be done by adding `,vrr,X` where `X` is the mode from the [variables page](../Variables).
|
Per-display VRR can be done by adding `,vrr,X` where `X` is the mode from the
|
||||||
|
[variables page](../variables).
|
||||||
|
|
||||||
# Rotating
|
## Rotating
|
||||||
|
|
||||||
|
If you want to rotate a monitor, add a `,transform,X` at the end of the monitor
|
||||||
|
rule, where `X` corresponds to a transform number, e.g.:
|
||||||
|
|
||||||
If you want to rotate a monitor, add a `,transform,X` at the end
|
|
||||||
of the monitor rule, where `X` corresponds to a transform number, e.g.:
|
|
||||||
```ini
|
```ini
|
||||||
monitor=eDP-1,2880x1800@90,0x0,1,transform,1
|
monitor=eDP-1,2880x1800@90,0x0,1,transform,1
|
||||||
```
|
```
|
||||||
|
|
||||||
Transform list:
|
Transform list:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
normal (no transforms) -> 0
|
normal (no transforms) -> 0
|
||||||
90 degrees -> 1
|
90 degrees -> 1
|
||||||
|
@ -205,8 +221,10 @@ flipped + 180 degrees -> 6
|
||||||
flipped + 270 degrees -> 7
|
flipped + 270 degrees -> 7
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< hint type=note >}}
|
{{< callout type=info >}}
|
||||||
If you're using a touchscreen, you'll also have to rotate its digitizer to match:
|
|
||||||
|
If you're using a touchscreen, you'll also have to rotate its digitizer to
|
||||||
|
match:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
input {
|
input {
|
||||||
|
@ -216,13 +234,15 @@ input {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
This will be done automatically when [#3544](https://github.com/hyprwm/Hyprland/pull/3544) lands.
|
This will be done automatically when
|
||||||
{{< /hint >}}
|
[#3544](https://github.com/hyprwm/Hyprland/pull/3544) lands.
|
||||||
|
|
||||||
# Default workspace
|
{{< /callout >}}
|
||||||
|
|
||||||
See [Workspace Rules](../Workspace-Rules).
|
## Default workspace
|
||||||
|
|
||||||
## Binding workspaces to a monitor
|
See [Workspace Rules](../workspace-rules).
|
||||||
|
|
||||||
See [Workspace Rules](../Workspace-Rules).
|
### Binding workspaces to a monitor
|
||||||
|
|
||||||
|
See [Workspace Rules](../workspace-rules).
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
# Table of contents
|
---
|
||||||
|
weight: 16
|
||||||
|
title: Multi-GPU
|
||||||
|
---
|
||||||
|
|
||||||
{{< toc >}}
|
## General
|
||||||
|
|
||||||
# General
|
|
||||||
|
|
||||||
If your host machine uses multiple GPUs, you may want to primarily use one GPU
|
If your host machine uses multiple GPUs, you may want to primarily use one GPU
|
||||||
for rendering all the elements for Hyprland including windows, animations, and
|
for rendering all the elements for Hyprland including windows, animations, and
|
||||||
another for hardware acceleration for certain applications, etc.
|
another for hardware acceleration for certain applications, etc.
|
||||||
|
|
||||||
This setup is very common in the likes of gaming laptops,
|
This setup is very common in the likes of gaming laptops, GPU-passthrough
|
||||||
GPU-passthrough (without VFIO) capable hosts, and if you have multiple GPUs in
|
(without VFIO) capable hosts, and if you have multiple GPUs in general.
|
||||||
general.
|
|
||||||
|
|
||||||
# Detecting GPUs
|
## Detecting GPUs
|
||||||
|
|
||||||
For this case, the writer is taking the example of their laptop.
|
For this case, the writer is taking the example of their laptop.
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@ available.
|
||||||
01:00.0 VGA compatible controller: NVIDIA Corporation TU117M [GeForce GTX 1650 Mobile / Max-Q] (rev a1)
|
01:00.0 VGA compatible controller: NVIDIA Corporation TU117M [GeForce GTX 1650 Mobile / Max-Q] (rev a1)
|
||||||
06:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] (rev c6)
|
06:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] (rev c6)
|
||||||
```
|
```
|
||||||
|
|
||||||
Here it is clear that 2 GPUs are available, the dedicated NVIDIA GTX 1650 Mobile
|
Here it is clear that 2 GPUs are available, the dedicated NVIDIA GTX 1650 Mobile
|
||||||
/ Max-Q and the integrated AMD Cezanne Radeon Vega Series GPU.
|
/ Max-Q and the integrated AMD Cezanne Radeon Vega Series GPU.
|
||||||
|
|
||||||
|
@ -39,12 +40,12 @@ lrwxrwxrwx 1 root root 13 Jul 14 15:45 pci-0000:06:00.0-render -> ../renderD129
|
||||||
So from the above outputs, we can match the bus IDs and determine that NVIDIA is
|
So from the above outputs, we can match the bus IDs and determine that NVIDIA is
|
||||||
`card0` and AMD is `card1`.
|
`card0` and AMD is `card1`.
|
||||||
|
|
||||||
# Telling Hyprland which GPU to use
|
## Telling Hyprland which GPU to use
|
||||||
|
|
||||||
After determining which "card" belongs to which GPU, we now have to tell
|
After determining which "card" belongs to which GPU, we now have to tell
|
||||||
Hyprland the GPU we want to use primarily.
|
Hyprland the GPU we want to use primarily.
|
||||||
|
|
||||||
{{< hint type=info >}}
|
{{< callout type=info >}}
|
||||||
|
|
||||||
It is generally a good idea for laptops to use the integrated GPU as the primary
|
It is generally a good idea for laptops to use the integrated GPU as the primary
|
||||||
renderer as this preserves battery life and is practically indistinguishable
|
renderer as this preserves battery life and is practically indistinguishable
|
||||||
|
@ -52,7 +53,7 @@ from using the dedicated GPU on modern systems in most cases. Hyprland can be
|
||||||
run on integrated GPUs just fine. The same principle applies for desktop setups
|
run on integrated GPUs just fine. The same principle applies for desktop setups
|
||||||
with a lower and higher power rating GPUs respectively.
|
with a lower and higher power rating GPUs respectively.
|
||||||
|
|
||||||
{{< /hint >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
We can do so by using the `WLR_DRM_DEVICES` variable.
|
We can do so by using the `WLR_DRM_DEVICES` variable.
|
||||||
|
|
||||||
|
|
|
@ -1,22 +1,36 @@
|
||||||
This page documents known tricks and fixes to boost performance if by any chance you stumble upon problems or you do not care that much about animations.
|
---
|
||||||
|
weight: 19
|
||||||
|
title: Performance
|
||||||
|
---
|
||||||
|
|
||||||
# Fractional scaling
|
This page documents known tricks and fixes to boost performance if by any chance
|
||||||
|
you stumble upon problems or you do not care that much about animations.
|
||||||
|
|
||||||
Wayland fractional scaling is a lot better than before, but it is not perfect. Some applications do not support it yet or the support is experimental at best. If you have problems with your graphics card having high usage and hyprland feeling laggy then try setting the scaling to integer numbers such as `1` or `2` like in this example `monitor=,preferred,auto,2`.
|
## Fractional scaling
|
||||||
|
|
||||||
# Low FPS/stutter/FPS drops on Intel iGPU with TLP (mainly laptops)
|
Wayland fractional scaling is a lot better than before, but it is not perfect.
|
||||||
|
Some applications do not support it yet or the support is experimental at best.
|
||||||
|
If you have problems with your graphics card having high usage and hyprland
|
||||||
|
feeling laggy then try setting the scaling to integer numbers such as `1` or `2`
|
||||||
|
like in this example `monitor=,preferred,auto,2`.
|
||||||
|
|
||||||
The TLP defaults are rather aggressive, setting `INTEL_GPU_MIN_FREQ_ON_AC` and/or `INTEL_GPU_MIN_FREQ_ON_BAT` in `/etc/tlp.conf` to something slightly higher (e.g. to 500 from 300) will reduce stutter significantly or, in the best case, remove it completely.
|
## Low FPS/stutter/FPS drops on Intel iGPU with TLP (mainly laptops)
|
||||||
|
|
||||||
# How do I make Hyprland draw as little power as possible on my laptop?
|
The TLP defaults are rather aggressive, setting `INTEL_GPU_MIN_FREQ_ON_AC`
|
||||||
|
and/or `INTEL_GPU_MIN_FREQ_ON_BAT` in `/etc/tlp.conf` to something slightly
|
||||||
|
higher (e.g. to 500 from 300) will reduce stutter significantly or, in the best
|
||||||
|
case, remove it completely.
|
||||||
|
|
||||||
|
## How do I make Hyprland draw as little power as possible on my laptop?
|
||||||
|
|
||||||
**_Useful Optimizations_**:
|
**_Useful Optimizations_**:
|
||||||
|
|
||||||
* `decoration:blur = false` and `decoration:drop_shadow = false` to disable
|
- `decoration:blur = false` and `decoration:drop_shadow = false` to disable
|
||||||
fancy but battery hungry effects.
|
fancy but battery hungry effects.
|
||||||
|
|
||||||
* `misc:vfr = true`, since it'll lower the amount of sent frames when nothing is happening on-screen.
|
- `misc:vfr = true`, since it'll lower the amount of sent frames when nothing is
|
||||||
|
happening on-screen.
|
||||||
|
|
||||||
# My games work poorly, especially proton ones
|
## My games work poorly, especially proton ones
|
||||||
|
|
||||||
Use `gamescope`, tends to fix any and all issues with wayland/Hyprland.
|
Use `gamescope`, tends to fix any and all issues with wayland/Hyprland.
|
||||||
|
|
|
@ -1,17 +1,29 @@
|
||||||
|
---
|
||||||
|
weight: 10
|
||||||
|
title: Tearing
|
||||||
|
---
|
||||||
|
|
||||||
Screen tearing is used to reduce latency and/or jitter in games.
|
Screen tearing is used to reduce latency and/or jitter in games.
|
||||||
|
|
||||||
## Enabling tearing
|
## Enabling tearing
|
||||||
|
|
||||||
To enable tearing:
|
To enable tearing:
|
||||||
- Set `general:allow_tearing` to `true`. This is a "master toggle"
|
|
||||||
- Add `env = WLR_DRM_NO_ATOMIC,1` to your Hyprland config. This disables the usage of a newer kernel DRM API that doesn't support tearing yet.
|
|
||||||
- Add an `immediate` windowrule to your game of choice. This makes sure that Hyprland will tear it.
|
|
||||||
|
|
||||||
{{< hint type=note >}}
|
- Set `general:allow_tearing` to `true`. This is a "master toggle"
|
||||||
Please note that tearing will only be in effect when the game is in fullscreen and the only thing visible on the screen.
|
- Add `env = WLR_DRM_NO_ATOMIC,1` to your Hyprland config. This disables the
|
||||||
{{< /hint >}}
|
usage of a newer kernel DRM API that doesn't support tearing yet.
|
||||||
|
- Add an `immediate` windowrule to your game of choice. This makes sure that
|
||||||
|
Hyprland will tear it.
|
||||||
|
|
||||||
|
{{< callout >}}
|
||||||
|
|
||||||
|
Please note that tearing will only be in effect when the game is in fullscreen
|
||||||
|
and the only thing visible on the screen.
|
||||||
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
Example snippet:
|
Example snippet:
|
||||||
|
|
||||||
```env
|
```env
|
||||||
general {
|
general {
|
||||||
allow_tearing = true
|
allow_tearing = true
|
||||||
|
@ -22,46 +34,62 @@ env = WLR_DRM_NO_ATOMIC,1
|
||||||
windowrulev2 = immediate, class:^(cs2)$
|
windowrulev2 = immediate, class:^(cs2)$
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< hint type=note >}}
|
{{< callout >}}
|
||||||
`env = WLR_DRM_NO_ATOMIC,1` is not recommended. If your kernel ver is >= 6.8, you can remove it.
|
|
||||||
|
`env = WLR_DRM_NO_ATOMIC,1` is not recommended. If your kernel ver is >= 6.8,
|
||||||
|
you can remove it.
|
||||||
|
|
||||||
For kernels < 6.8, this env is required.
|
For kernels < 6.8, this env is required.
|
||||||
|
|
||||||
Check your kernel version with `uname -r`.
|
Check your kernel version with `uname -r`.
|
||||||
{{< /hint >}}
|
|
||||||
|
|
||||||
{{< hint type=warning >}}
|
{{< /callout >}}
|
||||||
If you experience graphical issues, you may be out of luck. Tearing support is experimental.
|
|
||||||
|
{{< callout type=warning >}}
|
||||||
|
|
||||||
|
If you experience graphical issues, you may be out of luck. Tearing support is
|
||||||
|
experimental.
|
||||||
|
|
||||||
See the likely culprits below.
|
See the likely culprits below.
|
||||||
{{< /hint >}}
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
## Common issues
|
## Common issues
|
||||||
|
|
||||||
### No tearing at all
|
### No tearing at all
|
||||||
|
|
||||||
Make sure your windowrules are matching and you have the master toggle enabled.
|
Make sure your windowrules are matching and you have the master toggle enabled.
|
||||||
|
|
||||||
Also make sure nothing except for your game is showing on your monitor. No notifications, overlays, lockscreens,
|
Also make sure nothing except for your game is showing on your monitor. No
|
||||||
bars, other windows, etc. (on a different monitor is fine)
|
notifications, overlays, lockscreens, bars, other windows, etc. (on a different
|
||||||
|
monitor is fine)
|
||||||
|
|
||||||
### Apps that should tear, freeze
|
### Apps that should tear, freeze
|
||||||
Almost definitely means your GPU driver does not support tearing, like e.g. Intel's.
|
|
||||||
|
Almost definitely means your GPU driver does not support tearing, like e.g.
|
||||||
|
Intel's.
|
||||||
|
|
||||||
Please _do not_ report issues if this is the culprit.
|
Please _do not_ report issues if this is the culprit.
|
||||||
|
|
||||||
### Graphical artifacts (random colorful pixels, etc)
|
### Graphical artifacts (random colorful pixels, etc)
|
||||||
|
|
||||||
Likely issue with your graphics driver.
|
Likely issue with your graphics driver.
|
||||||
|
|
||||||
Please _do not_ report issues if this is the culprit. Unfortunately, it's most likely your GPU driver's fault.
|
Please _do not_ report issues if this is the culprit. Unfortunately, it's most
|
||||||
|
likely your GPU driver's fault.
|
||||||
|
|
||||||
Could be the below as well
|
Could be the below as well
|
||||||
|
|
||||||
### Other graphical issues
|
### Other graphical issues
|
||||||
|
|
||||||
or
|
or
|
||||||
|
|
||||||
### Hyprland instantly crashes on launch
|
### Hyprland instantly crashes on launch
|
||||||
|
|
||||||
Likely issue with `WLR_DRM_NO_ATOMIC`.
|
Likely issue with `WLR_DRM_NO_ATOMIC`.
|
||||||
|
|
||||||
NO_ATOMIC forces the use of a legacy, less tested drm API.
|
NO_ATOMIC forces the use of a legacy, less tested drm API.
|
||||||
|
|
||||||
Please _do not_ report issues if this is the culprit. Unfortunately, you will have to wait for the Linux kernel to support
|
Please _do not_ report issues if this is the culprit. Unfortunately, you will
|
||||||
tearing page flips on the atomic API.
|
have to wait for the Linux kernel to support tearing page flips on the atomic
|
||||||
|
API.
|
||||||
|
|
|
@ -1,6 +1,12 @@
|
||||||
# Switchable keyboard layouts
|
---
|
||||||
|
weight: 17
|
||||||
|
title: Uncommon tips & tricks
|
||||||
|
---
|
||||||
|
|
||||||
The easiest way to accomplish this is to set this using XKB settings, for example:
|
## Switchable keyboard layouts
|
||||||
|
|
||||||
|
The easiest way to accomplish this is to set this using XKB settings, for
|
||||||
|
example:
|
||||||
|
|
||||||
```
|
```
|
||||||
input {
|
input {
|
||||||
|
@ -9,11 +15,12 @@ input {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< hint type=important >}}
|
{{< callout >}}
|
||||||
|
|
||||||
The first layout defined in the input section will be the one used for binds by default.
|
The first layout defined in the input section will be the one used for binds by default.
|
||||||
|
|
||||||
For example: `us,ua` -> config binds would be e.g. `SUPER, A`, while on `ua,us` -> `SUPER, Cyrillic_ef`
|
For example: `us,ua` -> config binds would be e.g. `SUPER, A`, while on `ua,us`
|
||||||
|
-> `SUPER, Cyrillic_ef`
|
||||||
|
|
||||||
You can change this behavior globally or per-device by setting `resolve_binds_by_sym = 1`.
|
You can change this behavior globally or per-device by setting `resolve_binds_by_sym = 1`.
|
||||||
In that case, binds will activate when the symbol typed matches the symbol specified in the bind.
|
In that case, binds will activate when the symbol typed matches the symbol specified in the bind.
|
||||||
|
@ -22,25 +29,28 @@ For example: if your layouts are `us,fr` and have a bind for `SUPER, A` you'd ne
|
||||||
first letter on the second row while the `us` layout is active and the first letter on the first row
|
first letter on the second row while the `us` layout is active and the first letter on the first row
|
||||||
while the `fr` layout is active.
|
while the `fr` layout is active.
|
||||||
|
|
||||||
{{< /hint >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
You can also bind a key to execute `hyprctl switchxkblayout` for more keybind freedom.
|
You can also bind a key to execute `hyprctl switchxkblayout` for more keybind
|
||||||
See [Using hyprctl](../Using-hyprctl).
|
freedom. See [Using hyprctl](../Using-hyprctl).
|
||||||
|
|
||||||
To find the valid layouts and `kb_options`, you can check out the `/usr/share/X11/xkb/rules/base.lst`. For example:
|
To find the valid layouts and `kb_options`, you can check out the
|
||||||
|
`/usr/share/X11/xkb/rules/base.lst`. For example:
|
||||||
|
|
||||||
To get the layout name of a language:
|
To get the layout name of a language:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
grep -i 'persian' /usr/share/X11/xkb/rules/base.lst
|
grep -i 'persian' /usr/share/X11/xkb/rules/base.lst
|
||||||
```
|
```
|
||||||
|
|
||||||
To get the list of keyboard shortcuts you can put in the `kb_options` to toggle keyboard layouts:
|
To get the list of keyboard shortcuts you can put in the `kb_options` to toggle
|
||||||
|
keyboard layouts:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
grep 'grp:.*toggle' /usr/share/X11/xkb/rules/base.lst
|
grep 'grp:.*toggle' /usr/share/X11/xkb/rules/base.lst
|
||||||
```
|
```
|
||||||
|
|
||||||
# Disabling keybinds with one master keybind
|
## Disabling keybinds with one master keybind
|
||||||
|
|
||||||
If you want to disable all keybinds with another keybind (make a keybind toggle
|
If you want to disable all keybinds with another keybind (make a keybind toggle
|
||||||
of sorts) you can just use a submap with only a keybind to exit it.
|
of sorts) you can just use a submap with only a keybind to exit it.
|
||||||
|
@ -51,7 +61,8 @@ submap=clean
|
||||||
bind=MOD,KEY,submap,reset
|
bind=MOD,KEY,submap,reset
|
||||||
submap=reset
|
submap=reset
|
||||||
```
|
```
|
||||||
# Remap Caps-Lock to Ctrl
|
|
||||||
|
## Remap Caps-Lock to Ctrl
|
||||||
|
|
||||||
```
|
```
|
||||||
input {
|
input {
|
||||||
|
@ -59,7 +70,7 @@ input {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
# Swap Caps-Lock and Escape
|
## Swap Caps-Lock and Escape
|
||||||
|
|
||||||
```
|
```
|
||||||
input {
|
input {
|
||||||
|
@ -67,10 +78,11 @@ input {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
# Minimize Steam instead of killing
|
## Minimize Steam instead of killing
|
||||||
|
|
||||||
Steam will exit entirely when it's last window is closed using the `killactive` dispatcher.
|
Steam will exit entirely when it's last window is closed using the `killactive`
|
||||||
To minimize Steam to tray, use the following script to close applications:
|
dispatcher. To minimize Steam to tray, use the following script to close
|
||||||
|
applications:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
if [ "$(hyprctl activewindow -j | jq -r ".class")" = "Steam" ]; then
|
if [ "$(hyprctl activewindow -j | jq -r ".class")" = "Steam" ]; then
|
||||||
|
@ -80,14 +92,15 @@ else
|
||||||
fi
|
fi
|
||||||
```
|
```
|
||||||
|
|
||||||
# Window Dancing
|
## Window Dancing
|
||||||
|
|
||||||
Some XWayland games like Rhythm Doctor and Friday Night Funkin' mods like to move
|
Some XWayland games like Rhythm Doctor and Friday Night Funkin' mods like to
|
||||||
the windows by themselves, but that often doesn't work by default.
|
move the windows by themselves, but that often doesn't work by default.
|
||||||
|
|
||||||
For example, if you want to configure Rhythm Doctor, you'd have to:
|
For example, if you want to configure Rhythm Doctor, you'd have to:
|
||||||
|
|
||||||
1. Set input rules
|
1. Set input rules
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
input {
|
input {
|
||||||
# ...
|
# ...
|
||||||
|
@ -109,9 +122,11 @@ Click the GIF below to see a full demo video
|
||||||
|
|
||||||
[![Demo GIF of Rhythm Doctor](https://cdn.discordapp.com/attachments/810799100940255260/1032843745864986644/ezgif.com-gif-maker18.gif)](https://pool.jortage.com/voringme/misskey/565b9dfb-125f-4ea0-9257-b371cb4c7195.mp4)
|
[![Demo GIF of Rhythm Doctor](https://cdn.discordapp.com/attachments/810799100940255260/1032843745864986644/ezgif.com-gif-maker18.gif)](https://pool.jortage.com/voringme/misskey/565b9dfb-125f-4ea0-9257-b371cb4c7195.mp4)
|
||||||
|
|
||||||
## Shimeji
|
### Shimeji
|
||||||
|
|
||||||
To use Shimeji programs like [this](https://codeberg.org/thatonecalculator/spamton-linux-shimeji), set the following rules:
|
To use Shimeji programs like
|
||||||
|
[this](https://codeberg.org/thatonecalculator/spamton-linux-shimeji), set the
|
||||||
|
following rules:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
windowrule=float, com-group_finity-mascot-Main
|
windowrule=float, com-group_finity-mascot-Main
|
||||||
|
@ -121,19 +136,21 @@ windowrule=noshadow, com-group_finity-mascot-Main
|
||||||
windowrule=noborder, com-group_finity-mascot-Main
|
windowrule=noborder, com-group_finity-mascot-Main
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< hint >}}
|
{{< callout type=info >}}
|
||||||
|
|
||||||
The app indicator probably won't show, so you'll have to `killall -9 java` to kill them.
|
The app indicator probably won't show, so you'll have to `killall -9 java` to
|
||||||
|
kill them.
|
||||||
|
|
||||||
{{< /hint >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
![Demo GIF of Spamton Shimeji](https://media.discordapp.net/attachments/810799100940255260/1032846469855727656/ezgif.com-gif-maker19.gif)
|
![Demo GIF of Spamton Shimeji](https://media.discordapp.net/attachments/810799100940255260/1032846469855727656/ezgif.com-gif-maker19.gif)
|
||||||
|
|
||||||
# Toggle animations/blur/etc hotkey
|
## Toggle animations/blur/etc hotkey
|
||||||
|
|
||||||
For increased performance in games, or for less distractions at a keypress
|
For increased performance in games, or for less distractions at a keypress
|
||||||
|
|
||||||
1. create file `~/.config/hypr/gamemode.sh && chmod +x ~/.config/hypr/gamemode.sh` and add:
|
1. create file
|
||||||
|
`~/.config/hypr/gamemode.sh && chmod +x ~/.config/hypr/gamemode.sh` and add:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#!/usr/bin/env sh
|
#!/usr/bin/env sh
|
||||||
|
@ -152,7 +169,8 @@ fi
|
||||||
hyprctl reload
|
hyprctl reload
|
||||||
```
|
```
|
||||||
|
|
||||||
Edit to your liking of course. If animations are enabled, it disables all the pretty stuff. Otherwise, the script reloads your config to grab your defaults.
|
Edit to your liking of course. If animations are enabled, it disables all the
|
||||||
|
pretty stuff. Otherwise, the script reloads your config to grab your defaults.
|
||||||
|
|
||||||
2. Add this to your `hyprland.conf`:
|
2. Add this to your `hyprland.conf`:
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
weight: 12
|
||||||
|
title: Using hyprctl
|
||||||
|
---
|
||||||
|
|
||||||
`hyprctl` is a utility for controlling some parts of the compositor from a CLI
|
`hyprctl` is a utility for controlling some parts of the compositor from a CLI
|
||||||
or a script. If you install with `make install`, or any package, it should
|
or a script. If you install with `make install`, or any package, it should
|
||||||
automatically be installed.
|
automatically be installed.
|
||||||
|
@ -8,18 +13,15 @@ the terminal.
|
||||||
If it's not, go to the repo root and `/hyprctl`. Issue a `make all` and then
|
If it's not, go to the repo root and `/hyprctl`. Issue a `make all` and then
|
||||||
`sudo cp ./hyprctl /usr/bin`.
|
`sudo cp ./hyprctl /usr/bin`.
|
||||||
|
|
||||||
# Using Hyprctl
|
{{< callout type=warning >}}
|
||||||
|
|
||||||
{{< hint type=warning >}}
|
_hyprctl_ calls will be dispatched by the compositor _synchronously_, meaning
|
||||||
|
any spam of the utility will cause slowdowns. It's recommended to use `--batch`
|
||||||
|
for many control calls, and limiting the amount of info calls.
|
||||||
|
|
||||||
_hyprctl_ calls will be dispatched by the compositor _synchronously_,
|
For live event handling, see the [socket2](../../ipc/).
|
||||||
meaning any spam of the utility will cause slowdowns.
|
|
||||||
It's recommended to use `--batch` for many control calls, and
|
|
||||||
limiting the amount of info calls.
|
|
||||||
|
|
||||||
For live event handling, see the [socket2](../../IPC/).
|
{{< /callout >}}
|
||||||
|
|
||||||
{{< /hint >}}
|
|
||||||
|
|
||||||
## Commands
|
## Commands
|
||||||
|
|
||||||
|
@ -95,15 +97,17 @@ params: `create` or `remove` and `backend` or `name` respectively.
|
||||||
|
|
||||||
For _create_:
|
For _create_:
|
||||||
|
|
||||||
pass a backend name: `wayland`, `x11`, `headless` or `auto`. On a _real_ hyprland
|
pass a backend name: `wayland`, `x11`, `headless` or `auto`. On a _real_
|
||||||
session, if you're looking for a VNC / RDP type thing, it's 99% going to be `headless`.
|
hyprland session, if you're looking for a VNC / RDP type thing, it's 99% going
|
||||||
|
to be `headless`.
|
||||||
|
|
||||||
For _remove_:
|
For _remove_:
|
||||||
|
|
||||||
pass the output's name, as found in `hyprctl monitors`. Please be aware you are _not_
|
pass the output's name, as found in `hyprctl monitors`. Please be aware you are
|
||||||
allowed to remove real displays with this command.
|
_not_ allowed to remove real displays with this command.
|
||||||
|
|
||||||
e.g.:
|
e.g.:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
# will create a 1920x1080 headless display, for example to use with RDP.
|
# will create a 1920x1080 headless display, for example to use with RDP.
|
||||||
hyprctl output create headless
|
hyprctl output create headless
|
||||||
|
@ -117,6 +121,7 @@ hyprctl output remove HEADLESS-1
|
||||||
Sets the xkb layout index for a keyboard.
|
Sets the xkb layout index for a keyboard.
|
||||||
|
|
||||||
For example, if you set:
|
For example, if you set:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
device:my-epic-keyboard-v1 {
|
device:my-epic-keyboard-v1 {
|
||||||
kb_layout=us,pl,de
|
kb_layout=us,pl,de
|
||||||
|
@ -128,9 +133,10 @@ You can use this command to switch between them.
|
||||||
```sh
|
```sh
|
||||||
hyprctl switchxkblayout [DEVICE] [CMD]
|
hyprctl switchxkblayout [DEVICE] [CMD]
|
||||||
```
|
```
|
||||||
where `CMD` is either `next` for next, `prev` for previous, or `ID`
|
|
||||||
for a specific one (in the above case, `us`: 0, `pl`: 1, `de`: 2).
|
where `CMD` is either `next` for next, `prev` for previous, or `ID` for a
|
||||||
You can find the `DEVICE` using `hyprctl devices` command.
|
specific one (in the above case, `us`: 0, `pl`: 1, `de`: 2). You can find the
|
||||||
|
`DEVICE` using `hyprctl devices` command.
|
||||||
|
|
||||||
example command for a typical keyboard:
|
example command for a typical keyboard:
|
||||||
|
|
||||||
|
@ -138,9 +144,12 @@ example command for a typical keyboard:
|
||||||
hyprctl switchxkblayout at-translated-set-2-keyboard next
|
hyprctl switchxkblayout at-translated-set-2-keyboard next
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< hint >}}
|
{{< callout type=info >}}
|
||||||
|
|
||||||
If you want a single variant ie. pl/dvorak on one layout but us/qwerty on the other, xkb parameters can still be blank, however the amount of comma-separated parameters have to match. Alternatively, a single parameter can be specified for it to apply to all three.
|
If you want a single variant ie. pl/dvorak on one layout but us/qwerty on the
|
||||||
|
other, xkb parameters can still be blank, however the amount of comma-separated
|
||||||
|
parameters have to match. Alternatively, a single parameter can be specified for
|
||||||
|
it to apply to all three.
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
input {
|
input {
|
||||||
|
@ -150,7 +159,7 @@ input {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< /hint >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
### seterror
|
### seterror
|
||||||
|
|
||||||
|
@ -161,14 +170,16 @@ hyprctl seterror 'rgba(66ee66ff)' hello world this is my problem
|
||||||
```
|
```
|
||||||
|
|
||||||
or disable:
|
or disable:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
hyprctl seterror disable
|
hyprctl seterror disable
|
||||||
```
|
```
|
||||||
|
|
||||||
### setprop
|
### setprop
|
||||||
|
|
||||||
Sets a window prop. Can be locked by adding `lock` at the end. If `lock` is not added,
|
Sets a window prop. Can be locked by adding `lock` at the end. If `lock` is not
|
||||||
will be unlocked. Locking means a dynamic windowrule _cannot_ override this setting.
|
added, will be unlocked. Locking means a dynamic windowrule _cannot_ override
|
||||||
|
this setting.
|
||||||
|
|
||||||
Prop List:
|
Prop List:
|
||||||
| prop | comment |
|
| prop | comment |
|
||||||
|
@ -212,6 +223,7 @@ hyprctl notify [ICON] [TIME_MS] [COLOR] [MESSAGE]
|
||||||
```
|
```
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
hyprctl notify -1 10000 "rgb(ff1ea3)" "Hello everyone!"
|
hyprctl notify -1 10000 "rgb(ff1ea3)" "Hello everyone!"
|
||||||
```
|
```
|
||||||
|
@ -221,6 +233,7 @@ Icon of `-1` means "No icon"
|
||||||
Color of `0` means "Default color for icon"
|
Color of `0` means "Default color for icon"
|
||||||
|
|
||||||
Icon list:
|
Icon list:
|
||||||
|
|
||||||
```
|
```
|
||||||
WARNING = 0
|
WARNING = 0
|
||||||
INFO = 1
|
INFO = 1
|
||||||
|
@ -270,8 +283,8 @@ instances - lists all running instances of hyprland with their info
|
||||||
layouts - lists all layouts available (including plugin'd ones)
|
layouts - lists all layouts available (including plugin'd ones)
|
||||||
```
|
```
|
||||||
|
|
||||||
For the getoption command, the option name should be written as `section:option`,
|
For the getoption command, the option name should be written as
|
||||||
e.g.:
|
`section:option`, e.g.:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
hyprctl getoption general:border_size
|
hyprctl getoption general:border_size
|
||||||
|
@ -280,7 +293,7 @@ hyprctl getoption general:border_size
|
||||||
hyprctl getoption input:touchpad:disable_while_typing
|
hyprctl getoption input:touchpad:disable_while_typing
|
||||||
```
|
```
|
||||||
|
|
||||||
See [Variables](../Variables) for section and options you can use.
|
See [Variables](../variables) for section and options you can use.
|
||||||
|
|
||||||
## Batch
|
## Batch
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,21 @@
|
||||||
For basic syntax info, see [Configuring Hyprland](../Configuring-Hyprland).
|
---
|
||||||
|
weight: 2
|
||||||
|
title: Variables
|
||||||
|
---
|
||||||
|
|
||||||
This page documents all the "options" of Hyprland. For binds, monitors, animations,
|
For basic syntax info, see [Configuring Hyprland](../configuring-hyprland).
|
||||||
etc. see the sidebar. For anything else, see [Keywords](../Keywords).
|
|
||||||
|
This page documents all the "options" of Hyprland. For binds, monitors,
|
||||||
|
animations, etc. see the sidebar. For anything else, see
|
||||||
|
[Keywords](../keywords).
|
||||||
|
|
||||||
Please keep in mind some options that are layout-specific will be documented in
|
Please keep in mind some options that are layout-specific will be documented in
|
||||||
the layout pages and not here. (See the Sidebar for Dwindle and Master layouts)
|
the layout pages and not here. (See the Sidebar for Dwindle and Master layouts)
|
||||||
|
|
||||||
{{< toc >}}
|
## Variable types
|
||||||
|
|
||||||
# Variable types
|
|
||||||
|
|
||||||
| type | description |
|
| type | description |
|
||||||
|---|---|
|
| --- | --- |
|
||||||
| int | integer |
|
| int | integer |
|
||||||
| bool | boolean, `true` or `false` (`yes` or `no`, `on` or `off`, `0` or `1`) - any numerical value that is not `0` or `1` will cause undefined behavior. |
|
| bool | boolean, `true` or `false` (`yes` or `no`, `on` or `off`, `0` or `1`) - any numerical value that is not `0` or `1` will cause undefined behavior. |
|
||||||
| float | floating point number |
|
| float | floating point number |
|
||||||
|
@ -21,7 +25,7 @@ the layout pages and not here. (See the Sidebar for Dwindle and Master layouts)
|
||||||
| str | a string |
|
| str | a string |
|
||||||
| gradient | a gradient, in the form of `color color ... [angle]` where `color` is a color (see above) and angle is an angle in degrees, in the format of `123deg` e.g. `45deg` (e.g. `rgba(11ee11ff) rgba(1111eeff) 45deg`) Angle is optional and will default to `0deg` |
|
| gradient | a gradient, in the form of `color color ... [angle]` where `color` is a color (see above) and angle is an angle in degrees, in the format of `123deg` e.g. `45deg` (e.g. `rgba(11ee11ff) rgba(1111eeff) 45deg`) Angle is optional and will default to `0deg` |
|
||||||
|
|
||||||
{{< hint type=info >}}
|
{{< callout type=info >}}
|
||||||
|
|
||||||
**_Colors:_**
|
**_Colors:_**
|
||||||
|
|
||||||
|
@ -39,11 +43,11 @@ legacy, e.g. `0xeeb3ff1a` -> ARGB order
|
||||||
SHIFT CAPS CTRL/CONTROL ALT MOD2 MOD3 SUPER/WIN/LOGO/MOD4 MOD5
|
SHIFT CAPS CTRL/CONTROL ALT MOD2 MOD3 SUPER/WIN/LOGO/MOD4 MOD5
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< /hint >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
# Sections
|
## Sections
|
||||||
|
|
||||||
## General
|
### General
|
||||||
|
|
||||||
| name | description | type | default |
|
| name | description | type | default |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
|
@ -68,15 +72,17 @@ SHIFT CAPS CTRL/CONTROL ALT MOD2 MOD3 SUPER/WIN/LOGO/MOD4 MOD5
|
||||||
| allow_tearing | master switch for allowing tearing to occur. See [the Tearing page](../Tearing). | bool | false |
|
| allow_tearing | master switch for allowing tearing to occur. See [the Tearing page](../Tearing). | bool | false |
|
||||||
| resize_corner | force floating windows to use a specific corner when being resized (1-4 going clockwise from top left, 0 to disable) | int | 0 |
|
| resize_corner | force floating windows to use a specific corner when being resized (1-4 going clockwise from top left, 0 to disable) | int | 0 |
|
||||||
|
|
||||||
|
{{< callout type=warning >}}
|
||||||
|
|
||||||
{{< hint type=warning >}}
|
Prefer using `input:sensitivity` over `general:sensitivity` to avoid bugs,
|
||||||
Prefer using `input:sensitivity` over `general:sensitivity` to avoid bugs, especially with Wine/Proton apps.
|
especially with Wine/Proton apps.
|
||||||
{{< /hint >}}
|
|
||||||
|
|
||||||
## Decoration
|
{{< /callout >}}
|
||||||
|
|
||||||
|
### Decoration
|
||||||
|
|
||||||
| name | description | type | default |
|
| name | description | type | default |
|
||||||
|---|---|---|---|
|
| --- | --- | --- | --- |
|
||||||
| rounding | rounded corners' radius (in layout px) | int | 0 |
|
| rounding | rounded corners' radius (in layout px) | int | 0 |
|
||||||
| active_opacity | opacity of active windows. [0.0 - 1.0] | float | 1.0 |
|
| active_opacity | opacity of active windows. [0.0 - 1.0] | float | 1.0 |
|
||||||
| inactive_opacity | opacity of inactive windows. [0.0 - 1.0] | float | 1.0 |
|
| inactive_opacity | opacity of inactive windows. [0.0 - 1.0] | float | 1.0 |
|
||||||
|
@ -95,11 +101,12 @@ Prefer using `input:sensitivity` over `general:sensitivity` to avoid bugs, espec
|
||||||
| dim_around | how much the `dimaround` window rule should dim by. [0.0 - 1.0] | float | 0.4 |
|
| dim_around | how much the `dimaround` window rule should dim by. [0.0 - 1.0] | float | 0.4 |
|
||||||
| screen_shader | a path to a custom shader to be applied at the end of rendering. See `examples/screenShader.frag` for an example. | str | \[\[Empty\]\] |
|
| screen_shader | a path to a custom shader to be applied at the end of rendering. See `examples/screenShader.frag` for an example. | str | \[\[Empty\]\] |
|
||||||
|
|
||||||
### Blur
|
#### Blur
|
||||||
|
|
||||||
_Subcategory `decoration:blur:`_
|
_Subcategory `decoration:blur:`_
|
||||||
|
|
||||||
| name | description | type | default |
|
| name | description | type | default |
|
||||||
|---|---|---|---|
|
| --- | --- | --- | --- |
|
||||||
| enabled | enable kawase window background blur | bool | true |
|
| enabled | enable kawase window background blur | bool | true |
|
||||||
| size | blur size (distance) | int | 8 |
|
| size | blur size (distance) | int | 8 |
|
||||||
| passes | the amount of passes to perform | int | 1 |
|
| passes | the amount of passes to perform | int | 1 |
|
||||||
|
@ -115,7 +122,8 @@ _Subcategory `decoration:blur:`_
|
||||||
| popups | whether to blur popups (e.g. right-click menus) | bool | false |
|
| popups | whether to blur popups (e.g. right-click menus) | bool | false |
|
||||||
| popups_ignorealpha | works like ignorealpha in layer rules. If pixel opacity is below set value, will not blur. [0.0 - 1.0] | float | 0.2 |
|
| popups_ignorealpha | works like ignorealpha in layer rules. If pixel opacity is below set value, will not blur. [0.0 - 1.0] | float | 0.2 |
|
||||||
|
|
||||||
{{< hint type=important >}}
|
{{< callout type=important >}}
|
||||||
|
|
||||||
A subcategory is a nested category:
|
A subcategory is a nested category:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
|
@ -131,32 +139,33 @@ decoration {
|
||||||
```
|
```
|
||||||
|
|
||||||
Doing `decoration:blur {` is **invalid**!
|
Doing `decoration:blur {` is **invalid**!
|
||||||
{{< /hint >}}
|
|
||||||
|
|
||||||
{{< hint type=info >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
|
{{< callout type=info >}}
|
||||||
|
|
||||||
`blur:size` and `blur:passes` have to be at least 1.
|
`blur:size` and `blur:passes` have to be at least 1.
|
||||||
|
|
||||||
Increasing `blur:passes` is necessary to prevent blur looking wrong on higher `blur:size` values,
|
Increasing `blur:passes` is necessary to prevent blur looking wrong on higher
|
||||||
but remember that higher `blur:passes` will require more strain on the GPU.
|
`blur:size` values, but remember that higher `blur:passes` will require more
|
||||||
|
strain on the GPU.
|
||||||
|
|
||||||
{{< /hint >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
## Animations
|
### Animations
|
||||||
|
|
||||||
| name | description | type | default |
|
| name | description | type | default |
|
||||||
|---|---|---|---|
|
| --- | --- | --- | --- |
|
||||||
| enabled | enable animations | bool | true |
|
| enabled | enable animations | bool | true |
|
||||||
| first_launch_animation | enable first launch animation | bool | true |
|
| first_launch_animation | enable first launch animation | bool | true |
|
||||||
|
|
||||||
|
{{< callout type=info >}}
|
||||||
|
|
||||||
{{< hint type=info >}}
|
_[More about Animations](../animations)._
|
||||||
|
|
||||||
_[More about Animations](../Animations)._
|
{{< /callout >}}
|
||||||
|
|
||||||
{{< /hint >}}
|
### Input
|
||||||
|
|
||||||
## Input
|
|
||||||
|
|
||||||
| name | description | type | default |
|
| name | description | type | default |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
|
@ -185,33 +194,40 @@ _[More about Animations](../Animations)._
|
||||||
| float_switch_override_focus | If enabled (1 or 2), focus will change to the window under the cursor when changing from tiled-to-floating and vice versa. If 2, focus will also follow mouse on float-to-float switches. | int | 1 |
|
| float_switch_override_focus | If enabled (1 or 2), focus will change to the window under the cursor when changing from tiled-to-floating and vice versa. If 2, focus will also follow mouse on float-to-float switches. | int | 1 |
|
||||||
| special_fallthrough | if enabled, having only floating windows in the special workspace will not block focusing windows in the regular workspace. | bool | false |
|
| special_fallthrough | if enabled, having only floating windows in the special workspace will not block focusing windows in the regular workspace. | bool | false |
|
||||||
|
|
||||||
{{< hint type=info >}}
|
{{< callout type=info >}}
|
||||||
## XKB Settings
|
|
||||||
|
|
||||||
You can find a list of models, layouts, variants and options in [`/usr/share/X11/xkb/rules/base.lst`](file:///usr/share/X11/xkb/rules/base.lst).
|
### XKB Settings
|
||||||
Alternatively, you can use the `localectl` command to discover what is available on your system.
|
|
||||||
|
|
||||||
For switchable keyboard configurations, take a look at [the uncommon tips & tricks page entry](../Uncommon-tips--tricks/#switchable-keyboard-layouts).
|
You can find a list of models, layouts, variants and options in
|
||||||
|
[`/usr/share/X11/xkb/rules/base.lst`](file:///usr/share/X11/xkb/rules/base.lst).
|
||||||
|
Alternatively, you can use the `localectl` command to discover what is available
|
||||||
|
on your system.
|
||||||
|
|
||||||
{{< /hint >}}
|
For switchable keyboard configurations, take a look at
|
||||||
|
[the uncommon tips & tricks page entry](../uncommon-tips--tricks/#switchable-keyboard-layouts).
|
||||||
|
|
||||||
{{< hint type=info >}}
|
{{< /callout >}}
|
||||||
## Follow Mouse Cursor
|
|
||||||
|
{{< callout type=info >}}
|
||||||
|
|
||||||
|
### Follow Mouse Cursor
|
||||||
|
|
||||||
- 0 - Cursor movement will not change focus.
|
- 0 - Cursor movement will not change focus.
|
||||||
- 1 - Cursor movement will always change focus to the window under the cursor.
|
- 1 - Cursor movement will always change focus to the window under the cursor.
|
||||||
- 2 - Cursor focus will be detached from keyboard focus. Clicking on a window will move keyboard focus to that window.
|
- 2 - Cursor focus will be detached from keyboard focus. Clicking on a window
|
||||||
- 3 - Cursor focus will be completely separate from keyboard focus. Clicking on a window will not change keyboard focus.
|
will move keyboard focus to that window.
|
||||||
|
- 3 - Cursor focus will be completely separate from keyboard focus. Clicking on
|
||||||
|
a window will not change keyboard focus.
|
||||||
|
|
||||||
## Custom accel profiles
|
### Custom accel profiles
|
||||||
|
|
||||||
### `accel_profile`
|
#### `accel_profile`
|
||||||
|
|
||||||
`custom <step> <points...>`
|
`custom <step> <points...>`
|
||||||
|
|
||||||
for example `custom 200 0.0 0.5`
|
for example `custom 200 0.0 0.5`
|
||||||
|
|
||||||
### `scroll_points`
|
#### `scroll_points`
|
||||||
|
|
||||||
NOTE: Only works when `accel_profile` is set to `custom`.
|
NOTE: Only works when `accel_profile` is set to `custom`.
|
||||||
|
|
||||||
|
@ -219,23 +235,24 @@ NOTE: Only works when `accel_profile` is set to `custom`.
|
||||||
|
|
||||||
For example `0.2 0.0 0.5 1 1.2 1.5`
|
For example `0.2 0.0 0.5 1 1.2 1.5`
|
||||||
|
|
||||||
To mimic the Windows acceleration curves, take a look at [this script](https://gist.github.com/fufexan/de2099bc3086f3a6c83d61fc1fcc06c9).
|
To mimic the Windows acceleration curves, take a look at
|
||||||
|
[this script](https://gist.github.com/fufexan/de2099bc3086f3a6c83d61fc1fcc06c9).
|
||||||
|
|
||||||
See [the libinput doc](https://wayland.freedesktop.org/libinput/doc/latest/pointer-acceleration.html) for more insights on
|
See
|
||||||
how it works.
|
[the libinput doc](https://wayland.freedesktop.org/libinput/doc/latest/pointer-acceleration.html)
|
||||||
|
for more insights on how it works.
|
||||||
|
|
||||||
{{< /hint >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
|
#### Touchpad
|
||||||
### Touchpad
|
|
||||||
|
|
||||||
_Subcategory `input:touchpad:`_
|
_Subcategory `input:touchpad:`_
|
||||||
|
|
||||||
| name | description | type | default |
|
| name | description | type | default |
|
||||||
|---|---|---|---|
|
| --- | --- | --- | --- |
|
||||||
| disable_while_typing | Disable the touchpad while typing. | bool | true |
|
| disable_while_typing | Disable the touchpad while typing. | bool | true |
|
||||||
| natural_scroll | Inverts scrolling direction. When enabled, scrolling moves content directly instead of manipulating a scrollbar. | bool | false |
|
| natural_scroll | Inverts scrolling direction. When enabled, scrolling moves content directly instead of manipulating a scrollbar. | bool | false |
|
||||||
| scroll_factor | Multiplier applied to the amount of scroll movement. | float | 1.0
|
| scroll_factor | Multiplier applied to the amount of scroll movement. | float | 1.0 |
|
||||||
| middle_button_emulation | Sending LMB and RMB simultaneously will be interpreted as a middle click. This disables any touchpad area that would normally send a middle click based on location. [libinput#middle-button-emulation](https://wayland.freedesktop.org/libinput/doc/latest/middle-button-emulation.html) | bool | false |
|
| middle_button_emulation | Sending LMB and RMB simultaneously will be interpreted as a middle click. This disables any touchpad area that would normally send a middle click based on location. [libinput#middle-button-emulation](https://wayland.freedesktop.org/libinput/doc/latest/middle-button-emulation.html) | bool | false |
|
||||||
| tap_button_map | Sets the tap button mapping for touchpad button emulation. Can be one of `lrm` (default) or `lmr` (Left, Middle, Right Buttons). [lrm/lmr] | str | \[\[Empty\]\] |
|
| tap_button_map | Sets the tap button mapping for touchpad button emulation. Can be one of `lrm` (default) or `lmr` (Left, Middle, Right Buttons). [lrm/lmr] | str | \[\[Empty\]\] |
|
||||||
| clickfinger_behavior | Button presses with 1, 2, or 3 fingers will be mapped to LMB, RMB, and MMB respectively. This disables interpretation of clicks based on location on the touchpad. [libinput#clickfinger-behavior](https://wayland.freedesktop.org/libinput/doc/latest/clickpad-softbuttons.html#clickfinger-behavior) | bool | false |
|
| clickfinger_behavior | Button presses with 1, 2, or 3 fingers will be mapped to LMB, RMB, and MMB respectively. This disables interpretation of clicks based on location on the touchpad. [libinput#clickfinger-behavior](https://wayland.freedesktop.org/libinput/doc/latest/clickpad-softbuttons.html#clickfinger-behavior) | bool | false |
|
||||||
|
@ -243,37 +260,36 @@ _Subcategory `input:touchpad:`_
|
||||||
| drag_lock | When enabled, lifting the finger off for a short time while dragging will not drop the dragged item. [libinput#tap-and-drag](https://wayland.freedesktop.org/libinput/doc/latest/tapping.html#tap-and-drag) | bool | false |
|
| drag_lock | When enabled, lifting the finger off for a short time while dragging will not drop the dragged item. [libinput#tap-and-drag](https://wayland.freedesktop.org/libinput/doc/latest/tapping.html#tap-and-drag) | bool | false |
|
||||||
| tap-and-drag | Sets the tap and drag mode for the touchpad | bool | false |
|
| tap-and-drag | Sets the tap and drag mode for the touchpad | bool | false |
|
||||||
|
|
||||||
### Touchdevice
|
#### Touchdevice
|
||||||
|
|
||||||
_Subcategory `input:touchdevice:`_
|
_Subcategory `input:touchdevice:`_
|
||||||
|
|
||||||
| name | description | type | default |
|
| name | description | type | default |
|
||||||
|---|---|---|---|
|
| --- | --- | --- | --- |
|
||||||
| transform | transform the input from touchdevices. The possible transformations are the same as [those of the monitors](../Monitors/#rotating) | int | 0 |
|
| transform | transform the input from touchdevices. The possible transformations are the same as [those of the monitors](../monitors/#rotating) | int | 0 |
|
||||||
| output | the monitor to bind touch devices. The default is autodetection. To stop autotection use an empty string or the "\[\[Empty\]\]" value. | string | \[\[Auto\]\] |
|
| output | the monitor to bind touch devices. The default is autodetection. To stop autotection use an empty string or the "\[\[Empty\]\]" value. | string | \[\[Auto\]\] |
|
||||||
| enabled | Whether input is enabled for touch devices. | bool | true |
|
| enabled | Whether input is enabled for touch devices. | bool | true |
|
||||||
|
|
||||||
|
#### Tablet
|
||||||
### Tablet
|
|
||||||
|
|
||||||
_Subcategory `input:tablet:`_
|
_Subcategory `input:tablet:`_
|
||||||
|
|
||||||
| name | description | type | default |
|
| name | description | type | default |
|
||||||
|---|---|---|---|
|
| --- | --- | --- | --- |
|
||||||
| transform | transform the input from tablets. The possible transformations are the same as [those of the monitors](../Monitors/#rotating) | int | 0 |
|
| transform | transform the input from tablets. The possible transformations are the same as [those of the monitors](../monitors/#rotating) | int | 0 |
|
||||||
| output | the monitor to bind tablets. Empty means unbound. | string | \[\[Empty\]\] |
|
| output | the monitor to bind tablets. Empty means unbound. | string | \[\[Empty\]\] |
|
||||||
| region_position | position of the mapped region in monitor layout. | vec2 | [0, 0] |
|
| region_position | position of the mapped region in monitor layout. | vec2 | [0, 0] |
|
||||||
| region_size | size of the mapped region. When this variable is set, tablet input will be mapped to the region. [0, 0] or invalid size means unset. | vec2 | [0, 0] |
|
| region_size | size of the mapped region. When this variable is set, tablet input will be mapped to the region. [0, 0] or invalid size means unset. | vec2 | [0, 0] |
|
||||||
| relative_input | whether the input should be relative | bool | false |
|
| relative_input | whether the input should be relative | bool | false |
|
||||||
|
|
||||||
## Per-device input config
|
### Per-device input config
|
||||||
|
|
||||||
Described [here](../Keywords#per-device-input-configs).
|
Described [here](../keywords#per-device-input-configs).
|
||||||
|
|
||||||
## Gestures
|
### Gestures
|
||||||
|
|
||||||
| name | description | type | default |
|
| name | description | type | default |
|
||||||
|---|---|---|---|
|
| --- | --- | --- | --- |
|
||||||
| workspace_swipe | enable workspace swipe gesture | bool | false |
|
| workspace_swipe | enable workspace swipe gesture | bool | false |
|
||||||
| workspace_swipe_fingers | how many fingers for the gesture | int | 3 |
|
| workspace_swipe_fingers | how many fingers for the gesture | int | 3 |
|
||||||
| workspace_swipe_distance | in px, the distance of the gesture | int | 300 |
|
| workspace_swipe_distance | in px, the distance of the gesture | int | 300 |
|
||||||
|
@ -287,9 +303,10 @@ Described [here](../Keywords#per-device-input-configs).
|
||||||
| workspace_swipe_numbered | if enabled, swiping will swipe on consecutive numbered workspaces. | bool | false |
|
| workspace_swipe_numbered | if enabled, swiping will swipe on consecutive numbered workspaces. | bool | false |
|
||||||
| workspace_swipe_use_r | if enabled, swiping will use the `r` prefix instead of the `m` prefix for finding workspaces. (requires disabled `workspace_swipe_numbered`) | bool | false |
|
| workspace_swipe_use_r | if enabled, swiping will use the `r` prefix instead of the `m` prefix for finding workspaces. (requires disabled `workspace_swipe_numbered`) | bool | false |
|
||||||
|
|
||||||
## Group
|
### Group
|
||||||
|
|
||||||
| name | description | type | default |
|
| name | description | type | default |
|
||||||
|---|---|---|---|
|
| --- | --- | --- | --- |
|
||||||
| insert_after_current | whether new windows in a group spawn after current or at group tail | bool | true |
|
| insert_after_current | whether new windows in a group spawn after current or at group tail | bool | true |
|
||||||
| focus_removed_window | whether Hyprland should focus on the window that has just been moved out of the group | bool | true |
|
| focus_removed_window | whether Hyprland should focus on the window that has just been moved out of the group | bool | true |
|
||||||
| col.border_active | active group border color | gradient | 0x66ffff00 |
|
| col.border_active | active group border color | gradient | 0x66ffff00 |
|
||||||
|
@ -297,11 +314,12 @@ Described [here](../Keywords#per-device-input-configs).
|
||||||
| col.border_locked_active | active locked group border color | gradient | 0x66ff5500 |
|
| col.border_locked_active | active locked group border color | gradient | 0x66ff5500 |
|
||||||
| col.border_locked_inactive | inactive locked group border color | gradient | 0x66775500 |
|
| col.border_locked_inactive | inactive locked group border color | gradient | 0x66775500 |
|
||||||
|
|
||||||
### Groupbar
|
#### Groupbar
|
||||||
|
|
||||||
_Subcategory `group:groupbar:`_
|
_Subcategory `group:groupbar:`_
|
||||||
|
|
||||||
| name | description | type | default |
|
| name | description | type | default |
|
||||||
|---|---|---|---|
|
| --- | --- | --- | --- |
|
||||||
| enabled | enables groupbars | bool | true |
|
| enabled | enables groupbars | bool | true |
|
||||||
| font_family | font used to display groupbar titles | string | Sans |
|
| font_family | font used to display groupbar titles | string | Sans |
|
||||||
| font_size | font size for the above | int | 8 |
|
| font_size | font size for the above | int | 8 |
|
||||||
|
@ -316,7 +334,7 @@ _Subcategory `group:groupbar:`_
|
||||||
| col.locked_active | active locked group border color | gradient | 0x66ff5500 |
|
| col.locked_active | active locked group border color | gradient | 0x66ff5500 |
|
||||||
| col.locked_inactive | inactive locked group border color | gradient | 0x66775500 |
|
| col.locked_inactive | inactive locked group border color | gradient | 0x66775500 |
|
||||||
|
|
||||||
## Misc
|
### Misc
|
||||||
|
|
||||||
| name | description | type | default |
|
| name | description | type | default |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
|
@ -352,43 +370,43 @@ _Subcategory `group:groupbar:`_
|
||||||
| new_window_takes_over_fullscreen | if there is a fullscreen window, whether a new tiled window opened should replace the fullscreen one or stay behind. 0 - behind, 1 - takes over, 2 - unfullscreen the current fullscreen window [0/1/2] | int | 0 |
|
| new_window_takes_over_fullscreen | if there is a fullscreen window, whether a new tiled window opened should replace the fullscreen one or stay behind. 0 - behind, 1 - takes over, 2 - unfullscreen the current fullscreen window [0/1/2] | int | 0 |
|
||||||
| enable_hyprcursor | whether to enable hyprcursor support | bool | true |
|
| enable_hyprcursor | whether to enable hyprcursor support | bool | true |
|
||||||
|
|
||||||
## Binds
|
### Binds
|
||||||
|
|
||||||
| name | description | type | default |
|
| name | description | type | default |
|
||||||
|---|---|---|---|
|
| --- | --- | --- | --- |
|
||||||
| pass_mouse_when_bound | if disabled, will not pass the mouse events to apps / dragging windows around if a keybind has been triggered. | bool | false |
|
| pass_mouse_when_bound | if disabled, will not pass the mouse events to apps / dragging windows around if a keybind has been triggered. | bool | false |
|
||||||
| scroll_event_delay | in ms, how many ms to wait after a scroll event to allow to pass another one for the binds. | int | 300 |
|
| scroll_event_delay | in ms, how many ms to wait after a scroll event to allow to pass another one for the binds. | int | 300 |
|
||||||
| workspace_back_and_forth | If enabled, an attempt to switch to the currently focused workspace will instead switch to the previous workspace. Akin to i3's *auto_back_and_forth*. | bool | false |
|
| workspace_back_and_forth | If enabled, an attempt to switch to the currently focused workspace will instead switch to the previous workspace. Akin to i3's _auto_back_and_forth_. | bool | false |
|
||||||
| allow_workspace_cycles | If enabled, workspaces don't forget their previous workspace, so cycles can be created by switching to the first workspace in a sequence, then endlessly going to the previous workspace. | bool | false |
|
| allow_workspace_cycles | If enabled, workspaces don't forget their previous workspace, so cycles can be created by switching to the first workspace in a sequence, then endlessly going to the previous workspace. | bool | false |
|
||||||
| workspace_center_on | Whether switching workspaces should center the cursor on the workspace (0) or on the last active window for that workspace (1) | int | 0 |
|
| workspace_center_on | Whether switching workspaces should center the cursor on the workspace (0) or on the last active window for that workspace (1) | int | 0 |
|
||||||
| focus_preferred_method | sets the preferred focus finding method when using `focuswindow`/`movewindow`/etc with a direction. 0 - history (recent have priority), 1 - length (longer shared edges have priority) | int | 0 |
|
| focus_preferred_method | sets the preferred focus finding method when using `focuswindow`/`movewindow`/etc with a direction. 0 - history (recent have priority), 1 - length (longer shared edges have priority) | int | 0 |
|
||||||
| ignore_group_lock | If enabled, dispatchers like `moveintogroup`, `moveoutofgroup` and `movewindoworgroup` will ignore lock per group. | bool | false |
|
| ignore_group_lock | If enabled, dispatchers like `moveintogroup`, `moveoutofgroup` and `movewindoworgroup` will ignore lock per group. | bool | false |
|
||||||
| movefocus_cycles_fullscreen | If enabled, when on a fullscreen window, `movefocus` will cycle fullscreen, if not, it will move the focus in a direction. | bool | true |
|
| movefocus_cycles_fullscreen | If enabled, when on a fullscreen window, `movefocus` will cycle fullscreen, if not, it will move the focus in a direction. | bool | true |
|
||||||
|
|
||||||
## XWayland
|
### XWayland
|
||||||
|
|
||||||
| name | description | type | default |
|
| name | description | type | default |
|
||||||
|---|---|---|---|
|
| --- | --- | --- | --- |
|
||||||
| use_nearest_neighbor | uses the nearest neigbor filtering for xwayland apps, making them pixelated rather than blurry | bool | true |
|
| use_nearest_neighbor | uses the nearest neigbor filtering for xwayland apps, making them pixelated rather than blurry | bool | true |
|
||||||
| force_zero_scaling | forces a scale of 1 on xwayland windows on scaled displays. | bool | false |
|
| force_zero_scaling | forces a scale of 1 on xwayland windows on scaled displays. | bool | false |
|
||||||
|
|
||||||
## OpenGL
|
### OpenGL
|
||||||
|
|
||||||
| name | description | type | default |
|
| name | description | type | default |
|
||||||
|---|---|---|---|
|
| --- | --- | --- | --- |
|
||||||
| nvidia_anti_flicker | reduces flickering on nvidia at the cost of possible frame drops on lower-end GPUs. On non-nvidia, this is ignored. | bool | true |
|
| nvidia_anti_flicker | reduces flickering on nvidia at the cost of possible frame drops on lower-end GPUs. On non-nvidia, this is ignored. | bool | true |
|
||||||
| force_introspection | forces introspection at all times. Introspection is aimed at reducing GPU usage in certain cases, but might cause graphical glitches on nvidia. 0 - nothing, 1 - force always on, 2 - force always on if nvidia | int | 2 |
|
| force_introspection | forces introspection at all times. Introspection is aimed at reducing GPU usage in certain cases, but might cause graphical glitches on nvidia. 0 - nothing, 1 - force always on, 2 - force always on if nvidia | int | 2 |
|
||||||
|
|
||||||
## Debug
|
### Debug
|
||||||
|
|
||||||
{{< hint type=warning >}}
|
{{< callout type=warning >}}
|
||||||
|
|
||||||
Only for developers.
|
Only for developers.
|
||||||
|
|
||||||
{{< /hint >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
| name | description | type | default |
|
| name | description | type | default |
|
||||||
|---|---|---|---|
|
| --- | --- | --- | --- |
|
||||||
| overlay | print the debug performance overlay. Disable VFR for accurate results. | bool | false |
|
| overlay | print the debug performance overlay. Disable VFR for accurate results. | bool | false |
|
||||||
| damage_blink | (epilepsy warning!) flash areas updated with damage tracking | bool | false |
|
| damage_blink | (epilepsy warning!) flash areas updated with damage tracking | bool | false |
|
||||||
| disable_logs | disable logging to a file | bool | true |
|
| disable_logs | disable logging to a file | bool | true |
|
||||||
|
@ -396,11 +414,11 @@ Only for developers.
|
||||||
| damage_tracking | redraw only the needed bits of the display. Do **not** change. (default: full - 2) monitor - 1, none - 0 | int | 2 |
|
| damage_tracking | redraw only the needed bits of the display. Do **not** change. (default: full - 2) monitor - 1, none - 0 | int | 2 |
|
||||||
| enable_stdout_logs | enables logging to stdout | bool | false |
|
| enable_stdout_logs | enables logging to stdout | bool | false |
|
||||||
| manual_crash | set to 1 and then back to 0 to crash Hyprland. | int | 0 |
|
| manual_crash | set to 1 and then back to 0 to crash Hyprland. | int | 0 |
|
||||||
| suppress_errors| if true, do not display config file parsing errors. | bool | false |
|
| suppress_errors | if true, do not display config file parsing errors. | bool | false |
|
||||||
| watchdog_timeout | sets the timeout in seconds for watchdog to abort processing of a signal of the main thread. Set to 0 to disable. | int | 5 |
|
| watchdog_timeout | sets the timeout in seconds for watchdog to abort processing of a signal of the main thread. Set to 0 to disable. | int | 5 |
|
||||||
| disable_scale_checks | disables verifying of the scale factors. Will result in pixel alignment and rounding errors. | bool | false |
|
| disable_scale_checks | disables verifying of the scale factors. Will result in pixel alignment and rounding errors. | bool | false |
|
||||||
|
|
||||||
## More
|
### More
|
||||||
|
|
||||||
There are more config options described in other pages, which are layout- or
|
There are more config options described in other pages, which are layout- or
|
||||||
circumstance-specific. See the sidebar for more pages.
|
circumstance-specific. See the sidebar for more pages.
|
||||||
|
|
|
@ -1,25 +1,29 @@
|
||||||
# Table of contents
|
---
|
||||||
|
weight: 7
|
||||||
|
title: Window Rules
|
||||||
|
---
|
||||||
|
|
||||||
{{< toc >}}
|
{{< callout type=warning >}}
|
||||||
|
|
||||||
# Disclaimers
|
Window rules (both V1 and V2) are **case sensitive**. (e.g. `firefox` ≠
|
||||||
|
`Firefox`)
|
||||||
|
|
||||||
{{< hint type=warning >}}
|
{{< /callout >}}
|
||||||
Window rules (both V1 and V2) are **case sensitive**. (e.g. `firefox` ≠ `Firefox`)
|
|
||||||
{{< /hint >}}
|
|
||||||
|
|
||||||
# Window Rules V1
|
## Window Rules V1
|
||||||
|
|
||||||
You can set window rules to achieve different behaviors from the active container.
|
You can set window rules to achieve different behaviors from the active
|
||||||
|
container.
|
||||||
|
|
||||||
## Syntax
|
### Syntax
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
windowrule=RULE,WINDOW
|
windowrule=RULE,WINDOW
|
||||||
```
|
```
|
||||||
|
|
||||||
- `RULE` is a [rule](#rules) (and a param if applicable)
|
- `RULE` is a [rule](#rules) (and a param if applicable)
|
||||||
- `WINDOW` is a [RegEx](https://en.wikipedia.org/wiki/Regular_expression), either:
|
- `WINDOW` is a [RegEx](https://en.wikipedia.org/wiki/Regular_expression),
|
||||||
|
either:
|
||||||
- plain RegEx (for matching a window class);
|
- plain RegEx (for matching a window class);
|
||||||
- `title:` followed by a regex (for matching a window's title)
|
- `title:` followed by a regex (for matching a window's title)
|
||||||
|
|
||||||
|
@ -30,10 +34,10 @@ windowrule=float,^(kitty)$
|
||||||
windowrule=move 0 0,title:^(Firefox)(.*)$
|
windowrule=move 0 0,title:^(Firefox)(.*)$
|
||||||
```
|
```
|
||||||
|
|
||||||
# Window Rules V2
|
## Window Rules V2
|
||||||
|
|
||||||
In order to allow more flexible rules, while retaining compatibility with the above
|
In order to allow more flexible rules, while retaining compatibility with the
|
||||||
rule system, window rules V2 were implemented.
|
above rule system, window rules V2 were implemented.
|
||||||
|
|
||||||
In V2, you are allowed to match multiple variables.
|
In V2, you are allowed to match multiple variables.
|
||||||
|
|
||||||
|
@ -44,17 +48,22 @@ for multiple values like so:
|
||||||
windowrulev2 = float,class:(kitty),title:(kitty)
|
windowrulev2 = float,class:(kitty),title:(kitty)
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< hint type=tip >}}
|
{{< callout type=info >}}
|
||||||
In the case of dynamic window titles such as browser windows keep in mind how powerful regex is.
|
|
||||||
|
|
||||||
for example a window rule of: `windowrule=opacity 0.3 override 0.3 override,title:(.*)(- Youtube)$` will match
|
In the case of dynamic window titles such as browser windows keep in mind how
|
||||||
*any* window that contains a string of "- Youtube" after any other text. This could be multiple browser windows
|
powerful regex is.
|
||||||
or other applications that contain the string for any reason.
|
|
||||||
|
|
||||||
|
for example a window rule of:
|
||||||
|
`windowrule=opacity 0.3 override 0.3 override,title:(.*)(- Youtube)$` will match
|
||||||
|
_any_ window that contains a string of "- Youtube" after any other text. This
|
||||||
|
could be multiple browser windows or other applications that contain the string
|
||||||
|
for any reason.
|
||||||
|
|
||||||
for the `windowrulev2 = float,class:(kitty),title:(kitty)` example, the `class:(kitty)` `WINDOW` field is what keeps the window rule
|
for the `windowrulev2 = float,class:(kitty),title:(kitty)` example, the
|
||||||
specific to kitty terminals.
|
`class:(kitty)` `WINDOW` field is what keeps the window rule specific to kitty
|
||||||
{{< /hint >}}
|
terminals.
|
||||||
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
For now, the supported fields are:
|
For now, the supported fields are:
|
||||||
|
|
||||||
|
@ -74,12 +83,12 @@ onworkspace (how many windows are on the workspace) - int
|
||||||
|
|
||||||
Keep in mind that you _have_ to declare at least one field, but not all.
|
Keep in mind that you _have_ to declare at least one field, but not all.
|
||||||
|
|
||||||
{{< hint type=tip >}}
|
{{< callout type=info >}}
|
||||||
|
|
||||||
To get more information about a window's class, title, XWayland status or its size,
|
To get more information about a window's class, title, XWayland status or its
|
||||||
you can use `hyprctl clients`.
|
size, you can use `hyprctl clients`.
|
||||||
|
|
||||||
{{< /hint >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
## Rules
|
## Rules
|
||||||
|
|
||||||
|
@ -99,7 +108,7 @@ Static rules are evaluated once at window open and never again.
|
||||||
| center (\[opt\]) | if the window is floating, will center it on the monitor. Set opt as 1 to respect monitor reserved area |
|
| center (\[opt\]) | if the window is floating, will center it on the monitor. Set opt as 1 to respect monitor reserved area |
|
||||||
| pseudo | pseudotiles a window |
|
| pseudo | pseudotiles a window |
|
||||||
| monitor \[id\] | sets the monitor on which a window should open. `id` can be either id or name (either e.g. `1` or e.g. `DP-1`) |
|
| monitor \[id\] | sets the monitor on which a window should open. `id` can be either id or name (either e.g. `1` or e.g. `DP-1`) |
|
||||||
| workspace \[w\] | sets the workspace on which a window should open (for workspace syntax, see [dispatchers->workspaces](../Dispatchers#workspaces)). You can also make \[w\] to `unset`, will unset all previous workspace rules applied to this window. You can also add `silent` after the workspace to make the window open silently. |
|
| workspace \[w\] | sets the workspace on which a window should open (for workspace syntax, see [dispatchers->workspaces](../dispatchers#workspaces)). You can also make \[w\] to `unset`, will unset all previous workspace rules applied to this window. You can also add `silent` after the workspace to make the window open silently. |
|
||||||
| nofocus | disables focus to the window |
|
| nofocus | disables focus to the window |
|
||||||
| noinitialfocus | disables the initial focus to the window |
|
| noinitialfocus | disables the initial focus to the window |
|
||||||
| forceinput | forces an XWayland window to receive input, even if it requests not to do so. (Might fix issues like e.g. Game Launchers not receiving focus for some reason) |
|
| forceinput | forces an XWayland window to receive input, even if it requests not to do so. (Might fix issues like e.g. Game Launchers not receiving focus for some reason) |
|
||||||
|
@ -132,31 +141,38 @@ Dynamic rules are re-evaluated every time a property changes.
|
||||||
| noshadow | disables shadows for the window |
|
| noshadow | disables shadows for the window |
|
||||||
| noanim | disables the animations for the window |
|
| noanim | disables the animations for the window |
|
||||||
| keepaspectratio | forces aspect ratio when resizing window with the mouse |
|
| keepaspectratio | forces aspect ratio when resizing window with the mouse |
|
||||||
| bordercolor \[c\] | force the bordercolor of the window. Options for c: `color`/`color ... color angle` -> sets the active border color/gradient OR `color color`/`color ... color angle color ... color [angle]` -> sets the active and inactive border color/gradient of the window. See [variables->colors](../Variables#variable_types) for color definition. |
|
| bordercolor \[c\] | force the bordercolor of the window. Options for c: `color`/`color ... color angle` -> sets the active border color/gradient OR `color color`/`color ... color angle color ... color [angle]` -> sets the active and inactive border color/gradient of the window. See [variables->colors](../variables#variable_types) for color definition. |
|
||||||
| idleinhibit \[mode\] | sets an idle inhibit rule for the window. If active, apps like `hypridle` will not fire. Modes: `none`, `always`, `focus`, `fullscreen` |
|
| idleinhibit \[mode\] | sets an idle inhibit rule for the window. If active, apps like `hypridle` will not fire. Modes: `none`, `always`, `focus`, `fullscreen` |
|
||||||
| dimaround | dims everything around the window . Please note this rule is meant for floating windows and using it on tiled ones may result in strange behavior. |
|
| dimaround | dims everything around the window . Please note this rule is meant for floating windows and using it on tiled ones may result in strange behavior. |
|
||||||
| xray \[on\] | sets blur xray mode for the window (0 for off, 1 for on, unset for default) |
|
| xray \[on\] | sets blur xray mode for the window (0 for off, 1 for on, unset for default) |
|
||||||
| immediate | forces the window to allow to be torn. See [the Tearing page](../Tearing). |
|
| immediate | forces the window to allow to be torn. See [the Tearing page](../tearing). |
|
||||||
| nearestneighbor | forces the window to use the nearest neigbor filtering. |
|
| nearestneighbor | forces the window to use the nearest neigbor filtering. |
|
||||||
|
|
||||||
{{< hint type=info >}}
|
{{< callout type=info >}}
|
||||||
|
|
||||||
## `group` window rule options
|
## `group` window rule options
|
||||||
|
|
||||||
- `set` \[`always`\] - Open window as a group.
|
- `set` \[`always`\] - Open window as a group.
|
||||||
- `new` - Shorthand of `barred set`.
|
- `new` - Shorthand of `barred set`.
|
||||||
- `lock` \[`always`\] - Lock the group that added this window. Use with `set` or `new` (i.e. `new lock`) to create a new locked group.
|
- `lock` \[`always`\] - Lock the group that added this window. Use with `set` or
|
||||||
- `barred` - Do not add the window to the focused group. By default, a window with a `group set` rule will be added to an active group if possible.
|
`new` (i.e. `new lock`) to create a new locked group.
|
||||||
- `deny` - Do not allow window to be toggled as or added to group (see `denywindowfromgroup` dispatcher).
|
- `barred` - Do not add the window to the focused group. By default, a window
|
||||||
|
with a `group set` rule will be added to an active group if possible.
|
||||||
|
- `deny` - Do not allow window to be toggled as or added to group (see
|
||||||
|
`denywindowfromgroup` dispatcher).
|
||||||
- `invade` - Force open window in the locked group.
|
- `invade` - Force open window in the locked group.
|
||||||
- `override` \[other options\] - Override other `group` rules, e.g. You can make all windows in a particular workspace open as a group, and use `group override barred` to make windows with specific titles open as normal windows.
|
- `override` \[other options\] - Override other `group` rules, e.g. You can make
|
||||||
|
all windows in a particular workspace open as a group, and use
|
||||||
|
`group override barred` to make windows with specific titles open as normal
|
||||||
|
windows.
|
||||||
- `unset` - Clear all `group` rules.
|
- `unset` - Clear all `group` rules.
|
||||||
|
|
||||||
The `group` rule without options is a shorthand for `group set`.
|
The `group` rule without options is a shorthand for `group set`.
|
||||||
|
|
||||||
By default, `set` and `lock` only affect new windows once. The `always` qualifier makes them always effective.
|
By default, `set` and `lock` only affect new windows once. The `always`
|
||||||
|
qualifier makes them always effective.
|
||||||
|
|
||||||
{{< /hint >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
### Example Rules
|
### Example Rules
|
||||||
|
|
||||||
|
@ -174,39 +190,45 @@ windowrulev2 = stayfocused, class:^(pinentry-) # fix pinentry losing focus
|
||||||
|
|
||||||
### Notes
|
### Notes
|
||||||
|
|
||||||
Rules that are marked as _Dynamic_ will be reevaluated if the matching property of the window changes. For instance, if a rule is defined that changes the bordercolor of a window when it is floating, then the bordercolor will change to the requested color when it is set to floating, and revert to the default color when it is tiled again.
|
Rules that are marked as _Dynamic_ will be reevaluated if the matching property
|
||||||
|
of the window changes. For instance, if a rule is defined that changes the
|
||||||
|
bordercolor of a window when it is floating, then the bordercolor will change to
|
||||||
|
the requested color when it is set to floating, and revert to the default color
|
||||||
|
when it is tiled again.
|
||||||
|
|
||||||
Rules will be processed from top to bottom, where the _last_ match will take precedence.
|
Rules will be processed from top to bottom, where the _last_ match will take
|
||||||
i.e.
|
precedence. i.e.
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
windowrulev2 = opacity 0.8 0.8,class:^(kitty)$
|
windowrulev2 = opacity 0.8 0.8,class:^(kitty)$
|
||||||
windowrulev2 = opacity 0.5 0.5,floating:1
|
windowrulev2 = opacity 0.5 0.5,floating:1
|
||||||
```
|
```
|
||||||
|
|
||||||
-> all kitty windows will have opacity 0.8, except if they are floating. Then they will have opacity 0.5.
|
-> all kitty windows will have opacity 0.8, except if they are floating. Then
|
||||||
-> all floating windows will have opacity 0.5.
|
they will have opacity 0.5. -> all floating windows will have opacity 0.5.
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
windowrulev2 = opacity 0.5 0.5,floating:1
|
windowrulev2 = opacity 0.5 0.5,floating:1
|
||||||
windowrulev2 = opacity 0.8 0.8,class:^(kitty)$
|
windowrulev2 = opacity 0.8 0.8,class:^(kitty)$
|
||||||
```
|
```
|
||||||
|
|
||||||
-> all kitty windows will have opacity 0.8, also if they are floating.
|
-> all kitty windows will have opacity 0.8, also if they are floating. -> all
|
||||||
-> all other floating windows will have opacity 0.5.
|
other floating windows will have opacity 0.5.
|
||||||
|
|
||||||
|
{{< callout type=info >}}
|
||||||
|
|
||||||
{{< hint type=tip >}}
|
Opacity is _always_ a PRODUCT of all opacities. E.g. `active_opacity` to 0.5 and
|
||||||
|
windowrule opacity to 0.5 will result in a total opacity 0.25. You are allowed
|
||||||
Opacity is _always_ a PRODUCT of all opacities. E.g. `active_opacity` to
|
to set opacities over 1, but any opacity product over 1 will cause graphical
|
||||||
0.5 and windowrule opacity to 0.5 will result in a total opacity 0.25. You are
|
glitches. E.g. `0.5 * 2 = 1`, and it will be fine, `0.5 * 4` will cause
|
||||||
allowed to set opacities over 1, but any opacity product over 1 will cause
|
|
||||||
graphical glitches. E.g. `0.5 * 2 = 1`, and it will be fine, `0.5 * 4` will cause
|
|
||||||
graphical glitches.
|
graphical glitches.
|
||||||
{{< /hint >}}
|
|
||||||
|
|
||||||
# Layer Rules
|
{{< /callout >}}
|
||||||
Some things in wayland are not windows, but layers. That includes for example most launchers, your status bar or wallpaper.
|
|
||||||
|
## Layer Rules
|
||||||
|
|
||||||
|
Some things in wayland are not windows, but layers. That includes for example
|
||||||
|
most launchers, your status bar or wallpaper.
|
||||||
|
|
||||||
Those have specific rules separate from windows:
|
Those have specific rules separate from windows:
|
||||||
|
|
||||||
|
@ -215,10 +237,11 @@ layerrule = rule, namespace
|
||||||
# or
|
# or
|
||||||
layerrule = rule, address
|
layerrule = rule, address
|
||||||
```
|
```
|
||||||
where `rule` is the rule and `namespace` is the namespace regex (find namespaces in `hyprctl layers`)
|
|
||||||
or `address` is an address in the form of `address:0x[hex]`
|
|
||||||
|
|
||||||
## Rules
|
where `rule` is the rule and `namespace` is the namespace regex (find namespaces
|
||||||
|
in `hyprctl layers`) or `address` is an address in the form of `address:0x[hex]`
|
||||||
|
|
||||||
|
### Rules
|
||||||
|
|
||||||
| rule | description |
|
| rule | description |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
|
|
|
@ -1,43 +1,54 @@
|
||||||
# Table of contents
|
---
|
||||||
|
weight: 8
|
||||||
|
title: Workspace Rules
|
||||||
|
---
|
||||||
|
|
||||||
{{< toc >}}
|
## Workspace Rules
|
||||||
|
|
||||||
# Workspace Rules
|
You can set workspace rules to achieve workspace-specific behaviors. For
|
||||||
You can set workspace rules to achieve workspace-specific behaviors. For instance, you can define a workspace where all windows are drawn without borders or gaps.
|
instance, you can define a workspace where all windows are drawn without borders
|
||||||
|
or gaps.
|
||||||
|
|
||||||
For layout-specific rules, see the specific layout page. For example: [Master Layout->Workspace Rules](../Master-Layout#workspace-rules)
|
For layout-specific rules, see the specific layout page. For example:
|
||||||
|
[Master Layout->Workspace Rules](../master-layout#workspace-rules)
|
||||||
|
|
||||||
|
### Syntax
|
||||||
|
|
||||||
## Syntax
|
|
||||||
```ini
|
```ini
|
||||||
workspace=WORKSPACE,RULES
|
workspace=WORKSPACE,RULES
|
||||||
```
|
```
|
||||||
|
|
||||||
- WORKSPACE is a valid workspace identifier (see [Dispatchers->Workspaces](../Dispatchers#workspaces)). This field is mandatory;
|
- WORKSPACE is a valid workspace identifier (see
|
||||||
|
[Dispatchers->Workspaces](../dispatchers#workspaces)). This field is
|
||||||
|
mandatory;
|
||||||
- RULES is one (or more) rule(s) as described here in [rules](#rules).
|
- RULES is one (or more) rule(s) as described here in [rules](#rules).
|
||||||
|
|
||||||
### Examples
|
### Examples
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
workspace=name:myworkspace,gapsin:0,gapsout:0
|
workspace=name:myworkspace,gapsin:0,gapsout:0
|
||||||
workspace=3,rounding:false,bordersize:0
|
workspace=3,rounding:false,bordersize:0
|
||||||
```
|
```
|
||||||
|
|
||||||
## Rules
|
## Rules
|
||||||
|
|
||||||
| Rule | Description | type |
|
| Rule | Description | type |
|
||||||
| ---- | ----------- | ---- |
|
| --- | --- | --- |
|
||||||
| monitor:[m] | Binds a workspace to a monitor See [syntax](#syntax) and [Monitors](../Monitors).| string |
|
| monitor:[m] | Binds a workspace to a monitor See [syntax](#syntax) and [Monitors](../monitors). | string |
|
||||||
| default:[b] | Whether this workspace should be the default workspace for the given monitor | bool |
|
| default:[b] | Whether this workspace should be the default workspace for the given monitor | bool |
|
||||||
| gapsin:[x] | Set the gaps between windows (equivalent to [General->gaps_in](../Variables#general) except for not using commas as delimiter (spaces instead)) | int |
|
| gapsin:[x] | Set the gaps between windows (equivalent to [General->gaps_in](../variables#general)) | int |
|
||||||
| gapsout:[x] | Set the gaps between windows and monitor edges (equivalent to [General->gaps_out](../Variables#general) except for not using commas as delimiter (spaces instead)) | int |
|
| gapsout:[x] | Set the gaps between windows and monitor edges (equivalent to [General->gaps_out](../variables#general)) | int |
|
||||||
| bordersize:[x] | Set the border size around windows (equivalent to [General->border_size](../Variables#general)) | int |
|
| bordersize:[x] | Set the border size around windows (equivalent to [General->border_size](../variables#general)) | int |
|
||||||
| border:[b]| Whether to draw borders or not| bool |
|
| border:[b] | Whether to draw borders or not | bool |
|
||||||
| shadow:[b]| Whether to draw shadows or not| bool |
|
| shadow:[b] | Whether to draw shadows or not | bool |
|
||||||
| rounding:[b] | Whether to draw rounded windows or not | bool |
|
| rounding:[b] | Whether to draw rounded windows or not | bool |
|
||||||
| decorate:[b] | Whether to draw window decorations or not | bool |
|
| decorate:[b] | Whether to draw window decorations or not | bool |
|
||||||
| persistent:[b] | Keep this workspace alive even if empty and inactive | bool |
|
| persistent:[b] | Keep this workspace alive even if empty and inactive | bool |
|
||||||
| on-created-empty:[c] | A command to be executed once a workspace is created empty (i.e. not created by moving a window to it). See the [command syntax](../Dispatchers#executing-with-rules) | string |
|
| on-created-empty:[c] | A command to be executed once a workspace is created empty (i.e. not created by moving a window to it). See the [command syntax](../dispatchers#executing-with-rules) | string |
|
||||||
| defaultName:[s] | A default name for the workspace. | string |
|
| defaultName:[s] | A default name for the workspace. | string |
|
||||||
|
|
||||||
### Example Rules
|
### Example Rules
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
workspace = 3, rounding:false, decorate:false
|
workspace = 3, rounding:false, decorate:false
|
||||||
workspace = name:coding, rounding:false, decorate:false, gapsin:0, gapsout:0, border:false, decorate:false, monitor:DP-1
|
workspace = name:coding, rounding:false, decorate:false, gapsin:0, gapsout:0, border:false, decorate:false, monitor:DP-1
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
weight: 14
|
||||||
|
title: XWayland
|
||||||
|
---
|
||||||
|
|
||||||
XWayland is the bridging mechanism between legacy Xorg programs and Wayland
|
XWayland is the bridging mechanism between legacy Xorg programs and Wayland
|
||||||
compositors.
|
compositors.
|
||||||
|
|
||||||
|
@ -6,8 +11,9 @@ compositors.
|
||||||
XWayland currently looks pixelated on HiDPI screens, due to Xorg's inability to
|
XWayland currently looks pixelated on HiDPI screens, due to Xorg's inability to
|
||||||
scale.
|
scale.
|
||||||
|
|
||||||
This problem is mitigated by the [`xwayland:force_zero_scaling`](../../Configuring/Variables/#xwayland)
|
This problem is mitigated by the
|
||||||
option, which forces XWayland windows not to be scaled.
|
[`xwayland:force_zero_scaling`](../../configuring/variables/#xwayland) option,
|
||||||
|
which forces XWayland windows not to be scaled.
|
||||||
|
|
||||||
This will get rid of the pixelated look, but will not scale applications
|
This will get rid of the pixelated look, but will not scale applications
|
||||||
properly. To do this, each toolkit has its own mechanism.
|
properly. To do this, each toolkit has its own mechanism.
|
||||||
|
@ -28,6 +34,8 @@ env = XCURSOR_SIZE,32
|
||||||
|
|
||||||
The GDK_SCALE variable won't conflict with Wayland-native GTK programs.
|
The GDK_SCALE variable won't conflict with Wayland-native GTK programs.
|
||||||
|
|
||||||
{{< hint type="important" >}}
|
{{< callout >}}
|
||||||
|
|
||||||
XWayland HiDPI patches are no longer supported. Do not use them.
|
XWayland HiDPI patches are no longer supported. Do not use them.
|
||||||
{{</ hint >}}
|
|
||||||
|
{{</ callout >}}
|
||||||
|
|
6
pages/Configuring/_index.md
Normal file
6
pages/Configuring/_index.md
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
weight: 3
|
||||||
|
title: Configuring
|
||||||
|
sidebar:
|
||||||
|
open: true
|
||||||
|
---
|
|
@ -1,23 +1,29 @@
|
||||||
# PR Requirements
|
---
|
||||||
|
title: PR Guidelines
|
||||||
|
---
|
||||||
|
|
||||||
|
## PR Requirements
|
||||||
|
|
||||||
- Clean, not hacky code
|
- Clean, not hacky code
|
||||||
- Described changes and _why_ they were there
|
- Described changes and _why_ they were there
|
||||||
- Following the style (see below)
|
- Following the style (see below)
|
||||||
|
|
||||||
## Code Style
|
### Code Style
|
||||||
|
|
||||||
Hyprland's code style is governed by the `.clang-format` file.
|
Hyprland's code style is governed by the `.clang-format` file.
|
||||||
|
|
||||||
Make sure to format accordingly whenever you make a PR.
|
Make sure to format accordingly whenever you make a PR.
|
||||||
|
|
||||||
## Some code FAQ
|
### Some code FAQ
|
||||||
|
|
||||||
> Why is the config variable getting so weird?
|
> Why is the config variable getting so weird?
|
||||||
|
|
||||||
Every variable from the config needs to be found in a hashmap. To limit the amount of hashmap searches, getting a config option looks like this:
|
Every variable from the config needs to be found in a hashmap. To limit the
|
||||||
|
amount of hashmap searches, getting a config option looks like this:
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
static auto* const PFOLLOWMOUSE = &g_pConfigManager->getConfigValuePtr("input:follow_mouse")->intValue;
|
static auto* const PFOLLOWMOUSE = &g_pConfigManager->getConfigValuePtr("input:follow_mouse")->intValue;
|
||||||
```
|
```
|
||||||
|
|
||||||
Since the hashmap _cannot_ be mutated during runtime, this pointer will always be valid, and will not require hashmap lookups every single time it's read.
|
Since the hashmap _cannot_ be mutated during runtime, this pointer will always
|
||||||
|
be valid, and will not require hashmap lookups every single time it's read.
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
|
---
|
||||||
|
weight: 12
|
||||||
|
title: Contributing and Debugging
|
||||||
|
---
|
||||||
|
|
||||||
# Contributing guidelines
|
# Contributing guidelines
|
||||||
|
|
||||||
PR, code styling and code FAQs are [here](./PR-Guidelines)
|
PR, code styling and code FAQs are [here](./pr-guidelines)
|
||||||
|
|
||||||
For issues, please see
|
For issues, please see
|
||||||
[the guidelines](https://github.com/hyprwm/Hyprland/blob/main/docs/ISSUE_GUIDELINES.md)
|
[the guidelines](https://github.com/hyprwm/Hyprland/blob/main/docs/ISSUE_GUIDELINES.md)
|
||||||
|
@ -23,7 +28,8 @@ _Arch_:
|
||||||
|
|
||||||
Install the VSCode C/C++ and CMake Tools extensions and use that.
|
Install the VSCode C/C++ and CMake Tools extensions and use that.
|
||||||
|
|
||||||
I've attached a [example/launch.json](https://github.com/hyprwm/Hyprland/blob/main/example/launch.json)
|
I've attached a
|
||||||
|
[example/launch.json](https://github.com/hyprwm/Hyprland/blob/main/example/launch.json)
|
||||||
that you can copy to your .vscode/ folder in the repo root.
|
that you can copy to your .vscode/ folder in the repo root.
|
||||||
|
|
||||||
With that, you can build in debug, go to the debugging tab and hit
|
With that, you can build in debug, go to the debugging tab and hit
|
||||||
|
@ -79,7 +85,8 @@ for live logs. (replace `hyprland` with `hyprlandd` for debug builds)
|
||||||
|
|
||||||
### How do I get a coredump?
|
### How do I get a coredump?
|
||||||
|
|
||||||
See [`ISSUE_GUIDELINES.md`](https://github.com/hyprwm/Hyprland/blob/main/docs/ISSUE_GUIDELINES.md).
|
See
|
||||||
|
[`ISSUE_GUIDELINES.md`](https://github.com/hyprwm/Hyprland/blob/main/docs/ISSUE_GUIDELINES.md).
|
||||||
|
|
||||||
## Nesting Hyprland
|
## Nesting Hyprland
|
||||||
|
|
||||||
|
@ -89,7 +96,9 @@ Hyprland can run nested in a window. For that, make sure you did the following:
|
||||||
- removed ALL `exec=` and `exec-once=` keywords from your debug config
|
- removed ALL `exec=` and `exec-once=` keywords from your debug config
|
||||||
(`hyprlandd.conf`)
|
(`hyprlandd.conf`)
|
||||||
- set a resolution for `WL-1` and are not using `preferred`
|
- set a resolution for `WL-1` and are not using `preferred`
|
||||||
- made sure no keybinds overlap (use a different mod for your keybinds altogether)
|
- made sure no keybinds overlap (use a different mod for your keybinds
|
||||||
|
altogether)
|
||||||
|
|
||||||
Once you launch, the display might be cropped. This can be fixed by setting the resolution for `WL-1` to
|
Once you launch, the display might be cropped. This can be fixed by setting the
|
||||||
the exact dimensions of the window as reported by `hyprctl clients`.
|
resolution for `WL-1` to the exact dimensions of the window as reported by
|
||||||
|
`hyprctl clients`.
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
# Getting the log
|
---
|
||||||
|
weight: 10
|
||||||
|
title: Crashes and Bugs
|
||||||
|
---
|
||||||
|
|
||||||
|
## Getting the log
|
||||||
|
|
||||||
If you are in a TTY, and the hyprland session that crashed was the last one you
|
If you are in a TTY, and the hyprland session that crashed was the last one you
|
||||||
launched, the log will be printed with
|
launched, the log will be printed with
|
||||||
|
@ -15,15 +20,18 @@ if you are in a Hyprland session, and you want the log of the last session, use
|
||||||
cat /tmp/hypr/$(ls -t /tmp/hypr/ | head -n 2 | tail -n 1)/hyprland.log
|
cat /tmp/hypr/$(ls -t /tmp/hypr/ | head -n 2 | tail -n 1)/hyprland.log
|
||||||
```
|
```
|
||||||
|
|
||||||
# Obtaining the Hyprland Crash Report
|
## Obtaining the Hyprland Crash Report
|
||||||
|
|
||||||
If you have `$XDG_CACHE_HOME` set, the crash report directory is `$XDG_CACHE_HOME/hyprland`. If not, it's `$HOME/.cache/hyprland`.
|
If you have `$XDG_CACHE_HOME` set, the crash report directory is
|
||||||
|
`$XDG_CACHE_HOME/hyprland`. If not, it's `$HOME/.cache/hyprland`.
|
||||||
|
|
||||||
Go to the crash report directory and you should find a file named `hyprlandCrashReport[XXXX].txt` where `[XXXX]` is the PID of the process that crashed.
|
Go to the crash report directory and you should find a file named
|
||||||
|
`hyprlandCrashReport[XXXX].txt` where `[XXXX]` is the PID of the process that
|
||||||
|
crashed.
|
||||||
|
|
||||||
Attach that file to your issue.
|
Attach that file to your issue.
|
||||||
|
|
||||||
# Crashes at launch
|
## Crashes at launch
|
||||||
|
|
||||||
Diagnose the issue by what is in the log:
|
Diagnose the issue by what is in the log:
|
||||||
|
|
||||||
|
@ -39,18 +47,18 @@ Diagnose the issue by what is in the log:
|
||||||
in the first point.
|
in the first point.
|
||||||
- failing on `Hyprland` -> report an issue.
|
- failing on `Hyprland` -> report an issue.
|
||||||
|
|
||||||
# Crashes not at launch
|
## Crashes not at launch
|
||||||
|
|
||||||
Report an issue on GitHub or on the Discord server.
|
Report an issue on GitHub or on the Discord server.
|
||||||
|
|
||||||
# Bugs
|
## Bugs
|
||||||
|
|
||||||
First of all, **_READ THE [FAQ PAGE](../FAQ)_**
|
First of all, **_READ THE [FAQ PAGE](../faq)_**
|
||||||
|
|
||||||
If your bug is not listed there, you can ask on the Discord server or open an
|
If your bug is not listed there, you can ask on the Discord server or open an
|
||||||
issue on GitHub.
|
issue on GitHub.
|
||||||
|
|
||||||
# Building the Wayland stack with ASan
|
## Building the Wayland stack with ASan
|
||||||
|
|
||||||
If requested, this is the deepest level of memory issue debugging possible.
|
If requested, this is the deepest level of memory issue debugging possible.
|
||||||
|
|
||||||
|
@ -58,16 +66,11 @@ _Do this in the tty, with no Hyprland instances running_
|
||||||
|
|
||||||
Clone hyprland: `git clone --recursive https://github.com/hyprwm/Hyprland`
|
Clone hyprland: `git clone --recursive https://github.com/hyprwm/Hyprland`
|
||||||
|
|
||||||
cd to it: `cd Hyprland`
|
|
||||||
|
|
||||||
`make asan`
|
`make asan`
|
||||||
|
|
||||||
This will compile everything and launch Hyprland.
|
|
||||||
|
|
||||||
Reproduce your crash. Hyprland will exit back to the tty.
|
Reproduce your crash. Hyprland will exit back to the tty.
|
||||||
|
|
||||||
You can now launch your regular Hyprland session.
|
Now, in either `cwd`, `~` or `./build`, search for file(s) named
|
||||||
|
`asan.log.XXXXX` where XXXXX is a number.
|
||||||
Now, in either `cwd`, `~` or `./build`, search for file(s) named `asan.log.XXXXX` where XXXXX is a number.
|
|
||||||
|
|
||||||
Zip all of them up and attach to your issue.
|
Zip all of them up and attach to your issue.
|
|
@ -1,60 +1,66 @@
|
||||||
# Table of Contents
|
---
|
||||||
|
weight: 11
|
||||||
|
title: FAQ
|
||||||
|
---
|
||||||
|
|
||||||
{{< toc format=html >}}
|
### My apps are pixelated
|
||||||
|
|
||||||
# My apps are pixelated
|
This just means they are running through XWayland, which physically cannot scale
|
||||||
|
by fractional amounts.
|
||||||
|
|
||||||
This just means they are running through XWayland, which physically cannot scale by fractional amounts.
|
To force them to run in wayland-native mode, see
|
||||||
|
[the Master Tutorial](../../getting-started/master-tutorial/#force-apps-to-use-wayland).
|
||||||
|
|
||||||
To force them to run in wayland-native mode, see [the Master Tutorial](../../Getting-Started/Master-Tutorial/#force-apps-to-use-wayland).
|
If they can't, see [the XWayland page](../../configuring/xwayland).
|
||||||
|
|
||||||
If they can't, see [the XWayland page](../../Configuring/XWayland).
|
### Nothing renders / screen is empty / crash on opening first app
|
||||||
|
|
||||||
# Nothing renders / screen is empty / crash on opening first app
|
|
||||||
|
|
||||||
Possible causes:
|
Possible causes:
|
||||||
|
|
||||||
> Your themes are not set up properly, making apps crash.
|
> Your themes are not set up properly, making apps crash.
|
||||||
|
|
||||||
Use something like `qt6ct` (Qt) and `nwg-look` (GTK) (\*for GTK you can also
|
Use something like `qt6ct` (Qt) and `nwg-look` (GTK) (\*for GTK you can also set
|
||||||
set up themes with envvars) to set up your themes.
|
up themes with envvars) to set up your themes.
|
||||||
|
|
||||||
> Your PC is very, _very_ old.
|
> Your PC is very, _very_ old.
|
||||||
|
|
||||||
In that case, see the
|
In that case, see the [Installation Page](../../getting-started/installation)
|
||||||
[Installation Page](../../Getting-Started/Installation) and
|
and try compiling with LEGACY_RENDERER
|
||||||
try compiling with LEGACY_RENDERER
|
|
||||||
|
|
||||||
_For more info about bugs and crashes, see this_
|
_For more info about bugs and crashes, see this_
|
||||||
_[wiki page](../../Crashes-and-Bugs)_
|
_[wiki page](../../crashes-and-bugs)_
|
||||||
|
|
||||||
# Me cursor no render?
|
### Me cursor no render?
|
||||||
|
|
||||||
Are you on NVIDIA? If so, then you have been a naughty boy and haven't listened
|
Are you on NVIDIA? If so, then you have been a naughty boy and haven't listened
|
||||||
to my tips on other pages. Use the `WLR_NO_HARDWARE_CURSORS=1` environment
|
to my tips on other pages. Use the `WLR_NO_HARDWARE_CURSORS=1` environment
|
||||||
variable.
|
variable.
|
||||||
|
|
||||||
# My external monitor is blank / doesn't render / receives no signal (laptop)
|
### My external monitor is blank / doesn't render / receives no signal (laptop)
|
||||||
|
|
||||||
For Nvidia graphics - This issue appears to be resolved when using Nvidia Drivers 525.60.11 or later, but it may persist with older drivers.
|
For Nvidia graphics - This issue appears to be resolved when using Nvidia
|
||||||
|
Drivers 525.60.11 or later, but it may persist with older drivers.
|
||||||
|
|
||||||
Outside those, there is a way to fix it that _might_ work for you though:
|
Outside those, there is a way to fix it that _might_ work for you though:
|
||||||
|
|
||||||
**Option 1:** Use _only_ the external monitor
|
**Option 1:** Use _only_ the external monitor
|
||||||
|
|
||||||
By using `WLR_DRM_DEVICES=/dev/dri/card1` (or `card0`) you can force Hyprland to use only your dGPU,
|
By using `WLR_DRM_DEVICES=/dev/dri/card1` (or `card0`) you can force Hyprland to
|
||||||
meaning your laptop's screen will be gone but your external one will work.
|
use only your dGPU, meaning your laptop's screen will be gone but your external
|
||||||
|
one will work.
|
||||||
|
|
||||||
**Option 2:** Use all outputs, at the cost of battery life.
|
**Option 2:** Use all outputs, at the cost of battery life.
|
||||||
|
|
||||||
By switching your laptop to only use the dGPU in the BIOS, you _might_ be able to get everything to work,
|
By switching your laptop to only use the dGPU in the BIOS, you _might_ be able
|
||||||
at the cost of high battery usage.
|
to get everything to work, at the cost of high battery usage.
|
||||||
|
|
||||||
_Please note these are highly model-specific and might or might not work. If they don't, you're unfortunately out of luck._
|
_Please note these are highly model-specific and might or might not work. If
|
||||||
|
they don't, you're unfortunately out of luck._
|
||||||
|
|
||||||
You might try a USB-C to HDMI adapter though, maybe that could route the external monitor through the iGPU.
|
You might try a USB-C to HDMI adapter though, maybe that could route the
|
||||||
|
external monitor through the iGPU.
|
||||||
|
|
||||||
# How do I screenshot?
|
### How do I screenshot?
|
||||||
|
|
||||||
Install `grim` and `slurp`
|
Install `grim` and `slurp`
|
||||||
|
|
||||||
|
@ -62,42 +68,47 @@ Use a keybind (or execute) `grim -g "$(slurp)"`, select a region. A screenshot
|
||||||
will pop into your `~/Pictures/` (You can configure grim and slurp, see their
|
will pop into your `~/Pictures/` (You can configure grim and slurp, see their
|
||||||
GitHub pages).
|
GitHub pages).
|
||||||
|
|
||||||
If you want those screenshots to go directly to your clipboard, consider using `wl-copy`, from [`wl-clipboard`](https://github.com/bugaevc/wl-clipboard). Here's an example binding:
|
If you want those screenshots to go directly to your clipboard, consider using
|
||||||
`bind = , Print, exec, grim -g "$(slurp -d)" - | wl-copy`
|
`wl-copy`, from [`wl-clipboard`](https://github.com/bugaevc/wl-clipboard).
|
||||||
For a more complete utility, try our own screenshotting utility:
|
Here's an example binding:
|
||||||
|
`bind = , Print, exec, grim -g "$(slurp -d)" - | wl-copy` For a more complete
|
||||||
|
utility, try our own screenshotting utility:
|
||||||
[Grimblast](https://github.com/hyprwm/contrib).
|
[Grimblast](https://github.com/hyprwm/contrib).
|
||||||
|
|
||||||
For recording videos, [wf-recorder](https://github.com/ammen99/wf-recorder), [wl-screenrec](https://github.com/russelltg/wl-screenrec) or [OBS Studio](https://obsproject.com/) could be used.
|
For recording videos, [wf-recorder](https://github.com/ammen99/wf-recorder),
|
||||||
|
[wl-screenrec](https://github.com/russelltg/wl-screenrec) or
|
||||||
|
[OBS Studio](https://obsproject.com/) could be used.
|
||||||
|
|
||||||
# Screenshare / OBS no worky
|
### Screenshare / OBS no worky
|
||||||
|
|
||||||
Check [Screensharing](../Useful-Utilities/Screen-Sharing).
|
Check [Screensharing](../useful-utilities/screen-sharing).
|
||||||
|
|
||||||
Also install `qt6-wayland` if you plan to use obs.
|
Also install `qt6-wayland` if you plan to use obs.
|
||||||
|
|
||||||
# How do I change my wallpaper?
|
### How do I change my wallpaper?
|
||||||
|
|
||||||
See [Wallpapers](../Useful-Utilities/Wallpapers).
|
See [Wallpapers](../useful-utilities/wallpapers).
|
||||||
|
|
||||||
# How heavy is this?
|
### How heavy is this?
|
||||||
|
|
||||||
Not that much heavier than Xorg. If you want maximum performance, consider
|
Not that much heavier than Xorg. If you want maximum performance, consider
|
||||||
turning off the blur and animations.
|
turning off the blur and animations.
|
||||||
|
|
||||||
# My monitor no worky
|
### My monitor no worky
|
||||||
|
|
||||||
Try changing the mode in your config. If your preferred one doesn't work, try a
|
Try changing the mode in your config. If your preferred one doesn't work, try a
|
||||||
lower one. A good way to list all modes is to get `wlr-randr` and do a
|
lower one. A good way to list all modes is to get `wlr-randr` and do a
|
||||||
`wlr-randr --dryrun`
|
`wlr-randr --dryrun`
|
||||||
|
|
||||||
# My monitor has flickering brightness when I turn on VRR
|
### My monitor has flickering brightness when I turn on VRR
|
||||||
|
|
||||||
Change the VRR option to `2` (fullscreen), so that it is only used in games.
|
Change the VRR option to `2` (fullscreen), so that it is only used in games.
|
||||||
This happens because the brightness on some monitors can depends on the refresh
|
This happens because the brightness on some monitors can depends on the refresh
|
||||||
rate, and rapidly changing refresh rates (for example, when the screen momentarily
|
rate, and rapidly changing refresh rates (for example, when the screen
|
||||||
updates after pressing a key) will cause rapid changes in brightness.
|
momentarily updates after pressing a key) will cause rapid changes in
|
||||||
|
brightness.
|
||||||
|
|
||||||
# How do I update?
|
### How do I update?
|
||||||
|
|
||||||
Open a terminal where you cloned the repo.
|
Open a terminal where you cloned the repo.
|
||||||
|
|
||||||
|
@ -106,33 +117,47 @@ git pull
|
||||||
make all && sudo make install
|
make all && sudo make install
|
||||||
```
|
```
|
||||||
|
|
||||||
If you are using the AUR (hyprland-git) package, you
|
If you are using the AUR (hyprland-git) package, you will need to cleanbuild to
|
||||||
will need to cleanbuild to update the package. Paru
|
update the package. Paru has been problematic with updating before, use Yay.
|
||||||
has been problematic with updating before, use Yay.
|
|
||||||
|
|
||||||
# How do I screen lock?
|
### How do I screen lock?
|
||||||
|
|
||||||
Use a wayland-compatible locking utility using WLR protocols, e.g. `swaylock`.
|
Use a wayland-compatible locking utility using WLR protocols, e.g. `swaylock`.
|
||||||
|
|
||||||
# How do I change me mouse cursor?
|
### How do I change me mouse cursor?
|
||||||
|
|
||||||
See [hyprcursor](../Hypr-Ecosystem/hyprcursor)
|
See [hyprcursor](../Hypr-Ecosystem/hyprcursor)
|
||||||
|
||||||| parent of 0fcc6e5 (treewide: replace hint with callout)
|
||||||
|
1. Set the GTK cursor using [nwg-look](https://github.com/nwg-piotr/nwg-look).
|
||||||
|
2. Add `exec-once=hyprctl setcursor [THEME] [SIZE]` to your config and restart Hyprland.
|
||||||
|
|
||||||
# GTK Settings no work / whatever
|
If using flatpak, run `flatpak override --env=~/.themes:ro --env=~/.icons:ro --user` and put your themes in both `/usr/share/themes` and `~/.themes`, and put your icons and cursors in both `/usr/share/icons` and `~/.icons`.
|
||||||
|
|
||||||
|
For Qt applications, Hyprland exports XCURSOR_SIZE as 24, which is the default.
|
||||||
|
You can overwrite this by exporting XCURSOR_SIZE to a different value with `env`.
|
||||||
|
|
||||||
|
You can also try running `gsettings set org.gnome.desktop.interface cursor-theme 'theme-name'` or adding it after `exec-once=` in your config.
|
||||||
|
|
||||||
|
If you do not want to install a GTK settings editor, change the config files according to the
|
||||||
|
[XDG specification (Arch Wiki link)](https://wiki.archlinux.org/title/Cursor_themes#Configuration).
|
||||||
|
Make sure to also edit `~/.config/gtk-4.0/settings.ini` and `~/.gtkrc-2.0` if _not_ using a tool
|
||||||
|
(like `nwg-look`).
|
||||||
|
|
||||||
|
### GTK Settings no work / whatever
|
||||||
|
|
||||||
[https://github.com/swaywm/sway/wiki/GTK-3-settings-on-Wayland](https://github.com/swaywm/sway/wiki/GTK-3-settings-on-Wayland)
|
[https://github.com/swaywm/sway/wiki/GTK-3-settings-on-Wayland](https://github.com/swaywm/sway/wiki/GTK-3-settings-on-Wayland)
|
||||||
|
|
||||||
# My \[program name\] is freezing
|
### My \[program name\] is freezing
|
||||||
|
|
||||||
Make sure you have a notification daemon running, for example `dunst`. Autostart
|
Make sure you have a notification daemon running, for example `dunst`. Autostart
|
||||||
it with the `exec-once` keyword.
|
it with the `exec-once` keyword.
|
||||||
|
|
||||||
# Waybar workspaces no worky???
|
### Waybar workspaces no worky???
|
||||||
|
|
||||||
Waybar has a set of caveats or settings that you need to be aware of. See
|
Waybar has a set of caveats or settings that you need to be aware of. See
|
||||||
[Status bars](../Useful-Utilities/Status-Bars) for solutions.
|
[Status bars](../useful-utilities/status-bars) for solutions.
|
||||||
|
|
||||||
# How do I autostart my favorite apps?
|
### How do I autostart my favorite apps?
|
||||||
|
|
||||||
Using the window rules to assign apps to workspace you can open a bunch of
|
Using the window rules to assign apps to workspace you can open a bunch of
|
||||||
applications on various workspaces. The following method will start these apps
|
applications on various workspaces. The following method will start these apps
|
||||||
|
@ -147,7 +172,7 @@ exec-once=[workspace 3 silent] mailspring
|
||||||
exec-once=[workspace 4 silent] firefox
|
exec-once=[workspace 4 silent] firefox
|
||||||
```
|
```
|
||||||
|
|
||||||
# How do I move my favorite workspaces to a new monitor when I plug it in?
|
### How do I move my favorite workspaces to a new monitor when I plug it in?
|
||||||
|
|
||||||
if you want workspaces to automatically go to a monitor upon connection, use the
|
if you want workspaces to automatically go to a monitor upon connection, use the
|
||||||
following:
|
following:
|
||||||
|
@ -179,13 +204,13 @@ if you want workspaces 1 2 4 5 to go to monitor 1 when connecting it.
|
||||||
|
|
||||||
Please note this requires `socat` to be installed.
|
Please note this requires `socat` to be installed.
|
||||||
|
|
||||||
# My tablet no worky??
|
### My tablet no worky??
|
||||||
|
|
||||||
Use [Open Tablet Driver](https://github.com/OpenTabletDriver/OpenTabletDriver)
|
Use [Open Tablet Driver](https://github.com/OpenTabletDriver/OpenTabletDriver)
|
||||||
to configure your tablet. In the future it will be supported in the config.
|
to configure your tablet. In the future it will be supported in the config.
|
||||||
Until then, OTD is the way to go.
|
Until then, OTD is the way to go.
|
||||||
|
|
||||||
# Some of my apps take a really long time to open...?
|
### Some of my apps take a really long time to open...?
|
||||||
|
|
||||||
_~/.config/hypr/hyprland.conf_
|
_~/.config/hypr/hyprland.conf_
|
||||||
|
|
||||||
|
@ -208,11 +233,12 @@ sleep 4
|
||||||
/usr/lib/xdg-desktop-portal &
|
/usr/lib/xdg-desktop-portal &
|
||||||
```
|
```
|
||||||
|
|
||||||
launched with `exec-once` should fix all issues. Adjust the sleep durations to taste.
|
launched with `exec-once` should fix all issues. Adjust the sleep durations to
|
||||||
|
taste.
|
||||||
|
|
||||||
# How do I export envvars for Hyprland?
|
### How do I export envvars for Hyprland?
|
||||||
|
|
||||||
See [Environment Variables](../Configuring/Environment-variables)
|
See [Environment Variables](../configuring/environment-variables)
|
||||||
|
|
||||||
The `env` keyword is used for this purpose. For example:
|
The `env` keyword is used for this purpose. For example:
|
||||||
|
|
||||||
|
@ -220,60 +246,83 @@ The `env` keyword is used for this purpose. For example:
|
||||||
env = XDG_CURRENT_DESKTOP,Hyprland
|
env = XDG_CURRENT_DESKTOP,Hyprland
|
||||||
```
|
```
|
||||||
|
|
||||||
# How to disable middle-click paste?
|
### How to disable middle-click paste?
|
||||||
|
|
||||||
You can simply intercept the middle-click action all together, via hyprland binds for example. The drawbacks to this solution are that 1. it disables the rest of the functionality of the middle-click action, such as auto scroll, closing browser tabs, etc., and 2. many applications (such as kitty) manually intercept the middle-click events and bind them to paste from the primary buffer themselves, bypassing the solution altogether. For this solution, add this bind to your config:
|
You can simply intercept the middle-click action all together, via hyprland
|
||||||
|
binds for example. The drawbacks to this solution are that 1. it disables the
|
||||||
|
rest of the functionality of the middle-click action, such as auto scroll,
|
||||||
|
closing browser tabs, etc., and 2. many applications (such as kitty) manually
|
||||||
|
intercept the middle-click events and bind them to paste from the primary buffer
|
||||||
|
themselves, bypassing the solution altogether. For this solution, add this bind
|
||||||
|
to your config:
|
||||||
|
|
||||||
`bind = , mouse:274, exec, ;`. Note that the exact bindcode may vary, so you may want to check it with `wev` first.
|
`bind = , mouse:274, exec, ;`. Note that the exact bindcode may vary, so you may
|
||||||
|
want to check it with `wev` first.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary> Alternative method using wl-paste (warning: major power consumption)</summary>
|
<summary> Alternative method using wl-paste (warning: major power consumption)</summary>
|
||||||
|
|
||||||
The middle-click paste action pastes from a separate buffer (primary buffer) than what the regular clipboard uses (clipboard buffer). Since the primary buffer is unrelated to the clipboard buffer, it's easy to simply keep the primary buffer empty, allowing the middle-click action to retain the rest of its functionality without having anything to paste. Run the following command (in your config with `exec-once`, for example) to achieve this:
|
The middle-click paste action pastes from a separate buffer (primary buffer)
|
||||||
|
than what the regular clipboard uses (clipboard buffer). Since the primary
|
||||||
|
buffer is unrelated to the clipboard buffer, it's easy to simply keep the
|
||||||
|
primary buffer empty, allowing the middle-click action to retain the rest of its
|
||||||
|
functionality without having anything to paste. Run the following command (in
|
||||||
|
your config with `exec-once`, for example) to achieve this:
|
||||||
|
|
||||||
`wl-paste -p --watch wl-copy -p ''` (`wl-paste -p --watch` watches for changes to the primary buffer, `wl-copy -p ''` clears the primary buffer)
|
`wl-paste -p --watch wl-copy -p ''` (`wl-paste -p --watch` watches for changes
|
||||||
|
to the primary buffer, `wl-copy -p ''` clears the primary buffer)
|
||||||
|
|
||||||
**As you can see, however, this creates an endless loop (found copied text -> copy -> found copied text...). Therefore this method is not recommended.**
|
**As you can see, however, this creates an endless loop (found copied text ->
|
||||||
|
copy -> found copied text...). Therefore this method is not recommended.**
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
# How do I make Hyprland draw as little power as possible on my laptop?
|
### How do I make Hyprland draw as little power as possible on my laptop?
|
||||||
|
|
||||||
**_Useful Optimizations_**:
|
**_Useful Optimizations_**:
|
||||||
|
|
||||||
* `decoration:blur = false` and `decoration:drop_shadow = false` to disable fancy but battery hungry effects.
|
- `decoration:blur = false` and `decoration:drop_shadow = false` to disable
|
||||||
|
fancy but battery hungry effects.
|
||||||
|
|
||||||
* `misc:vfr = true`, since it'll lower the amount of sent frames when nothing is happening on-screen.
|
- `misc:vfr = true`, since it'll lower the amount of sent frames when nothing is
|
||||||
|
happening on-screen.
|
||||||
|
|
||||||
# How to fix games with window dancing?
|
### How to fix games with window dancing?
|
||||||
|
|
||||||
Read [this trick](../Configuring/Uncommon-tips--tricks/#window-dancing).
|
Read [this trick](../configuring/uncommon-tips--tricks/#window-dancing).
|
||||||
|
|
||||||
# My apps take a long time to start / can't screenshare
|
### My apps take a long time to start / can't screenshare
|
||||||
|
|
||||||
See [The XDPH Page](../Useful-Utilities/Hyprland-desktop-portal).
|
See [The XDPH Page](../useful-utilities/xdg-desktop-portal-hyprland).
|
||||||
|
|
||||||
You most likely have multiple portal impls / an impl is failing to launch.
|
You most likely have multiple portal impls / an impl is failing to launch.
|
||||||
|
|
||||||
# My screenshot utilities won't work with multiple screens
|
### My screenshot utilities won't work with multiple screens
|
||||||
|
|
||||||
Some programs like flameshot (currently) has limited wayland support so on most Wayland compositors, you will have to do few tweaks.
|
Some programs like flameshot (currently) has limited wayland support so on most
|
||||||
For Hyprland, you can add these window rules to your config to make said programs work with both of your screens.
|
Wayland compositors, you will have to do few tweaks. For Hyprland, you can add
|
||||||
|
these window rules to your config to make said programs work with both of your
|
||||||
|
screens.
|
||||||
|
|
||||||
```windowrulev2=float,title:^(flameshot)
|
```windowrulev2=float,title:^(flameshot)
|
||||||
windowrulev2=move 0 0,title:^(flameshot)
|
windowrulev2=move 0 0,title:^(flameshot)
|
||||||
windowrulev2=nofullscreenrequest,title:^(flameshot)
|
windowrulev2=nofullscreenrequest,title:^(flameshot)
|
||||||
```
|
```
|
||||||
|
|
||||||
# I cannot bind SUPER as my mod key on my laptop
|
### I cannot bind SUPER as my mod key on my laptop
|
||||||
|
|
||||||
Many laptops have a built-in function to toggle `SUPER` between single key press mode and hold mode. This is usually indicated by a padlock on the `SUPER` key.
|
Many laptops have a built-in function to toggle `SUPER` between single key press
|
||||||
|
mode and hold mode. This is usually indicated by a padlock on the `SUPER` key.
|
||||||
|
|
||||||
First, install and run `wev`, then press `SUPER`. If you see a key press event followed by an instant key release event, then it's likely your `SUPER` key is set to single press mode.
|
First, install and run `wev`, then press `SUPER`. If you see a key press event
|
||||||
|
followed by an instant key release event, then it's likely your `SUPER` key is
|
||||||
|
set to single press mode.
|
||||||
|
|
||||||
On most laptops this can be fixed by pressing `FN+SUPER` and verified in `wev`. You should be able to hold `SUPER` and not see an instant release event. In case `FN+SUPER` doesn't work, consult your laptop's manual.
|
On most laptops this can be fixed by pressing `FN+SUPER` and verified in `wev`.
|
||||||
|
You should be able to hold `SUPER` and not see an instant release event. In case
|
||||||
|
`FN+SUPER` doesn't work, consult your laptop's manual.
|
||||||
|
|
||||||
# My VM doesn't receive keybinds I have set in Hyprland
|
### My VM doesn't receive keybinds I have set in Hyprland
|
||||||
|
|
||||||
This is expected, as Hyprland takes precedence.
|
This is expected, as Hyprland takes precedence.
|
||||||
|
|
||||||
|
@ -288,15 +337,19 @@ submap = reset
|
||||||
|
|
||||||
set `MOD` and `KEY` to desired values.
|
set `MOD` and `KEY` to desired values.
|
||||||
|
|
||||||
By pressing the selected combo you will enter a mode where hyprland ignores your keybinds and passes them on to the vm.
|
By pressing the selected combo you will enter a mode where hyprland ignores your
|
||||||
|
keybinds and passes them on to the vm.
|
||||||
|
|
||||||
Then, pressing `SUPER + Escape` will leave that mode.
|
Then, pressing `SUPER + Escape` will leave that mode.
|
||||||
|
|
||||||
# Some of my drop-down/pop-up windows in apps disappear
|
### Some of my drop-down/pop-up windows in apps disappear
|
||||||
|
|
||||||
In some apps like Steam or VSCode, the drop-down windows may disappear if you hover over them. This can be fixed with window rules.
|
In some apps like Steam or VSCode, the drop-down windows may disappear if you
|
||||||
|
hover over them. This can be fixed with window rules.
|
||||||
|
|
||||||
First, find the title and class of the pop-up window with `hyprctl clients`. You can try something like `sleep 3 && hyprctl clients` so you have time to open the pop-up. It should look something like this:
|
First, find the title and class of the pop-up window with `hyprctl clients`. You
|
||||||
|
can try something like `sleep 3 && hyprctl clients` so you have time to open the
|
||||||
|
pop-up. It should look something like this:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
Window 55d794495400 -> :
|
Window 55d794495400 -> :
|
||||||
|
@ -312,7 +365,8 @@ If the pop-up disappears as you hover over it, you can add to your config:
|
||||||
windowrulev2 = stayfocused, title:^(TITLE)$, class:^(CLASS)$
|
windowrulev2 = stayfocused, title:^(TITLE)$, class:^(CLASS)$
|
||||||
```
|
```
|
||||||
|
|
||||||
This has a downside of not being able to click on anything in the main UI until you've interacted with the pop-up.
|
This has a downside of not being able to click on anything in the main UI until
|
||||||
|
you've interacted with the pop-up.
|
||||||
|
|
||||||
If the pop-up disappears immediately, you can use:
|
If the pop-up disappears immediately, you can use:
|
||||||
|
|
||||||
|
@ -320,11 +374,11 @@ If the pop-up disappears immediately, you can use:
|
||||||
windowrulev2 = minsize 1 1, title:^(TITLE)$, class:^(CLASS)$
|
windowrulev2 = minsize 1 1, title:^(TITLE)$, class:^(CLASS)$
|
||||||
```
|
```
|
||||||
|
|
||||||
# Steam's file picker no worky
|
### Steam's file picker no worky
|
||||||
|
|
||||||
On instances where you have a steam library on another drive that you have
|
On instances where you have a steam library on another drive that you have to
|
||||||
to add, Hyprland's file picker would not normally appear when selecting
|
add, Hyprland's file picker would not normally appear when selecting a directory
|
||||||
a directory from steam.
|
from steam.
|
||||||
|
|
||||||
Steam has its own file picker, however, it's not functional. Install
|
Steam has its own file picker, however, it's not functional. Install
|
||||||
`xdg-desktop-portal-gtk` to show the desktop's file picker.
|
`xdg-desktop-portal-gtk` to show the desktop's file picker.
|
||||||
|
|
|
@ -1,9 +1,14 @@
|
||||||
|
---
|
||||||
|
weight: 2
|
||||||
|
title: Installation
|
||||||
|
---
|
||||||
|
|
||||||
# Foreword
|
# Foreword
|
||||||
|
|
||||||
Due to their proprietary nature, Nvidia GPUs have limited compatibility with
|
Due to their proprietary nature, Nvidia GPUs have limited compatibility with
|
||||||
Hyprland. If you want to try Hyprland on Nvidia regardless
|
Hyprland. If you want to try Hyprland on Nvidia regardless (many people have
|
||||||
(many people have reported successes), follow the [Nvidia page](../../Nvidia)
|
reported successes), follow the [Nvidia page](../../nvidia) after installing
|
||||||
after installing Hyprland.
|
Hyprland.
|
||||||
|
|
||||||
## Distros
|
## Distros
|
||||||
|
|
||||||
|
@ -17,28 +22,29 @@ might have **major** issues running Hyprland.
|
||||||
Installing Hyprland is very easy. Either you install it from your local package
|
Installing Hyprland is very easy. Either you install it from your local package
|
||||||
provider (if they provide pkgs for Hyprland) or you install/build it yourself.
|
provider (if they provide pkgs for Hyprland) or you install/build it yourself.
|
||||||
|
|
||||||
{{< hint title=note >}}
|
{{< callout >}}
|
||||||
This project is under development and is constantly
|
|
||||||
changing. If you want to keep up to date with the latest commits, please
|
This project is under development and is constantly changing. If you want to
|
||||||
consider updating your packages with `yay -Syu --devel`, or your other preferred
|
keep up to date with the latest commits, please consider updating your packages
|
||||||
package manager.
|
with `yay -Syu --devel`, or your other preferred package manager.
|
||||||
{{< /hint >}}
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
### Packages
|
### Packages
|
||||||
|
|
||||||
**WARNING:** I do not maintain any packages. If they are broken, try building
|
**WARNING:** I do not maintain any packages. If they are broken, try building
|
||||||
from source first.
|
from source first.
|
||||||
|
|
||||||
{{< tabs "uniqueid" >}}
|
{{% details title="Arch" closed="true" %}}
|
||||||
|
|
||||||
{{< tab "Arch Linux" >}}
|
|
||||||
```plain
|
```plain
|
||||||
hyprland-git (AUR) - compiles from latest source
|
hyprland-git (AUR) - compiles from latest source
|
||||||
hyprland - binary x86 tagged release
|
hyprland - binary x86 tagged release
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< /tab >}}
|
{{% /details %}}
|
||||||
{{< tab "Nix" >}}
|
|
||||||
|
{{% details title="Nix" closed="true" %}}
|
||||||
|
|
||||||
Enable Hyprland in your NixOS configuration:
|
Enable Hyprland in your NixOS configuration:
|
||||||
|
|
||||||
|
@ -46,11 +52,14 @@ Enable Hyprland in your NixOS configuration:
|
||||||
programs.hyprland.enable = true;
|
programs.hyprland.enable = true;
|
||||||
```
|
```
|
||||||
|
|
||||||
For more details, read the [Nix page](../../Nix).
|
For more details, read the [Nix page](../../nix).
|
||||||
|
|
||||||
{{< /tab >}}
|
{{% /details %}}
|
||||||
{{< tab "openSUSE*" >}}
|
|
||||||
Hyprland is part of factory, starting with snapshot 20230411. To install it simply use zypper
|
{{% details title="openSUSE*" closed="true" %}}
|
||||||
|
|
||||||
|
Hyprland is part of factory, starting with snapshot 20230411. To install it
|
||||||
|
simply use zypper
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo zypper in hyprland
|
sudo zypper in hyprland
|
||||||
|
@ -58,12 +67,16 @@ sudo zypper in hyprland
|
||||||
|
|
||||||
or install the "hyprland" package via YaST2 Software.
|
or install the "hyprland" package via YaST2 Software.
|
||||||
|
|
||||||
Alternatively, you can also follow the instructions under ["Manual (Manual Build)"](#manual-manual-build)
|
Alternatively, you can also follow the instructions under
|
||||||
to build Hyprland yourself.
|
["Manual (Manual Build)"](#manual-manual-build) to build Hyprland yourself.
|
||||||
|
|
||||||
|
Note: _Hyprland is not available for Leap, as most libraries (and compiler) that
|
||||||
|
Hyprland needs are too old._
|
||||||
|
|
||||||
|
{{% /details %}}
|
||||||
|
|
||||||
|
{{% details title="Fedora*" closed="true" %}}
|
||||||
|
|
||||||
Note: _Hyprland is not available for Leap, as most libraries (and compiler) that Hyprland needs are too old._
|
|
||||||
{{< /tab >}}
|
|
||||||
{{< tab "Fedora*" >}}
|
|
||||||
On Fedora 39 and Rawhide, run:
|
On Fedora 39 and Rawhide, run:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
@ -71,18 +84,28 @@ sudo dnf install hyprland
|
||||||
sudo dnf install hyprland-devel # If you want to build plugins
|
sudo dnf install hyprland-devel # If you want to build plugins
|
||||||
```
|
```
|
||||||
|
|
||||||
Builds for Fedora 38 and additional packages are available in the [solopasha/hyprland](https://copr.fedorainfracloud.org/coprs/solopasha/hyprland) Copr repository.
|
Builds for Fedora 38 and additional packages are available in the
|
||||||
|
[solopasha/hyprland](https://copr.fedorainfracloud.org/coprs/solopasha/hyprland)
|
||||||
|
Copr repository.
|
||||||
|
|
||||||
|
If you are on an older version of Fedora, you can also compile it yourself by
|
||||||
|
following the instructions
|
||||||
|
[here](https://github.com/hyprwm/Hyprland/discussions/284)
|
||||||
|
|
||||||
|
{{% /details %}}
|
||||||
|
|
||||||
|
{{% details title="Gentoo*" closed="true" %}}
|
||||||
|
|
||||||
If you are on an older version of Fedora, you can also compile it yourself by following the instructions [here](https://github.com/hyprwm/Hyprland/discussions/284)
|
|
||||||
{{< /tab >}}
|
|
||||||
{{< tab "Gentoo*" >}}
|
|
||||||
The hyprland package is available in the main tree:
|
The hyprland package is available in the main tree:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
emerge --ask gui-wm/hyprland
|
emerge --ask gui-wm/hyprland
|
||||||
```
|
```
|
||||||
|
|
||||||
Additional packages like hyprlock, hypridle, xdg-desktop-portal-hyprland, hyprland-plugins, hyprpaper and hyprpicker are available in the [GURU](https://wiki.gentoo.org/wiki/Project:GURU) overlay. Community-contributed scripts are also available in GURU as part of the hyprland-contrib package.
|
Additional packages like hyprlock, hypridle, xdg-desktop-portal-hyprland,
|
||||||
|
hyprland-plugins, hyprpaper and hyprpicker are available in the
|
||||||
|
[GURU](https://wiki.gentoo.org/wiki/Project:GURU) overlay. Community-contributed
|
||||||
|
scripts are also available in GURU as part of the hyprland-contrib package.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
eselect repository enable guru
|
eselect repository enable guru
|
||||||
|
@ -97,50 +120,84 @@ emerge --ask gui-apps/hyprpicker
|
||||||
emerge --ask gui-wm/hyprland-contrib
|
emerge --ask gui-wm/hyprland-contrib
|
||||||
```
|
```
|
||||||
|
|
||||||
For USE flags and more details, read the [Gentoo wiki page](https://wiki.gentoo.org/wiki/Hyprland) about Hyprland.
|
For USE flags and more details, read the
|
||||||
|
[Gentoo wiki page](https://wiki.gentoo.org/wiki/Hyprland) about Hyprland.
|
||||||
|
|
||||||
|
{{% /details %}}
|
||||||
|
|
||||||
|
{{% details title="FreeBSD*" closed="true" %}}
|
||||||
|
|
||||||
{{</ tab >}}
|
|
||||||
{{< tab "FreeBSD*" >}}
|
|
||||||
Hyprland and related are in the default repository:
|
Hyprland and related are in the default repository:
|
||||||
|
|
||||||
- [hyprland](https://www.freshports.org/x11-wm/hyprland)
|
- [hyprland](https://www.freshports.org/x11-wm/hyprland)
|
||||||
- [hyprpaper](https://www.freshports.org/x11/hyprpaper)
|
- [hyprpaper](https://www.freshports.org/x11/hyprpaper)
|
||||||
- [hyprpicker](https://www.freshports.org/x11/hyprpicker)
|
- [hyprpicker](https://www.freshports.org/x11/hyprpicker)
|
||||||
- [xdg-desktop-portal-hyprland](https://www.freshports.org/x11/xdg-desktop-portal-hyprland)
|
- [xdg-desktop-portal-hyprland](https://www.freshports.org/x11/xdg-desktop-portal-hyprland)
|
||||||
- [Other Wayland stuff](https://www.freshports.org/wayland/)
|
- [Other Wayland stuff](https://www.freshports.org/wayland/)
|
||||||
{{</ tab >}}
|
|
||||||
{{< tab "Ubuntu 23.04*" >}}
|
{{% /details %}}
|
||||||
|
|
||||||
|
{{% details title="Ubuntu 23.04*" closed="true" %}}
|
||||||
|
|
||||||
Build Dependencies:
|
Build Dependencies:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo apt-get install -y meson wget build-essential ninja-build cmake-extras cmake gettext gettext-base fontconfig libfontconfig-dev libffi-dev libxml2-dev libdrm-dev libxkbcommon-x11-dev libxkbregistry-dev libxkbcommon-dev libpixman-1-dev libudev-dev libseat-dev seatd libxcb-dri3-dev libegl-dev libgles2 libegl1-mesa-dev glslang-tools libinput-bin libinput-dev libxcb-composite0-dev libavutil-dev libavcodec-dev libavformat-dev libxcb-ewmh2 libxcb-ewmh-dev libxcb-present-dev libxcb-icccm4-dev libxcb-render-util0-dev libxcb-res0-dev libxcb-xinput-dev xdg-desktop-portal-wlr libtomlplusplus3
|
sudo apt-get install -y meson wget build-essential ninja-build cmake-extras cmake gettext gettext-base fontconfig libfontconfig-dev libffi-dev libxml2-dev libdrm-dev libxkbcommon-x11-dev libxkbregistry-dev libxkbcommon-dev libpixman-1-dev libudev-dev libseat-dev seatd libxcb-dri3-dev libegl-dev libgles2 libegl1-mesa-dev glslang-tools libinput-bin libinput-dev libxcb-composite0-dev libavutil-dev libavcodec-dev libavformat-dev libxcb-ewmh2 libxcb-ewmh-dev libxcb-present-dev libxcb-icccm4-dev libxcb-render-util0-dev libxcb-res0-dev libxcb-xinput-dev xdg-desktop-portal-wlr libtomlplusplus3
|
||||||
```
|
```
|
||||||
you will also need to build the latest wayland, wayland-protocols, and libdisplay-info tagged releases from source
|
|
||||||
|
|
||||||
for more info refer to the [Ubuntu Guide For Installing And Building Hyprland Gist](https://gist.github.com/Vertecedoc4545/3b077301299c20c5b9b4db00f4ca6000)
|
you will also need to build the latest wayland, wayland-protocols, and
|
||||||
|
libdisplay-info tagged releases from source
|
||||||
|
|
||||||
{{< hint type=warning >}}
|
for more info refer to the
|
||||||
|
[Ubuntu Guide For Installing And Building Hyprland Gist](https://gist.github.com/Vertecedoc4545/3b077301299c20c5b9b4db00f4ca6000)
|
||||||
|
|
||||||
Please note that since Ubuntu is generally behind with dependencies, it's not guaranteed
|
{{< callout type=warning >}}
|
||||||
that the build process will work at all. Even if it is, it's likely that it will break at some point in the future.
|
|
||||||
|
Please note that since Ubuntu is generally behind with dependencies, it's not
|
||||||
|
guaranteed that the build process will work at all. Even if it is, it's likely
|
||||||
|
that it will break at some point in the future.
|
||||||
|
|
||||||
Refer to the gist if anything fails.
|
Refer to the gist if anything fails.
|
||||||
|
|
||||||
{{< /hint >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
{{</ tab >}}
|
{{% /details %}}
|
||||||
{{< tab "Void Linux*" >}}
|
|
||||||
Hyprland is not available for Void Linux from the official repositories [as Hyprland doesn't build against tagged wlroots](https://github.com/void-linux/void-packages/issues/37544),
|
|
||||||
however template files are available [from a third party](https://github.com/Makrennel/hyprland-void) which can build Hyprland [using xbps-src](https://github.com/void-linux/void-packages).
|
|
||||||
|
|
||||||
For further instructions on building with the third party resource, refer to the [README](https://github.com/Makrennel/hyprland-void/blob/master/README.md).
|
{{% details title="Void Linux*" closed="true" %}}
|
||||||
|
|
||||||
{{< hint type=warning >}}
|
Hyprland is not available for Void Linux from the official repositories
|
||||||
As always, when using third party scripts exercise caution and understand what the script does.
|
[as Hyprland doesn't build against tagged wlroots](https://github.com/void-linux/void-packages/issues/37544),
|
||||||
{{< /hint>}}
|
however template files are available
|
||||||
{{< /tab >}}
|
[from a third party](https://github.com/Makrennel/hyprland-void) which can build
|
||||||
|
Hyprland [using xbps-src](https://github.com/void-linux/void-packages).
|
||||||
|
|
||||||
{{< /tabs >}}
|
For further instructions on building with the third party resource, refer to the
|
||||||
|
[README](https://github.com/Makrennel/hyprland-void/blob/master/README.md).
|
||||||
|
|
||||||
***\* Unofficial, no official support is provided. These instructions are community-driven, and no guarantee is provided for their validity.***
|
{{< callout type=warning >}}
|
||||||
|
|
||||||
|
As always, when using third party scripts exercise caution and understand what
|
||||||
|
the script does.
|
||||||
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
|
{{% /details %}}
|
||||||
|
|
||||||
|
{{% details title="Slackware*" closed="true" %}}
|
||||||
|
|
||||||
|
```plain
|
||||||
|
hyprland-bin (SlackBuilds) - Prebuilt release for Slackware ready for install
|
||||||
|
```
|
||||||
|
|
||||||
|
Hyprland is not installed by default on the current release of Slackware.
|
||||||
|
|
||||||
|
For detailed instructions on installing this build see
|
||||||
|
[here](https://slackbuilds.org/repository/15.0/desktop/hyprland-bin/)
|
||||||
|
|
||||||
|
{{% /details %}}
|
||||||
|
|
||||||
|
_**\* Unofficial, no official support is provided. These instructions are
|
||||||
|
community-driven, and no guarantee is provided for their validity.**_
|
||||||
|
|
||||||
### Manual (Releases, Linux-only)
|
### Manual (Releases, Linux-only)
|
||||||
|
|
||||||
|
@ -170,7 +227,8 @@ _Arch dependencies_:
|
||||||
yay -S gdb ninja gcc cmake meson libxcb xcb-proto xcb-util xcb-util-keysyms libxfixes libx11 libxcomposite xorg-xinput libxrender pixman wayland-protocols cairo pango seatd libxkbcommon xcb-util-wm xorg-xwayland libinput libliftoff libdisplay-info cpio tomlplusplus
|
yay -S gdb ninja gcc cmake meson libxcb xcb-proto xcb-util xcb-util-keysyms libxfixes libx11 libxcomposite xorg-xinput libxrender pixman wayland-protocols cairo pango seatd libxkbcommon xcb-util-wm xorg-xwayland libinput libliftoff libdisplay-info cpio tomlplusplus
|
||||||
```
|
```
|
||||||
|
|
||||||
_(Please make a pull request or open an issue if any packages are missing from the list)_
|
_(Please make a pull request or open an issue if any packages are missing from
|
||||||
|
the list)_
|
||||||
|
|
||||||
_openSUSE dependencies_:
|
_openSUSE dependencies_:
|
||||||
|
|
||||||
|
@ -178,7 +236,8 @@ _openSUSE dependencies_:
|
||||||
zypper in gcc-c++ git meson cmake "pkgconfig(cairo)" "pkgconfig(egl)" "pkgconfig(gbm)" "pkgconfig(gl)" "pkgconfig(glesv2)" "pkgconfig(libdrm)" "pkgconfig(libinput)" "pkgconfig(libseat)" "pkgconfig(libudev)" "pkgconfig(pango)" "pkgconfig(pangocairo)" "pkgconfig(pixman-1)" "pkgconfig(vulkan)" "pkgconfig(wayland-client)" "pkgconfig(wayland-protocols)" "pkgconfig(wayland-scanner)" "pkgconfig(wayland-server)" "pkgconfig(xcb)" "pkgconfig(xcb-icccm)" "pkgconfig(xcb-renderutil)" "pkgconfig(xkbcommon)" "pkgconfig(xwayland)" "pkgconfig(xcb-errors)" glslang-devel Mesa-libGLESv3-devel tomlplusplus-devel
|
zypper in gcc-c++ git meson cmake "pkgconfig(cairo)" "pkgconfig(egl)" "pkgconfig(gbm)" "pkgconfig(gl)" "pkgconfig(glesv2)" "pkgconfig(libdrm)" "pkgconfig(libinput)" "pkgconfig(libseat)" "pkgconfig(libudev)" "pkgconfig(pango)" "pkgconfig(pangocairo)" "pkgconfig(pixman-1)" "pkgconfig(vulkan)" "pkgconfig(wayland-client)" "pkgconfig(wayland-protocols)" "pkgconfig(wayland-scanner)" "pkgconfig(wayland-server)" "pkgconfig(xcb)" "pkgconfig(xcb-icccm)" "pkgconfig(xcb-renderutil)" "pkgconfig(xkbcommon)" "pkgconfig(xwayland)" "pkgconfig(xcb-errors)" glslang-devel Mesa-libGLESv3-devel tomlplusplus-devel
|
||||||
```
|
```
|
||||||
|
|
||||||
(this should also work on RHEL/Fedora if you remove `Mesa-libGLESv3-devel` and `pkgconfig(xcb-errors)`)
|
(this should also work on RHEL/Fedora if you remove `Mesa-libGLESv3-devel` and
|
||||||
|
`pkgconfig(xcb-errors)`)
|
||||||
|
|
||||||
_FreeBSD dependencies_:
|
_FreeBSD dependencies_:
|
||||||
|
|
||||||
|
@ -188,17 +247,16 @@ pkg install meson jq `pkg rquery %dn wlroots` hwdata libdisplay-info libliftoff
|
||||||
export CC=gcc CXX=g++ LDFLAGS="-static-libstdc++ -static-libgcc"
|
export CC=gcc CXX=g++ LDFLAGS="-static-libstdc++ -static-libgcc"
|
||||||
```
|
```
|
||||||
|
|
||||||
_Ubuntu 23.04 dependencies_:
|
_Ubuntu 23.04 dependencies_: refer to the Ubuntu tab above
|
||||||
refer to the Ubuntu tab above
|
|
||||||
|
|
||||||
Please note Hyprland builds `wlroots`. Make sure you have the dependencies of
|
Please note Hyprland builds `wlroots`. Make sure you have the dependencies of
|
||||||
wlroots installed, you can make sure you have them by installing wlroots
|
wlroots installed, you can make sure you have them by installing wlroots
|
||||||
separately (Hyprland doesn't mind)
|
separately (Hyprland doesn't mind)
|
||||||
|
|
||||||
Also note that Hyprland uses the C++23 standard, so both your compiler
|
Also note that Hyprland uses the C++23 standard, so both your compiler and your
|
||||||
and your C++ library has to support that (`gcc>=13.0.0` or `clang>=15`).
|
C++ library has to support that (`gcc>=13.0.0` or `clang>=15`). On Clang-based
|
||||||
On Clang-based systems libc++ may be used by default, so until libc++
|
systems libc++ may be used by default, so until libc++ supports C++23 you have
|
||||||
supports C++23 you have to pass `-stdlib=libstdc++` or switch to GCC.
|
to pass `-stdlib=libstdc++` or switch to GCC.
|
||||||
|
|
||||||
### CMake (recommended)
|
### CMake (recommended)
|
||||||
|
|
||||||
|
@ -208,7 +266,8 @@ cd Hyprland
|
||||||
make all && sudo make install
|
make all && sudo make install
|
||||||
```
|
```
|
||||||
|
|
||||||
_CMake is always recommended as it's the intended way Hyprland should be installed._
|
_CMake is always recommended as it's the intended way Hyprland should be
|
||||||
|
installed._
|
||||||
|
|
||||||
### Meson
|
### Meson
|
||||||
|
|
||||||
|
@ -219,12 +278,12 @@ ninja -C build
|
||||||
ninja -C build install --tags runtime,man
|
ninja -C build install --tags runtime,man
|
||||||
```
|
```
|
||||||
|
|
||||||
Refer to [Debugging](../../Contributing-and-Debugging) to see how to build &
|
Refer to [Debugging](../../contributing-and-debugging) to see how to build &
|
||||||
debug.
|
debug.
|
||||||
|
|
||||||
## Crash on launch
|
## Crash on launch
|
||||||
|
|
||||||
See [Crashes and Bugs](../../Crashes-and-Bugs).
|
See [Crashes and Bugs](../../crashes-and-bugs).
|
||||||
|
|
||||||
## Custom installation (legacy renderer, etc)
|
## Custom installation (legacy renderer, etc)
|
||||||
|
|
||||||
|
@ -284,4 +343,5 @@ Now, of course, install manually.
|
||||||
sudo cp ./build/Hyprland /usr/bin && sudo cp ./example/hyprland.desktop /usr/share/wayland-sessions
|
sudo cp ./build/Hyprland /usr/bin && sudo cp ./example/hyprland.desktop /usr/share/wayland-sessions
|
||||||
```
|
```
|
||||||
|
|
||||||
Lastly, copy hyprctl, hyprpm, and wlroots as mentioned [here](#manual-releases-linux-only)
|
Lastly, copy hyprctl, hyprpm, and wlroots as mentioned
|
||||||
|
[here](#manual-releases-linux-only)
|
||||||
|
|
|
@ -1,33 +1,41 @@
|
||||||
If you are coming to Hyprland for the first time, this is the main tutorial to read.
|
---
|
||||||
|
weight: 1
|
||||||
|
title: Master tutorial
|
||||||
|
---
|
||||||
|
|
||||||
Due to a lot of people doing stupid stuff, this tutorial will cover literally everything
|
If you are coming to Hyprland for the first time, this is the main tutorial to
|
||||||
you need to just get things going. It does link to other pages where necessary.
|
read.
|
||||||
|
|
||||||
{{< toc >}}
|
Due to a lot of people doing stupid stuff, this tutorial will cover literally
|
||||||
|
everything you need to just get things going. It does link to other pages where
|
||||||
|
necessary.
|
||||||
|
|
||||||
## Install Hyprland
|
## Install Hyprland
|
||||||
See [Installation](../Installation) and come back here once you have successfully
|
|
||||||
installed Hyprland.
|
See [Installation](../installation) and come back here once you have
|
||||||
|
successfully installed Hyprland.
|
||||||
|
|
||||||
Install `kitty` (default terminal emulator) terminal. This is available in most
|
Install `kitty` (default terminal emulator) terminal. This is available in most
|
||||||
distros' repositories.
|
distros' repositories.
|
||||||
|
|
||||||
## NVIDIA?
|
## NVIDIA?
|
||||||
|
|
||||||
_If not using an NVIDIA card, skip this step_
|
_If not using an NVIDIA card, skip this step_
|
||||||
|
|
||||||
Please take a look at
|
Please take a look at [The Nvidia page](../../nvidia) before launching. It has a
|
||||||
[The Nvidia page](../../Nvidia) before launching. It has a lot of info regarding the needed
|
lot of info regarding the needed environment and tweaks.
|
||||||
environment and tweaks.
|
|
||||||
|
|
||||||
## VM?
|
## VM?
|
||||||
|
|
||||||
_If not using a VM, skip this step_
|
_If not using a VM, skip this step_
|
||||||
|
|
||||||
In a VM, make sure you have 3D acceleration enabled in your virtio config (or virt-manager)
|
In a VM, make sure you have 3D acceleration enabled in your virtio config (or
|
||||||
otherwise Hyprland ***will not work***.
|
virt-manager) otherwise Hyprland _**will not work**_.
|
||||||
|
|
||||||
You can also passthru a GPU to make it work.
|
You can also passthru a GPU to make it work.
|
||||||
|
|
||||||
Please bear in mind 3D accel in VMs may be pretty slow.
|
Please bear in mind 3D accel in VMs may be pretty slow.
|
||||||
|
|
||||||
## Launching Hyprland
|
## Launching Hyprland
|
||||||
|
|
||||||
Now, you can just execute `Hyprland` in your tty.
|
Now, you can just execute `Hyprland` in your tty.
|
||||||
|
@ -35,65 +43,82 @@ Now, you can just execute `Hyprland` in your tty.
|
||||||
**!IMPORTANT**: Do **not** launch Hyprland with `root` permissions (don't
|
**!IMPORTANT**: Do **not** launch Hyprland with `root` permissions (don't
|
||||||
`sudo`)
|
`sudo`)
|
||||||
|
|
||||||
You can see some launch flags by doing `Hyprland -h`, these include setting the config
|
You can see some launch flags by doing `Hyprland -h`, these include setting the
|
||||||
path, ignoring a check for the above, etc.
|
config path, ignoring a check for the above, etc.
|
||||||
|
|
||||||
Login managers are not officially supported, but here's a short compatibility
|
Login managers are not officially supported, but here's a short compatibility
|
||||||
list:
|
list:
|
||||||
|
|
||||||
- SDDM → Works flawlessly. Install sddm ⩾ 0.20.0 or the [latest git version](https://github.com/sddm/sddm) (or [sddm-git](https://aur.archlinux.org/packages/sddm-git) from AUR) to prevent SDDM bug [1476](https://github.com/sddm/sddm/issues/1476) (90s shutdowns).
|
- SDDM → Works flawlessly. Install sddm ⩾ 0.20.0 or the
|
||||||
|
[latest git version](https://github.com/sddm/sddm) (or
|
||||||
|
[sddm-git](https://aur.archlinux.org/packages/sddm-git) from AUR) to prevent
|
||||||
|
SDDM bug [1476](https://github.com/sddm/sddm/issues/1476) (90s shutdowns).
|
||||||
- GDM → Works with the caveat of crashing Hyprland on the first launch
|
- GDM → Works with the caveat of crashing Hyprland on the first launch
|
||||||
- ly → Works poorly
|
- ly → Works poorly
|
||||||
|
|
||||||
## In Hyprland
|
## In Hyprland
|
||||||
|
|
||||||
You're good to go with your adventure, technically.
|
You're good to go with your adventure, technically.
|
||||||
|
|
||||||
Use <key>SUPER</key> + <key>Q</key> to launch kitty. If you wish to choose the
|
Use <key>SUPER</key> + <key>Q</key> to launch kitty. If you wish to choose the
|
||||||
default terminal before you proceed, you can do so in `~/.config/hypr/hyprland.conf`
|
default terminal before you proceed, you can do so in
|
||||||
|
`~/.config/hypr/hyprland.conf`
|
||||||
([example config](https://github.com/hyprwm/Hyprland/blob/main/example/hyprland.conf)).
|
([example config](https://github.com/hyprwm/Hyprland/blob/main/example/hyprland.conf)).
|
||||||
|
|
||||||
If you want the best experience with less hassle googling, keep reading.
|
If you want the best experience with less hassle googling, keep reading.
|
||||||
|
|
||||||
## Critical software
|
## Critical software
|
||||||
See the [Must-have Software page](../../Useful-Utilities/Must-have) for the crucial
|
|
||||||
things to make Wayland / Hyprland / other apps work correctly.
|
See the [Must-have Software page](../../useful-utilities/must-have) for the
|
||||||
|
crucial things to make Wayland / Hyprland / other apps work correctly.
|
||||||
|
|
||||||
## Monitors config
|
## Monitors config
|
||||||
See [Configuring Hyprland page](../../Configuring/Monitors) to learn all
|
|
||||||
about configuring your displays.
|
See [Configuring Hyprland page](../../configuring/monitors) to learn all about
|
||||||
|
configuring your displays.
|
||||||
|
|
||||||
## Apps / X11 replacements
|
## Apps / X11 replacements
|
||||||
See the [Useful Utilities page](../../Useful-Utilities) and the
|
|
||||||
|
See the [Useful Utilities page](../../useful-utilities) and the
|
||||||
[Sway wiki page](https://github.com/swaywm/sway/wiki/Useful-add-ons-for-sway)
|
[Sway wiki page](https://github.com/swaywm/sway/wiki/Useful-add-ons-for-sway)
|
||||||
just about that. You can also visit the
|
just about that. You can also visit the
|
||||||
[Awesome-Hyprland](https://github.com/hyprland-community/awesome-hyprland)
|
[Awesome-Hyprland](https://github.com/hyprland-community/awesome-hyprland)
|
||||||
repository for a more comprehensive list.
|
repository for a more comprehensive list.
|
||||||
|
|
||||||
## Fully configure
|
## Fully configure
|
||||||
|
|
||||||
Head onto the
|
Head onto the
|
||||||
[Configuring Hyprland page](../../Configuring/Configuring-Hyprland) to learn all
|
[Configuring Hyprland page](../../configuring/configuring-Hyprland) to learn all
|
||||||
about configuring Hyprland to your likings.
|
about configuring Hyprland to your likings.
|
||||||
|
|
||||||
## Cursors
|
## Cursors
|
||||||
Cursors are a notorious pain to set up when you don't know how. See
|
|
||||||
[this FAQ entry](../../FAQ#how-do-i-change-me-mouse-cursor)
|
|
||||||
|
|
||||||
If your cursor does not appear, then see [this FAQ entry](../../FAQ#me-cursor-no-render)
|
Cursors are a notorious pain to set up when you don't know how. See
|
||||||
|
[this FAQ entry](../../faq#how-do-i-change-me-mouse-cursor)
|
||||||
|
|
||||||
|
If your cursor does not appear, then see
|
||||||
|
[this FAQ entry](../../faq#me-cursor-no-render)
|
||||||
|
|
||||||
## Themes
|
## Themes
|
||||||
Since this is not a full fledged Desktop Environment, you will need to use tools such as
|
|
||||||
`lxappearance` and `nwg-look` (recommended) for GTK, and `qt5ct` / `qt6ct` for their
|
|
||||||
respective Qt versions. Some older applications may also require `qt4ct`.
|
|
||||||
|
|
||||||
|
Since this is not a full fledged Desktop Environment, you will need to use tools
|
||||||
|
such as `lxappearance` and `nwg-look` (recommended) for GTK, and `qt5ct` /
|
||||||
|
`qt6ct` for their respective Qt versions. Some older applications may also
|
||||||
|
require `qt4ct`.
|
||||||
|
|
||||||
## Force apps to use Wayland
|
## Force apps to use Wayland
|
||||||
A lot of apps will use Wayland by default. Chromium (and other browsers based on it or electron)
|
|
||||||
don't. You need to pass `--enable-features=UseOzonePlatform --ozone-platform=wayland` to them or use `.conf` files
|
|
||||||
where possible. Chromium-based browsers also should have a toggle in `chrome://flags`. Search for _"ozone"_ and select Wayland.
|
|
||||||
|
|
||||||
For most electron apps, you should put the above in `~/.config/electron-flags.conf`. VSCode is known
|
A lot of apps will use Wayland by default. Chromium (and other browsers based on
|
||||||
to not work with that though.
|
it or electron) don't. You need to pass
|
||||||
|
`--enable-features=UseOzonePlatform --ozone-platform=wayland` to them or use
|
||||||
|
`.conf` files where possible. Chromium-based browsers also should have a toggle
|
||||||
|
in `chrome://flags`. Search for _"ozone"_ and select Wayland.
|
||||||
|
|
||||||
A few more environment variables for forcing Wayland mode are documented [here](../../Configuring/Environment-variables).
|
For most electron apps, you should put the above in
|
||||||
|
`~/.config/electron-flags.conf`. VSCode is known to not work with that though.
|
||||||
|
|
||||||
You can check whether an app is running in xwayland or not with `hyprctl clients`.
|
A few more environment variables for forcing Wayland mode are documented
|
||||||
|
[here](../../configuring/environment-variables).
|
||||||
|
|
||||||
|
You can check whether an app is running in xwayland or not with
|
||||||
|
`hyprctl clients`.
|
||||||
|
|
6
pages/Getting Started/_index.md
Normal file
6
pages/Getting Started/_index.md
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
weight: 2
|
||||||
|
title: Getting Started
|
||||||
|
sidebar:
|
||||||
|
open: true
|
||||||
|
---
|
|
@ -1,10 +1,15 @@
|
||||||
|
---
|
||||||
|
weight: 4
|
||||||
|
title: Hypr Ecosystem
|
||||||
|
---
|
||||||
|
|
||||||
This wiki section hosts docs for various hypr* projects. See a list bere:
|
This wiki section hosts docs for various hypr* projects. See a list bere:
|
||||||
|
|
||||||
{{< hint type=info >}}
|
{{< callout type=info >}}
|
||||||
|
|
||||||
These docs always target latest -git branch of respective apps.
|
These docs always target latest -git branch of respective apps.
|
||||||
|
|
||||||
{{< /hint >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
## Wiki pages
|
## Wiki pages
|
||||||
- **[hyprpaper](./hyprpaper)**
|
- **[hyprpaper](./hyprpaper)**
|
||||||
|
|
|
@ -1,20 +1,22 @@
|
||||||
hypridle is hyprland's idle management daemon.
|
---
|
||||||
|
weight: 3
|
||||||
|
title: hypridle
|
||||||
|
---
|
||||||
|
|
||||||
{{< toc >}}
|
hypridle is hyprland's idle management daemon.
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
Configuration is done via the config file at `~/.config/hypr/hypridle.conf`.
|
Configuration is done via the config file at `~/.config/hypr/hypridle.conf`. A
|
||||||
A config file is required; hypridle won't run without one.
|
config file is required; hypridle won't run without one. To run hypridle at
|
||||||
To run hypridle at startup edit `hyprland.conf` and add:
|
startup edit `hyprland.conf` and add: `exec-once = hypridle`.
|
||||||
`exec-once = hypridle`.
|
|
||||||
|
|
||||||
### General
|
### General
|
||||||
|
|
||||||
Variables in the `general` category:
|
Variables in the `general` category:
|
||||||
|
|
||||||
| variable | description | type | default |
|
| variable | description | type | default |
|
||||||
| -- | -- | -- | -- |
|
| --- | --- | --- | --- |
|
||||||
| lock_cmd | command to run when receiving a dbus lock event (e.g. `loginctl lock-session`) | string | empty |
|
| lock_cmd | command to run when receiving a dbus lock event (e.g. `loginctl lock-session`) | string | empty |
|
||||||
| unlock_cmd | command to run when receiving a dbus unlock event (e.g. `loginctl unlock-session`) | string | empty |
|
| unlock_cmd | command to run when receiving a dbus unlock event (e.g. `loginctl unlock-session`) | string | empty |
|
||||||
| before_sleep_cmd | command to run when receiving a dbus prepare_sleep event | string | empty |
|
| before_sleep_cmd | command to run when receiving a dbus prepare_sleep event | string | empty |
|
||||||
|
@ -25,8 +27,9 @@ Variables in the `general` category:
|
||||||
|
|
||||||
Hypridle uses listeners to define actions on idleness.
|
Hypridle uses listeners to define actions on idleness.
|
||||||
|
|
||||||
Every listener has a _timeout_ (in seconds). After idling for _timeout_ seconds, `on-timeout` will fire.
|
Every listener has a _timeout_ (in seconds). After idling for _timeout_ seconds,
|
||||||
When action is resumed after idle, `on-resume` will fire.
|
`on-timeout` will fire. When action is resumed after idle, `on-resume` will
|
||||||
|
fire.
|
||||||
|
|
||||||
Example listener:
|
Example listener:
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,16 @@
|
||||||
hyprlock is a simple, yet fast, multi-threaded and GPU-accelerated screen
|
---
|
||||||
lock for hyprland.
|
weight: 4
|
||||||
|
title: hyprlock
|
||||||
|
---
|
||||||
|
|
||||||
{{< toc >}}
|
hyprlock is a simple, yet fast, multi-threaded and GPU-accelerated screen lock
|
||||||
|
for hyprland.
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
Configuration is done via the config file at `~/.config/hypr/hyprlock.conf`. It is not required, but recommended. Without it, locking shows the current screen.
|
Configuration is done via the config file at `~/.config/hypr/hyprlock.conf`. It
|
||||||
|
is not required, but recommended. Without it, locking shows the current screen.
|
||||||
|
|
||||||
### General
|
### General
|
||||||
|
|
||||||
Variables in the `general` category:
|
Variables in the `general` category:
|
||||||
|
@ -33,10 +38,16 @@ widget_name {
|
||||||
## Widget List
|
## Widget List
|
||||||
|
|
||||||
### General remarks
|
### General remarks
|
||||||
- All rendered text supports [pango markup](https://docs.gtk.org/Pango/pango_markup.html).
|
|
||||||
- Additionally hyprlock will parse `<br/>` for your convenience. (That's a linebreak) Remember to enable linebreaks in your spans with `allow_breaks="true"`.
|
- All rendered text supports
|
||||||
- Positioning is done via halign, valign and position. Position is an added offset to the result of alignment.
|
[pango markup](https://docs.gtk.org/Pango/pango_markup.html).
|
||||||
- halign: `left`, `center`, `right`, `none`. valign: `top`, `center`, `bottom`, `none`
|
- Additionally hyprlock will parse `<br/>` for your convenience. (That's a
|
||||||
|
linebreak) Remember to enable linebreaks in your spans with
|
||||||
|
`allow_breaks="true"`.
|
||||||
|
- Positioning is done via halign, valign and position. Position is an added
|
||||||
|
offset to the result of alignment.
|
||||||
|
- halign: `left`, `center`, `right`, `none`. valign: `top`, `center`,
|
||||||
|
`bottom`, `none`
|
||||||
|
|
||||||
### Shadowable
|
### Shadowable
|
||||||
|
|
||||||
|
@ -52,7 +63,8 @@ Some widgets are shadowable, aka. can have a shadow. For those widgets, you get:
|
||||||
|
|
||||||
Draws a background image or fills with color.
|
Draws a background image or fills with color.
|
||||||
|
|
||||||
If `path` is empty or missing, will use `color`. Otherwise, the image will be used.
|
If `path` is empty or missing, will use `color`. Otherwise, the image will be
|
||||||
|
used.
|
||||||
|
|
||||||
If `path` is `screenshot`, a screenshot of your desktop at launch will be used.
|
If `path` is `screenshot`, a screenshot of your desktop at launch will be used.
|
||||||
|
|
||||||
|
@ -142,9 +154,11 @@ Available variables for `text`:
|
||||||
- `$ATTEMPTS` - failed attempts
|
- `$ATTEMPTS` - failed attempts
|
||||||
|
|
||||||
`text` also supports launching commands, for example:
|
`text` also supports launching commands, for example:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
text = cmd[update:1000] echo "<span foreground='##ff2222'>$(date)</span>"
|
text = cmd[update:1000] echo "<span foreground='##ff2222'>$(date)</span>"
|
||||||
```
|
```
|
||||||
|
|
||||||
Worth noting:
|
Worth noting:
|
||||||
- `update:` - time is in ms.
|
- `update:` - time is in ms.
|
||||||
- label can be forcefully updated by specifying `update:<time>:1` or `update:<time>:true` and sending `SIGUSR2` to hyprlock. `<time>` can be `0` in this case
|
- label can be forcefully updated by specifying `update:<time>:1` or `update:<time>:true` and sending `SIGUSR2` to hyprlock. `<time>` can be `0` in this case
|
||||||
|
|
|
@ -1,14 +1,17 @@
|
||||||
hyprpaper is a fast, IPC-controlled wallpaper utility for hyprland.
|
---
|
||||||
|
weight: 1
|
||||||
|
title: hyprpaper
|
||||||
|
---
|
||||||
|
|
||||||
{{< toc >}}
|
hyprpaper is a fast, IPC-controlled wallpaper utility for hyprland.
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
The config file is located at `~/.config/hypr/hyprpaper.conf`. It is not required.
|
The config file is located at `~/.config/hypr/hyprpaper.conf`. It is not
|
||||||
|
required.
|
||||||
|
|
||||||
Configuration is done via `preload`s, which _load_ an image into memory.
|
Configuration is done via `preload`s, which _load_ an image into memory. Then,
|
||||||
Then, you use `wallpaper` keywords to apply the preloaded image to your
|
you use `wallpaper` keywords to apply the preloaded image to your monitor(s):
|
||||||
monitor(s):
|
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
preload = /home/me/amongus.png
|
preload = /home/me/amongus.png
|
||||||
|
@ -16,30 +19,32 @@ wallpaper = DP-1,/home/me/amongus.png
|
||||||
```
|
```
|
||||||
|
|
||||||
For wallpaper keywords:
|
For wallpaper keywords:
|
||||||
- all paths have to be absolute (or start with `~`)
|
|
||||||
- leaving the first parameter (monitor) empty will act as a wildcard
|
|
||||||
- adding `contain:` before the path (e.g. `contain:/home/me/amongus.png`) will adjust the fitting algorithm to contain.
|
|
||||||
|
|
||||||
You can also `unload` preloaded images to free up memory. `unload all` and `unload unused` are a thing too.
|
You can also `unload` preloaded images to free up memory. `unload all` and
|
||||||
|
`unload unused` are a thing too.
|
||||||
|
|
||||||
To run hyprpaper at startup edit `hyprland.conf` and add:
|
To run hyprpaper at startup edit `hyprland.conf` and add:
|
||||||
`exec-once = hyprpaper`.
|
`exec-once = hyprpaper`.
|
||||||
|
|
||||||
### Misc options
|
### Misc options
|
||||||
|
|
||||||
| variable | description | type | default |
|
| variable | description | type | default |
|
||||||
| -- | -- | -- | -- |
|
| --- | --- | --- | --- |
|
||||||
| splash | enable rendering of the hyprland splash over the wallpaper | bool | false |
|
| splash | enable rendering of the hyprland splash over the wallpaper | bool | false |
|
||||||
| splash_offset | how far (in % of height) up should the splash be displayed | float | 2.0 |
|
| splash_offset | how far (in % of height) up should the splash be displayed | float | 2.0 |
|
||||||
| ipc | whether to enable IPC | bool | true |
|
| ipc | whether to enable IPC | bool | true |
|
||||||
|
|
||||||
## IPC
|
## IPC
|
||||||
|
|
||||||
hyprpaper supports IPC via `hyprctl`. Every dispatcher mentioned in [Configuration](#Configuration)
|
hyprpaper supports IPC via `hyprctl`. Every dispatcher mentioned in
|
||||||
can be called with `hyprctl hyprpaper <dispatcher> <arg(s)>`.
|
[Configuration](#configuration) can be called with
|
||||||
|
`hyprctl hyprpaper <dispatcher> <arg(s)>`.
|
||||||
|
|
||||||
Additionally, you can get some info about the current state of hyprpaper with `listloaded` and `listactive`.
|
Additionally, you can get some info about the current state of hyprpaper with
|
||||||
|
`listloaded` and `listactive`.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
hyprctl hyprpaper preload "~/Pictures/myepicpng.png"
|
hyprctl hyprpaper preload "~/Pictures/myepicpng.png"
|
||||||
hyprctl hyprpaper wallpaper "DP-1,~/Pictures/myepicpng.png"
|
hyprctl hyprpaper wallpaper "DP-1,~/Pictures/myepicpng.png"
|
||||||
|
|
|
@ -1,15 +1,18 @@
|
||||||
hyprpicker is a neat utility for picking a color your screen on hyprland.
|
---
|
||||||
|
weight: 2
|
||||||
|
title: hyprpicker
|
||||||
|
---
|
||||||
|
|
||||||
{{< toc >}}
|
hyprpicker is a neat utility for picking a color your screen on hyprland.
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
No configuration, only launch flags:
|
No configuration, only launch flags:
|
||||||
|
|
||||||
| flag | description | args |
|
| flag | description | args |
|
||||||
| -- | -- | -- |
|
| --- | --- | --- |
|
||||||
| -a / --autocopy | Automatically copies the output to the clipboard (requires wl-clipboard) | none |
|
| -a / --autocopy | Automatically copies the output to the clipboard (requires wl-clipboard) | none |
|
||||||
| -f / --format= | Specifies the output format | cmyk / hex / rgb / hsl / hsv |
|
| -f / --format= | Specifies the output format | cmyk / hex / rgb / hsl / hsv |
|
||||||
| -n / --no-fancy | Disables the "fancy" (aka. colored) outputting | none |
|
| -n / --no-fancy | Disables the "fancy" (aka. colored) outputting | none |
|
||||||
| -r | --render-inactive | Render (freeze) inactive displays | none |
|
| -r | --render-inactive | Render (freeze) inactive displays |
|
||||||
| -z | --no-zoom | Disable the zoom lens | none |
|
| -z | --no-zoom | Disable the zoom lens |
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
xdg-desktop-portal-hyprland is Hyprland's xdg-desktop-portal implementation.
|
---
|
||||||
It allows for screensharing, global shortcuts, etc.
|
weight: 5
|
||||||
|
title: xdg-desktop-portal-hyprland
|
||||||
|
---
|
||||||
|
|
||||||
{{< toc >}}
|
xdg-desktop-portal-hyprland is Hyprland's xdg-desktop-portal implementation. It
|
||||||
|
allows for screensharing, global shortcuts, etc.
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
|
@ -9,4 +12,5 @@ No configuration.
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
See the [XDG Desktop Portal wiki page](../../Useful-Utilities/Hyprland-desktop-portal).
|
See the
|
||||||
|
[XDG Desktop Portal wiki page](../../useful-utilities/xdg-desktop-portal-hyprland).
|
||||||
|
|
|
@ -1,21 +1,25 @@
|
||||||
|
---
|
||||||
|
weight: 9
|
||||||
|
title: IPC
|
||||||
|
---
|
||||||
|
|
||||||
Hyprland exposes 2 UNIX Sockets, for controlling / getting info about Hyprland
|
Hyprland exposes 2 UNIX Sockets, for controlling / getting info about Hyprland
|
||||||
via code / bash utilities.
|
via code / bash utilities.
|
||||||
|
|
||||||
# Hyprland Instance Signature (HIS)
|
## Hyprland Instance Signature (HIS)
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
echo $HYPRLAND_INSTANCE_SIGNATURE
|
echo $HYPRLAND_INSTANCE_SIGNATURE
|
||||||
```
|
```
|
||||||
|
|
||||||
# /tmp/hypr/\[HIS\]/.socket.sock
|
## /tmp/hypr/\[HIS\]/.socket.sock
|
||||||
|
|
||||||
Used for hyprctl-like requests. See the
|
Used for hyprctl-like requests. See the
|
||||||
[Hyprctl page](../Configuring/Using-hyprctl) for
|
[Hyprctl page](../configuring/using-hyprctl) for commands.
|
||||||
commands.
|
|
||||||
|
|
||||||
basically, write `[flag(s)]/command args`.
|
basically, write `[flag(s)]/command args`.
|
||||||
|
|
||||||
# /tmp/hypr/\[HIS\]/.socket2.sock
|
## /tmp/hypr/\[HIS\]/.socket2.sock
|
||||||
|
|
||||||
Used for events. Hyprland will write to each connected client live events like
|
Used for events. Hyprland will write to each connected client live events like
|
||||||
this:
|
this:
|
||||||
|
@ -24,7 +28,7 @@ this:
|
||||||
|
|
||||||
e.g.: `workspace>>2`
|
e.g.: `workspace>>2`
|
||||||
|
|
||||||
# Events list
|
## Events list
|
||||||
|
|
||||||
| name | description | data |
|
| name | description | data |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
|
@ -62,13 +66,15 @@ e.g.: `workspace>>2`
|
||||||
| lockgroups | emitted when `lockgroups` is toggled. | `0/1` |
|
| lockgroups | emitted when `lockgroups` is toggled. | `0/1` |
|
||||||
| configreloaded | emitted when the config is done reloading | empty |
|
| configreloaded | emitted when the config is done reloading | empty |
|
||||||
|
|
||||||
{{< hint type=warning >}}
|
{{< callout type=warning >}}
|
||||||
A fullscreen event is not guaranteed to fire on/off once in succession.
|
|
||||||
A window might do for example 3 requests to be fullscreen'd, which would result
|
|
||||||
in 3 fullscreen events.
|
|
||||||
{{< /hint >}}
|
|
||||||
|
|
||||||
# How to use socket2 with bash
|
A fullscreen event is not guaranteed to fire on/off once in succession. A window
|
||||||
|
might do for example 3 requests to be fullscreen'd, which would result in 3
|
||||||
|
fullscreen events.
|
||||||
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
|
## How to use socket2 with bash
|
||||||
|
|
||||||
example script using socket2 events with bash and `socat`:
|
example script using socket2 events with bash and `socat`:
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
---
|
||||||
|
title: Cachix
|
||||||
|
---
|
||||||
|
|
||||||
NOTE: This page only applies to the flake package. You can safely skip this if
|
NOTE: This page only applies to the flake package. You can safely skip this if
|
||||||
you use the Nixpkgs package.
|
you use the Nixpkgs package.
|
||||||
|
|
||||||
|
@ -11,10 +15,12 @@ your Nix configuration.
|
||||||
The [Hyprland Cachix](https://app.cachix.org/cache/hyprland) exists to cache the
|
The [Hyprland Cachix](https://app.cachix.org/cache/hyprland) exists to cache the
|
||||||
`hyprland` packages and any dependencies not found in [cache.nixos.org].
|
`hyprland` packages and any dependencies not found in [cache.nixos.org].
|
||||||
|
|
||||||
{{< hint >}}
|
{{< callout >}}
|
||||||
|
|
||||||
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**
|
||||||
using the Hyprland flake package.
|
using the Hyprland flake package.
|
||||||
{{< /hint >}}
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
# configuration.nix
|
# configuration.nix
|
||||||
|
@ -26,12 +32,10 @@ using the Hyprland flake package.
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< hint type=important >}}
|
{{< callout type=important >}} Do **not** override Hyprland's `nixpkgs` input
|
||||||
Do **not** override Hyprland's `nixpkgs` input unless you know what you are
|
unless you know what you are doing.
|
||||||
doing.
|
|
||||||
|
|
||||||
Doing so will make the cache useless, since you're building from a different
|
Doing so will make the cache useless, since you're building from a different
|
||||||
Nixpkgs commit.
|
Nixpkgs commit. {{< /callout >}}
|
||||||
{{< /hint >}}
|
|
||||||
|
|
||||||
[cache.nixos.org]: https://cache.nixos.org
|
[cache.nixos.org]: https://cache.nixos.org
|
||||||
|
|
|
@ -1,16 +1,20 @@
|
||||||
|
---
|
||||||
|
title: Hyprland on Home Manager
|
||||||
|
---
|
||||||
|
|
||||||
For a list of available options, check the
|
For a list of available options, check the
|
||||||
[Home Manager options](https://nix-community.github.io/home-manager/options.xhtml#opt-wayland.windowManager.hyprland.enable).
|
[Home Manager options](https://nix-community.github.io/home-manager/options.xhtml#opt-wayland.windowManager.hyprland.enable).
|
||||||
|
|
||||||
{{< hint title=Note >}}
|
{{< callout >}}
|
||||||
|
|
||||||
- _(Required) NixOS Module_: enables critical components needed to run Hyprland
|
- _(Required) NixOS Module_: enables critical components needed to run Hyprland
|
||||||
properly
|
properly
|
||||||
- _(Optional) Home-manager module_: lets you declaratively configure Hyprland
|
- _(Optional) Home-manager module_: lets you declaratively configure Hyprland
|
||||||
{{< /hint >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
{{< tabs "uniqueid" >}}
|
{{< tabs items="Home Manager,Flakes,No Flakes (with flake-compat)" >}}
|
||||||
|
|
||||||
{{< tab "Home Manager" >}}
|
{{< tab "Home Manager" >}}
|
||||||
|
|
||||||
|
@ -27,13 +31,13 @@ module.
|
||||||
|
|
||||||
{{< tab "Flakes" >}}
|
{{< tab "Flakes" >}}
|
||||||
|
|
||||||
{{< hint >}}
|
{{< callout >}}
|
||||||
|
|
||||||
The flake module is merely an extension to the Home Manager downstream module.
|
The flake module is merely an extension to the Home Manager downstream module.
|
||||||
It is mainly used as a staging area for new options, so unless you're a tester
|
It is mainly used as a staging area for new options, so unless you're a tester
|
||||||
you should use the downstream Home Manager module.
|
you should use the downstream Home Manager module.
|
||||||
|
|
||||||
{{< /hint >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
The following snippet of code tries to show how to bring the Hyprland flake from
|
The following snippet of code tries to show how to bring the Hyprland flake from
|
||||||
the flake input and import it into the module system. Feel free to make any
|
the flake input and import it into the module system. Feel free to make any
|
||||||
|
@ -74,13 +78,13 @@ Don't forget to replace `user@hostname` with your username and hostname!
|
||||||
|
|
||||||
{{< tab "No flakes (with flake-compat)" >}}
|
{{< tab "No flakes (with flake-compat)" >}}
|
||||||
|
|
||||||
{{< hint >}}
|
{{< callout >}}
|
||||||
|
|
||||||
The flake module is merely an extension to the Home Manager downstream module.
|
The flake module is merely an extension to the Home Manager downstream module.
|
||||||
It is mainly used as a staging area for new options, so unless you're a tester
|
It is mainly used as a staging area for new options, so unless you're a tester
|
||||||
you should use the downstream Home Manager module.
|
you should use the downstream Home Manager module.
|
||||||
|
|
||||||
{{< /hint >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
The following snippet of code tries to show how to bring the Hyprland flake from
|
The following snippet of code tries to show how to bring the Hyprland flake from
|
||||||
the flake input and import it into the module system. Feel free to make any
|
the flake input and import it into the module system. Feel free to make any
|
||||||
|
@ -106,8 +110,6 @@ in {
|
||||||
|
|
||||||
{{< /tabs >}}
|
{{< /tabs >}}
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Once the module is enabled, you can use it to declaratively configure Hyprland.
|
Once the module is enabled, you can use it to declaratively configure Hyprland.
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
---
|
||||||
|
title: Hyprland on NixOS
|
||||||
|
---
|
||||||
|
|
||||||
The NixOS module enables critical components needed to run Hyprland properly,
|
The NixOS module enables critical components needed to run Hyprland properly,
|
||||||
such as: polkit,
|
such as: polkit,
|
||||||
[xdg-desktop-portal-hyprland](https://github.com/hyprwm/xdg-desktop-portal-hyprland),
|
[xdg-desktop-portal-hyprland](https://github.com/hyprwm/xdg-desktop-portal-hyprland),
|
||||||
|
@ -7,12 +11,15 @@ 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).
|
||||||
|
|
||||||
{{< hint title=Note >}}
|
{{< callout >}}
|
||||||
- *(Required) NixOS Module*: enables critical components needed to run Hyprland properly
|
|
||||||
- *(Optional) Home-manager module*: lets you declaratively configure Hyprland
|
|
||||||
{{< /hint >}}
|
|
||||||
|
|
||||||
{{< tabs "uniqueid" >}}
|
- _(Required) NixOS Module_: enables critical components needed to run Hyprland
|
||||||
|
properly
|
||||||
|
- _(Optional) Home-manager module_: lets you declaratively configure Hyprland
|
||||||
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
|
{{< tabs items="Nixpkgs,Flake Package, No Flakes (with flake-compat)" >}}
|
||||||
|
|
||||||
{{< tab "Nixpkgs" >}}
|
{{< tab "Nixpkgs" >}}
|
||||||
|
|
||||||
|
@ -30,13 +37,15 @@ This will use the Hyprland version that Nixpkgs has.
|
||||||
|
|
||||||
{{< tab "Flake package" >}}
|
{{< tab "Flake package" >}}
|
||||||
|
|
||||||
{{< hint >}}
|
{{< callout >}}
|
||||||
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
|
Please enable [Cachix](../cachix) before using the flake package, so you don't
|
||||||
like this:
|
have to compile Hyprland yourself.
|
||||||
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
|
In case you want to use the development version of Hyprland, you can add it like
|
||||||
|
this:
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
# flake.nix
|
# flake.nix
|
||||||
|
@ -64,16 +73,19 @@ like this:
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Don't forget to change the `HOSTNAME` to your actual hostname!
|
Don't forget to change the `HOSTNAME` to your actual hostname!
|
||||||
|
|
||||||
{{< /tab >}}
|
{{< /tab >}}
|
||||||
|
|
||||||
{{< tab "Flake package, Nix stable" >}}
|
{{< tab "Flake package, Nix stable" >}}
|
||||||
|
|
||||||
{{< hint >}}
|
{{< callout >}}
|
||||||
Please enable [Cachix](../Cachix) before using the flake package, so you don't
|
|
||||||
|
Please enable [Cachix](../cachix) before using the flake package, so you don't
|
||||||
have to compile Hyprland yourself.
|
have to compile Hyprland yourself.
|
||||||
{{< /hint >}}
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
# configuration.nix
|
# configuration.nix
|
||||||
|
@ -93,8 +105,10 @@ in {
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< /tab >}}
|
{{< /tab >}}
|
||||||
|
|
||||||
{{< /tabs >}}
|
{{< /tabs >}}
|
||||||
|
|
||||||
## Fixing problems with themes
|
## Fixing problems with themes
|
||||||
|
|
||||||
If your themes for mouse cursor, icons or windows don't load correctly, see the relevant section in [Hyprland on Home Manager](../Hyprland-on-Home-Manager).
|
If your themes for mouse cursor, icons or windows don't load correctly, see the
|
||||||
|
relevant section in [Hyprland on Home Manager](../hyprland-on-home-manager).
|
||||||
|
|
|
@ -1,13 +1,17 @@
|
||||||
|
---
|
||||||
|
title: Hyprland on other distros
|
||||||
|
---
|
||||||
|
|
||||||
If you use Nix on distros other than NixOS, you can still use Hyprland.
|
If you use Nix on distros other than NixOS, you can still use Hyprland.
|
||||||
|
|
||||||
The best option would be through [Home Manager](../Hyprland-on-Home-Manager).
|
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.
|
||||||
|
|
||||||
First, [enable flakes](https://nixos.wiki/wiki/Flakes#Enable_flakes).
|
First, [enable flakes](https://nixos.wiki/wiki/Flakes#Enable_flakes). Once you
|
||||||
Once you have flakes working, install Hyprland through `nix profile`:
|
have flakes working, install Hyprland through `nix profile`:
|
||||||
|
|
||||||
{{< tabs "uniqueid" >}}
|
{{< tabs items="From Nixpkgs,From the Flake" >}}
|
||||||
|
|
||||||
{{< tab "From Nixpkgs" >}}
|
{{< tab "From Nixpkgs" >}}
|
||||||
|
|
||||||
|
@ -18,19 +22,22 @@ nix profile install nixpkgs#hyprland
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< /tab >}}
|
{{< /tab >}}
|
||||||
|
|
||||||
{{< tab "From the Flake" >}}
|
{{< tab "From the Flake" >}}
|
||||||
|
|
||||||
NOTE: Make sure to enable [Cachix](../Cachix) first.
|
NOTE: Make sure to enable [Cachix](../cachix) first.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
nix profile install github:hyprwm/Hyprland
|
nix profile install github:hyprwm/Hyprland
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< /tab >}}
|
{{< /tab >}}
|
||||||
|
|
||||||
{{< /tabs >}}
|
{{< /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).
|
||||||
|
|
||||||
First, install it:
|
First, install it:
|
||||||
|
|
||||||
|
@ -59,4 +66,3 @@ 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,11 +1,15 @@
|
||||||
You can override the package through `.override` or `.overrideAttrs`. This
|
---
|
||||||
is easily achievable on [NixOS](../Hyprland-on-NixOS) or
|
title: Options & Overrides
|
||||||
[Home Manager](../Hyprland-on-Home-Manager).
|
---
|
||||||
|
|
||||||
|
You can override the package through `.override` or `.overrideAttrs`. This is
|
||||||
|
easily achievable on [NixOS](../hyprland-on-nixos) or
|
||||||
|
[Home Manager](../hyprland-on-home-manager).
|
||||||
|
|
||||||
## Package options
|
## Package options
|
||||||
|
|
||||||
These are the default options that the Hyprland package is built with. These
|
These are the default options that the Hyprland package is built with. These can
|
||||||
can be changed by setting the appropriate option to `true`/`false`.
|
be changed by setting the appropriate option to `true`/`false`.
|
||||||
|
|
||||||
### Package
|
### Package
|
||||||
|
|
||||||
|
@ -30,12 +34,12 @@ programs.hyprland = { # or wayland.windowManager.hyprland
|
||||||
|
|
||||||
### XWayland
|
### XWayland
|
||||||
|
|
||||||
XWayland is enabled by default in the Nix package. You can disable it either
|
XWayland is enabled by default in the Nix package. You can disable it either in
|
||||||
in the package itself, or through the module options.
|
the package itself, or through the module options.
|
||||||
|
|
||||||
### XWayland HiDPI
|
### XWayland HiDPI
|
||||||
|
|
||||||
See [XWayland](../../Configuring/XWayland).
|
See [XWayland](../../configuring/xwayland).
|
||||||
|
|
||||||
## Using Nix repl
|
## Using Nix repl
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,17 @@
|
||||||
|
---
|
||||||
|
weight: 7
|
||||||
|
title: Nix
|
||||||
|
---
|
||||||
|
|
||||||
To install Hyprland on NixOS, we provide a NixOS and a Home Manager module.
|
To install Hyprland on NixOS, we provide a NixOS and a Home Manager module.
|
||||||
|
|
||||||
{{< hint title=Note >}}
|
{{< callout title=Note >}}
|
||||||
|
|
||||||
- _(Required) NixOS Module_: enables critical components needed to run Hyprland
|
- _(Required) NixOS Module_: enables critical components needed to run Hyprland
|
||||||
properly
|
properly
|
||||||
- _(Optional) Home-manager module_: lets you declaratively configure Hyprland
|
- _(Optional) Home-manager module_: lets you declaratively configure Hyprland
|
||||||
{{< /hint >}}
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
## NixOS module
|
## NixOS module
|
||||||
|
|
||||||
|
@ -26,11 +32,11 @@ Note that the command to run hyprland is `Hyprland` (with a capital `H`) and not
|
||||||
For more options, see
|
For more options, see
|
||||||
[module options](https://search.nixos.org/options?channel=unstable&from=0&size=50&sort=relevance&type=packages&query=hyprland).
|
[module options](https://search.nixos.org/options?channel=unstable&from=0&size=50&sort=relevance&type=packages&query=hyprland).
|
||||||
|
|
||||||
For other NixOS options, see [Hyprland on NixOS](./Hyprland-on-NixOS).
|
For other NixOS options, see [Hyprland on NixOS](./hyprland-on-nixos).
|
||||||
|
|
||||||
## Home-manager module
|
## Home-manager module
|
||||||
|
|
||||||
Read [Hyprland on Home Manager](./Hyprland-on-Home-Manager).
|
Read [Hyprland on Home Manager](./hyprland-on-home-manager).
|
||||||
|
|
||||||
For the adventurous, [@spikespaz](https://github.com/spikespaz) has made a
|
For the adventurous, [@spikespaz](https://github.com/spikespaz) has made a
|
||||||
Hyprland module that can be used in Home Manager and NixOS. It can be found
|
Hyprland module that can be used in Home Manager and NixOS. It can be found
|
||||||
|
@ -38,4 +44,4 @@ Hyprland module that can be used in Home Manager and NixOS. It can be found
|
||||||
|
|
||||||
## Options and overrides
|
## Options and overrides
|
||||||
|
|
||||||
Read [Options & Overrides](./Options-Overrides).
|
Read [Options & Overrides](./options--overrides).
|
||||||
|
|
|
@ -1,35 +1,79 @@
|
||||||
|
---
|
||||||
|
weight: 8
|
||||||
|
title: NVidia
|
||||||
|
---
|
||||||
|
|
||||||
# Foreword
|
# Foreword
|
||||||
|
|
||||||
There is no _official_ Hyprland support for Nvidia hardware. However, you might make it work properly following this page.
|
There is no _official_ Hyprland support for Nvidia hardware. However, you might
|
||||||
|
make it work properly following this page.
|
||||||
|
|
||||||
You can choose between the proprietary [Nvidia drivers](https://wiki.archlinux.org/title/NVIDIA) or the open source [Nouveau driver](https://wiki.archlinux.org/title/Nouveau). Under the proprietary Nvidia drivers category, there are 3 of them: the current driver named 'nvidia' (or 'nvidia-dkms' to use with custom linux kernels) which is under active development, the legacy drivers 'nvidia-3xxxx' for older cards which Nvidia no longer actively supports, and the 'nvidia-open' driver which is currently an alpha stage attempt to open source a part of their close source driver for newer cards.
|
You can choose between the proprietary
|
||||||
|
[Nvidia drivers](https://wiki.archlinux.org/title/NVIDIA) or the open source
|
||||||
|
[Nouveau driver](https://wiki.archlinux.org/title/Nouveau). Under the
|
||||||
|
proprietary Nvidia drivers category, there are 3 of them: the current driver
|
||||||
|
named 'nvidia' (or 'nvidia-dkms' to use with custom linux kernels) which is
|
||||||
|
under active development, the legacy drivers 'nvidia-3xxxx' for older cards
|
||||||
|
which Nvidia no longer actively supports, and the 'nvidia-open' driver which is
|
||||||
|
currently an alpha stage attempt to open source a part of their close source
|
||||||
|
driver for newer cards.
|
||||||
|
|
||||||
You may want to use the proprietary Nvidia drivers in some cases, for example: if you have a new Nvidia GPU model, if you want more performance, if you want to play video games, if you need a wider feature set (for example, better power consumption on recent GPUs), etc. However, keep in mind that if the proprietary Nvidia drivers do not work properly on your computer, the Nouveau driver might work fine while not having as much features or performance. For [older cards](https://wiki.archlinux.org/title/NVIDIA#Unsupported_drivers), in order to use Hyprland, you will probably need to use the Nouveau driver which actively supports them.
|
You may want to use the proprietary Nvidia drivers in some cases, for example:
|
||||||
|
if you have a new Nvidia GPU model, if you want more performance, if you want to
|
||||||
|
play video games, if you need a wider feature set (for example, better power
|
||||||
|
consumption on recent GPUs), etc. However, keep in mind that if the proprietary
|
||||||
|
Nvidia drivers do not work properly on your computer, the Nouveau driver might
|
||||||
|
work fine while not having as much features or performance. For
|
||||||
|
[older cards](https://wiki.archlinux.org/title/NVIDIA#Unsupported_drivers), in
|
||||||
|
order to use Hyprland, you will probably need to use the Nouveau driver which
|
||||||
|
actively supports them.
|
||||||
|
|
||||||
Below are some tips to try to make the proprietary Nvidia driver work with Hyprland properly:
|
Below are some tips to try to make the proprietary Nvidia driver work with
|
||||||
|
Hyprland properly:
|
||||||
|
|
||||||
## How to get Hyprland to possibly work on Nvidia
|
## How to get Hyprland to possibly work on Nvidia
|
||||||
|
|
||||||
Install the `nvidia-dkms` driver and add it to your initramfs & kernel parameters.
|
Install the `nvidia-dkms` driver and add it to your initramfs & kernel
|
||||||
For people using [systemd-boot](https://wiki.archlinux.org/title/systemd-boot) you can do this adding `nvidia_drm.modeset=1` to the end of `/boot/loader/entries/arch.conf`.
|
parameters.\
|
||||||
For people using [grub](https://wiki.archlinux.org/title/GRUB) you can do this by adding `nvidia_drm.modeset=1` to the end of `GRUB_CMDLINE_LINUX_DEFAULT=` in `/etc/default/grub`, then run `# grub-mkconfig -o /boot/grub/grub.cfg`
|
For people using [systemd-boot](https://wiki.archlinux.org/title/systemd-boot)
|
||||||
For others check out [kernel parameters](https://wiki.archlinux.org/title/Kernel_parameters) and how to add `nvidia_drm.modeset=1` to your specific bootloader.
|
you can do this adding `nvidia_drm.modeset=1` to the end of
|
||||||
|
`/boot/loader/entries/arch.conf`. For people using
|
||||||
|
[grub](https://wiki.archlinux.org/title/GRUB) you can do this by adding
|
||||||
|
`nvidia_drm.modeset=1` to the end of `GRUB_CMDLINE_LINUX_DEFAULT=` in
|
||||||
|
`/etc/default/grub`, then run `# grub-mkconfig -o /boot/grub/grub.cfg` For
|
||||||
|
others check out
|
||||||
|
[kernel parameters](https://wiki.archlinux.org/title/Kernel_parameters) and how
|
||||||
|
to add `nvidia_drm.modeset=1` to your specific bootloader.
|
||||||
|
|
||||||
in `/etc/mkinitcpio.conf` add `nvidia nvidia_modeset nvidia_uvm nvidia_drm` to your `MODULES`
|
in `/etc/mkinitcpio.conf` add `nvidia nvidia_modeset nvidia_uvm nvidia_drm` to
|
||||||
|
your `MODULES`
|
||||||
|
|
||||||
run `# mkinitcpio --config /etc/mkinitcpio.conf --generate /boot/initramfs-custom.img` (make sure you have the `linux-headers` package installed first)
|
run
|
||||||
|
`# mkinitcpio --config /etc/mkinitcpio.conf --generate /boot/initramfs-custom.img`
|
||||||
|
(make sure you have the `linux-headers` package installed first)
|
||||||
|
|
||||||
add a new line to `/etc/modprobe.d/nvidia.conf` (make it if it does not exist) and add the line `options nvidia-drm modeset=1`
|
add a new line to `/etc/modprobe.d/nvidia.conf` (make it if it does not exist)
|
||||||
|
and add the line `options nvidia-drm modeset=1`
|
||||||
|
|
||||||
More information is available here:
|
More information is available here:
|
||||||
[https://wiki.archlinux.org/title/NVIDIA#DRM_kernel_mode_setting](https://wiki.archlinux.org/title/NVIDIA#DRM_kernel_mode_setting)
|
[https://wiki.archlinux.org/title/NVIDIA#DRM_kernel_mode_setting](https://wiki.archlinux.org/title/NVIDIA#DRM_kernel_mode_setting)
|
||||||
|
|
||||||
{{< hint >}}If your GPU is listed as supported by the `nvidia-open-dkms` driver,
|
{{< callout >}}
|
||||||
use that one instead. Note that on a laptop, it could cause problems with the suspended state when closing the lid, so you might be better off with `nvidia-dkms`.
|
|
||||||
{{< /hint >}}
|
|
||||||
|
|
||||||
{{< hint >}}To get multi monitor to work properly on a hybrid graphics device (a laptop with both an Intel and an Nvidia GPU), you will need to remove the `optimus-manager` package if installed (disabling the service does not work). You also need to change your BIOS settings from hybrid graphics to discrete graphics.
|
If your GPU is listed as supported by the `nvidia-open-dkms` driver, use that
|
||||||
{{< /hint >}}
|
one instead. Note that on a laptop, it could cause problems with the suspended
|
||||||
|
state when closing the lid, so you might be better off with `nvidia-dkms`.
|
||||||
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
|
{{< callout >}}
|
||||||
|
|
||||||
|
To get multi monitor to work properly on a hybrid graphics device (a laptop with
|
||||||
|
both an Intel and an Nvidia GPU), you will need to remove the `optimus-manager`
|
||||||
|
package if installed (disabling the service does not work). You also need to
|
||||||
|
change your BIOS settings from hybrid graphics to discrete graphics.
|
||||||
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
Export these variables in your hyprland config:
|
Export these variables in your hyprland config:
|
||||||
|
|
||||||
|
@ -41,11 +85,20 @@ env = __GLX_VENDOR_LIBRARY_NAME,nvidia
|
||||||
env = WLR_NO_HARDWARE_CURSORS,1
|
env = WLR_NO_HARDWARE_CURSORS,1
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< hint >}}If you encounter crashes in Firefox, remove the line `env = GBM_BACKEND,nvidia-drm`.
|
{{< callout >}}
|
||||||
{{< /hint >}}
|
|
||||||
|
|
||||||
{{< hint >}}If you face problems with Discord windows not displaying or screen sharing not working in Zoom, remove or comment the line `env = __GLX_VENDOR_LIBRARY_NAME,nvidia`.
|
If you encounter crashes in Firefox, remove the line
|
||||||
{{< /hint >}}
|
`env = GBM_BACKEND,nvidia-drm`.
|
||||||
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
|
{{< callout >}}
|
||||||
|
|
||||||
|
If you face problems with Discord windows not displaying or screen sharing not
|
||||||
|
working in Zoom, remove or comment the line
|
||||||
|
`env = __GLX_VENDOR_LIBRARY_NAME,nvidia`.
|
||||||
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
Install `qt5-wayland`, `qt5ct` and `libva`. Additionally
|
Install `qt5-wayland`, `qt5ct` and `libva`. Additionally
|
||||||
`libva-nvidia-driver-git` (AUR) to fix crashes in some Electron-based
|
`libva-nvidia-driver-git` (AUR) to fix crashes in some Electron-based
|
||||||
|
@ -74,20 +127,34 @@ options nvidia NVreg_RegistryDwords="PowerMizerEnable=0x1; PerfLevelSrc=0x2222;
|
||||||
Reboot your computer and it should be working.
|
Reboot your computer and it should be working.
|
||||||
|
|
||||||
If it does not, try:
|
If it does not, try:
|
||||||
- lowering your monitors' refresh rate, as this can stop the flickering altogether
|
|
||||||
- installing the 535xx versions of the drivers, as later (545, 550) can cause flickering with XWayland
|
- lowering your monitors' refresh rate, as this can stop the flickering
|
||||||
- these are available for arch via [the AUR here](https://aur.archlinux.org/packages?O=0&K=535xx)
|
altogether
|
||||||
- using the [Nouveau driver](https://wiki.archlinux.org/title/Nouveau) as mentioned above
|
- installing the 535xx versions of the drivers, as later (545, 550) can cause
|
||||||
|
flickering with XWayland
|
||||||
|
- these are available for arch via
|
||||||
|
[the AUR here](https://aur.archlinux.org/packages?O=0&K=535xx)
|
||||||
|
- using the [Nouveau driver](https://wiki.archlinux.org/title/Nouveau) as
|
||||||
|
mentioned above
|
||||||
|
|
||||||
## Fixing suspend/wakeup issues
|
## Fixing suspend/wakeup issues
|
||||||
|
|
||||||
Enable the services `nvidia-suspend.service`, `nvidia-hibernate.service` and `nvidia-resume.service`, they will be started by systemd when needed.
|
Enable the services `nvidia-suspend.service`, `nvidia-hibernate.service` and
|
||||||
|
`nvidia-resume.service`, they will be started by systemd when needed.
|
||||||
|
|
||||||
Add `nvidia.NVreg_PreserveVideoMemoryAllocations=1` to your kernel parameters if you don't have it already.
|
Add `nvidia.NVreg_PreserveVideoMemoryAllocations=1` to your kernel parameters if
|
||||||
|
you don't have it already.
|
||||||
|
|
||||||
{{< hint type=important >}} Suspend functions are currently broken on `nvidia-open-dkms` [due to a bug](https://github.com/NVIDIA/open-gpu-kernel-modules/issues/472), so make sure you're on `nvidia-dkms`. {{< /hint >}}
|
{{< callout >}}
|
||||||
|
|
||||||
|
Suspend functions are currently broken on `nvidia-open-dkms`
|
||||||
|
[due to a bug](https://github.com/NVIDIA/open-gpu-kernel-modules/issues/472), so
|
||||||
|
make sure you're on `nvidia-dkms`.
|
||||||
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
For Nix users, the equivalent of the above is
|
For Nix users, the equivalent of the above is
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
# configuration.nix
|
# configuration.nix
|
||||||
|
|
||||||
|
@ -97,5 +164,4 @@ hardware.nvidia.powerManagement.enable = true
|
||||||
|
|
||||||
# Making sure to use the proprietary drivers until the issue above is fixed upstream
|
# Making sure to use the proprietary drivers until the issue above is fixed upstream
|
||||||
hardware.nvidia.open = false
|
hardware.nvidia.open = false
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -1,26 +1,32 @@
|
||||||
This page documents a few advanced things about the Hyprland Plugin API.
|
---
|
||||||
|
weight: 4
|
||||||
|
title: Advanced
|
||||||
|
---
|
||||||
|
|
||||||
{{< toc >}}
|
This page documents a few advanced things about the Hyprland Plugin API.
|
||||||
|
|
||||||
## Using Function Hooks
|
## Using Function Hooks
|
||||||
|
|
||||||
{{< hint type=important >}}
|
{{< callout >}}
|
||||||
|
|
||||||
Function hooks are only available on `AMD64` (`x86_64`).
|
Function hooks are only available on `AMD64` (`x86_64`). Attempting to hook on
|
||||||
Attempting to hook on any other arch will make Hyprland simply ignore your hooking attempt.
|
any other arch will make Hyprland simply ignore your hooking attempt.
|
||||||
|
|
||||||
{{</ hint >}}
|
{{</ callout >}}
|
||||||
|
|
||||||
Function hooks are intimidating at first, but when used properly can be _extremely_ powerful.
|
Function hooks are intimidating at first, but when used properly can be
|
||||||
|
_extremely_ powerful.
|
||||||
|
|
||||||
Function hooks allow you to intercept any call to the function you hook.
|
Function hooks allow you to intercept any call to the function you hook.
|
||||||
|
|
||||||
Let's look at a simple example:
|
Let's look at a simple example:
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
void Events::listener_monitorFrame(void* owner, void* data)
|
void Events::listener_monitorFrame(void* owner, void* data)
|
||||||
```
|
```
|
||||||
will be the function we want to hook. `Events::` is a namespace, not a class, so this
|
|
||||||
is just a plain function.
|
will be the function we want to hook. `Events::` is a namespace, not a class, so
|
||||||
|
this is just a plain function.
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
// make a global instance of a hook class for this hook
|
// make a global instance of a hook class for this hook
|
||||||
|
@ -45,18 +51,21 @@ APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) {
|
||||||
|
|
||||||
// further stuff...
|
// further stuff...
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
We have just made a hook. Now, whenever Hyprland calls `Events::listener_monitorFrame`, our hook will be called instead!
|
We have just made a hook. Now, whenever Hyprland calls
|
||||||
|
`Events::listener_monitorFrame`, our hook will be called instead!
|
||||||
|
|
||||||
This way, you can run code before / after the function, modify the inputs or results, or even block the function from executing.
|
This way, you can run code before / after the function, modify the inputs or
|
||||||
|
results, or even block the function from executing.
|
||||||
|
|
||||||
`CFunctionHook` can also be unhooked whenever you please. Just run `unhook()`. It can be rehooked later by calling `hook()` again.
|
`CFunctionHook` can also be unhooked whenever you please. Just run `unhook()`.
|
||||||
|
It can be rehooked later by calling `hook()` again.
|
||||||
|
|
||||||
### Member functions
|
### Member functions
|
||||||
|
|
||||||
For members, e.g. `CCompositor::focusWindow(CWindow*, wlr_surface*)` you will also need to add the thisptr argument to your hook:
|
For members, e.g. `CCompositor::focusWindow(CWindow*, wlr_surface*)` you will
|
||||||
|
also need to add the thisptr argument to your hook:
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
typedef void (*origFocusWindow)(void*, CWindow*, wlr_surface*);
|
typedef void (*origFocusWindow)(void*, CWindow*, wlr_surface*);
|
||||||
|
@ -79,20 +88,28 @@ APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< hint type=warning >}}
|
{{< callout type=warning >}}
|
||||||
Please note method lookups are slow and should not be used often. The entries _will not_ change during runtime, so it's a good idea
|
|
||||||
to make the lookups `static`.
|
Please note method lookups are slow and should not be used often. The entries
|
||||||
{{</ hint >}}
|
_will not_ change during runtime, so it's a good idea to make the lookups
|
||||||
|
`static`.
|
||||||
|
|
||||||
|
{{</ callout >}}
|
||||||
|
|
||||||
### Why use findFunctionsByName?
|
### Why use findFunctionsByName?
|
||||||
|
|
||||||
Why use that instead of e.g. `&CCompositor::focusWindow`? Two reasons:
|
Why use that instead of e.g. `&CCompositor::focusWindow`? Two reasons:
|
||||||
|
|
||||||
1 - less breakage. Whenever someone updates hyprland, that address might become invalid. findFunctionsByName is more resilient. As long as the function exists, it will be found.
|
1 - less breakage. Whenever someone updates hyprland, that address might become
|
||||||
|
invalid. findFunctionsByName is more resilient. As long as the function exists,
|
||||||
|
it will be found.
|
||||||
|
|
||||||
2 - error handling. The method array contains, besides the address, the signatures. You can verify those to make 100% sure you got the right function, or throw an error if it was not found.
|
2 - error handling. The method array contains, besides the address, the
|
||||||
|
signatures. You can verify those to make 100% sure you got the right function,
|
||||||
|
or throw an error if it was not found.
|
||||||
|
|
||||||
## Using the config
|
## Using the config
|
||||||
|
|
||||||
You can register config values in the `PLUGIN_INIT` function:
|
You can register config values in the `PLUGIN_INIT` function:
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
|
@ -105,17 +122,22 @@ APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Plugin variables ***must*** be in the `plugins:` category. Further categories are up to you. It's generally
|
Plugin variables _**must**_ be in the `plugins:` category. Further categories
|
||||||
a good idea to group all variables from your plugin in a subcategory with the plugin name, e.g. `plugins:myPlugin:variable1`.
|
are up to you. It's generally a good idea to group all variables from your
|
||||||
|
plugin in a subcategory with the plugin name, e.g. `plugins:myPlugin:variable1`.
|
||||||
|
|
||||||
For retrieving the values, call `HyprlandAPI::getConfigValue`.
|
For retrieving the values, call `HyprlandAPI::getConfigValue`.
|
||||||
|
|
||||||
Please remember that the pointer to your config value will never change after `PLUGIN_INIT`, so to greatly optimize performance, make it static:
|
Please remember that the pointer to your config value will never change after
|
||||||
|
`PLUGIN_INIT`, so to greatly optimize performance, make it static:
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
static auto* const MYVAR = &HyprlandAPI::getConfigValue(PHANDLE, "plugin:myPlugin:variable1")->intValue;
|
static auto* const MYVAR = &HyprlandAPI::getConfigValue(PHANDLE, "plugin:myPlugin:variable1")->intValue;
|
||||||
```
|
```
|
||||||
|
|
||||||
## Further
|
## Further
|
||||||
Read the API at `src/plugins/PluginAPI.hpp`, check out the [official plugins](https://github.com/hyprwm/hyprland-plugins).
|
|
||||||
|
Read the API at `src/plugins/PluginAPI.hpp`, check out the
|
||||||
|
[official plugins](https://github.com/hyprwm/hyprland-plugins).
|
||||||
|
|
||||||
And, most importantly, have fun!
|
And, most importantly, have fun!
|
|
@ -1,12 +1,17 @@
|
||||||
|
---
|
||||||
|
weight: 3
|
||||||
|
title: Event list
|
||||||
|
---
|
||||||
|
|
||||||
These are all the events that can be listened to using Event Hooks.
|
These are all the events that can be listened to using Event Hooks.
|
||||||
|
|
||||||
## Complete list
|
## Complete list
|
||||||
|
|
||||||
{{< hint type=note >}}
|
{{< callout type=info >}}
|
||||||
M: means std::unordered_map<std::string, std::any>
|
|
||||||
following props are members.
|
M: means std::unordered_map<std::string, std::any> following props are members.
|
||||||
{{</ hint >}}
|
|
||||||
|
{{</ callout >}}
|
||||||
|
|
||||||
| name | description | argument(s) | cancellable |
|
| name | description | argument(s) | cancellable |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
|
|
|
@ -1,19 +1,24 @@
|
||||||
This page documents the basics of making your own Hyprland plugin from scratch.
|
---
|
||||||
|
weight: 1
|
||||||
|
title: Getting started
|
||||||
|
---
|
||||||
|
|
||||||
{{< toc >}}
|
This page documents the basics of making your own Hyprland plugin from scratch.
|
||||||
|
|
||||||
## How do plugins work?
|
## How do plugins work?
|
||||||
|
|
||||||
Plugins are basically dynamic objects loaded by Hyprland. They have
|
Plugins are basically dynamic objects loaded by Hyprland. They have (almost)
|
||||||
(almost) full access to every part of Hyprland's internal process, and as such,
|
full access to every part of Hyprland's internal process, and as such, can
|
||||||
can modify and change way more than a script.
|
modify and change way more than a script.
|
||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
In order to write a Hyprland plugin, you will need:
|
In order to write a Hyprland plugin, you will need:
|
||||||
- Knowledge of C++
|
|
||||||
- The ability to read
|
- Knowledge of C++
|
||||||
- A rough understanding of the Hyprland internals (you _can_ learn this alongside your development work)
|
- The ability to read
|
||||||
|
- A rough understanding of the Hyprland internals (you _can_ learn this
|
||||||
|
alongside your development work)
|
||||||
|
|
||||||
## Making your first plugin
|
## Making your first plugin
|
||||||
|
|
||||||
|
@ -21,45 +26,56 @@ Open your favorite code editor.
|
||||||
|
|
||||||
Make a new directory, in this example we will use `MyPlugin`.
|
Make a new directory, in this example we will use `MyPlugin`.
|
||||||
|
|
||||||
***→ If you have the Hyprland headers***
|
_**→ If you have the Hyprland headers**_
|
||||||
|
|
||||||
If you install with `make install`, you should have the headers. In that case, no further action
|
If you install with `make install`, you should have the headers. In that case,
|
||||||
is required.
|
no further action is required.
|
||||||
|
|
||||||
***→ If you don't have the Hyprland source cloned***
|
_**→ If you don't have the Hyprland source cloned**_
|
||||||
|
|
||||||
Clone the Hyprland source code to a subdirectory, in our example `MyPlugin/Hyprland`.
|
Clone the Hyprland source code to a subdirectory, in our example
|
||||||
Run `cd Hyprland && make all && sudo make installheaders && cd ..`.
|
`MyPlugin/Hyprland`. Run
|
||||||
|
`cd Hyprland && make all && sudo make installheaders && cd ..`.
|
||||||
|
|
||||||
Now that you have the Hyprland sources set up, you can either start from scratch if you know how,
|
Now that you have the Hyprland sources set up, you can either start from scratch
|
||||||
or take a look at some simple plugins in the [official plugins repo](https://github.com/hyprwm/hyprland-plugins)
|
if you know how, or take a look at some simple plugins in the
|
||||||
like for example `csgo-vulkan-fix` or `hyprwinwrap`.
|
[official plugins repo](https://github.com/hyprwm/hyprland-plugins) like for
|
||||||
|
example `csgo-vulkan-fix` or `hyprwinwrap`.
|
||||||
|
|
||||||
### The basic parts of the plugin
|
### The basic parts of the plugin
|
||||||
|
|
||||||
Starting from the top, you will have to include the plugin API:
|
Starting from the top, you will have to include the plugin API:
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
#include <hyprland/src/plugins/PluginAPI.hpp>
|
#include <hyprland/src/plugins/PluginAPI.hpp>
|
||||||
```
|
```
|
||||||
|
|
||||||
Feel free to take a look at the header. It contains a bunch of useful comments.
|
Feel free to take a look at the header. It contains a bunch of useful comments.
|
||||||
|
|
||||||
We also create a global pointer for our handle:
|
We also create a global pointer for our handle:
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
inline HANDLE PHANDLE = nullptr;
|
inline HANDLE PHANDLE = nullptr;
|
||||||
```
|
```
|
||||||
we will initialize it in our plugin init function later. It serves as an internal "ID" of our plugin.
|
|
||||||
|
we will initialize it in our plugin init function later. It serves as an
|
||||||
|
internal "ID" of our plugin.
|
||||||
|
|
||||||
Then, there is the API version method:
|
Then, there is the API version method:
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
// Do NOT change this function.
|
// Do NOT change this function.
|
||||||
APICALL EXPORT std::string PLUGIN_API_VERSION() {
|
APICALL EXPORT std::string PLUGIN_API_VERSION() {
|
||||||
return HYPRLAND_API_VERSION;
|
return HYPRLAND_API_VERSION;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
This method will tell Hyprland what API version was used to compile this plugin. Do NOT change it.
|
|
||||||
It will be set automatically when compiling to the correct value.
|
This method will tell Hyprland what API version was used to compile this plugin.
|
||||||
|
Do NOT change it. It will be set automatically when compiling to the correct
|
||||||
|
value.
|
||||||
|
|
||||||
Skipping over some example handlers, we have two important functions:
|
Skipping over some example handlers, we have two important functions:
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) {
|
APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) {
|
||||||
PHANDLE = handle;
|
PHANDLE = handle;
|
||||||
|
@ -73,30 +89,36 @@ APICALL EXPORT void PLUGIN_EXIT() {
|
||||||
// ...
|
// ...
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
The first method will be called when your plugin gets initialized (loaded)
|
The first method will be called when your plugin gets initialized (loaded)
|
||||||
|
|
||||||
You can, and probably should, initialize everything you may want to use in there.
|
You can, and probably should, initialize everything you may want to use in
|
||||||
|
there.
|
||||||
|
|
||||||
It's worth noting that adding config variables is _only_ allowed in this function.
|
It's worth noting that adding config variables is _only_ allowed in this
|
||||||
|
function.
|
||||||
|
|
||||||
The plugin init function is _required_.
|
The plugin init function is _required_.
|
||||||
|
|
||||||
The return value should be the `PLUGIN_DESCRIPTION_INFO` struct which lets Hyprland know about your
|
The return value should be the `PLUGIN_DESCRIPTION_INFO` struct which lets
|
||||||
plugin's name, description, author and version.
|
Hyprland know about your plugin's name, description, author and version.
|
||||||
|
|
||||||
Make sure to store your `HANDLE` as it's going to be required for API calls.
|
Make sure to store your `HANDLE` as it's going to be required for API calls.
|
||||||
|
|
||||||
|
The second method is not required, and will be called when your plugin is being
|
||||||
|
unloaded by the user.
|
||||||
|
|
||||||
|
If your plugin is being unloaded because it committed a fault, this function
|
||||||
|
will _not_ be called.
|
||||||
|
|
||||||
The second method is not required, and will be called when your plugin is being unloaded by the user.
|
You do not have to unload layouts, remove config options, remove dispatchers,
|
||||||
|
window decorations or unregister hooks in the exit method. Hyprland will do that
|
||||||
If your plugin is being unloaded because it committed a fault, this function will _not_ be called.
|
for you.
|
||||||
|
|
||||||
You do not have to unload layouts, remove config options, remove dispatchers, window decorations or unregister hooks
|
|
||||||
in the exit method. Hyprland will do that for you.
|
|
||||||
|
|
||||||
### Setting up a development environment
|
### Setting up a development environment
|
||||||
In order to make your life easier, it's a good idea to work on a nested debug Hyprland session.
|
|
||||||
|
In order to make your life easier, it's a good idea to work on a nested debug
|
||||||
|
Hyprland session.
|
||||||
|
|
||||||
Enter your Hyprland directory and run `make debug`
|
Enter your Hyprland directory and run `make debug`
|
||||||
|
|
||||||
|
@ -104,22 +126,28 @@ Make a copy of your config in `~/.config/hypr` called `hyprlandd.conf`.
|
||||||
|
|
||||||
Remove _all_ `exec=` or `exec-once=` directives from your config.
|
Remove _all_ `exec=` or `exec-once=` directives from your config.
|
||||||
|
|
||||||
*recommended*: Change the modifier for your keybinds (e.g. `SUPER` -> `ALT`)
|
_recommended_: Change the modifier for your keybinds (e.g. `SUPER` -> `ALT`)
|
||||||
|
|
||||||
Add this line:
|
Add this line:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
monitor = WL-1, 1920x1080, 0x0, 1
|
monitor = WL-1, 1920x1080, 0x0, 1
|
||||||
```
|
```
|
||||||
|
|
||||||
Launch the output `Hyprland` binary in `./build/` _when logged into a Hyprland session_.
|
Launch the output `Hyprland` binary in `./build/` _when logged into a Hyprland
|
||||||
|
session_.
|
||||||
|
|
||||||
A new window should open with Hyprland running inside of it. You can now run your plugin in the nested session without worrying
|
A new window should open with Hyprland running inside of it. You can now run
|
||||||
about nuking your actual session, and also being able to debug it easily.
|
your plugin in the nested session without worrying about nuking your actual
|
||||||
|
session, and also being able to debug it easily.
|
||||||
|
|
||||||
See more info in [the Contributing Section](https://wiki.hyprland.org/Contributing-and-Debugging/#nesting-hyprland)
|
See more info in
|
||||||
|
[the Contributing Section](https://wiki.hyprland.org/Contributing-and-Debugging/#nesting-hyprland)
|
||||||
|
|
||||||
### More advanced stuff
|
### More advanced stuff
|
||||||
|
|
||||||
Take a look at the `src/plugins/PluginAPI.hpp` header. It has comments to every method to let you know what it is.
|
Take a look at the `src/plugins/PluginAPI.hpp` header. It has comments to every
|
||||||
|
method to let you know what it is.
|
||||||
|
|
||||||
For more explanation on a few concepts, see [Advanced](../Advanced) and [Plugin Guidelines](../Plugin-Guidelines)
|
For more explanation on a few concepts, see [Advanced](../advanced) and
|
||||||
|
[Plugin Guidelines](../plugin-guidelines)
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
|
---
|
||||||
|
weight: 2
|
||||||
|
title: Plugin guidelines
|
||||||
|
---
|
||||||
|
|
||||||
This page documents the recommended guidelines for making a stable and neat
|
This page documents the recommended guidelines for making a stable and neat
|
||||||
plugin.
|
plugin.
|
||||||
|
|
||||||
{{< toc >}}
|
|
||||||
|
|
||||||
## Making your plugin compatible with hyprpm
|
## Making your plugin compatible with hyprpm
|
||||||
|
|
||||||
In order for your plugin to be installable by `hyprpm`, you need a manifest.
|
In order for your plugin to be installable by `hyprpm`, you need a manifest.
|
||||||
|
|
4
pages/Plugins/Development/_index.md
Normal file
4
pages/Plugins/Development/_index.md
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
weight: 2
|
||||||
|
title: Development
|
||||||
|
---
|
|
@ -1,10 +1,14 @@
|
||||||
This page will tell you how to use plugins.
|
---
|
||||||
|
weight: 1
|
||||||
|
title: Using plugins
|
||||||
|
---
|
||||||
|
|
||||||
{{< toc >}}
|
This page will tell you how to use plugins.
|
||||||
|
|
||||||
## Disclaimers
|
## Disclaimers
|
||||||
|
|
||||||
{{< hint type=warning >}}
|
{{< callout type=warning >}}
|
||||||
|
|
||||||
Plugins are written in C++ and will run as a part of Hyprland.
|
Plugins are written in C++ and will run as a part of Hyprland.
|
||||||
|
|
||||||
Make sure to _always_ read the source code of the plugins you are going to use
|
Make sure to _always_ read the source code of the plugins you are going to use
|
||||||
|
@ -12,31 +16,35 @@ and to trust the source.
|
||||||
|
|
||||||
Writing a plugin to wipe your computer is easy.
|
Writing a plugin to wipe your computer is easy.
|
||||||
|
|
||||||
***Never*** trust random `.so` files you receive from other people.
|
_**Never**_ trust random `.so` files you receive from other people.
|
||||||
{{< /hint >}}
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
## Getting plugins
|
## Getting plugins
|
||||||
|
|
||||||
Plugins come as _shared objects_, aka. `.so` files.
|
Plugins come as _shared objects_, aka. `.so` files.
|
||||||
|
|
||||||
Hyprland does not have any "default" plugins, so any plugin you may want
|
Hyprland does not have any "default" plugins, so any plugin you may want to use
|
||||||
to use you will have to find yourself.
|
you will have to find yourself.
|
||||||
|
|
||||||
## Installing / Using plugins
|
## Installing / Using plugins
|
||||||
|
|
||||||
It is _highly_ recommended you use the Hyprland Plugin Manager, `hyprpm`. For manual instructions, see a bit below.
|
It is _highly_ recommended you use the Hyprland Plugin Manager, `hyprpm`. For
|
||||||
|
manual instructions, see a bit below.
|
||||||
|
|
||||||
### hyprpm
|
### hyprpm
|
||||||
|
|
||||||
Make sure you have the required dependencies: `cpio`, `meson`, `cmake`.
|
Make sure you have the required dependencies: `cpio`, `meson`, `cmake`.
|
||||||
|
|
||||||
Find a repository you want to install plugins from. As an example, we will use [hyprland-plugins](https://github.com/hyprwm/hyprland-plugins).
|
Find a repository you want to install plugins from. As an example, we will use
|
||||||
|
[hyprland-plugins](https://github.com/hyprwm/hyprland-plugins).
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
hyprpm add https://github.com/hyprwm/hyprland-plugins
|
hyprpm add https://github.com/hyprwm/hyprland-plugins
|
||||||
```
|
```
|
||||||
|
|
||||||
once it finishes, you can list your installed plugins with
|
once it finishes, you can list your installed plugins with
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
hyprpm list
|
hyprpm list
|
||||||
```
|
```
|
||||||
|
@ -45,8 +53,9 @@ and enable or disable them via `hyprpm enable name` and `hyprpm disable name`.
|
||||||
|
|
||||||
In order for the plugins to be loaded into hyprland, run `hyprpm reload`.
|
In order for the plugins to be loaded into hyprland, run `hyprpm reload`.
|
||||||
|
|
||||||
You can add `exec-once = hyprpm reload -n` to your hyprland config to have plugins loaded at startup.
|
You can add `exec-once = hyprpm reload -n` to your hyprland config to have
|
||||||
`-n` will make hyprpm send a notification if anything goes wrong (e.g. update needed)
|
plugins loaded at startup. `-n` will make hyprpm send a notification if anything
|
||||||
|
goes wrong (e.g. update needed)
|
||||||
|
|
||||||
In order update your plugins, run `hyprpm update`.
|
In order update your plugins, run `hyprpm update`.
|
||||||
|
|
||||||
|
@ -56,23 +65,28 @@ For all options of `hyprpm`, run `hyprpm -h`.
|
||||||
|
|
||||||
Different plugins may have different build methods, refer to their instructions.
|
Different plugins may have different build methods, refer to their instructions.
|
||||||
|
|
||||||
If you don't have hyprland headers installed, clone hyprland, checkout to your version,
|
If you don't have hyprland headers installed, clone hyprland, checkout to your
|
||||||
build hyprland, and run `sudo make installheaders`. Then build your plugin(s).
|
version, build hyprland, and run `sudo make installheaders`. Then build your
|
||||||
|
plugin(s).
|
||||||
|
|
||||||
To load plugins manually, use `hyprctl plugin load path` !NOTE: Path HAS TO BE ABSOLUTE!
|
To load plugins manually, use `hyprctl plugin load path` !NOTE: Path HAS TO BE
|
||||||
|
ABSOLUTE!
|
||||||
|
|
||||||
You can unload plugins with `hyprctl plugin unload path`.
|
You can unload plugins with `hyprctl plugin unload path`.
|
||||||
|
|
||||||
## FAQ About Plugins
|
## FAQ About Plugins
|
||||||
|
|
||||||
### My Hyprland crashes!
|
### My Hyprland crashes!
|
||||||
|
|
||||||
Oh no. Oopsie. Usually means a plugin is broken. `hyprpm disable` it.
|
Oh no. Oopsie. Usually means a plugin is broken. `hyprpm disable` it.
|
||||||
|
|
||||||
### How do I list my loaded plugins?
|
### How do I list my loaded plugins?
|
||||||
|
|
||||||
`hyprctl plugin list`
|
`hyprctl plugin list`
|
||||||
|
|
||||||
### How do I make my own plugin?
|
### How do I make my own plugin?
|
||||||
See [here](../Development/Getting-Started).
|
|
||||||
|
See [here](../development/getting-started).
|
||||||
|
|
||||||
### Where do I find plugins?
|
### Where do I find plugins?
|
||||||
|
|
||||||
|
@ -81,10 +95,12 @@ You can also see a list at [awesome-hyprland](https://github.com/hyprland-commun
|
||||||
Lastly, you can try searching around github for the `"hyprland plugin"` keyword.
|
Lastly, you can try searching around github for the `"hyprland plugin"` keyword.
|
||||||
|
|
||||||
### Are plugins safe?
|
### Are plugins safe?
|
||||||
As long as you read the source code of your plugin(s) and can see there's nothing bad going on,
|
|
||||||
they will be safe.
|
As long as you read the source code of your plugin(s) and can see there's
|
||||||
|
nothing bad going on, they will be safe.
|
||||||
|
|
||||||
### Do plugins decrease Hyprland's stability?
|
### Do plugins decrease Hyprland's stability?
|
||||||
Hyprland employs a few tactics to unload plugins that crash. However, those tactics may not
|
|
||||||
always work. In general, as long as the plugin is well-designed, it should not affect the
|
Hyprland employs a few tactics to unload plugins that crash. However, those
|
||||||
stability of Hyprland.
|
tactics may not always work. In general, as long as the plugin is well-designed,
|
||||||
|
it should not affect the stability of Hyprland.
|
||||||
|
|
4
pages/Plugins/_index.md
Normal file
4
pages/Plugins/_index.md
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
weight: 6
|
||||||
|
title: Plugins
|
||||||
|
---
|
|
@ -1,19 +1,25 @@
|
||||||
|
---
|
||||||
|
weight: 7
|
||||||
|
title: App clients
|
||||||
|
---
|
||||||
|
|
||||||
Some clients are known for being a massive pain under Wayland. Here are great
|
Some clients are known for being a massive pain under Wayland. Here are great
|
||||||
replacements for them:
|
replacements for them:
|
||||||
|
|
||||||
## Discord
|
## Discord
|
||||||
|
|
||||||
- [WebCord](https://github.com/SpacingBat3/WebCord) is a Discord client based on
|
- [WebCord](https://github.com/SpacingBat3/WebCord) is a Discord client based on
|
||||||
the latest Electron, with support for Wayland Ozone platform, as well as
|
the latest Electron, with support for Wayland Ozone platform, as well as
|
||||||
PipeWire screensharing. It has tons of great features and tries not to infringe
|
PipeWire screensharing. It has tons of great features and tries not to
|
||||||
on the Discord ToS.
|
infringe on the Discord ToS.
|
||||||
|
|
||||||
- [gtkcord4](https://github.com/diamondburned/gtkcord4) is a Discord client written in GTK4.
|
- [gtkcord4](https://github.com/diamondburned/gtkcord4) is a Discord client
|
||||||
While it does infringe on Discord's ToS, it's relatively safe and doesn't rely on any webview technologies.
|
written in GTK4. While it does infringe on Discord's ToS, it's relatively safe
|
||||||
|
and doesn't rely on any webview technologies.
|
||||||
|
|
||||||
## Matrix/Element
|
## Matrix/Element
|
||||||
|
|
||||||
[Fractal](https://wiki.gnome.org/Apps/Fractal) is a Matrix client written in GTK4.
|
[Fractal](https://wiki.gnome.org/Apps/Fractal) is a Matrix client written in
|
||||||
Much like Discord, Element is known to have a lot of problems as a result of being
|
GTK4. Much like Discord, Element is known to have a lot of problems as a result
|
||||||
based on Electron. Fractal currently doesn't support VoIP calling, but all other features
|
of being based on Electron. Fractal currently doesn't support VoIP calling, but
|
||||||
are supported, including E2EE and cross-device verification.
|
all other features are supported, including E2EE and cross-device verification.
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
weight: 6
|
||||||
|
title: App launchers
|
||||||
|
---
|
||||||
|
|
||||||
## Wofi
|
## Wofi
|
||||||
|
|
||||||
Wofi is a GTK-based customizable launcher for wayland.
|
Wofi is a GTK-based customizable launcher for wayland.
|
||||||
|
@ -5,8 +10,7 @@ Wofi is a GTK-based customizable launcher for wayland.
|
||||||
|
|
||||||
## Rofi (Wayland fork)
|
## Rofi (Wayland fork)
|
||||||
|
|
||||||
Rofi, but with Wayland support.
|
Rofi, but with Wayland support. [GitHub](https://github.com/lbonn/rofi).
|
||||||
[GitHub](https://github.com/lbonn/rofi).
|
|
||||||
|
|
||||||
## bemenu
|
## bemenu
|
||||||
|
|
||||||
|
@ -15,18 +19,21 @@ bemenu is a Wayland-native replacement for dmenu.
|
||||||
|
|
||||||
## fuzzel
|
## fuzzel
|
||||||
|
|
||||||
Fuzzel is an application launcher for wlroots based Wayland compositors, similar to rofi's `drun` mode.
|
Fuzzel is an application launcher for wlroots based Wayland compositors, similar
|
||||||
[Codeberg](https://codeberg.org/dnkl/fuzzel)
|
to rofi's `drun` mode. [Codeberg](https://codeberg.org/dnkl/fuzzel)
|
||||||
|
|
||||||
## tofi
|
## tofi
|
||||||
|
|
||||||
tofi is an extremely fast and simple yet highly customizable dmenu / rofi replacement for wlroots-based Wayland compositors. When configured correctly, tofi can get on screen within a single frame.
|
tofi is an extremely fast and simple yet highly customizable dmenu / rofi
|
||||||
|
replacement for wlroots-based Wayland compositors. When configured correctly,
|
||||||
|
tofi can get on screen within a single frame.
|
||||||
[Github](https://github.com/philj56/tofi)
|
[Github](https://github.com/philj56/tofi)
|
||||||
|
|
||||||
For a more comprehensive list of launchers, check
|
For a more comprehensive list of launchers, check
|
||||||
[awesome-hyprland](https://github.com/hyprland-community/awesome-hyprland#runners-menus-and-application-launchers).
|
[awesome-hyprland](https://github.com/hyprland-community/awesome-hyprland#runners-menus-and-application-launchers).
|
||||||
|
|
||||||
## Emacs
|
## Emacs
|
||||||
|
|
||||||
If you are already running an emacs server you can use Emacs.
|
If you are already running an emacs server you can use Emacs.
|
||||||
|
|
||||||
For the config you can check out [DistroTube's Configuring Emacs](https://gitlab.com/dwt1/configuring-emacs/-/blob/main/07-the-final-touches/scripts/app-launchers.el?ref_type=heads) or [Sebastian Wae's `app-launcher`](https://github.com/SebastienWae/app-launcher) repositories.
|
For the config you can check out [DistroTube's Configuring Emacs](https://gitlab.com/dwt1/configuring-emacs/-/blob/main/07-the-final-touches/scripts/app-launchers.el?ref_type=heads) or [Sebastian Wae's `app-launcher`](https://github.com/SebastienWae/app-launcher) repositories.
|
||||||
|
@ -36,4 +43,3 @@ For the config you can check out [DistroTube's Configuring Emacs](https://gitlab
|
||||||
Anyrun is a wayland native krunner-like runner, made with customizability in
|
Anyrun is a wayland native krunner-like runner, made with customizability in
|
||||||
mind. It is modular and extensible through plugins. It can be used as an app launcher with its Applications Plugin.
|
mind. It is modular and extensible through plugins. It can be used as an app launcher with its Applications Plugin.
|
||||||
[GitHub](https://github.com/Kirottu/anyrun)
|
[GitHub](https://github.com/Kirottu/anyrun)
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,27 @@
|
||||||
|
---
|
||||||
|
weight: 9
|
||||||
|
title: Clipboard managers
|
||||||
|
---
|
||||||
|
|
||||||
_Starting method:_ manual (`exec-once`)
|
_Starting method:_ manual (`exec-once`)
|
||||||
|
|
||||||
Clipboard Managers are useful tools that allows one to manage their copied items, be-it texts or images.
|
Clipboard Managers are useful tools that allows one to manage their copied
|
||||||
|
items, be-it texts or images.
|
||||||
|
|
||||||
Some common ones used are `copyq`, `clipman` and `cliphist`.
|
Some common ones used are `copyq`, `clipman` and `cliphist`.
|
||||||
|
|
||||||
`clipman` - Utilizes Wayland with `wl-clipboard` support and stores text only [Github](https://github.com/chmouel/clipman)
|
`clipman` - Utilizes Wayland with `wl-clipboard` support and stores text only
|
||||||
|
[Github](https://github.com/chmouel/clipman)
|
||||||
|
|
||||||
`cliphist` - Utilizes Wayland with `wl-clipboard` and can store both images and text [Github](https://github.com/sentriz/cliphist)
|
`cliphist` - Utilizes Wayland with `wl-clipboard` and can store both images and
|
||||||
|
text [Github](https://github.com/sentriz/cliphist)
|
||||||
|
|
||||||
`wl-clip-persist` - When we copy something on Wayland (using wl-clipboard) and close the application we copied from, the copied data disappears from the clipboard and we cannot paste it anymore. So to fix this problem we can use a program called as `wl-clip-persist` which will preserve the data in the clipboard after the application is closed. [Github](https://github.com/Linus789/wl-clip-persist)
|
`wl-clip-persist` - When we copy something on Wayland (using wl-clipboard) and
|
||||||
|
close the application we copied from, the copied data disappears from the
|
||||||
|
clipboard and we cannot paste it anymore. So to fix this problem we can use a
|
||||||
|
program called as `wl-clip-persist` which will preserve the data in the
|
||||||
|
clipboard after the application is closed.
|
||||||
|
[Github](https://github.com/Linus789/wl-clip-persist)
|
||||||
|
|
||||||
## copyq
|
## copyq
|
||||||
|
|
||||||
|
@ -17,7 +30,9 @@ Start by adding the following lines to your `~/.config/hypr/hyprland.conf`
|
||||||
```ini
|
```ini
|
||||||
exec-once = copyq --start-server
|
exec-once = copyq --start-server
|
||||||
```
|
```
|
||||||
If your `copyq`'s main window cannot close/hide properly, try to enable its "Hide main window" option in Layout configuration tab in Preferences dialog.
|
|
||||||
|
If your `copyq`'s main window cannot close/hide properly, try to enable its
|
||||||
|
"Hide main window" option in Layout configuration tab in Preferences dialog.
|
||||||
|
|
||||||
## cliphist
|
## cliphist
|
||||||
|
|
||||||
|
@ -28,24 +43,30 @@ exec-once = wl-paste --type text --watch cliphist store #Stores only text data
|
||||||
|
|
||||||
exec-once = wl-paste --type image --watch cliphist store #Stores only image data
|
exec-once = wl-paste --type image --watch cliphist store #Stores only image data
|
||||||
```
|
```
|
||||||
|
|
||||||
Do note that any of the above lines can be disabled based on your needs
|
Do note that any of the above lines can be disabled based on your needs
|
||||||
|
|
||||||
To bind `cliphist` to a hotkey and display it under `rofi` or `dmenu` or `wofi`, again head over to `~/.config/hypr/hyprland.conf`
|
To bind `cliphist` to a hotkey and display it under `rofi` or `dmenu` or `wofi`,
|
||||||
|
again head over to `~/.config/hypr/hyprland.conf`
|
||||||
|
|
||||||
### For `rofi` users
|
### For `rofi` users
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
bind = SUPER, V, exec, cliphist list | rofi -dmenu | cliphist decode | wl-copy
|
bind = SUPER, V, exec, cliphist list | rofi -dmenu | cliphist decode | wl-copy
|
||||||
```
|
```
|
||||||
|
|
||||||
### For `dmenu` users
|
### For `dmenu` users
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
bind = SUPER, V, exec, cliphist list | dmenu | cliphist decode | wl-copy
|
bind = SUPER, V, exec, cliphist list | dmenu | cliphist decode | wl-copy
|
||||||
```
|
```
|
||||||
|
|
||||||
### For `wofi` users
|
### For `wofi` users
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
bind = SUPER, V, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy
|
bind = SUPER, V, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy
|
||||||
```
|
```
|
||||||
|
|
||||||
The binds mention above correspond to SUPER+V to access the clipboard history
|
The binds mention above correspond to SUPER+V to access the clipboard history
|
||||||
|
|
||||||
For further info, please refer to the repository mentioned above
|
For further info, please refer to the repository mentioned above
|
||||||
|
@ -57,30 +78,35 @@ Start by adding the following line to your `~/.config/hypr/hyprland.conf`
|
||||||
```ini
|
```ini
|
||||||
exec-once = wl-paste -t text --watch clipman store --no-persist
|
exec-once = wl-paste -t text --watch clipman store --no-persist
|
||||||
```
|
```
|
||||||
|
|
||||||
If you wish to use it as a primary clipboard manager, use this instead
|
If you wish to use it as a primary clipboard manager, use this instead
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
exec-once = wl-paste -p -t text --watch clipman store -P --histpath="~/.local/share/clipman-primary.json"
|
exec-once = wl-paste -p -t text --watch clipman store -P --histpath="~/.local/share/clipman-primary.json"
|
||||||
```
|
```
|
||||||
And also make sure to create a file named `clipman-primary.json` in `~/.local/share/clipman-primary.json`
|
|
||||||
|
And also make sure to create a file named `clipman-primary.json` in
|
||||||
|
`~/.local/share/clipman-primary.json`
|
||||||
|
|
||||||
Now bind the `clipman` like this:
|
Now bind the `clipman` like this:
|
||||||
|
|
||||||
### For `rofi` users
|
### For `rofi` users
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
bind = SUPER, V, exec, clipman pick -t rofi
|
bind = SUPER, V, exec, clipman pick -t rofi
|
||||||
```
|
```
|
||||||
|
|
||||||
### For `dmenu` users
|
### For `dmenu` users
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
bind = SUPER, V, exec, clipman pick -t dmenu
|
bind = SUPER, V, exec, clipman pick -t dmenu
|
||||||
```
|
```
|
||||||
|
|
||||||
### For `wofi` users
|
### For `wofi` users
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
bind = SUPER, V, exec, clipman pick -t wofi
|
bind = SUPER, V, exec, clipman pick -t wofi
|
||||||
```
|
```
|
||||||
So on and so forth. For further information, please refer to the repository mentioned above
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
So on and so forth. For further information, please refer to the repository
|
||||||
|
mentioned above
|
||||||
|
|
|
@ -1,8 +1,15 @@
|
||||||
Color pickers are useful for quickly grabbing a color of _something_ on your screen.
|
---
|
||||||
|
weight: 8
|
||||||
|
title: Color pickers
|
||||||
|
---
|
||||||
|
|
||||||
It's preferred using _hyprwm_'s own solution, which, so far, seems to be the only one that
|
Color pickers are useful for quickly grabbing a color of _something_ on your
|
||||||
doesn't suck.
|
screen.
|
||||||
|
|
||||||
|
It's preferred using _hyrpwm_'s own solution, which, so far, seems to be the
|
||||||
|
only one that doesn't suck.
|
||||||
|
|
||||||
## Hyprpicker
|
## Hyprpicker
|
||||||
|
|
||||||
Dead simple to use. Launch, click, and you're done. [GitHub](https://github.com/hyprwm/hyprpicker)
|
Dead simple to use. Launch, click, and you're done.
|
||||||
|
[GitHub](https://github.com/hyprwm/hyprpicker)
|
||||||
|
|
|
@ -15,7 +15,7 @@ A neat color picker for your hyprland desktop.
|
||||||
|
|
||||||
## xdg-desktop-portal-hyprland
|
## xdg-desktop-portal-hyprland
|
||||||
|
|
||||||
A must-have, see [The wiki page](../Hyprland-desktop-portal)
|
A must-have, see [The wiki page](../xdg-desktop-portal-hyprland)
|
||||||
|
|
||||||
## hypridle
|
## hypridle
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,16 @@
|
||||||
This page documents software that is __strongly__ recommended to have running for a smooth Hyprland experience.
|
---
|
||||||
|
weight: 1
|
||||||
|
title: Must have
|
||||||
|
---
|
||||||
|
|
||||||
DEs like Plasma or Gnome will take care of this automatically.
|
This page documents software that is **strongly** recommended to have running
|
||||||
Hyprland will not, as you might want to use something else.
|
for a smooth Hyprland experience.
|
||||||
|
|
||||||
|
DEs like Plasma or Gnome will take care of this automatically. Hyprland will
|
||||||
|
not, as you might want to use something else.
|
||||||
|
|
||||||
### A notification daemon
|
### A notification daemon
|
||||||
|
|
||||||
_Starting method:_ most likely manual (`exec-once`)
|
_Starting method:_ most likely manual (`exec-once`)
|
||||||
|
|
||||||
Many apps (e.g. Discord) may freeze without one running.
|
Many apps (e.g. Discord) may freeze without one running.
|
||||||
|
@ -11,44 +18,55 @@ Many apps (e.g. Discord) may freeze without one running.
|
||||||
Use e.g. `dunst`, `mako`, `swaync`, etc.
|
Use e.g. `dunst`, `mako`, `swaync`, etc.
|
||||||
|
|
||||||
### Pipewire
|
### Pipewire
|
||||||
|
|
||||||
_Starting method:_ Automatic on Systemd, manual otherwise
|
_Starting method:_ Automatic on Systemd, manual otherwise
|
||||||
|
|
||||||
Pipewire is not necessarily required, but screensharing will not work without it.
|
Pipewire is not necessarily required, but screensharing will not work without
|
||||||
|
it.
|
||||||
|
|
||||||
Install `pipewire` and `wireplumber` (**not** `pipewire-media-session`)
|
Install `pipewire` and `wireplumber` (**not** `pipewire-media-session`)
|
||||||
#### Non-systemd distros
|
|
||||||
Since here is no truly standardized way (outside of systemd) to load PipeWire when starting
|
|
||||||
a graphical shell[^1] non-systemd distros like Gentoo or Artix provide a decicated launcher.
|
|
||||||
|
|
||||||
It can be usually found by running `whereis <distro>-pipewire-launcher`.
|
#### Non-systemd distros
|
||||||
If such file does not exist on your install please refer to your distro's documentation for help.
|
|
||||||
|
Since here is no truly standardized way (outside of systemd) to load PipeWire
|
||||||
|
when starting a graphical shell[^1] non-systemd distros like Gentoo or Artix
|
||||||
|
provide a decicated launcher.
|
||||||
|
|
||||||
|
It can be usually found by running `whereis <distro>-pipewire-launcher`. If such
|
||||||
|
file does not exist on your install please refer to your distro's documentation
|
||||||
|
for help.
|
||||||
|
|
||||||
[^1]: https://wiki.gentoo.org/wiki/PipeWire#OpenRC
|
[^1]: https://wiki.gentoo.org/wiki/PipeWire#OpenRC
|
||||||
|
|
||||||
### XDG Desktop Portal
|
### XDG Desktop Portal
|
||||||
|
|
||||||
_Starting method:_ Automatic on Systemd, manual otherwise
|
_Starting method:_ Automatic on Systemd, manual otherwise
|
||||||
|
|
||||||
XDG Desktop Portal handles a lot of stuff for your desktop, like file pickers,
|
XDG Desktop Portal handles a lot of stuff for your desktop, like file pickers,
|
||||||
screensharing, etc.
|
screensharing, etc.
|
||||||
|
|
||||||
See the [Hyprland Desktop Portal Page](../Hyprland-desktop-portal)
|
See the [Hyprland Desktop Portal Page](../xdg-desktop-portal-hyprland)
|
||||||
|
|
||||||
### Authentication Agent
|
### Authentication Agent
|
||||||
|
|
||||||
_Starting method:_ manual (`exec-once`)
|
_Starting method:_ manual (`exec-once`)
|
||||||
|
|
||||||
Authentication agents are the things that pop up a window asking you for a password whenever
|
Authentication agents are the things that pop up a window asking you for a
|
||||||
an app wants to elevate its privileges.
|
password whenever an app wants to elevate its privileges.
|
||||||
|
|
||||||
Our recommendation is the KDE one. For arch, it's `polkit-kde-agent`.
|
Our recommendation is the KDE one. For arch, it's `polkit-kde-agent`.
|
||||||
|
|
||||||
You can autostart it with `exec-once=/usr/lib/polkit-kde-authentication-agent-1`.
|
You can autostart it with
|
||||||
On some distributions you might have to use a different path `/usr/libexec/polkit-kde-authentication-agent-1`.
|
`exec-once=/usr/lib/polkit-kde-authentication-agent-1`. On some distributions
|
||||||
|
you might have to use a different path
|
||||||
|
`/usr/libexec/polkit-kde-authentication-agent-1`.
|
||||||
|
|
||||||
On other distributions that use a more recent version, such as Gentoo, it may be necessary to use `exec-once=/usr/lib64/libexec/polkit-kde-authentication-agent-1` instead.
|
On other distributions that use a more recent version, such as Gentoo, it may be
|
||||||
|
necessary to use
|
||||||
|
`exec-once=/usr/lib64/libexec/polkit-kde-authentication-agent-1` instead.
|
||||||
|
|
||||||
### Qt Wayland Support
|
### Qt Wayland Support
|
||||||
|
|
||||||
_Starting method:_ none (just a library)
|
_Starting method:_ none (just a library)
|
||||||
|
|
||||||
Install `qt5-wayland` and `qt6-wayland`.
|
Install `qt5-wayland` and `qt6-wayland`.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,16 +1,34 @@
|
||||||
Here you will find links to some other projects that may not fit into any of the above categories.
|
---
|
||||||
|
weight: 10
|
||||||
|
title: Other
|
||||||
|
---
|
||||||
|
|
||||||
|
Here you will find links to some other projects that may not fit into any of the
|
||||||
|
above categories.
|
||||||
|
|
||||||
### Workspace management
|
### Workspace management
|
||||||
[hyprsome](https://github.com/sopa0/hyprsome) by _sopa0_: Awesome-like workspaces for Hyprland.
|
|
||||||
|
[hyprsome](https://github.com/sopa0/hyprsome) by _sopa0_: Awesome-like
|
||||||
|
workspaces for Hyprland.
|
||||||
|
|
||||||
### Keyboard layout management
|
### Keyboard layout management
|
||||||
[hyprland-per-window-layout](https://github.com/coffebar/hyprland-per-window-layout/) by _MahouShoujoMivutilde and coffebar_: Per window keyboard layouts for Hyprland.
|
|
||||||
|
[hyprland-per-window-layout](https://github.com/coffebar/hyprland-per-window-layout/)
|
||||||
|
by _MahouShoujoMivutilde and coffebar_: Per window keyboard layouts for
|
||||||
|
Hyprland.
|
||||||
|
|
||||||
### IPC wrappers
|
### IPC wrappers
|
||||||
[hyprland-rs](https://github.com/yavko/hyprland-rs) by _yavko_: A neat wrapper for Hyprland's IPC written in Rust
|
|
||||||
|
[hyprland-rs](https://github.com/yavko/hyprland-rs) by _yavko_: A neat wrapper
|
||||||
|
for Hyprland's IPC written in Rust
|
||||||
|
|
||||||
### Screen shaders/color temperature
|
### Screen shaders/color temperature
|
||||||
[hyprshade](https://github.com/loqusion/hyprshade) by _loqusion_: Utility for swapping and scheduling screen shaders; also functions as an [automatic color temperature shifter](https://en.wikipedia.org/wiki/F.lux). (Useful for Nvidia users for whom other color temperature shifting apps do not work.)
|
|
||||||
|
[hyprshade](https://github.com/loqusion/hyprshade) by _loqusion_: Utility for
|
||||||
|
swapping and scheduling screen shaders; also functions as an
|
||||||
|
[automatic color temperature shifter](https://en.wikipedia.org/wiki/F.lux).
|
||||||
|
(Useful for Nvidia users for whom other color temperature shifting apps do not
|
||||||
|
work.)
|
||||||
|
|
||||||
### Wireless settings
|
### Wireless settings
|
||||||
- [iwgtk](https://github.com/J-Lentz/iwgtk) by _Jesse Lentz_: WiFi settings frontend for `iwd` in GTK
|
- [iwgtk](https://github.com/J-Lentz/iwgtk) by _Jesse Lentz_: WiFi settings frontend for `iwd` in GTK
|
||||||
|
@ -22,16 +40,18 @@ Here you will find links to some other projects that may not fit into any of the
|
||||||
|
|
||||||
_Starting method:_ manual ('exec-once')
|
_Starting method:_ manual ('exec-once')
|
||||||
|
|
||||||
USB Mass storage devices, like thumb drives, mobile phones, digital cameras, etc. do not mount automatically to the file system.
|
USB Mass storage devices, like thumb drives, mobile phones, digital cameras,
|
||||||
|
etc. do not mount automatically to the file system.
|
||||||
|
|
||||||
We generally have to manually mount it, often using root and `umount` to do so.
|
We generally have to manually mount it, often using root and `umount` to do so.
|
||||||
|
|
||||||
Many popular DEs automatically handle this by using `udisks2` wrappers.
|
Many popular DEs automatically handle this by using `udisks2` wrappers.
|
||||||
|
|
||||||
|
`udiskie` is a udisks2 front-end that allows to manage removable media such as
|
||||||
|
CDs or flash drives from userspace.
|
||||||
|
|
||||||
`udiskie` is a udisks2 front-end that allows to manage removable media such as CDs or flash drives from userspace.
|
Install `udiskie` via your repositories, or
|
||||||
|
[build manually](https://github.com/coldfix/udiskie/wiki/installation)
|
||||||
Install `udiskie` via your repositories, or [build manually](https://github.com/coldfix/udiskie/wiki/installation)
|
|
||||||
|
|
||||||
Head over to your `~/.config/hypr/hyprland.conf` and add the following lines:
|
Head over to your `~/.config/hypr/hyprland.conf` and add the following lines:
|
||||||
|
|
||||||
|
@ -39,7 +59,7 @@ Head over to your `~/.config/hypr/hyprland.conf` and add the following lines:
|
||||||
exec-once = udiskie &
|
exec-once = udiskie &
|
||||||
```
|
```
|
||||||
|
|
||||||
What this does is launches `udiskie` and `&` argument launches it in the background.
|
What this does is launches `udiskie` and `&` argument launches it in the
|
||||||
|
background.
|
||||||
|
|
||||||
[See more uses here](https://github.com/coldfix/udiskie/wiki/Usage) .
|
[See more uses here](https://github.com/coldfix/udiskie/wiki/Usage) .
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
weight: 4
|
||||||
|
title: Screen sharing
|
||||||
|
---
|
||||||
|
|
||||||
Screensharing is done through PipeWire on Wayland.
|
Screensharing is done through PipeWire on Wayland.
|
||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
@ -13,14 +18,24 @@ for a great tutorial.
|
||||||
|
|
||||||
## Better screensharing
|
## Better screensharing
|
||||||
|
|
||||||
See [the hyprland portal page](../Hyprland-desktop-portal)
|
See [the hyprland portal page](../xdg-desktop-portal-hyprland)
|
||||||
|
|
||||||
## XWayland
|
## XWayland
|
||||||
|
|
||||||
If your screensharing application is running under XWayland (like Discord, Skype,...), it can only see other XWayland windows and cannot share an entire screen or a Wayland window.
|
If your screensharing application is running under XWayland (like Discord,
|
||||||
|
Skype,...), it can only see other XWayland windows and cannot share an entire
|
||||||
|
screen or a Wayland window.
|
||||||
|
|
||||||
|
The KDE-team has implemented a workaround for this called
|
||||||
|
[xwaylandvideobridge](https://invent.kde.org/system/xwaylandvideobridge). You
|
||||||
|
can use
|
||||||
|
[this AUR package](https://aur.archlinux.org/packages/xwaylandvideobridge-git)
|
||||||
|
on ArchLinux. Note that Hyprland currently doesn't support the way it tries to
|
||||||
|
hide the main window, so you will have to create some window-rules to achieve
|
||||||
|
the same effect. See
|
||||||
|
[this issue](https://invent.kde.org/system/xwaylandvideobridge/-/issues/1) for
|
||||||
|
more information. For example:
|
||||||
|
|
||||||
The KDE-team has implemented a workaround for this called [xwaylandvideobridge](https://invent.kde.org/system/xwaylandvideobridge). You can use [this AUR package](https://aur.archlinux.org/packages/xwaylandvideobridge-git) on ArchLinux.
|
|
||||||
Note that Hyprland currently doesn't support the way it tries to hide the main window, so you will have to create some window-rules to achieve the same effect. See [this issue](https://invent.kde.org/system/xwaylandvideobridge/-/issues/1) for more information. For example:
|
|
||||||
```ini
|
```ini
|
||||||
windowrulev2 = opacity 0.0 override 0.0 override,class:^(xwaylandvideobridge)$
|
windowrulev2 = opacity 0.0 override 0.0 override,class:^(xwaylandvideobridge)$
|
||||||
windowrulev2 = noanim,class:^(xwaylandvideobridge)$
|
windowrulev2 = noanim,class:^(xwaylandvideobridge)$
|
||||||
|
|
|
@ -1,38 +1,44 @@
|
||||||
# Table of contents
|
---
|
||||||
|
weight: 2
|
||||||
|
title: Status bars
|
||||||
|
---
|
||||||
|
|
||||||
{{< toc >}}
|
## Waybar
|
||||||
|
|
||||||
# Waybar
|
|
||||||
|
|
||||||
Waybar is a GTK status bar made specifically for wlroots compositors and
|
Waybar is a GTK status bar made specifically for wlroots compositors and
|
||||||
supports Hyprland by default. To use it, it's recommended to use your distro's
|
supports Hyprland by default. To use it, it's recommended to use your distro's
|
||||||
package.
|
package.
|
||||||
|
|
||||||
If you want to use the workspaces module, first, copy the configuration files from
|
If you want to use the workspaces module, first, copy the configuration files
|
||||||
`/etc/xdg/waybar/` into `~/.config/waybar/`. Then, in `~/.config/waybar/config` replace
|
from `/etc/xdg/waybar/` into `~/.config/waybar/`. Then, in
|
||||||
all the references to `sway/workspaces` with `hyprland/workspaces`.
|
`~/.config/waybar/config` replace all the references to `sway/workspaces` with
|
||||||
|
`hyprland/workspaces`.
|
||||||
|
|
||||||
For more info regarding configuration, see
|
For more info regarding configuration, see
|
||||||
[The Waybar Wiki](https://github.com/Alexays/Waybar/wiki/Module:-Hyprland).
|
[The Waybar Wiki](https://github.com/Alexays/Waybar/wiki/Module:-Hyprland).
|
||||||
|
|
||||||
## How to launch
|
### How to launch
|
||||||
|
|
||||||
After getting everything set up, you might want to check if Waybar is configured to your liking. To launch it, simply type `waybar` into your terminal.
|
After getting everything set up, you might want to check if Waybar is configured
|
||||||
If you would like waybar to launch alongside hyprland, you can do this by adding a line to your hyprland configuration that reads `exec-once=waybar`
|
to your liking. To launch it, simply type `waybar` into your terminal. If you
|
||||||
|
would like waybar to launch alongside hyprland, you can do this by adding a line
|
||||||
|
to your hyprland configuration that reads `exec-once=waybar`
|
||||||
|
|
||||||
## Waybar popups render behind the windows
|
### Waybar popups render behind the windows
|
||||||
|
|
||||||
In `~/.config/waybar/config`, make sure that you have the `layer` configuration
|
In `~/.config/waybar/config`, make sure that you have the `layer` configuration
|
||||||
set to `top` and not `bottom`.
|
set to `top` and not `bottom`.
|
||||||
|
|
||||||
## Active workspace doesn't show up
|
### Active workspace doesn't show up
|
||||||
|
|
||||||
Replace `#workspaces button.focused` with `#workspaces button.active` in `~/.config/waybar/style.css`.
|
Replace `#workspaces button.focused` with `#workspaces button.active` in
|
||||||
|
`~/.config/waybar/style.css`.
|
||||||
|
|
||||||
## Scrolling through workspaces
|
### Scrolling through workspaces
|
||||||
|
|
||||||
Since there a lot of configuration options from `sway/workspaces` are missing, you
|
Since there a lot of configuration options from `sway/workspaces` are missing,
|
||||||
should deduce some of them by yourself. In the case of scrolling, it should look like this:
|
you should deduce some of them by yourself. In the case of scrolling, it should
|
||||||
|
look like this:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
"hyprland/workspaces": {
|
"hyprland/workspaces": {
|
||||||
|
@ -42,22 +48,26 @@ should deduce some of them by yourself. In the case of scrolling, it should look
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Clicking on a workspace icon does not work!
|
### Clicking on a workspace icon does not work!
|
||||||
|
|
||||||
On the `hyprland/workspaces` module, add `"on-click": "activate"`. That's the purpose of
|
On the `hyprland/workspaces` module, add `"on-click": "activate"`. That's the
|
||||||
the `sed` command used before building Waybar: the default way to select a workspace by
|
purpose of the `sed` command used before building Waybar: the default way to
|
||||||
clicking uses the `swaymsg`'s way, and thus it is required to edit
|
select a workspace by clicking uses the `swaymsg`'s way, and thus it is required
|
||||||
this function to make it work with `hyprctl`.
|
to edit this function to make it work with `hyprctl`.
|
||||||
|
|
||||||
## Window title is missing
|
### Window title is missing
|
||||||
|
|
||||||
|
Follow the above instructions to make sure everything is working. The prefix for
|
||||||
|
the window module that provides the title is `hyprland` not `wlr`. In your
|
||||||
|
waybar config, insert this module:
|
||||||
|
|
||||||
Follow the above instructions to make sure everything is working.
|
|
||||||
The prefix for the window module that provides the title is `hyprland` not `wlr`.
|
|
||||||
In your waybar config, insert this module:
|
|
||||||
```json
|
```json
|
||||||
"modules-center": ["hyprland/window"],
|
"modules-center": ["hyprland/window"],
|
||||||
```
|
```
|
||||||
If you are using a multiple monitors, you may want to also insert this module configuration:
|
|
||||||
|
If you are using a multiple monitors, you may want to also insert this module
|
||||||
|
configuration:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
"hyprland/window": {
|
"hyprland/window": {
|
||||||
"max-length": 200,
|
"max-length": 200,
|
||||||
|
@ -65,34 +75,45 @@ If you are using a multiple monitors, you may want to also insert this module co
|
||||||
},
|
},
|
||||||
```
|
```
|
||||||
|
|
||||||
# Eww
|
## Eww
|
||||||
|
|
||||||
In order to use [Eww](https://github.com/elkowar/eww), you first have to install
|
In order to use [Eww](https://github.com/elkowar/eww), you first have to install
|
||||||
it, either using your distro's package manager, by searching `eww-wayland`, or
|
it, either using your distro's package manager, by searching `eww-wayland`, or
|
||||||
by manually compiling. In the latter case, you can follow the
|
by manually compiling. In the latter case, you can follow the
|
||||||
[instructions](https://elkowar.github.io/eww).
|
[instructions](https://elkowar.github.io/eww).
|
||||||
|
|
||||||
## Configuration
|
### Configuration
|
||||||
|
|
||||||
After you've successfully installed Eww, you can move onto configuring it. There
|
After you've successfully installed Eww, you can move onto configuring it. There
|
||||||
are a few examples listed in the [Readme](https://github.com/elkowar/eww). It's also
|
are a few examples listed in the [Readme](https://github.com/elkowar/eww). It's
|
||||||
highly recommended to read through the
|
also highly recommended to read through the
|
||||||
[Configuration options](https://elkowar.github.io/eww/configuration.html).
|
[Configuration options](https://elkowar.github.io/eww/configuration.html).
|
||||||
|
|
||||||
{{< hint type=important >}}
|
{{< callout >}}
|
||||||
|
|
||||||
Read
|
Read
|
||||||
[the Wayland section](https://elkowar.github.io/eww/configuration.html#wayland)
|
[the Wayland section](https://elkowar.github.io/eww/configuration.html#wayland)
|
||||||
carefully before asking why your bar doesn't work.
|
carefully before asking why your bar doesn't work.
|
||||||
{{< /hint >}}
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
Here are some example widgets that might be useful for Hyprland:
|
Here are some example widgets that might be useful for Hyprland:
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Workspaces widget</summary>
|
<summary>Workspaces widget</summary>
|
||||||
|
|
||||||
This widget displays a list of workspaces 1-10. Each workspace can be clicked on to jump to it, and scrolling over the widget cycles through them. It supports different styles for the current workspace, occupied workspaces, and empty workspaces. It requires [bash](https://linux.die.net/man/1/bash), [awk](https://linux.die.net/man/1/awk), [stdbuf](https://linux.die.net/man/1/stdbuf), [grep](https://linux.die.net/man/1/grep), [seq](https://linux.die.net/man/1/seq), [socat](https://linux.die.net/man/1/socat), [jq](https://stedolan.github.io/jq/), and [Python 3](https://www.python.org/).
|
This widget displays a list of workspaces 1-10. Each workspace can be clicked on
|
||||||
|
to jump to it, and scrolling over the widget cycles through them. It supports
|
||||||
|
different styles for the current workspace, occupied workspaces, and empty
|
||||||
|
workspaces. It requires [bash](https://linux.die.net/man/1/bash),
|
||||||
|
[awk](https://linux.die.net/man/1/awk),
|
||||||
|
[stdbuf](https://linux.die.net/man/1/stdbuf),
|
||||||
|
[grep](https://linux.die.net/man/1/grep),
|
||||||
|
[seq](https://linux.die.net/man/1/seq),
|
||||||
|
[socat](https://linux.die.net/man/1/socat),
|
||||||
|
[jq](https://stedolan.github.io/jq/), and [Python 3](https://www.python.org/).
|
||||||
|
|
||||||
### `~/.config/eww.yuck`
|
#### `~/.config/eww.yuck`
|
||||||
|
|
||||||
```lisp
|
```lisp
|
||||||
...
|
...
|
||||||
|
@ -113,10 +134,9 @@ This widget displays a list of workspaces 1-10. Each workspace can be clicked on
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
...
|
...
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### `~/.config/eww/scripts/change-active-workspace`
|
#### `~/.config/eww/scripts/change-active-workspace`
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
@ -142,7 +162,7 @@ then
|
||||||
fi
|
fi
|
||||||
```
|
```
|
||||||
|
|
||||||
### `~/.config/eww/scripts/get-active-workspace`
|
#### `~/.config/eww/scripts/get-active-workspace`
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
@ -153,7 +173,7 @@ socat -u UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - |
|
||||||
stdbuf -o0 awk -F '>>|,' -e '/^workspace>>/ {print $2}' -e '/^focusedmon>>/ {print $3}'
|
stdbuf -o0 awk -F '>>|,' -e '/^workspace>>/ {print $2}' -e '/^focusedmon>>/ {print $3}'
|
||||||
```
|
```
|
||||||
|
|
||||||
### `~/.config/eww/scripts/get-workspaces`
|
#### `~/.config/eww/scripts/get-workspaces`
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
@ -174,9 +194,13 @@ done
|
||||||
<details>
|
<details>
|
||||||
<summary>Active window title widget</summary>
|
<summary>Active window title widget</summary>
|
||||||
|
|
||||||
This widget simply displays the title of the active window. It requires [awk](https://linux.die.net/man/1/awk), [stdbuf](https://linux.die.net/man/1/stdbuf), [socat](https://linux.die.net/man/1/socat), and [jq](https://stedolan.github.io/jq/).
|
This widget simply displays the title of the active window. It requires
|
||||||
|
[awk](https://linux.die.net/man/1/awk),
|
||||||
|
[stdbuf](https://linux.die.net/man/1/stdbuf),
|
||||||
|
[socat](https://linux.die.net/man/1/socat), and
|
||||||
|
[jq](https://stedolan.github.io/jq/).
|
||||||
|
|
||||||
### `~/.config/eww/eww.yuck`
|
#### `~/.config/eww/eww.yuck`
|
||||||
|
|
||||||
```lisp
|
```lisp
|
||||||
...
|
...
|
||||||
|
@ -189,7 +213,7 @@ This widget simply displays the title of the active window. It requires [awk](ht
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
|
|
||||||
### `~/.config/eww/scripts/get-window-title`
|
#### `~/.config/eww/scripts/get-window-title`
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
@ -199,24 +223,32 @@ socat -u UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | s
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
# Hybrid
|
## Hybrid
|
||||||
|
|
||||||
Like Waybar, [Hybrid](https://github.com/vars1ty/HybridBar) is a GTK status bar mainly focused for wlroots compositors.
|
Like Waybar, [Hybrid](https://github.com/vars1ty/HybridBar) is a GTK status bar
|
||||||
|
mainly focused for wlroots compositors.
|
||||||
|
|
||||||
You can install it from the AUR by the name `hybrid-bar`.
|
You can install it from the AUR by the name `hybrid-bar`.
|
||||||
|
|
||||||
## Configuration
|
### Configuration
|
||||||
|
|
||||||
The configuration is done through JSON, more information is available [here](https://github.com/vars1ty/HybridBar).
|
The configuration is done through JSON, more information is available
|
||||||
|
[here](https://github.com/vars1ty/HybridBar).
|
||||||
|
|
||||||
## How to launch
|
### How to launch
|
||||||
|
|
||||||
After configuring HybridBar, you can launch it by typing `hybrid-bar` into your terminal to try it out.
|
After configuring HybridBar, you can launch it by typing `hybrid-bar` into your
|
||||||
It is also possible to set it to launch at start, to do this you can add a line to your hyprland configuration that reads `exec-once=hybrid-bar`
|
terminal to try it out. It is also possible to set it to launch at start, to do
|
||||||
|
this you can add a line to your hyprland configuration that reads
|
||||||
|
`exec-once=hybrid-bar`
|
||||||
|
|
||||||
### Blur
|
#### Blur
|
||||||
|
|
||||||
|
To activate blur, set `blurls=NAMESPACE` in your hyprland configuration, where
|
||||||
|
`NAMESPACE` is the gtk-layer-shell namespace of your HybridBar. The default
|
||||||
|
namespace is `gtk-layer-shell` and can be changed in the HybridBar configuration
|
||||||
|
at
|
||||||
|
|
||||||
To activate blur, set `blurls=NAMESPACE` in your hyprland configuration, where `NAMESPACE` is the gtk-layer-shell namespace of your HybridBar. The default namespace is `gtk-layer-shell` and can be changed in the HybridBar configuration at
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"hybrid" {
|
"hybrid" {
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
weight: 3
|
||||||
|
title: Wallpapers
|
||||||
|
---
|
||||||
|
|
||||||
Launch your wallpaper utility with `exec-once=`.
|
Launch your wallpaper utility with `exec-once=`.
|
||||||
|
|
||||||
## hyprpaper
|
## hyprpaper
|
||||||
|
@ -24,8 +29,8 @@ A neat mpv wrapper to play a video as your wallpaper.
|
||||||
|
|
||||||
## swww
|
## swww
|
||||||
|
|
||||||
An efficient animated wallpaper daemon for wayland, controlled at runtime,
|
An efficient animated wallpaper daemon for wayland, controlled at runtime, which
|
||||||
which means you can change wallpapers without even needing to restart.
|
means you can change wallpapers without even needing to restart.
|
||||||
[GitHub](https://github.com/Horus645/swww)
|
[GitHub](https://github.com/Horus645/swww)
|
||||||
|
|
||||||
## waypaper
|
## waypaper
|
||||||
|
|
|
@ -1,26 +1,31 @@
|
||||||
|
---
|
||||||
|
weight: 5
|
||||||
|
title: Useful Utilities
|
||||||
|
---
|
||||||
|
|
||||||
This category is dedicated to short tutorials on how to get useful utilities for
|
This category is dedicated to short tutorials on how to get useful utilities for
|
||||||
Hyprland working.
|
Hyprland working.
|
||||||
|
|
||||||
# List of Pages
|
## List of Pages
|
||||||
|
|
||||||
- **[Must-Have](./Must-have)**
|
- **[Must-Have](./must-have)**
|
||||||
|
|
||||||
- **[Hypr Ecosystem](./Hypr-Ecosystem)**
|
- **[Hypr Ecosystem](./hypr-ecosystem)**
|
||||||
|
|
||||||
- **[Status Bars](./Status-Bars)**
|
- **[Status Bars](./status-bars)**
|
||||||
|
|
||||||
- **[App Launchers](./App-Launchers)**
|
- **[App Launchers](./app-launchers)**
|
||||||
|
|
||||||
- **[Wallpapers](./Wallpapers)**
|
- **[Wallpapers](./wallpapers)**
|
||||||
|
|
||||||
- **[Screen Sharing](./Screen-Sharing)**
|
- **[Screen Sharing](./screen-sharing)**
|
||||||
|
|
||||||
- **[App Clients](./App-Clients)**
|
- **[App Clients](./app-clients)**
|
||||||
|
|
||||||
- **[Color Pickers](./Color-Pickers)**
|
- **[Color Pickers](./color-pickers)**
|
||||||
|
|
||||||
- **[Clipboard Managers](./Clipboard-Managers)**
|
- **[Clipboard Managers](./clipboard-managers)**
|
||||||
|
|
||||||
- **[Hyprland Desktop Portal](./Hyprland-desktop-portal)**
|
- **[Hyprland Desktop Portal](./xdg-desktop-portal-hyprland)**
|
||||||
|
|
||||||
- **[Other](./Other)**
|
- **[Other](./other)**
|
||||||
|
|
|
@ -1,42 +1,58 @@
|
||||||
|
---
|
||||||
|
weight: 5
|
||||||
|
title: Hyprland Desktop Portal
|
||||||
|
---
|
||||||
|
|
||||||
An XDG Desktop Portal (later called XDP) is a program that lets other
|
An XDG Desktop Portal (later called XDP) is a program that lets other
|
||||||
applications communicate swiftly with the compositor through D-Bus.
|
applications communicate swiftly with the compositor through D-Bus.
|
||||||
|
|
||||||
It's used for stuff like e.g. opening file pickers, screen sharing.
|
It's used for stuff like e.g. opening file pickers, screen sharing.
|
||||||
|
|
||||||
On Wayland, it also requires an implementation. For Hyprland,
|
On Wayland, it also requires an implementation. For Hyprland, you'd usually use
|
||||||
you'd usually use `xdg-desktop-portal-wlr` (later called XDPW)
|
`xdg-desktop-portal-wlr` (later called XDPW)
|
||||||
|
|
||||||
Unfortunately, due to various reasons the -wlr portal is inferior
|
Unfortunately, due to various reasons the -wlr portal is inferior to the KDE or
|
||||||
to the KDE or Gnome ones.
|
Gnome ones.
|
||||||
|
|
||||||
In order to bridge the gap, Hyprland has its own fork of XDPW that
|
In order to bridge the gap, Hyprland has its own fork of XDPW that has more
|
||||||
has more features, called [xdg-desktop-portal-hyprland](https://github.com/hyprwm/xdg-desktop-portal-hyprland).
|
features, called
|
||||||
|
[xdg-desktop-portal-hyprland](https://github.com/hyprwm/xdg-desktop-portal-hyprland).
|
||||||
(later called XDPH)
|
(later called XDPH)
|
||||||
|
|
||||||
{{< hint type=important >}}
|
{{< callout >}}
|
||||||
You don't **need** XDPH. Hyprland will work with XDPW, but XDPH has more features, like e.g.
|
|
||||||
window sharing.
|
|
||||||
|
|
||||||
XDPH will work on other wlroots-based compositors, although limited to the XDPW features (other
|
You don't **need** XDPH. Hyprland will work with XDPW, but XDPH has more
|
||||||
will be disabled)
|
features, like e.g. window sharing.
|
||||||
{{< /hint >}}
|
|
||||||
|
XDPH will work on other wlroots-based compositors, although limited to the XDPW
|
||||||
|
features (other will be disabled).
|
||||||
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
## Installing
|
## Installing
|
||||||
{{< tabs "uniqueid" >}}
|
|
||||||
|
{{< tabs items="Arch Linux,Gentoo,Manual" >}}
|
||||||
|
|
||||||
{{< tab "Arch Linux" >}}
|
{{< tab "Arch Linux" >}}
|
||||||
|
|
||||||
```plain
|
```plain
|
||||||
pacman -S xdg-desktop-portal-hyprland
|
pacman -S xdg-desktop-portal-hyprland
|
||||||
```
|
```
|
||||||
|
|
||||||
or, for -git:
|
or, for -git:
|
||||||
|
|
||||||
```plain
|
```plain
|
||||||
yay -S xdg-desktop-portal-hyprland-git
|
yay -S xdg-desktop-portal-hyprland-git
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< /tab >}}
|
{{< /tab >}}
|
||||||
|
|
||||||
{{< tab "Gentoo" >}}
|
{{< tab "Gentoo" >}}
|
||||||
|
|
||||||
## Unmask dependencies
|
## Unmask dependencies
|
||||||
|
|
||||||
### /etc/portage/profile/package.unmask
|
### /etc/portage/profile/package.unmask
|
||||||
|
|
||||||
```plain
|
```plain
|
||||||
dev-qt/qtbase
|
dev-qt/qtbase
|
||||||
dev-qt/qtwayland
|
dev-qt/qtwayland
|
||||||
|
@ -45,7 +61,9 @@ dev-qt/qtshadertools
|
||||||
```
|
```
|
||||||
|
|
||||||
## Apply necessary useflags
|
## Apply necessary useflags
|
||||||
|
|
||||||
### /etc/portage/package.use
|
### /etc/portage/package.use
|
||||||
|
|
||||||
```plain
|
```plain
|
||||||
dev-qt/qtbase opengl egl eglfs gles2-only
|
dev-qt/qtbase opengl egl eglfs gles2-only
|
||||||
dev-qt/qtdeclarative opengl
|
dev-qt/qtdeclarative opengl
|
||||||
|
@ -53,7 +71,9 @@ sys-apps/xdg-desktop-portal screencast
|
||||||
```
|
```
|
||||||
|
|
||||||
## Unmask dependencies and xdph
|
## Unmask dependencies and xdph
|
||||||
|
|
||||||
### /etc/portage/package.accept_keywords
|
### /etc/portage/package.accept_keywords
|
||||||
|
|
||||||
```plain
|
```plain
|
||||||
gui-libs/xdg-desktop-portal-hyprland
|
gui-libs/xdg-desktop-portal-hyprland
|
||||||
dev-qt/qtbase
|
dev-qt/qtbase
|
||||||
|
@ -65,6 +85,7 @@ dev-qt/qtshadertools
|
||||||
btw those are the useflags that I have tested, you could also test others.
|
btw those are the useflags that I have tested, you could also test others.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
eselect repository enable guru
|
eselect repository enable guru
|
||||||
emaint sync -r guru
|
emaint sync -r guru
|
||||||
|
@ -72,31 +93,39 @@ emerge --ask --verbose gui-libs/xdg-desktop-portal-hyprland
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< /tab >}}
|
{{< /tab >}}
|
||||||
|
|
||||||
{{< tab "Manual" >}}
|
{{< tab "Manual" >}}
|
||||||
See [The Github repo's readme](https://github.com/hyprwm/xdg-desktop-portal-hyprland).
|
|
||||||
|
See
|
||||||
|
[The Github repo's readme](https://github.com/hyprwm/xdg-desktop-portal-hyprland).
|
||||||
|
|
||||||
{{</ tab >}}
|
{{</ tab >}}
|
||||||
|
|
||||||
{{< /tabs >}}
|
{{< /tabs >}}
|
||||||
|
|
||||||
{{< hint type=tip >}}
|
{{< callout type=info >}}
|
||||||
XDPH doesn't implement a file picker. For that, I recommend installing `xdg-desktop-portal-gtk` alongside XDPH.
|
|
||||||
{{< /hint >}}
|
XDPH doesn't implement a file picker. For that, I recommend installing
|
||||||
|
`xdg-desktop-portal-gtk` alongside XDPH.
|
||||||
|
|
||||||
|
{{< /callout >}}
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Should start automatically.
|
Should start automatically.
|
||||||
|
|
||||||
The most basic way of telling everything is OK is by trying to screenshare anything, or
|
The most basic way of telling everything is OK is by trying to screenshare
|
||||||
open OBS and select pipewire source. If XDPH is running, a qt menu will pop up asking you
|
anything, or open OBS and select pipewire source. If XDPH is running, a qt menu
|
||||||
what to share.
|
will pop up asking you what to share.
|
||||||
|
|
||||||
If it doesn't, and you get e.g. slurp, then XDPW is launching. In that case, try removing XDPW.
|
If it doesn't, and you get e.g. slurp, then XDPW is launching. In that case, try
|
||||||
|
removing XDPW.
|
||||||
|
|
||||||
XDPH will work on other wlroots compositors, but features available only on Hyprland will not work
|
XDPH will work on other wlroots compositors, but features available only on
|
||||||
(e.g. window sharing)
|
Hyprland will not work (e.g. window sharing)
|
||||||
|
|
||||||
For a nuclear option, you can use this script and `exec-once` it:
|
For a nuclear option, you can use this script and `exec-once` it:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
sleep 1
|
sleep 1
|
||||||
|
@ -107,11 +136,13 @@ killall xdg-desktop-portal
|
||||||
sleep 2
|
sleep 2
|
||||||
/usr/lib/xdg-desktop-portal &
|
/usr/lib/xdg-desktop-portal &
|
||||||
```
|
```
|
||||||
|
|
||||||
adjust the paths if incorrect.
|
adjust the paths if incorrect.
|
||||||
|
|
||||||
## Share picker doesn't use the system theme
|
## Share picker doesn't use the system theme
|
||||||
|
|
||||||
Try one or both:
|
Try one or both:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
dbus-update-activation-environment --systemd --all
|
dbus-update-activation-environment --systemd --all
|
||||||
systemctl --user import-environment QT_QPA_PLATFORMTHEME
|
systemctl --user import-environment QT_QPA_PLATFORMTHEME
|
||||||
|
@ -131,8 +162,10 @@ You can read more about this in the [xdg-desktop-portal documentation in the Arc
|
||||||
|
|
||||||
## Debugging
|
## Debugging
|
||||||
|
|
||||||
If you get long app launch times, or screensharing does not work, consult the logs.
|
If you get long app launch times, or screensharing does not work, consult the
|
||||||
|
logs.
|
||||||
|
|
||||||
`systemctl --user status xdg-desktop-portal-hyprland`
|
`systemctl --user status xdg-desktop-portal-hyprland`
|
||||||
|
|
||||||
if you see a crash, it's most likely you are missing `qt6-wayland` and/or `qt5-wayland`.
|
if you see a crash, it's most likely you are missing `qt6-wayland` and/or
|
||||||
|
`qt5-wayland`.
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
cascade:
|
||||||
|
type: docs
|
||||||
|
---
|
||||||
|
|
||||||
# Hyprland Wiki
|
# Hyprland Wiki
|
||||||
|
|
||||||
Hello there, dear traveler! Welcome to the Hyprland Wiki!
|
Hello there, dear traveler! Welcome to the Hyprland Wiki!
|
||||||
|
@ -6,17 +11,18 @@ Take a tour of the pages on the left and read ones that you may need.
|
||||||
|
|
||||||
## Wayland info (especially useful for Xorg users)
|
## Wayland info (especially useful for Xorg users)
|
||||||
|
|
||||||
A Wayland compositor is a fully autonomous Display Server, like Xorg itself.
|
A Wayland compositor is a fully autonomous Display Server, like Xorg itself. It
|
||||||
It is **not** possible to mix'n'match Wayland compositors like you could on Xorg
|
is **not** possible to mix'n'match Wayland compositors like you could on Xorg
|
||||||
with window managers and compositors. It is also not entirely possible, nor recommended,
|
with window managers and compositors. It is also not entirely possible, nor
|
||||||
to try and use all Xorg applications on Wayland. See [this page](../Useful-Utilities) for a
|
recommended, to try and use all Xorg applications on Wayland. See
|
||||||
list of recommended Wayland native/compatible programs.
|
[this page](../useful-utilities) for a list of recommended Wayland
|
||||||
|
native/compatible programs.
|
||||||
|
|
||||||
Wayland **compositors** should not be confused with Xorg **window managers**.
|
Wayland **compositors** should not be confused with Xorg **window managers**.
|
||||||
|
|
||||||
## IMPORTANT
|
## IMPORTANT
|
||||||
|
|
||||||
If you are having issues, please try [reading the FAQ](../FAQ) and configuring
|
If you are having issues, please try [reading the FAQ](../faq) and configuring
|
||||||
sections — chances are your issue is described somewhere there. If not, you can
|
sections — chances are your issue is described somewhere there. If not, you can
|
||||||
try [searching the issues](https://github.com/hyprwm/Hyprland/issues) or
|
try [searching the issues](https://github.com/hyprwm/Hyprland/issues) or
|
||||||
[joining the Discord server](https://discord.gg/hQ9XvMUjjr).
|
[joining the Discord server](https://discord.gg/hQ9XvMUjjr).
|
39
pages/version-selector.md
Normal file
39
pages/version-selector.md
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
---
|
||||||
|
title: Version selector ⚙️
|
||||||
|
weight: 1
|
||||||
|
---
|
||||||
|
|
||||||
|
Select your preferred wiki version below:
|
||||||
|
|
||||||
|
- [Latest Git](https://wiki.hyprland.org/)
|
||||||
|
- [v0.36.0](https://wiki.hyprland.org/0.36.0/)
|
||||||
|
- [v0.35.0](https://wiki.hyprland.org/0.35.0/)
|
||||||
|
- [v0.34.0](https://wiki.hyprland.org/0.34.0/)
|
||||||
|
- [v0.33.1](https://wiki.hyprland.org/0.33.0/)
|
||||||
|
- [v0.33.0](https://wiki.hyprland.org/0.33.0/)
|
||||||
|
- [v0.32.2](https://wiki.hyprland.org/0.32.1/)
|
||||||
|
- [v0.32.1](https://wiki.hyprland.org/0.32.1/)
|
||||||
|
- [v0.32.0](https://wiki.hyprland.org/0.32.0/)
|
||||||
|
- [v0.31.0](https://wiki.hyprland.org/0.31.0/)
|
||||||
|
- [v0.30.0](https://wiki.hyprland.org/0.30.0/)
|
||||||
|
- [v0.29.1](https://wiki.hyprland.org/0.29.1/)
|
||||||
|
- [v0.29.0](https://wiki.hyprland.org/0.29.0/)
|
||||||
|
- [v0.28.0](https://wiki.hyprland.org/0.28.0/)
|
||||||
|
- [v0.27.2](https://wiki.hyprland.org/0.27.2/)
|
||||||
|
- [v0.27.1](https://wiki.hyprland.org/0.27.1/)
|
||||||
|
- [v0.27.0](https://wiki.hyprland.org/0.27.0/)
|
||||||
|
- [v0.26.0](https://wiki.hyprland.org/0.26.0/)
|
||||||
|
- [v0.25.0](https://wiki.hyprland.org/0.25.0/)
|
||||||
|
- [v0.24.1](https://wiki.hyprland.org/0.24.1/)
|
||||||
|
- [v0.24.0](https://wiki.hyprland.org/0.24.0/)
|
||||||
|
- [v0.23.0beta](https://wiki.hyprland.org/0.23.0beta/)
|
||||||
|
- [v0.22.0beta](https://wiki.hyprland.org/0.22.0beta/)
|
||||||
|
- [v0.21.0beta](https://wiki.hyprland.org/0.21.0beta/)
|
||||||
|
- [v0.20.1beta](https://wiki.hyprland.org/0.20.1beta/)
|
||||||
|
- [v0.20.0beta](https://wiki.hyprland.org/0.20.0beta/)
|
||||||
|
- [v0.19.2beta](https://wiki.hyprland.org/0.19.2beta/)
|
||||||
|
- [v0.19.1beta](https://wiki.hyprland.org/0.19.1beta/)
|
||||||
|
- [v0.19.0beta](https://wiki.hyprland.org/0.19.0beta/)
|
||||||
|
- [v0.18.0beta](https://wiki.hyprland.org/0.18.0beta/)
|
||||||
|
- [v0.17.0beta](https://wiki.hyprland.org/0.17.0beta/)
|
||||||
|
- [v0.16.0beta](https://wiki.hyprland.org/0.16.0beta/)
|
Loading…
Reference in a new issue