Thanks to the help from above, the solution I ended up using follows.
I made a function to generate an overlay that modifies the license of every package provided to say that it is a free license:
# make an overlay lambda that overrides the license of every provided package
# to spoof free-ness
# returns an attrset where the keys are the pnames of each derivation
mkUnfreeOverlay = packages: let
overrides = lib.pipe packages [
(map (value: { name = lib.getName value; inherit value; }))
builtins.listToAttrs
(builtins.mapAttrs (_: package: package.overrideAttrs (
old: lib.recursiveUpdate old {
meta.license = (
if builtins.isList old.meta.license
then map (_: { free = true; }) old.meta.license
else { free = true; }
);
}
)))
];
in (_: _: overrides);
This can then be used in a flake such as:
overlays = genSystems (system: let
pkgs = self.packages.${system};
in {
allowUnfree = flib.mkUnfreeOverlay [
pkgs.ttf-ms-win11
];
});
And to tell nixpkgs about it, I use:
pkgs = import nixpkgs {
inherit system;
config.allowUnfree = true;
overlays = [
self.overlays.${system}.allowUnfree
];
};
Then the package can be used like pkgs.ttf-ms-win11
anywhere with no headache.
Make sure to add { nixpkgs.pkgs = pkgs; }
in the nixosConfigurations
modules
list, and inherit pkgs
in homeConfigurations
just as usual.