Getting Started
If your project does not have flake.nix yet:
nix flake init -t github:ratson/conflakeThis will copy files from default template to the current directory.
You need nix-direnv to use .envrc.
Add to project
Edit flake.nix to match the following format:
{
outputs = { conflake, ... }@inputs:
let
outputs = {}; # Your existing `outputs`
in
conflake ./. {
inherit inputs outputs;
presets.enable = false;
};
inputs.conflake.url = "github:ratson/conflake";
}Line 4: Copy existing outputs to here.
Line 9: Optional if your outputs is not conflicting to the presets.
Then migrate your outputs to Conflake options.
Dev Shell
The following is an example flake.nix for a devshell. It outputsdevShells.${system}.defaultattributes for each configured system. systems can be set to change configured systems from the default.
{
outputs = { conflake, ... }@inputs:
conflake ./. {
inherit inputs;
devShell.packages = pkgs: [
pkgs.hello
pkgs.coreutils
];
};
inputs = {
conflake = {
url = "github:ratson/conflake";
inputs.nixpkgs.follows = "nixpkgs";
};
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
};
}Minimal version
{
outputs = { conflake, ... }:
conflake ./. {
devShell.packages = pkgs: [ pkgs.hello pkgs.coreutils ];
};
inputs.conflake.url = "github:ratson/conflake";
}With this flake, calling nix develop will make hello and coreutils available.
mkOutputs
The outputs of a flake using Conflake are created using the mkOutputs function. When called directly, Conflake invokes mkOutputs, as follows:
{
inputs.conflake.url = "github:ratson/conflake";
outputs = { conflake, ... }:
conflake ./. {
# Your flake configuration here
};
}To call mkOutputs explicitly, you can do:
{
inputs.conflake.url = "github:ratson/conflake";
outputs = { conflake, ... }:
conflake.lib.mkOutputs ./. {
# Your flake configuration here
};
}mkOutputs takes two parameters: the path to the flake's source and a Conflake module.
If you need access to module args, you can write it as bellow:
{
inputs.conflake.url = "github:ratson/conflake";
outputs = { conflake, ... }:
conflake ./. ({ lib, config, ... }: {
# Your flake configuration here
});
}Module arguments
The following module arguments are available:
src: The flake's source directorylib: nixpkgs lib attributeconfig: configured option valuesoptions: available optionsconflake: conflake lib attributeinputs: value of inputs optionoutputs: resulting output (i.e. final flake attributes)pkgsFor: attrset mapping systems to the pkgs set for that systemmoduleArgs: All of the available arguments (passed to auto-loaded files)
Additional pkgs values
Functions that take the package set as an argument, such as package definitions or perSystem values, have several additional values available in the package set.
The src, conflake, inputs, outputs, and moduleArgs attributes are the same as the above module arguments.
inputs' and outputs' are transformed versions of inputs and outputs with system preselected. I.e., inputs.emacs-overlay.packages.x86_64-linux.default can be accessed as inputs'.emacs-overlay.packages.default.
defaultMeta is a derivation meta attribute set generated from options. Modules setting packages.default should use this to allow meta attributes to be configured.