62 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ config, lib, pkgs, ... }:
 | 
						|
 | 
						|
with lib;
 | 
						|
 | 
						|
let
 | 
						|
 | 
						|
  pkg = if config.hardware.sane.snapshot then pkgs.saneBackendsGit else pkgs.saneBackends;
 | 
						|
  backends = [ pkg ] ++ config.hardware.sane.extraBackends;
 | 
						|
  saneConfig = pkgs.mkSaneConfig { paths = backends; };
 | 
						|
 | 
						|
in
 | 
						|
 | 
						|
{
 | 
						|
 | 
						|
  ###### interface
 | 
						|
 | 
						|
  options = {
 | 
						|
 | 
						|
    hardware.sane.enable = mkOption {
 | 
						|
      type = types.bool;
 | 
						|
      default = false;
 | 
						|
      description = "Enable support for SANE scanners.";
 | 
						|
    };
 | 
						|
 | 
						|
    hardware.sane.snapshot = mkOption {
 | 
						|
      type = types.bool;
 | 
						|
      default = false;
 | 
						|
      description = "Use a development snapshot of SANE scanner drivers.";
 | 
						|
    };
 | 
						|
 | 
						|
    hardware.sane.extraBackends = mkOption {
 | 
						|
      type = types.listOf types.path;
 | 
						|
      default = [];
 | 
						|
      description = "Packages providing extra SANE backends to enable.";
 | 
						|
    };
 | 
						|
 | 
						|
    hardware.sane.configDir = mkOption {
 | 
						|
      type = types.string;
 | 
						|
      default = "${saneConfig}/etc/sane.d";
 | 
						|
      description = "The value of SANE_CONFIG_DIR.";
 | 
						|
    };
 | 
						|
 | 
						|
  };
 | 
						|
 | 
						|
 | 
						|
  ###### implementation
 | 
						|
 | 
						|
  config = mkIf config.hardware.sane.enable {
 | 
						|
 | 
						|
    environment.systemPackages = backends;
 | 
						|
    environment.sessionVariables = {
 | 
						|
      SANE_CONFIG_DIR = config.hardware.sane.configDir;
 | 
						|
      LD_LIBRARY_PATH = [ "${saneConfig}/lib/sane" ];
 | 
						|
    };
 | 
						|
    services.udev.packages = backends;
 | 
						|
 | 
						|
    users.extraGroups."scanner".gid = config.ids.gids.scanner;
 | 
						|
 | 
						|
  };
 | 
						|
 | 
						|
}
 |