{ config, lib, pkgs, sources, ... }: let inherit (builtins) elemAt; inherit (lib.options) mkOption; inherit (lib.types) listOf str package; inherit (config.meta.mainUser) username; in { imports = [ (sources.hjem + "/modules/nixos") ]; options.meta = { users = mkOption { type = listOf str; default = [ "cr" ]; description = '' A list of users on a system. ''; }; mainUser = { username = mkOption { type = str; default = elemAt config.meta.users 0; description = '' The main user for each system. This is the first element of the list of users by default. ''; }; gitSigningKey = mkOption { type = str; description = '' The main user's git signing key, used to automatically sing git commits with this key ''; default = '' ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAAWEDj/Yib6Mqs016jx7rtecWpytwfVl28eoHtPYCM9TVLq81VIHJSN37lbkc/JjiXCdIJy2Ta3A3CVV5k3Z37NbgAu23oKA2OcHQNaRTLtqWlcBf9fk9suOkP1A3NzAqzivFpBnZm3ytaXwU8LBJqxOtNqZcFVruO6fZxJtg2uE34mAw== ''; }; # TODO: clean this up and move it somewhere else. defaultShell = { name = mkOption { type = str; default = "nushell"; description = '' The default shell of a user. This is not the main system shell, but the shell used in terminals. ''; }; package = mkOption { type = package; default = pkgs.nushell; }; }; }; }; config = { users = { mutableUsers = true; users = { ${username} = { isNormalUser = true; extraGroups = [ "wheel" "networking" "video" "networkmanager" "audio" "nix" "docker" ]; shell = pkgs.nushell; }; }; }; }; }