I want to share very early version of my implementation of a simple, self hosted software distribution system which can work as a alternative to conda-forge.
Main features:
Build process configuration using simple (conda-forge style) language
I have a personal opinion about list in modules, they aren’t extensible, unless you write your own merge algorithm.
I mean:
Module A
{
forge.apps = [
{
name = "python-web";
version = "1.0.0";
description = "Simple web application with database backend.";
}
];
}
Module B
{
forge.apps = [
{
name = "python-web";
version = "1.0.2";
description = "Simple web application with database backend.";
}
];
}
is forge.apps = ["python-web@1.0.0" "python-web@1.0.2"];
But if you change to “< name >” (lib.types.attrsOf )
Module A
{
forge.apps.python-web = {
version = lib.mkDefault "1.0.0";
description = "Simple web application with database backend.";
};
}
Module B
{
forge.apps.python-web = {
version = "1.0.2";
};
}
is forge.apps = ["python-web@1.0.2"]; (in reality forge.apps.python-web but you could use lib.attrsets.mapAttrsToList)
The issue with this, is it usually sorts by name, but I would prefer having this form with a “priority” field, and use lib.lists.sort if it matters. In this case, we could also create an “enable” field if other module would be able to ‘remove’ it.
It also let me write in single line, which I prefer because a think OPS guys would think it is an java.properties similar file:
# I prefer this
{
forge.apps.python-web.version = "1.0.0";
forge.apps.python-web.description = "Simple web application with database backend.";
}
# Than this
{
forge.apps.python-web = {
version = "1.0.0";
description = "Simple web application with database backend.";
};
}
# But couldn't change this
{
forge.apps = [
{
name = "python-web";
version = "1.0.2";
description = "Simple web application with database backend.";
}
];
}
# Except to this, but doesn't help
{
forge.apps = lib.attrsets.mapAttrsToList (k: v: { name = k;} // v) {
python-web.version = "1.0.0";
python-web.description = "Simple web application with database backend.";
};
}
And this is a personal opinion, I have zero data that suggest my preferred form is better.
Does the option browser have a stand alone version
It is separate app, but it wouldn’t work for your without some small modifications (remove Nix Forge specific grouping of options parameters and PACKAGES and APPS categories).