stockholm/default.nix

82 lines
2.3 KiB
Nix
Raw Normal View History

2015-09-26 22:22:50 +00:00
{ user-name, host-name }:
2015-07-24 15:34:08 +00:00
let
2015-09-26 22:22:50 +00:00
lib = import <nixpkgs/lib>;
2015-07-24 15:34:08 +00:00
2015-09-26 22:22:50 +00:00
krebs-modules-path = ./krebs/3modules;
krebs-pkgs-path = ./krebs/5pkgs;
user-modules-path = ./. + "/${user-name}/3modules";
user-pkgs-path = ./. + "/${user-name}/5pkgs";
out =
(lib.mapAttrs (k: v: mk-namespace (./. + "/${k}"))
(lib.filterAttrs
(k: v: !lib.hasPrefix "." k && v == "directory")
(builtins.readDir ./.)));
eval = path: import <nixpkgs/nixos/lib/eval-config.nix> {
2015-07-24 15:34:08 +00:00
system = builtins.currentSystem;
2015-09-26 22:22:50 +00:00
modules = [
({ config, ... }:
with import ./krebs/4lib { inherit lib; };
{
options.krebs.exec.host = mkOption {
type = types.host;
default = config.krebs.hosts.${host-name};
};
options.krebs.exec.user = mkOption {
type = types.user;
default = config.krebs.users.${user-name};
};
}
)
path
krebs-modules-path
user-modules-path
2015-08-28 22:17:25 +00:00
] ++ [
2015-09-26 22:22:50 +00:00
({ config, lib, pkgs, ... }@args: {
2015-08-28 22:17:25 +00:00
_module.args.pkgs =
2015-09-26 22:22:50 +00:00
(import krebs-pkgs-path args) //
(import user-pkgs-path args);
2015-08-28 22:17:25 +00:00
})
2015-07-25 16:16:51 +00:00
];
};
2015-07-24 15:34:08 +00:00
2015-09-26 22:22:50 +00:00
mk-namespace = path: mapNixDir mk-system (path + "/1systems");
mk-system = path: rec {
inherit (eval path) config options;
system = config.system.build.toplevel;
fetch = import ./krebs/0tools/fetch.nix { inherit config lib; };
};
mapNixDir = f: path: lib.mapAttrs (_: f) (nixDir path);
nixDir = path:
builtins.listToAttrs
(catMaybes
(lib.mapAttrsToList
(k: v: {
directory =
let p = path + "/${k}/default.nix"; in
if builtins.pathExists p
then Just (lib.nameValuePair k p)
else Nothing;
regular =
let p = path + "/${k}"; in
if lib.hasSuffix ".nix" p
then Just (lib.nameValuePair (lib.removeSuffix ".nix" k) p)
else Nothing;
}.${v} or Nothing)
(builtins.readDir path)));
2015-07-24 15:34:08 +00:00
2015-09-26 22:22:50 +00:00
# TODO move to lib
Just = x: { type = "maybe"; value = x; };
Nothing = { type = "maybe"; };
isMaybe = x: builtins.typeOf x == "set" && x.type or false == "maybe";
isJust = x: isMaybe x && builtins.hasAttr "value" x;
fromJust = x: assert isJust x; x.value;
catMaybes = xs: map fromJust (builtins.filter isJust xs);
2015-07-24 15:34:08 +00:00
2015-09-26 22:22:50 +00:00
in out