Merge pull request #34 from NotAShelf/main

Adressing inconsistencies, mistakes and references
This commit is contained in:
Mihai Fufezan 2022-10-23 18:57:27 +03:00 committed by GitHub
commit 22e5e3c37f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
33 changed files with 616 additions and 381 deletions

29
LICENSE Normal file
View file

@ -0,0 +1,29 @@
BSD 3-Clause License
Copyright (c) 2022, vaxerski
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View file

@ -3,6 +3,12 @@
Welcome to the Hyprland Wiki! Here we store the wiki pages. They are automatically updated on the
website whenever a change occurs, within a reasonable timeframe. (usually 12 minutes)
# Contributing
## Contributing to the Wiki
Feel free to open an issue or a PR. Make sure to clearly state the reason for the change.
Feel free to open an issue or a PR if you feel anything is necessary.
Make sure to clearly state the reason for the changes. If you have questions regarding the wiki,
you should consider joining our [Discord Server](https://discord.gg/hQ9XvMUjjr) instead.
## License
This repository is licensed under the [BSD 3-Clause License](LICENSE).

View file

@ -1,7 +1,8 @@
## Table of contents
# Table of contents
{{< toc >}}
## General
# General
Animations are declared with the `animation` keyword.
@ -11,13 +12,6 @@ or
animation=NAME,ONOFF,SPEED,CURVE
```
for example:
```ini
animation=workspaces,1,8,default
animation=windows,1,10,myepiccurve,slide
```
`ONOFF` can be either 0 or 1, 0 to disable, 1 to enable.
`SPEED` is the amount of ds (1ds = 100ms) the animation will take
@ -27,11 +21,18 @@ animation=windows,1,10,myepiccurve,slide
`STYLE` (optional) is the animation style
The animations are a tree. If an animation is unset, it will inherit its
parent's values.
parent's values. See [the animation tree](#animation-tree).
_Animation tree:_
## Examples
```ini
animation=workspaces,1,8,default
animation=windows,1,10,myepiccurve,slide
```
## Animation tree
```txt
global
↳ windows - styles: slide, popin
↳ windowsIn - window open
@ -48,18 +49,7 @@ global
↳ specialWorkspace - styles: same as workspaces
```
## Extras
For animation style `popin` in `windows`, you can specify a minimum percentage
to start from. For example:
```ini
animation=windows,1,8,default,popin 80%
```
will make the animation 80% -> 100% of the size.
## Curves
# Curves
Defining your own Bezier curve can be done with the `bezier` keyword:
@ -69,10 +59,22 @@ bezier=NAME,X0,Y0,X1,Y1
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
[here, on cssportal.com](https://www.cssportal.com/css-cubic-bezier-generator/).
[here, on cssportal.com](https://www.cssportal.com/css-cubic-bezier-generator/), but
if you want to instead choose from a list of beziers, you can check out [easings.net](https://easings.net).
Example curve:
## Example
```ini
bezier=overshot,0.05,0.9,0.1,1.1
```
# Extras
For animation style `popin` in `windows`, you can specify a minimum percentage
to start from. For example:
```ini
animation=windows,1,8,default,popin 80%
```
will make the animation 80% -> 100% of the size.

View file

@ -1,8 +1,8 @@
# Table of Contents
## Table of contents
{{< toc >}}
## Basic
# Basic
```ini
bind=MODS,key,dispatcher,params
@ -18,14 +18,16 @@ will bind opening firefox to <key>SUPER</key> + <key>SHIFT</key> + <key>Q</key>
{{< hint type=tip >}}
For binding keys without a modkey, leave it empty:
```ini
bind=,Print,exec,grim
```
{{< /hint >}}
*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).*
_The dispatcher list can be found in [Dispatchers](../Dispatchers)._
## Uncommon syms / binding with a keycode
@ -47,9 +49,10 @@ bind=SUPER,28,exec,amongus
Will bind <key>SUPER</key> + <key>T</key>. (<key>T</key> is keycode 28.) - You
can also use `xev` or `wev` to find keycodes.
## Misc
# Misc
## Unbind
### Unbind
You can also unbind with `unbind`, e.g.:
```ini
@ -58,7 +61,12 @@ unbind=SUPER,O
May be useful for dynamic keybindings with `hyprctl`.
### Mouse buttons
```sh
hyprctl keyword unbind SUPER,O
```
## Mouse buttons
You can also bind mouse buttons, by prefacing the mouse keycode with `mouse:`,
for example:
@ -68,7 +76,8 @@ bind=SUPER,mouse:272,exec,amongus
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
activating mod) and the `r` flag, e.g.:
@ -76,23 +85,29 @@ activating mod) and the `r` flag, e.g.:
bindr=SUPERALT,Alt_L,exec,amongus
```
### Mouse wheel
## Mouse wheel
You can also bind the mouse wheel with `mouse_up` and `mouse_down`:
```ini
bind=SUPER,mouse_down,workspace,e-1
```
(control the reset time with `binds:scroll_event_delay`)
### Switches
## Switches
Useful for binding e.g. the lid close/open event:
```
```ini
bindl=,switch:[switch name],exec,swaylock
```
check out your switches in `hyprctl devices`.
## Bind flags
# Bind flags
bind supports flags in this format:
`bind` supports flags in this format:
```ini
bind[flags]=...
@ -104,47 +119,64 @@ e.g.:
bindrl=MOD,KEY,exec,amongus
```
flags:
Flags:
```ini
l -> locked, aka. works also when an input inhibitor is active
l -> locked, aka. works also when an an input inhibitor (e.g. a lockscreen) is active
r -> release, will trigger on release of a key
e -> repeat, will repeat when held.
m -> mouse, see below
```
## Mouse Binds
Example Usage:
```ini
# Example volume button that allows press and hold
binde=, XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
# Example volume button that will activate even while an input inhibitor is active
bindl=, XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
# Start wofi opens wofi on first press, closes it on second
bindr=SUPER, SUPER_L, exec, pkill wofi || wofi
# See Mouse Binds section for bindm usage
```
# Mouse Binds
Mouse binds are binds that heavily rely on a mouse, usually its movement.
They will have one less arg, and look for example like this:
```
```ini
bindm=ALT,mouse:272,movewindow
```
this will create a bind with <key>ALT</key> + <key>LMB</key> to move the window
with your mouse.
*Available mouse binds*:
_Available mouse binds_:
| Name | Description |
| -----|------------ |
| movewindow | moves the active window |
| resizewindow | resizes the active window |
*Common mouse buttons' codes:*
```
_Common mouse buttons' codes:_
```txt
LMB -> 272
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 >}}
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
# Binding mods
You can bind a mod alone like this:
@ -152,21 +184,22 @@ You can bind a mod alone like this:
bindr=ALT,Alt_L,exec,amongus
```
## Global Keybinds
# Global Keybinds
Yes, you heard this right, Hyprland does support global keybinds for ALL apps,
including OBS, Discord, Firefox, etc.
See the `pass` dispatcher for keybinds.
See the [`pass` dispatcher](./Dispatchers/#dispatchers) for keybinds.
e.g.:
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.
I've set the "Start/Stop Recording" keybind in OBS to <key>SUPER</key> +
<key>F10</key>, and I want it to be global.
Simply add
Simple, add
```ini
bind = SUPER,F10,pass,^(com\.obsproject\.Studio)$
```
to your config and you're done.
`pass` will pass the PRESS and RELEASE events by itself, no need for a `bindr`.
@ -184,12 +217,12 @@ keybind", otherwise passing from a different XWayland app may not work.
It works flawlessly with all native Wayland applications though.
*Side note*: **OBS** on Wayland really dislikes keybinds with modifiers. If
_Side note_: **OBS** on Wayland really dislikes keybinds with modifiers. If
they don't work, try removing mods and binding them to e.g. <key>F1</key>.
Combining this with a submap should yield neat and usable results.
{{< /hint >}}
## Submaps
# Submaps
If you want keybind submaps, for example if you press <key>ALT</key> +
<key>R</key>, you can enter a "resize" mode, resize with arrow keys, and leave
@ -221,7 +254,7 @@ submap=reset
this case, `escape`)
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. I warned you.
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
and close the submap, like so:

View file

@ -1,16 +1,16 @@
The config is located in `~/.config/hypr/hyprland.conf`.
I recommend you copy the `examples/hyprland.conf`, but you can also edit the
It is recommended to copy the `examples/hyprland.conf`, but you can also edit the
autogenerated config.
By removing the line `autogenerated=1` you'll remove the yellow warning.
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 >}}
The default config is *very* barebones. Please refer to this wiki page and the pages
The default config is _very_ barebones. Please refer to this wiki page and the pages
linked further down here for full configuration instructions.
**Make sure to read the "Variables" page as well**. It covers all the
@ -19,7 +19,7 @@ toggleable / numerical options.
# Line style
every config line is a command followed by a value.
Every config line is a command followed by a value.
```ini
COMMAND=VALUE
@ -45,7 +45,7 @@ To configure the "options" of Hyprland, animations, styling, etc. see
# Advanced configuring
Some keywords (binds, curves, execs, monitors, etc.) arent variables but define
Some keywords (binds, curves, execs, monitors, etc.) are not variables but define
special behaviour.
See all of them in [Keywords](../Keywords) and the sidebar.

View file

@ -1,10 +1,11 @@
# Table of contents
{{< toc >}}
Please keep in mind some layout-specific dispatchers will be listed in the
layout pages (See the sidebar).
## Parameter explanation
# Parameter explanation
| Param type | Description |
| ---------- | ----------- |
@ -16,7 +17,7 @@ layout pages (See the sidebar).
| floatdelta | a float value delta, e.g `-0.2` or `+0.2`. |
| workspaceopt | see below. |
# Dispatchers:
# List of Dispatchers
| Dispatcher | Description | Params |
| ---------- | ----------- | ------ |
@ -58,9 +59,10 @@ layout pages (See the sidebar).
it is NOT recommended to set DPMS with a keybind directly, as it
might cause undefined behavior. Instead, consider something like
```
```ini
bind = MOD,KEY,exec,sleep 1 && hyprctl dispatch dpms off
```
{{< /hint >}}
# Workspaces
@ -86,19 +88,19 @@ You have seven choices:
`movetoworkspace`. Any other dispatcher will result in undocumented behavior.
{{< /hint >}}
## Special Workspace
# Special Workspace
Special workspace is what is called a "scratchpad" in some other places. A
workspace that you can toggle on/off on any monitor.
{{< hint >}}
You cannot have floating windows in the Special workspace. Making a window floating
will send it to the currently active *real* workspace.
will send it to the currently active _real_ workspace.
{{< /hint >}}
## Workspace options
```
# Workspace options
```txt
allfloat -> makes all new windows floating (also floats/unfloats windows on toggle)
allpseudo -> makes all new windows pseudo (also pseudos/unpseudos on toggle)
```

View file

@ -7,7 +7,7 @@ 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
top-and-bottom. You can make them permanent by enabling `preserve_split`.
## Grouped (tabbed) windows
# Grouped (tabbed) windows
Dwindle allows you to make a group with the `togglegroup` bind dispatcher, and
cycle through it with `changegroupactive`.
@ -44,7 +44,7 @@ category name: `dwindle`
| no_gaps_when_only | whether to apply gaps when there is only one window on a workspace, aka. smart gaps. | bool | false |
| use_active_for_splits | whether to prefer the active window or the mouse position for splits | bool | true |
## Bind Dispatchers
# Bind Dispatchers
| dispatcher | description | params |
|---|---|---|

View file

@ -0,0 +1,64 @@
As [previously mentioned](../Getting-Started/Quick-start/#wrapping-the-launcher-recommended), it's
useful using a wrapper to launch Hyprland. Whether you start Hyprland through TTY or a Display
Manager, it is always suggested to use one. As such, you can pass certain environment
variables to improve Wayland compatibility, or simply change certain aspects of your desktop.
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.
# XDG Specifications
- `XDG_CURRENT_DESKTOP=Hyprland`
- `XDG_SESSION_TYPE=wayland`
- `XDG_SESSION_DESKTOP=Hyprland`
XDG specific environment variables are often detected through portals and applications that may
set those for you, however it is a good idea to provide them in your wrapper script as a fail-safe.
# QT Variables
- `QT_AUTO_SCREEN_SCALE_FACTOR=1` - [(From the QT documentation)](https://doc.qt.io/qt-5/highdpi.html)
enables automatic scaling, based on the monitor's pixel density
- `QT_QPA_PLATFORM="wayland;xcb"` - Tell QT applications to use the Wayland 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
To force GBM as a backend, set the following environment variables:
- `GBM_BACKEND=nvidia-drm`
- `__GLX_VENDOR_LIBRARY_NAME=nvidia`
> 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
> See [Archwiki Hardware Acecleration Page](https://wiki.archlinux.org/title/Hardware_video_acceleration)
> for details and necessary values before setting this variable.
- `__GLX_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.
- `__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.
# Toolkit Backend Variables
- `SDL_VIDEODRIVER=wayland` - Run SDL2 applications on Wayland. Remove or set to x11 if games that provide older versions of SDL cause
compatibility issues
- `_JAVA_AWT_WM_NONEREPARENTING=1` - Fix possibly broken Java applications. Set to 1 until Wakefield is available.
- `CLUTTER_BACKEND="wayland"` - Clutter package already has wayland enabled, this variable will force Clutter applications
to try and use the Wayland backend
- `GDK_BACKEND` - Force backend for wayland-enabled GTK3 and GTK4 backends. Available options are "wayland" or "x11". If GTK XWayland
applications cause issues when set to "wayland", try "wayland,x11"
# Theming Related Variables
- `GTK_THEME` - Set a GTK theme manually, for those who want to avoid appearance tools lxappearance or nwg-look
- `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.

View file

@ -7,12 +7,12 @@ The second, socket2, sends events for certain changes / actions and can be used
to react to different events. See its description
[here](../../IPC/).
## Example script
# Example script
This bash script will change the outer gaps to 20 if the currently focused
monitor is DP-1, and 30 otherwise.
```bash
```sh
#!/bin/sh
function handle {

View file

@ -1,10 +1,13 @@
This page documents all of the more advanced config options.
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.
See the sidebar for more keywords to control binds, animations, monitors, et cetera.
{{< hint type=important >}}
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
otherwise in a specific section*:
leave one of them empty, you cannot reduce the number of commas, _unless told
otherwise in a specific section_:
```ini
three_param_keyword = A, B, C # OK
@ -19,6 +22,7 @@ three_param_keyword = A, B, # OK
{{< /hint >}}
# Table of contents
{{< toc format=html >}}
# Executing
@ -26,21 +30,10 @@ three_param_keyword = A, B, # OK
you can execute a shell script on startup of the compositor or on each time it's
reloaded.
{{< hint type=info >}}
**Note:** The issue below was fixed in upstream. (since *after* v0.15.0beta)
There currently is a bug with the exec that makes the executed app
unable to die if killed, use `SIGKILL` (e.g. `killall name -9`) or launch from a
script (`exec-once=~/myscript.sh` and do `myapp &` in the script)
{{< /hint >}}
`exec-once=command` will execute only on launch
`exec=command` will execute on each reload
# Defining variables
You can define your own custom variables like this:
@ -103,7 +96,7 @@ device:name {
}
```
the `name` can be easily obtained by doing `hyprctl devices`.
The `name` can be easily obtained by doing `hyprctl devices`.
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**:
@ -111,6 +104,7 @@ Inside of it, put your config options. All options from the `input` category
force_no_accel, follow_mouse, float_switch_override_focus
Properties that change names:
```plain
touchdevice:transform -> touch_transform
touchdevice:output -> touch_output
@ -126,14 +120,16 @@ device:ROYUAN Akko Multi-modes Keyboard-B {
}
```
*remember about the space after the end of the device's name (before the `{`)!*
_remember about the space after the end of the device's name (before the `{`)!_
{{< hint type=tip >}}
With hyprctl, the category's spaces get turned into `-`, and everything is
lowercase. So, for `hyprctl` calls, do for example:
```sh
hyprctl keyword device:royuan-akko-multi-modes-keyboard-b:kb_layout us
```
{{< /hint >}}
# Wallpapers
@ -142,8 +138,9 @@ 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.
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).
# Blurring layerSurfaces
@ -159,7 +156,7 @@ blurls=NAMESPACE
where `NAMESPACE` is the namespace of the layerSurface. (You can get it from
`hyprctl layers`)
to remove a namespace from being blurred (useful in dynamic situations) use:
To remove a namespace from being blurred (useful in dynamic situations) use:
```ini
blurls=remove,NAMESPACE

View file

@ -8,13 +8,13 @@ their size.
![master1](https://user-images.githubusercontent.com/43317083/179357849-321f042c-f536-44b3-9e6f-371df5321836.gif)
You can, however, resize the master window.
However, you can resize the master window.
![master2](https://user-images.githubusercontent.com/43317083/179357863-928b0b5a-ff10-4edc-aa76-3ff88c59c980.gif)
# Config
*category name `master`*
_category name `master`_
| name | description | type | default |
|---|---|---|---|---|
@ -23,7 +23,7 @@ You can, however, resize the master window.
| new_on_top | whether a newly open window should be on the top of the stack | bool | false |
| no_gaps_when_only | whether to apply gaps when there is only one window on a workspace, aka. smart gaps. | bool | false |
## Dispatchers
# Dispatchers
`layoutmsg` params:
@ -41,4 +41,5 @@ example usage:
```ini
bind=MOD,KEY,layoutmsg,cyclenext
```
{{< /hint >}}

View file

@ -1,10 +1,11 @@
## Table of contents
# Table of contents
{{< toc format=html >}}
## General
# General
The general config of a monitor looks like this
```ini
monitor=name,resolution,offset,scale
```
@ -74,7 +75,7 @@ To disable a monitor, use
monitor=name,disable
```
## Custom reserved area
# Custom reserved area
If your workflow requires custom reserved area, you can add it with
@ -86,7 +87,7 @@ 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
only use one of these rules per monitor in the config.
## Mirrored displays
# Mirrored displays
If you want to mirror a display, add a `,mirror,[NAME]` at the end of the monitor
rule, examples:
@ -101,12 +102,12 @@ 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 occur on non-matching resolutions.
## Rotating and the default workspace
# Rotating and the default workspace
{{< hint type=important >}}
The monitor transform and workspace keywords depend on a monitor rule set
specifically for the targeted monitor, and ***MUST*** be after it.
specifically for the targeted monitor, and **_MUST_** be after it.
{{< /hint >}}
@ -142,15 +143,17 @@ flipped + 180 degrees -> 6
flipped + 270 degrees -> 7
```
## Binding workspaces to a monitor
# Binding workspaces to a monitor
A workspace can be bound to a monitor, meaning by default it will ALWAYS open
on the selected monitor. You can do this with
```ini
wsbind=WORKSPACE,MONITOR
```
for example:
```ini
wsbind=5,DP-1
wsbind=name:secret,DP-2

View file

@ -1,6 +1,7 @@
## Switchable keyboard layouts
# Switchable keyboard layouts
The easiest way to accomplish this is to set this using XKB settings, for example:
```
input {
kb_layout = us,pl
@ -16,7 +17,7 @@ For example: `us,ua` -> config binds would be e.g. `SUPER, A`, while on `ua,us`
{{< /hint >}}
## Disabling keybinds with one master keybind
# Disabling keybinds with one master keybind
If you want to disable all keybinds with another keybind (make a kaybind toggle
of sorts) you can just use a submap with only a keybind to exit it.
@ -28,11 +29,12 @@ bind=MOD,KEY,submap,reset
submap=reset
```
## Window Dancing
# Window Dancing
Some XWayland games like Rhythm Doctor and Friday Night Funkin' mods like to move the windows by themselves, but that often doesn't work by default.
Some XWayland games like Rhythm Doctor and Friday Night Funkin' mods like to move
the windows by themselves, but that often doesn't work by default.
To configure this, I'll be using Rhythm Doctor as an example.
For example, if you want to configure Rhythm Doctor, you'd have to:
1. Set input rules
```ini
@ -40,7 +42,6 @@ input {
# ...
follow_mouse=0
float_switch_override_focus=0
}
```

View file

@ -8,11 +8,11 @@ the terminal.
If it's not, go to the repo root and `/hyprctl`. Issue a `make all` and then
`sudo cp ./hyprctl /usr/bin`.
# Commands
# Using Hyprctl
{{< hint type=warning >}}
*hyprctl* calls will be dispatched by the compositor *synchronously*,
_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.
@ -21,7 +21,7 @@ For live event handling, see the [socket2](../../IPC/).
{{< /hint >}}
## Control
## Commands
### Dispatch
@ -31,7 +31,7 @@ An arg has to be present, for dispatchers without parameters it can be anything.
Examples:
```
```sh
hyprctl dispatch exec kitty
hyprctl dispatch pseudo x
@ -39,13 +39,15 @@ hyprctl dispatch pseudo x
Returns: `ok` on success, an error message on fail.
See [Dispatchers](./Dispatchers) for a list of dispatchers.
### Keyword
issue a `keyword` to call a config keyword dynamically.
Examples:
```
```sh
hyprctl keyword bind SUPER,O,pseudo
hyprctl keyword general:border_size 10
@ -73,13 +75,13 @@ params: theme and size
e.g.:
```
```sh
hyprctl setcursor Bibata-Modern-Classic 24
```
## Info
```
```sh
version - prints the hyprland version, meaning flags, commit and branch of build.
monitors - lists all the outputs with their properties
workspaces - lists all workspaces with their properties
@ -91,28 +93,40 @@ splash - prints the current random splash
getoption [option] - gets the config option status (values)
```
# Batch
For the getoption command, the option name should be written as `section:option`,
e.g.:
```sh
hyprctl getoption general:border_size
# For nested sections:
hyprctl getoption input:touchpad:disable_while_typing
```
See [Variables](./Variables) for section and options you can use.
## Batch
You can also use `--batch` to specify a batch of commands to execute
e.g.
```
```sh
hyprctl --batch "keyword general:border_size 2 ; keyword general:gaps_out 20"
```
`;` separates the commands
# Flags
## Flags
You can specify flags for the request like this:
```
```sh
hyprctl -j monitors
```
flag list:
```
```txt
j -> output in JSON
```

View file

@ -1,11 +1,10 @@
For basic syntax info, see
[Configuring Hyprland](../Configuring-Hyprland).
For basic syntax info, see [Configuring Hyprland](../Configuring-Hyprland).
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
the layout pages and not here. (See the Sidebar)
the layout pages and not here. (See the Sidebar for Dwindle and Master layouts)
# Variable types
@ -21,7 +20,7 @@ the layout pages and not here. (See the Sidebar)
{{< hint type=info >}}
***Colors:***
**_Colors:_**
You have 3 options:
@ -31,8 +30,7 @@ rgb(), e.g. `rgb(b3ff1a)`
legacy, e.g. `0xeeb3ff1a` -> ARGB order
***Mod list:***
**_Mod list:_**
```ini
SHIFT CAPS CTRL/CONTROL ALT MOD2 MOD3 SUPER/WIN/LOGO/MOD4 MOD5
@ -64,6 +62,7 @@ Prefer using `input:sensitivity` over `general:sensitivity` to avoid bugs, espec
{{< /hint >}}
## Decoration
| name | description | type | default |
|---|---|---|---|---|
| rounding | rounded corners' radius (in layout px) | int | 0 |
@ -103,7 +102,7 @@ Using `blur_new_optimizations` with an animated wallpaper may actually increase
{{< /hint >}}
## Animations
# Animations
| name | description | type | default |
|---|---|---|---|---|
@ -115,6 +114,8 @@ _[More about Animations](../Animations)._
{{< /hint >}}
# Input
## Input
| name | description | type | default |
@ -138,7 +139,8 @@ _[More about Animations](../Animations)._
| scroll_method | set the libinput scroll method. Can be one of `2fg` (2 fingers), `edge`, `on_button_down`, `no_scroll`. | str | \[EMPTY\]
{{< hint type=info >}}
### Follow Mouse
## Follow Mouse
- 0 - disabled
- 1 - full
@ -151,7 +153,7 @@ detached from the keyboard like in 2.
For switchable keyboard configs, take a look at [the uncommon tips & tricks page entry](../Uncommon-tips--tricks/#switchable-keyboard-layouts).
{{< /hint >}}
### Touchpad
## Touchpad
_Subcategory `input:touchpad:`_
@ -167,7 +169,8 @@ _Subcategory `input:touchpad:`_
{{< hint type=important >}}
A subcategory is a nested category:
```
```ini
input {
# ...
# ...
@ -182,7 +185,7 @@ input {
Doing `input:touchpad {` is **invalid**!
{{< /hint >}}
### Touchdevice
## Touchdevice
_Subcategory `input:touchdevice:`_
@ -191,11 +194,11 @@ _Subcategory `input:touchdevice:`_
| transform | transform the input from touchdevices. The possible transformations are the same as [those of the monitors](../Monitors/#rotating-and-the-default-workspace) | int | 0 |
| output | the output to bind touch devices. Empty means unset and will use the current / autodetected. | string | \[EMPTY\] |
### Per-device input config
## Per-device input config
Described [here](../Keywords#per-device-input-configs).
## Gestures
# Gestures
| name | description | type | default |
|---|---|---|---|---|
@ -207,7 +210,7 @@ Described [here](../Keywords#per-device-input-configs).
| workspace_swipe_cancel_ratio | (0.0 - 1.0) how much the swipe has to proceed in order to commence it. (0.7 -> if > 0.7 * distance, switch, if less, revert) | float | 0.5 |
| workspace_swipe_create_new | whether a swipe right on the last workspace should create a new one. | bool | true |
## Misc
# Misc
| name | description | type | default |
|---|---|---|---|---|
@ -224,7 +227,7 @@ Described [here](../Keywords#per-device-input-configs).
| swallow_regex | The *class* regex to be used for windows that should be swallowed (usually, a terminal) | str | \[EMPTY\] |
| focus_on_activate | Whether Hyprland should focus an app that requests to be focused (an `activate` request) | bool | true |
## Binds
# Binds
| name | description | type | default |
|---|---|---|---|---|
@ -233,7 +236,7 @@ Described [here](../Keywords#per-device-input-configs).
| 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 |
## Debug
# Debug
{{< hint type=warning >}}
@ -248,7 +251,7 @@ Only for developers.
| disable_logs | self-explanatory | bool | false |
| disable_time | disables time logging | bool | true |
## More
# More
There are more config options described in other pages, which are layout- or
circumstance-specific. See the sidebar for more pages.

View file

@ -1,43 +1,45 @@
## Table of contents
# Table of contents
{{< toc >}}
## Window Rules V1
# Window Rules V1
You can set window rules for various actions. These are applied on window open!
You can set window rules to achieve different behaviours from the active container.
## Syntax
```ini
windowrule=RULE,WINDOW
```
`RULE` is a rule (and a param if applicable)
`WINDOW` is a RegEx, either:
- plain regex (for matching a window class)
- `RULE` is a rule (and a param if applicable)
- `WINDOW` is a RegEx, either:
- plain RegEx (for matching a window class);
- `title:` followed by a regex (for matching a window's title)
you can get both by inspecting `hyprctl clients`
Examples:
### Examples
```ini
windowrule=float,^(kitty)$
windowrule=move 0 0,title:^(Firefox)(.*)$
```
## Window Rules V2
# Window Rules V2
In order to allow more flexible rules, while also not breaking compatibility with the above
rule system, window rules v2 were implemented.
In order to allow more flexible rules, while retaining compatibility with the above
rule system, window rules V2 were implemented.
In V2, you are allowed to match multiple variables.
the `RULE` field is unchanged, but in the `WINDOW` field, you can put regexes for multiple values like so:
the `RULE` field is unchanged, but in the `WINDOW` field, you can put regexes
for multiple values like so:
```ini
windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
```
For now, the supported fields are:
```ini
class - class regex
title - title regex
@ -45,7 +47,14 @@ xwayland - 0/1
floating - 0/1
```
Keep in mind you do *not* need to define all of them, but you need to define at least one.
Keep in mind that you _have_ to declare at least one field, but not all.
{{< hint type=tip >}}
To get more information about a window's class, title, XWayland status or its size,
you can use `hyprctl clients`.
{{< /hint >}}
## Rules
@ -75,20 +84,21 @@ Keep in mind you do *not* need to define all of them, but you need to define at
| pin | pins the window *note: floating only* |
| noanim | disables the animations for the window |
*Examples*:
### Example Rules
```ini
windowrule = move 100 100,^(kitty)$
windowrule = animation popin,^(kitty)$
windowrule = noblur,^(firefox)$
```
### Notes
{{< hint type=tip >}}
Opacity is always a PRODUCT of all opacities. E.g. active_opacity to
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 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. E.g. `0.5 * 2 = 1`, and it will be fine, `0.5 * 4` will cause
graphical glitches.
{{< /hint >}}

View file

@ -3,7 +3,7 @@ compositors.
# HiDPI XWayland
Currently, XWayland on HiDPI screens looks pixelated/blurry, due to Xorg's
XWayland currently looks pixelated/blurry on HiDPI screens, due to Xorg's
inability to scale.
There are attempts to add a standard scaling mechanism, such as [MR 733](https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/733).
@ -27,10 +27,13 @@ and [this commit](https://gitlab.freedesktop.org/wlroots/wlroots/-/commit/185950
programs crash Hyprland.
3. Add this line to your configuration:
```ini
exec-once=xprop -root -f _XWAYLAND_GLOBAL_OUTPUT_SCALE 32c -set _XWAYLAND_GLOBAL_OUTPUT_SCALE 2
```
and configure toolkits to scale using their specific mechanisms, such as
```sh
export GDK_SCALE=2
export XCURSOR_SIZE=32

View file

@ -1,12 +1,13 @@
## PR Requirements
# PR Requirements
- Clean, not hacky code
- Described changes and *why* they were there
- Described changes and _why_ they were there
- Following the style (see below)
## Code Style
Hyprland's code style:
```cpp
void myFunction(int arg) {
@ -58,7 +59,9 @@ public:
> 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:
```cpp
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.

View file

@ -5,21 +5,21 @@ PR, code styling and code FAQs are [here](./PR-Guidelines)
For issues, please see
[the guidelines](https://github.com/hyprwm/Hyprland/blob/main/docs/ISSUE_GUIDELINES.md)
# Build in debug mode
## Build in debug mode
## Required packages
### Required packages
`xcb` stuff, check with your local package provider.
`wayland` - of course.
*Arch*:
_Arch_:
`yay -S gdb ninja gcc cmake libxcb xcb-proto xcb-util xcb-util-keysyms libxfixes libx11 libxcomposite xorg-xinput libxrender pixman wayland-protocols cairo pango seatd`
(If any are missing hmu)
## Recommended, CMake
### Recommended, CMake
Install the VSCode C/C++ and CMake Tools extensions and use that.
@ -29,7 +29,7 @@ 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
`(gdb) Launch`.
## Custom, CLI
### Custom, CLI
`make debug`
@ -48,22 +48,22 @@ meaning you'll be unable to build any other wlroots compositor
without a wlroots reinstall.
{{< /hint >}}
# Running
## Running
when running Hyprland in Debug mode, the config is
`~/.config/hypr/hyprlandd.conf` and the logs can be found at
`/tmp/hypr/[INSTANCE SIGNATURE]/hyprlandd.conf`.
# Logs, dumps, etc.
## Logs, dumps, etc
You can use the logs and the GDB debugger, but running Hyprland in debug compile
as a driver and using it for a while might give more insight to the more random
bugs.
When Hyprland crashes, use `coredumpctl` and then `coredumpctl info PID` to see
the dump.
the dump. See the instructions below for more info about `coredumpctl`.
I also recommend the amazing command
You can also use the amazing command
```sh
watch -n 0.1 "cat /tmp/hypr/$(echo HYPRLAND_INSTANCE_SIGNATURE)/hyprland.log | grep -v \"arranged\" | tail -n 40"
@ -71,7 +71,11 @@ watch -n 0.1 "cat /tmp/hypr/$(echo HYPRLAND_INSTANCE_SIGNATURE)/hyprland.log | g
for live logs. (replace `hyprland` with `hyprlandd` for debug builds)
# Nesting Hyprland
### How do I get a coredump?
See [`ISSUE_GUIDELINES.md`](https://github.com/hyprwm/Hyprland/blob/main/docs/ISSUE_GUIDELINES.md).
## Nesting Hyprland
Hyprland can run nested in a window. For that, make sure you did the following:
@ -79,8 +83,7 @@ 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
(`hyprlandd.conf`)
- set a resolution and are not using `preferred`
- made sure no keybinds overlap (I recommend using 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 will probably be completely garbled. To fix that,
in the parent, do a `hyprctl clients` and note the size of the window. Make sure

View file

@ -1,4 +1,4 @@
## Getting the log
# Getting the log
If you are in a TTY, and the hyprland session that crashed was the last one you
launched, the log will be printed with
@ -15,7 +15,7 @@ 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
```
## Crashes at launch
# Crashes at launch
Diagnose the issue by what is in the log:
@ -31,14 +31,13 @@ Diagnose the issue by what is in the log:
in the first point.
- failing on `Hyprland` -> report an issue.
## Crashes not at launch
# Crashes not at launch
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
issue on GitHub.

View file

@ -1,7 +1,8 @@
 
# Table of Contents
{{< toc format=html >}}
### Nothing renders / screen is empty / crash on opening first app
# Nothing renders / screen is empty / crash on opening first app
Possible causes:
@ -10,121 +11,109 @@ Possible causes:
Use something like `qt5ct` (QT) and `lxappearance` (GTK) (\*for GTK you can also
set 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
[Installation Page](../../Getting-Started/Installation) and
try compiling with LEGACY_RENDERER
*For more info about bugs and crashes, see this*
*[wiki page](../../Crashes-and-Bugs)*
_For more info about bugs and crashes, see this_
_[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
to my tips on other pages. Use the `WLR_NO_HARDWARE_CURSORS=1` environment
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 Radeon graphics - unfortunately, it's a bug in wlroots, and I can't
do much about it other than wait for the wlroots devs to fix it:
For Radeon graphics - unfortunately, it's a bug in wlroots, and not much
can be done other than waiting for the wlroots devs to fix it:
[https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3451](https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3451)
For Nvidia graphics - unfortunately, it's a wlroots issue as well, most likely due to Nvidia's
lack of support and proprietary drivers.
There is a way to fix it that *might* work for you though:
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,
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.
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 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.
### How do I screenshot?
# How do I screenshot?
Install `grim-git` and `slurp`
Install `grim` and `slurp`
Use a keybind (or execute) `grim -g $(slurp)`, select a region. A screenshot
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
GitHub pages).
For a more complete utility, try our own
For a more complete utility, try our own screenshotting utility:
[Grimblast](https://github.com/hyprwm/contrib).
### Screenshare / OBS no worky!
For recording videos, wf-recorder or OBS Studio could be used.
# Screenshare / OBS no worky
Check [Screensharing](../Useful-Utilities/Screen-Sharing).
### How do I change my wallpaper?
# How do I change my wallpaper?
See [Wallpapers](../Useful-Utilities/Wallpapers).
### My workspace (2, 3, or any other) is like... bugged?
You did the below, unknowingly.
### 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.
### How heavy is this?
# How heavy is this?
Not that much heavier than Xorg. If you want maximum performance, consider
turning off the blur and animations.
### Blur makes my GPU cry :(
You probably forgot to turn on `decoration:blur_new_optimizations`. Thank me
later.
### My monitor no worky!
# My monitor no worky
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
`wlr-randr --dryrun`
### How do I get a coredump?
# How do I update?
*These instructions are ONLY for systemd. If you use anything else, you should
know what you're doing.*
Open a terminal where you cloned the repo.
```bash
git pull
sudo make clear
sudo make cleaninstall
```
Launch `coredumpctl` in a terminal. Press <key>END</key> on the keyboard to go
to the end. Note the **last** (the one furthest to the bottom) crash that has
`/usr/bin/Hyprland` as an executable. Remember the PID of it (the first number
after the date in a given line) exit (<key>Ctrl</key>+<key>C</key>) type
`coredumpctl info PID` where `PID` is the remembered PID. Send the entire thing
as a file.
If you are using the AUR (hyprland-git) package, you
will need to cleanbuild to update the package. Paru
has been problematic with updating before, use Yay.
### How do I update?
open a terminal where you cloned the repo.
`git pull && sudo make clear && sudo make install`
### Waybar popups render behind the windows??
You have misconfigured Waybar. Make sure the `layer` in the waybar config is set to `top`, and not `bottom`.
### How do I screen lock?
# How do I screen lock?
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?
Use a tool like for example `lxappearance` to change the GTK cursor.
After that, add `exec-once=hyprctl setcursor [THEME] [SIZE]` to your config and
restart Hyprland.
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 in your wrapper.
Alternatively, change the config files manually according to the
[XDG specification (Arch Wiki link)](https://wiki.archlinux.org/title/Cursor_themes#Configuration).
@ -136,24 +125,21 @@ all good!
If it still doesn't work...
### GTK Settings no work / whatever!
# 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)
### My \[program name\] is freezing!
# My \[program name\] is freezing
Make sure you have a notification daemon running, for example `dunst`. Autostart
it with the `exec-once` keyword.
### I want to use Waybar, but the workspaces don't work!
# Waybar workspaces no worky???
Check [Status bars](../Useful-Utilities/Status-Bars).
Waybar has a set of caveats or settings that you need to be aware of. See
[Status bars](../Useful-Utilities/Status-Bars) for solutions.
### Waybar doesn't show the active workspace!
Use the style for `#workspaces button.active`
### 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 setup a session start
script to open a bunch of applications on various workspaces. The following
@ -181,7 +167,7 @@ exec-once=cleanup_after_start.sh
where `cleanup_after_start.sh` script contains:
```sh
```bash
sleep 10
hyprctl keyword windowrule "workspace unset,kitty"
hyprctl keyword windowrule "workspace unset,Subl"
@ -191,7 +177,7 @@ hyprctl keyword windowrule "workspace unset,firefox"
in `sleep 10`, the 10 seconds is of course only a suggestion.
### 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
following:
@ -204,7 +190,7 @@ exec-once=handle_monitor_connect.sh
where `handle_monitor_connect.sh` is: (example)
```sh
```bash
#!/bin/sh
function handle {
@ -223,29 +209,32 @@ if you want workspaces 1 2 4 5 to go to monitor 1 when connecting it.
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)
to configure your tablet. In the future it will be supported in the config.
Until then, OTD.
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_
```ini
exec-once=dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
```
and
```ini
exec-once=systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
```
Make sure that your portals launch *after* this gets executed. For some people,
Make sure that your portals launch _after_ this gets executed. For some people,
they might launch before that has happened.
In such cases, a script like this:
```sh
```bash
#!/bin/bash
sleep 4
killall xdg-desktop-portal-wlr
@ -254,19 +243,15 @@ killall xdg-desktop-portal
sleep 4
/usr/lib/xdg-desktop-portal &
```
launched with `exec-once` should fix all issues. Adjust the sleep durations to taste.
### My cursor in QT apps is too big!
The QT cursor size can be fixed by setting the envvar `XCURSOR_SIZE=24`. You
should probably add it to your exported envvars.
### How do I export envvars for Hyprland?
# How do I export envvars for Hyprland?
As with any Display Server, Xorg included, you should probably make a script to
launch it, for example:
```ini
```bash
export AMONG_US=1
exec Hyprland
```
@ -274,31 +259,31 @@ exec Hyprland
and launch that.
For Display Manager users, you can replace the `exec` entry in
the `.desktop` file to point to your script.
the `.desktop` file to point to your script. You are recommended
to use absolute paths, such as `/home/username/Script` instead of `~/Script`
### I get random white flashes!
# I get random white flashes
Try disabling VFR with `misc:no_vfr=1`.
### 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?
I assume you already have `damage_tracking` on full. If you don't, do it. It's
I assume you already have `damage_tracking` on full. If you don't, change it. It's
heavily advised to use `full` regardless of anything.
Optimization options:
**_Useful Optimizations_**:
*feel free to ignore any that you find causing issues*
* `decoration:blur_new_optimizations = true`, to use new optimizations for
blurring.
`decoration:blur_new_optimizations = true`
* `decoration:blur = false` and `decoration:drop_shadow = false` to disable
fancy but battery hungry effects.
`decoration:blur = false`
* `misc:no_vfr = false`, since it'll lower the refresh rate when nothing is happening on-screen.
`decoration:drop_shadow = false`
* `misc:disable_autoreload = true` to stop Hyprland from reloading configuration
file each time that it changes.
`misc:no_vfr = false`
*possibly* `misc:disable_autoreload = true`
### How to fix games with window dancing?
# How to fix games with window dancing?
Read [this trick](../Configuring/Uncommon-tips--tricks/#window-dancing).

View file

@ -5,14 +5,14 @@ Hyprland. If you want to try Hyprland on Nvidia regardless
(many people have reported successes), follow the [Nvidia page](../../Nvidia)
after installing Hyprland.
### Distros
## Distros
Arch, NixOS and openSUSE Tumbleweed are very supported. For any other distro
(not based on Arch/Nix) you might have varying amounts of success. However,
since Hyprland is extremely bleeding-edge, distros like Pop!\_OS, Ubuntu, etc.
might have **major** issues running Hyprland.
# Installation
## Installation
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.
@ -24,21 +24,20 @@ consider updating your packages with `yay -Syu --devel`, or your other preferred
package manager.
{{< /hint >}}
## Packages
### Packages
**WARNING:** I do not maintain any packages. If they are broken, try building
from source first.
{{< tabs "uniqueid" >}}
{{< tab "Arch Linux" >}} *If you're on Arch Linux, I* ***heavily*** *recommend
you use the AUR.*
{{< tab "Arch Linux" >}} _If you're on Arch Linux, I_ **_heavily_** _recommend
you use the AUR._
```plain
hyprland-git - compiles from latest source
hyprland - compiles from latest release source
hyprland-bin - compiled latest release, prone to breaking on ARM devices as Hyprland binary is compiled for x86
```
{{< /tab >}}
@ -56,7 +55,7 @@ opi hyprland
Alternatively, you can also follow the instructions under ["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.*
Note: _Hyprland is not available for Leap, as most libraries (and compiler) that Hyprland needs are too old._
{{< /tab >}}
{{< tab "Fedora" >}}<https://github.com/hyprwm/Hyprland/discussions/284>{{< /tab >}}
{{< tab "Gentoo" >}}
@ -71,7 +70,7 @@ emerge --ask --verbose hyprland
{{< /tabs >}}
## Manual (Releases)
### Manual (Releases)
Download the most recent release.
@ -89,17 +88,17 @@ the example config is in `examples/Hyprland.conf`.
For updating later on, you can overwrite the binaries (hyprctl, hyprland and
libwlroots), you don't need to update anything else.
## Manual (Manual Build)
### Manual (Manual Build)
*Arch dependencies*:
_Arch dependencies_:
```plain
yay -S gdb ninja gcc cmake libxcb xcb-proto xcb-util xcb-util-keysyms libxfixes libx11 libxcomposite xorg-xinput libxrender pixman wayland-protocols cairo pango seatd
```
(If any are missing hmu)
_(If any are missing, hmu)_
*openSUSE dependencies*:
_openSUSE dependencies_:
```sh
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)" glslang-devel Mesa-libGLESv3-devel "pkgconfig(xcb-errors)"
@ -122,10 +121,12 @@ cd Hyprland
sudo make install
```
Do note that `sudo make install` will copy the example .desktop file to `/usr/share/wayland-sessions/` directory,
promptly overriding the existent .desktop file from previous installations.
Do note that `sudo make install` will copy the example .desktop file to
`/usr/share/wayland-sessions/` directory, promptly overriding the existent
.desktop file from previous installations.
It's probably a good idea to run `sudo make cleaninstall` to update Hyprland later on, as it does not overwrite the desktop file.
It's probably a good idea to run `sudo make cleaninstall` to update Hyprland later on,
as it will not overwrite the desktop file.
### Meson
@ -152,7 +153,7 @@ for legacy renderer:
sudo make clear && sudo make config && make legacyrenderer && sudo cp ./build/Hyprland /usr/bin && sudo cp ./example/hyprland.desktop /usr/share/wayland-sessions
```
*please note the legacy renderer may not support some graphical features.*
_please note the legacy renderer may not support some graphical features._
<br/><br/> Any other config: (replace \[PRESET\] with your preset, `release`
`debug` `legacyrenderer` `legacyrendererdebug`)
@ -205,7 +206,7 @@ Now, of course, install manually.
sudo cp ./build/Hyprland /usr/bin && sudo cp ./example/hyprland.desktop /usr/share/wayland-sessions
```
# Launching
## Launching
You can launch Hyprland by either going into a TTY and executing `Hyprland`, or
with a login manager.

View file

@ -1,9 +1,9 @@
After you've installed Hyprland, you can either launch it from a TTY with
After you have installed Hyprland, you can either launch it from a TTY with
`Hyprland` or from a login manager. Although login managers aren't officially
supported, I recommend `SDDM`, as it's been working flawlessly with wayland
supported, you might want to use `SDDM`, as it's been working flawlessly with wayland
compositors.
It is recommended you have `kitty` for terminal access, (example and
It is recommended you have `kitty` installed for terminal access, (example and
autogenerated configs have it bound to <kbd>SUPER</kbd> + <kbd>Q</kbd>).
Alternatively, manually change it in the config before launching Hyprland.
@ -23,7 +23,7 @@ Although it's 100% possible to use Hyprland in a VM, if it's not launching it's
of the times your fault. Please also keep in mind software rendering is _REALLY_ slow.
{{</ hint >}}
## Wrapping the launcher (recommended)
# Wrapping the launcher (recommended)
With Xorg, you get the `.xinitrc`. With Hyprland, you can create your own...
kind of.
@ -45,7 +45,7 @@ exec Hyprland
```
You can add as many exported envvars as you need (Nvidia users might need a
lot), but I recommend having *at least* the shown two.
lot), but it's recommended to have _at least_ the shown two.
You should now launch Hyprland with `wrappedhl` instead of `Hyprland`. Make sure
to copy your `.desktop` file in `/usr/share/wayland-sessions/` and edit it if you use a
@ -55,26 +55,21 @@ usually not ran through the user account.
{{< hint type=important >}}
It is highly recommended to copy the desktop file to e.g. `wrapped_hl.desktop` instead of editing
the provided one, as many package managers (and `sudo make install`) will **overwrite**
the desktop file on updates.
the desktop file on updates. If you manually build Hyprland, consider using `sudo make cleaninstall` to preserve `hyprland.deskop`
{{< /hint >}}
## Immediate
# Immediate
**OMG MY SCREEN IS BROKEN, FLASHY TEARY!** -> see the bottom of this page
Once you log in, you'll be greeted with a yellow warning that will give you some
basic keybind info of your pregenerated config.
basic keybind info of your pre-generated config.
I recommend you use the config provided in `examples/hyprland.conf` though.
To make the warning to go away, remove the `autogenerated=1` line from hyprland.conf
Paste it into `~/.config/hypr/hyprland.conf`
# Monitors
You can, of course, start from the pregenerated config if you wish to. If you
want the warning to go away, remove the `autogenerated=1` line.
## Monitors
Use `hyprctl monitors` to list available outputs. `hyprctl` will *not* tell you
Use `hyprctl monitors` to list available outputs. `hyprctl` will _not_ tell you
what your monitor is capable of though, so if you want to check your resolution / refresh rate,
use a tool like `wlr-randr`.
@ -109,18 +104,19 @@ Head onto the
[Configuring Hyprland page](../../Configuring/Configuring-Hyprland) to learn all
about configuring Hyprland to your likings.
# Apps / X11 replacements
## Apps / X11 replacements
See the [Useful Utilities page](../../Useful-Utilities) and the
[Sway wiki page](https://github.com/swaywm/sway/wiki/Useful-add-ons-for-sway)
just about that.
# Screenshare / GTK slow launch issues
## Screenshare / GTK slow launch issues
[FAQ (GTK issue)](../../FAQ/#some-of-my-apps-take-a-really-long-time-to-open)
[FAQ (screensharing)](../../FAQ/#screenshare--obs-no-worky)
# Screen broken on launch
## Screen broken on launch
This usually happens due to your monitor not being very happy about the default
settings.

View file

@ -8,7 +8,9 @@ Take a tour of the pages on the left and read ones that you may need.
A Wayland compositor is a fully autonomous Display Server, like Xorg itself.
It is **not** possible to mix'n'match Wayland compositors like you could on Xorg
with window managers and compositors.
with window managers and compositors. It is also not entirely possible, nor recommended,
to try and use all Xorg applications on Wayland. See [../Useful-Utilities](this page) for a
list of recommended Wayland native/compatible programs.
Wayland **compositors** should not be confused with Xorg **window managers**.

View file

@ -1,7 +1,7 @@
Hyprland exposes 2 UNIX Sockets, for controlling / getting info about Hyprland
via code / bash utilities.
## Hyprland Instance Signature (HIS)
# Hyprland Instance Signature (HIS)
```sh
echo $HYPRLAND_INSTANCE_SIGNATURE
@ -24,7 +24,7 @@ this:
e.g.: `workspace>>2`
## Events list:
# Events list
| name | description | data |
| --- | --- | --- |
@ -51,7 +51,7 @@ 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
# How to use socket2 with bash
example script using socket2 events with bash and `socat`:

View file

@ -1,4 +1,5 @@
## Table of contents
# Table of contents
{{< toc format=html >}}
{{< hint type=warning >}}
@ -7,12 +8,15 @@ work as intended. Please use the
[flake](https://github.com/hyprwm/Hyprland/blob/main/flake.nix).
{{< /hint >}}
## Install and configure Hyprland on NixOS
# Install and configure Hyprland on NixOS
Make sure to check out the options of the
[Nix module](https://github.com/hyprwm/Hyprland/blob/main/nix/module.nix).
### With flakes
Do note that the Nixpkgs Hyprland package is not actively maintained, and may be outdated.
As such, installation using the Flake is recommended.
## With flakes
```nix
# flake.nix
@ -40,7 +44,7 @@ Make sure to check out the options of the
Don't forget to replace `HOSTNAME` with your hostname!
### Without flakes
## Without flakes
{{< hint >}}
If you're using Hyprland through an overlay, set
@ -66,11 +70,11 @@ in {
}
```
## Install and configure through Home Manager
# Install and configure through Home Manager
You can use the Home Manager module by adding it to your configuration:
### With flakes
## With flakes
```nix
# flake.nix
@ -102,7 +106,7 @@ You can use the Home Manager module by adding it to your configuration:
Don't forget to replace `USER@HOSTNAME` with your username and hostname!
### Without flakes
## Without flakes
```nix
# home config
@ -124,7 +128,7 @@ in {
For a list of available options, check the
[module file](https://github.com/hyprwm/Hyprland/blob/main/nix/hm-module.nix).
## Modules mix'n'match
# Modules mix'n'match
- If you plan on using the HM module alongside the NixOS module, set the NixOS
`programs.hyprland.package = null;`.
@ -135,49 +139,55 @@ will have to enable all the options the NixOS module enables.
- If you don't plan on using any module, manually enable whatever options the
modules set.
## Non-NixOS install
# Non-NixOS install
### With flakes
## With flakes
First, [enable flakes](https://nixos.wiki/wiki/Flakes#Enable_flakes).
Once you have flakes working, install Hyprland through `nix profile`:
```sh
$ nix profile install github:hyprwm/Hyprland
nix profile install github:hyprwm/Hyprland
```
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).
First, install it, in the same manner you installed Hyprland:
```sh
$ nix profile install github:guibou/nixGL --impure
nix profile install github:guibou/nixGL --impure
```
Impure is needed due to `nixGL`'s reliance on hardware information.
From now on, you can run Hyprland by invoking it with nixGL
```sh
$ nixGL Hyprland
nixGL Hyprland
```
or by creating a wrapper script that runs the above command inside.
### Upgrading
## Upgrading
In order to upgrade all your packages, you can run
```sh
$ nix profile upgrade '.*'
nix profile upgrade '.*'
```
Check the
[nix profile](https://nixos.org/manual/nix/stable/command-ref/new-cli/nix3-profile.html)
command documentation for other upgrade options.
## XWayland
# XWayland
XWayland is enabled by default in the Nix package. You can disable it either
in the package itself, or through the Home Manager module.
#### Package
## Package
```nix
(inputs.hyprland.packages.${pkgs.default}.default.override {
@ -185,7 +195,7 @@ in the package itself, or through the Home Manager module.
})
```
#### HM module
### HM module
```nix
wayland.windowManager.hyprland = {
@ -194,7 +204,7 @@ wayland.windowManager.hyprland = {
}
```
### HiDPI
## HiDPI
By default, the Nix package includes a patched wlroots that can render HiDPI
XWayland windows.
@ -221,12 +231,12 @@ The GDK_SCALE variable won't conflict with wayland-native GTK programs.
Usually, there's no reason to disable this functionality, as it won't affect
people who don't have HiDPI screens.
If you *do* insist on disabling it though (e.g. for adding your own patches
If you _do_ insist on disabling it though (e.g. for adding your own patches
to wlroots), you can do so by either using the `hyprland-no-hidpi` package,
or by passing the `hidpiXWayland = false;` flag, the same way as
[disabling XWayland](#package)
## Cachix
# Cachix
A [Hyprland Cachix](https://app.cachix.org/cache/hyprland) exists to cache the
`wlroots` package and speed up builds.
@ -244,7 +254,7 @@ this cache to download the binary directly, instead of building locally.
}
```
## Overrides
# Overrides
You can override the package through `.override` or `.overrideAttrs`. This is
easily achievable through NixOS or Home Manager.

View file

@ -1,4 +1,4 @@
## Foreword
# Foreword
There is no _official_ support for Nvidia. Unfortunately, their drivers are so
messy, and their products so random, that it's impossible for us to help if
@ -46,9 +46,11 @@ Launch Hyprland with the wrapper.
It _should_ work now.
### Fixing random flickering, method 1
## Fixing random flickering, method 1
If you take a look at the wlroots patches in the [nix flake](https://github.com/hyprwm/Hyprland/blob/main/nix/wlroots.nix)
you will find a one-line patch:
```sh
substituteInPlace render/gles2/renderer.c --replace "glFlush();" "glFinish();"
```
@ -57,7 +59,7 @@ What this means, for non-nix users, is you have to (before building) go to
`subprojects/wlroots/render/gles2/renderer.c` and replace all occurrences of `glFlush()`
with `glFinish()`, and then compile Hyprland as usual.
### Fixing random flickering, method 2 (nuclear)
## Fixing random flickering, method 2 (nuclear)
Do note though that this forces performance mode to be active, resulting in
increased power-consumption (from 22W idle on a RTX 3070TI, to 74W).

View file

@ -11,9 +11,39 @@ on the Discord ToS.
- [gtkcord4](https://github.com/diamondburned/gtkcord4) is a Discord client written in GTK4.
While it does infringe on Discord's ToS, it's relatively safe and doesn't rely on any webview technologies.
## Spotify
Spotify does not follow window rules. This is because the client sets is class _after_
the window has opened, thus making it "immune" to windowrules. An alternative to
Spotify's GUI client is [spotify-tui](https://github.com/Rigellute/spotify-tui) which can be
launched in a terminal with a custom class. While limited in functionality, it is quite
powerful and could be preferred over the GUI client.
Some users have also reported [installing spotifywm](https://github.com/amurzeau/spotifywm) has resolved
the issue. The original repository by [`dasJ`](https://github.com/dasJ/spotifywm) is no longer working because of some changes made in the newer
Spotify version, and until the pull request gets merged, [`amurzeau's fork`](https://github.com/amurzeau/spotifywm) does the job.
After following the installation paragraph on the README, start Spotify with:
```bash
LD_PRELOAD=/path/to/spotifywm.so spotify
```
The path **MUST** be the absolute one. If it's not, the hack will not work.
Now you can freely manage your Spotify client. Always use `class` to manage the
window. For example:
```ini
windowrulev2 = tile, class:^(Spotify)$
windowrulev2 = workspace 9, class:^(Spotify)$
```
Pick your poison.
## 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 GTK4.
Much like Discord, Element is known to have a lot of problems as a result of being
based on Electron. Fractal currently doesn't support VoIP calling, but all other features
are supported, including E2EE and cross-device verification.

View file

@ -1,6 +1,7 @@
Color pickers are useful for quickly grabbing a color of *something* on your screen.
Color pickers are useful for quickly grabbing a color of _something_ on your screen.
We recommend our own solution, which, so far, seems to be the only one that doesn't suck.
It's preferred using _hyrpwm_'s own solution, which, so far, seems to be the only one that
doesn't suck.
## Hyprpicker

View file

@ -1,6 +1,6 @@
Screensharing is done through PipeWire on Wayland.
## Prereqs
## Prerequsities
Make sure you have `pipewire` and `wireplumber` installed, enabled and running
if you don't have them yet.

View file

@ -1,46 +1,70 @@
Launch your bar with `exec-once=`.
## Waybar
# Waybar
Waybar is a GTK status bar made specifically for wlroots compositors.
To use it, it's recommended to use the AUR package `waybar-hyprland-git`,
or compile manually with the `USE_EXPERIMENTAL` flag enabled.
To use it, it's recommended to use the AUR package `waybar-hyprland-git`.
## Compiling Manually
To compile manually:
Clone the source, cd into it, then do:
```sh
```bash
sed -i 's/zext_workspace_handle_v1_activate(workspace_handle_);/const std::string command = "hyprctl dispatch workspace " + name_;\n\tsystem(command.c_str());/g' src/modules/wlr/workspace_manager.cpp
meson --prefix=/usr --buildtype=plain --auto-features=enabled --wrap-mode=nodownload build
meson configure -Dexperimental=true build
```
and finally:
```sh
sudo ninja -C build install
```
If you want to use the workspaces module, it's called `wlr/workspaces`.
If you want to use the workspaces module, first, copy the configuration files from
`/etc/xdg/waybar/` into `~/.config/waybar/`. Then, in `~/.config/waybar/conf/` replace
all the references to `sway/workspaces/` with `wlr/workspaces`.
For more info regarding configuration, see
[The Waybar Wiki](https://github.com/Alexays/Waybar/wiki).
## Eww
## Waybar popups render behind the windows
In `~/.config/waybar/config`, make sure that you have the `layer` configuration
set to `top` and not `bottom`.
## Active workspace doesn't show up
Replace `#workspaces button.focus` with `#wroskapces button.active` in `~/.config/style.css`.
## Scrolling through workspaces
Since there a lot of configuration options from `sway/workspaces` are missing, you
should deduce some of them by yourself. In the case of scrolling, it should look like this:
```json
"wlr/workspaces": {
"format": "{icon}",
"on-scroll-up": "hyprctl dispatch workspace e+1",
"on-scroll-down": "hyprctl dispatch workspace e-1"
}
```
## Clicking on a workspace icon does not work!
On the `wlr/workspaces` module, add `"on-click": "activate"`. That's the purpose of
the `sed` command used before building Waybar: the default way to select a workspace by
clicking uses the `swaymsg`'s way, and thus it is required to edit
this function to make it work with `hyprctl`.
# Eww
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
by manually compiling. In the latter case, you can follow the
[instructions](https://elkowar.github.io/eww).
### Configuration
## Configuration
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). We
highly recommend you also read through the
are a few examples listed in the [Readme](https://github.com/elkowar/eww). It's also
highly recommended to read through the
[Configuration options](https://elkowar.github.io/eww/configuration.html).
{{< hint type=important >}}
@ -48,3 +72,14 @@ Read
[the Wayland section](https://elkowar.github.io/eww/configuration.html#wayland)
carefully before asking why your bar doesn't work.
{{< /hint >}}
# Hybrid
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-git`, do note though that
it builds the bar from source, so it may take a few minutes.
## Configuration
The configuration is done through JSON, more information is available [here](https://github.com/vars1ty/HybridBar).

View file

@ -1,7 +1,7 @@
This category is dedicated to short tutorials on how to get useful utilities for
Hyprland working.
## List of Pages
# List of Pages
- **[Status Bars](./Status-Bars)**