Configuring: reword/revamp

This commit is contained in:
Mihai Fufezan 2024-07-30 22:59:15 +03:00
parent 2fb6853e11
commit ea9d39dbf0
13 changed files with 378 additions and 362 deletions

View file

@ -95,7 +95,8 @@ specify a movement percentage. For example, the following will make windows move
animation = workspaces, 1, 8, default, slidefade 20% animation = workspaces, 1, 8, default, slidefade 20%
``` ```
For animation style `slide` in windows and layers you can specify a forced side, e.g.: For animation style `slide` in windows and layers you can specify a forced side,
e.g.:
```ini ```ini
animation = windows, 1, 8, default, slide left animation = windows, 1, 8, default, slide left

View file

@ -61,9 +61,9 @@ You can also unbind with `unbind`, e.g.:
unbind = SUPER, O unbind = SUPER, O
``` ```
May be useful for dynamic keybindings with `hyprctl`. May be useful for dynamic keybindings with `hyprctl`:
```sh ```bash
hyprctl keyword unbind SUPER, O hyprctl keyword unbind SUPER, O
``` ```
@ -180,7 +180,7 @@ bindrl=MOD,KEY,exec,amongus
Flags: Flags:
```ini ```
l -> locked, will also work when an input inhibitor (e.g. a lockscreen) is active. l -> locked, will also work when an input inhibitor (e.g. a lockscreen) is active.
r -> release, will trigger on release of a key. r -> release, will trigger on release of a key.
e -> repeat, will repeat when held. e -> repeat, will repeat when held.
@ -273,12 +273,12 @@ bindr=ALT,Alt_L,exec,amongus
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) and the [`sendshortcut` dispatcher](../Dispatchers/#list-of-dispatchers) for keybinds. See the [`pass` dispatcher](../Dispatchers/#list-of-dispatchers) and the
[`sendshortcut` 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. Simply
add
Simply add
```ini ```ini
bind = SUPER, F10, pass, ^(com\.obsproject\.Studio)$ bind = SUPER, F10, pass, ^(com\.obsproject\.Studio)$
@ -301,12 +301,13 @@ You may also add shortcuts, where other keys are passed to the window.
bind = SUPER, F10, sendshortcut, SUPER, F4, ^(com\.obsproject\.Studio)$ bind = SUPER, F10, sendshortcut, SUPER, F4, ^(com\.obsproject\.Studio)$
``` ```
Will send <key>SUPER</key> + <key>F4</key> to OBS if you press <key>SUPER</key> + <key>F10</key>. Will send <key>SUPER</key> + <key>F4</key> to OBS if you press
<key>SUPER</key> + <key>F10</key>.
{{< callout >}} {{< callout >}}
This works flawlessly with all native Wayland applications. However, XWayland is a bit wonky. This works flawlessly with all native Wayland applications. However, XWayland
Make sure that what you're passing is a "global Xorg keybind", 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. otherwise passing from a different XWayland app may not work.
{{< /callout >}} {{< /callout >}}
@ -318,12 +319,11 @@ 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 Open your desired app and run `hyprctl globalshortcuts` in a terminal. This will
list of currently registered shortcuts with their description(s). give you a 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`, and bind it to
whatever you want with the `global` dispatcher:
Bind it to whatever you want with the `global` dispatcher:
```ini ```ini
bind = SUPERSHIFT, A, global, coolApp:myToggle bind = SUPERSHIFT, A, global, coolApp:myToggle

View file

@ -1,84 +0,0 @@
---
weight: 1
title: Configuring Hyprland
---
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.
Hyprland will automatically generate an example config for you if you don't have
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.
The config is reloaded the moment you save it. However, you can use `hyprctl reload` to reload the config manually.
Start a section with `name {` and end in `}` **_in separate lines!_**
{{< 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 toggleable / numerical options.
{{< /callout >}}
## Line style
Every config line is a command followed by a value.
```ini
COMMAND=VALUE
```
The command can be a variable, or a special keyword (described further in this
page)
You are **allowed to** input trailing spaces at the beginning and end.
e.g.:
```ini
COMMAND = VALUE
```
is valid.
### Comments
Comments are started with the `#` character.
If you want to escape it (put an actual `#` and not start a comment) you can use
`##`. It will be turned into a single `#` that WILL be a part of your line.
### Escaping errors
If you use plugins, you may want to ignore errors from missing options/keywords
so that you don't get an error bar before they are loaded. To do so, do this:
```ini
# hyprlang noerror true
bind = MOD, KEY, something, amogus
someoption = blah
# hyprlang noerror false
```
## Basic configuring
To configure the "options" of Hyprland, animations, styling, etc. see
[Variables](../Variables).
## Advanced configuring
Some keywords (binds, curves, execs, monitors, etc.) are not variables but
define special behavior.
See all of them in [Keywords](../Keywords) and the sidebar.

View file

@ -84,7 +84,7 @@ layout pages (See the sidebar).
{{< callout type=warning >}} {{< callout type=warning >}}
it is NOT recommended to set DPMS with a keybind directly, as it might cause It is NOT recommended to set DPMS with a keybind directly, as it might cause
undefined behavior. Instead, consider something like undefined behavior. Instead, consider something like
```ini ```ini
@ -123,17 +123,22 @@ You have nine choices:
- Relative ID: e.g. `+1`, `-3` or `+100` - Relative ID: e.g. `+1`, `-3` or `+100`
- workspace on monitor, relative with `+` or `-`, absolute with `~`: e.g. `m+1`, `m-2` or `m~3` - workspace on monitor, relative with `+` or `-`, absolute with `~`: e.g. `m+1`,
`m-2` or `m~3`
- workspace on monitor including empty workspaces, relative with `+` or `-`, absolute with `~`: e.g. `r+1` or `r~3` - workspace on monitor including empty workspaces, relative with `+` or `-`,
absolute with `~`: e.g. `r+1` or `r~3`
- open workspace, relative with `+` or `-`, absolute with `~`: e.g. `e+1`, `e-10`, or `e~2` - open workspace, relative with `+` or `-`, absolute with `~`: e.g. `e+1`,
`e-10`, or `e~2`
- Name: e.g. `name:Web`, `name:Anime` or `name:Better anime` - Name: e.g. `name:Web`, `name:Anime` or `name:Better anime`
- Previous workspace: `previous`, or `previous_per_monitor` - Previous workspace: `previous`, or `previous_per_monitor`
- First available empty workspace: `empty`, suffix with `m` to only search on monitor. and/or `n` to make it the *next* available empty workspace. e.g. `emptynm` - First available empty workspace: `empty`, suffix with `m` to only search
on monitor. and/or `n` to make it the *next* available empty workspace. e.g.
`emptynm`
- Special Workspace: `special` or `special:name` for named special workspaces. - Special Workspace: `special` or `special:name` for named special workspaces.
@ -168,7 +173,7 @@ limited to 97 at a time.
For example, to move a window/application to a special workspace you can use the For example, to move a window/application to a special workspace you can use the
following syntax: following syntax:
``` ```ini
bind = SUPER, C, movetoworkspace, special bind = SUPER, C, movetoworkspace, special
#The above syntax will move the window to a special workspace upon pressing 'SUPER'+'C'. #The above syntax will move the window to a special workspace upon pressing 'SUPER'+'C'.
#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.
@ -177,20 +182,21 @@ bind = SUPER, C, movetoworkspace, special
## Executing with rules ## Executing with rules
The `exec` dispatcher supports adding rules. Please note some windows might work 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. For example, if better, some worse. It records the PID of the spawned process and uses that.
your process forks and then the fork opens a window, this will not work. For example, if your process forks and then the fork opens a window, this will
Rules will only be applied once. This means dynamic rules will be overridden as soon as a not work. Rules will only be applied once. This means dynamic rules will be
property of the window changes (e.g. switching focus). To make dynamic rules stick around overridden as soon as a property of the window changes (e.g. switching focus).
use `hyprctl setprop` (see [Using hyprctl](../Using-hyprctl)). To make dynamic rules stick around use `hyprctl setprop` (see
[Using hyprctl](../Using-hyprctl)).
The syntax is: The syntax is:
``` ```ini
bind = mod, key, exec, [rules...] command bind = mod, key, exec, [rules...] command
``` ```
For example: For example:
``` ```ini
bind = SUPER, E, exec, [workspace 2 silent; float; move 0 0] kitty bind = SUPER, E, exec, [workspace 2 silent; float; move 0 0] kitty
``` ```

View file

@ -17,11 +17,8 @@ otherwise in a specific section_:
```ini ```ini
three_param_keyword = A, B, C # OK three_param_keyword = A, B, C # OK
three_param_keyword = A, C # NOT OK three_param_keyword = A, C # NOT OK
three_param_keyword = A, , C # OK three_param_keyword = A, , C # OK
three_param_keyword = A, B, # OK three_param_keyword = A, B, # OK
``` ```
@ -79,8 +76,7 @@ then lines inside `~/.config/hypr/myColors.conf`, then lines below.
## Gestures ## Gestures
Use something like Use [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).
@ -90,7 +86,7 @@ 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
overwritten. overwritten.
In order to apply per-device config options, make a new category like this: In order to apply per-device config options, add a new category like this:
```ini ```ini
device { device {
@ -99,12 +95,15 @@ device {
} }
``` ```
The `name` can be easily obtained by doing `hyprctl devices`. The `name` can be easily obtained by checking the output of `hyprctl devices`.
Inside of it, put your config options. All options from the `input` category Inside of it, put your config options. All options from the `input` category
(and all subcategories, e.g. `input:touchpad`) can be put inside, **EXCEPT**: (and all subcategories, e.g. `input:touchpad`) can be put inside, **EXCEPT**:
force_no_accel, follow_mouse, float_switch_override_focus, scroll_factor - `force_no_accel`
- `follow_mouse`
- `float_switch_override_focus`
- `scroll_factor`
Properties that change names: Properties that change names:
@ -118,9 +117,9 @@ 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 - `enabled` -> (only for mice / touchpads / touchdevices / keyboards)
enabled -> (only for mice / touchpads / touchdevices / keyboards) enables / disables the device (connects / disconnects from the on-screen cursor) - default: Enabled - enables / disables the device (connects / disconnects from the on-screen cursor)
``` - default: Enabled
Example config section: Example config section:
@ -135,17 +134,18 @@ device {
Example modifying per-device config values using `hyprctl`: Example modifying per-device config values using `hyprctl`:
```plain ```bash
hyprctl -r -- keyword device[my-device]:sensitivity -1 hyprctl -r -- keyword device[my-device]:sensitivity -1
``` ```
{{< callout 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
and a per-device one of `fr`, the keybinds will still act as if you were on `us`. with a global keymap of `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
In that case you'll need to type the symbol specified in the bind to activate it. you'll need to type the symbol specified in the bind to activate it.
{{< /callout >}} {{< /callout >}}
@ -162,10 +162,10 @@ More can be found in [Useful Utilities](../../Useful-Utilities).
## Blurring layerSurfaces ## Blurring layerSurfaces
LayerSurfaces are not windows. These are for example: Your wallpapers, Layer surfaces are not windows. These are, for example: wallpapers,
notification overlays, bars, etc. notification overlays, bars, etc.
If you really want to blur them, use a layerrule: If you want to blur them, use a layer rule:
```ini ```ini
layerrule = blur, NAMESPACE layerrule = blur, NAMESPACE
@ -196,15 +196,15 @@ Hyprland's launch.
{{< /callout >}} {{< /callout >}}
You can use the `env` keyword to set environment variables at Hyprland's start, You can use the `env` keyword to set environment variables when Hyprland starts,
e.g.: 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 You can also add a `d` flag if you want the env var to be exported to D-Bus
(systemd only) (systemd only):
```ini ```ini
envd = XCURSOR_SIZE,24 envd = XCURSOR_SIZE,24

View file

@ -22,12 +22,12 @@ This will make the monitor on `DP-1` a `1920x1080` display, at
To list all available monitors (active and inactive): To list all available monitors (active and inactive):
```shell ```bash
hyprctl monitors all hyprctl monitors all
``` ```
Monitors are positioned on a virtual "layout". The `position` is the position of Monitors are positioned on a virtual "layout". The `position` is the position,
said display in the layout. (calculated from the top-left corner) in pixels, of said display in the layout. (calculated from the top-left corner)
For example: For example:
@ -36,14 +36,14 @@ 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 put 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 put 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
@ -63,14 +63,14 @@ monitor=DP-1, 1920x1080, 0x0, 1
monitor = DP-2, 1920x1080, 0x-1080, 1 monitor = DP-2, 1920x1080, 0x-1080, 1
``` ```
will tell hyprland to make DP-2 _above_ DP-1, while will tell Hyprland to put DP-2 _above_ DP-1, while
```ini ```ini
monitor = DP-1, 1920x1080, 0x0, 1 monitor = DP-1, 1920x1080, 0x0, 1
monitor = DP-2, 1920x1080, 0x1080, 1 monitor = DP-2, 1920x1080, 0x1080, 1
``` ```
will tell hyprland to make DP-2 _below_. will tell Hyprland to put DP-2 _below_.
{{< callout type=info >}} {{< callout type=info >}}
@ -84,12 +84,15 @@ also rotated 90 degrees (vertical), you'd use `1080x0`.
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.
You can use `preferred` as a resolution to use the display's preferred size, There are a few special values for the resolutions:
or you can use `highres` or `highrr` to get the best possible resolution or refresh rate for your monitor. - `preferred` - use the display's preferred size and refresh rate.
- `highres` - use the highest supported resolution.
- `highrr` - use the highest supported refresh rate.
Position also has a few special values:
- `auto` - let Hyprland decide on a position. By default, it places each new monitor to the right of existing ones.
- `auto-right/left/up/down` - place the monitor to the right/left, above or below other monitors.
You can use `auto` as a position to let Hyprland decide on a position for you.
If you want to get fancy with multiple monitors you can specify `auto-right` to put your monitor to the right,
`auto-down` to position your monitor below, `auto-left` to put it to the left, and `auto-up` to put your monitor above.
***Please Note:*** While specifying a monitor direction for your first monitor is allowed, this does nothing and it will ***Please Note:*** While specifying a monitor direction for your first monitor is allowed, this does nothing and it will
be positioned at (0,0). Also the direction is always from the center out, so you can specify `auto-up` then `auto-left`, be positioned at (0,0). Also the direction is always from the center out, so you can specify `auto-up` then `auto-left`,
but the left monitors will just be left of the origin and above the origin. You can also specify duplicate directions and but the left monitors will just be left of the origin and above the origin. You can also specify duplicate directions and
@ -104,14 +107,15 @@ Recommended rule for quickly plugging in random monitors:
monitor = , preferred, auto, 1 monitor = , preferred, auto, 1
``` ```
Will make any monitor that was not specified with an explicit rule automatically This will make any monitor that was not specified with an explicit rule
placed on the right of the other(s) with its preferred resolution. automatically placed on the right of the other(s), with its preferred
resolution.
For more specific rules, you can also use the output's description (see For more specific rules, you can also use the output's description (see
`hyprctl monitors` for more details). If the output of `hyprctl monitors` looks `hyprctl monitors` for more details). If the output of `hyprctl monitors` looks
like the following: like the following:
``` ```yaml
Monitor eDP-1 (ID 0): Monitor eDP-1 (ID 0):
1920x1080@60.00100 at 0x0 1920x1080@60.00100 at 0x0
description: Chimei Innolux Corporation 0x150C (eDP-1) description: Chimei Innolux Corporation 0x150C (eDP-1)
@ -120,10 +124,10 @@ Monitor eDP-1 (ID 0):
[...] [...]
``` ```
then the `description` value up to the portname `(eDP-1)` can be used to specify then the `description` value up to, but not including the portname `(eDP-1)` can
the monitor: be used to specify the monitor:
``` ```ini
monitor = desc:Chimei Innolux Corporation 0x150C, preferred, auto, 1.5 monitor = desc:Chimei Innolux Corporation 0x150C, preferred, auto, 1.5
``` ```
@ -134,7 +138,7 @@ Remember to remove the `(portname)`!
You can set up a custom modeline by changing the resolution field to a modeline, You can set up a custom modeline by changing the resolution field to a modeline,
for example: for example:
``` ```ini
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
``` ```
@ -164,9 +168,9 @@ If your workflow requires a custom reserved area, you can add it with:
monitor = name, addreserved, TOP, BOTTOM, LEFT, RIGHT monitor = name, addreserved, TOP, BOTTOM, LEFT, RIGHT
``` ```
Where `TOP` `BOTTOM` `LEFT` `RIGHT` are integers in pixels of the reserved area Where `TOP` `BOTTOM` `LEFT` `RIGHT` are integers, i.e the number in pixels of
to add. This does stack on top of the calculated one (e.g. bars), but you may the reserved area to add. This does stack on top of the calculated reserved area
only use one of these rules per monitor in the config. (e.g. bars), but you may only use one of these rules per monitor in the config.
## Extra args ## Extra args
@ -176,11 +180,11 @@ You can combine extra arguments at the end of the monitor rule, examples:
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 below for more detail about each argument. See below for more details about each argument.
### Mirrored displays ### Mirrored displays
If you want to mirror a display, add a `,mirror,[NAME]` at the end of the If you want to mirror a display, add a `, mirror, <NAME>` at the end of the
monitor rule, examples: monitor rule, examples:
```ini ```ini
@ -191,21 +195,25 @@ monitor=,preferred,auto,1,mirror,DP-1
Please remember that mirroring displays will not "re-render" everything for your Please remember that mirroring displays will not "re-render" everything for your
second monitor, so if mirroring a 1080p screen onto a 4K one, the resolution 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 aspect ratios that differ (e.g 16:9 and 16:10).
### 10 bit support ### 10 bit support
If you want to enable 10 bit support for your display, add a `, bitdepth, 10` at If you want to enable 10 bit support for your display, add a `, bitdepth, 10` at
the end of the monitor rule, e.g.: 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 {{< callout >}}
Colors registered in Hyprland (e.g. the border color) do _not_ support
10 bit. 10 bit.
**NOTE** Some applications do _not_ support screen capture with 10 bit enabled. Some applications do _not_ support screen capture with 10 bit enabled.
{{< /callout >}}
### VRR ### VRR
@ -223,15 +231,15 @@ monitor=eDP-1,2880x1800@90,0x0,1,transform,1
Transform list: Transform list:
```ini ```
normal (no transforms) -> 0 0 -> normal (no transforms)
90 degrees -> 1 1 -> 90 degrees
180 degrees -> 2 2 -> 180 degrees
270 degrees -> 3 3 -> 270 degrees
flipped -> 4 4 -> flipped
flipped + 90 degrees -> 5 5 -> flipped + 90 degrees
flipped + 180 degrees -> 6 6 -> flipped + 180 degrees
flipped + 270 degrees -> 7 7 -> flipped + 270 degrees
``` ```
## Default workspace ## Default workspace

View file

@ -4,14 +4,7 @@ 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. It should automatically be installed along with Hyprland.
automatically be installed.
To check if `hyprctl` is installed, simply execute it by issuing `hyprctl` in
the terminal.
If it's not, go to the repo root and `/hyprctl`. Issue a `make all` and then
`sudo cp ./hyprctl /usr/bin`.
{{< callout type=warning >}} {{< callout type=warning >}}
@ -27,12 +20,13 @@ For live event handling, see the [socket2](../../IPC/).
### dispatch ### dispatch
Issue a `dispatch` to call a keybind dispatcher with an arg. Issue a `dispatch` to call a keybind dispatcher with an argument.
An arg has to be present, for dispatchers without parameters it can be anything. An argument has to be present, for dispatchers without parameters it can be
anything.
To pass an argument starting with `-` or `--`, such as command line options to To pass an argument starting with `-` or `--`, such as command line options
`exec` programs, pass `--` as an option. This will disable any subsequent to `exec` programs, pass `--` as an option. This will disable any subsequent
parsing of options by _hyprctl_. parsing of options by _hyprctl_.
Examples: Examples:
@ -106,8 +100,9 @@ or
hyprctl output remove [name] hyprctl output remove [name]
``` ```
Where `[backend]` is the name of the backend and `(name)` is an optional name for the output. If `(name)` is not Where `[backend]` is the name of the backend and `(name)` is an optional name
specified, the default naming scheme will be used (`HEADLESS-2`, `WL-1`, etc.) for the output. If `(name)` is not specified, the default naming scheme will be
used (`HEADLESS-2`, `WL-1`, etc.)
{{< callout type=info >}} {{< callout type=info >}}
@ -116,9 +111,12 @@ specified, the default naming scheme will be used (`HEADLESS-2`, `WL-1`, etc.)
{{< /callout >}} {{< /callout >}}
Available backends: Available backends:
- `wayland`: Creates an output as a Wayland window. This will only work if you're already running Hyprland with the Wayland backend. - `wayland`: Creates an output as a Wayland window. This will only work if
- `headless`: Creates a headless monitor output. If you're running a VNC/RDP/Sunshine server, you should use this. you're already running Hyprland with the Wayland backend.
- `auto`: Picks a backend for you. For example, if you're running Hyprland from the TTY, `headless` will be chosen. - `headless`: Creates a headless monitor output. If you're running a VNC/RDP/
Sunshine server, you should use this.
- `auto`: Picks a backend for you. For example, if you're running Hyprland from
the TTY, `headless` will be chosen.
For example, to create a headless output named "test": For example, to create a headless output named "test":
@ -163,7 +161,7 @@ hyprctl switchxkblayout at-translated-set-2-keyboard next
{{< callout type=info >}} {{< callout type=info >}}
If you want a single variant ie. pl/dvorak on one layout but us/qwerty on the If you want a single variant i.e. pl/dvorak on one layout but us/qwerty on the
other, xkb parameters can still be blank, however the amount of comma-separated 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 parameters have to match. Alternatively, a single parameter can be specified for
it to apply to all three. it to apply to all three.
@ -226,7 +224,9 @@ To get more information about a window, you can use `hyprctl clients`.
{{< callout type=warning >}} {{< callout type=warning >}}
Please beware that `hyprctl clients` will display the fields as **initialClass** and **initialTitle** while the regex mode uses `initialclass` and `initialtitle`. Please beware that `hyprctl clients` will display the fields as **initialClass**
and **initialTitle** while the regex mode uses `initialclass` and
`initialtitle`.
{{< /callout >}} {{< /callout >}}

View file

@ -67,7 +67,7 @@ terminals.
For now, the supported fields for V2 are: For now, the supported fields for V2 are:
```ini ```
class - class regex class - class regex
title - title regex title - title regex
initialclass - initialClass regex initialclass - initialClass regex
@ -166,15 +166,16 @@ The following rules can also be set with [`hyprctl setprop`](../Using-hyprctl#se
| immediate \[on\] | forces the window to allow to be torn. See [the Tearing page](../Tearing). | | immediate \[on\] | forces the window to allow to be torn. See [the Tearing page](../Tearing). |
| xray \[on\] | sets blur xray mode for the window | | xray \[on\] | sets blur xray mode for the window |
When using window rules, \[on\] can be set to `0` for off, `1` for on or not set for default. When using window rules, \[on\] can be set to `0` for off, `1` for on or not set
for default.
When using `hyprctl setprop`, \[on\] can be set to `0` for off, `1` for on, `toggle` to toggle the state or `unset` to unset previous values. When using `hyprctl setprop`, \[on\] can be set to `0` for off, `1` for on,
`toggle` to toggle the state or `unset` to unset previous values.
When using `hyprctl setprop`, \[int\] can also be `unset` to unset previous values. When using `hyprctl setprop`, \[int\] can also be `unset` to unset previous
values.
{{< 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`.
@ -196,16 +197,14 @@ The `group` rule without options is a shorthand for `group set`.
By default, `set` and `lock` only affect new windows once. The `always` By default, `set` and `lock` only affect new windows once. The `always`
qualifier makes them always effective. qualifier makes them always effective.
{{< /callout >}}
### Tags ### Tags
Window may have several tags, either static or dynamic, dynamic tag will have a suffix of `*`. Window may have several tags, either static or dynamic, dynamic tag will have a
You may check window tags with `hyprctl clients`. suffix of `*`. You may check window tags with `hyprctl clients`.
Use `tagwindow` dispatcher to add a static tag to a window: Use `tagwindow` dispatcher to add a static tag to a window:
``` ```bash
hyprctl dispatch tagwindow +code # add tag to current window hyprctl dispatch tagwindow +code # add tag to current window
hyprctl dispatch tagwindow -- -code # remove tag from current window (use `--` to protect the leading `-`) hyprctl dispatch tagwindow -- -code # remove tag from current window (use `--` to protect the leading `-`)
hyprctl dispatch tagwindow code # toggle the tag of current window hyprctl dispatch tagwindow code # toggle the tag of current window
@ -239,8 +238,9 @@ windowrulev2 = opacity 0.2 override, tag:alpha_0.2
windowrulev2 = opacity 0.4 override, tag:alpha_0.4 windowrulev2 = opacity 0.4 override, tag:alpha_0.4
``` ```
The `tag` rule can only manipulate dynamic tags, and the `tagwindow` dispatcher only work with static tags The `tag` rule can only manipulate dynamic tags, and the `tagwindow` dispatcher
(as once the dispatcher is called, dynamic tags will be cleared). only work with static tags (as once the dispatcher is called, dynamic tags will
be cleared).
### Example Rules ### Example Rules
@ -261,9 +261,9 @@ windowrulev2 = stayfocused, class:^(pinentry-) # fix pinentry losing focus
Rules that are marked as _Dynamic_ will be reevaluated if the matching property 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 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 `bordercolor` of a window when it is floating, then the `bordercolor` will
the requested color when it is set to floating, and revert to the default color change to the requested color when it is set to floating, and revert to the
when it is tiled again. default color when it is tiled again.
Rules will be processed from top to bottom, where the _last_ match will take Rules will be processed from top to bottom, where the _last_ match will take
precedence. i.e. precedence. i.e.
@ -273,8 +273,9 @@ windowrulev2 = opacity 0.8 0.8,class:^(kitty)$
windowrulev2 = opacity 0.5 0.5, floating:1 windowrulev2 = opacity 0.5 0.5, floating:1
``` ```
Here, all non-fullscreen kitty windows will have `opacity 0.8`, except if they are floating. Here, all non-fullscreen kitty windows will have `opacity 0.8`, except if
Otherwise, they will have `opacity 0.5`. The rest of the non-fullscreen floating windows will have `opacity 0.5`. they are floating. Otherwise, they will have `opacity 0.5`. The rest of the
non-fullscreen 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
@ -286,13 +287,14 @@ The rest of the floating windows will have `opacity 0.5`.
{{< callout type=info >}} {{< callout type=info >}}
Opacity is a PRODUCT of all opacities by default. For example, setting `activeopacity` to 0.5 Opacity is a PRODUCT of all opacities by default. For example, setting
and `opacity` to 0.5 will result in a total opacity of 0.25. You are allowed `activeopacity` to 0.5 and `opacity` to 0.5 will result in a total opacity of
to set opacities over 1, but any opacity product over 1 will cause graphical 0.25. You are allowed to set opacities over 1, but any opacity product over 1
glitches. For example, using `0.5 * 2 = 1` is fine, but `0.5 * 4 = 2` will cause will cause graphical glitches. For example, using `0.5 * 2 = 1` is fine, but
graphical glitches. You can put `override` after an opacity value to override it to an exact value `0.5 * 4 = 2` will cause graphical glitches. You can put `override` after an
rather than a multiplier. For example, to set active and inactive opacity to 0.8, opacity value to override it to an exact value rather than a multiplier. For
and make fullscreen windows fully opaque regardless of other opacity rules: example, to set active and inactive opacity to 0.8, and make fullscreen windows
fully opaque regardless of other opacity rules:
```ini ```ini
windowrulev2 = opacity 0.8 override 0.8 override 1.0 override, ^(kitty)$ windowrulev2 = opacity 0.8 override 0.8 override 1.0 override, ^(kitty)$
@ -313,8 +315,9 @@ layerrule = rule, namespace
layerrule = rule, address layerrule = rule, address
``` ```
where `rule` is the rule and `namespace` is the namespace regex (find namespaces where `rule` is the rule and `namespace` is the namespace regex (find
in `hyprctl layers`) or `address` is an address in the form of `address:0x[hex]` namespaces in `hyprctl layers`) or `address` is an address in the form of
`address:0x[hex]`.
### Rules ### Rules

View file

@ -3,29 +3,35 @@ weight: 8
title: Workspace Rules title: 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 instance, you can define a workspace where all windows are drawn without borders
or gaps. or gaps.
For layout-specific rules, see the specific layout page. For example: For layout-specific rules, see the specific layout page. For example:
[Master Layout->Workspace Rules](../Master-Layout#workspace-rules) [Master Layout->Workspace Rules](../Master-Layout#workspace-rules).
### Workspace selectors ### Workspace selectors
Workspaces that have already been created can be targeted by workspace selectors, Workspaces that have already been created can be targeted by workspace
e.g. `r[2-4] w[t1]` selectors, e.g. `r[2-4] w[t1]`.
Selectors have props separated by a space. No spaces are allowed inside props themselves. Selectors have props separated by a space. No spaces are allowed inside props
themselves.
Props: Props:
- `r[A-B]` - ID range from A to B inclusive - `r[A-B]` - ID range from A to B inclusive
- `s[bool]` - Whether the workspace is special or not - `s[bool]` - Whether the workspace is special or not
- `n[bool]`, `n[s:string]`, `n[e:string]` - named actions. `n[bool]` -> whether a workspace is a named workspace, `s` and `e` are starts and ends with respectively - `n[bool]`, `n[s:string]`, `n[e:string]` - named actions. `n[bool]` ->
whether a workspace is a named workspace, `s` and `e` are starts and ends
with respectively
- `m[monitor]` - Monitor selector - `m[monitor]` - Monitor selector
- `w[(flags)A-B]`, `w[(flags)X]` - Prop for window counts on the workspace. A-B is an inclusive range, X is a specific number. Flags can be omitted. It can be `t` for tiled-only, `f` for floating-only, `g` to count groups instead of windows, and `v` to count only visible windows. - `w[(flags)A-B]`, `w[(flags)X]` - Prop for window counts on the workspace.
- `f[-1]`, `f[0]`, `f[1]`, `f[2]` - fullscreen state of the workspace. `-1`: no fullscreen, `0`: fullscreen, `1`: maximized, `2`, fullscreen without fullscreen state sent to the window. A-B is an inclusive range, X is a specific number. Flags can be omitted.
It can be `t` for tiled-only, `f` for floating-only, `g` to count groups
instead of windows, and `v` to count only visible windows.
- `f[-1]`, `f[0]`, `f[1]`, `f[2]` - fullscreen state of the workspace. `-1`: no
fullscreen, `0`: fullscreen, `1`: maximized, `2`, fullscreen without
fullscreen state sent to the window.
### Syntax ### Syntax

View file

@ -4,3 +4,79 @@ title: Configuring
sidebar: sidebar:
open: true open: true
--- ---
The config is located in `$XDG_CONFIG_HOME/hypr/hyprland.conf`. In most cases,
that maps to `~/.config/hypr/hyprland.conf`.
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 you don't have
one. You can find an example config
[here](https://github.com/hyprwm/Hyprland/blob/main/example/hyprland.conf).
By removing the line containing `autogenerated=1` you'll remove the yellow
warning.
The config is reloaded the moment you save it. However, you can use
`hyprctl reload` to reload the config manually.
Start a section with `name {` and end in `}` **_on separate lines!_**
{{< 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 toggleable / numerical options.
{{< /callout >}}
## Line style
Every config line is a command followed by a value.
```ini
COMMAND = VALUE
```
The command can be a variable, or a special keyword (described further in this
page)
The trailing spaces at the beginning and end of words are not necessary, and are
there only for legibility.
### Comments
Comments are started with the `#` character.
If you want to escape it (put an actual `#` and not start a comment) you can use
`##`. It will be turned into a single `#` that _will_ be a part of your line.
### Escaping errors
If you use plugins, you may want to ignore errors from missing options/keywords
so that you don't get an error bar before they are loaded. To do so, do this:
```ini
# hyprlang noerror true
bind = MOD, KEY, something, amogus
someoption = blah
# hyprlang noerror false
```
## Basic configuring
To configure Hyprland's options, animations, styling, etc. see
[Variables](./Variables).
## Advanced configuring
Some keywords (binds, curves, execs, monitors, etc.) are not variables but
define special behavior.
See all of them in [Keywords](./Keywords) and the sidebar.