изменено: 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 let
serverIP = "10.0.174.12"; 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"; 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 ${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 in
{ {
nixpkgs.overlays = [ nixpkgs.overlays = [
(final: prev: { (final: prev: {
staruml = prev.staruml.overrideAttrs (old: { staruml = prev.staruml.overrideAttrs (old: {
src = final.fetchurl { src = final.fetchurl {
url = starumlDebUrl; url = "http://${serverIP}/StarUML_6.2.2_amd64.deb";
hash = "sha256-1zxrT7phXeQYNbWHWMyPuHiUglrPSMPP0bfAcfvt8dM="; hash = "sha256-1zxrT7phXeQYNbWHWMyPuHiUglrPSMPP0bfAcfvt8dM=";
}; };
}); });
@ -31,7 +33,12 @@ in
users.users.student = { users.users.student = {
isNormalUser = true; isNormalUser = true;
initialPassword = "student"; # вход беспарольный, но пароль student initialPassword = "student"; # вход беспарольный, но пароль student
extraGroups = [ "video" "sound" "input" "storage" ]; extraGroups = [
"video"
"sound"
"input"
"storage"
];
packages = packages =
let let
# определение как скачивать плагины jetbrains (скачивать с нашего сервера копию) # определение как скачивать плагины jetbrains (скачивать с нашего сервера копию)
@ -75,8 +82,7 @@ in
idea-community."2024.1"."R4Intellij" idea-community."2024.1"."R4Intellij"
idea-community."2024.1"."com.redhat.devtools.lsp4ij" idea-community."2024.1"."com.redhat.devtools.lsp4ij"
]) ])
++ ++ [
[
# поддежка языка C/C++ на уровне подсветки синтаксиса и автодополнения # поддежка языка C/C++ на уровне подсветки синтаксиса и автодополнения
(customJBPlugin "clsp" "1.0.1" "sha256-AU/Q61YYsGn2BAYykCGm4XGNyeSwd5K/txGNzP2dJg0=") (customJBPlugin "clsp" "1.0.1" "sha256-AU/Q61YYsGn2BAYykCGm4XGNyeSwd5K/txGNzP2dJg0=")
@ -88,13 +94,18 @@ in
)) ))
chromium # браузер chromium # браузер
pinta # графический редактор pinta # графический редактор
sakura # терминал sakura # терминал
unzipNLS # поддержка zip unzipNLS # поддержка zip
unrar # поддержка rar unrar # поддержка rar
gtk3 whitesur-icon-theme # необходимо для иконок gtk3
(pkgs.writeShellScriptBin "powermenu" (builtins.readFile inputs.mireadesktop.packages.x86_64-linux.powermenu)) whitesur-icon-theme # необходимо для иконок
(pkgs.writeShellScriptBin "resethome" (builtins.readFile inputs.mireadesktop.packages.x86_64-linux.resethome)) (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 pandoc
#onlyoffice-desktopeditors # к сожалению, пока у OnlyOffice баг со шрифтами. Ждём фикс #onlyoffice-desktopeditors # к сожалению, пока у OnlyOffice баг со шрифтами. Ждём фикс
@ -132,7 +143,8 @@ in
# Другие возможные языки и инструменты, например: # Другие возможные языки и инструменты, например:
# rustc # - Rust # rustc # - Rust
# go gopls delve golint go-tools # - Go # go gopls delve golint go-tools # - Go
jdk kotlin # - Java, Kotlin (идут вместе с IJ IDEA) jdk
kotlin # - Java, Kotlin (идут вместе с IJ IDEA)
# ghc haskell-language-server # - Haskell # ghc haskell-language-server # - Haskell
# nodePackages.intelephense # - PHP # nodePackages.intelephense # - PHP
# dotnet-sdk # - C# # dotnet-sdk # - C#
@ -148,7 +160,20 @@ in
# графическое моделирование UML-диаграмм # графическое моделирование UML-диаграмм
# также доступно моделирование BPMN и ER # также доступно моделирование 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-диаграмм # Язык текстового описания UML-диаграмм
# актуально для разработчиков ПО (встраивание диаграмм в код) # актуально для разработчиков ПО (встраивание диаграмм в код)
@ -157,7 +182,6 @@ in
archi # поддержка archimate archi # поддержка archimate
##### Утилиты и программы для STM32 ##### ##### Утилиты и программы для STM32 #####
# 1) STM32CubeIDE упаковать не удалось # 1) STM32CubeIDE упаковать не удалось
# 2) есть основания полагать, что её функциональность лучше встроить # 2) есть основания полагать, что её функциональность лучше встроить
@ -168,267 +192,277 @@ in
##### СЕТЕВЫЕ УТИЛИТЫ ###### ##### СЕТЕВЫЕ УТИЛИТЫ ######
# установлен Cisco Packet Tracer, обернут в firejail чтобы не стучался на Netacad.com # установлен Cisco Packet Tracer, обернут в firejail чтобы не стучался на Netacad.com
nodePackages.node-red # - лоукод-платформа программирования устройств, в частности интернета вещей nodePackages.node-red # - лоукод-платформа программирования устройств, в частности интернета вещей
httpie httpie-desktop # - передовой клиент HTTP-запросов httpie
netcat socat # - низкоуровневые простейшие утилиты установления TCP или UDP между компьютерами или с ПЛК httpie-desktop # - передовой клиент HTTP-запросов
opcua-client-gui # - простой графический клиент OPC UA netcat
socat # - низкоуровневые простейшие утилиты установления TCP или UDP между компьютерами или с ПЛК
opcua-client-gui # - простой графический клиент OPC UA
###### Другой софт ####### ###### Другой софт #######
logisim-evolution logisim-evolution
unityhub # UnityHub - 3D-моделирование, визуализация, геймдев, AR/VR 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 { (pkgs.stdenv.mkDerivation rec {
pname = "cnc_vmc_sim"; pname = "dwsim";
version = "1.0.0-share"; version = "9.0.5";
src = builtins.fetchTarball {
url = "http://${serverIP}/linux_cnc_vmc_share.tar.xz";
sha256 = "sha256:1hjkm2wq6dfmddb2van1q8hdvf41bp4snslcbkj0b1myi3zpi1md";
};
installPhase = '' src = pkgs.fetchurl {
runHook preInstall url = "http://${serverIP}/dwsim_9.0.5-amd64.deb";
mkdir -p $out/bin sha256 = "sha256:0352mxz9czfh52z4lf7njlyqvikvbh2bgs2h4zi2dsjrssql3h2j";
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 { nativeBuildInputs = [
name = "${pname}-fhs"; pkgs.dpkg
targetPkgs = p: with p; [ pkgs.makeWrapper
eudev.out pkgs.bubblewrap
libGL.out ];
openal.out
xorg.libX11.out
];
runScript = "${src}/${pname}";
};
desktopItem = pkgs.makeDesktopItem { buildInputs = (
name = "CNC VMC (free)"; with pkgs;
exec = "${pname}"; [
desktopName = "CNC VMC (free)"; dotnet-runtime
categories = [ "Development" ]; gtk3
icon = "${pname}"; glib
terminal = false; pango
startupNotify = false; cairo
}; gdk-pixbuf
}) atk
(pkgs.stdenv.mkDerivation rec { fontconfig
pname = "ramus"; freetype
version = "0.1.3"; ]
src = builtins.fetchTarball { ++ (with pkgs.xorg; [
url = "http://${serverIP}/ramus.tar.xz"; libX11
sha256 = "sha256:1a9fha7zwyyag0q4glk58pzigqdczshxpnax7cdzg1bry4aw6f9d"; libXcursor
}; libXrandr
installPhase = '' libXinerama
sed -e "s~ramus.ico~$out/share/icons/ramus.ico~; s~Other~Database~" -i share/applications/ramus.desktop libXi
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
'';
})
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. Кодогенерация библиотек для ПК работает, # поставка SimInTech. Кодогенерация библиотек для ПК работает,
# но несовместима с .dll из windows! # но несовместима с .dll из windows!
#simintech.packages.x86_64-linux.simintech #simintech.packages.x86_64-linux.simintech
(pkgs.stdenv.mkDerivation rec { (pkgs.stdenv.mkDerivation rec {
pname = "simintech"; pname = "simintech";
version = "2.23.13"; version = "2.23.13";
src = builtins.fetchTarball { src = builtins.fetchTarball {
url = "http://${serverIP}/simintech_rus_linux.tgz"; url = "http://${serverIP}/simintech_rus_linux.tgz";
sha256 = "sha256:1i9plx6vx6jm38bx4kbh4piak5jwrpc4hxxjd3b89zyng1g4abvs"; sha256 = "sha256:1i9plx6vx6jm38bx4kbh4piak5jwrpc4hxxjd3b89zyng1g4abvs";
}; };
dontFixLibtool = true; dontFixLibtool = true;
fhsEnv = pkgs.buildFHSEnv { fhsEnv = pkgs.buildFHSEnv {
name = "${pname}-fhs-env"; name = "${pname}-fhs-env";
targetPkgs = p: with p; [ targetPkgs =
at-spi2-atk.out p: with p; [
gdk-pixbuf.out at-spi2-atk.out
glamoroustoolkit.out gdk-pixbuf.out
glib.out glamoroustoolkit.out
gtk2.out glib.out
libGL.out gtk2.out
libGLU.out libGL.out
pango.out libGLU.out
xorg.libX11.out pango.out
zlib.out xorg.libX11.out
xorg.libX11.out zlib.out
zlib.out xorg.libX11.out
(pkgs.writeShellScriptBin "firefox" "exec ${pkgs.chromium}/bin/chromium \"$@\"") # похоже, что SimInTech захардкодил Firefox, но не все так юзают Firefox zlib.out
]; (pkgs.writeShellScriptBin "firefox" "exec ${pkgs.chromium}/bin/chromium \"$@\"") # похоже, что SimInTech захардкодил Firefox, но не все так юзают Firefox
runScript = "${src}/bin/mmain"; ];
}; runScript = "${src}/bin/mmain";
};
desktopItem = pkgs.makeDesktopItem { desktopItem = pkgs.makeDesktopItem {
name = "SimInTech"; name = "SimInTech";
exec = "simintech"; exec = "simintech";
desktopName = "SimInTech"; desktopName = "SimInTech";
categories = [ "Development" ]; categories = [ "Development" ];
icon = "simintech"; icon = "simintech";
terminal = false; terminal = false;
startupNotify = false; startupNotify = false;
mimeTypes = [ "x-scheme-handler/prt" ]; mimeTypes = [ "x-scheme-handler/prt" ];
}; };
installPhase = '' installPhase = ''
runHook preInstall runHook preInstall
mkdir -p $out/bin mkdir -p $out/bin
mkdir -p $out/share/applications mkdir -p $out/share/applications
mkdir -p $out/share/icons mkdir -p $out/share/icons
#cp ${src}/share/icon.svg $out/share/icons/simintech.svg #cp ${src}/share/icon.svg $out/share/icons/simintech.svg
cp ${fhsEnv}/bin/${pname}-fhs-env $out/bin/simintech cp ${fhsEnv}/bin/${pname}-fhs-env $out/bin/simintech
cp ${desktopItem}/share/applications/*.desktop $out/share/applications cp ${desktopItem}/share/applications/*.desktop $out/share/applications
runHook postInstall runHook postInstall
''; '';
}) })
(pkgs.writeShellScriptBin "gcc" ''${pkgs.clang}/bin/clang "$@"'') (pkgs.writeShellScriptBin "gcc" ''${pkgs.clang}/bin/clang "$@"'')
(pkgs.writeShellScriptBin "g++" ''${pkgs.clang}/bin/clang++ "$@"'') (pkgs.writeShellScriptBin "g++" ''${pkgs.clang}/bin/clang++ "$@"'')
(vscode-with-extensions.override { (vscode-with-extensions.override {
vscodeExtensions = with vscode-extensions; [ vscodeExtensions =
ms-vscode.cpptools-extension-pack with vscode-extensions;
zainchen.json [
ms-dotnettools.csharp ms-vscode.cpptools-extension-pack
formulahendry.code-runner zainchen.json
tomoki1207.pdf ms-dotnettools.csharp
ms-vscode.hexeditor formulahendry.code-runner
jebbs.plantuml tomoki1207.pdf
ms-toolsai.jupyter ms-vscode.hexeditor
ms-toolsai.vscode-jupyter-slideshow jebbs.plantuml
ms-toolsai.vscode-jupyter-cell-tags ms-toolsai.jupyter
ms-vscode-remote.remote-ssh ms-toolsai.vscode-jupyter-slideshow
timonwong.shellcheck ms-toolsai.vscode-jupyter-cell-tags
] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [ ms-vscode-remote.remote-ssh
{ timonwong.shellcheck
name = "better-cpp-syntax"; ]
publisher = "jeff-hykin"; ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
version = "1.27.1"; {
sha256 = "sha256-GO/ooq50KLFsiEuimqTbD/mauQYcD/p2keHYo/6L9gw="; name = "better-cpp-syntax";
} publisher = "jeff-hykin";
{ version = "1.27.1";
name = "vscode-cppcheck"; sha256 = "sha256-GO/ooq50KLFsiEuimqTbD/mauQYcD/p2keHYo/6L9gw=";
publisher = "brobeson"; }
version = "0.1.0"; {
sha256 = "sha256-RDgO8/XenttOcYQSGEu4N2FKg9+FZaQe6HYkVjztH5o="; name = "vscode-cppcheck";
} publisher = "brobeson";
]; version = "0.1.0";
}) sha256 = "sha256-RDgO8/XenttOcYQSGEu4N2FKg9+FZaQe6HYkVjztH5o=";
}
];
})
# POSIX утилиты для совместимости # POSIX утилиты для совместимости
om4 om4
@ -463,9 +497,9 @@ EOF
services.postgresql = { services.postgresql = {
enable = true; enable = true;
authentication = pkgs.lib.mkOverride 10 '' authentication = pkgs.lib.mkOverride 10 ''
#type database DBuser auth-method #type database DBuser auth-method
local all all trust local all all trust
''; '';
}; };
# и оба поддерживают вход без пароля в "руты" # и оба поддерживают вход без пароля в "руты"
@ -491,10 +525,10 @@ EOF
imports = [ ./hardware-configuration.nix ]; imports = [ ./hardware-configuration.nix ];
programs.tmux = { programs.tmux = {
enable = true; enable = true;
withUtempter = true; withUtempter = true;
historyLimit = 5000; historyLimit = 5000;
clock24 = true; clock24 = true;
}; };
programs.chromium = { programs.chromium = {
enable = true; enable = true;
@ -507,31 +541,41 @@ EOF
"ru" "ru"
"en-US" "en-US"
"fr" "fr"
]; ];
}; };
}; };
# если машина установлена на диск с Windows, # если машина установлена на диск с Windows,
# то она позволяет "увидеть" и выбрать Windows в течение 30 с # то она позволяет "увидеть" и выбрать Windows в течение 30 с
# иначе - 5 c таймаута (для виртуалок) # иначе - 5 c таймаута (для виртуалок)
boot.loader = if hasBootPartition then { boot.loader =
efi.canTouchEfiVariables = true; if hasBootPartition then
timeout = 30; {
grub = { efi.canTouchEfiVariables = true;
enable = true; timeout = 30;
efiSupport = true; grub = {
device = "nodev"; enable = true;
useOSProber = true; efiSupport = true;
theme = "${pkgs.sleek-grub-theme.override{ withStyle = "orange"; withBanner = "Выберите ОС"; }}"; device = "nodev";
}; useOSProber = true;
} else { theme = "${pkgs.sleek-grub-theme.override {
timeout = 5; withStyle = "orange";
grub = { withBanner = "Выберите ОС";
enable = true; }}";
device = "/dev/sda"; };
theme = "${pkgs.sleek-grub-theme.override{ withStyle = "orange"; withBanner = "Загрузчик Linux"; }}"; }
}; else
}; {
timeout = 5;
grub = {
enable = true;
device = "/dev/sda";
theme = "${pkgs.sleek-grub-theme.override {
withStyle = "orange";
withBanner = "Загрузчик Linux";
}}";
};
};
time.hardwareClockInLocalTime = hasBootPartition; time.hardwareClockInLocalTime = hasBootPartition;
# настройки Nix # настройки Nix
@ -540,9 +584,8 @@ EOF
nvidia.acceptLicense = true; nvidia.acceptLicense = true;
}; };
nix.settings = { nix.settings = {
substituters = if config.services.harmonia.enable then [ extra-substituters = [ "http://nixos.builds.node" ];
"https://cache.nixos.org" trusted-public-keys = [ "nixos.builds.node:E/XNkcdzB0EyTyEJuOTXJH8qynxgCfQ87JHkbD88uF8=" ];
] else [ "https://cache.nixos.org" "http://${buildNodeYggIP}:5000" ];
auto-optimise-store = true; auto-optimise-store = true;
}; };
nix.extraOptions = '' nix.extraOptions = ''
@ -553,36 +596,50 @@ EOF
hardware.graphics = { hardware.graphics = {
enable = true; enable = true;
#enable32Bit = 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 = { services.xserver = {
enable = true; enable = true;
videoDrivers = if isNvidia then [ "nvidia" ] else [ "modesetting" "fbdev" ]; videoDrivers =
if isNvidia then
[ "nvidia" ]
else
[
"modesetting"
"fbdev"
];
xkb.layout = "us,ru"; xkb.layout = "us,ru";
xkb.options = "grp:alt_shift_toggle"; xkb.options = "grp:alt_shift_toggle";
}; };
hardware.enableAllFirmware = true; hardware.enableAllFirmware = true;
#hardware.nvidia = {
# package = config.boot.kernelPackages.nvidiaPackages.legacy_470;
# modesetting.enable = true;
# powerManagement.enable = true;
# open = false;
# nvidiaSettings = false;
#};
hardware.nvidia = { hardware.nvidia = {
package = config.boot.kernelPackages.nvidiaPackages.stable; package = config.boot.kernelPackages.nvidiaPackages.stable;
modesetting.enable = true; modesetting.enable = true;
powerManagement.enable = true; powerManagement.enable = true;
open = false; open = false;
nvidiaSettings = false; nvidiaSettings = false;
}; };
boot.kernelParams = if isNvidia then ["nvidia-drm.modeset=1" ] else []; boot.kernelParams = if isNvidia then [ "nvidia-drm.modeset=1" ] else [ ];
boot.blacklistedKernelModules = if isNvidia then [ "nouveau" ] else []; boot.blacklistedKernelModules = if isNvidia then [ "nouveau" ] else [ ];
boot.extraModprobeConfig = if isNvidia then "options nvidia " + lib.concatStringsSep " " [ boot.extraModprobeConfig =
"NVreg_UsePageAttributeTable=1" if isNvidia then
"NVreg_EnablePCIeGen3=1" "options nvidia "
"NVreg_RegistryDwords=RMUseSwI2c=0x01;RMI2cSpeed=100" + lib.concatStringsSep " " [
] else ""; "NVreg_UsePageAttributeTable=1"
"NVreg_EnablePCIeGen3=1"
"NVreg_RegistryDwords=RMUseSwI2c=0x01;RMI2cSpeed=100"
]
else
"";
services.displayManager.autoLogin.user = "student"; services.displayManager.autoLogin.user = "student";
services.getty.autologinUser = "student"; services.getty.autologinUser = "student";
@ -614,7 +671,9 @@ EOF
services.yggdrasil = { services.yggdrasil = {
enable = true; enable = true;
persistentKeys = true; persistentKeys = true;
settings = { Peers = [ "tcp://${serverIP}:12345" ]; }; settings = {
Peers = [ "tcp://${serverIP}:12345" ];
};
}; };
# каждый компьютер имеет выход в интернет # каждый компьютер имеет выход в интернет
@ -624,17 +683,7 @@ EOF
# каждый компьютер знает, что kafpi.local - это адрес нашего сервера # каждый компьютер знает, что kafpi.local - это адрес нашего сервера
networking.hosts."${serverIP}" = [ "kafpi.local" ]; networking.hosts."${serverIP}" = [ "kafpi.local" ];
networking.hosts."${buildNodeYggIP}" = [ "nixos-builds-node" ]; 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";
# })
#];
#### ЛОКАЛИЗАЦИЯ ##### #### ЛОКАЛИЗАЦИЯ #####
@ -656,7 +705,6 @@ EOF
liberation_ttf liberation_ttf
]; ];
####### ПРОЧИЕ НАСТРОЙКИ ####### ####### ПРОЧИЕ НАСТРОЙКИ #######
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
vim vim
@ -678,7 +726,10 @@ EOF
wrappedBinaries = { wrappedBinaries = {
packettracer7 = { packettracer7 = {
executable = "${packettracer7.packages.x86_64-linux.default}/bin/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"; system.stateVersion = "24.05";
} }