Commit graph

788 commits

Author SHA1 Message Date
219b773c51 Remove bloom shader, change hostname text to white
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 16:17:31 +01:00
bcb18985ef Use toned-down bloom shader for ghostty
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 16:15:37 +01:00
21e27d46bb Fix lib.hm.gvariant by passing lib from HM module args
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 16:12:08 +01:00
92ba55741d Add ghostty eye candy: bloom shader, bar cursor, font thicken
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 16:11:13 +01:00
7676fc88de
Add files via upload 2026-04-09 16:07:02 +01:00
c4aa481b38 Consolidate GNOME config into single settings/gnome.nix module
Merge home-manager GNOME settings (dconf, keybinds, GTK CSS, wallpaper)
from gnome-hm.nix into settings/gnome.nix so the entire DE config lives
in one file and can be toggled with a single import.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 14:36:07 +01:00
b9ddffbb7c
Add files via upload 2026-04-09 14:16:49 +01:00
5d033a55ec 2026-04-09 10:09:24 +01:00
ediblerope
ba230fdf7c flake: update inputs 2026-04-09 05:44:08 +00:00
1fa0ecd3b7 Hide GNOME window buttons and minimize titlebars
- Set button-layout to empty string (removes close/min/max buttons)
- Add GTK 3/4 CSS to shrink headerbar height and hide title text
- Ghostty opacity adjusted to 0.98

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 20:21:52 +01:00
23e66074f7 2026-04-08 20:19:35 +01:00
9df33a1eb9 Set ghostty opacity to 0.95, remove blur (unsupported on Mutter)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 20:18:40 +01:00
303e85b6e3 Add transparency and blur to ghostty terminal
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 20:15:12 +01:00
96ab88c8ab Re-enable flatpak service for ad-hoc installs via Bazaar
The nix-flatpak flake module was removed (no declarative packages) but
the flatpak service itself is still needed for Bazaar/manual installs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 19:54:46 +01:00
f7f394e0ae Bump GitHub Actions to Node.js 24 compatible versions
- actions/checkout v4 -> v6
- cachix/install-nix-action v27 -> v31 (also patches CVE-2026-39860)
- stefanzweifel/git-auto-commit-action v5 -> v7

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 19:52:54 +01:00
ediblerope
5fbad3c5f5 flake: update inputs 2026-04-08 18:34:00 +00:00
cd6fd2536e Remove leading space before NixOS icon in prompt
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 14:07:19 +01:00
9c08a9e0ef Rename fastfetch.nix -> settings/shell.nix, remove flatpaks
- Move shell/prompt/font config from apps/fastfetch.nix to settings/shell.nix
- Remove flatpaks.nix and nix-flatpak flake input (no flatpak packages in use)
- Update readme structure and flake inputs table

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 14:03:34 +01:00
b774869b0d Fix fish prompt colors: remove # prefix from hex codes
Fish set_color takes bare hex (394b70) not CSS-style (#394b70).
All color references were silently failing, causing broken rendering.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 13:58:42 +01:00
d3af3052a1 Fix Nix string quoting in fastfetch.nix
Python generated '''''' (6 quotes) instead of '' (2 quotes) for Nix
multi-line string delimiters, causing a parse error.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 13:56:31 +01:00
b4e44ccaaa Replace starship with custom fish powerline prompt
Starship can't color individual path segments separately. Custom fish
prompt with proper Unicode powerline glyphs (U+E0B0 arrows, U+E0B6
left cap). Each folder gets its own colored segment cycling through
teal/green/blue, with chevron transitions between all segments.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 13:54:44 +01:00
f31b855c19 Fix powerline arrows: inject actual U+E0B0 glyphs into starship format
The powerline arrow characters were not being saved to the file,
resulting in empty brackets and square segment edges.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 13:49:38 +01:00
50cb6cc91e Improve prompt contrast and switch to JetBrainsMono Nerd Font
- Dark blue NixOS icon segment, amber hostname, teal path, purple git
- Better contrast between adjacent segments
- JetBrainsMono Nerd Font for reliable powerline glyph rendering

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 13:46:19 +01:00
3b73bef9ee Replace hand-rolled fish prompt with Starship powerline prompt
Starship handles the powerline segments with proper rounded transitions
between colored backgrounds. Layout:
  [ hostname ~/path  branch]
  ❯
- Cyan NixOS icon, yellow hostname, green path, purple git branch
- Dark text on colored backgrounds with powerline arrow transitions
- Nix-shell indicator, red ❯ on error

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 13:42:57 +01:00
144d2e55d4 Switch prompt to bold colored text, drop background segments
Background-colored pills were unreadable on dark themes. Use bold
foreground colors instead: cyan NixOS icon, yellow hostname, green path.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 13:38:13 +01:00
9554152cb5 Fix prompt: use white text on colored background segments
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 13:36:34 +01:00
efd3351ee7 Powerline-style prompt with background colors, remove fastfetch from startup
- Prompt segments now have background colors (green/yellow/blue pills)
- NixOS icon  visible in green pill segment
- Remove fastfetch from terminal startup and clear alias
- fastfetch still available via manual `fastfetch` command

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 13:34:36 +01:00
134d597ac5 Fix ghostty theme names, simplify prompt to hostname-first
- Theme names need spaces: "Catppuccin Mocha" not "catppuccin-mocha"
- Prompt now shows hostname instead of username: " FredOS-Gaming ~"
- Disable default fish greeting message

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 13:29:06 +01:00
a93996444d Force overwrite existing ghostty config via Home Manager
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 13:23:34 +01:00
09d00909cb Switch to fish shell, ghostty terminal, and simplified prompt
- Replace bash with fish as default shell (all hosts)
- Replace kgx with ghostty (desktop hosts), update Super+T keybinding
- Custom two-line fish prompt: NixOS icon, username, path, hostname, ❯
- Nix-shell awareness, red ❯ on error
- Simplify fastfetch: user@host, OS, kernel, shell, terminal, uptime, memory
- Ghostty config: FiraCode Nerd Font, catppuccin-mocha, no titlebar

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 13:22:21 +01:00
a14cc55921 Revert nixpkgs.stdenv.hostPlatform back to nixpkgs.hostPlatform
nixpkgs.stdenv.hostPlatform is not a valid NixOS option. The
deprecation warning comes from nixpkgs internals and is harmless.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 09:27:34 +01:00
f1f2afaace Fix deprecated nixpkgs.hostPlatform -> nixpkgs.stdenv.hostPlatform
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 09:26:26 +01:00
ediblerope
32464aa1fc flake: update inputs 2026-04-08 05:42:44 +00:00
8b62397037 Remove Docker, add server migration checklist to readme
- Remove virtualisation.docker.enable (no longer used after native
  migration of Authelia, go2rtc, and nginx)
- Add migration checklist documenting which state directories and
  secrets to back up when moving to new hardware

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 22:54:33 +01:00
aa38a7e065 Document Authelia users_database.yml structure and password hash generation
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 21:00:03 +01:00
6a2563f058 Fix go2rtc: use RuntimeDirectory instead of mkdir /run/go2rtc
DynamicUser can't write to /run directly. RuntimeDirectory lets systemd
create and manage the directory.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 20:51:22 +01:00
595efbb25a Move go2rtc RTSP credentials out of nix store, document all secrets
- go2rtc.nix: template config at runtime from /var/secrets/go2rtc-rtsp-url
  instead of embedding credentials in the nix store
- readme.md: add Mediaserver secrets section documenting all secrets
  needed for a fresh deploy (Cloudflare, go2rtc, Authelia)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 20:49:04 +01:00
08669d7eb5 Update docs: add new services to readme, remove obsolete go2rtc-readme
- readme.md: add authelia, fail2ban, homepage, arr-interconnect, nginx
  description updated to mention ACME. Remove omnisearch, add cachyos
  kernel to flake inputs table.
- cloudflare-ddns.md: document shared token usage with ACME, note
  Zone:Zone:Read permission requirement.
- Delete go2rtc-readme.md (documented Docker setup, now native NixOS).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 20:42:19 +01:00
372275da5e Fix Authelia forward-auth to match proven working NPM config
- Use /api/verify endpoint instead of /api/authz/forward-auth
- Add proxy_pass_request_body off to auth location
- Put redirect URL inline in error_page instead of using a variable
- Use X-Forwarded-Uri (matching old config) instead of X-Forwarded-URI

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 20:35:59 +01:00
09d24eecf3 Fix Authelia forward-auth: use set instead of auth_request_set for redirect URL
auth_request_set reads variables from the auth subrequest context where
$scheme/$http_host/$request_uri are empty, causing a 500 instead of a
302 redirect. Using set captures from the main request context.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 20:31:03 +01:00
64bd0b8f0b Fix nginx proxy_headers_hash warning from Authelia forward-auth headers
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 17:27:23 +01:00
9ce1e00ea5 Remove broken --dns.propagation-wait flag, rely on default propagation check
The CNAME interference is resolved so the default lego propagation check
(querying Cloudflare authoritative NS) should work correctly now.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 17:20:19 +01:00
476379f4e4 Fix ACME: add 30s propagation wait and re-enable full DNS check
The previous dnsPropagationCheck=false caused lego to ask LE to validate
before the TXT record was globally visible. Adding --dns.propagation-wait
gives Cloudflare time to serve the record from all edge locations.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 17:16:07 +01:00
b27d2913e8 Disable ACME DNS propagation check for Cloudflare
Cloudflare is the authoritative NS so API-created TXT records are
immediately visible — the propagation poll was timing out unnecessarily.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 16:53:00 +01:00
9838154b25 Fix authelia-setup: create state directory before migrating user database
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 15:58:51 +01:00
eadbc92126 Replace Docker containers with native NixOS modules for nginx, Authelia, and go2rtc
- Native nginx with ACME wildcard cert (*.nordhammer.it) via Cloudflare DNS-01
- Native Authelia SSO with forward auth protecting homepage + camera
- Native go2rtc camera streaming (no more Docker)
- Auto-migration script for Authelia secrets and user database from Docker
- Homepage hrefs updated to use HTTPS domain names
- Fail2ban updated for native nginx log paths + new Authelia jail

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 15:47:56 +01:00
cb8ecc1409 Add FredOS-Macbook SSH key for passwordless login
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 13:51:11 +01:00
f59fce5087 Add auto-interconnect service for *arr stack
Systemd oneshot that runs after all services start and configures:
- Prowlarr → Sonarr (TV indexers, full sync)
- Prowlarr → Radarr (movie indexers, full sync)
- Sonarr → qBittorrent (download client, category: tv-sonarr)
- Radarr → qBittorrent (download client, category: radarr)
- Bazarr → Sonarr (subtitle management for TV)
- Bazarr → Radarr (subtitle management for movies)

Fully idempotent — checks for existing connections before creating.
API keys extracted from each app's config files at runtime.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 13:45:53 +01:00
d878d3b20c Auto-extract API keys for Homepage dashboard
Adds a systemd oneshot that runs before homepage-dashboard and:
- Reads *arr API keys from their config.xml files
- Reads Bazarr key from config.ini
- Creates a Jellyfin API key in the DB if one named "Homepage" doesn't exist
- Uses localhost for qBittorrent (LocalHostAuth=false, no creds needed)
- Writes everything to /etc/homepage-secrets

Zero manual setup — all keys are extracted or generated automatically.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 13:13:17 +01:00
570ddf38f6 Allow passwordless sudo for fred
40-char password from a manager is impractical for frequent sudo use.
SSH is already key-only, so local privilege escalation is the only
remaining threat — acceptable on a single-user home server.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 13:07:24 +01:00