{
  config,
  lib,
  pkgs,
  inputs,
  ...
}: {
  imports = [
    /etc/nixos/hardware-configuration.nix
  ];

  # Nix settings
  ## Limit Cores on rebuild and enable Flakes
  nix = {
    registry = {
      voidarc = {
        from = {
          id = "voidarc";
          type = "indirect";
        };
        to = {
          type = "git";
          url = "https://git.voidarc.co.uk/voidarc/flakes.git";
        };
      };
    };
    settings = {
      cores = 6;
      download-buffer-size = 524288000;
      experimental-features = [
        "nix-command"
        "flakes"
      ];
    };
  };

  ## Allow unfree packages and add pkgs.unstable
  nixpkgs = {
    config = {
      allowUnfree = true;
      packageOverrides = pkgs: {
        unstable = import inputs.nixpkgs-unstable {
          config = {
            allowUnfree = true;
          };
        };
      };
    };
  };

  # Set <nixpkgs> correctly
  nix.nixPath = ["nixpkgs=${inputs.nixpkgs}"];

  ## Optimise Nix store on rebuild and collect garbage as a service
  nix.optimise.automatic = true;
  nix.gc = {
    automatic = true;
    dates = "daily";
    options = "--delete-older-than 5d";
  };

  # Bootloader theming and plymouth
  boot = {
    loader = {
      timeout = 2;
      efi = {
        canTouchEfiVariables = true;
      };
      grub = {
        efiSupport = true;
        device = "nodev";
        theme = pkgs.catppuccin-grub;
      };
    };
    plymouth = {
      enable = true;
      theme = "catppuccin-mocha";
      themePackages = with pkgs; [
        # By default we would install all themes
        (catppuccin-plymouth.override {
          variant = "mocha";
        })
      ];
    };
  };

  ## Use latest kernel
  boot.kernelPackages = pkgs.linuxPackages_latest;

  # Bluetooth and Networking
  hardware.bluetooth.enable = true;
  hardware.xpadneo.enable = true;

  networking.networkmanager.enable = true;
  networking.networkmanager.dns = "none";
  networking.nameservers = [
    "1.1.1.1"
    "8.8.8.8"
  ];

  # Locale
  time.timeZone = "Europe/London";
  i18n.defaultLocale = "en_GB.UTF-8";
  i18n.extraLocaleSettings = {
    LC_ADDRESS = "en_GB.UTF-8";
    LC_IDENTIFICATION = "en_GB.UTF-8";
    LC_MEASUREMENT = "en_GB.UTF-8";
    LC_MONETARY = "en_GB.UTF-8";
    LC_NAME = "en_GB.UTF-8";
    LC_NUMERIC = "en_GB.UTF-8";
    LC_PAPER = "en_GB.UTF-8";
    LC_TELEPHONE = "en_GB.UTF-8";
    LC_TIME = "en_GB.UTF-8";
  };

  # Userspace Stuff
  ## Keymap
  services.xserver.xkb = {
    layout = "gb";
    variant = "";
  };
  console.keyMap = "uk";

  ## Desktop
  services.xserver.enable = true;
  programs.hyprland = {
    enable = true;
    package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.default;
  };
  security.polkit.enable = true;

  ## Audio Server
  services.pulseaudio.enable = false;
  security.rtkit.enable = true;
  services.pipewire = {
    enable = true;
    alsa.enable = true;
    alsa.support32Bit = true;
    pulse.enable = true;
    jack.enable = true;
  };

  # Local User
  ## User config
  users.users.user01 = {
    isNormalUser = true;
    shell = pkgs.zsh;
    description = "user01";
    extraGroups = [
      "input"
      "root"
      "plugdev"
      "bluetooth"
      "networkmanager"
      "docker"
      "wheel"
    ];
    packages = with pkgs; let
      input = {
        package,
        output ? "default",
      }:
        inputs.${package}.packages.${pkgs.stdenv.hostPlatform.system}.${output};
      wrap = {
        name,
        pkg,
        modules,
      }:
        pkgs.symlinkJoin {
          inherit name;
          paths = [pkg];
          nativeBuildInputs = [pkgs.makeWrapper];
          postBuild = ''
            wrapProgram $out/bin/${name} \
              --prefix PATH : ${pkgs.lib.makeBinPath modules}
          '';
        };
    in [
      # Ricing
      ## Desktop
      bibata-cursors
      catppuccin-gtk
      unstable.waybar
      hyprlock
      dunst
      wlogout
      wpaperd
      quickshell

      ## Desktop Utilities
      grimblast
      gsettings-desktop-schemas
      wl-clipboard
      (wrap {
        name = "otter-launcher";
        pkg = (
          input {
            package = "otter-launcher";
          }
        );
        modules = [
          chafa
          jq
        ];
      })
      (input {package = "fsel";})

      # Terminal
      ## Styling / Functionality
      oh-my-posh
      carapace
      zsh-autocomplete
      bat

      ## Tools
      lazygit
      p7zip-rar
      any-nix-shell
      bluetui
      fzf
      ripgrep
      wget
      htop
      playerctl
      git
      lsd
      (input {
        package = "doot";
      })

      ## Other CLI Apps
      nodejs
      fastfetch
      opencode
      tailscale
      syncthing
      jellyfin-tui
      devenv
      nix-output-monitor

      # Apps
      ## Actual Useful Stuff
      nemo
      kitty
      firefox
      gotify-desktop
      pavucontrol
      mpv
      input-remapper

      ## Other Nonsense
      tor-browser
      techmino
      prismlauncher
      delfin
    ];
  };

  ## Zsh
  programs.zsh = {
    enable = true;
    enableCompletion = true;
    enableBashCompletion = true;
    autosuggestions.enable = true;
    syntaxHighlighting.enable = true;
    histSize = 10000;
    ohMyZsh = {
      enable = true;
      plugins = [
        "git"
        "dirhistory"
        "history"
      ];
    };
  };
  users.defaultUserShell = pkgs.zsh;

  ## User programs
  programs = {
    dconf.enable = true;
    xfconf.enable = true;
    gdk-pixbuf.modulePackages = [pkgs.librsvg]; # For wlogout svgs
  };

  ## User Services
  services = {
    gvfs.enable = true;
    input-remapper.enable = true;
    tailscale.enable = true;
    printing.enable = true;
    upower.enable = true;
    openssh.enable = true;
    avahi.enable = true;
  };

  ## Fonts
  fonts.packages = with pkgs; [
    nerd-fonts.fira-mono
  ];
  fonts.fontconfig.defaultFonts.serif = ["Fira Mono Nerd Font"];

  # System Packages
  environment.systemPackages = with pkgs; [
    # Utilities
    inputs.nvim-wrapped.packages.${stdenv.hostPlatform.system}.default
    vim
    unzip
    python315
    usbutils
    curlWithGnuTls

    # System
    mesa
    pkg-config
    vulkan-tools
    gvfs
    wayvnc
    clang
    xdg-desktop-portal
    xdg-desktop-portal-hyprland
    glib
    gnutls
    liblzf
    librsvg
    appimage-run
    libnotify
    gsettings-desktop-schemas
  ];

  # The comment
  system.stateVersion = "25.05"; # Did you read the comment?
}
