130 lines
2.8 KiB
Nix
130 lines
2.8 KiB
Nix
|
|
||
|
{pkgs, config, ...}:
|
||
|
|
||
|
###### interface
|
||
|
let
|
||
|
inherit (pkgs.lib) mkOption mkIf;
|
||
|
|
||
|
options = {
|
||
|
services = {
|
||
|
synergy = {
|
||
|
|
||
|
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 screen-name instead the hostname to identify
|
||
|
ourselfs to the server.
|
||
|
";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
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. open upstart-jobs/synergy.nix to see an example
|
||
|
";
|
||
|
};
|
||
|
screenName = mkOption {
|
||
|
default = "";
|
||
|
description = "
|
||
|
use screen-name instead the hostname to identify
|
||
|
this screen in the configuration.
|
||
|
";
|
||
|
};
|
||
|
address = mkOption {
|
||
|
default = "";
|
||
|
description = "listen for clients on the given address";
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
###### implementation
|
||
|
|
||
|
inherit (pkgs.lib) optional;
|
||
|
|
||
|
cfgC = (config.services.synergy.client);
|
||
|
cfgS = (config.services.synergy.server);
|
||
|
|
||
|
clientJob = {
|
||
|
name = "synergy-client";
|
||
|
|
||
|
job = ''
|
||
|
description "synergy client"
|
||
|
|
||
|
start on started network-interfaces
|
||
|
stop on stopping network-interfaces
|
||
|
|
||
|
respawn ${pkgs.synergy}/bin/synergyc ${if cfgS.screenName == "" then "" else "-n ${cfgS.screenName}" }
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
serverJob = {
|
||
|
name = "synergy-server";
|
||
|
|
||
|
job = ''
|
||
|
description "synergy server"
|
||
|
|
||
|
start on started network-interfaces
|
||
|
stop on stopping network-interfaces
|
||
|
|
||
|
respawn ${pkgs.synergy}/bin/synergys -c ${cfgS.configFile} \
|
||
|
-f ${if cfgS.address == "" then "" else "-a ${cfgS.address}"} \
|
||
|
${if cfgS.screenName == "" then "" else "-n ${cfgS.screenName}" }
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
in
|
||
|
|
||
|
|
||
|
mkIf config.services.sshd.enable {
|
||
|
require = [
|
||
|
options
|
||
|
];
|
||
|
|
||
|
services = {
|
||
|
extraJobs = (optional cfgS.enable serverJob)
|
||
|
++ (optional cfgC.enable clientJob);
|
||
|
};
|
||
|
}
|
||
|
|
||
|
/* 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
|
||
|
*/
|