# Snowfall Lib provides a customized `lib` instance with access to your flake's library
{
  # as well as the libraries available from your flake's inputs.
  lib,
  # An instance of `pkgs` with your overlays and packages applied is also available.
  pkgs,
  # # You also have access to your flake's inputs.
  # inputs,

  # Additional metadata is provided by Snowfall Lib.
  namespace, # The namespace used for your flake, defaulting to "internal" if not set.
  # system, # The system architecture for this host (eg. `x86_64-linux`).
  # target, # The Snowfall Lib target for this system (eg. `x86_64-iso`).
  # format, # A normalized name for the system target (eg. `iso`).
  # virtual, # A boolean to determine whether this system is a virtual target using nixos-generators.
  # systems, # An attribute map of your defined hosts.

  # All other arguments come from the system system.
  # config,
  ...
}:
{
  imports = [
    ./boot.nix
    ./filesystems.nix
    # ./hardware-configuration.nix
    ./sops.nix
    ./services/lsfg-vk
    ./services/ratbagd
    ./services/restic
  ];

  ${namespace} = {
    bootloader.lanzaboote.enable = true;

    desktop = {
      hyprland = {
        enable = true;
        wallpaperSource = "bing";
      };
      gnome.enable = false;
    };

    gaming.enable = true;

    hardware = {
      disko = {
        enable = true;
        enableLuks = true;
      };

      amd = {
        enable = true;
        lact.enable = true;
      };
    };

    impermanence.enable = true;

    network = {
      hostName = "matt-nixos";
    };
  };

  programs.coolercontrol.enable = true;
  systemd.services.systemd-networkd-wait-online.enable = lib.mkForce false;

  environment.variables = {
    GDK_SCALE = "1";
    EDITOR = "${lib.getExe' pkgs.vscodium "codium"} --wait";
    VISUAL = "${lib.getExe' pkgs.vscodium "codium"} --wait";
  };

  security.wrappers.librepods = {
    source = "${pkgs.${namespace}.librepods}/bin/librepods";
    owner = "matt";
    group = "users";
    setuid = false;
    capabilities = "cap_net_admin+p";
  };

  specialisation = {
    "cosmic".configuration = {
      ${namespace} = {
        desktop = {
          cosmic.enable = lib.mkForce true;
          hyprland = {
            enable = lib.mkForce false;
          };
          gnome.enable = lib.mkForce false;
        };
      };
    };
  };
}
