Merge master into staging-next

This commit is contained in:
github-actions[bot]
2024-02-22 06:01:10 +00:00
committed by GitHub
24 changed files with 959 additions and 919 deletions
+3 -1
View File
@@ -238,7 +238,9 @@ in
# this should not run because /etc is mounted via a systemd mount unit
# instead. To a large extent this mimics what composefs does. Because
# it's relatively simple, however, we avoid the composefs dependency.
if [[ ! $IN_NIXOS_SYSTEMD_STAGE1 ]]; then
# Since this script is not idempotent, it should not run when etc hasn't
# changed.
if [[ ! $IN_NIXOS_SYSTEMD_STAGE1 ]] && [[ "${config.system.build.etc}/etc" != "$(readlink -f /run/current-system/etc)" ]]; then
echo "remounting /etc..."
tmpMetadataMount=$(mktemp --directory)
@@ -14,7 +14,9 @@
options = { };
config = {
config = let
initScript = if config.boot.initrd.systemd.enable then "prepare-root" else "init";
in {
boot.isContainer = true;
boot.postBootCommands =
''
@@ -41,7 +43,7 @@
contents = [
{
source = config.system.build.toplevel + "/init";
source = config.system.build.toplevel + "/${initScript}";
target = "/sbin/init";
}
# Technically this is not required for lxc, but having also make this configuration work with systemd-nspawn.
@@ -65,7 +67,7 @@
pseudoFiles = [
"/sbin d 0755 0 0"
"/sbin/init s 0555 0 0 ${config.system.build.toplevel}/init"
"/sbin/init s 0555 0 0 ${config.system.build.toplevel}/${initScript}"
"/dev d 0755 0 0"
"/proc d 0555 0 0"
"/sys d 0555 0 0"
@@ -74,7 +76,7 @@
system.build.installBootLoader = pkgs.writeScript "install-lxd-sbin-init.sh" ''
#!${pkgs.runtimeShell}
${pkgs.coreutils}/bin/ln -fs "$1/init" /sbin/init
${pkgs.coreutils}/bin/ln -fs "$1/${initScript}" /sbin/init
'';
# networkd depends on this, but systemd module disables this for containers
@@ -83,7 +85,7 @@
systemd.packages = [ pkgs.distrobuilder.generator ];
system.activationScripts.installInitScript = lib.mkForce ''
ln -fs $systemConfig/init /sbin/init
ln -fs $systemConfig/${initScript} /sbin/init
'';
};
}
@@ -20,11 +20,17 @@
};
testScript = ''
machine.succeed("findmnt --kernel --type overlay /etc")
machine.fail("stat /etc/newgen")
with subtest("/etc is mounted as an overlay"):
machine.succeed("findmnt --kernel --type overlay /etc")
machine.succeed("/run/current-system/specialisation/new-generation/bin/switch-to-configuration switch")
with subtest("switching to the same generation"):
machine.succeed("/run/current-system/bin/switch-to-configuration test")
assert machine.succeed("cat /etc/newgen") == "newgen"
with subtest("switching to a new generation"):
machine.fail("stat /etc/newgen")
machine.succeed("/run/current-system/specialisation/new-generation/bin/switch-to-configuration switch")
assert machine.succeed("cat /etc/newgen") == "newgen"
'';
}
+12 -6
View File
@@ -18,13 +18,19 @@
};
testScript = ''
machine.succeed("findmnt --kernel --type overlay /etc")
machine.fail("stat /etc/newgen")
machine.succeed("echo -n 'mutable' > /etc/mutable")
with subtest("/etc is mounted as an overlay"):
machine.succeed("findmnt --kernel --type overlay /etc")
machine.succeed("/run/current-system/specialisation/new-generation/bin/switch-to-configuration switch")
with subtest("switching to the same generation"):
machine.succeed("/run/current-system/bin/switch-to-configuration test")
assert machine.succeed("cat /etc/newgen") == "newgen"
assert machine.succeed("cat /etc/mutable") == "mutable"
with subtest("switching to a new generation"):
machine.fail("stat /etc/newgen")
machine.succeed("echo -n 'mutable' > /etc/mutable")
machine.succeed("/run/current-system/specialisation/new-generation/bin/switch-to-configuration switch")
assert machine.succeed("cat /etc/newgen") == "newgen"
assert machine.succeed("cat /etc/mutable") == "mutable"
'';
}
+2 -2
View File
@@ -1,11 +1,11 @@
import ../make-test-python.nix ({ pkgs, lib, ... } :
import ../make-test-python.nix ({ pkgs, lib, extra ? {}, ... } :
let
releases = import ../../release.nix {
configuration = {
# Building documentation makes the test unnecessarily take a longer time:
documentation.enable = lib.mkForce false;
};
} // extra;
};
container-image-metadata = releases.lxdContainerMeta.${pkgs.stdenv.hostPlatform.system};
+5 -1
View File
@@ -5,7 +5,11 @@
handleTestOn,
}:
{
container = import ./container.nix { inherit system pkgs; };
container-old-init = import ./container.nix { inherit system pkgs; };
container-new-init = import ./container.nix { inherit system pkgs; extra = {
# Enable new systemd init
boot.initrd.systemd.enable = true;
}; };
lxd-to-incus = import ./lxd-to-incus.nix { inherit system pkgs; };
preseed = import ./preseed.nix { inherit system pkgs; };
socket-activated = import ./socket-activated.nix { inherit system pkgs; };
@@ -3,22 +3,27 @@
, autoreconfHook
, pkg-config
, openssl
, unstableGitUpdater
}:
stdenv.mkDerivation rec {
pname = "btcdeb";
version = "unstable-2022-04-03";
version = "0.3.20-unstable-2024-02-06";
src = fetchFromGitHub {
owner = "bitcoin-core";
repo = "btcdeb";
rev = "3ba1ec7f4d37f7d2ff0544403465004c6e12036e";
hash = "sha256-l/PGXXX288mnoSFZ32t2Xd13dC6JCU5wDHoDxb+fcp0=";
rev = "b9288fc3371eb1d9be0cae2549be25de66659be8";
hash = "sha256-IieLNMA3m6g2Kn7g3iewmUL9c+meMR4hrrwVYqNZoh8=";
};
nativeBuildInputs = [ pkg-config autoreconfHook ];
buildInputs = [ openssl ];
enableParallelBuilding = true;
passthru.updateScript = unstableGitUpdater {};
meta = with lib; {
description = "Bitcoin Script Debugger";
homepage = "https://github.com/bitcoin-core/btcdeb";
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -33,11 +33,11 @@
firefox-beta = buildMozillaMach rec {
pname = "firefox-beta";
version = "123.0b9";
version = "124.0b2";
applicationName = "Mozilla Firefox Beta";
src = fetchurl {
url = "mirror://mozilla/firefox/releases/${version}/source/firefox-${version}.source.tar.xz";
sha512 = "87c564bf30e93a544fe65cf5eb0d46e2e992558df36d2808eee990772648c193ab051120a3400dacd6973dde8afbec9bea0f3b0b4adc923a5fea6f4005b46210";
sha512 = "a98bedcf2bb6e58a20b4ab49d53db0899ed7c6589b20266522521c3db5c583807be1d536a580a1b42dd5783c0d81d95c4f42be6a157fb08a588447ca4fa21dde";
};
meta = {
@@ -62,13 +62,13 @@
firefox-devedition = buildMozillaMach rec {
pname = "firefox-devedition";
version = "123.0b9";
version = "124.0b2";
applicationName = "Mozilla Firefox Developer Edition";
requireSigning = false;
branding = "browser/branding/aurora";
src = fetchurl {
url = "mirror://mozilla/devedition/releases/${version}/source/firefox-${version}.source.tar.xz";
sha512 = "63b3e99fab51a219c537baef4f613c1efd174d8c567d7e77007b901d0800b88cfe872b56293473e5406aef15a5c6ab35b9ddf9966a447c001ca16e92469d984f";
sha512 = "a65a522130d95ef5ffd4ee351c79a64517abdd60a80a74e66b147f6b179613240ab2abd6eb9cd939dfe31dd5b971773e882eb234a358e9546ab0272d8ed94145";
};
meta = {
@@ -32,18 +32,19 @@ GEM
rake
google-cloud-env (2.1.1)
faraday (>= 1.0, < 3.a)
googleauth (1.9.2)
googleauth (1.11.0)
faraday (>= 1.0, < 3.a)
google-cloud-env (~> 2.1)
jwt (>= 1.4, < 3.0)
multi_json (~> 1.11)
os (>= 0.9, < 2.0)
signet (>= 0.16, < 2.a)
http (5.1.1)
http (5.2.0)
addressable (~> 2.8)
base64 (~> 0.1)
http-cookie (~> 1.0)
http-form_data (~> 2.2)
llhttp-ffi (~> 0.4.0)
llhttp-ffi (~> 0.5.0)
http-accept (1.7.0)
http-cookie (1.0.5)
domain_name (~> 0.5)
@@ -53,7 +54,7 @@ GEM
jsonpath (1.1.5)
multi_json
jwt (2.7.1)
krane (3.4.2)
krane (3.5.0)
activesupport (>= 5.0)
colorize (~> 0.8)
concurrent-ruby (~> 1.1)
@@ -69,13 +70,13 @@ GEM
jsonpath (~> 1.0)
recursive-open-struct (~> 1.1, >= 1.1.1)
rest-client (~> 2.0)
llhttp-ffi (0.4.0)
llhttp-ffi (0.5.0)
ffi-compiler (~> 1.0)
rake (~> 13.0)
mime-types (3.5.2)
mime-types-data (~> 3.2015)
mime-types-data (3.2023.1205)
minitest (5.21.2)
mime-types-data (3.2024.0206)
minitest (5.22.2)
multi_json (1.15.0)
mutex_m (0.2.0)
net-http (0.4.1)
@@ -91,7 +92,7 @@ GEM
mime-types (>= 1.16, < 4.0)
netrc (~> 0.8)
ruby2_keywords (0.0.5)
signet (0.18.0)
signet (0.19.0)
addressable (~> 2.8)
faraday (>= 0.17.5, < 3.a)
jwt (>= 1.5, < 3.0)
@@ -162,21 +162,21 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1qpvsvcag90nw2fjws12m96hsicpmcv04v35j9aiik9rmxxvlk9h";
sha256 = "15knmk2fcyqxdpppc3wb5lc6xapbx5hax4lma0iclc2p55aa2kkl";
type = "gem";
};
version = "1.9.2";
version = "1.11.0";
};
http = {
dependencies = ["addressable" "http-cookie" "http-form_data" "llhttp-ffi"];
dependencies = ["addressable" "base64" "http-cookie" "http-form_data" "llhttp-ffi"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1bzb8p31kzv6q5p4z5xq88mnqk414rrw0y5rkhpnvpl29x5c3bpw";
sha256 = "05b1khh7wxga9jviy9yi8z1nckxbm3svlzv40y0zvq3nag3d77mr";
type = "gem";
};
version = "5.1.1";
version = "5.2.0";
};
http-accept = {
groups = ["default"];
@@ -247,10 +247,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0lgl5x8b0wwih6h609sglp5zfdg8ymbmh8yv4vp1lcxvf885riyz";
sha256 = "1j4vrb55akvpg08vfwvfawf9qbjv9dyiw32g57va89yq371qjasp";
type = "gem";
};
version = "3.4.2";
version = "3.5.0";
};
kubeclient = {
dependencies = ["http" "jsonpath" "recursive-open-struct" "rest-client"];
@@ -269,10 +269,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "00dh6zmqdj59rhcya0l4b9aaxq6n8xizfbil93k0g06gndyk5xz5";
sha256 = "1yph78m8w8l6i9833fc7shy5krk4mnqjc7ys0bg9kgxw8jnl0vs9";
type = "gem";
};
version = "0.4.0";
version = "0.5.0";
};
mime-types = {
dependencies = ["mime-types-data"];
@@ -290,20 +290,20 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "08ja4k3yjczzz7n6rp1f3qvz4v45bc6fy04clnvdxbq3kfr7jk4c";
sha256 = "0zpn5brxdf5akh7ij511bkrd30fxd7697shmxxszahqj9m62zvn5";
type = "gem";
};
version = "3.2023.1205";
version = "3.2024.0206";
};
minitest = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1hmszq7p4zp2ha3qjv1axam602rgnqhlz5zfzil7yk4nvfwcv1bn";
sha256 = "0667vf0zglacry87nkcl3ns8421aydvz71vfa3g3yjhiq8zh19f5";
type = "gem";
};
version = "5.21.2";
version = "5.22.2";
};
multi_json = {
groups = ["default"];
@@ -413,10 +413,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0fzakk5y7zzii76zlkynpp1c764mzkkfg4mpj18f5pf2xp1aikb6";
sha256 = "0cfxa11wy1nv9slmnzjczkdgld0gqizajsb03rliy53zylwkjzsk";
type = "gem";
};
version = "0.18.0";
version = "0.19.0";
};
statsd-instrument = {
groups = ["default"];
@@ -167,8 +167,8 @@ rec {
mkTerraform = attrs: pluggable (generic attrs);
terraform_1 = mkTerraform {
version = "1.7.3";
hash = "sha256-/NnpmZLCEoSwJYsHmMxQ8HRxzsyCm91oc6T+mcsaNv0=";
version = "1.7.4";
hash = "sha256-LF8lFDZtDowHqa0z/TCVKznxn15Msha/af8p/w0bI1k=";
vendorHash = "sha256-DI4YTjdFFvfby8ExEY3KoK4J9YKK5LPpMbelzFMDVVs=";
patches = [ ./provider-path-0_15.patch ];
passthru = {
@@ -2,16 +2,16 @@
buildGoModule rec {
pname = "protonmail-bridge";
version = "3.8.2";
version = "3.9.1";
src = fetchFromGitHub {
owner = "ProtonMail";
repo = "proton-bridge";
rev = "v${version}";
hash = "sha256-I42f7cV5QsUIPkcc6YDTboS4/LrObHAE3w9S48jsaKM=";
hash = "sha256-osQIx67KWEraVlB+J6HmC44uDTF1HKUytBS6eilp4jI=";
};
vendorHash = "sha256-6xofWf5WFE1wuCwx8iOMcC3gxDzZB3uw3WErLWluBM8=";
vendorHash = "sha256-5XU/qyYdk8nufyQbyjkjUEWzt+RTVYzsdyKU77qrgHc=";
nativeBuildInputs = [ pkg-config ];
+3 -3
View File
@@ -19,15 +19,15 @@
let
pname = "czkawka";
version = "6.1.0";
version = "7.0.0";
src = fetchFromGitHub {
owner = "qarmin";
repo = "czkawka";
rev = version;
hash = "sha256-uKmiBNwuu3Eduf0v3p2VYYNf6mgxJTBUsYs+tKZQZys=";
hash = "sha256-SOWtLmehh1F8SoDQ+9d7Fyosgzya5ZztCv8IcJZ4J94=";
};
cargoHash = "sha256-iBO99kpITVl7ySlXPkEg2YecS1lonVx9CbKt9WI180s=";
cargoHash = "sha256-GOX7V6NLEMP06nMeRZINwcWCaHwK6T3nkRKl4e25DPg=";
in
rustPlatform.buildRustPackage {
inherit pname version src cargoHash;
+3 -3
View File
@@ -9,18 +9,18 @@
buildGoModule rec {
pname = "shopware-cli";
version = "0.4.23";
version = "0.4.24";
src = fetchFromGitHub {
repo = "shopware-cli";
owner = "FriendsOfShopware";
rev = version;
hash = "sha256-miuZsrIPvdYdEu9qc/qRxcNxfPLxCHxokywhLgplehY=";
hash = "sha256-eHMPiQJDpTyFfNAJHLMOzW1hb2V8NPoyc7/xsjNujkc=";
};
nativeBuildInputs = [ installShellFiles makeWrapper ];
nativeCheckInputs = [ git dart-sass ];
vendorHash = "sha256-JgeyIj4YfnHZm2u+Gy3taX+WoFwe3jfqkVOO63adzgU=";
vendorHash = "sha256-1oyNynkKrIrg7HmLFawhz0jbgBGFPoX+ZgFL3/scoEE=";
postInstall = ''
export HOME="$(mktemp -d)"
+1 -3
View File
@@ -270,9 +270,7 @@ stdenv.mkDerivation (finalAttrs: {
popd # autotest
'';
passthru.tests = {
gdal = callPackage ./tests.nix { gdal = finalAttrs.finalPackage; };
};
passthru.tests = callPackage ./tests.nix { gdal = finalAttrs.finalPackage; };
__darwinAllowLocalNetworking = true;
+31 -23
View File
@@ -1,34 +1,40 @@
{ runCommand, gdal, jdk }:
{ runCommand, gdal, jdk, lib, testers }:
let
inherit (gdal) pname version;
in
runCommand "${pname}-tests" { meta.timeout = 60; }
''
# test version
${gdal}/bin/ogrinfo --version \
| grep 'GDAL ${version}'
{
ogrinfo-version = testers.testVersion {
package = gdal;
command = "ogrinfo --version";
};
${gdal}/bin/gdalinfo --version \
| grep 'GDAL ${version}'
gdalinfo-version = testers.testVersion {
package = gdal;
command = "gdalinfo --version";
};
# test formats
${gdal}/bin/ogrinfo --formats \
ogrinfo-format-geopackage = runCommand "${pname}-ogrinfo-format-geopackage" { } ''
${lib.getExe' gdal "ogrinfo"} --formats \
| grep 'GPKG.*GeoPackage'
touch $out
'';
${gdal}/bin/gdalinfo --formats \
gdalinfo-format-geotiff = runCommand "${pname}-gdalinfo-format-geotiff" { } ''
${lib.getExe' gdal "gdalinfo"} --formats \
| grep 'GTiff.*GeoTIFF'
touch $out
'';
# test vector file
vector-file = runCommand "${pname}-vector-file" { } ''
echo -e "Latitude,Longitude,Name\n48.1,0.25,'Test point'" > test.csv
${gdal}/bin/ogrinfo ./test.csv
${lib.getExe' gdal "ogrinfo"} ./test.csv
touch $out
'';
# test raster file
${gdal}/bin/gdal_create \
raster-file = runCommand "${pname}-raster-file" { } ''
${lib.getExe' gdal "gdal_create"} \
-a_srs "EPSG:4326" \
-of GTiff \
-ot UInt16 \
@@ -38,9 +44,11 @@ runCommand "${pname}-tests" { meta.timeout = 60; }
-co COMPRESS=LZW \
test.tif
${gdal}/bin/gdalinfo ./test.tif
${lib.getExe' gdal "gdalinfo"} ./test.tif
touch $out
'';
# test java bindings
java-bindings = runCommand "${pname}-java-bindings" { } ''
cat <<EOF > main.java
import org.gdal.gdal.gdal;
class Main {
@@ -49,7 +57,7 @@ runCommand "${pname}-tests" { meta.timeout = 60; }
}
}
EOF
${jdk}/bin/java -Djava.library.path=${gdal}/lib/ -cp ${gdal}/share/java/gdal-${version}.jar main.java
${lib.getExe jdk} -Djava.library.path=${gdal}/lib/ -cp ${gdal}/share/java/gdal-${version}.jar main.java
touch $out
''
'';
}
@@ -26,7 +26,7 @@
buildPythonPackage rec {
pname = "openai";
version = "1.12.0";
version = "1.13.2";
pyproject = true;
disabled = pythonOlder "3.7.1";
@@ -35,7 +35,7 @@ buildPythonPackage rec {
owner = "openai";
repo = "openai-python";
rev = "refs/tags/v${version}";
hash = "sha256-v623+dxttNDAfVh+2h64SqT4FvaOGRe0zvHCchIy/Wg=";
hash = "sha256-3otPmMVV/Wx7k/oec5c1r6GcZGzhMSKifJB8S5nBSZw=";
};
nativeBuildInputs = [
@@ -53,7 +53,7 @@
buildPythonPackage rec {
pname = "transformers";
version = "4.37.2";
version = "4.38.0";
format = "setuptools";
disabled = pythonOlder "3.8";
@@ -62,7 +62,7 @@ buildPythonPackage rec {
owner = "huggingface";
repo = "transformers";
rev = "refs/tags/v${version}";
hash = "sha256-O8A+6f6Qwr/OqwzA3i3MPCmcwg1BoQY6mvhozrLz16Y=";
hash = "sha256-2WcRZz8ZuaKbdMM/XhGYzyH54FgKi644ek9xxQd8bPI=";
};
propagatedBuildInputs = [
+8 -4
View File
@@ -1,4 +1,6 @@
{ lib, stdenv, fetchFromGitHub, makeDesktopItem, makeWrapper, cmake, libjpeg, zlib, libpng, libGL, SDL2 }:
{ lib, stdenv, fetchFromGitHub, makeDesktopItem, makeWrapper, cmake, libjpeg, zlib, libpng, libGL, SDL2
, unstableGitUpdater
}:
let
jamp = makeDesktopItem rec {
@@ -30,13 +32,13 @@ let
};
in stdenv.mkDerivation {
pname = "OpenJK";
version = "unstable-2022-01-30";
version = "0-unstable-2024-02-20";
src = fetchFromGitHub {
owner = "JACoders";
repo = "OpenJK";
rev = "235fb9e1a9c4537a603b2e54e444327d20d198a3";
sha256 = "sha256-DqP6wnu5sE7lQJGEdsEPOc6FIaJjqxt5ANKZ5eiabC4=";
rev = "1e8a7998ca2fe434daebb41d586ac3cd5296433a";
sha256 = "sha256-TKJNaz+oWNYyReFZVefg1frPXyd3Yl96JDklp1qY1to=";
};
dontAddPrefix = true;
@@ -79,6 +81,8 @@ in stdenv.mkDerivation {
rm -rf $out/opt
'';
passthru.updateScript = unstableGitUpdater { };
meta = with lib; {
description = "An open-source engine for Star Wars Jedi Academy game";
homepage = "https://github.com/JACoders/OpenJK";
+2 -2
View File
@@ -1,8 +1,8 @@
{ callPackage, ... } @ args:
callPackage ./generic.nix (args // {
version = "8.0.34-29";
hash = "sha256-dO5ciIIAnKj2t+fYhrtnY7MvBThoA+SymBzN8H07giM=";
version = "8.0.35-30";
hash = "sha256-yagqBKU057Gk5pEyT2R3c5DtxNG/+TSPenFgbxUiHPo=";
# includes https://github.com/Percona-Lab/libkmip.git
fetchSubmodules = true;
+3
View File
@@ -195,6 +195,9 @@ let
hash = "sha256-gFfDTc2QWBWHBCycVH1dYlCsWQMVcRZfOBIau+njtDU=";
};
# Not using the normal `(old.patches or []) ++` pattern here to use
# the overridden package's patches, because current nixpkgs's `cryptography`
# has patches that do not apply on this old version.
patches = [
# Fix https://nvd.nist.gov/vuln/detail/CVE-2023-49083 which has no upstream backport.
# See https://github.com/pyca/cryptography/commit/f09c261ca10a31fe41b1262306db7f8f1da0e48a#diff-f5134bf8f3cf0a5cc8601df55e50697acc866c603a38caff98802bd8e17976c5R1893
+6 -5
View File
@@ -19,26 +19,26 @@ let
in
python.pkgs.buildPythonApplication rec {
pname = "esphome";
version = "2023.12.9";
version = "2024.2.0";
pyproject = true;
src = fetchFromGitHub {
owner = pname;
repo = pname;
rev = "refs/tags/${version}";
hash = "sha256-8SHf6cbPYPZctjJgIuEb7eOJVi5hWNONyRnMXK0iBXc=";
hash = "sha256-k8caA5Q4QcP7H1Nn5yvFsfExVwipAlFSb/DphkzYNtU=";
};
nativeBuildInputs = with python.pkgs; [
setuptools
argcomplete
installShellFiles
pythonRelaxDepsHook
];
postPatch = ''
# remove all version pinning (E.g tornado==5.1.1 -> tornado)
sed -i -e "s/==[0-9.]*//" requirements.txt
pythonRelaxDeps = true;
postPatch = ''
# drop coverage testing
sed -i '/--cov/d' pytest.ini
'';
@@ -60,6 +60,7 @@ python.pkgs.buildPythonApplication rec {
cryptography
esphome-dashboard
kconfiglib
icmplib
paho-mqtt
pillow
platformio