diff --git a/hosts/fw/modules/web/default.nix b/hosts/fw/modules/web/default.nix index de51256..31e742c 100644 --- a/hosts/fw/modules/web/default.nix +++ b/hosts/fw/modules/web/default.nix @@ -61,9 +61,9 @@ in { ./proxies.nix # ./matrix.nix ./n8n.nix - ./piped.nix # Replaced by Invidious - # ./invidious.nix - # ./invidious-init-user.nix + # ./piped.nix # Replaced by Invidious + ./invidious.nix + ./invidious-init-user.nix ]; networkPrefix = config.networkPrefix; diff --git a/hosts/fw/modules/web/invidious.nix b/hosts/fw/modules/web/invidious.nix index 72b7114..0cf88a0 100644 --- a/hosts/fw/modules/web/invidious.nix +++ b/hosts/fw/modules/web/invidious.nix @@ -1,9 +1,15 @@ { config, pkgs, lib, ... }: +with lib; { # Invidious - Privacy-focused YouTube frontend # Replaces Piped with native NixOS service + # Secret for Invidious companion authentication + sops.secrets.invidious-companion-key = { + key = "invidious-companion-key"; + }; + # Main Invidious service services.invidious = { enable = true; @@ -52,6 +58,115 @@ }; }; + # Use Podman for OCI containers + virtualisation.oci-containers.backend = "podman"; + + # Create Invidious network for container communication + systemd.services.init-invidious-network = { + description = "Create Podman network for Invidious companion"; + wantedBy = [ "multi-user.target" ]; + before = [ "podman-invidious-companion.service" ]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + }; + script = '' + ${pkgs.podman}/bin/podman network exists invidious-net || \ + ${pkgs.podman}/bin/podman network create --interface-name=podman2 --subnet=10.90.0.0/24 invidious-net + ''; + }; + + # Create systemd tmpfiles directory for Invidious config + systemd.tmpfiles.rules = [ + "d /var/lib/invidious 0755 root root - -" + "d /run/invidious-companion 0700 root root - -" + ]; + + # Generate companion environment file with secret key + systemd.services.invidious-companion-env-generate = { + description = "Generate Invidious companion environment file"; + wantedBy = [ "multi-user.target" ]; + before = [ "podman-invidious-companion.service" ]; + after = [ "init-invidious-network.service" ]; + requires = [ "init-invidious-network.service" ]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + }; + script = '' + COMPANION_KEY=$(cat ${config.sops.secrets.invidious-companion-key.path}) + cat > /run/invidious-companion/env < /var/lib/invidious/companion-config.json <