1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
| | # SPDX-License-Identifier: MIT
# SPDX-FileCopyrightText: 2022 Unikie
{
description = "A compartmentalized operating system";
# NOTE: Revision specification format is ?ref=refs%2fheads%2f<BRANCH>&rev=<COMMIT_REVISION>
inputs.nixpkgs.url =
"git+https://spectrum-os.org/git/nixpkgs/?ref=refs%2fheads%2frootfs";
inputs.flake-utils.url = "github:numtide/flake-utils";
nixConfig = {
extra-substituters = [ "https://cache.dataaturservice.se/spectrum/" ];
trusted-public-keys = [
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
"spectrum-os.org-1:rnnSumz3+Dbs5uewPlwZSTP0k3g/5SRG4hD7Wbr9YuQ="
];
};
outputs = { self, nixpkgs, flake-utils }:
let
supportedSystems = with flake-utils.lib.system; [ x86_64-linux aarch64-linux ];
in flake-utils.lib.eachSystem supportedSystems (system:
let
pkgs = nixpkgs.legacyPackages.${system};
config = { inherit pkgs; };
lib = pkgs.lib;
mkEntryPoint = { name ? builtins.baseNameOf path, path
, enableShell ? true, enablePackage ? true }:
let
shell = {
# NOTE: https://stackoverflow.com/a/43850372
devShells.${name} =
import (path + "/shell.nix") { inherit config; };
};
package = { packages.${name} = import path { inherit config; }; };
in (if enableShell then shell else { })
// (if enablePackage then package else { });
# Entry point is a directory with shell.nix and default.nix
# This function maps every entry point to corresponding devShell and package
mapEntryPoints = epoints:
builtins.foldl' lib.recursiveUpdate { } (map mkEntryPoint epoints);
in lib.recursiveUpdate (mapEntryPoints [
{
path = ./.;
enablePackage = false;
}
{ path = ./host/initramfs; }
{ path = ./host/rootfs; }
{ path = ./host/start-vm; }
{ path = ./img/app; }
{ path = ./release/live; }
{ path = ./vm/sys/net; }
]) {
# Add some other flake schema related stuff here.
# NOTE: flake-utils.lib.eachDefaultSystem automagically adds ${system}.
devShells.documentation = import ./Documentation { inherit config; };
packages.documentation = import ./Documentation { inherit config; };
});
}
|