summaryrefslogtreecommitdiff
path: root/modules/core/createHost.nix
blob: 7c84bdec7d5796dd4a91125e6ad0a12f3da5c630 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
{
  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";
  };
}