29027fd1e1
Using pkgs.lib on the spine of module evaluation is problematic because the pkgs argument depends on the result of module evaluation. To prevent an infinite recursion, pkgs and some of the modules are evaluated twice, which is inefficient. Using ‘with lib’ prevents this problem.
115 lines
3.1 KiB
Nix
115 lines
3.1 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
let
|
|
cfg = config.services.fuppesd;
|
|
in
|
|
|
|
with lib;
|
|
|
|
{
|
|
options = {
|
|
services.fuppesd = {
|
|
enable = mkOption {
|
|
default = false;
|
|
type = with types; bool;
|
|
description = ''
|
|
Enables Fuppes (UPnP A/V Media Server). Can be used to watch
|
|
photos, video and listen to music from a phone/tv connected to the
|
|
local network.
|
|
'';
|
|
};
|
|
|
|
name = mkOption {
|
|
example = "Media Center";
|
|
type = types.str;
|
|
description = ''
|
|
Enables Fuppes (UPnP A/V Media Server). Can be used to watch
|
|
photos, video and listen to music from a phone/tv connected to the
|
|
local network.
|
|
'';
|
|
};
|
|
|
|
log = {
|
|
level = mkOption {
|
|
default = 0;
|
|
example = 3;
|
|
type = with types; uniq int;
|
|
description = ''
|
|
Logging level of fuppes, An integer between 0 and 3.
|
|
'';
|
|
};
|
|
|
|
file = mkOption {
|
|
default = "/var/log/fuppes.log";
|
|
type = types.str;
|
|
description = ''
|
|
File which will contains the log produced by the daemon.
|
|
'';
|
|
};
|
|
};
|
|
|
|
config = mkOption {
|
|
example = "/etc/fuppes/fuppes.cfg";
|
|
type = types.str;
|
|
description = ''
|
|
Mutable configuration file which can be edited with the web
|
|
interface. Due to possible modification, double quote the full
|
|
path of the filename stored in your filesystem to avoid attempts
|
|
to modify the content of the nix store.
|
|
'';
|
|
};
|
|
|
|
vfolder = mkOption {
|
|
example = literalExample "/etc/fuppes/vfolder.cfg";
|
|
description = ''
|
|
XML file describing the layout of virtual folder visible by the
|
|
client.
|
|
'';
|
|
};
|
|
|
|
database = mkOption {
|
|
default = "/var/lib/fuppes/fuppes.db";
|
|
type = types.str;
|
|
description = ''
|
|
Database file which index all shared files.
|
|
'';
|
|
};
|
|
|
|
## At the moment, no plugins are packaged.
|
|
/*
|
|
plugins = mkOption {
|
|
type = with types; listOf package;
|
|
description = ''
|
|
List of Fuppes plugins.
|
|
'';
|
|
};
|
|
*/
|
|
|
|
user = mkOption {
|
|
default = "root"; # The default is not secure.
|
|
example = "fuppes";
|
|
type = types.str;
|
|
description = ''
|
|
Name of the user which own the configuration files and under which
|
|
the fuppes daemon will be executed.
|
|
'';
|
|
};
|
|
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
jobs.fuppesd = {
|
|
description = "UPnP A/V Media Server. (${cfg.name})";
|
|
startOn = "ip-up";
|
|
daemonType = "fork";
|
|
exec = ''/var/setuid-wrappers/sudo -u ${cfg.user} -- ${pkgs.fuppes}/bin/fuppesd --friendly-name ${cfg.name} --log-level ${toString cfg.log.level} --log-file ${cfg.log.file} --config-file ${cfg.config} --vfolder-config-file ${cfg.vfolder} --database-file ${cfg.database}'';
|
|
};
|
|
|
|
services.fuppesd.name = mkDefault config.networking.hostName;
|
|
|
|
services.fuppesd.vfolder = mkDefault ./fuppes/vfolder.cfg;
|
|
|
|
security.sudo.enable = true;
|
|
};
|
|
}
|