feat(metal)!: switch to NixOS

This commit is contained in:
Khue Doan
2025-10-02 09:31:00 +07:00
parent cb046acfba
commit 4317084182
6 changed files with 150 additions and 15 deletions

1
.gitignore vendored
View File

@@ -7,3 +7,4 @@ book/
*.tgz
*kubeconfig.yaml
Chart.lock
result

33
flake.lock generated
View File

@@ -1,5 +1,25 @@
{
"nodes": {
"disko": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1758287904,
"narHash": "sha256-IGmaEf3Do8o5Cwp1kXBN1wQmZwQN3NLfq5t4nHtVtcU=",
"owner": "nix-community",
"repo": "disko",
"rev": "67ff9807dd148e704baadbd4fd783b54282ca627",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "disko",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
@@ -20,22 +40,23 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1731797254,
"narHash": "sha256-df3dJApLPhd11AlueuoN0Q4fHo/hagP75LlM5K1sz9g=",
"owner": "NixOS",
"lastModified": 1759281824,
"narHash": "sha256-FIBE1qXv9TKvSNwst6FumyHwCRH3BlWDpfsnqRDCll0=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "e8c38b73aeb218e27163376a2d617e61a2ad9b59",
"rev": "5b5be50345d4113d04ba58c444348849f5585b4a",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-24.05",
"owner": "nixos",
"ref": "nixos-25.05",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"disko": "disko",
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs"
}

View File

@@ -1,20 +1,25 @@
{
description = "Homelab";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05";
flake-utils.url = "github:numtide/flake-utils";
nixpkgs = {
url = "github:nixos/nixpkgs/nixos-25.05";
};
flake-utils = {
url = "github:numtide/flake-utils";
};
disko = {
url = "github:nix-community/disko";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, flake-utils }:
outputs = { self, nixpkgs, flake-utils, disko }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs { inherit system; };
in
with pkgs;
{
devShells.default = mkShell {
packages = [
devShells.default = pkgs.mkShell {
packages = with pkgs; [
ansible
ansible-lint
bmake
@@ -56,5 +61,10 @@
];
};
}
);
)
// {
nixosConfigurations = import ./metal {
inherit nixpkgs disko;
};
};
}

73
metal/configuration.nix Normal file
View File

@@ -0,0 +1,73 @@
{ modulesPath, ... }:
{
imports = [
(modulesPath + "/profiles/all-hardware.nix")
];
disko.devices = {
disk = {
main = {
type = "disk";
device = "/dev/sda";
content = {
type = "gpt";
partitions = {
ESP = {
size = "1G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [ "umask=0077" ];
};
};
root = {
size = "100%";
content = {
type = "filesystem";
format = "ext4";
mountpoint = "/";
};
};
};
};
};
};
};
boot = {
loader = {
systemd-boot = {
enable = true;
};
efi = {
canTouchEfiVariables = true;
};
};
};
nix = {
settings = {
experimental-features = [
"nix-command"
"flakes"
];
};
optimise.automatic = true;
gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 30d";
};
};
services = {
openssh = {
enable = true;
};
};
system.stateVersion = "25.05";
}

17
metal/default.nix Normal file
View File

@@ -0,0 +1,17 @@
{ nixpkgs, disko }:
{
installer = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
./installer.nix
];
};
metal1 = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
disko.nixosModules.disko
./configuration.nix
];
};
}

13
metal/installer.nix Normal file
View File

@@ -0,0 +1,13 @@
{ modulesPath, ... }:
{
imports = [
(modulesPath + "/installer/netboot/netboot-minimal.nix")
];
services.openssh.enable = true;
users.users.root.openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN5ue4np7cF34f6dwqH1262fPjkowHQ8irfjVC156PCG"
];
}