diff --git a/configuration.nix b/configuration.nix index 16c5836..c294ef4 100644 --- a/configuration.nix +++ b/configuration.nix @@ -16,7 +16,12 @@ in users.users.student = { isNormalUser = true; initialPassword = "student"; # вход беспарольный, но пароль student - extraGroups = [ "video" "sound" "input" "storage" ]; + extraGroups = [ + "video" + "sound" + "input" + "storage" + ]; packages = let # определение как скачивать плагины jetbrains (скачивать с нашего сервера копию) @@ -61,8 +66,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=") @@ -74,13 +78,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 баг со шрифтами. Ждём фикс @@ -118,7 +127,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# @@ -143,7 +153,6 @@ in archi # поддержка archimate - ##### Утилиты и программы для STM32 ##### # 1) STM32CubeIDE упаковать не удалось # 2) есть основания полагать, что её функциональность лучше встроить @@ -156,123 +165,126 @@ 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 = "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}"; - }; - - 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 - ''; - }) + 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://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 @@ -307,9 +319,9 @@ in 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 + ''; }; # и оба поддерживают вход без пароля в "руты" @@ -338,24 +350,34 @@ in # если машина установлена на диск с 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 @@ -365,9 +387,9 @@ in }; 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 = '' @@ -392,18 +414,20 @@ in }; hardware.enableAllFirmware = true; hardware.nvidia = { - package = config.boot.kernelPackages.nvidiaPackages.legacy_470; - modesetting.enable = true; - powerManagement.enable = true; - open = false; - nvidiaSettings = false; + package = config.boot.kernelPackages.nvidiaPackages.legacy_470; + 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.extraModprobeConfig = + "options nvidia " + + lib.concatStringsSep " " [ + "NVreg_UsePageAttributeTable=1" + "NVreg_EnablePCIeGen3=1" + "NVreg_RegistryDwords=RMUseSwI2c=0x01;RMI2cSpeed=100" + ]; services.displayManager.autoLogin.user = "student"; services.getty.autologinUser = "student"; @@ -434,11 +458,15 @@ in ##### СЕТЕВЫЕ НАСТРОЙКИ ####### # каждый компьютер виден под уникальным именем через 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; @@ -460,7 +488,10 @@ in 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"; @@ -492,7 +523,6 @@ in liberation_ttf ]; - ####### ПРОЧИЕ НАСТРОЙКИ ####### environment.systemPackages = with pkgs; [ vim @@ -514,7 +544,10 @@ in wrappedBinaries = { packettracer7 = { executable = "${packettracer7.packages.x86_64-linux.default}/bin/packettracer7"; - extraArgs = [ "--net=none" "--noprofile" ]; + extraArgs = [ + "--net=none" + "--noprofile" + ]; }; }; }; @@ -538,4 +571,3 @@ in # НЕ МЕНЯТЬ, иначе придётся все компы переустанавливать, а не обновлять system.stateVersion = "24.05"; } - diff --git a/flake.nix b/flake.nix index a975229..0e54926 100644 --- a/flake.nix +++ b/flake.nix @@ -1,34 +1,33 @@ { - inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11"; - inputs.simintech.url = "git://10.0.174.12/simintech_nix"; - inputs.mireadesktop.url = "git://10.0.174.12/mireadesktop"; - inputs.stm32cubemx.url = "git://10.0.174.12/stm32cubemx"; - inputs.packettracer7.url = "git://10.0.174.12/packettracer7"; - inputs.gostfont.url = "git://10.0.174.12/gostfont"; - inputs.nix-jetbrains-plugins.url = "git://10.0.174.12/nix-jetbrains-plugins"; - inputs.mireapython.url = "git://10.0.174.12/mireapython"; - - outputs = - { - self, - nixpkgs, - simintech, - stm32cubemx, - packettracer7, - ... - }@inputs: - { - nixosConfigurations.nixos = nixpkgs.lib.nixosSystem { - specialArgs = { - inherit simintech; - inherit stm32cubemx; - inherit packettracer7; - inherit inputs; - }; - modules = [ - ./configuration.nix - ]; - }; - }; - } + inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11"; + inputs.simintech.url = "git://10.0.174.12/simintech_nix"; + inputs.mireadesktop.url = "git://10.0.174.12/mireadesktop"; + inputs.stm32cubemx.url = "git://10.0.174.12/stm32cubemx"; + inputs.packettracer7.url = "git://10.0.174.12/packettracer7"; + inputs.gostfont.url = "git://10.0.174.12/gostfont"; + inputs.nix-jetbrains-plugins.url = "git://10.0.174.12/nix-jetbrains-plugins"; + inputs.mireapython.url = "git://10.0.174.12/mireapython"; + outputs = + { + self, + nixpkgs, + simintech, + stm32cubemx, + packettracer7, + ... + }@inputs: + { + nixosConfigurations.nixos = nixpkgs.lib.nixosSystem { + specialArgs = { + inherit simintech; + inherit stm32cubemx; + inherit packettracer7; + inherit inputs; + }; + modules = [ + ./configuration.nix + ]; + }; + }; +}