1
1
mirror of https://github.com/divnix/digga.git synced 2024-08-15 18:10:24 +03:00

ref: adapt to fup upstream refactoring

This commit is contained in:
David Arnold 2021-07-20 18:24:39 -05:00 committed by Parthiv Seetharaman
parent 6562558a4b
commit 0c266bafdf
14 changed files with 298 additions and 260 deletions

View File

@ -4,9 +4,8 @@
let
nixpkgs = inputs.nixpkgs;
diggalib = inputs.lib; # digga internals
nixlib = inputs.nixlib;
lib = nixlib // diggalib;
digga = inputs.digga;
lib = nixpkgs.lib // digga.lib;
pkgs = import nixpkgs { inherit system; config = { }; overlays = [ ]; };
in

113
deprecated.nix Normal file
View File

@ -0,0 +1,113 @@
{ lib, flake-utils-plus, internal-modules, importers, nixosModules }:
let
importers' = importers;
in
lib.warn ''
You are accessing a deprecated item of the digga lib.
Please update timely, it will be remove soon.
''
rec {
mkSuites = lib.warn ''
Deprecated Function: mkSuites.
''
(
{ suites, profiles }:
let
profileSet = lib.genAttrs' profiles (path: {
name = baseNameOf path;
value = mkProfileAttrs (toString path);
});
in
lib.mapAttrs (_: v: lib.profileMap v) (suites profileSet)
)
;
mkProfileAttrs = lib.warn ''
Deprecated Function: mkProfileAttrs.
''
(
dir:
let
imports =
let
files = builtins.readDir dir;
p = n: v:
v == "directory"
&& n != "profiles";
in
lib.filterAttrs p files;
f = n: _:
lib.optionalAttrs
(lib.pathExists (dir + "/${n}/default.nix"))
{ default = dir + "/${n}"; }
// mkProfileAttrs (dir + "/${n}");
in
lib.mapAttrs f imports
)
;
profileMap =
lib.warn ''
Deprecated Function: profileMap.
''
(
list: map (profile: profile.default) (lib.flatten list)
)
;
exporters =
lib.warn ''
Deprecated Attribute Set: lib.exporters.
Please use export* functions instead:
lib.exporters.modulesFromList -> lib.exportModules
lib.exporters.fromOverlays -> lib.exportPackages
lib.exporters.internalOverlays -> lib.exportOverlays
''
{
modulesFromList = flake-utils-plus.exportModules;
fromOverlays = flake-utils-plus.exportPackages;
internalOverlays = flake-utils-plus.exportOverlays;
}
;
modules =
lib.warn ''
Deprecated Attribute Set: lib.modules.
Internal modules 'customBuilds', 'hmNixosDefaults' & 'globalDefaults'
will be completely removed from the api soon.
Please use digga.nixosModules for exported modules or proto-modules:
lib.modules.isoConfig -> nixosModules.boostrapIso
''
(
internal-modules // { isoConfig = nixosModules.boostrapIso; }
)
;
importers =
lib.warn ''
Deprecated Attribute Set: lib.importers.
Please use import* functions instead:
lib.importers.overlays -> lib.importOverlays
lib.importers.modules -> lib.importModules
lib.importers.hosts -> lib.importHosts
lib.importers.rakeLeaves -> lib.rakeLeaves
lib.importers.flattenTree -> lib.flattenTree
''
{
overlays = importers'.importOverlays;
modules = importers'.importModules;
hosts = importers'.importHosts;
rakeLeaves = importers'.rakeLeaves;
flattenTree = importers'.flattenTree;
}
;
}

@ -1 +1 @@
Subproject commit 19e73bc63448740b4c89e993555b82eb13062924
Subproject commit c673440504250bbca93d69c6f404c7024568b430

View File

@ -86,6 +86,27 @@
"type": "github"
}
},
"flake-utils-plus": {
"inputs": {
"flake-utils": [
"flake-utils"
]
},
"locked": {
"lastModified": 1626825599,
"narHash": "sha256-hgjuzvLE+jlt9z6k5MDbc0Fod4k5frZGnN7zArrlpd4=",
"owner": "gytis-ivaskevicius",
"repo": "flake-utils-plus",
"rev": "ea46e02fb86785d3c883d658b194d69799386673",
"type": "github"
},
"original": {
"owner": "gytis-ivaskevicius",
"ref": "staging",
"repo": "flake-utils-plus",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
@ -173,34 +194,13 @@
"deploy": "deploy",
"devshell": "devshell",
"flake-utils": "flake-utils",
"flake-utils-plus": "flake-utils-plus",
"home-manager": "home-manager",
"nixlib": [
"nixpkgs"
],
"nixos-generators": "nixos-generators",
"nixpkgs": "nixpkgs",
"utils": "utils"
}
},
"utils": {
"inputs": {
"flake-utils": [
"flake-utils"
]
},
"locked": {
"lastModified": 1626288344,
"narHash": "sha256-TioHDqWJkw37jjx4DVrH6LCzwrUfAqXbWl4rKR91fpA=",
"owner": "gytis-ivaskevicius",
"repo": "flake-utils-plus",
"rev": "5c6ee69f6957afc2fe22c094717d6d78516418b5",
"type": "github"
},
"original": {
"owner": "gytis-ivaskevicius",
"ref": "staging",
"repo": "flake-utils-plus",
"type": "github"
"nixpkgs": "nixpkgs"
}
}
},

108
flake.nix
View File

@ -18,7 +18,7 @@
home-manager.inputs.nixpkgs.follows = "nixlib";
devshell.url = "github:numtide/devshell";
utils.url = "github:gytis-ivaskevicius/flake-utils-plus/staging";
flake-utils-plus.url = "github:gytis-ivaskevicius/flake-utils-plus/staging";
nixos-generators.url = "github:nix-community/nixos-generators";
nixos-generators.inputs.nixpkgs.follows = "blank";
@ -29,7 +29,7 @@
# remove after https://github.com/NixOS/nix/pull/4641
# and uncomment the poper lines using "utils/flake-utils" above
flake-utils.url = "github:numtide/flake-utils";
utils.inputs.flake-utils.follows = "flake-utils";
flake-utils-plus.inputs.flake-utils.follows = "flake-utils";
deploy.inputs.utils.follows = "flake-utils";
nixos-generators.inputs.utils.follows = "flake-utils";
# end ANTI CORRUPTION LAYER
@ -41,45 +41,34 @@
, nixpkgs
, deploy
, devshell
, utils
, flake-utils-plus
, nixos-generators
, home-manager
, ...
}@inputs:
let
lib = nixlib.lib.makeExtensible (self:
let combinedLib = nixlib.lib // self; in
with self;
utils.lib // {
tests = import ./src/tests.nix { lib = combinedLib; };
tests = import ./src/tests.nix { inherit (nixpkgs) lib; };
modules = import ./src/modules.nix {
lib = combinedLib;
inherit nixos-generators;
};
internal-modules = import ./src/modules.nix {
inherit (nixpkgs) lib;
inherit nixos-generators;
};
importers = import ./src/importers.nix {
lib = combinedLib;
};
importers = import ./src/importers.nix {
inherit (nixpkgs) lib;
};
generators = import ./src/generators.nix {
lib = combinedLib;
inherit deploy;
};
generators = import ./src/generators.nix {
inherit (nixpkgs) lib;
inherit deploy;
};
mkFlake = import ./src/mkFlake {
inherit deploy devshell home-manager;
lib = combinedLib;
};
inherit (attrs) mapFilterAttrs genAttrs' concatAttrs;
inherit (lists) unifyOverlays;
inherit (strings) rgxToString;
inherit (importers) profileMap flattenTree rakeLeaves mkProfileAttrs maybeImportDevshellModule;
inherit (generators) mkSuites mkDeployNodes mkHomeConfigurations;
}
);
mkFlake = import ./src/mkFlake {
inherit (nixpkgs) lib;
inherit (flake-utils-plus.inputs) flake-utils;
inherit deploy devshell home-manager flake-utils-plus internal-modules tests;
};
# Unofficial Flakes Roadmap - Polyfills
# .. see: https://demo.hedgedoc.org/s/_W6Ve03GK#
@ -90,7 +79,7 @@
ufrContract = import ./ufr-polyfills/ufrContract.nix;
# Dependency Groups - Style
checksInputs = { inherit nixpkgs lib; nixlib = nixlib.lib; };
checksInputs = { inherit nixpkgs; digga = self; };
jobsInputs = { inherit nixpkgs; digga = self; };
devShellInputs = { inherit nixpkgs devshell; };
@ -98,43 +87,36 @@
# .. it's adopted by a growing number of projects.
# Please consider adopting it if you want to help to improve flakes.
# DEPRECATED - will be removed timely
deprecated = import ./deprecated.nix {
inherit (nixpkgs) lib;
inherit (self) nixosModules;
inherit flake-utils-plus internal-modules importers;
};
in
{
# what you came for ...
lib =
let
lib = {
inherit (flake-utils-plus.inputs.flake-utils) defaultSystems eachSystem eachDefaultSystem filterPackages;
inherit (flake-utils-plus) exportModules exportOverlays exportPackages;
inherit mkFlake;
inherit (tests) mkTest;
inherit (importers) flattenTree rakeLeaves importOverlays importModules importHosts;
inherit (generators) mkDeployNodes mkHomeConfigurations;
fupLib = with utils.lib; {
# DEPRECATED - will be removed soon
inherit (deprecated)
mkSuites
profileMap
mkProfileAttrs
exporters
modules
importers
;
inherit
systemFlake
exporters
;
};
diggaLib = with lib; {
inherit
modules
importers
;
inherit (lib)
mkFlake
mkDeployNodes
mkHomeConfigurations
;
inherit (lib.tests)
mkTest
;
};
in
fupLib // diggaLib;
};
# a little extra service ...
overlays = import ./overlays;

78
modules/boostrap-iso.nix Normal file
View File

@ -0,0 +1,78 @@
{ self, fullHostConfig }:
{ config, lib, modulesPath, suites, ... }@args: {
imports = [ "${modulesPath}/installer/cd-dvd/installation-cd-minimal-new-kernel.nix" ];
# avoid unwanted systemd service startups
disabledModules =
if (suites != null)
then
let
allProfiles = lib.foldl
(lhs: rhs: lhs ++ rhs) [ ]
(builtins.attrValues suites);
in
# we choose to satisfy the path contract of disabledModules
assert
lib.assertMsg
(builtins.all (p: lib.types.path.check p) allProfiles)
"all profiles used in suites must be paths";
allProfiles
else
lib.warn ''
Any profiles that you have defined outside 'importables.suites'
will not be disabled on this ISO. That means services defined
there will unnessecarily launch on this installation medium.
'' [ ];
nix.registry = lib.mapAttrs (n: v: { flake = v; }) self.inputs;
isoImage.isoBaseName = "nixos-" + config.networking.hostName;
isoImage.contents = [{
source = self;
target = "/devos/";
}];
isoImage.storeContents = [
self.devShell.${config.nixpkgs.system}
# include also closures that are "switched off" by the
# above profile filter on the local config attribute
fullHostConfig.system.build.toplevel
];
# still pull in tools of deactivated profiles
environment.systemPackages = fullHostConfig.environment.systemPackages;
# confilcts with networking.wireless which might be slightly
# more useful on a stick
networking.networkmanager.enable = lib.mkForce false;
# confilcts with networking.wireless
networking.wireless.iwd.enable = lib.mkForce false;
# Set up a link-local boostrap network
# See also: https://github.com/NixOS/nixpkgs/issues/75515#issuecomment-571661659
networking.usePredictableInterfaceNames = lib.mkForce true; # so prefix matching works
networking.useNetworkd = lib.mkForce true;
networking.useDHCP = lib.mkForce false;
networking.dhcpcd.enable = lib.mkForce false;
systemd.network = {
# https://www.freedesktop.org/software/systemd/man/systemd.network.html
networks."boostrap-link-local" = {
matchConfig = {
Name = "en* wl* ww*";
};
networkConfig = {
Description = "Link-local host bootstrap network";
MulticastDNS = true;
LinkLocalAddressing = "ipv6";
DHCP = "yes";
};
address = [
# fall back well-known link-local for situations where MulticastDNS is not available
"fe80::47" # 47: n=14 i=9 x=24; n+i+x
];
extraConfig = ''
# Unique, yet stable. Based off the MAC address.
IPv6LinkLocalAddressGenerationMode = "eui64"
'';
};
};
}

View File

@ -1,3 +1,4 @@
{
nixConfig = import ./nix-config.nix;
bootstapIso = import ./boostrap-iso.nix;
}

View File

@ -52,15 +52,4 @@
}
extraConfig)
hosts;
# DEPRECATED, suites no longer needs an explicit function after the importables generalization
# deprecation message for suites is already in evalArgs
mkSuites = { suites, profiles }:
let
profileSet = lib.genAttrs' profiles (path: {
name = baseNameOf path;
value = lib.mkProfileAttrs (toString path);
});
in
lib.mapAttrs (_: v: lib.profileMap v) (suites profileSet);
}

View File

@ -113,60 +113,11 @@ let
in
lib.filterAttrs (n: v: v != { }) (lib.mapAttrs' collect files);
# DEPRECATED, prefer rakeLeaves
mkProfileAttrs =
/**
Synopsis: mkProfileAttrs _path_
Recursively collect the subdirs of _path_ containing a default.nix into attrs.
This sets a contract, eliminating ambiguity for _default.nix_ living under the
profile directory.
Example:
let profiles = mkProfileAttrs ./profiles; in
assert profiles ? core.default; 0
**/
dir:
let
imports =
let
files = builtins.readDir dir;
p = n: v:
v == "directory"
&& n != "profiles";
in
lib.filterAttrs p files;
f = n: _:
lib.optionalAttrs
(lib.pathExists (dir + "/${n}/default.nix"))
{ default = dir + "/${n}"; }
// mkProfileAttrs (dir + "/${n}");
in
lib.mapAttrs f imports;
in
{
inherit rakeLeaves flattenTree;
mkProfileAttrs = builtins.trace ''
The function, mkProfileAttrs, has been deprecated, you can now create profile sets
with the standard importer, rakeLeaves. The formmat of rakeLeaves is a little different,
because it doesn't recurse into directories with `default.nix` files in them. So some
of your sub-profiles might no longer be collected. Make sure to update your profiles
with that in mind;
See https://github.com/divnix/digga/pull/29 for more details
''
mkProfileAttrs;
# DEPRECATED, both versions of `profileMap` are no longer necessary
# paths are type-checked for suites in evalArgs
# and `.default` isn't special with `rakeLeaves`
/** profileMap = list: map
(p: getProfilePath (throw "passed profile ${builtins.toJSON p} isn't a path") p)
(lib.flatten list); **/
profileMap = list: map (profile: profile.default) (lib.flatten list);
overlays = dir:
importOverlays = dir:
{
# Meant to output a module that sets the overlays option
# overlays order matters. mkAfter ensures those in-house
@ -175,13 +126,13 @@ in
overlays = lib.mkAfter (builtins.attrValues (flattenTree (rakeLeaves dir)));
};
modules = dir:
importModules = dir:
{
# Meant to output a module that sets the modules option
modules = builtins.attrValues (flattenTree (rakeLeaves dir));
};
hosts = dir:
importHosts = dir:
{
# Meant to output a module that sets the hosts option (including constructed host names)
hosts = lib.mapAttrs

View File

@ -1,4 +1,4 @@
{ lib, deploy, devshell, home-manager } @ injectedDeps:
{ lib, deploy, devshell, home-manager, flake-utils-plus, flake-utils, internal-modules, tests } @ injectedDeps:
{ self, inputs, ... } @ args:
let
@ -9,12 +9,7 @@ let
fupAdapter' = import ./fup-adapter.nix injectedDeps';
defaultOutputsBuilder' = import ./outputs-builder.nix injectedDeps';
evaled = lib.evalModules {
modules = [
args
options'
];
};
evaled = lib.evalModules { modules = [ args options' ]; };
defaultOutputsBuilder = defaultOutputsBuilder' evaled.config;

View File

@ -1,5 +1,5 @@
# constructor dependencies
{ lib, ... }:
{ lib, flake-utils-plus, internal-modules, ... }:
{
# evaluated digga configuration
@ -23,11 +23,11 @@ let
];
defaultHostModules = [
(lib.modules.hmNixosDefaults {
(internal-modules.hmNixosDefaults {
specialArgs = config.home.importables;
modules = config.home.modules ++ config.home.externalModules;
})
(lib.modules.globalDefaults {
(internal-modules.globalDefaults {
self = config.self;
hmUsers = config.home.users;
})
@ -40,7 +40,7 @@ let
''
{ });
})
lib.modules.customBuilds
internal-modules.customBuilds
];
unifyOverlays = channels: map (o: if builtins.isFunction (o null null) then o channels else o);
@ -57,10 +57,12 @@ let
"externalModules"
];
in
lib.systemFlake (lib.mergeAny
{
inherit (config) self inputs channelsConfig supportedSystems;
diggaFupArgs = {
inherit (config)
self
inputs
channelsConfig
supportedSystems;
inherit sharedOverlays;
hosts = builtins.mapAttrs (_: stripHost) config.nixos.hosts;
@ -74,18 +76,18 @@ lib.systemFlake (lib.mergeAny
)
config.channels;
hostDefaults = lib.mergeAny (stripHost config.nixos.hostDefaults) {
hostDefaults = flake-utils-plus.lib.mergeAny (stripHost config.nixos.hostDefaults) {
specialArgs = config.nixos.importables;
modules = config.nixos.hostDefaults.externalModules ++ defaultHostModules;
};
nixosModules = lib.exporters.modulesFromList config.nixos.hostDefaults.modules;
nixosModules = flake-utils-plus.lib.exportModules config.nixos.hostDefaults.modules;
homeModules = lib.exporters.modulesFromList config.home.modules;
homeModules = flake-utils-plus.lib.exportModules config.home.modules;
devshellModules = lib.exporters.modulesFromList config.devshell.modules;
devshellModules = flake-utils-plus.lib.exportModules config.devshell.modules;
overlays = lib.exporters.internalOverlays {
overlays = flake-utils-plus.lib.exporters.internalOverlays {
# since we can't detect overlays owned by self
# we have to filter out ones exported by the inputs
# optimally we would want a solution for NixOS/nix#4740
@ -94,8 +96,14 @@ lib.systemFlake (lib.mergeAny
};
outputsBuilder = channels:
lib.mergeAny (defaultOutputsBuilder channels) (config.outputsBuilder channels);
flake-utils-plus.lib.mergeAny (defaultOutputsBuilder channels) (config.outputsBuilder channels);
}
extraArgs # for overlays list order
)
};
in
flake-utils-plus.lib.mkFlake
(
flake-utils-plus.lib.mergeAny
diggaFupArgs
extraArgs # for overlays list order
)

View File

@ -1,5 +1,5 @@
# constructor dependencies
{ lib, devshell, self, inputs, ... }:
{ lib, devshell, flake-utils, self, inputs, ... }:
with lib;
@ -370,7 +370,7 @@ in
};
supportedSystems = mkOption {
type = listOf str;
default = lib.defaultSystems;
default = flake-utils.lib.defaultSystems;
description = ''
The systems supported by this flake
'';

View File

@ -1,5 +1,5 @@
# constructor dependencies
{ lib, deploy, devshell, home-manager, ... }:
{ lib, deploy, devshell, home-manager, flake-utils-plus, tests, ... }:
config: channels:
let
@ -47,7 +47,7 @@ in
inherit homeConfigurationsPortable;
packages = lib.exporters.fromOverlays config.self.overlays channels;
packages = flake-utils-plus.lib.exportPackages config.self.overlays channels;
devShell = (import devshell { inherit system pkgs; }).mkShell {
name = lib.mkDefault config.nixos.hostDefaults.channelName;
@ -115,7 +115,7 @@ in
createProfilesTestOp = n: host: {
name = "allProfilesTestFor-${n}";
value = lib.tests.profilesTest {
value = tests.profilesTest {
inherit host pkgs;
};
};

View File

@ -60,83 +60,5 @@
system.configurationRevision = lib.mkIf (self ? rev) self.rev;
};
isoConfig = { self, fullHostConfig }:
{ config, modulesPath, suites, ... }@args: {
imports = [ "${modulesPath}/installer/cd-dvd/installation-cd-minimal-new-kernel.nix" ];
# avoid unwanted systemd service startups
disabledModules =
if (suites != null)
then
let
allProfiles = lib.foldl
(lhs: rhs: lhs ++ rhs) [ ]
(builtins.attrValues suites);
in
# we choose to satisfy the path contract of disabledModules
assert
lib.assertMsg
(builtins.all (p: lib.types.path.check p) allProfiles)
"all profiles used in suites must be paths";
allProfiles
else
lib.warn ''
Any profiles that you have defined outside 'importables.suites'
will not be disabled on this ISO. That means services defined
there will unnessecarily launch on this installation medium.
'' [ ];
nix.registry = lib.mapAttrs (n: v: { flake = v; }) self.inputs;
isoImage.isoBaseName = "nixos-" + config.networking.hostName;
isoImage.contents = [{
source = self;
target = "/devos/";
}];
isoImage.storeContents = [
self.devShell.${config.nixpkgs.system}
# include also closures that are "switched off" by the
# above profile filter on the local config attribute
fullHostConfig.system.build.toplevel
];
# still pull in tools of deactivated profiles
environment.systemPackages = fullHostConfig.environment.systemPackages;
# confilcts with networking.wireless which might be slightly
# more useful on a stick
networking.networkmanager.enable = lib.mkForce false;
# confilcts with networking.wireless
networking.wireless.iwd.enable = lib.mkForce false;
# Set up a link-local boostrap network
# See also: https://github.com/NixOS/nixpkgs/issues/75515#issuecomment-571661659
networking.usePredictableInterfaceNames = lib.mkForce true; # so prefix matching works
networking.useNetworkd = lib.mkForce true;
networking.useDHCP = lib.mkForce false;
networking.dhcpcd.enable = lib.mkForce false;
systemd.network = {
# https://www.freedesktop.org/software/systemd/man/systemd.network.html
networks."boostrap-link-local" = {
matchConfig = {
Name = "en* wl* ww*";
};
networkConfig = {
Description = "Link-local host bootstrap network";
MulticastDNS = true;
LinkLocalAddressing = "ipv6";
DHCP = "yes";
};
address = [
# fall back well-known link-local for situations where MulticastDNS is not available
"fe80::47" # 47: n=14 i=9 x=24; n+i+x
];
extraConfig = ''
# Unique, yet stable. Based off the MAC address.
IPv6LinkLocalAddressGenerationMode = "eui64"
'';
};
};
};
}