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

This commit is contained in:
Gregory Bednov 2025-08-23 18:07:01 +03:00
commit c4a72e8944

View file

@ -11,17 +11,15 @@
let
serverIP = "10.0.174.12";
hasBootPartition = config.fileSystems ? "/boot";
isNvidia = (builtins.readFile (pkgs.runCommandLocal "isNvidia" {} ''
${pkgs.pciutils}/bin/lspci | ${pkgs.busybox}/bin/grep NVIDIA | ${pkgs.busybox}/bin/grep VGA > $out
'')) != "";
in
{
users.users.student = {
isNormalUser = true;
initialPassword = "student"; # вход беспарольный, но пароль student
extraGroups = [
"video"
"sound"
"input"
"storage"
];
extraGroups = [ "video" "sound" "input" "storage" ];
packages =
let
# определение как скачивать плагины jetbrains (скачивать с нашего сервера копию)
@ -66,7 +64,8 @@ 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=")
@ -78,18 +77,13 @@ in
))
chromium # браузер
pinta # графический редактор
sakura # терминал
pinta # графический редактор
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
))
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))
pandoc
#onlyoffice-desktopeditors # к сожалению, пока у OnlyOffice баг со шрифтами. Ждём фикс
@ -127,8 +121,7 @@ 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#
@ -142,36 +135,9 @@ in
# аналог Bizagi Modeler, расширенный вариант bpmn.io
camunda-modeler
# StarUML
# staruml
# записано через mkDerivation, чтобы был вечный evalution mode
# графическое моделирование UML-диаграмм
# также доступно моделирование BPMN и ER
(pkgs.stdenv.mkDerivation rec {
pname = "staruml";
version = "6.2.2";
src = ./.;
nativeBuildInputs = [ pkgs.staruml ];
dontBuild = true;
installPhase = ''
mkdir -p $out/bin
cat <<EOF > $out/bin/staruml
rm -rf /home/student/.config/StarUML;
${pkgs.staruml}/bin/StarUML
EOF
chmod +x $out/bin/staruml
'';
desktopItem = pkgs.makeDesktopItem {
name = "staruml";
exec = "staruml";
desktopName = "StarUML";
categories = [ "Database" ];
icon = "staruml";
terminal = false;
startupNotify = false;
mimeTypes = [ "x-scheme-handler/mdj" ];
};
})
staruml
# Язык текстового описания UML-диаграмм
# актуально для разработчиков ПО (встраивание диаграмм в код)
@ -180,6 +146,7 @@ chmod +x $out/bin/staruml
archi # поддержка archimate
##### Утилиты и программы для STM32 #####
# 1) STM32CubeIDE упаковать не удалось
# 2) есть основания полагать, что её функциональность лучше встроить
@ -192,126 +159,123 @@ chmod +x $out/bin/staruml
##### СЕТЕВЫЕ УТИЛИТЫ ######
# установлен Cisco Packet Tracer, обернут в firejail чтобы не стучался на Netacad.com
nodePackages.node-red # - лоукод-платформа программирования устройств, в частности интернета вещей
httpie
httpie-desktop # - передовой клиент HTTP-запросов
netcat
socat # - низкоуровневые простейшие утилиты установления TCP или UDP между компьютерами или с ПЛК
opcua-client-gui # - простой графический клиент OPC UA
nodePackages.node-red # - лоукод-платформа программирования устройств, в частности интернета вещей
httpie httpie-desktop # - передовой клиент HTTP-запросов
netcat socat # - низкоуровневые простейшие утилиты установления TCP или UDP между компьютерами или с ПЛК
opcua-client-gui # - простой графический клиент OPC UA
###### Другой софт #######
logisim-evolution
unityhub # UnityHub - 3D-моделирование, визуализация, геймдев, AR/VR
(pkgs.stdenv.mkDerivation rec {
pname = "cnc_vmc_sim";
version = "1.0.0-share";
src = builtins.fetchTarball {
url = "http://${serverIP}/linux_cnc_vmc_share.tar.xz";
sha256 = "sha256:1hjkm2wq6dfmddb2van1q8hdvf41bp4snslcbkj0b1myi3zpi1md";
};
pname = "cnc_vmc_sim";
version = "1.0.0-share";
src = builtins.fetchTarball {
url = "http://${serverIP}/linux_cnc_vmc_share.tar.xz";
sha256 = "sha256:1hjkm2wq6dfmddb2van1q8hdvf41bp4snslcbkj0b1myi3zpi1md";
};
installPhase = ''
runHook preInstall
mkdir -p $out/bin
mkdir -p $out/share/applications
mkdir -p $out/share/icons
cp ${src}/icon.png $out/share/icons/${pname}.png
cp ${fhsEnv}/bin/${pname}-fhs $out/bin/${pname}
cp ${desktopItem}/share/applications/*.desktop $out/share/applications
'';
installPhase = ''
runHook preInstall
mkdir -p $out/bin
mkdir -p $out/share/applications
mkdir -p $out/share/icons
cp ${src}/icon.png $out/share/icons/${pname}.png
cp ${fhsEnv}/bin/${pname}-fhs $out/bin/${pname}
cp ${desktopItem}/share/applications/*.desktop $out/share/applications
'';
fhsEnv = pkgs.buildFHSEnv {
name = "${pname}-fhs";
targetPkgs =
p: with p; [
eudev.out
libGL.out
openal.out
xorg.libX11.out
];
runScript = "${src}/${pname}";
};
fhsEnv = pkgs.buildFHSEnv {
name = "${pname}-fhs";
targetPkgs = p: with p; [
eudev.out
libGL.out
openal.out
xorg.libX11.out
];
runScript = "${src}/${pname}";
};
desktopItem = pkgs.makeDesktopItem {
name = "CNC VMC (free)";
exec = "${pname}";
desktopName = "CNC VMC (free)";
categories = [ "Development" ];
icon = "${pname}";
terminal = false;
startupNotify = false;
};
})
(pkgs.stdenv.mkDerivation rec {
pname = "ramus";
version = "0.1.3";
src = builtins.fetchTarball {
url = "http://${serverIP}/ramus.tar.xz";
sha256 = "sha256:1a9fha7zwyyag0q4glk58pzigqdczshxpnax7cdzg1bry4aw6f9d";
};
installPhase = ''
sed -e "s~ramus.ico~$out/share/icons/ramus.ico~; s~Other~Database~" -i share/applications/ramus.desktop
mkdir $out
cp -r share bin lib $out
echo "JDK_JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel' ${pkgs.jre8}/bin/java -jar $out/bin/ramus-startup.jar" > $out/bin/ramus
chmod +x $out/bin/ramus
'';
})
desktopItem = pkgs.makeDesktopItem {
name = "CNC VMC (free)";
exec = "${pname}";
desktopName = "CNC VMC (free)";
categories = [ "Development" ];
icon = "${pname}";
terminal = false;
startupNotify = false;
};
})
(pkgs.stdenv.mkDerivation rec {
pname = "ramus";
version = "0.1.3";
src = builtins.fetchTarball {
url = "http://${serverIP}/ramus.tar.xz";
sha256 = "sha256:1a9fha7zwyyag0q4glk58pzigqdczshxpnax7cdzg1bry4aw6f9d";
};
installPhase = ''
sed -e "s~ramus.ico~$out/share/icons/ramus.ico~; s~Other~Database~" -i share/applications/ramus.desktop
mkdir $out
cp -r share bin lib $out
echo "JDK_JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel' ${pkgs.jre8}/bin/java -jar $out/bin/ramus-startup.jar" > $out/bin/ramus
chmod +x $out/bin/ramus
'';
})
# поставка SimInTech. Кодогенерация библиотек для ПК работает,
# но несовместима с .dll из windows!
#simintech.packages.x86_64-linux.simintech
(pkgs.stdenv.mkDerivation rec {
pname = "simintech";
version = "2.23.13";
src = builtins.fetchTarball {
url = "http://kafpi.local/simintech_rus_linux.tgz";
sha256 = "sha256:1i9plx6vx6jm38bx4kbh4piak5jwrpc4hxxjd3b89zyng1g4abvs";
};
dontFixLibtool = true;
pname = "simintech";
version = "2.23.13";
src = builtins.fetchTarball {
url = "http://kafpi.local/simintech_rus_linux.tgz";
sha256 = "sha256:1i9plx6vx6jm38bx4kbh4piak5jwrpc4hxxjd3b89zyng1g4abvs";
};
dontFixLibtool = true;
fhsEnv = pkgs.buildFHSEnv {
name = "${pname}-fhs-env";
targetPkgs =
p: with p; [
at-spi2-atk.out
gdk-pixbuf.out
glamoroustoolkit.out
glib.out
gtk2.out
libGL.out
libGLU.out
pango.out
xorg.libX11.out
zlib.out
(pkgs.writeShellScriptBin "firefox" "exec ${pkgs.chromium}/bin/chromium \"$@\"") # похоже, что SimInTech захардкодил Firefox, но не все так юзают Firefox
];
runScript = "${src}/bin/mmain";
};
fhsEnv = pkgs.buildFHSEnv {
name = "${pname}-fhs-env";
targetPkgs = p: with p; [
at-spi2-atk.out
gdk-pixbuf.out
glamoroustoolkit.out
glib.out
gtk2.out
libGL.out
libGLU.out
pango.out
xorg.libX11.out
zlib.out
(pkgs.writeShellScriptBin "firefox" "exec ${pkgs.chromium}/bin/chromium \"$@\"") # похоже, что SimInTech захардкодил Firefox, но не все так юзают Firefox
];
runScript = "${src}/bin/mmain";
};
desktopItem = pkgs.makeDesktopItem {
name = "SimInTech";
exec = "simintech";
desktopName = "SimInTech";
categories = [ "Development" ];
icon = "simintech";
terminal = false;
startupNotify = false;
mimeTypes = [ "x-scheme-handler/prt" ];
};
desktopItem = pkgs.makeDesktopItem {
name = "SimInTech";
exec = "simintech";
desktopName = "SimInTech";
categories = [ "Development" ];
icon = "simintech";
terminal = false;
startupNotify = false;
mimeTypes = [ "x-scheme-handler/prt" ];
};
installPhase = ''
runHook preInstall
mkdir -p $out/bin
mkdir -p $out/share/applications
mkdir -p $out/share/icons
#cp ${src}/share/icon.svg $out/share/icons/simintech.svg
cp ${fhsEnv}/bin/${pname}-fhs-env $out/bin/simintech
cp ${desktopItem}/share/applications/*.desktop $out/share/applications
runHook postInstall
'';
})
installPhase = ''
runHook preInstall
mkdir -p $out/bin
mkdir -p $out/share/applications
mkdir -p $out/share/icons
#cp ${src}/share/icon.svg $out/share/icons/simintech.svg
cp ${fhsEnv}/bin/${pname}-fhs-env $out/bin/simintech
cp ${desktopItem}/share/applications/*.desktop $out/share/applications
runHook postInstall
'';
})
# POSIX утилиты для совместимости
om4
@ -346,9 +310,9 @@ chmod +x $out/bin/staruml
services.postgresql = {
enable = true;
authentication = pkgs.lib.mkOverride 10 ''
#type database DBuser auth-method
local all all trust
'';
#type database DBuser auth-method
local all all trust
'';
};
# и оба поддерживают вход без пароля в "руты"
@ -377,34 +341,24 @@ chmod +x $out/bin/staruml
# если машина установлена на диск с Windows,
# то она позволяет "увидеть" и выбрать Windows в течение 30 с
# иначе - 5 c таймаута (для виртуалок)
boot.loader =
if hasBootPartition then
{
efi.canTouchEfiVariables = true;
timeout = 30;
grub = {
enable = true;
efiSupport = true;
device = "nodev";
useOSProber = true;
theme = "${pkgs.sleek-grub-theme.override {
withStyle = "orange";
withBanner = "Выберите ОС";
}}";
};
}
else
{
timeout = 5;
grub = {
enable = true;
device = "/dev/sda";
theme = "${pkgs.sleek-grub-theme.override {
withStyle = "orange";
withBanner = "Загрузчик Linux";
}}";
};
};
boot.loader = if hasBootPartition then {
efi.canTouchEfiVariables = true;
timeout = 30;
grub = {
enable = true;
efiSupport = true;
device = "nodev";
useOSProber = true;
theme = "${pkgs.sleek-grub-theme.override{ withStyle = "orange"; withBanner = "Выберите ОС"; }}";
};
} else {
timeout = 5;
grub = {
enable = true;
device = "/dev/sda";
theme = "${pkgs.sleek-grub-theme.override{ withStyle = "orange"; withBanner = "Загрузчик Linux"; }}";
};
};
time.hardwareClockInLocalTime = hasBootPartition;
# настройки Nix
@ -414,9 +368,9 @@ chmod +x $out/bin/staruml
};
nix.settings = {
substituters = [
"https://cache.nixos.org"
"https://cache.nixos.org"
];
trusted-public-keys = [ "kafpi.local:PttR9S1eDyint3v0LCp5zfBGG+xfxzQ+cxKAQARNpyw=" ];
trusted-public-keys = ["kafpi.local:PttR9S1eDyint3v0LCp5zfBGG+xfxzQ+cxKAQARNpyw="];
auto-optimise-store = true;
};
nix.extraOptions = ''
@ -426,35 +380,37 @@ chmod +x $out/bin/staruml
##### НАСТРОЙКИ ГРАФИКИ И РАБОЧЕГО СТОЛА ######
hardware.graphics = {
enable = true;
enable32Bit = true;
extraPackages = with pkgs; [ nvidia-vaapi-driver ];
#enable32Bit = true;
extraPackages = if isNvidia then with pkgs; [ nvidia-vaapi-driver vaapiVdpau libvdpau-va-gl] else [];
};
services.xserver = {
enable = true;
videoDrivers = [
"nvidia"
"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.legacy_470;
package = config.boot.kernelPackages.nvidiaPackages.stable;
modesetting.enable = true;
powerManagement.enable = true;
open = false;
nvidiaSettings = false;
};
boot.blacklistedKernelModules = [ "nouveau" ];
boot.extraModprobeConfig =
"options nvidia "
+ lib.concatStringsSep " " [
"NVreg_UsePageAttributeTable=1"
"NVreg_EnablePCIeGen3=1"
"NVreg_RegistryDwords=RMUseSwI2c=0x01;RMI2cSpeed=100"
];
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 " " [
"NVreg_UsePageAttributeTable=1"
"NVreg_EnablePCIeGen3=1"
"NVreg_RegistryDwords=RMUseSwI2c=0x01;RMI2cSpeed=100"
] else "";
services.displayManager.autoLogin.user = "student";
services.getty.autologinUser = "student";
@ -485,15 +441,11 @@ chmod +x $out/bin/staruml
##### СЕТЕВЫЕ НАСТРОЙКИ #######
# каждый компьютер виден под уникальным именем через Avahi
services.avahi = {
hostName =
"nixos"
+ builtins.readFile (
(pkgs.runCommandLocal "uuid" { } ''
mkdir $out
cat /proc/sys/kernel/random/uuid > $out/uuid
'')
+ "/uuid"
);
hostName = "nixos"
+ builtins.readFile ((pkgs.runCommandLocal "uuid" {} ''
mkdir $out
cat /proc/sys/kernel/random/uuid > $out/uuid
'')+"/uuid");
enable = true;
nssmdns4 = true;
openFirewall = true;
@ -515,10 +467,7 @@ chmod +x $out/bin/staruml
networking.nameservers = [ serverIP ];
# каждый компьютер знает, что kafpi.local - это адрес нашего сервера
networking.hosts."${serverIP}" = [
"kafpi.local"
"hydra.kafpi.local"
];
networking.hosts."${serverIP}" = [ "kafpi.local" "hydra.kafpi.local" ];
#security.pki.certificateFiles = [
# (builtins.fetchurl {
# url = "http://${serverIP}/server.crt";
@ -550,6 +499,7 @@ chmod +x $out/bin/staruml
liberation_ttf
];
####### ПРОЧИЕ НАСТРОЙКИ #######
environment.systemPackages = with pkgs; [
vim
@ -571,10 +521,7 @@ chmod +x $out/bin/staruml
wrappedBinaries = {
packettracer7 = {
executable = "${packettracer7.packages.x86_64-linux.default}/bin/packettracer7";
extraArgs = [
"--net=none"
"--noprofile"
];
extraArgs = [ "--net=none" "--noprofile" ];
};
};
};
@ -598,3 +545,4 @@ chmod +x $out/bin/staruml
# НЕ МЕНЯТЬ, иначе придётся все компы переустанавливать, а не обновлять
system.stateVersion = "24.05";
}