Commit graph

911 commits

Author SHA1 Message Date
656738dcc2
Merge pull request #8 from ediblerope/claude/fix-facetimehd-build-nnUuj
Fix facetimehd driver compatibility with Linux 6.8
2026-04-19 11:21:01 +00:00
Claude
293e3306b3
facetimehd: patch out wait_prepare/wait_finish for Linux 7.0
struct vb2_ops dropped wait_prepare and wait_finish in Linux 6.8.
Add a nixpkgs overlay to sed them out of fthd_v4l2.c at build time.

https://claude.ai/code/session_01XEMg2HskwRaQW3nrCd1q2z
2026-04-19 11:18:58 +00:00
ediblerope
3b4714c722 flake: update inputs 2026-04-19 05:52:25 +00:00
032693ef39 Authorize 7dtd.nordhammer.it in Authelia ACL
Without this rule the subdomain falls under default_policy=deny,
which returns 403 instead of the 401 that nginx needs to redirect
to the Authelia login page.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 23:23:48 +01:00
dfbc727f5f Disable EAC on 7DTD server so Proton clients can connect
Proton-based clients (e.g. CachyOS native install hitting 7DTD via
the Proton runtime) fail EAC handshake against a Linux dedicated
server. Disabling server-side lets Proton clients join via the
"Play without EasyAntiCheat" splash option.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 23:05:08 +01:00
806adcfde7 Add gamescope to FredOS-Gaming for per-game FSR upscaling
Lets 7DTD (and other native titles lacking built-in FSR) render
internally at a lower resolution and upscale to the 3440x1440
display via gamescope's FSR filter.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 21:53:15 +01:00
740fca4fcf Expose 7DTD WebDashboard behind Authelia at 7dtd.nordhammer.it
Publishes the container's web dashboard port only on host loopback
(127.0.0.1:8090) so nginx can reverse-proxy it with Authelia
forward-auth, matching the Homepage/camera vhost pattern. Also flips
WebDashboardEnabled to true in the XML patcher so the server actually
starts the web server.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 21:43:11 +01:00
ediblerope
2a190bd39a flake: update inputs 2026-04-18 05:28:26 +00:00
c05f986e1c Add 7 Days to Die dedicated server container; drop V-Rising
Enables the previously-disabled game-servers module with a new 7DTD
container (vinanrra/7dtd-server) on ports 26900 TCP + 26900-26902 UDP.
A oneshot systemd service waits for LGSM's first install to drop
sdtdserver.xml, then patches in the server name, password, and
random-gen world before restarting the container. V-Rising is removed
— the module hadn't been imported, so this just drops dead code.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 22:28:49 +01:00
d80ccf4e6d Stop Sonarr/Radarr from nuking qBittorrent torrents after import
Sonarr was silently removing torrents from qBittorrent once imports
completed, killing seeding. Set removeCompletedDownloads to false for
both clients so torrents stick around and keep seeding post-import.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 21:23:28 +01:00
ediblerope
7234857b4a flake: update inputs 2026-04-17 05:57:50 +00:00
8b0e366f44
Add files via upload 2026-04-16 21:49:52 +00:00
d450b8e021 Seed placeholder latest.json so Homepage widget doesn't 404 pre-update
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-16 21:19:23 +01:00
f57c6e99ec Add Last Update widget to Homepage via record-update script
record-update parses nvd diff after switch and writes latest.json;
Homepage polls a local-only nginx listener and renders date/changes/
closure/kernel via a customapi widget.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-16 20:58:19 +01:00
916c1d1c2d Override Homepage's Tailwind slate classes instead of CSS variables
The previous template targeted CSS variables that Homepage doesn't
actually expose at runtime, so only a handful of containers picked up
the theme. Targeting .bg-slate-*/text-slate-* directly replaces the
compiled Tailwind palette with matugen colors across the dashboard.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 20:36:38 +01:00
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