{
  config,
  lib,
  pkgs,
  pkgs-stable,
  ...
}:
{
  imports = [
    ./hardware-configuration.nix
    ./modules/nix/firefox.nix
  ];

  nixpkgs.config.allowUnfree = true;
  nix.settings.experimental-features = [
    "nix-command"
    "flakes"
  ];
  boot.loader.systemd-boot.enable = true;

  networking.hostName = "poggers";
  networking.networkmanager.enable = true;

  time.timeZone = "Europe/Berlin";
  console = {
    font = "Lat2-Terminus16";
    useXkbConfig = true;
  };

  xdg.portal = {
    enable = true;
    extraPortals = [
      pkgs.xdg-desktop-portal-gtk
      pkgs.xdg-desktop-portal-hyprland
    ];
  };

  services = {
    pipewire = {
      enable = true;
      pulse.enable = true;
      wireplumber.enable = true;
    };
    mullvad-vpn = {
      enable = true;
    };
    sdrplayApi = {
      enable = true;
    };
  };

  hardware = {
    bluetooth = {
      enable = true;
    };
    graphics = {
      enable = true;
    };
    rtl-sdr = {
      enable = true;
    };
  };

  programs = {
    hyprland = {
      enable = true;
    };
    nix-ld.enable = true;
  };

  virtualisation = {
    docker = {
      enable = true;
    };
  };

  users.users.fabian = {
    isNormalUser = true;
    initialPassword = "1601";
    extraGroups = [
      "wheel"
      "docker"
      "audio"
      "video"
      "dialout"
      "plugdev"
    ];
  };

  environment.systemPackages =
    (with pkgs; [
      # sys
      unzip
      yt-dlp
      inetutils
      git
      wget
      curl
      dosfstools
      ntfs3g
      waybar

      # cli
      neofetch
      fastfetch
      onefetch
      vim
      weechat
      ranger
      eza
      fzf

      # dev
      rustup
      python3
      nodejs
      gccgo14
      go
      nixd

      # radio
      sdrplay
      sdrpp
      hackrf
      rtl-sdr
      gqrx
      noaa-apt
      rtl_433
      rtl-ais

      # misc		
      cava
      mumble
      discord-screenaudio
      discord

      # hardware & shit
      libplist
      libimobiledevice
      usbmuxd

    ])
    ++ (with pkgs-stable; [

    ]);

  networking = {
    firewall = {
      enable = true;
      allowedTCPPorts = [
        80
        1337
        8080
      ];
    };
  };

  security = {
    doas = {
      enable = true;
      extraRules = [
        {
          users = [ "fabian" ];
          noPass = true;
          keepEnv = true;
        }
      ];
    };
  };

  fonts.fontconfig.enable = true;
  fonts.fontDir.enable = true;
  fonts.packages = with pkgs; [
    noto-fonts
    noto-fonts-emoji
    liberation_ttf
    fira-code
    fira-code-symbols
    fantasque-sans-mono
    mplus-outline-fonts.githubRelease
    dina-font
    proggyfonts
    nerdfonts
  ];

  system.stateVersion = "unstable";

}