Commit 939edb1 reintroduced autoStart, but instead of creating a list of units for the wantedBy list with optional it became a list of lists of units. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
		
			
				
	
	
		
			131 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			131 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ config, lib, pkgs, ... }:
 | 
						|
 | 
						|
with lib;
 | 
						|
 | 
						|
let
 | 
						|
 | 
						|
  cfgC = config.services.synergy.client;
 | 
						|
  cfgS = config.services.synergy.server;
 | 
						|
 | 
						|
in
 | 
						|
 | 
						|
{
 | 
						|
  ###### interface
 | 
						|
 | 
						|
  options = {
 | 
						|
 | 
						|
    services.synergy = {
 | 
						|
 | 
						|
      # !!! All these option descriptions needs to be cleaned up.
 | 
						|
 | 
						|
      client = {
 | 
						|
        enable = mkOption {
 | 
						|
          default = false;
 | 
						|
          description = "
 | 
						|
            Whether to enable the Synergy client (receive keyboard and mouse events from a Synergy server).
 | 
						|
          ";
 | 
						|
        };
 | 
						|
        screenName = mkOption {
 | 
						|
          default = "";
 | 
						|
          description = ''
 | 
						|
            Use the given name instead of the hostname to identify
 | 
						|
            ourselves to the server.
 | 
						|
          '';
 | 
						|
        };
 | 
						|
        serverAddress = mkOption {
 | 
						|
          description = ''
 | 
						|
            The server address is of the form: [hostname][:port].  The
 | 
						|
            hostname must be the address or hostname of the server.  The
 | 
						|
            port overrides the default port, 24800.
 | 
						|
          '';
 | 
						|
        };
 | 
						|
        autoStart = mkOption {
 | 
						|
          default = true;
 | 
						|
          type = types.bool;
 | 
						|
          description = "Whether the Synergy client should be started automatically.";
 | 
						|
        };
 | 
						|
      };
 | 
						|
 | 
						|
      server = {
 | 
						|
        enable = mkOption {
 | 
						|
          default = false;
 | 
						|
          description = ''
 | 
						|
            Whether to enable the Synergy server (send keyboard and mouse events).
 | 
						|
          '';
 | 
						|
        };
 | 
						|
        configFile = mkOption {
 | 
						|
          default = "/etc/synergy-server.conf";
 | 
						|
          description = "The Synergy server configuration file.";
 | 
						|
        };
 | 
						|
        screenName = mkOption {
 | 
						|
          default = "";
 | 
						|
          description = ''
 | 
						|
            Use the given name instead of the hostname to identify
 | 
						|
            this screen in the configuration.
 | 
						|
          '';
 | 
						|
        };
 | 
						|
        address = mkOption {
 | 
						|
          default = "";
 | 
						|
          description = "Address on which to listen for clients.";
 | 
						|
        };
 | 
						|
        autoStart = mkOption {
 | 
						|
          default = true;
 | 
						|
          type = types.bool;
 | 
						|
          description = "Whether the Synergy server should be started automatically.";
 | 
						|
        };
 | 
						|
      };
 | 
						|
    };
 | 
						|
 | 
						|
  };
 | 
						|
 | 
						|
 | 
						|
  ###### implementation
 | 
						|
 | 
						|
  config = mkMerge [
 | 
						|
    (mkIf cfgC.enable {
 | 
						|
      systemd.services."synergy-client" = {
 | 
						|
        after = [ "network.target" ];
 | 
						|
        description = "Synergy client";
 | 
						|
        wantedBy = optional cfgC.autoStart "multi-user.target";
 | 
						|
        path = [ pkgs.synergy ];
 | 
						|
        serviceConfig.ExecStart = ''${pkgs.synergy}/bin/synergyc -f ${optionalString (cfgC.screenName != "") "-n ${cfgC.screenName}"} ${cfgC.serverAddress}'';
 | 
						|
      };
 | 
						|
    })
 | 
						|
    (mkIf cfgS.enable {
 | 
						|
      systemd.services."synergy-server" = {
 | 
						|
        after = [ "network.target" ];
 | 
						|
        description = "Synergy server";
 | 
						|
        wantedBy = optional cfgS.autoStart "multi-user.target";
 | 
						|
        path = [ pkgs.synergy ];
 | 
						|
        serviceConfig.ExecStart = ''${pkgs.synergy}/bin/synergys -c ${cfgS.configFile} -f ${optionalString (cfgS.address != "") "-a ${cfgS.address}"} ${optionalString (cfgS.screenName != "") "-n ${cfgS.screenName}" }'';
 | 
						|
      };
 | 
						|
    })
 | 
						|
  ];
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/* SYNERGY SERVER example configuration file
 | 
						|
section: screens
 | 
						|
  laptop:
 | 
						|
  dm:
 | 
						|
  win:
 | 
						|
end
 | 
						|
section: aliases
 | 
						|
    laptop:
 | 
						|
      192.168.5.5
 | 
						|
    dm:
 | 
						|
      192.168.5.78
 | 
						|
    win:
 | 
						|
      192.168.5.54
 | 
						|
end
 | 
						|
section: links
 | 
						|
   laptop:
 | 
						|
       left = dm
 | 
						|
   dm:
 | 
						|
       right = laptop
 | 
						|
       left = win
 | 
						|
  win:
 | 
						|
      right = dm
 | 
						|
end
 | 
						|
*/
 |