# 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, ... }: let user = "admin"; password = "$y$j9T$EkPXmsmIMFFZ.WRrBYCxS1$P0kwo6e4.WM5DsqUcEqWC3MrZp5KfCjxffraMFZWu06"; hostname = "jallen-nas"; timezone = "America/Chicago"; main-pool = ''"Main\ Pool"''; in { imports = [ # Include the results of the hardware scan. ./hardware-configuration-nas.nix ./nas-apps/jellyfin.nix ./nas-apps/swag.nix ]; # Enable nix flakes and nix-command tools nix.settings.experimental-features = [ "nix-command" "flakes" ]; # Configure bootloader with lanzaboot and secureboot boot = { loader = { systemd-boot = { enable = true; configurationLimit = 2; }; efi = { canTouchEfiVariables = true; efiSysMountPoint = "/boot"; }; }; # Override kernel to latest kernelPackages = config.boot.zfs.package.latestCompatibleLinuxPackages; kernelParams = [ "nohibernate" ]; consoleLogLevel = 3; bootspec.enable = true; supportedFilesystems = [ "zfs" ]; # zfs = { # extraPools = [ # #"Main" + " " + "Pool" # #main-pool # #''"Safe\ SSD"'' # "Junk" # ]; # }; }; # Hardware configs hardware = { # Bluetooth bluetooth.enable = true; # Enable all firmware enableAllFirmware = true; # Disable pulse audio in favor of pipewire pulseaudio.enable = false; # Nvidia nvidia = { package = config.boot.kernelPackages.nvidiaPackages.beta; # Modesetting is required. modesetting.enable = true; # Nvidia power management. Experimental, and can cause sleep/suspend to fail. powerManagement.enable = false; # Fine-grained power management. Turns off GPU when not in use. # Experimental and only works on modern Nvidia GPUs (Turing or newer). powerManagement.finegrained = false; # Use the NVidia open source kernel module (not to be confused with the # independent third-party "nouveau" open source driver). # Support is limited to the Turing and later architectures. Full list of # supported GPUs is at: # https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus # Only available from driver 515.43.04+ # Currently alpha-quality/buggy, so false is currently the recommended setting. open = false; # Enable the Nvidia settings menu, # accessible via `nvidia-settings`. nvidiaSettings = true; }; # Enable OpenGL opengl = { enable = true; driSupport = true; driSupport32Bit = true; }; }; # Services configs services = { openssh.enable = true; # Enable firmware updates fwupd.enable = true; # Enable the X11 windowing system. xserver = { enable = true; # Load nvidia driver for Xorg and Wayland videoDrivers = ["nvidia"]; # Enable the Plasma 6 Desktop Environment. displayManager = { sddm.enable = true; defaultSession = "plasmawayland"; }; desktopManager.plasma5.enable = true; }; # Enable CUPS to print documents. printing.enable = true; # configure pipewire pipewire = { enable = true; alsa.enable = true; alsa.support32Bit = true; pulse.enable = true; }; # enable auto discovery of printers # avahi = { # enable = true; # nssmdns4 = true; # openFirewall = true; # }; # Enable Flatpak flatpak.enable = false; }; systemd.services.nas-mounts = { path = [ pkgs.zfs ]; script = '' zpool import -R /mnt -f "Main Pool" zpool import -R /mnt -f "Safe SSD" zpool import -R /mnt -f "Junk" zfs load-key -L file:///root/main-pool.key "Main Pool" zfs load-key -L file:///root/safe-ssd.key "Safe SSD" zfs mount -a ''; wantedBy = [ "multi-user.target" ]; }; # Networking configs enp7s0 networking = { hostName = hostname; interfaces.enp7s0.ipv4.routes = [{ address = "10.0.1.18"; prefixLength = 16; }]; hostId = "4b501480"; # Enable Network Manager networkmanager.enable = false; }; # Time config time = { # Set your time zone. timeZone = timezone; }; # Configure environment environment = { # List packages installed in system profile. To search, run: # $ nix search wget systemPackages = with pkgs; [ vim wget nano efibootmgr sbctl pciutils vulkan-tools clinfo ]; }; # Configure programs programs = { fish.enable = true; }; # Configure nixpkgs nixpkgs = { config = { # Enable non free allowUnfree = true; }; }; # Define a user account. Don't forget to set a password with ‘passwd’. users.users."${user}" = { isNormalUser = true; extraGroups = [ "wheel" "networkmanager" ]; # Enable ‘sudo’ for the user. initialHashedPassword = password; shell = pkgs.fish; packages = with pkgs; [ neofetch git parted aspell aspellDicts.en aspellDicts.en-computers aspellDicts.en-science aha papirus-icon-theme ]; }; virtualisation.docker.enable = true; virtualisation.docker.enableNvidia = 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. # # 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 = "23.11"; # Did you read the comment? }