{ config, lib, pkgs, timeZone, ... }: let srvConfig = config.serverConfig; in { options.serverConfig= { userName = lib.mkOption { type = lib.types.str; description = "Main username for system"; }; hostName = lib.mkOption { type = lib.types.str; description = "Hostname for system"; }; hostId = lib.mkOption { type = lib.types.str; description = "Host ID"; }; email = lib.mkOption { type = lib.types.str; description = "Email for server box"; }; sshEnable = lib.mkOption { default = false; description = "Whether to enable ssh server"; }; nfsEnable = lib.mkOption { default = false; }; }; imports = [ ./modules/user/main_user.nix ]; config = { # Enable flakes feature nix.settings.experimental-features = [ "nix-command" "flakes" ]; boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; networking = { hostId = srvConfig.hostId; hostName = srvConfig.hostName; # Define your hostname. # Pick only one of the below networking options. # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. networkmanager.enable = true; # Easiest to use and most distros use this by default. }; time.timeZone = timeZone; main_user = { enable = true; userName = srvConfig.userName; isDesktopUser = false; }; environment.systemPackages = with pkgs; [ docker docker-compose zsh ]; programs.zsh.enable = true; services.openssh = lib.mkIf srvConfig.sshEnable { enable = true; }; services.nfs.server = lib.mkIf srvConfig.nfsEnable { enable = true; exports = '' /kage 192.168.1.149(rw,fsid=0,no_subtree_check) ''; }; networking.firewall.allowedTCPPorts = [ 2049 ]; # networking.firewall.allowedTCPPorts = [ ... ]; # networking.firewall.allowedUDPPorts = [ ... ]; system.stateVersion = "23.11"; # Did you read the comment? }; }