Type checking of secrets was removed in cff6575948 to get rid of yants.
This adds back type checking using Korora.
Fixes https://git.snix.dev/snix/snix/issues/71
Change-Id: I27cd47b7e1810be5c4cd5d86366e860ca217f9c4
Reviewed-on: https://cl.snix.dev/c/snix/+/30118
Tested-by: besadii
Reviewed-by: Ryan Lahfa <masterancpp@gmail.com>
Reviewed-by: Florian Klink <flokli@flokli.de>
		
	
			
		
			
				
	
	
		
			27 lines
		
	
	
	
		
			780 B
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			27 lines
		
	
	
	
		
			780 B
		
	
	
	
		
			Nix
		
	
	
	
	
	
| # Expose secrets as part of the tree, exposing their paths at eval time.
 | |
| #
 | |
| # Note that encrypted secrets end up in the Nix store, but this is
 | |
| # fine since they're publicly available anyways.
 | |
| { depot, lib, ... }:
 | |
| let
 | |
|   types = depot.third_party.korora;
 | |
|   inherit (lib) hasPrefix isString;
 | |
| 
 | |
|   sshPubkey = types.typedef "SSH pubkey" (s: isString s && hasPrefix "ssh-" s);
 | |
| 
 | |
|   agePubkey = types.typedef "age pubkey" (s: isString s && hasPrefix "age" s);
 | |
| 
 | |
|   agenixSecret = types.struct "agenixSecret" {
 | |
|     publicKeys = types.listOf (types.union [
 | |
|       sshPubkey
 | |
|       agePubkey
 | |
|     ]);
 | |
|   };
 | |
| 
 | |
| in
 | |
| (
 | |
|   path: secrets:
 | |
|   depot.nix.readTree.drvTargets
 | |
|     # Import each secret into the Nix store
 | |
|     (builtins.mapAttrs (name: secret: agenixSecret.check secret "${path}/${name}") secrets)
 | |
| )
 |