2025-03-10 14:34:41 -04:00
|
|
|
|
{ config, lib, nix-config, inputs, pkgs, ... }:
|
2025-02-20 16:23:09 -05:00
|
|
|
|
|
|
|
|
|
{
|
2025-03-10 15:42:03 -04:00
|
|
|
|
imports = with nix-config.nixosModules; [
|
2025-03-10 13:52:39 -04:00
|
|
|
|
./hardware-configuration.nix
|
2025-03-10 15:42:03 -04:00
|
|
|
|
sops-config
|
2025-03-10 16:49:56 -04:00
|
|
|
|
filesystems
|
2025-03-10 13:52:39 -04:00
|
|
|
|
];
|
|
|
|
|
|
2025-03-10 13:57:20 -04:00
|
|
|
|
nixpkgs = {
|
|
|
|
|
config = {
|
|
|
|
|
allowUnfree = true;
|
|
|
|
|
};
|
2025-03-10 14:34:41 -04:00
|
|
|
|
|
|
|
|
|
overlays = builtins.attrValues nix-config.overlays ++ [
|
|
|
|
|
inputs.nh.overlays.default
|
|
|
|
|
];
|
2025-03-10 13:57:20 -04:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
nix = {
|
|
|
|
|
settings = {
|
|
|
|
|
experimental-features = [
|
|
|
|
|
"nix-command"
|
|
|
|
|
"flakes"
|
|
|
|
|
];
|
|
|
|
|
substituters = [
|
|
|
|
|
"https://nix-community.cachix.org"
|
|
|
|
|
"https://cache.garnix.io"
|
|
|
|
|
];
|
|
|
|
|
trusted-public-keys = [
|
|
|
|
|
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
|
|
|
|
"cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g="
|
|
|
|
|
];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
registry = {
|
|
|
|
|
emenel-templates.flake = inputs.emenel-templates;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
channel.enable = false; # remove nix-channel related tools & configs, we use flakes instead.
|
|
|
|
|
};
|
2025-03-10 13:52:39 -04:00
|
|
|
|
|
|
|
|
|
# Use the systemd-boot EFI boot loader.
|
|
|
|
|
boot.loader.systemd-boot.enable = true;
|
|
|
|
|
boot.loader.efi.canTouchEfiVariables = true;
|
2025-03-10 15:42:03 -04:00
|
|
|
|
boot.supportedFilesystems = [ "nfs" ];
|
2025-03-10 13:52:39 -04:00
|
|
|
|
|
|
|
|
|
networking.hostName = "media-server"; # Define your hostname.
|
|
|
|
|
# Pick only one of the below networking options.
|
|
|
|
|
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
|
|
|
|
|
networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
|
|
|
|
|
|
|
|
|
|
# Set your time zone.
|
|
|
|
|
time.timeZone = "America/Toronto";
|
|
|
|
|
|
2025-03-10 15:42:03 -04:00
|
|
|
|
sops-config = {
|
|
|
|
|
key-file = "/home/media/.config/sops/age/keys.txt";
|
|
|
|
|
};
|
|
|
|
|
|
2025-03-10 13:52:39 -04:00
|
|
|
|
# Define a user account. Don't forget to set a password with ‘passwd’.
|
|
|
|
|
users.users.media = {
|
|
|
|
|
isNormalUser = true;
|
|
|
|
|
extraGroups = [ "wheel" "input" "audio" "video" "network" "networkmanager" ]; # Enable ‘sudo’ for the user.
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
environment.systemPackages = with pkgs; [
|
|
|
|
|
wget
|
|
|
|
|
curl
|
2025-03-10 22:23:34 -04:00
|
|
|
|
cifs-utils
|
2025-03-10 13:52:39 -04:00
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
fonts = {
|
|
|
|
|
enableDefaultPackages = true;
|
|
|
|
|
fontDir.enable = true;
|
|
|
|
|
fontconfig = {
|
|
|
|
|
enable = true;
|
|
|
|
|
useEmbeddedBitmaps = true;
|
|
|
|
|
};
|
2025-03-10 13:59:58 -04:00
|
|
|
|
};
|
2025-03-10 13:52:39 -04:00
|
|
|
|
|
|
|
|
|
|
2025-03-10 13:59:58 -04:00
|
|
|
|
hardware = {
|
|
|
|
|
amdgpu.initrd.enable = true;
|
|
|
|
|
enableAllFirmware = true;
|
|
|
|
|
uinput.enable = true;
|
|
|
|
|
};
|
2025-03-10 13:52:39 -04:00
|
|
|
|
|
2025-03-10 13:59:58 -04:00
|
|
|
|
services.power-profiles-daemon = {
|
|
|
|
|
enable = true;
|
|
|
|
|
package = pkgs.power-profiles-daemon;
|
|
|
|
|
};
|
2025-03-10 13:52:39 -04:00
|
|
|
|
|
2025-03-10 13:59:58 -04:00
|
|
|
|
# enable the OpenSSH daemon.
|
|
|
|
|
services.openssh.enable = true;
|
|
|
|
|
programs.ssh.startAgent = true;
|
2025-03-10 13:52:39 -04:00
|
|
|
|
|
2025-03-10 13:59:58 -04:00
|
|
|
|
services.resolved = {
|
|
|
|
|
enable = true;
|
|
|
|
|
extraConfig = ''
|
2025-03-10 13:52:39 -04:00
|
|
|
|
LLMNR=no
|
|
|
|
|
ReadEtcHosts=no
|
|
|
|
|
DNSSEC=no
|
|
|
|
|
'';
|
2025-03-10 13:59:58 -04:00
|
|
|
|
};
|
|
|
|
|
services.avahi = {
|
|
|
|
|
enable = true;
|
|
|
|
|
publish.enable = true;
|
|
|
|
|
publish.userServices = true;
|
|
|
|
|
openFirewall = true;
|
|
|
|
|
nssmdns4 = true;
|
|
|
|
|
};
|
|
|
|
|
services.samba = {
|
|
|
|
|
enable = true;
|
|
|
|
|
package = pkgs.sambaFull;
|
|
|
|
|
openFirewall = true;
|
2025-03-10 18:50:05 -04:00
|
|
|
|
settings = {
|
|
|
|
|
global = {
|
|
|
|
|
"workgroup" = "WORKGROUP";
|
|
|
|
|
"server string" = "media-server";
|
|
|
|
|
"netbios name" = "media-server";
|
|
|
|
|
"security" = "user";
|
2025-03-10 22:20:54 -04:00
|
|
|
|
# "hosts allow" = "192.168.50. 127.0.0.1 localhost";
|
|
|
|
|
# "hosts deny" = "0.0.0.0/0";
|
2025-03-10 18:50:05 -04:00
|
|
|
|
"guest account" = "nobody";
|
|
|
|
|
"map to guest" = "bad user";
|
|
|
|
|
};
|
2025-03-10 18:51:04 -04:00
|
|
|
|
"import" = {
|
2025-03-10 22:28:16 -04:00
|
|
|
|
"path" = "/mnt/shares/import";
|
2025-03-10 18:50:05 -04:00
|
|
|
|
"browseable" = "yes";
|
|
|
|
|
"read only" = "no";
|
|
|
|
|
"guest ok" = "no";
|
|
|
|
|
"create mask" = "0644";
|
|
|
|
|
"directory mask" = "0755";
|
|
|
|
|
"force user" = "media";
|
|
|
|
|
};
|
|
|
|
|
};
|
2025-03-10 13:59:58 -04:00
|
|
|
|
};
|
|
|
|
|
services.samba-wsdd = {
|
|
|
|
|
enable = true;
|
|
|
|
|
openFirewall = true;
|
|
|
|
|
};
|
2025-03-10 13:52:39 -04:00
|
|
|
|
|
2025-03-10 14:11:00 -04:00
|
|
|
|
programs.nh = {
|
|
|
|
|
enable = true;
|
|
|
|
|
clean = {
|
|
|
|
|
enable = true;
|
|
|
|
|
dates = "daily";
|
|
|
|
|
extraArgs = "--keep 4";
|
|
|
|
|
};
|
|
|
|
|
flake = "/home/media-server/nixos-config";
|
|
|
|
|
package = pkgs.nh;
|
|
|
|
|
};
|
2025-03-10 13:52:39 -04:00
|
|
|
|
|
2025-03-10 13:59:58 -04:00
|
|
|
|
# enable fish and launch it from bash for interactive shells
|
|
|
|
|
programs.fish.enable = true;
|
|
|
|
|
environment.pathsToLink = [ "/share/fish" ];
|
|
|
|
|
programs.bash = {
|
|
|
|
|
interactiveShellInit = ''
|
2025-03-10 13:52:39 -04:00
|
|
|
|
if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]]
|
|
|
|
|
then
|
|
|
|
|
shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION=""
|
|
|
|
|
exec ${pkgs.fish}/bin/fish $LOGIN_OPTION
|
|
|
|
|
fi
|
|
|
|
|
'';
|
2025-03-10 13:59:58 -04:00
|
|
|
|
};
|
2025-03-10 13:52:39 -04:00
|
|
|
|
|
2025-03-10 13:59:58 -04:00
|
|
|
|
programs.git = {
|
|
|
|
|
enable = true;
|
|
|
|
|
};
|
2025-03-10 13:52:39 -04:00
|
|
|
|
|
2025-03-10 14:17:53 -04:00
|
|
|
|
services.tailscale.enable = true;
|
|
|
|
|
systemd.services.tailscaled.after = [ "NetworkManager-wait-online.service" ];
|
2025-03-10 14:16:39 -04:00
|
|
|
|
|
|
|
|
|
|
2025-03-10 15:42:03 -04:00
|
|
|
|
nixarr = {
|
|
|
|
|
enable = true;
|
|
|
|
|
|
2025-03-10 17:30:58 -04:00
|
|
|
|
# mediaDir = "/mnt/filez/media";
|
2025-03-10 15:42:03 -04:00
|
|
|
|
stateDir = "/data/media/.state/nixarr";
|
|
|
|
|
|
2025-03-10 17:30:58 -04:00
|
|
|
|
mediaUsers = [
|
|
|
|
|
"media"
|
2025-03-10 17:32:31 -04:00
|
|
|
|
"plex"
|
2025-03-10 17:30:58 -04:00
|
|
|
|
];
|
|
|
|
|
|
2025-03-10 15:42:03 -04:00
|
|
|
|
transmission = {
|
|
|
|
|
enable = true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
bazarr.enable = true;
|
|
|
|
|
lidarr.enable = true;
|
|
|
|
|
prowlarr.enable = true;
|
|
|
|
|
radarr.enable = true;
|
|
|
|
|
readarr.enable = true;
|
|
|
|
|
sonarr.enable = true;
|
|
|
|
|
jellyseerr.enable = true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
services.plex = {
|
|
|
|
|
enable = true;
|
2025-03-10 17:42:27 -04:00
|
|
|
|
openFirewall = true;
|
2025-03-10 15:42:03 -04:00
|
|
|
|
};
|
2025-03-10 14:16:39 -04:00
|
|
|
|
|
2025-03-10 20:33:10 -04:00
|
|
|
|
systemd.targets.sleep.enable = false;
|
|
|
|
|
systemd.targets.suspend.enable = false;
|
|
|
|
|
systemd.targets.hibernate.enable = false;
|
|
|
|
|
systemd.targets.hybrid-sleep.enable = false;
|
|
|
|
|
|
2025-03-10 13:59:58 -04:00
|
|
|
|
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
|
|
|
|
|
system.stateVersion = "25.05"; # Did you read the comment?
|
2025-03-10 13:52:39 -04:00
|
|
|
|
|
2025-02-20 16:23:09 -05:00
|
|
|
|
}
|