Add lixFromNixpkgs, document the module
This commit is contained in:
parent
8d462dfd9d
commit
533223d8ee
73
README.md
73
README.md
|
@ -1,5 +1,76 @@
|
||||||
# Lix NixOS module
|
# Lix NixOS module
|
||||||
|
|
||||||
See the [beta guide][beta-guide] for details on how to use this:
|
See the [official installation guide][install-guide] for details on usage of
|
||||||
|
release versions.
|
||||||
|
|
||||||
|
[install-guide]: https://lix.systems/install/
|
||||||
|
|
||||||
|
See the [beta guide][beta-guide] for a setup guide on how to use HEAD:
|
||||||
|
|
||||||
[beta-guide]: https://wiki.lix.systems/link/1
|
[beta-guide]: https://wiki.lix.systems/link/1
|
||||||
|
|
||||||
|
## What does this do?
|
||||||
|
|
||||||
|
This is an overlay wrapped in a NixOS module that will replace CppNix with Lix
|
||||||
|
in nixpkgs. This is useful so that `nixos-rebuild`, `nix-direnv` and similar
|
||||||
|
will use Lix.
|
||||||
|
|
||||||
|
Optionally, it can build Lix from source.
|
||||||
|
|
||||||
|
## Versioning with Lix
|
||||||
|
|
||||||
|
The version of this overlay should match the major Lix version, *and* if
|
||||||
|
running HEAD, it should be the latest available version of the overlay.
|
||||||
|
Breaking changes to the overlay are shamelessly done on HEAD.
|
||||||
|
|
||||||
|
The version of Lix pinned in this flake's `flake.lock` is a version of Lix
|
||||||
|
that is expected to work, however if running HEAD, it can be assumed to work
|
||||||
|
with HEAD as well if both `lix-nixos-module` and `lix` are the latest version.
|
||||||
|
|
||||||
|
## Common pitfalls
|
||||||
|
|
||||||
|
Various flake frameworks such as flake-parts and snowfall (and possibly Colmena
|
||||||
|
in the future if they do a similar optimization) manage overlays separately
|
||||||
|
from NixOS, since they provide `pkgs` pre-imported to NixOS. This saves a
|
||||||
|
couple of seconds of evaluation time and resources, but it means that the NixOS
|
||||||
|
option `nixpkgs.overlays` **is completely ignored** on these frameworks.
|
||||||
|
|
||||||
|
If you are using such a framework, add `overlays.default` to the overlays list
|
||||||
|
for said framework.
|
||||||
|
|
||||||
|
## Flake structure and usage
|
||||||
|
|
||||||
|
The flake here has two inputs of note:
|
||||||
|
- `nixpkgs`, *which is unused for most people*. It is purely used for `checks`
|
||||||
|
in developing `lix-nixos-module` itself.
|
||||||
|
|
||||||
|
The installation instructions make it `follows` to make `flake.lock` less
|
||||||
|
confusing, but it is nonetheless unused.
|
||||||
|
- `lix`, which determines the version of Lix to do source builds for, if doing
|
||||||
|
source builds.
|
||||||
|
|
||||||
|
These are the most relevant outputs for most people:
|
||||||
|
|
||||||
|
- `nixosModules.lixFromNixpkgs` - uses Lix from nixpkgs and installs the
|
||||||
|
overlay to use Lix on a NixOS system. This is only useful for a stable
|
||||||
|
version of Lix, and cannot be used for running HEAD.
|
||||||
|
- `nixosModules.default` - uses Lix from source and installs the overlay to use
|
||||||
|
Lix on a NixOS system.
|
||||||
|
- `overlays.lixFromNixpkgs` - overlay to use Lix from nixpkgs in place of Nix.
|
||||||
|
- `overlays.default` - overlay to use Lix from source in place of Nix.
|
||||||
|
|
||||||
|
## Non-flake usage
|
||||||
|
|
||||||
|
Import `module.nix` or `overlay.nix` as desired, with the arguments `lix`
|
||||||
|
(derivation-like attribute set with the Lix sources, or `null` to use Lix from
|
||||||
|
nixpkgs) and `versionSuffix` (optional string).
|
||||||
|
|
||||||
|
It's desirable to also include a `versionSuffix` like the following while
|
||||||
|
building HEAD from source, to have `nix --version` include date and commit
|
||||||
|
information. To get such metadata, it depends on which pinning system is in
|
||||||
|
use, but `builtins.fetchGit` will provide the necessary metadata for the
|
||||||
|
following to work:
|
||||||
|
|
||||||
|
```
|
||||||
|
versionSuffix = "pre${builtins.substring 0 8 lix.lastModifiedDate}-${lix.shortRev or lix.dirtyShortRev}";
|
||||||
|
```
|
||||||
|
|
17
flake.nix
17
flake.nix
|
@ -11,8 +11,21 @@
|
||||||
let versionSuffix = "pre${builtins.substring 0 8 lix.lastModifiedDate}-${lix.shortRev or lix.dirtyShortRev}";
|
let versionSuffix = "pre${builtins.substring 0 8 lix.lastModifiedDate}-${lix.shortRev or lix.dirtyShortRev}";
|
||||||
in {
|
in {
|
||||||
inherit inputs;
|
inherit inputs;
|
||||||
nixosModules.default = import ./module.nix { inherit lix versionSuffix; };
|
nixosModules = {
|
||||||
overlays.default = import ./overlay.nix { inherit lix versionSuffix; };
|
# Use a locally built Lix
|
||||||
|
default = import ./module.nix { inherit lix versionSuffix; };
|
||||||
|
|
||||||
|
# Use Lix from nixpkgs
|
||||||
|
lixFromNixpkgs = import ./module.nix { lix = null; };
|
||||||
|
};
|
||||||
|
|
||||||
|
overlays = {
|
||||||
|
# Use a locally built Lix
|
||||||
|
default = import ./overlay.nix { inherit lix versionSuffix; };
|
||||||
|
|
||||||
|
# Use Lix from nixpkgs
|
||||||
|
lixFromNixpkgs = import ./overlay.nix { lix = null; };
|
||||||
|
};
|
||||||
} // flake-utils.lib.eachDefaultSystem (system:
|
} // flake-utils.lib.eachDefaultSystem (system:
|
||||||
let
|
let
|
||||||
pkgs = import nixpkgs {
|
pkgs = import nixpkgs {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ lix ? null, versionSuffix ? "" }:
|
{ lix, versionSuffix ? "" }:
|
||||||
{ pkgs, config, ... }:
|
{ pkgs, config, ... }:
|
||||||
{
|
{
|
||||||
nixpkgs.overlays = [ (import ./overlay.nix { inherit lix versionSuffix; }) ];
|
nixpkgs.overlays = [ (import ./overlay.nix { inherit lix versionSuffix; }) ];
|
||||||
|
|
Loading…
Reference in a new issue