nixos 25.11 #10

Merged
xjix merged 8 commits from nixos-25.11 into main 2025-12-04 04:29:56 +01:00

View file

@ -5,7 +5,7 @@ eventually as a tool for the decentralized management of the public mesh
network in LA county by local volunteers. *minibase is not a linux
distribution*, just a package set.
[no-se-vende]: https://github.com/curufuin/No-Se-Vende-Mesh?tab=readme-ov-file#no-se-vende-mesh
[no-se-vende]: https://null.media/no-se-vende/
contact a volunteer for more information. make sure you are not sitting or
standing on your informational flyer.

243
flake.lock generated
View file

@ -1,12 +1,45 @@
{
"nodes": {
"attic": {
"inputs": {
"crane": [
"lanzaboote",
"crane"
],
"flake-compat": [
"lanzaboote",
"flake-compat"
],
"flake-parts": [
"flake-parts"
],
"nix-github-actions": "nix-github-actions",
"nixpkgs": [
"nixpkgs"
],
"nixpkgs-stable": "nixpkgs-stable"
},
"locked": {
"lastModified": 1758711588,
"narHash": "sha256-0nZlCCDC5PfndsQJXXtcyrtrfW49I3KadGMDlutzaGU=",
"owner": "zhaofengli",
"repo": "attic",
"rev": "12cbeca141f46e1ade76728bce8adc447f2166c6",
"type": "github"
},
"original": {
"owner": "zhaofengli",
"repo": "attic",
"type": "github"
}
},
"crane": {
"locked": {
"lastModified": 1731098351,
"narHash": "sha256-HQkYvKvaLQqNa10KEFGgWHfMAbWBfFp+4cAgkut+NNE=",
"lastModified": 1754269165,
"narHash": "sha256-0tcS8FHd4QjbCVoxN9jI+PjHgA4vc/IjkUSp+N3zy0U=",
"owner": "ipetkov",
"repo": "crane",
"rev": "ef80ead953c1b28316cc3f8613904edc2eb90c28",
"rev": "444e81206df3f7d92780680e45858e31d2f07a08",
"type": "github"
},
"original": {
@ -15,6 +48,28 @@
"type": "github"
}
},
"dream2nix": {
"inputs": {
"nixpkgs": [
"nixpkgs"
],
"purescript-overlay": "purescript-overlay",
"pyproject-nix": "pyproject-nix"
},
"locked": {
"lastModified": 1764021028,
"narHash": "sha256-4OlkDA0yJyqt5iTX9NqtHNghvkWNzYqmtX7FxDmEXt4=",
"owner": "nix-community",
"repo": "dream2nix",
"rev": "ee20942e4524d3458a91108716c847a2d4299d2e",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "dream2nix",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
@ -31,6 +86,22 @@
"type": "github"
}
},
"flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1747046372,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
@ -78,20 +149,35 @@
]
},
"locked": {
"lastModified": 1763992789,
"narHash": "sha256-WHkdBlw6oyxXIra/vQPYLtqY+3G8dUVZM8bEXk0t8x4=",
"lastModified": 1764776959,
"narHash": "sha256-d+5CGloq7Lo1u2SkzhF8oiOdUc6Z5emh22nTXUB9CFA=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "44831a7eaba4360fb81f2acc5ea6de5fde90aaa3",
"rev": "e1680d594a9281651cbf7d126941a8c8e2396183",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-25.05",
"ref": "release-25.11",
"repo": "home-manager",
"type": "github"
}
},
"impermanence": {
"locked": {
"lastModified": 1737831083,
"narHash": "sha256-LJggUHbpyeDvNagTUrdhe/pRVp4pnS6wVKALS782gRI=",
"owner": "nix-community",
"repo": "impermanence",
"rev": "4b3e914cdf97a5b536a889e939fb2fd2b043a170",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "impermanence",
"type": "github"
}
},
"import-tree": {
"locked": {
"lastModified": 1752730890,
@ -108,7 +194,7 @@
"lanzaboote": {
"inputs": {
"crane": "crane",
"flake-compat": "flake-compat",
"flake-compat": "flake-compat_2",
"flake-parts": [
"flake-parts"
],
@ -119,20 +205,41 @@
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1737639419,
"narHash": "sha256-AEEDktApTEZ5PZXNDkry2YV2k6t0dTgLPEmAZbnigXU=",
"lastModified": 1762205063,
"narHash": "sha256-If6vQ+KvtKs3ARBO9G3l+4wFSCYtRBrwX1z+I+B61wQ=",
"owner": "nix-community",
"repo": "lanzaboote",
"rev": "a65905a09e2c43ff63be8c0e86a93712361f871e",
"rev": "88b8a563ff5704f4e8d8e5118fb911fa2110ca05",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "v0.4.2",
"ref": "v0.4.3",
"repo": "lanzaboote",
"type": "github"
}
},
"nix-github-actions": {
"inputs": {
"nixpkgs": [
"attic",
"nixpkgs"
]
},
"locked": {
"lastModified": 1737420293,
"narHash": "sha256-F1G5ifvqTpJq7fdkT34e/Jy9VCyzd5XfJ9TO8fHhJWE=",
"owner": "nix-community",
"repo": "nix-github-actions",
"rev": "f4158fa080ef4503c8f4c820967d946c2af31ec9",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nix-github-actions",
"type": "github"
}
},
"nixlib": {
"locked": {
"lastModified": 1736643958,
@ -156,11 +263,11 @@
]
},
"locked": {
"lastModified": 1751903740,
"narHash": "sha256-PeSkNMvkpEvts+9DjFiop1iT2JuBpyknmBUs0Un0a4I=",
"lastModified": 1764234087,
"narHash": "sha256-NHF7QWa0ZPT8hsJrvijREW3+nifmF2rTXgS2v0tpcEA=",
"owner": "nix-community",
"repo": "nixos-generators",
"rev": "032decf9db65efed428afd2fa39d80f7089085eb",
"rev": "032a1878682fafe829edfcf5fdfad635a2efe748",
"type": "github"
},
"original": {
@ -171,16 +278,16 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1763948260,
"narHash": "sha256-dY9qLD0H0zOUgU3vWacPY6Qc421BeQAfm8kBuBtPVE0=",
"lastModified": 1764522689,
"narHash": "sha256-SqUuBFjhl/kpDiVaKLQBoD8TLD+/cTUzzgVFoaHrkqY=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "1c8ba8d3f7634acac4a2094eef7c32ad9106532c",
"rev": "8bb5646e0bed5dbd3ab08c7a7cc15b75ab4e1d0f",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-25.05",
"ref": "nixos-25.11",
"repo": "nixpkgs",
"type": "github"
}
@ -202,16 +309,16 @@
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1730741070,
"narHash": "sha256-edm8WG19kWozJ/GqyYx2VjW99EdhjKwbY3ZwdlPAAlo=",
"lastModified": 1751741127,
"narHash": "sha256-t75Shs76NgxjZSgvvZZ9qOmz5zuBE8buUaYD28BMTxg=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "d063c1dd113c91ab27959ba540c0d9753409edf3",
"rev": "29e290002bfff26af1db6f64d070698019460302",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-24.05",
"ref": "nixos-25.05",
"repo": "nixpkgs",
"type": "github"
}
@ -226,15 +333,14 @@
"nixpkgs": [
"lanzaboote",
"nixpkgs"
],
"nixpkgs-stable": "nixpkgs-stable"
]
},
"locked": {
"lastModified": 1731363552,
"narHash": "sha256-vFta1uHnD29VUY4HJOO/D6p6rxyObnf+InnSMT4jlMU=",
"lastModified": 1750779888,
"narHash": "sha256-wibppH3g/E2lxU43ZQHC5yA/7kIKLGxVEnsnVK1BtRg=",
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"rev": "cd1af27aa85026ac759d5d3fccf650abe7e1bbf0",
"rev": "16ec914f6fb6f599ce988427d9d94efddf25fe6d",
"type": "github"
},
"original": {
@ -243,10 +349,57 @@
"type": "github"
}
},
"purescript-overlay": {
"inputs": {
"flake-compat": "flake-compat",
"nixpkgs": [
"dream2nix",
"nixpkgs"
],
"slimlock": "slimlock"
},
"locked": {
"lastModified": 1728546539,
"narHash": "sha256-Sws7w0tlnjD+Bjck1nv29NjC5DbL6nH5auL9Ex9Iz2A=",
"owner": "thomashoneyman",
"repo": "purescript-overlay",
"rev": "4ad4c15d07bd899d7346b331f377606631eb0ee4",
"type": "github"
},
"original": {
"owner": "thomashoneyman",
"repo": "purescript-overlay",
"type": "github"
}
},
"pyproject-nix": {
"inputs": {
"nixpkgs": [
"dream2nix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1752481895,
"narHash": "sha256-luVj97hIMpCbwhx3hWiRwjP2YvljWy8FM+4W9njDhLA=",
"owner": "pyproject-nix",
"repo": "pyproject.nix",
"rev": "16ee295c25107a94e59a7fc7f2e5322851781162",
"type": "github"
},
"original": {
"owner": "pyproject-nix",
"repo": "pyproject.nix",
"type": "github"
}
},
"root": {
"inputs": {
"attic": "attic",
"dream2nix": "dream2nix",
"flake-parts": "flake-parts",
"home-manager": "home-manager",
"impermanence": "impermanence",
"import-tree": "import-tree",
"lanzaboote": "lanzaboote",
"nixos-generators": "nixos-generators",
@ -263,11 +416,11 @@
]
},
"locked": {
"lastModified": 1731897198,
"narHash": "sha256-Ou7vLETSKwmE/HRQz4cImXXJBr/k9gp4J4z/PF8LzTE=",
"lastModified": 1761791894,
"narHash": "sha256-myRIDh+PxaREz+z9LzbqBJF+SnTFJwkthKDX9zMyddY=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "0be641045af6d8666c11c2c40e45ffc9667839b5",
"rev": "59c45eb69d9222a4362673141e00ff77842cd219",
"type": "github"
},
"original": {
@ -276,6 +429,28 @@
"type": "github"
}
},
"slimlock": {
"inputs": {
"nixpkgs": [
"dream2nix",
"purescript-overlay",
"nixpkgs"
]
},
"locked": {
"lastModified": 1688756706,
"narHash": "sha256-xzkkMv3neJJJ89zo3o2ojp7nFeaZc2G0fYwNXNJRFlo=",
"owner": "thomashoneyman",
"repo": "slimlock",
"rev": "cf72723f59e2340d24881fd7bf61cb113b4c407c",
"type": "github"
},
"original": {
"owner": "thomashoneyman",
"repo": "slimlock",
"type": "github"
}
},
"sops-nix": {
"inputs": {
"nixpkgs": [
@ -283,11 +458,11 @@
]
},
"locked": {
"lastModified": 1764021963,
"narHash": "sha256-1m84V2ROwNEbqeS9t37/mkry23GBhfMt8qb6aHHmjuc=",
"lastModified": 1764483358,
"narHash": "sha256-EyyvCzXoHrbL467YSsQBTWWg4sR96MH1sPpKoSOelB4=",
"owner": "Mic92",
"repo": "sops-nix",
"rev": "c482a1c1bbe030be6688ed7dc84f7213f304f1ec",
"rev": "5aca6ff67264321d47856a2ed183729271107c9c",
"type": "github"
},
"original": {

View file

@ -2,11 +2,12 @@
description = "minibase(8) -- the nix/lix base for you";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
flake-parts.url = "github:hercules-ci/flake-parts";
import-tree.url = "https://codeberg.org/xjix/import-tree/archive/main.tar.gz";
impermanence.url = "github:nix-community/impermanence";
lanzaboote = {
url = "github:nix-community/lanzaboote/v0.4.2";
url = "github:nix-community/lanzaboote/v0.4.3";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-parts.follows = "flake-parts";
};
@ -19,7 +20,7 @@
inputs.nixpkgs.follows = "nixpkgs";
};
home-manager = {
url = "github:nix-community/home-manager?ref=release-25.05";
url = "github:nix-community/home-manager?ref=release-25.11";
inputs.nixpkgs.follows = "nixpkgs";
};
terranix = {
@ -27,6 +28,21 @@
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-parts.follows = "flake-parts";
};
dream2nix = {
url = "github:nix-community/dream2nix";
inputs.nixpkgs.follows = "nixpkgs";
};
# microvm = {
# url = "github:microvm-nix/microvm.nix";
# inputs.nixpkgs.follows = "nixpkgs";
# };
attic = {
url = "github:zhaofengli/attic";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-parts.follows = "flake-parts";
inputs.crane.follows = "lanzaboote/crane";
inputs.flake-compat.follows = "lanzaboote/flake-compat";
};
};
outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } (inputs.import-tree ./modules);
}

View file

@ -3,13 +3,6 @@ intro(8) -- welcome to minibase
minibase is a framework for building dependable static infrastructure.
a new approach to the minibase using [flakes] and [lix] for production uses,
aiming to cooperate with [aux.computer] as they get off the ground.
[flakes]: https://nixos.wiki/wiki/flakes
[lix]: https://lix.systems/add-to-config/#flake-based-configurations
[aux.computer]: https://aux.computer/
minibase is NOT a linux distribution, we provide an opinionated set of modules
that you can plug into your existing and future nixos installations. these are
patterns for building secure local network services that you can easily setup
@ -22,19 +15,11 @@ way to gain the needed experience! just don't expect to get everything right on
the first try and only take on responsibilities that you can prove you can
handle.
## organization
we categorize our operations by order of responsibility and aim to promote
self-determination. `stations` are permanent public installations that provide
services to their local area, these are managed by volunteers or a community
interest group. `ships` are independent systems designed to pursue some specific
interest. `entities` are fully mobile devices or systems operable by some `being`.
`entitites` may be registered with either a `station` or a `ship`. a `ship` may
form certain types of peer relationships with a `station` or any other `ship`.
## getting started
a new approach to the minibase using [flakes] and [lix] for production uses,
aiming to cooperate with [aux.computer] as they get off the ground.
before you start deploying, get your local environment running! the best
reference is [installing lix], but linux and macos users can also just use the
following snippet:
@ -43,6 +28,32 @@ following snippet:
curl -sSf -L https://install.lix.systems/lix | sh -s -- install
```
next up, you can create or update a flake with our modules. our docs and modules
are early and incomplete. please check back later.
```
inputs = {
minibase.url = "git+https://git.gay/tomo/minibase";
nixpkgs.follows = "minibase/nixpkgs";
};
outputs = inputs: {
nixosConfigurations.my-machine = inputs.nixpkgs.lib.nixosSystem {
modules = [
inputs.minibase.nixosModules.lix
inputs.minibase.nixosModules.minibase
];
};
};
```
[flakes]: https://nixos.wiki/wiki/flakes
[lix]: https://lix.systems/add-to-config/#flake-based-configurations
[aux.computer]: https://aux.computer/
[installing lix]: https://lix.systems/install/
## device support
We don't currently provide any install media, follow the upstream documentation
for instructions. come back when you have a [working nixos system][install nix].
@ -52,13 +63,10 @@ for instructions. come back when you have a [working nixos system][install nix].
> so we are also interested in efforts like [nixbsd], but we'll wait to see how
> things play out for now.
[installing lix]: https://lix.systems/install/
[install nix]: https://nixos.org/manual/nixos/stable/#ch-installation
[switch to lix]: https://lix.systems/add-to-config/
[nixbsd]: https://git.ix.cyb.red/ar/nixbsd
## device support
> [current works in progress](https://git.ix.cyb.red/pkgs/minibase/issues?q=&type=all&state=open&labels=91)
> access to the development board is restricted. contact a volunteer for access.
@ -72,28 +80,7 @@ the guides are used as a starting point for minibase docs.
all of the devices that we document here are actively used in production using
this repo and the methods outlined in the wiki.
## what the tech?
not to go into too much detail, but these are some of the components that
we're using.
* batman / babeld
* briar
* dark crystal
* deploy-rs
* i2p
* nixos + lix
* openwrt
* secure scuttlebutt
* sops-nix
* yggdrasil
## similar projects
- [freedombone](https://web.archive.org/web/20160714220051/http://freedombone.uk.to/)
## see also
booting(8) containers(8) nextcloud(8) ejabberd(8) hypergate(8) security(8)
security(8) backups(8)

36
man/backups.8.ronn Normal file
View file

@ -0,0 +1,36 @@
backups(8) -- keep it tight
===========================
on a server,
```nix
services.borgbackup.repos = {
# setup *prefixes* for *devices*
jenny = {
allowSubRepos = true;
authorizedKeys = [ config.minibase.keys."root@jenny.home" ];
path = "/var/lib/backup/jenny";
};
};
```
on a client,
```nix
services.borgbackup.jobs = {
home-xj9 = {
doInit = true;
repo = "borg@backuphost:home-xj9";
environment.BORG_RSH = "ssh -i /root/.ssh/id_ed25519";
encryption.mode = "repokey-blake2";
# make two copies of this secret, one here and one in your keepass
encryption.passCommand = "cat ${config.sops.secrets."backup/jenny-home-xj9".path}";
compression = "auto,lzma,6";
startAt = "daily";
persistentTimer = true;
paths = [ "/home/xj9" ];
exclude = [ ];
};
};
```

View file

@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
export RONN_ORGANIZATION="Merveilles"
export RONN_DATE=`date -I`
WEB_STYLE="man,80c,toc,print"
WEB_STYLE="man,toc,print"
OPTS="--style $WEB_STYLE"
mkdir -p dist/out dist/web

View file

@ -6,7 +6,7 @@ eventually as a tool for the decentralized management of the public mesh
network in LA county by local volunteers. read intro(8) for a quick
overview.
[no-se-vende]: https://github.com/curufuin/No-Se-Vende-Mesh?tab=readme-ov-file#no-se-vende-mesh
[no-se-vende]: https://null.media/no-se-vende/
## SECTIONS

24
man/public-mesh.8.ronn Normal file
View file

@ -0,0 +1,24 @@
public-mesh(8) -- free internet for everyone!
=============================================
developed to facilitate [no se vende mesh][no-se-vende] development and
eventually as a tool for the decentralized management of the public mesh
network in LA county by local volunteers. *minibase is not a linux
distribution*, just a package set.
[no-se-vende]: https://null.media/no-se-vende/
contact a volunteer for more information. make sure you are not sitting or
standing on your informational flyer.
## organization
we categorize our operations by order of responsibility and aim to promote
self-determination. `stations` are permanent public installations that provide
services to their local area, these are managed by volunteers or a community
interest group. `ships` are independent systems designed to pursue some specific
interest. `entities` are fully mobile devices or systems operable by some `being`.
`entitites` may be registered with either a `station` or a `ship`. a `ship` may
form certain types of peer relationships with a `station` or any other `ship`.

View file

@ -1,6 +1,10 @@
security(8)
===========
`*.home`
`*.sys`
`*.sat`
## Data Classes
Data is categorized into 5 broad storage classes, ordered from most to least

View file

@ -31,7 +31,7 @@
minibase = config.packages;
};
packages = import ../packages {
inherit (inputs) nixos-generators;
inherit (inputs) nixos-generators dream2nix;
inherit pkgs system;
};
};

View file

@ -1,9 +1,30 @@
{
pkgs,
nixos-generators,
dream2nix,
system,
...
}:
let
callDreamPackage =
p: opts:
dream2nix.lib.evalModules {
packageSets.nixpkgs = pkgs;
modules = [
# Import our actual package definiton as a dream2nix module from ./default.nix
(p + "/default.nix")
{
paths.package = p;
# Aid dream2nix to find the project root. This setup should also works for mono
# repos. If you only have a single project, the defaults should be good enough.
paths.projectRoot = ./../.;
# can be changed to ".git" or "flake.nix" to get rid of .project-root
paths.projectRootFile = "flake.nix";
}
opts
];
};
in
with pkgs;
rec {
# meta
@ -37,4 +58,7 @@ rec {
# net
ether-wake = pkgs.callPackage ./net/ether-wake { };
# iot
msmart = callDreamPackage ./iot/msmart { };
}

View file

@ -0,0 +1,27 @@
{
config,
lib,
dream2nix,
...
}:
{
imports = [ dream2nix.modules.dream2nix.pip ];
deps =
{ nixpkgs, ... }:
{
python = nixpkgs.python3;
};
name = "msmart-ng";
version = "2025.9.0";
buildPythonPackage = {
format = "wheel";
};
paths.lockFile = "lock.${config.deps.stdenv.system}.json";
pip = {
requirementsList = [ "${config.name}==${config.version}" ];
};
}

View file

@ -0,0 +1,88 @@
{
"fetchPipMetadata": {
"sources": {
"anyio": {
"is_direct": false,
"sha256": "dad2376a628f98eeca4881fc56cd06affd18f659b17a747d3ff0307ced94b1bb",
"type": "url",
"url": "https://files.pythonhosted.org/packages/7f/9c/36c5c37947ebfb8c7f22e0eb6e4d188ee2d53aa3880f3f2744fb894f0cb1/anyio-4.12.0-py3-none-any.whl",
"version": "4.12.0"
},
"certifi": {
"is_direct": false,
"sha256": "97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b",
"type": "url",
"url": "https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl",
"version": "2025.11.12"
},
"h11": {
"is_direct": false,
"sha256": "63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86",
"type": "url",
"url": "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl",
"version": "0.16.0"
},
"httpcore": {
"is_direct": false,
"sha256": "2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55",
"type": "url",
"url": "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl",
"version": "1.0.9"
},
"httpx": {
"is_direct": false,
"sha256": "d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad",
"type": "url",
"url": "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl",
"version": "0.28.1"
},
"idna": {
"is_direct": false,
"sha256": "771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea",
"type": "url",
"url": "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl",
"version": "3.11"
},
"msmart-ng": {
"is_direct": false,
"sha256": "2a495a73fe2fd70fb0871275c6faad60231dd732ff72002b5a55fc92e28cb29d",
"type": "url",
"url": "https://files.pythonhosted.org/packages/b1/c2/eba87976e5b5dbe8d7bcdb5f32bbc604c1e20e30044b5c61998268aa39c9/msmart_ng-2025.9.0-py3-none-any.whl",
"version": "2025.9.0"
},
"pycryptodome": {
"is_direct": false,
"sha256": "c8987bd3307a39bc03df5c8e0e3d8be0c4c3518b7f044b0f4c15d1aa78f52575",
"type": "url",
"url": "https://files.pythonhosted.org/packages/5f/e9/a09476d436d0ff1402ac3867d933c61805ec2326c6ea557aeeac3825604e/pycryptodome-3.23.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"version": "3.23.0"
}
},
"targets": {
"default": {
"anyio": [
"idna"
],
"certifi": [],
"h11": [],
"httpcore": [
"certifi",
"h11"
],
"httpx": [
"anyio",
"certifi",
"httpcore",
"idna"
],
"idna": [],
"msmart-ng": [
"httpx",
"pycryptodome"
],
"pycryptodome": []
}
}
},
"invalidationHash": "d5dbacbc11ed0b69b65ce30d25faa61f75de8457848b2f3c0b66f8b02c334b14"
}