···132132Works for any class (`nixos`, `darwin`, `homeManager`). The unfree predicate
133133builder is automatically included via `den.default`.
134134135135+### `den.provides.insecure`
136136+137137+Enables specific insecure packages by name:
138138+139139+```nix
140140+den.aspects.laptop.includes = [
141141+ (den.provides.insecure [ "foo-1.2.3" ])
142142+];
143143+```
144144+145145+Works for any class (`nixos`, `darwin`, `homeManager`). The insecure predicate
146146+builder is automatically included via `den.default`.
147147+135148### `den.provides.tty-autologin`
136149137150Enables automatic TTY1 login on NixOS:
···11+{ den, lib, ... }:
22+let
33+ inherit (den.lib)
44+ parametric
55+ ;
66+77+ description = ''
88+ This is a private aspect always included in den.default.
99+1010+ It adds a module option that gathers all packages defined
1111+ in den._.insecure usages and declares a
1212+ nixpkgs.config.permittedInsecurePackages for each class.
1313+1414+ '';
1515+1616+ insecureModule =
1717+ { config, ... }@args:
1818+ let
1919+ # nixpkgs.config must not be set when useGlobalPkgs is true.
2020+ globalPkgs = args.osConfig.home-manager.useGlobalPkgs or false;
2121+ hasInsecure = config.permittedInsecurePackages.packages != [ ];
2222+ in
2323+ {
2424+ options.permittedInsecurePackages.packages = lib.mkOption {
2525+ type = lib.types.listOf lib.types.str;
2626+ defaultText = lib.literalExpression "[ ]";
2727+ default = [ ];
2828+ };
2929+ config.nixpkgs = lib.mkIf (hasInsecure && !globalPkgs) {
3030+ config.permittedInsecurePackages = config.permittedInsecurePackages.packages;
3131+ };
3232+ };
3333+3434+ osAspect =
3535+ { host }:
3636+ {
3737+ ${host.class}.imports = [ insecureModule ];
3838+ };
3939+4040+ userAspect =
4141+ { host, user }:
4242+ lib.optionalAttrs (lib.elem "homeManager" user.classes) {
4343+ homeManager.imports = [ insecureModule ];
4444+ };
4545+4646+ homeAspect =
4747+ { home }:
4848+ {
4949+ ${home.class}.imports = [ insecureModule ];
5050+ };
5151+5252+ aspect = parametric.exactly {
5353+ inherit description;
5454+ includes = [
5555+ osAspect
5656+ userAspect
5757+ homeAspect
5858+ ];
5959+ };
6060+in
6161+{
6262+ den.default.includes = [ aspect ];
6363+}
+34
modules/aspects/provides/insecure/insecure.nix
···11+let
22+ description = ''
33+ A class generic aspect that enables insecure packages by name and version.
44+55+ Works for any class (nixos/darwin/homeManager,etc) on any host/user/home context.
66+77+ ## Usage
88+99+ den.aspects.my-laptop.includes = [ (den._.insecure [ "example-insecure-package-1.0.0" ]) ];
1010+1111+ It will dynamically provide a module for each class when accessed.
1212+ '';
1313+1414+ __functor =
1515+ _self: allowed-names:
1616+ { class, ... }:
1717+ if
1818+ (builtins.elem class [
1919+ "nixos"
2020+ "darwin"
2121+ "homeManager"
2222+ ])
2323+ then
2424+ {
2525+ ${class}.permittedInsecurePackages.packages = allowed-names;
2626+ }
2727+ else
2828+ { };
2929+in
3030+{
3131+ den.provides.insecure = {
3232+ inherit description __functor;
3333+ };
3434+}
···99 This is a private aspect always included in den.default.
10101111 It adds a module option that gathers all packages defined
1212- in den._.unfree usages and declares a
1212+ in den._.unfree usages and declares a
1313 nixpkgs.config.allowUnfreePredicate for each class.
14141515 '';
···1919 let
2020 # nixpkgs.config must not be set when useGlobalPkgs is true.
2121 globalPkgs = args.osConfig.home-manager.useGlobalPkgs or false;
2222- hasUnfree = lib.length config.unfree.packages > 0;
2222+ hasUnfree = config.unfree.packages != [ ];
2323 in
2424 {
2525 options.unfree.packages = lib.mkOption {