Commit graph

896 commits

Author SHA1 Message Date
2709805c84 Scope matugen templates to hosts that can actually run them
btop is shared across all hosts, Homepage is mediaserver-only, and the
GNOME/Ghostty/VSCodium/Vesktop templates only apply to desktop hosts.
Emitting them everywhere made matugen error loudly on the server.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 20:33:40 +01:00
3a5daa6c80 Force home-manager to overwrite existing btop.conf
Mediaserver already had a btop.conf outside home-manager control, so
declarative adoption was refused. Setting force=true lets the managed
version take over.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 20:26:49 +01:00
2e29d3dce5 Force UMask=0002 on Radarr, Sonarr, Bazarr
New nixpkgs defaults for the *arr services set UMask=0022, which
conflicts with the media-group-writable overrides. Wrap with
lib.mkForce alongside the existing Jellyfin fix.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 20:22:37 +01:00
c4421b32a8 Force Jellyfin UMask=0002 to override new nixpkgs default
nixpkgs now sets UMask=0077 on the Jellyfin service, conflicting with
our override that ensures media-group writes. Wrapping with lib.mkForce
restores the intended permission bits.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 20:20:01 +01:00
2096330eb8 Theme btop and Homepage via matugen on the mediaserver
Share the wallpaper symlink across all hosts by moving it from gnome.nix
into home-manager/fred.nix, and add matugen templates for btop and the
Homepage dashboard.

The Homepage NixOS module writes custom.css into /etc (read-only), so
bind-mount /var/lib/homepage-custom-css/custom.css over it. A systemd
path unit restarts homepage-dashboard whenever matugen rewrites the
file, so regeneration works without sudo.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 20:17:38 +01:00
7d50716bc6 Show total storage savings in transcode-hevc --status
Parse every Saved: entry in the log to compute cumulative original
size, new size, bytes saved, and percentage reduction so we have a
single command for the transcode impact.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 19:56:46 +01:00
cb92db7ad8 Revert VSCodium title bar CSS override
Wayland/Mutter forces server-side decorations when the custom title bar
is collapsed, which looked worse than the slim custom bar. Reverting to
stock VSCodium with compact menu + no command center handled in user
settings.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 19:51:43 +01:00
362f3b3d86 Collapse VSCodium title bar via height instead of display:none
Using display:none removed the drag region entirely, which caused
GNOME/Mutter to fall back to server-side decorations. Collapsing the
title bar to 0 height keeps VSCodium's frameless state intact.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 19:46:04 +01:00
43a8cb976c Hide VSCodium title bar via workbench.html CSS injection
Override vscodium with a postFixup step that appends a style tag to
workbench.html hiding the titlebar part, so the window sits flush
against GNOME's edge without native or custom decorations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 19:40:31 +01:00
8b9d3d86cc Collapse Midnight title bar grid row to remove 32px top gap in Vesktop
Override the base grid-template-rows to replace the 32px title bar
reservation with 12px padding that matches the bottom window edge.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 15:11:20 +01:00
a46f587695 Add Vesktop title bar and toolbar padding fixes to matugen template
Hide Midnight's window controls and trailing section since GNOME
handles decorations, and remove the 158px padding gap left behind.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 14:57:03 +01:00
28264dd39b Revert GNOME shell accent and app grid focus changes
The focus ring overrides didn't take effect and the accent color
change made some elements look worse.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 13:28:39 +01:00
6ad1a249bf Use bright primary color for GNOME accent instead of muted container
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 11:27:03 +01:00
b5937e5fe9 Switch Vesktop theme to Midnight and theme GNOME app grid highlights
Replace custom Discord CSS selectors with Midnight theme (loaded via
online URL) and simple color variable overrides from matugen. Also add
wallpaper-colored focus rings, edit button, and running dot to GNOME
shell app grid.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 11:22:48 +01:00
3f20a8010f Apply matugen wallpaper colors to VSCodium via post_hook
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 10:21:22 +01:00
7353ca6adc
Add files via upload 2026-04-16 08:39:31 +00:00
ediblerope
139b917e4e flake: update inputs 2026-04-16 05:55:00 +00:00
984f45e1d4 Set UMask 0002 on all media services for group-writable files
Sonarr, Radarr, qBittorrent, Jellyfin, and Bazarr all need to create
files that are writable by the media group. Without this, Jellyfin
can't write thumbnails/artwork to media directories and services
can't collaborate on shared files. Also fixes radarr movies directory
to use setgid (2775) consistently.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 23:23:56 +01:00
3c6e86aca9 Clean up leftover temp files on transcode-hevc startup
Removes any .transcode-* files left behind by interrupted runs
before starting the encoding loop.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 22:55:53 +01:00
7ef39af81b Fix transcode-hevc hanging on files with attached pictures
Map only the first video stream, all audio, and all subtitles instead
of mapping everything. This avoids feeding cover art images through
the libx265 encoder which caused hangs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 21:00:59 +01:00
5f31149565 Skip actively seeded files in transcode-hevc via qBittorrent API
Queries qBittorrent for individual file sizes of all active torrents.
Files whose size matches a seeded torrent file are skipped, catching
cross-filesystem copies where hardlink detection doesn't work.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 19:31:37 +01:00
c8c7606eb7 Skip hardlinked files in transcode-hevc to avoid breaking seed links
Files with multiple hardlinks are likely linked from downloads/ where
they are still being seeded. Transcoding would break the hardlink and
cause both copies to take up disk space separately.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 19:22:24 +01:00
f431d1a5b0 Always output MKV in transcode-hevc to avoid container codec issues
MP4 containers don't support all subtitle/codec combinations with HEVC.
MKV handles everything, so always output .mkv and remove the original
if it was a different format.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 19:20:02 +01:00
603ac86f0a Skip downloads directories in transcode-hevc
Files in downloads/ are still being seeded and must not be altered.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 10:27:48 +01:00
7fe1ccb8a7 Add transcode-hevc script for bulk H.264 to HEVC conversion
Resumable batch script that finds H.264 files, re-encodes to HEVC
(libx265 CRF 24), verifies duration, and replaces originals.
Tracks completed files in /var/lib/transcode-hevc/completed.log.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 10:25:36 +01:00
df227ad173 Revert "Add Tdarr transcoding manager for bulk H.264→HEVC conversion"
This reverts commit 91c437de6d.
2026-04-15 10:23:28 +01:00
91c437de6d Add Tdarr transcoding manager for bulk H.264→HEVC conversion
Runs Tdarr server with internal node on the mediaserver for managing
library-wide re-encoding to save disk space. Web UI at tdarr.nordhammer.it.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 10:17:09 +01:00
c8066a1ecb Use legacy 580.xx NVIDIA driver for Quadro M2000 (Maxwell)
The latest 595.x driver dropped Maxwell GPU support. The Quadro M2000
(GM206) requires the legacy_580 branch for CUDA/NVENC to function.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 09:30:17 +01:00
e1f073969b Fix reboot alias auth prompt and minor formatting
Add sudo to reboot alias so it doesn't prompt for password.
Add blank line before networking.hostName in hardware config.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 09:23:12 +01:00
090e5efbc1
Merge pull request #7 from ediblerope/claude/jellyfin-nvidia-kernel-modules
mediaserver: explicitly load NVIDIA kernel modules at boot
2026-04-15 07:32:39 +00:00
Claude
a42d906758
mediaserver: explicitly load NVIDIA kernel modules at boot
On a headless system, services.xserver.videoDrivers doesn't guarantee
the NVIDIA modules load. Add nvidia, nvidia_modeset, nvidia_uvm, and
nvidia_drm to boot.kernelModules explicitly.

nvidia_uvm is particularly critical — without it, CUDA initialisation
fails with CUDA_ERROR_NO_DEVICE, which is exactly what broke Jellyfin
NVENC transcoding.

https://claude.ai/code/session_016jJU8ZtWLSnJQBdbMr5pxK
2026-04-15 07:32:04 +00:00
cac4bda2ab
Merge pull request #6 from ediblerope/claude/jellyfin-quadro-transcoding-Z4EGb
jellyfin: enable NVENC hardware transcoding via Quadro M2000
2026-04-15 07:21:46 +00:00
Claude
98cc3de7bc
jellyfin: enable NVENC hardware transcoding via Quadro M2000
- Add NVIDIA proprietary driver config to FredOS-Mediaserver hardware
  (Maxwell/GM206, open=false, modesetting enabled, headless)
- Enable hardware.graphics for DRM/KMS infrastructure
- Add jellyfin user to video and render groups for device access

After deploying, enable NVENC in Jellyfin: Dashboard → Playback →
Transcoding → Hardware acceleration: Nvidia NVENC.

https://claude.ai/code/session_016jJU8ZtWLSnJQBdbMr5pxK
2026-04-15 07:17:09 +00:00
ediblerope
b171c0526a flake: update inputs 2026-04-15 05:54:29 +00:00
fb8f75e9c7 Increase ACME DNS propagation timeout to 10 minutes
Cloudflare's authoritative nameservers take longer than the
default 2-minute timeout to propagate TXT records created via
API. Set CLOUDFLARE_PROPAGATION_TIMEOUT=600 to give enough
time for DNS-01 challenge validation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 22:48:58 +01:00
337b90ced3 Fix ACME DNS resolver flag placement (global, not subcommand)
--dns.resolvers is a global lego flag, not a run/renew subcommand
flag. Use extraLegoFlags instead of extraLegoRunFlags.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 22:41:55 +01:00
6ae3f8be97 Use Cloudflare resolver for ACME DNS propagation check
Route DNS propagation checks through 1.1.1.1 only, bypassing
the local resolver that caches stale responses and causes
wildcard cert DNS-01 challenges to time out.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 22:38:20 +01:00
beadcc5397 Use propagation wait instead of disabling ACME DNS check
Disabling the propagation check caused lego to submit to Let's
Encrypt before Cloudflare's authoritative nameservers had the
TXT record. A 30s wait gives Cloudflare time to propagate.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 22:36:48 +01:00
3c0746e23b Skip ACME DNS propagation check for local resolver caching
Local DNS resolver caches stale responses causing the wildcard
cert DNS-01 challenge to time out before propagation is confirmed.
Cloudflare's authoritative servers propagate fast enough for
Let's Encrypt to validate without the client-side check.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 22:33:13 +01:00
a109d5a5c7 Disable game servers while not in use
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 22:10:20 +01:00
8aa7beccd6 Re-enable all services after secret migration to new server
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 21:59:18 +01:00
f90fe5a41e Add data disks and mergerfs pool to new mediaserver
Three data disks (down from four) with mergerfs pool at /mnt/storage.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 21:54:09 +01:00
5b12b59654 Temporarily disable game servers for server migration
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 16:05:16 +01:00
3c8d5678b0 Temporarily disable services requiring secrets for server migration
Commented out nginx, go2rtc, cloudflare-ddns, fail2ban, and authelia
until secrets are migrated to the new server hardware.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 16:03:50 +01:00
f63d6d4195 Add new mediaserver hardware config for UEFI server
New server uses systemd-boot instead of GRUB. Data disks and
mergerfs pool to be added after physical disk migration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 15:50:59 +01:00
b06b2b04e3 Strip mediaserver hardware config for new server migration
Clear old disk UUIDs, boot config, and filesystem mounts.
Add backup script for migrating service state to new hardware.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 15:33:07 +01:00
570d0aadac Add Vesktop wallpaper color theme via matugen
Generates quickCss for Vencord with wallpaper-derived colors
and Adwaita-style rounding. Work in progress — Discord may
override CSS variables on load.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 14:21:25 +01:00
73955a158d Fix Zen sidebar splitter and content area background colors
Color the #zen-sidebar-splitter to match the sidebar instead of
showing a grey strip. Also theme content area containers and
window frame elements. Clean up redundant CSS rules.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 11:00:27 +01:00
a706438b08 Simplify wallpaper function to use fixed background path
No longer accepts an argument — always regenerates colors from
the wallpaper managed by git at ~/.local/share/backgrounds/wallpaper.png.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 10:33:52 +01:00
79460a955e Theme panel button hover and overview window close button
Use GNOME Shell's native box-shadow inset fill technique for panel
button hover/active states to avoid double-background layering.
Add wallpaper-colored window close button in overview.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 10:28:34 +01:00