{ pkgs, ... }:
let
  # To add yourself:
  # 1. Add an entry to this list, using the next UID.
  # 2. Create a file in `keys` named your user name that contains your SSH key(s), separated by newlines.
  users = [
    {
      name = "winter";
      trusted = true;
      uid = 502;
      keys = ./keys/winter;
    }
    {
      name = "stephank";
      trusted = true;
      uid = 503;
      keys = ./keys/stephank;
    }
    {
      name = "hexa";
      trusted = true;
      uid = 504;
      keys = ./keys/hexa;
    }
    {
      name = "0x4A6F";
      trusted = true;
      uid = 505;
      keys = ./keys/0x4A6F;
    }
    {
      name = "artturin";
      trusted = true;
      uid = 506;
      keys = ./keys/artturin;
    }
    {
      name = "figsoda";
      trusted = true;
      uid = 507;
      keys = ./keys/figsoda;
    }
    {
      name = "raitobezarius";
      trusted = true;
      uid = 508;
      keys = ./keys/raitobezarius;
    }
    {
      name = "k900";
      trusted = true;
      uid = 509;
      keys = ./keys/k900;
    }
    {
      name = "julienmalka";
      trusted = true;
      uid = 510;
      keys = ./keys/julienmalka;
    }
    {
      name = "dotlambda";
      trusted = true;
      uid = 511;
      keys = ./keys/dotlambda;
    }
    {
      name = "lily";
      trusted = true;
      uid = 512;
      keys = ./keys/lily;
    }
    {
      name = "ma27";
      trusted = true;
      uid = 513;
      keys = ./keys/ma27;
    }
    {
      name = "fab";
      trusted = true;
      uid = 514;
      keys = ./keys/fab;
    }
    {
      name = "phaer";
      trusted = true;
      uid = 515;
      keys = ./keys/phaer;
    }
    {
      name = "emilylange";
      trusted = true;
      uid = 516;
      keys = ./keys/emilylange;
    }
    {
      name = "emilytrau";
      trusted = true;
      uid = 517;
      keys = ./keys/emilytrau;
    }
    {
      name = "janik";
      trusted = true;
      uid = 518;
      keys = ./keys/janik;
    }
    {
      name = "delroth";
      trusted = true;
      uid = 519;
      keys = ./keys/delroth;
    }
    {
      name = "toonn";
      trusted = true;
      uid = 520;
      shell = pkgs.fish;
      keys = ./keys/toonn;
    }
    {
      name = "glepage";
      trusted = true;
      uid = 521;
      shell = pkgs.fish;
      keys = ./keys/glepage;
    }
    {
      name = "anthonyroussel";
      trusted = true;
      uid = 522;
      keys = ./keys/anthonyroussel;
    }
    {
      name = "sgo";
      trusted = true;
      uid = 523;
      keys = ./keys/sgo;
    }
    {
      name = "chayleaf";
      trusted = true;
      uid = 524;
      keys = ./keys/chayleaf;
    }
    {
      # https://github.com/lf-
      name = "jade";
      trusted = true;
      uid = 525;
      keys = ./keys/jade;
    }
    {
      name = "kranzes";
      trusted = true;
      uid = 526;
      keys = ./keys/kranzes;
    }
    {
      name = "sternenseemann";
      trusted = true;
      uid = 527;
      keys = ./keys/sternenseemann;
    }
    {
      name = "jtojnar";
      trusted = true;
      uid = 528;
      keys = ./keys/jtojnar;
    }
    {
      name = "corngood";
      trusted = true;
      uid = 529;
      keys = ./keys/corngood;
    }
    {
      name = "teto";
      trusted = true;
      uid = 530;
      keys = ./keys/teto;
    }
    {
      name = "matthewcroughan";
      trusted = true;
      uid = 531;
      keys = ./keys/matthewcroughan;
    }
    {
      name = "pennae";
      trusted = true;
      uid = 532;
      keys = ./keys/pennae;
    }
    {
      name = "jopejoe1";
      trusted = true;
      uid = 533;
      keys = ./keys/jopejoe1;
    }
    {
      name = "puckipedia";
      trusted = true;
      uid = 534;
      keys = ./keys/puckipedia;
    }
    {
      name = "kenji";
      trusted = true;
      uid = 535;
      keys = ./keys/kenji;
    }
    {
      name = "pinpox";
      trusted = true;
      uid = 536;
      keys = ./keys/pinpox;
    }
    {
      # https://github.com/n0emis
      name = "ember";
      trusted = true;
      uid = 537;
      keys = ./keys/ember;
    }
    {
      # lib.maintainers.nicoo, @nbraud on github.com
      name = "nicoo";
      trusted = true;
      uid = 538;
      keys = ./keys/nicoo;
    }
    {
      name = "imincik";
      trusted = true;
      uid = 539;
      keys = ./keys/imincik;
    }
    {
      name = "wolfgangwalther";
      trusted = true;
      uid = 540;
      keys = ./keys/wolfgangwalther;
    }
    {
      name = "tnias";
      trusted = true;
      uid = 541;
      keys = ./keys/tnias;
    }
    {
      # lib.maintainers.emily, https://github.com/emilazy
      name = "emily";
      trusted = true;
      uid = 542;
      keys = ./keys/emily;
    }
    {
      # lib.maintainers.johnrtitor, https://github.com/JohnRTitor
      name = "johnrtitor";
      trusted = true;
      uid = 543;
      keys = ./keys/johnrtitor;
    }
    {
      # lib.maintainers.kashw2, https://github.com/kashw2
      name = "kashw2";
      trusted = true;
      uid = 544;
      keys = ./keys/kashw2;
    }
    {
      # lib.maintainers.superherointj, https://github.com/superherointj
      name = "superherointj";
      trusted = true;
      uid = 545;
      keys = ./keys/superherointj;
    }
    {
      # lib.maintainers.SuperSandro2000, https://github.com/SuperSandro2000
      name = "sandro";
      trusted = true;
      uid = 546;
      keys = ./keys/sandro;
    }
    {
      # lib.maintainers.linj, https://github.com/jian-lin
      name = "linj";
      trusted = true;
      uid = 547;
      shell = pkgs.fish;
      keys = ./keys/linj;
    }
    {
      # lib.maintainers.pbsds, https://github.com/pbsds
      name = "pbsds";
      trusted = true;
      uid = 548;
      keys = ./keys/pbsds;
    }
    {
      # lib.maintainers.doronbehar, https://github.com/doronbehar
      name = "doronbehar";
      trusted = true;
      uid = 549;
      keys = ./keys/doronbehar;
    }
    {
      # lib.maintainers.aleksana, https://github.com/Aleksanaa
      name = "aleksana";
      trusted = true;
      uid = 550;
      keys = ./keys/aleksana;
    }
    {
      # lib.maintainers.khaneliman, https://github.com/khaneliman
      name = "khaneliman";
      trusted = true;
      uid = 551;
      keys = ./keys/khaneliman;
    }
    {
      # lib.maintainers.perchun, https://github.com/PerchunPak
      name = "perchun";
      trusted = true;
      uid = 552;
      shell = pkgs.fish;
      keys = ./keys/perchun;
    }
    {
      # lib.maintainers.mrcjkb, https://github.com/mrcjkb
      name = "mrcjkb";
      trusted = true;
      uid = 553;
      shell = pkgs.zsh;
      keys = ./keys/mrcjkb;
    }
    {
      # lib.maintainers.fpletz, https://github.com/fpletz
      name = "fpletz";
      trusted = true;
      uid = 554;
      keys = ./keys/fpletz;
    }
    {
      # lib.maintainers.Enzime, https://github.com/Enzime
      name = "enzime";
      trusted = true;
      uid = 555;
      keys = ./keys/enzime;
    }
    {
      # lib.maintainers.artemist, https://github.com/artemist
      name = "artemist";
      trusted = true;
      uid = 556;
      keys = ./keys/artemist;
    }
    {
      # lib.maintainers.fliegendewurst, https://github.com/FliegendeWurst
      name = "fliegendewurst";
      trusted = true;
      uid = 557;
      keys = ./keys/FliegendeWurst;
    }
    {
      # lib.maintainers.numinit, https://github.com/numinit
      name = "numinit";
      trusted = true;
      uid = 558;
      keys = ./keys/numinit;
    }
    {
      # lib.maintainers.leona, https://github.com/leona-ya
      name = "leona";
      trusted = true;
      uid = 559;
      keys = ./keys/leona;
    }
    {
      # lib.maintainers.katexochen, https://github.com/katexochen
      name = "katexochen";
      trusted = true;
      uid = 560;
      keys = ./keys/katexochen;
    }
    {
      # lib.maintainers.booxter, https://github.com/booxter
      name = "booxter";
      trusted = true;
      uid = 561;
      keys = ./keys/booxter;
    }
    {
      # lib.maintainers.natsukium, https://github.com/natsukium
      name = "natsukium";
      trusted = true;
      uid = 562;
      keys = ./keys/natsukium;
    }
    {
      # lib.maintainers.hadilq, https://github.com/hadilq
      name = "hadilq";
      trusted = true;
      uid = 563;
      keys = ./keys/hadilq;
    }
    {
      # lib.maintainers.aciceri, https://github.com/aciceri
      name = "aciceri";
      trusted = true;
      uid = 564;
      keys = ./keys/aciceri;
    }
  ];
in
{
  users.users = builtins.listToAttrs (
    builtins.map (u: {
      inherit (u) name;
      value = {
        inherit (u) uid;
        home = "/Users/${u.name}";
        createHome = true;
        shell = u.shell or "/bin/zsh";
        openssh.authorizedKeys.keyFiles = [ u.keys ];
      };
    }) users
  );

  users.knownUsers = builtins.map (u: u.name) users;

  nix.settings.trusted-users = builtins.map (u: u.name) (builtins.filter (u: u.trusted) users);
}