Skip to content

Instantly share code, notes, and snippets.

@bibijeebi
Created October 29, 2024 17:03
Show Gist options
  • Select an option

  • Save bibijeebi/5b7a9e6ed2de1211ca2aa8684dd4e211 to your computer and use it in GitHub Desktop.

Select an option

Save bibijeebi/5b7a9e6ed2de1211ca2aa8684dd4e211 to your computer and use it in GitHub Desktop.

Packing buildarr and it's plugins in a flake

./buildarr-radarr.nix

{
  lib,
  python3,
  fetchPypi,
}:
python3.pkgs.buildPythonPackage rec {
  pname = "buildarr-radarr";
  version = "0.2.6";
  pyproject = true;

  src = fetchPypi {
    pname = "buildarr_radarr";
    inherit version;
    hash = "sha256-CdvRVGXrMm2IXTsJmGfz2RNeEcg0EX8GNj41pcCeMpM=";
  };

  build-system = [
    python3.pkgs.poetry-core
  ];

  dependencies = with python3.pkgs; [
    buildarr
    packaging
    radarr-py
  ];

  pythonImportsCheck = [
    "buildarr_radarr"
  ];

  doCheck = false;

  meta = {
    description = "Radarr movie PVR plugin for Buildarr";
    homepage = "https://pypi.org/project/buildarr-radarr";
    license = lib.licenses.gpl3Only;
    maintainers = with lib.maintainers; [];
    mainProgram = "buildarr-radarr";
  };
}

./buildarr-prowlarr.nix

{
  lib,
  python3,
  fetchPypi,
}:
python3.pkgs.buildPythonPackage rec {
  pname = "buildarr-prowlarr";
  version = "0.5.3";
  pyproject = true;

  src = fetchPypi {
    pname = "buildarr_prowlarr";
    inherit version;
    hash = "sha256-v3QrQuleDxUKs46+TfQddQwbHN93WqictILVArFlG2I=";
  };

  build-system = [
    python3.pkgs.poetry-core
  ];

  dependencies = with python3.pkgs; [
    buildarr
    json5
    packaging
    prowlarr-py
  ];

  optional-dependencies = with python3.pkgs; {
    radarr = [
      buildarr-radarr
    ];
    sonarr = [
      buildarr-sonarr
    ];
  };

  pythonImportsCheck = [
    "buildarr_prowlarr"
  ];

  doCheck = false;

  meta = {
    description = "Prowlarr indexer manager plugin for Buildarr";
    homepage = "https://pypi.org/project/buildarr-prowlarr";
    license = lib.licenses.gpl3Only;
    maintainers = with lib.maintainers; [];
    mainProgram = "buildarr-prowlarr";
  };
}

./click-params.nix

{
  lib,
  python3,
  fetchPypi,
}:
python3.pkgs.buildPythonPackage rec {
  pname = "click-params";
  version = "0.5.0";
  pyproject = true;

  src = fetchPypi {
    pname = "click_params";
    inherit version;
    hash = "sha256-X+l7lFl4GjtDuE/k7ABlGT4bDVz23HeJf+IMMfR41/8=";
  };

  build-system = [
    python3.pkgs.poetry-core
  ];

  dependencies = with python3.pkgs; [
    click
    deprecated
    validators
  ];

  pythonImportsCheck = [
    "click_params"
  ];

  doCheck = false;

  meta = {
    description = "A bunch of useful click parameter types";
    homepage = "https://pypi.org/project/click-params";
    license = lib.licenses.asl20;
    maintainers = with lib.maintainers; [];
    mainProgram = "click-params";
  };
}

./buildarr-sonarr.nix

{
  lib,
  python3,
  fetchPypi,
}:
python3.pkgs.buildPythonPackage {
  pname = "buildarr-sonarr";
  version = "0.6.4";
  pyproject = true;

  src = fetchPypi {
    pname = "buildarr_sonarr";
    version = "0.6.4";
    sha256 = "sha256-HsvGojDNN8vMV7ReK9Q6WBZGxf2bRmHNHu84FmLigxc=";
  };

  build-system = [
    python3.pkgs.setuptools
    python3.pkgs.setuptools-scm
  ];

  dependencies = with python3.pkgs; [
    buildarr
    json5
  ];

  pythonImportsCheck = [
    "buildarr_sonarr"
  ];

  doCheck = false;

  meta = {
    description = "Sonarr PVR plugin for Buildarr";
    homepage = "https://pypi.org/project/buildarr-sonarr";
    license = lib.licenses.gpl3Only;
    maintainers = with lib.maintainers; [];
    mainProgram = "buildarr-sonarr";
  };
}

./pydantic.nix

{
  lib,
  python3,
  fetchPypi,
}:
python3.pkgs.buildPythonPackage rec {
  pname = "pydantic";
  version = "1.10.18";
  pyproject = true;

  src = fetchPypi {
    inherit pname version;
    hash = "sha256-uuvf8ZB9HZahOcJRNqm7fRfhGPEzp2ou87hF6DHjQDo=";
  };

  build-system = [
    python3.pkgs.setuptools
    python3.pkgs.wheel
  ];

  dependencies = with python3.pkgs; [
    annotated-types
    pydantic-core
    typing-extensions
  ];

  optional-dependencies = with python3.pkgs; {
    email = [
      email-validator
    ];
    timezone = [
      tzdata
    ];
  };

  pythonImportsCheck = [
    "pydantic"
  ];

  doCheck = false;

  meta = {
    description = "Data validation using Python type hints";
    homepage = "https://pypi.org/project/pydantic";
    license = lib.licenses.mit;
    maintainers = with lib.maintainers; [];
    mainProgram = "pydantic";
  };
}

./buildarr-jellyseerr.nix

{
  lib,
  python3,
  fetchPypi,
}:
python3.pkgs.buildPythonPackage rec {
  pname = "buildarr-jellyseerr";
  version = "0.3.2";
  pyproject = true;

  src = fetchPypi {
    pname = "buildarr_jellyseerr";
    inherit version;
    hash = "sha256-Qq3P6rlTKYu95eUSfpK+Eyca2FWzu9A8SVc+N0JYLPg=";
  };

  build-system = [
    python3.pkgs.poetry-core
  ];

  dependencies = with python3.pkgs; [
    buildarr
  ];

  optional-dependencies = with python3.pkgs; {
    radarr = [
      buildarr-radarr
    ];
    sonarr = [
      buildarr-sonarr
    ];
  };

  pythonImportsCheck = [
    "buildarr_jellyseerr"
  ];

  doCheck = false;

  meta = {
    description = "Jellyseerr media request library application plugin for Buildarr";
    homepage = "https://pypi.org/project/buildarr-jellyseerr";
    license = lib.licenses.gpl3Only;
    maintainers = with lib.maintainers; [];
    mainProgram = "buildarr-jellyseerr";
  };
}

./buildarr.nix

{
  lib,
  python3,
  fetchPypi,
}:
python3.pkgs.buildPythonPackage rec {
  pname = "buildarr";
  version = "0.7.1";
  pyproject = true;

  src = fetchPypi {
    inherit pname version;
    hash = "sha256-FmYFChehwNYK7D+wBujuEBl02SxdKD7UBC7jGReeqnM=";
  };

  build-system = [
    python3.pkgs.poetry-core
  ];

  dependencies = with python3.pkgs; [
    aenum
    click
    click-params
    importlib-metadata
    pydantic
    pyyaml
    requests
    schedule
    stevedore
    typing-extensions
    watchdog
  ];

  pythonImportsCheck = [
    "buildarr"
  ];

  doCheck = false;

  meta = {
    description = "Constructs and configures Arr PVR stacks";
    homepage = "https://pypi.org/project/buildarr";
    license = lib.licenses.gpl3Only;
    maintainers = with lib.maintainers; [];
    mainProgram = "buildarr";
  };
}

./flake.nix

{
  inputs.flakelight.url = "github:accelbread/flakelight";

  outputs = {flakelight, ...}:
    flakelight ./. {
      withOverlays = [
        (final: prev: {
          pythonPackagesOverlays =
            (prev.pythonPackagesOverlays or [])
            ++ [
              (python-final: python-prev: {
                pydantic = python-final.callPackage ./pydantic.nix {};
                click-params = python-final.callPackage ./click-params.nix {};
                prowlarr-py = python-final.callPackage ./prowlarr-py.nix {};
                radarr-py = python-final.callPackage ./radarr-py.nix {};
                validators = python-final.callPackage ./validators.nix {};
                buildarr = python-final.callPackage ./buildarr.nix {};
                buildarr-sonarr = python-final.callPackage ./buildarr-sonarr.nix {};
                buildarr-radarr = python-final.callPackage ./buildarr-radarr.nix {};
                buildarr-prowlarr = python-final.callPackage ./buildarr-prowlarr.nix {};
                buildarr-jellyseerr = python-final.callPackage ./buildarr-jellyseerr.nix {};
              })
            ];

          python3 = let
            self = prev.python311.override {
              inherit self;
              packageOverrides = prev.lib.composeManyExtensions final.pythonPackagesOverlays;
            };
          in
            self;

          python3Packages = final.python3.pkgs;
        })
      ];

      package = {python3Packages, ...}:
        python3Packages.buildarr.overrideAttrs (oldAttrs: {
          propagatedBuildInputs = with python3Packages;
            [
              buildarr-sonarr
              buildarr-radarr
              buildarr-prowlarr
              buildarr-jellyseerr
            ]
            ++ oldAttrs.propagatedBuildInputs;
          doCheck = false;
        });
    };
}

./radarr-py.nix

{
  lib,
  python3,
  fetchPypi,
}:
python3.pkgs.buildPythonPackage rec {
  pname = "radarr-py";
  version = "1.1.1";
  pyproject = true;

  src = fetchPypi {
    pname = "radarr_py";
    inherit version;
    hash = "sha256-ElN9gN1FPYMF0rovY/YJG7VqjYjWm6G8g3wj413JTFY=";
  };

  build-system = [
    python3.pkgs.setuptools
  ];

  dependencies = with python3.pkgs; [
    pydantic
    python-dateutil
    typing-extensions
    urllib3
  ];

  pythonImportsCheck = [
    "radarr"
  ];

  doCheck = false;

  meta = {
    description = "Radarr";
    homepage = "https://pypi.org/project/radarr-py";
    license = with lib.licenses; [gpl3Only mpl20];
    maintainers = with lib.maintainers; [];
    mainProgram = "radarr-py";
  };
}

./prowlarr-py.nix

{
  lib,
  python3,
  fetchPypi,
}:
python3.pkgs.buildPythonPackage rec {
  pname = "prowlarr-py";
  version = "0.4.1";
  pyproject = true;

  src = fetchPypi {
    inherit pname version;
    hash = "sha256-15NrAcoUf+SGm5P7O6nYHH5pjZU/CX+GCQGw73L4/k8=";
  };

  build-system = [
    python3.pkgs.setuptools
    python3.pkgs.wheel
  ];

  dependencies = with python3.pkgs; [
    aenum
    pydantic
    python-dateutil
    requests
    urllib3
  ];

  pythonImportsCheck = [
    "prowlarr_py"
  ];

  doCheck = false;

  meta = {
    description = "Prowlarr";
    homepage = "https://pypi.org/project/prowlarr-py";
    license = with lib.licenses; [gpl3Only mpl20];
    maintainers = with lib.maintainers; [];
    mainProgram = "prowlarr-py";
  };
}

./validators.nix

{
  lib,
  python3,
  fetchPypi,
}:
python3.pkgs.buildPythonPackage rec {
  pname = "validators";
  version = "0.22.0";
  pyproject = true;

  src = fetchPypi {
    inherit pname version;
    hash = "sha256-d7Jomxcu7rYA2WBauGGUZBZwzbc7YK/VdxQqk5eHM3A=";
  };

  build-system = [
    python3.pkgs.setuptools
  ];

  optional-dependencies = with python3.pkgs; {
    docs-offline = [
      myst-parser
      pypandoc-binary
      sphinx
    ];
    docs-online = [
      mkdocs
      mkdocs-git-revision-date-localized-plugin
      mkdocs-material
      mkdocstrings
      pyaml
    ];
    hooks = [
      pre-commit
    ];
    package = [
      build
      twine
    ];
    runner = [
      tox
    ];
    sast = [
      bandit
    ];
    testing = [
      pytest
    ];
    tooling = [
      black
      pyright
      ruff
    ];
    tooling-extras = [
      pyaml
      pypandoc-binary
      pytest
    ];
  };

  pythonImportsCheck = [
    "validators"
  ];

  doCheck = false;

  meta = {
    description = "Python Data Validation for Humans";
    homepage = "https://pypi.org/project/validators";
    license = lib.licenses.mit;
    maintainers = with lib.maintainers; [];
    mainProgram = "validators";
  };
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment