feat: uwsm integration and hyprland worktime saver keybinds
- Replace SDDM with greetd+tuigreet (VT1) using uwsm-managed Hyprland - Remove legacy exec-once from hyprland.conf - Create 6 systemd user services: hyprpaper, waybar, dunst, hypridle, hyprlauncher, cliphist (all WantedBy=graphical-session.target) - Add worktime saver keybinds: fullscreen, float, cycle windows, scratchpad, reload config, browser, keybind menu - Home row navigation: HJKL for focus, move, resize (SUPER+ALT) - Replace wofi with hyprlauncher (first-party, uwsm app prefix) - Add hyprlauncher config with finders: desktop, math, unicode, font - New ansible role templates: systemd/user services - Documentation: hyprland-uwsm.md, cheatsheet.txt KDE Wallet -> Bitwarden migration deferred (extract script prepared)
This commit is contained in:
@@ -4,5 +4,5 @@ vt = 1
|
|||||||
|
|
||||||
# Default session: tuigreet greeter
|
# Default session: tuigreet greeter
|
||||||
[default_session]
|
[default_session]
|
||||||
command = "tuigreet --time --remember --asterisks --cmd {{ hyprland_cmd | default('Hyprland') }}"
|
command = "tuigreet --time --remember --asterisks --cmd {{ hyprland_cmd | default('start-hyprland') }}"
|
||||||
user = "greeter"
|
user = "greeter"
|
||||||
|
|||||||
@@ -8,13 +8,9 @@ monitor=DP-1,2560x1440@144,0x0,1
|
|||||||
monitor=DVI-D-1,1920x1080@60,2560x0,1,transform,1
|
monitor=DVI-D-1,1920x1080@60,2560x0,1,transform,1
|
||||||
monitor=HDMI-A-1,2560x1440@144,3640x0,1
|
monitor=HDMI-A-1,2560x1440@144,3640x0,1
|
||||||
|
|
||||||
# Execute on start
|
# Session services: hyprpaper, waybar, dunst, hypridle, hyprlauncher, cliphist
|
||||||
exec-once = hyprpaper
|
# Managed by systemd user units under ~/.config/systemd/user/
|
||||||
exec-once = waybar
|
# All WantedBy=graphical-session.target for uwsm integration
|
||||||
exec-once = dunst
|
|
||||||
exec-once = hypridle
|
|
||||||
exec-once = wl-paste --type text --watch cliphist store
|
|
||||||
exec-once = wl-paste --type image --watch cliphist store
|
|
||||||
|
|
||||||
# Environment variables for NVIDIA
|
# Environment variables for NVIDIA
|
||||||
env = LIBVA_DRIVER_NAME,nvidia
|
env = LIBVA_DRIVER_NAME,nvidia
|
||||||
@@ -73,10 +69,37 @@ bind = $mainMod, C, killactive,
|
|||||||
bind = $mainMod, M, exit,
|
bind = $mainMod, M, exit,
|
||||||
bind = $mainMod, E, exec, dolphin
|
bind = $mainMod, E, exec, dolphin
|
||||||
bind = $mainMod, V, togglefloating,
|
bind = $mainMod, V, togglefloating,
|
||||||
bind = $mainMod, D, exec, wofi --show drun
|
bind = $mainMod, D, exec, hyprlauncher
|
||||||
bind = $mainMod, P, pseudo
|
bind = $mainMod, P, pseudo
|
||||||
bind = $mainMod, J, layoutmsg, togglesplit
|
bind = $mainMod, J, layoutmsg, togglesplit
|
||||||
bind = $mainMod, L, exec, hyprlock
|
|
||||||
|
# Worktime safers
|
||||||
|
bind = $mainMod, F, fullscreen, 0 # Toggle fullscreen
|
||||||
|
bind = $mainMod, SPACE, togglefloating # Toggle float (popup window)
|
||||||
|
bind = $mainMod, TAB, cyclenext # Cycle through windows
|
||||||
|
bind = $mainMod SHIFT, TAB, cyclenext, prev # Cycle backwards
|
||||||
|
bind = $mainMod, GRAVE, togglespecialworkspace # Scratchpad (toggle)
|
||||||
|
bind = $mainMod SHIFT, GRAVE, movetoworkspace, special # Send to scratchpad
|
||||||
|
bind = $mainMod CTRL, K, exec, grep -E '^bind\s*=.*#' ~/.config/hypr/hyprland.conf | sed 's/^bind\s*=\s*\$mainMod/SUPER/;s/\s*#/#/' | fuzzel -d
|
||||||
|
|
||||||
|
# Home row navigation aliases (keep arrows too)
|
||||||
|
bind = $mainMod, H, movefocus, l
|
||||||
|
bind = $mainMod, L, movefocus, r
|
||||||
|
|
||||||
|
# HJKL + SHIFT = move window in direction (home row)
|
||||||
|
bind = $mainMod SHIFT, H, movewindow, l
|
||||||
|
bind = $mainMod SHIFT, L, movewindow, r
|
||||||
|
bind = $mainMod SHIFT, K, movewindow, u
|
||||||
|
bind = $mainMod SHIFT, J, movewindow, d
|
||||||
|
|
||||||
|
# Window resize via home row (SUPER+ALT)
|
||||||
|
bind = $mainMod ALT, H, resizeactive, -40 0
|
||||||
|
bind = $mainMod ALT, L, resizeactive, 40 0
|
||||||
|
bind = $mainMod ALT, K, resizeactive, 0 -40
|
||||||
|
bind = $mainMod ALT, J, resizeactive, 0 40
|
||||||
|
|
||||||
|
# Lock screen
|
||||||
|
bind = $mainMod CTRL, L, exec, hyprlock
|
||||||
|
|
||||||
# Focus
|
# Focus
|
||||||
bind = $mainMod, left, movefocus, l
|
bind = $mainMod, left, movefocus, l
|
||||||
@@ -90,6 +113,15 @@ bind = $mainMod, right, movefocus, r
|
|||||||
bind = $mainMod, up, movefocus, u
|
bind = $mainMod, up, movefocus, u
|
||||||
bind = $mainMod, down, movefocus, d
|
bind = $mainMod, down, movefocus, d
|
||||||
|
|
||||||
|
# Move window to adjacent tile/monitor
|
||||||
|
bind = $mainMod SHIFT, left, movewindow, l
|
||||||
|
bind = $mainMod SHIFT, right, movewindow, r
|
||||||
|
bind = $mainMod SHIFT, up, movewindow, u
|
||||||
|
bind = $mainMod SHIFT, down, movewindow, d
|
||||||
|
|
||||||
|
# Apps
|
||||||
|
bind = $mainMod, B, exec, chromium
|
||||||
|
|
||||||
# Workspaces
|
# Workspaces
|
||||||
bind = $mainMod, 1, workspace, 1
|
bind = $mainMod, 1, workspace, 1
|
||||||
bind = $mainMod, 2, workspace, 2
|
bind = $mainMod, 2, workspace, 2
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Cliphist clipboard store
|
||||||
|
PartOf=graphical-session.target
|
||||||
|
After=graphical-session.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/bin/sh -c '/usr/bin/wl-paste --type text --watch /usr/bin/cliphist store & /usr/bin/wl-paste --type image --watch /usr/bin/cliphist store & wait'
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=3
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=graphical-session.target
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Dunst notification daemon
|
||||||
|
PartOf=graphical-session.target
|
||||||
|
After=graphical-session.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/bin/dunst
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=3
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=graphical-session.target
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Hyprland idle daemon
|
||||||
|
PartOf=graphical-session.target
|
||||||
|
After=graphical-session.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/bin/hypridle
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=3
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=graphical-session.target
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Hyprlauncher daemon
|
||||||
|
PartOf=graphical-session.target
|
||||||
|
After=graphical-session.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStartPre=/usr/bin/sleep 2
|
||||||
|
ExecStart=/usr/bin/hyprlauncher -d
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=3
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=graphical-session.target
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Hyprland Wallpaper daemon
|
||||||
|
PartOf=graphical-session.target
|
||||||
|
After=graphical-session.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/bin/hyprpaper
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=3
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=graphical-session.target
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Waybar status bar
|
||||||
|
PartOf=graphical-session.target
|
||||||
|
After=graphical-session.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/bin/waybar
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=3
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=graphical-session.target
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
Hyprland Keybindings Cheat Sheet
|
||||||
|
================================
|
||||||
|
$mainMod = SUPER (Windows key) | Monitors: DP-1 | DVI-D-1 (rotated) | HDMI-A-1
|
||||||
|
|
||||||
|
APPS
|
||||||
|
SUPER+Q Terminal (kitty)
|
||||||
|
SUPER+B Browser (chromium)
|
||||||
|
SUPER+E File manager (dolphin)
|
||||||
|
SUPER+D App launcher (hyprlauncher)
|
||||||
|
|
||||||
|
WORKTIME SAVERS
|
||||||
|
SUPER+F Toggle fullscreen
|
||||||
|
SUPER+SPACE Toggle floating (popup window)
|
||||||
|
SUPER+TAB Cycle next window
|
||||||
|
SUPER+SHIFT+TAB Cycle previous window
|
||||||
|
SUPER+` Toggle scratchpad (special workspace)
|
||||||
|
SUPER+SHIFT+` Send window to scratchpad
|
||||||
|
SUPER+P Pseudo mode (tile/float hybrid)
|
||||||
|
SUPER+J Toggle split direction
|
||||||
|
|
||||||
|
HOME ROW NAVIGATION (HJKL)
|
||||||
|
SUPER+H/J/K/L Focus left/down/up/right (same as arrows)
|
||||||
|
SUPER+SHIFT+H Move window left
|
||||||
|
SUPER+SHIFT+L Move window right
|
||||||
|
SUPER+SHIFT+K Move window up
|
||||||
|
SUPER+SHIFT+J Move window down
|
||||||
|
SUPER+ALT+H Shrink window width (-40)
|
||||||
|
SUPER+ALT+L Expand window width (+40)
|
||||||
|
SUPER+ALT+K Shrink window height (-40)
|
||||||
|
SUPER+ALT+J Expand window height (+40)
|
||||||
|
|
||||||
|
ARROW KEY NAVIGATION
|
||||||
|
SUPER+Left/Right/Up/Down Focus direction
|
||||||
|
SUPER+SHIFT+Left/Right/Up/Down Move window to adjacent tile/monitor
|
||||||
|
|
||||||
|
WINDOW MANAGEMENT
|
||||||
|
SUPER+C Close active window
|
||||||
|
SUPER+M Exit Hyprland (logout)
|
||||||
|
SUPER+CTRL+L Lock screen (hyprlock)
|
||||||
|
|
||||||
|
WORKSPACES
|
||||||
|
SUPER+1-9 Go to workspace N
|
||||||
|
SUPER+SHIFT+1-9 Move window to workspace N
|
||||||
|
|
||||||
|
SESSION SERVICES (systemd user units, uwsm-managed)
|
||||||
|
hyprpaper, waybar, dunst, hypridle, hyprlauncher, cliphist
|
||||||
|
All managed via ~/.config/systemd/user/*.service
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
# Hyprland Configuration - uwsm Integration
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
Session management uses **UWSM** (Universal Wayland Session Manager) wrapping Hyprland in systemd user services.
|
||||||
|
|
||||||
|
```
|
||||||
|
greetd → tuigreet → uwsm start → systemd user session → Hyprland
|
||||||
|
↓
|
||||||
|
systemd units: hyprpaper, waybar, dunst, hypridle, hyprlauncher, cliphist
|
||||||
|
XDG autostart: Nextcloud, JetBrains Toolbox, Flameshot, etc.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Session Services
|
||||||
|
|
||||||
|
All session services are managed via systemd user units (`~/.config/systemd/user/*.service`):
|
||||||
|
|
||||||
|
| Service | Purpose | Status |
|
||||||
|
|---------|---------|--------|
|
||||||
|
| `hyprpaper.service` | Wallpaper daemon | active |
|
||||||
|
| `waybar.service` | Status bar | active |
|
||||||
|
| `dunst.service` | Notification daemon | active |
|
||||||
|
| `hypridle.service` | Idle/screenlock control | active |
|
||||||
|
| `hyprlauncher.service` | App launcher daemon | active |
|
||||||
|
| `cliphist.service` | Clipboard history store | active |
|
||||||
|
|
||||||
|
### Management Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check all session services
|
||||||
|
systemctl --user list-units | grep -E 'hypr|waybar|dunst|cliphist'
|
||||||
|
|
||||||
|
# Restart a specific service
|
||||||
|
systemctl --user restart waybar.service
|
||||||
|
|
||||||
|
# View logs
|
||||||
|
journalctl --user -u waybar.service -f
|
||||||
|
```
|
||||||
|
|
||||||
|
## Launchers
|
||||||
|
|
||||||
|
| Component | Tool | Keybind |
|
||||||
|
|-----------|------|---------|
|
||||||
|
| App Launcher | hyprlauncher | SUPER+D |
|
||||||
|
| Keybind Menu | hyprlauncher -o (piped) | SUPER+CTRL+K |
|
||||||
|
|
||||||
|
hypr launcher config: `~/.config/hypr/hyprlauncher.conf`
|
||||||
|
- `desktop_launch_prefix = uwsm app --` (proper systemd scoping)
|
||||||
|
- Cache enabled for frequency-based sorting
|
||||||
|
- Finders: desktop (default), math (=), unicode (.), font (')
|
||||||
|
|
||||||
|
## Login Manager
|
||||||
|
|
||||||
|
**greetd** with **tuigreet** on VT 1.
|
||||||
|
Config: `/etc/greetd/config.toml`
|
||||||
|
Default command: `tuigreet --time --remember --asterisks --cmd 'uwsm start -e -D Hyprland hyprland.desktop'`
|
||||||
|
|
||||||
|
## Key Categories
|
||||||
|
|
||||||
|
| Category | Modifier | Keys | Action |
|
||||||
|
|----------|----------|------|--------|
|
||||||
|
| Focus | SUPER | H/J/K/L, Arrows | Move focus |
|
||||||
|
| Move Window | SUPER+SHIFT | H/J/K/L, Arrows | Move window |
|
||||||
|
| Resize Window | SUPER+ALT | H/J/K/L | Resize active window |
|
||||||
|
| Windows | SUPER | F, SPACE, TAB, `, P, J | Window actions |
|
||||||
|
| Apps | SUPER | Q, B, E, D | Launch apps |
|
||||||
|
| Workspaces | SUPER | 1-9 | Switch/move workspaces |
|
||||||
|
| Lock | SUPER+CTRL | L | Lock screen |
|
||||||
|
|
||||||
|
See `~/.config/hypr/cheatsheet.txt` for the full reference.
|
||||||
Reference in New Issue
Block a user