Skip to content

With No Flakes

Suppose you have a default.nix that looks like:

default.nix
let
sources = import ./npins;
in
{
nixosConfigurations.my-laptop = ...; # use sources
}

First step is adding flake-like input definitions on it, or in a separate ./flake-file.nix file.

flake-file.nix
{
flake-file.inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
};
}

And now, lets generate ./npins from ./flake-file.nix.

Terminal window
nix-shell https://github.com/vic/flake-file/archive/main.tar.gz \
-A flake-file.sh --run write-npins --arg modules ./flake-file.nix
See also: all bootstrap command args

Run the same command whenever your input changes and they will be reflected into your pins.

Lets make use of Nix Modules in our non-flake.

First, create a ./modules directory and move our previous default.nix and flake-file.nix on it.

Terminal window
mkdir modules
mv flake-file.nix modules/inputs.nix
mv default.nix modules/default.nix
modules/default.nix
{ inputs, lib, ... }:
let
sources = import ./npins;
in
{
imports = [ ./inputs.nix ];
nixosConfigurations.my-laptop = ...; # use sources
nixosConfigurations.my-laptop = ...; # use inputs
}

Now create a new defualt.nix as follows:

default.nix
let
sources = import ./npins;
nixpkgs = import sources.nixpkgs { };
outputs = (nixpkgs.lib.evalModules {
modules = ./modules;
specialArgs = {
inputs = sources; # (A) NOTE: Not flake-like inputs.
};
}).config;
in
outputs

To update npins from inputs at ./modules do:

Terminal window
nix-shell https://github.com/vic/flake-file/archive/main.tar.gz \
-A flake-file.sh --run write-npins --arg modules ./modules

If you wish to have flake-like resolved inputs to use flakes from non-flake world, take a look at with-inputs.nix used by templates/npins

Contribute Community Sponsor