parent
be70414386
commit
d19854992f
@ -1,6 +1,34 @@ |
|||||||
(import (fetchTarball { |
{ ... }: |
||||||
url = |
|
||||||
"https://github.com/edolstra/flake-compat/archive/94cf59784c73ecec461eaa291918eff0bfb538ac.tar.gz"; |
|
||||||
sha256 = "03qz7h3hpb7jhlyidd4jxxncns40kvw8aqsq5l8d0rsdq9nj02qj"; |
|
||||||
}) { src = ./.; }).defaultNix |
|
||||||
|
|
||||||
|
let |
||||||
|
sources = import ./nix/sources.nix; |
||||||
|
nixpkgsOptions = { |
||||||
|
system = "x86_64-linux"; |
||||||
|
overlays = [ (import ./pkgs/overlay.nix) ]; |
||||||
|
}; |
||||||
|
pkgs = import sources.nixpkgs nixpkgsOptions; |
||||||
|
inherit (pkgs) lib; |
||||||
|
|
||||||
|
makeDevice = configFile: |
||||||
|
(lib.evalModules { |
||||||
|
modules = [ |
||||||
|
({ ... }: { nixpkgs = nixpkgsOptions; }) |
||||||
|
("${sources.nixpkgs}/nixos/modules/misc/assertions.nix") |
||||||
|
("${sources.nixpkgs}/nixos/modules/misc/nixpkgs.nix") |
||||||
|
./modules |
||||||
|
configFile |
||||||
|
]; |
||||||
|
}).config.corenix.rom; |
||||||
|
|
||||||
|
in rec { |
||||||
|
inherit makeDevice; |
||||||
|
|
||||||
|
inherit (pkgs) |
||||||
|
coreboot coreboot-payload-grub2 coreboot-payload-tianocore |
||||||
|
coreboot-payload-seabios coreboot-payload-tint |
||||||
|
coreboot-payload-nvramcui coreboot-payload-coreinfo; |
||||||
|
|
||||||
|
milan-x1c = makeDevice ./configs/milan/milan-x1c.nix; |
||||||
|
milan-x230t = makeDevice ./configs/milan/milan-x230t.nix; |
||||||
|
milan-x230-fhd = makeDevice ./configs/milan/milan-x230-fhd.nix; |
||||||
|
} |
||||||
|
@ -1,27 +0,0 @@ |
|||||||
{ |
|
||||||
"nodes": { |
|
||||||
"nixpkgs": { |
|
||||||
"locked": { |
|
||||||
"lastModified": 1609604674, |
|
||||||
"narHash": "sha256-9311Liy+1rgONWYcRZcjBqofY4vYTBRcbXZkqcYwjzk=", |
|
||||||
"owner": "NixOS", |
|
||||||
"repo": "nixpkgs", |
|
||||||
"rev": "071eb8b265793098468fd321e5c6900eec149910", |
|
||||||
"type": "github" |
|
||||||
}, |
|
||||||
"original": { |
|
||||||
"owner": "NixOS", |
|
||||||
"ref": "master", |
|
||||||
"repo": "nixpkgs", |
|
||||||
"type": "github" |
|
||||||
} |
|
||||||
}, |
|
||||||
"root": { |
|
||||||
"inputs": { |
|
||||||
"nixpkgs": "nixpkgs" |
|
||||||
} |
|
||||||
} |
|
||||||
}, |
|
||||||
"root": "root", |
|
||||||
"version": 7 |
|
||||||
} |
|
@ -1,49 +0,0 @@ |
|||||||
{ |
|
||||||
inputs.nixpkgs = { |
|
||||||
type = "github"; |
|
||||||
owner = "NixOS"; |
|
||||||
repo = "nixpkgs"; |
|
||||||
ref = "master"; |
|
||||||
}; |
|
||||||
|
|
||||||
description = "A collections of derivations for coreboot and payloads"; |
|
||||||
outputs = { self, nixpkgs }: |
|
||||||
let |
|
||||||
nixpkgsOptions = { |
|
||||||
system = "x86_64-linux"; |
|
||||||
overlays = [ (import ./pkgs/overlay.nix) ]; |
|
||||||
}; |
|
||||||
pkgs = import nixpkgs nixpkgsOptions; |
|
||||||
inherit (pkgs) lib; |
|
||||||
|
|
||||||
makeDevice = configFile: |
|
||||||
(lib.evalModules { |
|
||||||
modules = [ |
|
||||||
({ ... }: { nixpkgs = nixpkgsOptions; }) |
|
||||||
("${nixpkgs}/nixos/modules/misc/assertions.nix") |
|
||||||
("${nixpkgs}/nixos/modules/misc/nixpkgs.nix") |
|
||||||
./modules |
|
||||||
configFile |
|
||||||
]; |
|
||||||
}).config.corenix.rom; |
|
||||||
|
|
||||||
exportedPkgs = { |
|
||||||
inherit (pkgs) |
|
||||||
coreboot coreboot-payload-grub2 coreboot-payload-tianocore |
|
||||||
coreboot-payload-seabios coreboot-payload-tint |
|
||||||
coreboot-payload-nvramcui coreboot-payload-coreinfo; |
|
||||||
|
|
||||||
milan-x1c = makeDevice ./configs/milan/milan-x1c.nix; |
|
||||||
milan-x230t = makeDevice ./configs/milan/milan-x230t.nix; |
|
||||||
milan-x230-fhd = makeDevice ./configs/milan/milan-x230-fhd.nix; |
|
||||||
}; |
|
||||||
|
|
||||||
in { |
|
||||||
lib = { inherit makeDevice; }; |
|
||||||
|
|
||||||
packages.x86_64-linux = exportedPkgs; |
|
||||||
|
|
||||||
# shortcut for use with flake-compat |
|
||||||
pkgs = exportedPkgs; |
|
||||||
}; |
|
||||||
} |
|
@ -0,0 +1,26 @@ |
|||||||
|
{ |
||||||
|
"niv": { |
||||||
|
"branch": "master", |
||||||
|
"description": "Easy dependency management for Nix projects", |
||||||
|
"homepage": "https://github.com/nmattia/niv", |
||||||
|
"owner": "nmattia", |
||||||
|
"repo": "niv", |
||||||
|
"rev": "ba57d5a29b4e0f2085917010380ef3ddc3cf380f", |
||||||
|
"sha256": "1kpsvc53x821cmjg1khvp1nz7906gczq8mp83664cr15h94sh8i4", |
||||||
|
"type": "tarball", |
||||||
|
"url": "https://github.com/nmattia/niv/archive/ba57d5a29b4e0f2085917010380ef3ddc3cf380f.tar.gz", |
||||||
|
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz" |
||||||
|
}, |
||||||
|
"nixpkgs": { |
||||||
|
"branch": "master", |
||||||
|
"description": "Nix Packages collection", |
||||||
|
"homepage": "", |
||||||
|
"owner": "NixOS", |
||||||
|
"repo": "nixpkgs", |
||||||
|
"rev": "30f4aedd0ef8ef9b1cc007519e3e7536201055af", |
||||||
|
"sha256": "1am8zhhnrhxvl7siw50lilnrpvc35lzs8kvky7ms7gs8a1mj4sbn", |
||||||
|
"type": "tarball", |
||||||
|
"url": "https://github.com/NixOS/nixpkgs/archive/30f4aedd0ef8ef9b1cc007519e3e7536201055af.tar.gz", |
||||||
|
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz" |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,171 @@ |
|||||||
|
# This file has been generated by Niv. |
||||||
|
|
||||||
|
let |
||||||
|
|
||||||
|
# |
||||||
|
# The fetchers. fetch_<type> fetches specs of type <type>. |
||||||
|
# |
||||||
|
|
||||||
|
fetch_file = pkgs: name: spec: |
||||||
|
let |
||||||
|
name' = sanitizeName name + "-src"; |
||||||
|
in |
||||||
|
if spec.builtin or true then |
||||||
|
builtins_fetchurl { inherit (spec) url sha256; name = name'; } |
||||||
|
else |
||||||
|
pkgs.fetchurl { inherit (spec) url sha256; name = name'; }; |
||||||
|
|
||||||
|
fetch_tarball = pkgs: name: spec: |
||||||
|
let |
||||||
|
name' = sanitizeName name + "-src"; |
||||||
|
in |
||||||
|
if spec.builtin or true then |
||||||
|
builtins_fetchTarball { name = name'; inherit (spec) url sha256; } |
||||||
|
else |
||||||
|
pkgs.fetchzip { name = name'; inherit (spec) url sha256; }; |
||||||
|
|
||||||
|
fetch_git = name: spec: |
||||||
|
let |
||||||
|
ref = |
||||||
|
if spec ? ref then spec.ref else |
||||||
|
if spec ? branch then "refs/heads/${spec.branch}" else |
||||||
|
if spec ? tag then "refs/tags/${spec.tag}" else |
||||||
|
abort "In git source '${name}': Please specify `ref`, `tag` or `branch`!"; |
||||||
|
in |
||||||
|
builtins.fetchGit { url = spec.repo; inherit (spec) rev; inherit ref; }; |
||||||
|
|
||||||
|
fetch_local = spec: spec.path; |
||||||
|
|
||||||
|
fetch_builtin-tarball = name: throw |
||||||
|
''[${name}] The niv type "builtin-tarball" is deprecated. You should instead use `builtin = true`. |
||||||
|
$ niv modify ${name} -a type=tarball -a builtin=true''; |
||||||
|
|
||||||
|
fetch_builtin-url = name: throw |
||||||
|
''[${name}] The niv type "builtin-url" will soon be deprecated. You should instead use `builtin = true`. |
||||||
|
$ niv modify ${name} -a type=file -a builtin=true''; |
||||||
|
|
||||||
|
# |
||||||
|
# Various helpers |
||||||
|
# |
||||||
|
|
||||||
|
# https://github.com/NixOS/nixpkgs/pull/83241/files#diff-c6f540a4f3bfa4b0e8b6bafd4cd54e8bR695 |
||||||
|
sanitizeName = name: |
||||||
|
( |
||||||
|
concatMapStrings (s: if builtins.isList s then "-" else s) |
||||||
|
( |
||||||
|
builtins.split "[^[:alnum:]+._?=-]+" |
||||||
|
((x: builtins.elemAt (builtins.match "\\.*(.*)" x) 0) name) |
||||||
|
) |
||||||
|
); |
||||||
|
|
||||||
|
# The set of packages used when specs are fetched using non-builtins. |
||||||
|
mkPkgs = sources: system: |
||||||
|
let |
||||||
|
sourcesNixpkgs = |
||||||
|
import (builtins_fetchTarball { inherit (sources.nixpkgs) url sha256; }) { inherit system; }; |
||||||
|
hasNixpkgsPath = builtins.any (x: x.prefix == "nixpkgs") builtins.nixPath; |
||||||
|
hasThisAsNixpkgsPath = <nixpkgs> == ./.; |
||||||
|
in |
||||||
|
if builtins.hasAttr "nixpkgs" sources |
||||||
|
then sourcesNixpkgs |
||||||
|
else if hasNixpkgsPath && ! hasThisAsNixpkgsPath then |
||||||
|
import <nixpkgs> {} |
||||||
|
else |
||||||
|
abort |
||||||
|
'' |
||||||
|
Please specify either <nixpkgs> (through -I or NIX_PATH=nixpkgs=...) or |
||||||
|
add a package called "nixpkgs" to your sources.json. |
||||||
|
''; |
||||||
|
|
||||||
|
# The actual fetching function. |
||||||
|
fetch = pkgs: name: spec: |
||||||
|
|
||||||
|
if ! builtins.hasAttr "type" spec then |
||||||
|
abort "ERROR: niv spec ${name} does not have a 'type' attribute" |
||||||
|
else if spec.type == "file" then fetch_file pkgs name spec |
||||||
|
else if spec.type == "tarball" then fetch_tarball pkgs name spec |
||||||
|
else if spec.type == "git" then fetch_git name spec |
||||||
|
else if spec.type == "local" then fetch_local spec |
||||||
|
else if spec.type == "builtin-tarball" then fetch_builtin-tarball name |
||||||
|
else if spec.type == "builtin-url" then fetch_builtin-url name |
||||||
|
else |
||||||
|
abort "ERROR: niv spec ${name} has unknown type ${builtins.toJSON spec.type}"; |
||||||
|
|
||||||
|
# If the environment variable NIV_OVERRIDE_${name} is set, then use |
||||||
|
# the path directly as opposed to the fetched source. |
||||||
|
replace = name: drv: |
||||||
|
let |
||||||
|
saneName = stringAsChars (c: if isNull (builtins.match "[a-zA-Z0-9]" c) then "_" else c) name; |
||||||
|
ersatz = builtins.getEnv "NIV_OVERRIDE_${saneName}"; |
||||||
|
in |
||||||
|
if ersatz == "" then drv else ersatz; |
||||||
|
|
||||||
|
# Ports of functions for older nix versions |
||||||
|
|
||||||
|
# a Nix version of mapAttrs if the built-in doesn't exist |
||||||
|
mapAttrs = builtins.mapAttrs or ( |
||||||
|
f: set: with builtins; |
||||||
|
listToAttrs (map (attr: { name = attr; value = f attr set.${attr}; }) (attrNames set)) |
||||||
|
); |
||||||
|
|
||||||
|
# https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/lists.nix#L295 |
||||||
|
range = first: last: if first > last then [] else builtins.genList (n: first + n) (last - first + 1); |
||||||
|
|
||||||
|
# https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L257 |
||||||
|
stringToCharacters = s: map (p: builtins.substring p 1 s) (range 0 (builtins.stringLength s - 1)); |
||||||
|
|
||||||
|
# https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L269 |
||||||
|
stringAsChars = f: s: concatStrings (map f (stringToCharacters s)); |
||||||
|
concatMapStrings = f: list: concatStrings (map f list); |
||||||
|
concatStrings = builtins.concatStringsSep ""; |
||||||
|
|
||||||
|
# https://github.com/NixOS/nixpkgs/blob/8a9f58a375c401b96da862d969f66429def1d118/lib/attrsets.nix#L331 |
||||||
|
optionalAttrs = cond: as: if cond then as else {}; |
||||||
|
|
||||||
|
# fetchTarball version that is compatible between all the versions of Nix |
||||||
|
builtins_fetchTarball = { url, name ? null, sha256 }@attrs: |
||||||
|
let |
||||||
|
inherit (builtins) lessThan nixVersion fetchTarball; |
||||||
|
in |
||||||
|
if lessThan nixVersion "1.12" then |
||||||
|
fetchTarball ({ inherit url; } // (optionalAttrs (!isNull name) { inherit name; })) |
||||||
|
else |
||||||
|
fetchTarball attrs; |
||||||
|
|
||||||
|
# fetchurl version that is compatible between all the versions of Nix |
||||||
|
builtins_fetchurl = { url, name ? null, sha256 }@attrs: |
||||||
|
let |
||||||
|
inherit (builtins) lessThan nixVersion fetchurl; |
||||||
|
in |
||||||
|
if lessThan nixVersion "1.12" then |
||||||
|
fetchurl ({ inherit url; } // (optionalAttrs (!isNull name) { inherit name; })) |
||||||
|
else |
||||||
|
fetchurl attrs; |
||||||
|
|
||||||
|
# Create the final "sources" from the config |
||||||
|
mkSources = config: |
||||||
|
mapAttrs ( |
||||||
|
name: spec: |
||||||
|
if builtins.hasAttr "outPath" spec |
||||||
|
then abort |
||||||
|
"The values in sources.json should not have an 'outPath' attribute" |
||||||
|
else |
||||||
|
spec // { outPath = replace name (fetch config.pkgs name spec); } |
||||||
|
) config.sources; |
||||||
|
|
||||||
|
# The "config" used by the fetchers |
||||||
|
mkConfig = |
||||||
|
{ sourcesFile ? if builtins.pathExists ./sources.json then ./sources.json else null |
||||||
|
, sources ? if isNull sourcesFile then {} else builtins.fromJSON (builtins.readFile sourcesFile) |
||||||
|
, system ? builtins.currentSystem |
||||||
|
, pkgs ? mkPkgs sources system |
||||||
|
}: rec { |
||||||
|
# The sources, i.e. the attribute set of spec name to spec |
||||||
|
inherit sources; |
||||||
|
|
||||||
|
# The "pkgs" (evaluated nixpkgs) to use for e.g. non-builtin fetchers |
||||||
|
inherit pkgs; |
||||||
|
}; |
||||||
|
|
||||||
|
in |
||||||
|
mkSources (mkConfig {}) // { __functor = _: settings: mkSources (mkConfig settings); } |
Loading…
Reference in new issue