`enable` alone only hooks it into graphical-session.target, which is
already active by the time bootstrap runs, so it didn't start until the
next login.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
VpnIndicator.qml gains ProtonVPN sign-in (with 2FA), location/Secure
Core/NetShield/kill switch options, Mullvad options, and Install /
Uninstall links for both clients via the new scripts/VpnPackage.sh
(pkexec). NetworkIndicator.qml names the VPN the public IP is coming
through, using a new activeVpnLabel on VpnExclusivity.
Tailscale now connects on its own whenever none of Home (UniFi),
ProtonVPN or Mullvad is connected, and still backs off when one is.
VpnIndicator publishes vpnStatesKnown/vpnTransitioning so this waits
for every provider's first poll and never fires mid-switch. A manual
"off" sticks until a provider next connects.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adds the vpn-notify script and its systemd user service, which notify on
WireGuard/tun/Tailscale changes and reconnect NetworkManager WireGuard
tunnels after a network switch. bootstrap.sh now enables the service and
packages.txt lists libnotify explicitly.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bar.qml switches ActiveWindow and MediaPlayer to tighter truncation
limits when the bar is narrower than compactBarWidth (1600px), so on
the laptop's eDP-1 they don't crowd the centre clock/weather group.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Prints whether options.conf and the pacman.conf Include were installed or
already in place, then the options pacman ends up using. Dropping an old
Include now also drops the blank line written after it, so re-runs leave
pacman.conf untouched instead of adding a blank line and rewriting it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Turns on ILoveCandy and VerbosePkgLists and raises ParallelDownloads to 10
in system/pacman/options.conf. install.sh now puts the Include at the end of
[options] instead of straight after the header, so these override
pacman.conf's own defaults (its ParallelDownloads = 5 would otherwise win),
and moves an existing Include there when re-run.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Super+Return, $TERMINAL (rofi-sensible-terminal and scripts) and Thunar's
"Open Terminal Here" (exo helper + helpers.rc) now open Ghostty; foot stays
installed as the fallback. Also replaces Ghostty's deprecated
gtk-tabs-location = hidden with window-show-tab-bar = never.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hyprland.lua and its modules replaced all of these in the Lua migration;
nothing loads or reads them any more.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Open the update terminal in Ghostty, offering to install it via pkexec
when missing and falling back to foot if declined. Add the
system-update-terminal window rule the script already referred to, so
the window floats centred at 1000x650 instead of tiling.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Same font, padding, colours, cursor and Ctrl+C/Ctrl+Shift+C bindings as
foot.ini, so the two can be tried side by side. Ctrl+C copies only with
a selection and interrupts otherwise; TERM falls back to xterm-256color
only over SSH. foot stays the default $term.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Disabled-by-default window rule that sends steam_app windows fullscreen
to workspace 9 (HEADLESS-1), toggled by sunshine-games.sh, so old games
like KOTOR start at the stream's resolution.
Show the current MPRIS track after the workspaces, with a per-source
brand icon (YouTube, Spotify, Plexamp, Twitch...) that greys out while
paused. Clicking it opens a panel with album art, a seek bar, transport
controls and shuffle/repeat.
Also cap the window title and track text by character count rather
than pixel width.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Put the Replace config option behind an expand chevron, like Mullvad's
options, and frame the card while it's expanded.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xdg-desktop-portal-hyprland could start before Hyprland imported
WAYLAND_DISPLAY/XDG_CURRENT_DESKTOP, leaving no ScreenCast backend.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Super+Print and Super+Shift+Print use hyprshot when installed and
grim/slurp otherwise. Add Super+Shift+S (area) and Super+F6 (full
screen) for keyboards without a Print key.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ctrl+C and Ctrl+V now copy and paste like in other apps. The interrupt
signal (^C) moves to Ctrl+Shift+C.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hypr env sets QT_QPA_PLATFORM="wayland;xcb", and under Wayland Plex's
bundled QtWebEngine never loads the web client, so the window stays
blank. Both the PATH wrapper and the .desktop entry now force xcb, as
upstream does, and set XCURSOR_SIZE=24 so the X11 cursor isn't huge.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The tailnet's MagicDNS suffix changed from twhomelab.local to
twhomelab.tailnet, so the Sunshine web UI link now opens
xol.twhomelab.tailnet:47990.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sunshine's global_prep_cmd now runs hypr/scripts/SunshineIdle.sh, which
holds a systemd idle inhibitor for the length of a stream (hypridle
respects it) and unlocks hyprlock if the session was already locked.
With that in place hypridle starts at login again.
Sunshine's config (sunshine.conf, apps.json, prep scripts) moves into
the dotfiles; credentials, logs and state stay local and are gitignored.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
bootstrap.sh installs everything listed in system/packages.txt (pacman,
AUR via yay, flatpak, official install scripts), auto-detects CPU
microcode and GPU drivers, enables services, links dotfiles with stow
and runs system/install.sh. Optional --svt-av1 installs
svt-av1-essential-git and rebuilds ffmpeg against it via
system/rebuild-ffmpeg.sh.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
update-system.sh now runs sync-dotfiles.sh first, which pulls the repo
(fast-forward only) and re-stows it so both machines pick up config changes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>