Updated docs
This commit is contained in:
@@ -38,12 +38,12 @@ To run services through a VPN, you must provide a wg-quick config file,
|
|||||||
that is provided by most VPN providers:
|
that is provided by most VPN providers:
|
||||||
|
|
||||||
```nix {.numberLines}
|
```nix {.numberLines}
|
||||||
nixarr.vpn = {
|
nixarr.vpn = {
|
||||||
enable = true;
|
enable = true;
|
||||||
# IMPORTANT: This file must _not_ be in the config git directory
|
# IMPORTANT: This file must _not_ be in the config git directory
|
||||||
# You can usually get this wireguard file from your VPN provider
|
# You can usually get this wireguard file from your VPN provider
|
||||||
wgConf = "/data/.secret/wg.conf";
|
wgConf = "/data/.secret/wg.conf";
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
It is possible, _but not recommended_, to run the "*Arrs" behind a VPN,
|
It is possible, _but not recommended_, to run the "*Arrs" behind a VPN,
|
||||||
@@ -64,33 +64,33 @@ If you want to know how to setup DDNS with Njalla, or how to manage secrets in n
|
|||||||
To use this module, add it to your flake inputs in your nix flake file, like shown in this example flake:
|
To use this module, add it to your flake inputs in your nix flake file, like shown in this example flake:
|
||||||
|
|
||||||
```nix {.numberLines}
|
```nix {.numberLines}
|
||||||
{
|
{
|
||||||
description = "Your nix flake";
|
description = "Your nix flake";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||||
nixarr.url = "github:rasmus-kirk/nixarr";
|
nixarr.url = "github:rasmus-kirk/nixarr";
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = {
|
outputs = {
|
||||||
nixpkgs,
|
nixpkgs,
|
||||||
nixarr,
|
nixarr,
|
||||||
...
|
...
|
||||||
}@inputs: {
|
}@inputs: {
|
||||||
nixosConfigurations = {
|
nixosConfigurations = {
|
||||||
servarr = nixpkgs.lib.nixosSystem {
|
servarr = nixpkgs.lib.nixosSystem {
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
|
|
||||||
modules = [
|
modules = [
|
||||||
./nixos/servarr/configuration.nix
|
./nixos/servarr/configuration.nix
|
||||||
nixarr.nixosModules.default
|
nixarr.nixosModules.default
|
||||||
];
|
];
|
||||||
|
|
||||||
specialArgs = { inherit inputs; };
|
specialArgs = { inherit inputs; };
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
}
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
@@ -102,45 +102,45 @@ This example does the following:
|
|||||||
- Runs all "*Arrs" supported by this module
|
- Runs all "*Arrs" supported by this module
|
||||||
|
|
||||||
```nix {.numberLines}
|
```nix {.numberLines}
|
||||||
nixarr = {
|
nixarr = {
|
||||||
enable = true;
|
|
||||||
# These two values are also the default, but you can set them to whatever
|
|
||||||
# else you want
|
|
||||||
mediaDir = "/data/media";
|
|
||||||
stateDir = "/data/media/.state";
|
|
||||||
|
|
||||||
vpn = {
|
|
||||||
enable = true;
|
enable = true;
|
||||||
# IMPORTANT: This file must _not_ be in the config git directory
|
# These two values are also the default, but you can set them to whatever
|
||||||
# You can usually get this wireguard file from your VPN provider
|
# else you want
|
||||||
wgConf = "/data/.secret/wg.conf";
|
mediaDir = "/data/media";
|
||||||
};
|
stateDir = "/data/media/.state";
|
||||||
|
|
||||||
jellyfin = {
|
vpn = {
|
||||||
enable = true;
|
|
||||||
# These options set up a nginx HTTPS reverse proxy, so you can access
|
|
||||||
# Jellyfin on your domain with HTTPS
|
|
||||||
expose.https = {
|
|
||||||
enable = true;
|
enable = true;
|
||||||
domainName = "your.domain.com";
|
# IMPORTANT: This file must _not_ be in the config git directory
|
||||||
acmeMail = "your@email.com"; # Required for ACME-bot
|
# You can usually get this wireguard file from your VPN provider
|
||||||
|
wgConf = "/data/.secret/wg.conf";
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
transmission = {
|
jellyfin = {
|
||||||
enable = true;
|
enable = true;
|
||||||
vpn.enable = true;
|
# These options set up a nginx HTTPS reverse proxy, so you can access
|
||||||
peerPort = 50000; # Set this to the port forwarded by your VPN
|
# Jellyfin on your domain with HTTPS
|
||||||
};
|
expose.https = {
|
||||||
|
enable = true;
|
||||||
|
domainName = "your.domain.com";
|
||||||
|
acmeMail = "your@email.com"; # Required for ACME-bot
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
# It is possible for this module to run the *Arrs through a VPN, but it
|
transmission = {
|
||||||
# is generally not recommended, as it can cause rate-limiting issues.
|
enable = true;
|
||||||
sonarr.enable = true;
|
vpn.enable = true;
|
||||||
radarr.enable = true;
|
peerPort = 50000; # Set this to the port forwarded by your VPN
|
||||||
prowlarr.enable = true;
|
};
|
||||||
readarr.enable = true;
|
|
||||||
lidarr.enable = true;
|
# It is possible for this module to run the *Arrs through a VPN, but it
|
||||||
};
|
# is generally not recommended, as it can cause rate-limiting issues.
|
||||||
|
sonarr.enable = true;
|
||||||
|
radarr.enable = true;
|
||||||
|
prowlarr.enable = true;
|
||||||
|
readarr.enable = true;
|
||||||
|
lidarr.enable = true;
|
||||||
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
Another example where port forwarding is not an option. This is useful if,
|
Another example where port forwarding is not an option. This is useful if,
|
||||||
@@ -153,56 +153,56 @@ example does the following:
|
|||||||
- Runs all the supported "*Arrs"
|
- Runs all the supported "*Arrs"
|
||||||
|
|
||||||
```nix {.numberLines}
|
```nix {.numberLines}
|
||||||
nixarr = {
|
nixarr = {
|
||||||
enable = true;
|
|
||||||
|
|
||||||
vpn = {
|
|
||||||
enable = true;
|
enable = true;
|
||||||
wgConf = "/data/.secret/wg.conf";
|
|
||||||
};
|
|
||||||
|
|
||||||
jellyfin = {
|
vpn = {
|
||||||
enable = true;
|
|
||||||
vpn.enable = true;
|
|
||||||
|
|
||||||
# Access the Jellyfin web-ui from the internet.
|
|
||||||
# Get this port from your VPN provider
|
|
||||||
expose.vpn = {
|
|
||||||
enable = true;
|
enable = true;
|
||||||
port = 12345;
|
wgConf = "/data/.secret/wg.conf";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
jellyfin = {
|
||||||
|
enable = true;
|
||||||
|
vpn.enable = true;
|
||||||
|
|
||||||
|
# Access the Jellyfin web-ui from the internet.
|
||||||
|
# Get this port from your VPN provider
|
||||||
|
expose.vpn = {
|
||||||
|
enable = true;
|
||||||
|
port = 12345;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Setup SSH service that runs through VPN.
|
||||||
|
# Lets you connect through ssh from the internet without having access to
|
||||||
|
# port forwarding
|
||||||
|
openssh.expose.vpn.enable = true;
|
||||||
|
|
||||||
|
transmission = {
|
||||||
|
enable = true;
|
||||||
|
vpn.enable = true;
|
||||||
|
peerPort = 50000; # Set this to the port forwarded by your VPN
|
||||||
|
};
|
||||||
|
|
||||||
|
sonarr.enable = true;
|
||||||
|
radarr.enable = true;
|
||||||
|
prowlarr.enable = true;
|
||||||
|
readarr.enable = true;
|
||||||
|
lidarr.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
# Setup SSH service that runs through VPN.
|
# The `openssh.vpn.enable` option does not enable openssh, so we do that here:
|
||||||
# Lets you connect through ssh from the internet without having access to
|
# We disable password authentication as it's generally insecure.
|
||||||
# port forwarding
|
services.openssh = {
|
||||||
openssh.vpn.enable = true;
|
|
||||||
|
|
||||||
transmission = {
|
|
||||||
enable = true;
|
enable = true;
|
||||||
vpn.enable = true;
|
settings.PasswordAuthentication = false;
|
||||||
peerPort = 50000; # Set this to the port forwarded by your VPN
|
# Get this port from your VPN provider
|
||||||
|
ports = [ 54321 ]
|
||||||
};
|
};
|
||||||
|
# Adds your public keys as trusted devices
|
||||||
sonarr.enable = true;
|
users.extraUsers.username.openssh.authorizedKeys.keyFiles = [
|
||||||
radarr.enable = true;
|
./path/to/public/key/machine.pub}
|
||||||
prowlarr.enable = true;
|
];
|
||||||
readarr.enable = true;
|
|
||||||
lidarr.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# The `openssh.vpn.enable` option does not enable openssh, so we do that here:
|
|
||||||
# We disable password authentication as it's generally insecure.
|
|
||||||
services.openssh = {
|
|
||||||
enable = true;
|
|
||||||
settings.PasswordAuthentication = false;
|
|
||||||
# Get this port from your VPN provider
|
|
||||||
ports = [ 54321 ]
|
|
||||||
};
|
|
||||||
# Adds your public keys as trusted devices
|
|
||||||
users.extraUsers.username.openssh.authorizedKeys.keyFiles = [
|
|
||||||
./path/to/public/key/machine.pub}
|
|
||||||
];
|
|
||||||
```
|
```
|
||||||
|
|
||||||
In both examples, you don't have access to the "*Arrs" or torrent client
|
In both examples, you don't have access to the "*Arrs" or torrent client
|
||||||
@@ -210,13 +210,13 @@ without being on your home network or accessing them through localhost. If
|
|||||||
you have SSH setup you can use SSH tunneling. Simply run:
|
you have SSH setup you can use SSH tunneling. Simply run:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
ssh -N user@ip \
|
ssh -N user@ip \
|
||||||
-L 6001:localhost:9091 \
|
-L 6001:localhost:9091 \
|
||||||
-L 6002:localhost:9696 \
|
-L 6002:localhost:9696 \
|
||||||
-L 6003:localhost:8989 \
|
-L 6003:localhost:8989 \
|
||||||
-L 6004:localhost:7878 \
|
-L 6004:localhost:7878 \
|
||||||
-L 6005:localhost:8686 \
|
-L 6005:localhost:8686 \
|
||||||
-L 6006:localhost:8787
|
-L 6006:localhost:8787
|
||||||
```
|
```
|
||||||
|
|
||||||
Replace `user` with your user and `ip` with the public ip, or domain if set
|
Replace `user` with your user and `ip` with the public ip, or domain if set
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
-- pandoc_indent_nix_blocks.lua
|
||||||
|
-- This Pandoc Lua filter indents all lines in code blocks by 2 spaces
|
||||||
|
-- TODO: This indents _all_ code blocks, not just example and default...
|
||||||
|
|
||||||
|
--if dump_debug then
|
||||||
|
-- local debug_file = io.open("pandoc_debug.log", "a")
|
||||||
|
--end
|
||||||
|
--
|
||||||
|
--function debug(msg)
|
||||||
|
-- if debug_file then
|
||||||
|
-- debug_file:write(msg .. "\n")
|
||||||
|
-- end
|
||||||
|
--end
|
||||||
|
|
||||||
|
function CodeBlock(block)
|
||||||
|
-- Check if the code block language is unmarked
|
||||||
|
if #block.classes == 0 then
|
||||||
|
-- Split the block text into lines
|
||||||
|
local lines = {}
|
||||||
|
for line in block.text:gmatch("[^\r\n]+") do
|
||||||
|
table.insert(lines, line)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Indent each line by 2 spaces
|
||||||
|
for i, line in ipairs(lines) do
|
||||||
|
lines[i] = " " .. line
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Join the lines back together and update the block text
|
||||||
|
block.text = table.concat(lines, '\n')
|
||||||
|
|
||||||
|
-- Return the modified block
|
||||||
|
return block
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return {
|
||||||
|
{CodeBlock = CodeBlock}
|
||||||
|
}
|
||||||
+17
-12
@@ -53,10 +53,26 @@ in
|
|||||||
"$file_path"
|
"$file_path"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Make home page
|
||||||
|
pandoc \
|
||||||
|
--metadata date="$(date -u '+%Y-%m-%d - %H:%M:%S %Z')" \
|
||||||
|
--standalone \
|
||||||
|
--highlight-style docs/pandoc/gruvbox.theme \
|
||||||
|
--template docs/pandoc/template.html \
|
||||||
|
--css docs/pandoc/style.css \
|
||||||
|
-V lang=en \
|
||||||
|
-V --mathjax \
|
||||||
|
-f markdown+smart \
|
||||||
|
-o $out/index.html \
|
||||||
|
README.md
|
||||||
|
|
||||||
|
# Make wiki pages
|
||||||
find docs/wiki -type f -name "*.md" | while IFS= read -r file; do
|
find docs/wiki -type f -name "*.md" | while IFS= read -r file; do
|
||||||
buildwiki "$file"
|
buildwiki "$file"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Make options
|
||||||
|
cd $out
|
||||||
pandoc \
|
pandoc \
|
||||||
--standalone \
|
--standalone \
|
||||||
--metadata title="Nixarr - Option Documentation" \
|
--metadata title="Nixarr - Option Documentation" \
|
||||||
@@ -64,6 +80,7 @@ in
|
|||||||
--highlight-style docs/pandoc/gruvbox.theme \
|
--highlight-style docs/pandoc/gruvbox.theme \
|
||||||
--template docs/pandoc/template.html \
|
--template docs/pandoc/template.html \
|
||||||
--css docs/pandoc/style.css \
|
--css docs/pandoc/style.css \
|
||||||
|
--lua-filter docs/pandoc/lua/indent-code-blocks.lua \
|
||||||
--lua-filter docs/pandoc/lua/anchor-links.lua \
|
--lua-filter docs/pandoc/lua/anchor-links.lua \
|
||||||
--lua-filter docs/pandoc/lua/code-default-to-nix.lua \
|
--lua-filter docs/pandoc/lua/code-default-to-nix.lua \
|
||||||
--lua-filter docs/pandoc/lua/remove-utils.lua \
|
--lua-filter docs/pandoc/lua/remove-utils.lua \
|
||||||
@@ -76,17 +93,5 @@ in
|
|||||||
-f markdown+smart \
|
-f markdown+smart \
|
||||||
-o $out/options.html \
|
-o $out/options.html \
|
||||||
"$tmpdir"/nixos-options.md
|
"$tmpdir"/nixos-options.md
|
||||||
|
|
||||||
pandoc \
|
|
||||||
--metadata date="$(date -u '+%Y-%m-%d - %H:%M:%S %Z')" \
|
|
||||||
--standalone \
|
|
||||||
--highlight-style docs/pandoc/gruvbox.theme \
|
|
||||||
--template docs/pandoc/template.html \
|
|
||||||
--css docs/pandoc/style.css \
|
|
||||||
-V lang=en \
|
|
||||||
-V --mathjax \
|
|
||||||
-f markdown+smart \
|
|
||||||
-o $out/index.html \
|
|
||||||
README.md
|
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user