From c4a72e89446282191ca365de9f37e11d37f6c427 Mon Sep 17 00:00:00 2001 From: Gregory Bednov Date: Sat, 23 Aug 2025 18:07:01 +0300 Subject: [PATCH] =?UTF-8?q?=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE:=20=20=20=20=20=20configuration.nix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- configuration.nix | 382 ++++++++++++++++++++-------------------------- 1 file changed, 165 insertions(+), 217 deletions(-) diff --git a/configuration.nix b/configuration.nix index 0fc95d6..a5edc00 100644 --- a/configuration.nix +++ b/configuration.nix @@ -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 < $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"; } +