4 ms·
The question is if there actually _is_ a rich ecosystem of such libraries - similar to the rich ecosystem of Maven plugins.
by mkleczek 3y ago
The question is if there actually _is_ a rich ecosystem of such libraries - similar to the rich ecosystem of Maven plugins.
- georgyo 3y agoI think something got lost along the way. Nix does not replace maven, you call maven from nix. https://ryantm.github.io/nixpkgs/languages-frameworks/maven/ https://ryantm.github.io/nixpkgs/languages-frameworks/maven/ nix is a build tool a similae way that docker is a build tool. You define build scripts that call the tools you already use. The major difference is that a docker file gives you no way tl be sure you can reproduce that build in the future. A flake on the other hand gives you a high degree of trust.
- mkleczek 3y agoNothing got lost: both Nix and Maven are dependency management tools. Both are also build tools. The difference is that Maven was created as a Java build tool (and it stayed that way in general). What we have today is that there is a multitude of dependency managers and - what's worse - all of them are _also_ build tools targeted at specific language. Nix has a unique position because it is not language specific. Where it is lacking is missing standards and reusable libraries that would simplify common tasks. I am comparing to Maven because I am looking for multi-platform Maven alternative. There is Bazel but its dependency management is non-existent. There is Buck2 which is great in theory but the lack of ecosystem makes it a non-starter. Nix is the only contender in the space that offers almost everything and has a chance to become a de-facto standard of software delivery thanks to this. What's missing though is... easy to use canned solutions similar to maven plugins. EDIT: grammar
- georgyo 3y agoIn the link I referenced, it shows you how to use maven plugins in nix. Nix has composable, reusable, and shareable functions. Nix is a full, be awkward, programming language. You'll find functions and flakes for nearly everything you might want to do. An example of one that is more plugin like is sops-nix. Though have never used maven or maven plugins, I may be missing your overall point.
- mkleczek 3y agoIn Java/Maven ecosystem a lot of things is simple because there is a huge ecosystem of easy to integrate libraries/plugins. Want a packaged spring boot application? There is a plugin for that. Want to package it in a container image? Just add a plugin dependency. Want to build an RPM or deb package? Add another two plugin dependencies. All various artifacts are going to be uploaded to a repository and made available as dependencies. Missing a specific plugin? You can easily implement it in Java as a module and use it inside your project (and expose it as a standalone artifact as well). I can’t find anything similar in Nix ecosystem. Having a language allowing for this is not the same as having solutions already available.
- elbear 3y agoI was reading this thread and now I finally understood what you mean by plugins. Plugins kind of exist in Nix, except they're not called that. They are functions available in some specific module. For example, `dockerTools` provides different functions like creating an image and other things. There is a module of fetchers, functions that retrieve source files from GitHub and other sources. But I don't think there are many language-specific functions, like the ones you are describing. I can't think of any, except for the ones that build a Nix package from a language-specific package.
- mkleczek 3y agoThere are attempts like https://flake.parts/ https://flake.parts/ or https://github.com/nix-community/flakelight https://github.com/nix-community/flakelight Their aim is to create an ecosystem of reusable Nix libraries. But it is tiny.
- elbear 3y agoYes, I know about flake.parts (didn't know about the other one). But I'm not aware of the kind of libraries you mentioned. There's FlakeHub[0], which is like a package index for flakes, so maybe we'll start to see there reusable stuff. [0]: https://flakehub.com/flakes https://flakehub.com/flakes