{ self, lib, config, pkgs, ... }: let cfg = config.jcklib.createHost; in { flake.nixosModules.createHost = {lib, ...}: { options.jcklib.createHost = { hostName = lib.mkOption { type = lib.types.str; }; architecture = lib.mkOption { type = lib.types.enum ["x86_64-linux" "aarch64-linux"]; default = "x86_64-linux"; }; userName = lib.mkOption { type = lib.types.str; default = "jck"; }; }; }; config = { boot.kernelPackages = lib.mkDefault pkgs.linuxPackages_latest; hardware.firmware = with pkgs; [ linux-firmware ]; hardware.enableRedistributableFirmware = true; system.name = cfg.hostName; networking.hostName = cfg.hostName; networking.networkmanager.enable = true; time.timeZone = lib.mkDefault "US/Central"; i18n.defaultLocale = "en_US.UTF-8"; i18n.extraLocaleSettings = { LC_ADDRESS = "en_US.UTF-8"; LC_IDENTIFICATION = "en_US.UTF-8"; LC_MEASUREMENT = "en_US.UTF-8"; LC_MONETARY = "en_US.UTF-8"; LC_NAME = "en_US.UTF-8"; LC_NUMERIC = "en_US.UTF-8"; LC_PAPER = "en_US.UTF-8"; LC_TELEPHONE = "en_US.UTF-8"; LC_TIME = "en_US.UTF-8"; }; services.xserver.xkb = { layout = "us"; variant = ""; }; users.users.${cfg.userName} = { isNormalUser = true; description = cfg.userName; extraGroups = ["networkmanager" "wheel"]; shell = pkgs.fish; # UPDATE WITH WRAPPED FISH CONFIG LATER }; nixpkgs.config.allowUnfree = true; nix.settings = { experimental-features = ["nix-command" "flakes"]; auto-optimise-store = true; }; services.openssh = { enable = true; settings.PermitRootLogin = "no"; }; system.stateVersion = "25.05"; }; }