configuration.nix/installer/installer-configuration.nix

139 lines
6.3 KiB
Nix
Raw Permalink Normal View History

2026-09-14 14:21:08 +03:00
{
pkgs,
lib,
config,
...
}:
let
2026-09-14 14:21:08 +03:00
# static server IP address, it must be always online and serve as Yggdrasil peer
# (see config.services.ygggdrasil.settings.peers for details)
# WARN: the peer should NOT connect Yggdrasil worldwide network
# if your PC fleet shouldn't be globally accessible around the world
#
# статический IP адрес сервера, который должен быть всегда онлайн и служить пиром Yggdrasil
# (см. подробности config.services.ygggdrasil.settings.peers)
# ПРЕДУПРЕЖДЕНИЕ: этот пир не должен быть подключен к мировой сети Yggdrasil,
# если конечно вы не хотите чтобы весь компьютерный парк был доступен из любой точки мира
serverIP = "10.0.174.12";
2026-09-14 14:21:08 +03:00
# -------
# Yggdrasil address cache build node. It should use the same NixOS config as others
# It's NOT required to be the same server as ${serverIP} but it also should be always online
# It CAN be a NixOS VM installed on the same server ${serverIP} autostarted
#
# Yggdrasil-адрес кэширующего сервера. На нем должна быть установлена NixOS с той
# же конфигурацией, что и у остальных машин. Не обязательно, чтобы эта машина была той же,
# что сервер ${serverIP}, но она также должна быть онлайн.
# Это может быть виртуальная NixOS-машина, установленная на сервере ${serverIP} в режим автозапуска
buildNodeYggIP = "200:ccc6:1361:5c84:aba0:1244:35f5:c903";
2026-09-14 14:21:08 +03:00
# -------
# here is your configuration repo URL. fork it and change it on your own if you want
#
# здесь требуется указать ваш URL-адрес репозитория с конфигурацией. fork-аете, и меняете на свой
configRepoUrl = "https://forgejo.gregorbednov.ru/gregorbednov/configuration.nix.git";
2026-09-14 14:21:08 +03:00
# -------
# here is some university specifics, apps and resources
# e.g. for MIREA it's wallpaper, university logo, utils to show uuniversity schedule week number and so on
#
# LEGALS: I am NOT a creator on wallpaper.svg,
# I do NOT own wallpaper.svg, this doesn't represent any of my ideas or views,
# that's just a logo (a coat of arms to be precise) of a university,
# and it is in the public domain.
#
# здесь могут быть специфические вузовские данные и ресурсы,
# например, обои, логотип университета, утилита для показа номера недели по расписанию, и так далее
#
# ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ:
# Я не являюсь владельцем файла wallpaper.svg, его добавление не репрезентует моих идей или взглядов,
# это просто логотип (точнее герб) университета, и он является общественным достоянием.
university = import ../mirea-specific/university.nix;
in
{
2026-09-14 14:21:08 +03:00
isoImage.isoName = lib.mkForce university.isoName;
isoImage.squashfsCompression = "zstd -Xcompression-level 6";
services.getty.autologinUser = lib.mkForce "root";
environment.systemPackages = with pkgs; [
parted
gptfdisk
util-linux
dosfstools
e2fsprogs
git
pv
curl
2026-09-14 14:21:08 +03:00
(writeShellScriptBin university.installerBin (
builtins.replaceStrings
2026-09-14 14:21:08 +03:00
[ "@CONFIG_REPO_URL@" "@DISTRO_TITLE@" ]
[ configRepoUrl university.shortName ]
(builtins.readFile ./mirea-install.sh)
))
];
2026-09-14 14:21:08 +03:00
# Yggdrasil-маршрутизация позволяет целевым ПК автоматически получать статический IPv6 даже в сетях DHCP,
# что также запускается на установщике для максимальной гибкости.
# Благодаря Yggdrasil может быть доступно удаленнное управление и локальный кэш сборок
# Yggdrasil routing above network allows any target PC to get automatically static IPv6 even on DHCP,
# so installer is recommended to use Yggdrasil too for maximum scalability
# With Yggdrasil routing it's easy to connect remotely, and you can use
# nix build cache nodes with DHCP-addresses (e.g. other PCs)
services.yggdrasil = {
enable = true;
persistentKeys = false;
settings.Peers = [ "tcp://${serverIP}:12345" ];
};
networking.networkmanager.enable = true;
networking.wireless.enable = lib.mkForce false;
networking.hosts."${buildNodeYggIP}" = [ "nixos.builds.node" ];
nix.settings = {
substituters = [
"http://nixos.builds.node"
"https://cache.nixos.org"
];
trusted-public-keys = [
"nixos.builds.node:E/XNkcdzB0EyTyEJuOTXJH8qynxgCfQ87JHkbD88uF8="
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
];
trusted-substituters = [ "http://nixos.builds.node" ];
connect-timeout = 5;
2026-09-14 14:21:08 +03:00
experimental-features = [
"nix-command"
"flakes"
];
};
systemd.services.nix-daemon = {
after = [ "yggdrasil.service" ];
wants = [ "yggdrasil.service" ];
};
i18n.defaultLocale = "ru_RU.UTF-8";
time.timeZone = "Europe/Moscow";
console.font = "cyr-sun16";
environment.etc."issue".text = ''
┌─────────────────────────────────────────┐
2026-09-14 14:21:08 +03:00
│ Установщик NixOS ${university.shortName}
│ Запустите: ${university.installerBin}
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│ NixOS Installer ${university.shortName}
│ Run: ${university.installerBin}
└─────────────────────────────────────────┘
'';
system.stateVersion = "24.11";
}