Compare commits

..

5 commits

Author SHA1 Message Date
Haak Saxberg
ad82b2f136 Configure mangadex downloader 2026-01-06 10:07:44 -08:00
Haak Saxberg
67243bad11 Cleanup of some configuration: jellyfin, nvim, systems 2026-01-06 10:03:46 -08:00
Haak Saxberg
b21c3b559b Update configuration based on new nixpkgs errors 2026-01-06 10:02:46 -08:00
Haak Saxberg
e4a88cc699 Stop serving calibre-web 2026-01-06 10:02:23 -08:00
Haak Saxberg
f54b895602 Add immich to the set of programs we have configured 2026-01-06 10:02:10 -08:00
11 changed files with 135 additions and 14 deletions

View file

@ -59,8 +59,8 @@ in
../system/xps11/configuration.nix ../system/xps11/configuration.nix
../home/programs/nginx ../home/programs/nginx
../home/programs/jellyfin ../home/programs/jellyfin
../home/programs/calibre-web
../home/programs/forgejo/webserver.nix ../home/programs/forgejo/webserver.nix
../home/programs/immich
]; ];
fileSystems."/storage" = { fileSystems."/storage" = {

View file

@ -1,6 +1,8 @@
{ pkgs, ... }: { pkgs, ... }:
{ {
environment.systemPackages = with pkgs; [ beets-unstable ]; environment.systemPackages = with pkgs; [
beets
];
# If using home-manager, we could the beets settings in a more in-nix way. As # If using home-manager, we could the beets settings in a more in-nix way. As
# it is, here's the YAML that's currently on the NAS. If being serious, we # it is, here's the YAML that's currently on the NAS. If being serious, we

View file

@ -0,0 +1,62 @@
{ lib, config, ... }:
let
immichDomain = lib.strings.fileContents ../../../../secrets/letsencrypt/mediaserver/immichdomain;
in
{
services.immich = {
enable = true;
port = 2283;
mediaLocation = "/storage/organized/photos";
## Enable hardware acceleration for video
# `null` will give access to all devices.
# You may want to restrict this by using something like `[ "/dev/dri/renderD128" ]`
accelerationDevices = null;
settings.server.externalDomain = "https://${immichDomain}";
};
hardware.graphics = {
enable = true;
# Maybe we need more here, hard to say...
};
users.users.immich.extraGroups = [ "video" "render" "multimedia"
# something strange here about remote file-system groups...
"jellyfin" ];
## Expose immich to "the world"
networking.firewall = {
allowedTCPPorts = [
#nginx
80
443
];
};
services.nginx = {
recommendedProxySettings = true;
recommendedGzipSettings = true;
recommendedOptimisation = true;
recommendedTlsSettings = true;
virtualHosts."${immichDomain}" = {
forceSSL = true;
enableACME = true;
extraConfig = ''
client_max_body_size 50000M;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
send_timeout 600s;
'';
locations."/" = {
proxyPass = "http://[::1]:${toString config.services.immich.port}";
proxyWebsockets = true;
};
};
};
}

View file

@ -3,9 +3,6 @@
{ {
networking.firewall = { networking.firewall = {
allowedTCPPorts = [ allowedTCPPorts = [
# jellyfin frontend
8096
8920
#nginx #nginx
80 80
443 443
@ -22,6 +19,7 @@
# 2. override default hardening measure from NixOS - this is default since 22.05 # 2. override default hardening measure from NixOS - this is default since 22.05
systemd.services.jellyfin.serviceConfig.PrivateDevices = lib.mkForce false; systemd.services.jellyfin.serviceConfig.PrivateDevices = lib.mkForce false;
## Expose jelly to "the world"
services.nginx = { services.nginx = {
virtualHosts."${lib.strings.fileContents ../../../../secrets/letsencrypt/mediaserver/domain}" = { virtualHosts."${lib.strings.fileContents ../../../../secrets/letsencrypt/mediaserver/domain}" = {
forceSSL = true; forceSSL = true;

View file

@ -0,0 +1,58 @@
{ pkgs, ... }:
let
buildPythonPackage = pkgs.python311Packages.buildPythonPackage;
fetchPypi = pkgs.python311Packages.fetchPypi;
requests_doh = buildPythonPackage rec {
pname = "requests_doh";
version = "1.0.0";
format = "setuptools";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-bOi8liRQMKGY7yDSEAtNyzsSCgWljfcD+L4SGnn48vs=";
};
doCheck = false;
propagatedBuildInputs = with pkgs.python311Packages; [
requests
dnspython
] ++ requests.optional-dependencies.socks ++ dnspython.optional-dependencies.doh;
};
mangadex-downloader = buildPythonPackage
rec {
pname = "mangadex_downloader";
version = "3.1.4";
format = "setuptools";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-653lHYQPFZ3I9+bqMRxGcSyJv1MEqPvYbbX0j/SATyo=";
};
doCheck = false;
propagatedBuildInputs = with pkgs.python311Packages; [
pysocks
requests_doh
requests
beautifulsoup4
chardet
packaging
requests
tqdm
pyjwt
pillow
pathvalidate
]++ requests.optional-dependencies.socks;
};
in
{
environment.systemPackages = [
(pkgs.python311.withPackages (p: [
mangadex-downloader
]))
];
}

View file

@ -127,7 +127,7 @@ with builtins;
pkgs.replaceVars ./nvim-lspconfig.lua { pkgs.replaceVars ./nvim-lspconfig.lua {
# since both of these are used for actually configuring the system, # since both of these are used for actually configuring the system,
# we'll probably always want them around. # we'll probably always want them around.
lua_ls = pkgs.sumneko-lua-language-server; lua_ls = pkgs.lua-language-server;
nixd = pkgs.nixd; nixd = pkgs.nixd;
ts_server = pkgs.nodePackages.typescript-language-server; ts_server = pkgs.nodePackages.typescript-language-server;
diagnostic_server = pkgs.nodePackages.diagnostic-languageserver; diagnostic_server = pkgs.nodePackages.diagnostic-languageserver;

View file

@ -6,7 +6,6 @@ filetype plugin indent on
let g:netrw_liststyle = 3 let g:netrw_liststyle = 3
set nobackup set nobackup
set noswapfile set noswapfile
set pastetoggle=<F3>
set nowrap set nowrap
set background=dark set background=dark

View file

@ -12,7 +12,7 @@ with builtins; {
enableCompletion = true; enableCompletion = true;
defaultKeymap = "viins"; defaultKeymap = "viins";
initExtra = readFile ./zshrc; initContent = readFile ./zshrc;
oh-my-zsh = { oh-my-zsh = {
enable = true; enable = true;

View file

@ -15,6 +15,7 @@
# Include the results of the hardware scan. # Include the results of the hardware scan.
./hardware-configuration.nix ./hardware-configuration.nix
../common/users.nix ../common/users.nix
(import ../../home/programs/mangadex-downloader)
]; ];
# enable nix-flakes # enable nix-flakes

View file

@ -42,7 +42,7 @@
(pkgs.writeTextFile { (pkgs.writeTextFile {
name = "dev-device-no-auto-name"; name = "dev-device-no-auto-name";
text = '' text = ''
SUBSYSTEM=="net", ACTION=="add", DEVTYPE!=="?*", ATTR{address}=="04:7c:16:10:27:5e", NAME="eth0" SUBSYSTEM=="net", ACTION=="add", ENV{DEVTYPE}!="?*", ATTR{address}=="04:7c:16:10:27:5e", NAME="eth0"
''; '';
destination = "/etc/udev/rules.d/70-persistent-net.rules"; destination = "/etc/udev/rules.d/70-persistent-net.rules";
@ -50,12 +50,12 @@
]; ];
# Select internationalisation properties. # Select internationalisation properties.
i18n.defaultLocale = "en_US.utf8"; i18n.defaultLocale = "en_US.UTF-8";
# Configure keymap in X11 # Configure keymap in X11
services.xserver = { services.xserver = {
layout = "us"; xkb.layout = "us";
xkbVariant = ""; xkb.variant = "";
}; };
# Allow unfree packages # Allow unfree packages
@ -94,5 +94,4 @@
# Before changing this value read the documentation for this option # Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "22.05"; # Did you read the comment? system.stateVersion = "22.05"; # Did you read the comment?
} }

View file

@ -82,7 +82,7 @@
name = "dev-device-no-auto-name"; name = "dev-device-no-auto-name";
# xps11 uses a usb device as an ethernet port # xps11 uses a usb device as an ethernet port
text = '' text = ''
SUBSYSTEM=="net", ACTION=="add", DEVTYPE!=="?*", ATTR{address}=="00:e0:4c:68:13:bf", NAME="eth0" SUBSYSTEM=="net", ACTION=="add", ENV{DEVTYPE}!="?*", ATTR{address}=="00:e0:4c:68:13:bf", NAME="eth0"
''; '';
destination = "/etc/udev/rules.d/70-persistent-net.rules"; destination = "/etc/udev/rules.d/70-persistent-net.rules";
@ -116,4 +116,6 @@
# servers. You should change this only after NixOS release notes say you # servers. You should change this only after NixOS release notes say you
# should. # should.
system.stateVersion = "20.03"; # Did you read the comment? system.stateVersion = "20.03"; # Did you read the comment?
# postgres 11 has EOL'd
services.postgresql.package = pkgs.postgresql_15;
} }