{ config
, home-manager
, lib
, nixpkgs
, nixpkgs-wayland
, nur
, nix-melt
, nurl
, pkgs
, ...
}: {
  imports = [
    home-manager.nixosModules.default
    ./modules/programs.nix
    ./modules/locale.nix
    ./overlays

    ./hostvars.nix
  ];

  nixpkgs.config.allowUnfree = true;

  nix = {
    # Edit nix.conf
    settings = {
      experimental-features = [ "nix-command" "flakes" ];
      keep-outputs = true;
      keep-derivations = true;
      auto-optimise-store = true;
      warn-dirty = false;

      # Cachix
      substituters = [
        "https://hyprland.cachix.org"
        "https://nix-gaming.cachix.org"
        # Nixpkgs-Wayland
        "https://cache.nixos.org"
        "https://nixpkgs-wayland.cachix.org"
        #
      ];
      trusted-public-keys = [
        "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
        "nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4="
        # Nixpkgs-Wayland
        "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
        "nixpkgs-wayland.cachix.org-1:3lwxaILxMRkVhehr5StQprHdEo4IrE8sRho9R9HOLYA="
        #
      ];
    };

    # Minimize dowloads of indirect nixpkgs flakes
    registry.nixpkgs = {
      flake = nixpkgs;
      exact = false;
    };
  };
  nixpkgs.overlays = [ nixpkgs-wayland.overlay ];

  services.xserver = {
    layout = "ca";
    xkbVariant = "multix";
  };

  home-manager.users = let
    default = {
      imports = [
        nur.hmModules.nur
        ./modules/bash
        ./modules/git.nix
        ./modules/neovim
        ./modules/tmux.nix

        ./hostvars.nix
        ({ osConfig, ... }: {
          services.hostvars = osConfig.services.hostvars;
        })
      ];

      home.packages = [
        nix-melt.packages.x86_64-linux.default
        nurl.packages.x86_64-linux.default
      ] ++

      (with config.nur.repos.rycee; [
        mozilla-addons-to-nix
      ]) ++

      (with pkgs.nodePackages; [
        undollar
      ]) ++

      (with pkgs; [
        dracula-theme
        neofetch
        progress
        wget
        tree
        mosh
        rsync
        killall
        imagemagick
        usbutils
      ]);

      home.stateVersion = lib.mkDefault "23.05";
    };
  in {
    root = default;
    matt = default;
  };
}