изменено: configuration.nix

This commit is contained in:
Gregory Bednov 2026-01-26 18:28:03 +03:00
commit 9b11843fe2

View file

@ -10,19 +10,21 @@
}:
let
serverIP = "10.0.174.12";
buildNodeYggIP = "[200:ccc6:1361:5c84:aba0:1244:35f5:c903]";
buildNodeYggIP = "200:ccc6:1361:5c84:aba0:1244:35f5:c903";
hasBootPartition = config.fileSystems ? "/boot";
isNvidia = (builtins.readFile (pkgs.runCommandLocal "isNvidia" {} ''
isNvidia =
(builtins.readFile (
pkgs.runCommandLocal "isNvidia" { } ''
${pkgs.pciutils}/bin/lspci | ${pkgs.busybox}/bin/grep NVIDIA | ${pkgs.busybox}/bin/grep VGA > $out || true
'')) != "";
starumlDebUrl = "http://${serverIP}/StarUML_6.2.2_amd64.deb"; # подставь точное имя
''
)) != "";
in
{
nixpkgs.overlays = [
(final: prev: {
staruml = prev.staruml.overrideAttrs (old: {
src = final.fetchurl {
url = starumlDebUrl;
url = "http://${serverIP}/StarUML_6.2.2_amd64.deb";
hash = "sha256-1zxrT7phXeQYNbWHWMyPuHiUglrPSMPP0bfAcfvt8dM=";
};
});
@ -31,7 +33,12 @@ in
users.users.student = {
isNormalUser = true;
initialPassword = "student"; # вход беспарольный, но пароль student
extraGroups = [ "video" "sound" "input" "storage" ];
extraGroups = [
"video"
"sound"
"input"
"storage"
];
packages =
let
# определение как скачивать плагины jetbrains (скачивать с нашего сервера копию)
@ -75,8 +82,7 @@ in
idea-community."2024.1"."R4Intellij"
idea-community."2024.1"."com.redhat.devtools.lsp4ij"
])
++
[
++ [
# поддежка языка C/C++ на уровне подсветки синтаксиса и автодополнения
(customJBPlugin "clsp" "1.0.1" "sha256-AU/Q61YYsGn2BAYykCGm4XGNyeSwd5K/txGNzP2dJg0=")
@ -92,9 +98,14 @@ in
sakura # терминал
unzipNLS # поддержка zip
unrar # поддержка rar
gtk3 whitesur-icon-theme # необходимо для иконок
(pkgs.writeShellScriptBin "powermenu" (builtins.readFile inputs.mireadesktop.packages.x86_64-linux.powermenu))
(pkgs.writeShellScriptBin "resethome" (builtins.readFile inputs.mireadesktop.packages.x86_64-linux.resethome))
gtk3
whitesur-icon-theme # необходимо для иконок
(pkgs.writeShellScriptBin "powermenu" (
builtins.readFile inputs.mireadesktop.packages.x86_64-linux.powermenu
))
(pkgs.writeShellScriptBin "resethome" (
builtins.readFile inputs.mireadesktop.packages.x86_64-linux.resethome
))
pandoc
#onlyoffice-desktopeditors # к сожалению, пока у OnlyOffice баг со шрифтами. Ждём фикс
@ -132,7 +143,8 @@ in
# Другие возможные языки и инструменты, например:
# rustc # - Rust
# go gopls delve golint go-tools # - Go
jdk kotlin # - Java, Kotlin (идут вместе с IJ IDEA)
jdk
kotlin # - Java, Kotlin (идут вместе с IJ IDEA)
# ghc haskell-language-server # - Haskell
# nodePackages.intelephense # - PHP
# dotnet-sdk # - C#
@ -148,7 +160,20 @@ in
# графическое моделирование UML-диаграмм
# также доступно моделирование BPMN и ER
staruml
(staruml.overrideAttrs (oldAttrs: {
nativeBuildInputs = (oldAttrs.nativeBuildInputs or [ ]) ++ [ pkgs.makeWrapper ];
postFixup =
(oldAttrs.postFixup or "")
+ ''
# Rename the original binary
mv $out/bin/staruml $out/bin/.staruml-org
# Create the wrapper script
makeWrapper ${pkgs.bash}/bin/bash $out/bin/staruml \
--add-flags "-c 'rm -rf \$HOME/.config/StarUML && exec $out/bin/.staruml-org \"\$@\"'"
'';
}))
# Язык текстового описания UML-диаграмм
# актуально для разработчиков ПО (встраивание диаграмм в код)
@ -157,7 +182,6 @@ in
archi # поддержка archimate
##### Утилиты и программы для STM32 #####
# 1) STM32CubeIDE упаковать не удалось
# 2) есть основания полагать, что её функциональность лучше встроить
@ -169,8 +193,10 @@ in
##### СЕТЕВЫЕ УТИЛИТЫ ######
# установлен Cisco Packet Tracer, обернут в firejail чтобы не стучался на Netacad.com
nodePackages.node-red # - лоукод-платформа программирования устройств, в частности интернета вещей
httpie httpie-desktop # - передовой клиент HTTP-запросов
netcat socat # - низкоуровневые простейшие утилиты установления TCP или UDP между компьютерами или с ПЛК
httpie
httpie-desktop # - передовой клиент HTTP-запросов
netcat
socat # - низкоуровневые простейшие утилиты установления TCP или UDP между компьютерами или с ПЛК
opcua-client-gui # - простой графический клиент OPC UA
###### Другой софт #######
@ -192,7 +218,9 @@ in
pkgs.bubblewrap
];
buildInputs = (with pkgs; [
buildInputs = (
with pkgs;
[
dotnet-runtime
gtk3
glib
@ -202,13 +230,15 @@ in
atk
fontconfig
freetype
] ++ (with pkgs.xorg; [
]
++ (with pkgs.xorg; [
libX11
libXcursor
libXrandr
libXinerama
libXi
]));
])
);
unpackPhase = ''
dpkg-deb -x $src .
@ -306,7 +336,8 @@ EOF
fhsEnv = pkgs.buildFHSEnv {
name = "${pname}-fhs";
targetPkgs = p: with p; [
targetPkgs =
p: with p; [
eudev.out
libGL.out
openal.out
@ -341,7 +372,6 @@ EOF
'';
})
# поставка SimInTech. Кодогенерация библиотек для ПК работает,
# но несовместима с .dll из windows!
#simintech.packages.x86_64-linux.simintech
@ -356,7 +386,8 @@ EOF
fhsEnv = pkgs.buildFHSEnv {
name = "${pname}-fhs-env";
targetPkgs = p: with p; [
targetPkgs =
p: with p; [
at-spi2-atk.out
gdk-pixbuf.out
glamoroustoolkit.out
@ -401,7 +432,9 @@ EOF
(pkgs.writeShellScriptBin "g++" ''${pkgs.clang}/bin/clang++ "$@"'')
(vscode-with-extensions.override {
vscodeExtensions = with vscode-extensions; [
vscodeExtensions =
with vscode-extensions;
[
ms-vscode.cpptools-extension-pack
zainchen.json
ms-dotnettools.csharp
@ -414,7 +447,8 @@ EOF
ms-toolsai.vscode-jupyter-cell-tags
ms-vscode-remote.remote-ssh
timonwong.shellcheck
] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
]
++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
{
name = "better-cpp-syntax";
publisher = "jeff-hykin";
@ -514,7 +548,9 @@ EOF
# если машина установлена на диск с Windows,
# то она позволяет "увидеть" и выбрать Windows в течение 30 с
# иначе - 5 c таймаута (для виртуалок)
boot.loader = if hasBootPartition then {
boot.loader =
if hasBootPartition then
{
efi.canTouchEfiVariables = true;
timeout = 30;
grub = {
@ -522,14 +558,22 @@ EOF
efiSupport = true;
device = "nodev";
useOSProber = true;
theme = "${pkgs.sleek-grub-theme.override{ withStyle = "orange"; withBanner = "Выберите ОС"; }}";
theme = "${pkgs.sleek-grub-theme.override {
withStyle = "orange";
withBanner = "Выберите ОС";
}}";
};
} else {
}
else
{
timeout = 5;
grub = {
enable = true;
device = "/dev/sda";
theme = "${pkgs.sleek-grub-theme.override{ withStyle = "orange"; withBanner = "Загрузчик Linux"; }}";
theme = "${pkgs.sleek-grub-theme.override {
withStyle = "orange";
withBanner = "Загрузчик Linux";
}}";
};
};
time.hardwareClockInLocalTime = hasBootPartition;
@ -540,9 +584,8 @@ EOF
nvidia.acceptLicense = true;
};
nix.settings = {
substituters = if config.services.harmonia.enable then [
"https://cache.nixos.org"
] else [ "https://cache.nixos.org" "http://${buildNodeYggIP}:5000" ];
extra-substituters = [ "http://nixos.builds.node" ];
trusted-public-keys = [ "nixos.builds.node:E/XNkcdzB0EyTyEJuOTXJH8qynxgCfQ87JHkbD88uF8=" ];
auto-optimise-store = true;
};
nix.extraOptions = ''
@ -553,22 +596,31 @@ EOF
hardware.graphics = {
enable = true;
#enable32Bit = true;
extraPackages = if isNvidia then with pkgs; [ nvidia-vaapi-driver vaapiVdpau libvdpau-va-gl] else [];
extraPackages =
if isNvidia then
with pkgs;
[
nvidia-vaapi-driver
vaapiVdpau
libvdpau-va-gl
]
else
[ ];
};
services.xserver = {
enable = true;
videoDrivers = if isNvidia then [ "nvidia" ] else [ "modesetting" "fbdev" ];
videoDrivers =
if isNvidia then
[ "nvidia" ]
else
[
"modesetting"
"fbdev"
];
xkb.layout = "us,ru";
xkb.options = "grp:alt_shift_toggle";
};
hardware.enableAllFirmware = true;
#hardware.nvidia = {
# package = config.boot.kernelPackages.nvidiaPackages.legacy_470;
# modesetting.enable = true;
# powerManagement.enable = true;
# open = false;
# nvidiaSettings = false;
#};
hardware.nvidia = {
package = config.boot.kernelPackages.nvidiaPackages.stable;
modesetting.enable = true;
@ -578,11 +630,16 @@ EOF
};
boot.kernelParams = if isNvidia then [ "nvidia-drm.modeset=1" ] else [ ];
boot.blacklistedKernelModules = if isNvidia then [ "nouveau" ] else [ ];
boot.extraModprobeConfig = if isNvidia then "options nvidia " + lib.concatStringsSep " " [
boot.extraModprobeConfig =
if isNvidia then
"options nvidia "
+ lib.concatStringsSep " " [
"NVreg_UsePageAttributeTable=1"
"NVreg_EnablePCIeGen3=1"
"NVreg_RegistryDwords=RMUseSwI2c=0x01;RMI2cSpeed=100"
] else "";
]
else
"";
services.displayManager.autoLogin.user = "student";
services.getty.autologinUser = "student";
@ -614,7 +671,9 @@ EOF
services.yggdrasil = {
enable = true;
persistentKeys = true;
settings = { Peers = [ "tcp://${serverIP}:12345" ]; };
settings = {
Peers = [ "tcp://${serverIP}:12345" ];
};
};
# каждый компьютер имеет выход в интернет
@ -624,17 +683,7 @@ EOF
# каждый компьютер знает, что kafpi.local - это адрес нашего сервера
networking.hosts."${serverIP}" = [ "kafpi.local" ];
networking.hosts."${buildNodeYggIP}" = [ "nixos-builds-node" ];
#security.pki.certificateFiles = [
# (builtins.fetchurl {
# url = "http://${serverIP}/server.crt";
# sha256 = "sha256:0qx4acdhiciffvk1l7wkxyzapjwjy9zisq0mwyl727x97zrmi5ds";
# })
# (builtins.fetchurl {
# url = "http://${serverIP}/hydra.crt";
# sha256 = "sha256:1l5cvsikb5dnf49ajjjmz50avfkxm28jy65vnb9xidlv5vapi1zp";
# })
#];
networking.hosts."${buildNodeYggIP}" = [ "nixos.builds.node" ];
#### ЛОКАЛИЗАЦИЯ #####
@ -656,7 +705,6 @@ EOF
liberation_ttf
];
####### ПРОЧИЕ НАСТРОЙКИ #######
environment.systemPackages = with pkgs; [
vim
@ -678,7 +726,10 @@ EOF
wrappedBinaries = {
packettracer7 = {
executable = "${packettracer7.packages.x86_64-linux.default}/bin/packettracer7";
extraArgs = [ "--net=none" "--noprofile" ];
extraArgs = [
"--net=none"
"--noprofile"
];
};
};
};
@ -693,4 +744,3 @@ EOF
# НЕ МЕНЯТЬ, иначе придётся все компы переустанавливать, а не обновлять
system.stateVersion = "24.05";
}