First config

This commit is contained in:
Jordan
2026-09-07 05:06:00 -07:00
parent d4f9c38247
commit cbadbe80b3
+537
View File
@@ -0,0 +1,537 @@
# 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
];
boot.loader.systemd-boot.enable = true;
boot.kernelModules = ["kvm-intel"];
boot.loader.systemd-boot.configurationLimit = 30;
boot.loader.efi.canTouchEfiVariables = true;
#
# hardware.graphics.enable = true;
#
# hardware.nvidia = {
# modesetting.enable = true;
#
# open = false; # Recommended for GTX 1060
#
# nvidiaSettings = true;
#
# package = config.boot.kernelPackages.nvidiaPackages.stable;
# };
#
# environment.sessionVariables = {
# NIXOS_OZONE_WL = "1";
# };
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;
};
nixpkgs.config.allowUnfree = true;
fileSystems."/mnt/games" = {
device = "/dev/disk/by-uuid/969eb1a0-fb99-46d1-96cf-57a8644ee2d1";
fsType = "btrfs";
options = [
"users"
"compress=zstd"
"subvol=@games"
"nofail"
];
};
fileSystems."/mnt/photo" = {
device = "/dev/disk/by-uuid/969eb1a0-fb99-46d1-96cf-57a8644ee2d1";
fsType = "btrfs";
options = [
"users"
"compress=zstd"
"subvol=@Pictures"
"nofail"
];
};
fileSystems."/mnt/media" = {
device = "/dev/disk/by-uuid/969eb1a0-fb99-46d1-96cf-57a8644ee2d1";
fsType = "btrfs";
options = [
"users"
"compress=zstd"
"subvol=@media"
"nofail"
];
};
fileSystems."/mnt/winbackup" = {
device = "/dev/disk/by-uuid/969eb1a0-fb99-46d1-96cf-57a8644ee2d1";
fsType = "btrfs";
options = [
"users"
"compress=zstd"
"subvol=@winbackup"
"nofail"
];
};
fileSystems."/mnt/winhdd" = {
device = "/dev/sdb1";
fsType = "ntfs";
options = [
"users"
"windows_names"
"noatime"
"nofail"
];
};
virtualisation.libvirtd = {
"enable" = true;
allowedBridges = ["br0"];
};
virtualisation.docker.enable = true;
programs.virt-manager.enable = true;
programs.zsh.enable = true;
networking.hostName = "dogma-nixos"; # Define your hostname.
# 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;
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" = {};
"openai/legacy_token" = {};
};
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 {
service_username = config.sops.placeholder."factorio/service_username";
service_token = config.sops.placeholder."factorio/service_token";
gamepassword = config.sops.placeholder."factorio/gamepassword";
};
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;
};
# programs.firefox.enable = 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; [
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
zed
wofi
wayvnc
pcmanfm
htop
rsync
tmux
git
kitty
python3
samba
deno
qbittorrent-nox
sonarr
radarr
jackett
jellyfin
curl
p7zip
dnsmasq
brave
keepassxc
sops
age
];
# 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;
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.dedyn.io:".extraConfig = ''
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
'';
};
services.flaresolverr = {
enable = true;
};
services.samba = {
enable = true;
openFirewall = true;
settings = {
global = {
"security" = "user";
"workgroup" = "WORKGROUP";
"server string" = "smbnix";
"netbios name" = "smbnix";
#"use sendfile" = "yes";
#"max protocol" = "smb2";
# note: localhost is the ipv6 localhost ::1
"hosts allow" = "192.168.1.1/24 127.0.0.1 localhost";
"guest account" = "nobody";
"map to guest" = "bad user";
};
"games" = {
"path" = "/mnt/games";
"browseable" = "yes";
"read only" = "no";
"guest ok" = "no";
"create mask" = "0644";
"directory mask" = "0755";
};
"media" = {
"path" = "/mnt/media";
"browseable" = "yes";
"read only" = "no";
"guest ok" = "no";
"create mask" = "0644";
"directory mask" = "0755";
};
"photos" = {
"path" = "/mnt/photo";
"browseable" = "yes";
"read only" = "no";
"guest ok" = "no";
"create mask" = "0644";
"directory mask" = "0755";
};
"x" = {
"path" = "/home/mask/mounts/x";
"browseable" = "yes";
"read only" = "no";
"guest ok" = "no";
"create mask" = "0644";
"directory mask" = "0755";
};
"winhdd" = {
"path" = "/mnt/winhdd";
"browseable" = "yes";
"read only" = "no";
"guest ok" = "no";
"create mask" = "0644";
"directory mask" = "0755";
};
"winback" = {
"path" = "/mnt/winbackup";
"browseable" = "yes";
"read only" = "no";
"guest ok" = "no";
"create mask" = "0644";
"directory mask" = "0755";
};
};
};
services.samba-wsdd = {
enable = true;
openFirewall = true;
};
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.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?
}