From f7146814ec54f9d8232100d6353b2945adb59a70 Mon Sep 17 00:00:00 2001
From: zowoq <59103226+zowoq@users.noreply.github.com>
Date: Tue, 29 Oct 2024 15:15:32 +1000
Subject: [PATCH] modules/nixos/community-builder: refactor users

- align with darwin/community-builder

- remove unused hashedPassword, maybeWheel options
---
 modules/nixos/community-builder/users.nix | 242 +++++++++++-----------
 1 file changed, 117 insertions(+), 125 deletions(-)

diff --git a/modules/nixos/community-builder/users.nix b/modules/nixos/community-builder/users.nix
index 7396129..b5d1fa7 100644
--- a/modules/nixos/community-builder/users.nix
+++ b/modules/nixos/community-builder/users.nix
@@ -1,8 +1,6 @@
 { config, pkgs, ... }:
 let
-  inherit (pkgs) lib;
-
-  users = {
+  users = [
     # 1. Generate an SSH key for your root account and add the public
     #    key to a file matching your name in ./keys/
     #
@@ -10,206 +8,200 @@ let
     #
     #    youruser.keys = ./keys/youruser;
     #
-    "0x4A6F" = {
+    {
+      name = "0x4A6F";
       trusted = true;
       keys = ./keys/0x4A6F;
-    };
-
-    afh = {
+    }
+    {
+      name = "afh";
       trusted = true;
       keys = ./keys/afh;
-    };
-
-    a-kenji = {
+    }
+    {
+      name = "a-kenji";
       trusted = true;
       keys = ./keys/a-kenji;
-    };
-
-    binarycat = {
+    }
+    {
+      name = "binarycat";
       trusted = true;
       keys = ./keys/binarycat;
-    };
-
-    binarycat-untrusted = {
+    }
+    {
+      name = "binarycat-untrusted";
       trusted = false;
       keys = ./keys/binarycat;
-    };
-
-    bobby285271 = {
+    }
+    {
+      name = "bobby285271";
       trusted = true;
       keys = ./keys/bobby285271;
-    };
-
-    ckie = {
+    }
+    {
+      name = "ckie";
       trusted = true;
       keys = ./keys/ckie;
-    };
-
-    fgaz = {
+    }
+    {
+      name = "fgaz";
       trusted = true;
       keys = ./keys/fgaz;
-    };
-
-    flokli = {
+    }
+    {
+      name = "flokli";
       trusted = true;
       keys = ./keys/flokli;
-    };
-
-    fmzakari = {
+    }
+    {
+      name = "fmzakari";
       # github: @fzakaria
       trusted = true;
       keys = ./keys/fmzakari;
-    };
-
-    glepage = {
+    }
+    {
+      name = "glepage";
       trusted = true;
       shell = pkgs.fish;
       keys = ./keys/glepage;
-    };
-
-    hexchen = {
+    }
+    {
+      name = "hexchen";
       trusted = true;
       keys = ./keys/hexchen;
-    };
-
-    janik = {
+    }
+    {
+      name = "janik";
       trusted = true;
       keys = ./keys/janik;
-    };
-
-    jtojnar = {
+    }
+    {
+      name = "jtojnar";
       trusted = true;
       keys = ./keys/jtojnar;
-    };
-
-    lewo = {
+    }
+    {
+      name = "lewo";
       trusted = true;
       keys = ./keys/lewo;
-    };
-
-    lily = {
+    }
+    {
+      name = "lily";
       trusted = true;
       keys = ./keys/lily;
-    };
-
-    linj = {
+    }
+    {
+      name = "linj";
       # lib.maintainers.linj, https://github.com/jian-lin
       trusted = true;
       shell = pkgs.fish;
       keys = ./keys/linj;
-    };
-
-    mrcjkb = {
+    }
+    {
+      name = "mrcjkb";
       # lib.maintainers.mrcjkb https://github.com/mrcjkb
       trusted = true;
       shell = pkgs.nushell;
       keys = ./keys/mrcjkb;
-    };
-
-    nicoo = {
+    }
+    {
+      name = "nicoo";
       # lib.maintainers.nicoo, @nbraud on github.com
       trusted = true;
       keys = ./keys/nicoo;
-    };
-
-    raitobezarius = {
+    }
+    {
+      name = "raitobezarius";
       trusted = true;
       keys = ./keys/raitobezarius;
-    };
-
-    networkexception = {
+    }
+    {
+      name = "networkexception";
       trusted = true;
       keys = ./keys/networkexception;
-    };
-
-    pinpox = {
+    }
+    {
+      name = "pinpox";
       trusted = true;
       keys = ./keys/pinpox;
-    };
-
-    raboof = {
+    }
+    {
+      name = "raboof";
       # lib.maintainers.raboof, https://github.com/raboof
       trusted = true;
       keys = ./keys/raboof;
-    };
-
-    schmittlauch = {
+    }
+    {
+      name = "schmittlauch";
       trusted = true;
       keys = ./keys/schmittlauch;
-    };
-
-    matthiasbeyer = {
+    }
+    {
+      name = "matthiasbeyer";
       trusted = true;
       keys = ./keys/matthiasbeyer;
-    };
-
-    stephank = {
+    }
+    {
+      name = "stephank";
       trusted = true;
       keys = ./keys/stephank;
-    };
-
-    supinie = {
+    }
+    {
+      name = "supinie";
       trusted = true;
       keys = ./keys/supinie;
-    };
-
-    teto = {
+    }
+    {
+      name = "teto";
       trusted = true;
       keys = ./keys/teto;
-    };
-
-    thecomputerguy = {
+    }
+    {
+      name = "thecomputerguy";
       trusted = true;
       keys = ./keys/thecomputerguy;
-    };
-
-    tomberek = {
+    }
+    {
+      name = "tomberek";
       trusted = true;
       keys = ./keys/tomberek;
-    };
-
-    winter = {
+    }
+    {
+      name = "winter";
       trusted = true;
       keys = ./keys/winter;
-    };
-
-    matthewcroughan = {
+    }
+    {
+      name = "matthewcroughan";
       trusted = true;
       keys = ./keys/matthewcroughan;
-    };
-
-    emily = {
+    }
+    {
+      name = "emily";
       # lib.maintainers.emily, https://github.com/emilazy
       trusted = true;
       keys = ./keys/emily;
-    };
-
-    doronbehar = {
+    }
+    {
+      name = "doronbehar";
       # lib.maintainers.doronbehar, https://github.com/doronbehar
       trusted = true;
       keys = ./keys/doronbehar;
-    };
-  };
-
-  ifAttr =
-    key: default: result: opts:
-    if (opts ? "${key}") && opts."${key}" then result else default;
-
-  maybeTrusted = ifAttr "trusted" [ ] [ "trusted" ];
-  maybeWheel = ifAttr "sudo" [ ] [ "wheel" ];
-
-  userGroups = opts: (maybeTrusted opts) ++ (maybeWheel opts);
-
-  descToUser = name: opts: {
-    isNormalUser = true;
-    extraGroups = userGroups opts;
-    createHome = true;
-    home = "/home/${name}";
-    shell = opts.shell or config.users.defaultUserShell;
-    hashedPassword = opts.password or null;
-    openssh.authorizedKeys.keyFiles = [ opts.keys ];
-  };
+    }
+  ];
 in
 {
-  users.users = lib.mapAttrs descToUser users;
+  users.users = builtins.listToAttrs (
+    builtins.map (u: {
+      inherit (u) name;
+      value = {
+        isNormalUser = true;
+        extraGroups = if (u ? trusted && u.trusted) then [ "trusted" ] else [ ];
+        home = "/home/${u.name}";
+        createHome = true;
+        shell = u.shell or config.users.defaultUserShell;
+        openssh.authorizedKeys.keyFiles = [ u.keys ];
+      };
+    }) users
+  );
 }