Primarily to fix rendering of these default values in the manual but it's also nice to avoid having to eval these things just to build the manual.
		
			
				
	
	
		
			70 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ config, lib, pkgs, ... }:
 | 
						|
 | 
						|
with lib;
 | 
						|
 | 
						|
let
 | 
						|
  cfg = config.services.dictd;
 | 
						|
in
 | 
						|
 | 
						|
{
 | 
						|
 | 
						|
  ###### interface
 | 
						|
 | 
						|
  options = {
 | 
						|
 | 
						|
    services.dictd = {
 | 
						|
 | 
						|
      enable = mkOption {
 | 
						|
        type = types.bool;
 | 
						|
        default = false;
 | 
						|
        description = ''
 | 
						|
          Whether to enable the DICT.org dictionary server.
 | 
						|
        '';
 | 
						|
      };
 | 
						|
 | 
						|
      DBs = mkOption {
 | 
						|
        type = types.listOf types.package;
 | 
						|
        default = with pkgs.dictdDBs; [ wiktionary wordnet ];
 | 
						|
        defaultText = "with pkgs.dictdDBs; [ wiktionary wordnet ]";
 | 
						|
        example = literalExample "[ pkgs.dictdDBs.nld2eng ]";
 | 
						|
        description = ''List of databases to make available.'';
 | 
						|
      };
 | 
						|
 | 
						|
    };
 | 
						|
 | 
						|
  };
 | 
						|
 | 
						|
 | 
						|
  ###### implementation
 | 
						|
 | 
						|
  config = let dictdb = pkgs.dictDBCollector { dictlist = map (x: {
 | 
						|
               name = x.name;
 | 
						|
               filename = x; } ) cfg.DBs; };
 | 
						|
  in mkIf cfg.enable {
 | 
						|
 | 
						|
    # get the command line client on system path to make some use of the service
 | 
						|
    environment.systemPackages = [ pkgs.dict ];
 | 
						|
 | 
						|
    users.extraUsers = singleton
 | 
						|
      { name = "dictd";
 | 
						|
        group = "dictd";
 | 
						|
        description = "DICT.org dictd server";
 | 
						|
        home = "${dictdb}/share/dictd";
 | 
						|
        uid = config.ids.uids.dictd;
 | 
						|
      };
 | 
						|
 | 
						|
    users.extraGroups = singleton
 | 
						|
      { name = "dictd";
 | 
						|
        gid = config.ids.gids.dictd;
 | 
						|
      };
 | 
						|
 | 
						|
    systemd.services.dictd = {
 | 
						|
      description = "DICT.org Dictionary Server";
 | 
						|
      wantedBy = [ "multi-user.target" ];
 | 
						|
      environment = { LOCALE_ARCHIVE = "/run/current-system/sw/lib/locale/locale-archive"; };
 | 
						|
      serviceConfig.Type = "forking";
 | 
						|
      script = "${pkgs.dict}/sbin/dictd -s -c ${dictdb}/share/dictd/dictd.conf --locale en_US.UTF-8";
 | 
						|
    };
 | 
						|
  };
 | 
						|
}
 |