server-desktop-01/CLAUDE.md

54 lines
3.0 KiB
Markdown
Raw Normal View History

# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## What this repo is
Documentation and planning for a GNOME → Hyprland migration on Fedora 43. No build system, no tests, no executables. The actual system configuration lives in `~/.dotfiles/` (separate Forgejo repo), managed with GNU Stow.
## Key locations outside this repo
| What | Where |
|------|-------|
| Hyprland config | `~/.dotfiles/hypr/.config/hypr/hyprland.conf` |
| DMS source configs | `~/.dotfiles/hypr/.config/hypr/dms/` |
| Symlink target | `~/.config/hypr/` → symlinked via `stow hypr` |
| Hyprland log | `~/.cache/hyprland/hyprland.log` |
| Dotfiles remote | `git@forgejo.swansoncloud.com:jared/dotfiles.git` |
| Synology DS218plus access + backup paths | `docs/synology.md` |
| VPS inventory + access notes | `docs/vps-inventory.md` |
## Hyprland configuration
**Installed version:** 0.51.1 (Fedora 43). See `docs/hyprland/version-history.md` before applying patterns from the official wiki — the wiki tracks git HEAD, which is ahead of the installed version.
**Window rule syntax for 0.480.51** (not the block syntax shown in current wiki):
```
windowrule = match:class classname, effect
windowrule = match:class classname, match:title titlepattern, effect1, effect2
```
Do NOT use `^(...)$` wrapping — Hyprland 0.51 rejects it as "Invalid rulev2". Use plain names or bare regexes (e.g. `^org\.gnome\.` for a prefix match).
**Block syntax** (`windowrule { }`) is 0.52+ only — do not use until after a Fedora upgrade.
## Docs structure
- `docs/window-manager/` — migration plan, phased progress log, keybindings cheatsheet
- `docs/hyprland/` — version-aware Hyprland config reference; update these when Hyprland is upgraded
- `docs/synology.md` — DS218plus SSH alias, `/volume1/backup` map, restic repo commands, recovery notes
- `docs/vps-inventory.md` — OVH VPS (`ovh-vps`) access notes; old Hyperthrive DO VPS deleted 2026-06-24 (historical notes retained)
## Project status
Phases 03 complete (install, config, dotfiles integration). Phase 4 (first successful Hyprland login and smoke tests) is in progress. Phase 5 (tuning) is deferred.
Known workarounds in place:
- `hyprpolkitagent` replaced with `xfce-polkit` due to Qt 6.9/6.10 private ABI mismatch in solopasha COPR (affects hyprland-qt-support, hyprland-qtutils). Revisit when COPR rebuilds against Qt 6.10.
- GDM Wayland→Hyprland cursor handoff leaves stale cursor ghost at login position. Fixed with `exec-once = sleep 1 && hyprctl dispatch movecursor 0 0` in hyprland.conf. If unreliable, fallback is `WaylandEnable=false` in /etc/gdm/custom.conf (makes GDM use X11 greeter for clean KMS handoff).
- `cursor { no_hardware_cursors = true; use_cpu_buffer = 1 }` set in dms/cursor.conf to prevent NVIDIA DRM (akmod-nvidia loaded for RTX 3060) from interfering with AMD Vega cursor plane rendering.
## Hardware
- AMD Vega iGPU (primary display, Wayland)
- NVIDIA RTX 3060 dGPU (no display connected — `akmod-nvidia` is installed and loads `nvidia_drm` at boot)