# 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.
  ...
}:
{
  imports = [
    ./boot.nix
    ./filesystems.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;
      extraDirectories = [
        {
          directory = "/var/cache/ccache";
          user = "nobody";
          group = "nobody";
          mode = "u=rwx,g=rwx,o=rx";
        }
      ];
    };

    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" = {
  #      enable = false;
  #      configuration = {
  #        ${namespace} = {
  #          desktop = {
  #            cosmic.enable = lib.mkForce true;
  #            hyprland = {
  #              enable = lib.mkForce false;
  #            };
  #           gnome.enable = lib.mkForce false;
  #         };
  #        };
  #      };
  #    };
  #  };
}
