Add HomeAssistant container
This commit is contained in:
@ -116,54 +116,12 @@
|
|||||||
# TODO: Networking system module
|
# TODO: Networking system module
|
||||||
# NOTE: The systemd networking options are not very flexible, so this will be a problem for the laptop. (=> Use IWD for WiFi)
|
# NOTE: The systemd networking options are not very flexible, so this will be a problem for the laptop. (=> Use IWD for WiFi)
|
||||||
systemd = {
|
systemd = {
|
||||||
network = {
|
network = let
|
||||||
|
eth-interface = "enp0s31f6";
|
||||||
|
wireless-interface = "";
|
||||||
|
in {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
# TODO: Not supposed to be used, I use the systemd services below. Kept as example only.
|
|
||||||
# WireGuard for ProtonVPN
|
|
||||||
# netdevs."wg0" = {
|
|
||||||
# # Here we configure the virtual network device for wireguard
|
|
||||||
# netdevConfig = {
|
|
||||||
# Kind = "wireguard";
|
|
||||||
# Name = "wg0";
|
|
||||||
# MTUBytes = "1300"; # TODO: What is the value for ProtonVPN? Do I need this?
|
|
||||||
# };
|
|
||||||
|
|
||||||
# wireguardConfig = {
|
|
||||||
# # TODO: This path is bad, it shouldn't be user specific
|
|
||||||
# # PrivateKeyFile = "/home/christoph/.wireguard-keys/de-115.key";
|
|
||||||
# PrivateKeyFile = "/var/secrets/wireguard/de-115.key";
|
|
||||||
# ListenPort = 9918;
|
|
||||||
# };
|
|
||||||
|
|
||||||
# wireguardPeers = [{
|
|
||||||
# wireguardPeerConfig = {
|
|
||||||
# PublicKey = "9+CorlxrTsQR7qjIOVKsEkk8Z7UUS5WT3R1ccF7a0ic=";
|
|
||||||
# AllowedIPs = [ "0.0.0.0/0" ]; # TODO: Does this enforce routing through wireguard
|
|
||||||
# Endpoint = "194.126.177.14:51820"; # Proton IP from their wireguard config
|
|
||||||
# };
|
|
||||||
# }];
|
|
||||||
# };
|
|
||||||
|
|
||||||
# networks."10-wg0" = {
|
|
||||||
# # See also man systemd.network
|
|
||||||
# matchConfig.Name = "wg0";
|
|
||||||
# # IP addresses the client interface will have
|
|
||||||
# address = [
|
|
||||||
# "10.2.0.2/32" # Given by ProtonVPN wireguard config
|
|
||||||
# ];
|
|
||||||
# DHCP = "no";
|
|
||||||
# dns = [ "10.2.0.1" ]; # Given by ProtonVPN wireguard config
|
|
||||||
# # ntp = [ "fc00::123" ];
|
|
||||||
# # gateway = [
|
|
||||||
# # "fc00::1"
|
|
||||||
# # "10.100.0.1"
|
|
||||||
# # ];
|
|
||||||
# networkConfig = {
|
|
||||||
# IPv6AcceptRA = false;
|
|
||||||
# };
|
|
||||||
# };
|
|
||||||
|
|
||||||
# LAN
|
# LAN
|
||||||
networks."50-ether" = {
|
networks."50-ether" = {
|
||||||
# name = "enp0s31f6"; # Network interface name?
|
# name = "enp0s31f6"; # Network interface name?
|
||||||
@ -172,13 +130,15 @@
|
|||||||
# See man systemd.link, man systemd.netdev, man systemd.network
|
# See man systemd.link, man systemd.netdev, man systemd.network
|
||||||
matchConfig = {
|
matchConfig = {
|
||||||
# This corresponds to the [MATCH] section
|
# This corresponds to the [MATCH] section
|
||||||
Name = "enp0s31f6"; # Match ethernet interface
|
Name = eth-interface; # Match ethernet interface
|
||||||
};
|
};
|
||||||
|
|
||||||
# See man systemd.network
|
# See man systemd.network
|
||||||
networkConfig = {
|
networkConfig = {
|
||||||
# This corresponds to the [NETWORK] section
|
# This corresponds to the [NETWORK] section
|
||||||
DHCP = "yes";
|
DHCP = "yes";
|
||||||
|
|
||||||
|
# TODO: What does this all do?
|
||||||
# IPv6AcceptRA = true;
|
# IPv6AcceptRA = true;
|
||||||
# MulticastDNS = "yes"; # Needed?
|
# MulticastDNS = "yes"; # Needed?
|
||||||
# LLMNR = "no"; # Needed?
|
# LLMNR = "no"; # Needed?
|
||||||
@ -195,6 +155,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
services = let
|
services = let
|
||||||
|
# TODO: IPv6 Configuration
|
||||||
wgup = interface: privatekey: publickey: endpoint: ''
|
wgup = interface: privatekey: publickey: endpoint: ''
|
||||||
#! ${pkgs.bash}/bin/bash
|
#! ${pkgs.bash}/bin/bash
|
||||||
${pkgs.iproute}/bin/ip link add ${interface} type wireguard
|
${pkgs.iproute}/bin/ip link add ${interface} type wireguard
|
||||||
@ -216,7 +177,7 @@
|
|||||||
in {
|
in {
|
||||||
# See https://reflexivereflection.com/posts/2018-12-18-wireguard-vpn-with-network-namespace-on-nixos.html
|
# See https://reflexivereflection.com/posts/2018-12-18-wireguard-vpn-with-network-namespace-on-nixos.html
|
||||||
# See https://try.popho.be/vpn-netns.html#automatic-with-a-systemd.service5
|
# See https://try.popho.be/vpn-netns.html#automatic-with-a-systemd.service5
|
||||||
# This namespace contains the physical links/interfaces, because the applications don't need to see them, they just need the wireguard tunnel
|
# This namespace contains the WireGuard virtual network device, because this should be the only interface available for apps that should run through VPN
|
||||||
netns-vpn = {
|
netns-vpn = {
|
||||||
description = "Network namespace for ProtonVPN using Wireguard";
|
description = "Network namespace for ProtonVPN using Wireguard";
|
||||||
wantedBy = [ "default.target" ];
|
wantedBy = [ "default.target" ];
|
||||||
@ -263,6 +224,7 @@
|
|||||||
# proxy.default = "http://user:password@proxy:port/";
|
# proxy.default = "http://user:password@proxy:port/";
|
||||||
# proxy.noProxy = "127.0.0.1,localhost,internal.domain";
|
# proxy.noProxy = "127.0.0.1,localhost,internal.domain";
|
||||||
|
|
||||||
|
enableIPv6 = true;
|
||||||
networkmanager.enable = false;
|
networkmanager.enable = false;
|
||||||
useDHCP = false; # Default: true, don't use with networkd
|
useDHCP = false; # Default: true, don't use with networkd
|
||||||
dhcpcd.enable = false; # Don't use with networkd
|
dhcpcd.enable = false; # Don't use with networkd
|
||||||
@ -287,8 +249,13 @@
|
|||||||
22 # SSH
|
22 # SSH
|
||||||
80 # HTTP
|
80 # HTTP
|
||||||
443 # HTTPS
|
443 # HTTPS
|
||||||
5800 # Picard
|
|
||||||
8096 # Jellyfin
|
# Containers
|
||||||
|
# 5800 # Picard
|
||||||
|
# 8096 # Jellyfin
|
||||||
|
# 8097 # Emby
|
||||||
|
# 8123 # Home-Assistant
|
||||||
|
# 32400 # Plex
|
||||||
];
|
];
|
||||||
allowedTCPPortRanges = [];
|
allowedTCPPortRanges = [];
|
||||||
|
|
||||||
@ -548,7 +515,7 @@
|
|||||||
oci-containers.backend = "podman";
|
oci-containers.backend = "podman";
|
||||||
oci-containers.containers = {
|
oci-containers.containers = {
|
||||||
jellyfin = {
|
jellyfin = {
|
||||||
image = "jellyfin/jellyfin";
|
image = "linuxserver/jellyfin";
|
||||||
autoStart = false;
|
autoStart = false;
|
||||||
|
|
||||||
ports = [
|
ports = [
|
||||||
@ -558,8 +525,9 @@
|
|||||||
volumes = [
|
volumes = [
|
||||||
"jellyfin-cache:/cache:Z"
|
"jellyfin-cache:/cache:Z"
|
||||||
"jellyfin-config:/config:Z"
|
"jellyfin-config:/config:Z"
|
||||||
"/home/christoph/Videos/Movies:/media/Movies:ro,private"
|
"/home/christoph/Videos/Movies:/media/Movies:ro"
|
||||||
"/home/christoph/Music/Spotify:/media/Music:ro,private"
|
"/home/christoph/Videos/Photos:/media/Photos:ro"
|
||||||
|
# "/home/christoph/Music/Spotify:/media/Music:ro"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -576,6 +544,52 @@
|
|||||||
"/home/christoph/Music/Spotify:/storage:rw,private"
|
"/home/christoph/Music/Spotify:/storage:rw,private"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
homeassistant = {
|
||||||
|
image = "homeassistant/home-assistant";
|
||||||
|
autoStart = false;
|
||||||
|
|
||||||
|
ports = [
|
||||||
|
"8123:8123"
|
||||||
|
];
|
||||||
|
|
||||||
|
volumes = [
|
||||||
|
"homeassistant-config:/config:Z"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# plex = {
|
||||||
|
# image = "linuxserver/plex";
|
||||||
|
# autoStart = false;
|
||||||
|
|
||||||
|
# ports = [
|
||||||
|
# "32400:32400/tcp"
|
||||||
|
# ];
|
||||||
|
|
||||||
|
# volumes = [
|
||||||
|
# "plex-config:/config:Z"
|
||||||
|
# "plex-transcode:/transcode:Z"
|
||||||
|
# "/home/christoph/Videos/Movies:/data/Movies:ro"
|
||||||
|
# "/home/christoph/Music/Spotify:/data/Music:ro"
|
||||||
|
# ];
|
||||||
|
# };
|
||||||
|
|
||||||
|
# emby = {
|
||||||
|
# image = "linuxserver/emby";
|
||||||
|
# autoStart = false;
|
||||||
|
|
||||||
|
# ports = [
|
||||||
|
# # Host port 8096 already used by Jellyfin
|
||||||
|
# "8097:8096"
|
||||||
|
# ];
|
||||||
|
|
||||||
|
# volumes = [
|
||||||
|
# "emby-config:/config:Z"
|
||||||
|
# "/home/christoph/Videos/Movies:/data/movies:ro"
|
||||||
|
# "/home/christoph/Videos/Pictures:/data/pictures:ro"
|
||||||
|
# "/home/christoph/Music/Spotify:/data/music:ro"
|
||||||
|
# ];
|
||||||
|
# };
|
||||||
};
|
};
|
||||||
|
|
||||||
libvirtd.enable = true;
|
libvirtd.enable = true;
|
||||||
|
Reference in New Issue
Block a user