Compare commits

...

5 Commits

18 changed files with 188 additions and 278 deletions

View File

@ -40,13 +40,12 @@ nix build '.#nixosConfigurations.test-vm.config.system.build.vm'
./result/bin/run-nixos-vm
# In another terminal, get the ed25519 SSH hostkey, then stop the VM with CTRL-c
ssh-keyscan -p 2222 127.0.0.1 | grep ssh-ed25519
...
[127.0.0.1]:2222 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMdCOs16W731ftPDqO+X6RZVSdwVVNw2Xfmcpk5pzbeO
SSH_HOST_KEY=$(ssh-keyscan -p 2222 127.0.0.1 | grep '\[127.0.0.1\]:2222 ssh-ed25519' | awk '{print $2 " " $3}')
# Edit secrets.nix and add the SSH hostkey to machine 'test-vm', starting with 'ssh-ed25519 ...'
sed --in-place \
's|test-vm = .*|test-vm = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMdCOs16W731ftPDqO+X6RZVSdwVVNw2Xfmcpk5pzbeO host@test-vm";|' \
"s|test-vm = .*|test-vm = \"$SSH_HOST_KEY host@test-vm\";|" \
secrets/secrets.nix
# Rekey the secrets with agenix

View File

@ -114,12 +114,6 @@ in
};
};
socketIoPort = mkOption {
type = types.port;
default = 9000;
description = lib.mdDoc "Local socket.io HTTP server port.";
};
webserver = {
bindAddress = mkOption {
type = types.str;
@ -199,10 +193,8 @@ in
db_port = "${toString cfg.database.port}";
db_name = "${cfg.database.name}";
db_password = "#NIXOS_ERPNEXT_DB_USER_PASSWORD#";
redis_cache = "redis://${cfg.redis.host}:${toString cfg.redis.port}?db=1";
redis_queue = "redis://${cfg.redis.host}:${toString cfg.redis.port}?db=2";
redis_socketio = "redis://${cfg.redis.host}:${toString cfg.redis.port}?db=0";
socketio_port = "${toString cfg.socketIoPort}";
redis_cache = "redis://${cfg.redis.host}:${toString cfg.redis.port}?db=0";
redis_queue = "redis://${cfg.redis.host}:${toString cfg.redis.port}?db=1";
};
commonSiteConfigFile = pkgs.writeText "erpnext-common_site_config.json" (builtins.toJSON commonSiteConfig);
@ -286,23 +278,6 @@ in
"d '${cfg.benchDir}/sites' 0750 ${cfg.user} ${config.users.users.${cfg.user}.group}"
];
systemd.services.erpnext-nodejs-socketio = {
enable = true;
after = [ "erpnext-web.service" ];
wantedBy = [ "erpnext-web.service" ];
partOf = [ "erpnext-web.service" ];
description = "ERPNext Node.js HTTP server for socket.io ";
confinement = {
enable = true;
packages = [ pkgs.nodejs ];
};
serviceConfig = defaultServiceConfig // {
ExecStart = ''
${pkgs.nodejs}/bin/node ${cfg.benchDir}/apps/frappe/socketio.js
'';
};
};
services.caddy.enable = mkIf (cfg.caddy != null) true;
services.caddy.virtualHosts."${cfg.domain}" = mkIf (cfg.caddy != null) (lib.mkMerge [
cfg.caddy
@ -312,12 +287,6 @@ in
root * ${pkgs.frappe-erpnext-assets}/share/sites
file_server
}
handle /socket.io/* {
reverse_proxy :${toString cfg.socketIoPort} {
header_up X-Frappe-Site-Name "${cfg.domain}"
header_up Origin "{scheme}://${cfg.domain}"
}
}
reverse_proxy :${toString cfg.webserver.bindPort}
'';
@ -330,7 +299,6 @@ in
after = [
"mysql.service"
"redis.service"
"redis-socketio.service"
"systemd-tmpfiles-setup.service"
];
description = "ERPNext web server";
@ -347,6 +315,9 @@ in
pkgs.replace-secret
];
};
path = [
pkgs.mariadb-client
];
environment = {
PYTHON_PATH = "${penv}/${pkgs.python3.sitePackages}";
};
@ -387,7 +358,7 @@ in
--chdir="${cfg.benchDir}/sites" \
--bind=${cfg.webserver.bindAddress}:${toString cfg.webserver.bindPort} \
--threads=4 \
--workers=3 \
--workers=2 \
--worker-class=gthread \
--worker-tmp-dir=/dev/shm \
--timeout=120 \
@ -412,22 +383,6 @@ in
'';
};
};
systemd.services.erpnext-queue-default = {
enable = true;
after = [ "erpnext-web.service" ];
wantedBy = [ "erpnext-web.service" ];
partOf = [ "erpnext-web.service" ];
description = "ERPNext default queue server";
confinement = {
enable = true;
packages = [ penv ];
};
serviceConfig = defaultServiceConfig // {
ExecStart = ''
${penv}/bin/bench worker --queue default
'';
};
};
systemd.services.erpnext-queue-long = {
enable = true;
after = [ "erpnext-web.service" ];

View File

@ -12,22 +12,30 @@ final: prev: {
honcho = pyFinal.callPackage ./python/honcho.nix {};
# erpnext dependencies
gocardless-pro = pyFinal.callPackage ./python/gocardless-pro.nix {};
redisearch = pyFinal.callPackage ./python/redisearch.nix {};
taxjar = pyFinal.callPackage ./python/taxjar.nix {};
barcodenumber = pyFinal.callPackage ./python/barcodenumber.nix {};
# frappe dependencies
email-reply-parser = pyFinal.callPackage ./python/email-reply-parser.nix {};
maxminddb-geolite2 = pyFinal.callPackage ./python/maxminddb-geolite2.nix {};
psycopg2-binary = pyFinal.callPackage ./python/psycopg2-binary.nix {};
traceback-with-variables = pyFinal.callPackage ./python/traceback-with-variables.nix {};
pydantic = pyFinal.callPackage ./python/pydantic.nix {};
# indirect dependencies
# taxjar
jsonobject = pyFinal.callPackage ./python/jsonobject.nix {};
# redisearch
rejson = pyFinal.callPackage ./python/rejson.nix {};
versioningit = pyPrev.versioningit.overridePythonAttrs (oldAttrs: (rec {
version = "2.2.1";
src = pyPrev.fetchPypi {
inherit version;
inherit (oldAttrs) pname;
hash = "sha256-DlgkLXq9phrmNZalSUrp7WMayF2Ls8yOF24yU8pLy7U=";
};
}));
fastapi = pyPrev.fastapi.overridePythonAttrs (oldAttrs: (rec {
propagatedBuildInputs = oldAttrs.propagatedBuildInputs ++ [
pyPrev.pydantic-settings
pyPrev.pydantic-extra-types
];
}));
plaid-python = pyPrev.plaid-python.overridePythonAttrs (oldAttrs: (rec {
version = "7.2.1";

15
python/barcodenumber.nix Normal file
View File

@ -0,0 +1,15 @@
{
buildPythonPackage,
fetchPypi,
}:
buildPythonPackage rec {
pname = "barcodenumber";
version = "0.2.1";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-nW8+m32i42kLR4oC4lrKoBkFYgKHgpZPGAFNJvtLMhc=";
};
propagatedBuildInputs = [ ];
nativeBuildInputs = [ ];
doCheck = false;
}

View File

@ -6,18 +6,16 @@
# Core dependencies
, pycountry
, python-stdnum
, unidecode
, redisearch
, barcodenumber
, rapidfuzz
, holidays
# Integration dependencies
, gocardless-pro
, googlemaps
, plaid-python
, python-youtube
, taxjar
, tweepy
, pypng
}:
let
pinData = import ../srcs/pin.nix;
@ -47,17 +45,16 @@ buildPythonPackage rec {
propagatedBuildInputs = [
# Core dependencies
pycountry
python-stdnum
unidecode
redisearch
barcodenumber
rapidfuzz
holidays
# Integration dependencies
gocardless-pro
googlemaps
plaid-python
python-youtube
taxjar
tweepy
# used for QR code generation
pypng
];
}

View File

@ -8,12 +8,13 @@
, babel
, click
, filelock
, filetype
, gitpython
, jinja2
, pillow
, pyjwt
, pymysql
, pypdf2
, pypdf
, pypika
, pyqrcode
, pyyaml
@ -30,7 +31,6 @@
, cryptography
, email-reply-parser
, git-url-parse
, gitdb
, gunicorn
, html5lib
, ipython
@ -47,12 +47,9 @@
, premailer
, psutil
, psycopg2-binary
, pyasn1
, pycountry
, pycryptodome
, pydantic
, pyopenssl
, pyotp
, pypng
, python-dateutil
, pytz
, rauth
@ -63,11 +60,11 @@
, rq
, rsa
, semantic-version
, sentry-sdk
, sqlparse
, tenacity
, terminaltables
, traceback-with-variables
, urllib3
, xlrd
, zxcvbn
, markdownify
@ -76,7 +73,6 @@
, boto3
, dropbox
, google-api-python-client
, google-auth-httplib2
, google-auth-oauthlib
, google-auth
, posthog
@ -100,48 +96,18 @@ buildPythonPackage rec {
format = "pyproject";
nativeBuildInputs = [ pythonRelaxDepsHook flit-core ];
pythonRelaxDeps = [
"Babel"
"beautifulsoup4"
"boto3"
"cairocffi"
"Click"
"croniter"
"cryptography"
"filelock"
"google-api-python-client"
"google-auth"
"hiredis"
"ipython"
"openpyxl"
"phonenumbers"
"Pillow"
"pyasn1"
"pycountry"
"pycryptodome"
"PyJWT"
"PyMySQL"
"pyOpenSSL"
"pyotp"
"pypng"
"pytz"
"redis"
"requests"
"rq"
"tenacity"
"WeasyPrint"
];
propagatedBuildInputs = [
babel
click
filelock
filetype
gitpython
jinja2
pillow
pyjwt
pymysql
pypdf2
pypdf
pypika
pyqrcode
pyyaml
@ -158,7 +124,6 @@ buildPythonPackage rec {
cryptography
email-reply-parser
git-url-parse
gitdb
gunicorn
html5lib
ipython
@ -175,12 +140,9 @@ buildPythonPackage rec {
premailer
psutil
psycopg2-binary
pyasn1
pycountry
pycryptodome
pydantic
pyopenssl
pyotp
pypng
python-dateutil
pytz
rauth
@ -191,11 +153,11 @@ buildPythonPackage rec {
rq
rsa
semantic-version
sentry-sdk
sqlparse
tenacity
terminaltables
traceback-with-variables
urllib3
xlrd
zxcvbn
markdownify
@ -204,7 +166,6 @@ buildPythonPackage rec {
boto3
dropbox
google-api-python-client
google-auth-httplib2
google-auth-oauthlib
google-auth
posthog

View File

@ -1,19 +0,0 @@
{
buildPythonPackage,
fetchPypi,
requests,
six
}:
buildPythonPackage rec {
pname = "gocardless-pro";
version = "1.22.0";
src = fetchPypi {
pname = "gocardless_pro";
inherit version;
sha256 = "sha256-i4gBeJvl/aCujeXGvJG+z1Wp2aczKg8clnfMyK8fz/w=";
};
propagatedBuildInputs = [
requests
six
];
}

View File

@ -1,17 +0,0 @@
{
buildPythonPackage,
fetchPypi,
cython,
six
}:
buildPythonPackage rec {
pname = "jsonobject";
version = "2.1.0";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-UpijeVA+Q+/Aq0AC10LA/LuhqWKO3azE6lR7cThRRGY=";
};
propagatedBuildInputs = [ six ];
nativeBuildInputs = [ cython ];
doCheck = false;
}

85
python/pydantic.nix Normal file
View File

@ -0,0 +1,85 @@
{ lib
, buildPythonPackage
, fetchFromGitHub
, pythonOlder
, hatchling
, hatch-fancy-pypi-readme
, libxcrypt
, annotated-types
, pydantic-core
, typing-extensions
, email-validator
, dirty-equals
, faker
, pytestCheckHook
, pytest-mock
}:
buildPythonPackage rec {
pname = "pydantic";
version = "2.3.0";
pyproject = true;
disabled = pythonOlder "3.7";
src = fetchFromGitHub {
owner = "pydantic";
repo = "pydantic";
rev = "refs/tags/v${version}";
hash = "sha256-toqrWg8bYzc3UmvG/YmXawfmT8nqaA9fxy24k1cdj+M=";
};
buildInputs = lib.optionals (pythonOlder "3.9") [
libxcrypt
];
nativeBuildInputs = [
hatch-fancy-pypi-readme
hatchling
];
propagatedBuildInputs = [
annotated-types
pydantic-core
typing-extensions
];
passthru.optional-dependencies = {
email = [
email-validator
];
};
nativeCheckInputs = [
dirty-equals
faker
pytest-mock
pytestCheckHook
] ++ lib.flatten (lib.attrValues passthru.optional-dependencies);
preCheck = ''
export HOME=$(mktemp -d)
substituteInPlace pyproject.toml \
--replace "'--benchmark-columns', 'min,mean,stddev,outliers,rounds,iterations'," "" \
--replace "'--benchmark-group-by', 'group'," "" \
--replace "'--benchmark-warmup', 'on'," "" \
--replace "'--benchmark-disable'," ""
'';
disabledTestPaths = [
"tests/benchmarks"
# avoid cyclic dependency
"tests/test_docs.py"
];
pythonImportsCheck = [ "pydantic" ];
meta = with lib; {
description = "Data validation and settings management using Python type hinting";
homepage = "https://github.com/pydantic/pydantic";
changelog = "https://github.com/pydantic/pydantic/blob/v${version}/HISTORY.md";
license = licenses.mit;
maintainers = with maintainers; [ wd15 ];
};
}

View File

@ -1,28 +0,0 @@
{ buildPythonPackage
, fetchPypi
, pythonRelaxDepsHook
, unittestCheckHook
, redis
, rejson
, hiredis
}:
buildPythonPackage rec {
pname = "redisearch";
version = "2.1.1";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-V1rNWhOhB/8AXUVyoTa1A7Evpb8mr8N70R9qkj8exzw=";
};
nativeBuildInputs = [ pythonRelaxDepsHook ];
pythonRelaxDeps = [
"redis"
];
propagatedBuildInputs = [
redis
rejson
hiredis
];
nativeCheckInputs = [
unittestCheckHook
];
}

View File

@ -1,24 +0,0 @@
{ buildPythonPackage
, pythonRelaxDepsHook
, unittestCheckHook
, fetchPypi
, redis
, six
}:
buildPythonPackage rec {
pname = "rejson";
version = "0.5.6";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-vs3hNSAAUAi3ls5WyxKOsiUC18addIJv81HNQ79zvJc=";
};
nativeBuildInputs = [ pythonRelaxDepsHook ];
pythonRelaxDeps = [
"redis"
];
propagatedBuildInputs = [
redis
six
];
doCheck = false;
}

View File

@ -1,22 +0,0 @@
{
buildPythonPackage,
fetchPypi,
jsonobject,
requests,
mock
}:
buildPythonPackage rec {
pname = "taxjar";
version = "1.9.2";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-c8lkCLzEmNTuBYLyVNRQq4SLSveDpNKKf6NHxHpg7Ec=";
};
propagatedBuildInputs = [
jsonobject
requests
];
checkInputs = [
mock
];
}

View File

@ -1,16 +1,15 @@
age-encryption.org/v1
-> ssh-ed25519 Wp/X/Q Y4Lc3UeDr+nNoBq9Wipyv1RohYX2BuXXhb7/BCEW304
bi09luX45mj64j4kchsT0uRQXwK3IaM1tfeK+cHPFW4
-> ssh-ed25519 8U1+ng Ldl1XJlahkPzLRsB7ETK1iAWr64nAi5Si/vu2ENaiDM
Hjrr3aoMXwKag51UERpGJpMLz6ocLbm+hQs/oj6bfNc
-> ssh-ed25519 B2/5FA w6pfvStnUtgnap0lqLZ4Sowfa548P/ljBWXAInNumAA
rbi9sBQCJ3ojMKz5M9XRbICVGurjzJ/+4fp+OQB9d8w
-> ssh-ed25519 BVsyTA TkfJgoXeItRmM/XcbVsjSWKroPRvwV4GOZbsfr+okg4
xRjcIAHBDRlse1ObQ01FEFsE82xiOqVxE55D1h9si9c
-> ssh-ed25519 BVsyTA HjZJ4FRC5skEXji2Q+gUvK/a8n2Uiwtl23lk00mJs2U
N0JDJiQoLxFbduAFzIOB+oHIfTHRZxDNyPgvzgwFK8w
-> ssh-ed25519 +3V2lQ XUigj0pn4XshS6cldmb7RvvS05/m1gt4ILCB/gtXjQU
p/SJ9reKQntrnBebExW4jZJz1yMvRl6yGj3H8YPddc0
--- dnd4fFVyltvaIlpnWY+XCHq7vEyLe1GfP8Uvm+YE31Y
cQキ5オHcF&kLMP>オー峯*L美<4C>Sl<53><6C>ョk<1E>
-> ssh-ed25519 Wp/X/Q OKRD6ff60hQkUsFPULeon06oi10Yk3zw/PP5Pcbubn4
OcRfSoapbylZww8RSWyxjZYshxvNaYL2HT9NZaCd+rs
-> ssh-ed25519 8U1+ng ZqHoM85W0RmEpUMMXqgYpWzoqHT9P3yenu0UIan9cVg
XGewg1J5ZguIitS/PRaJ5Pyzn/eIhPVn44rWCXlP4ck
-> ssh-ed25519 oOFZcQ 8rmuIPi4RXpysKp/qX0Jz/gz4+8UjQ6/1Zxv+6OP1QQ
aBe/QaWAUHYI5emqNcLgAutVyeWNqYF0QgcP7dC5Ejg
-> ssh-ed25519 BVsyTA mRMQn2xEn9jdWYLz6hauumTxs+cxRAHyxbRGywLgpEs
DRak/gLh93UprDXq4UXloKcx202uktSuTbkybAL3RLE
-> ssh-ed25519 BVsyTA RweUFPcMNhZlbBdqX1Lf5PedXm1bks8ABM+qaiJuNx8
uN8PCsuTXuYUo29/SXiHD72rHYDlJo+YF8MpE0MKhrQ
-> ssh-ed25519 +3V2lQ xpoyHQwU78j8N0/xJTkQYmVw9p78zjBpLzR8IXRwVgA
tAddezv7vYPxn0saAtQgYrcCDn/NOKkRfsFNToYn9/8
--- feYwI8yg3EoI7n53Z91W8qoS46j0ZdY+rjWvr++pHIU
26R?\lM坙ノYN<59>€<EFBFBD>EYク<59>緋℡idL<64><4C>W

View File

@ -1,15 +1,15 @@
age-encryption.org/v1
-> ssh-ed25519 Wp/X/Q LvLq1RbFw1UNd5STTODl/hwCr/n2oyAYxsgaGqVXUFU
xP6XHSIyN3lRJ7QFwvOOOcss+kczRUFbepHojXbP/ms
-> ssh-ed25519 8U1+ng z7Yc4rmEXtpcBBx6hJmtVyiA6oHLVob8O8UhLgvo6mI
O1hCobMEM7TnbcozkOO7l0cZ3Ze4NEhb54v2h4/xV8c
-> ssh-ed25519 B2/5FA +8Odi4bm7mObdVGM2Pq6dkSSns6Y6QsxkCvgPGsPrC8
eBLsH5HiEuRrbXNDMtUPwlPDAhYPmyWVl0AWho/82WI
-> ssh-ed25519 BVsyTA UFri/RzE0Fil4X6FFGTtVcVpzhJyQwUFamG+XEae/G0
/+/9ocobQS/obt2WFazKSPIbPmhz4DQ3qxdz2Jg9CUw
-> ssh-ed25519 BVsyTA K5OTyhlw3+uw0uVXPfj0yy5qd76t2kZOA72AWFrxAls
36622K6od+FnkYXPDbBz6sFmhsbMWtvRo0RqY1suXX0
-> ssh-ed25519 +3V2lQ I///pKJJdA+MMqk1pIIJXGt+ZrY4ZGr5cpmolRTCyUk
+xVxNBOQMHSQ6K0GGZk7WpGLuaIlu/PwmaPq897GKe8
--- Vf09EgiFYwwnYRq3kcdJInzd8NCCd2OM6yy+lUxIUeA
đ­e.ö˛@±ľ<C2B1>SŃř™nÝ$GŰ<47>v]ní;ůĺ-wtL!ÔĂóúÚY
-> ssh-ed25519 Wp/X/Q JjeEJchHBwo2fIN05JQaDU5kuiCK2P+t/+vKpXpqzTk
I2CWfsw1rob5uAn0TMec7UW5YgB6+ZOa8XjhW1zTN6k
-> ssh-ed25519 8U1+ng iF25EtydJLTi7ETcI/mnnwGEEgJ2jzB+H1snIlOyIn0
EYZMaBys1Ib9+9tyDiitoJZcRiYROKalLSw3+IkTYBE
-> ssh-ed25519 oOFZcQ 3rYmvML6iYeP+TryrfY1nuKpMsE3oK3aB2VGLFG+fGM
nhGu7dEr41l2Vc4wsoWj3Iv6prFGbd3L9aTtq0OWYJ4
-> ssh-ed25519 BVsyTA GuseCoA9Q6j4Rh652hyaHkySE3vuhhmnh00jFrnduy0
pt54rMN3hAnrgWgEEqWvdNmmv/jJy95uuZc77QIjBzk
-> ssh-ed25519 BVsyTA yKrgTRQhuLevVctFOy8XWtaI6KYwWS70ZzlT97xSAVg
wRrgGa4lH+NPkTqnfUtZRQGni4BRumHir70hQZVAPAA
-> ssh-ed25519 +3V2lQ RqMzBa5WjiE8JbbjF23b32VZZUgiD7R9mHJLTwTCXAQ
dQHjQIIydSjJe6hDJkHTHcM142cJWUHcgqVCfWgbbu8
--- BsXgkqdDPJP/w8BrFTMxZSQOmmdydlNig/LubpRp1j8
$ÉÌõÍÉÚKT ëRQÃ?‡â?l¨’ ê r§óÉÄBhò¤;.

View File

@ -1,15 +1,15 @@
age-encryption.org/v1
-> ssh-ed25519 Wp/X/Q XQcBb9T8zpib6nebbKw/BxSuiP4Q9zi9yLLODhx7Xwg
yOTDI9/ZMZq2vamIE6Q3GB8+lSt1SUfnJFVZ5Bu1rRM
-> ssh-ed25519 8U1+ng GlfaGP7lTV5xsh2Zib9wkFEn1CcFa/wdaHxI0RGl6X8
E1jMN5PAQjv3hhSx9WU3xzd+kDJbl9cd4lOd++k5Cfc
-> ssh-ed25519 B2/5FA mCInZwQrNJNyRAvYjsLMOdNE9sM6iJn/GJlEQ+NJuDk
fDmVqofrz6SYaygI8umd6PVnuwik6PsThFV1HCK8Qb0
-> ssh-ed25519 BVsyTA /9dbvKxQujZMPxjP1DajHOTSm+cFV8ghzoHuf2zvBDc
ZwXAI6SrvXgXzTz3JHjSmuYFQd70H8UxDoEpKZhbSys
-> ssh-ed25519 BVsyTA Y8ci67zC+EGxGNc+4LuhRt+3ImxitRHuL6fuaYWWu2g
3FkaZRqR3viPvkZDV+2aZUwYlPgtbmwEBIjrFwGBYps
-> ssh-ed25519 +3V2lQ P86iVYPu1CVqcNnbMy3DEuSGF3XZeeXHJWiByA5HpxY
0aQ/knr/8NYB/xa+YNFS9uHhpB3uG2Jm/jpq2gTeEaA
--- /D2NTCvXXfa2aDoaXL9qYSmRVfb2BVbOYx914H75c20
/fÔJÁ‡[PaÕÈglòzbÏ—y‰÷€Q ü;Öq& Åfd§ ‘ó
-> ssh-ed25519 Wp/X/Q AYajVfjNpeIzQa6gJS4WQ0FxeiG+E6ubvnMpUuhqRBE
iXBt2QFOSb0maN2/S6GpfmXKMFFbL+PqA9uIcB2CheY
-> ssh-ed25519 8U1+ng 5zraJOoaFPm11JUBcFlYvE4KwCMECg8SS1RcjRtQ90s
wp/PNpwftnpmU8OVHKn7RWlVI2gUJQAWje0L7WF8POY
-> ssh-ed25519 oOFZcQ H4DlziBiXcE54Dnuk3MfiNFF6iOE5eQUVL4npUjgfEM
BYK5wXV4evqtUanzJtAgTzHjQUkv6BMNDYhqhEN+LAE
-> ssh-ed25519 BVsyTA dyZ/zUHpYNxbo3GmtHXR4XXzV2gVdaku1chxE028JTA
1VRZgmsRV1CjQCVNJhDnOYOWl1V4OxCd/mNY+QhNbIw
-> ssh-ed25519 BVsyTA h3vgd5Gm49NW8kBYZ6cCW8qjSZ8thUpvNzoRGArnK0I
fL9vlAYUFW7IRhyerc7VpYfK+4ZQvMAs+rb1KHvi0Nw
-> ssh-ed25519 +3V2lQ V3SNRpH/u017gfpyrXRavZvHEeg7UrfmVgtacFNNwxE
Hk34+oa4HAWpCyKZzwq1TTkcivfKnoabgoPI0YVujiE
--- DYEoKE9rQw/OFgEWQq+DK9seMqLovJ4JCXb8a8pBGWE
MBçúé½:9ÛÅêþ¸˜ÁÞâÑTåÍ\¢<> 'y"ç•ToÑ

View File

@ -3,7 +3,7 @@ let
machines = {
dumpyourvms = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILDATEWAgDZFfYs1ZPh33Kg4sqQ9tWMVKyk8XqFu3Koe host@dumpyourvms";
ryzensun = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH/l7MfEmt510BMeNjuXNPmZ0brcQidvrrpcea+qJMjX host@ryzensun";
test-vm = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIATdaeRzb/OE1P+lcRS/i9C4yIN11J5zpfVb7+v1D4d7";
test-vm = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEM2z37ihd0zy9146EFDsvRhtTgBSPiB9OzhPgjmyuqX host@test-vm";
};
users = {
teutat3s-dumpyourvms = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHcU6KPy4b1MQXd6EJhcYwbJu7E+0IrBZF/IP6T7gbMf teutat3s@dumpyourvms";

View File

@ -1,11 +1,11 @@
{
benchVersion = "5.19.0";
erpnextVersion = "14.58.1";
erpnextVersion = "15.9.1";
frappeVersion = "15.8.1";
hashes = {
"benchSrcHash" = "sha256-y8nx4vFVQggwGv2MWQ88WczgVbPxPybZV38FF5u5aWI=";
"erpnextSrcHash" = "sha256-HeeNd7dAlbppR2gPPmohKqpUUoMx5f0Kgsd7wZtUHp8=";
"erpnextYarnHash" = "0rjqlw0lff1wwbzl62g8nnjlhz3km2km3vqj2dccawpi4q2kh6jn";
"erpnextSrcHash" = "sha256-nkXN0PTcWt1nSy3eRdBF2h0WMdAC79qWzaj9kXRsG2I=";
"erpnextYarnHash" = "1farnqrfnzshpbpx4nyarw13g8m3389ix3hrc4661xxm887lz5fv";
"frappeSrcHash" = "sha256-FDUUNbULPmMY6dDgbMHrxXD8pK1AP+T7kG7mY9MmMDg=";
"frappeYarnHash" = "0rj2v69siagwjz632hyaii5ni24fp434cznaxpi8978fq07qx6l9";
};

View File

@ -9,7 +9,7 @@
config = {
services.qemuGuest.enable = true;
system.stateVersion = "23.05";
system.stateVersion = "23.11";
fileSystems."/" = {
device = "/dev/disk/by-label/nixos";
@ -50,6 +50,7 @@
users.extraUsers.root.password = "";
users.users.root.openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMNeQYLFauAbzDyIbKC86NUh9yZfiyBm/BtIdkcpZnSU"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPAsRdVYK0077cdtavmrRr6akrI68T1EDY4Hfv4+W86J teutat3s@ryzensun"
];
users.mutableUsers = false;
networking.firewall.enable = false;