{ config, lib, ...}: with lib; let genUsersList = dirPath: concatLists (let contents = builtins.readDir dirPath; in map (name: (dirEntryToList."${contents."${name}"}" or (x: [])) "${dirPath}/${name}") (attrNames contents)); dirEntryToList = { "regular" = path: [(import (builtins.toPath path))]; }; users = genUsersList ./users; host = config.networking.hostName; in { users.mutableUsers = false; users.extraUsers = listToAttrs (map (user: nameValuePair (user.name) (removeAttrs user ["hosts" "allHosts"])) (filter (user: elem host (user.hosts or []) || (user.allHosts or false)) users)); }