2026-09-14 14:21:08 +03:00
|
|
|
|
{
|
|
|
|
|
|
pkgs,
|
|
|
|
|
|
lib,
|
|
|
|
|
|
config,
|
|
|
|
|
|
...
|
|
|
|
|
|
}:
|
|
|
|
|
|
|
2026-08-19 11:53:33 +03:00
|
|
|
|
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,
|
|
|
|
|
|
# если конечно вы не хотите чтобы весь компьютерный парк был доступен из любой точки мира
|
2026-08-19 11:53:33 +03:00
|
|
|
|
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} в режим автозапуска
|
|
|
|
|
|
|
2026-08-19 11:53:33 +03:00
|
|
|
|
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-аете, и меняете на свой
|
|
|
|
|
|
|
2026-08-19 11:53:33 +03:00
|
|
|
|
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;
|
|
|
|
|
|
|
2026-08-19 11:53:33 +03:00
|
|
|
|
in
|
|
|
|
|
|
{
|
2026-09-14 14:21:08 +03:00
|
|
|
|
isoImage.isoName = lib.mkForce university.isoName;
|
2026-08-19 11:53:33 +03:00
|
|
|
|
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 (
|
2026-08-19 11:53:33 +03:00
|
|
|
|
builtins.replaceStrings
|
2026-09-14 14:21:08 +03:00
|
|
|
|
[ "@CONFIG_REPO_URL@" "@DISTRO_TITLE@" ]
|
|
|
|
|
|
[ configRepoUrl university.shortName ]
|
2026-08-19 11:53:33 +03:00
|
|
|
|
(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)
|
2026-08-19 11:53:33 +03:00
|
|
|
|
services.yggdrasil = {
|
|
|
|
|
|
enable = true;
|
|
|
|
|
|
persistentKeys = false;
|
|
|
|
|
|
settings.Peers = [ "tcp://${serverIP}:12345" ];
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
networking.networkmanager.enable = true;
|
2026-08-19 12:00:44 +03:00
|
|
|
|
networking.wireless.enable = lib.mkForce false;
|
2026-08-19 11:53:33 +03:00
|
|
|
|
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"
|
|
|
|
|
|
];
|
2026-08-19 11:53:33 +03:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
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}
|
2026-08-19 11:53:33 +03:00
|
|
|
|
└─────────────────────────────────────────┘
|
|
|
|
|
|
'';
|
|
|
|
|
|
|
|
|
|
|
|
system.stateVersion = "24.11";
|
|
|
|
|
|
}
|