diff --git a/hosts/odyssey/default.nix b/hosts/odyssey/default.nix index 961a730..45e9dde 100644 --- a/hosts/odyssey/default.nix +++ b/hosts/odyssey/default.nix @@ -1,5 +1,7 @@ -{ config, ... }: +{ config, pkgs, ... }: +let streamrip = pkgs.callPackage ../../pkgs/streamrip/package.nix { }; +in { imports = [ ./hardware-configuration.nix @@ -49,6 +51,10 @@ }; }; + environment.systemPackages = [ + streamrip + ]; + modules = { desktop = { apps.qbittorrent.enable = true; diff --git a/pkgs/streamrip/ensure-the-default-config-file-is-writable.patch b/pkgs/streamrip/ensure-the-default-config-file-is-writable.patch new file mode 100644 index 0000000..5bd4719 --- /dev/null +++ b/pkgs/streamrip/ensure-the-default-config-file-is-writable.patch @@ -0,0 +1,26 @@ +From 18efb9b5c8e562b169425f6ba79977e52e8b91b9 Mon Sep 17 00:00:00 2001 +From: Pavel Sobolev +Date: Sat, 13 Jan 2024 12:49:45 +0000 +Subject: [PATCH] Ensure the default config file is writable. + +--- + streamrip/config.py | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/streamrip/config.py b/streamrip/config.py +index 7ee2f57..88a5fef 100644 +--- a/streamrip/config.py ++++ b/streamrip/config.py +@@ -378,6 +378,9 @@ def set_user_defaults(path: str, /): + """Update the TOML file at the path with user-specific default values.""" + shutil.copy(BLANK_CONFIG_PATH, path) + ++ # Ensure the default config file is writable ++ os.chmod(path, 0o644) ++ + with open(path) as f: + toml = parse(f.read()) + toml["downloads"]["folder"] = DEFAULT_DOWNLOADS_FOLDER # type: ignore +-- +2.42.0 + diff --git a/pkgs/streamrip/package.nix b/pkgs/streamrip/package.nix new file mode 100644 index 0000000..54b9cf1 --- /dev/null +++ b/pkgs/streamrip/package.nix @@ -0,0 +1,78 @@ +{ lib +, python3Packages +, fetchFromGitHub + +, ffmpeg +}: + +python3Packages.buildPythonApplication { + pname = "streamrip"; + version = "2.0.7"; + pyproject = true; + + src = fetchFromGitHub { + owner = "nathom"; + repo = "streamrip"; + rev = "46b570dbb6f81d604cbaa3bfa379463e0a20a841"; + hash = "sha256-LD99OjguaBnrQxCwmCeHvmBMq5aOfobwnMd5/aCRZW8="; + }; + + patches = [ + ./ensure-the-default-config-file-is-writable.patch + ]; + + nativeBuildInputs = with python3Packages; [ + poetry-core + ]; + + propagatedBuildInputs = with python3Packages; [ + aiodns + aiofiles + aiohttp + aiolimiter + appdirs + cleo + click-help-colors + deezer-py + m3u8 + mutagen + pathvalidate + pillow + pycryptodomex + pytest-asyncio + pytest-mock + rich + simple-term-menu + tomlkit + tqdm + ]; + + nativeCheckInputs = with python3Packages; [ + pytestCheckHook + ]; + + prePatch = '' + sed -i 's#aiofiles = ".*"#aiofiles = "*"#' pyproject.toml + sed -i 's#deezer-py = ".*"#deezer-py = "*"#' pyproject.toml + sed -i 's#m3u8 = ".*"#m3u8 = "*"#' pyproject.toml + sed -i 's#pathvalidate = ".*"#pathvalidate = "*"#' pyproject.toml + sed -i 's#Pillow = ".*"#Pillow = "*"#' pyproject.toml + sed -i 's#pytest-asyncio = ".*"#pytest-asyncio = "*"#' pyproject.toml + sed -i 's#tomlkit = ".*"#tomlkit = "*"#' pyproject.toml + + sed -i 's#"ffmpeg"#"${lib.getBin ffmpeg}/bin/ffmpeg"#g' streamrip/client/downloadable.py + ''; + + preCheck = '' + export HOME=$(mktemp -d) + ''; + + meta = with lib; { + description = "Scriptable music downloader for Qobuz, Tidal, SoundCloud, and Deezer"; + homepage = "https://github.com/nathom/streamrip"; + license = licenses.gpl3Only; + maintainers = with maintainers; [ paveloom ]; + mainProgram = "rip"; + }; +} +