85 lines
4.5 KiB
Lua
85 lines
4.5 KiB
Lua
-- ─────────────────────────────────────────────────────────────────────────────
|
|
-- Environment
|
|
--
|
|
-- hl.env() sets variables before the display server initialises, which is what
|
|
-- makes it valid for AQ_* and cursor variables.
|
|
--
|
|
-- NOTE for uwsm sessions: if you log in via "Hyprland (uwsm-managed)", uwsm
|
|
-- prefers these live in ~/.config/uwsm/env and ~/.config/uwsm/env-hyprland
|
|
-- instead. They still work here; see the session notes in autostart.lua.
|
|
-- ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
-- ── GPU selection ───────────────────────────────────────────────────────────
|
|
-- This box has a discrete RX 7800 XT (0000:03:00.0) and a Granite Ridge iGPU
|
|
-- (0000:12:00.0). The monitor hangs off the dGPU, so the dGPU must render.
|
|
--
|
|
-- /dev/dri/cardN numbering is not stable across boots, and the by-path names
|
|
-- contain colons -- which are AQ_DRM_DEVICES' own separator, so they cannot be
|
|
-- used directly. Panama installs a udev rule creating colon-free stable
|
|
-- symlinks (/dev/dri/amd-dgpu, /dev/dri/amd-igpu); see
|
|
-- config/copy/etc/udev/rules.d/99-panama-gpu.rules
|
|
--
|
|
-- First entry is the primary renderer. The iGPU stays in the list so anything
|
|
-- plugged into its outputs still lights up.
|
|
--
|
|
-- Guarded on the symlink actually existing: this config is shared across
|
|
-- machines, and pointing AQ_DRM_DEVICES at a device that isn't there stops
|
|
-- Hyprland from starting at all. If the udev rule hasn't been installed (or
|
|
-- this is a different box), we say nothing and let aquamarine choose.
|
|
local function exists(path)
|
|
local f = io.open(path, "r")
|
|
if f then f:close() return true end
|
|
return false
|
|
end
|
|
|
|
if exists("/dev/dri/amd-dgpu") then
|
|
local devices = "/dev/dri/amd-dgpu"
|
|
if exists("/dev/dri/amd-igpu") then
|
|
devices = devices .. ":/dev/dri/amd-igpu"
|
|
end
|
|
hl.env("AQ_DRM_DEVICES", devices)
|
|
end
|
|
|
|
-- ── Cursor ──────────────────────────────────────────────────────────────────
|
|
-- Theme carried over from GNOME.
|
|
--
|
|
-- Deliberately no HYPRCURSOR_THEME: oreo_blue_cursors is a plain XCursor theme
|
|
-- (it has cursors/ + index.theme and no hyprcursors/ directory or manifest.hl),
|
|
-- so setting it would point hyprcursor at nothing. Hyprland falls back to the
|
|
-- XCursor path, which is what we want.
|
|
hl.env("XCURSOR_THEME", "oreo_blue_cursors")
|
|
hl.env("XCURSOR_SIZE", "24")
|
|
|
|
-- ── Toolkits ────────────────────────────────────────────────────────────────
|
|
-- Wayland first, X11 only as a fallback for apps that genuinely need it.
|
|
hl.env("QT_QPA_PLATFORM", "wayland;xcb")
|
|
|
|
-- "gtk3" makes Qt derive its palette from the live GTK3 theme via the qgtk3
|
|
-- platform plugin, so Qt apps match adw-gtk3-dark exactly rather than
|
|
-- approximating it -- and it gives them GTK file/font/colour dialogs. It also
|
|
-- covers Qt5 and Qt6 with one value.
|
|
--
|
|
-- Note this is a single value, NOT a fallback list: Qt splits on ":" and uses
|
|
-- only the first token, so the commonly-copied "qt5ct:qt6ct" silently means
|
|
-- just "qt5ct".
|
|
hl.env("QT_QPA_PLATFORMTHEME", "gtk3")
|
|
hl.env("QT_WAYLAND_DISABLE_WINDOWDECORATION", "1")
|
|
hl.env("QT_AUTO_SCREEN_SCALE_FACTOR", "1")
|
|
hl.env("GDK_BACKEND", "wayland,x11")
|
|
hl.env("SDL_VIDEODRIVER", "wayland")
|
|
hl.env("CLUTTER_BACKEND", "wayland")
|
|
hl.env("MOZ_ENABLE_WAYLAND", "1")
|
|
|
|
-- Electron apps (Slack, Obsidian, Claude, Codex, BlueBubbles, Podman Desktop)
|
|
-- pick Wayland from this rather than needing per-app flags.
|
|
hl.env("ELECTRON_OZONE_PLATFORM_HINT", "auto")
|
|
|
|
-- ── Desktop identity ────────────────────────────────────────────────────────
|
|
-- Portals and some GNOME apps key off these. uwsm sets them itself, so these
|
|
-- are only load-bearing for the plain (non-uwsm) session.
|
|
hl.env("XDG_CURRENT_DESKTOP", "Hyprland")
|
|
hl.env("XDG_SESSION_TYPE", "wayland")
|
|
hl.env("XDG_SESSION_DESKTOP", "Hyprland")
|
|
|
|
return true
|