docs: make flake-inputs flow better

This commit is contained in:
Qubasa
2025-09-25 18:59:08 +02:00
parent eddb1e35fc
commit 233d1a48af

View File

@@ -1,49 +1,55 @@
**Q**: How should I choose the nixpkgs input for my flake when using clan-core?
**Q**: How should I choose the `nixpkgs` input for my flake when using `clan-core`?
**A**: In general, you should pin your flake to a recent nixpkgs version.
There are two common ways to do this, each with its own trade-offs:
**A**: Pin your flake to a recent `nixpkgs` version. Here are two common approaches, each with its trade-offs:
## Follow clan-core
## Option 1: Follow `clan-core`
- (+) Recommended for most people.
- (+) Verified by our CI and widely used by others
- (-) Coupling to version bumps in clan-core,
- **Pros**:
- Recommended for most users.
- Verified by our CI and widely used by others.
- **Cons**:
- Coupled to version bumps in `clan-core`.
- Upstream features and packages may take longer to land.
Example:
```nix
inputs = {
clan-core.url = "https://git.clan.lol/clan/clan-core/archive/main.tar.gz";
# Uses the nixpkgs version that was locked in clan-core
# Use the `nixpkgs` version locked in `clan-core`
nixpkgs.follows = "clan-core/nixpkgs";
}
};
```
## Use your own nixpkgs version
## Option 2: Use Your Own `nixpkgs` Version
- (+) Faster access to new upstream features and packages
- (-) Recommended for advanced usage.
- (-) Not covered by our CI — youre on the frontier
- **Pros**:
- Faster access to new upstream features and packages.
- **Cons**:
- Recommended for advanced users.
- Not covered by our CI — youre on the frontier.
Example:
```nix
inputs = {
# Use your own version here.
# Specify your own `nixpkgs` version
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
clan-core.url = "https://git.clan.lol/clan/clan-core/archive/main.tar.gz";
# Uses the nixpkgs version of your own flake in clan-core
# Ensure `clan-core` uses your `nixpkgs` version
clan-core.inputs.nixpkgs.follows = "nixpkgs";
}
};
```
## Recommended
## Recommended: Avoid Duplicate `nixpkgs` Entries
To avoid ambiguity or incompatibility issues, its a good idea to check your `flake.lock` for duplicate `nixpkgs` entries.
This usually indicates that one of your flake inputs is missing a `follows` directive.
To prevent ambiguity or compatibility issues, check your `flake.lock` for duplicate `nixpkgs` entries. Duplicate entries indicate a missing `follows` directive in one of your flake inputs.
If you see something like this, it means you have multiple versions of `nixpkgs`:
Example of duplicate entries in `flake.lock`:
```json
"nixpkgs": {
"nixpkgs": {
"locked": {
"lastModified": 315532800,
"narHash": "sha256-1tUpklZsKzMGI3gjo/dWD+hS8cf+5Jji8TF5Cfz7i3I=",
@@ -55,8 +61,8 @@ If you see something like this, it means you have multiple versions of `nixpkgs`
"type": "tarball",
"url": "https://nixos.org/channels/nixpkgs-unstable/nixexprs.tar.xz"
}
},
"nixpkgs_2": {
},
"nixpkgs_2": {
"locked": {
"lastModified": 1758346548,
"narHash": "sha256-afXE7AJ7MY6wY1pg/Y6UPHNYPy5GtUKeBkrZZ/gC71E=",
@@ -71,28 +77,23 @@ If you see something like this, it means you have multiple versions of `nixpkgs`
"repo": "nixpkgs",
"type": "github"
}
},
}
```
You can grep through your lock file to locate which inputs are referencing the wrong nixpkgs.
In this example, `home-manager` is pointing to `nixpkgs_2` instead of the main `nixpkgs`
To locate the source of duplicate entries, grep your `flake.lock` file. For example, if `home-manager` is referencing `nixpkgs_2` instead of the main `nixpkgs`:
```json
// ...
"home-manager": {
"home-manager": {
"inputs": {
"nixpkgs": "nixpkgs_2"
}
// ...
}
```
To fix this add the following line to your flake.nix inputs:
Fix this by adding the following line to your `flake.nix` inputs:
```nix
home-manager.inputs.nixpkgs.follows = "nixpkgs";
```
Repeat this process until all duplicate `nixpkgs` entries are eliminated.
This helps prevent cross-version conflicts and ensures all inputs use the same `nixpkgs` source.
Repeat this process until all duplicate `nixpkgs` entries are resolved. This ensures all inputs use the same `nixpkgs` source, preventing cross-version conflicts.