{ pkgs, outputs, config, lib, ... }: let # Record containing all the hosts hosts = outputs.nixosConfigurations; # Function from hostname to relative path to public ssh key idKey = host: ../../${host}/id_ed25519.pub; in { # Password file stored through agenix age.secrets.adrielusPassword.file = ./adrielus_password.age; users = { # Configure users through nix only mutableUsers = false; # Create an user named adrielus users.adrielus = { # Adds me to some default groups, and creates the home dir isNormalUser = true; # File containing my password, managed by agenix passwordFile = config.age.secrets.adrielusPassword.path; # Set default shell shell = pkgs.fish; # Add user to the following groups extraGroups = [ "wheel" # Access to sudo "lp" # Printers "audio" # Audio devices "video" # Webcam and the like "network" # for wireless stuff (???) ]; openssh.authorizedKeys.keyFiles = lib.pipe hosts [ # attrsetof host -> attrsetof path (builtins.mapAttrs (name: _: idKey name)) # string -> host -> path # attrsetof path -> path[] builtins.attrValues # path[] -> path[] (builtins.filter builtins.pathExists) ]; }; }; }