{
  headless,
  hostname,
  inputs,
  outputs,
  pkgs,
  self,
  stateVersion,
  system,
  username,
  ...
}:

{
  imports = [
    inputs.home-manager.nixosModules.home-manager

    outputs.nixosModules.default

    ./programs.nix
  ];

  users.defaultUserShell = pkgs.zsh;

  environment.systemPackages =
    with pkgs;
    [
      fastfetch
      mermaid-cli
      mkcert
    ]
    ++ pkgs.lib.optionals (!headless) [
      acpi
      arandr
      brightnessctl
      cpufrequtils
      libnotify
      pmutils
      ffmpegthumbnailer
      hunspellDicts.en-gb-large
      libreoffice
      logseq
      shotwell
      vscode
      xfce.thunar
      xfce.thunar-volman
      xfce.tumbler
    ];

  home-manager = {
    extraSpecialArgs = {
      inherit
        hostname
        inputs
        outputs
        headless
        self
        system
        username
        ;
    };
    useGlobalPkgs = true;
    useUserPackages = true;

    users."${username}" = import "${self}/nix/home/${username}";
  };

  nixpkgs = {
    config = {
      allowUnfree = true;

      permittedInsecurePackages = [ "electron-27.3.11" ];
    };

    overlays = [
      outputs.overlays.additions
      outputs.overlays.modifications
      outputs.overlays.stable-packages
    ];
  };

  nix.extraOptions = ''
    trusted-users = root ${username}
  '';

  networking.hostName = hostname;

  time.timeZone = "Europe/London";

  i18n = {
    defaultLocale = "en_GB.UTF-8";

    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";
    };
  };

  console.keyMap = "uk";

  security.sudo.wheelNeedsPassword = false;

  system.stateVersion = stateVersion;
}