# Edit this configuration file to define what should be installed on
# your system.  Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running ‘nixos-help’).

{ config, pkgs, ... }:

{
	imports =
		[ # Include the results of the hardware scan.
			./hardware-configuration.nix
			./server-partitioning.nix
			./modules/shares.nix
			./modules/sops.nix
		];
	nix.settings.experimental-features = [ "nix-command" "flakes" ];
	# Bootloader.
	boot = {
		kernelPackages = pkgs.linuxPackages_latest;
		initrd.availableKernelModules = [
			"xhci_pci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc"
		];
		kernelModules = [ "fuse" "cifs" ];
		initrd.kernelModules = [ ];
		loader.systemd-boot.enable = true;
		loader.efi.canTouchEfiVariables = true;
		supportedFilesystems = [ "vfat" "btrfs" "cifs" ];
		extraModulePackages = [ ];
		extraModprobeConfig = ''
		'';
	};
	# Set your time zone.
	time.timeZone = "America/New_York";

	# Select internationalisation properties.
	i18n.defaultLocale = "en_US.UTF-8";

	i18n.extraLocaleSettings = {
		LC_ADDRESS = "en_US.UTF-8";
		LC_IDENTIFICATION = "en_US.UTF-8";
		LC_MEASUREMENT = "en_US.UTF-8";
		LC_MONETARY = "en_US.UTF-8";
		LC_NAME = "en_US.UTF-8";
		LC_NUMERIC = "en_US.UTF-8";
		LC_PAPER = "en_US.UTF-8";
		LC_TELEPHONE = "en_US.UTF-8";
		LC_TIME = "en_US.UTF-8";
	};

	# Enable the X11 windowing system.
	# You can disable this if you're only using the Wayland session.
	# services.xserver.enable = true;

	# Enable the KDE Plasma Desktop Environment.
	# services.displayManager.sddm.enable = true;
	# services.desktopManager.plasma6.enable = true;

	# Configure keymap in X11
	# services.xserver.xkb = {
	#   layout = "us";
	#   variant = "";
	# };

	# Enable CUPS to print documents.
	services.printing.enable = true;

	# Enable sound with pipewire.
	services.pulseaudio.enable = false;
	security.rtkit.enable = true;

	# Enable touchpad support (enabled default in most desktopManager).
	fonts = {
		enableDefaultPackages = true;
		fontDir.enable = true;
		packages = with pkgs; [
		];
	};

	# Define a user account. Don't forget to set a password with ‘passwd’.
	users.users.th3r00t = {
		isNormalUser = true;
		description = "Mike 'th3r00t' Young";
		extraGroups = [ "networkmanager" "wheel" "input" ];
		packages = with pkgs; [
			# kdePackages.kate
			#  thunderbird
		];
	};

	# Enable automatic login for the user.

	nixpkgs.config.allowUnfree = true;

	# List packages installed in system profile. To search, run:
	# $ nix search wget
	environment.variables.EDITOR = "nvim";
	environment.systemPackages = with pkgs; [
		#  vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
		#  wget
		git
		vim
		curl
		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;
	users.users.root.openssh.authorizedKeys.keys =
  [
    "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH8P/3yzsruekSaZ9b+yk429VTcfCtI1j8jnkNbPAgnr th3r00t@nixos"
  ];

	# Open ports in the firewall.
	networking.firewall.allowedTCPPorts = [ 21 22 80 443 5900 8080 ];
	networking.firewall.allowedUDPPorts = [ 21 22 80 443 5900 8080 ];
	# Or disable the firewall altogether.
	# networking.firewall.enable = false;

	# This value determines the NixOS release from which the default
	# settings for stateful data, like file locations and database versions
	# on your system were taken. It‘s perfectly fine and recommended to leave
	# this value at the release version of the first install of this system.
	# Before changing this value read the documentation for this option
	# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
	system.stateVersion = "25.05"; # Did you read the comment?

}
