69 lines
2.0 KiB
Nix
69 lines
2.0 KiB
Nix
# Media players and other applications
|
|
{ config, pkgs, lib, unstable, ... }:
|
|
let
|
|
mopidyEnv = pkgs.buildEnv {
|
|
name = "mopidy-daemon-environment";
|
|
paths = with pkgs; [
|
|
mopidy-mpd
|
|
mopidy-iris
|
|
mopidy-scrobbler
|
|
];
|
|
pathsToLink = [ "/${pkgs.mopidyPackages.python.sitePackages}" ];
|
|
buildInputs = [ pkgs.makeWrapper ];
|
|
postBuild = ''
|
|
makeWrapper ${pkgs.mopidy}/bin/mopidy $out/bin/mopidy \
|
|
--prefix PYTHONPATH : $out/${pkgs.mopidyPackages.python.sitePackages}
|
|
'';
|
|
};
|
|
in
|
|
{
|
|
environment.systemPackages = with pkgs; [
|
|
# Spotify
|
|
spotify
|
|
# Latest version of vlc
|
|
unstable.vlc
|
|
# Plex client
|
|
plex-media-player
|
|
# OBS studio for screen recording
|
|
unstable.obs-studio
|
|
# Soulseek client
|
|
nicotine-plus
|
|
# Mopidy + extensions
|
|
mopidy
|
|
# Picard for sorting
|
|
unstable.picard
|
|
];
|
|
|
|
# Mount music directory
|
|
systemd.user.services.rclone-music = {
|
|
description = "Rclone mount ~/Music";
|
|
serviceConfig = {
|
|
# So we can pick up the fusermount wrapper, this is a less than ideal way to do this
|
|
Environment = "PATH=/usr/bin:/run/wrappers/bin/";
|
|
Type = "notify";
|
|
ExecStart = "${pkgs.rclone}/bin/rclone mount music: /home/nathan/Music --vfs-cache-mode full --vfs-cache-max-size 32Gi --vfs-read-chunk-size 4Mi --buffer-size 32Mi --vfs-read-ahead 128Mi --config /home/nathan/.config/rclone/rclone.conf --cache-dir /home/nathan/.cache/rclone --no-checksum --no-modtime --transfers 8";
|
|
};
|
|
enable = true;
|
|
};
|
|
|
|
# Start mopidy as a user service, for sanity
|
|
systemd.user.services.mopidy = {
|
|
description = "Mopidy music server";
|
|
serviceConfig = {
|
|
ExecStart = "${mopidyEnv}/bin/mopidy";
|
|
};
|
|
wants = [ "rclone-music.service" ];
|
|
enable = true;
|
|
};
|
|
# Same for the scanning service
|
|
systemd.user.services.mopidy-scan = {
|
|
description = "Mopidy files local scanner";
|
|
serviceConfig = {
|
|
ExecStart = "${mopidyEnv}/bin/mopidy local scan";
|
|
Type = "oneshot";
|
|
};
|
|
wants = [ "rclone-music.service" ];
|
|
};
|
|
|
|
}
|