{ config, lib, pkgs, ... }:

with lib; {
  config.fudo.users = let
    users = {
      niten = {
        uid = 10000;
        primary-group = "admin";
        common-name = "Peter Selby";
        given-name = "Peter";
        surname = "Selby";
        ldap-hashed-passwd = "{SSHA}dF/5NGkafL8M1kpa3LYZKdh0Pc7a02gA";
        login-hashed-passwd =
          "$6$a1q2Duoe35hd5$IaZGXPfqyGv9uq5DQm7DZq0vIHsUs39sLktBiBBqMiwl/f/Z4jSvNZLJp9DZJYe5u2qGBYh1ca.jsXvQA8FPZ/";
        ssh-authorized-keys = [
          "sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIFPoobMZkyOmotVUMTFMYGOoDjZ++yMnf/S6JWCDj+9DAAAABHNzaDo= niten@system3"
          "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDGVez4of30f+j0cWKj5kYCKeFjyNsYvG9UbOMxF5hImD2lP5MSbFBv31gFgHjx3yCG4zQRZlpuyU5uWo0qIwe9N84/LcZcB9WrWKZXDmuof7zPFy0J+Hj+LVLDQI/mVXHNwkMhBMHpPrdwA05EYDAYCYklWT4cSByu10pHtST+olF8i+A+UQgUzgNZzdJVeiYZv6MBDTYsJWptGeDUkl2B0Es3gtbGYcCCfnyS3RC7DIXlDo3NBbAr7WaHY2MBbT+R/+jicn9E3IY3NCM5jENxqmvHy9MDsxEEYgFNm7IDwq4V1VRUWy277YsvRbmEaHb+osOA5u1VNN4z3UftOZcSZgR5C/vR71cENXoPt1YQpCzu7i38ojtvL+tDVEKT7sIovrQw8q1sszNlW2nXh8RSPiIq5TMnrV73MP0egKcr9n3tfxwi1BIkLjvfom/02BkTK9R9v+VMNhYU1YwROhORCiMIgoxUGiUvtH8u38JGr7E0hhMoAjCE5k80WPUivl0= niten@socrates"
        ];
        home-directory = "/home/niten";
        k5login = [
          "niten/root@FUDO.ORG"
          "niten/admin@FUDO.ORG"
          "niten@INFORMIS.LAND"
          "niten/root@INFORMIS.LAND"
          "niten/admin@INFORMIS.LAND"
          "niten@RUS.SELBY.CA"
          "niten/root@RUS.SELBY.CA"
        ];
        email = "niten@fudo.org";
        email-aliases = [
          "ertian@fudo.org"
          "peter@fudo.org"
          "peter@fudo.link"
          "pselby@fudo.org"
          "yiliu@fudo.org"

          "yiliu@informis.land"
          "advena@informis.land"

          "forum@selby.ca"
          "peter@selby.ca"

          # Used to create spotify accounts for Google Home & Tesla
          "tesla@fudo.org"
          "seattle-home@fudo.org"
        ];
      };

      andrew = {
        uid = 10001;
        primary-group = "selby";
        common-name = "Andrew Selby";
        given-name = "Andrew";
        surname = "Selby";
        ldap-hashed-passwd = "";
      };

      animus = {
        uid = 10002;
        primary-group = "fudo";
        common-name = "James Frazer";
        given-name = "James";
        surname = "Frazer";
        ldap-hashed-passwd = "";
      };

      ark = {
        uid = 10005;
        primary-group = "fudo";
        common-name = "Roger Wong";
        given-name = "Roger";
        surname = "Wong";
        ldap-hashed-passwd = "";
      };

      ben = {
        uid = 10007;
        primary-group = "fudo";
        common-name = "Ben";
        ldap-hashed-passwd = "{MD5}v0jY5bADu30cAR1Uu/eWYQ==";
      };

      chad = {
        uid = 10011;
        primary-group = "fudo";
        common-name = "Chad Isbister";
        given-name = "Chad";
        surname = "Isbister";
        ldap-hashed-passwd = "{MD5}fQ309GUF2DvHlJ3R+5wNuA==";
      };

      ckoo = {
        uid = 10014;
        primary-group = "fudo";
        common-name = "Jason Bush";
        given-name = "Jason";
        surname = "Bush";
        ldap-hashed-passwd = "{MD5}KMFeaBc7e/gVzL/QUT0mYw==";
      };

      dana = {
        uid = 10015;
        primary-group = "fudo";
        common-name = "Dana Eftodie";
        given-name = "Dana";
        surname = "Eftodie";
        ldap-hashed-passwd = "{MD5}+ijTylKau4uot2kGMqKSTA==";
      };

      jill = {
        uid = 10030;
        primary-group = "fudo";
        common-name = "Jill Isbister";
        given-name = "Jill";
        surname = "Isbister";
        ldap-hashed-passwd = "{MD5}fQ309GUF2DvHlJ3R+5wNuA==";
      };

      joker4ever = {
        uid = 10033;
        primary-group = "fudo";
        common-name = "Jack Clarke";
        given-name = "Jack";
        surname = "Clarke";
        ldap-hashed-passwd = "{SSHA}w78XwSax9WywIDujMxEoO7o87d2LDJRo";
      };

      ken = {
        uid = 10035;
        primary-group = "selby";
        common-name = "Ken Selby";
        given-name = "Ken";
        surname = "Selby";
        ldap-hashed-passwd = "{SSHA}ohRfhWED/qq5NIH8pqgHMQlbpPWVkH/m";
        login-hashed-passwd =
          "$6$f/0esIm0sxh36VCa$XJ1xFAquJTRW02W1GKqNDT0H.ufjx0yK2tiywhkW.QBi7P0AvShCDPVCFN59pQvYH7C5Q4ixX9VWLnufIU/9B1";
        email-aliases = [ "kselby@selby.ca" ];
      };

      reaper = {
        uid = 10049;
        primary-group = "admin";
        common-name = "Jonathan Stewart";
        given-name = "Jonathan";
        surname = "Stewart";
        ldap-hashed-passwd = "{MD5}EBvifhJ6z9dIDx0KWkAPoQ==";
        login-hashed-passwd =
          "$6$a1q2Duoe35hd5$IaZGXPfqyGv9uq5DQm7DZq0vIHsUs39sLktBiBBqMiwl/f/Z4jSvNZLJp9DZJYe5u2qGBYh1ca.jsXvQA8FPZ/";
        home-directory = "/home/reaper";
        k5login =
          [ "reaper@FUDO.ORG" "reaper/root@FUDO.ORG" "reaper/admin@FUDO.ORG" ];
        email = "reaper@fudo.org";
        email-aliases = [
          "cricket@fudo.org"
          "jstewart@fudo.org"
          "jonathan@fudo.org"
          "reaper@fudo.link"
        ];
      };

      slickoil = {
        uid = 10052;
        primary-group = "fudo";
        common-name = "Connor Cooley";
        given-name = "Connor";
        surname = "Cooley";
        ldap-hashed-passwd = "{MD5}8Qrpagi8TYnZQdFoYe02rA==";
      };

      splat1 = {
        uid = 10053;
        primary-group = "fudo";
        common-name = "Matt Evans";
        given-name = "Matt";
        surname = "Evans";
        ldap-hashed-passwd = "{MD5}JeHNutGTBMHOqFgVlYjfpw==";
      };

      swaff = {
        uid = 10055;
        primary-group = "fudo";
        common-name = "Mark Swaffer";
        given-name = "Mark";
        surname = "Swaffer";
        ldap-hashed-passwd = "{MD5}C5gIsLsaKSvIPydu4uzhNg==";
        email-aliases = [ "mark@fudo.org" ];
      };

      brian = {
        uid = 10056;
        primary-group = "selby";
        common-name = "Brian Selby";
        given-name = "Brian";
        surname = "Selby";
        ldap-hashed-passwd = "{crypt}$1$npZLTPEO$p2bTx8TTlCg7XNiivTJsC1";
      };

      rob = {
        uid = 10057;
        primary-group = "selby";
        common-name = "Robert Selby";
        given-name = "Robert";
        surname = "Selby";
        ldap-hashed-passwd = "{crypt}HD1ESf1hAGdks";
      };

      tarbash = {
        uid = 10059;
        primary-group = "fudo";
        common-name = "Neville";
        ldap-hashed-passwd = "{crypt}$1$cE6lVNbC$PLjlE9vK77SKNKwJBKiT//";
      };

      darryl = {
        uid = 10060;
        primary-group = "selby";
        common-name = "Darryl Kissick";
        given-name = "Darryl";
        surname = "Kissick";
        ldap-hashed-passwd = "{crypt}$1$oUNTMyKU$oUs6JqBRTPKE9A/sEzlSY0";
      };

      ayumi = {
        uid = 10061;
        primary-group = "fudo";
        common-name = "Ayumi Kira";
        given-name = "Ayumi";
        surname = "Kira";
        ldap-hashed-passwd = "{MD5}5OkpooOLxw94nF1lOfn/ZQ==";
      };

      saphira = {
        uid = 10063;
        primary-group = "fudo";
        common-name = "Elizabeth Stewart";
        given-name = "Elizabeth";
        surname = "Stewart";
        ldap-hashed-passwd = "{crypt}$1$cQ/Zq25x$fUQfUtpMB.f3rBWzttPns.";
      };

      banen = {
        uid = 10064;
        primary-group = "fudo";
        common-name = "Travis Neis";
        given-name = "Travis";
        surname = "Neis";
        ldap-hashed-passwd = "{crypt}$1$cyfM/Vni$vIuirRln.MnWActOR6t8S.";
      };

      xiaoxuan = {
        uid = 10065;
        primary-group = "fudo";
        common-name = "Xiaoxuan Jin";
        given-name = "Xiaoxuan";
        surname = "Jin";
        ldap-hashed-passwd = "{SSHA}04fLLUmqNUpOUJi3IBEja8bFNm0S6W60";
        login-hashed-passwd =
          "$6$C8lYHrK7KvdKm/RE$cHZ2hg5gEOEjTV8Zoayik8sz5h.Vh0.ClCgOlQn8l/2Qx/qdxqZ7xCsAZ1GZ.IEyESfhJeJbjLpykXDwPpfVF0";
        email = "xiaoxuan@fudo.org";
        email-aliases = [
          "xixi@fudo.org"
          "claire@fudo.org"

          "xixi@selby.ca"
          "claire@selby.ca"
        ];
      };

      thibor = {
        uid = 10066;
        primary-group = "fudo";
        common-name = "Thibor";
        ldap-hashed-passwd = "{crypt}$1$HzQOn3zV$ogkeS5ByWrFstYo0FhXB/.";
      };

      flowchart = {
        uid = 10067;
        primary-group = "fudo";
        common-name = "BH Bieterse";
        given-name = "BH";
        surname = "Bieterse";
        ldap-hashed-passwd = "{crypt}$1$lQMZ42RZ$aAOsLHP0i.yfvD1a1EVsA/";
      };

      gubbs = {
        uid = 10068;
        primary-group = "fudo";
        common-name = "Lorcan Gavin";
        given-name = "Lorcan";
        surname = "Gavin";
        ldap-hashed-passwd = "{MD5}AIf4bJZyHCnvJVL3YHRnIg==";
      };

      debo = {
        uid = 10069;
        primary-group = "fudo";
        common-name = "Deborah Osti";
        given-name = "Deborah";
        surname = "Osti";
        ldap-hashed-passwd = "{crypt}$1$5wEBGh/8$Ggp2JAI/rQiBXxJ89G0iq1";
      };

      leefolio = {
        uid = 10070;
        primary-group = "fudo";
        common-name = "Ze Artiste";
        given-name = "Ze";
        surname = "Artiste";
        ldap-hashed-passwd = "{crypt}$1$LRlAYBst$sS1bPu8yEPrdYkQhoZhAq1";
      };

      zimm = {
        uid = 10071;
        primary-group = "fudo";
        common-name = "Ross Drinkwater";
        given-name = "Ross";
        surname = "Drinkwater";
        ldap-hashed-passwd = "{SSHA}er1cgYDNPJsfLwtqYLopKMGMxiZZRGdY";
      };

      gaijin = {
        uid = 10072;
        primary-group = "fudo";
        common-name = "Tetsuo Torigai";
        given-name = "Tetsuo";
        surname = "Torigai";
        ldap-hashed-passwd = "{crypt}$1$bw8hyDXm$pMLLUtlDlVLwBTZiC0Lzf0";
      };

      anorthe = {
        uid = 10073;
        primary-group = "fudo";
        common-name = "Bonnie Wong";
        given-name = "Bonnie";
        surname = "Wong";
        ldap-hashed-passwd = "{crypt}$1$DORfHzbp$nJkk0OXd7WzYDxx8LbdMK.";
      };

      stewartd = {
        uid = 10076;
        primary-group = "fudo";
        common-name = "Dwight Stewart";
        given-name = "Dwight";
        surname = "Stewart";
        ldap-hashed-passwd = "{MD5}e2GSmH+l4ZZ808snWsFNYw==";
      };

      jess = {
        uid = 10078;
        primary-group = "selby";
        common-name = "Jessica Selby";
        given-name = "Jessica";
        surname = "Selby";
        ldap-hashed-passwd = "{MD5}2tbtZre16apUTNtRIK98nQ==";
      };

      kevin = {
        uid = 10079;
        primary-group = "selby";
        common-name = "Kevin Selby";
        given-name = "Kevin";
        surname = "Selby";
        ldap-hashed-passwd = "{crypt}$1$UYKrkMEe$SAABgc1pCBYgPFIMepNrM.";
      };

      theblacksun = {
        uid = 10080;
        primary-group = "fudo";
        common-name = "Brendan Goodfellow";
        given-name = "Brendan";
        surname = "Goodfellow";
        ldap-hashed-passwd = "{MD5}Hmw6pFYYT87nmpLp0QxcQw==";
      };

      kris = {
        uid = 10082;
        primary-group = "selby";
        common-name = "Kris Huberdeau";
        given-name = "Kris";
        surname = "Huberdeau";
        ldap-hashed-passwd = "{SSHA}RUYeAEUyblnCWa9uBzY9nwsmoksy8P3Y";
      };

      jun = {
        uid = 10083;
        primary-group = "fudo";
        common-name = "Junichi Suzuki";
        given-name = "Junichi";
        surname = "Suzuki";
        ldap-hashed-passwd = "{crypt}$1$ExfgQXb8$b1ihvMRbG2dWbnlmzzI/h.";
      };

      jinny = {
        uid = 10084;
        primary-group = "fudo";
        common-name = "Hye-jin Kim";
        given-name = "Hye-jin";
        surname = "Kim";
        ldap-hashed-passwd = "{crypt}$1$6cld82N8$5a9ovCPXSacDmK3TWDaF30";
      };

      helen = {
        uid = 10086;
        primary-group = "selby";
        common-name = "Helen Selby";
        given-name = "Helen";
        surname = "Selby";
        ldap-hashed-passwd = "{SSHA}G/qhBqHiCRSi+LdwyUesMH7StM5J6wZI";
        # ldap-hashed-passwd = "{SSHA}uckUXX09MjYq9++sF3f9b2IY8a9UBIxm";
      };

      vee = {
        uid = 10087;
        primary-group = "selby";
        common-name = "Vee Selby";
        given-name = "Vee";
        surname = "Selby";
        ldap-hashed-passwd = "snoinuer";
        email-aliases = [ "virginia@selby.ca" ];
      };

      dabar = {
        uid = 10088;
        primary-group = "fudo";
        common-name = "Dan Bernardic";
        given-name = "Dan";
        surname = "Bernardic";
        ldap-hashed-passwd = "{MD5}ULrk46YUeUZQrl0+wAQiWA==";
      };

      r3d3 = {
        uid = 10089;
        primary-group = "fudo";
        common-name = "Derek Veroni";
        given-name = "Derek";
        surname = "Veroni";
        ldap-hashed-passwd = "{SHA}2XyijGDovUhA1/Z/XR+9h9Ia4fY=";
      };

      laura = {
        uid = 10090;
        primary-group = "selby";
        common-name = "Laura Selby";
        given-name = "Laura";
        surname = "Selby";
        ldap-hashed-passwd = "{MD5}MI65czN0duIudMhYH+BU9Q==";
      };

      tuk = {
        uid = 10091;
        primary-group = "fudo";
        common-name = "Taku Koba";
        given-name = "Taku";
        surname = "Koba";
        ldap-hashed-passwd = "{MD5}DQuoQluy50128r8MxAmFkQ==";
      };

      aki = {
        uid = 10092;
        primary-group = "fudo";
        common-name = "Akihito Mori";
        given-name = "Akihito";
        surname = "Mori";
        ldap-hashed-passwd = "{MD5}oGAt2kJGKMqX+CmfV1w/GA==";
      };

      ansyg = {
        uid = 10095;
        primary-group = "fudo";
        common-name = "Anseok Joo";
        given-name = "Anseok";
        surname = "Joo";
        ldap-hashed-passwd = "{MD5}AHhHl02D3uDmWhPJZ6QPOw==";
      };

      jackie = {
        uid = 10097;
        primary-group = "selby";
        common-name = "Jackie Selby";
        given-name = "Jackie";
        surname = "Selby";
        ldap-hashed-passwd = "{MD5}fa6JfWySlH63sITsxrTt0Q==";
      };

      mtopf = {
        uid = 10100;
        primary-group = "fudo";
        common-name = "Michael Topf";
        given-name = "Michael";
        surname = "Topf";
        ldap-hashed-passwd = "{MD5}/pleD8SiLhmnRr1RVspNcA==";
      };

      tat = {
        uid = 10101;
        primary-group = "fudo";
        common-name = "Tatsuro Akano";
        given-name = "Tatsuro";
        surname = "Akano";
        ldap-hashed-passwd = "{MD5}fAV5GX8UdjsXIFjU0Ex4SA==";
      };

      blatzkrieg = {
        uid = 10102;
        primary-group = "fudo";
        common-name = "Brendan Blatz";
        given-name = "Brendan";
        surname = "Blatz";
        ldap-hashed-passwd = "{MD5}1nE/ndFwGbfH/wLagxvt8w==";
      };

      ellie = {
        uid = 10103;
        primary-group = "fudo";
        common-name = "Ellie Lee";
        given-name = "Ellie";
        surname = "Lee";
        ldap-hashed-passwd = "{MD5}gzjwt+kw2nmvJ1FKFTpSZA==";
      };

      alan = {
        uid = 10104;
        primary-group = "fudo";
        common-name = "Alan Wong";
        given-name = "Alan";
        surname = "Wong";
        ldap-hashed-passwd = "{MD5}WhohVE4xfo9RIOw1kG3s1Q==";
      };

      omefire = {
        uid = 10105;
        primary-group = "fudo";
        common-name = "Omar Mefire";
        given-name = "Omar";
        surname = "Mefire";
        ldap-hashed-passwd = "{SSHA}W6KWo26wl/nawpV++wMqsKdwrIwrait5";
      };

      gordon = {
        uid = 10106;
        primary-group = "fudo";
        common-name = "Gordon Stewart";
        given-name = "Gordon";
        surname = "Stewart";
        ldap-hashed-passwd = "{SSHA}jaCOc1ZjCI9klVR+v676lIBOidEg7/u0";
      };

      jeramy = {
        uid = 10107;
        primary-group = "selby";
        common-name = "Jeramy Ewbank";
        given-name = "Jeramy";
        surname = "Ewbank";
        ldap-hashed-passwd = "{MD5}8j8vTniyRzylmeTNUoRwWA==";
      };

      lauren = {
        uid = 10108;
        primary-group = "selby";
        common-name = "Lauren Hotel";
        given-name = "Lauren";
        surname = "Hotel";
        ldap-hashed-passwd = "{SSHA}1q/MC5LKROlIT1nDrKrMvcFAXFtcQXIR";
        # ldap-hashed-passwd = "{SSHA}DKnhrycmXSu4HKWFPeBXA9xvZ0ytgXIpZA10tg==";
      };

      # Used to send alerts from grafana
      metrics = {
        uid = 10109;
        primary-group = "fudo";
        common-name = "Fudo Metrics";
        ldap-hashed-passwd = "{SSHA}FveEVy6kljQZey0xp0nF62SMlO5nATJ1";
      };

      testuser = {
        uid = 10110;
        primary-group = "fudo";
        common-name = "Test User";
        ldap-hashed-passwd = "{SSHA}LSz1WjWfjRwAM3xm+QZ71vFj997dnZC6";
      };

      # Used to send messages from the chat server
      # chat = {
      #   uid = 10111;
      #   primary-group = "fudo";
      #   common-name = "Fudo Chat";
      #   ldap-hashed-passwd = "{SSHA}XDYAM2JE4PXssywRzO4tVSbn5lUZOgg7";
      # };

      kevinyinjunjie = {
        uid = 10112;
        primary-group = "fudo";
        common-name = "Kevin";
        given-name = "Kevin";
        surname = "Yin";
        ldap-hashed-passwd = "{SSHA}1onx6HPMKCJvmLnRf1tiWFJ1D92DEtnl";
      };

      netinfo = {
        uid = 10113;
        primary-group = "fudo";
        common-name = "Network Info Mailer";
        ldap-hashed-passwd = "{SSHA}UQHfW0IzjIbRU6VV+DraxvZFWt0to3oc";
      };

      selby-forum = {
        uid = 10114;
        primary-group = "selby";
        common-name = "Selby Forum";
        ldap-hashed-passwd = "{SSHA}f7eDNuwFXRhvants5cJJ/FGtkCKheY2Q";
      };

      viator = {
        uid = 10115;
        primary-group = "informis";
        common-name = "Viator";
        ldap-hashed-passwd = "{SSHA}dF/5NGkafL8M1kpa3LYZKdh0Pc7a02gA";
        login-hashed-passwd =
          "$6$a1q2Duoe35hd5$IaZGXPfqyGv9uq5DQm7DZq0vIHsUs39sLktBiBBqMiwl/f/Z4jSvNZLJp9DZJYe5u2qGBYh1ca.jsXvQA8FPZ/";
        email = "viator@informis.land";
      };

      jasper = {
        uid = 10116;
        primary-group = "selby";
        common-name = "Jasper Selby";
        given-name = "Jasper";
        surname = "Selby";
        # login-hashed-passwd = "$6$ggREeoA2HUmXDDbh$zPEyroAAiSPKseTb.qt4ByLaYBhV08x0hqOz4dnt4wEqcaWtOpBt3UoTpHxyDc2/inMzkRggBwfr.Zm0vI7mp1";
        # ldap-hashed-passwd = "{SSHA}5OCmPaKrkEG3Q4DOWibsPweuBShsMAz2";
        login-hashed-passwd =
          "$6$odSNyA1T5bQRIXUd$LsCeR8rjC5pyNxesSR9eGVoa9wy1jwaPDyjOlB9ZQl3fzpRP6biNieXbjRWAfew8FgAImtB5beVCmXIc1085g.";
        ldap-hashed-passwd = "{SSHA}mok5LrQtJ4pny2QTaN3sMmOZx6X0eg5R";
        email = "jasper@selby.ca";
      };
    };

    groupDomainMap = {
      fudo = "fudo.org";
      selby = "selby.ca";
      informis = "informis.land";
    };

  in mapAttrs (username: userOpts:
    if (hasAttr "email" userOpts) then
      userOpts
    else
      (userOpts // {
        email = let domain = getAttr userOpts.primary-group groupDomainMap;
        in "${username}.${domain}";
      })) users;
}