feat: finalize migration to chezmoi and modernize configuration logic
- Modularize Hyprland config into hyprland.d/ - Implement infinitely scalable monitor/workspace logic using templates and loop-based data structures - Consolidate host-specific configs (hyprlock, hyprpaper, waybar) into single templates - Resolve waybar symlink conflict and fix template execution errors - Integrate chezmoi data variables for scale, resolution, and peripherals
This commit is contained in:
33
.chezmoiignore.tmpl
Normal file
33
.chezmoiignore.tmpl
Normal file
@@ -0,0 +1,33 @@
|
||||
{{- $tags := .chezmoi.config.data.tags -}}
|
||||
{{- if not (index $tags "cs2") -}}
|
||||
.local/share/Steam/steamapps/common/Counter-Strike Global Offensive/game/csgo/cfg/autoexec.cfg
|
||||
{{- end -}}
|
||||
{{- if not (index $tags "pipewire") -}}
|
||||
.config/pipewire/**
|
||||
{{- end -}}
|
||||
{{- if not (index $tags "hyprland") -}}
|
||||
.config/autostart/swayosd-server.desktop
|
||||
.config/autostart/waybar.desktop
|
||||
.config/hypr/**
|
||||
{{- end -}}
|
||||
|
||||
{{- if not (index $tags "dev") -}}
|
||||
.config/autostart/jetbrains-toolbox.desktop
|
||||
{{- end -}}
|
||||
|
||||
{{- if not (index $tags "entertainment") -}}
|
||||
.config/autostart/jellyfin-mpv-shim.desktop
|
||||
{{- end -}}
|
||||
|
||||
{{- if not (index $tags "desktop") -}}
|
||||
.config/autostart/info.mumble.Mumble.desktop
|
||||
.config/autostart/vesktop.desktop
|
||||
.config/autostart/steam.desktop
|
||||
.config/MangoHud/**
|
||||
{{- end -}}
|
||||
|
||||
.config/hypr/hyprland.wiki/**
|
||||
.config/waybar/waybar.wiki/**
|
||||
|
||||
AGENTS.md
|
||||
GEMINI.md
|
||||
31
.chezmoiscripts/run_onchange_pipewire-rnnoise-check.sh.tmpl
Executable file
31
.chezmoiscripts/run_onchange_pipewire-rnnoise-check.sh.tmpl
Executable file
@@ -0,0 +1,31 @@
|
||||
{{- if (index .chezmoi.config.data.tags "pipewire") -}}
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
# Re-run whenever the denoising config changes.
|
||||
# conf-sha: {{ (include "dot_config/pipewire/pipewire.conf.d/99-input-denoising.conf") | sha256sum }}
|
||||
|
||||
if command -v pacman >/dev/null 2>&1; then
|
||||
if pacman -Q noise-suppression-for-voice >/dev/null 2>&1; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ -t 0 ]; then
|
||||
printf 'noise-suppression-for-voice not installed. Install now? [y/N] ' >&2
|
||||
read -r ans
|
||||
case "$ans" in
|
||||
[yY]|[yY][eE][sS]) sudo pacman -S --needed noise-suppression-for-voice ;;
|
||||
*) printf 'Skipping noise-suppression-for-voice install.\n' >&2 ;;
|
||||
esac
|
||||
else
|
||||
printf 'noise-suppression-for-voice not installed. Install with: sudo pacman -S --needed noise-suppression-for-voice\n' >&2
|
||||
fi
|
||||
else
|
||||
if [ ! -f /usr/lib/ladspa/librnnoise_ladspa.so ]; then
|
||||
printf 'rnnoise LADSPA plugin missing; install noise-suppression-for-voice for your distro.\n' >&2
|
||||
fi
|
||||
fi
|
||||
{{- else -}}
|
||||
#!/bin/sh
|
||||
exit 0
|
||||
{{- end -}}
|
||||
30
AGENTS.md
Normal file
30
AGENTS.md
Normal file
@@ -0,0 +1,30 @@
|
||||
# Repository Guidelines
|
||||
|
||||
## Project Structure & Module Organization
|
||||
This is a chezmoi dotfiles source tree. Key paths:
|
||||
- `dot_config/` maps to `~/.config/` (e.g., `dot_config/hypr/`, `dot_config/nvim/`, `dot_config/waybar/`).
|
||||
- `dot_local/` maps to `~/.local/` (app data, scripts, etc.).
|
||||
- `dot_profile.tmpl` renders to `~/.profile`.
|
||||
- `.chezmoiscripts/` contains chezmoi hooks (e.g., `run_onchange_*` scripts).
|
||||
- Host-specific variants use `##hostname.<name>` (e.g., `hyprpaper.conf##hostname.owlenlap01`).
|
||||
- `dot_config/waybar/waybar.wiki/` and `dot_config/hypr/hyprland.wiki/` are mirrored docs with `dot_git/` metadata; treat them as upstream mirrors unless intentionally updating.
|
||||
|
||||
## Build, Test, and Development Commands
|
||||
There is no build system; apply and verify changes with chezmoi:
|
||||
- `chezmoi diff` preview pending changes.
|
||||
- `chezmoi apply` render and apply to `$HOME`.
|
||||
- `chezmoi status` show managed file status.
|
||||
After applying, restart the affected app (e.g., reload Hyprland/Waybar) to validate.
|
||||
|
||||
## Coding Style & Naming Conventions
|
||||
- Match the existing file’s formatting; don’t reflow unrelated sections.
|
||||
- Lua configs in `dot_config/nvim/` use 2‑space indents and include `dot_config/nvim/dot_stylua.toml` and `dot_config/nvim/selene.toml` for format/lint settings.
|
||||
- Use chezmoi prefixes: `dot_` for dotfiles, `executable_` for executable files, `symlink_` for symlinks, `private_` for restricted‑permission files, and `.tmpl` for Go templates.
|
||||
|
||||
## Testing Guidelines
|
||||
No automated tests are defined. Validate by:
|
||||
- Running `chezmoi diff` and `chezmoi apply`.
|
||||
- Smoke‑testing the specific tool you changed (e.g., open Neovim, restart Waybar, reload Hyprland).
|
||||
|
||||
## Commit & Pull Request Guidelines
|
||||
This repository has no commits yet, so there is no established commit message convention. Use short, imperative subjects and include a scope when helpful (e.g., `hypr: adjust keybinds`). For PRs, include a clear summary, affected paths, and screenshots for visual/UI changes.
|
||||
68
GEMINI.md
Normal file
68
GEMINI.md
Normal file
@@ -0,0 +1,68 @@
|
||||
# Project Overview
|
||||
|
||||
This is a **chezmoi** source directory used for managing user configuration files (dotfiles) on a Linux system. It centralizes the configuration for the shell, window manager, editor, and other utilities, allowing for consistent setups across multiple machines (referenced by hostname tags like `owlenlap01`, `owlenpc00`).
|
||||
|
||||
## Key Components
|
||||
|
||||
* **Dotfile Manager:** [chezmoi](https://www.chezmoi.io/)
|
||||
* **Window Manager:** [Hyprland](https://hyprland.org/) (Modular configuration)
|
||||
* **Shell:** [Zsh](https://www.zsh.org/) managed with [Zim](https://zimfw.sh/) and themed with [Powerlevel10k](https://github.com/romkatv/powerlevel10k).
|
||||
* **Editor:** [Neovim](https://neovim.io/) configured with Lua and [lazy.nvim](https://github.com/folke/lazy.nvim).
|
||||
* **Status Bar:** [Waybar](https://github.com/Alexays/Waybar)
|
||||
* **Terminal Emulators:** [Kitty](https://sw.kovidgoyal.net/kitty/), [Alacritty](https://alacritty.org/)
|
||||
* **Other:** Tmux, Mpv, Dunst/SwayNC, Fuzzel/Rofi equivalent.
|
||||
|
||||
## Directory Structure
|
||||
|
||||
The directory structure follows standard `chezmoi` conventions:
|
||||
|
||||
* **`dot_config/`**: Maps to `~/.config/`. Contains the bulk of application configurations.
|
||||
* **`hypr/`**: Hyprland configuration. `hyprland.conf` is the entry point, sourcing files from `hyprland.d/`. Host-specific overrides exist (e.g., `hyprpaper.conf##hostname.owlenlap01`).
|
||||
* **`nvim/`**: Neovim configuration. `init.lua` bootstraps `lazy.nvim`.
|
||||
* **`zsh/`**: Zsh configuration, including `dot_zshrc` (mapped to `~/.config/zsh/.zshrc`).
|
||||
* **`waybar/`**: Waybar configuration and styles.
|
||||
* **`dot_local/`**: Maps to `~/.local/`. Contains scripts and local data.
|
||||
* **`.chezmoiscripts/`**: Contains scripts that run when `chezmoi apply` is executed (e.g., `run_onchange_...`).
|
||||
* **`dot_profile.tmpl`**: A template that renders to `~/.profile`, handling environment variables. It uses tags (e.g., `dev`, `desktop`) to conditionally include configurations.
|
||||
|
||||
## Usage
|
||||
|
||||
This directory is the **source of truth**. Do not edit files directly in `~/.config` if they are managed here; your changes will be overwritten.
|
||||
|
||||
### Common Commands
|
||||
|
||||
* **Apply Changes:**
|
||||
```bash
|
||||
chezmoi apply
|
||||
```
|
||||
Renders templates and copies files to the target destination (usually `$HOME`).
|
||||
|
||||
* **Preview Changes:**
|
||||
```bash
|
||||
chezmoi diff
|
||||
```
|
||||
Shows what will change in the destination directory if `chezmoi apply` is run.
|
||||
|
||||
* **Edit a File:**
|
||||
```bash
|
||||
chezmoi edit <file_path>
|
||||
```
|
||||
Opens the source file for editing in your `$EDITOR`.
|
||||
|
||||
* **Check Status:**
|
||||
```bash
|
||||
chezmoi status
|
||||
```
|
||||
|
||||
### Templates and Logic
|
||||
|
||||
Files ending in `.tmpl` are Go templates. They support logic based on `chezmoi` data.
|
||||
* **Variables:** `{{ .chezmoi.homeDir }}` represents the user's home directory.
|
||||
* **Tags:** Logic like `{{- if (index $tags "dev") }}` is used to enable features based on the machine's role (e.g., development tools, desktop-specific GPU settings).
|
||||
|
||||
## Development Conventions
|
||||
|
||||
* **Hyprland:** Keep configuration modular. Add new settings to the appropriate file in `dot_config/hypr/hyprland.d/` rather than cluttering `hyprland.conf`.
|
||||
* **Neovim:** Configuration is split into `lazy_setup.lua` (plugins) and `polish.lua` (general settings).
|
||||
* **Zsh:** Custom aliases should go in `dot_config/zsh/aliases.zsh`.
|
||||
* **Naming:** Use `dot_` to represent a dot prefix (e.g., `dot_config` -> `.config`). Use `executable_` to mark files as executable.
|
||||
76
dot_config/MangoHud/MangoHud.conf
Normal file
76
dot_config/MangoHud/MangoHud.conf
Normal file
@@ -0,0 +1,76 @@
|
||||
################### File Generated by Goverlay ###################
|
||||
legacy_layout=false
|
||||
|
||||
horizontal
|
||||
background_alpha=0.5
|
||||
round_corners=10
|
||||
background_alpha=0.5
|
||||
background_color=241F31
|
||||
width=10
|
||||
heigth=10
|
||||
|
||||
|
||||
font_size=14
|
||||
text_color=FFFFFF
|
||||
position=top-center
|
||||
no_small_font
|
||||
hud_no_margins
|
||||
hud_compact
|
||||
offset_y=5
|
||||
|
||||
pci_dev=0:12:00.0
|
||||
table_columns=1
|
||||
fps
|
||||
gpu_text=GPU
|
||||
gpu_stats
|
||||
gpu_load_change
|
||||
gpu_load_value=50,90
|
||||
gpu_load_color=FFFFFF,FFAA7F,CC0000
|
||||
throttling_status
|
||||
gpu_temp
|
||||
gpu_color=2E9762
|
||||
cpu_text=CPU
|
||||
cpu_stats
|
||||
|
||||
cpu_load_change
|
||||
cpu_load_value=50,90
|
||||
cpu_load_color=FFFFFF,FFAA7F,CC0000
|
||||
cpu_temp
|
||||
cpu_color=2E97CB
|
||||
swap
|
||||
vram
|
||||
vram_color=AD64C1
|
||||
ram
|
||||
ram_color=C26693
|
||||
procmem
|
||||
wine
|
||||
wine_color=EB5B5B
|
||||
fps_limit_method=late
|
||||
|
||||
fps_limit=0
|
||||
fsr
|
||||
hdr
|
||||
refresh_rate
|
||||
gamemode
|
||||
custom_text=Arch Linux
|
||||
exec=uname -r
|
||||
#offset=0
|
||||
vsync=0
|
||||
gl_vsync=-1
|
||||
|
||||
|
||||
time#
|
||||
version
|
||||
|
||||
|
||||
output_folder=/home/mpuchstein
|
||||
log_duration=30
|
||||
autostart_log=0
|
||||
log_interval=100
|
||||
toggle_fps_limit=Shift_L+F1
|
||||
toggle_logging=Shift_L+F2
|
||||
reload_cfg=Shift_R+F9
|
||||
toggle_preset=Shift_R+F10
|
||||
toggle_hud_position=Shift_R+F11
|
||||
toggle_hud=Shift_R+F12
|
||||
|
||||
76
dot_config/MangoHud/custom.conf
Normal file
76
dot_config/MangoHud/custom.conf
Normal file
@@ -0,0 +1,76 @@
|
||||
################### File Generated by Goverlay ###################
|
||||
legacy_layout=false
|
||||
|
||||
horizontal
|
||||
background_alpha=0.5
|
||||
round_corners=10
|
||||
background_alpha=0.5
|
||||
background_color=241F31
|
||||
width=10
|
||||
heigth=10
|
||||
|
||||
|
||||
font_size=14
|
||||
text_color=FFFFFF
|
||||
position=top-center
|
||||
no_small_font
|
||||
hud_no_margins
|
||||
hud_compact
|
||||
offset_y=5
|
||||
|
||||
pci_dev=0:12:00.0
|
||||
table_columns=1
|
||||
fps
|
||||
gpu_text=GPU
|
||||
gpu_stats
|
||||
gpu_load_change
|
||||
gpu_load_value=50,90
|
||||
gpu_load_color=FFFFFF,FFAA7F,CC0000
|
||||
throttling_status
|
||||
gpu_temp
|
||||
gpu_color=2E9762
|
||||
cpu_text=CPU
|
||||
cpu_stats
|
||||
|
||||
cpu_load_change
|
||||
cpu_load_value=50,90
|
||||
cpu_load_color=FFFFFF,FFAA7F,CC0000
|
||||
cpu_temp
|
||||
cpu_color=2E97CB
|
||||
swap
|
||||
vram
|
||||
vram_color=AD64C1
|
||||
ram
|
||||
ram_color=C26693
|
||||
procmem
|
||||
wine
|
||||
wine_color=EB5B5B
|
||||
fps_limit_method=late
|
||||
|
||||
fps_limit=0
|
||||
fsr
|
||||
hdr
|
||||
refresh_rate
|
||||
gamemode
|
||||
custom_text=Arch Linux
|
||||
exec=uname -r
|
||||
#offset=0
|
||||
vsync=0
|
||||
gl_vsync=-1
|
||||
|
||||
|
||||
time#
|
||||
version
|
||||
|
||||
|
||||
output_folder=/home/mpuchstein
|
||||
log_duration=30
|
||||
autostart_log=0
|
||||
log_interval=100
|
||||
toggle_fps_limit=Shift_L+F1
|
||||
toggle_logging=Shift_L+F2
|
||||
reload_cfg=Shift_R+F9
|
||||
toggle_preset=Shift_R+F10
|
||||
toggle_hud_position=Shift_R+F11
|
||||
toggle_hud=Shift_R+F12
|
||||
|
||||
16
dot_config/alacritty/alacritty.toml
Normal file
16
dot_config/alacritty/alacritty.toml
Normal file
@@ -0,0 +1,16 @@
|
||||
[general]
|
||||
import = [
|
||||
"/home/mpuchstein/.config/alacritty/themes/themes/github_dark.toml"
|
||||
]
|
||||
live_config_reload = true
|
||||
ipc_socket = true
|
||||
|
||||
[window]
|
||||
opacity = 0.7
|
||||
|
||||
[font]
|
||||
normal = { family = "Inconsolata Nerd Font Mono", style = "Regular" }
|
||||
size = 9
|
||||
|
||||
[mouse]
|
||||
hide_when_typing = true
|
||||
11
dot_config/autostart/Nextcloud.desktop
Normal file
11
dot_config/autostart/Nextcloud.desktop
Normal file
@@ -0,0 +1,11 @@
|
||||
[Desktop Entry]
|
||||
Name=Nextcloud
|
||||
GenericName=File Synchronizer
|
||||
Exec="/usr/bin/nextcloud" --background
|
||||
Terminal=false
|
||||
Icon=Nextcloud
|
||||
Categories=Network
|
||||
Type=Application
|
||||
StartupNotify=false
|
||||
X-GNOME-Autostart-enabled=true
|
||||
X-GNOME-Autostart-Delay=10
|
||||
15
dot_config/autostart/executable_jetbrains-toolbox.desktop
Normal file
15
dot_config/autostart/executable_jetbrains-toolbox.desktop
Normal file
@@ -0,0 +1,15 @@
|
||||
[Desktop Entry]
|
||||
Icon=/opt/jetbrains-toolbox/toolbox.svg
|
||||
Exec=/opt/jetbrains-toolbox/jetbrains-toolbox --minimize
|
||||
Version=1.0
|
||||
Type=Application
|
||||
Categories=Development
|
||||
Name=JetBrains Toolbox
|
||||
StartupWMClass=jetbrains-toolbox
|
||||
Terminal=false
|
||||
MimeType=x-scheme-handler/jetbrains;
|
||||
X-GNOME-Autostart-enabled=true
|
||||
StartupNotify=false
|
||||
X-GNOME-Autostart-Delay=10
|
||||
X-MATE-Autostart-Delay=10
|
||||
X-KDE-autostart-after=panel
|
||||
18
dot_config/autostart/info.mumble.Mumble.desktop
Normal file
18
dot_config/autostart/info.mumble.Mumble.desktop
Normal file
@@ -0,0 +1,18 @@
|
||||
[Desktop Entry]
|
||||
Name=Mumble
|
||||
GenericName=Voice Chat
|
||||
GenericName[de]=Sprachkonferenz
|
||||
GenericName[fr]=Chat vocal
|
||||
Comment=Open source, low-latency, high quality voice chat.
|
||||
Comment[de]=Ein Open Source Sprachkonferenzprogramm mit niedriger Latenz und hoher Qualität
|
||||
Comment[fr]=Un logiciel de chat vocal de haute qualité et de faible latence
|
||||
Exec=mumble %u
|
||||
Icon=mumble
|
||||
Terminal=false
|
||||
Type=Application
|
||||
StartupNotify=false
|
||||
StartupWMClass=mumble
|
||||
MimeType=x-scheme-handler/mumble;
|
||||
Categories=Network;Chat;Qt;
|
||||
Keywords=VoIP;Messaging;Voice Chat;Secure Communication;
|
||||
Version=1.0
|
||||
10
dot_config/autostart/io.element.Element.desktop
Normal file
10
dot_config/autostart/io.element.Element.desktop
Normal file
@@ -0,0 +1,10 @@
|
||||
[Desktop Entry]
|
||||
Name=Element
|
||||
Comment=Feature-rich client for Matrix
|
||||
Exec=/usr/bin/element-desktop --password-store="gnome-libsecret" %u
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Icon=io.element.Element
|
||||
StartupWMClass=Element
|
||||
Categories=Network;InstantMessaging;Chat;IRCClient
|
||||
MimeType=x-scheme-handler/element;
|
||||
4
dot_config/autostart/jellyfin-mpv-shim.desktop
Normal file
4
dot_config/autostart/jellyfin-mpv-shim.desktop
Normal file
@@ -0,0 +1,4 @@
|
||||
[Desktop Entry]
|
||||
Exec=/usr/bin/jellyfin-mpv-shim
|
||||
Name=jellyfin-mpv-shim
|
||||
Type=Application
|
||||
4
dot_config/autostart/swayosd-server.desktop
Normal file
4
dot_config/autostart/swayosd-server.desktop
Normal file
@@ -0,0 +1,4 @@
|
||||
[Desktop Entry]
|
||||
Exec=/usr/bin/swayosd-server
|
||||
Name=swayosd-server
|
||||
Type=Application
|
||||
1
dot_config/autostart/symlink_steam.desktop
Normal file
1
dot_config/autostart/symlink_steam.desktop
Normal file
@@ -0,0 +1 @@
|
||||
/usr/share/applications/steam.desktop
|
||||
12
dot_config/autostart/vesktop.desktop
Normal file
12
dot_config/autostart/vesktop.desktop
Normal file
@@ -0,0 +1,12 @@
|
||||
[Desktop Entry]
|
||||
Name=Vesktop
|
||||
Exec=vesktop %U
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Icon=vesktop
|
||||
StartupWMClass=vesktop
|
||||
GenericName=Internet Messenger
|
||||
Categories=Network;
|
||||
Keywords=discord;vencord;electron;chat;
|
||||
MimeType=x-scheme-handler/discord;
|
||||
Comment=Vesktop is a custom Discord desktop app
|
||||
8
dot_config/autostart/waybar.desktop
Normal file
8
dot_config/autostart/waybar.desktop
Normal file
@@ -0,0 +1,8 @@
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=Waybar
|
||||
Comment=Start Waybar on login
|
||||
Exec=waybar
|
||||
TryExec=waybar
|
||||
Icon=waybar
|
||||
Terminal=false
|
||||
257
dot_config/btop/btop.conf
Normal file
257
dot_config/btop/btop.conf
Normal file
@@ -0,0 +1,257 @@
|
||||
#? Config file for btop v. 1.4.5
|
||||
|
||||
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
|
||||
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
|
||||
color_theme = "Default"
|
||||
|
||||
#* If the theme set background should be shown, set to False if you want terminal background transparency.
|
||||
theme_background = True
|
||||
|
||||
#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
|
||||
truecolor = True
|
||||
|
||||
#* Set to true to force tty mode regardless if a real tty has been detected or not.
|
||||
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
|
||||
force_tty = False
|
||||
|
||||
#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
|
||||
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
|
||||
#* Use whitespace " " as separator between different presets.
|
||||
#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty"
|
||||
presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"
|
||||
|
||||
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
|
||||
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
|
||||
vim_keys = False
|
||||
|
||||
#* Rounded corners on boxes, is ignored if TTY mode is ON.
|
||||
rounded_corners = True
|
||||
|
||||
#* Default symbols to use for graph creation, "braille", "block" or "tty".
|
||||
#* "braille" offers the highest resolution but might not be included in all fonts.
|
||||
#* "block" has half the resolution of braille but uses more common characters.
|
||||
#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
|
||||
#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
|
||||
graph_symbol = "braille"
|
||||
|
||||
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
|
||||
graph_symbol_cpu = "default"
|
||||
|
||||
# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty".
|
||||
graph_symbol_gpu = "default"
|
||||
|
||||
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
|
||||
graph_symbol_mem = "default"
|
||||
|
||||
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
|
||||
graph_symbol_net = "default"
|
||||
|
||||
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
|
||||
graph_symbol_proc = "default"
|
||||
|
||||
#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace.
|
||||
shown_boxes = "cpu mem net proc"
|
||||
|
||||
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
|
||||
update_ms = 2000
|
||||
|
||||
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
|
||||
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
|
||||
proc_sorting = "cpu lazy"
|
||||
|
||||
#* Reverse sorting order, True or False.
|
||||
proc_reversed = False
|
||||
|
||||
#* Show processes as a tree.
|
||||
proc_tree = False
|
||||
|
||||
#* Use the cpu graph colors in the process list.
|
||||
proc_colors = True
|
||||
|
||||
#* Use a darkening gradient in the process list.
|
||||
proc_gradient = True
|
||||
|
||||
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
|
||||
proc_per_core = False
|
||||
|
||||
#* Show process memory as bytes instead of percent.
|
||||
proc_mem_bytes = True
|
||||
|
||||
#* Show cpu graph for each process.
|
||||
proc_cpu_graphs = True
|
||||
|
||||
#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
|
||||
proc_info_smaps = False
|
||||
|
||||
#* Show proc box on left side of screen instead of right.
|
||||
proc_left = False
|
||||
|
||||
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
|
||||
proc_filter_kernel = False
|
||||
|
||||
#* In tree-view, always accumulate child process resources in the parent process.
|
||||
proc_aggregate = False
|
||||
|
||||
#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
|
||||
#* Select from a list of detected attributes from the options menu.
|
||||
cpu_graph_upper = "Auto"
|
||||
|
||||
#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available.
|
||||
#* Select from a list of detected attributes from the options menu.
|
||||
cpu_graph_lower = "Auto"
|
||||
|
||||
#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off".
|
||||
show_gpu_info = "Auto"
|
||||
|
||||
#* Toggles if the lower CPU graph should be inverted.
|
||||
cpu_invert_lower = True
|
||||
|
||||
#* Set to True to completely disable the lower CPU graph.
|
||||
cpu_single_graph = False
|
||||
|
||||
#* Show cpu box at bottom of screen instead of top.
|
||||
cpu_bottom = False
|
||||
|
||||
#* Shows the system uptime in the CPU box.
|
||||
show_uptime = True
|
||||
|
||||
#* Shows the CPU package current power consumption in watts. Requires running `make setcap` or `make setuid` or running with sudo.
|
||||
show_cpu_watts = True
|
||||
|
||||
#* Show cpu temperature.
|
||||
check_temp = True
|
||||
|
||||
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
|
||||
cpu_sensor = "Auto"
|
||||
|
||||
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
|
||||
show_coretemp = True
|
||||
|
||||
#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
|
||||
#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
|
||||
#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.
|
||||
#* Example: "4:0 5:1 6:3"
|
||||
cpu_core_map = ""
|
||||
|
||||
#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine".
|
||||
temp_scale = "celsius"
|
||||
|
||||
#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
|
||||
base_10_sizes = False
|
||||
|
||||
#* Show CPU frequency.
|
||||
show_cpu_freq = True
|
||||
|
||||
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
|
||||
#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
|
||||
clock_format = "%X"
|
||||
|
||||
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
|
||||
background_update = True
|
||||
|
||||
#* Custom cpu model name, empty string to disable.
|
||||
custom_cpu_name = ""
|
||||
|
||||
#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
|
||||
#* Only disks matching the filter will be shown. Prepend exclude= to only show disks not matching the filter. Examples: disk_filter="/boot /home/user", disks_filter="exclude=/boot /home/user"
|
||||
disks_filter = ""
|
||||
|
||||
#* Show graphs instead of meters for memory values.
|
||||
mem_graphs = True
|
||||
|
||||
#* Show mem box below net box instead of above.
|
||||
mem_below_net = False
|
||||
|
||||
#* Count ZFS ARC in cached and available memory.
|
||||
zfs_arc_cached = True
|
||||
|
||||
#* If swap memory should be shown in memory box.
|
||||
show_swap = True
|
||||
|
||||
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
|
||||
swap_disk = True
|
||||
|
||||
#* If mem box should be split to also show disks info.
|
||||
show_disks = True
|
||||
|
||||
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
|
||||
only_physical = True
|
||||
|
||||
#* Read disks list from /etc/fstab. This also disables only_physical.
|
||||
use_fstab = True
|
||||
|
||||
#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
|
||||
zfs_hide_datasets = False
|
||||
|
||||
#* Set to true to show available disk space for privileged users.
|
||||
disk_free_priv = False
|
||||
|
||||
#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
|
||||
show_io_stat = True
|
||||
|
||||
#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
|
||||
io_mode = False
|
||||
|
||||
#* Set to True to show combined read/write io graphs in io mode.
|
||||
io_graph_combined = False
|
||||
|
||||
#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
|
||||
#* Example: "/mnt/media:100 /:20 /boot:1".
|
||||
io_graph_speeds = ""
|
||||
|
||||
#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
|
||||
net_download = 100
|
||||
|
||||
net_upload = 100
|
||||
|
||||
#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
|
||||
net_auto = True
|
||||
|
||||
#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
|
||||
net_sync = True
|
||||
|
||||
#* Starts with the Network Interface specified here.
|
||||
net_iface = ""
|
||||
|
||||
#* "True" shows bitrates in base 10 (Kbps, Mbps). "False" shows bitrates in binary sizes (Kibps, Mibps, etc.). "Auto" uses base_10_sizes.
|
||||
base_10_bitrate = "Auto"
|
||||
|
||||
#* Show battery stats in top right if battery is present.
|
||||
show_battery = True
|
||||
|
||||
#* Which battery to use if multiple are present. "Auto" for auto detection.
|
||||
selected_battery = "Auto"
|
||||
|
||||
#* Show power stats of battery next to charge indicator.
|
||||
show_battery_watts = True
|
||||
|
||||
#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
|
||||
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
|
||||
log_level = "WARNING"
|
||||
|
||||
#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards.
|
||||
nvml_measure_pcie_speeds = True
|
||||
|
||||
#* Measure PCIe throughput on AMD cards, may impact performance on certain cards.
|
||||
rsmi_measure_pcie_speeds = True
|
||||
|
||||
#* Horizontally mirror the GPU graph.
|
||||
gpu_mirror_graph = True
|
||||
|
||||
#* Custom gpu0 model name, empty string to disable.
|
||||
custom_gpu_name0 = ""
|
||||
|
||||
#* Custom gpu1 model name, empty string to disable.
|
||||
custom_gpu_name1 = ""
|
||||
|
||||
#* Custom gpu2 model name, empty string to disable.
|
||||
custom_gpu_name2 = ""
|
||||
|
||||
#* Custom gpu3 model name, empty string to disable.
|
||||
custom_gpu_name3 = ""
|
||||
|
||||
#* Custom gpu4 model name, empty string to disable.
|
||||
custom_gpu_name4 = ""
|
||||
|
||||
#* Custom gpu5 model name, empty string to disable.
|
||||
custom_gpu_name5 = ""
|
||||
119
dot_config/btop/themes/rose-pine.theme
Normal file
119
dot_config/btop/themes/rose-pine.theme
Normal file
@@ -0,0 +1,119 @@
|
||||
# Main background, empty for terminal default, need to be empty if you want transparent background
|
||||
theme[main_bg]="#191724"
|
||||
# Base
|
||||
|
||||
# Main text color
|
||||
theme[main_fg]="#e0def4"
|
||||
# Text
|
||||
|
||||
# Title color for boxes
|
||||
theme[title]="#908caa"
|
||||
# Subtle
|
||||
|
||||
# Highlight color for keyboard shortcuts
|
||||
theme[hi_fg]="#e0def4"
|
||||
# Text
|
||||
|
||||
# Background color of selected item in processes box
|
||||
theme[selected_bg]="#524f67"
|
||||
# HL High
|
||||
|
||||
# Foreground color of selected item in processes box
|
||||
theme[selected_fg]="#f6c177"
|
||||
# Gold
|
||||
|
||||
# Color of inactive/disabled text
|
||||
theme[inactive_fg]="#403d52"
|
||||
# HL Med
|
||||
|
||||
# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
|
||||
theme[graph_text]="#9ccfd8"
|
||||
# Foam
|
||||
|
||||
# Background color of the percentage meters
|
||||
theme[meter_bg]="#9ccfd8"
|
||||
# Foam
|
||||
|
||||
# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
|
||||
theme[proc_misc]="#c4a7e7"
|
||||
# Iris
|
||||
|
||||
# Cpu box outline color
|
||||
theme[cpu_box]="#ebbcba"
|
||||
# Rose
|
||||
|
||||
# Memory/disks box outline color
|
||||
theme[mem_box]="#31748f"
|
||||
# Pine
|
||||
|
||||
# Net up/down box outline color
|
||||
theme[net_box]="#c4a7e7"
|
||||
# Iris
|
||||
|
||||
# Processes box outline color
|
||||
theme[proc_box]="#eb6f92"
|
||||
# Love
|
||||
|
||||
# Box divider line and small boxes line color
|
||||
theme[div_line]="#6e6a86"
|
||||
# Muted
|
||||
|
||||
# Temperature graph colors
|
||||
theme[temp_start]="#ebbcba"
|
||||
# Rose
|
||||
theme[temp_mid]="#f6c177"
|
||||
# Gold
|
||||
theme[temp_end]="#eb6f92"
|
||||
# Love
|
||||
|
||||
# CPU graph colors
|
||||
theme[cpu_start]="#f6c177"
|
||||
# Gold
|
||||
theme[cpu_mid]="#ebbcba"
|
||||
# Rose
|
||||
theme[cpu_end]="#eb6f92"
|
||||
# Love
|
||||
|
||||
# Mem/Disk free meter
|
||||
# all love
|
||||
theme[free_start]="#eb6f92"
|
||||
theme[free_mid]="#eb6f92"
|
||||
theme[free_end]="#eb6f92"
|
||||
|
||||
# Mem/Disk cached meter
|
||||
# all iris
|
||||
theme[cached_start]="#c4a7e7"
|
||||
theme[cached_mid]="#c4a7e7"
|
||||
theme[cached_end]="#c4a7e7"
|
||||
|
||||
# Mem/Disk available meter
|
||||
# all pine
|
||||
theme[available_start]="#31748f"
|
||||
theme[available_mid]="#31748f"
|
||||
theme[available_end]="#31748f"
|
||||
|
||||
# Mem/Disk used meter
|
||||
# all rose
|
||||
theme[used_start]="#ebbcba"
|
||||
theme[used_mid]="#ebbcba"
|
||||
theme[used_end]="#ebbcba"
|
||||
|
||||
# Download graph colors
|
||||
# Pine for start, foam for the rest
|
||||
theme[download_start]="#31748f"
|
||||
theme[download_mid]="#9ccfd8"
|
||||
theme[download_end]="#9ccfd8"
|
||||
|
||||
# Upload graph colors
|
||||
theme[upload_start]="#ebbcba"
|
||||
# Rose for start
|
||||
theme[upload_mid]="#eb6f92"
|
||||
# Love for mid and end
|
||||
theme[upload_end]="#eb6f92"
|
||||
|
||||
# Process box color gradient for threads, mem and cpu usage
|
||||
theme[process_start]="#31748f"
|
||||
# Pine
|
||||
theme[process_mid]="#9ccfd8"
|
||||
# Foam for mid and end
|
||||
theme[process_end]="#9ccfd8"
|
||||
132
dot_config/fuzzel/fuzzel.ini
Normal file
132
dot_config/fuzzel/fuzzel.ini
Normal file
@@ -0,0 +1,132 @@
|
||||
# output=<not set>
|
||||
# font=monospace
|
||||
# dpi-aware=auto
|
||||
# use-bold=no
|
||||
# prompt="> "
|
||||
# placeholder=
|
||||
# icon-theme=default
|
||||
# icons-enabled=yes
|
||||
# hide-before-typing=no
|
||||
# fields=filename,name,generic
|
||||
# password-character=*
|
||||
# filter-desktop=no
|
||||
# match-mode=fzf
|
||||
# sort-result=yes
|
||||
# match-counter=no
|
||||
# delayed-filter-ms=300
|
||||
# delayed-filter-limit=20000
|
||||
# show-actions=no
|
||||
# terminal=$TERMINAL -e # Note: you cannot actually use environment variables here
|
||||
# launch-prefix=<not set>
|
||||
# list-executables-in-path=no
|
||||
|
||||
# anchor=center
|
||||
# x-margin=0
|
||||
# y-margin=0
|
||||
# lines=15
|
||||
# minimal-lines=no
|
||||
# width=30
|
||||
# tabs=8
|
||||
# horizontal-pad=40
|
||||
# vertical-pad=8
|
||||
# inner-pad=0
|
||||
|
||||
lines=10
|
||||
width=40
|
||||
horizontal-pad=50
|
||||
vertical-pad=20
|
||||
inner-pad=20
|
||||
|
||||
# scaling-filter=box
|
||||
# image-size-ratio=0.5
|
||||
|
||||
# gamma-correct-blending=no
|
||||
# line-height=<use font metrics>
|
||||
# letter-spacing=0
|
||||
|
||||
# layer=overlay
|
||||
# keyboard-focus=exclusive
|
||||
# exit-on-keyboard-focus-loss=yes
|
||||
|
||||
# cache=<not set>
|
||||
|
||||
# render-workers=<number of logical CPUs>
|
||||
# match-workers=<number of logical CPUs>
|
||||
|
||||
# enable-mouse=yes
|
||||
|
||||
include=~/.config/fuzzel/themes/rose-pine.ini
|
||||
#[colors]
|
||||
# background=fdf6e3ff
|
||||
# text=657b83ff
|
||||
# prompt=586e75ff
|
||||
# placeholder=93a1a1ff
|
||||
# input=657b83ff
|
||||
# match=cb4b16ff
|
||||
# selection=eee8d5ff
|
||||
# selection-text=586e75ff
|
||||
# selection-match=cb4b16ff
|
||||
# counter=93a1a1ff
|
||||
# border=002b36ff
|
||||
|
||||
[border]
|
||||
width=2
|
||||
radius=20
|
||||
# width=1
|
||||
# radius=10
|
||||
|
||||
[dmenu]
|
||||
# mode=text # text|index
|
||||
# exit-immediately-if-empty=no
|
||||
|
||||
[key-bindings]
|
||||
# cancel=Escape Control+g Control+c Control+bracketleft
|
||||
# execute=Return KP_Enter Control+y
|
||||
# execute-or-next=Tab
|
||||
# execute-input=Shift+Return Shift+KP_Enter
|
||||
# cursor-left=Left Control+b
|
||||
# cursor-left-word=Control+Left Mod1+b
|
||||
# cursor-right=Right Control+f
|
||||
# cursor-right-word=Control+Right Mod1+f
|
||||
# cursor-home=Home Control+a
|
||||
# cursor-end=End Control+e
|
||||
# delete-line=Control+Shift+BackSpace
|
||||
# delete-prev=BackSpace Control+h
|
||||
# delete-prev-word=Mod1+BackSpace Control+BackSpace Control+w
|
||||
# delete-line-backward=Control+u
|
||||
# delete-next=Delete KP_Delete Control+d
|
||||
# delete-next-word=Mod1+d Control+Delete Control+KP_Delete
|
||||
# delete-line-forward=Control+k
|
||||
# prev=Up Control+p
|
||||
# prev-with-wrap=ISO_Left_Tab
|
||||
# prev-page=Page_Up KP_Page_Up
|
||||
# next=Down Control+n
|
||||
# next-with-wrap=none
|
||||
# next-page=Page_Down KP_Page_Down
|
||||
# expunge=Shift+Delete
|
||||
# clipboard-paste=Control+v XF86Paste
|
||||
# primary-paste=Shift+Insert Shift+KP_Insert
|
||||
|
||||
# custom-N: *dmenu mode only*. Like execute, but with a non-zero
|
||||
# exit-code; custom-1 exits with code 10, custom-2 with 11, custom-3
|
||||
# with 12, and so on.
|
||||
|
||||
# custom-1=Mod1+1
|
||||
# custom-2=Mod1+2
|
||||
# custom-3=Mod1+3
|
||||
# custom-4=Mod1+4
|
||||
# custom-5=Mod1+5
|
||||
# custom-6=Mod1+6
|
||||
# custom-7=Mod1+7
|
||||
# custom-8=Mod1+8
|
||||
# custom-9=Mod1+9
|
||||
# custom-10=Mod1+0
|
||||
# custom-11=Mod1+exclam
|
||||
# custom-12=Mod1+at
|
||||
# custom-13=Mod1+numbersign
|
||||
# custom-14=Mod1+dollar
|
||||
# custom-15=Mod1+percent
|
||||
# custom-16=Mod1+dead_circumflex
|
||||
# custom-17=Mod1+ampersand
|
||||
# custom-18=Mod1+asterix
|
||||
# custom-19=Mod1+parentleft
|
||||
12
dot_config/fuzzel/themes/rose-pine.ini
Normal file
12
dot_config/fuzzel/themes/rose-pine.ini
Normal file
@@ -0,0 +1,12 @@
|
||||
[colors]
|
||||
background=#191724ff
|
||||
text=#e0def4ff
|
||||
prompt=#e0def4ff
|
||||
placeholder=#6e6a86ff
|
||||
input=#e0def4ff
|
||||
match=#ebbcbaff
|
||||
selection=#403d52ff
|
||||
selection-text=#e0def4ff
|
||||
selection-match=#ebbcbaff
|
||||
counter=#f6c177ff
|
||||
border=#ebbcbaff
|
||||
11
dot_config/gtk-2.0/gtkfilechooser.ini
Normal file
11
dot_config/gtk-2.0/gtkfilechooser.ini
Normal file
@@ -0,0 +1,11 @@
|
||||
[Filechooser Settings]
|
||||
LocationMode=path-bar
|
||||
ShowHidden=false
|
||||
ShowSizeColumn=true
|
||||
GeometryX=0
|
||||
GeometryY=0
|
||||
GeometryWidth=657
|
||||
GeometryHeight=492
|
||||
SortColumn=name
|
||||
SortOrder=ascending
|
||||
StartupMode=recent
|
||||
2
dot_config/gtk-3.0/gtk.css
Normal file
2
dot_config/gtk-3.0/gtk.css
Normal file
@@ -0,0 +1,2 @@
|
||||
/* Remove dotted lines from GTK 3 applications */
|
||||
.undershoot.top, .undershoot.right, .undershoot.bottom, .undershoot.left { background-image: none; }
|
||||
17
dot_config/gtk-3.0/settings.ini
Normal file
17
dot_config/gtk-3.0/settings.ini
Normal file
@@ -0,0 +1,17 @@
|
||||
[Settings]
|
||||
gtk-theme-name=Adwaita
|
||||
gtk-icon-theme-name=Adwaita
|
||||
gtk-font-name=InconsolataGo Nerd Font Mono 11
|
||||
gtk-cursor-theme-name=volantes
|
||||
gtk-cursor-theme-size=24
|
||||
gtk-toolbar-style=GTK_TOOLBAR_ICONS
|
||||
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
|
||||
gtk-button-images=0
|
||||
gtk-menu-images=0
|
||||
gtk-enable-event-sounds=1
|
||||
gtk-enable-input-feedback-sounds=0
|
||||
gtk-xft-antialias=1
|
||||
gtk-xft-hinting=1
|
||||
gtk-xft-hintstyle=hintslight
|
||||
gtk-xft-rgba=rgb
|
||||
gtk-application-prefer-dark-theme=1
|
||||
7
dot_config/gtk-4.0/settings.ini
Normal file
7
dot_config/gtk-4.0/settings.ini
Normal file
@@ -0,0 +1,7 @@
|
||||
[Settings]
|
||||
gtk-theme-name=Adwaita
|
||||
gtk-icon-theme-name=Adwaita
|
||||
gtk-font-name=InconsolataGo Nerd Font Mono 11
|
||||
gtk-cursor-theme-name=volantes
|
||||
gtk-cursor-theme-size=24
|
||||
gtk-application-prefer-dark-theme=1
|
||||
39
dot_config/hypr/hypridle.conf
Normal file
39
dot_config/hypr/hypridle.conf
Normal file
@@ -0,0 +1,39 @@
|
||||
### based on the example config from hyprland.org
|
||||
|
||||
general {
|
||||
lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances.
|
||||
before_sleep_cmd = loginctl lock-session # lock before suspend.
|
||||
after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display.
|
||||
ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam)
|
||||
ignore_systemd_inhibit = false # whether to ignore systemd-inhibit --what=idle inhibitors
|
||||
}
|
||||
|
||||
|
||||
#listener {
|
||||
# timeout = 150 # 2.5min.
|
||||
# on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor.
|
||||
# on-resume = brightnessctl -r # monitor backlight restore.
|
||||
#}
|
||||
|
||||
# turn off keyboard backlight, comment out this section if you dont have a keyboard backlight.
|
||||
#listener {
|
||||
# timeout = 150 # 2.5min.
|
||||
# on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 # turn off keyboard backlight.
|
||||
# on-resume = brightnessctl -rd rgb:kbd_backlight # turn on keyboard backlight.
|
||||
#}
|
||||
|
||||
listener {
|
||||
timeout = 300 # 5min
|
||||
on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed
|
||||
on-resume = hyprctl dispatch dpms on # screen on when activity is detected after timeout has fired.
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 600 # 10min
|
||||
on-timeout = loginctl lock-session # lock screen when timeout has passed
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 1200 # 20min
|
||||
on-timeout = systemctl suspend # suspend pc
|
||||
}
|
||||
33
dot_config/hypr/hyprland.conf
Normal file
33
dot_config/hypr/hyprland.conf
Normal file
@@ -0,0 +1,33 @@
|
||||
###############
|
||||
### THEME ###
|
||||
###############
|
||||
|
||||
source = ~/.config/hypr/hyprland.d/00-theme.conf
|
||||
|
||||
################
|
||||
### MONITORS ###
|
||||
################
|
||||
|
||||
source = ~/.config/hypr/hyprland.d/10-monitors.conf
|
||||
source = ~/.config/hypr/hyprland.d/20-workspaces.conf
|
||||
|
||||
############################
|
||||
### LAYOUT AND BEHAVIOR ###
|
||||
############################
|
||||
|
||||
source = ~/.config/hypr/hyprland.d/30-general.conf
|
||||
source = ~/.config/hypr/hyprland.d/40-input.conf
|
||||
source = ~/.config/hypr/hyprland.d/50-layout.conf
|
||||
source = ~/.config/hypr/hyprland.d/60-rules.conf
|
||||
|
||||
###################
|
||||
### KEYBINDINGS ###
|
||||
###################
|
||||
|
||||
source = ~/.config/hypr/hyprland.d/70-keybinds.conf
|
||||
|
||||
#################
|
||||
### AUTOSTART ###
|
||||
#################
|
||||
|
||||
source = ~/.config/hypr/hyprland.d/80-autostart.conf
|
||||
1
dot_config/hypr/hyprland.d/00-theme.conf
Normal file
1
dot_config/hypr/hyprland.d/00-theme.conf
Normal file
@@ -0,0 +1 @@
|
||||
source = ~/.config/hypr/hyprland.d/rose-pine.conf
|
||||
14
dot_config/hypr/hyprland.d/10-monitors.conf.tmpl
Normal file
14
dot_config/hypr/hyprland.d/10-monitors.conf.tmpl
Normal file
@@ -0,0 +1,14 @@
|
||||
{{- range .monitors }}
|
||||
monitorv2 {
|
||||
output = {{ .name }}
|
||||
mode = {{ .width }}x{{ .height }}@{{ .refresh_rate }}
|
||||
position = {{ .position }}
|
||||
scale = {{ .scale }}
|
||||
{{- if index . "vrr" }}
|
||||
vrr = {{ .vrr }}
|
||||
{{- end }}
|
||||
}
|
||||
{{- end }}
|
||||
{{- if not .monitors }}
|
||||
monitor = , preferred, auto, 1
|
||||
{{- end }}
|
||||
5
dot_config/hypr/hyprland.d/20-workspaces.conf.tmpl
Normal file
5
dot_config/hypr/hyprland.d/20-workspaces.conf.tmpl
Normal file
@@ -0,0 +1,5 @@
|
||||
{{- range $monitor := .monitors }}
|
||||
{{- range $index, $ws := .workspaces }}
|
||||
workspace = {{ $ws }}, monitor:{{ $monitor.name }}{{ if eq $index 0 }}, default:true{{ end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
101
dot_config/hypr/hyprland.d/30-general.conf
Normal file
101
dot_config/hypr/hyprland.d/30-general.conf
Normal file
@@ -0,0 +1,101 @@
|
||||
# Refer to https://wiki.hyprland.org/Configuring/Variables/
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#general
|
||||
general {
|
||||
gaps_in = 5
|
||||
gaps_out = 5,5,5,5
|
||||
|
||||
border_size = 2
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
|
||||
col.active_border = $border_active
|
||||
col.inactive_border = $border_inactive
|
||||
col.nogroup_border = $border_nogroup_inactive
|
||||
col.nogroup_border_active = $border_nogroup_active
|
||||
|
||||
# Set to true enable resizing windows by clicking and dragging on borders and gaps
|
||||
resize_on_border = false
|
||||
|
||||
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
|
||||
allow_tearing = false
|
||||
|
||||
layout = master
|
||||
}
|
||||
|
||||
render {
|
||||
new_render_scheduling = true
|
||||
}
|
||||
|
||||
cursor {
|
||||
hide_on_key_press = true # Hide cursor when typing
|
||||
persistent_warps = true # Cursor returns to last position in window
|
||||
warp_on_change_workspace = true # Move cursor to focused window on workspace switch
|
||||
|
||||
inactive_timeout = 0
|
||||
zoom_factor = 1.0
|
||||
zoom_rigid = false
|
||||
enable_hyprcursor = true
|
||||
sync_gsettings_theme = true
|
||||
}
|
||||
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#decoration
|
||||
decoration {
|
||||
rounding = 5
|
||||
|
||||
# Change transparency of focused and unfocused windows
|
||||
active_opacity = 1.0
|
||||
inactive_opacity = 1.0
|
||||
|
||||
# Dim inactive windows
|
||||
dim_modal = true
|
||||
dim_inactive = true
|
||||
dim_strength = 0.1
|
||||
|
||||
shadow {
|
||||
enabled = false
|
||||
range = 4
|
||||
render_power = 3
|
||||
color = $dec_shadow
|
||||
}
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#blur
|
||||
blur {
|
||||
enabled = true
|
||||
size = 3
|
||||
passes = 1
|
||||
|
||||
vibrancy = 0.1696
|
||||
}
|
||||
}
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#animations
|
||||
animations {
|
||||
enabled = yes, please :)
|
||||
|
||||
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
||||
|
||||
bezier = easeOutQuint,0.23,1,0.32,1
|
||||
bezier = easeInOutCubic,0.65,0.05,0.36,1
|
||||
bezier = linear,0,0,1,1
|
||||
bezier = almostLinear,0.5,0.5,0.75,1.0
|
||||
bezier = quick,0.15,0,0.1,1
|
||||
|
||||
animation = global, 1, 10, default
|
||||
animation = border, 1, 5.39, easeOutQuint
|
||||
animation = windows, 1, 4.79, easeOutQuint
|
||||
animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
|
||||
animation = windowsOut, 1, 1.49, linear, popin 87%
|
||||
animation = fadeIn, 1, 1.73, almostLinear
|
||||
animation = fadeOut, 1, 1.46, almostLinear
|
||||
animation = fade, 1, 3.03, quick
|
||||
animation = layers, 1, 3.81, easeOutQuint
|
||||
animation = layersIn, 1, 4, easeOutQuint, fade
|
||||
animation = layersOut, 1, 1.5, linear, fade
|
||||
animation = fadeLayersIn, 1, 1.79, almostLinear
|
||||
animation = fadeLayersOut, 1, 1.39, almostLinear
|
||||
animation = workspaces, 1, 1.94, almostLinear, fade
|
||||
animation = workspacesIn, 1, 1.21, almostLinear, fade
|
||||
animation = workspacesOut, 1, 1.94, almostLinear, fade
|
||||
animation = specialWorkspace, 1, 1.5, easeOutQuint, slidevert
|
||||
}
|
||||
34
dot_config/hypr/hyprland.d/40-input.conf.tmpl
Normal file
34
dot_config/hypr/hyprland.d/40-input.conf.tmpl
Normal file
@@ -0,0 +1,34 @@
|
||||
{{- $tags := .chezmoi.config.data.tags -}}
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#input
|
||||
input {
|
||||
kb_layout = ultimatekeys
|
||||
kb_options = caps:escape_shifted_capslock
|
||||
numlock_by_default = true
|
||||
repeat_rate = 25
|
||||
repeat_delay = 600
|
||||
follow_mouse = 1
|
||||
mouse_refocus = true
|
||||
float_switch_override_focus = 2
|
||||
special_fallthrough = true
|
||||
touchpad {
|
||||
disable_while_typing = true
|
||||
scroll_factor = 1.0
|
||||
tap-to-click = true
|
||||
}
|
||||
}
|
||||
|
||||
{{- if (index $tags "desktop") }}
|
||||
device {
|
||||
name = "Logitech Gaming Mouse G502"
|
||||
sensitivity = 0.0
|
||||
accel_profile = flat
|
||||
}
|
||||
{{- end }}
|
||||
|
||||
# Example per-device config
|
||||
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
|
||||
#device {
|
||||
# name = epic-mouse-v1
|
||||
# sensitivity = -0.5
|
||||
#}
|
||||
35
dot_config/hypr/hyprland.d/50-layout.conf
Normal file
35
dot_config/hypr/hyprland.d/50-layout.conf
Normal file
@@ -0,0 +1,35 @@
|
||||
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
||||
dwindle {
|
||||
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||
preserve_split = true # You probably want this
|
||||
smart_split = true
|
||||
}
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
|
||||
master {
|
||||
orientation = left
|
||||
# center_master_fallback = left
|
||||
# slave_count_for_center_master = 4
|
||||
mfact = 0.60
|
||||
new_status = slave
|
||||
new_on_top = true
|
||||
new_on_active = after
|
||||
inherit_fullscreen = true
|
||||
|
||||
allow_small_split = false
|
||||
special_scale_factor = 0.8
|
||||
drop_at_cursor = true
|
||||
}
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#misc
|
||||
misc {
|
||||
force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
|
||||
disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
|
||||
vrr = 2
|
||||
vfr = true
|
||||
mouse_move_enables_dpms = true
|
||||
key_press_enables_dpms = true
|
||||
layers_hog_keyboard_focus = true
|
||||
mouse_move_focuses_monitor = true
|
||||
col.splash = $splash_text
|
||||
}
|
||||
123
dot_config/hypr/hyprland.d/60-rules.conf
Normal file
123
dot_config/hypr/hyprland.d/60-rules.conf
Normal file
@@ -0,0 +1,123 @@
|
||||
# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/
|
||||
# "Smart gaps" / "No gaps when only"
|
||||
# uncomment all if you wish to use that.
|
||||
# workspace = w[tv1], gapsout:0, gapsin:0
|
||||
# workspace = f[1], gapsout:0, gapsin:0
|
||||
# windowrulev2 = bordersize 0, floating:0, onworkspace:w[tv1]
|
||||
# windowrulev2 = rounding 0, floating:0, onworkspace:w[tv1]
|
||||
# windowrulev2 = bordersize 0, floating:0, onworkspace:f[1]
|
||||
# windowrulev2 = rounding 0, floating:0, onworkspace:f[1]
|
||||
|
||||
##############
|
||||
### GROUPS ###
|
||||
##############
|
||||
|
||||
group {
|
||||
auto_group = true
|
||||
insert_after_current = true
|
||||
focus_removed_window = true
|
||||
drag_into_group = 1
|
||||
merge_groups_on_drag = true
|
||||
merge_groups_on_groupbar = true
|
||||
merge_floated_into_tiled_on_groupbar = true
|
||||
group_on_movetoworkspace = false
|
||||
col.border_active = $border_group_active
|
||||
col.border_inactive = $border_group_inactive
|
||||
col.border_locked_active = $border_grouplocked_active
|
||||
col.border_locked_inactive = $border_grouplocked_active
|
||||
|
||||
groupbar{
|
||||
enabled = true
|
||||
height = 12
|
||||
font_family = InconsolataGo Nerd Font Mono
|
||||
font_size = 8
|
||||
font_weight_active = semibold
|
||||
font_weight_inactive = normal
|
||||
stacked = false
|
||||
gradients = true
|
||||
gradient_rounding = 5
|
||||
indicator_height = 0
|
||||
rounding = 0
|
||||
gradient_round_only_edges = true
|
||||
text_color = $groupbar_text
|
||||
col.active = $groupbar_active
|
||||
col.inactive = $groupbar_inactive
|
||||
col.locked_active = $groupbar_grouplocked_active
|
||||
col.locked_inactive = $groupbar_grouplocked_inactive
|
||||
gaps_out = 0
|
||||
gaps_in = 0
|
||||
|
||||
render_titles = true
|
||||
scrolling = true
|
||||
priority = 3
|
||||
}
|
||||
}
|
||||
|
||||
##############################
|
||||
### WINDOWS AND WORKSPACES ###
|
||||
##############################
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
|
||||
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
|
||||
|
||||
# Example windowrule v1
|
||||
# windowrule = float, ^(kitty)$
|
||||
|
||||
# Example windowrule v2
|
||||
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
|
||||
|
||||
# Ignore maximize requests from apps. You'll probably like this.
|
||||
windowrule = suppressevent maximize, class:.*
|
||||
|
||||
# Fix some dragging issues with XWayland
|
||||
windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
|
||||
windowrule = noinitialfocus,xwayland:1
|
||||
|
||||
## ========== Special Workspaces ==========
|
||||
workspace = special:keepass, on-created-empty:keepassxc
|
||||
#windowrule = float, class:org.keepassxc.KeePassXC
|
||||
#windowrule = noscreenshare, class:org.keepassxc.KeePassXC
|
||||
#windowrule = size 60% 60%, class:org.keepassxc.KeePassXC
|
||||
#windowrule = center, class:org.keepassxc.KeePassXC
|
||||
|
||||
## ========== Communication ==========
|
||||
# Mumble & Discord & TeamSpeak
|
||||
windowrule = workspace 2, class:^(info\.mumble\.Mumble|discord|TeamSpeak|vesktop)$
|
||||
# Signal & Element
|
||||
windowrule = workspace 1, class:^(signal|Element)$
|
||||
|
||||
## ========== Multimedia ==========
|
||||
windowrule = workspace 10, class:Spotify
|
||||
|
||||
### ========== Development ==========
|
||||
#windowrulev2 = float, class:jetbrains-webstorm, title:Welcome to WebStorm
|
||||
#windowrulev2 = size 1080 720, class:jetbrains-webstorm, title:Welcome to WebStorm
|
||||
|
||||
## ========== Gaming ==========
|
||||
# Steam & Battle.net & Lutris
|
||||
windowrule = workspace 3, class:^(steam|battle\.net\.exe|net\.lutris\.Lutris)$
|
||||
|
||||
## ========== System ==========
|
||||
windowrule = float, class:com.saivert.pwvucontrol
|
||||
|
||||
windowrule = float, class:scrrec
|
||||
windowrule = pin, class:scrrec
|
||||
windowrule = idleinhibit always, class:scrrec
|
||||
windowrule = rounding 10, class:scrrec
|
||||
windowrule = opacity 0.6, class:scrrec
|
||||
windowrule = noborder, class:scrrec
|
||||
windowrule = size 300 100, class:scrrec
|
||||
windowrule = move 1% 1%, class:scrrec
|
||||
windowrule = monitor 0, class:scrrec
|
||||
windowrule = noinitialfocus, class:scrrec
|
||||
|
||||
windowrule = float, class:com.gabm.satty
|
||||
windowrule = size >700 >400, class:com.gabm.satty
|
||||
|
||||
# Blur swaync
|
||||
#layerrule = blur, swaync-control-center
|
||||
#layerrule = blur, swaync-notification-window
|
||||
#layerrule = ignorezero, swaync-control-center
|
||||
#layerrule = ignorezero, swaync-notification-window
|
||||
#layerrule = ignorealpha, swaync-control-center
|
||||
#layerrule = ignorealpha, swaync-notification-window
|
||||
184
dot_config/hypr/hyprland.d/70-keybinds.conf
Normal file
184
dot_config/hypr/hyprland.d/70-keybinds.conf
Normal file
@@ -0,0 +1,184 @@
|
||||
##############################################
|
||||
################## MY APPS ###################
|
||||
##############################################
|
||||
|
||||
# Set programs that you use
|
||||
$terminal = uwsm app -T
|
||||
$terminal_backup = uwsm app -- kitty
|
||||
$term_tmux = uwsm app -- kitty tmux
|
||||
$term_tmux_append = uwsm app -- kitty tmux a
|
||||
$filemanager = uwsm app -- nautilus
|
||||
$launcher = uwsm app -- sherlock
|
||||
$powermenu = uwsm app -- sherlock -sm pm
|
||||
$clipman = uwsm app -- sherlock-clp | sherlock | cliphist decode | wl-copy
|
||||
$browser = uwsm app -- firefox
|
||||
$browserprv = uwsm app -- firefox --private-window
|
||||
$altbrowser = uwsm app -- chromium
|
||||
$editor = uwsm app -T -- nvim
|
||||
$alteditor = uwsm app -- zeditor
|
||||
$taskman = uwsm app -- uuctl wofi
|
||||
$pwdmgr = uwsm app -- keepassxc
|
||||
$notcenter = uwsm app -- swaync-client -t -sw
|
||||
$notdnd = uwsm app -- swaync-client -d
|
||||
$nothide = uwsm app -- swaync-client --hide-latest
|
||||
$notclose = uwsm app -- swaync-client --close-latest
|
||||
$notcloseall = uwsm app -- swaync-client --close-all
|
||||
$soundctl = uwsm app -- pwvucontrol
|
||||
|
||||
$lockcmd = loginctl lock-session
|
||||
|
||||
##############################################
|
||||
################## KEYBINDS ##################
|
||||
##############################################
|
||||
|
||||
$mainMod = SUPER
|
||||
|
||||
bind = $mainMod, E, exec, $filemanager
|
||||
bind = $mainMod, W, exec, $browser
|
||||
bind = $mainMod SHIFT, W, exec, $browserprv
|
||||
bind = $mainMod CTRL, W, exec, $altbrowser
|
||||
bind = $mainMod Shift, E, exec, $editor
|
||||
bind = $mainMod CTRL, E, exec, $alteditor
|
||||
bind = $mainMod, X, exec, $launcher
|
||||
bind = $mainMod, B, exec, $powermenu
|
||||
bind = $mainMod, C, exec, $clipman
|
||||
bind = $mainMod, Return, exec, $terminal_backup
|
||||
bind = $mainMod SHIFT, Return, exec, $term_tmux
|
||||
bind = $mainMod ALT_L, Return, exec, $term_tmux_append
|
||||
bind = $mainMod CTRL, Return, exec, $terminal
|
||||
bind = $mainMod, Escape, exec, $taskman
|
||||
bind = $mainMod, R, exec, $pwdmgr
|
||||
bind = $mainMod, F4, exec, $soundctl
|
||||
|
||||
bind = $mainMod, Grave, exec, $notcenter
|
||||
bind = $mainMod SHIFT, Grave, exec, $notdnd
|
||||
bind = $mainMod, A, exec, $nothide
|
||||
bind = $mainMod SHIFT, A, exec, $notclose
|
||||
bind = $mainMod CTRL, A, exec, $notcloseall
|
||||
|
||||
bind = $mainMod SHIFT, Pause, exec, uwsm stop
|
||||
bind = $mainMod, Pause, exec, $lockcmd
|
||||
bind = $mainMod SHIFT, Escape, exec, $lockcmd
|
||||
|
||||
bind = $mainMod, I, pin
|
||||
bind = $mainMod, Q, killactive,
|
||||
bind = $mainMod, Space, togglefloating,
|
||||
bind = $mainMod SHIFT, F, fullscreen
|
||||
|
||||
bind = $mainMod SHIFT, S, movetoworkspace, special # move to the special workspace
|
||||
bind = $mainMod, S, togglespecialworkspace # show/hide special workspace
|
||||
|
||||
#dwindle layout
|
||||
bind = $mainMod, Tab, swapsplit,
|
||||
bind = $mainMod SHIFT, Tab, togglesplit,
|
||||
bind = $mainMod CTRL, Tab, layoutmsg, movetoroot
|
||||
bind = $mainMod, P, pseudo,
|
||||
|
||||
#master layout
|
||||
bind = $mainMod, Tab, layoutmsg, swapwithmaster
|
||||
bind = $mainMod SHIFT, Tab, layoutmsg, addmaster
|
||||
bind = $mainMod CTRL, Tab, layoutmsg, removemaster
|
||||
bind = $mainMod CTRL SHIFT, Tab, layoutmsg, rollnext
|
||||
|
||||
# MOVE FOCUS with mainMod + vim keys
|
||||
bind = $mainMod, H, movefocus, l
|
||||
bind = $mainMod, L, movefocus, r
|
||||
bind = $mainMod, K, movefocus, u
|
||||
bind = $mainMod, J, movefocus, d
|
||||
|
||||
# MOVE WINDOW with mainMod SHIFT + vim keys
|
||||
bind = $mainMod SHIFT, H, movewindow, l
|
||||
bind = $mainMod SHIFT, L, movewindow, r
|
||||
bind = $mainMod SHIFT, K, movewindow, u
|
||||
bind = $mainMod SHIFT, J, movewindow, d
|
||||
|
||||
# Resize window with mainMod + CTRL + vim keys
|
||||
bind = $mainMod CTRL, h, resizeactive,-25 0
|
||||
bind = $mainMod CTRL, l, resizeactive,25 0
|
||||
bind = $mainMod CTRL, k, resizeactive,0 -25
|
||||
bind = $mainMod CTRL, j, resizeactive,0 25
|
||||
|
||||
# Special workspaces
|
||||
bind = $mainMod, N, togglespecialworkspace, keepass
|
||||
|
||||
# SWITCH WORKSPACES with mainMod + [0-9]
|
||||
bind = $mainMod, 1, workspace, 1
|
||||
bind = $mainMod, 2, workspace, 2
|
||||
bind = $mainMod, 3, workspace, 3
|
||||
bind = $mainMod, 4, workspace, 4
|
||||
bind = $mainMod, 5, workspace, 5
|
||||
bind = $mainMod, 6, workspace, 6
|
||||
bind = $mainMod, 7, workspace, 7
|
||||
bind = $mainMod, 8, workspace, 8
|
||||
bind = $mainMod, 9, workspace, 9
|
||||
bind = $mainMod, 0, workspace, 10
|
||||
|
||||
# MOVE ACTIVE WINDOW TO A WORKSPACE with mainMod + SHIFT + [0-9]
|
||||
bind = $mainMod SHIFT, 1, movetoworkspace, 1
|
||||
bind = $mainMod SHIFT, 2, movetoworkspace, 2
|
||||
bind = $mainMod SHIFT, 3, movetoworkspace, 3
|
||||
bind = $mainMod SHIFT, 4, movetoworkspace, 4
|
||||
bind = $mainMod SHIFT, 5, movetoworkspace, 5
|
||||
bind = $mainMod SHIFT, 6, movetoworkspace, 6
|
||||
bind = $mainMod SHIFT, 7, movetoworkspace, 7
|
||||
bind = $mainMod SHIFT, 8, movetoworkspace, 8
|
||||
bind = $mainMod SHIFT, 9, movetoworkspace, 9
|
||||
bind = $mainMod SHIFT, 0, movetoworkspace, 10
|
||||
|
||||
# MOVE ACTIVE WINDOW TO A WORKSPACE with mainMod + SHIFT + [0-9]
|
||||
bind = $mainMod CTRL SHIFT, 1, movetoworkspacesilent, 1
|
||||
bind = $mainMod CTRL SHIFT, 2, movetoworkspacesilent, 2
|
||||
bind = $mainMod CTRL SHIFT, 3, movetoworkspacesilent, 3
|
||||
bind = $mainMod CTRL SHIFT, 4, movetoworkspacesilent, 4
|
||||
bind = $mainMod CTRL SHIFT, 5, movetoworkspacesilent, 5
|
||||
bind = $mainMod CTRL SHIFT, 6, movetoworkspacesilent, 6
|
||||
bind = $mainMod CTRL SHIFT, 7, movetoworkspacesilent, 7
|
||||
bind = $mainMod CTRL SHIFT, 8, movetoworkspacesilent, 8
|
||||
bind = $mainMod CTRL SHIFT, 9, movetoworkspacesilent, 9
|
||||
bind = $mainMod CTRL SHIFT, 0, movetoworkspacesilent, 10
|
||||
|
||||
bind = $mainMod, Z, changegroupactive, f
|
||||
bind = $mainMod SHIFT, Z, changegroupactive, b
|
||||
bind = $mainMod CTRL, Z, togglegroup
|
||||
|
||||
bind = $mainMod ALT_L, H, movewindoworgroup, l
|
||||
bind = $mainMod ALT_L, J, movewindoworgroup, d
|
||||
bind = $mainMod ALT_L, K, movewindoworgroup, u
|
||||
bind = $mainMod ALT_L, L, movewindoworgroup, r
|
||||
|
||||
# MOVE/RESIZE WINDOWS with mainMod + LMB/RMB and dragging
|
||||
bindm = $mainMod, mouse:272, movewindow
|
||||
bindm = $mainMod, mouse:273, resizewindow
|
||||
|
||||
# Brightness controls
|
||||
bindel = ,XF86MonBrightnessUp, exec, swayosd-client --brightness +5
|
||||
bindel = ,XF86MonBrightnessDown, exec, swayosd-client --brightness -5
|
||||
|
||||
# Output volume control
|
||||
bindel = ,XF86AudioRaiseVolume, exec, swayosd-client --output-volume raise --max-volume 150
|
||||
bindel = ,XF86AudioLowerVolume, exec, swayosd-client --output-volume lower --max-volume 150
|
||||
bindel = ,XF86AudioMute, exec, swayosd-client --output-volume mute-toggle
|
||||
|
||||
# Input volume control
|
||||
bindel = SHIFT ,XF86AudioRaiseVolume, exec, swayosd-client --input-volume raise --max-volume 150
|
||||
bindel = SHIFT ,XF86AudioLowerVolume, exec, swayosd-client --input-volume lower --max-volume 150
|
||||
bindel = SHIFT ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_SOURCE@ toggle
|
||||
|
||||
# Zoom control
|
||||
bind = $mainMod, M, exec, hyprctl keyword cursor:zoom_factor 2
|
||||
bind = $mainMod SHIFT, M, exec, hyprctl keyword cursor:zoom_factor 1
|
||||
|
||||
# Requires playerctl
|
||||
bindl = , XF86AudioNext, exec, swayosd-client --playerctl next
|
||||
bindl = , XF86AudioPause, exec, swayosd-client --playerctl play-pause
|
||||
bindl = , XF86AudioPlay, exec, swayosd-client --playerctl play-pause
|
||||
bindl = , XF86AudioPrev, exec, swayosd-client --playerctl previous
|
||||
|
||||
# Screenshot and recording controls
|
||||
bind = , Print, exec, grimblast --notify copy output
|
||||
bind = CTRL, Print, exec, grimblast --notify edit output
|
||||
bind = $mainMod, Print, exec, grimblast --notify edit area
|
||||
bind = ALT_L, Print, exec, grimblast --notify copy screen
|
||||
bind = ALT_L SHIFT, Print, exec, grimblast --notify edit screen
|
||||
|
||||
bind = SHIFT, Print, exec, uwsm app -- kitty --app-id=scrrec wf-recorder -f ~/Videos/scrrec.mkv -y -g "$(slurp)"
|
||||
6
dot_config/hypr/hyprland.d/80-autostart.conf
Normal file
6
dot_config/hypr/hyprland.d/80-autostart.conf
Normal file
@@ -0,0 +1,6 @@
|
||||
# AUTOSTART
|
||||
# most apps are either started as systemd service like either directly like hyprpolkitagent or indirectly via uwsm
|
||||
# and ~/.config/autostart
|
||||
exec-once = wl-paste --type text --watch cliphist store
|
||||
exec-once = wl-paste --type image --watch cliphist store
|
||||
exec-once = wl-clip-persist --clipboard regular
|
||||
97
dot_config/hypr/hyprland.d/catpuccinmocha.conf
Normal file
97
dot_config/hypr/hyprland.d/catpuccinmocha.conf
Normal file
@@ -0,0 +1,97 @@
|
||||
#######################################
|
||||
### CATTPUCCIN MOCHA HYPRLAND THEME ###
|
||||
#######################################
|
||||
|
||||
$rosewater = rgb(f5e0dc)
|
||||
$rosewaterAlpha = f5e0dc
|
||||
|
||||
$flamingo = rgb(f2cdcd)
|
||||
$flamingoAlpha = f2cdcd
|
||||
|
||||
$pink = rgb(f5c2e7)
|
||||
$pinkAlpha = f5c2e7
|
||||
|
||||
$mauve = rgb(cba6f7)
|
||||
$mauveAlpha = cba6f7
|
||||
|
||||
$red = rgb(f38ba8)
|
||||
$redAlpha = f38ba8
|
||||
|
||||
$maroon = rgb(eba0ac)
|
||||
$maroonAlpha = eba0ac
|
||||
|
||||
$peach = rgb(fab387)
|
||||
$peachAlpha = fab387
|
||||
|
||||
$yellow = rgb(f9e2af)
|
||||
$yellowAlpha = f9e2af
|
||||
|
||||
$green = rgb(a6e3a1)
|
||||
$greenAlpha = a6e3a1
|
||||
|
||||
$teal = rgb(94e2d5)
|
||||
$tealAlpha = 94e2d5
|
||||
|
||||
$sky = rgb(89dceb)
|
||||
$skyAlpha = 89dceb
|
||||
|
||||
$sapphire = rgb(74c7ec)
|
||||
$sapphireAlpha = 74c7ec
|
||||
|
||||
$blue = rgb(89b4fa)
|
||||
$blueAlpha = 89b4fa
|
||||
|
||||
$lavender = rgb(b4befe)
|
||||
$lavenderAlpha = b4befe
|
||||
|
||||
$text = rgb(cdd6f4)
|
||||
$textAlpha = cdd6f4
|
||||
|
||||
$subtext1 = rgb(bac2de)
|
||||
$subtext1Alpha = bac2de
|
||||
|
||||
$subtext0 = rgb(a6adc8)
|
||||
$subtext0Alpha = a6adc8
|
||||
|
||||
$overlay2 = rgb(9399b2)
|
||||
$overlay2Alpha = 9399b2
|
||||
|
||||
$overlay1 = rgb(7f849c)
|
||||
$overlay1Alpha = 7f849c
|
||||
|
||||
$overlay0 = rgb(6c7086)
|
||||
$overlay0Alpha = 6c7086
|
||||
|
||||
$surface2 = rgb(585b70)
|
||||
$surface2Alpha = 585b70
|
||||
|
||||
$surface1 = rgb(45475a)
|
||||
$surface1Alpha = 45475a
|
||||
|
||||
$surface0 = rgb(313244)
|
||||
$surface0Alpha = 313244
|
||||
|
||||
$base = rgb(1e1e2e)
|
||||
$baseAlpha = 1e1e2e
|
||||
|
||||
$mantle = rgb(181825)
|
||||
$mantleAlpha = 181825
|
||||
|
||||
$crust = rgb(11111b)
|
||||
$crustAlpha = 11111b
|
||||
|
||||
$splash_text = rgba($textAlphaee)
|
||||
$dec_shadow = rgba($surface0Alpha88)
|
||||
$border_active = rgba($pinkAlphaff) rgba($mauveAlphaff) 45deg
|
||||
$border_inactive = rgba($redAlphabb) rgba($mauveAlphabb) 45deg
|
||||
$border_nogroup_active = rgba($tealAlphaff) rgba($yellowAlphaff) 45deg
|
||||
$border_nogroup_inactive = rgba($tealAlphaaa) rgba($yellowAlphaff) 45deg
|
||||
$border_group_active = rgba($sapphireAlphaff) rgba($lavenderAlphaff) 45deg
|
||||
$border_group_inactive = rgba($blueAlphadd) rgba($peachAlphadd) 45deg
|
||||
$border_grouplocked_active = rgba($maroonAlphaff) rgba(f7767eff) 45deg
|
||||
$border_grouplocked_inactive = rgba(ff007caa) rgba(f7767eff) 45deg
|
||||
$groupbar_text = rgba($baseAlphaff)
|
||||
$groupbar_active = rgba($sapphireAlphaff) rgba($lavenderAlphaaa)
|
||||
$groupbar_inactive = rgba($blueAlphaee) rgba($lavenderAlphaaa)
|
||||
$groupbar_grouplocked_active = rgba($tealAlphaff) rgba($greenAlphaff)
|
||||
$groupbar_grouplocked_inactive = rgba($tealAlphaaa) rgba($greenAlphaaa)
|
||||
18
dot_config/hypr/hyprland.d/default_theme.conf
Normal file
18
dot_config/hypr/hyprland.d/default_theme.conf
Normal file
@@ -0,0 +1,18 @@
|
||||
##################################
|
||||
### TOKYO NIGHT HYPRLAND THEME ###
|
||||
##################################
|
||||
$splash_text = rgba(ffffffff)
|
||||
$dec_shadow = rgba(1a1a1aee)
|
||||
$border_active = rgba(33ccffee) rgba(00ff99ee) 45deg
|
||||
$border_inactive = rgba(595959aa)
|
||||
$border_nogroup_active =
|
||||
$border_nogroup_inactive =
|
||||
$border_group_active = 0x66ffff00
|
||||
$border_group_inactive = 0x66777700
|
||||
$border_grouplocked_active = 0x66ff5500
|
||||
$border_grouplocked_inactive = 0x66ff5500
|
||||
$groupbar_text = 0xffffffff
|
||||
$groupbar_active = 0x66ffff00
|
||||
$groupbar_inactive = 0x66777700
|
||||
$groupbar_grouplocked_active = 0x66ff5500
|
||||
$groupbar_grouplocked_inactive = 0x66775500
|
||||
72
dot_config/hypr/hyprland.d/rose-pine.conf
Normal file
72
dot_config/hypr/hyprland.d/rose-pine.conf
Normal file
@@ -0,0 +1,72 @@
|
||||
#####################################
|
||||
### ROSÉ PINE HYPRLAND THEME ###
|
||||
#####################################
|
||||
|
||||
# Base colors
|
||||
$base = rgb(191724)
|
||||
$baseAlpha = 191724
|
||||
|
||||
$surface = rgb(1f1d2e)
|
||||
$surfaceAlpha = 1f1d2e
|
||||
|
||||
$overlay = rgb(26233a)
|
||||
$overlayAlpha = 26233a
|
||||
|
||||
$muted = rgb(6e6a86)
|
||||
$mutedAlpha = 6e6a86
|
||||
|
||||
$subtle = rgb(908caa)
|
||||
$subtleAlpha = 908caa
|
||||
|
||||
$text = rgb(e0def4)
|
||||
$textAlpha = e0def4
|
||||
|
||||
# Accent colors
|
||||
$love = rgb(eb6f92)
|
||||
$loveAlpha = eb6f92
|
||||
|
||||
$gold = rgb(f6c177)
|
||||
$goldAlpha = f6c177
|
||||
|
||||
$rose = rgb(ebbcba)
|
||||
$roseAlpha = ebbcba
|
||||
|
||||
$pine = rgb(31748f)
|
||||
$pineAlpha = 31748f
|
||||
|
||||
$foam = rgb(9ccfd8)
|
||||
$foamAlpha = 9ccfd8
|
||||
|
||||
$iris = rgb(c4a7e7)
|
||||
$irisAlpha = c4a7e7
|
||||
|
||||
# Highlight variants
|
||||
$highlight_low = rgb(21202e)
|
||||
$highlight_lowAlpha = 21202e
|
||||
|
||||
$highlight_med = rgb(403d52)
|
||||
$highlight_medAlpha = 403d52
|
||||
|
||||
$highlight_high = rgb(524f67)
|
||||
$highlight_highAlpha = 524f67
|
||||
|
||||
# Theme-specific definitions
|
||||
$splash_text = rgba($textAlphaee)
|
||||
$dec_shadow = rgba($overlayAlpha88)
|
||||
|
||||
# Border configurations
|
||||
$border_active = rgba($roseAlphaff) rgba($irisAlphaff) 45deg
|
||||
$border_inactive = rgba($mutedAlphabb) rgba($subtleAlphabb) 45deg
|
||||
$border_nogroup_active = rgba($pineAlphaff) rgba($foamAlphaff) 45deg
|
||||
$border_nogroup_inactive = rgba($pineAlphaaa) rgba($foamAlphaaa) 45deg
|
||||
$border_group_active = rgba($irisAlphaff) rgba($loveAlphaff) 45deg
|
||||
$border_group_inactive = rgba($mutedAlphadd) rgba($subtleAlphadd) 45deg
|
||||
$border_grouplocked_active = rgba($goldAlphaff) rgba($roseAlphaff) 45deg
|
||||
$border_grouplocked_inactive = rgba($goldAlphaaa) rgba($roseAlphaaa) 45deg
|
||||
|
||||
# Group bar configurations
|
||||
$groupbar_text = rgba($baseAlphaff)
|
||||
$groupbar_active = rgba($roseAlphaff) rgba($irisAlphaaa)
|
||||
$groupbar_inactive = rgba($mutedAlphaee) rgba($subtleAlphaaa)
|
||||
$groupbar_grouplocked_active = rgba($goldAlphaff) rgba($loveAlphaff)
|
||||
$groupbar_grouplocked_inactive = rgba($goldAlphaaa) rgba($loveAlphaaa)
|
||||
18
dot_config/hypr/hyprland.d/tokyonight.conf
Normal file
18
dot_config/hypr/hyprland.d/tokyonight.conf
Normal file
@@ -0,0 +1,18 @@
|
||||
##################################
|
||||
### TOKYO NIGHT HYPRLAND THEME ###
|
||||
##################################
|
||||
$splash_text = rgba(a9b1d6ee)
|
||||
$dec_shadow = rgba(737aa2ee)
|
||||
$border_active = rgba(9ece6aff) rgba(7aa2f7ff) 45deg
|
||||
$border_inactive = rgba(9d7cd8aa) rgba(7aa2f7ff) 45deg
|
||||
$border_nogroup_active = rgba(7aa2f7ff) rgba(89ddffff) 45deg
|
||||
$border_nogroup_inactive = rgba(7aa2f7aa) rgba(89ddffaa) 45deg
|
||||
$border_group_active = rgba(ff9e64ff) rgba(ff0e64ff) 45deg
|
||||
$border_group_inactive = rgba(ff9e64aa) rgba(ff0e64aa) 45deg
|
||||
$border_grouplocked_active = rgba(ff007cff) rgba(f7767eff) 45deg
|
||||
$border_grouplocked_inactive = rgba(ff007caa) rgba(f7767eff) 45deg
|
||||
$groupbar_text = rgba(1f2335ff)
|
||||
$groupbar_active = rgba(ff9e64ee) rgba(ff9e6499)
|
||||
$groupbar_inactive = rgba(ff9e64bb) rgba(ff9e6499)
|
||||
$groupbar_grouplocked_active = rgba(ff007cee) rgba(ff007c99)
|
||||
$groupbar_grouplocked_inactive = rgba(ff007cbb) rgba(ff007c99)
|
||||
29
dot_config/hypr/hyprland.wiki/LICENSE
Normal file
29
dot_config/hypr/hyprland.wiki/LICENSE
Normal 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.
|
||||
39
dot_config/hypr/hyprland.wiki/README.md
Normal file
39
dot_config/hypr/hyprland.wiki/README.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# Hyprland Wiki
|
||||
|
||||
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 1–2 minutes).
|
||||
You can find the site at [https://wiki.hypr.land/](https://wiki.hypr.land/)
|
||||
|
||||
## Contributing to the Wiki
|
||||
|
||||
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.
|
||||
|
||||
Commits should have the form:
|
||||
|
||||
`Dir/Page: summary of changes`
|
||||
|
||||
Optionally, you can include a longer commit message 2 lines below the commit
|
||||
title.
|
||||
|
||||
This format makes it easier to glance over the commit list and figure out what
|
||||
each commit is about.
|
||||
|
||||
Additionally, if you make many changes in your PR, it is best to squash them
|
||||
into self-contained commits that contain one logical change.
|
||||
|
||||
For info about how to squash commits, see [this](https://stackoverflow.com/a/5189600).
|
||||
|
||||
## Local development
|
||||
|
||||
To see your local changes, make sure to have `go` and `hugo` installed. Then, run
|
||||
|
||||
```sh
|
||||
$ hugo serve
|
||||
```
|
||||
|
||||
and open `http://localhost:1313` to see the locally-rendered wiki.
|
||||
|
||||
## License
|
||||
|
||||
This repository is licensed under the [BSD 3-Clause License](./LICENSE).
|
||||
8
dot_config/hypr/hyprland.wiki/assets/css/custom.css
Normal file
8
dot_config/hypr/hyprland.wiki/assets/css/custom.css
Normal file
@@ -0,0 +1,8 @@
|
||||
:root {
|
||||
--primary-hue: 186deg;
|
||||
--primary-saturation: 100%;
|
||||
}
|
||||
|
||||
.outdated span {
|
||||
color: #df1500;
|
||||
}
|
||||
118
dot_config/hypr/hyprland.wiki/config.toml
Normal file
118
dot_config/hypr/hyprland.wiki/config.toml
Normal file
@@ -0,0 +1,118 @@
|
||||
baseURL = "https://wiki.hypr.land/"
|
||||
title = "Hyprland Wiki"
|
||||
enableRobotsTXT = true
|
||||
enableGitInfo = true
|
||||
defaultContentLanguage = "en"
|
||||
enableInlineShortcodes = true
|
||||
languageCode = 'en-us'
|
||||
pluralizeListTitles = false
|
||||
disablePathToLower = true
|
||||
|
||||
[outputs]
|
||||
home = ["HTML"]
|
||||
page = ["HTML"]
|
||||
section = ["HTML", "RSS"]
|
||||
|
||||
[module.imports]
|
||||
path = "github.com/imfing/hextra"
|
||||
|
||||
[markup.goldmark.renderer]
|
||||
unsafe = true
|
||||
|
||||
[markup.goldmark.renderHooks.link]
|
||||
useEmbedded = "fallback"
|
||||
|
||||
[markup.highlight]
|
||||
noClasses = false
|
||||
|
||||
[[menu.main]]
|
||||
identifier = "version"
|
||||
name = "Latest git"
|
||||
url = "https://wiki.hypr.land/version-selector/"
|
||||
weight = 1
|
||||
[[menu.main.params]]
|
||||
type = "version"
|
||||
outdated = false # set for any version that isn't the current one
|
||||
version = "" # only change when setting the version, otherwise it is "Latest git" by default
|
||||
|
||||
[[menu.main]]
|
||||
identifier = "Home"
|
||||
name = "Home"
|
||||
url = "https://hypr.land/"
|
||||
weight = 2
|
||||
|
||||
[[menu.main]]
|
||||
identifier = "showcase"
|
||||
name = "Showcase"
|
||||
url = "https://hypr.land/hall_of_fame"
|
||||
weight = 3
|
||||
|
||||
[[menu.main]]
|
||||
identifier = "News"
|
||||
name = "News"
|
||||
url = "https://hypr.land/news"
|
||||
weight = 4
|
||||
|
||||
[[menu.main]]
|
||||
name = "Search"
|
||||
weight = 5
|
||||
[menu.main.params]
|
||||
type = "search"
|
||||
|
||||
#[[menu.main]]
|
||||
#name = "Discord"
|
||||
#weight = 6
|
||||
#url = "https://discord.gg/hyprland-cathedral-961691461554950145"
|
||||
#[menu.main.params]
|
||||
#icon = "discord"
|
||||
|
||||
[[menu.main]]
|
||||
name = "GitHub"
|
||||
weight = 7
|
||||
url = "https://github.com/hyprwm/Hyprland"
|
||||
[menu.main.params]
|
||||
icon = "github"
|
||||
|
||||
[params]
|
||||
description = "The documentation for Hyprland."
|
||||
displayUpdatedDate = true
|
||||
dateFormat = "January 2, 2006"
|
||||
|
||||
[params.navbar]
|
||||
displayTitle = true
|
||||
displayLogo = true
|
||||
width = "full"
|
||||
|
||||
[params.navbar.logo]
|
||||
path = "favicon.svg"
|
||||
dark = "favicon-dark.svg"
|
||||
|
||||
[params.page]
|
||||
width = "full"
|
||||
|
||||
[params.theme]
|
||||
default = "dark"
|
||||
displayToggle = true
|
||||
|
||||
[params.footer]
|
||||
enable = false
|
||||
displayCopyright = true
|
||||
displayPoweredBy = true
|
||||
width = "normal"
|
||||
|
||||
[params.search]
|
||||
enable = true
|
||||
type = "flexsearch"
|
||||
|
||||
[params.search.flexsearch]
|
||||
index = "content"
|
||||
|
||||
[params.editURL]
|
||||
enable = true
|
||||
base = "https://github.com/hyprwm/hyprland-wiki/edit/main/content/"
|
||||
|
||||
[params.blog.list]
|
||||
displayTags = true
|
||||
|
||||
[params.comments]
|
||||
enable = false
|
||||
115
dot_config/hypr/hyprland.wiki/content/Configuring/Animations.md
Normal file
115
dot_config/hypr/hyprland.wiki/content/Configuring/Animations.md
Normal file
@@ -0,0 +1,115 @@
|
||||
---
|
||||
weight: 9
|
||||
title: Animations
|
||||
---
|
||||
|
||||
## General
|
||||
|
||||
Animations are declared with the `animation` keyword.
|
||||
|
||||
```ini
|
||||
animation = NAME, ONOFF, SPEED, CURVE [,STYLE]
|
||||
```
|
||||
|
||||
`ONOFF` use `0` to disable, `1` to enable. _Note:_ if it's `0`, you
|
||||
can omit further args.
|
||||
|
||||
`SPEED` is the amount of ds (1ds = 100ms) the animation will take.
|
||||
|
||||
`CURVE` is the bezier curve name, see [curves](#curves).
|
||||
|
||||
`STYLE` (optional) is the animation style.
|
||||
|
||||
The animations are a tree. If an animation is unset, it will inherit its
|
||||
parent's values. See [the animation tree](#animation-tree).
|
||||
|
||||
### Examples
|
||||
|
||||
```ini
|
||||
animation = workspaces, 1, 8, default
|
||||
animation = windows, 1, 10, myepiccurve, slide
|
||||
animation = fade, 0
|
||||
```
|
||||
|
||||
### Animation tree
|
||||
|
||||
```txt
|
||||
global
|
||||
↳ windows - styles: slide, popin, gnomed
|
||||
↳ windowsIn - window open - styles: same as windows
|
||||
↳ windowsOut - window close - styles: same as windows
|
||||
↳ windowsMove - everything in between, moving, dragging, resizing.
|
||||
↳ layers - styles: slide, popin, fade
|
||||
↳ layersIn - layer open
|
||||
↳ layersOut - layer close
|
||||
↳ fade
|
||||
↳ fadeIn - fade in for window open
|
||||
↳ fadeOut - fade out for window close
|
||||
↳ fadeSwitch - fade on changing activewindow and its opacity
|
||||
↳ fadeShadow - fade on changing activewindow for shadows
|
||||
↳ fadeDim - the easing of the dimming of inactive windows
|
||||
↳ fadeLayers - for controlling fade on layers
|
||||
↳ fadeLayersIn - fade in for layer open
|
||||
↳ fadeLayersOut - fade out for layer close
|
||||
↳ fadePopups - for controlling fade on wayland popups
|
||||
↳ fadePopupsIn - fade in for wayland popup open
|
||||
↳ fadePopupsOut - fade out for wayland popup close
|
||||
↳ fadeDpms - for controlling fade when dpms is toggled
|
||||
↳ border - for animating the border's color switch speed
|
||||
↳ borderangle - for animating the border's gradient angle - styles: once (default), loop
|
||||
↳ workspaces - styles: slide, slidevert, fade, slidefade, slidefadevert
|
||||
↳ workspacesIn - styles: same as workspaces
|
||||
↳ workspacesOut - styles: same as workspaces
|
||||
↳ specialWorkspace - styles: same as workspaces
|
||||
↳ specialWorkspaceIn - styles: same as workspaces
|
||||
↳ specialWorkspaceOut - styles: same as workspaces
|
||||
↳ zoomFactor - animates the screen zoom
|
||||
↳ monitorAdded - monitor added zoom animation
|
||||
```
|
||||
|
||||
> [!WARNING]
|
||||
> Using the `loop` style for `borderangle` requires Hyprland to _constantly_ render new frames at a frequency equal to your screen's refresh rate (e.g. 60 times per second for a 60hz monitor), which might stress your CPU/GPU and will impact battery life. <br>
|
||||
> This will apply even if animations are disabled or borders are not visible.
|
||||
|
||||
## Curves
|
||||
|
||||
Defining your own [Bézier curve](https://en.wikipedia.org/wiki/B%C3%A9zier_curve) can be done with the `bezier` keyword:
|
||||
|
||||
```ini
|
||||
bezier = NAME, X0, Y0, X1, Y1
|
||||
```
|
||||
|
||||
where `NAME` is a name of your choice and `X0, Y0, X1, Y1` are the the two control points for a Cubic Bézier curve. <br>
|
||||
A good website to design your own Bézier can be [cssportal.com](https://www.cssportal.com/css-cubic-bezier-generator/). <br>
|
||||
If you want to instead choose from a list of pre-made Béziers, you can check out [easings.net](https://easings.net).
|
||||
|
||||
### Example
|
||||
|
||||
```ini
|
||||
bezier = overshoot, 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, the following will make the animation 80% -> 100% of
|
||||
the size:
|
||||
|
||||
```ini
|
||||
animation = windows, 1, 8, default, popin 80%
|
||||
```
|
||||
|
||||
For animation styles `slide`, `slidevert`, `slidefade` and `slidefadevert` in `workspaces`, you can
|
||||
specify a movement percentage. For example, the following will make windows move
|
||||
20% of the screen width:
|
||||
|
||||
```ini
|
||||
animation = workspaces, 1, 8, default, slidefade 20%
|
||||
```
|
||||
|
||||
For animation style `slide` in `windows` and `layers` you can specify a forced side. <br>
|
||||
You can choose between `top`, `bottom`, `left` or `right`.
|
||||
|
||||
```ini
|
||||
animation = windows, 1, 8, default, slide left
|
||||
```
|
||||
483
dot_config/hypr/hyprland.wiki/content/Configuring/Binds.md
Normal file
483
dot_config/hypr/hyprland.wiki/content/Configuring/Binds.md
Normal file
@@ -0,0 +1,483 @@
|
||||
---
|
||||
weight: 5
|
||||
title: Binds
|
||||
---
|
||||
|
||||
## Basic
|
||||
|
||||
```ini
|
||||
bind = MODS, key, dispatcher, params
|
||||
```
|
||||
|
||||
for example,
|
||||
|
||||
```ini
|
||||
bind = SUPER_SHIFT, Q, exec, firefox
|
||||
```
|
||||
|
||||
will bind opening Firefox to <key>SUPER</key> + <key>SHIFT</key> + <key>Q</key>
|
||||
|
||||
> [!NOTE]
|
||||
> For binding keys without a modkey, leave it empty:
|
||||
>
|
||||
> ```ini
|
||||
> bind = , Print, exec, grim
|
||||
> ```
|
||||
|
||||
_For a complete mod list, see [Variables](../Variables/#variable-types)._
|
||||
|
||||
_The dispatcher list can be found in
|
||||
[Dispatchers](../Dispatchers/#list-of-dispatchers)._
|
||||
|
||||
## Uncommon syms / binding with a keycode
|
||||
|
||||
See the
|
||||
[xkbcommon-keysyms.h header](https://github.com/xkbcommon/libxkbcommon/blob/master/include/xkbcommon/xkbcommon-keysyms.h)
|
||||
for all the keysyms. The name you should use is the segment after `XKB_KEY_`.
|
||||
|
||||
If you want to bind by a keycode, you can put it in the KEY position with
|
||||
a `code:` prefix, e.g.:
|
||||
|
||||
```ini
|
||||
bind = SUPER, code:28, exec, amongus
|
||||
```
|
||||
|
||||
This will bind <key>SUPER</key> + <key>t</key> since <key>t</key> is keycode 28.
|
||||
|
||||
> [!NOTE]
|
||||
> If you are unsure of what your key's name or keycode is, you can use [`wev`](https://github.com/jwrdegoede/wev) to find out.
|
||||
|
||||
## Misc
|
||||
|
||||
### Workspace bindings on non-QWERTY layouts
|
||||
|
||||
Keys used for keybinds need to be accessible without any modifiers in your layout.
|
||||
For instance, the [French AZERTY](https://en.wikipedia.org/wiki/AZERTY) layout uses <key>SHIFT</key> + _`unmodified key`_ to write `0-9` numbers. As such, the workspace keybinds for this layout need to use the names of the _`unmodified keys`_ , and will not work when using the `0-9` numbers.
|
||||
|
||||
> [!NOTE]
|
||||
> To get the correct name for an `unmodified_key`, refer to [the section on uncommon syms](#uncommon-syms--binding-with-a-keycode)
|
||||
|
||||
```ini
|
||||
# On a French layout, instead of:
|
||||
# bind = $mainMod, 1, workspace, 1
|
||||
|
||||
# Use
|
||||
bind = $mainMod, ampersand, workspace, 1
|
||||
```
|
||||
|
||||
For help configuring the French AZERTY layout, see this [article](https://rherault.dev/articles/hyprland-fr-layout).
|
||||
|
||||
### Unbind
|
||||
|
||||
You can also unbind a key with the `unbind` keyword, e.g.:
|
||||
|
||||
```ini
|
||||
unbind = SUPER, O
|
||||
```
|
||||
|
||||
This may be useful for dynamic keybindings with `hyprctl`, e.g.:
|
||||
|
||||
```bash
|
||||
hyprctl keyword unbind SUPER, O
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> In `unbind`, key is case-sensitive It must exactly match the case of the `bind` you are unbinding.
|
||||
>
|
||||
> ```ini
|
||||
> bind = SUPER, TAB, workspace, e+1
|
||||
> unbind = SUPER, Tab # this will NOT unbind
|
||||
> unbind = SUPER, TAB # this will unbind
|
||||
> ```
|
||||
|
||||
## Bind flags
|
||||
|
||||
`bind` supports flags in this format:
|
||||
|
||||
```ini
|
||||
bind[flags] = ...
|
||||
```
|
||||
|
||||
e.g.:
|
||||
|
||||
```ini
|
||||
bindrl = MOD, KEY, exec, amongus
|
||||
```
|
||||
|
||||
Available flags:
|
||||
|
||||
| Flag | Name | Description |
|
||||
|------|------|-------------|
|
||||
| `l` | locked | Will also work when an input inhibitor (e.g. a lockscreen) is active. |
|
||||
| `r` | release | Will trigger on release of a key. |
|
||||
| `c` | click | Will trigger on release of a key or button as long as the mouse cursor stays inside `binds:drag_threshold`. |
|
||||
| `g` | drag | Will trigger on release of a key or button as long as the mouse cursor moves outside `binds:drag_threshold`. |
|
||||
| `o` | long press | Will trigger on long press of a key. |
|
||||
| `e` | repeat | Will repeat when held. |
|
||||
| `n` | non-consuming | Key/mouse events will be passed to the active window in addition to triggering the dispatcher. |
|
||||
| `m` | mouse | See the dedicated [Mouse Binds](#mouse-binds) section. |
|
||||
| `t` | transparent | Cannot be shadowed by other binds. |
|
||||
| `i` | ignore mods | Will ignore modifiers. |
|
||||
| `s` | separate | Will arbitrarily combine keys between each mod/key, see [Keysym combos](#keysym-combos). |
|
||||
| `d` | has description | Will allow you to write a description for your bind. |
|
||||
| `p` | bypass | Bypasses the app's requests to inhibit keybinds. |
|
||||
| `u` | submap universal | Will be active no matter the submap. |
|
||||
|
||||
Example Usage:
|
||||
|
||||
```ini
|
||||
# Example volume button that allows press and hold, volume limited to 150%
|
||||
binde = , XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @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%-
|
||||
|
||||
# Open wofi on first press, closes it on second
|
||||
bindr = SUPER, SUPER_L, exec, pkill wofi || wofi
|
||||
|
||||
# Describe a bind
|
||||
bindd = SUPER, Q, Open my favourite terminal, exec, kitty
|
||||
|
||||
# Skip player on long press and only skip 5s on normal press
|
||||
bindo = SUPER, XF86AudioNext, exec, playerctl next
|
||||
bind = SUPER, XF86AudioNext, exec, playerctl position +5
|
||||
```
|
||||
|
||||
### Mouse buttons
|
||||
|
||||
You can also bind or unbind mouse buttons by prefacing the mouse keycode with `mouse:`, e.g.:
|
||||
|
||||
```ini
|
||||
bind = SUPER, mouse:272, exec, amongus # bind `exec amogus` to SUPER + LMB.
|
||||
```
|
||||
|
||||
### Binding modkeys only
|
||||
|
||||
To only bind modkeys, you need to use the TARGET modmask (with the
|
||||
activating mod) and the `r` flag, e.g.:
|
||||
|
||||
```ini
|
||||
bindr = SUPER ALT, Alt_L, exec, amongus # bind `exec amongus` to SUPER + ALT.
|
||||
```
|
||||
|
||||
### Keysym combos
|
||||
|
||||
For an arbitrary combination of multiple keys, separate keysyms with `&` between
|
||||
each mod/key, and use the `s` flag, e.g.:
|
||||
|
||||
```ini
|
||||
# You can use a single mod with multiple keys.
|
||||
binds = Control_L, A&Z, exec, kitty
|
||||
# You can also specify multiple specific mods.
|
||||
binds = Control_L&Shift_L, K, exec, kitty
|
||||
# You can also do both!
|
||||
binds = Control_R&Super_R&Alt_L, J&K&L, exec, kitty
|
||||
# If you are feeling a little wild... you can use other keys for binds...
|
||||
binds = Escape&Apostrophe&F7, T&O&A&D, exec, battletoads 2: retoaded
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> Please note that this is only valid for keysyms and it makes all mods keysyms.
|
||||
> If you don't know what a keysym is use `wev` and press the key you want to use.
|
||||
|
||||
### Mouse wheel
|
||||
|
||||
You can also bind mouse wheel events with `mouse_up` and `mouse_down` (or
|
||||
`mouse_left` and `mouse_right` if your mouse supports horizontal scrolling):
|
||||
|
||||
```ini
|
||||
bind = SUPER, mouse_down, workspace, e-1
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> You can control the reset time with `binds:scroll_event_delay`.
|
||||
|
||||
### Switches
|
||||
|
||||
Switches are useful for binding events like closing and opening a laptop's lid:
|
||||
|
||||
```ini
|
||||
# Trigger when the switch is toggled.
|
||||
bindl = , switch:[switch name], exec, swaylock
|
||||
# Trigger when the switch is turning on.
|
||||
bindl = , switch:on:[switch name], exec, hyprctl keyword monitor "eDP-1, disable"
|
||||
# Trigger when the switch is turning off.
|
||||
bindl = , switch:off:[switch name], exec, hyprctl keyword monitor "eDP-1, 2560x1600, 0x0, 1"
|
||||
```
|
||||
|
||||
> [!WARNING]
|
||||
> Systemd `HandleLidSwitch` settings in `logind.conf` may conflict with Hyprland's laptop lid switch configurations.
|
||||
|
||||
> [!NOTE]
|
||||
> You can view your switches with `hyprctl devices`.
|
||||
|
||||
### Multiple binds to one key
|
||||
|
||||
You can trigger multiple actions with the same keybind by assigning it multiple times, with different `disapatcher`s and `param`s:
|
||||
|
||||
```ini
|
||||
# To switch between windows in a floating workspace:
|
||||
bind = SUPER, Tab, cyclenext # Change focus to another window
|
||||
bind = SUPER, Tab, bringactivetotop # Bring it to the top
|
||||
```
|
||||
|
||||
> [!WARNING]
|
||||
> The keybinds will be executed top to bottom, in the order they were written in.
|
||||
|
||||
### Description
|
||||
|
||||
You can describe your keybind with the `d` flag.
|
||||
Your description always goes in front of the `dispatcher`, and must not include commas (`,`)!
|
||||
|
||||
```ini
|
||||
bindd = MODS, key, description, dispatcher, params
|
||||
```
|
||||
|
||||
For example:
|
||||
|
||||
```ini
|
||||
bindd = SUPER, Q, Open my favourite terminal, exec, kitty
|
||||
```
|
||||
|
||||
If you want to access your description you can use `hyprctl binds`.
|
||||
For more information have a look at [Using Hyprctl](../Using-hyprctl).
|
||||
|
||||
## Mouse Binds
|
||||
|
||||
These are binds that rely on mouse movement. They will have one less arg.
|
||||
`binds:drag_threshold` can be used to differentiate between clicks and drags with the same button:
|
||||
|
||||
```ini
|
||||
binds {
|
||||
drag_threshold = 10 # Fire a drag event only after dragging for more than 10px
|
||||
}
|
||||
bindm = ALT, mouse:272, movewindow # ALT + LMB: Move a window by dragging more than 10px.
|
||||
bindc = ALT, mouse:272, togglefloating # ALT + LMB: Floats a window by clicking
|
||||
```
|
||||
|
||||
Available mouse binds:
|
||||
|
||||
| Name | Description | Params |
|
||||
| ---- | ----------- | ------ |
|
||||
| movewindow | moves the active window | None |
|
||||
| resizewindow | resizes the active window | `1` -> Resize and keep window aspect ratio. <br> `2` -> Resize and ignore `keepaspectratio` window rule/prop. <br> None or anything else for normal resize |
|
||||
|
||||
Common mouse button key codes (check `wev` for other buttons):
|
||||
|
||||
```txt
|
||||
LMB -> 272
|
||||
RMB -> 273
|
||||
MMB -> 274
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> 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.
|
||||
|
||||
### Touchpad
|
||||
|
||||
As clicking and moving the mouse on a touchpad is unergonomic, you can also use keyboard keys instead of mouse clicks.
|
||||
|
||||
```ini
|
||||
bindm = SUPER, mouse:272, movewindow
|
||||
bindm = SUPER, Control_L, movewindow
|
||||
bindm = SUPER, mouse:273, resizewindow
|
||||
bindm = SUPER, ALT_L, resizewindow
|
||||
```
|
||||
|
||||
## Global Keybinds
|
||||
|
||||
### Classic
|
||||
|
||||
Yes, you heard this right, Hyprland does support global keybinds for _ALL_ apps,
|
||||
including OBS, Discord, Firefox, etc.
|
||||
|
||||
See the [`pass`](../Dispatchers/#list-of-dispatchers) and
|
||||
[`sendshortcut`](../Dispatchers/#list-of-dispatchers) dispatchers for keybinds.
|
||||
|
||||
Let's take OBS as an example: the "Start/Stop Recording" keybind is set to
|
||||
<key>SUPER</key> + <key>F10</key>, to make it work globally, simply add:
|
||||
|
||||
```ini
|
||||
bind = SUPER, F10, pass, class:^(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`.
|
||||
This also means that push-to-talk will work flawlessly with one `pass`, e.g.:
|
||||
|
||||
```ini
|
||||
bind = , mouse:276, pass, class:^(TeamSpeak 3)$ # Pass MOUSE5 to TeamSpeak3.
|
||||
```
|
||||
|
||||
You may also add shortcuts, where other keys are passed to the window.
|
||||
|
||||
```ini
|
||||
bind = SUPER, F10, sendshortcut, SUPER, F4, class:^(com\.obsproject\.Studio)$ # Send SUPER + F4 to OBS when SUPER + F10 is pressed.
|
||||
```
|
||||
|
||||
> [!WARNING]
|
||||
> This works flawlessly with all native Wayland applications, however, XWayland is a bit wonky.
|
||||
> Make sure that what you're passing is a "global Xorg keybind", otherwise passing from a different XWayland app may not work.
|
||||
|
||||
### DBus Global Shortcuts
|
||||
|
||||
Some applications may already support the GlobalShortcuts portal in
|
||||
xdg-desktop-portal.
|
||||
If that's the case, it's recommended to use the following method instead of `pass`:
|
||||
|
||||
Open your desired app and run `hyprctl globalshortcuts` in a terminal.
|
||||
This will give you a list of currently registered shortcuts with their description(s).
|
||||
|
||||
Choose whichever you like, for example `coolApp:myToggle`, and bind it to
|
||||
whatever you want with the `global` dispatcher:
|
||||
|
||||
```ini
|
||||
bind = SUPERSHIFT, A, global, coolApp:myToggle
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> Please note that this function will _only_ work with
|
||||
> [XDPH](../../Hypr-Ecosystem/xdg-desktop-portal-hyprland).
|
||||
|
||||
## Submaps
|
||||
|
||||
Keybind submaps, also known as _modes_ or _groups_, allow you to activate a
|
||||
separate set of keybinds.
|
||||
For example, if you want to enter a `resize` _mode_ that allows you to resize windows with the arrow keys, you can do it like this:
|
||||
|
||||
```ini
|
||||
# Switch to a submap called `resize`.
|
||||
bind = ALT, R, submap, resize
|
||||
|
||||
# Start a submap called "resize".
|
||||
submap = resize
|
||||
|
||||
# Set repeatable binds for resizing the active window.
|
||||
binde = , right, resizeactive, 10 0
|
||||
binde = , left, resizeactive, -10 0
|
||||
binde = , up, resizeactive, 0 -10
|
||||
binde = , down, resizeactive, 0 10
|
||||
|
||||
# Use `reset` to go back to the global submap
|
||||
bind = , escape, submap, reset
|
||||
|
||||
# Reset the submap, which will return to the global submap
|
||||
submap = reset
|
||||
|
||||
# Keybinds further down will be global again...
|
||||
```
|
||||
|
||||
> [!WARNING]
|
||||
> Do not forget a keybind (`escape`, in this case) to reset the keymap while inside it!
|
||||
>
|
||||
> If you get stuck inside a keymap, you can use `hyprctl dispatch submap reset` to go back.
|
||||
> If you do not have a terminal open, tough luck buddy. You have been warned.
|
||||
|
||||
You can also set the same keybind to perform multiple actions, such as resize
|
||||
and close the submap, like so:
|
||||
|
||||
```ini
|
||||
bind = ALT, R, submap, resize
|
||||
|
||||
submap = resize
|
||||
|
||||
bind = , right, resizeactive, 10 0
|
||||
bind = , right, submap, reset
|
||||
# ...
|
||||
|
||||
submap = reset
|
||||
```
|
||||
|
||||
This works because the binds are executed in the order they appear, and
|
||||
assigning multiple actions per bind is possible.
|
||||
|
||||
You can set a keybind that will be active no matter the current submap with the submap universal bind flag.
|
||||
|
||||
```ini
|
||||
bindu = $mainMod, K, exec, kitty
|
||||
```
|
||||
|
||||
### Nesting
|
||||
|
||||
Submaps can be nested, see the following example:
|
||||
|
||||
```ini
|
||||
bind = $mainMod, M, submap, main_submap
|
||||
submap = main_submap
|
||||
|
||||
# ...
|
||||
|
||||
# nested_one
|
||||
bind = , 1, submap, nested_one
|
||||
submap = nested_one
|
||||
|
||||
# ...
|
||||
|
||||
bind = SHIFT, escape, submap, reset
|
||||
bind = , escape, submap, main_submap
|
||||
submap = main_submap
|
||||
# /nested_one
|
||||
|
||||
# nested_two
|
||||
bind = , 2, submap, nested_two
|
||||
submap = nested_two
|
||||
|
||||
# ...
|
||||
|
||||
bind = SHIFT, escape, submap, reset
|
||||
bind = , escape, submap, main_submap
|
||||
submap = main_submap
|
||||
# /nested_two
|
||||
|
||||
bind = , escape, submap, reset
|
||||
submap = reset
|
||||
```
|
||||
|
||||
### Automatically close a submap on dispatch
|
||||
|
||||
Submaps can be automatically closed or sent to another submap by appending ``,`` followed by a submap or _reset_.
|
||||
|
||||
```ini
|
||||
bind = SUPER,a, submap, submapA
|
||||
|
||||
# Sets the submap to submapB after pressing a.
|
||||
submap = submapA, submapB
|
||||
bind = ,a,exec, someCoolThing.sh
|
||||
submap = reset
|
||||
|
||||
# Reset submap to default after pressing a.
|
||||
submap = submapB, reset
|
||||
bind = ,a,exec, soemOtherCoolThing.sh
|
||||
submap = reset
|
||||
```
|
||||
|
||||
### Catch-All
|
||||
|
||||
You can also define a keybind via the special `catchall` keyword, which
|
||||
activates no matter which key is pressed.
|
||||
This can be used to prevent any keys from passing to your active application
|
||||
while in a submap or to exit it immediately when any unknown key is pressed:
|
||||
|
||||
```ini
|
||||
bind = , catchall, submap, reset
|
||||
```
|
||||
|
||||
## Example Binds
|
||||
|
||||
### Media
|
||||
|
||||
These binds set the expected behavior for regular keyboard media volume keys,
|
||||
including when the screen is locked:
|
||||
|
||||
```ini
|
||||
bindel = , XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
|
||||
bindel = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
|
||||
bindl = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
|
||||
# Requires playerctl
|
||||
bindl = , XF86AudioPlay, exec, playerctl play-pause
|
||||
bindl = , XF86AudioPrev, exec, playerctl previous
|
||||
bindl = , XF86AudioNext, exec, playerctl next
|
||||
```
|
||||
240
dot_config/hypr/hyprland.wiki/content/Configuring/Dispatchers.md
Normal file
240
dot_config/hypr/hyprland.wiki/content/Configuring/Dispatchers.md
Normal file
@@ -0,0 +1,240 @@
|
||||
---
|
||||
weight: 6
|
||||
title: Dispatchers
|
||||
---
|
||||
|
||||
Please keep in mind some layout-specific dispatchers will be listed in the
|
||||
layout pages (See the sidebar).
|
||||
|
||||
## Parameter explanation
|
||||
|
||||
| Param type | Description |
|
||||
| --- | --- |
|
||||
| window | a window. Any of the following: class regex (by default, optionally `class:`), `initialclass:` initial class regex, `title:` title regex, `initialtitle` initial title regex, `tag:` window tag regex, `pid:` the pid, `address:` the address, `activewindow` an active window, `floating` the first floating window on the current workspace, `tiled` the first tiled window on the current workspace |
|
||||
| workspace | see [below]({{< relref "#workspaces" >}}). |
|
||||
| direction | `l` `r` `u` `d` left right up down |
|
||||
| monitor | One of: direction, ID, name, `current`, relative (e.g. `+1` or `-1`) |
|
||||
| resizeparams | relative pixel delta vec2 (e.g. `10 -10`), optionally a percentage of the window size (e.g. `20 25%`) or `exact` followed by an exact vec2 (e.g. `exact 1280 720`), optionally a percentage of the screen size (e.g. `exact 50% 50%`) |
|
||||
| floatvalue | a relative float delta (e.g `-0.2` or `+0.2`) or `exact` followed by a the exact float value (e.g. `exact 0.5`) |
|
||||
| zheight | `top` or `bottom` |
|
||||
| mod | `SUPER`, `SUPER_ALT`, etc. |
|
||||
| key | `g`, `code:42`, `42` or mouse clicks (`mouse:272`) |
|
||||
|
||||
## List of Dispatchers
|
||||
|
||||
| Dispatcher | Description | Params |
|
||||
| --- | --- | --- |
|
||||
| exec | executes a shell command | command (supports rules, see [below]({{< relref "#executing-with-rules" >}})) |
|
||||
| execr | executes a raw shell command (does not support rules) | command |
|
||||
| pass | passes the key (with mods) to a specified window. Can be used as a workaround to global keybinds not working on Wayland. | window |
|
||||
| sendshortcut | sends specified keys (with mods) to an optionally specified window. Can be used like pass | mod, key[, window] |
|
||||
| sendkeystate | Send a key with specific state (down/repeat/up) to a specified window (window must keep focus for events to continue). | mod, key, state, window |
|
||||
| killactive | closes (not kills) the active window | none |
|
||||
| forcekillactive | kills the active window | none |
|
||||
| closewindow | closes a specified window | window |
|
||||
| killwindow | kills a specified window | window |
|
||||
| signal | sends a signal to the active window | signal |
|
||||
| signalwindow | sends a signal to a specified window | `window,signal`, e.g.`class:Alacritty,9` |
|
||||
| workspace | changes the workspace | workspace |
|
||||
| movetoworkspace | moves the focused window to a workspace | workspace OR `workspace,window` for a specific window |
|
||||
| movetoworkspacesilent | same as above, but doesn't switch to the workspace | workspace OR `workspace,window` for a specific window |
|
||||
| togglefloating | toggles the current window's floating state | left empty / `active` for current, or `window` for a specific window |
|
||||
| setfloating | sets the current window's floating state to true | left empty / `active` for current, or `window` for a specific window |
|
||||
| settiled | sets the current window's floating state to false | left empty / `active` for current, or `window` for a specific window |
|
||||
| fullscreen | sets the focused window's fullscreen mode | `mode action`, where mode can be 0 - fullscreen (takes your entire screen) or 1 - maximize (keeps gaps and bar(s)), while action is optional and can be `toggle` (default), `set` or `unset`. |
|
||||
| fullscreenstate | sets the focused window's fullscreen mode and the one sent to the client | `internal client action`, where internal (the hyprland window) and client (the application) can be `-1` - current, `0` - none, `1` - maximize, `2` - fullscreen, `3` - maximize and fullscreen. action is optional and can be `toggle` (default) or `set`. |
|
||||
| dpms | sets all monitors' DPMS status. Do not use with a keybind directly. | `on`, `off`, or `toggle`. For specific monitor add monitor name after a space |
|
||||
| forceidle | sets elapsed time for all idle timers, ignoring idle inhibitors. Timers return to normal behavior upon the next activity. Do not use with a keybind directly. | floatvalue (number of seconds) |
|
||||
| pin | pins a window (i.e. show it on all workspaces) _note: floating only_ | left empty / `active` for current, or `window` for a specific window |
|
||||
| movefocus | moves the focus in a direction | direction |
|
||||
| movewindow | moves the active window in a direction or to a monitor. For floating windows, moves the window to the screen edge in that direction | direction or `mon:` and a monitor, optionally followed by a space and `silent` to prevent the focus from moving with the window|
|
||||
| swapwindow | swaps the active window with another window in the given direction or with a specific window | direction or `window`|
|
||||
| centerwindow | center the active window _note: floating only_ | none (for monitor center) or 1 (to respect monitor reserved area) |
|
||||
| resizeactive | resizes the active window | resizeparams |
|
||||
| moveactive | moves the active window | resizeparams |
|
||||
| resizewindowpixel | resizes a selected window | `resizeparams,window`, e.g. `100 100,^(kitty)$` |
|
||||
| movewindowpixel | moves a selected window | `resizeparams,window` |
|
||||
| cyclenext | focuses the next window (on a workspace, if `visible` is not provided) | none (for next) or `prev` (for previous) additionally `tiled` for only tiled, `floating` for only floating. `prev tiled` is ok. `visible` for all monitors cycling. `visible prev floating` is ok. if `hist` arg provided - focus order will depends on focus history. All other modifiers is also working for it, `visible next floating hist` is ok. |
|
||||
| swapnext | swaps the focused window with the next window on a workspace | none (for next) or `prev` (for previous) |
|
||||
| tagwindow | apply tag to current or the first window matching | `tag [window]`, e.g. `+code ^(foot)$`, `music` |
|
||||
| focuswindow | focuses the first window matching | window |
|
||||
| focusmonitor | focuses a monitor | monitor |
|
||||
| splitratio | changes the split ratio | floatvalue |
|
||||
| movecursortocorner | moves the cursor to the corner of the active window | direction, 0 - 3, bottom left - 0, bottom right - 1, top right - 2, top left - 3 |
|
||||
| movecursor | moves the cursor to a specified position | `x y` |
|
||||
| renameworkspace | rename a workspace | `id name`, e.g. `2 work` |
|
||||
| exit | exits the compositor with no questions asked. It's recommended to use `hyprshutdown` instead of this. | none |
|
||||
| forcerendererreload | forces the renderer to reload all resources and outputs | none |
|
||||
| movecurrentworkspacetomonitor | Moves the active workspace to a monitor | monitor |
|
||||
| focusworkspaceoncurrentmonitor | Focuses the requested workspace on the current monitor, swapping the current workspace to a different monitor if necessary. If you want XMonad/Qtile-style workspace switching, replace `workspace` in your config with this. | workspace |
|
||||
| moveworkspacetomonitor | Moves a workspace to a monitor | workspace and a monitor separated by a space |
|
||||
| swapactiveworkspaces | Swaps the active workspaces between two monitors | two monitors separated by a space |
|
||||
| bringactivetotop | _Deprecated_ in favor of alterzorder. Brings the current window to the top of the stack | none |
|
||||
| alterzorder | Modify the window stack order of the active or specified window. Note: this cannot be used to move a floating window behind a tiled one. | zheight[,window] |
|
||||
| togglespecialworkspace | toggles a special workspace on/off | none (for the first) or name for named (name has to be a special workspace's name) |
|
||||
| focusurgentorlast | Focuses the urgent window or the last window | none |
|
||||
| togglegroup | toggles the current active window into a group | none |
|
||||
| changegroupactive | switches to the next window in a group. | b - back, f - forward, or index start at 1 |
|
||||
| focuscurrentorlast | Switch focus from current to previously focused window | none |
|
||||
| lockgroups | Locks the groups (all groups will not accept new windows) | `lock` for locking, `unlock` for unlocking, `toggle` for toggle |
|
||||
| lockactivegroup | Lock the focused group (the current group will not accept new windows or be moved to other groups) | `lock` for locking, `unlock` for unlocking, `toggle` for toggle |
|
||||
| moveintogroup | Moves the active window into a group in a specified direction. No-op if there is no group in the specified direction. | direction |
|
||||
| moveoutofgroup | Moves the active window out of a group. No-op if not in a group | left empty / `active` for current, or `window` for a specific window |
|
||||
| movewindoworgroup | Behaves as `moveintogroup` if there is a group in the given direction. Behaves as `moveoutofgroup` if there is no group in the given direction relative to the active group. Otherwise behaves like `movewindow`. | direction |
|
||||
| movegroupwindow | Swaps the active window with the next or previous in a group | `b` for back, anything else for forward |
|
||||
| denywindowfromgroup | Prohibit the active window from becoming or being inserted into group | `on`, `off` or, `toggle` |
|
||||
| setignoregrouplock | Temporarily enable or disable binds:ignore_group_lock | `on`, `off`, or `toggle` |
|
||||
| global | Executes a Global Shortcut using the GlobalShortcuts portal. See [here](../Binds/#global-keybinds) | name |
|
||||
| submap | Change the current mapping group. See [Submaps](../Binds/#submaps) | `reset` or name |
|
||||
| event | Emits a custom event to socket2 in the form of `custom>>yourdata` | the data to send |
|
||||
| setprop | Sets a window property | `window property value` |
|
||||
| toggleswallow | If a window is swallowed by the focused window, unswallows it. Execute again to swallow it back | none |
|
||||
|
||||
> [!WARNING]
|
||||
> [uwsm](../../Useful-Utilities/Systemd-start) users should avoid using `exit` dispatcher, or terminating Hyprland process directly, as exiting Hyprland this way removes it from under its clients and interferes with ordered shutdown sequence. Use `exec, uwsm stop` (or [other variants](https://github.com/Vladimir-csp/uwsm#how-to-stop)) which will gracefully bring down graphical session (and login session bound to it, if any). If you experience problems with units entering inconsistent states, affecting subsequent sessions, use `exec, loginctl terminate-user ""` instead (terminates all units of the user).
|
||||
>
|
||||
> It's also strongly advised to replace the `exit` dispatcher inside `hyprland.conf` keybinds section accordingly.
|
||||
|
||||
> [!WARNING]
|
||||
> It is NOT recommended to set DPMS or forceidle 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
|
||||
> ```
|
||||
|
||||
### Grouped (tabbed) windows
|
||||
|
||||
Hyprland allows you to make a group from the current active window with the
|
||||
`togglegroup` bind dispatcher.
|
||||
|
||||
A group is like i3wm’s “tabbed” container. It takes the space of one window, and
|
||||
you can change the window to the next one in the tabbed “group” with the
|
||||
`changegroupactive` bind dispatcher.
|
||||
|
||||
The new group’s border colors are configurable with the appropriate `col.`
|
||||
settings in the `group` config section.
|
||||
|
||||
You can lock a group with the `lockactivegroup` dispatcher in order to stop new
|
||||
windows from entering this group. In addition, the `lockgroups` dispatcher can be
|
||||
used to toggle an independent global group lock that will prevent new windows
|
||||
from entering any groups, regardless of their local group lock stat.
|
||||
|
||||
You can prevent a window from being added to a group or becoming a group with the
|
||||
`denywindowfromgroup` dispatcher. `movewindoworgroup` will behave like
|
||||
`movewindow` if the current active window or window in direction has this property
|
||||
set.
|
||||
|
||||
## Workspaces
|
||||
|
||||
You have nine choices:
|
||||
|
||||
- ID: e.g. `1`, `2`, or `3`
|
||||
|
||||
- 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 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`
|
||||
|
||||
- Name: e.g. `name:Web`, `name:Anime` or `name:Better anime`
|
||||
|
||||
- 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`
|
||||
|
||||
- Special Workspace: `special` or `special:name` for named special workspaces.
|
||||
|
||||
> [!WARNING]
|
||||
> `special` is supported ONLY on `movetoworkspace` and `movetoworkspacesilent`.
|
||||
> Any other dispatcher will result in undocumented behavior.
|
||||
|
||||
> [!WARNING]
|
||||
> Numerical workspaces (e.g. `1`, `2`, `13371337`) are allowed **ONLY** between 1
|
||||
> and 2147483647 (inclusive).
|
||||
> Neither `0` nor negative numbers are allowed.
|
||||
|
||||
## Special Workspace
|
||||
|
||||
A special workspace is what is called a "scratchpad" in some other places. A
|
||||
workspace that you can toggle on/off on any monitor.
|
||||
|
||||
> [!NOTE]
|
||||
> You can define multiple named special workspaces, but the amount of those is
|
||||
> limited to 97 at a time.
|
||||
|
||||
For example, to move a window/application to a special workspace you can use the
|
||||
following syntax:
|
||||
|
||||
```ini
|
||||
bind = SUPER, C, movetoworkspace, special
|
||||
#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.
|
||||
```
|
||||
|
||||
## Executing with rules
|
||||
|
||||
The `exec` dispatcher supports adding rules. Please note some windows might work
|
||||
better, some worse. It records the PID of the spawned process and uses that.
|
||||
For example, if your process forks and then the fork opens a window, this will
|
||||
not work.
|
||||
|
||||
The syntax is:
|
||||
|
||||
```ini
|
||||
bind = mod, key, exec, [rules...] command
|
||||
```
|
||||
|
||||
For example:
|
||||
|
||||
```ini
|
||||
bind = SUPER, E, exec, [workspace 2 silent; float; move 0 0] kitty
|
||||
```
|
||||
|
||||
### setprop
|
||||
|
||||
Props are any of the _dynamic effects_ of [Window Rules](../Window-Rules#dynamic-effects).
|
||||
|
||||
For example:
|
||||
|
||||
```sh
|
||||
address:0x13371337 no_anim 1
|
||||
address:0x13371337 no_max_size 0
|
||||
address:0x13371337 opaque toggle
|
||||
address:0x13371337 immediate unset
|
||||
address:0x13371337 border_size relative -2
|
||||
address:0x13371337 rounding_power relative 0.1
|
||||
```
|
||||
|
||||
### Fullscreenstate
|
||||
|
||||
`fullscreenstate internal client`
|
||||
|
||||
The `fullscreenstate` dispatcher decouples the state that Hyprland maintains for a window from the fullscreen state that is communicated to the client.
|
||||
|
||||
`internal` is a reference to the state maintained by Hyprland.
|
||||
|
||||
`client` is a reference to the state that the application receives.
|
||||
|
||||
| Value | State | Description |
|
||||
| --- | --- | --- |
|
||||
| -1 | Current | Maintains the current fullscreen state. |
|
||||
| 0 | None | Window allocates the space defined by the current layout. |
|
||||
| 1 | Maximize | Window takes up the entire working space, keeping the margins. |
|
||||
| 2 | Fullscreen | Window takes up the entire screen. |
|
||||
| 3 | Maximize and Fullscreen | The state of a fullscreened maximized window. Works the same as fullscreen. |
|
||||
|
||||
For example:
|
||||
|
||||
`fullscreenstate 2 0` Fullscreens the application and keeps the client in non-fullscreen mode.
|
||||
|
||||
This can be used to prevent Chromium-based browsers from going into presentation mode when they detect they have been fullscreened.
|
||||
|
||||
`fullscreenstate 0 2` Keeps the window non-fullscreen, but the client goes into fullscreen mode within the window.
|
||||
@@ -0,0 +1,57 @@
|
||||
---
|
||||
weight: 12
|
||||
title: Dwindle Layout
|
||||
---
|
||||
|
||||
Dwindle is a BSPWM-like layout, where every window on a workspace is a member of
|
||||
a binary tree.
|
||||
|
||||
## Quirks
|
||||
|
||||
Dwindle splits are NOT PERMANENT. The split is determined dynamically with the
|
||||
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`.
|
||||
|
||||
## Config
|
||||
|
||||
category name: `dwindle`
|
||||
|
||||
| name | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| pseudotile | enable pseudotiling. Pseudotiled windows retain their floating size when tiled. | bool | false |
|
||||
| force_split | 0 -> split follows mouse, 1 -> always split to the left (new = left or top) 2 -> always split to the right (new = right or bottom) | int | 0 |
|
||||
| preserve_split | if enabled, the split (side/top) will not change regardless of what happens to the container. | bool | false |
|
||||
| smart_split | if enabled, allows a more precise control over the window split direction based on the cursor's position. The window is conceptually divided into four triangles, and cursor's triangle determines the split direction. This feature also turns on preserve_split. | bool | false |
|
||||
| smart_resizing | if enabled, resizing direction will be determined by the mouse's position on the window (nearest to which corner). Else, it is based on the window's tiling position. | bool | true |
|
||||
| permanent_direction_override | if enabled, makes the preselect direction persist until either this mode is turned off, another direction is specified, or a non-direction is specified (anything other than l,r,u/t,d/b) | bool | false |
|
||||
| special_scale_factor | specifies the scale factor of windows on the special workspace [0 - 1] | float | 1 |
|
||||
| split_width_multiplier | specifies the auto-split width multiplier. Multiplying window size is useful on widescreen monitors where window W > H even after several splits. | float | 1.0 |
|
||||
| use_active_for_splits | whether to prefer the active window or the mouse position for splits | bool | true |
|
||||
| default_split_ratio | the default split ratio on window open. 1 means even 50/50 split. [0.1 - 1.9] | float | 1.0 |
|
||||
| split_bias | specifies which window will receive the split ratio. 0 -> directional (the top or left window), 1 -> the current window | int | 0 |
|
||||
| precise_mouse_move | bindm movewindow will drop the window more precisely depending on where your mouse is. | bool | false |
|
||||
| single_window_aspect_ratio | whenever only a single window is shown on a screen, add padding so that it conforms to the specified aspect ratio. A value like `4 3` on a 16:9 screen will make it a 4:3 window in the middle with padding to the sides. | Vec2D | 0 0 |
|
||||
| single_window_aspect_ratio_tolerance | sets a tolerance for `single_window_aspect_ratio`, so that if the padding that would have been added is smaller than the specified fraction of the height or width of the screen, it will not attempt to adjust the window size [0 - 1] | int | 0.1 |
|
||||
|
||||
## Bind Dispatchers
|
||||
|
||||
| dispatcher | description | params |
|
||||
| --- | --- | --- |
|
||||
| pseudo | toggles the given window's pseudo mode | left empty / `active` for current, or `window` for a specific window |
|
||||
|
||||
## Layout messages
|
||||
|
||||
Dispatcher `layoutmsg` params:
|
||||
|
||||
| param | description | args |
|
||||
| --- | --- | --- |
|
||||
| togglesplit | toggles the split (top/side) of the current window. `preserve_split` must be enabled for toggling to work. | none |
|
||||
| swapsplit | swaps the two halves of the split of the current window. | none |
|
||||
| preselect | A one-time override for the split direction. (valid for the next window to be opened, only works on tiled windows) | direction |
|
||||
| movetoroot | moves the selected window (active window if unspecified) to the root of its workspace tree. The default behavior maximizes the window in its current subtree. If `unstable` is provided as the second argument, the window will be swapped with the other subtree instead. It is not possible to only provide the second argument, but `movetoroot active unstable` will achieve the same result. | [window, [ string ]] |
|
||||
|
||||
e.g.:
|
||||
|
||||
```ini
|
||||
bind = SUPER, A, layoutmsg, preselect l
|
||||
```
|
||||
@@ -0,0 +1,146 @@
|
||||
---
|
||||
weight: 18
|
||||
title: Environment variables
|
||||
---
|
||||
|
||||
> [!NOTE]
|
||||
> [uwsm](../../Useful-Utilities/Systemd-start) users should avoid placing environment variables in the `hyprland.conf` file.
|
||||
> Instead, use `~/.config/uwsm/env` for theming, xcursor, Nvidia and toolkit variables, and `~/.config/uwsm/env-hyprland` for `HYPR*` and `AQ_*` variables.
|
||||
> The format is `export KEY=VAL`.
|
||||
>
|
||||
> ```plain
|
||||
> export XCURSOR_SIZE=24
|
||||
> ```
|
||||
>
|
||||
> See [uwsm readme](https://github.com/Vladimir-csp/uwsm?tab=readme-ov-file#4-environments-and-shell-profile) for additional information.
|
||||
|
||||
You can use the `env` keyword to set environment variables prior to the
|
||||
initialization of the Display Server, e.g.:
|
||||
|
||||
```ini
|
||||
env = GTK_THEME,Nord
|
||||
```
|
||||
|
||||
> [!WARNING]
|
||||
> Note that when using the `env` keyword, Hyprland reads the value of the variable as a **raw string** and puts it into the environment _as is_.
|
||||
> You should **NOT** add quotes `""` around the values.
|
||||
>
|
||||
> Some examples with differently formatted values:
|
||||
>
|
||||
> ✗ DON'T:
|
||||
>
|
||||
> ```py
|
||||
> env = QT_AUTO_SCREEN_SCALE_FACTOR,"1"
|
||||
> env = QT_QPA_PLATFORM,"wayland"
|
||||
> env = QT_QPA_PLATFORM,"wayland;xcb"
|
||||
> env = AQ_DRM_DEVICES=,"/dev/dri/card1:/dev/dri/card0"
|
||||
> ```
|
||||
>
|
||||
> ✓ Instead, DO:
|
||||
>
|
||||
> ```py
|
||||
> env = QT_AUTO_SCREEN_SCALE_FACTOR,1
|
||||
> env = QT_QPA_PLATFORM,wayland
|
||||
> env = QT_QPA_PLATFORM,wayland;xcb
|
||||
> env = AQ_DRM_DEVICES=,/dev/dri/card1:/dev/dri/card0
|
||||
> ```
|
||||
|
||||
|
||||
> [!WARNING]
|
||||
> Please avoid putting those environment variables in `/etc/environment`.
|
||||
> That will cause all sessions (including Xorg ones) to pick up your Wayland-specific
|
||||
> environment on traditional Linux distros.
|
||||
|
||||
## Hyprland Environment Variables
|
||||
|
||||
- `HYPRLAND_TRACE=1` - Enables more verbose logging.
|
||||
- `HYPRLAND_NO_RT=1` - Disables realtime priority setting by Hyprland.
|
||||
- `HYPRLAND_NO_SD_NOTIFY=1` - If systemd, disables the `sd_notify` calls.
|
||||
- `HYPRLAND_NO_SD_VARS=1` - Disables management of variables in systemd and dbus activation environments.
|
||||
- `HYPRLAND_CONFIG` - Specifies where you want your Hyprland configuration.
|
||||
|
||||
## Aquamarine Environment Variables <!-- ref https://github.com/hyprwm/aquamarine/blob/main/docs/env.md -->
|
||||
|
||||
- `AQ_TRACE=1` - Enables more verbose logging.
|
||||
- `AQ_DRM_DEVICES=` - Set an explicit list of DRM devices (GPUs) to use. It's a colon-separated list of paths, with the first being the primary.
|
||||
E.g.: `/dev/dri/card1:/dev/dri/card0`
|
||||
- `AQ_FORCE_LINEAR_BLIT=0` - Disables forcing linear explicit modifiers on Multi-GPU buffers to potentially workaround Nvidia issues.
|
||||
- `AQ_MGPU_NO_EXPLICIT=1` - Disables explicit syncing on mgpu buffers.
|
||||
- `AQ_NO_MODIFIERS=1` - Disables modifiers for DRM buffers.
|
||||
|
||||
## Toolkit Backend Variables
|
||||
|
||||
- `env = GDK_BACKEND,wayland,x11,*` - GTK: Use Wayland if available; if not, try X11 and then any other GDK backend.
|
||||
- `env = QT_QPA_PLATFORM,wayland;xcb` - Qt: Use Wayland if available, fall back to
|
||||
X11 if not.
|
||||
- `env = SDL_VIDEODRIVER,wayland` - Run SDL2 applications on Wayland. Remove or set to
|
||||
`x11` if games that provide older versions of SDL cause compatibility issues
|
||||
- `env = CLUTTER_BACKEND,wayland` - Clutter package already has Wayland enabled, this
|
||||
variable will force Clutter applications to try and use the Wayland backend
|
||||
|
||||
## XDG Specifications
|
||||
|
||||
- `env = XDG_CURRENT_DESKTOP,Hyprland`
|
||||
- `env = XDG_SESSION_TYPE,wayland`
|
||||
- `env = XDG_SESSION_DESKTOP,Hyprland`
|
||||
|
||||
XDG specific environment variables are often detected through portals and
|
||||
applications that may set those for you, however it is not a bad idea to set
|
||||
them explicitly.
|
||||
|
||||
If your [desktop portal](https://wiki.archlinux.org/title/XDG_Desktop_Portal) is malfunctioning for seemingly
|
||||
no reason (no errors), it's likely your XDG env isn't set correctly.
|
||||
|
||||
> [!NOTE]
|
||||
> [uwsm](../../Useful-Utilities/Systemd-start) users don't need to explicitly set XDG environment variables, as uwsm sets them automatically.
|
||||
|
||||
## Qt Variables
|
||||
|
||||
- `env = 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
|
||||
- `env = QT_QPA_PLATFORM,wayland;xcb` - Tell Qt applications to use the Wayland
|
||||
backend, and fall back to X11 if Wayland is unavailable
|
||||
- `env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1` - Disables window decorations on Qt
|
||||
applications
|
||||
- `env = 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:
|
||||
|
||||
- `env = GBM_BACKEND,nvidia-drm`
|
||||
- `env = __GLX_VENDOR_LIBRARY_NAME,nvidia`
|
||||
|
||||
> See
|
||||
> [Archwiki Wayland Page](https://wiki.archlinux.org/title/Wayland#Requirements)
|
||||
> for more details on those variables.
|
||||
|
||||
- `env = LIBVA_DRIVER_NAME,nvidia` - Hardware acceleration on NVIDIA GPUs
|
||||
|
||||
> See
|
||||
> [Archwiki Hardware Acceleration Page](https://wiki.archlinux.org/title/Hardware_video_acceleration)
|
||||
> for details and necessary values before setting this variable.
|
||||
|
||||
- `__GL_GSYNC_ALLOWED` - Controls if G-Sync capable monitors should use Variable
|
||||
Refresh Rate (VRR)
|
||||
|
||||
> See
|
||||
> [Nvidia Documentation](https://download.nvidia.com/XFree86/Linux-32bit-ARM/375.26/README/openglenvvariables.html)
|
||||
> for details.
|
||||
|
||||
- `__GL_VRR_ALLOWED` - Controls if Adaptive Sync should be used. Recommended to
|
||||
set as "0" to avoid having problems on some games.
|
||||
|
||||
- `env = AQ_NO_ATOMIC,1` - use legacy DRM interface instead of atomic mode
|
||||
setting. **NOT** recommended.
|
||||
|
||||
## Theming Related Variables
|
||||
|
||||
- `GTK_THEME` - Set a GTK theme manually, for those who want to avoid appearance
|
||||
tools such as 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.
|
||||
@@ -0,0 +1,60 @@
|
||||
---
|
||||
weight: 21
|
||||
title: Example configurations
|
||||
---
|
||||
|
||||
This page houses links to a few repositories with beautiful Hyprland
|
||||
configurations for you to get inspired from or learn how to configure Hyprland
|
||||
from a more tangible example.
|
||||
|
||||
> [!WARNING]
|
||||
> These configurations are popular and have many people using them. PRs that add
|
||||
> more configurations will not be merged.
|
||||
|
||||
### end_4 (illogical-impulse)
|
||||
|
||||

|
||||
|
||||
[https://github.com/end-4/dots-hyprland](https://github.com/end-4/dots-hyprland)
|
||||
|
||||
### Stephan Raabe (ML4W)
|
||||
|
||||

|
||||
|
||||
[https://github.com/mylinuxforwork/dotfiles](https://github.com/mylinuxforwork/dotfiles)
|
||||
|
||||
### fufexan
|
||||
|
||||

|
||||
|
||||
[https://github.com/fufexan/dotfiles](https://github.com/fufexan/dotfiles)
|
||||
|
||||
### linuxmobile
|
||||
|
||||

|
||||
|
||||
[https://github.com/linuxmobile/hyprland-dots](https://github.com/linuxmobile/hyprland-dots)
|
||||
|
||||
### flick0
|
||||
|
||||

|
||||
|
||||
[https://github.com/flick0/dotfiles](https://github.com/flick0/dotfiles)
|
||||
|
||||
### iamverysimp1e
|
||||
|
||||

|
||||
|
||||
[https://github.com/1amSimp1e/dots](https://github.com/1amSimp1e/dots)
|
||||
|
||||
### notusknot
|
||||
|
||||

|
||||
|
||||
[https://github.com/notusknot/dotfiles-nix](https://github.com/notusknot/dotfiles-nix)
|
||||
|
||||
### coffebar
|
||||
|
||||

|
||||
|
||||
[https://github.com/coffebar/dotfiles](https://github.com/coffebar/dotfiles)
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
weight: 16
|
||||
title: Expanding functionality
|
||||
---
|
||||
|
||||
Hyprland exposes two powerful sockets for you to use.
|
||||
|
||||
The first, socket1, can be fully controlled with `hyprctl`, see its usage
|
||||
[here](../Using-hyprctl).
|
||||
|
||||
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
|
||||
|
||||
This bash script will change the outer gaps to 20 if the currently focused
|
||||
monitor is DP-1, and 30 otherwise.
|
||||
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
|
||||
function handle {
|
||||
if [[ ${1:0:10} == "focusedmon" ]]; then
|
||||
if [[ ${1:12:4} == "DP-1" ]]; then
|
||||
hyprctl keyword general:gaps_out 20
|
||||
else
|
||||
hyprctl keyword general:gaps_out 30
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
socat - "UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock" | while read -r line; do handle "$line"; done
|
||||
```
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
weight: 10
|
||||
title: Gestures
|
||||
---
|
||||
|
||||
## General
|
||||
|
||||
Hyprland supports 1:1 gestures for the trackpad for some operations. The basic syntax looks like this:
|
||||
|
||||
```ini
|
||||
gesture = fingers, direction, action, options
|
||||
```
|
||||
|
||||
Various actions may have their own options, or none. You can drop the options altogether and end
|
||||
on the action arg if the action takes none.
|
||||
|
||||
You can also restrict gestures to a modifier by adding `, mod: [MODMASK]` after `direction`,
|
||||
or scale the animation's speed by a float by adding `scale: [SCALE]`.
|
||||
|
||||
Examples:
|
||||
|
||||
```ini
|
||||
gesture = 3, horizontal, workspace
|
||||
gesture = 3, down, mod: ALT, close
|
||||
gesture = 3, up, mod: SUPER, scale: 1.5, fullscreen
|
||||
gesture = 3, left, scale: 1.5, float
|
||||
```
|
||||
|
||||
### Directions
|
||||
|
||||
The following directions are supported:
|
||||
| `direction` | Description |
|
||||
| -- | -- |
|
||||
| `swipe` | any swipe
|
||||
| `horizontal` | horizontal swipe
|
||||
| `vertical` | vertical swipe
|
||||
| `left`, `right`, `up`, `down` | swipe directions
|
||||
| `pinch` | any pinch
|
||||
| `pinchin`, `pinchout` | directional pinch
|
||||
|
||||
|
||||
|
||||
### Actions
|
||||
|
||||
Specifying `unset` as the action will unset a specific gesture that was previously set. Please note it needs to exactly match everything
|
||||
from the original gesture including direction, mods, fingers and scale.
|
||||
|
||||
| `action` | Description | Arguments |
|
||||
| -- | -- | -- |
|
||||
| `dispatcher` | the most basic, executes a dispatcher once the gesture ends | `dispatcher, params` |
|
||||
| `workspace` | workspace swipe gesture, for switching workspaces |
|
||||
| `move` | moves the active window | none |
|
||||
| `resize` | resizes the active window | none |
|
||||
| `special` | toggles a special workspace | special workspace without the `special:`, e.g. `mySpecialWorkspace` |
|
||||
| `close` | closes the active window | none |
|
||||
| `fullscreen` | fullscreens the active window | none for fullscreen, `maximize` for maximize |
|
||||
| `float` | floats the active window | none for toggle, `float` or `tile` for one-way |
|
||||
|
||||
177
dot_config/hypr/hyprland.wiki/content/Configuring/Keywords.md
Normal file
177
dot_config/hypr/hyprland.wiki/content/Configuring/Keywords.md
Normal file
@@ -0,0 +1,177 @@
|
||||
---
|
||||
weight: 3
|
||||
title: Keywords
|
||||
---
|
||||
|
||||
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.
|
||||
|
||||
> [!WARNING]
|
||||
> 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_:
|
||||
>
|
||||
> ```ini
|
||||
> three_param_keyword = A, B, C # OK
|
||||
> three_param_keyword = A, C # NOT OK
|
||||
> three_param_keyword = A, , C # OK
|
||||
> three_param_keyword = A, B, # OK
|
||||
> ```
|
||||
|
||||
## Executing
|
||||
|
||||
You can execute a shell script on:
|
||||
|
||||
- startup of the compositor
|
||||
- every time the config is reloaded.
|
||||
- shutdown of the compositor
|
||||
|
||||
`exec-once = command` will execute only on launch ([support rules](../Dispatchers/#executing-with-rules))
|
||||
|
||||
`execr-once = command` will execute only on launch
|
||||
|
||||
`exec = command` will execute on each reload ([support rules](../Dispatchers/#executing-with-rules))
|
||||
|
||||
`execr = command` will execute on each reload
|
||||
|
||||
`exec-shutdown = command` will execute only on shutdown
|
||||
|
||||
## Sourcing (multi-file)
|
||||
|
||||
Use the `source` keyword to source another file. Globbing is supported
|
||||
|
||||
For example, in your `hyprland.conf` you can:
|
||||
|
||||
```ini
|
||||
source = ~/.config/hypr/myColors.conf
|
||||
source = ~/.config/hypr/custom/*
|
||||
```
|
||||
|
||||
And Hyprland will enter that file and parse it like a Hyprland config.
|
||||
|
||||
Please note it's LINEAR. Meaning lines above the `source =` will be parsed first,
|
||||
then lines inside `~/.config/hypr/myColors.conf`, then lines below.
|
||||
|
||||
## Gestures
|
||||
|
||||
Use [libinput-gestures](https://github.com/bulletmark/libinput-gestures) with
|
||||
`hyprctl` if you want to expand Hyprland's gestures beyond what's offered in
|
||||
[Variables](../Variables).
|
||||
|
||||
## Per-device input configs
|
||||
|
||||
Per-device config options will overwrite your options set in the `input`
|
||||
section. It's worth noting that ONLY values explicitly changed will be
|
||||
overwritten.
|
||||
|
||||
In order to apply per-device config options, add a new category like this:
|
||||
|
||||
```ini
|
||||
device {
|
||||
name = ...
|
||||
# options ...
|
||||
}
|
||||
```
|
||||
|
||||
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
|
||||
(and all subcategories, e.g. `input:touchpad`) can be put inside, **EXCEPT**:
|
||||
|
||||
- `force_no_accel`
|
||||
- `follow_mouse`
|
||||
- `float_switch_override_focus`
|
||||
|
||||
Properties that change names:
|
||||
|
||||
```plain
|
||||
touchdevice:transform -> transform
|
||||
touchdevice:output -> output
|
||||
```
|
||||
|
||||
You can also use the `output` setting for tablets to bind them to outputs.
|
||||
Remember to use the name of the `Tablet` and not `Tablet Pad` or `Tablet tool`.
|
||||
|
||||
Additional properties only present in per-device configs:
|
||||
|
||||
- `enabled` -> (only for mice / touchpads / touchdevices / keyboards)
|
||||
- enables / disables the device (connects / disconnects from the on-screen cursor)
|
||||
- default: Enabled
|
||||
- `keybinds` -> (only for devices that send key events)
|
||||
- enables / disables keybinds for the device
|
||||
- default: Enabled
|
||||
|
||||
Example config section:
|
||||
|
||||
```ini
|
||||
device {
|
||||
name = royuan-akko-multi-modes-keyboard-b
|
||||
repeat_rate = 50
|
||||
repeat_delay = 500
|
||||
middle_button_emulation = 0
|
||||
}
|
||||
```
|
||||
|
||||
Example modifying per-device config values using `hyprctl`:
|
||||
|
||||
```bash
|
||||
hyprctl -r -- keyword device[my-device]:sensitivity -1
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> Per-device layouts will by default not alter the keybind keymap, so for example
|
||||
> with a global keymap of `us` and a per-device one of `fr`, the keybinds will
|
||||
> still act as if you were on `us`.
|
||||
>
|
||||
> You can change this behavior by setting `resolve_binds_by_sym = 1`. In that case
|
||||
> you'll need to type the symbol specified in the bind to activate it.
|
||||
|
||||
## Wallpapers
|
||||
|
||||
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).
|
||||
|
||||
More can be found in [Useful Utilities](../../Useful-Utilities).
|
||||
|
||||
## Setting the environment
|
||||
|
||||
> [!NOTE]
|
||||
> A new environment cannot be passed to already running processes. If you change / add / remove an `env = ` entry
|
||||
> when Hyprland is running, only newly spawned apps will pick up the changes.
|
||||
|
||||
You can use the `env` keyword to set environment variables,
|
||||
e.g:
|
||||
|
||||
```ini
|
||||
env = XCURSOR_SIZE,24
|
||||
```
|
||||
|
||||
You can also add a `d` flag if you want the env var to be exported to D-Bus
|
||||
(systemd only):
|
||||
|
||||
```ini
|
||||
envd = XCURSOR_SIZE,24
|
||||
```
|
||||
|
||||
> [!WARNING]
|
||||
> Hyprland puts the raw string to the env var. You should _not_ add quotes around
|
||||
> the values.
|
||||
>
|
||||
> e.g.:
|
||||
>
|
||||
> ```ini
|
||||
> env = QT_QPA_PLATFORM,wayland
|
||||
> ```
|
||||
>
|
||||
> and _**NOT**_
|
||||
>
|
||||
> ```ini
|
||||
> env = QT_QPA_PLATFORM,"wayland"
|
||||
> ```
|
||||
@@ -0,0 +1,82 @@
|
||||
---
|
||||
weight: 13
|
||||
title: Master Layout
|
||||
---
|
||||
|
||||
The master layout makes one (or more) window(s) be the "master", taking (by
|
||||
default) the left part of the screen, and tiles the rest on the right. You can
|
||||
change the orientation on a per-workspace basis if you want to use anything other
|
||||
than the default left/right split.
|
||||
|
||||

|
||||
|
||||
## Config
|
||||
|
||||
_category name `master`_
|
||||
|
||||
| name | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| allow_small_split | enable adding additional master windows in a horizontal split style | bool | false |
|
||||
| special_scale_factor | the scale of the special workspace windows. [0.0 - 1.0] | float | 1 |
|
||||
| mfact | the size as a percentage of the master window, for example `mfact = 0.70` would mean 70% of the screen will be the master window, and 30% the slave [0.0 - 1.0] | floatvalue | 0.55 |
|
||||
| new_status | `master`: new window becomes master; `slave`: new windows are added to slave stack; `inherit`: inherit from focused window | string | `slave` |
|
||||
| new_on_top | whether a newly open window should be on the top of the stack | bool | false |
|
||||
| new_on_active | `before`, `after`: place new window relative to the focused window; `none`: place new window according to the value of `new_on_top`. | string | `none` |
|
||||
| orientation | default placement of the master area, can be left, right, top, bottom or center | string | left |
|
||||
| inherit_fullscreen | inherit fullscreen status when cycling/swapping to another window (e.g. monocle layout) | bool | true |
|
||||
| slave_count_for_center_master | when using orientation=center, make the master window centered only when at least this many slave windows are open. (Set 0 to always_center_master) | int | 2 |
|
||||
| center_master_fallback | Set fallback for center master when slaves are less than slave_count_for_center_master, can be left ,right ,top ,bottom | string | left |
|
||||
| smart_resizing | if enabled, resizing direction will be determined by the mouse's position on the window (nearest to which corner). Else, it is based on the window's tiling position. | bool | true |
|
||||
| drop_at_cursor | when enabled, dragging and dropping windows will put them at the cursor position. Otherwise, when dropped at the stack side, they will go to the top/bottom of the stack depending on new_on_top. | bool | true |
|
||||
| always_keep_position | whether to keep the master window in its configured position when there are no slave windows | bool | false |
|
||||
|
||||
## Dispatchers
|
||||
|
||||
`layoutmsg` commands:
|
||||
|
||||
| command | description | params |
|
||||
| --- | --- | --- |
|
||||
| swapwithmaster | swaps the current window with master. If the current window is the master, swaps it with the first child. | either `master` (new focus is the new master window), `child` (new focus is the new child) or `auto` (which is the default, keeps the focus of the previously focused window). Adding `ignoremaster` will ignore this dispatcher if master is already focused. |
|
||||
| focusmaster | focuses the master window. | either `master` (focus stays on master), `auto` (default; focus first non-master window if already on master) or `previous` (remember current window when focusing master, if already on master, focus previous or fallback to `auto`). |
|
||||
| cyclenext | focuses the next window respecting the layout | either `loop` (allow looping from the bottom of the pile back to master) or `noloop` (force stop at the bottom of the pile, like in DWM). `loop` is the default if left blank. |
|
||||
| cycleprev | focuses the previous window respecting the layout | either `loop` (allow looping from master to the bottom of the pile) or `noloop` (force stop at master, like in DWM). `loop` is the default if left blank. |
|
||||
| swapnext | swaps the focused window with the next window respecting the layout | either `loop` (allow swapping the bottom of the pile and master) or `noloop` (do not allow it, like in DWM). `loop` is the default if left blank. |
|
||||
| swapprev | swaps the focused window with the previous window respecting the layout | either `loop` (allow swapping master and the bottom of the pile) or `noloop` (do not allow it, like in DWM). `loop` is the default if left blank. |
|
||||
| addmaster | adds a master to the master side. That will be the active window, if it's not a master, or the first non-master window. | none |
|
||||
| removemaster | removes a master from the master side. That will be the active window, if it's a master, or the last master window. | none |
|
||||
| orientationleft | sets the orientation for the current workspace to left (master area left, slave windows to the right, vertically stacked) | none |
|
||||
| orientationright | sets the orientation for the current workspace to right (master area right, slave windows to the left, vertically stacked) | none |
|
||||
| orientationtop | sets the orientation for the current workspace to top (master area top, slave windows to the bottom, horizontally stacked) | none |
|
||||
| orientationbottom | sets the orientation for the current workspace to bottom (master area bottom, slave windows to the top, horizontally stacked) | none |
|
||||
| orientationcenter | sets the orientation for the current workspace to center (master area center, slave windows alternate to the left and right, vertically stacked) | none |
|
||||
| orientationnext | cycle to the next orientation for the current workspace (clockwise) | none |
|
||||
| orientationprev | cycle to the previous orientation for the current workspace (counter-clockwise) | none |
|
||||
| orientationcycle | cycle to the next orientation from the provided list, for the current workspace | allowed values: `left`, `top`, `right`, `bottom`, or `center`. The values have to be separated by a space. If left empty, it will work like `orientationnext` |
|
||||
| mfact | change mfact, the master split ratio | the new split ratio, a relative float delta (e.g `-0.2` or `+0.2`) or `exact` followed by a the exact float value between 0.0 and 1.0 |
|
||||
| rollnext | rotate the next window in stack to be the master, while keeping the focus on master | none |
|
||||
| rollprev | rotate the previous window in stack to be the master, while keeping the focus on master | none |
|
||||
|
||||
Parameters for the commands are separated by a single space.
|
||||
|
||||
> [!NOTE]
|
||||
> Example usage:
|
||||
>
|
||||
> ```ini
|
||||
> bind = MOD, KEY, layoutmsg, cyclenext
|
||||
> # behaves like xmonads promote feature (https://hackage.haskell.org/package/xmonad-contrib-0.17.1/docs/XMonad-Actions-Promote.html)
|
||||
> bind = MOD, KEY, layoutmsg, swapwithmaster master
|
||||
> ```
|
||||
|
||||
## Workspace Rules
|
||||
|
||||
`layoutopt` rules:
|
||||
|
||||
| rule | description | type |
|
||||
| --- | --- | --- |
|
||||
| orientation:[o] | Sets the orientation of a workspace. For available orientations, see [Config->orientation](#config) | string |
|
||||
|
||||
Example usage:
|
||||
|
||||
```ini
|
||||
workspace = 2, layoutopt:orientation:top
|
||||
```
|
||||
312
dot_config/hypr/hyprland.wiki/content/Configuring/Monitors.md
Normal file
312
dot_config/hypr/hyprland.wiki/content/Configuring/Monitors.md
Normal file
@@ -0,0 +1,312 @@
|
||||
---
|
||||
weight: 4
|
||||
title: Monitors
|
||||
---
|
||||
|
||||
## General
|
||||
|
||||
The general config of a monitor looks like this:
|
||||
|
||||
```ini
|
||||
monitor = name, resolution, position, scale
|
||||
```
|
||||
|
||||
A common example:
|
||||
|
||||
```ini
|
||||
monitor = DP-1, 1920x1080@144, 0x0, 1
|
||||
```
|
||||
|
||||
This will make the monitor on `DP-1` a `1920x1080` display, at
|
||||
144Hz, `0x0` off from the top left corner, with a scale of 1 (unscaled).
|
||||
|
||||
To list all available monitors (active and inactive):
|
||||
|
||||
```bash
|
||||
hyprctl monitors all
|
||||
```
|
||||
|
||||
Monitors are positioned on a virtual "layout". The `position` is the position,
|
||||
in pixels, of said display in the layout. (calculated from the top-left corner)
|
||||
|
||||
For example:
|
||||
|
||||
```ini
|
||||
monitor = DP-1, 1920x1080, 0x0, 1
|
||||
monitor = DP-2, 1920x1080, 1920x0, 1
|
||||
```
|
||||
|
||||
will tell Hyprland to put DP-1 on the _left_ of DP-2, while
|
||||
|
||||
```ini
|
||||
monitor = DP-1, 1920x1080, 1920x0, 1
|
||||
monitor = DP-2, 1920x1080, 0x0, 1
|
||||
```
|
||||
|
||||
will tell Hyprland to put DP-1 on the _right_.
|
||||
|
||||
The `position` may contain _negative_ values, so the above example could also be
|
||||
written as
|
||||
|
||||
```ini
|
||||
monitor = DP-1, 1920x1080, 0x0, 1
|
||||
monitor = DP-2, 1920x1080, -1920x0, 1
|
||||
```
|
||||
|
||||
Hyprland uses an inverse Y cartesian system. Thus, a negative y coordinate
|
||||
places a monitor higher, and a positive y coordinate will place it lower.
|
||||
|
||||
For example:
|
||||
|
||||
```ini
|
||||
monitor = DP-1, 1920x1080, 0x0, 1
|
||||
monitor = DP-2, 1920x1080, 0x-1080, 1
|
||||
```
|
||||
|
||||
will tell Hyprland to put DP-2 _above_ DP-1, while
|
||||
|
||||
```ini
|
||||
monitor = DP-1, 1920x1080, 0x0, 1
|
||||
monitor = DP-2, 1920x1080, 0x1080, 1
|
||||
```
|
||||
|
||||
will tell Hyprland to put DP-2 _below_.
|
||||
|
||||
> [!NOTE]
|
||||
> The position is calculated with the scaled (and transformed) resolution, meaning
|
||||
> if you want your 4K monitor with scale 2 to the left of your 1080p one, you'd
|
||||
> use the position `1920x0` for the second screen (3840 / 2). If the monitor is
|
||||
> also rotated 90 degrees (vertical), you'd use `1080x0`.
|
||||
|
||||
> [!WARNING]
|
||||
> No monitors can overlap. This means that if your set positions make any monitors
|
||||
> overlap, you will get a warning.
|
||||
|
||||
Leaving the name empty will define a fallback rule to use when no other rules
|
||||
match.
|
||||
|
||||
There are a few special values for the resolutions:
|
||||
|
||||
- `preferred` - use the display's preferred size and refresh rate.
|
||||
- `highres` - use the highest supported resolution.
|
||||
- `highrr` - use the highest supported refresh rate.
|
||||
- `maxwidth` - use the widest supported resolution.
|
||||
|
||||
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,
|
||||
using the monitor's top left corner as the root point.
|
||||
- `auto-right/left/up/down` - place the monitor to the right/left, above or below other monitors,
|
||||
also based on each monitor's top left corner as the root.
|
||||
- `auto-center-right/left/up/down` - place the monitor to the right/left, above or below other monitors,
|
||||
but calculate placement from each monitor's center rather than its top left corner.
|
||||
|
||||
_**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`,
|
||||
but the left monitors will just be left of the origin and above the origin. You can also specify duplicate directions and
|
||||
monitors will continue to go in that direction.
|
||||
|
||||
You can also use `auto` as a scale to let Hyprland decide on a scale for you.
|
||||
These depend on the PPI of the monitor.
|
||||
|
||||
Recommended rule for quickly plugging in random monitors:
|
||||
|
||||
```ini
|
||||
monitor = , preferred, auto, 1
|
||||
```
|
||||
|
||||
This will make any monitor that was not specified with an explicit rule
|
||||
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
|
||||
`hyprctl monitors` for more details). If the output of `hyprctl monitors` looks
|
||||
like the following:
|
||||
|
||||
```yaml
|
||||
Monitor eDP-1 (ID 0):
|
||||
1920x1080@60.00100 at 0x0
|
||||
description: Chimei Innolux Corporation 0x150C (eDP-1)
|
||||
make: Chimei Innolux Corporation
|
||||
model: 0x150C
|
||||
[...]
|
||||
```
|
||||
|
||||
then the `description` value up to, but not including the portname `(eDP-1)` can
|
||||
be used to specify the monitor:
|
||||
|
||||
```ini
|
||||
monitor = desc:Chimei Innolux Corporation 0x150C, preferred, auto, 1.5
|
||||
```
|
||||
|
||||
Remember to remove the `(portname)`!
|
||||
|
||||
### Custom modelines
|
||||
|
||||
You can set up a custom modeline by changing the resolution field to a modeline,
|
||||
for example:
|
||||
|
||||
```ini
|
||||
monitor = DP-1, modeline 1071.101 3840 3848 3880 3920 2160 2263 2271 2277 +hsync -vsync, 0x0, 1
|
||||
```
|
||||
|
||||
### Disabling a monitor
|
||||
|
||||
To disable a monitor, use
|
||||
|
||||
```ini
|
||||
monitor = name, disable
|
||||
```
|
||||
|
||||
> [!WARNING]
|
||||
> Disabling a monitor will literally remove it from the layout, moving all windows
|
||||
> and workspaces to any remaining ones. If you want to disable your monitor in a
|
||||
> screensaver style (just turn off the monitor) use the `dpms`
|
||||
> [dispatcher](../Dispatchers).
|
||||
|
||||
## Custom reserved area
|
||||
|
||||
A reserved area is an area that remains unoccupied by tiled windows.
|
||||
If your workflow requires a custom reserved area, you can add it with:
|
||||
|
||||
```ini
|
||||
monitor = name, addreserved, TOP, BOTTOM, LEFT, RIGHT
|
||||
```
|
||||
|
||||
Where `TOP` `BOTTOM` `LEFT` `RIGHT` are integers, i.e the number in pixels of
|
||||
the reserved area to add. This does stack on top of the calculated reserved area
|
||||
(e.g. bars), but you may only use one of these rules per monitor in the config.
|
||||
|
||||
## Extra args
|
||||
|
||||
You can combine extra arguments at the end of the monitor rule, examples:
|
||||
|
||||
```ini
|
||||
monitor = eDP-1, 2880x1800@90, 0x0, 1, transform, 1, mirror, DP-2, bitdepth, 10
|
||||
```
|
||||
|
||||
See below for more details about each argument.
|
||||
|
||||
### Mirrored displays
|
||||
|
||||
If you want to mirror a display, add a `, mirror, <NAME>` at the end of the
|
||||
monitor rule, examples:
|
||||
|
||||
```ini
|
||||
monitor = DP-3, 1920x1080@60, 0x0, 1, mirror, DP-2
|
||||
monitor = , preferred, auto, 1, mirror, DP-1
|
||||
```
|
||||
|
||||
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
|
||||
will still be 1080p on the 4K display. This also means squishing and stretching
|
||||
will occur on aspect ratios that differ (e.g 16:9 and 16:10).
|
||||
|
||||
### 10 bit support
|
||||
|
||||
If you want to enable 10 bit support for your display, add a `, bitdepth, 10` at
|
||||
the end of the monitor rule, e.g:
|
||||
|
||||
```ini
|
||||
monitor = eDP-1, 2880x1800@90, 0x0, 1, bitdepth, 10
|
||||
```
|
||||
|
||||
> [!WARNING]
|
||||
> Colors registered in Hyprland (e.g. the border color) do _not_ support
|
||||
> 10 bit.
|
||||
> Some applications do _not_ support screen capture with 10 bit enabled.
|
||||
|
||||
### Color management presets
|
||||
|
||||
Add a `, cm, X` to change default sRGB output preset
|
||||
|
||||
```ini
|
||||
monitor = eDP-1, 2880x1800@90, 0x0, 1, bitdepth, 10, cm, wide
|
||||
```
|
||||
|
||||
```plain
|
||||
auto - srgb for 8bpc, wide for 10bpc if supported (recommended)
|
||||
srgb - sRGB primaries (default)
|
||||
dcip3 - DCI P3 primaries
|
||||
dp3 - Apple P3 primaries
|
||||
adobe - Adobe RGB primaries
|
||||
wide - wide color gamut, BT2020 primaries
|
||||
edid - primaries from edid (known to be inaccurate)
|
||||
hdr - wide color gamut and HDR PQ transfer function (experimental)
|
||||
hdredid - same as hdr with edid primaries (experimental)
|
||||
```
|
||||
|
||||
Fullscreen HDR is possible without hdr `cm` setting if `render:cm_fs_passthrough` is enabled.
|
||||
|
||||
Use `sdrbrightness, B` and `sdrsaturation, S` to control SDR brightness and saturation in HDR mode. The default for both values is `1.0`. Typical brightness value should be in `1.0 ... 2.0` range.
|
||||
|
||||
```ini
|
||||
monitor = eDP-1, 2880x1800@90, 0x0, 1, bitdepth, 10, cm, hdr, sdrbrightness, 1.2, sdrsaturation, 0.98
|
||||
```
|
||||
|
||||
The default transfer function assumed to be in use on an SDR display for sRGB content is defined by `, sdr_eotf, X`. The default (`0`) is to follow `render:cm_sdr_eotf`. This can be changed to piecewise sRGB with `1`, or Gamma 2.2 with `2`.
|
||||
|
||||
### VRR
|
||||
|
||||
Per-display VRR can be done by adding `, vrr, X` where `X` is the mode from the
|
||||
[variables page](../Variables).
|
||||
|
||||
## Rotating
|
||||
|
||||
If you want to rotate a monitor, add a `, transform, X` at the end of the monitor
|
||||
rule, where `X` corresponds to a transform number, e.g.:
|
||||
|
||||
```ini
|
||||
monitor = eDP-1, 2880x1800@90, 0x0, 1, transform, 1
|
||||
```
|
||||
|
||||
Transform list:
|
||||
|
||||
```plain
|
||||
0 -> normal (no transforms)
|
||||
1 -> 90 degrees
|
||||
2 -> 180 degrees
|
||||
3 -> 270 degrees
|
||||
4 -> flipped
|
||||
5 -> flipped + 90 degrees
|
||||
6 -> flipped + 180 degrees
|
||||
7 -> flipped + 270 degrees
|
||||
```
|
||||
|
||||
## Monitor v2
|
||||
|
||||
Alternative syntax. `monitor = DP-1,1920x1080@144,0x0,1,transform,2` is the same as
|
||||
|
||||
```ini
|
||||
monitorv2 {
|
||||
output = DP-1
|
||||
mode = 1920x1080@144
|
||||
position = 0x0
|
||||
scale = 1
|
||||
transform = 2
|
||||
}
|
||||
```
|
||||
|
||||
The `disable` flag turns into `disabled = true`, but other named settings keep their names: `name, value` → `name = value` (e.g. `bitdepth,10` → `bitdepth = 10`)
|
||||
|
||||
EDID overrides and SDR → HDR settings:
|
||||
|
||||
| name | description | type |
|
||||
|---|---|---|
|
||||
| supports_wide_color | Force wide color gamut support (1 - force on, 0 - does nothing) | bool |
|
||||
| supports_hdr | Force HDR support. Requires wide color gamut (1 - force on, 0 - does nothing) | bool |
|
||||
| sdr_min_luminance | SDR minimum lumninace used for SDR → HDR mapping. Set to 0.005 for true black matching HDR black | float |
|
||||
| sdr_max_luminance | SDR maximum luminance. Can be used to adjust overall SDR → HDR brightness. 80 - 400 is a reasonable range. The desired value is likely between 200 and 250 | int |
|
||||
| min_luminance | Monitor's minimum luminance | float |
|
||||
| max_luminance | Monitor's maximum possible luminance | int |
|
||||
| max_avg_luminance | Monitor's maximum luminance on average for a typical frame | int |
|
||||
|
||||
Note: those values might get passed to the monitor itself and cause increased burn-in or other damage if it's firmware lacks some safety checks.
|
||||
|
||||
## Default workspace
|
||||
|
||||
See [Workspace Rules](../Workspace-Rules).
|
||||
|
||||
### Binding workspaces to a monitor
|
||||
|
||||
See [Workspace Rules](../Workspace-Rules).
|
||||
126
dot_config/hypr/hyprland.wiki/content/Configuring/Multi-GPU.md
Normal file
126
dot_config/hypr/hyprland.wiki/content/Configuring/Multi-GPU.md
Normal file
@@ -0,0 +1,126 @@
|
||||
---
|
||||
weight: 19
|
||||
title: Multi-GPU
|
||||
---
|
||||
|
||||
## General
|
||||
|
||||
If your host machine uses multiple GPUs, you may want to use one GPU
|
||||
for rendering all the elements for Hyprland including windows, animations, and
|
||||
another for hardware acceleration for certain applications, etc.
|
||||
|
||||
This setup is very common in the likes of gaming laptops, GPU-passthrough
|
||||
(without VFIO) capable hosts, and if you have multiple GPUs in general.
|
||||
|
||||
## Detecting GPUs
|
||||
|
||||
For this case, the writer is taking the example of their laptop.
|
||||
|
||||
Upon running `lspci -d ::03xx`, one can list all the PCI display controllers
|
||||
available.
|
||||
|
||||
```plain
|
||||
01:00.0 VGA compatible controller: NVIDIA Corporation TU117M [GeForce GTX 1650 Mobile / Max-Q] (rev a1)
|
||||
06:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] (rev c6)
|
||||
```
|
||||
|
||||
Here it is clear that 2 GPUs are available, the dedicated NVIDIA GTX 1650 Mobile
|
||||
/ Max-Q and the integrated AMD Cezanne Radeon Vega Series GPU.
|
||||
|
||||
Now, run `ls -l /dev/dri/by-path`
|
||||
|
||||
```plain
|
||||
total 0
|
||||
lrwxrwxrwx 1 root root 8 Jul 14 15:45 pci-0000:01:00.0-card -> ../card0
|
||||
lrwxrwxrwx 1 root root 13 Jul 14 15:45 pci-0000:01:00.0-render -> ../renderD128
|
||||
lrwxrwxrwx 1 root root 8 Jul 14 15:45 pci-0000:06:00.0-card -> ../card1
|
||||
lrwxrwxrwx 1 root root 13 Jul 14 15:45 pci-0000:06:00.0-render -> ../renderD129
|
||||
```
|
||||
|
||||
So from the above outputs, we can see that the path for the AMD card is
|
||||
`pci-0000:06:00.0-card`, due to the matching `06:00.0` from the first command.
|
||||
Do not use the `card1` symlink indicated here. It is dynamically assigned at
|
||||
boot and is subject to frequent change, making it unsuitable as a marker for GPU selection.
|
||||
|
||||
## Telling Hyprland which GPU to use
|
||||
|
||||
After determining which "card" belongs to which GPU, we can now tell
|
||||
Hyprland which GPUs to use by setting the `AQ_DRM_DEVICES` environment variable.
|
||||
|
||||
> [!NOTE]
|
||||
> It is generally a good idea for laptops to use the integrated GPU as the primary
|
||||
> renderer as this preserves battery life and is practically indistinguishable
|
||||
> from using the dedicated GPU on modern systems in most cases. Hyprland can be
|
||||
> run on integrated GPUs just fine. The same principle applies for desktop setups
|
||||
> with lower and higher power rating GPUs respectively.
|
||||
|
||||
If you would like to use another GPU, or the wrong GPU is picked by default,
|
||||
set `AQ_DRM_DEVICES` to a `:`-separated list of card paths, e.g.
|
||||
|
||||
```plain
|
||||
env = AQ_DRM_DEVICES,/dev/dri/card0:/dev/dri/card1
|
||||
```
|
||||
|
||||
Here, we tell Hyprland which GPUs it's allowed to use, in order of priority.
|
||||
For example, `card0` will be the primary renderer, but if it isn't available for
|
||||
whatever reason, then `card1` is primary.
|
||||
|
||||
Do note that if you have an external monitor connected to, for example `card1`,
|
||||
that card must be included in `AQ_DRM_DEVICES` for the monitor to work, though
|
||||
it doesn't have to be the primary renderer.
|
||||
|
||||
You should now be able to use an integrated GPU for lighter GPU loads,
|
||||
including Hyprland, or default to your dGPU if you prefer.
|
||||
|
||||
> [!NOTE]
|
||||
> [uwsm](../../Useful-Utilities/Systemd-start) users are advised to export the `AQ_DRM_DEVICES` variable inside `~/.config/uwsm/env-hyprland`, instead.
|
||||
> This method ensures that the variable is properly exported to the systemd environment without conflicting with other compositors or desktop environments.
|
||||
>
|
||||
> ```plain
|
||||
> export AQ_DRM_DEVICES="/dev/dri/card0:/dev/dri/card1"
|
||||
> ```
|
||||
|
||||
## Creating consistent device paths for specific cards
|
||||
|
||||
As mentioned above, it's not recommended to use the `/dev/dri/card*` device paths since they
|
||||
periodically change which device they are symlinked to. Furthermore, the colons in the actual card
|
||||
device paths are not usable in the `AQ_DRM_DEVICES` environment variable since colons `:` are used
|
||||
as a separator for multiple paths.
|
||||
|
||||
It's possible to use udev rules to create reliable symlinks to particular device cards. For example,
|
||||
to create a symlink to an AMD card at the path `/dev/dri/amd-igpu`, we can create a udev rule at
|
||||
`/etc/udev/rules.d/amd-igpu-dev-path.rules` programmatically like so:
|
||||
|
||||
```sh
|
||||
SYMLINK_NAME="amd-igpu"
|
||||
RULE_PATH="/etc/udev/rules.d/amd-igpu-dev-path.rules"
|
||||
AMD_IGPU_ID=$(lspci -d ::03xx | grep 'AMD' | cut -f1 -d' ')
|
||||
UDEV_RULE="$(cat <<EOF
|
||||
KERNEL=="card*", \
|
||||
KERNELS=="0000:$AMD_IGPU_ID", \
|
||||
SUBSYSTEM=="drm", \
|
||||
SUBSYSTEMS=="pci", \
|
||||
SYMLINK+="dri/$SYMLINK_NAME"
|
||||
EOF
|
||||
)"
|
||||
|
||||
echo "$UDEV_RULE" | sudo tee "$RULE_PATH"
|
||||
```
|
||||
Then reloading the udev rules with:
|
||||
```sh
|
||||
sudo udevadm control --reload
|
||||
sudo udevadm trigger
|
||||
```
|
||||
|
||||
There should now be a symlink at `/dev/dri/amd-igpu` that points to your respective card file:
|
||||
```console
|
||||
$ ls -l /dev/dri/amd-igpu
|
||||
lrwxrwxrwx 1 root root 5 /dev/dri/amd-igpu -> card1
|
||||
```
|
||||
|
||||
This symlink will automatically update to point to correct card file if it ever changes.
|
||||
|
||||
Now it is possible to use the new symlink in the `AQ_DRM_DEVICES` environment variable:
|
||||
```plain
|
||||
env = AQ_DRM_DEVICES, /dev/dri/amd-igpu
|
||||
```
|
||||
@@ -0,0 +1,36 @@
|
||||
---
|
||||
weight: 22
|
||||
title: Performance
|
||||
---
|
||||
|
||||
This page documents known tricks and fixes to boost performance if by any chance
|
||||
you stumble upon problems or you do not care that much about animations.
|
||||
|
||||
## Fractional scaling
|
||||
|
||||
Wayland fractional scaling is a lot better than before, but it is not perfect.
|
||||
Some applications do not support it yet or the support is experimental at best.
|
||||
If you have problems with your graphics card having high usage or Hyprland
|
||||
feeling laggy, try setting the scaling to integer numbers such as `1` or `2`
|
||||
like in this example `monitor=,preferred,auto,2`.
|
||||
|
||||
## Low FPS/stutter/FPS drops on Intel iGPU with TLP (mainly laptops)
|
||||
|
||||
The TLP defaults are rather aggressive, setting `INTEL_GPU_MIN_FREQ_ON_AC`
|
||||
and/or `INTEL_GPU_MIN_FREQ_ON_BAT` in `/etc/tlp.conf` to something slightly
|
||||
higher (e.g. to 500 from 300) will reduce stutter significantly or, in the best
|
||||
case, remove it completely.
|
||||
|
||||
## How do I make Hyprland draw as little power as possible on my laptop?
|
||||
|
||||
**_Useful Optimizations_**:
|
||||
|
||||
- `decoration:blur:enabled = false` and `decoration:shadow:enabled = false` to disable
|
||||
fancy but battery hungry effects.
|
||||
|
||||
- `misc:vfr = true`, since it'll lower the amount of sent frames when nothing is
|
||||
happening on-screen.
|
||||
|
||||
## My games work poorly, especially proton ones
|
||||
|
||||
Using `gamescope` tends to fix any and all issues with Wayland/Hyprland.
|
||||
105
dot_config/hypr/hyprland.wiki/content/Configuring/Permissions.md
Normal file
105
dot_config/hypr/hyprland.wiki/content/Configuring/Permissions.md
Normal file
@@ -0,0 +1,105 @@
|
||||
---
|
||||
weight: 14
|
||||
title: Permissions
|
||||
---
|
||||
|
||||
If you have `hyprland-guiutils` installed, you can make use of Hyprland's built-in
|
||||
permission system.
|
||||
|
||||
For now, it only has a few permissions, but it might include more in the future.
|
||||
|
||||
## Permissions
|
||||
|
||||
Permissions work a bit like Android ones. If an app tries to do something sensitive with
|
||||
the compositor (Hyprland), Hyprland will pop up a notification asking you if you
|
||||
want to let it do that.
|
||||
|
||||
> [!NOTE]
|
||||
> Before setting up permissions, make sure you enable them by setting
|
||||
> `ecosystem:enforce_permissions = true`, as it's disabled by default.
|
||||
|
||||
|
||||
### Configuring permissions
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Permissions set up in the config are **not** reloaded on-the-fly and require a Hyprland
|
||||
> restart for security reasons.
|
||||
|
||||
Configuring them is simple:
|
||||
|
||||
```ini
|
||||
permission = regex, permission, mode
|
||||
```
|
||||
|
||||
for example:
|
||||
```ini
|
||||
permission = /usr/bin/grim, screencopy, allow
|
||||
```
|
||||
Will allow `/usr/bin/grim` to always capture your screen without asking.
|
||||
|
||||
```ini
|
||||
permission = /usr/bin/appsuite-.*, screencopy, allow
|
||||
```
|
||||
Will allow any app whose path starts with `/usr/bin/appsuite-` to capture your screen without asking.
|
||||
|
||||
|
||||
### Permission modes
|
||||
|
||||
There are 3 modes:
|
||||
- `allow`: Don't ask, just allow the app to proceed.
|
||||
- `ask`: Pop up a notification every time the app tries to do something sensitive. These popups allow you to Deny, Allow until the app exits, or Allow until Hyprland exits.
|
||||
- `deny`: Don't ask, always deny the application access.
|
||||
|
||||
|
||||
### Permission list
|
||||
|
||||
`screencopy`:
|
||||
- Default: **ASK**
|
||||
- Access to your screen _without_ going through xdg-desktop-portal-hyprland. Examples include: `grim`, `wl-screenrec`, `wf-recorder`.
|
||||
- If denied, will render a black screen with a "permission denied" text.
|
||||
- Why deny? For apps / scripts that might maliciously try to capture your screen without your knowledge by using wayland protocols directly.
|
||||
|
||||
`plugin`:
|
||||
- Default: **ASK**
|
||||
- Access to load a plugin. Can be either a regex for the app binary, or plugin path.
|
||||
- Do _not_ allow `hyprctl` to load your plugins by default (attacker could issue `hyprctl plugin load /tmp/my-malicious-plugin.so`) - use either `deny` to disable or `ask` to be prompted.
|
||||
|
||||
`keyboard`:
|
||||
- Default: **ALLOW**
|
||||
- Access to connecting a new keyboard. Regex of the device name.
|
||||
- If you want to disable all keyboards not matching a regex, make a rule that sets `DENY` for `.*` _as the last keyboard permission rule_.
|
||||
- Why deny? Rubber duckies, malicious virtual / usb keyboards.
|
||||
|
||||
## Notes
|
||||
|
||||
**xdg-desktop-portal** implementations (including xdph) are just regular applications. They will go through permissions too. You might want to consider
|
||||
adding a rule like this:
|
||||
```ini
|
||||
permission = /usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow
|
||||
```
|
||||
if you are not allowing screencopy for all apps.
|
||||
|
||||
<br/>
|
||||
|
||||
NixOS does not have static paths for the binaries, so regex has to be used. These example rules allow `grim` and `xdg-desktop-portal-hyprland` to copy the screen:
|
||||
```ini
|
||||
permission = /nix/store/[a-z0-9]{32}-grim-[0-9.]*/bin/grim, screencopy, allow
|
||||
permission = /nix/store/[a-z0-9]{32}-xdg-desktop-portal-hyprland-[0-9.]*/libexec/.xdg-desktop-portal-hyprland-wrapped, screencopy, allow
|
||||
```
|
||||
|
||||
When rendering the configuration with Nix itself, string interpolation can also be used (be aware that if the path contains special regex characters (e.g. `+`) they need to be escaped):
|
||||
```ini
|
||||
permission = ${lib.getExe pkgs.grim}, screencopy, allow
|
||||
permission = ${lib.escapeRegex (lib.getExe config.programs.hyprlock.package)}, screencopy, allow
|
||||
permission = ${pkgs.xdg-desktop-portal-hyprland}/libexec/.xdg-desktop-portal-hyprland-wrapped, screencopy, allow
|
||||
```
|
||||
|
||||
<br/>
|
||||
|
||||
On some **BSD** systems paths might not work. In such cases, you might want to disable permissions altogether, by setting
|
||||
```ini
|
||||
ecosystem {
|
||||
enforce_permissions = false
|
||||
}
|
||||
```
|
||||
otherwise, you have no _config_ control over permissions (popups will still work, although will not show paths, and "remember" will not be available).
|
||||
46
dot_config/hypr/hyprland.wiki/content/Configuring/Start.md
Normal file
46
dot_config/hypr/hyprland.wiki/content/Configuring/Start.md
Normal file
@@ -0,0 +1,46 @@
|
||||
---
|
||||
weight: 1
|
||||
title: Start
|
||||
---
|
||||
|
||||
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 `}` **_in separate lines!_**
|
||||
|
||||
> [!WARNING]
|
||||
> 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.
|
||||
|
||||
## Language style and syntax
|
||||
|
||||
See the [hyprlang page](../../Hypr-Ecosystem/hyprlang).
|
||||
|
||||
## 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.
|
||||
56
dot_config/hypr/hyprland.wiki/content/Configuring/Tearing.md
Normal file
56
dot_config/hypr/hyprland.wiki/content/Configuring/Tearing.md
Normal file
@@ -0,0 +1,56 @@
|
||||
---
|
||||
weight: 11
|
||||
title: Tearing
|
||||
---
|
||||
|
||||
Screen tearing is used to reduce latency and/or jitter in games.
|
||||
|
||||
## Enabling tearing
|
||||
|
||||
To enable tearing:
|
||||
|
||||
- Set `general:allow_tearing` to `true`. This is a "master toggle"
|
||||
- Add an `immediate` windowrule to your game of choice. This makes sure that
|
||||
Hyprland will tear it.
|
||||
|
||||
> [!WARNING]
|
||||
> Please note that tearing will only be in effect when the game is in fullscreen
|
||||
> and the only thing visible on the screen.
|
||||
|
||||
Example snippet:
|
||||
|
||||
```env
|
||||
general {
|
||||
allow_tearing = true
|
||||
}
|
||||
|
||||
windowrule = match:class cs2, immediate yes
|
||||
```
|
||||
|
||||
> [!WARNING]
|
||||
> If you experience graphical issues, you may be out of luck. Tearing support is
|
||||
> experimental.
|
||||
> See the likely culprits below.
|
||||
|
||||
## Common issues
|
||||
|
||||
### No tearing at all
|
||||
|
||||
Make sure your window rules are matching and you have the master toggle enabled.
|
||||
|
||||
Also make sure nothing except for your game is showing on your monitor. No
|
||||
notifications, overlays, lockscreens, bars, other windows, etc. (on a different
|
||||
monitor is fine)
|
||||
|
||||
### Apps that should tear, freeze
|
||||
|
||||
Almost definitely means your GPU driver does not support tearing.
|
||||
|
||||
Please _do not_ report issues if this is the culprit.
|
||||
|
||||
### Graphical artifacts (random colorful pixels, etc)
|
||||
|
||||
Likely issue with your graphics driver.
|
||||
|
||||
Please _do not_ report issues if this is the culprit. Unfortunately, it's most
|
||||
likely your GPU driver's fault.
|
||||
@@ -0,0 +1,408 @@
|
||||
---
|
||||
weight: 20
|
||||
title: Uncommon tips & tricks
|
||||
---
|
||||
|
||||
## Switchable keyboard layouts
|
||||
|
||||
The easiest way to accomplish this is to set this using XKB settings, for
|
||||
example:
|
||||
|
||||
```ini
|
||||
input {
|
||||
kb_layout = us,cz
|
||||
kb_variant = ,qwerty
|
||||
kb_options = grp:alt_shift_toggle
|
||||
}
|
||||
```
|
||||
|
||||
Variants are set per layout.
|
||||
|
||||
> [!WARNING]
|
||||
> The first layout defined in the input section will be the one used for binds by
|
||||
> default.
|
||||
>
|
||||
> For example: `us,ua` -> config binds would be e.g. `SUPER, A`, while on `ua,us`
|
||||
> -> `SUPER, Cyrillic_ef`
|
||||
>
|
||||
> You can change this behavior globally or per-device by setting
|
||||
> `resolve_binds_by_sym = 1`. In that case, binds will activate when the symbol
|
||||
> typed matches the symbol specified in the bind.
|
||||
>
|
||||
> For example: if your layouts are `us,fr` and have a bind for `SUPER, A` you'd
|
||||
> need to press the first letter on the second row while the `us` layout is active
|
||||
> and the first letter on the first row while the `fr` layout is active.
|
||||
|
||||
You can also bind a key to execute `hyprctl switchxkblayout` for more keybind
|
||||
freedom. See [Using hyprctl](../Using-hyprctl).
|
||||
|
||||
To find the valid layouts and `kb_options`, you can check out the
|
||||
`/usr/share/X11/xkb/rules/base.lst`. For example:
|
||||
|
||||
To get the layout name of a language:
|
||||
|
||||
```sh
|
||||
grep -i 'persian' /usr/share/X11/xkb/rules/base.lst
|
||||
```
|
||||
|
||||
To get the list of keyboard shortcuts you can put in the `kb_options` to toggle
|
||||
keyboard layouts:
|
||||
|
||||
```sh
|
||||
grep 'grp:.*toggle' /usr/share/X11/xkb/rules/base.lst
|
||||
```
|
||||
|
||||
## Disabling keybinds with one master keybind
|
||||
|
||||
If you want to disable all keybinds with another keybind (make a keybind toggle
|
||||
of sorts) you can just use a submap with only a keybind to exit it.
|
||||
|
||||
```ini
|
||||
bind = MOD, KEY, submap, clean
|
||||
submap = clean
|
||||
bind = MOD, KEY, submap, reset
|
||||
submap = reset
|
||||
```
|
||||
|
||||
## Remapping Caps Lock
|
||||
|
||||
You can customize the behavior of the Caps Lock key using `kb_options`.
|
||||
|
||||
To view all available options related to Caps Lock, run:
|
||||
|
||||
```sh
|
||||
grep 'caps' /usr/share/X11/xkb/rules/base.lst
|
||||
```
|
||||
|
||||
For example, to remap Caps lock to Ctrl:
|
||||
|
||||
```ini
|
||||
input {
|
||||
kb_options = ctrl:nocaps
|
||||
}
|
||||
```
|
||||
|
||||
To swap Caps Lock and Escape:
|
||||
|
||||
```ini
|
||||
input {
|
||||
kb_options = caps:swapescape
|
||||
}
|
||||
```
|
||||
|
||||
You can also find additional `kb_options` unrelated to Caps Lock in `/usr/share/X11/xkb/rules/base.lst`.
|
||||
|
||||
## Set F13-F24 as usual function keys
|
||||
|
||||
By default, F13-F24 are mapped by xkb as various "XF86" keysyms. These cause binding
|
||||
issues in many programs. One example is OBS Studio, which does not detect the XF86
|
||||
keysyms as usable keybindings, making you unable to use them for binds. This option
|
||||
simply maps them back to the expected F13-F24 values, which are bindable as normal.
|
||||
|
||||
> [!WARNING]
|
||||
> This option was only added recently to `xkeyboard-config`. Please ensure you are on version
|
||||
> 2.43 or greater for this option to do anything.
|
||||
|
||||
```ini
|
||||
input {
|
||||
kb_options = fkeys:basic_13-24
|
||||
}
|
||||
```
|
||||
|
||||
## Minimize windows using special workspaces
|
||||
|
||||
This approach uses special workspaces to mimic the "minimize window" function, by using a single keybind to toggle the minimized state.
|
||||
Note that one keybind can only handle one window.
|
||||
|
||||
```ini
|
||||
bind = $mod, S, togglespecialworkspace, magic
|
||||
bind = $mod, S, movetoworkspace, +0
|
||||
bind = $mod, S, togglespecialworkspace, magic
|
||||
bind = $mod, S, movetoworkspace, special:magic
|
||||
bind = $mod, S, togglespecialworkspace, magic
|
||||
```
|
||||
|
||||
## Show desktop
|
||||
|
||||
This approach uses same principle as the [Minimize windows using special workspaces](#minimize-windows-using-special-workspaces) section.
|
||||
It moves all windows from current workspace to a special workspace named `desktop`.
|
||||
Showing desktop state is remembered per workspace.
|
||||
|
||||
Create a script:
|
||||
|
||||
```sh
|
||||
#!/bin/env sh
|
||||
|
||||
TMP_FILE="$XDG_RUNTIME_DIR/hyprland-show-desktop"
|
||||
|
||||
CURRENT_WORKSPACE=$(hyprctl monitors -j | jq '.[] | .activeWorkspace | .name' | sed 's/"//g')
|
||||
|
||||
if [ -s "$TMP_FILE-$CURRENT_WORKSPACE" ]; then
|
||||
readarray -d $'\n' -t ADDRESS_ARRAY <<< $(< "$TMP_FILE-$CURRENT_WORKSPACE")
|
||||
|
||||
for address in "${ADDRESS_ARRAY[@]}"
|
||||
do
|
||||
CMDS+="dispatch movetoworkspacesilent name:$CURRENT_WORKSPACE,address:$address;"
|
||||
done
|
||||
|
||||
hyprctl --batch "$CMDS"
|
||||
|
||||
rm "$TMP_FILE-$CURRENT_WORKSPACE"
|
||||
else
|
||||
HIDDEN_WINDOWS=$(hyprctl clients -j | jq --arg CW "$CURRENT_WORKSPACE" '.[] | select (.workspace .name == $CW) | .address')
|
||||
|
||||
readarray -d $'\n' -t ADDRESS_ARRAY <<< $HIDDEN_WINDOWS
|
||||
|
||||
for address in "${ADDRESS_ARRAY[@]}"
|
||||
do
|
||||
address=$(sed 's/"//g' <<< $address )
|
||||
|
||||
if [[ -n address ]]; then
|
||||
TMP_ADDRESS+="$address\n"
|
||||
fi
|
||||
|
||||
CMDS+="dispatch movetoworkspacesilent special:desktop,address:$address;"
|
||||
done
|
||||
|
||||
hyprctl --batch "$CMDS"
|
||||
|
||||
echo -e "$TMP_ADDRESS" | sed -e '/^$/d' > "$TMP_FILE-$CURRENT_WORKSPACE"
|
||||
fi
|
||||
```
|
||||
|
||||
then bind it:
|
||||
|
||||
```ini
|
||||
bind = $mainMod , D, exec, <PATH TO SCRIPT>
|
||||
```
|
||||
|
||||
## Minimize Steam instead of killing
|
||||
|
||||
Steam will exit entirely when its last window is closed using the `killactive`
|
||||
dispatcher. To minimize Steam to tray, use the following script to close
|
||||
applications:
|
||||
|
||||
```sh
|
||||
if [ "$(hyprctl activewindow -j | jq -r ".class")" = "Steam" ]; then
|
||||
xdotool getactivewindow windowunmap
|
||||
else
|
||||
hyprctl dispatch killactive ""
|
||||
fi
|
||||
```
|
||||
|
||||
## Shimeji
|
||||
|
||||
To use Shimeji programs like
|
||||
[this](https://codeberg.org/thatonecalculator/spamton-linux-shimeji), set the
|
||||
following rules:
|
||||
|
||||
```ini
|
||||
windowrule {
|
||||
name = shimeji
|
||||
match:class = com-group_finity-mascot-Main
|
||||
|
||||
float = true
|
||||
no_blur = true
|
||||
no_focus = true
|
||||
no_shadow = true
|
||||
border_size = 0
|
||||
}
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> The app indicator probably won't show, so you'll have to `killall -9 java` to
|
||||
> kill them.
|
||||
|
||||

|
||||
|
||||
## Toggle animations/blur/etc hotkey
|
||||
|
||||
For increased performance in games, or for less distractions at a keypress
|
||||
|
||||
1. create file
|
||||
`~/.config/hypr/gamemode.sh && chmod +x ~/.config/hypr/gamemode.sh` and add:
|
||||
|
||||
```bash
|
||||
#!/usr/bin/env sh
|
||||
HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}')
|
||||
if [ "$HYPRGAMEMODE" = 1 ] ; then
|
||||
hyprctl --batch "\
|
||||
keyword animations:enabled 0;\
|
||||
keyword animation borderangle,0; \
|
||||
keyword decoration:shadow:enabled 0;\
|
||||
keyword decoration:blur:enabled 0;\
|
||||
keyword decoration:fullscreen_opacity 1;\
|
||||
keyword general:gaps_in 0;\
|
||||
keyword general:gaps_out 0;\
|
||||
keyword general:border_size 1;\
|
||||
keyword decoration:rounding 0"
|
||||
hyprctl notify 1 5000 "rgb(40a02b)" "Gamemode [ON]"
|
||||
exit
|
||||
else
|
||||
hyprctl notify 1 5000 "rgb(d20f39)" "Gamemode [OFF]"
|
||||
hyprctl reload
|
||||
exit 0
|
||||
fi
|
||||
exit 1
|
||||
```
|
||||
|
||||
Edit to your liking of course. If animations are enabled, it disables all the
|
||||
pretty stuff. Otherwise, the script reloads your config to grab your defaults.
|
||||
|
||||
2. Add this to your `hyprland.conf`:
|
||||
|
||||
```ini
|
||||
bind = WIN, F1, exec, ~/.config/hypr/gamemode.sh
|
||||
```
|
||||
|
||||
The hotkey toggle will be WIN+F1, but you can change this to whatever you want.
|
||||
|
||||
## Zoom
|
||||
|
||||
To zoom using Hyprland's built-in zoom utility
|
||||
> [!WARNING]
|
||||
> If mouse wheel bindings work only for the first time, you should probably reduce reset time with `binds:scroll_event_delay`
|
||||
|
||||
```ini
|
||||
bind = $mod, mouse_down, exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '.float * 1.1')
|
||||
bind = $mod, mouse_up, exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '(.float * 0.9) | if . < 1 then 1 else . end')
|
||||
|
||||
binde = $mod, equal, exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '.float * 1.1')
|
||||
binde = $mod, minus, exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '(.float * 0.9) | if . < 1 then 1 else . end')
|
||||
binde = $mod, KP_ADD, exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '.float * 1.1')
|
||||
binde = $mod, KP_SUBTRACT, exec, hyprctl -q keyword cursor:zoom_factor $(hyprctl getoption cursor:zoom_factor -j | jq '(.float * 0.9) | if . < 1 then 1 else . end')
|
||||
|
||||
bind = $mod SHIFT, mouse_up, exec, hyprctl -q keyword cursor:zoom_factor 1
|
||||
bind = $mod SHIFT, mouse_down, exec, hyprctl -q keyword cursor:zoom_factor 1
|
||||
bind = $mod SHIFT, minus, exec, hyprctl -q keyword cursor:zoom_factor 1
|
||||
bind = $mod SHIFT, KP_SUBTRACT, exec, hyprctl -q keyword cursor:zoom_factor 1
|
||||
bind = $mod SHIFT, 0, exec, hyprctl -q keyword cursor:zoom_factor 1
|
||||
```
|
||||
|
||||
## Alt tab behaviour
|
||||
To mimic DE's alt-tab behaviour. Here is an example that uses foot, fzf, [grim-hyprland](https://github.com/eriedaberrie/grim-hyprland) and chafa to the screenshot in the terminal.
|
||||
|
||||

|
||||
|
||||
Dependencies :
|
||||
- foot
|
||||
- fzf
|
||||
- [grim-hyprland](https://github.com/eriedaberrie/grim-hyprland)
|
||||
- chafa
|
||||
- jq
|
||||
|
||||
1. add this to your config
|
||||
|
||||
```ini
|
||||
exec-once = foot --server -c $XDG_CONFIG_HOME/foot/foot.ini
|
||||
|
||||
bind = ALT, TAB, exec, $HOME/.config/hypr/scripts/alttab/enable.sh 'down'
|
||||
bind = ALT SHIFT, TAB, exec, $HOME/.config/hypr/scripts/alttab/enable.sh 'up'
|
||||
|
||||
submap=alttab
|
||||
bind = ALT, tab, sendshortcut, , tab, class:alttab
|
||||
bind = ALT SHIFT, tab, sendshortcut, shift, tab, class:alttab
|
||||
|
||||
bindrt = ALT, ALT_L, exec, $XDG_CONFIG_HOME/hypr/scripts/alttab/disable.sh ; hyprctl -q dispatch sendshortcut , return,class:alttab
|
||||
bindrt = ALT SHIFT, ALT_L, exec, $XDG_CONFIG_HOME/hypr/scripts/alttab/disable.sh ; hyprctl -q dispatch sendshortcut , return,class:alttab
|
||||
bind = ALT, Return, exec, $XDG_CONFIG_HOME/hypr/scripts/alttab/disable.sh ; hyprctl -q dispatch sendshortcut , return, class:alttab
|
||||
bind = ALT SHIFT, Return, exec, $XDG_CONFIG_HOME/hypr/scripts/alttab/disable.sh ; hyprctl -q dispatch sendshortcut , return, class:alttab
|
||||
bind = ALT, escape, exec, $XDG_CONFIG_HOME/hypr/scripts/alttab/disable.sh ; hyprctl -q dispatch sendshortcut , escape,class:alttab
|
||||
bind = ALT SHIFT, escape, exec, $XDG_CONFIG_HOME/hypr/scripts/alttab/disable.sh ; hyprctl -q dispatch sendshortcut , escape,class:alttab
|
||||
submap = reset
|
||||
|
||||
workspace = special:alttab, gapsout:0, gapsin:0, bordersize:0
|
||||
windowrule = match:class alttab, no_anim
|
||||
windowrule = match:class alttab, stay_focused
|
||||
windowrule = match:class alttab, workspace special:alttab
|
||||
windowrule = match:class alttab, border_size 0
|
||||
```
|
||||
|
||||
2. create file `touch $XDG_CONFIG_HOME/hypr/scripts/alttab/alttab.sh && chmod +x $XDG_CONFIG_HOME/hypr/scripts/alttab/alttab.sh` and add:
|
||||
|
||||
```bash {filename="alttab.sh"}
|
||||
#!/usr/bin/env bash
|
||||
hyprctl -q dispatch submap alttab
|
||||
start=$1
|
||||
address=$(hyprctl -j clients | jq -r 'sort_by(.focusHistoryID) | .[] | select(.workspace.id >= 0) | "\(.address)\t\(.title)"' |
|
||||
fzf --color prompt:green,pointer:green,current-bg:-1,current-fg:green,gutter:-1,border:bright-black,current-hl:red,hl:red \
|
||||
--cycle \
|
||||
--sync \
|
||||
--bind tab:down,shift-tab:up,start:$start,double-click:ignore \
|
||||
--wrap \
|
||||
--delimiter=$'\t' \
|
||||
--with-nth=2 \
|
||||
--preview "$XDG_CONFIG_HOME/hypr/scripts/alttab/preview.sh {}" \
|
||||
--preview-window=down:80% \
|
||||
--layout=reverse |
|
||||
awk -F"\t" '{print $1}')
|
||||
|
||||
if [ -n "$address" ] ; then
|
||||
echo "$address" > $XDG_RUNTIME_DIR/hypr/alttab/address
|
||||
fi
|
||||
|
||||
hyprctl -q dispatch submap reset
|
||||
```
|
||||
|
||||
I chose to exclude windows that are in special workspaces but it can be modified by removing `select(.workspace.id >= 0)`
|
||||
|
||||
3. create file `touch $XDG_CONFIG_HOME/hypr/scripts/alttab/preview.sh && chmod +x $XDG_CONFIG_HOME/hypr/scripts/alttab/preview.sh` and add:
|
||||
|
||||
```bash {filename="preview.sh"}
|
||||
#!/usr/bin/env bash
|
||||
line="$1"
|
||||
|
||||
IFS=$'\t' read -r addr _ <<< "$line"
|
||||
dim=${FZF_PREVIEW_COLUMNS}x${FZF_PREVIEW_LINES}
|
||||
|
||||
grim -t png -l 0 -w "$addr" $XDG_RUNTIME_DIR/hypr/alttab/preview.png
|
||||
chafa --animate false --dither=none -s "$dim" "$XDG_RUNTIME_DIR/hypr/alttab/preview.png"
|
||||
```
|
||||
|
||||
4. create file `touch $XDG_CONFIG_HOME/hypr/scripts/alttab/disable.sh && chmod +x $XDG_CONFIG_HOME/hypr/scripts/alttab/disable.sh` and add:
|
||||
|
||||
```bash {filename="disable.sh"}
|
||||
#!/usr/bin/env bash
|
||||
hyprctl -q keyword animations:enabled true
|
||||
|
||||
hyprctl -q --batch "keyword unbind ALT, TAB ; keyword unbind ALT SHIFT, TAB ; keyword bind ALT, TAB, exec, $HOME/.config/hypr/scripts/alttab/enable.sh 'down' ; keyword bind ALT SHIFT, TAB, exec, $HOME/.config/hypr/scripts/alttab/enable.sh 'up'"
|
||||
```
|
||||
|
||||
5. create file `touch $XDG_CONFIG_HOME/hypr/scripts/alttab/enable.sh && chmod +x $XDG_CONFIG_HOME/hypr/scripts/alttab/enable.sh` and add:
|
||||
```bash {filename="enable.sh"}
|
||||
#!/usr/bin/env bash
|
||||
mkdir -p $XDG_RUNTIME_DIR/hypr/alttab
|
||||
hyprctl -q --batch "keyword animations:enabled false; keyword unbind ALT, TAB ; keyword unbind ALT SHIFT, TAB"
|
||||
footclient -a alttab $HOME/.config/hypr/scripts/alttab/alttab.sh $1
|
||||
hyprctl --batch -q "dispatch focuswindow address:$(cat $XDG_RUNTIME_DIR/hypr/alttab/address) ; dispatch alterzorder top"
|
||||
```
|
||||
|
||||
## Config versioning
|
||||
|
||||
Some updates add breaking changes, which can be anticipated by looking at the git
|
||||
development branch.
|
||||
|
||||
Since Hyprland 0.53, we export a variable for each major version, that looks like this:
|
||||
```
|
||||
$HYPRLAND_V_0_XX
|
||||
```
|
||||
|
||||
You can make your configs conditional, e.g.:
|
||||
|
||||
```
|
||||
# hyprlang if HYPRLAND_V_0_53
|
||||
|
||||
someValue = 0.53
|
||||
|
||||
# hyprlang endif
|
||||
|
||||
# hyprlang if !HYPRLAND_V_0_53
|
||||
|
||||
someValue = 0.52
|
||||
|
||||
# hyprlang endif
|
||||
```
|
||||
|
||||
The -git branch exports the variable for the next major release.
|
||||
|
||||
All future releases will export all _past_ variables as well, e.g. 0.54 will also export 0.53.
|
||||
@@ -0,0 +1,315 @@
|
||||
---
|
||||
weight: 15
|
||||
title: Using hyprctl
|
||||
---
|
||||
|
||||
`hyprctl` is a utility for controlling some parts of the compositor from a CLI
|
||||
or a script. It should automatically be installed along with Hyprland.
|
||||
|
||||
> [!WARNING]
|
||||
> _hyprctl_ calls will be dispatched by the compositor _synchronously_, meaning
|
||||
> any spam of the utility will cause slowdowns. It's recommended to use `--batch`
|
||||
> for many control calls, and limiting the amount of info calls.
|
||||
>
|
||||
> For live event handling, see the [socket2](../../IPC/).
|
||||
|
||||
## Commands
|
||||
|
||||
### dispatch
|
||||
|
||||
Issue a `dispatch` to call a keybind dispatcher with an argument.
|
||||
|
||||
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 `exec` programs, pass `--` as an option. This will disable any subsequent
|
||||
parsing of options by _hyprctl_.
|
||||
|
||||
Examples:
|
||||
|
||||
```sh
|
||||
hyprctl dispatch exec kitty
|
||||
|
||||
hyprctl dispatch -- exec kitty --single-instance
|
||||
|
||||
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
|
||||
|
||||
hyprctl keyword monitor DP-3,1920x1080@144,0x0,1
|
||||
```
|
||||
|
||||
Returns: `ok` on success, an error message on fail.
|
||||
|
||||
### reload
|
||||
|
||||
Issue a `reload` to force reload the config.
|
||||
|
||||
### kill
|
||||
|
||||
Issue a `kill` to get into a kill mode, where you can kill an app by clicking on
|
||||
it. You can exit it with ESCAPE.
|
||||
|
||||
Kind of like xkill.
|
||||
|
||||
### setcursor
|
||||
|
||||
Sets the cursor theme and reloads the cursor manager. Will set the theme for
|
||||
everything except GTK, because GTK.
|
||||
|
||||
Please note that since 0.37.0, this only accepts hyprcursor themes. For legacy xcursor themes,
|
||||
use the `XCURSOR_THEME` and `XCURSOR_SIZE` env vars.
|
||||
|
||||
params: theme and size
|
||||
|
||||
e.g.:
|
||||
|
||||
```sh
|
||||
hyprctl setcursor Bibata-Modern-Classic 24
|
||||
```
|
||||
|
||||
### output
|
||||
|
||||
Allows you to add and remove fake outputs to your preferred backend.
|
||||
|
||||
Usage:
|
||||
|
||||
```sh
|
||||
hyprctl output create [backend] (name)
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
```sh
|
||||
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 specified, the default naming scheme will be
|
||||
used (`HEADLESS-2`, `WL-1`, etc.)
|
||||
|
||||
> [!NOTE]
|
||||
> `create` and `remove` can also be `add` or `destroy`, respectively.
|
||||
|
||||
Available backends:
|
||||
|
||||
- `wayland`: Creates an output as a Wayland window. This will only work if
|
||||
you're already running Hyprland with the Wayland backend.
|
||||
- `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":
|
||||
|
||||
```sh
|
||||
hyprctl output create headless test
|
||||
```
|
||||
|
||||
And to remove it:
|
||||
|
||||
```sh
|
||||
hyprctl output remove test
|
||||
```
|
||||
|
||||
### switchxkblayout
|
||||
|
||||
Sets the xkb layout index for a keyboard.
|
||||
|
||||
For example, if you set:
|
||||
|
||||
```ini
|
||||
device {
|
||||
name = my-epic-keyboard-v1
|
||||
kb_layout = us,pl,de
|
||||
}
|
||||
```
|
||||
|
||||
You can use this command to switch between them.
|
||||
|
||||
```sh
|
||||
hyprctl switchxkblayout [DEVICE] [CMD]
|
||||
```
|
||||
|
||||
where `CMD` is either `next` for next, `prev` for previous, or `ID` for a
|
||||
specific one (in the above case, `us`: 0, `pl`: 1, `de`: 2). You can find the
|
||||
`DEVICE` using `hyprctl devices` command.
|
||||
|
||||
`DEVICE` can also be `current` or `all`, self-explanatory. Current is the `main` keyboard from `devices`.
|
||||
|
||||
Example command for a typical keyboard:
|
||||
|
||||
```sh
|
||||
hyprctl switchxkblayout at-translated-set-2-keyboard next
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> 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
|
||||
> parameters have to match. Alternatively, a single parameter can be specified for
|
||||
> it to apply to all three.
|
||||
>
|
||||
> ```ini
|
||||
> input {
|
||||
> kb_layout = pl,us,ru
|
||||
> kb_variant = dvorak,,
|
||||
> kb_options = caps:ctrl_modifier
|
||||
> }
|
||||
> ```
|
||||
|
||||
### seterror
|
||||
|
||||
Sets the hyprctl error string. Will reset when Hyprland's config is reloaded.
|
||||
|
||||
```sh
|
||||
hyprctl seterror 'rgba(66ee66ff)' hello world this is my problem
|
||||
```
|
||||
|
||||
To disable:
|
||||
|
||||
```sh
|
||||
hyprctl seterror disable
|
||||
```
|
||||
|
||||
### getprop
|
||||
|
||||
Gets a property value of a window.
|
||||
|
||||
```sh
|
||||
hyprctl getprop [window] [property]
|
||||
```
|
||||
|
||||
Where `window` is as described [here](../Dispatchers#parameter-explanation), and `property` is any which can be set with [setprop](../Dispatchers/#setprop).
|
||||
|
||||
#### Notes
|
||||
- If `animationstyle` is unset, `(unset)` is returned.
|
||||
- `min_size` defaults to `20 20`.
|
||||
- `max_size` defaults to `inf inf` or `[null,null]` in JSON.
|
||||
|
||||
### notify
|
||||
|
||||
Sends a notification using the built-in Hyprland notification system.
|
||||
|
||||
```sh
|
||||
hyprctl notify [ICON] [TIME_MS] [COLOR] [MESSAGE]
|
||||
```
|
||||
|
||||
For example:
|
||||
|
||||
```sh
|
||||
hyprctl notify -1 10000 "rgb(ff1ea3)" "Hello everyone!"
|
||||
```
|
||||
|
||||
Icon of `-1` means "No icon"
|
||||
|
||||
Color of `0` means "Default color for icon"
|
||||
|
||||
Icon list:
|
||||
|
||||
```sh
|
||||
WARNING = 0
|
||||
INFO = 1
|
||||
HINT = 2
|
||||
ERROR = 3
|
||||
CONFUSED = 4
|
||||
OK = 5
|
||||
```
|
||||
|
||||
Optionally, you can specify a font size of the notification like so:
|
||||
|
||||
```sh
|
||||
hyprctl notify -1 10000 "rgb(ff0000)" "fontsize:35 This text is big"
|
||||
```
|
||||
|
||||
The default font-size is 13.
|
||||
|
||||
### dismissnotify
|
||||
|
||||
Dismisses all or up to AMOUNT notifications.
|
||||
|
||||
```sh
|
||||
hyprctl dismissnotify # dismiss all notifications
|
||||
hyprctl dismissnotify 2 # dismiss the oldest 2 notifications
|
||||
hyprctl dismissnotify -1 # dismiss all notifications (same as no arguments)
|
||||
```
|
||||
|
||||
## Info
|
||||
|
||||
```plain
|
||||
version - prints the Hyprland version along with flags, commit and branch of build.
|
||||
monitors - lists active outputs with their properties, 'monitors all' lists active and inactive outputs
|
||||
workspaces - lists all workspaces with their properties
|
||||
activeworkspace - gets the active workspace and its properties
|
||||
workspacerules - gets the list of defined workspace rules
|
||||
clients - lists all windows with their properties
|
||||
devices - lists all connected keyboards and mice
|
||||
decorations [window] - lists all decorations and their info
|
||||
binds - lists all registered binds
|
||||
activewindow - gets the active window name and its properties
|
||||
layers - lists all the layers
|
||||
splash - prints the current random splash
|
||||
getoption [option] - gets the config option status (values)
|
||||
cursorpos - gets the current cursor position in global layout coordinates
|
||||
animations - gets the currently configured info about animations and beziers
|
||||
instances - lists all running instances of Hyprland with their info
|
||||
layouts - lists all layouts available (including from plugins)
|
||||
configerrors - lists all current config parsing errors
|
||||
rollinglog - prints tail of the log. Also supports -f/--follow option
|
||||
locked - prints whether the current session is locked.
|
||||
descriptions - returns a JSON with all config options, their descriptions and types.
|
||||
submap - prints the current submap the keybinds are in
|
||||
```
|
||||
|
||||
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 sections 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
|
||||
|
||||
You can specify flags for the request like this:
|
||||
|
||||
```sh
|
||||
hyprctl -j monitors
|
||||
```
|
||||
|
||||
flag list:
|
||||
|
||||
```txt
|
||||
j -> output in JSON
|
||||
i -> select instance (id or index in hyprctl instances)
|
||||
```
|
||||
571
dot_config/hypr/hyprland.wiki/content/Configuring/Variables.md
Normal file
571
dot_config/hypr/hyprland.wiki/content/Configuring/Variables.md
Normal file
@@ -0,0 +1,571 @@
|
||||
---
|
||||
weight: 2
|
||||
title: Variables
|
||||
---
|
||||
|
||||
For basic syntax info, see [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 for Dwindle and Master layouts)
|
||||
|
||||
## Variable types
|
||||
|
||||
| type | description |
|
||||
| --- | --- |
|
||||
| int | integer |
|
||||
| bool | boolean, `true` or `false` (`yes` or `no`, `on` or `off`, `0` or `1`) - any numerical value that is not `0` or `1` will cause undefined behavior. |
|
||||
| float | floating point number |
|
||||
| color | color (see hint below for color info) |
|
||||
| vec2 | vector with 2 float values, separated by a space (e.g. `0 0` or `-10.9 99.1`) |
|
||||
| MOD | a string modmask (e.g. `SUPER` or `SUPERSHIFT` or `SUPER + SHIFT` or `SUPER and SHIFT` or `CTRL_SHIFT` or empty for none. You are allowed to put any separators you please except for a `,`) |
|
||||
| str | a string |
|
||||
| gradient | a gradient, in the form of `color color ... [angle]` where `color` is a color (see above) and angle is an angle in degrees, in the format of `123deg` e.g. `45deg` (e.g. `rgba(11ee11ff) rgba(1111eeff) 45deg`) Angle is optional and will default to `0deg` |
|
||||
| font_weight | an integer between 100 and 1000, or one of the following presets: `thin` `ultralight` `light` `semilight` `book` `normal` `medium` `semibold` `bold` `ultrabold` `heavy` `ultraheavy` |
|
||||
|
||||
> [!NOTE] **Colors**
|
||||
>
|
||||
> You have 3 options:
|
||||
> - rgba(), e.g. `rgba(b3ff1aee)`, or the decimal equivalent `rgba(179,255,26,0.933)`
|
||||
> (decimal rgba/rgb values should have no spaces between numbers)
|
||||
> - rgb(), e.g. `rgb(b3ff1a)`, or the decimal equivalent `rgb(179,255,26)`
|
||||
> - legacy, e.g. `0xeeb3ff1a` -> ARGB order
|
||||
|
||||
> [!NOTE] **Mod list**
|
||||
>
|
||||
> ```ini
|
||||
> SHIFT CAPS CTRL/CONTROL ALT MOD2 MOD3 SUPER/WIN/LOGO/MOD4 MOD5
|
||||
> ```
|
||||
|
||||
## Sections
|
||||
|
||||
### General
|
||||
|
||||
| name | description | type | default |
|
||||
|---|---|---|---|
|
||||
| border_size | size of the border around windows | int | 1 |
|
||||
| gaps_in | gaps between windows, also supports css style gaps (top, right, bottom, left -> 5,10,15,20) | int | 5 |
|
||||
| gaps_out | gaps between windows and monitor edges, also supports css style gaps (top, right, bottom, left -> 5,10,15,20) | int | 20 |
|
||||
| float_gaps | gaps between windows and monitor edges for floating windows, also supports css style gaps (top, right, bottom, left -> 5 10 15 20). -1 means default | int | 0 |
|
||||
| gaps_workspaces | gaps between workspaces. Stacks with gaps_out. | int | 0 |
|
||||
| col.inactive_border | border color for inactive windows | gradient | 0xff444444 |
|
||||
| col.active_border | border color for the active window | gradient | 0xffffffff |
|
||||
| col.nogroup_border | inactive border color for window that cannot be added to a group (see `denywindowfromgroup` dispatcher) | gradient | 0xffffaaff |
|
||||
| col.nogroup_border_active | active border color for window that cannot be added to a group | gradient | 0xffff00ff |
|
||||
| layout | which layout to use. [dwindle/master] | str | dwindle |
|
||||
| no_focus_fallback | if true, will not fall back to the next available window when moving focus in a direction where no window was found | bool | false |
|
||||
| resize_on_border | enables resizing windows by clicking and dragging on borders and gaps | bool | false |
|
||||
| extend_border_grab_area | extends the area around the border where you can click and drag on, only used when `general:resize_on_border` is on. | int | 15 |
|
||||
| hover_icon_on_border | show a cursor icon when hovering over borders, only used when `general:resize_on_border` is on. | bool | true |
|
||||
| allow_tearing | master switch for allowing tearing to occur. See [the Tearing page](../Tearing). | bool | false |
|
||||
| resize_corner | force floating windows to use a specific corner when being resized (1-4 going clockwise from top left, 0 to disable) | int | 0 |
|
||||
| modal_parent_blocking | whether parent windows of modals will be interactive | bool | true |
|
||||
| locale | overrides the system locale (e.g. en_US, es) | str | \[\[Empty\]\] |
|
||||
|
||||
#### Snap
|
||||
|
||||
_Subcategory `general:snap:`_
|
||||
|
||||
| name | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| enabled | enable snapping for floating windows | bool | false |
|
||||
| window_gap | minimum gap in pixels between windows before snapping | int | 10 |
|
||||
| monitor_gap | minimum gap in pixels between window and monitor edges before snapping | int | 10 |
|
||||
| border_overlap | if true, windows snap such that only one border's worth of space is between them | bool | false |
|
||||
| respect_gaps | if true, snapping will respect gaps between windows(set in general:gaps_in) | bool | false |
|
||||
|
||||
> [!IMPORTANT]
|
||||
> A subcategory is a nested category:
|
||||
>
|
||||
> ```ini
|
||||
> general {
|
||||
> # ...
|
||||
> # ...
|
||||
>
|
||||
> snap {
|
||||
> # ...
|
||||
> # ...
|
||||
> }
|
||||
> }
|
||||
> ```
|
||||
>
|
||||
> Doing `general:snap {` is **invalid**!
|
||||
|
||||
### Decoration
|
||||
|
||||
| name | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| rounding | rounded corners' radius (in layout px) | int | 0 |
|
||||
| rounding_power | adjusts the curve used for rounding corners, larger is smoother, 2.0 is a circle, 4.0 is a squircle, 1.0 is a triangular corner. [1.0 - 10.0] | float | 2.0 |
|
||||
| active_opacity | opacity of active windows. [0.0 - 1.0] | float | 1.0 |
|
||||
| inactive_opacity | opacity of inactive windows. [0.0 - 1.0] | float | 1.0 |
|
||||
| fullscreen_opacity | opacity of fullscreen windows. [0.0 - 1.0] | float | 1.0 |
|
||||
| dim_modal | enables dimming of parents of modal windows | bool | true |
|
||||
| dim_inactive | enables dimming of inactive windows | bool | false |
|
||||
| dim_strength | how much inactive windows should be dimmed [0.0 - 1.0] | float | 0.5 |
|
||||
| dim_special | how much to dim the rest of the screen by when a special workspace is open. [0.0 - 1.0] | float | 0.2 |
|
||||
| dim_around | how much the `dim_around` window rule should dim by. [0.0 - 1.0] | float | 0.4 |
|
||||
| screen_shader | a path to a custom shader to be applied at the end of rendering. See `examples/screenShader.frag` for an example. | str | \[\[Empty\]\] |
|
||||
| border_part_of_window | whether the window border should be a part of the window | bool | true |
|
||||
|
||||
#### Blur
|
||||
|
||||
_Subcategory `decoration:blur:`_
|
||||
|
||||
| name | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| enabled | enable kawase window background blur | bool | true |
|
||||
| size | blur size (distance) | int | 8 |
|
||||
| passes | the amount of passes to perform | int | 1 |
|
||||
| ignore_opacity | make the blur layer ignore the opacity of the window | bool | true |
|
||||
| new_optimizations | whether to enable further optimizations to the blur. Recommended to leave on, as it will massively improve performance. | bool | true |
|
||||
| xray | if enabled, floating windows will ignore tiled windows in their blur. Only available if new_optimizations is true. Will reduce overhead on floating blur significantly. | bool | false |
|
||||
| noise | how much noise to apply. [0.0 - 1.0] | float | 0.0117 |
|
||||
| contrast | contrast modulation for blur. [0.0 - 2.0] | float | 0.8916 |
|
||||
| brightness | brightness modulation for blur. [0.0 - 2.0] | float | 0.8172 |
|
||||
| vibrancy | Increase saturation of blurred colors. [0.0 - 1.0] | float | 0.1696 |
|
||||
| vibrancy_darkness | How strong the effect of `vibrancy` is on dark areas . [0.0 - 1.0] | float | 0.0 |
|
||||
| special | whether to blur behind the special workspace (note: expensive) | bool | false |
|
||||
| popups | whether to blur popups (e.g. right-click menus) | bool | false |
|
||||
| popups_ignorealpha | works like ignore_alpha in layer rules. If pixel opacity is below set value, will not blur. [0.0 - 1.0] | float | 0.2 |
|
||||
| input_methods | whether to blur input methods (e.g. fcitx5) | bool | false |
|
||||
| input_methods_ignorealpha | works like ignore_alpha in layer rules. If pixel opacity is below set value, will not blur. [0.0 - 1.0] | float | 0.2 |
|
||||
|
||||
> [!NOTE]
|
||||
> `blur:size` and `blur:passes` have to be at least 1.
|
||||
>
|
||||
> Increasing `blur:passes` is necessary to prevent blur looking wrong on higher
|
||||
> `blur:size` values, but remember that higher `blur:passes` will require more
|
||||
> strain on the GPU.
|
||||
|
||||
#### Shadow
|
||||
|
||||
_Subcategory `decoration:shadow:`_
|
||||
|
||||
| name | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| enabled | enable drop shadows on windows | bool | true |
|
||||
| range | Shadow range ("size") in layout px | int | 4 |
|
||||
| render_power | in what power to render the falloff (more power, the faster the falloff) [1 - 4] | int | 3 |
|
||||
| sharp | if enabled, will make the shadows sharp, akin to an infinite render power | bool | false |
|
||||
| ignore_window | if true, the shadow will not be rendered behind the window itself, only around it. | bool | true |
|
||||
| color | shadow's color. Alpha dictates shadow's opacity. | color | 0xee1a1a1a |
|
||||
| color_inactive | inactive shadow color. (if not set, will fall back to color) | color | unset |
|
||||
| offset | shadow's rendering offset. | vec2 | [0, 0] |
|
||||
| scale | shadow's scale. [0.0 - 1.0] | float | 1.0 |
|
||||
|
||||
### Animations
|
||||
|
||||
| name | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| enabled | enable animations | bool | true |
|
||||
| workspace_wraparound | enable workspace wraparound, causing directional workspace animations to animate as if the first and last workspaces were adjacent | bool | false |
|
||||
|
||||
> [!NOTE]
|
||||
> _[More about Animations](../Animations)._
|
||||
|
||||
### Input
|
||||
|
||||
| name | description | type | default |
|
||||
|---|---|---|---|
|
||||
| kb_model | Appropriate XKB keymap parameter. See the note below. | str | \[\[Empty\]\] |
|
||||
| kb_layout | Appropriate XKB keymap parameter | str | us |
|
||||
| kb_variant | Appropriate XKB keymap parameter | str | \[\[Empty\]\] |
|
||||
| kb_options | Appropriate XKB keymap parameter | str | \[\[Empty\]\] |
|
||||
| kb_rules | Appropriate XKB keymap parameter | str | \[\[Empty\]\] |
|
||||
| kb_file | If you prefer, you can use a path to your custom .xkb file. | str | \[\[Empty\]\] |
|
||||
| numlock_by_default | Engage numlock by default. | bool | false |
|
||||
| resolve_binds_by_sym | Determines how keybinds act when multiple layouts are used. If false, keybinds will always act as if the first specified layout is active. If true, keybinds specified by symbols are activated when you type the respective symbol with the current layout. | bool | false |
|
||||
| repeat_rate | The repeat rate for held-down keys, in repeats per second. | int | 25 |
|
||||
| repeat_delay | Delay before a held-down key is repeated, in milliseconds. | int | 600 |
|
||||
| sensitivity | Sets the mouse input sensitivity. Value is clamped to the range -1.0 to 1.0. [libinput#pointer-acceleration](https://wayland.freedesktop.org/libinput/doc/latest/pointer-acceleration.html#pointer-acceleration) | float | 0.0 |
|
||||
| accel_profile | Sets the cursor acceleration profile. Can be one of `adaptive`, `flat`. Can also be `custom`, see [below](#custom-accel-profiles). Leave empty to use `libinput`'s default mode for your input device. [libinput#pointer-acceleration](https://wayland.freedesktop.org/libinput/doc/latest/pointer-acceleration.html#pointer-acceleration) [adaptive/flat/custom]| str | \[\[Empty\]\] |
|
||||
| force_no_accel | Force no cursor acceleration. This bypasses most of your pointer settings to get as raw of a signal as possible. **Enabling this is not recommended due to potential cursor desynchronization.** | bool | false |
|
||||
| rotation | Sets the rotation of a device in degrees clockwise off the logical neutral position. Value is clamped to the range 0 to 359. | int | 0 |
|
||||
| left_handed | Switches RMB and LMB | bool | false |
|
||||
| scroll_points | Sets the scroll acceleration profile, when `accel_profile` is set to `custom`. Has to be in the form `<step> <points>`. Leave empty to have a flat scroll curve. | str | \[\[Empty\]\] |
|
||||
| scroll_method | Sets the scroll method. Can be one of `2fg` (2 fingers), `edge`, `on_button_down`, `no_scroll`. [libinput#scrolling](https://wayland.freedesktop.org/libinput/doc/latest/scrolling.html) [2fg/edge/on_button_down/no_scroll] | str | \[\[Empty\]\] |
|
||||
| scroll_button | Sets the scroll button. Has to be an int, cannot be a string. Check `wev` if you have any doubts regarding the ID. 0 means default. | int | 0 |
|
||||
| scroll_button_lock | If the scroll button lock is enabled, the button does not need to be held down. Pressing and releasing the button toggles the button lock, which logically holds the button down or releases it. While the button is logically held down, motion events are converted to scroll events. | bool | false |
|
||||
| scroll_factor | Multiplier added to scroll movement for external mice. Note that there is a separate setting for [touchpad scroll_factor](#touchpad). | float | 1.0 |
|
||||
| natural_scroll | Inverts scrolling direction. When enabled, scrolling moves content directly, rather than manipulating a scrollbar. | bool | false |
|
||||
| follow_mouse | Specify if and how cursor movement should affect window focus. See the note below. [0/1/2/3] | int | 1 |
|
||||
| follow_mouse_threshold | The smallest distance in logical pixels the mouse needs to travel for the window under it to get focused. Works only with follow_mouse = 1. | float | 0.0 |
|
||||
| focus_on_close | Controls the window focus behavior when a window is closed. When set to 0, focus will shift to the next window candidate. When set to 1, focus will shift to the window under the cursor. [0/1] | int | 0 |
|
||||
| mouse_refocus | If disabled, mouse focus won't switch to the hovered window unless the mouse crosses a window boundary when `follow_mouse=1`. | bool | true |
|
||||
| float_switch_override_focus | If enabled (1 or 2), focus will change to the window under the cursor when changing from tiled-to-floating and vice versa. If 2, focus will also follow mouse on float-to-float switches. | int | 1 |
|
||||
| special_fallthrough | if enabled, having only floating windows in the special workspace will not block focusing windows in the regular workspace. | bool | false |
|
||||
| off_window_axis_events | Handles axis events around (gaps/border for tiled, dragarea/border for floated) a focused window. `0` ignores axis events `1` sends out-of-bound coordinates `2` fakes pointer coordinates to the closest point inside the window `3` warps the cursor to the closest point inside the window | int | 1 |
|
||||
| emulate_discrete_scroll | Emulates discrete scrolling from high resolution scrolling events. `0` disables it, `1` enables handling of non-standard events only, and `2` force enables all scroll wheel events to be handled | int | 1 |
|
||||
|
||||
> [!NOTE] **XKB Settings**
|
||||
>
|
||||
> You can find a list of models, layouts, variants and options in
|
||||
> [`/usr/share/X11/xkb/rules/base.lst`](file:///usr/share/X11/xkb/rules/base.lst).
|
||||
> Alternatively, you can use the `localectl` command to discover what is available
|
||||
> on your system.
|
||||
>
|
||||
> For switchable keyboard configurations, take a look at
|
||||
> [the uncommon tips & tricks page entry](../Uncommon-tips--tricks/#switchable-keyboard-layouts).
|
||||
|
||||
> [!NOTE] **Follow Mouse Cursor**
|
||||
> - 0 - Cursor movement will not change focus.
|
||||
> - 1 - Cursor movement will always change focus to the window under the cursor.
|
||||
> - 2 - Cursor focus will be detached from keyboard focus. Clicking on a window
|
||||
> will move keyboard focus to that window.
|
||||
> - 3 - Cursor focus will be completely separate from keyboard focus. Clicking on
|
||||
> a window will not change keyboard focus.
|
||||
|
||||
> [!NOTE] **Custom Accel Profiles**
|
||||
>
|
||||
> #### `accel_profile`
|
||||
>
|
||||
> `custom <step> <points...>`
|
||||
>
|
||||
> Example: `custom 200 0.0 0.5`
|
||||
>
|
||||
> #### `scroll_points`
|
||||
>
|
||||
> NOTE: Only works when `accel_profile` is set to `custom`.
|
||||
>
|
||||
> `<step> <points...>`
|
||||
>
|
||||
> Example: `0.2 0.0 0.5 1 1.2 1.5`
|
||||
>
|
||||
> To mimic the Windows acceleration curves, take a look at
|
||||
> [this script](https://gist.github.com/fufexan/de2099bc3086f3a6c83d61fc1fcc06c9).
|
||||
>
|
||||
> See
|
||||
> [the libinput doc](https://wayland.freedesktop.org/libinput/doc/latest/pointer-acceleration.html)
|
||||
> for more insights on how it works.
|
||||
|
||||
#### Touchpad
|
||||
|
||||
_Subcategory `input:touchpad:`_
|
||||
|
||||
| name | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| disable_while_typing | Disable the touchpad while typing. | bool | true |
|
||||
| natural_scroll | Inverts scrolling direction. When enabled, scrolling moves content directly, rather than manipulating a scrollbar. | bool | false |
|
||||
| scroll_factor | Multiplier applied to the amount of scroll movement. | float | 1.0 |
|
||||
| middle_button_emulation | Sending LMB and RMB simultaneously will be interpreted as a middle click. This disables any touchpad area that would normally send a middle click based on location. [libinput#middle-button-emulation](https://wayland.freedesktop.org/libinput/doc/latest/middle-button-emulation.html) | bool | false |
|
||||
| tap_button_map | Sets the tap button mapping for touchpad button emulation. Can be one of `lrm` (default) or `lmr` (Left, Middle, Right Buttons). [lrm/lmr] | str | \[\[Empty\]\] |
|
||||
| clickfinger_behavior | Button presses with 1, 2, or 3 fingers will be mapped to LMB, RMB, and MMB respectively. This disables interpretation of clicks based on location on the touchpad. [libinput#clickfinger-behavior](https://wayland.freedesktop.org/libinput/doc/latest/clickpad-softbuttons.html#clickfinger-behavior) | bool | false |
|
||||
| tap-to-click | Tapping on the touchpad with 1, 2, or 3 fingers will send LMB, RMB, and MMB respectively. | bool | true |
|
||||
| drag_lock | When enabled, lifting the finger off while dragging will not drop the dragged item. 0 -> disabled, 1 -> enabled with timeout, 2 -> enabled sticky. [libinput#tap-and-drag](https://wayland.freedesktop.org/libinput/doc/latest/tapping.html#tap-and-drag) | int | 0 |
|
||||
| tap-and-drag | Sets the tap and drag mode for the touchpad | bool | true |
|
||||
| flip_x | inverts the horizontal movement of the touchpad | bool | false |
|
||||
| flip_y | inverts the vertical movement of the touchpad | bool | false |
|
||||
| drag_3fg | enables three finger drag, 0 -> disabled, 1 -> 3 fingers, 2 -> 4 fingers [libinput#drag-3fg](https://wayland.freedesktop.org/libinput/doc/latest/drag-3fg.html) | int | 0 |
|
||||
|
||||
#### Touchdevice
|
||||
|
||||
_Subcategory `input:touchdevice:`_
|
||||
|
||||
| name | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| transform | Transform the input from touchdevices. The possible transformations are the same as [those of the monitors](../Monitors/#rotating). `-1` means it's unset. | int | -1 |
|
||||
| output | The monitor to bind touch devices. The default is auto-detection. To stop auto-detection, use an empty string or the "\[\[Empty\]\]" value. | string | \[\[Auto\]\] |
|
||||
| enabled | Whether input is enabled for touch devices. | bool | true |
|
||||
|
||||
#### Virtualkeyboard
|
||||
|
||||
_Subcategory `input:virtualkeyboard:`_
|
||||
|
||||
| name | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| share_states | Unify key down states and modifier states with other keyboards. 0 -> no, 1 -> yes, 2 -> yes unless IME client | int | 2 |
|
||||
| release_pressed_on_close | Release all pressed keys by virtual keyboard on close. | bool | false |
|
||||
|
||||
#### Tablet
|
||||
|
||||
_Subcategory `input:tablet:`_
|
||||
|
||||
| name | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| transform | transform the input from tablets. The possible transformations are the same as [those of the monitors](../Monitors/#rotating). `-1` means it's unset. | int | -1 |
|
||||
| output | the monitor to bind tablets. Can be `current` or a monitor name. Leave empty to map across all monitors. | string | \[\[Empty\]\] |
|
||||
| region_position | position of the mapped region in monitor layout relative to the top left corner of the bound monitor or all monitors. | vec2 | [0, 0] |
|
||||
| absolute_region_position | whether to treat the `region_position` as an absolute position in monitor layout. Only applies when `output` is empty. | bool | false |
|
||||
| region_size | size of the mapped region. When this variable is set, tablet input will be mapped to the region. [0, 0] or invalid size means unset. | vec2 | [0, 0] |
|
||||
| relative_input | whether the input should be relative | bool | false |
|
||||
| left_handed | if enabled, the tablet will be rotated 180 degrees | bool | false |
|
||||
| active_area_size | size of tablet's active area in mm | vec2 | [0, 0] |
|
||||
| active_area_position | position of the active area in mm | vec2 | [0, 0] |
|
||||
|
||||
### Per-device input config
|
||||
|
||||
Described [here](../Keywords#per-device-input-configs).
|
||||
|
||||
### Gestures
|
||||
|
||||
_Subcategory `gestures:`_
|
||||
|
||||
| name | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| workspace_swipe_distance | in px, the distance of the touchpad gesture | int | 300 |
|
||||
| workspace_swipe_touch | enable workspace swiping from the edge of a touchscreen | bool | false |
|
||||
| workspace_swipe_invert | invert the direction (touchpad only) | bool | true |
|
||||
| workspace_swipe_touch_invert | invert the direction (touchscreen only) | bool | false |
|
||||
| workspace_swipe_min_speed_to_force | minimum speed in px per timepoint to force the change ignoring `cancel_ratio`. Setting to `0` will disable this mechanic. | int | 30 |
|
||||
| workspace_swipe_cancel_ratio | how much the swipe has to proceed in order to commence it. (0.7 -> if > 0.7 * distance, switch, if less, revert) [0.0 - 1.0] | float | 0.5 |
|
||||
| workspace_swipe_create_new | whether a swipe right on the last workspace should create a new one. | bool | true |
|
||||
| workspace_swipe_direction_lock | if enabled, switching direction will be locked when you swipe past the `direction_lock_threshold` (touchpad only). | bool | true |
|
||||
| workspace_swipe_direction_lock_threshold | in px, the distance to swipe before direction lock activates (touchpad only). | int | 10 |
|
||||
| workspace_swipe_forever | if enabled, swiping will not clamp at the neighboring workspaces but continue to the further ones. | bool | false |
|
||||
| workspace_swipe_use_r | if enabled, swiping will use the `r` prefix instead of the `m` prefix for finding workspaces. | bool | false |
|
||||
| close_max_timeout | the timeout for a window to close when using a 1:1 gesture, in ms | int | 1000 |
|
||||
|
||||
> [!NOTE]
|
||||
> `workspace_swipe`, `workspace_swipe_fingers` and `workspace_swipe_min_fingers` were removed in favor of the new gestures system.
|
||||
>
|
||||
> You can add this gesture config to replicate the swiping functionality with 3 fingers. See the [gestures](../Gestures) page for more info.
|
||||
>
|
||||
> ```ini
|
||||
> gesture = 3, horizontal, workspace
|
||||
> ```
|
||||
|
||||
### Group
|
||||
|
||||
_Subcategory `group:`_
|
||||
|
||||
| name | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| auto_group | whether new windows will be automatically grouped into the focused unlocked group. Note: if you want to disable auto_group only for specific windows, use [the "group barred" window rule](../Window-Rules/#group-window-rule-options) instead. | bool | true |
|
||||
| insert_after_current | whether new windows in a group spawn after current or at group tail | bool | true |
|
||||
| focus_removed_window | whether Hyprland should focus on the window that has just been moved out of the group | bool | true |
|
||||
| drag_into_group | whether dragging a window into a unlocked group will merge them. Options: 0 (disabled), 1 (enabled), 2 (only when dragging into the groupbar) | int | 1 |
|
||||
| merge_groups_on_drag | whether window groups can be dragged into other groups | bool | true |
|
||||
| merge_groups_on_groupbar | whether one group will be merged with another when dragged into its groupbar | bool | true |
|
||||
| merge_floated_into_tiled_on_groupbar | whether dragging a floating window into a tiled window groupbar will merge them | bool | false |
|
||||
| group_on_movetoworkspace | whether using movetoworkspace[silent] will merge the window into the workspace's solitary unlocked group | bool | false |
|
||||
| col.border_active | active group border color | gradient | 0x66ffff00 |
|
||||
| col.border_inactive | inactive (out of focus) group border color | gradient | 0x66777700 |
|
||||
| col.border_locked_active | active locked group border color | gradient | 0x66ff5500 |
|
||||
| col.border_locked_inactive | inactive locked group border color | gradient | 0x66775500 |
|
||||
|
||||
#### Groupbar
|
||||
|
||||
_Subcategory `group:groupbar:`_
|
||||
|
||||
| name | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| enabled | enables groupbars | bool | true |
|
||||
| font_family | font used to display groupbar titles, use `misc:font_family` if not specified | string | [\[Empty]] |
|
||||
| font_size | font size of groupbar title | int | 8 |
|
||||
| font_weight_active | font weight of active groupbar title | font_weight | normal |
|
||||
| font_weight_inactive | font weight of inactive groupbar title | font_weight | normal |
|
||||
| gradients | enables gradients | bool | false |
|
||||
| height | height of the groupbar | int | 14 |
|
||||
| indicator_gap | height of gap between groupbar indicator and title | int | 0 |
|
||||
| indicator_height | height of the groupbar indicator | int | 3 |
|
||||
| stacked | render the groupbar as a vertical stack | bool | false |
|
||||
| priority | sets the decoration priority for groupbars | int | 3 |
|
||||
| render_titles | whether to render titles in the group bar decoration | bool | true |
|
||||
| text_offset | adjust vertical position for titles | int | 0 |
|
||||
| scrolling | whether scrolling in the groupbar changes group active window | bool | true |
|
||||
| rounding | how much to round the indicator | int | 1 |
|
||||
| rounding_power | adjusts the curve used for rounding groupbar corners, larger is smoother, 2.0 is a circle, 4.0 is a squircle, 1.0 is a triangular corner. [1.0 - 10.0] | float | 2.0 |
|
||||
| gradient_rounding | how much to round the gradients | int | 2 |
|
||||
| gradient_rounding_power | adjusts the curve used for rounding gradient corners, larger is smoother, 2.0 is a circle, 4.0 is a squircle, 1.0 is a triangular corner. [1.0 - 10.0] | float | 2.0 |
|
||||
| round_only_edges | round only the indicator edges of the entire groupbar | bool | true |
|
||||
| gradient_round_only_edges | round only the gradient edges of the entire groupbar | bool | true |
|
||||
| text_color | color for window titles in the groupbar | color | 0xffffffff |
|
||||
| text_color_inactive | color for inactive windows' titles in the groupbar (if unset, defaults to text_color) | color | unset |
|
||||
| text_color_locked_active | color for the active window's title in a locked group (if unset, defaults to text_color) | color | unset |
|
||||
| text_color_locked_inactive | color for inactive windows' titles in locked groups (if unset, defaults to text_color_inactive) | color | unset |
|
||||
| col.active | active group bar background color | gradient | 0x66ffff00 |
|
||||
| col.inactive | inactive (out of focus) group bar background color | gradient | 0x66777700 |
|
||||
| col.locked_active | active locked group bar background color | gradient | 0x66ff5500 |
|
||||
| col.locked_inactive | inactive locked group bar background color | gradient | 0x66775500 |
|
||||
| gaps_in | gap size between gradients | int | 2 |
|
||||
| gaps_out | gap size between gradients and window | int | 2 |
|
||||
| keep_upper_gap | add or remove upper gap | bool | true |
|
||||
| blur | applies blur to the groupbar indicators and gradients | bool | false |
|
||||
|
||||
### Misc
|
||||
|
||||
_Subcategory `misc:`_
|
||||
|
||||
| name | description | type | default |
|
||||
|---|---|---|---|
|
||||
| disable_hyprland_logo | disables the random Hyprland logo / anime girl background. :( | bool | false |
|
||||
| disable_splash_rendering | disables the Hyprland splash rendering. (requires a monitor reload to take effect) | bool | false |
|
||||
| disable_scale_notification | disables notification popup when a monitor fails to set a suitable scale | bool | false |
|
||||
| col.splash | Changes the color of the splash text (requires a monitor reload to take effect). | color | 0xffffffff |
|
||||
| font_family | Set the global default font to render the text including debug fps/notification, config error messages and etc., selected from system fonts. | string | Sans |
|
||||
| splash_font_family | Changes the font used to render the splash text, selected from system fonts (requires a monitor reload to take effect). | string | [\[Empty]] |
|
||||
| force_default_wallpaper | Enforce any of the 3 default wallpapers. Setting this to `0` or `1` disables the anime background. `-1` means "random". [-1/0/1/2] | int | -1 |
|
||||
| vfr | controls the VFR status of Hyprland. Heavily recommended to leave enabled to conserve resources. | bool | true |
|
||||
| vrr | controls the VRR (Adaptive Sync) of your monitors. 0 - off, 1 - on, 2 - fullscreen only, 3 - fullscreen with `video` or `game` content type [0/1/2/3] | int | 0 |
|
||||
| mouse_move_enables_dpms | If DPMS is set to off, wake up the monitors if the mouse moves. | bool | false |
|
||||
| key_press_enables_dpms | If DPMS is set to off, wake up the monitors if a key is pressed. | bool | false |
|
||||
| name_vk_after_proc | Name virtual keyboards after the processes that create them. E.g. /usr/bin/fcitx5 will have hl-virtual-keyboard-fcitx5. | bool | true |
|
||||
| always_follow_on_dnd | Will make mouse focus follow the mouse when drag and dropping. Recommended to leave it enabled, especially for people using focus follows mouse at 0. | bool | true |
|
||||
| layers_hog_keyboard_focus | If true, will make keyboard-interactive layers keep their focus on mouse move (e.g. wofi, bemenu) | bool | true |
|
||||
| animate_manual_resizes | If true, will animate manual window resizes/moves | bool | false |
|
||||
| animate_mouse_windowdragging | If true, will animate windows being dragged by mouse, note that this can cause weird behavior on some curves | bool | false |
|
||||
| disable_autoreload | If true, the config will not reload automatically on save, and instead needs to be reloaded with `hyprctl reload`. Might save on battery. | bool | false |
|
||||
| enable_swallow | Enable window swallowing | bool | false |
|
||||
| swallow_regex | The _class_ regex to be used for windows that should be swallowed (usually, a terminal). To know more about the list of regex which can be used [use this cheatsheet](https://github.com/ziishaned/learn-regex/blob/master/README.md). | str | \[\[Empty\]\] |
|
||||
| swallow_exception_regex | The _title_ regex to be used for windows that should _not_ be swallowed by the windows specified in swallow_regex (e.g. wev). The regex is matched against the parent (e.g. Kitty) window's title on the assumption that it changes to whatever process it's running. | str | \[\[Empty\]\] |
|
||||
| focus_on_activate | Whether Hyprland should focus an app that requests to be focused (an `activate` request) | bool | false |
|
||||
| mouse_move_focuses_monitor | Whether mouse moving into a different monitor should focus it | bool | true |
|
||||
| allow_session_lock_restore | if true, will allow you to restart a lockscreen app in case it crashes | bool | false |
|
||||
| session_lock_xray | if true, keep rendering workspaces below your lockscreen | bool | false |
|
||||
| background_color | change the background color. (requires enabled `disable_hyprland_logo`) | color | 0x111111 |
|
||||
| close_special_on_empty | close the special workspace if the last window is removed | bool | true |
|
||||
| on_focus_under_fullscreen | if there is a fullscreen or maximized window, decide whether a tiled window requested to focus should replace it, stay behind or disable the fullscreen/maximized state. 0 - ignore focus request (keep focus on fullscreen window), 1 - takes over, 2 - unfullscreen/unmaximize [0/1/2] | int | 2 |
|
||||
| exit_window_retains_fullscreen | if true, closing a fullscreen window makes the next focused window fullscreen | bool | false |
|
||||
| initial_workspace_tracking | if enabled, windows will open on the workspace they were invoked on. 0 - disabled, 1 - single-shot, 2 - persistent (all children too) | int | 1 |
|
||||
| middle_click_paste | whether to enable middle-click-paste (aka primary selection) | bool | true |
|
||||
| render_unfocused_fps | the maximum limit for render_unfocused windows' fps in the background (see also [Window-Rules](../Window-Rules/#dynamic-effects) - `render_unfocused`)| int | 15 |
|
||||
| disable_xdg_env_checks | disable the warning if XDG environment is externally managed | bool | false |
|
||||
| disable_hyprland_qtutils_check | disable the warning if hyprland-qtutils is not installed | bool | false |
|
||||
| lockdead_screen_delay | delay after which the "lockdead" screen will appear in case a lockscreen app fails to cover all the outputs (5 seconds max) | int | 1000 |
|
||||
| enable_anr_dialog | whether to enable the ANR (app not responding) dialog when your apps hang | bool | true |
|
||||
| anr_missed_pings | number of missed pings before showing the ANR dialog | int | 5 |
|
||||
| size_limits_tiled | whether to apply min_size and max_size rules to tiled windows | bool | false |
|
||||
| disable_watchdog_warning | whether to disable the warning about not using start-hyprland | bool | false |
|
||||
|
||||
### Binds
|
||||
|
||||
_Subcategory `binds:`_
|
||||
|
||||
| name | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| pass_mouse_when_bound | if disabled, will not pass the mouse events to apps / dragging windows around if a keybind has been triggered. | bool | false |
|
||||
| scroll_event_delay | in ms, how many ms to wait after a scroll event to allow passing another one for the binds. | int | 300 |
|
||||
| workspace_back_and_forth | If enabled, an attempt to switch to the currently focused workspace will instead switch to the previous workspace. Akin to i3's _auto_back_and_forth_. | bool | false |
|
||||
| hide_special_on_workspace_change | If enabled, changing the active workspace (including to itself) will hide the special workspace on the monitor where the newly active workspace resides. | bool | false |
|
||||
| allow_workspace_cycles | If enabled, workspaces don't forget their previous workspace, so cycles can be created by switching to the first workspace in a sequence, then endlessly going to the previous workspace. | bool | false |
|
||||
| workspace_center_on | Whether switching workspaces should center the cursor on the workspace (0) or on the last active window for that workspace (1) | int | 0 |
|
||||
| focus_preferred_method | sets the preferred focus finding method when using `focuswindow`/`movewindow`/etc with a direction. 0 - history (recent have priority), 1 - length (longer shared edges have priority) | int | 0 |
|
||||
| ignore_group_lock | If enabled, dispatchers like `moveintogroup`, `moveoutofgroup` and `movewindoworgroup` will ignore lock per group. | bool | false |
|
||||
| movefocus_cycles_fullscreen | If enabled, when on a fullscreen window, `movefocus` will cycle fullscreen, if not, it will move the focus in a direction. | bool | false |
|
||||
| movefocus_cycles_groupfirst | If enabled, when in a grouped window, movefocus will cycle windows in the groups first, then at each ends of tabs, it'll move on to other windows/groups | bool | false |
|
||||
| disable_keybind_grabbing | If enabled, apps that request keybinds to be disabled (e.g. VMs) will not be able to do so. | bool | false |
|
||||
| window_direction_monitor_fallback | If enabled, moving a window or focus over the edge of a monitor with a direction will move it to the next monitor in that direction. | bool | true |
|
||||
| allow_pin_fullscreen | If enabled, Allow fullscreen to pinned windows, and restore their pinned status afterwards | bool | false |
|
||||
| drag_threshold | Movement threshold in pixels for window dragging and c/g bind flags. 0 to disable and grab on mousedown. | int | 0 |
|
||||
|
||||
### XWayland
|
||||
|
||||
_Subcategory `xwayland:`_
|
||||
|
||||
| name | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| enabled | allow running applications using X11 | bool | true |
|
||||
| use_nearest_neighbor | uses the nearest neighbor filtering for xwayland apps, making them pixelated rather than blurry | bool | true |
|
||||
| force_zero_scaling | forces a scale of 1 on xwayland windows on scaled displays. | bool | false |
|
||||
| create_abstract_socket | Create the [abstract Unix domain socket](../XWayland/#abstract-unix-domain-socket) for XWayland connections. (XWayland restart is required for changes to take effect; Linux only) | bool | false |
|
||||
|
||||
### OpenGL
|
||||
|
||||
_Subcategory `opengl:`_
|
||||
|
||||
| name | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| nvidia_anti_flicker | reduces flickering on nvidia at the cost of possible frame drops on lower-end GPUs. On non-nvidia, this is ignored. | bool | true |
|
||||
|
||||
### Render
|
||||
|
||||
_Subcategory `render:`_
|
||||
|
||||
| name | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| direct_scanout | Enables direct scanout. Direct scanout attempts to reduce lag when there is only one fullscreen application on a screen (e.g. game). It is also recommended to set this to false if the fullscreen application shows graphical glitches. 0 - off, 1 - on, 2 - auto (on with content type 'game') | int | 0 |
|
||||
| expand_undersized_textures | Whether to expand undersized textures along the edge, or rather stretch the entire texture. | bool | true |
|
||||
| xp_mode | Disables back buffer and bottom layer rendering. | bool | false |
|
||||
| ctm_animation | Whether to enable a fade animation for CTM changes (hyprsunset). 2 means "auto" which disables them on Nvidia. | int | 2 |
|
||||
| cm_fs_passthrough | Passthrough color settings for fullscreen apps when possible. 0 - off, 1 - always, 2 - hdr only | int | 2 |
|
||||
| cm_enabled | Whether the color management pipeline should be enabled or not (requires a restart of Hyprland to fully take effect) | bool | true |
|
||||
| send_content_type | Report content type to allow monitor profile autoswitch (may result in a black screen during the switch) | bool | true |
|
||||
| cm_auto_hdr | Auto-switch to HDR in fullscreen when needed. 0 - off, 1 - switch to `cm, hdr`, 2 - switch to `cm, hdredid` | int | 1 |
|
||||
| new_render_scheduling | Automatically uses triple buffering when needed, improves FPS on underpowered devices. | bool | false |
|
||||
| non_shader_cm | Enable CM without shader. 0 - disable, 1 - whenever possible, 2 - DS and passthrough only, 3 - disable and ignore CM issues | int | 3 |
|
||||
| cm_sdr_eotf | Default transfer function for displaying SDR apps. 0 - Default (currently gamma22), 1 - Treat unspecified as Gamma 2.2, 2 - Treat unspecified and sRGB as Gamma 2.2, 3 - Treat unspecified as sRGB (previous default) | int | 0 |
|
||||
|
||||
`cm_auto_hdr` requires `--target-colorspace-hint-mode=source` mpv option to work with mpv versions greater than v0.40.0
|
||||
|
||||
### Cursor
|
||||
|
||||
_Subcategory `cursor:`_
|
||||
|
||||
| name | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| invisible | don't render cursors | bool | false |
|
||||
| sync_gsettings_theme | sync xcursor theme with gsettings, it applies cursor-theme and cursor-size on theme load to gsettings making most CSD gtk based clients use same xcursor theme and size. | bool | true |
|
||||
| no_hardware_cursors | disables hardware cursors. 0 - use hw cursors if possible, 1 - don't use hw cursors, 2 - auto (disable when tearing) | int | 2 |
|
||||
| no_break_fs_vrr | disables scheduling new frames on cursor movement for fullscreen apps with VRR enabled to avoid framerate spikes (may require no_hardware_cursors = true) 0 - off, 1 - on, 2 - auto (on with content type 'game') | int | 2 |
|
||||
| min_refresh_rate | minimum refresh rate for cursor movement when `no_break_fs_vrr` is active. Set to minimum supported refresh rate or higher | int | 24 |
|
||||
| hotspot_padding | the padding, in logical px, between screen edges and the cursor | int | 1 |
|
||||
| inactive_timeout | in seconds, after how many seconds of cursor's inactivity to hide it. Set to `0` for never. | float | 0 |
|
||||
| no_warps | if true, will not warp the cursor in many cases (focusing, keybinds, etc) | bool | false |
|
||||
| persistent_warps | When a window is refocused, the cursor returns to its last position relative to that window, rather than to the centre. | bool | false |
|
||||
| warp_on_change_workspace | Move the cursor to the last focused window after changing the workspace. Options: 0 (Disabled), 1 (Enabled), 2 (Force - ignores cursor:no_warps option) | int | 0 |
|
||||
| warp_on_toggle_special | Move the cursor to the last focused window when toggling a special workspace. Options: 0 (Disabled), 1 (Enabled), 2 (Force - ignores cursor:no_warps option) | int | 0 |
|
||||
| default_monitor | the name of a default monitor for the cursor to be set to on startup (see `hyprctl monitors` for names) | str | [[EMPTY]] |
|
||||
| zoom_factor | the factor to zoom by around the cursor. Like a magnifying glass. Minimum 1.0 (meaning no zoom) | float | 1.0 |
|
||||
| zoom_rigid | whether the zoom should follow the cursor rigidly (cursor is always centered if it can be) or loosely | bool | false |
|
||||
| zoom_detached_camera | detach the camera from the mouse when zoomed in, only ever moving the camera to keep the mouse in view when it goes past the screen edges | bool | true |
|
||||
| enable_hyprcursor | whether to enable hyprcursor support | bool | true |
|
||||
| hide_on_key_press | Hides the cursor when you press any key until the mouse is moved. | bool | false |
|
||||
| hide_on_touch | Hides the cursor when the last input was a touch input until a mouse input is done. | bool | true |
|
||||
| hide_on_tablet | Hides the cursor when the last input was a tablet input until a mouse input is done. | bool | true |
|
||||
| use_cpu_buffer | Makes HW cursors use a CPU buffer. Required on Nvidia to have HW cursors. 0 - off, 1 - on, 2 - auto (nvidia only) | int | 2 |
|
||||
| warp_back_after_non_mouse_input | Warp the cursor back to where it was after using a non-mouse input to move it, and then returning back to mouse. | bool | false |
|
||||
| zoom_disable_aa | disable antialiasing when zooming, which means things will be pixelated instead of blurry | bool | false |
|
||||
|
||||
### Ecosystem
|
||||
|
||||
_Subcategory `ecosystem:`_
|
||||
|
||||
| name | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| no_update_news | disable the popup that shows up when you update hyprland to a new version. | bool | false |
|
||||
| no_donation_nag | disable the popup that shows up twice a year encouraging to donate. | bool | false |
|
||||
| enforce_permissions | whether to enable [permission control](../Permissions). | bool | false |
|
||||
|
||||
### Quirks
|
||||
|
||||
_Subcategory `quirks:`_
|
||||
|
||||
| name | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| prefer_hdr | Report HDR mode as preferred. 0 - off, 1 - always, 2 - gamescope only | int | 0 |
|
||||
|
||||
Some clients expect monitor to be in HDR mode prior to the client start. This breaks auto HDR activation and can cause whitescreen and flickering. Use `prefer_hdr` to fix it,
|
||||
|
||||
### Debug
|
||||
|
||||
_Subcategory `debug:`_
|
||||
|
||||
> [!WARNING]
|
||||
> Only for developers.
|
||||
|
||||
| name | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| overlay | print the debug performance overlay. Disable VFR for accurate results. | bool | false |
|
||||
| damage_blink | (epilepsy warning!) flash areas updated with damage tracking | bool | false |
|
||||
| disable_logs | disable logging to a file | bool | true |
|
||||
| disable_time | disables time logging | bool | true |
|
||||
| damage_tracking | redraw only the needed bits of the display. Do **not** change. (default: full - 2) monitor - 1, none - 0 | int | 2 |
|
||||
| enable_stdout_logs | enables logging to stdout | bool | false |
|
||||
| manual_crash | set to 1 and then back to 0 to crash Hyprland. | int | 0 |
|
||||
| suppress_errors | if true, do not display config file parsing errors. | bool | false |
|
||||
| watchdog_timeout | sets the timeout in seconds for watchdog to abort processing of a signal of the main thread. Set to 0 to disable. | int | 5 |
|
||||
| disable_scale_checks | disables verification of the scale factors. Will result in pixel alignment and rounding errors. | bool | false |
|
||||
| error_limit | limits the number of displayed config file parsing errors. | int | 5 |
|
||||
| error_position | sets the position of the error bar. top - 0, bottom - 1 | int | 0 |
|
||||
| colored_stdout_logs | enables colors in the stdout logs. | bool | true |
|
||||
| pass | enables render pass debugging. | bool | false |
|
||||
| full_cm_proto | claims support for all cm proto features (requires restart) | bool | false |
|
||||
|
||||
### More
|
||||
|
||||
There are more config options described in other pages, which are layout- or
|
||||
circumstance-specific. See the sidebar for more pages.
|
||||
@@ -0,0 +1,348 @@
|
||||
---
|
||||
weight: 7
|
||||
title: Window Rules
|
||||
---
|
||||
|
||||
> [!WARNING]
|
||||
> Rules are evaluated top to bottom, so the order they're written in does matter!
|
||||
> More info in [Notes](#notes)
|
||||
|
||||
## Window Rules
|
||||
|
||||
You can set window rules to achieve different window behaviors based
|
||||
on their properties.
|
||||
|
||||
### Syntax
|
||||
|
||||
Basic named rule syntax:
|
||||
```ini
|
||||
windowrule {
|
||||
name = apply-something
|
||||
match:class = my-window
|
||||
|
||||
border_size = 10
|
||||
}
|
||||
```
|
||||
|
||||
Basic anonymous rule syntax:
|
||||
```ini
|
||||
windowrule = match:class my-window, border_size 10
|
||||
```
|
||||
|
||||
Rules are split into two categories of parameters: _props_ and _effects_. Props
|
||||
are the `match:` parts, which are used to determine if a window should get the
|
||||
rule. Effects are what is applied.
|
||||
|
||||
_All_ props must match for a rule to be applied.
|
||||
|
||||
You can have as many props and effects per rule as you please, in any order as you please, as long as:
|
||||
- there is only one of one type (e.g. specifying `match:class` twice is invalid)
|
||||
- there is at least one _prop_
|
||||
|
||||
### Props
|
||||
|
||||
The supported fields for props are:
|
||||
|
||||
| Field | Argument | Description |
|
||||
| -------------- | --------------- | --- |
|
||||
| match:class | \[RegEx\] | Windows with `class` matching `RegEx`. |
|
||||
| match:title | \[RegEx\] | Windows with `title` matching `RegEx`. |
|
||||
| match:initial_class | \[RegEx\] | Windows with `initialClass` matching `RegEx`. |
|
||||
| match:initial_title |\[RegEx\] | Windows with `initialTitle` matching `RegEx`. |
|
||||
| match:tag | \[name\] | Windows with matching `tag`. |
|
||||
| match:xwayland | \[bool\] | Xwayland windows. |
|
||||
| match:float | \[bool\] | Floating windows. |
|
||||
| match:fullscreen | \[bool\] | Fullscreen windows. |
|
||||
| match:pin | \[bool\] | Pinned windows. |
|
||||
| match:focus | \[bool\] | Currently focused window. |
|
||||
| match:group | \[bool\] | Grouped windows. |
|
||||
| match:modal | \[bool\] | Modal windows (e.g. "Are you sure" popups) |
|
||||
| match:fullscreen_state_client | \[client\] | Windows with matching `fullscreenstate`. `client` can be `0` - none, `1` - maximize, `2` - fullscreen, `3` - maximize and fullscreen. |
|
||||
| match:fullscreen_state_internal | \[internal\] | Windows with matching `fullscreenstate`. `internal` can be `0` - none, `1` - maximize, `2` - fullscreen, `3` - maximize and fullscreen. |
|
||||
| match:workspace | \[workspace\] | Windows on matching workspace. `w` can be `id`, `name:string` or `workspace selector`. |
|
||||
| match:content | \[int\] | Windows with specified content type (none = 0, photo = 1, video = 2, game = 3) |
|
||||
| match:xdg_tag | \[RegEx\] | Match a window by its xdgTag (see `hyprctl clients` to check if it has one) |
|
||||
|
||||
Keep in mind that you _have_ to declare at least one field, but not all.
|
||||
|
||||
> [!NOTE]
|
||||
> To get more information about a window's class, title, XWayland status or its
|
||||
> size, you can use `hyprctl clients`.
|
||||
|
||||
|
||||
> [!NOTE]
|
||||
> In the output of the `hyprctl clients` command:
|
||||
> `fullscreen` refers to `fullscreen_state_internal` and
|
||||
> `fullscreenClient` refers to `fullscreen_state_client`
|
||||
|
||||
### RegEx writing
|
||||
|
||||
Please note Hyprland uses [Google's RE2](https://github.com/google/re2) for parsing RegEx. This means that all operations requiring polynomial
|
||||
time to compute will not work. See the [RE2 wiki](https://github.com/google/re2/wiki/Syntax) for supported extensions.
|
||||
|
||||
If you want to _negate_ a RegEx, as in pass only when the RegEx _fails_, you can prefix it with `negative:`, e.g.: `negative:kitty`.
|
||||
|
||||
## Effects
|
||||
|
||||
### Static effects
|
||||
|
||||
Static effects are evaluated once when the window is opened and never again. This essentially means that it is always the `initialTitle` and `initialClass` which will be found when matching on `title` and `class`, respectively.
|
||||
|
||||
> [!WARNING]
|
||||
> It is not possible to `float` (or any other static rule) a window based on a change in the `title` after the window has been created. This applies to all static effects listed here.
|
||||
|
||||
| Effect | argument | Description |
|
||||
| ---- | ----------- | --- |
|
||||
| float | \[on\] | Floats a window. |
|
||||
| tile | \[on\] |Tiles a window. |
|
||||
| fullscreen | \[on\] | Fullscreens a window. |
|
||||
| maximize | \[on\] | Maximizes a window. |
|
||||
| fullscreen_state | \[internal\] \[client\] | Sets the focused window's fullscreen mode and the one sent to the client, where internal and client can be `0` - none, `1` - maximize, `2` - fullscreen, `3` - maximize and fullscreen. |
|
||||
| move | \[expr\] \[expr\] | Moves a floating window to a given coordinate, monitor-local. Two expressions are space-separated. |
|
||||
| size | \[expr\] \[expr\] | Resizes a floating window to a given size. Two expressions are space-separated. |
|
||||
| center | \[on\] | If the window is floating, will center it on the monitor. |
|
||||
| pseudo | \[on\] | Pseudotiles a window. |
|
||||
| monitor | \[id\] | Sets the monitor on which a window should open. `id` can be either the id number or the name (e.g. `1` or `DP-1`). |
|
||||
| workspace | \[w\] | Sets the workspace on which a window should open (for workspace syntax, see [dispatchers->workspaces](../Dispatchers#workspaces)). <br> You can also set \[w\] to `unset`. This will unset all previous workspace rules applied to this window. Additionally you can add `silent` after the workspace to make the window open silently. |
|
||||
| no_initial_focus | \[on\] | Disables the initial focus to the window |
|
||||
| pin | \[on\] | Pins the window (i.e. show it on all workspaces). _Note: floating only_. |
|
||||
| group | \[options\] | Sets window group properties. See the note below. |
|
||||
| suppress_event | \[types...\] | Ignores specific events from the window. Events are space separated, and can be: `fullscreen`, `maximize`, `activate`, `activatefocus`, `fullscreenoutput`. |
|
||||
| content | \[none\|photo\|video\|game\] | Sets content type. |
|
||||
| no_close_for | \[ms\] | Makes the window uncloseable with the `killactive` dispatcher for a given amount of ms on open. |
|
||||
|
||||
#### Expressions
|
||||
|
||||
Expressions are space-separated, so your math cannot have spaces. They are regular, math expressions, with a few variables exposed,
|
||||
names of which are self-explanatory. All position variables are monitor-local.
|
||||
|
||||
- `monitor_w` and `monitor_h` for monitor size
|
||||
- `window_x` and `window_y` for window position
|
||||
- `window_w` and `window_h` for window size
|
||||
- `cursor_x` and `cursor_y` for cursor position
|
||||
|
||||
Example expressions:
|
||||
- `window_w*0.5`
|
||||
- `(monitor_w/2)+17`
|
||||
|
||||
It's probably a good idea to surround your expressions with parentheses for clarity, with space-separation:
|
||||
- `(monitor_w*0.5) (monitor_h*0.5)`
|
||||
- `((monitor_w*0.5)+17) (monitor_h*0.2)`
|
||||
|
||||
### Dynamic effects
|
||||
|
||||
Dynamic effects are re-evaluated every time a property changes.
|
||||
|
||||
| Effect | argument | Description |
|
||||
| ---- | ----------- | --- |
|
||||
| persistent_size | \[on\] | Allows size persistence between application launches for floating windows. |
|
||||
| no_max_size | \[on\] | Removes max size limitations. Especially useful with windows that report invalid max sizes (e.g. winecfg). |
|
||||
| stay_focused | \[on\] | Forces focus on the window as long as it's visible. |
|
||||
| animation | \[style\] (\[opt\]) | Forces an animation onto a window, with a selected opt. Opt is optional. |
|
||||
| border_color | \[c\] | Force the border color of the window. <br> Options for c: `color`/`color ... color angle` -> sets the active border color/gradient OR `color color`/`color ... color angle color ... color [angle]` -> sets the active and inactive border color/gradient of the window. See [variables->colors](../Variables#variable-types) for color definition. |
|
||||
| idle_inhibit | \[mode\] | Sets an idle inhibit rule for the window. If active, apps like `hypridle` will not fire. Modes: `none`, `always`, `focus`, `fullscreen`. |
|
||||
| opacity | \[a\] | Additional opacity multiplier. Options for a: `float` -> sets an overall opacity, `float float` -> sets active_opacity and inactive_opacity respectively, `float float float` -> sets active_opacity, inactive_opacity and fullscreen_opacity respectively. |
|
||||
| tag | \[name\] | Applies the tag `name` to the window, use prefix `+`/`-` to set/unset flag, or no prefix to toggle the flag. |
|
||||
| max_size | \[w\] \[h\] | Sets the maximum size (x,y -> int). Applies to floating windows. (use `misc:size_limits_tiled` to include tiled windows.) |
|
||||
| min_size | \[w\] \[h\] | Sets the minimum size (x,y -> int). Applies to floating windows. (use `misc:size_limits_tiled` to include tiled windows.) |
|
||||
| border_size | \[int\] | Sets the border size. |
|
||||
| rounding | \[int\] | Forces the application to have X pixels of rounding, ignoring the set default (in `decoration:rounding`). Has to be an int. |
|
||||
| rounding_power | \[float\] | Overrides the rounding power for the window (see `decoration:rounding_power`). |
|
||||
| allows_input | \[on\] | Forces an XWayland window to receive input, even if it requests not to do so. (Might fix issues like Game Launchers not receiving focus for some reason) |
|
||||
| dim_around | \[on\] | Dims everything around the window. Please note that this rule is meant for floating windows and using it on tiled ones may result in strange behavior. |
|
||||
| decorate | \[on\] | (default is _true_) Whether to draw window decorations or not |
|
||||
| focus_on_activate | \[on\] | Whether Hyprland should focus an app that requests to be focused (an `activate` request). |
|
||||
| keep_aspect_ratio | \[on\] | Forces aspect ratio when resizing window with the mouse. |
|
||||
| nearest_neighbor | \[on\] | Forces the window to use [nearest neighbor](https://en.wikipedia.org/wiki/Image_scaling#Nearest-neighbor_interpolation) filtering. |
|
||||
| no_anim | \[on\] | Disables the animations for the window. |
|
||||
| no_blur | \[on\] | Disables blur for the window. |
|
||||
| no_dim | \[on\] | Disables window dimming for the window. |
|
||||
| no_focus | \[on\] | Disables focus to the window. |
|
||||
| no_follow_mouse | \[on\] | Prevents the window from being focused when the mouse moves over it when `input:follow_mouse=1` is set. |
|
||||
| no_shadow | \[on\] | Disables shadows for the window. |
|
||||
| no_shortcuts_inhibit | \[on\] | Disallows the app from [inhibiting your shortcuts](https://wayland.app/protocols/keyboard-shortcuts-inhibit-unstable-v1). |
|
||||
| no_screen_share | \[on\] | Hides the window and its popups from screen sharing by drawing black rectangles in their place. The rectangles are drawn even if other windows are above. |
|
||||
| no_vrr | \[on\] | Disables VRR for the window. Only works when [`misc:vrr`](../Variables/#Misc) is set to `2` or `3`. |
|
||||
| opaque | \[on\] | Forces the window to be opaque. |
|
||||
| force_rgbx | \[on\] | Forces Hyprland to ignore the alpha channel on the whole window's surfaces, effectively making it _actually, fully 100% opaque_. |
|
||||
| sync_fullscreen | \[on\] | Whether the fullscreen mode should always be the same as the one sent to the window (will only take effect on the next fullscreen mode change). |
|
||||
| immediate | \[on\] | Forces the window to allow tearing. See [the Tearing page](../Tearing). |
|
||||
| xray | \[on\] | Sets blur xray mode for the window. |
|
||||
| render_unfocused | \[on\] | Forces the window to think it's being rendered when it's not visible. See also [Variables - Misc](../Variables/#Misc) for setting `render_unfocused_fps`. |
|
||||
| scroll_mouse | \[float\] | Forces the window to override the variable `input:scroll_factor`. |
|
||||
| scroll_touchpad | \[float\] | Forces the window to override the variable `input:touchpad:scroll_factor`. |
|
||||
|
||||
All dynamic effects can be set with `setprop`, see [`setprop`](../Dispatchers#setprop).
|
||||
|
||||
### `group` window rule options
|
||||
|
||||
- `set` \[`always`\] - Open window as a group.
|
||||
- `new` - Shorthand for `barred set`.
|
||||
- `lock` \[`always`\] - Lock the group that added this window. Use with `set` or
|
||||
`new` (e.g. `new lock`) to create a new locked group.
|
||||
- `barred` - Do not automatically group the window into the focused unlocked group.
|
||||
- `deny` - Do not allow the window to be toggled as or added to group (see `denywindowfromgroup` dispatcher).
|
||||
- `invade` - Force open window in the locked group.
|
||||
- `override` \[other options\] - Override other `group` rules, e.g. You can make all windows in a particular workspace open as a group, and use `group override barred` to make windows with specific titles open as normal windows.
|
||||
- `unset` - Clear all `group` rules.
|
||||
|
||||
> [!NOTE]
|
||||
> The `group` rule without options is a shorthand for `group set`.
|
||||
>
|
||||
> By default, `set` and `lock` only affect new windows once. The `always`
|
||||
> qualifier makes them always effective.
|
||||
|
||||
### Tags
|
||||
|
||||
Window may have several tags, either static or dynamic. Dynamic tags will have a suffix of `*`.
|
||||
You may check window tags with `hyprctl clients`.
|
||||
|
||||
Use the `tagwindow` dispatcher to add a static tag to a window:
|
||||
|
||||
```bash
|
||||
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 # Toggle the tag of current window.
|
||||
|
||||
# Or you can tag windows matched with a window RegEx:
|
||||
hyprctl dispatch tagwindow +music deadbeef
|
||||
hyprctl dispatch tagwindow +media title:Celluloid
|
||||
```
|
||||
|
||||
Use the `tag` rule to add a dynamic tag to a window:
|
||||
|
||||
```ini
|
||||
windowrule = tag +term, match:class footclient # Add dynamic tag `term*` to window footclient.
|
||||
windowrule = tag term, match:class footclient # Toggle dynamic tag `term*` for window footclient.
|
||||
windowrule = tag +code, match:tag cpp # Add dynamic tag `code*` to window with tag `cpp`.
|
||||
|
||||
windowrule = opacity 0.8, match:tag code # Set opacity for window with tag `code` or `code*`.
|
||||
windowrule = opacity 0.7, match:tag cpp # Window with tag `cpp` will match both `code` and `cpp`, the last one will override prior match.
|
||||
windowrule = opacity 0.6, match:tag term* # Set opacity for window with tag `term*` only, `term` will not be matched.
|
||||
|
||||
windowrule = tag -code, match:tag term # Remove dynamic tag `code*` for window with tag `term` or `term*`.
|
||||
```
|
||||
|
||||
Or with a keybind for convenience:
|
||||
|
||||
```ini
|
||||
bind = $mod Ctrl, 2, tagwindow, alpha_0.2
|
||||
bind = $mod Ctrl, 4, tagwindow, alpha_0.4
|
||||
|
||||
windowrule = opacity 0.2 override, match:tag alpha_0.2
|
||||
windowrule = opacity 0.4 override, match:tag alpha_0.4
|
||||
```
|
||||
|
||||
The `tag` rule can only manipulate dynamic tags, and the `tagwindow` dispatcher only works with static tags (i.e. once the dispatcher is called, dynamic tags will be cleared).
|
||||
|
||||
### Example Rules
|
||||
|
||||
```ini
|
||||
# Move kitty to 100 100 and add an anim style
|
||||
windowrule {
|
||||
name = move-kitty
|
||||
match:class = kitty
|
||||
|
||||
move = 100 100
|
||||
animation = popin
|
||||
}
|
||||
|
||||
windowrule = no_blur on, match:class firefox # Disable blur for firefox
|
||||
windowrule = move (cursor_x-(window_w*0.5)) (cursor_y-(window_h*0.5)), match:class kitty # Move kitty to the center of the cursor
|
||||
windowrule = border_color rgb(FF0000) rgb(880808), match:fullscreen 1 # Set border color to red if window is fullscreen
|
||||
windowrule = border_color rgb(FFFF00), match:title .*Hyprland.* # Set border color to yellow when title contains Hyprland
|
||||
windowrule = opacity 1.0 override 0.5 override 0.8 override, match:class kitty # Set opacity to 1.0 active, 0.5 inactive and 0.8 fullscreen for kitty
|
||||
windowrule = match:class kitty, rounding 10 # Set rounding to 10 for kitty
|
||||
windowrule = match:class (pinentry-)(.*), stay_focused on # Fix pinentry losing focus
|
||||
```
|
||||
|
||||
### Notes
|
||||
|
||||
Effects that are marked as _Dynamic_ will be reevaluated if the matching property
|
||||
of the window changes.<br>
|
||||
For instance, if a rule is defined that changes the `border_color` of a window
|
||||
when it is floating, then the `border_color` will change to the requested color
|
||||
when it is set to floating, and revert to the default color when it is tiled again.
|
||||
|
||||
Effects will be processed from top to bottom, where the _last_ match will take
|
||||
precedence. i.e.
|
||||
|
||||
```ini
|
||||
windowrule = opacity 0.8 0.8, match:class kitty
|
||||
windowrule = opacity 0.5 0.5, match:float yes
|
||||
```
|
||||
|
||||
Here, all non-fullscreen kitty windows will have `opacity 0.8`, except if
|
||||
they are floating. Otherwise, they will have `opacity 0.5`. The rest of the
|
||||
non-fullscreen floating windows will have `opacity 0.5`.
|
||||
|
||||
```ini
|
||||
windowrule = opacity 0.5 0.5, match:float true
|
||||
windowrule = opacity 0.8 0.8, match:class kitty
|
||||
```
|
||||
|
||||
Here, all kitty windows will have `opacity 0.8`, even if they are floating.
|
||||
The rest of the floating windows will have `opacity 0.5`.
|
||||
|
||||
> [!NOTE]
|
||||
> Opacity is a PRODUCT of all opacities by default. For example, setting
|
||||
> `active_opacity` to `0.5` and `opacity` to `0.5` will result in a total opacity of
|
||||
> `0.25`. <br>
|
||||
> You are allowed to set opacities over `1.0`, but any opacity product over `1.0`
|
||||
> will cause graphical glitches. <br>
|
||||
> For example, using `0.5 * 2 = 1` is fine, but `0.5 * 4 = 2` will cause graphical glitches. <br>
|
||||
> You can put `override` after an opacity value to override it to an exact value
|
||||
> rather than a multiplier.
|
||||
> For example, to set active and inactive opacity to 0.8, and make fullscreen windows
|
||||
> fully opaque regardless of other opacity rules:
|
||||
>
|
||||
> ```ini
|
||||
> windowrule = match:class kitty, opacity 0.8 override 0.8 override 1.0 override
|
||||
> ```
|
||||
|
||||
### Dynamically enabling / disabling / changing rules
|
||||
|
||||
Only named rules can be dynamically changed, enabled or disabled. Anonymous rules cannot be.
|
||||
|
||||
For enabling or disabling, the keyword `enable` is exposed:
|
||||
|
||||
```sh
|
||||
hyprctl keyword 'windowrule[my-rule-name]:enable false'
|
||||
```
|
||||
|
||||
For changing properties, the same syntax can be used:
|
||||
|
||||
```sh
|
||||
hyprctl keyword 'windowrule[my-rule-name]:match:class kitty'
|
||||
```
|
||||
|
||||
_the singlequotes are necessary, otherwise your shell might try to parse the string_
|
||||
|
||||
## Layer Rules
|
||||
|
||||
Some things in Wayland are not windows, but layers. That includes, for example:
|
||||
app launchers, status bars, or wallpapers.
|
||||
|
||||
Those have specific rules, separate from windows. Their syntax is the exact same,
|
||||
but they have different props and effects.
|
||||
|
||||
### Props
|
||||
|
||||
| Field | Argument | Description |
|
||||
| -------------- | --------------- | --- |
|
||||
| match:namespace | \[RegEx\] | namespace of the layer, check `hyprctl layers`. |
|
||||
|
||||
### Effects
|
||||
|
||||
| effect | argument | description |
|
||||
| ---- | ----------- | --- |
|
||||
| no_anim | \[on\] | Disables animations. |
|
||||
| blur | \[on\] | Enables blur for the layer. |
|
||||
| blur_popups | \[on\] | Enables blur for the popups. |
|
||||
| ignore_alpha | \[a\] | Makes blur ignore pixels with opacity of `a` or lower. `a` is float value from `0` to `1`. `a = 0` if unspecified. |
|
||||
| dim_around | \[on\] | Dims everything behind the layer. |
|
||||
| xray | \[on\] | Sets the blur xray mode for a layer. `0` for off, `1` for on, `unset` for default. |
|
||||
| animation | \[style\] | Allows you to set a specific animation style for this layer. |
|
||||
| order | \[n\] | Sets the order relative to other layers. A higher `n` means closer to the edge of the monitor. Can be negative. `n = 0` if unspecified. |
|
||||
| above_lock | \[0/1/2\] | If non-zero, renders the layer above the lockscreen when the session is locked. If set to `2`, you can interact with the layer on the lockscreen, otherwise it will only be rendered above it. |
|
||||
| no_screen_share | \[on\] | Hides the layer from screen sharing by drawing a black rectangle over it. |
|
||||
@@ -0,0 +1,111 @@
|
||||
---
|
||||
weight: 8
|
||||
title: Workspace Rules
|
||||
---
|
||||
|
||||
You can set workspace rules to achieve workspace-specific behaviors. For
|
||||
instance, you can define a workspace where all windows are drawn without borders
|
||||
or gaps.
|
||||
|
||||
For layout-specific rules, see the specific layout page. For example:
|
||||
[Master Layout->Workspace Rules](../Master-Layout#workspace-rules).
|
||||
|
||||
### Workspace selectors
|
||||
|
||||
Workspaces that have already been created can be targeted by workspace
|
||||
selectors, e.g. `r[2-4] w[t1]`.
|
||||
|
||||
Selectors have props separated by a space. No spaces are allowed inside props
|
||||
themselves.
|
||||
|
||||
Props:
|
||||
|
||||
- `r[A-B]` - ID range from A to B inclusive
|
||||
- `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
|
||||
- `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, `v` to count only visible windows, and `p` to count
|
||||
only pinned 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
|
||||
|
||||
```ini
|
||||
workspace = WORKSPACE, RULES
|
||||
```
|
||||
|
||||
- WORKSPACE is a valid workspace identifier (see
|
||||
[Dispatchers->Workspaces](../Dispatchers#workspaces)). This field is
|
||||
mandatory. This _can be_ a workspace selector, but please note
|
||||
workspace selectors can only match _existing_ workspaces.
|
||||
- RULES is one (or more) rule(s) as described here in [rules](#rules).
|
||||
|
||||
### Examples
|
||||
|
||||
```ini
|
||||
workspace = name:myworkspace, gapsin:0, gapsout:0
|
||||
workspace = 3, rounding:false, bordersize:0
|
||||
workspace = w[tg1-4], shadow:false
|
||||
```
|
||||
|
||||
#### Smart gaps
|
||||
|
||||
To replicate "smart gaps" / "no gaps when only" from other WMs/Compositors, use this bad boy:
|
||||
|
||||
```ini
|
||||
workspace = w[tv1], gapsout:0, gapsin:0
|
||||
workspace = f[1], gapsout:0, gapsin:0
|
||||
windowrule = border_size 0, match:float 0, match:workspace w[tv1]
|
||||
windowrule = rounding 0, match:float 0, match:workspace w[tv1]
|
||||
windowrule = border_size 0, match:float 0, match:workspace f[1]
|
||||
windowrule = rounding 0, match:float 0, match:workspace f[1]
|
||||
```
|
||||
|
||||
#### Smart gaps (ignoring special workspaces)
|
||||
|
||||
You can combine workspace selectors for more fine-grained control, for example, to ignore special workspaces:
|
||||
|
||||
```ini
|
||||
workspace = w[tv1]s[false], gapsout:0, gapsin:0
|
||||
workspace = f[1]s[false], gapsout:0, gapsin:0
|
||||
windowrule = border_size 0, match:float 0, match:workspace w[tv1]s[false]
|
||||
windowrule = rounding 0, match:float 0, match:workspace w[tv1]s[false]
|
||||
windowrule = border_size 0, match:float 0, match:workspace f[1]s[false]
|
||||
windowrule = rounding 0, match:float 0, match:workspace f[1]s[false]
|
||||
```
|
||||
|
||||
## Rules
|
||||
|
||||
| Rule | Description | type |
|
||||
| --- | --- | --- |
|
||||
| monitor:[m] | Binds a workspace to a monitor. See [syntax](#syntax) and [Monitors](../Monitors). | string |
|
||||
| default:[b] | Whether this workspace should be the default workspace for the given monitor | bool |
|
||||
| gapsin:[x] | Set the gaps between windows (equivalent to [General->gaps_in](../Variables#general)) | int |
|
||||
| gapsout:[x] | Set the gaps between windows and monitor edges (equivalent to [General->gaps_out](../Variables#general)) | int |
|
||||
| bordersize:[x] | Set the border size around windows (equivalent to [General->border_size](../Variables#general)) | int |
|
||||
| border:[b] | Whether to draw borders or not | bool |
|
||||
| shadow:[b] | Whether to draw shadows or not | bool |
|
||||
| rounding:[b] | Whether to draw rounded windows or not | bool |
|
||||
| decorate:[b] | Whether to draw window decorations or not | bool |
|
||||
| persistent:[b] | Keep this workspace alive even if empty and inactive | bool |
|
||||
| on-created-empty:[c] | A command to be executed once a workspace is created empty (i.e. not created by moving a window to it). See the [command syntax](../Dispatchers#executing-with-rules) | string |
|
||||
| defaultName:[s] | A default name for the workspace. | string |
|
||||
|
||||
### Example Rules
|
||||
|
||||
```ini
|
||||
workspace = 3, rounding:false, decorate:false
|
||||
workspace = name:coding, rounding:false, decorate:false, gapsin:0, gapsout:0, border:false, monitor:DP-1
|
||||
workspace = 8,bordersize:8
|
||||
workspace = name:Hello, monitor:DP-1, default:true
|
||||
workspace = name:gaming, monitor:desc:Chimei Innolux Corporation 0x150C, default:true
|
||||
workspace = 5, on-created-empty:[float] firefox
|
||||
workspace = special:scratchpad, on-created-empty:foot
|
||||
```
|
||||
@@ -0,0 +1,54 @@
|
||||
---
|
||||
weight: 17
|
||||
title: XWayland
|
||||
---
|
||||
|
||||
XWayland is the bridging mechanism between legacy Xorg programs and Wayland
|
||||
compositors.
|
||||
|
||||
## HiDPI XWayland
|
||||
|
||||
XWayland currently looks pixelated on HiDPI screens, due to Xorg's inability to
|
||||
scale.
|
||||
|
||||
This problem is mitigated by the
|
||||
[`xwayland:force_zero_scaling`](../Variables/#xwayland) option,
|
||||
which forces XWayland windows not to be scaled.
|
||||
|
||||
This will get rid of the pixelated look, but will not scale applications
|
||||
properly. To do this, each toolkit has its own mechanism.
|
||||
|
||||
```ini
|
||||
# change monitor to high resolution, the last argument is the scale factor
|
||||
monitor = , highres, auto, 2
|
||||
|
||||
# unscale XWayland
|
||||
xwayland {
|
||||
force_zero_scaling = true
|
||||
}
|
||||
|
||||
# toolkit-specific scale
|
||||
env = GDK_SCALE,2
|
||||
env = XCURSOR_SIZE,32
|
||||
```
|
||||
|
||||
The GDK_SCALE variable won't conflict with Wayland-native GTK programs.
|
||||
|
||||
> [!WARNING]
|
||||
> XWayland HiDPI patches are no longer supported. Do not use them.
|
||||
|
||||
## Abstract Unix domain socket
|
||||
|
||||
X11 applications use Unix domain sockets to communicate with XWayland. On Linux, libX11 prefers
|
||||
to use the abstract Unix domain socket. This type of socket uses a separate, abstract namespace that
|
||||
is independent of the host filesystem. This makes abstract sockets more flexible
|
||||
but harder to [isolate](https://github.com/hyprwm/Hyprland/pull/8874)
|
||||
for some kinds of sandboxes like Flatpak. However, removing the abstract socket
|
||||
has [potential](https://gitlab.gnome.org/GNOME/mutter/-/issues/1613) security
|
||||
and compatibility issues.
|
||||
|
||||
Keeping that in mind, we add the [`xwayland:create_abstract_socket`](../Variables/#xwayland) option.
|
||||
When the abstract socket is disabled, only the regular Unix domain
|
||||
socket will be created.
|
||||
|
||||
_\* Abstract Unix domain sockets are available only on Linux-based systems_
|
||||
16
dot_config/hypr/hyprland.wiki/content/Configuring/_index.md
Normal file
16
dot_config/hypr/hyprland.wiki/content/Configuring/_index.md
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
weight: 3
|
||||
title: Configuring
|
||||
---
|
||||
|
||||
This section is all about the configuring (aka ricing) of your Hyprland experience.
|
||||
It links to other pages where necessary, and will walk you through:
|
||||
|
||||
- The config file
|
||||
- Every option and function in it
|
||||
- Extending functionality via scripts
|
||||
- Some uncommon tips and tricks (e.g. switching layouts, disabling keybinds on-demand, etc)
|
||||
|
||||
It also contains some sample configurations you can take inspiration from.
|
||||
|
||||
Start with [the Start Page](./Start).
|
||||
20
dot_config/hypr/hyprland.wiki/content/Connect/_index.md
Normal file
20
dot_config/hypr/hyprland.wiki/content/Connect/_index.md
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
weight: 12
|
||||
title: Connect
|
||||
---
|
||||
|
||||
These are the links to official Hyprland-related spaces or profiles:
|
||||
|
||||
## Profiles
|
||||
|
||||
Twitter: [twitter.com/hyprwm](https://twitter.com/hyprwm)
|
||||
|
||||
## Spaces
|
||||
|
||||
Discord: [discord.gg/hQ9XvMUjjr](https://discord.gg/hQ9XvMUjjr)<br/>
|
||||
Matrix: `#hyprland:matrix.vaxry.net`
|
||||
|
||||
## Other
|
||||
|
||||
hyprland.org git instance: [code.hyprland.org](https://code.hyprland.org/)<br/>
|
||||
Hyprland website: [hyprland.org](https://hyprland.org/)<br/>
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
title: Issue Guidelines
|
||||
---
|
||||
|
||||
Due to the influx of low quality or incomprehensible issues,
|
||||
we prefer to begin possible bug reports or feature requests as *discussions*,
|
||||
and elevate them to issues if they can be confirmed by a member to be relevant,
|
||||
and once enough information about the problem has been gathered.
|
||||
|
||||
> [!NOTE] **Why?**
|
||||
>
|
||||
> We are volunteers, doing this in our free time. Out of respect, please read this document
|
||||
> _fully_ before posting an issue _or_ discussion. If you can spend a few minutes reading this,
|
||||
> it saves us, the developers, much more time overall, so we can deliver fixes and features faster.
|
||||
>
|
||||
> Thank you!
|
||||
|
||||
## Issue Guidelines
|
||||
|
||||
If you are experiencing a bug, or missing a feature, please do not open an issue.
|
||||
Instead, we ask you to open a [discussion](https://github.com/hyprwm/Hyprland/discussions).
|
||||
|
||||
### Before you start a discussion
|
||||
|
||||
_Search the discussions and issues thoroughly_. It's likely that there's already one open for your bug / feature that you can
|
||||
just "like" instead of wasting both your time writing a new one and our time closing it and redirecting you.
|
||||
|
||||
### The lifecycle of a discussion
|
||||
|
||||
A discussion is opened by a user.
|
||||
|
||||
For bugs:
|
||||
- If a discussion is solved, user error, or not a hyprland issue, it gets closed.
|
||||
- If a discussion is a Hyprland problem, but cannot be tied to Hyprland in a clear way, or is not reproducible, it stays a discussion until that changes.
|
||||
- If a discussion is reproducible, a member of Hyprland promotes the discussion to an issue by opening an issue with the key information and links the original discussion.
|
||||
|
||||
> [!NOTE]
|
||||
> To get logs for your bug please see [Crashes and Bugs](https://wiki.hypr.land/Crashes-and-Bugs/)
|
||||
|
||||
For feature requests:
|
||||
- If a discussion describes a feature that is already possible (via scripts, features, or official tools), invalid, or not applicable, it gets closed.
|
||||
- If a discussion describes a feature that is _not_ already possible, it stays a discussion.
|
||||
- If a discussion describes a feature that is _not_ already possible, and it gathers enough attention, a member may promote it to an issue by opening an issue with the key information and links the original discussion.
|
||||
|
||||
Please note we are all volunteers and our numbers are small, so issues may stay idle.
|
||||
|
||||
### Gathering attention for your discussion / a discussion you care about
|
||||
|
||||
Avoid posting comments such as "when fix?". Instead, use the thumbs up
|
||||
reaction under the discussion, or issue (if one exists).
|
||||
|
||||
If a discussion has reached 5 "likes" or more, and it hasn't been promoted, you may ping a member in the discussion
|
||||
(`@vaxerski`, `@fufexan` or `@notashelf` are the most likely ones to work)
|
||||
|
||||
Please ***do not*** ping the members just because the discussion has become stale,
|
||||
or failed to gather attention. If that is the case, attempt to bring it back
|
||||
on track by posting *further* relevant information that might spark a discussion,
|
||||
or tell people interested about the discussion so that they can "like" it.
|
||||
@@ -0,0 +1,96 @@
|
||||
---
|
||||
title: PR Guidelines
|
||||
---
|
||||
|
||||
## PR Requirements
|
||||
|
||||
- Clean, not hacky code
|
||||
- Described changes and _why_ they were there
|
||||
- Following the style (see below)
|
||||
|
||||
## Code Style
|
||||
|
||||
Please read this if you are submitting a PR, in order to minimize the amount of style nits received, and save
|
||||
the time for the maintainers.
|
||||
|
||||
### Before you submit
|
||||
|
||||
Make sure you ran clang-format: `clang-format -i src/**/*{cpp,hpp}`
|
||||
|
||||
Check if your changes don't violate `clang-tidy`. Usually this is built into your IDE.
|
||||
|
||||
### Clang-format
|
||||
|
||||
This is non-negotiable. Your code **must** be formatted.
|
||||
|
||||
### Clang-tidy
|
||||
|
||||
Clang-tidy violations are not hard requirements, but please try to minimize them, and
|
||||
_only_ ignore them if it's absolutely necessary.
|
||||
|
||||
I've tweaked it so that in 99% of cases you absolutely should fix it.
|
||||
|
||||
### Testing
|
||||
|
||||
Please check the [Tests](../Tests) page for information about tests in Hyprland, and related
|
||||
projects.
|
||||
|
||||
No test regressions is a _must_, while new tests are _required_ if possible to test (e.g.
|
||||
graphical stuff is not testable).
|
||||
|
||||
### Other
|
||||
|
||||
Some stuff clang-tidy / clang-format won't catch:
|
||||
- No uninitialized _primitives_ (int, float, double, size_t, etc.)
|
||||
- No short if braces. if your if/else body contains 1 _line_ (not 1 statement) do not put `{}` around it.
|
||||
- The above rule does not apply to loops / etc
|
||||
- Consider adding a `;` inside of empty function bodies
|
||||
- Whenever you're initializing vectors arrays or maps with a lot of elements, add a `,` after the last element to make the styling nicer
|
||||
- Consider forward-declaring things in headers if possible instead of including. Speeds up compile times.
|
||||
- no `using namespace std;`, and `using namespace (anything else)` is only allowed in source files, not headers.
|
||||
- prefer guards rather than nesting. `if(!valid) return;` is much better than `if (valid) { /* a billion things */ }`
|
||||
|
||||
### Naming conventions
|
||||
Although we've used hungarian notation in the past, we are moving away from it.
|
||||
The current, and new code, should use `camelCase` with an `m_` prefix if the variable is a member of a class. (not a struct)
|
||||
|
||||
Additionally:
|
||||
- classes have a prefix of `C`: `CMyClass`
|
||||
- structs have a prefix of `S`: `SMyStruct`
|
||||
- interfaces have a prefix of `I`: `IMyInterface`
|
||||
- global pointers for singletons have a prefix of `g_`: `g_someManager`
|
||||
- constant variables are in CAPS: `const auto MYVARIABLE = ...`
|
||||
|
||||
## General code requirements
|
||||
|
||||
### No raw pointers
|
||||
This is a simple rule - don't use raw pointers (e.g. `CMyClass*`) unless _absolutely necessary_. You have `UP`, `SP` and `WP` at your disposal.
|
||||
These are unique, shared and weak pointers respectively.
|
||||
|
||||
### No malloc
|
||||
Unless absolutely necessary, do not use malloc / free. You _will_ forget to free the memory.
|
||||
|
||||
### Avoid dubious cleanups
|
||||
If a function is a C-style allocator, e.g. `some_c_call_make_new()`, it will likely require a `some_c_call_free()`. In these cases, either:
|
||||
- wrap the thing in a C++ class, or
|
||||
- if used only within one function, use a `CScopeGuard` to always free it when the function exits.
|
||||
|
||||
### Use the STL
|
||||
Generally, use the STL instead of trying to reinvent the wheel.
|
||||
|
||||
### Use hyprutils
|
||||
Hyprutils provides a lot of utilities that are well-suited for hyprland (and other hypr* projects) specifically. Use them.
|
||||
|
||||
### No absolute includes from /src
|
||||
Imagine this scenario:
|
||||
```
|
||||
src/
|
||||
a/
|
||||
a.hpp
|
||||
b/
|
||||
b.hpp
|
||||
```
|
||||
|
||||
If you are in `a.hpp` and want to include `b.hpp`, you _must_ use `../b/b.hpp`, and _cannot_ use `b/b.hpp`. The latter will break plugins.
|
||||
|
||||
One exception you might notice in the code is absolute paths from the root are allowed, e.g. `protocols/some-protocol.hpp`.
|
||||
@@ -0,0 +1,65 @@
|
||||
---
|
||||
title: Tests
|
||||
---
|
||||
|
||||
Hyprland and some other projects under the hypr* umbrella have _tests_ that
|
||||
try to catch bugs and regressions before code is merged.
|
||||
|
||||
Building in Debug will by default build tests.
|
||||
|
||||
## Running tests
|
||||
|
||||
### GTests
|
||||
|
||||
GTests are GoogleTests that are _unit tests_. These tests simply check how
|
||||
some elements behave when they can run on their own.
|
||||
|
||||
In all hypr* projects, GTests are ran by ctest. Run:
|
||||
|
||||
```sh
|
||||
ctest -j$(nproc) -C Debug --test-dir=build
|
||||
```
|
||||
|
||||
And make sure your tests pass.
|
||||
|
||||
### Hyprland's hyprtester
|
||||
|
||||
A lot of hyprland's code cannot be unit tested, thus we have our own Hyprtester
|
||||
binary which runs hyprland and issues commands and expects results.
|
||||
|
||||
To run Hyprtester, `cd` into `./hyprtester`, then run:
|
||||
|
||||
```sh
|
||||
../build/hyprtester/hyprtester --plugin ./plugin/hyprtestplugin.so
|
||||
```
|
||||
|
||||
*This will run for a while!* At the end, it will print summary results
|
||||
of how many tests passed, and how many failed.
|
||||
|
||||
The goal of failed tests is to be **0**.
|
||||
|
||||
## Submitting new tests
|
||||
|
||||
New tests have to either be a GTest, if the thing tested is possible to be unit tested,
|
||||
or a part of hyprtester.
|
||||
|
||||
For both test types, you can check the test directories in the project. GTests live in `tests/`,
|
||||
while hyprtester tests live in `hyprtester/`.
|
||||
|
||||
### What to test
|
||||
|
||||
If you're submitting a new feature, it's obviously your feature. For a fix, try to write a test
|
||||
case that would fail before your fix.
|
||||
|
||||
For new tests, you can inspect the coverage report.
|
||||
|
||||
First, run _both_ ctest and hyprtester. Then, run (from the repo root):
|
||||
|
||||
```sh
|
||||
gcovr -r . build --html --html-details -o build/coverage.html --gcov-ignore-parse-errors="negative_hits.warn" && xdg-open ./build/coverage.html
|
||||
```
|
||||
|
||||
this will run for a while, then open a report in your browser. You can see which files have been tested in
|
||||
what amount, and click on the files to see a line-by-line breakdown.
|
||||
|
||||
If there are paths untested, we'd be very happy to receive tests for them.
|
||||
@@ -0,0 +1,67 @@
|
||||
---
|
||||
title: Translations
|
||||
---
|
||||
|
||||
Some parts of the Hyprland ecosystem are localized. More and more are getting localization
|
||||
frameworks. This is a short page showing how to contribute translations to Hyprland apps.
|
||||
|
||||
## Find the translation file
|
||||
|
||||
Here you'll find a list of translation files for hyprapps ready to translate:
|
||||
|
||||
- [hyprland](https://github.com/hyprwm/Hyprland/blob/main/src/i18n/Engine.cpp)
|
||||
- [hyprlauncher](https://github.com/hyprwm/hyprlauncher/blob/main/src/i18n/Engine.cpp)
|
||||
- [hyprpwcenter](https://github.com/hyprwm/hyprpwcenter/blob/main/src/i18n/Engine.cpp)
|
||||
|
||||
_more are coming, this list will be updated_
|
||||
|
||||
## Translate
|
||||
|
||||
Translations are in C++, but they are straightforward, and don't require much expertise.
|
||||
You submit a translation via a traditional MR on Github.
|
||||
|
||||
### Basic translations (unconditional)
|
||||
|
||||
You register a translation for a key and your language code. For example, for key `TXT_KEY_HELLO`, and language
|
||||
`pl_PL` (polish), you can:
|
||||
```cpp
|
||||
registerEntry("pl_PL", TXT_KEY_HELLO, "Siemka!");
|
||||
```
|
||||
|
||||
Some translations have variables, included like so:
|
||||
```cpp
|
||||
registerEntry("pl_PL", TXT_KEY_HELLO, "Siemka, {name}!");
|
||||
```
|
||||
|
||||
### Conditional translations
|
||||
|
||||
In some languages, you might want to change your translation based on e.g. the amount. (apple vs apples). In this
|
||||
case, it's a bit more complicated, but it looks like this:
|
||||
|
||||
```cpp
|
||||
registerEntry("pl_PL", TXT_KEY_HELLO, [](const Hyprutils::I18n::translationVarMap& vars) {
|
||||
int peopleAmount = std::stoi(vars.at("count"));
|
||||
if (peopleAmount == 1)
|
||||
return "Mam {count} dziewczynkę anime.";
|
||||
int last = peopleAmount % 10;
|
||||
int lastTwo = peopleAmount % 100;
|
||||
if (last >= 2 && last <= 4 && !(lastTwo >= 12 && lastTwo <= 14))
|
||||
return "Mam {count} dziewczynki anime.";
|
||||
return "Mam {count} dziewczynek anime.";
|
||||
});
|
||||
```
|
||||
|
||||
As you can see, you can change the returned string based on some variable. Please note all variables
|
||||
are strings, so you need to call a standard function like `std::stoi` to obtain an integer.
|
||||
|
||||
### Fallbacks
|
||||
|
||||
In general, if you are translating into a language with regional variants, if the translations are the same,
|
||||
you don't need two entries.
|
||||
|
||||
Order of fallbacks is as follows:
|
||||
|
||||
`xy_ZT` -> `xy_XY` -> `xy_ANYTHING` -> `global fallback`, usually `en_US`.
|
||||
|
||||
So, if you write something for `de_DE`, and the user has `de_AT`, if `de_AT` is missing,
|
||||
`de_DE` will be used.
|
||||
@@ -0,0 +1,112 @@
|
||||
---
|
||||
weight: 13
|
||||
title: Contributing and Debugging
|
||||
---
|
||||
|
||||
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
|
||||
|
||||
### Required packages
|
||||
|
||||
See [manual build](https://wiki.hypr.land/Getting-Started/Installation/#manual-manual-build) for deps.
|
||||
|
||||
### Recommended, CMake
|
||||
|
||||
Install the VSCode C/C++ and CMake Tools extensions and use that.
|
||||
|
||||
I've attached a
|
||||
[example/launch.json](https://github.com/hyprwm/Hyprland/blob/main/example/launch.json)
|
||||
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`.
|
||||
|
||||
_note:_ You probably want to set `watchdog_timeout = 0` in the debug {} section
|
||||
of your config. Otherwise Hyprland will notice its hanging when you hit a
|
||||
breakpoint and it will crash after you continue out of it.
|
||||
|
||||
### Custom, CLI
|
||||
|
||||
`make debug`
|
||||
|
||||
Attach and profile in your preferred way.
|
||||
|
||||
### Nix
|
||||
|
||||
To build the package in debug mode, you have to override it like this:
|
||||
|
||||
```nix
|
||||
hyprland.override {
|
||||
debug = true;
|
||||
};
|
||||
```
|
||||
|
||||
This code can go in the `package` attribute of the NixOS/Home Manager modules.
|
||||
|
||||
## Development environment
|
||||
|
||||
### Setup
|
||||
|
||||
Make a copy of your config in `~/.config/hypr` called `hyprlandd.conf`. `Debug`
|
||||
builds automatically use `hyprlandd.conf`, but you can also pass `--config ~/path/to/conf.conf`
|
||||
for an override on release / different file.
|
||||
|
||||
#### Recommended debug config changes
|
||||
|
||||
- remove _all_ `exec=` or `exec-once=` directives from your config.
|
||||
- change default modifier for binds (e.g. `SUPER` -> `ALT`)
|
||||
|
||||
#### Launch the dev env
|
||||
|
||||
Launch the output `Hyprland` binary in `./build/` _when logged into a Hyprland
|
||||
session_.
|
||||
|
||||
A new window should open with Hyprland running inside of it. You can now test stuff
|
||||
in the nested session without worrying about nuking your actual
|
||||
session, and also being able to debug it easily. I'd also recommend to launch Hyprland
|
||||
with some sort of a debugger, like `gdb`. Your IDE (if you use one) can likely do it
|
||||
for you, otherwise `gdb ./build/Hyprland` should suffice. This will help you debug
|
||||
crashes.
|
||||
|
||||
For gdb, when Hyprland crashes, gdb will stop and allow you to inspect the current state
|
||||
with commands like `bt`, `frame`, `print`, etc. An IDE will allow you to do it
|
||||
graphically.
|
||||
|
||||
## LSP and Formatting
|
||||
|
||||
If you want proper LSP support in an editor that doesn't automatically set it
|
||||
up, use clangd. You'll probably notice there will be a bunch of warnings
|
||||
because we haven't generated compile commands, to do this run:
|
||||
|
||||
```sh
|
||||
cmake -S . -B build/ -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
|
||||
```
|
||||
|
||||
Also, before submitting a PR please format with clang-format, to run this only
|
||||
on your changes run `git-clang-format` in your projects root directory.
|
||||
|
||||
## 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. See the instructions below for more info about `coredumpctl`.
|
||||
|
||||
You can also use the amazing command
|
||||
|
||||
```sh
|
||||
watch -n 0.1 "grep -v \"arranged\" $XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/hyprland.log | tail -n 40"
|
||||
```
|
||||
|
||||
for live logs. (replace `hyprland` with `hyprlandd` for debug builds)
|
||||
|
||||
### How do I get a coredump?
|
||||
|
||||
See
|
||||
[`ISSUE_GUIDELINES.md`](https://github.com/hyprwm/Hyprland/blob/main/docs/ISSUE_GUIDELINES.md).
|
||||
172
dot_config/hypr/hyprland.wiki/content/Crashes and Bugs/_index.md
Normal file
172
dot_config/hypr/hyprland.wiki/content/Crashes and Bugs/_index.md
Normal file
@@ -0,0 +1,172 @@
|
||||
---
|
||||
weight: 10
|
||||
title: Crashes and Bugs
|
||||
---
|
||||
|
||||
## Getting the log
|
||||
|
||||
Firstly, make sure you have enabled logs in the Hyprland config. Set `debug:disable_logs` to `false`.
|
||||
|
||||
If you are in a TTY, and the Hyprland session that crashed was the last one you
|
||||
launched, the log can be printed with
|
||||
|
||||
```sh
|
||||
cat $XDG_RUNTIME_DIR/hypr/$(ls -t $XDG_RUNTIME_DIR/hypr/ | head -n 1)/hyprland.log
|
||||
```
|
||||
|
||||
if you are in a Hyprland session, and you want the log of the last session, use
|
||||
|
||||
```sh
|
||||
cat $XDG_RUNTIME_DIR/hypr/$(ls -t $XDG_RUNTIME_DIR/hypr/ | head -n 2 | tail -n 1)/hyprland.log
|
||||
```
|
||||
|
||||
## Obtaining the Hyprland Crash Report
|
||||
|
||||
If you have `$XDG_CACHE_HOME` set, the crash report directory is
|
||||
`$XDG_CACHE_HOME/hyprland`. If not, it's `$HOME/.cache/hyprland`.
|
||||
|
||||
Go to the crash report directory and you should find a file named
|
||||
`hyprlandCrashReport[XXXX].txt` where `[XXXX]` is the PID of the process that
|
||||
crashed.
|
||||
|
||||
Attach that file to your issue.
|
||||
|
||||
## Crashes at launch
|
||||
|
||||
Diagnose the issue by what is in the log:
|
||||
|
||||
- `backend failed to start` -> launch in the TTY and refer to the logs in RED.
|
||||
- `Monitor X has NO PREFERRED MODE, and an INVALID one was requested` -> your
|
||||
monitor is bork.
|
||||
- Other -> see the coredump. Use `coredumpctl`, find the latest one's PID and do
|
||||
`coredumpctl info PID`.
|
||||
- failing on a driver (e.g. `radeon`) -> report an issue.
|
||||
- failing on `Hyprland` -> report an issue.
|
||||
|
||||
## Crashes not at launch
|
||||
|
||||
Report an issue on GitHub or on the Discord server.
|
||||
|
||||
## Obtaining a debug stacktrace
|
||||
|
||||
> Systemd-only.
|
||||
|
||||
1. Build Hyprland in debug (`make debug`).
|
||||
2. Start Hyprland and get it to crash.
|
||||
3. In a tty or terminal, do `coredumpctl debug Hyprland`.
|
||||
- If gdb asks you for symbols, say `y`.
|
||||
- If it asks about paging, say `c`.
|
||||
4. Once you get to `(gdb)`, start file logging with `set logging enabled`.
|
||||
- For a specific file, use `set logging file output.log`.
|
||||
5. Run `bt -full`, then `exit` once finished, and attach the output.
|
||||
|
||||
## Obtaining a trace log
|
||||
|
||||
Launch Hyprland with `HYPRLAND_TRACE=1 AQ_TRACE=1` environment variables set.
|
||||
|
||||
These variables will enable _very_ verbose logging and it's not recommended to enable them unless debugging, as they
|
||||
might cause slowdowns and _massive_ log files.
|
||||
|
||||
Try to reproduce your issue as fast as possible so we don't have to sift through 1 million lines of logs.
|
||||
|
||||
## Bugs
|
||||
|
||||
First of all, **_READ THE [FAQ PAGE](../FAQ)_**
|
||||
|
||||
If your bug is not listed there, you can ask on the Discord server or open a
|
||||
[discussion on GitHub](https://github.com/hyprwm/Hyprland/discussions).
|
||||
|
||||
## Bisecting an issue
|
||||
|
||||
"Bisecting" is finding the first _git_ commit that introduced a specific bug or
|
||||
regression using binary search. This is done in `git` using the `git bisect` command.
|
||||
|
||||
First, clone the Hyprland repo if you haven't already:
|
||||
|
||||
```sh
|
||||
git clone --recursive https://github.com/hyprwm/Hyprland
|
||||
cd Hyprland
|
||||
```
|
||||
|
||||
Start the bisect process:
|
||||
|
||||
```sh
|
||||
git bisect start
|
||||
```
|
||||
|
||||
Enter the first known good commit hash that did not contain the issue:
|
||||
|
||||
```sh
|
||||
git bisect good [good commit]
|
||||
```
|
||||
|
||||
Then, enter the known bad commit hash that does contain the issue. You can simply use HEAD:
|
||||
|
||||
```sh
|
||||
git bisect bad HEAD
|
||||
```
|
||||
|
||||
_git_ will now checkout a commit in the middle of the specified range.
|
||||
Now, reset and build Hyprland:
|
||||
|
||||
```sh
|
||||
git reset --hard --recurse-submodules
|
||||
make all
|
||||
```
|
||||
|
||||
...and run the built executable from the TTY `./build/Hyprland`.
|
||||
|
||||
Try to reproduce your issue. If you can't (i.e. the bug is not present), go back to the
|
||||
Hyprland repo and run `git bisect good`. If you can reproduce it, run `git bisect bad`.
|
||||
_git_ will then checkout another commit and continue the binary search.
|
||||
If there's a build error, run `git bisect skip`.
|
||||
|
||||
Reset, build and install Hyprland again and repeat this step until _git_ identifies the
|
||||
commit that introduced the bug:
|
||||
|
||||
```
|
||||
[commit hash] is the first bad commit
|
||||
```
|
||||
|
||||
## Building the Wayland stack with ASan
|
||||
|
||||
If requested, this is the deepest level of memory issue debugging possible.
|
||||
|
||||
_Do this in the tty, with no Hyprland instances running._
|
||||
|
||||
Clone hyprland: `git clone --recursive https://github.com/hyprwm/Hyprland`
|
||||
|
||||
`make asan`
|
||||
|
||||
Reproduce your crash. Hyprland will exit back to the tty.
|
||||
|
||||
Now, in either `cwd`, `~` or `./build`, search for file(s) named
|
||||
`asan.log.XXXXX` where XXXXX is a number.
|
||||
|
||||
Zip all of them up and attach to your issue.
|
||||
|
||||
## Debugging DRM issues
|
||||
|
||||
DRM (Direct Rendering Manager) is the underlying kernel architecture to take a gpu buffer (something
|
||||
we can render to) and put it on your screen (via the gpu) instead of a window.
|
||||
|
||||
Freezes, glitches, and others, can be caused by issues with Hyprland's communication with DRM, the driver
|
||||
or kernel. In those cases, a DRM log is helpful.
|
||||
|
||||
> [!WARNING]
|
||||
> Please note, these logs are EXTREMELY verbose. Please reproduce your bug(s) ASAP to avoid getting a 1GB log.
|
||||
|
||||
```sh
|
||||
echo 0x19F | sudo tee /sys/module/drm/parameters/debug # enables verbose drm logging
|
||||
sudo dmesg -C # clears kernel debug logs
|
||||
dmesg -w > ~/dmesg.log & # writes kernel logs in the background to a file at ~/dmesg.log
|
||||
Hyprland
|
||||
|
||||
# ... repro the issue, then quit hyprland
|
||||
|
||||
|
||||
fg # after this, use CTRL+C to stop writing the logs
|
||||
echo 0 | sudo tee /sys/module/drm/parameters/debug # disables drm logging, don't forget this to avoid slowdowns
|
||||
```
|
||||
|
||||
After this, _attach_ the `dmesg.log` file.
|
||||
504
dot_config/hypr/hyprland.wiki/content/FAQ/_index.md
Normal file
504
dot_config/hypr/hyprland.wiki/content/FAQ/_index.md
Normal file
@@ -0,0 +1,504 @@
|
||||
---
|
||||
weight: 11
|
||||
title: FAQ
|
||||
---
|
||||
|
||||
### Symbol lookup errors
|
||||
|
||||
If you are getting an error like:
|
||||
```
|
||||
<app>: symbol lookup error: <app>: undefined symbol: <symbol>
|
||||
```
|
||||
or
|
||||
```
|
||||
<app>: error while loading shared libraries: <lib>: cannot open shared object file: No such file or directory.
|
||||
```
|
||||
|
||||
or sometimes without errors, just crashing at start / randomly
|
||||
|
||||
This means that you have built Hyprland yourself and your stack has gotten mismatched. Each hypr* app depends on a bunch of libraries. If you update those libraries, and you don't rebuild the hypr* stack, you will get these errors or crashes.
|
||||
|
||||
If you want to avoid these errors altogether, _use packages and don't build yourself_. By building yourself, the responsibility for maintaining this consistency falls on **you**!
|
||||
|
||||
When building yourself, you need to _build all hypr* components_, you cannot use some from packages and some from repos.
|
||||
|
||||
**For Arch users**: `-git` packages count as building yourself.
|
||||
|
||||
The order in which you **must** build the stack is as follows:
|
||||
```
|
||||
hyprland-protocols
|
||||
hyprwayland-scanner
|
||||
hyprutils
|
||||
hyprgraphics
|
||||
hyprlang
|
||||
hyprcursor
|
||||
aquamarine
|
||||
xdg-desktop-portal-hyprland
|
||||
hyprwire
|
||||
hyprtoolkit
|
||||
hyprland
|
||||
```
|
||||
|
||||
Other things, e.g. hyprapps (hyprlock, hyprsunset, ...) can be built in any order
|
||||
after hyprland.
|
||||
|
||||
***Never, under any circumstances***, symbolically link different .so versions together, this will lead to memory bugs and crashes.
|
||||
I don't care what some random person tells you online. Don't do it.
|
||||
|
||||
### My apps are pixelated
|
||||
|
||||
This just means they are running through XWayland, which physically cannot scale
|
||||
by fractional amounts.
|
||||
|
||||
To force them to run in native Wayland mode, see
|
||||
[the Master Tutorial](../Getting-Started/Master-Tutorial/#force-apps-to-use-wayland).
|
||||
|
||||
If they can't, see [the XWayland page](../Configuring/XWayland).
|
||||
|
||||
### Nothing renders / screen is empty / crash on opening first app
|
||||
|
||||
Possible causes:
|
||||
|
||||
> Your themes are not set up properly, making apps crash.
|
||||
|
||||
Use something like `qt6ct` (Qt) and `nwg-look` (GTK) (\*for GTK you can also set
|
||||
up themes with envvars) to set up your themes.
|
||||
|
||||
> 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)_
|
||||
|
||||
### My external monitor is blank / doesn't render / receives no signal (laptop)
|
||||
|
||||
For Nvidia graphics - This issue appears to be resolved when using Nvidia
|
||||
Drivers 525.60.11 or later, but it may persist with older drivers.
|
||||
|
||||
For systems with limited hardware (Ex. iGPU, USB-C, USB Hubs) - Set `env = AQ_NO_MODIFIERS,1` in your config.
|
||||
To diagnose if you have the exact problem above you can get a [DRM log](https://wiki.hypr.land/Crashes-and-Bugs/#debugging-drm-issues) and look for
|
||||
|
||||
```plain
|
||||
Requested display configuration exceeds system DDB limitations
|
||||
```
|
||||
|
||||
Outside those, there is a way to fix it that _might_ work for you though:
|
||||
|
||||
**Option 1:** Use _only_ the external monitor
|
||||
|
||||
By using `AQ_DRM_DEVICES=/dev/dri/card1` (or `card0`) environment variable 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, 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._
|
||||
|
||||
You might try a USB-C to HDMI adapter though, maybe that could route the
|
||||
external monitor through the iGPU.
|
||||
|
||||
### How do I screenshot?
|
||||
|
||||
**Option 1:** Install `grim` and `slurp`.
|
||||
|
||||
Use a keybind (or execute) `grim -g "$(slurp)"`, and select a region. A screenshot
|
||||
will pop into your `~/Pictures/` (You can configure grim and slurp, see their
|
||||
GitHub pages).
|
||||
|
||||
If you want those screenshots to go directly to your clipboard, consider using
|
||||
`wl-copy`, from [`wl-clipboard`](https://github.com/bugaevc/wl-clipboard).
|
||||
Here's an example binding:
|
||||
`bind = , Print, exec, grim -g "$(slurp -d)" - | wl-copy` For a more complete
|
||||
utility, try our own screenshotting utility:
|
||||
[Grimblast](https://github.com/hyprwm/contrib).
|
||||
|
||||
**Option 2:** You can also use hyprshot, more info [here](https://github.com/Gustash/Hyprshot).
|
||||
|
||||
**Option 3:** Install `flameshot`.
|
||||
|
||||
Flameshot has many built-in features like allowing you to draw with a paintbrush,
|
||||
add lines, add shapes, etc.
|
||||
|
||||
Flameshot was built originally for X and **it has many issues on Wayland** and users
|
||||
with HiDPI and multi-monitor setups have had mixed experiences with Flameshot.
|
||||
The options above are smoother and more native to Wayland. If you still want to
|
||||
use Flameshot, here are some configuration recommendations by users who've found
|
||||
workarounds.
|
||||
|
||||
```ini
|
||||
# no_anim isn't necessary but animations with these rules might look bad. use at your own discretion.
|
||||
windowrule = match:class flameshot, no_anim
|
||||
windowrule = match:class flameshot, float
|
||||
windowrule = match:class flameshot, move 0 0
|
||||
windowrule = match:class flameshot, pin
|
||||
windowrule = match:class flameshot, no_initial_focus
|
||||
# set this to your leftmost monitor id, otherwise you have to move your cursor to the leftmost monitor
|
||||
# before executing flameshot
|
||||
windowrule = match:class flameshot, monitor 1
|
||||
|
||||
# ctrl-c to copy from the flameshot gui gives warped images sometimes, but
|
||||
# setting the env fixes it
|
||||
bind = ..., exec, XDG_CURRENT_DESKTOP=sway flameshot gui
|
||||
```
|
||||
|
||||
For recording videos, [wf-recorder](https://github.com/ammen99/wf-recorder),
|
||||
[wl-screenrec](https://github.com/russelltg/wl-screenrec) or
|
||||
[OBS Studio](https://obsproject.com/) could be used.
|
||||
|
||||
### Screenshare / OBS no worky
|
||||
|
||||
Check [Screensharing](../Useful-Utilities/Screen-Sharing).
|
||||
|
||||
Also install `qt6-wayland` if you plan to use obs.
|
||||
|
||||
### How do I change my wallpaper?
|
||||
|
||||
See [Wallpapers](../Useful-Utilities/Wallpapers).
|
||||
|
||||
### How heavy is this?
|
||||
|
||||
Not that much heavier than Xorg. If you want maximum performance, consider
|
||||
turning off the blur and animations.
|
||||
|
||||
### 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`
|
||||
|
||||
### My monitor has flickering brightness when I turn on VRR
|
||||
|
||||
Change the VRR option to `2` (fullscreen), so that it is only used in games.
|
||||
This happens because the brightness on some monitors can depends on the refresh
|
||||
rate, and rapidly changing refresh rates (for example, when the screen
|
||||
momentarily updates after pressing a key) will cause rapid changes in
|
||||
brightness.
|
||||
|
||||
If you want VRR always enabled regardless,
|
||||
the flickering can be mitigated or even removed by changing the VRR range in your monitor's EDID.
|
||||
More information in [the ArchWiki](https://wiki.archlinux.org/title/Kernel_mode_setting#Forcing_modes_and_EDID).
|
||||
|
||||
### How do I update?
|
||||
|
||||
Open a terminal where you cloned the repo.
|
||||
|
||||
```bash
|
||||
git pull
|
||||
make all && sudo make install
|
||||
```
|
||||
|
||||
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 screen lock?
|
||||
|
||||
Use a Wayland-compatible locking utility using WLR protocols, e.g. `swaylock`.
|
||||
Be aware that they will not prevent tty-changing using Ctrl-Alt-F1...F7.
|
||||
|
||||
### How do I change me mouse cursor?
|
||||
|
||||
See [hyprcursor](../Hypr-Ecosystem/hyprcursor)
|
||||
|
||||
1. Set the GTK cursor using [nwg-look](https://github.com/nwg-piotr/nwg-look).
|
||||
2. Add `exec-once=hyprctl setcursor [THEME] [SIZE]` to your config and restart Hyprland.
|
||||
|
||||
If using flatpak, run `flatpak override --filesystem=~/.themes:ro --filesystem=~/.icons:ro --user` and put your themes in both `/usr/share/themes` and `~/.themes`, and put your icons and cursors in both `/usr/share/icons` and `~/.icons`.
|
||||
|
||||
For Qt applications, Hyprland exports XCURSOR_SIZE as 24, which is the default.
|
||||
You can overwrite this by exporting XCURSOR_SIZE to a different value with `env`.
|
||||
|
||||
You can also try running `gsettings set org.gnome.desktop.interface cursor-theme 'theme-name'` or adding it after `exec-once=` in your config.
|
||||
|
||||
If you do not want to install a GTK settings editor, change the config files according to the
|
||||
[XDG specification (Arch Wiki link)](https://wiki.archlinux.org/title/Cursor_themes#Configuration).
|
||||
Make sure to also edit `~/.config/gtk-4.0/settings.ini` and `~/.gtkrc-2.0` if _not_ using a tool
|
||||
(like `nwg-look`).
|
||||
|
||||
### GTK Settings no work / whatever
|
||||
|
||||
[https://github.com/swaywm/sway/wiki/GTK-3-settings-on-Wayland](https://github.com/swaywm/sway/wiki/GTK-3-settings-on-Wayland)
|
||||
|
||||
### My \[program name\] is freezing
|
||||
|
||||
Make sure you have a notification daemon running, for example `dunst`. Autostart
|
||||
it with the `exec-once` keyword.
|
||||
|
||||
### Waybar workspaces no worky???
|
||||
|
||||
Waybar has a set of caveats or settings that you need to be aware of. See
|
||||
[Status bars](../Useful-Utilities/Status-Bars) for solutions.
|
||||
|
||||
### How do I autostart my favorite apps?
|
||||
|
||||
Using the window rules to assign apps to workspaces, you can open a bunch of
|
||||
applications on various workspaces. The following method will start these apps
|
||||
silently (i.e. without the flickering from workspace to workspace).
|
||||
|
||||
Put the following in your `hyprland.conf`: (example)
|
||||
|
||||
```ini
|
||||
exec-once = [workspace 1 silent] kitty
|
||||
exec-once = [workspace 1 silent] subl
|
||||
exec-once = [workspace 3 silent] mailspring
|
||||
exec-once = [workspace 4 silent] firefox
|
||||
```
|
||||
|
||||
### 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:
|
||||
|
||||
In hyprland.conf:
|
||||
|
||||
```ini
|
||||
exec-once = handle_monitor_connect.sh
|
||||
```
|
||||
|
||||
where `handle_monitor_connect.sh` is: (example)
|
||||
|
||||
```sh {filename="handle_monitor_connect.sh"}
|
||||
#!/bin/sh
|
||||
|
||||
handle() {
|
||||
case $1 in monitoradded*)
|
||||
hyprctl dispatch moveworkspacetomonitor "1 1"
|
||||
hyprctl dispatch moveworkspacetomonitor "2 1"
|
||||
hyprctl dispatch moveworkspacetomonitor "4 1"
|
||||
hyprctl dispatch moveworkspacetomonitor "5 1"
|
||||
esac
|
||||
}
|
||||
|
||||
socat - "UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/${HYPRLAND_INSTANCE_SIGNATURE}/.socket2.sock" | while read -r line; do handle "$line"; done
|
||||
```
|
||||
|
||||
This makes workspaces 1, 2, 4, and 5 go to monitor 1 when connecting it.
|
||||
|
||||
Please note this requires `socat` to be installed.
|
||||
|
||||
### 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 is the way to go.
|
||||
|
||||
### Some of my apps take a really long time to open...?
|
||||
|
||||
```ini {filename="~/.config/hypr/hyprland.conf"}
|
||||
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
|
||||
```
|
||||
|
||||
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:
|
||||
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
sleep 4
|
||||
killall -e xdg-desktop-portal-hyprland
|
||||
killall xdg-desktop-portal
|
||||
/usr/lib/xdg-desktop-portal-hyprland &
|
||||
sleep 4
|
||||
/usr/lib/xdg-desktop-portal &
|
||||
```
|
||||
|
||||
launched with `exec-once` should fix all issues. Adjust the sleep durations to
|
||||
taste.
|
||||
|
||||
### How do I export envvars for Hyprland?
|
||||
|
||||
See [Environment Variables](../Configuring/Environment-variables)
|
||||
|
||||
The `env` keyword is used for this purpose. For example:
|
||||
|
||||
```ini
|
||||
env = XDG_CURRENT_DESKTOP,Hyprland
|
||||
```
|
||||
|
||||
### How to disable middle-click paste?
|
||||
|
||||
Setting `misc:middle_click_paste` to `false` disables the feature altogether with the exception of some browsers (notably firefox) having a separate built-in way of emulating that feature which has to be disabled within the browser's settings.
|
||||
|
||||
### How do I make Hyprland draw as little power as possible on my laptop?
|
||||
|
||||
**_Useful Optimizations_**:
|
||||
|
||||
- `decoration:blur:enabled = false` and `decoration:shadow:enabled = false` to disable
|
||||
fancy but battery hungry effects.
|
||||
|
||||
- `misc:vfr = true`, since it'll lower the amount of sent frames when nothing is
|
||||
happening on-screen.
|
||||
|
||||
### My apps take a long time to start / can't screenshare
|
||||
|
||||
See [The XDPH Page](../Hypr-Ecosystem/xdg-desktop-portal-hyprland/#debugging).
|
||||
|
||||
You most likely have multiple portal impls / an impl is failing to launch.
|
||||
|
||||
### My screenshot utilities won't work with multiple screens
|
||||
|
||||
Some programs like Flameshot (currently) have limited Wayland support, so on most
|
||||
Wayland compositors, you will have to do a few tweaks. For Hyprland, you can add
|
||||
these window rules to your config to make these programs work with both of your
|
||||
screens.
|
||||
|
||||
```ini
|
||||
windowrule = match:title flameshot, float true
|
||||
windowrule = match:title flameshot, move 0 0
|
||||
windowrule = match:title flameshot, suppress_event fullscreen
|
||||
```
|
||||
|
||||
### I cannot bind SUPER as my mod key on my laptop
|
||||
|
||||
Many laptops have a built-in function to toggle `SUPER` between single key press
|
||||
mode and hold mode. This is usually indicated by a padlock on the `SUPER` key.
|
||||
|
||||
First, install and run `wev`, then press `SUPER`. If you see a key press event
|
||||
followed by an instant key release event, then it's likely your `SUPER` key is
|
||||
set to single press mode.
|
||||
|
||||
On most laptops, this can be fixed by pressing `FN+SUPER` and verified in `wev`.
|
||||
You should be able to hold `SUPER` and not see an instant release event. In case
|
||||
`FN+SUPER` doesn't work, consult your laptop's manual.
|
||||
|
||||
### My VM doesn't receive keybinds I have set in Hyprland
|
||||
|
||||
This is expected, as Hyprland takes precedence.
|
||||
|
||||
A simple fix is to create an empty "passthrough" submap:
|
||||
|
||||
```ini
|
||||
bind = MOD,KEY,submap,passthru
|
||||
submap = passthru
|
||||
bind = SUPER,Escape,submap,reset
|
||||
submap = reset
|
||||
```
|
||||
|
||||
Set `MOD` and `KEY` to desired values.
|
||||
|
||||
By pressing the selected combo, you will enter a mode where Hyprland ignores your
|
||||
keybinds and passes them on to the VM. Pressing `SUPER + Escape` will leave that mode.
|
||||
|
||||
### Some of my drop-down/pop-up windows in apps disappear/don't open at cursor position
|
||||
|
||||
In some apps like Steam or VSCode, the drop-down windows may disappear if you
|
||||
hover over them. This can be fixed with window rules.
|
||||
|
||||
First, find the title and class of the pop-up window with `hyprctl clients`. You
|
||||
can try something like `sleep 3 && hyprctl clients` so you have time to open the
|
||||
pop-up. It should look something like this:
|
||||
|
||||
```bash
|
||||
Window 55d794495400 -> :
|
||||
...
|
||||
class: [CLASS here]
|
||||
title: [TITLE here]
|
||||
...
|
||||
```
|
||||
|
||||
If the pop-up disappears as you hover over it, you can add to your config:
|
||||
|
||||
```ini
|
||||
windowrule = stay_focused, match:class CLASS, match:title TITLE
|
||||
```
|
||||
|
||||
This has a downside of not being able to click on anything in the main UI until
|
||||
you've interacted with the pop-up.
|
||||
|
||||
If the pop-up disappears immediately, you can use:
|
||||
|
||||
```ini
|
||||
windowrule = min_size 1 1, match:class CLASS, match:title TITLE
|
||||
```
|
||||
|
||||
If the pop-up doesn't open at the cursor position, try the following:
|
||||
|
||||
```ini
|
||||
windowrule = move cursor_x cursor_y, match:class CLASS, match:title TITLE
|
||||
```
|
||||
|
||||
This is required for apps running under xwayland only and there is usually no need
|
||||
to use the first solution if opening at the cursor position.
|
||||
|
||||
### Steam's file picker no worky
|
||||
|
||||
On instances where you have a Steam library on another drive that you have to
|
||||
add, Hyprland's file picker would not normally appear when selecting a directory
|
||||
from Steam.
|
||||
|
||||
Steam has its own file picker, however, it's not functional. Install
|
||||
`xdg-desktop-portal-gtk` to show the desktop's file picker.
|
||||
|
||||
### Workspaces or clients are disappearing or monitor related dispatchers cause crashes
|
||||
|
||||
It seems there is a Kernel bug making the system think there is an extra
|
||||
phantom monitor, that causes all sorts of issues, crashes and weird behaviors
|
||||
like disappearing workspaces or clients when adding or removing an external
|
||||
monitor.
|
||||
|
||||
First check the list of monitors detected by Hyprland by running:
|
||||
|
||||
```ini
|
||||
hyprctl monitors
|
||||
```
|
||||
|
||||
If you see a monitor that should not be there (usually named `Unknown-1`), you
|
||||
can work around the issue by adding in your `hyprland.conf`:
|
||||
|
||||
```ini
|
||||
monitor = Unknown-1,disabled
|
||||
```
|
||||
|
||||
### I get a .so file missing error on launch
|
||||
|
||||
If you are using a -git package, this is a common occurrence when ABI-breaking updates are done.
|
||||
|
||||
_**Do not**_ symlink different .so versions, this will cause crashes!!!
|
||||
|
||||
Instead, find all hypr* packages with `-git` you have installed, remove them (possibly remove dependencies of them, too)
|
||||
and simply install them again.
|
||||
|
||||
If using yay, make sure to `CleanBuild` every package. If using paru, manually remove the cache of hypr* packages in `~/.cache/paru`.
|
||||
|
||||
If you are not using any -git packages, this is a mistake in your distro's packaging and should be solved there.
|
||||
|
||||
### My cursor is a hyprland icon?
|
||||
|
||||
This means you have no hyprcursor theme installed, and hyprland failed to find an XCursor theme as well. Install a cursor theme.
|
||||
|
||||
### Smart gaps please?
|
||||
|
||||
[Here](../Configuring/Workspace-Rules/#smart-gaps).
|
||||
|
||||
### Hyprwinwrap is not visible through blurred windows
|
||||
|
||||
This is a side effect of the [decoration:blur:new_optimizations](../Configuring/Variables/#blur).
|
||||
You have two options to resolve it.
|
||||
1. Set `decoration:blur:new_optimizations` to `false` - This will preserve the exact same appearance, but may have a slight performance cost.
|
||||
2. Set `decoration:blur:ignore_opacity` to `false` - This will drastically affect the appearance, but should maintain the original performance.
|
||||
|
||||
### I can't create Discord binds
|
||||
|
||||
You most likely have `env = ELECTRON_OZONE_PLATFORM_HINT, wayland` in your config.
|
||||
|
||||
Try running Discord like this `ELECTRON_OZONE_PLATFORM_HINT= discord`.
|
||||
|
||||
> [!WARNING]
|
||||
> Keep in mind that this will run Discord under XWayland.
|
||||
|
||||
If it works, navigate to the Discord desktop entry (usually located in `/usr/share/applications/`). Duplicate it and replace `Exec=/usr/bin/discord` with `Exec=env ELECTRON_OZONE_PLATFORM_HINT= /usr/bin/discord`. You can also give it a new name, e.g. `Name=DiscordX`, to avoid confusion as to which is which.
|
||||
|
||||
### Fullscreen applications/Steam Games open with secondary monitor's resolution
|
||||
|
||||
The issue is likely the default monitor for X11 is not your desired primary monitor, to fix this, do the following:
|
||||
|
||||
Add `exec-once=xrandr --output [MONITOR_ID] --primary` to your config, replacing [MONITOR_ID] with your main monitor's ID (e.g. DP-3). You can find your monitor ID by running `hyprctl monitors`.
|
||||
|
||||
By adding this to your hyprland config, it will set the default monitor for X11 applications to your main monitor.
|
||||
|
||||
@@ -0,0 +1,526 @@
|
||||
---
|
||||
weight: 1
|
||||
title: Installation
|
||||
---
|
||||
|
||||
> [!WARNING]
|
||||
> Hyprland is not meant to be a full and user-friendly Desktop Environment. In a nutshell, it's a set of
|
||||
> tools to allow you to create your own Desktop Environment.
|
||||
>
|
||||
> Apps, integrations, shells, etc, are **your** responsibility to pick, install and configure.
|
||||
>
|
||||
> This wiki is _very_ verbose. It's highly recommended to scour and read the wiki first before
|
||||
> assuming something is not working or not available.
|
||||
|
||||
> [!NOTE]
|
||||
> NVIDIA GPUs are often not usable out-of-the-box, follow the [Nvidia page](../../Nvidia) after installing
|
||||
> Hyprland if you plan to use one. Blame NVIDIA for this.
|
||||
|
||||
## Distros
|
||||
|
||||
We officially run and test Hyprland on Arch and NixOS, and we guarantee Hyprland will work there. For any other distro
|
||||
(not based on Arch/Nix) you might have varying amounts of success. However,
|
||||
since Hyprland is extremely bleeding-edge, point release distros like Pop!\_OS, Fedora, Ubuntu, etc.
|
||||
will have **major** issues running Hyprland. Rolling release distros like openSUSE, Solus ,etc. will likely be fine.
|
||||
|
||||
## Installation
|
||||
|
||||
Installing Hyprland is very easy. Simply install it with your package manager.
|
||||
|
||||
> [!WARNING]
|
||||
> It is **heavily** recommended you use **what the distro packages for you**, and **not** compiling manually
|
||||
> or using `-git` packages.
|
||||
> Hyprland's ecosystem and dependencies are vast and intertwined, and compiling manually will only potentially expose you to outdated,
|
||||
> or incompatible versions of these dependencies.
|
||||
>
|
||||
> If you get `.so` file mismatch / missing errors, it's _entirely your fault_ for doing this!
|
||||
>
|
||||
> However, if you are an experienced user and want to beta-test new features, you're more than welcome to run the latest
|
||||
> git head. Please don't come asking about ".so file missing" errors though!
|
||||
|
||||
### Packages
|
||||
|
||||
**WARNING:** I do not maintain any packages. If they are broken, try building
|
||||
from source first.
|
||||
|
||||
{{% details title="Arch" closed="true" %}}
|
||||
|
||||
Install a tagged release from the arch packages:
|
||||
|
||||
```shell
|
||||
sudo pacman -S hyprland
|
||||
```
|
||||
|
||||
or install from the AUR, which compiles the latest source:
|
||||
|
||||
```shell
|
||||
yay -S hyprland-git
|
||||
```
|
||||
|
||||
Alternatively, install the `hyprland-meta` package to automatically fetch and compile the latest git versions of all components within the hypr* ecosystem.
|
||||
|
||||
```shell
|
||||
yay -S hyprland-meta-git
|
||||
```
|
||||
|
||||
> [!WARNING]
|
||||
> With `-git` everytime a direct dependency like `hyprutils` has an ABI breaking update you need to recompile Hyprland and all other dependent tools.
|
||||
> Otherwise you get a ".so not found" error.
|
||||
|
||||
|
||||
If you decide to use the `git` version from the AUR, you can use the [Chaotic Aur](https://aur.chaotic.cx/) to get pre-built binaries.
|
||||
Be aware that updating dependencies like `hyprutils` might still require you to recompile everything yourself as the Chaotic Aur does not do that automatically.
|
||||
|
||||
> [!NOTE]
|
||||
> You can downgrade easily with [downgrade](https://github.com/archlinux-downgrade/downgrade) to get to a previous -git version.
|
||||
|
||||
{{% /details %}}
|
||||
|
||||
{{% details title="Nix" closed="true" %}}
|
||||
|
||||
Enable Hyprland in your NixOS configuration:
|
||||
|
||||
```nix
|
||||
{
|
||||
programs.hyprland.enable = true;
|
||||
}
|
||||
```
|
||||
|
||||
For more details, read the [Nix page](../../Nix).
|
||||
|
||||
{{% /details %}}
|
||||
|
||||
{{% details title="openSUSE*" closed="true" %}}
|
||||
|
||||
Hyprland is part of factory, starting with snapshot 20230411. To install it
|
||||
simply use zypper
|
||||
|
||||
```sh
|
||||
sudo zypper in hyprland
|
||||
```
|
||||
|
||||
or install the "hyprland" package via YaST2 Software.
|
||||
|
||||
For `hyprpm` to recognize it's dependencies, you'll also need to install `hyprland-devel`:
|
||||
|
||||
```sh
|
||||
sudo zypper in hyprland-devel
|
||||
```
|
||||
|
||||
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._
|
||||
|
||||
{{% /details %}}
|
||||
|
||||
{{% details title="Fedora*" closed="true" %}}
|
||||
|
||||
On Fedora 40+, run:
|
||||
|
||||
```sh
|
||||
sudo dnf install hyprland
|
||||
sudo dnf install hyprland-devel # If you want to build plugins (use hyprpm)
|
||||
```
|
||||
|
||||
Faster updates and additional packages are available in the
|
||||
[solopasha/hyprland](https://copr.fedorainfracloud.org/coprs/solopasha/hyprland)
|
||||
Copr repository.
|
||||
|
||||
If you are on an older version of Fedora, you can also compile it yourself by
|
||||
following the instructions
|
||||
[here](https://github.com/hyprwm/Hyprland/discussions/284)
|
||||
|
||||
{{% /details %}}
|
||||
{{% details title="Debian*" closed="true" %}}
|
||||
|
||||
Hyprland recently made it into the SID repository and can be installed with
|
||||
|
||||
```sh
|
||||
sudo apt install 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 Bookworm as its packages are too old.
|
||||
|
||||
{{% /details %}}
|
||||
|
||||
{{% details title="Gentoo*" closed="true" %}}
|
||||
|
||||
The hyprland package is available in the main tree:
|
||||
|
||||
```sh
|
||||
emerge --ask gui-wm/hyprland
|
||||
```
|
||||
|
||||
Additional packages like hyprlock, hypridle, xdg-desktop-portal-hyprland,
|
||||
hyprland-plugins, hyprpaper and hyprpicker are available in the
|
||||
[GURU](https://wiki.gentoo.org/wiki/Project:GURU) overlay. Community-contributed
|
||||
scripts are also available in GURU as part of the hyprland-contrib package.
|
||||
|
||||
```sh
|
||||
eselect repository enable guru
|
||||
emaint sync -r guru
|
||||
|
||||
emerge --ask gui-apps/hyprlock
|
||||
emerge --ask gui-apps/hypridle
|
||||
emerge --ask gui-libs/xdg-desktop-portal-hyprland
|
||||
emerge --ask gui-apps/hyprland-plugins
|
||||
emerge --ask gui-apps/hyprpaper
|
||||
emerge --ask gui-apps/hyprpicker
|
||||
emerge --ask gui-wm/hyprland-contrib
|
||||
```
|
||||
|
||||
For USE flags and more details, read the
|
||||
[Gentoo wiki page](https://wiki.gentoo.org/wiki/Hyprland) about Hyprland.
|
||||
|
||||
{{% /details %}}
|
||||
|
||||
{{% details title="FreeBSD*" closed="true" %}}
|
||||
|
||||
Hyprland and related are in the default repository:
|
||||
|
||||
- [hyprland](https://www.freshports.org/x11-wm/hyprland)
|
||||
- [hyprpaper](https://www.freshports.org/x11/hyprpaper)
|
||||
- [hyprpicker](https://www.freshports.org/x11/hyprpicker)
|
||||
- [xdg-desktop-portal-hyprland](https://www.freshports.org/x11/xdg-desktop-portal-hyprland)
|
||||
- [Other Wayland stuff](https://www.freshports.org/wayland/)
|
||||
|
||||
{{% /details %}}
|
||||
|
||||
{{% details title="Ubuntu*" closed="true" %}}
|
||||
|
||||
> [!WARNING]
|
||||
> Ubuntu's Hyprland is **extremely** outdated. I do not recommend using the packaged versions at all. Build the entire stack manually instead.
|
||||
|
||||
Hyprland made it into the Ubuntu 24.10 Oracular Oriole universe repo and can be installed with
|
||||
|
||||
```bash
|
||||
sudo add-apt-repository universe && sudo apt-get update && sudo apt-get install -y hyprland
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> NOTE: Above is for Ubuntu 24.10 (Unreleased) version
|
||||
|
||||
For installing Hyprland from Source, install first the dependencies below:
|
||||
|
||||
```bash
|
||||
sudo apt install -y meson wget build-essential ninja-build cmake-extras cmake gettext gettext-base fontconfig libfontconfig-dev libffi-dev libxml2-dev libdrm-dev libxkbcommon-x11-dev libxkbregistry-dev libxkbcommon-dev libpixman-1-dev libudev-dev libseat-dev seatd libxcb-dri3-dev libegl-dev libgles2 libegl1-mesa-dev glslang-tools libinput-bin libinput-dev libxcb-composite0-dev libavutil-dev libavcodec-dev libavformat-dev libxcb-ewmh2 libxcb-ewmh-dev libxcb-present-dev libxcb-icccm4-dev libxcb-render-util0-dev libxcb-res0-dev libxcb-xinput-dev libtomlplusplus3 libre2-dev
|
||||
```
|
||||
|
||||
You will also need to build the latest wayland, wayland-protocols, and
|
||||
libdisplay-info tagged releases from source.
|
||||
|
||||
For screensharing, you can also install `xdg-desktop-portal-wlr` or `xdg-desktop-portal-hyprland`
|
||||
|
||||
```bash
|
||||
sudo apt install -y xdg-desktop-portal-wlr
|
||||
```
|
||||
|
||||
_Unfortunately, `xdg-desktop-portal-hyprland` still not in Ubuntu Repo so you have to build it from source_
|
||||
|
||||
See
|
||||
[The xdph GitHub repo's readme](https://github.com/hyprwm/xdg-desktop-portal-hyprland). Refer to
|
||||
[XDPH](../../Hypr-Ecosystem/xdg-desktop-portal-hyprland) and
|
||||
[Ubuntu Guide For Installing And Building Hyprland Gist](https://gist.github.com/Vertecedoc4545/3b077301299c20c5b9b4db00f4ca6000)
|
||||
for more information.
|
||||
|
||||
> [!WARNING]
|
||||
> Please note that since Ubuntu is generally behind with dependencies, it's not
|
||||
> guaranteed that the build process will work at all. Even if it is, it's likely
|
||||
> that it will break at some point in the future.
|
||||
|
||||
> [!WARNING]
|
||||
> Always use the latest version of Ubuntu for the most up to date dependencies.
|
||||
>
|
||||
> Note: Your mileage may vary, as GDM has some bugs with Hyprland. Check the [Master Tutorial](../Master-Tutorial) for more info.
|
||||
>
|
||||
> Refer to the gist if anything fails.
|
||||
>
|
||||
> <!-- For some reason uncommenting the line below creates an unwanted <pre><div></pre> in the page. -->
|
||||
> <!-- -->
|
||||
|
||||
{{% /details %}}
|
||||
|
||||
{{% details title="Void Linux*" closed="true" %}}
|
||||
|
||||
Hyprland is not available from Void Linux's official repositories
|
||||
due to the void developers being salty and personally disliking our main developer.
|
||||
However, a [third party repository](https://github.com/Makrennel/hyprland-void)
|
||||
is available with
|
||||
[binary packages](https://github.com/Makrennel/hyprland-void/tree/repository-x86_64-glibc)
|
||||
built in CI by GitHub Actions.
|
||||
|
||||
You can add this repository by creating a file such as
|
||||
`/etc/xbps.d/hyprland-void.conf` with the following contents:
|
||||
|
||||
```plain {filename="/etc/xbps.d/hyprland-void.conf"}
|
||||
repository=https://raw.githubusercontent.com/Makrennel/hyprland-void/repository-x86_64-glibc
|
||||
```
|
||||
|
||||
Then you can install the packages as you would any other:
|
||||
|
||||
```sh
|
||||
sudo xbps-install -S hyprland
|
||||
sudo xbps-install -S hyprland-devel # If you want to use plugins
|
||||
sudo xbps-install -S xdg-desktop-portal-hyprland
|
||||
|
||||
xbps-query -Rs hypr # This will require you to have already accepted the repository's fingerprint using xbps-install -S
|
||||
```
|
||||
|
||||
More information is available in the
|
||||
[hyprland-void README](https://github.com/Makrennel/hyprland-void/blob/master/README.md),
|
||||
including information about how you can
|
||||
[manually build](https://github.com/Makrennel/hyprland-void?tab=readme-ov-file#manually-building)
|
||||
Hyprland for Void Linux using the templates provided.
|
||||
|
||||
{{% /details %}}
|
||||
|
||||
{{% details title="Slackware*" closed="true" %}}
|
||||
|
||||
```plain
|
||||
hyprland-bin (SlackBuilds) - Prebuilt release for Slackware ready for install
|
||||
```
|
||||
|
||||
Hyprland is not installed by default on the current release of Slackware.
|
||||
|
||||
For detailed instructions on installing this build see
|
||||
[here](https://slackbuilds.org/repository/15.0/desktop/hyprland-bin/)
|
||||
|
||||
{{% /details %}}
|
||||
|
||||
{{% details title="Alpine*" closed="true" %}}
|
||||
|
||||
Hyprland is currently available in Alpine's [community repository](https://wiki.alpinelinux.org/wiki/Repositories#Community)
|
||||
and it is maintained by the community.
|
||||
|
||||
The following command will install hyprland and its dependencies.
|
||||
|
||||
```plain
|
||||
apk add hyprland
|
||||
```
|
||||
|
||||
{{% /details %}}
|
||||
|
||||
{{% details title="Ximper*" closed="true" %}}
|
||||
|
||||
Install from the Sisyphus:
|
||||
|
||||
```bash
|
||||
epmi hyprland
|
||||
epmi hyprland-devel # If you want to use plugins
|
||||
```
|
||||
|
||||
Ecosystem:
|
||||
|
||||
```bash
|
||||
epmi xdg-desktop-portal-hyprland
|
||||
epmi hypridle
|
||||
epmi hyprpaper
|
||||
epmi hyprpicker
|
||||
```
|
||||
|
||||
{{% /details %}}
|
||||
|
||||
{{% details title="Solus*" closed="true" %}}
|
||||
|
||||
For Solus, run:
|
||||
|
||||
```bash
|
||||
sudo eopkg install hyprland
|
||||
```
|
||||
|
||||
{{% /details %}}
|
||||
|
||||
_**\* Unofficial, no official support is provided. These instructions are
|
||||
community-driven, and no guarantee is provided for their validity.**_
|
||||
|
||||
### Manual
|
||||
|
||||
Dependencies:
|
||||
|
||||
> [!NOTE]
|
||||
> Please note that Hyprland uses the C++26 standard, so both your compiler and your
|
||||
> C++ standard library has to support that (`gcc>=15` or `clang>=19`).
|
||||
|
||||
{{% details title="Arch" closed="true" %}}
|
||||
|
||||
```plain
|
||||
yay -S ninja gcc cmake meson libxcb xcb-proto xcb-util xcb-util-keysyms libxfixes libx11 libxcomposite libxrender libxcursor pixman wayland-protocols cairo pango libxkbcommon xcb-util-wm xorg-xwayland libinput libliftoff libdisplay-info cpio tomlplusplus hyprlang-git hyprcursor-git hyprwayland-scanner-git hyprwire-git xcb-util-errors hyprutils-git glaze hyprgraphics-git aquamarine-git re2 hyprland-qtutils-git muparser
|
||||
```
|
||||
|
||||
_(Please make a pull request or open an issue if any packages are missing from
|
||||
the list)_
|
||||
|
||||
{{% /details %}}
|
||||
|
||||
{{% details title="openSUSE" closed="true" %}}
|
||||
|
||||
```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)" "pkgconfig(xcb-errors)" glslang-devel Mesa-libGLESv3-devel tomlplusplus-devel
|
||||
```
|
||||
|
||||
(this should also work on RHEL/Fedora if you remove `Mesa-libGLESv3-devel` and
|
||||
`pkgconfig(xcb-errors)`)
|
||||
|
||||
{{% /details %}}
|
||||
|
||||
{{% details title="FreeBSD" closed="true" %}}
|
||||
|
||||
```sh
|
||||
pkg install git pkgconf gmake gcc evdev-proto cmake wayland-protocols wayland libglvnd libxkbcommon libinput cairo pango pixman libxcb
|
||||
pkg install meson jq hwdata libdisplay-info libliftoff
|
||||
export CC=gcc CXX=g++ LDFLAGS="-static-libstdc++ -static-libgcc"
|
||||
```
|
||||
|
||||
{{% /details %}}
|
||||
|
||||
{{% details title="Ubuntu" closed="true" %}}
|
||||
|
||||
refer to the Ubuntu tab above
|
||||
|
||||
{{% /details %}}
|
||||
|
||||
> [!WARNING]
|
||||
> Additionally to those, you will also need a few hypr\* dependencies which may or may not be
|
||||
> packaged for your distro of choice:
|
||||
>
|
||||
> - aquamarine
|
||||
> - hyprlang
|
||||
> - hyprcursor
|
||||
> - hyprutils
|
||||
> - hyprgraphics
|
||||
> - hyprwayland-scanner (build-only)
|
||||
|
||||
### CMake (recommended)
|
||||
|
||||
```sh
|
||||
git clone --recursive https://github.com/hyprwm/Hyprland
|
||||
cd Hyprland
|
||||
make all && sudo make install
|
||||
```
|
||||
|
||||
_CMake is always recommended as it's the intended way Hyprland should be
|
||||
installed._
|
||||
|
||||
## Crash on launch
|
||||
|
||||
See [Crashes and Bugs](../../Crashes-and-Bugs).
|
||||
|
||||
## Custom installation (debug build, etc)
|
||||
|
||||
1. cd into the hyprland repo.
|
||||
2. for debug build:
|
||||
|
||||
```bash
|
||||
make debug
|
||||
sudo make install
|
||||
```
|
||||
|
||||
3. Any other config: (replace `<PRESET>` with your preset: `release`, `debug`)
|
||||
|
||||
```bash
|
||||
make <PRESET> && sudo cp ./build/Hyprland /usr/bin && sudo cp ./example/hyprland.desktop /usr/share/wayland-sessions
|
||||
```
|
||||
|
||||
## Custom Build flags
|
||||
|
||||
To apply custom build flags, you'll have to ditch make.
|
||||
|
||||
Supported custom build flags on CMake:
|
||||
|
||||
```bash
|
||||
NO_XWAYLAND - Removes XWayland support
|
||||
NO_SYSTEMD - Removes systemd dependencies
|
||||
NO_UWSM - Does not install the hyprland-uwsm.desktop file
|
||||
NO_HYPRPM - Does not build and install hyprpm
|
||||
```
|
||||
|
||||
Flags can be passed to CMake like this:
|
||||
|
||||
```bash
|
||||
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -D<FLAG>:STRING=true -B build
|
||||
```
|
||||
|
||||
Change `<FLAG>` to one of the custom build flags. Multiple flags can be used at
|
||||
once, by adding more `-D<FLAG_2>:STRING=true`.
|
||||
|
||||
The `BUILD_TYPE` can also be changed to `Debug`.
|
||||
|
||||
To build, run:
|
||||
|
||||
```bash
|
||||
cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
|
||||
```
|
||||
|
||||
If you configured in `Debug`, change the `--config` to `Debug` as well.
|
||||
|
||||
To install, run:
|
||||
|
||||
```bash
|
||||
sudo cmake --install ./build
|
||||
```
|
||||
|
||||
## Running In a VM
|
||||
|
||||
_YMMV, this is not officially supported._
|
||||
|
||||
Read through the
|
||||
[libvirt Arch wiki page](https://wiki.archlinux.org/title/Libvirt) and get
|
||||
`libvirt`, `virsh`, and `virt-viewer` setup and installed.
|
||||
|
||||
```bash
|
||||
# Install libvirt and qemu things.
|
||||
sudo pacman -S libvirt virt-viewer qemu-common
|
||||
# Add yourself to the libvirt group.
|
||||
sudo usermod -a -G libvirt USER # Replace 'USER' with your username.
|
||||
# Enable and start libvirtd.
|
||||
systemctl enable --now libvirtd
|
||||
```
|
||||
|
||||
Go to the
|
||||
[arch-boxes gitlab](https://gitlab.archlinux.org/archlinux/arch-boxes/-/packages)
|
||||
and download the latest arch qemu basic image. You can also download via any of
|
||||
arch's mirrors.
|
||||
|
||||
```bash
|
||||
curl https://geo.mirror.pkgbuild.com/images/latest/Arch-Linux-x86_64-basic.qcow2 \
|
||||
-o ~/Downloads/arch-qemu.qcow2 # Or download wherever you want.
|
||||
```
|
||||
|
||||
Create the VM with virsh.
|
||||
|
||||
```bash
|
||||
# Use virt-install (included with libvirt) to install the vm from the image.
|
||||
virt-install \
|
||||
--graphics spice,listen=none,gl.enable=yes,rendernode=/dev/dri/renderD128 \
|
||||
--name hypr-vm \
|
||||
--os-variant archlinux \
|
||||
--memory 2048 \
|
||||
--disk ~/Downloads/arch-qemu.qcow2 \
|
||||
--import
|
||||
```
|
||||
|
||||
Connect with `virt-viewer`, this will open a `virt-viewer` graphical session on
|
||||
the tty. The default login is 'arch' for user and 'arch' for password.
|
||||
|
||||
> [!WARNING]
|
||||
> Make sure the --attach flag is used, enabling virgl makes it so that
|
||||
> we had to disable listen. This means that we can't make a direct TCP/UNIX
|
||||
> socket connection to the remote display. --attach asks libvirt to provide a
|
||||
> pre-connected socket to the display.\*
|
||||
|
||||
```sh
|
||||
virt-viewer --attach hypr-vm
|
||||
```
|
||||
|
||||
Finally on the guest follow the instructions above for either
|
||||
[installing hyprland-git from the aur](#installation) or
|
||||
[building manually](#manual-manual-build).
|
||||
> [!WARNING]
|
||||
> Make sure you install `mesa` as the OpenGL driver. The virgl drivers are
|
||||
> included in `mesa`.
|
||||
@@ -0,0 +1,147 @@
|
||||
---
|
||||
weight: 2
|
||||
title: Master tutorial
|
||||
---
|
||||
|
||||
If you are coming to Hyprland for the first time, this is the main tutorial to
|
||||
read.
|
||||
|
||||
This tutorial covers everything you need to get things going. It links to other
|
||||
pages where necessary.
|
||||
|
||||
## Install Hyprland
|
||||
|
||||
See [Installation](../Installation) and come back here once you have
|
||||
successfully installed Hyprland.
|
||||
|
||||
Install `kitty` (default terminal emulator). This is available in most distros'
|
||||
repositories.
|
||||
|
||||
## Nvidia?
|
||||
|
||||
> [!NOTE]
|
||||
> If not using an Nvidia card, skip this step.
|
||||
|
||||
Please take a look at [The Nvidia page](../../Nvidia) before launching. It has
|
||||
information regarding the needed environment and tweaks.
|
||||
|
||||
## VM?
|
||||
|
||||
> [!NOTE]
|
||||
> If not using a VM, skip this step.
|
||||
|
||||
In a VM, make sure you have 3D acceleration enabled in your `virtio` config (or
|
||||
`virt-manager`) otherwise Hyprland _**will not work**_.
|
||||
|
||||
You can also passthru a GPU to make it work.
|
||||
|
||||
Please bear in mind 3D acceleration in VMs may be pretty slow.
|
||||
|
||||
## Launching Hyprland
|
||||
|
||||
Hyprland can be executed by typing `start-hyprland` in your tty.
|
||||
|
||||
If you are adventurous and on systemd, you can also try uwsm. Please note uwsm has some issues and for the majority of users, it's recommended to use Hyprland without it.
|
||||
Uwsm provides additional features such as [xdg-autostart](https://www.freedesktop.org/software/systemd/man/latest/systemd-xdg-autostart-generator.html) support, launching any application as a systemd-unit with `uwsm app` helper, and the ability to enable services for programs that rely on a graphical session and provide such services (e.g waybar). See [uwsm](../../Useful-Utilities/Systemd-start) page for further instructions.
|
||||
|
||||
|
||||
> [!WARNING]
|
||||
> Do **not** launch Hyprland with `root` permissions (don't `sudo`)
|
||||
|
||||
You can see some launch flags by doing `start-hyprland -- -h`, these include setting the
|
||||
config path, ignoring a check for the above, etc.
|
||||
|
||||
Login managers are not officially supported, but here's a short compatibility
|
||||
list:
|
||||
|
||||
- SDDM → Works flawlessly. Install sddm ⩾ 0.20.0 or the
|
||||
[latest git version](https://github.com/sddm/sddm) (or
|
||||
[sddm-git](https://aur.archlinux.org/packages/sddm-git) from AUR) to prevent
|
||||
SDDM bug [1476](https://github.com/sddm/sddm/issues/1476) (90s shutdowns).
|
||||
- GDM → Works with the caveat of crashing Hyprland on the first launch.
|
||||
- greetd → Works flawlessly, especially with
|
||||
[ReGreet](https://github.com/rharish101/ReGreet).
|
||||
- ly → Works flawlessly.
|
||||
|
||||
## DE-like pre-configured setups
|
||||
|
||||
Do you want to just get Hyprland pre-configured like a DE,
|
||||
without making your own configuration from scratch?
|
||||
|
||||
Check out the [Preconfigured setups page](../Preconfigured-setups)
|
||||
to see a few options.
|
||||
|
||||
These dotfiles should do everything for you, and have their own tutorials as well.
|
||||
|
||||
If you choose to use those, you can skip the next step. However, it's still recommended to read all the points below
|
||||
it. They'll give you recommended apps, replacements for old X11 software, information about configuring displays,
|
||||
etc.
|
||||
|
||||
## In Hyprland with the default config
|
||||
|
||||
You're good to go with your adventure, technically.
|
||||
|
||||
Use <key>SUPER</key> + <key>Q</key> to launch kitty. If you wish to choose the
|
||||
default terminal before you proceed, you can do so in
|
||||
`~/.config/hypr/hyprland.conf`
|
||||
([example config](https://github.com/hyprwm/Hyprland/blob/main/example/hyprland.conf)).
|
||||
|
||||
If you want the best experience with less hassle googling, keep reading.
|
||||
|
||||
## Critical software
|
||||
|
||||
See the [Must-have Software page](../../Useful-Utilities/Must-have) for the
|
||||
crucial things to make Wayland / Hyprland / other apps work correctly.
|
||||
|
||||
## Monitors config
|
||||
|
||||
See [Configuring Hyprland page](../../Configuring/Monitors) to learn all about
|
||||
configuring your displays.
|
||||
|
||||
## 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)
|
||||
about that. You can also visit the
|
||||
[Awesome-Hyprland](https://github.com/hyprland-community/awesome-hyprland)
|
||||
repository for a more comprehensive list.
|
||||
|
||||
## Fully configure Hyprland
|
||||
|
||||
Head onto the
|
||||
[Configuring Hyprland page](../../Configuring) to learn all
|
||||
about configuring Hyprland to your liking.
|
||||
|
||||
## Cursors
|
||||
|
||||
Cursors are a notorious pain to set up when you don't know how. See
|
||||
[this FAQ entry on changing your mouse cursor](../../FAQ#how-do-i-change-me-mouse-cursor)
|
||||
|
||||
If your cursor does not appear, see
|
||||
[this FAQ entry on cursor not rendering](../../FAQ#me-cursor-no-render)
|
||||
|
||||
## Themes
|
||||
|
||||
Since Hyprland is not a fully-fledged Desktop Environment, you will need to use
|
||||
tools such as `lxappearance` or `nwg-look` (recommended) for GTK, and `hyprqt6engine`
|
||||
for qt6 apps.
|
||||
|
||||
## Force apps to use Wayland
|
||||
|
||||
A lot of apps will use Wayland by default. Chromium (and other browsers based on
|
||||
it, or Electron) don't. You need to pass
|
||||
`--enable-features=UseOzonePlatform --ozone-platform=wayland` to them or use
|
||||
`.conf` files where possible. Chromium-based browsers also should have a toggle
|
||||
in `chrome://flags`. Search for _"ozone"_ and select Wayland. If you are on
|
||||
NixOS you can also set the environment variable `NIXOS_OZONE_WL=1` in your
|
||||
configuration.
|
||||
|
||||
For most electron apps, you should put the above in
|
||||
`~/.config/electron-flags.conf`. Note that VSCode is known **not** to work with
|
||||
it.
|
||||
|
||||
A few more environment variables for forcing Wayland mode are documented
|
||||
[here](../../Configuring/Environment-variables).
|
||||
|
||||
You can check whether an app is running in xwayland or not with
|
||||
`hyprctl clients`.
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
weight: 3
|
||||
title: Preconfigured setups
|
||||
---
|
||||
|
||||
Don't want to spend days tinkering with Hyprland to get it just right from scratch, but you'd
|
||||
rather start from a DE-like setting? You've found the right place.
|
||||
|
||||
Here are a few options to consider:
|
||||
|
||||
## ML4W
|
||||
|
||||
ML4W or My Linux 4 Work, is a great DE-like experience out-of-the-box made by Stephan Raabe.
|
||||
|
||||
It includes simple gui settings apps, pre-configured feature-rich panels, a welcome app, and more.
|
||||
|
||||
[Website](https://www.ml4w.com/)
|
||||
|
||||
[GitHub](https://github.com/mylinuxforwork/dotfiles)
|
||||
|
||||
[Youtube](https://www.youtube.com/@mylinuxforwork)
|
||||
|
||||

|
||||
|
||||
## JaKooLit
|
||||
|
||||
Another great option is installing JaKooLit's dotfiles. They are another feature-rich and very well
|
||||
maintained option.
|
||||
|
||||
JaKooLit provides installation scripts for many distros for their dotfiles, with
|
||||
many themes to choose from.
|
||||
|
||||
[GitHub](https://github.com/JaKooLit/Hyprland-Dots)
|
||||
|
||||
[Youtube](https://www.youtube.com/@Ja.KooLit)
|
||||
|
||||

|
||||
|
||||
## end_4
|
||||
|
||||
Like material styling? Want a lot of great apps? Don't mind a tiny bit of tinkering? end-4 has you covered.
|
||||
|
||||
[GitHub](https://github.com/end-4/dots-hyprland)
|
||||
|
||||

|
||||
|
||||
## HyDE
|
||||
|
||||
Prefer something more minimal, clean and aesthetic? Are you a terminal enjoyer?
|
||||
HyDE dotfiles by HyDE Project are a very popular choice that will suit your needs.
|
||||
|
||||
[GitHub](https://github.com/HyDE-Project/HyDE)
|
||||
|
||||

|
||||
|
||||
## Omarchy
|
||||
|
||||
An opinionated Arch + Hyprland Setup by DHH.
|
||||
|
||||
[Website](https://omarchy.org/)
|
||||
|
||||

|
||||
@@ -0,0 +1,9 @@
|
||||
---
|
||||
weight: 2
|
||||
title: Getting Started
|
||||
---
|
||||
|
||||
If you are coming to Hyprland for the first time, read the
|
||||
[Installation](./Installation) page.
|
||||
|
||||
After you've installed Hyprland, read the [Master tutorial](./Master-Tutorial).
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
weight: 4
|
||||
title: Hypr Ecosystem
|
||||
---
|
||||
|
||||
This wiki section hosts docs for various hypr* projects.
|
||||
|
||||
> [!NOTE]
|
||||
> These docs always target the latest _-git_ branch of respective apps.
|
||||
|
||||
## Wiki Pages
|
||||
|
||||
Check out the wiki pages for each app, or their GitHub repo.
|
||||
|
||||
### User Apps and Utilities
|
||||
|
||||
- [hyprpaper](./hyprpaper) | [GitHub](https://github.com/hyprwm/hyprpaper)
|
||||
- [hyprpicker](./hyprpicker) | [GitHub](https://github.com/hyprwm/hyprpicker)
|
||||
- [hyprlauncher](./hyprlauncher) | [GitHub](https://github.com/hyprwm/hyprlauncher)
|
||||
- [hypridle](./hypridle) | [GitHub](https://github.com/hyprwm/hypridle)
|
||||
- [hyprlock](./hyprlock) | [GitHub](https://github.com/hyprwm/hyprlock)
|
||||
- [xdg-desktop-portal-hyprland](./xdg-desktop-portal-hyprland) | [GitHub](https://github.com/hyprwm/xdg-desktop-portal-hyprland)
|
||||
- [hyprsysteminfo](./hyprsysteminfo) | [GitHub](https://github.com/hyprwm/hyprsysteminfo)
|
||||
- [hyprsunset](./hyprsunset) | [GitHub](https://github.com/hyprwm/hyprsunset)
|
||||
- [hyprpolkitagent](./hyprpolkitagent) | [GitHub](https://github.com/hyprwm/hyprpolkitagent)
|
||||
- [hyprland-qt-support](./hyprland-qt-support) | [GitHub](https://github.com/hyprwm/hyprland-qt-support)
|
||||
- [hyprqt6engine](./hyprqt6engine) | [GitHub](https://github.com/hyprwm/hyprqt6engine)
|
||||
- [hyprpwcenter](./hyprpwcenter) | [GitHub](https://github.com/hyprwm/hyprpwcenter)
|
||||
- [hyprshutdown](./hyprshutdown) | [GitHub](https://github.com/hyprwm/hyprshutdown)
|
||||
|
||||
### Dev Libraries and Toolkits
|
||||
|
||||
- [hyprtoolkit](./hyprtoolkit) | [GitHub](https://github.com/hyprwm/hyprtoolkit)
|
||||
- [hyprcursor](./hyprcursor) | [GitHub](https://github.com/hyprwm/hyprcursor)
|
||||
- [hyprutils](./hyprutils) | [GitHub](https://github.com/hyprwm/hyprutils)
|
||||
- [hyprlang](./hyprlang) | [GitHub](https://github.com/hyprwm/hyprlang)
|
||||
- [hyprwayland-scanner](./hyprwayland-scanner) | [GitHub](https://github.com/hyprwm/hyprwayland-scanner)
|
||||
- [aquamarine](./aquamarine) | [GitHub](https://github.com/hyprwm/aquamarine)
|
||||
- [hyprgraphics](./hyprgraphics) | [GitHub](https://github.com/hyprwm/hyprgraphics)
|
||||
- [hyprland-guiutils](./hyprland-guiutils) | [GitHub](https://github.com/hyprwm/hyprland-guiutils)
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
weight: 105
|
||||
title: aquamarine
|
||||
---
|
||||
|
||||
[aquamarine](https://github.com/hyprwm/aquamarine) is a very light linux rendering backend library.
|
||||
|
||||
It is not a replacement or competitor to any other wayland compositor library (e.g. wlroots, libweston), instead implementing only the low-level KMS/DRM/etc rendering backends.
|
||||
|
||||
## Configuration
|
||||
|
||||
Configuration options are passed via environment variables starting with `AQ_` to an app that uses aquamarine, e.g. Hyprland.
|
||||
|
||||
### Variables
|
||||
|
||||
| Name | Description |
|
||||
| --- | --- |
|
||||
| `AQ_TRACE` | Enables trace (very, very verbose) logging. |
|
||||
| `AQ_DRM_DEVICES` | A colon-separated list of DRM devices (aka. GPUs) to use. <br> The first will be used as primary. <br> Example: `/dev/dri/card1:/dev/dri/card0`. |
|
||||
| `AQ_NO_MODIFIERS` | Disables modifiers for DRM buffers. |
|
||||
| `AQ_MGPU_NO_EXPLICIT` | Disables passing of explicit fences for multi-gpu scanouts |
|
||||
| `AQ_NO_ATOMIC` | **(HEAVILY NOT RECOMMENDED)** Disable atomic modesetting. |
|
||||
|
||||
## Documentation
|
||||
|
||||
Documentation will come soon.
|
||||
@@ -0,0 +1,79 @@
|
||||
---
|
||||
weight: 101
|
||||
title: hyprcursor
|
||||
---
|
||||
|
||||
[hyprcursor](https://github.com/hyprwm/hyprcursor) is a new cursor theme format that has many advantages
|
||||
over the widely used xcursor.
|
||||
|
||||
## Hyprcursor Themes
|
||||
|
||||
You will need to obtain those yourself. If you are on the Discord server, see
|
||||
`#hyprcursor-themes`.
|
||||
|
||||
Put your theme(s) in `~/.local/share/icons` or `~/.icons`
|
||||
|
||||
> [!WARNING]
|
||||
> It's not recommended to put cursor themes in system-wide `/usr/share/icons` due
|
||||
> to potential permission issues.
|
||||
|
||||
You can set your theme with envvars, or with `hyprctl setcursor`.
|
||||
|
||||
Env:
|
||||
|
||||
- `HYPRCURSOR_THEME` controls the theme.
|
||||
- `HYPRCURSOR_SIZE` controls the cursor size.
|
||||
|
||||
example snippet of `hyprland.conf`:
|
||||
|
||||
```ini
|
||||
env = HYPRCURSOR_THEME,MyCursor
|
||||
env = HYPRCURSOR_SIZE,24
|
||||
```
|
||||
|
||||
## Creating / Porting Themes
|
||||
|
||||
Go to the [hyprcursor repo](https://github.com/hyprwm/hyprcursor)
|
||||
|
||||
See the `docs/` and `hyprcursor-util/` directories for instructions.
|
||||
|
||||
## Important Notes
|
||||
|
||||
Although many apps support server-side cursors (e.g. Qt, Chromium, Electron,
|
||||
Hypr Ecosystem) some apps still don't (e.g. GTK).
|
||||
|
||||
Apps that do not support server-side cursors and hyprcursor will still fall back
|
||||
to XCursor.
|
||||
|
||||
For those apps, you need to export `XCURSOR_THEME` and `XCURSOR_SIZE` to a valid
|
||||
XCursor theme, and run
|
||||
|
||||
```sh
|
||||
gsettings set org.gnome.desktop.interface cursor-theme 'THEME_NAME'
|
||||
```
|
||||
|
||||
for gtk.
|
||||
|
||||
If `gsettings` schemas are not available to you (e.g. on NixOS you will get `No schemas installed`), you can run instead:
|
||||
|
||||
```sh
|
||||
dconf write /org/gnome/desktop/interface/cursor-theme "'THEME_NAME'"
|
||||
```
|
||||
|
||||
If the app is a flatpak, run:
|
||||
|
||||
```sh
|
||||
flatpak override --filesystem=~/.themes:ro --filesystem=~/.icons:ro --user
|
||||
```
|
||||
|
||||
and put your themes in both `/usr/share/themes` and `~/.themes`,
|
||||
also put your icons and XCursors in both `/usr/share/icons` and `~/.icons`.
|
||||
|
||||
## I Don't Want to Use hyprcursor
|
||||
|
||||
If you don't have any hyprcursor themes installed, Hyprland will fall back to XCursor, and use
|
||||
whatever you define with `XCURSOR_THEME` and `XCURSOR_SIZE`.
|
||||
|
||||
## My Cursor Is a hyprland Icon?
|
||||
|
||||
See [FAQ](../../FAQ)
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
weight: 106
|
||||
title: hyprgraphics
|
||||
---
|
||||
|
||||
[hyprgraphics](https://github.com/hyprwm/hyprgraphics) is a library providing shared implementations of some utilities relating to graphics
|
||||
and resources, like loading images or color calculations.
|
||||
109
dot_config/hypr/hyprland.wiki/content/Hypr Ecosystem/hypridle.md
Normal file
109
dot_config/hypr/hyprland.wiki/content/Hypr Ecosystem/hypridle.md
Normal file
@@ -0,0 +1,109 @@
|
||||
---
|
||||
weight: 4
|
||||
title: hypridle
|
||||
---
|
||||
|
||||
[hypridle](https://github.com/hyprwm/hypridle) is Hyprland's idle management daemon.
|
||||
|
||||
## Configuration
|
||||
|
||||
Configuration is done via the config file at `~/.config/hypr/hypridle.conf`.
|
||||
A config file is required; hypridle won't run without one.
|
||||
To run hypridle at startup, edit `hyprland.conf` and add: `exec-once = hypridle`.
|
||||
If Hyprland is started with [uwsm](../../Useful-Utilities/Systemd-start), you can use `systemctl --user enable --now hypridle.service`.
|
||||
|
||||
### General
|
||||
|
||||
Variables in the `general` category:
|
||||
|
||||
| Variable | Description | Type | Default |
|
||||
| --- | --- | --- | --- |
|
||||
| `lock_cmd` | command to run when receiving a dbus lock event (e.g. `loginctl lock-session`) | string | empty |
|
||||
| `unlock_cmd` | command to run when receiving a dbus unlock event (e.g. `loginctl unlock-session`) | string | empty |
|
||||
| `on_lock_cmd` | command to run when the session gets locked by a lock screen app | string | empty |
|
||||
| `on_unlock_cmd` | command to run when the session gets unlocked by a lock screen app | string | empty |
|
||||
| `before_sleep_cmd` | command to run when receiving a dbus prepare_sleep event | string | empty |
|
||||
| `after_sleep_cmd` | command to run when receiving a dbus post prepare_sleep event | string | empty |
|
||||
| `ignore_dbus_inhibit` | whether to ignore dbus-sent idle inhibit events (e.g. from firefox) | bool | `false` |
|
||||
| `ignore_systemd_inhibit` | whether to ignore `systemd-inhibit --what=idle` inhibitors | bool | `false` |
|
||||
| `ignore_wayland_inhibit` | whether to ignore Wayland protocol idle inhibitors | bool | `false` |
|
||||
| `inhibit_sleep` | sleep inhibition mode: <br> `0`: disable <br> `1`: normal <br> `2`: auto <br> `3`: lock notify | int | `2` |
|
||||
|
||||
> [!NOTE]
|
||||
> The `general:inhibit_sleep` option is used to make sure hypridle can perform certain tasks before the system goes to sleep.
|
||||
>
|
||||
> Options:
|
||||
> - `0` disables sleep inhibition.
|
||||
> - `1` makes the system wait until hypridle launched `general:before_sleep_cmd`.
|
||||
> - `2` (auto) selects either `3` or `1` depending on whether hypridle detects if you want to launch hyprlock before sleep.
|
||||
> - `3` makes your system wait until the session gets locked by a lock screen app. This works with all wayland session-lock apps.
|
||||
|
||||
### Listeners
|
||||
|
||||
Hypridle uses listeners to define actions on idleness.
|
||||
|
||||
Every listener has a _timeout_ (in seconds). After idling for _timeout_ seconds,
|
||||
`on-timeout` will fire.
|
||||
When action is resumed after idle, `on-resume` will fire.
|
||||
|
||||
Example listener:
|
||||
|
||||
```ini
|
||||
listener {
|
||||
timeout = 500 # in seconds.
|
||||
on-timeout = notify-send "You are idle!" # command to run when timeout has passed.
|
||||
on-resume = notify-send "Welcome back!" # command to run when activity is detected after timeout has fired.
|
||||
}
|
||||
```
|
||||
|
||||
You can define as many listeners as you want.
|
||||
|
||||
Variables in the `listener` category:
|
||||
|
||||
| variable | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| `timeout` | Idle time in seconds. | int | none, value must be specified |
|
||||
| `on-timeout` | Command to run when timeout has passed. | string | empty |
|
||||
| `on-resume` | Command to run when activity is detected after timeout has fired. | string | empty |
|
||||
| `ignore_inhibit` | Ignore idle inhibitors (of all types) for this rule. | bool | `false` |
|
||||
|
||||
### Examples
|
||||
|
||||
Full hypridle example with hyprlock:
|
||||
|
||||
```ini
|
||||
general {
|
||||
lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances.
|
||||
before_sleep_cmd = loginctl lock-session # lock before suspend.
|
||||
after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display.
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 150 # 2.5min.
|
||||
on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor.
|
||||
on-resume = brightnessctl -r # monitor backlight restore.
|
||||
}
|
||||
|
||||
# turn off keyboard backlight, comment out this section if you dont have a keyboard backlight.
|
||||
listener {
|
||||
timeout = 150 # 2.5min.
|
||||
on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 # turn off keyboard backlight.
|
||||
on-resume = brightnessctl -rd rgb:kbd_backlight # turn on keyboard backlight.
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 300 # 5min
|
||||
on-timeout = loginctl lock-session # lock screen when timeout has passed
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 330 # 5.5min
|
||||
on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed
|
||||
on-resume = hyprctl dispatch dpms on && brightnessctl -r # screen on when activity is detected after timeout has fired.
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 1800 # 30min
|
||||
on-timeout = systemctl suspend # suspend pc
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
weight: 107
|
||||
title: hyprland-guiutils
|
||||
---
|
||||
|
||||
[Hyprland GUI utilities](https://github.com/hyprwm/hyprland-guiutils) (successor to hyprland-qtutils)
|
||||
@@ -0,0 +1,17 @@
|
||||
---
|
||||
weight: 12
|
||||
title: hyprland-qt-support
|
||||
---
|
||||
|
||||
[hyprland-qt-support](https://github.com/hyprwm/hyprland-qt-support) provides a QML style for hypr* qt6 apps.
|
||||
|
||||
## Configuration
|
||||
|
||||
The config file is located in `~/.config/hypr/application-style.conf`.
|
||||
|
||||
|
||||
| Variable | Description | Type | Default |
|
||||
| --- | --- | --- | --- |
|
||||
| `roundness` | How much to round UI elements. | int \[0 .. 3] | `1` |
|
||||
| `border_width` | How wide the border should be around UI elements. | int \[0 - 3] | `1` |
|
||||
| `reduce_motion` | Reduce motion of elements (transitions, hover effects, etc). | bool | `false` |
|
||||
195
dot_config/hypr/hyprland.wiki/content/Hypr Ecosystem/hyprlang.md
Normal file
195
dot_config/hypr/hyprland.wiki/content/Hypr Ecosystem/hyprlang.md
Normal file
@@ -0,0 +1,195 @@
|
||||
---
|
||||
weight: 103
|
||||
title: hyprlang
|
||||
---
|
||||
|
||||
[hyprlang](https://github.com/hyprwm/hyprlang) is a library that implements parsing for the hypr configuration language.
|
||||
|
||||
## Syntax
|
||||
|
||||
### 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 (those are defined by the app
|
||||
you are using).
|
||||
|
||||
Variables are like "options", while keywords are like "commands".
|
||||
Options can be specified only once (if you do it more times, the previous one will be overwritten),
|
||||
while commands invoke some behavior every time they are defined.
|
||||
|
||||
The trailing spaces at the beginning and end of words are not necessary, and are
|
||||
there only for legibility.
|
||||
|
||||
### Categories
|
||||
|
||||
Categories can be regular, and "special".
|
||||
|
||||
Both are specified in the same way:
|
||||
|
||||
```ini
|
||||
category {
|
||||
variable = value
|
||||
}
|
||||
```
|
||||
|
||||
Special categories can have other properties, like for example containing a key:
|
||||
|
||||
```ini
|
||||
special {
|
||||
key = A
|
||||
variable = value
|
||||
}
|
||||
special {
|
||||
key = B
|
||||
variable = value
|
||||
}
|
||||
```
|
||||
|
||||
This is like defining two "groups", one with the key of A, another with B.
|
||||
Hyprland for example uses those for per-device configs.
|
||||
|
||||
### Defining variables
|
||||
|
||||
Variables can be defined like so:
|
||||
|
||||
```ini
|
||||
$VAR = myData
|
||||
```
|
||||
|
||||
Later on, you can use them like so:
|
||||
|
||||
```ini
|
||||
$SUFFIX = -san
|
||||
$NAME = Jeremy
|
||||
greeting = Hello, $NAME$SUFFIX.
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> Spaces around or separating values are not mandatory
|
||||
|
||||
### 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
|
||||
```
|
||||
|
||||
### Inline Options
|
||||
|
||||
If you want to specify an option inline, without opening and closing a category, use the `:` separator:
|
||||
|
||||
```ini
|
||||
category:variable = value
|
||||
```
|
||||
|
||||
If the category is special and requires a key, you can write:
|
||||
|
||||
```ini
|
||||
category[keyvalue]:variable = value
|
||||
```
|
||||
|
||||
This is the syntax used by `hyprctl keyword`, for example.
|
||||
|
||||
### Arithmetic Operations
|
||||
|
||||
Since 0.6.3, hyprlang supports _very_ basic arithmetic operations on variables using `{{}}`
|
||||
|
||||
You can use `+`, `-`, `*`, or `/`, on only _two_ variables (or constants) are a time.
|
||||
You _cannot_ nest them, but you can use intermittent variables.
|
||||
|
||||
Example:
|
||||
```ini
|
||||
$VAR1 = 2
|
||||
$VAR2 = {{VAR1 + 3}}
|
||||
$VAR3 = {{VAR2 * 2}}
|
||||
|
||||
someVariable = {{VAR3 / 2}}
|
||||
someVariable2 = VAR3
|
||||
```
|
||||
|
||||
This may throw some errors if done incorrectly. Make sure that:
|
||||
- you only have two sides to the operation (**NOT** `{{a + b + c}}`, that has three)
|
||||
- both sides either exist as numeric variables or are numeric themselves
|
||||
- you have spaces around the operator (**NOT** `{{a+b}}`)
|
||||
|
||||
### Arithmetic Escaping
|
||||
|
||||
Since 0.6.4, hyprlang allows for escaping arithmetic expressions, e.g.`{{a + b}}`, by prefixing a `\`.
|
||||
They can be used on any of the starting positions of the expression braces.
|
||||
|
||||
Example:
|
||||
```ini
|
||||
$VAR = \{{10 + 10}}
|
||||
bind = MOD, KEY, exec, COMMAND "{\{10 + 10}}"
|
||||
someVariable = \{\{10 + 10}}
|
||||
```
|
||||
|
||||
This will not evaluate the expression, and instead just assign the raw value you wrote verbatim.
|
||||
All of the `\` that were used to escape will be removed from the value as well.
|
||||
So `\{{hello world}}` will turn into `{{hello world}}`, without trying to parse it as an expression.
|
||||
|
||||
### Escaping Escapes
|
||||
|
||||
Since 0.6.4, you can escape any `\` that would have been used to escape other characters.
|
||||
|
||||
For example, if you want to have a `\` before a real expression:
|
||||
|
||||
```ini
|
||||
someVariable = \\{{VAR1 + 10}}
|
||||
```
|
||||
|
||||
If you want to have an `\` before any of the escapable characters:
|
||||
|
||||
```ini
|
||||
someOtherVariable = \\{ hello \\}
|
||||
```
|
||||
|
||||
### Conditionals
|
||||
|
||||
Since 0.6.4, you can add conditionals to your configs.
|
||||
You can make blocks conditional by using the `# hyprlang if` directive.
|
||||
|
||||
Some examples:
|
||||
|
||||
```ini
|
||||
# hyprlang if MY_VAR
|
||||
|
||||
test = 24
|
||||
|
||||
# hyprlang endif
|
||||
|
||||
# hyprlang if !MY_VAR
|
||||
|
||||
test = 12
|
||||
|
||||
# hyprlang endif
|
||||
```
|
||||
|
||||
> [!NOTE] Some important information
|
||||
> - A variable is `true` if and only if it exists and is not an empty string.
|
||||
> - Environment variables are supported.
|
||||
> - Dynamic keywords (with `hyprctl keyword`) will **NOT** re-trigger or un-trigger these blocks.
|
||||
Changes need to be made to the files directly (or environment) and in the case of the latter, or a hypr* app that doesn't automatically reload its config, a relaunch of the app / `hyprctl reload` (for hl) will be required.
|
||||
|
||||
## Developer Documentation
|
||||
|
||||
See the documentation at [hyprland.org/hyprlang](https://hyprland.org/hyprlang/).
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
weight: 3
|
||||
title: hyprlauncher
|
||||
---
|
||||
|
||||
[hyprlauncher](https://github.com/hyprwm/hyprlauncher) is a multipurpose and versatile launcher / picker for hyprland. It's fast, simple, and provides
|
||||
various modules.
|
||||
|
||||
## Usage
|
||||
|
||||
Hyprlauncher is _always_ a daemon. Launching it spawns a daemon that will listen to
|
||||
requests. If launched with `hyprlauncher -d`, it will not open a window for the first launch.
|
||||
|
||||
To open hyprlauncher, just bind `hyprlauncher` to a key.
|
||||
|
||||
## Configuration
|
||||
|
||||
### Theming
|
||||
|
||||
Theme follows your [hyprtoolkit](../hyprtoolkit) theme.
|
||||
|
||||
### Config
|
||||
|
||||
`~/.config/hypr/hyprlauncher.conf`
|
||||
|
||||
Config categories and their values:
|
||||
|
||||
#### General
|
||||
|
||||
| Option | Description | Type | Default |
|
||||
| -- | -- | -- | -- |
|
||||
| `grab_focus` | Whether to force a full keyboard focus grab. | bool | `true` |
|
||||
|
||||
|
||||
#### Cache
|
||||
|
||||
| Option | Description | Type | Default |
|
||||
| -- | -- | -- | -- |
|
||||
| enabled | Controls whether modules keep a cache of often used entries. <br> That history is stored on your disk, in plain text, in `~/.local/share/hyprlauncher`. | bool | `true` |
|
||||
|
||||
#### Finders
|
||||
|
||||
Available finders: `math`, `desktop`, `unicode`.
|
||||
|
||||
Prefixes can only be one character.
|
||||
|
||||
| option | description | type | default |
|
||||
| -- | -- | -- | -- |
|
||||
| `default_finder` | Controls the default finder used. | string | `desktop` |
|
||||
| `desktop_prefix` | Prefix for the desktop finder to be used. | string | empty |
|
||||
| `unicode_prefix` | Prefix for the unicode finder to be used. | string | `.` |
|
||||
| `math_prefix` | Prefix for the math finder to be used. | string | `=` |
|
||||
| `font_prefix` | Prefix for the font finder to be used. | string | `'` |
|
||||
| `desktop_launch_prefix` | Launch prefix for each desktop app, e.g. `uwsm app -- `. | string | empty |
|
||||
| `desktop_icons` | Whether to enable desktop icons in the results. | bool | `true` |
|
||||
|
||||
#### UI
|
||||
|
||||
| option | description | type | default |
|
||||
| -- | -- | -- | -- |
|
||||
| window_size | the size of the launcher | vec2 | `400 260` |
|
||||
|
||||
463
dot_config/hypr/hyprland.wiki/content/Hypr Ecosystem/hyprlock.md
Normal file
463
dot_config/hypr/hyprland.wiki/content/Hypr Ecosystem/hyprlock.md
Normal file
@@ -0,0 +1,463 @@
|
||||
---
|
||||
weight: 5
|
||||
title: hyprlock
|
||||
---
|
||||
|
||||
[hyprlock](https://github.com/hyprwm/hyprlock) is a simple, yet fast, multi-threaded and GPU-accelerated screen lock
|
||||
for Hyprland.
|
||||
|
||||
> [!WARNING]
|
||||
> Hyprlock does not automatically create a config, and without one, hyprlock will _not render anything_.
|
||||
> But even without a config, your session will get locked and thus Hyprland will cover your session with a black screen.
|
||||
> You can unlock normally by typing your password followed by hitting Enter, but you won't have any visual feedback.
|
||||
>
|
||||
> You can use the example config for a quick start, which can be found [here](https://github.com/hyprwm/hyprlock/blob/main/assets/example.conf).
|
||||
|
||||
## Command-line Arguments
|
||||
|
||||
See also: `hyprlock --help`.
|
||||
|
||||
| argument | description |
|
||||
| -- | -- |
|
||||
| `-v` \| `--verbose` | Enable verbose logging |
|
||||
| `-q` \| `--quiet` | Disable logging |
|
||||
| `-c` FILE \| `--config` FILE | Specify config file to use |
|
||||
| `--display` NAME | Specify the wayland display to connect to |
|
||||
| `--grace` SECONDS | Set grace period in seconds before requiring authentication |
|
||||
| `--immediate-render` | Do not wait for resources before drawing the background (Same as `general:immediate_render`) |
|
||||
| `--no-fade-in` | Disable the fade-in animation when the lock screen appears |
|
||||
| `-V` \| `--version` | Show version information and exit |
|
||||
| `-h` \| `--help` | Show help and exit |
|
||||
|
||||
## Configuration
|
||||
|
||||
Configuration is done via the config file at `~/.config/hypr/hyprlock.conf`. This file must exist to run `hyprlock`.
|
||||
|
||||
### Variable Types
|
||||
|
||||
Hyprlock uses the following types in addition to [Hyprland's variable types](../../Configuring/Variables#Variable_types).
|
||||
|
||||
| type | description |
|
||||
| -- | -- |
|
||||
| layoutxy | vec2 with an optional `%` suffix, allowing users to specify sizes as percentages of the output size. <br> Floats (e.g. 10.5) are supported, but only have an effect when used with `%`. <br> Raw pixel values will just get rounded. |
|
||||
|
||||
### General
|
||||
|
||||
Variables in the `general` category:
|
||||
|
||||
| Variable | Description | Type | Default |
|
||||
| -- | -- | -- | -- |
|
||||
| `hide_cursor` | Hides the cursor instead of making it visible. | bool | `false` |
|
||||
| `ignore_empty_input` | Skips validation when no password is provided. | bool | `false` |
|
||||
| `immediate_render` | Makes hyprlock immediately start to draw widgets. <br> Backgrounds will render `background:color` until their `background:path` resource is available. | bool | `false` |
|
||||
| `text_trim` | Sets if the text should be trimmed, useful to avoid trailing newline in commands output. | bool | `true` |
|
||||
| `fractional_scaling` | Whether to use fractional scaling. <br> `0`: disabled <br> `1`: enabled <br> `2`: auto | int | `2` |
|
||||
| `screencopy_mode` | Selects screencopy mode: <br> `0`: gpu accelerated <br> `1`: cpu based (slow) | int | `0` |
|
||||
| `fail_timeout` | Milliseconds until the ui resets after a failed auth attempt | int | `2000` |
|
||||
|
||||
### Authentication
|
||||
|
||||
Variables in the `auth` category:
|
||||
|
||||
| Variable | Description | Type | Default |
|
||||
| -- | -- | -- | -- |
|
||||
| `pam:enabled` | Whether to enable pam authentication. | bool | `true` |
|
||||
| `pam:module` | Sets the pam module used for authentication. If the module isn't found in `/etc/pam.d`, "su" will be used as a fallback. | str | `hyprlock` |
|
||||
| `fingerprint:enabled` | Enables parallel fingerprint auth with fprintd. | bool | `false` |
|
||||
| `fingerprint:ready_message` | Sets the message that will be displayed when fprintd is ready to scan a fingerprint. | str | `(Scan fingerprint to unlock)` |
|
||||
| `fingerprint:present_message` | Sets the message that will be displayed when a finger is placed on the scanner. | str | `Scanning fingerprint` |
|
||||
| `fingerprint:retry_delay` | Sets the delay in ms after an unrecognized finger is scanned before another finger can be scanned. | int | `250` |
|
||||
|
||||
> [!NOTE]
|
||||
> At least one enabled authentication method is required.
|
||||
|
||||
### Animations
|
||||
|
||||
Variables in the `animations` category:
|
||||
|
||||
| variable | description | type | default |
|
||||
| -- | -- | -- | -- |
|
||||
| enabled | whether to enable animations | bool | `true` |
|
||||
|
||||
#### Keywords
|
||||
|
||||
The `animation` and `bezier` keywords can be used just like in `hyprland.conf`.
|
||||
|
||||
For Example:
|
||||
```ini
|
||||
bezier = linear, 1, 1, 0, 0
|
||||
animation = fade, 1, 1.8, linear
|
||||
```
|
||||
|
||||
Available animations can be found in the [animation tree](#animation-tree).
|
||||
The optional `STYLE` parameter for the `animation` keyword is currently unused by hyprlock.
|
||||
|
||||
Check out Hyprland's [animation documentation](../../Configuring/Animations) for more information.
|
||||
|
||||
#### Animation Tree
|
||||
|
||||
```txt
|
||||
global
|
||||
↳ fade
|
||||
↳ fadeIn - fade to lockscreen
|
||||
↳ fadeOut - fade back to the wayland session
|
||||
↳ inputField
|
||||
↳ inputFieldColors - fade between colors and gradients
|
||||
↳ inputFieldFade - fade_on_empty animation
|
||||
↳ inputFieldWidth - adaptive width animation
|
||||
↳ inputFieldDots - fade in/out for individual dots in the input field
|
||||
```
|
||||
|
||||
### System Configuration
|
||||
|
||||
On Arch Linux, by default, hyprlock integrates with [pambase](https://archlinux.org/packages/?name=pambase) through `pam_faillock.so`, which forces a 10 minute timeout after 3 failed unlocks.
|
||||
If you would like to change this, refer to the [arch linux wiki](https://wiki.archlinux.org/title/Security#Lock_out_user_after_three_failed_login_attempts) and update the file `/etc/security/faillock.conf` file with parameters `unlock_time`, `fail_interval`, and `deny` as needed.
|
||||
|
||||
## Keyboard Shortcuts and Actions
|
||||
|
||||
The following keys and key-combinations describe hyprlock's default behaviour:
|
||||
|
||||
| input | description |
|
||||
| -- | -- |
|
||||
| `ESC` | Clear password buffer |
|
||||
| `Ctrl + u` | Clear password buffer |
|
||||
| `Ctrl + Backspace` | Clear password buffer |
|
||||
|
||||
## Widgets
|
||||
|
||||
The entire configuration of how hyprlock looks is done via widgets.
|
||||
|
||||
```ini
|
||||
widget_name {
|
||||
monitor =
|
||||
# further options
|
||||
}
|
||||
```
|
||||
|
||||
### Monitor Selection
|
||||
`monitor` is available for all widgets and can be left empty for "all monitors".
|
||||
|
||||
It takes the same string that is used to reference monitors in the hyprland configuration.
|
||||
So either use the portname (e.g. `eDP-1`) or the monitor description (e.g. `desc:Chimei Innolux Corporation 0x150C`).
|
||||
|
||||
See [Monitors](../../Configuring/Monitors).
|
||||
|
||||
### Variable Substitution
|
||||
The following variables in widget text options will be substituted.
|
||||
|
||||
- `$USER` - username (e.g. linux-user)
|
||||
- `$DESC` - user description (e.g. Linux User)
|
||||
- `$TIME` - current time in 24-hour format (e.g. `13:37`)
|
||||
- `$TIME12` - current time in 12-hour format (e.g. `1:37 PM`)
|
||||
- `$LAYOUT` - current keyboard layout
|
||||
- `$ATTEMPTS` - failed authentication attempts
|
||||
- `$FAIL` - last authentication fail reason
|
||||
- `$PAMPROMPT` - pam auth last prompt
|
||||
- `$PAMFAIL` - pam auth last fail reason
|
||||
- `$FPRINTPROMPT` - fingerprint auth last prompt
|
||||
- `$FPRINTFAIL` - fingerprint auth last fail reason
|
||||
|
||||
## Widget List
|
||||
|
||||
### General Remarks
|
||||
|
||||
- All rendered text supports
|
||||
[pango markup](https://docs.gtk.org/Pango/pango_markup.html).
|
||||
- Additionally hyprlock will parse `<br/>` for your convenience. (That's a
|
||||
linebreak) Remember to enable linebreaks in your spans with
|
||||
`allow_breaks="true"`.
|
||||
- Positioning is done via halign, valign, position, and zindex. Position is an added
|
||||
offset to the result of alignment.
|
||||
- halign: `left`, `center`, `right`, `none`. valign: `top`, `center`,
|
||||
`bottom`, `none`
|
||||
- zindex: Widgets with larger numbers will be placed above widgets with smaller numbers. All widgets default to 0, except background which defaults to -1.
|
||||
- All `position` and `size` options can be specified in pixels or as percentages of the output size.
|
||||
- pixels: `10, 10` or `10px, 10px`
|
||||
- percentages: `10%, 10.5%`
|
||||
- mixed: `10%, 5px`
|
||||
- Supported image formats are png, jpg and webp (no animations though)
|
||||
|
||||
### Shadowable
|
||||
|
||||
Some widgets are shadowable, meaning they can have a shadow. For those widgets, you get:
|
||||
|
||||
| Variable | Description | Type | Default |
|
||||
| -- | -- | -- | -- |
|
||||
| `shadow_passes` | Passes for shadow, 0 to disable. | int | `0` |
|
||||
| `shadow_size` | Size for shadow. | int | `3` |
|
||||
| `shadow_color` | Shadow color. | color | `rgb(0,0,0)` |
|
||||
| `shadow_boost` | Boost shadow's opacity. | float | `1.2` |
|
||||
|
||||
### Clickable
|
||||
|
||||
Some widgets are clickable. Namely `label`, `image` and `shape`.
|
||||
You can launch arbitrary commands when clicking on them by configuring the following option within the widget:
|
||||
|
||||
| variable | description | type | default |
|
||||
| -- | -- | -- | -- |
|
||||
| `onclick` | Command to run when clicked. | str | empty |
|
||||
|
||||
### Background
|
||||
|
||||
Draws a background image or fills with color.
|
||||
If `path` is empty or missing, will use `color`, otherwise, the image will be used.
|
||||
|
||||
If `path` is `screenshot`, a screenshot of your desktop at launch will be used.
|
||||
|
||||
| Variable | Description | Type | Default |
|
||||
|--|--|--|--|
|
||||
| `monitor` | Monitor to draw on. | str | empty |
|
||||
| `path` | Image path, `screenshot` or empty to fill with `color`. | str | empty |
|
||||
| `color` | Fallback background color | color | `rgba(17, 17, 17, 1.0)` |
|
||||
| `blur_passes` | The amount of passes to perform. <br> `0` disables blurring. | int | `0` |
|
||||
| `blur_size` | Blur size (distance). | int | `7` |
|
||||
| `noise` | How much noise to apply. | float | `0.0117` |
|
||||
| `contrast` | Contrast modulation for blur. | float | `0.8916` |
|
||||
| `brightness` | Brightness modulation for blur. | float | `0.8172` |
|
||||
| `vibrancy` | Increase saturation of blurred colors. | float | `0.1696` |
|
||||
| `vibrancy_darkness` | How strong the effect of vibrancy is on dark areas. | float | `0.05` |
|
||||
| `reload_time` | Seconds between reloading, `0` to reload with `SIGUSR2`. <br> Ignored if `path` is `screenshot`. | int | `-1` |
|
||||
| `reload_cmd` | Command to get new path. If empty, old path will be used. | str | empty |
|
||||
| `crossfade_time` | Cross-fade time in seconds between old and new background on reload. <br> A negative value means no cross-fade. | float | `-1.0` |
|
||||
| `zindex` | z-index of the widget. | int | `-1` |
|
||||
|
||||
> [!NOTE]
|
||||
> Blur options are taken from hyprland.
|
||||
> See [Variables/#blur](../../Configuring/Variables/#blur).
|
||||
|
||||
{{% details title="Example background" closed="true" %}}
|
||||
|
||||
```ini
|
||||
background {
|
||||
monitor =
|
||||
path = screenshot
|
||||
color = rgba(25, 20, 20, 1.0)
|
||||
blur_passes = 2
|
||||
}
|
||||
```
|
||||
|
||||
{{% /details %}}
|
||||
|
||||
### Image
|
||||
|
||||
✓ Shadowable
|
||||
✓ Clickable
|
||||
|
||||
Draws an image.
|
||||
|
||||
If `path` is empty or missing, nothing will be shown.
|
||||
|
||||
| Variable | Description | Type | Default |
|
||||
|--|--|--|--|
|
||||
| `monitor` | Monitor to draw on | str | _empty_ |
|
||||
| `path` | Image path | str | _empty_ |
|
||||
| `size` | Size scale based on the lesser side of the image. | int | `150` |
|
||||
| `rounding` | Negative values result in a circle. | int | `-1` |
|
||||
| `border_size` | Border size. | int | `4` |
|
||||
| `border_color` | Border color. | gradient | `rgba(221, 221, 221, 1.0)` |
|
||||
| `rotate` | Rotation in degrees, counter-clockwise. | int | `0` |
|
||||
| `reload_time` | Seconds between reloading, `0` to reload with `SIGUSR2`. | int | `-1` |
|
||||
| `reload_cmd` | Command to get new path. if empty, old path will be used. don't run "follow" commands like `tail -F`. | str | _empty_ |
|
||||
| `position` | Position of the image. | layoutxy | `0, 0` |
|
||||
| `halign` | Horizontal alignment. | str | `center` |
|
||||
| `valign` | Vertical alignment. | str | `center` |
|
||||
| `zindex` | z-index of the widget. | int | `0` |
|
||||
|
||||
{{% details title="Example image" closed="true" %}}
|
||||
|
||||
```ini
|
||||
image {
|
||||
monitor =
|
||||
path = /home/me/cutie.png
|
||||
size = 150
|
||||
rounding = 0 # no rounding
|
||||
|
||||
position = 0, 200
|
||||
halign = center
|
||||
valign = center
|
||||
}
|
||||
```
|
||||
|
||||
{{% /details %}}
|
||||
|
||||
### Shape
|
||||
|
||||
✓ Shadowable
|
||||
✓ Clickable
|
||||
|
||||
Draws a shape.
|
||||
|
||||
| Variable | Description | Type | Default |
|
||||
|--|--|--|--|
|
||||
| `monitor` | Monitor to draw on. | str | _empty_ |
|
||||
| `size` | Size of the shape. | layoutxy | 100, 100 |
|
||||
| `color` | Color of the shape. | color | `rgba(17, 17, 17, 1.0)` |
|
||||
| `rounding` | Negative values result in a circle. | int | `-1` |
|
||||
| `rotate` | Rotation in degrees, counter-clockwise. | int | `0` |
|
||||
| `border_size` | Border size. | int | `0` |
|
||||
| `border_color` | Border color. | gradient | `rgba(0, 207, 230, 1.0)` |
|
||||
| `xray` | If `true`, make a "hole" in the background (rectangle of specified size, no rotation). | bool | `false` |
|
||||
| `position` | Position of the shape. | layoutxy | `0, 0` |
|
||||
| `halign` | Horizontal alignment. | str | `center` |
|
||||
| `valign` | Vertical alignment. | str | `center` |
|
||||
| `zindex` | z-index of the widget. | int | `0` |
|
||||
|
||||
|
||||
{{% details title="Example shape" closed="true" %}}
|
||||
|
||||
```ini
|
||||
shape {
|
||||
monitor =
|
||||
size = 360, 60
|
||||
color = rgba(0, 0, 0, 0.0) # no fill
|
||||
rounding = -1 # circle
|
||||
border_size = 4
|
||||
border_color = rgba(0, 207, 230, 1.0)
|
||||
|
||||
position = 0, 80
|
||||
halign = center
|
||||
valign = center
|
||||
}
|
||||
```
|
||||
|
||||
{{% /details %}}
|
||||
|
||||
### Input Field
|
||||
|
||||
✓ Shadowable
|
||||
|
||||
Draws a password input field.
|
||||
|
||||
| Variable | Description | Type | Default |
|
||||
|--|--|--|--|
|
||||
| `monitor` | Monitor to draw on. | str | _empty_ |
|
||||
| `size` | Size of the input field. | layoutxy | `400, 90` |
|
||||
| `outline_thickness` | Thickness of the outline. | int | `4` |
|
||||
| `dots_size` | Size of the dots. [0.2 - 0.8] | float | `0.25` |
|
||||
| `dots_spacing` | Spacing between dots. [-1.0 - 1.0] | float | `0.15` |
|
||||
| `dots_center` | Whether to center the dots. Align left otherwise. | bool | `true` |
|
||||
| `dots_rounding` | Rounding of the dots. | int | `-1` |
|
||||
| `dots_text_format` | Text character(s) used for the input indicator, rounded rectangles are the default. | str | _empty_ |
|
||||
| `outer_color` | Border color. | gradient | `rgba(17, 17, 17, 1.0)` |
|
||||
| `inner_color` | Color of the inner box. | color | `rgba(200, 200, 200, 1.0)` |
|
||||
| `font_color` | Color of the font. | color | `rgba(10, 10, 10, 1.0)` |
|
||||
| `font_family` | Font family. | str | `Noto Sans` |
|
||||
| `fade_on_empty` | Fade the input field when empty. | bool | `true` |
|
||||
| `fade_timeout` | Milliseconds before `fade_on_empty` is triggered. | int | `2000` |
|
||||
| `placeholder_text` | Text rendered in the input box when it's empty. | str | `<i>Input Password...</i>` |
|
||||
| `hide_input` | Render an input indicator similar to swaylock instead of dots when set to `true`. | bool | `false` |
|
||||
| `hide_input_base_color` | This color's hue is randomly rotated (oklab color space) to get colors for `hide_input`. | color | `rgba(153, 170, 187)` |
|
||||
| `rounding` | `-1` means complete rounding (circle/oval). | int | `-1` |
|
||||
| `check_color` | Color accent when waiting for the authentication result. | gradient | `rgba(204, 136, 34, 1.0)` |
|
||||
| `fail_color` | Color accent when authentication fails. | gradient | `rgba(204, 34, 34, 1.0)` |
|
||||
| `fail_text` | Text rendered when authentication fails. | str | `<i>$FAIL <b>($ATTEMPTS)</b></i>` |
|
||||
| `capslock_color` | Color accent when capslock is active. | gradient | _empty_ |
|
||||
| `numlock_color` | Color accent when numlock is active. | gradient | _empty_ |
|
||||
| `bothlock_color` | Color accent when both locks are active. | gradient | _empty_ |
|
||||
| `invert_numlock` | Change color if numlock is off. | bool | `false` |
|
||||
| `swap_font_color` | Swap font and inner colors on color change events. | bool | `false` |
|
||||
| `position` | Position of the input field. | layoutxy | `0, 0` |
|
||||
| `halign` | Horizontal alignment. | str | `center` |
|
||||
| `valign` | Vertical alignment. | str | `center` |
|
||||
| `zindex` | z-index of the widget. | int | `0` |
|
||||
|
||||
> [!NOTE] **Colors information**
|
||||
>
|
||||
> When `outline_thickness` set to `0`, the color of the inner box will be changed instead of the outer.
|
||||
> Behaviour of `swap_font_color` is as follows:
|
||||
> - `outline_thickness` is `0`: if set, font color will be swapped with inner one on color change events (e.g. Caps-lock on or password check).
|
||||
> - `outline_thickness` is not `0`: if set, font and inner colors will be swapped on password check and authentication failure.
|
||||
> - `swap_font_color` will narrow the accent colors from a gradient to a single color by using the first specified color.
|
||||
|
||||
`placeholder_text` and `fail_text` both support [variable substitution](#variable-substitution).
|
||||
|
||||
{{% details title="Example input-field" closed="true" %}}
|
||||
|
||||
```ini
|
||||
input-field {
|
||||
monitor =
|
||||
size = 20%, 5%
|
||||
outline_thickness = 3
|
||||
inner_color = rgba(0, 0, 0, 0.0) # no fill
|
||||
|
||||
outer_color = rgba(33ccffee) rgba(00ff99ee) 45deg
|
||||
check_color=rgba(00ff99ee) rgba(ff6633ee) 120deg
|
||||
fail_color=rgba(ff6633ee) rgba(ff0066ee) 40deg
|
||||
|
||||
font_color = rgb(143, 143, 143)
|
||||
fade_on_empty = false
|
||||
rounding = 15
|
||||
|
||||
position = 0, -20
|
||||
halign = center
|
||||
valign = center
|
||||
}
|
||||
```
|
||||
{{% /details %}}
|
||||
|
||||
### Label
|
||||
|
||||
✓ Shadowable
|
||||
✓ Clickable
|
||||
|
||||
Draws a label.
|
||||
|
||||
| Variable | Description | Type | Default |
|
||||
|--|--|--|--|
|
||||
| `monitor` | Monitor to draw on. | str | _empty_ |
|
||||
| `text` | Text to render. | str | `Sample Text` |
|
||||
| `text_align` | Multi-line text alignment inside label container. center/right or any value for default left. | str | `center` |
|
||||
| `color` | Color of the text. | color | `rgba(254, 254, 254, 1.0)` |
|
||||
| `font_size` | Size of the font. | int |`16` |
|
||||
| `font_family` | Font family. | str | `Sans` |
|
||||
| `rotate` | Rotation in degrees, counter-clockwise. | int | `0` |
|
||||
| `position` | Position of the label. | layoutxy | `0, 0` |
|
||||
| `halign` | Horizontal alignment. | str | `center` |
|
||||
| `valign` | Vertical alignment. | str | `center` |
|
||||
|
||||
|
||||
#### Dynamic Labels
|
||||
|
||||
The `text` option supports [variable substitution](#variable-substitution) and launching shell commands.
|
||||
For example:
|
||||
|
||||
```ini
|
||||
text = cmd[update:1000] echo "<span foreground='##ff2222'>$(date)</span>"
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> - `update:` time is in ms.
|
||||
> - label can be forcefully updated by specifying `update:<time>:1` or `update:<time>:true` and sending `SIGUSR2` to hyprlock, `<time>` can be `0` in this case.
|
||||
> - `$ATTEMPTS[<string>]` format can be used to show `<string>` when there are no failed attempts.
|
||||
You can use pango-markup here. `<string>` can be empty to hide.
|
||||
> - `$LAYOUT[<str0>,<str1>,...]` format is available to replace indexed layouts.
|
||||
You can use settings from `hyprland.conf`, e.g. `$LAYOUT[en,ru,de]`.
|
||||
Also, a single `!` character will hide layout. E.g. `$LAYOUT[!]` will hide default (0 indexed) and show others.
|
||||
> - `$TIME` and `$TIME12` will use timezone from the TZ environment variable.
|
||||
If it's not set, the system timezone will be used, falling back to UTC in case of errors.
|
||||
> - Variables seen above are parsed _before_ the command is ran.
|
||||
> - **Do not** run commands that never exit. This will hang the `AsyncResourceGatherer` and you won't have a good time.
|
||||
|
||||
{{% details title="Example label" closed="true" %}}
|
||||
|
||||
```ini
|
||||
label {
|
||||
monitor =
|
||||
text = Hi there, $USER
|
||||
color = rgba(200, 200, 200, 1.0)
|
||||
font_size = 25
|
||||
font_family = Noto Sans
|
||||
|
||||
position = 0, 80
|
||||
halign = center
|
||||
valign = center
|
||||
}
|
||||
```
|
||||
|
||||
{{% /details %}}
|
||||
|
||||
|
||||
## User Signals
|
||||
|
||||
- `SIGUSR1`: Unlocks hyprlock. For example, you can switch to a another tty and run `pkill -USR1 hyprlock`.
|
||||
- `SIGUSR2`: Updates labels and images. See above.
|
||||
@@ -0,0 +1,90 @@
|
||||
---
|
||||
weight: 1
|
||||
title: hyprpaper
|
||||
---
|
||||
|
||||
[hyprpaper](https://github.com/hyprwm/hyprpaper) is a fast, IPC-controlled wallpaper utility for Hyprland.
|
||||
|
||||
## Installation
|
||||
|
||||
{{% details title="Arch" closed="true" %}}
|
||||
|
||||
```sh
|
||||
pacman -S hyprpaper
|
||||
```
|
||||
|
||||
{{% /details %}}
|
||||
|
||||
{{% details title="openSUSE" closed="true" %}}
|
||||
|
||||
```sh
|
||||
zypper install hyprpaper
|
||||
```
|
||||
|
||||
{{% /details %}}
|
||||
|
||||
{{% details title="Fedora" closed="true" %}}
|
||||
|
||||
```sh
|
||||
sudo dnf install hyprpaper
|
||||
```
|
||||
|
||||
{{% /details %}}
|
||||
|
||||
## Configuration
|
||||
|
||||
The config file is located at `~/.config/hypr/hyprpaper.conf`. It is not
|
||||
required.
|
||||
|
||||
### Setting wallpapers
|
||||
|
||||
Wallpapers are set as anonymous special categories. Monitor can be left empty for a fallback.
|
||||
|
||||
| variable | description | value |
|
||||
| --- | --- | --- |
|
||||
| `monitor` | Monitor to display this wallpaper on. If empty, will use this wallpaper as a fallback | monitor ID |
|
||||
| `path` | Path to the image file | path |
|
||||
| `fit_mode` | Determines how to display the image. Optional and defaults to `cover` | `contain`\|`cover`\|`tile`\|`fill` |
|
||||
|
||||
```ini
|
||||
wallpaper {
|
||||
monitor = DP-3
|
||||
path = ~/myFile.jxl
|
||||
fit_mode = cover
|
||||
}
|
||||
|
||||
wallpaper {
|
||||
monitor = DP-2
|
||||
path = ~/myFile2.jxl
|
||||
fit_mode = cover
|
||||
}
|
||||
|
||||
# ...
|
||||
```
|
||||
|
||||
|
||||
### Run at Startup
|
||||
|
||||
To run hyprpaper at startup edit `hyprland.conf` and add: `exec-once = hyprpaper`.
|
||||
If you start Hyprland with [uwsm](../../Useful-Utilities/Systemd-start), you can also use the `systemctl --user enable --now hyprpaper.service` command.
|
||||
|
||||
### Misc Options
|
||||
|
||||
These should be set outside of the `wallpaper{...}` sections.
|
||||
|
||||
| variable | description | type | default |
|
||||
| --- | --- | --- | --- |
|
||||
| `splash` | enable rendering of the hyprland splash over the wallpaper | bool | `true` |
|
||||
| `splash_offset` | how far up should the splash be displayed | float | `20` |
|
||||
| `splash_opacity` | how opaque the splash is | float | `0.8` |
|
||||
| `ipc` | whether to enable IPC | bool | `true` |
|
||||
|
||||
## IPC
|
||||
|
||||
hyprpaper supports IPC via `hyprctl`. You can set wallpapers like so:
|
||||
|
||||
```sh
|
||||
hyprctl hyprpaper wallpaper '[mon], [path], [fit_mode]'
|
||||
```
|
||||
|
||||
`fit_mode` is optional, and `mon` can be empty for a fallback, just like in the config file.
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
weight: 2
|
||||
title: hyprpicker
|
||||
---
|
||||
|
||||
[hyprpicker](https://github.com/hyprwm/hyprpicker) is a neat utility for picking a color from your screen on Hyprland.
|
||||
|
||||
## Configuration
|
||||
|
||||
Doesn't require configuration, only launch flags:
|
||||
|
||||
| Flag | Description | Args |
|
||||
| --- | --- | --- |
|
||||
| `-a` \| `--autocopy` | Automatically copies the output to the clipboard (requires wl-clipboard) | none |
|
||||
| `-f` \| `--format=` | Specifies the output format | `cmyk` \| `hex` \| `rgb` \| `hsl` \| `hsv` |
|
||||
| `-n` \| `--no-fancy` | Disables the "fancy" (aka. colored) outputting | none |
|
||||
| `-h` \| `--help` | Shows the help message | none |
|
||||
| `-r` \| `--render-inactive` | Render (freeze) inactive displays | none |
|
||||
| `-z` \| `--no-zoom` | Disable the zoom lens | none |
|
||||
| `-q` \| `--quiet` | Disable most logs (leaves errors) | none |
|
||||
| `-v` \| `--verbose` | Enable more logs | none |
|
||||
| `-t` \| `--no-fractional` | Disable fractional scaling support | none |
|
||||
| `-d` \| `--disable-hex-preview` | Disable live preview of Hex code | none |
|
||||
| `-l` \| `--lowercase-hex` | Outputs the hexcode in lowercase | none |
|
||||
| `-V` \| `--version` | Print version info | none |
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
weight: 11
|
||||
title: hyprpolkitagent
|
||||
---
|
||||
|
||||
[hyprpolkitagent](https://github.com/hyprwm/hyprpolkitagent) is a polkit authentication daemon. It is required for GUI applications to
|
||||
be able to request elevated privileges.
|
||||
|
||||
If it's not available in your distro's repositories, you can either [build it from source](https://github.com/hyprwm/hyprpolkitagent)
|
||||
or use a different agent, e.g. [KDE's one](https://github.com/KDE/polkit-kde-agent-1/).
|
||||
|
||||
## Usage
|
||||
|
||||
Add `exec-once = systemctl --user start hyprpolkitagent` to your Hyprland config and restart hyprland.
|
||||
(obviously change that to whatever you are using if you are not using the hypr one)
|
||||
|
||||
If Hyprland is started with [uwsm](../../Useful-Utilities/Systemd-start), you can autostart the polkit agent with the command `systemctl --user enable --now hyprpolkitagent.service`.
|
||||
|
||||
On distributions that use a different init system, such as Gentoo, it may be
|
||||
necessary to use
|
||||
`exec-once=/usr/lib64/libexec/hyprpolkitagent` instead.
|
||||
|
||||
Other possible paths include
|
||||
`/usr/lib/hyprpolkitagent` and
|
||||
`/usr/libexec/hyprpolkitagent`.
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
weight: 14
|
||||
title: hyprpwcenter
|
||||
---
|
||||
|
||||
[hyprpwcenter](https://github.com/hyprwm/hyprpwcenter) is a GUI control center for pipewire. It allows to
|
||||
look and confiure nodes, outputs, and adjust the pw graph.
|
||||
@@ -0,0 +1,39 @@
|
||||
---
|
||||
weight: 13
|
||||
title: hyprqt6engine
|
||||
---
|
||||
|
||||
[hyprqt6engine](https://github.com/hyprwm/hyprqt6engine) provides a theme for QT6 apps. It's a replacement for qt6ct, compatible with KDE Apps / KColorScheme.
|
||||
|
||||
## Usage
|
||||
|
||||
Install, then set `QT_QPA_PLATFORMTHEME=hyprqt6engine`.
|
||||
You can set this as `env=` in Hyprland, or in `/etc/environment` for setting it system-wide.
|
||||
|
||||
## Configuration
|
||||
|
||||
The config file is located in `~/.config/hypr/hyprqt6engine.conf`.
|
||||
|
||||
### Theme
|
||||
|
||||
category `theme:`
|
||||
|
||||
| Variable | Description | Type | Default |
|
||||
| --- | --- | --- | --- |
|
||||
| `color_scheme` | The full path to a color scheme. <br> Can be a qt6ct theme, or a KColorScheme. <br> Leave empty for defaults. | string | _empty_ |
|
||||
| `icon_theme` | Name of an icon theme to use. | string | _empty_ |
|
||||
| `style` | Widget style to use, e.g. Fusion or kvantum-dark. | string | `Fusion` |
|
||||
| `font_fixed` | Font family for the fixed width font. | string | `monospace` |
|
||||
| `font_fixed_size` | Font size for the fixed width font. | int | `11` |
|
||||
| `font` | Font family for the regular font. | string | `Sans Serif` |
|
||||
| `font_size` | Font size for the regular font. | int | `11` |
|
||||
|
||||
### Misc
|
||||
|
||||
category `misc:`
|
||||
|
||||
| Variable | Description | Type | Default |
|
||||
| --- | --- | --- | --- |
|
||||
| `single_click_activate` | Whether single-clicks should activate, or open. | bool | `true` |
|
||||
| `menus_have_icons` | Whether context menus should include icons. | bool | `true` |
|
||||
| `shortcuts_for_context_menus` | Whether context menu options should show their keyboard shortcuts. | bool | `true` |
|
||||
@@ -0,0 +1,18 @@
|
||||
---
|
||||
weight: 15
|
||||
title: hyprshutdown
|
||||
---
|
||||
|
||||
[hyprshutdown](https://github.com/hyprwm/hyprshutdown) is a graceful shutdown utility. It opens
|
||||
a GUI and gracefully asks apps to exit, then quits Hyprland. It's the recommended way to exit hyprland,
|
||||
as otherwise (e.g. `dispatch exit`) apps will die instead of exiting.
|
||||
|
||||
## Tips and tricks
|
||||
|
||||
If you want to shut the system down, or reboot, instead of logging out, you can do things like this:
|
||||
|
||||
```sh
|
||||
hyprshutdown -t 'Shutting down...' --post-cmd 'shutdown -P 0'
|
||||
|
||||
hyprshutdown -t 'Restarting...' --post-cmd 'reboot'
|
||||
```
|
||||
@@ -0,0 +1,122 @@
|
||||
---
|
||||
weight: 10
|
||||
title: hyprsunset
|
||||
---
|
||||
|
||||
[hyprsunset](https://github.com/hyprwm/hyprsunset) is a small utility to provide a blue light filter
|
||||
for your system.
|
||||
|
||||
This method is preferred to screen shaders as it will _not_ be captured via recording / screenshots.
|
||||
|
||||
hyprsunset also provides a gamma filter, which can be used to
|
||||
adjust perceived display brightness on monitors that do not
|
||||
support software control, or to reduce perceived brightness
|
||||
below the monitor's minimum.
|
||||
|
||||
> [!WARNING]
|
||||
> `hyprsunset` is supported since Hyprland 0.45.0.
|
||||
|
||||
## Installation
|
||||
|
||||
{{< tabs items="Arch Linux" >}}
|
||||
|
||||
{{< tab "Arch Linux" >}}
|
||||
|
||||
```sh
|
||||
pacman -S hyprsunset
|
||||
```
|
||||
|
||||
{{< /tab >}}
|
||||
|
||||
{{< /tabs >}}
|
||||
|
||||
|
||||
## Configuration
|
||||
|
||||
Configuration is done via the config file at `~/.config/hypr/hyprsunset.conf`.
|
||||
This file is not required for running hyprsunset, though recommended.
|
||||
|
||||
Hyprsunset uses profiles to determine when to change temperature and gamma.
|
||||
You can define as many profiles as you like.
|
||||
Each Profile is activated at it's specified time and resets all options set by other profiles.
|
||||
|
||||
On startup, hyprsunset will apply the current profile.
|
||||
For example, when launching hyprsunset with the following example config at 20:00, it will activate the first profile, essentially changing nothing.
|
||||
Once the clock strikes 21:00, hyprsunset will automatically apply the new profile.
|
||||
|
||||
**Example Configuration**
|
||||
```ini
|
||||
max-gamma = 150
|
||||
|
||||
profile {
|
||||
time = 7:30
|
||||
identity = true
|
||||
}
|
||||
|
||||
profile {
|
||||
time = 21:00
|
||||
temperature = 5500
|
||||
gamma = 0.8
|
||||
}
|
||||
```
|
||||
|
||||
| Variable | Description | Type | Default |
|
||||
| -- | -- | -- | -- |
|
||||
| `max-gamma` | The maximum the gamma value can be. <br> Absolute maximum is `200`%. <br> Mostly useful when controlling hyprsunset via IPC. | int | `100` |
|
||||
|
||||
### Profile
|
||||
|
||||
| Variable | Description | Type | Default |
|
||||
| -- | -- | -- | -- |
|
||||
| `time` | The time at which the profile should be activated. <br> Must be in the format {hours}:{minutes} | string | `00:00` |
|
||||
| `temperature` | The screen temperature. Lower means warmer. | int | `6000` |
|
||||
| `gamma` | The perceived brightness of the screen. <br> This will allow you to lower the brightness beyond your screen's minimum. | float | `1.0` |
|
||||
| `identity` | When set, the value of temperature is ignored and the only effect of hyprsunset is the change in apparent brightness by gamma. | bool | `false` |
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
To autostart hyprsunset, add: `exec-once = hyprsunset` to your `hyprland.conf`.
|
||||
Alternatively, use `systemctl --user enable --now hyprsunset.service` in order to use hyprsunset as a systemd user service.
|
||||
|
||||
Hyprsunset can also be controlled by supplying arguments to the command.
|
||||
By specifying `hyprsunset --temperature 5000` you will override the current active config's temperature setting. This however, will be overridden once a new profile is activated.
|
||||
|
||||
For more information on cli arguments, run `hyprsunset --help`
|
||||
|
||||
## IPC
|
||||
|
||||
`hyprsunset` supports IPC via hyprctl.
|
||||
Both color temperature and the gamma filter are adjustable:
|
||||
|
||||
```sh
|
||||
# Enable blue-light filter
|
||||
hyprctl hyprsunset temperature 2500
|
||||
# Disable blue-light filter
|
||||
hyprctl hyprsunset identity
|
||||
|
||||
# Set gamma to 50%
|
||||
hyprctl hyprsunset gamma 50
|
||||
# Increase gamma by 10%
|
||||
hyprctl hyprsunset gamma +10
|
||||
|
||||
# Reset config to current profile
|
||||
hyprctl hyprsunset reset
|
||||
# Reset value to current profile
|
||||
hyprctl hyprsunset reset temperature
|
||||
hyprctl hyprsunset reset gamma
|
||||
hyprctl hyprsunset reset identity
|
||||
|
||||
# Print current profile
|
||||
hyprctl hyprsunset profile
|
||||
```
|
||||
|
||||
This can be used by other software to change the temperature throughout the day, or to adjust perceieved
|
||||
monitor brightness, such as with the following Hyprland keybinds:
|
||||
```ini
|
||||
bindel = ,XF86MonBrightnessDown, exec, hyprctl hyprsunset gamma -10
|
||||
bindel = ,XF86MonBrightnessUp, exec, hyprctl hyprsunset gamma +10
|
||||
```
|
||||
|
||||
> [!WARNING]
|
||||
> Using the gamma control will degrade color accuracy. If your monitor does support software control, it is highly recommended to use that instead.
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
weight: 9
|
||||
title: hyprsysteminfo
|
||||
---
|
||||
|
||||
[hyprsysteminfo](https://github.com/hyprwm/hyprsysteminfo) is a small GUI application to display your system information,
|
||||
as well as easily copy the hyprland version or system info to your clipboard.
|
||||
@@ -0,0 +1,33 @@
|
||||
---
|
||||
weight: 100
|
||||
title: hyprtoolkit
|
||||
---
|
||||
|
||||
[hyprtoolkit](https://github.com/hyprwm/hyprtoolkit) is a GUI toolkit for developing applications that run natively on Wayland.
|
||||
It's specifically made for Hyprland's needs, but will generally run on any Wayland compositor
|
||||
that supports modern standards.
|
||||
|
||||
For developer docs, see [development](./development)
|
||||
|
||||
## Configuration
|
||||
|
||||
The general toolkit config is at `~/.config/hypr/hyprtoolkit.conf`.
|
||||
It contains theming and some minor adjustments.
|
||||
|
||||
| Variable | Description | Type | Default |
|
||||
| --- | --- | --- | --- |
|
||||
| `background` | Background color. | color | `FF181818` |
|
||||
| `base` | Base color. | color | `FF202020` |
|
||||
| `text` | Text color. | color | `FFDADADA` |
|
||||
| `alternate_base` | Alternative base color. | color | `FF272727` |
|
||||
| `bright_text` | Bright text color. | color | `FFFFDEDE` |
|
||||
| `accent` | Accent color. | color | `FF00FFCC` |
|
||||
| `accent_secondary` | Secondary accent color. | color | `FF0099F0` |
|
||||
| `h1_size` | Font size for H1. | int | `19` |
|
||||
| `h2_size` | Font size for H2. | int | `15` |
|
||||
| `h3_size` | Font size for H3. | int | `13` |
|
||||
| `font_size` | Font size for regular text elements. | int | `11` |
|
||||
| `small_font_size` | Font size for small text elements. | int | `10` |
|
||||
| `icon_theme` | Name of the icon theme to use, empty for "the first found". | string | _empty_ |
|
||||
| `font_family` | Name of the font family to use. | string | `Sans Serif` |
|
||||
| `font_family_monospace` | Name of the monospace font family to use. | string | `monospace` |
|
||||
@@ -0,0 +1,138 @@
|
||||
---
|
||||
weight: 50
|
||||
title: Development
|
||||
---
|
||||
|
||||
Hyprtoolkit is a pure C++ toolkit. It relies on modern C++ in the Hyprland style (with
|
||||
hyprutils, etc).
|
||||
|
||||
It's recommended you are familiar with C++ before developing an app.
|
||||
|
||||
## Getting Started
|
||||
|
||||
_If you prefer living off of examples, see the `tests/` directory in the hyprtoolkit repo._
|
||||
|
||||
Start by creating a backend and opening a window:
|
||||
```cpp
|
||||
// in this example we are doing this to skip Hyprtoolkit::
|
||||
using namespace Hyprtoolkit;
|
||||
|
||||
auto backend = CBackend::create();
|
||||
auto window = CWindowBuilder::begin()->appTitle("Hello")->appClass("hyprtoolkit")->commence();
|
||||
```
|
||||
|
||||
this will create (but not yet open) a window handle for you.
|
||||
|
||||
Hyprtoolkit is a retained mode toolkit, so you can define your layout with C++ and forget about it.
|
||||
|
||||
First thing we need is a background rectangle, by doing this:
|
||||
```cpp
|
||||
window->m_rootElement->addChild(CRectangleBuilder::begin()->color([] { return backend->getPalette()->m_colors.background; })->commence());
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> Remember to always use the palette when possible for your app to adhere to the user's theme.
|
||||
|
||||
All elements are under `hyprtoolkit/elements/`, you can browse through them. Let's add a simple layout with
|
||||
some buttons:
|
||||
|
||||
```cpp
|
||||
auto layout = CColumnLayoutBuilder::begin()->size({CDynamicSize::HT_SIZE_PERCENT, CDynamicSize::HT_SIZE_PERCENT, {1.F, 1.F}})->commence();
|
||||
layout->setMargin(3);
|
||||
|
||||
window->m_rootElement->addChild(layout);
|
||||
|
||||
layout->addChild(CButtonBuilder::begin()
|
||||
->label("Do something")
|
||||
->onMainClick([](SP<CButtonElement> el) { std::println("Did something!"); })
|
||||
->size({CDynamicSize::HT_SIZE_AUTO, CDynamicSize::HT_SIZE_AUTO, {1, 1}})
|
||||
->commence()
|
||||
);
|
||||
layout->addChild(CButtonBuilder::begin()
|
||||
->label("Do something else")
|
||||
->onMainClick([](SP<CButtonElement> el) { std::println("Did something else!"); })
|
||||
->size({CDynamicSize::HT_SIZE_AUTO, CDynamicSize::HT_SIZE_AUTO, {1, 1}})
|
||||
->commence()
|
||||
);
|
||||
```
|
||||
|
||||
This adds a column layout (elements are stacked on top of each other) with two buttons. These buttons have automatic sizing, so will fit their contents.
|
||||
|
||||
Once you are done, add a close callback, open the window and enter the main loop:
|
||||
```cpp
|
||||
window->m_events.closeRequest.listenStatic([w = WP<IWindow>{window}] {
|
||||
w->close();
|
||||
backend->destroy();
|
||||
});
|
||||
|
||||
window->open();
|
||||
|
||||
backend->enterLoop();
|
||||
```
|
||||
|
||||
## Layout System
|
||||
|
||||
The layout system relies on absolute and layout positioning modes. Let's zoom into both:
|
||||
|
||||
### Absolute Mode
|
||||
|
||||
This happens when the parent of your element is anything but a `ColumnLayout` or a `RowLayout`. Children are positioned within their parent, accoding to their
|
||||
position mode. You can set it with `setPositionMode` and add offsets with `setAbsolutePosition`.
|
||||
|
||||
For example:
|
||||
- `setPositionMode` with `CENTER` will center the child inside the parent.
|
||||
- `setPositionMode` with `ABSOLUTE` will make it be in the top left corner.
|
||||
- Adding `setAbsolutePosition` to the above with `{200, 200}` will move it 200 layout px down and right from the top left corner of the parent.
|
||||
|
||||
### Layout Mode
|
||||
|
||||
This happens when the parent of your element is a layout. These will attempt to position your child elements. They work similarly to CSS's `flex` and qt's `RowLayout` and `ColumnLayout`,
|
||||
but will not wrap. If elements overflow and cannot shrink, they will disappear.
|
||||
|
||||
RowLayout positions elements next to each other side-by-side, while ColumnLayout does it top-bottom.
|
||||
|
||||
### Size
|
||||
|
||||
All elements carry a `SizeType`. This tells the layout system how to size the element.
|
||||
- `ABSOLUTE` takes layout px as size and makes the element rigid.
|
||||
- `PERCENT` takes a percentage in the form of `(0, 0) - (1, 1)` and will be the size of the parent multiplied by the percentage.
|
||||
- `AUTO` ignores the passed vector (leave it empty) and instead will always attempt to contain the children\*
|
||||
|
||||
> [!NOTE]
|
||||
> Some elements will force their own sizing, e.g. `Text`.
|
||||
Leave them `AUTO` to avoid confusion.
|
||||
|
||||
## Elements
|
||||
|
||||
Most elements are self-explanatory. You can explore their builder functions to see what styling / behavior options they support.
|
||||
|
||||
Each element is created with a `Builder` which is there to maintain ABI stability. After you call `->commence()`, you
|
||||
will get a `SP` to the newly created object.
|
||||
|
||||
You can rebuild the object at any time by calling `->rebuild()` and you'll get a builder again.
|
||||
**Remember to call `commence()` after you are done to apply the changes!**
|
||||
|
||||
You do not need to keep the `SP` after adding the element to the tree with `addChild`.
|
||||
|
||||
## Other
|
||||
|
||||
Other, miscellaneous stuff
|
||||
|
||||
### System Icons
|
||||
|
||||
Use the `CBackend::systemIcons()` function to obtain a reference to `ISystemIconFactory` which allows
|
||||
you to query system icons by name.
|
||||
You can check the obtained result object to see if the icon was found.
|
||||
Then, you can take that object and slap it into an `ImageElement` to add it to your layout.
|
||||
|
||||
### Additional FDs
|
||||
|
||||
If you have an app that depends on some other loop, e.g. pipewire, dbus, etc. you need to remember
|
||||
that hyprtoolkit is strictly single-threaded for layout and rendering.
|
||||
You cannot edit the layout from another thread.
|
||||
|
||||
For this, use `CBackend::addFd()` to add a FD to the loop alongside a function that will be called once the fd
|
||||
is readable.
|
||||
This function will be called from the main thread, so you can do whatever you want in there.
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
weight: 102
|
||||
title: hyprutils
|
||||
---
|
||||
|
||||
[hyprutils](https://github.com/hyprwm/hyprutils) is a library providing shared implementations of commonly used types across the hypr* ecosystem.
|
||||
@@ -0,0 +1,9 @@
|
||||
---
|
||||
weight: 104
|
||||
title: hyprwayland-scanner
|
||||
---
|
||||
|
||||
[hyprwayland-scanner](https://github.com/hyprwm/hyprwayland-scanner), also called hw-s, is a utility to generate sources and headers
|
||||
for wayland protocol specifications.
|
||||
|
||||
It is similar to wayland-scanner, but instead of C, it generates neat and safe C++ implementations.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user