nix-filter/README.md

48 lines
1.2 KiB
Markdown
Raw Normal View History

2021-04-23 15:16:23 +03:00
# nix-filter - a small self-container source filtering lib
**STATUS: unstable**
A cool way to include only what you need.
When using nix within a project, developers often use `src = ./.;` for a
project like this:
```nix
{ stdenv }:
stdenv.mkDerivation {
name = "my-project";
src = ./.;
}
```
This works but has an issue; on each build, nix will copy the whole project
source code into the /nix/store. Including the `.git` folder and any temporary
files left over by the editor.
The main workaround is to use either `builtins.fetchGit ./.` or one of the
many gitignore filter projects but this is not precise enough. If the
project README changes, it should rebuild the project. If the nix code
changes, it shouldn't rebuild the project. That's why this project exists. I
want total control.
## Example usage
```nix
{ stdenv, nix-filter }:
stdenv.mkDerivation {
name = "my-project";
src = nix-filter {
2021-04-23 19:53:18 +03:00
path = ./.;
2021-04-23 15:16:23 +03:00
allow = [
"src" # strings are automatically converted to ./src filter
./package.json # paths are automatically converted to path filters
(nix-filter.byExt "js") # create your own filters like that
];
# TODO: doesn't work yet
deny = [
];
};
}
```