{ config, pkgs, ... }:

{
  imports = [
    # Include the results of the hardware scan.
    ./hardware-configuration.nix
    ../../shared/common.nix
    ../../shared/sound.nix
    ../../shared/window-manager.nix
    ../../shared/fonts.nix
    ../../shared/gnupg.nix
    ../../shared/garbage-collector.nix
    ../../shared/networking.secret.nix
  ];

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

  # Use the systemd-boot EFI boot loader.
  boot.loader = {
    systemd-boot = {
      enable = true;
      configurationLimit = 10;
    };

    efi.canTouchEfiVariables = true;
  };

  networking = {
    hostName = "laptop"; # Define your hostname.

    useDHCP = false;
    interfaces = {
      enp3s0.useDHCP = true;
      wlp2s0.useDHCP = true;
    };

    networkmanager.enable = true;
    firewall.allowedTCPPortRanges = [
      { from = 33000; to = 33999; }
    ];
  };

  # enable bluetooth
  hardware.bluetooth.enable = true;

  # configure mouse and touchpad
  services.xserver.libinput = {
    enable = true;
    touchpad = {
      accelSpeed = "0.5";
      disableWhileTyping = true;
    };
  };

  services.logind.extraConfig = ''
    # don’t shutdown when power button is short-pressed
    HandlePowerKey=ignore
  '';

  services.openssh.enable = true;

  # Enable the Docker
  virtualisation.docker.enable = true;

  # Additional nix configs
  local.nix.enableMyRegistry = true;

  # Wireguard client
  age.secrets.wireguard-asus-gl553vd-private = {
    file = ../../../secrets/wireguard-asus-gl553vd-private.age;
    mode = "0400";
  };
  local.wireguard = {
    enable = true;
    ip = "10.20.30.4/24";
    privateKeyFile = config.age.secrets.wireguard-asus-gl553vd-private.path;
  };

  # Torrent
  # services.transmission.enable = true;

  # Style and Grammar Checker
  services.languagetool.enable = true;

  # 3D printing
  local.octoprint.enable = true;
}
