57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
# This module defines a system-wide environment that will be
 | 
						|
# initialised by pam_env (that is, not only in shells).
 | 
						|
{ config, lib, pkgs, ... }:
 | 
						|
 | 
						|
with lib;
 | 
						|
 | 
						|
let
 | 
						|
 | 
						|
  cfg = config.environment;
 | 
						|
 | 
						|
in
 | 
						|
 | 
						|
{
 | 
						|
 | 
						|
  options = {
 | 
						|
 | 
						|
    environment.sessionVariables = mkOption {
 | 
						|
      default = {};
 | 
						|
      description = ''
 | 
						|
        A set of environment variables used in the global environment.
 | 
						|
        These variables will be set by PAM.
 | 
						|
        The value of each variable can be either a string or a list of
 | 
						|
        strings.  The latter is concatenated, interspersed with colon
 | 
						|
        characters.
 | 
						|
      '';
 | 
						|
      type = types.attrsOf (mkOptionType {
 | 
						|
        name = "a string or a list of strings";
 | 
						|
        merge = loc: defs:
 | 
						|
          let
 | 
						|
            defs' = filterOverrides defs;
 | 
						|
            res = (head defs').value;
 | 
						|
          in
 | 
						|
          if isList res then concatLists (getValues defs')
 | 
						|
          else if lessThan 1 (length defs') then
 | 
						|
            throw "The option `${showOption loc}' is defined multiple times, in ${showFiles (getFiles defs)}."
 | 
						|
          else if !isString res then
 | 
						|
            throw "The option `${showOption loc}' does not have a string value, in ${showFiles (getFiles defs)}."
 | 
						|
          else res;
 | 
						|
      });
 | 
						|
      apply = mapAttrs (n: v: if isList v then concatStringsSep ":" v else v);
 | 
						|
    };
 | 
						|
 | 
						|
  };
 | 
						|
 | 
						|
  config = {
 | 
						|
 | 
						|
    system.build.pamEnvironment = pkgs.writeText "pam-environment"
 | 
						|
       ''
 | 
						|
         ${concatStringsSep "\n" (
 | 
						|
           (mapAttrsToList (n: v: ''${n}="${concatStringsSep ":" v}"'')
 | 
						|
             (zipAttrsWith (const concatLists) ([ (mapAttrs (n: v: [ v ]) cfg.sessionVariables) ]))))}
 | 
						|
       '';
 | 
						|
 | 
						|
  };
 | 
						|
 | 
						|
}
 |