Skip to content

Commit f8b5b8f

Browse files
authored
feat(repositories): add flag to disable auto dependencies fetching (#61)
1 parent fc01cb2 commit f8b5b8f

2 files changed

Lines changed: 26 additions & 9 deletions

File tree

lib/icedos.nix

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,16 @@ let
4646
}) config.repositories
4747
);
4848

49+
# Map of repository baseUrl -> its config.toml `fetchDependencies` flag.
50+
# When false, that repo's modules pull NO declared dependencies at all
51+
# (required or optional); the listed modules themselves still load.
52+
repoFetchDeps = builtins.listToAttrs (
53+
map (r: {
54+
name = (_parseFlakeUrl r.url).baseUrl;
55+
value = r.fetchDependencies or true;
56+
}) config.repositories
57+
);
58+
4959
# Fetch a modules repository, resolving the URL and loading its icedos modules
5060
# Handles overrides, flake resolution, and module file loading
5161
fetchModulesRepository =
@@ -415,18 +425,22 @@ let
415425
_getModuleDependencies =
416426
{
417427
mod,
428+
fetchDependencies,
418429
fetchOptionalDependencies,
419430
}:
420-
let
421-
inherit (mod) meta;
431+
if !fetchDependencies then
432+
[ ]
433+
else
434+
let
435+
inherit (mod) meta;
422436

423-
# Tag each dep group so it can later be labelled required vs optional
424-
tag = isOptional: map (d: d // { _optional = isOptional; });
425-
baseDeps = tag false (meta.dependencies or [ ]);
426-
optionalDeps =
427-
if fetchOptionalDependencies then tag true (meta.optionalDependencies or [ ]) else [ ];
428-
in
429-
baseDeps ++ optionalDeps;
437+
# Tag each dep group so it can later be labelled required vs optional
438+
tag = isOptional: map (d: d // { _optional = isOptional; });
439+
baseDeps = tag false (meta.dependencies or [ ]);
440+
optionalDeps =
441+
if fetchOptionalDependencies then tag true (meta.optionalDependencies or [ ]) else [ ];
442+
in
443+
baseDeps ++ optionalDeps;
430444

431445
# Convert dependency metadata to resolved dependency entries (filtering already-loaded modules)
432446
_resolveDependencyEntries =
@@ -522,8 +536,10 @@ let
522536
_resolveDependencyEntries {
523537
deps = _getModuleDependencies {
524538
inherit mod;
539+
fetchDependencies = repoFetchDeps.${mod._repoInfo.url} or true;
525540
fetchOptionalDependencies = repoFetchOptional.${mod._repoInfo.url} or false;
526541
};
542+
527543
sourceUrl = newDep.url;
528544
requestedBy = {
529545
kind = "module";

modules/options.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ in
121121
repositories = mkSubmoduleListOption { default = [ ]; } {
122122
url = mkStrOption { };
123123
overrideUrl = mkStrOption { default = ""; };
124+
fetchDependencies = mkBoolOption { default = true; };
124125
fetchOptionalDependencies = mkBoolOption { default = false; };
125126
modules = mkStrListOption { default = [ ]; };
126127
};

0 commit comments

Comments
 (0)