diff options
Diffstat (limited to 'nixos/modules/services/audio/fuppes.nix')
-rw-r--r-- | nixos/modules/services/audio/fuppes.nix | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/nixos/modules/services/audio/fuppes.nix b/nixos/modules/services/audio/fuppes.nix new file mode 100644 index 000000000000..3eb0732bae2e --- /dev/null +++ b/nixos/modules/services/audio/fuppes.nix @@ -0,0 +1,115 @@ +{config, pkgs, ...}: + +let + cfg = config.services.fuppesd; +in + +with pkgs.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; + }; +} |