{ self, lib, ... }: { flake.nixosModules.createHost = { lib, config, pkgs, ... }: let cfg = config.jcklib.createHost; in { 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.loader = { efi = { canTouchEfiVariables = true; efiSysMountPoint = "/boot"; # ← use the same mount point here. }; grub = { efiSupport = true; device = "nodev"; useOSProber = true; theme = "${pkgs.fetchFromGitHub { # blue screen of life grub theme owner = "scouckel"; repo = "bsol"; rev = "a8eedad9e7163dce230ca7886be8e1b4ef81da99"; sha256 = "sha256-P2q73uM1Ysn1a+0mOGOvee/Q1WAYRGQvfanrasx/8r8"; }}/bsol"; }; }; 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 = self.packages.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"; }; }; }