First config
This commit is contained in:
@@ -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?
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user