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,98 +1,99 @@
**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. **A**: Pin your flake to a recent `nixpkgs` version. Here are two common approaches, each with its trade-offs:
There are two common ways to do this, each with its own trade-offs:
## Follow clan-core ## Option 1: Follow `clan-core`
- (+) Recommended for most people. - **Pros**:
- (+) Verified by our CI and widely used by others - Recommended for most users.
- (-) Coupling to version bumps in clan-core, - Verified by our CI and widely used by others.
- Upstream features and packages may take longer to land. - **Cons**:
- Coupled to version bumps in `clan-core`.
- Upstream features and packages may take longer to land.
Example:
```nix ```nix
inputs = { inputs = {
clan-core.url = "https://git.clan.lol/clan/clan-core/archive/main.tar.gz"; 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"; 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 - **Pros**:
- (-) Recommended for advanced usage. - Faster access to new upstream features and packages.
- (-) Not covered by our CI — youre on the frontier - **Cons**:
- Recommended for advanced users.
- Not covered by our CI — youre on the frontier.
Example:
```nix ```nix
inputs = { inputs = {
# Use your own version here. # Specify your own `nixpkgs` version
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
clan-core.url = "https://git.clan.lol/clan/clan-core/archive/main.tar.gz"; 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"; clan-core.inputs.nixpkgs.follows = "nixpkgs";
};
```
## Recommended: Avoid Duplicate `nixpkgs` Entries
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.
Example of duplicate entries in `flake.lock`:
```json
"nixpkgs": {
"locked": {
"lastModified": 315532800,
"narHash": "sha256-1tUpklZsKzMGI3gjo/dWD+hS8cf+5Jji8TF5Cfz7i3I=",
"rev": "08b8f92ac6354983f5382124fef6006cade4a1c1",
"type": "tarball",
"url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre862603.08b8f92ac635/nixexprs.tar.xz"
},
"original": {
"type": "tarball",
"url": "https://nixos.org/channels/nixpkgs-unstable/nixexprs.tar.xz"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1758346548,
"narHash": "sha256-afXE7AJ7MY6wY1pg/Y6UPHNYPy5GtUKeBkrZZ/gC71E=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "b2a3852bd078e68dd2b3dfa8c00c67af1f0a7d20",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-25.05",
"repo": "nixpkgs",
"type": "github"
}
} }
``` ```
## Recommended 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`:
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.
If you see something like this, it means you have multiple versions of `nixpkgs`:
```json ```json
"nixpkgs": { "home-manager": {
"locked": { "inputs": {
"lastModified": 315532800, "nixpkgs": "nixpkgs_2"
"narHash": "sha256-1tUpklZsKzMGI3gjo/dWD+hS8cf+5Jji8TF5Cfz7i3I=", }
"rev": "08b8f92ac6354983f5382124fef6006cade4a1c1", }
"type": "tarball",
"url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre862603.08b8f92ac635/nixexprs.tar.xz"
},
"original": {
"type": "tarball",
"url": "https://nixos.org/channels/nixpkgs-unstable/nixexprs.tar.xz"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1758346548,
"narHash": "sha256-afXE7AJ7MY6wY1pg/Y6UPHNYPy5GtUKeBkrZZ/gC71E=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "b2a3852bd078e68dd2b3dfa8c00c67af1f0a7d20",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-25.05",
"repo": "nixpkgs",
"type": "github"
}
},
``` ```
You can grep through your lock file to locate which inputs are referencing the wrong nixpkgs. Fix this by adding the following line to your `flake.nix` inputs:
In this example, `home-manager` is pointing to `nixpkgs_2` instead of the main `nixpkgs`
```json
// ...
"home-manager": {
"inputs": {
"nixpkgs": "nixpkgs_2"
}
// ...
```
To fix this add the following line to your flake.nix inputs:
```nix ```nix
home-manager.inputs.nixpkgs.follows = "nixpkgs"; home-manager.inputs.nixpkgs.follows = "nixpkgs";
``` ```
Repeat this process until all duplicate `nixpkgs` entries are eliminated. Repeat this process until all duplicate `nixpkgs` entries are resolved. This ensures all inputs use the same `nixpkgs` source, preventing cross-version conflicts.
This helps prevent cross-version conflicts and ensures all inputs use the same `nixpkgs` source.