mirror of
https://github.com/NixOS/rfcs.git
synced 2025-11-09 03:56:11 +01:00
remove assimilation
This commit is contained in:
parent
2e84b448ac
commit
7628248efc
1 changed files with 0 additions and 197 deletions
|
|
@ -1,197 +0,0 @@
|
|||
- feature: All Your Home Manager Are Belong to Us
|
||||
- start-date: (fill me in with today's date, YYYY-MM-DD)-
|
||||
- author: Anderson Torres
|
||||
- co-authors: (find a buddy later to help out with the RFC)
|
||||
- shepherd-team: (names, to be nominated and accepted by RFC steering committee)
|
||||
- shepherd-leader: (name to be appointed by RFC steering committee)
|
||||
- related-issues: (will contain links to implementation PRs)
|
||||
|
||||
# Summary
|
||||
[summary]: #summary
|
||||
|
||||
Assimilate home-manager project into Nixpkgs monorepo.
|
||||
|
||||
# Terminology
|
||||
[terminology]: #terminology
|
||||
|
||||
Henceforth,
|
||||
|
||||
- Home Manager will be called _HM_;
|
||||
- The typical unprivileged user of a system will be called _basic user_;
|
||||
- The typical privileged user of a system will be called _superuser_;
|
||||
|
||||
# Motivation
|
||||
[motivation]: #motivation
|
||||
|
||||
Nix the language has at least three large-size consumers, namely:
|
||||
|
||||
- [Nixpkgs](https://github.com/NixOS/nixpkgs), the biggest packageset in
|
||||
existence;
|
||||
- [NixOS](https://nixos.org/), the reference work on declarative configuration
|
||||
and deployment of a Linux distribution; and
|
||||
- [Home Manager](https://nix-community.github.io/home-manager/), another
|
||||
reference work on declarative user-specific configuration management and
|
||||
deployment.
|
||||
|
||||
Since at least 2014, NixOS was assimilated into Nixpkgs monorepo, now living
|
||||
inside `nixos` directory.
|
||||
|
||||
This RFC proposes a similar assimilation of Home Manager into Nixpkgs.
|
||||
|
||||
## Benefits
|
||||
|
||||
In principle, Nix already leverages Nixpkgs for basic users. However, the raw
|
||||
usage of Nixpkgs is not too ergonomic, especially when compared to the more
|
||||
structured model of NixOS.
|
||||
|
||||
HM provides a similar centralized, modular, declarative package management
|
||||
experience to basic users, without the need of granting them superuser
|
||||
privileges.
|
||||
|
||||
Given that NixOS - a system that leverages Nixpkgs for superusers - is already
|
||||
bundled inside Nixpkgs tree, a fortiori HM - a system that leverages Nixpkgs for
|
||||
basic users - should be included as the default, Nixpkgs-blessed system for
|
||||
basic users.
|
||||
|
||||
Further, this assimilation will benefit two interesting sets of people:
|
||||
|
||||
01. Users of Nixpkgs and/or NixOS that are reluctant in using HM, since it is
|
||||
neither official nor well-integrated into Nixpkgs workflow.
|
||||
|
||||
01. Users of NixOS that already use HM in tandem, as a convenient way of
|
||||
separating basic users' business from system administration tasks.
|
||||
|
||||
Another great advantage of assimilating HM to Nixpkgs is a tighter integration
|
||||
between both projects:
|
||||
|
||||
01. Merging HM into Nixpkgs eliminates a barrier between both projects,
|
||||
conveying more flexibility in code sharing, deduplication and refactoring in
|
||||
general.
|
||||
|
||||
01. Refactors, reformulations, deprecations and removals of packages and other
|
||||
related functionalities are commonplace around Nixpkgs. Since HM is
|
||||
dependent on Nixpkgs, it needs to monitor and synchronize such activities.
|
||||
|
||||
The eventual assimilation proposed here drops those issues dramatically.
|
||||
|
||||
01. The merge of communities brings a new point of view about package maintenace
|
||||
in general.
|
||||
|
||||
NixOS is the main point of structured conglomeration of packages; because of
|
||||
this, Nixpkgs is arguably more inclined to favor a superuser view of system
|
||||
administration.
|
||||
|
||||
Bringing HM to Nixpkgs provides a new point of view, more akin to the basic
|
||||
user.
|
||||
|
||||
01. Making HM an official, blessed tool conveys more credibility to both
|
||||
Nixpkgs and HM.
|
||||
|
||||
# Detailed design
|
||||
[design]: #detailed-design
|
||||
|
||||
There are many possible approaches for this assimilation. Here I will propose a sketch:
|
||||
|
||||
|
||||
01. Prepare HM to migration
|
||||
|
||||
Currently Nixpkgs monorepo requires certain rules to accept code.
|
||||
|
||||
01. Prepare Nixpkgs to migration too
|
||||
|
||||
There is some expectation of preparing Nixpkgs to deal with the big input of
|
||||
new code. A merge train will be useful here and in subsequent steps.
|
||||
|
||||
01. Merge HM repository so that its files are kept in `home-manager` directory
|
||||
|
||||
01. Polish the rough edges
|
||||
|
||||
01. Profit!
|
||||
|
||||
# Examples and Interactions
|
||||
[examples-and-interactions]: #examples-and-interactions
|
||||
|
||||
Ideally, after the assimilation, a basic user will experience few to no changes
|
||||
in their workflow. The channels of distribution of both Nixpkgs and HM will be
|
||||
merged, promoting a cleanup on setups that otherwise would need synchronization.
|
||||
|
||||
On the other hand, from this assimilation forward the typical package maintainer
|
||||
will interact with potentially two sets of too similar module systems. This
|
||||
brings a momentum to deduplicate code and build abstractions, however this is
|
||||
not in the scope of this RFC.
|
||||
|
||||
# Drawbacks
|
||||
[drawbacks]: #drawbacks
|
||||
|
||||
The main drawback of this assimilation stem from the resulting complexity.
|
||||
|
||||
## Standardization
|
||||
|
||||
There are some discrepancies between the practices of both communities. How they
|
||||
should be accomodated?
|
||||
|
||||
## Synchronize the communities
|
||||
|
||||
There are almost 660 contributors in HM to this date. How they should be
|
||||
allocated?
|
||||
|
||||
Ideally they should keep the same roles.
|
||||
|
||||
## CI
|
||||
|
||||
Currently HM uses its own setup for continuous integration. Ideally the Nixpkgs
|
||||
setup should be updated to include HM's specific needs.
|
||||
|
||||
# Alternatives
|
||||
[alternatives]: #alternatives
|
||||
|
||||
The alternatives are
|
||||
|
||||
- The trivial "do nothing"
|
||||
|
||||
It just exacerbates the status quo, bringing nothing in the long term.
|
||||
|
||||
- Bless another home management tool
|
||||
|
||||
HM is battle-tested and well renowned. There is no other tool remotely
|
||||
comparable to it.
|
||||
|
||||
- Build a home management tool from scratch
|
||||
|
||||
This alternative dismisses the know-how accumulated by HM. An acceptable
|
||||
middle ground would be to create some "library extension" to accomodate future
|
||||
HM-like modules and use that extension to migrate HM modules.
|
||||
|
||||
# Prior art
|
||||
[prior-art]: #prior-art
|
||||
|
||||
As an example of prior art, there is our Scheme-based cousin, Guix Software
|
||||
Distribution. Since at least 2022 AD they bring a similar tool, conveniently
|
||||
called Guix Home.
|
||||
|
||||
The nicest thing about this tool is that it is tightly integrated with Guix, to
|
||||
the point of `home` being a mere subcommand of `guix`.
|
||||
|
||||
# Unresolved questions
|
||||
[unresolved]: #unresolved-questions
|
||||
|
||||
How the future package inclusions should be carried out?
|
||||
|
||||
# Future work
|
||||
[future]: #future-work
|
||||
|
||||
- Update an extend the CI
|
||||
- Set expectations on portability among present and future platforms Nixpkgs
|
||||
supports
|
||||
- Especially outside NixOS
|
||||
- Especially outside Linux
|
||||
- Factor HM and NixOS's shared code into some service abstraction structure
|
||||
|
||||
# References
|
||||
[references]: #references
|
||||
|
||||
- [Keeping One's Home
|
||||
Tidy](https://guix.gnu.org/en/blog/2022/keeping-ones-home-tidy/), by Ludovic
|
||||
Courtès
|
||||
- [Guix Home
|
||||
Configuration](https://guix.gnu.org/manual/devel/en/html_node/Home-Configuration.html)
|
||||
Loading…
Add table
Add a link
Reference in a new issue