{
  config,
  lib,
  system,
  namespace,
  ...
}:
let
  defaultSops = (lib.snowfall.fs.get-file "secrets/secrets.yaml");
  isx86 = system == "x86_64-linux";
  user = config.${namespace}.user.name;
in
{
  # Permission modes are in octal representation (same as chmod),
  # the digits represent: user|group|others
  # 7 - full (rwx)
  # 6 - read and write (rw-)
  # 5 - read and execute (r-x)
  # 4 - read only (r--)
  # 3 - write and execute (-wx)
  # 2 - write only (-w-)
  # 1 - execute only (--x)
  # 0 - none (---)
  # Either a user id or group name representation of the secret owner
  # It is recommended to get the user name from `config.users.users.<?name>.name` to avoid misconfiguration
  # Either the group id or group name representation of the secret group
  # It is recommended to get the group name from `config.users.users.<?name>.group` to avoid misconfiguration
  sops = {
    defaultSopsFile = defaultSops;
    age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];

    # ------------------------------
    # Secrets
    # ------------------------------
    secrets = {
      "wifi" = { };

      "matt_password" = {
        neededForUsers = true;
        mode = "0600";
        owner = config.users.users."${user}".name;
        group = config.users.users."${user}".group;
      };

      # ------------------------------
      # SSH keys
      # ------------------------------
      # "ssh-keys-public/desktop-nixos" = {
      #   sopsFile = sharedSops;
      #   mode = "0644";
      #   owner = config.users.users."${user}".name;
      #   group = config.users.users."${user}".group;
      #   restartUnits = [ "sshd.service" ];
      # };
      # "ssh-keys-private/desktop-nixos" = {
      #   sopsFile = sharedSops;
      #   mode = "0600";
      #   owner = config.users.users."${user}".name;
      #   group = config.users.users."${user}".group;
      #   restartUnits = [ "sshd.service" ];
      # };
      # "ssh-keys-public/desktop-nixos-root" = {
      #   sopsFile = sharedSops;
      #   path = "/root/.ssh/id_ed25519.pub";
      #   mode = "0600";
      #   restartUnits = [ "sshd.service" ];
      # };
      # "ssh-keys-private/desktop-nixos-root" = {
      #   sopsFile = sharedSops;
      #   path = "/root/.ssh/id_ed25519";
      #   mode = "0600";
      #   restartUnits = [ "sshd.service" ];
      # };

      # ------------------------------
      # Secureboot keys
      # ------------------------------
      "secureboot/GUID" = lib.mkIf isx86 {
        path = "/etc/secureboot/GUID";
        mode = "0600";
      };
      "secureboot/keys/db-key" = lib.mkIf isx86 {
        path = "/etc/secureboot/keys/db/db.key";
        mode = "0600";
      };
      "secureboot/keys/db-pem" = lib.mkIf isx86 {
        path = "/etc/secureboot/keys/db/db.pem";
        mode = "0600";
      };
      "secureboot/keys/KEK-key" = lib.mkIf isx86 {
        path = "/etc/secureboot/keys/KEK/KEK.key";
        mode = "0600";
      };
      "secureboot/keys/KEK-pem" = lib.mkIf isx86 {
        path = "/etc/secureboot/keys/KEK/KEK.pem";
        mode = "0600";
      };
      "secureboot/keys/PK-key" = lib.mkIf isx86 {
        path = "/etc/secureboot/keys/PK/PK.key";
        mode = "0600";
      };
      "secureboot/keys/PK-pem" = lib.mkIf isx86 {
        path = "/etc/secureboot/keys/PK/PK.pem";
        mode = "0600";
      };
    };

    # ------------------------------
    # Templates
    # ------------------------------
    templates = {
      # ...
    };
  };
}
