Initial flake: muscari k3s host

- flake.nix: mkHost helper, SOPS-age integration
- hosts/common: locale, sshd, universal packages
- hosts/muscari: k3s host with Cilium flags
- modules/users/mikl: SSH keys via forgejo .keys + sha256 pinning
- modules/services/k3s: k3s daemon with Cilium-compatible flags
- hardware-configuration.nix: placeholder, will be regenerated on real VM

Stack:
- NixOS 25.11
- k3s single-node (Cilium CNI, Traefik ingress)
- SOPS + age for secrets
- Multi-host ready (rosemary planned)
This commit is contained in:
mikl 2026-06-25 14:47:38 +03:00 • committed by isogonalconguate
commit 2d023fc86d
10 changed files with 282 additions and 0 deletions

43
hosts/common/default.nix Normal file
View file

@ -0,0 +1,43 @@
# Common config for ALL NixOS hosts (muscari, future rosemary, ...)
# Только то что реально нужно везде. Специфичное для k3s/forgejo — в modules/services/
{ pkgs, ... }:
{
# Time
time.timeZone = "Europe/Moscow";
# Locale
i18n.defaultLocale = "en_US.UTF-8";
# SSH — единые правила для всех хостов
services.openssh = {
enable = true;
settings = {
PermitRootLogin = "prohibit-password";
PasswordAuthentication = false;
};
};
# Базовые пакеты — есть на каждом хосте
environment.systemPackages = with pkgs; [
# shell + tools
git
neovim
htop
tmux
curl
wget
rsync
dnsutils # dig, nslookup
# secrets
sops
age
ssh-to-age
# nix tooling
nh # nix-helper от vlaci, удобнее чем nixos-rebuild switch
shellcheck
shfmt
];
}

26
hosts/muscari/default.nix Normal file
View file

@ -0,0 +1,26 @@
# muscari — k3s single-node cluster на YC (Debian 12 → NixOS через nixos-anywhere)
# https://git.iscg.dev/mikl/nixos-iscg
{ config, pkgs, lib, ... }:
{
imports = [
./hardware-configuration.nix
../../modules/users/mikl.nix
../../modules/services/k3s.nix
];
networking = {
hostName = "muscari";
useDHCP = true;
firewall.allowedTCPPorts = [
22 # SSH
80 # HTTP (Ingress через Traefik)
443 # HTTPS (Ingress через Traefik)
# 6443 не открываем — kubectl через SSH-туннель
];
};
# После nixos-anywhere первая установка может быть 26.05,
# потом не трогаем (NixOS convention)
system.stateVersion = "25.11";
}

View file

@ -0,0 +1,26 @@
# Hardware configuration для muscari (Yandex Cloud VM)
# PLACEHOLDER — будет заменён реальным после создания VM в YC
# (см. ../NIXOS-SETUP.md, шаг 4-5)
# Временный placeholder чтобы flake.nix компилировался
# После создания VM в YC с Debian 12:
# 1. SSH в VM как debian
# 2. Сгенерировать реальный hardware-config через nixos-generate-config
# 3. Заменить этот файл
# 4. Перезапустить nixos-anywhere
{ ... }:
{
# NixOS ругается без fileSystems и boot.loader, поэтому минимальный placeholder
# ПОМЕНЯТЬ после первого старта VM
fileSystems."/" = {
device = "/dev/vda1";
fsType = "ext4";
};
boot.loader.grub.enable = false;
boot.loader.generic-extlinux-compatible.enable = true;
# Для YC: virtio scsi
boot.initrd.availableKernelModules = [ "virtio_pci" "virtio_mmio" "virtio_blk" "virtio_scsi" ];
}