{
  config,
  lib,
  pkgs,
  unstable,
  inputs,
  vars,
  ...
}: {
  imports = (import ../modules/desktops) ++ (import ../modules/shell);

  users.users.${vars.user} = {
    # System User
    isNormalUser = true;
    extraGroups = ["wheel" "video" "audio" "camera" "networkmanager" "lp" "scanner" "kvm" "libvirtd" "i2c" "tty" "dialout"];
  };

  boot.supportedFilesystems = ["ntfs"];

  # Set default shell -> move to module
  users.defaultUserShell = pkgs.fish;
  environment.shells = with pkgs; [fish];
  programs.fish.enable = true;

  services.flatpak.enable = true;

  # Enable the X11 windowing system.
  # services.xserver.enable = true;

  programs.ssh.startAgent = true;

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

  # Configure keymap in X11
  # services.xserver = {
  #   layout = "de";
  #   xkbVariant = "";
  # };

  time.timeZone = "Europe/Berlin";
  i18n = {
    defaultLocale = "en_US.UTF-8";
    extraLocaleSettings = {
      LC_ADDRESS = "de_DE.UTF-8";
      LC_IDENTIFICATION = "de_DE.UTF-8";
      LC_MEASUREMENT = "de_DE.UTF-8";
      LC_MONETARY = "de_DE.UTF-8";
      LC_NAME = "de_DE.UTF-8";
      LC_NUMERIC = "de_DE.UTF-8";
      LC_PAPER = "de_DE.UTF-8";
      LC_TELEPHONE = "de_DE.UTF-8";
      LC_TIME = "de_DE.UTF-8";
    };
  };

  console = {
    # font = "Lat2-Terminus16";
    keyMap = "de";
  };

  security = {
    rtkit.enable = true;
    polkit.enable = true;
  };

  fonts.fonts = with pkgs; [
    # Fonts
    carlito # NixOS
    vegur # NixOS
    source-code-pro
    jetbrains-mono
    font-awesome # Icons
    corefonts # MS
    carlito
    dejavu_fonts
    ipafont
    kochi-substitute
    source-code-pro
    ttf_bitstream_vera
    inter
    (nerdfonts.override {
      # Nerdfont Icons override
      fonts = [
        "JetBrainsMono"
      ];
    })
  ];

  environment = {
    variables = {
      # Environment Variables
      TERMINAL = "${vars.terminal}";
      EDITOR = "${vars.editor}";
      VISUAL = "${vars.editor}";
    };
    systemPackages = with pkgs;
      [
        # System-Wide Packages
        # Terminal
        btop # Resource Manager
        coreutils # GNU Utilities
        git # Version Control
        killall # Process Killer
        nano # Text Editor
        neovim
        nix-tree # Browse Nix Store
        pciutils # Manage PCI
        tldr # Helper
        usbutils # Manage USB
        wget # Retriever
        bat
        lazygit
        fzf
        neofetch

        # Video/Audio
        alsa-utils # Audio Control
        feh # Image Viewer
        mpv # Media Player
        pavucontrol # Audio Control
        pipewire # Audio Server/Control
        pulseaudio # Audio Server/Control

        # Apps
        appimage-run # Runs AppImages on NixOS
        fcitx5
        fcitx5-mozc
        webcord
        signal-desktop
        alacritty
        librewolf
        zathura

        # File Management
        unzip # Zip Files
        unrar # Rar Files
        zip # Zip

        # Shell
        fishPlugins.grc
        grc
        fishPlugins.fzf
        fishPlugins.tide
        fishPlugins.sponge
        fishPlugins.colored-man-pages
        fishPlugins.autopair
        nix-your-shell
        # Other Packages Found @
        # - ./<host>/default.nix
        # - ../modules
      ]
      ++ (with unstable; [
        # Apps
        feishin
        sddm
        electron-mail
      ]);
  };

  programs = {
    dconf.enable = true;
  };

  services = {
    printing = {
      # CUPS
      enable = true;
    };
    pipewire = {
      # Sound
      enable = true;
      alsa = {
        enable = true;
        support32Bit = true;
      };
      pulse.enable = true;
      jack.enable = true;
    };
  };

  #hardware.pulseaudio.enable = false;

  nix = {
    # Nix Package Manager Settings
    settings = {
      auto-optimise-store = true;
    };
    # gc = {                                  # Garbage Collection
    #   automatic = true;
    #   dates = "weekly";
    #   options = "--delete-older-than 2d";
    # };
    package = pkgs.nixVersions.unstable; # Enable Flakes
    registry.nixpkgs.flake = inputs.nixpkgs;
    extraOptions = ''
      experimental-features = nix-command flakes
      keep-outputs          = true
      keep-derivations      = true
    '';
  };
  nixpkgs.config.allowUnfree = true; # Allow Proprietary Software.

  system = {
    # NixOS Settings
    stateVersion = "23.05";
  };

  home-manager.users.${vars.user} = {
    # Home-Manager Settings
    home = {
      stateVersion = "23.05";
    };

    programs = {
      home-manager.enable = true;
    };
  };
}