Nix Flakes
Note
This is a community contribution and not officially supported by the MediaManager team, but included here for convenience.
Please report issues with this method at the corresponding GitHub repository.
Prerequisites
This guide assumes that your system is a flakes-based NixOS installation. Hosting MediaManager on a subpath (e.g. yourdomain.com/mediamanager) is currently not supported, though contributions to add support are welcome.
Importing the community flake
To use the community-provided flake and module, first import it in your own flake, for example:
{
description = "An example NixOS configuration";
inputs = {
nixpkgs = { url = "github:nixos/nixpkgs/nixos-unstable"; };
mediamanager-nix = {
url = "github:strangeglyph/mediamanager-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = inputs@{
nixpkgs,
mediamanager-nix,
...
}: {
nixosConfigurations.your-system = nixpkgs.lib.nixosSystem {
modules = [
mediamanager-nix.nixosModules.default
];
};
};
}
Configuration
The flake provides a simple module to set up a MediaManager systemd service. To enable it, set
{
config = {
services.media-manager = {
enable = true;
};
};
}
You will either want to set services.media-manager.dataDir, which will provide sensible defaults for the settings
misc.{image,movie,tv,torrent}_directory, or provide specific paths yourself.
The host and port that MediaManager listens on can be set using services.media-manager.{host,port}.
To configure MediaManager, use services.media-manager.settings, which follows the same structure as the MediaManager
config.toml. To provision secrets, set services.media-manager.environmentFile to a protected file, for example one
provided by agenix or sops-nix.
See Configuration for guidance on using environment variables.
Warning
Do not place secrets in the nix store, as it is world-readable.
Automatic Postgres Setup
As a convenience feature, the module provides a simple Postgres setup that can be enabled with services.media-manager.postgres.enable. This sets up a database user named services.media-manager.postgres.user and a database with the same name. Provided the user of the systemd service wasn't changed, authentication should work automatically for unix socket connections (the default mediamanager-nix settings).
For advanced setups, please refer to the NixOS manual.
Example Configuration
Here is a minimal complete flake for a MediaManager setup:
{
description = "An example NixOS configuration";
inputs = {
nixpkgs = { url = "github:nixos/nixpkgs/nixos-unstable"; };
mediamanager-nix = {
url = "github:strangeglyph/mediamanager-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = inputs@{
nixpkgs,
mediamanager-nix,
...
}: {
nixosConfigurations.your-system = nixpkgs.lib.nixosSystem {
imports = [
mediamanager-nix.nixosModules.default
];
config = {
services.media-manager = {
enable = true;
postgres.enable = true;
port = 12345;
dataDir = "/tmp";
settings = {
misc.frontend_url = "http://[::1]:12345";
};
};
systemd.tmpfiles.settings."10-mediamanager" = {
"/tmp/movies".d = { user = config.services.media-manager.user; };
"/tmp/shows".d = { user = config.services.media-manager.user; };
"/tmp/images".d = { user = config.services.media-manager.user; };
"/tmp/torrents".d = { user = config.services.media-manager.user; };
};
};
};
};
}