use one nixpkgs instance

Push the nix configuration into the CLI so we don't need the overlay,
and so we don't need to create another instance of nixpkgs.

This also means that the python CLI can be executed directly as long as
the user has a recent-enough version of nix and make iterations a bit
faster.

For more details, see
https://zimbatm.com/notes/1000-instances-of-nixpkgs
This commit is contained in:
zimbatm 2022-03-04 12:26:04 +01:00
parent 848c424c03
commit 46dd1ab167
No known key found for this signature in database
GPG Key ID: 71BAF6D40C1D63D7
4 changed files with 29 additions and 52 deletions

View File

@ -41,7 +41,7 @@
supportedSystems = [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin" ];
forAllSystems = f: lib.genAttrs supportedSystems (system:
f system (import nixpkgs { inherit system; overlays = [ self.overlay ]; })
f system nixpkgs.legacyPackages.${system}
);
# To use dream2nix in non-flake + non-IFD enabled repos, the source code of dream2nix
@ -113,14 +113,6 @@
in
{
# overlay with flakes enabled nix
# (all of dream2nix cli dependends on nix ^2.4)
overlay = final: prev: {
nix = prev.writeScriptBin "nix" ''
${final.nixUnstable}/bin/nix --option experimental-features "nix-command flakes" "$@"
'';
};
# System independent dream2nix api.
# Similar to drem2nixFor but will require 'system(s)' or 'pkgs' as an argument.
# Produces flake-like output schema.

View File

@ -12,7 +12,7 @@ import networkx as nx
from cleo import Command, argument, option
from utils import config, dream2nix_src, checkLockJSON, list_translators_for_source, strip_hashes_from_lock
from nix_ffi import callNixFunction, buildNixFunction, buildNixAttribute
from nix_ffi import nix, callNixFunction, buildNixFunction, buildNixAttribute
class AddCommand(Command):
@ -294,12 +294,9 @@ class AddCommand(Command):
with open(outputDreamLock, 'w') as f:
json.dump(lock, f, indent=2)
# compute FOD hash of aggregated sources
proc = sp.run(
[
"nix", "build", "--impure", "-L", "--show-trace", "--expr",
f"(import {dream2nix_src} {{}}).fetchSources {{ dreamLock = {outputDreamLock}; }}"
],
capture_output=True,
proc = nix(
"build", "--impure", "-L", "--show-trace", "--expr",
f"(import {dream2nix_src} {{}}).fetchSources {{ dreamLock = {outputDreamLock}; }}"
)
# read the output hash from the failed build log
match = re.search(r"FOD_HASH=(.*=)", proc.stderr.decode())

View File

@ -6,6 +6,8 @@ import tempfile
dream2nix_src = os.environ.get("dream2nixSrc")
def nix(*args, **kwargs):
return sp.run(["nix", "--option", "experimental-features", "nix-command flakes"] + list(args), capture_output=True, **kwargs)
def callNixFunction(function_path, **kwargs):
with tempfile.NamedTemporaryFile("w") as input_json_file:
@ -15,19 +17,16 @@ def callNixFunction(function_path, **kwargs):
env.update(dict(
FUNC_ARGS=input_json_file.name
))
proc = sp.run(
[
"nix", "eval", "--show-trace", "--impure", "--raw", "--expr",
f'''
let
d2n = (import {dream2nix_src} {{}});
in
builtins.toJSON (
(d2n.utils.callViaEnv d2n.{function_path})
)
''',
],
capture_output=True,
proc = nix(
"eval", "--show-trace", "--impure", "--raw", "--expr",
f'''
let
d2n = (import {dream2nix_src} {{}});
in
builtins.toJSON (
(d2n.utils.callViaEnv d2n.{function_path})
)
''',
env=env
)
if proc.returncode:
@ -47,17 +46,14 @@ def buildNixFunction(function_path, **kwargs):
env.update(dict(
FUNC_ARGS=input_json_file.name
))
proc = sp.run(
[
"nix", "build", "--show-trace", "--impure", "-o", "tmp-result", "--expr",
f'''
let
d2n = (import {dream2nix_src} {{}});
in
(d2n.utils.callViaEnv d2n.{function_path})
''',
],
capture_output=True,
proc = nix(
"build", "--show-trace", "--impure", "-o", "tmp-result", "--expr",
f'''
let
d2n = (import {dream2nix_src} {{}});
in
(d2n.utils.callViaEnv d2n.{function_path})
''',
env=env
)
if proc.returncode:
@ -72,12 +68,9 @@ def buildNixFunction(function_path, **kwargs):
def buildNixAttribute(attribute_path):
proc = sp.run(
[
"nix", "build", "--show-trace", "--impure", "-o", "tmp-result", "--expr",
f"(import {dream2nix_src} {{}}).{attribute_path}",
],
capture_output=True,
proc = nix(
"build", "--show-trace", "--impure", "-o", "tmp-result", "--expr",
f"(import {dream2nix_src} {{}}).{attribute_path}",
)
if proc.returncode:
print(f"Failed to build '{attribute_path}'", file=sys.stderr)

View File

@ -7,12 +7,7 @@
pkgs ? import <nixpkgs> {},
dlib ? import ./lib { inherit lib; },
lib ? pkgs.lib,
# the dream2nix cli depends on some nix 2.4 features
nix ? pkgs.writeScriptBin "nix" ''
#!${pkgs.bash}/bin/bash
${pkgs.nixUnstable}/bin/nix --option experimental-features "nix-command flakes" "$@"
'',
nix ? pkgs.nix,
# default to empty dream2nix config
config ?