diff --git a/configuration.nix b/configuration.nix index f9ef9ce..4f330c0 100644 --- a/configuration.nix +++ b/configuration.nix @@ -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=") @@ -88,13 +94,18 @@ 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 баг со шрифтами. Ждём фикс @@ -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) есть основания полагать, что её функциональность лучше встроить @@ -168,267 +192,277 @@ in ##### СЕТЕВЫЕ УТИЛИТЫ ###### # установлен 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 = "dwsim"; - version = "9.0.5"; - - src = pkgs.fetchurl { - url = "http://${serverIP}/dwsim_9.0.5-amd64.deb"; - sha256 = "sha256:0352mxz9czfh52z4lf7njlyqvikvbh2bgs2h4zi2dsjrssql3h2j"; - }; - - nativeBuildInputs = [ - pkgs.dpkg - pkgs.makeWrapper - pkgs.bubblewrap - ]; - - buildInputs = (with pkgs; [ - dotnet-runtime - gtk3 - glib - pango - cairo - gdk-pixbuf - atk - fontconfig - freetype - ] ++ (with pkgs.xorg; [ - libX11 - libXcursor - libXrandr - libXinerama - libXi - ])); - - unpackPhase = '' - dpkg-deb -x $src . - ''; - - installPhase = '' - mkdir -p $out/lib/dwsim - mkdir -p $out/bin - - cp -r usr/local/lib/dwsim/* $out/lib/dwsim/ - mkdir -p $out/share/icons/hicolor/256x256/apps - cp $out/lib/dwsim/bitmaps/DWSIM_ico.png \ - $out/share/icons/hicolor/256x256/apps/dwsim.png - mkdir -p "$out/lib/dwsim/DWSIM Application Data" - - cat > $out/bin/dwsim << 'EOF' -#!/bin/sh -set -e - - -APPDIR="@out@/lib/dwsim" -APPDATA="$HOME/.local/share/dwsim-appdata" - -mkdir -p "$APPDATA" - -# LD_LIBRARY_PATH для GtkSharp -export LD_LIBRARY_PATH="@gtk3@/lib:@glib@/lib:@pango@/lib:@cairo@/lib:@gdk-pixbuf@/lib:@atk@/lib:@fontconfig@/lib:@freetype@/lib:$LD_LIBRARY_PATH" - -export DISPLAY="$DISPLAY" - -exec @bwrap@ \ - --bind "@out@" "@out@" \ - --bind "$APPDATA" "$APPDIR/DWSIM Application Data" \ - --ro-bind /nix /nix \ - --ro-bind "$XAUTHORITY" "$HOME/.Xauthority" \ - --setenv XAUTHORITY "$HOME/.Xauthority" \ - --dev /dev \ - --proc /proc \ - --bind /tmp/.X11-unix /tmp/.X11-unix \ - --setenv DISPLAY $DISPLAY \ - --chdir "$APPDIR" \ - @dotnet@ "$APPDIR/DWSIM.UI.Desktop.exe" "$@" -EOF - - substituteInPlace $out/bin/dwsim \ - --subst-var out \ - --subst-var-by bwrap ${pkgs.bubblewrap}/bin/bwrap \ - --subst-var-by dotnet ${pkgs.dotnet-runtime}/bin/dotnet \ - --subst-var-by gtk3 ${pkgs.gtk3} \ - --subst-var-by glib ${pkgs.glib} \ - --subst-var-by pango ${pkgs.pango} \ - --subst-var-by cairo ${pkgs.cairo} \ - --subst-var-by gdk-pixbuf ${pkgs.gdk-pixbuf} \ - --subst-var-by atk ${pkgs.atk} \ - --subst-var-by fontconfig ${pkgs.fontconfig} \ - --subst-var-by freetype ${pkgs.freetype} - - chmod +x $out/bin/dwsim - -mkdir -p $out/share/applications - -cat > $out/share/applications/dwsim.desktop << EOF -[Desktop Entry] -Type=Application -Name=DWSIM -GenericName=Process Simulator -Comment=Chemical Process Simulation Environment -Exec=dwsim -Icon=dwsim -Terminal=false -Categories=Development -StartupWMClass=DWSIM -EOF - - - ''; -}) (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 = "dwsim"; + version = "9.0.5"; - 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 - ''; + src = pkgs.fetchurl { + url = "http://${serverIP}/dwsim_9.0.5-amd64.deb"; + sha256 = "sha256:0352mxz9czfh52z4lf7njlyqvikvbh2bgs2h4zi2dsjrssql3h2j"; + }; - fhsEnv = pkgs.buildFHSEnv { - name = "${pname}-fhs"; - targetPkgs = p: with p; [ - eudev.out - libGL.out - openal.out - xorg.libX11.out - ]; - runScript = "${src}/${pname}"; - }; + nativeBuildInputs = [ + pkgs.dpkg + pkgs.makeWrapper + pkgs.bubblewrap + ]; - 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 - ''; - }) + buildInputs = ( + with pkgs; + [ + dotnet-runtime + gtk3 + glib + pango + cairo + gdk-pixbuf + atk + fontconfig + freetype + ] + ++ (with pkgs.xorg; [ + libX11 + libXcursor + libXrandr + libXinerama + libXi + ]) + ); + unpackPhase = '' + dpkg-deb -x $src . + ''; + + installPhase = '' + mkdir -p $out/lib/dwsim + mkdir -p $out/bin + + cp -r usr/local/lib/dwsim/* $out/lib/dwsim/ + mkdir -p $out/share/icons/hicolor/256x256/apps + cp $out/lib/dwsim/bitmaps/DWSIM_ico.png \ + $out/share/icons/hicolor/256x256/apps/dwsim.png + mkdir -p "$out/lib/dwsim/DWSIM Application Data" + + cat > $out/bin/dwsim << 'EOF' + #!/bin/sh + set -e + + + APPDIR="@out@/lib/dwsim" + APPDATA="$HOME/.local/share/dwsim-appdata" + + mkdir -p "$APPDATA" + + # LD_LIBRARY_PATH для GtkSharp + export LD_LIBRARY_PATH="@gtk3@/lib:@glib@/lib:@pango@/lib:@cairo@/lib:@gdk-pixbuf@/lib:@atk@/lib:@fontconfig@/lib:@freetype@/lib:$LD_LIBRARY_PATH" + + export DISPLAY="$DISPLAY" + + exec @bwrap@ \ + --bind "@out@" "@out@" \ + --bind "$APPDATA" "$APPDIR/DWSIM Application Data" \ + --ro-bind /nix /nix \ + --ro-bind "$XAUTHORITY" "$HOME/.Xauthority" \ + --setenv XAUTHORITY "$HOME/.Xauthority" \ + --dev /dev \ + --proc /proc \ + --bind /tmp/.X11-unix /tmp/.X11-unix \ + --setenv DISPLAY $DISPLAY \ + --chdir "$APPDIR" \ + @dotnet@ "$APPDIR/DWSIM.UI.Desktop.exe" "$@" + EOF + + substituteInPlace $out/bin/dwsim \ + --subst-var out \ + --subst-var-by bwrap ${pkgs.bubblewrap}/bin/bwrap \ + --subst-var-by dotnet ${pkgs.dotnet-runtime}/bin/dotnet \ + --subst-var-by gtk3 ${pkgs.gtk3} \ + --subst-var-by glib ${pkgs.glib} \ + --subst-var-by pango ${pkgs.pango} \ + --subst-var-by cairo ${pkgs.cairo} \ + --subst-var-by gdk-pixbuf ${pkgs.gdk-pixbuf} \ + --subst-var-by atk ${pkgs.atk} \ + --subst-var-by fontconfig ${pkgs.fontconfig} \ + --subst-var-by freetype ${pkgs.freetype} + + chmod +x $out/bin/dwsim + + mkdir -p $out/share/applications + + cat > $out/share/applications/dwsim.desktop << EOF + [Desktop Entry] + Type=Application + Name=DWSIM + GenericName=Process Simulator + Comment=Chemical Process Simulation Environment + Exec=dwsim + Icon=dwsim + Terminal=false + Categories=Development + StartupWMClass=DWSIM + EOF + + + ''; + }) + (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"; + }; + + 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}"; + }; + + 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://${serverIP}/simintech_rus_linux.tgz"; - sha256 = "sha256:1i9plx6vx6jm38bx4kbh4piak5jwrpc4hxxjd3b89zyng1g4abvs"; - }; - dontFixLibtool = true; + pname = "simintech"; + version = "2.23.13"; + src = builtins.fetchTarball { + url = "http://${serverIP}/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 - 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 + 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 + ''; + }) - (pkgs.writeShellScriptBin "gcc" ''${pkgs.clang}/bin/clang "$@"'') - (pkgs.writeShellScriptBin "g++" ''${pkgs.clang}/bin/clang++ "$@"'') + (pkgs.writeShellScriptBin "gcc" ''${pkgs.clang}/bin/clang "$@"'') + (pkgs.writeShellScriptBin "g++" ''${pkgs.clang}/bin/clang++ "$@"'') - (vscode-with-extensions.override { - vscodeExtensions = with vscode-extensions; [ - ms-vscode.cpptools-extension-pack - zainchen.json - ms-dotnettools.csharp - formulahendry.code-runner - tomoki1207.pdf - ms-vscode.hexeditor - jebbs.plantuml - ms-toolsai.jupyter - ms-toolsai.vscode-jupyter-slideshow - ms-toolsai.vscode-jupyter-cell-tags - ms-vscode-remote.remote-ssh - timonwong.shellcheck - ] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [ - { - name = "better-cpp-syntax"; - publisher = "jeff-hykin"; - version = "1.27.1"; - sha256 = "sha256-GO/ooq50KLFsiEuimqTbD/mauQYcD/p2keHYo/6L9gw="; - } - { - name = "vscode-cppcheck"; - publisher = "brobeson"; - version = "0.1.0"; - sha256 = "sha256-RDgO8/XenttOcYQSGEu4N2FKg9+FZaQe6HYkVjztH5o="; - } - ]; - }) + (vscode-with-extensions.override { + vscodeExtensions = + with vscode-extensions; + [ + ms-vscode.cpptools-extension-pack + zainchen.json + ms-dotnettools.csharp + formulahendry.code-runner + tomoki1207.pdf + ms-vscode.hexeditor + jebbs.plantuml + ms-toolsai.jupyter + ms-toolsai.vscode-jupyter-slideshow + ms-toolsai.vscode-jupyter-cell-tags + ms-vscode-remote.remote-ssh + timonwong.shellcheck + ] + ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [ + { + name = "better-cpp-syntax"; + publisher = "jeff-hykin"; + version = "1.27.1"; + sha256 = "sha256-GO/ooq50KLFsiEuimqTbD/mauQYcD/p2keHYo/6L9gw="; + } + { + name = "vscode-cppcheck"; + publisher = "brobeson"; + version = "0.1.0"; + sha256 = "sha256-RDgO8/XenttOcYQSGEu4N2FKg9+FZaQe6HYkVjztH5o="; + } + ]; + }) # POSIX утилиты для совместимости om4 @@ -463,9 +497,9 @@ EOF 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 + ''; }; # и оба поддерживают вход без пароля в "руты" @@ -491,10 +525,10 @@ EOF imports = [ ./hardware-configuration.nix ]; programs.tmux = { - enable = true; - withUtempter = true; - historyLimit = 5000; - clock24 = true; + enable = true; + withUtempter = true; + historyLimit = 5000; + clock24 = true; }; programs.chromium = { enable = true; @@ -507,31 +541,41 @@ EOF "ru" "en-US" "fr" - ]; + ]; }; }; # если машина установлена на диск с 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 @@ -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,36 +596,50 @@ 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; + package = config.boot.kernelPackages.nvidiaPackages.stable; modesetting.enable = true; powerManagement.enable = true; open = false; nvidiaSettings = false; }; - 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 ""; + 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"; @@ -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"; } -