294 lines
6.7 KiB
Nix
294 lines
6.7 KiB
Nix
{
|
|
inputs,
|
|
config,
|
|
lib,
|
|
mylib,
|
|
pkgs,
|
|
...
|
|
}: rec {
|
|
imports = [
|
|
# Include the results of the hardware scan.
|
|
./hardware-configuration.nix
|
|
|
|
inputs.musnix.nixosModules.musnix
|
|
];
|
|
|
|
# Low latency audio
|
|
musnix = {
|
|
enable = true;
|
|
# musnix.soundcardPciId = ;
|
|
};
|
|
|
|
services.xserver = {
|
|
# Configure keymap in X11
|
|
layout = "us";
|
|
xkbVariant = "altgr-intl";
|
|
|
|
# videoDrivers = [ "nvidia" ]; # NVIDIA
|
|
videoDrivers = ["amdgpu"];
|
|
};
|
|
|
|
# TODO: System module for this
|
|
systemd.network = let
|
|
# eth-interface = "enp0s31f6";
|
|
eth-interface = "enp*";
|
|
# wireless-interface = "wlp5s0";
|
|
wireless-interface = "wlp*";
|
|
in {
|
|
enable = true;
|
|
|
|
# LAN
|
|
networks."50-ether" = {
|
|
# name = "enp0s31f6"; # Network interface name?
|
|
enable = true;
|
|
|
|
# See man systemd.link, man systemd.netdev, man systemd.network
|
|
matchConfig = {
|
|
# This corresponds to the [MATCH] section
|
|
Name = eth-interface; # Match ethernet interface
|
|
};
|
|
|
|
# See man systemd.network
|
|
networkConfig = {
|
|
# This corresponds to the [NETWORK] section
|
|
DHCP = "yes";
|
|
|
|
# TODO: What does this all do?
|
|
# IPv6AcceptRA = true;
|
|
# MulticastDNS = "yes"; # Needed?
|
|
# LLMNR = "no"; # Needed?
|
|
# LinkLocalAddressing = "no"; # Needed?
|
|
};
|
|
|
|
linkConfig = {
|
|
# This corresponds to the [LINK] section
|
|
# RequiredForOnline = "routable";
|
|
};
|
|
};
|
|
};
|
|
|
|
# TODO: System module for these
|
|
# TODO: I also want a function to generate these configs, I just want to pass volumes, ports, env and image
|
|
virtualisation.oci-containers.containers = {
|
|
jellyfin = {
|
|
image = "linuxserver/jellyfin:10.8.10";
|
|
autoStart = false;
|
|
|
|
ports = [
|
|
"8096:8096/tcp"
|
|
];
|
|
|
|
volumes = [
|
|
"jellyfin-cache:/cache:Z"
|
|
"jellyfin-config:/config:Z"
|
|
# "/home/christoph/Videos/Movies:/media/Movies"
|
|
# "/home/christoph/Videos/Shows:/media/Shows"
|
|
"/home/christoph/Videos/Video:/media/Video"
|
|
"/home/christoph/Videos/Picture:/media/Picture"
|
|
# "/home/christoph/Videos/Concerts:/media/Concerts"
|
|
# "/home/christoph/Music/Spotify:/media/Music:ro"
|
|
"/home/christoph/GameHDD/Video:/media/Video2"
|
|
];
|
|
|
|
environment = {
|
|
PUID = "1000";
|
|
PGID = "1000";
|
|
TZ = "Europe/Berlin";
|
|
};
|
|
};
|
|
|
|
# TODO: When setting PUID/PGID fileflows can't access /temp dir
|
|
# fileflows = {
|
|
# image = "revenz/fileflows";
|
|
# autoStart = false;
|
|
|
|
# ports = [
|
|
# "5000:5000"
|
|
# ];
|
|
|
|
# volumes = [
|
|
# "fileflows-cache:/temp:Z"
|
|
# "fileflows-data:/app/Data:Z"
|
|
# "/home/christoph/Videos/Video:/media"
|
|
# ];
|
|
|
|
# environment = {
|
|
# PUID = "1000";
|
|
# PGID = "1000";
|
|
# TZ = "Europe/Berlin";
|
|
# };
|
|
# };
|
|
|
|
sonarr = {
|
|
image = "linuxserver/sonarr:3.0.10";
|
|
autoStart = false;
|
|
|
|
extraOptions = [
|
|
"--network=ns:/var/run/netns/vpn"
|
|
"--dns=10.2.0.1"
|
|
];
|
|
|
|
ports = [
|
|
"8989:8989"
|
|
];
|
|
|
|
volumes = [
|
|
"sonarr-config:/config:Z"
|
|
"/home/christoph/Videos/Shows:/tv"
|
|
"/home/christoph/Videos/SabNzbd:/downloads"
|
|
];
|
|
|
|
environment = {
|
|
PUID = "1000";
|
|
PGID = "1000";
|
|
TZ = "Europe/Berlin";
|
|
};
|
|
};
|
|
|
|
radarr = {
|
|
image = "linuxserver/radarr:4.4.4";
|
|
autoStart = false;
|
|
|
|
extraOptions = [
|
|
"--network=ns:/var/run/netns/vpn"
|
|
"--dns=10.2.0.1"
|
|
];
|
|
|
|
ports = [
|
|
"7878:7878"
|
|
];
|
|
|
|
volumes = [
|
|
"radarr-config:/config:Z"
|
|
"/home/christoph/Videos/Movies:/movies"
|
|
"/home/christoph/Videos/SabNzbd:/downloads"
|
|
];
|
|
|
|
environment = {
|
|
PUID = "1000";
|
|
PGID = "1000";
|
|
TZ = "Europe/Berlin";
|
|
};
|
|
};
|
|
|
|
hydra = {
|
|
image = "linuxserver/nzbhydra2:5.1.8";
|
|
autoStart = false;
|
|
|
|
extraOptions = [
|
|
"--network=ns:/var/run/netns/vpn"
|
|
"--dns=10.2.0.1"
|
|
];
|
|
|
|
ports = [
|
|
"5076:5076"
|
|
];
|
|
|
|
volumes = [
|
|
"hydra-config:/config:Z"
|
|
"/home/christoph/Videos/SabNzbd:/downloads"
|
|
];
|
|
|
|
environment = {
|
|
PUID = "1000";
|
|
PGID = "1000";
|
|
TZ = "Europe/Berlin";
|
|
};
|
|
};
|
|
|
|
sabnzbd = {
|
|
image = "linuxserver/sabnzbd:4.0.1";
|
|
autoStart = false;
|
|
|
|
extraOptions = [
|
|
"--network=ns:/var/run/netns/vpn"
|
|
"--dns=10.2.0.1"
|
|
];
|
|
|
|
ports = [
|
|
"8080:8080"
|
|
];
|
|
|
|
volumes = [
|
|
"sabnzbd-config:/config:Z"
|
|
"/home/christoph/Videos/SabNzbd:/downloads"
|
|
"/home/christoph/Videos/.sabnzbd:/incomplete-downloads"
|
|
];
|
|
|
|
environment = {
|
|
PUID = "1000";
|
|
PGID = "1000";
|
|
TZ = "Europe/Berlin";
|
|
};
|
|
};
|
|
|
|
homeassistant = {
|
|
image = "homeassistant/home-assistant:2023.5";
|
|
autoStart = false;
|
|
|
|
ports = [
|
|
"8123:8123"
|
|
];
|
|
|
|
volumes = [
|
|
"homeassistant-config:/config:Z"
|
|
];
|
|
|
|
environment = {
|
|
PUID = "1000";
|
|
PGID = "1000";
|
|
TZ = "Europe/Berlin";
|
|
};
|
|
};
|
|
|
|
# NOTE: PyTorch ROCM image is 36 GB large...
|
|
# NOTE: This requires to setup the PodmanROCM direcory beforehand, as described here:
|
|
# https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Install-and-Run-on-AMD-GPUs#running-inside-docker
|
|
# stablediffusion = {
|
|
# image = "rocm/pytorch";
|
|
# autoStart = false;
|
|
|
|
# extraOptions = [
|
|
# "--network=host"
|
|
# "--device=/dev/kfd"
|
|
# "--device=/dev/dri"
|
|
# "--group-add=video"
|
|
# "--ipc=host"
|
|
# "--cap-add=SYS_PTRACE"
|
|
# "--security-opt=seccomp=unconfined"
|
|
# ];
|
|
|
|
# volumes = [
|
|
# "/home/christoph/NoSync/StableDiffusionWebUI:/webui-data"
|
|
# ];
|
|
|
|
# # TODO: User christoph not found in passwd file
|
|
# # user = "christoph:users";
|
|
|
|
# environment = {
|
|
# UID = "1000";
|
|
# GID = "100";
|
|
# TZ = "Europe/Berlin";
|
|
# };
|
|
|
|
# entrypoint = "/webui-data/launch.sh";
|
|
# };
|
|
};
|
|
|
|
# Make the system services available to the user
|
|
# NOTE: This doesn't work, since the cidfile is located in /run, which is not writable for regular users...
|
|
systemd.user.services = let
|
|
# Filter all system service attributes that the user units don't have and add some required attributes
|
|
system2user = attrs: lib.mergeAttrs (lib.attrsets.filterAttrs (n: v: !(
|
|
n == "confinement" ||
|
|
n == "runner" ||
|
|
n == "environment"
|
|
)) attrs) {
|
|
startLimitIntervalSec = 1;
|
|
startLimitBurst = 5;
|
|
};
|
|
in {
|
|
# podman-stablediffusion = system2user config.systemd.services.podman-stablediffusion;
|
|
};
|
|
}
|