mirror of
https://github.com/MagicBOTAlex/nixos-server.git
synced 2026-05-06 10:02:30 +02:00
235 lines
6 KiB
Nix
235 lines
6 KiB
Nix
{ lib, pkgs, ... }:
|
|
|
|
{
|
|
users.users.root = {
|
|
openssh.authorizedKeys.keys = [
|
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAhiPhFbCi64NduuV794omgS8mctBLXtqxbaEJyUo6lg botalex@DESKTOPSKTOP-ENDVV0V"
|
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIFhTExbc9m4dCK6676wGiA8zPjE0l/9Fz2yf0IKvUvg snorre@archlinux"
|
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGxUPAsPkri0B+xkO3sCHJZfKgAbgPcepP8J4WW4yyLj u0_a167@localhost"
|
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAfQLOKUnOARUAs8X1EL1GRHoCQ0oMun0vzL7Z78yOsM nixos@nixos"
|
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJw1ckvXz78ITeqANrWSkJl6PJo2AMA4myNrRMBAB7xW zhentao2004@gmail.com"
|
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKhcUZbIMX0W27l/FMF5WijpdsJAK329/P008OEAfcyz botmain@nixos"
|
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILB0esg3ABIcYWxvQKlPuwEE6cbhNcWjisfky0wnGirJ root@nixos"
|
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGxUPAsPkri0B+xkO3sCHJZfKgAbgPcepP8J4WW4yyLj u0_a167@localhost"
|
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKyZOZlcQBmqSPxjaGgE2tP+K7LYziqjFUo3EX12rGtf botlap@nixos"
|
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBLSUXsao6rjC3FDtRHhh7z6wqMtA/mqL50e1Dj9a2wE botserver@botserver"
|
|
];
|
|
|
|
hashedPassword = "$6$HpwhjoEuhRZuFhJF$jEV3SxbcGKVlRRgbDx6YpySyTHKUIOnmUD0Rd4PLXsXhbnrgeBVCPfkK.cBCUmxUeQjNTzj4CDpP4XBxLz0EV0";
|
|
|
|
shell = pkgs.fish;
|
|
|
|
};
|
|
|
|
environment.variables.EDITOR = "nvim";
|
|
|
|
services.openssh = {
|
|
enable = true;
|
|
};
|
|
imports = [
|
|
./../../modules/getNvim.nix
|
|
./kubernetes.nix
|
|
# ./wg-snorre.nix
|
|
];
|
|
environment.systemPackages = with pkgs; [
|
|
neovim
|
|
git
|
|
wget
|
|
curl
|
|
busybox
|
|
gcc
|
|
tree-sitter
|
|
busybox
|
|
nodejs_22
|
|
screen
|
|
fastfetch
|
|
btop
|
|
openssh
|
|
ripgrep
|
|
openssl
|
|
dig
|
|
argocd
|
|
gnutar
|
|
wireguard-tools
|
|
python312
|
|
];
|
|
|
|
programs.fish = {
|
|
enable = true;
|
|
|
|
};
|
|
documentation.man.generateCaches = false;
|
|
|
|
# --- MicroVM Specific Settings ---
|
|
microvm = {
|
|
# Choose your hypervisor: "qemu", "firecracker", "cloud-hypervisor", etc.
|
|
hypervisor = "qemu";
|
|
|
|
mem = 8192;
|
|
vcpu = 8;
|
|
|
|
# Create a tap interface or user networking
|
|
interfaces = [
|
|
{
|
|
type = "tap";
|
|
id = "microvm-tap1"; # Matches the host's first tap
|
|
mac = "02:00:00:00:00:01";
|
|
}
|
|
];
|
|
|
|
# forwardPorts = [
|
|
# {
|
|
# from = "host";
|
|
# host.port = 22222;
|
|
# guest.port = 22;
|
|
# }
|
|
# {
|
|
# from = "host";
|
|
# host.port = 6443; # Port you will access on your machine
|
|
# guest.port = 6443; # Port the service is listening on inside the VM
|
|
# }
|
|
# {
|
|
# from = "host";
|
|
# host.port = 8877; # certmgr
|
|
# guest.port = 8888;
|
|
# }
|
|
# {
|
|
# from = "host";
|
|
# host.port = 4325; # argocd
|
|
# guest.port = 4325;
|
|
# }
|
|
#
|
|
# ];
|
|
|
|
# Mount the host's /nix/store explicitly (read-only)
|
|
# This makes the VM start instantly as it shares the host store.
|
|
shares = [
|
|
{
|
|
tag = "ro-store";
|
|
source = "/nix/store";
|
|
mountPoint = "/nix/.ro-store";
|
|
}
|
|
{
|
|
proto = "9p";
|
|
tag = "docking-mount";
|
|
# Source path can be absolute or relative
|
|
# to /var/lib/microvms/$hostName
|
|
source = "../shared/docking";
|
|
mountPoint = "/root/docking";
|
|
}
|
|
{
|
|
proto = "9p";
|
|
tag = "kube-wireguard";
|
|
# Source path can be absolute or relative
|
|
# to /var/lib/microvms/$hostName
|
|
source = "../shared/wg";
|
|
mountPoint = "/root/wg";
|
|
}
|
|
# {
|
|
# proto = "9p";
|
|
# tag = "kube-mount";
|
|
# source = "../shared/kube";
|
|
# mountPoint = "/var/lib/kubernetes";
|
|
# }
|
|
# {
|
|
# proto = "9p";
|
|
# tag = "config";
|
|
# source = "../shared/.config";
|
|
# mountPoint = "/root/.config";
|
|
# }
|
|
# {
|
|
# proto = "9p";
|
|
# tag = "local";
|
|
# source = "../shared/.local";
|
|
# mountPoint = "/root/.local";
|
|
# }
|
|
];
|
|
|
|
# Writable disk allocation
|
|
volumes = [
|
|
{
|
|
image = "/var/lib/microvms/kube-daddy/kube-daddy.img";
|
|
mountPoint = "/";
|
|
size = 32768; # Size in MB
|
|
}
|
|
];
|
|
};
|
|
|
|
services.resolved.enable = true;
|
|
networking = {
|
|
hostName = "kube-daddy";
|
|
useNetworkd = true;
|
|
firewall.enable = false;
|
|
nameservers = [
|
|
"10.0.0.1"
|
|
"8.8.8.8"
|
|
];
|
|
};
|
|
|
|
systemd.network = {
|
|
# 1. Define the Bridge Device
|
|
netdevs."20-br0" = {
|
|
netdevConfig = {
|
|
Kind = "bridge";
|
|
Name = "br0";
|
|
};
|
|
};
|
|
|
|
networks = {
|
|
# 2. Configure the Bridge (IP & Gateway go here now)
|
|
"30-br0" = {
|
|
matchConfig.Name = "br0";
|
|
networkConfig = {
|
|
Address = "10.0.0.2/24";
|
|
Gateway = "10.0.0.1";
|
|
DNS = [
|
|
"10.0.0.1"
|
|
"8.8.8.8"
|
|
];
|
|
};
|
|
linkConfig.RequiredForOnline = "routable";
|
|
};
|
|
|
|
# 3. Catch the changing interface and attach it to the bridge
|
|
"40-uplink" = {
|
|
# This wildcard matches enp0s7, enp1s0, etc.
|
|
matchConfig.Name = "en*";
|
|
networkConfig.Bridge = "br0";
|
|
};
|
|
};
|
|
};
|
|
|
|
# Allow passwordless root login for testing (Do not use in production!)
|
|
services.getty.autologinUser = "root";
|
|
users.users.root.password = "";
|
|
|
|
systemd.services."load-br_netfilter" = {
|
|
enable = true;
|
|
description = "Modprobe br_netfilter";
|
|
before = [ "flannel.service" ];
|
|
wantedBy = [
|
|
"multi-user.target"
|
|
"flannel.service"
|
|
];
|
|
|
|
script = ''
|
|
${pkgs.kmod}/bin/modprobe br_netfilter
|
|
'';
|
|
};
|
|
|
|
systemd.network.enable = true;
|
|
systemd.network.networks."11-microvm" = {
|
|
matchConfig.Name = "vm-*";
|
|
# Attach to the bridge that was configured above
|
|
networkConfig.Bridge = "microvm";
|
|
};
|
|
|
|
system.stateVersion = "24.11";
|
|
|
|
systemd.tmpfiles.rules = [
|
|
"d /root/.kube 0755 root root -"
|
|
"d /root/.config 0755 root root -"
|
|
"d /root/.local 0755 root root -"
|
|
"L+ /root/.kube/config - - - - /etc/kubernetes/cluster-admin.kubeconfig"
|
|
];
|
|
}
|