Files
nixos-dogma/configuration.nix
T

455 lines
12 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
{
config,
lib,
pkgs,
inputs,
...
}: {
imports = [
# Include the results of the hardware scan.
./hardware-configuration.nix
./modules/mounts.nix
./modules/samba.nix
];
boot.loader.systemd-boot.enable = true;
boot.kernelModules = ["kvm-intel"];
boot.loader.systemd-boot.configurationLimit = 30;
boot.loader.efi.canTouchEfiVariables = true;
boot.kernel.sysctl = {
"net.ipv4.ip_forward" = 1;
"net.bridge.bridge-nf-call-iptables" = 1;
"net.ipv4.conf.all.forwarding" = 1;
"net.ipv6.conf.all.forwarding" = 1;
"net.ipv4.conf.all.proxy_arp" = 1;
"net.ipv4.conf.ens2.proxy_arp" = 1;
};
fonts.packages = with pkgs; [
fira-code
fira-code-symbols
nerd-fonts.hack
];
nixpkgs.config.allowUnfree = true;
virtualisation.libvirtd = {
"enable" = true;
allowedBridges = ["br0"];
};
virtualisation.docker.enable = true;
programs.virt-manager.enable = true;
programs.zsh.enable = true;
networking.hostName = "dogma-nixos";
# Configure network connections interactively with nmcli or nmtui.
networking.networkmanager.enable = true;
networking.firewall.trustedInterfaces = ["br0"];
# Set your time zone.
time.timeZone = "America/Phoenix";
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8";
console = {
font = "Lat2-Terminus16";
useXkbConfig = true; # use xkb.options in tty.
};
# Enable the X11 windowing system.
services.xserver.enable = true;
hardware.graphics = {
enable = true;
enable32bit = true;
};
services.xserver.xkb.layout = "us";
services.xserver.xkb.options = "caps:escape";
# Enable CUPS to print documents.
# services.printing.enable = true;
# Enable sound.
# services.pulseaudio.enable = true;
# OR
nix.settings.experimental-features = ["nix-command" "flakes"];
sops.age.keyFile = "/var/lib/sops-nix/keys.txt";
#sops.age.generateKey = true;
sops.defaultSopsFile = ./secrets/secrets.yaml;
sops.secrets = {
"factorio/service_username" = {};
"factorio/service_token" = {};
"factorio/gamepassword" = {};
"backblaze/apikey" = {};
"google/gmail" = {};
"caddy/acme_email" = {};
"dedyn/dnstoken" = {};
"dedyn/dnsuser" = {};
"github/token" = {};
"gitlab/token" = {};
"mongodb/initial_password" = {};
"namecheap/ddyn_password" = {
restartUnits = ["ddclient.service"];
};
};
sops.templates."factorio.json".content = builtins.toJSON {
service_username = config.sops.placeholder."factorio/service_username";
service_token = config.sops.placeholder."factorio/service_token";
gamepassword = config.sops.placeholder."factorio/gamepassword";
};
sops.templates."duplicity.env".content =
builtins.toJSON {
};
sops.templates."caddy.env" = {
owner = "root";
mode = "0600";
restartUnits = ["caddy.service"];
content = ''
ACME_EMAIL='${config.sops.placeholder."caddy/acme_email"}'
'';
};
services.pipewire = {
enable = true;
pulse.enable = true;
};
# Enable touchpad support (enabled default in most desktopManager).
# services.libinput.enable = true;
# Define a user account. Don't forget to set a password with ‘passwd’.
users.defaultUserShell = pkgs.zsh;
services.getty.autologinUser = "mask";
users.users.mask = {
isNormalUser = true;
shell = pkgs.zsh;
# Enable ‘sudo’ for the user. packages = with pkgs; [
# tree
extraGroups = [
"wheel"
"libvirtd"
"media"
"uinput"
];
};
services.sunshine = {
enable = true;
autoStart = true;
capSysAdmin = true; # only needed for Wayland -- omit this when using with Xorg
openFirewall = true;
};
# List packages installed in system profile.
# You can use https://search.nixos.org/ to find more packages (and options).
programs.hyprland.enable = true; # enable Hyprland
programs.nix-ld = {
enable = true;
libraries = with pkgs; [
zlib
zstd
stdenv.cc.cc
curl
openssl
libssh
bzip2
libxml2
acl
libsodium
util-linux
xz
systemd
];
};
environment.systemPackages = with pkgs; [
qbittorrent
pinentry-qt
ddclient
telegram-desktop
btop
# ungoogled-chromium
# opencode
doas
lan-mouse
stylua
gh
glab
gnupg
duplicity
wget
factorio-headless
dig
parted
tor-browser
jujutsu
caddy
clang
ansible
exiftool
gcc
home-manager
flaresolverr
docker-compose
virtio-win
spice
spice-gtk
OVMF
pigz
mpv
wofi
wayvnc
pcmanfm
htop
rsync
tmux
git
kitty
python3
deno
qbittorrent-nox
sonarr
radarr
jackett
jellyfin
curl
p7zip
dnsmasq
brave
keepassxc
sops
age
unzip
];
# Some programs need SUID wrappers, can be configured further or are
# started in user sessions.
# programs.mtr.enable = true;
# programs.gnupg.agent = { enable = true;
# enableSSHSupport = true;
# };
# List services that you want to enable:
# Enable the OpenSSH daemon.
services.openssh.enable = true;
services.caddy = {
enable = true;
environmentFile = config.sops.templates."caddy.env".path;
# globalConfig = ''
# acme_ca https://acme.zerossl.com/v2/DV90
# email {$ACME_EMAIL};
# '';
#tls ${config.sops.secrets.zerossl_cert.path} ${config.sops.secrets.zerossl_private_key.path}
virtualHosts."centraldogma.site:".extraConfig = ''
root * /srv/root/
file_server
encode zstd gzip
redir /jellyfin /jellyfin/
reverse_proxy /jellyfin/* 127.0.0.1:8096
redir /sonarr /sonarr/
reverse_proxy /sonarr/* 127.0.0.1:8989
redir /radarr /radarr/
reverse_proxy /radarr/* 127.0.0.1:7878
'';
virtualHosts."jellyfin.centraldogma.site:".extraConfig = ''
reverse_proxy /* 127.0.0.1:8096
'';
virtualHosts."jellyfin2.centraldogma.site:".extraConfig = ''
redir /jellyfin /jellyfin/
reverse_proxy /jellyfin/* 127.0.0.1:8096
'';
virtualHosts."git.centraldogma.site:".extraConfig = ''
reverse_proxy /* 127.0.0.1:3000
'';
virtualHosts."spy.centraldogma.site:".extraConfig = ''
reverse_proxy /* 192.168.1.78:4444
'';
# virtualHosts."blog.centraldogma.dedyn.io:".extraConfig = ''
# root * /srv/root/
# file_server
# encode zstd gzip
# '';
};
services.flaresolverr = {
enable = true;
};
services.mongodb = {
enable = true;
package = pkgs.mongodb-ce;
initialRootPasswordFile = config.sops.secrets."mongodb/initial_password".path;
};
networking.interfaces.enp6s0.useDHCP = false;
networking.interfaces.br0.useDHCP = true;
networking.bridges.br0.interfaces = ["enp6s0"];
# Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
# services.dnsmasq.enable = true;
# services.resolved.enable = false;
# networking.nameservers = ["1.1.1.1" "1.1.1.0"];
#
# services.dnsmasq.settings = {
# interface = "br0";
# bind-interface = true;
# server = [
# "1.1.1.1"
# "1.1.1.0"
# ];
# domain-needed = true;
# bogus-priv = true;
# };
#Services section
services.jackett = {
enable = true;
};
# services.duplicity = {
# enable = true;
# };
services.factorio = {
enable = true;
public = true;
requireUserVerification = true;
username = "TheMaskedMan95";
admins = ["TheMaskedMan95"];
game-name = "Realm of the Masked Men";
description = "No Dogs allowed";
extraSettingsFile = config.sops.templates."factorio.json".path;
saveName = "SPACExxxx";
openFirewall = true;
};
services.radarr = {
enable = true;
};
services.ddclient = {
enable = true;
protocol = "namecheap";
server = "dynamicdns.park-your-domain.com";
ssl = true;
username = "centraldogma.site";
domains = ["@" "www", "*"];
usev4 = "webv4, webv4=ipify-ipv4";
passwordFile = config.sops.secrets."namecheap/ddyn_password".path;
interval = "5mins";
};
services.sonarr = {
enable = true;
};
services.transmission = {
enable = true; #Enable transmission daemon
openRPCPort = true; #Open firewall for RPC
settings = {
#Override default settings
rpc-bind-address = "0.0.0.0"; #Bind to own IP
rpc-whitelist = "127.0.0.1,192.168.1.86"; #Whitelist your remote machine (10.0.0.1 in this example)
download-dir = "/mnt/media/Downloads";
};
};
services.adguardhome = {
enable = true;
# You can select any ip and port, just make sure to open firewalls where needed
host = "0.0.0.0";
port = 3003;
settings = {
allowDHCP = true;
dns = {
upstream_dns = [
# Example config with quad9
"9.9.9.9#dns.quad9.net"
"149.112.112.112#dns.quad9.net"
# Uncomment the following to use a local DNS service (e.g. Unbound)
# Additionally replace the address & port as needed
# "127.0.0.1:5335"
];
};
filtering = {
protection_enabled = true;
filtering_enabled = true;
parental_enabled = true; # Parental control-based DNS requests filtering.
safe_search = {
enabled = false; # Enforcing "Safe search" option for search engines, when possible.
};
};
# The following notation uses map
# to not have to manually create {enabled = true; url = "";} for every filter
# This is, however, fully optional
filters =
map (url: {
enabled = true;
url = url;
}) [
"https://adguardteam.github.io/HostlistsRegistry/assets/filter_9.txt" # The Big List of Hacked Malware Web Sites
"https://adguardteam.github.io/HostlistsRegistry/assets/filter_11.txt" # malicious url blocklist
];
};
};
#services.jellyfin = {
# enable = true;
#};
networking.firewall.enable = false;
#networking.networkmanager.ethernet.mtu = 9000;
# Copy the NixOS configuration file and link it from the resulting system
# (/run/current-system/configuration.nix). This is useful in case you
# accidentally delete configuration.nix.
# system.copySystemConfiguration = true;
# This option defines the first version of NixOS you have installed on this particular machine,
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
#
# Most users should NEVER change this value after the initial install, for any reason,
# even if you've upgraded your system to a new NixOS release.
#
# This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
# so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
# to actually do that.
#
# This value being lower than the current NixOS release does NOT mean your system is
# out of date, out of support, or vulnerable.
#
# Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
# and migrated your data accordingly.
#
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
system.stateVersion = "25.11"; # Did you read the comment?
}