# 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.
			./xps13-hardware-configuration.nix
			./modules/configuration-common.nix
			# ./modules/shares.nix
			# ./modules/sops.nix
			./modules/laptop.nix
		];
	# Bootloader.
	boot = {
		kernelPackages = pkgs.linuxPackages_latest;
		initrd.availableKernelModules = [
			"xhci_pci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc"
		];
		kernelModules = [ "fuse" "coretemp" "cifs" "kvm-intel" ];
		initrd.kernelModules = [ "ath10k_pci" ];
		loader.systemd-boot.enable = true;
		loader.efi.canTouchEfiVariables = true;
		supportedFilesystems = [ "vfat" "ext4" "cifs" "exfat" ];
		extraModulePackages = [ ];
		extraModprobeConfig = ''
			options ath10k_pcs irq_mode=1
			options ath10k_core rawmode=1
		'';
	};
	services.udisks2.enable = false;
	# Set your time zone.

	# 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;
	programs.uwsm.enable = true;
	programs.hyprland.withUWSM = true;

	# Enable sound with pipewire.
	services.pulseaudio.enable = false;
	security.rtkit.enable = true;
	services.pipewire = {
		enable = true;
		alsa.enable = true;
		alsa.support32Bit = true;
		pulse.enable = true;
		jack.enable = true;

		# use the example session manager (no others are packaged yet so this is enabled by default,
		# no need to redefine it in your config for now)
		#media-session.enable = true;
	};

	# Enable touchpad support (enabled default in most desktopManager).
	services.libinput.enable = true;
	fonts = {
		enableDefaultPackages = true;
		fontDir.enable = true;
		packages = with pkgs; [
			# nerd-fonts.fira-code
			# nerd-fonts.space-mono
			# nerd-fonts.sauce-code-pro
			# nerd-fonts.monofur
			# nerd-fonts.noto
			# nerd-fonts.fira-mono
			noto-fonts
			noto-fonts-cjk-sans
			noto-fonts-emoji
			font-awesome
			material-design-icons
			noto-fonts-emoji
		]++ builtins.filter lib.attrsets.isDerivation (builtins.attrValues pkgs.nerd-fonts);

	};

	# 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.
	services.displayManager.autoLogin.enable = true;
	services.displayManager.autoLogin.user = "th3r00t";

	programs.firefox.enable = true;
	programs.hyprland.enable = true;


	# List packages installed in system profile. To search, run:
	# $ nix search wget
	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;

	# List services that you want to enable:

	# Enable the OpenSSH daemon.
	services.openssh.enable = true;

	# 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?

}
