parent
b90b899b0c
commit
3424ded286
@ -0,0 +1,63 @@ |
||||
{ config, lib, pkgs, ... }: |
||||
|
||||
with lib; |
||||
|
||||
let |
||||
cfg = config.services.peerflix; |
||||
|
||||
configFile = pkgs.writeText "peerflix-config.json" '' |
||||
{ |
||||
"connections": 50, |
||||
"tmp": "${cfg.downloadDir}" |
||||
} |
||||
''; |
||||
|
||||
in { |
||||
|
||||
###### interface |
||||
|
||||
options.services.peerflix = { |
||||
enable = mkOption { |
||||
description = "Whether to enable graphite web frontend."; |
||||
default = false; |
||||
type = types.uniq types.bool; |
||||
}; |
||||
|
||||
stateDir = mkOption { |
||||
description = "Peerflix state directory."; |
||||
default = "/var/lib/peerflix"; |
||||
type = types.path; |
||||
}; |
||||
|
||||
downloadDir = mkOption { |
||||
description = "Peerflix temporary download directory."; |
||||
default = "${cfg.stateDir}/torrents"; |
||||
type = types.path; |
||||
}; |
||||
}; |
||||
|
||||
###### implementation |
||||
|
||||
config = mkIf cfg.enable { |
||||
systemd.services.peerflix = { |
||||
description = "Peerflix Daemon"; |
||||
wantedBy = [ "multi-user.target" ]; |
||||
after = [ "network-interfaces.target" ]; |
||||
environment.HOME = cfg.stateDir; |
||||
|
||||
preStart = '' |
||||
mkdir -p "${cfg.stateDir}"/{torrents,.config/peerflix-server} |
||||
if [ "$(id -u)" = 0 ]; then chown -R peerflix "${cfg.stateDir}"; fi |
||||
ln -fs "${configFile}" "${cfg.stateDir}/.config/peerflix-server/config.json" |
||||
''; |
||||
|
||||
serviceConfig = { |
||||
ExecStart = "${pkgs.nodePackages.peerflix-server}/bin/peerflix-server"; |
||||
PermissionsStartOnly = true; |
||||
User = "peerflix"; |
||||
}; |
||||
}; |
||||
|
||||
users.extraUsers.peerflix.uid = config.ids.uids.peerflix; |
||||
}; |
||||
} |
@ -0,0 +1,21 @@ |
||||
# This test runs peerflix and checks if peerflix starts |
||||
|
||||
import ./make-test.nix { |
||||
name = "peerflix"; |
||||
|
||||
nodes = { |
||||
peerflix = |
||||
{ config, pkgs, ... }: |
||||
{ |
||||
services.peerflix.enable = true; |
||||
}; |
||||
}; |
||||
|
||||
testScript = '' |
||||
startAll; |
||||
|
||||
$peerflix->waitForUnit("peerflix.service"); |
||||
$peerflix->waitUntilSucceeds("curl localhost:9000"); |
||||
''; |
||||
|
||||
} |
Loading…
Reference in new issue