mirror of
https://github.com/fallenbagel/jellyseerr.git
synced 2025-12-24 02:39:18 -05:00
226 lines
7.5 KiB
Plaintext
226 lines
7.5 KiB
Plaintext
---
|
|
title: Nix Package Manager (Advanced)
|
|
description: Install Jellyseerr using Nix
|
|
sidebar_position: 3
|
|
---
|
|
|
|
import { JellyseerrVersion, NixpkgVersion } from '@site/src/components/JellyseerrVersion';
|
|
import Admonition from '@theme/Admonition';
|
|
|
|
# Nix Package Manager (Advanced)
|
|
:::info
|
|
This method is not recommended for most users. It is intended for advanced users who are using Nix as their package manager.
|
|
:::
|
|
|
|
export const VersionMismatchWarning = () => {
|
|
const jellyseerrVersion = JellyseerrVersion();
|
|
const nixpkgVersion = NixpkgVersion();
|
|
|
|
const isUpToDate = jellyseerrVersion === nixpkgVersion;
|
|
|
|
return (
|
|
<>
|
|
{!isUpToDate ? (
|
|
<Admonition type="warning">
|
|
The <a href="https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/servers/jellyseerr/default.nix#L14">upstream Jellyseerr Nix Package (v{nixpkgVersion})</a> is not <b>up-to-date</b>. If you want to use <b>Jellyseerr v{jellyseerrVersion}</b>, you will need to <a href="#overriding-the-package-derivation">override the package derivation</a>.
|
|
</Admonition>
|
|
) : (
|
|
<Admonition type="success">
|
|
The <a href="https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/servers/jellyseerr/default.nix#L14">upstream Jellyseerr Nix Package (v{nixpkgVersion})</a> is <b>up-to-date</b> with <b>Jellyseerr v{jellyseerrVersion}</b>.
|
|
</Admonition>
|
|
)}
|
|
</>
|
|
);
|
|
};
|
|
|
|
<VersionMismatchWarning />
|
|
|
|
## Installation
|
|
To get up and running with jellyseerr using Nix, you can add the following to your `configuration.nix`:
|
|
|
|
```nix
|
|
{ config, pkgs, ... }:
|
|
|
|
{
|
|
services.jellyseerr.enable = true;
|
|
}
|
|
```
|
|
|
|
If you want more advanced configuration options, you can use the following:
|
|
|
|
```nix
|
|
{ config, pkgs, ... }:
|
|
|
|
{
|
|
services.jellyseerr = {
|
|
enable = true;
|
|
port = 5055;
|
|
openFirewall = true;
|
|
};
|
|
}
|
|
```
|
|
|
|
After adding the configuration to your `configuration.nix`, you can run the following command to install jellyseerr:
|
|
|
|
```bash
|
|
nixos-rebuild switch
|
|
```
|
|
After rebuild is complete jellyseerr should be running, verify that it is with the following command.
|
|
```bash
|
|
systemctl status jellyseerr
|
|
```
|
|
|
|
:::info
|
|
You can now access Jellyseerr by visiting `http://localhost:5055` in your web browser.
|
|
:::
|
|
|
|
|
|
|
|
import CodeBlock from '@theme/CodeBlock';
|
|
|
|
## Overriding the package derivation
|
|
export const VersionMatch = () => {
|
|
const jellyseerrVersion = JellyseerrVersion();
|
|
const nixpkgVersion = NixpkgVersion();
|
|
|
|
const code = `{ config, pkgs, ... }:
|
|
{
|
|
nixpkgs.config.packageOverrides = pkgs: {
|
|
jellyseerr = pkgs.jellyseerr.overrideAttrs (oldAttrs: rec {
|
|
version = "${jellyseerrVersion}";
|
|
|
|
src = pkgs.fetchFromGitHub {
|
|
rev = "v\${version}";
|
|
sha256 = pkgs.lib.fakeSha256;
|
|
};
|
|
|
|
offlineCache = pkgs.fetchYarnDeps {
|
|
sha256 = pkgs.lib.fakeSha256;
|
|
};
|
|
});
|
|
};
|
|
}`;
|
|
|
|
const module = `{ config, pkgs, lib, ... }:
|
|
|
|
with lib;
|
|
let
|
|
cfg = config.services.jellyseerr;
|
|
in
|
|
{
|
|
meta.maintainers = [ maintainers.camillemndn ];
|
|
|
|
disabledModules = [ "services/misc/jellyseerr.nix" ];
|
|
|
|
options.services.jellyseerr = {
|
|
enable = mkEnableOption (mdDoc ''Jellyseerr, a requests manager for Jellyfin'');
|
|
|
|
openFirewall = mkOption {
|
|
type = types.bool;
|
|
default = false;
|
|
description = mdDoc ''Open port in the firewall for the Jellyseerr web interface.'';
|
|
};
|
|
|
|
port = mkOption {
|
|
type = types.port;
|
|
default = 5055;
|
|
description = mdDoc ''The port which the Jellyseerr web UI should listen to.'';
|
|
};
|
|
|
|
package = mkOption {
|
|
type = types.package;
|
|
default = pkgs.jellyseerr;
|
|
defaultText = literalExpression "pkgs.jellyseerr";
|
|
description = lib.mdDoc ''
|
|
Jellyseerr package to use.
|
|
'';
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
systemd.services.jellyseerr = {
|
|
description = "Jellyseerr, a requests manager for Jellyfin";
|
|
after = [ "network.target" ];
|
|
wantedBy = [ "multi-user.target" ];
|
|
environment.PORT = toString cfg.port;
|
|
serviceConfig = {
|
|
Type = "exec";
|
|
StateDirectory = "jellyseerr";
|
|
WorkingDirectory = "\${cfg.package}/libexec/jellyseerr/deps/jellyseerr";
|
|
DynamicUser = true;
|
|
ExecStart = "\${cfg.package}/bin/jellyseerr";
|
|
BindPaths = [ "/var/lib/jellyseerr/:\${cfg.package}/libexec/jellyseerr/deps/jellyseerr/config/" ];
|
|
Restart = "on-failure";
|
|
ProtectHome = true;
|
|
ProtectSystem = "strict";
|
|
PrivateTmp = true;
|
|
PrivateDevices = true;
|
|
ProtectHostname = true;
|
|
ProtectClock = true;
|
|
ProtectKernelTunables = true;
|
|
ProtectKernelModules = true;
|
|
ProtectKernelLogs = true;
|
|
ProtectControlGroups = true;
|
|
NoNewPrivileges = true;
|
|
RestrictRealtime = true;
|
|
RestrictSUIDSGID = true;
|
|
RemoveIPC = true;
|
|
PrivateMounts = true;
|
|
};
|
|
};
|
|
|
|
networking.firewall = mkIf cfg.openFirewall {
|
|
allowedTCPPorts = [ cfg.port ];
|
|
};
|
|
};
|
|
}`;
|
|
|
|
const configuration = `{ config, pkgs, ... }:
|
|
{
|
|
imports = [ ./jellyseerr-module.nix ]
|
|
|
|
services.jellyseerr = {
|
|
enable = true;
|
|
port = 5055;
|
|
openFirewall = true;
|
|
package = (pkgs.callPackage (import ../../../pkgs/jellyseerr) { });
|
|
};
|
|
}`;
|
|
|
|
const isUpToDate = jellyseerrVersion === nixpkgVersion;
|
|
|
|
return (
|
|
<>
|
|
{isUpToDate ? (
|
|
<>
|
|
<p>The latest version of Jellyseerr <strong>({jellyseerrVersion})</strong> and the Jellyseerr nixpkg package version <strong>({nixpkgVersion})</strong> is <strong>up-to-date</strong>.</p>
|
|
<p>There is no need to override the package derivation.</p>
|
|
</>
|
|
) : (
|
|
<>
|
|
<p>The latest version of Jellyseerr <strong>({jellyseerrVersion})</strong> and the Jellyseerr nixpkg version <strong>(v{nixpkgVersion})</strong> is <strong>out-of-date</strong>.
|
|
If you want to use <b>Jellyseerr v{jellyseerrVersion}</b>, you will need to override the package derivation.</p>
|
|
<p>In order to override the package derivation:</p>
|
|
<ol>
|
|
<li style={{ marginBottom: '1rem' }}>Grab the <a href="https://raw.githubusercontent.com/NixOS/nixpkgs/nixos-unstable/pkgs/servers/jellyseerr/default.nix">latest nixpkg derivation for Jellyseerr</a></li>
|
|
<li style={{ marginBottom: '1rem' }}>Grab the latest <a href="https://raw.githubusercontent.com/Fallenbagel/jellyseerr/main/package.json">package.json</a> for Jellyseerr</li>
|
|
<li style={{ marginBottom: '1rem' }}>Add it to the same directory as the nixpkg derivation</li>
|
|
<li style={{ marginBottom: '1rem' }}>Update the `src` and `offlineCache` attributes in the nixpkg derivation:</li>
|
|
<CodeBlock className="language-nix" style={{ marginBottom: '1rem' }}>{code}</CodeBlock>
|
|
<Admonition type="tip" style={{ marginBottom: '1rem' }}>You can replace the <b>sha256</b> with the actual hash that <b>nixos-rebuild</b> outputs when you run the command.</Admonition>
|
|
<li style={{ marginBottom: '1rem' }}>Grab this module and import it in your `configuration.nix`</li>
|
|
<CodeBlock className="language-nix" style={{ marginBottom: '1rem' }}>{module}</CodeBlock>
|
|
<Admonition type="tip" style={{ marginBottom: '1rem' }}>We are using a custom module because the upstream module does not have a package option.</Admonition>
|
|
<li style={{ marginBottom: '1rem' }}>Call the new package in your `configuration.nix`</li>
|
|
<CodeBlock className="language-nix" style={{ marginBottom: '1rem' }}>{configuration}</CodeBlock>
|
|
</ol>
|
|
</>
|
|
)}
|
|
</>
|
|
);
|
|
|
|
};
|
|
|
|
<VersionMatch />
|
|
|