If you're a NixOS user, you should have definitely heard about Nixpkgs, a huge collection of software packages. It allows you to install almost anything on your NixOS system in a smart way. But, when something grows very large, it can become difficult to manage. This is where Ekapkgs helps—it makes things more organized and efficient.
Think of Nixpkgs like a big, messy cupboard filled with hundreds of thousands of software packages. It works well, but keeping it organized and making big changes can be slow. Ekapkgs tries to solve this problem.
Table of Contents
What is Ekapkgs?
Ekapkgs is a poly-repo fork of Nixpkgs. Instead of keeping all packages in one big collection, Ekapkgs splits them into smaller, well-organized sections called repositories.
Here is how these repositories (or boxes) will be organized:
- Lib: A set of basic Nix-only tools that do not handle software packaging. These are like the building blocks.
- corepkgs: This contains the main tools and libraries needed to develop and run software. It will be stable and reliable.
- Languages: Packages for different programming languages, such as Python or Haskell. Each language has its own section.
- Ecosystems: A collection of tools for specific areas like home automation (Home Assistant) or machine learning (CUDA).
- ekapkgs: The main collection, combining all the other repositories. It includes software that does not fit into corepkgs or the language-specific repositories. It will remain as stable as Nixpkgs.
- userpkgs: A community-driven collection where users can share software packages. It is similar to AUR (Arch User Repository) or NUR (Nix User Repository), and it has fewer strict rules on quality and organization.
What Makes Ekapkgs Different?
The main goal of Ekapkgs is better organization and easier maintenance. Nixpkgs has many similar but slightly different ways of doing things. By splitting responsibilities across smaller repositories, it will be easier to manage and maintain high quality.
Another goal is faster improvements and changes. In Nixpkgs, making major updates requires a long Request For Comments (RFC) process. This can take a long time and may not always be approved. Ekapkgs will speed this up with focused enhancement proposals (EEPs).
These proposals will be reviewed by a dedicated team, who will give quick feedback and decisions. Since the repositories are smaller, updates will be faster, and testing new ideas will be easier.
Avoiding Big System-Wide Updates
Sometimes in Nixpkgs, when a major change happens, everything needs to be rebuilt. This can be slow and cause problems. Ekapkgs wants to reduce these big updates by keeping package sets more isolated.
Even when corepkgs changes, only a few thousand packages will be affected, avoiding the need for a complicated "staging" process. Instead, updates will be applied carefully by updating software sources directly.
Better Quality Control
In Nixpkgs, software quality depends on individual maintainers. Automated checks (like ofBorg) only check for basic build errors. Ekapkgs will introduce a tool called eka-ci. This tool will provide detailed information about software updates. It will check:
- If an update breaks other software that depends on it.
- What exactly has changed in the software build.
This will make reviewing updates easier and more reliable. Different repositories will also have different quality standards, so users will know what to expect.
Simpler Customization
In Nixpkgs, users can add their own software using overlays. Ekapkgs will improve this by allowing users to include specific repositories, like corepkgs, in the Ekala system.
There will also be a feature called config.overlays.<scope>, which will give users more control over adding or changing packages in specific areas (like Python or CUDA).
Stability and Innovation
Ekapkgs will create a stable core with the lib and corepkgs repositories while allowing new ideas and experiments in userpkgs. Users can choose:
- More stability by using corepkgs.
- Faster updates and new software by using userpkgs.
- A mix of both, based on their needs.
Conclusion
Ekapkgs takes the best parts of Nixpkgs and makes them better by:
- Organizing software into smaller, more manageable sections.
- Speeding up updates and software changes.
- Reducing large system-wide rebuilds.
- Improving software quality control.
- Making it easier for users to customize and contribute.
In summary, the Ekapgs project aims to make software packaging more efficient, reliable, and user-friendly for everyone.
Resource:
Related Read:
