{
  inputs,
  config,
  pkgs,
  ...
}: {
  imports = [
    ./nebula

    ./networking.nix
    ./programs.nix
  ];

  # Immutable users
  users.mutableUsers = false;

  ### Nix settings ###
  nix = {
    # Periodically optimise & collect garbage
    gc = {
      automatic = true;
      dates = "weekly";
      options = "--delete-older-than 30d";
    };
    optimise = {
      automatic = true;
      dates = ["weekly"];
    };

    settings = {
      # Make sure flakes are enabled
      experimental-features = ["nix-command" "flakes"];
      flake-registry = "";
      nix-path = config.nix.nixPath;
      # Trust wheel
      trusted-users = ["@wheel"];
    };
    extraOptions = ''
      keep-outputs = true
      keep-derivations = true
    '';
    nixPath = ["nixpkgs=${pkgs.path}"];
    registry = {
      self.flake = inputs.self;
      nixpkgs.flake = inputs.nixpkgs;
    };
  };
}