heather: switch to make-disk-image (qcow2 for YC), drop disko
- Rename muscari -> heather (YC VM). rosemary reserved for future EU server. - Add hosts/heather/image.nix: YC guest profile + qcow2 build target based on nixos/lib/make-disk-image.nix (the nixpkgs-standard cloud image builder). partitionTableType=legacy (MBR + single ext4 root, label nixos), GRUB in MBR on /dev/vda, virtio drivers, console=ttyS0, cloud-init (Ec2 datasource) so poppy ssh key auto-lands from YC metadata, growPartition. - Drop disko flake input + disk-config.nix (was only for nixos-anywhere runtime install; replaced by make-disk-image build-time approach, no kexec). - Add home/server.nix: minimal headless home for NixOS hosts (no ollama/ texliveFull/kitty/syncthing/pass). flake mkNixos uses it instead of full ./home. - k3s.nix: drop dead firewall block (firewall off in image.nix -> trustedInterfaces was a no-op). Cilium manages pod networking via BPF. - image.baseName=heather, configurationLimit=1, remove virtio dups (qemu-guest profile already provides most). - Fix sha256 pin on forgejo mikl.keys (was stale, would break fetchurl). - home/zsh.nix: source yandex-cloud yc completion.
This commit is contained in:
parent
c21268fb9b
commit
79260cec6f
9 changed files with 264 additions and 131 deletions
21
flake.lock
21
flake.lock
|
|
@ -1,25 +1,5 @@
|
||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
"disko": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1781152676,
|
|
||||||
"narHash": "sha256-RxWs5ND31KzTG7wvMM+PMfUjyNpmIEr999lqNARaM5o=",
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "disko",
|
|
||||||
"rev": "ff8702b4de27f72b4c78573dfb89ec74e36abdf1",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "disko",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"home-manager": {
|
"home-manager": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
|
|
@ -78,7 +58,6 @@
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"disko": "disko",
|
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
"nix-darwin": "nix-darwin",
|
"nix-darwin": "nix-darwin",
|
||||||
"nixpkgs": "nixpkgs",
|
"nixpkgs": "nixpkgs",
|
||||||
|
|
|
||||||
16
flake.nix
16
flake.nix
|
|
@ -18,15 +18,10 @@
|
||||||
url = "github:Mic92/sops-nix";
|
url = "github:Mic92/sops-nix";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
disko = {
|
|
||||||
url = "github:nix-community/disko";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs =
|
outputs =
|
||||||
{ self, nixpkgs, nix-darwin, home-manager, sops-nix, disko, ... }:
|
{ self, nixpkgs, nix-darwin, home-manager, sops-nix, ... }:
|
||||||
let
|
let
|
||||||
mkNixos = hostname:
|
mkNixos = hostname:
|
||||||
nixpkgs.lib.nixosSystem {
|
nixpkgs.lib.nixosSystem {
|
||||||
|
|
@ -35,14 +30,15 @@
|
||||||
./hosts/common
|
./hosts/common
|
||||||
./hosts/${hostname}
|
./hosts/${hostname}
|
||||||
sops-nix.nixosModules.sops
|
sops-nix.nixosModules.sops
|
||||||
disko.nixosModules.disko
|
|
||||||
home-manager.nixosModules.home-manager
|
home-manager.nixosModules.home-manager
|
||||||
{
|
{
|
||||||
home-manager = {
|
home-manager = {
|
||||||
useGlobalPkgs = true;
|
useGlobalPkgs = true;
|
||||||
useUserPackages = true;
|
useUserPackages = true;
|
||||||
backupFileExtension = "backup";
|
backupFileExtension = "backup";
|
||||||
users.mikl = import ./home;
|
# Серверные хосты используют минимульный home (headless).
|
||||||
|
# Десктоп-хосты (если появятся) могут переопределить users.mikl.
|
||||||
|
users.mikl = import ./home/server.nix;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
@ -67,8 +63,8 @@
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
nixosConfigurations = {
|
nixosConfigurations = {
|
||||||
muscari = mkNixos "muscari";
|
heather = mkNixos "heather";
|
||||||
# rosemary = mkNixos "rosemary"; # TODO: add disk config
|
# rosemary = mkNixos "rosemary"; # TODO: будущий EU сервер (не YC)
|
||||||
};
|
};
|
||||||
|
|
||||||
darwinConfigurations = {
|
darwinConfigurations = {
|
||||||
|
|
|
||||||
109
home/server.nix
Normal file
109
home/server.nix
Normal file
|
|
@ -0,0 +1,109 @@
|
||||||
|
# Минимальный home-manager для headless NixOS-серверов (heather и будущие).
|
||||||
|
# Не тянет десктопный мусор: ollama (~GB), texliveFull (~4GB), kitty, syncthing,
|
||||||
|
# pass-with-extensions, duti (macOS), pnpm, gita и т.д.
|
||||||
|
# Цель — лёгкий образ и быстрый rebuild. Только то, что нужно админу на сервере.
|
||||||
|
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.stateVersion = "25.11";
|
||||||
|
|
||||||
|
# --- Пакеты: минимальный админский набор ---
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
# Навигация/поиск
|
||||||
|
eza
|
||||||
|
bat
|
||||||
|
ripgrep
|
||||||
|
fd
|
||||||
|
fzf
|
||||||
|
tree
|
||||||
|
|
||||||
|
# Системное
|
||||||
|
htop
|
||||||
|
tmux
|
||||||
|
|
||||||
|
# Редактор
|
||||||
|
vim
|
||||||
|
|
||||||
|
# Git
|
||||||
|
git
|
||||||
|
|
||||||
|
# Nix
|
||||||
|
alejandra # форматтер
|
||||||
|
nix-output-monitor
|
||||||
|
|
||||||
|
# Утилиты
|
||||||
|
delta # красивый git diff
|
||||||
|
trash-cli # rm с корзиной
|
||||||
|
];
|
||||||
|
|
||||||
|
# --- FZF ---
|
||||||
|
programs.fzf = {
|
||||||
|
enable = true;
|
||||||
|
enableZshIntegration = true;
|
||||||
|
defaultCommand = "fd --type f --hidden --exclude .git";
|
||||||
|
defaultOptions = [ "--height 40%" "--layout=reverse" "--border" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# --- Zoxide ---
|
||||||
|
programs.zoxide = {
|
||||||
|
enable = true;
|
||||||
|
enableZshIntegration = true;
|
||||||
|
options = [ "--cmd cd" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# --- Bat ---
|
||||||
|
programs.bat = {
|
||||||
|
enable = true;
|
||||||
|
config = {
|
||||||
|
theme = "Catppuccin Macchiato";
|
||||||
|
italic-text = "always";
|
||||||
|
style = "numbers,changes,header";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# --- Eza ---
|
||||||
|
programs.eza = {
|
||||||
|
enable = true;
|
||||||
|
icons = "auto";
|
||||||
|
git = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# --- Git: сервер-минимум. Без SHA-signing/GPG (gpg агента на сервере нет),
|
||||||
|
# с pull.rebase для чистой истории при правках прямо на хосте. ---
|
||||||
|
programs.git = {
|
||||||
|
enable = true;
|
||||||
|
userName = "mikl";
|
||||||
|
userEmail = "mikl@iscg.dev";
|
||||||
|
extraConfig = {
|
||||||
|
init.defaultBranch = "main";
|
||||||
|
pull.rebase = true;
|
||||||
|
push.autoSetupRemote = true;
|
||||||
|
diff.pager = "delta";
|
||||||
|
};
|
||||||
|
delta.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# --- Zsh: минимульный, без pure-prompt и fastfetch (это десктоп-флёр) ---
|
||||||
|
programs.zsh = {
|
||||||
|
enable = true;
|
||||||
|
enableCompletion = true;
|
||||||
|
autosuggestion.enable = true;
|
||||||
|
syntaxHighlighting.enable = true;
|
||||||
|
history = {
|
||||||
|
size = 10000;
|
||||||
|
save = 10000;
|
||||||
|
ignoreDups = true;
|
||||||
|
share = true;
|
||||||
|
};
|
||||||
|
shellAliases = {
|
||||||
|
ll = "eza -l --icons --git";
|
||||||
|
la = "eza -la --icons --git";
|
||||||
|
};
|
||||||
|
initContent = ''
|
||||||
|
# Простой промпт для headless: user@host:path$
|
||||||
|
autoload -U colors && colors
|
||||||
|
PROMPT='%F{green}%n@%m%f:%F{blue}%~%f$ '
|
||||||
|
RPROMPT='%F{240}%D{%H:%M}%f'
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -87,6 +87,11 @@
|
||||||
# Right prompt - time in gray
|
# Right prompt - time in gray
|
||||||
RPROMPT='%F{240}%D{%H:%M:%S}%f'
|
RPROMPT='%F{240}%D{%H:%M:%S}%f'
|
||||||
|
|
||||||
|
# Yandex Cloud CLI completion
|
||||||
|
if [ -f "$HOME/yandex-cloud/bin/completion.zsh.inc" ]; then
|
||||||
|
source "$HOME/yandex-cloud/bin/completion.zsh.inc"
|
||||||
|
fi
|
||||||
|
|
||||||
# Pure prompt customization
|
# Pure prompt customization
|
||||||
zstyle ':prompt:pure:prompt:success' color green
|
zstyle ':prompt:pure:prompt:success' color green
|
||||||
zstyle ':prompt:pure:prompt:success' symbol ">"
|
zstyle ':prompt:pure:prompt:success' symbol ">"
|
||||||
|
|
|
||||||
39
hosts/heather/default.nix
Normal file
39
hosts/heather/default.nix
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
# heather — k3s single-node cluster на YC (NixOS 25.11, собирается как qcow2-образ)
|
||||||
|
# https://git.iscg.dev/mikl/nix-config
|
||||||
|
#
|
||||||
|
# Перенесено из muscari (переименование 2026-07-11).
|
||||||
|
# VM на Yandex Cloud, 2 vCPU / 8 GB / 64 GB SSD (network-ssd), Legacy BIOS.
|
||||||
|
# Образ NixOS собирается как qcow2 (см. ./image.nix, make-disk-image.nix) и
|
||||||
|
# заливается как boot disk в YC. НЕ через nixos-anywhere — kexec на YC хрупкий.
|
||||||
|
# См. memory/yandex-nixos-qcow2.md.
|
||||||
|
|
||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./image.nix # YC guest profile + qcow2 build target (заменяет disk-config.nix)
|
||||||
|
./k3s.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
networking = {
|
||||||
|
hostName = "heather";
|
||||||
|
firewall.allowedTCPPorts = [
|
||||||
|
22 # SSH
|
||||||
|
80 # HTTP (Ingress через Traefik)
|
||||||
|
443 # HTTPS (Ingress через Traefik)
|
||||||
|
# 6443 не открываем — kubectl через SSH-туннель
|
||||||
|
];
|
||||||
|
};
|
||||||
|
# useDHCP задаёт ./image.nix (mkDefault) — облачный профиль.
|
||||||
|
|
||||||
|
# SSH ключи для mikl: forgejo .keys endpoint с sha256-pinning.
|
||||||
|
# Poppy-ключ (этот ноутбук) лежит там последней строкой.
|
||||||
|
users.users.mikl.openssh.authorizedKeys.keyFiles = [
|
||||||
|
(pkgs.fetchurl {
|
||||||
|
url = "https://git.iscg.dev/mikl.keys";
|
||||||
|
sha256 = "sha256-Omc/3NJn0nM8SWeF33trFwOAVgSX0fXB5dfEakcRoTA=";
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
|
# После первой установки 25.11 не трогаем (NixOS convention)
|
||||||
|
system.stateVersion = "25.11";
|
||||||
|
}
|
||||||
100
hosts/heather/image.nix
Normal file
100
hosts/heather/image.nix
Normal file
|
|
@ -0,0 +1,100 @@
|
||||||
|
# heather — Yandex Cloud guest profile + qcow2 image build target.
|
||||||
|
#
|
||||||
|
# Образец: nixpkgs/nixos/modules/virtualisation/google-compute-image.nix
|
||||||
|
# (YC compute клонировал GCP API/ABI — virtio, metadata по 169.254.169.254).
|
||||||
|
#
|
||||||
|
# Строитель: nixos/lib/make-disk-image.nix — то, чем nixpkgs собирает ВСЕ
|
||||||
|
# официальные облачные образы (AWS/GCP/Azure/DO/...). Без disko, без nixos-anywhere,
|
||||||
|
# без kexec. partitionTableType = "legacy" → MBR + одна ext4-партиция (label
|
||||||
|
# "nixos"), ровно как реальные YC-образы (insomnia/iscg-dev: /dev/vda1).
|
||||||
|
#
|
||||||
|
# Сборка:
|
||||||
|
# nix build .#nixosConfigurations.heather.config.system.build.image
|
||||||
|
# → result/nixos-image-<label>-x86_64-linux.qcow2
|
||||||
|
# Потом: загрузить в YC Object Storage → yc compute image create → создать ВМ.
|
||||||
|
#
|
||||||
|
# Этот модуль импортируется в default.nix ВСЕГДА — облачный профиль (virtio,
|
||||||
|
# cloud-init, grub, fileSystems) нужен и при nixos-rebuild на живой ВМ, не только
|
||||||
|
# при сборке образа. Цель сборки (system.build.image) при обычном rebuild
|
||||||
|
# ничего не меняет.
|
||||||
|
|
||||||
|
{ config, lib, pkgs, modulesPath, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/profiles/qemu-guest.nix")
|
||||||
|
(modulesPath + "/virtualisation/disk-size-option.nix")
|
||||||
|
(modulesPath + "/image/file-options.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
# --- Диск: одна ext4-партиция на label "nixos", растёт при первом буте ---
|
||||||
|
fileSystems."/" = {
|
||||||
|
fsType = "ext4";
|
||||||
|
device = "/dev/disk/by-label/nixos";
|
||||||
|
autoResize = true;
|
||||||
|
};
|
||||||
|
boot.growPartition = true;
|
||||||
|
|
||||||
|
# --- Загрузка: GRUB в MBR на весь диск (YC = legacy BIOS) ---
|
||||||
|
# make-disk-image внутри build-VM видит диск как /dev/vda и symlink-ает
|
||||||
|
# grub.devices на него. На реальной YC-ВМ virtio-scsi тоже даёт /dev/vda.
|
||||||
|
boot.loader.grub.enable = mkDefault true;
|
||||||
|
boot.loader.grub.device = "/dev/vda";
|
||||||
|
boot.loader.grub.configurationLimit = 1; # только текущее, но механизм выбора есть
|
||||||
|
boot.loader.grub.timeout = 0;
|
||||||
|
boot.loader.systemd-boot.enable = mkForce false;
|
||||||
|
boot.loader.efi.canTouchEfiVariables = mkForce false;
|
||||||
|
|
||||||
|
# --- Ядро: virtio-драйверы для YC.
|
||||||
|
# Большую часть даёт профиль qemu-guest.nix (virtio_net/pci/scsi/blk + balloon/
|
||||||
|
# console/rng/gpu в initrd). Здесь добавляем только то, чего профиль не даёт:
|
||||||
|
# virtio_scsi в initrd.kernelModules (грузить модуль, а не просто available) и
|
||||||
|
# virtio_pci/net в runtime kernelModules для горячих устройств. ---
|
||||||
|
boot.initrd.kernelModules = [ "virtio_scsi" ];
|
||||||
|
boot.kernelModules = [ "virtio_pci" "virtio_net" ];
|
||||||
|
boot.kernelParams = [
|
||||||
|
"console=ttyS0" # serial — для отладки через `yc compute connect-to-serial-port`
|
||||||
|
"panic=1"
|
||||||
|
"boot.panic_on_fail"
|
||||||
|
];
|
||||||
|
|
||||||
|
# --- Сеть: DHCP на eth0, firewall off (полагаемся на YC Security Groups) ---
|
||||||
|
networking.useDHCP = mkDefault true;
|
||||||
|
networking.firewall.enable = mkDefault false;
|
||||||
|
|
||||||
|
# --- SSH: только по ключам ---
|
||||||
|
services.openssh.enable = mkDefault true;
|
||||||
|
services.openssh.settings.PermitRootLogin = mkDefault "prohibit-password";
|
||||||
|
services.openssh.settings.PasswordAuthentication = mkDefault false;
|
||||||
|
|
||||||
|
# --- cloud-init: Ec2 datasource. YC отдаёт metadata по 169.254.169.254
|
||||||
|
# в AWS-совместимом формате. Тогда ssh-keys из metadata сами прилетают в
|
||||||
|
# authorized_keys (как сегодня у insomnia/iscg-dev). ---
|
||||||
|
services.cloud-init.enable = true;
|
||||||
|
services.cloud-init.ext4.enable = true;
|
||||||
|
services.cloud-init.settings = {
|
||||||
|
datasource_list = [ "Ec2" "NoCloud" "None" ];
|
||||||
|
datasource = {
|
||||||
|
Ec2 = {
|
||||||
|
strict_id = false;
|
||||||
|
metadata_urls = [ "http://169.254.169.254" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
ssh_pwauth = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
# --- Цель сборки образа: system.build.image ---
|
||||||
|
image.baseName = "heather";
|
||||||
|
image.extension = "qcow2";
|
||||||
|
system.nixos.tags = [ "yandex-cloud" ];
|
||||||
|
system.build.image = import (modulesPath + "/lib/make-disk-image.nix") {
|
||||||
|
name = "heather-image";
|
||||||
|
inherit (config.image) baseName;
|
||||||
|
partitionTableType = "legacy"; # MBR + single ext4 root
|
||||||
|
format = "qcow2"; # make-disk-image сам конвертит raw→qcow2
|
||||||
|
inherit (config.virtualisation) diskSize;
|
||||||
|
inherit config lib pkgs;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# k3s daemon для muscari (single-node + Cilium CNI)
|
# k3s daemon для heather (single-node + Cilium CNI)
|
||||||
# Traefik и servicelb остаются включены (встроенные в k3s)
|
# Traefik и servicelb остаются включены (встроенные в k3s)
|
||||||
# Cilium ставится отдельно через Helm после старта k3s
|
# Cilium ставится отдельно через Helm после старта k3s
|
||||||
|
|
||||||
|
|
@ -16,15 +16,13 @@
|
||||||
"--service-cidr=10.43.0.0/16"
|
"--service-cidr=10.43.0.0/16"
|
||||||
|
|
||||||
# TLS SANs для kubectl (если подключаемся не только по IP)
|
# TLS SANs для kubectl (если подключаемся не только по IP)
|
||||||
"--tls-san=muscari.iscg.dev"
|
"--tls-san=heather.iscg.dev"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# Firewall: доверяем Cilium veth интерфейсам
|
# Firewall выключен в ./image.nix (полагаемся на YC Security Groups).
|
||||||
networking.firewall = {
|
# Cilium управляет pod-сетью через BPF, локальный iptables-firewall ему
|
||||||
trustedInterfaces = [ "cali+" ];
|
# только мешает — поэтому блок trustedInterfaces/checkReversePath не нужен.
|
||||||
checkReversePath = lib.mkDefault "loose";
|
|
||||||
};
|
|
||||||
|
|
||||||
# k3s-specific пакеты (НЕ в common — только для хостов с k3s)
|
# k3s-specific пакеты (НЕ в common — только для хостов с k3s)
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
|
|
@ -1,49 +0,0 @@
|
||||||
# muscari — k3s single-node cluster на YC (Debian 12 → NixOS 25.11 через nixos-install в tmux)
|
|
||||||
# https://git.iscg.dev/mikl/nix-config
|
|
||||||
#
|
|
||||||
# Этот host перенесён из nix-config-legacy (см. commits в legacy repo).
|
|
||||||
# VM: 158.160.166.30, 2 vCPU / 8 GB / 64 GB SSD (network-ssd), Legacy BIOS
|
|
||||||
|
|
||||||
{ config, pkgs, lib, ... }:
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./disk-config.nix
|
|
||||||
./k3s.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
networking = {
|
|
||||||
hostName = "muscari";
|
|
||||||
useDHCP = true;
|
|
||||||
firewall.allowedTCPPorts = [
|
|
||||||
22 # SSH
|
|
||||||
80 # HTTP (Ingress через Traefik)
|
|
||||||
443 # HTTPS (Ingress через Traefik)
|
|
||||||
# 6443 не открываем — kubectl через SSH-туннель
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
# Bootloader — GRUB (Legacy BIOS mode, см. PREREQUISITES.md check 5+11)
|
|
||||||
boot.loader.grub = {
|
|
||||||
enable = true;
|
|
||||||
device = "/dev/vda";
|
|
||||||
useOSProber = false;
|
|
||||||
};
|
|
||||||
boot.loader.systemd-boot.enable = lib.mkForce false;
|
|
||||||
boot.loader.efi.canTouchEfiVariables = lib.mkForce false;
|
|
||||||
|
|
||||||
# SSH ключи для mikl: forgejo .keys endpoint с sha256-pinning
|
|
||||||
# + hardcoded fallback ключ для восстановления
|
|
||||||
users.users.mikl.openssh.authorizedKeys.keyFiles = [
|
|
||||||
(pkgs.fetchurl {
|
|
||||||
url = "https://git.iscg.dev/mikl.keys";
|
|
||||||
sha256 = "sha256-4n6QLUPozdhHOmsRCuFn7HR9BU3nF0/GR2E7s5Lpz+Q=";
|
|
||||||
})
|
|
||||||
];
|
|
||||||
|
|
||||||
# fileSystems — определяется через disko (см. disk-config.nix)
|
|
||||||
# Не задаём явно fileSystems."/" чтобы не конфликтовать с disko
|
|
||||||
|
|
||||||
# После nixos-install первая установка 25.11,
|
|
||||||
# потом не трогаем (NixOS convention)
|
|
||||||
system.stateVersion = "25.11";
|
|
||||||
}
|
|
||||||
|
|
@ -1,44 +0,0 @@
|
||||||
# disk-config.nix для muscari — Yandex Cloud VM
|
|
||||||
# YC VM из образа Debian 12: один диск /dev/vda (virtio scsi), GPT
|
|
||||||
# Используем disko для переформатирования под NixOS:
|
|
||||||
# - 512M ESP (vfat) для /boot — не используется в BIOS mode (GRUB ставит в MBR),
|
|
||||||
# но если когда-нибудь переключимся на UEFI, раздел будет готов
|
|
||||||
# - остальное → ext4 root
|
|
||||||
#
|
|
||||||
# Bootloader: GRUB (BIOS mode, см. hosts/muscari/default.nix)
|
|
||||||
#
|
|
||||||
# Перенесено из nix-config-legacy (commit 231f9d5 — диск-фикс для disko 1.13+)
|
|
||||||
|
|
||||||
{ lib, ... }:
|
|
||||||
{
|
|
||||||
disko.devices = {
|
|
||||||
disk.disk1 = {
|
|
||||||
device = lib.mkDefault "/dev/vda";
|
|
||||||
type = "disk";
|
|
||||||
content = {
|
|
||||||
type = "gpt";
|
|
||||||
partitions = {
|
|
||||||
ESP = {
|
|
||||||
name = "ESP";
|
|
||||||
size = "512M";
|
|
||||||
type = "EF00";
|
|
||||||
content = {
|
|
||||||
type = "filesystem";
|
|
||||||
format = "vfat";
|
|
||||||
mountpoint = "/boot";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
root = {
|
|
||||||
name = "root";
|
|
||||||
size = "100%"; # disko 1.13+ требует "100%" вместо "100%FREE"
|
|
||||||
content = {
|
|
||||||
type = "filesystem";
|
|
||||||
format = "ext4";
|
|
||||||
mountpoint = "/";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
Loading…
Reference in a new issue