Nix Forge - conda-forge alternative PoC

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
  • Out-of-box container image output
  • Web UI
  • Simple for self hosting

Source code: GitHub - imincik/nix-forge: Simplified Nix packaging with maximum added value.

Have a nice day.

7 Likes

Really nice, congrats.
Great UI

1 Like

Flake Forge just got initial support for multi-container applications output. Check out Web UI .

1 Like

Great,

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.

Hi Hugo,

Very good point. I started implementation in forge: attrset instead of list to configure packages and apps by imincik · Pull Request #21 · imincik/flake-forge · GitHub (for now only implemented for apps).

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 really like this comment :slight_smile:

Thank you very much for your comments.

At the end I finished with other idea . Now, package configuration can be simple as this.

1 Like

Thanks for fixing my bugs.

Does the option browser have a stand alone version :wink:

I would like to incorporate it for my own options

Thanks for fixing my bugs.

Thanks for reporting them :slight_smile:

Does the option browser have a stand alone version :wink:

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).

Nix Forge got plenty of UI improvements and new Recipe builder/wizard UI .