Personal-use NixOS configuration
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Prepare for soulseek and rtorrent

encode42 5b1734f1 c321faeb

+140 -44
+47 -31
flake.lock
··· 82 82 }, 83 83 "locked": { 84 84 "dir": "pkgs/firefox-addons", 85 - "lastModified": 1757736223, 86 - "narHash": "sha256-4yhWsAvejkPRNdx9eKAVOQt1t8vI6qF/kITCRSIIiK8=", 85 + "lastModified": 1757822625, 86 + "narHash": "sha256-w+V97GrUZK5Lt50DOzhmFGPf3coxfj4TTNHa0rHswuE=", 87 87 "owner": "rycee", 88 88 "repo": "nur-expressions", 89 - "rev": "a73f8d6c29ea0e05c0dc570d4047e0aed1edd00d", 89 + "rev": "5a1d5f5453eef0ea2510d9860d2f803911df6776", 90 90 "type": "gitlab" 91 91 }, 92 92 "original": { ··· 248 248 ] 249 249 }, 250 250 "locked": { 251 - "lastModified": 1756679287, 252 - "narHash": "sha256-Xd1vOeY9ccDf5VtVK12yM0FS6qqvfUop8UQlxEB+gTQ=", 251 + "lastModified": 1757808926, 252 + "narHash": "sha256-K6PEI5PYY94TVMH0mX3MbZNYFme7oNRKml/85BpRRAo=", 253 253 "owner": "nix-community", 254 254 "repo": "home-manager", 255 - "rev": "07fc025fe10487dd80f2ec694f1cd790e752d0e8", 255 + "rev": "f21d9167782c086a33ad53e2311854a8f13c281e", 256 256 "type": "github" 257 257 }, 258 258 "original": { ··· 333 333 "xwayland-satellite-unstable": "xwayland-satellite-unstable" 334 334 }, 335 335 "locked": { 336 - "lastModified": 1757698528, 337 - "narHash": "sha256-vXZaxm2LfFrVyuUOKkyWpwR0K2WB7k2oo94HN1o4910=", 336 + "lastModified": 1757870947, 337 + "narHash": "sha256-0N8w6SB6a68kWioFmlr+KfwfG44KVjPjJIBSQKNdNhE=", 338 338 "owner": "sodiboo", 339 339 "repo": "niri-flake", 340 - "rev": "2418edea929640fb5f856bc0a25fb91f54dfc229", 340 + "rev": "8e9b1a571399104e42d8fa5de6c28c63bff0c16a", 341 341 "type": "github" 342 342 }, 343 343 "original": { ··· 366 366 "niri-unstable": { 367 367 "flake": false, 368 368 "locked": { 369 - "lastModified": 1757656821, 370 - "narHash": "sha256-MDaLusQZflxngGMU41g6cqabM7KE8I55UazzAZsjNN0=", 369 + "lastModified": 1757832020, 370 + "narHash": "sha256-SCdus7r4IS8l3jzF8mcMFMlDvACTdmDCcsPnGUEqll0=", 371 371 "owner": "YaLTeR", 372 372 "repo": "niri", 373 - "rev": "b7909dbf61c7c1511b9a51ef46e1d503d5ba3d05", 373 + "rev": "e6a8ad38479eb179dc7301755316f993e3e872ea", 374 374 "type": "github" 375 375 }, 376 376 "original": { ··· 388 388 "systems": "systems_2" 389 389 }, 390 390 "locked": { 391 - "lastModified": 1757321985, 392 - "narHash": "sha256-rUeWawQCAcvlYdLUQVfRZa/034/t9QgMFz7MAZaU2dI=", 391 + "lastModified": 1757846260, 392 + "narHash": "sha256-j5Rj9KAhuoTCQhtD5N2oJYHuEukTmJe8aPgOetWjG7w=", 393 393 "owner": "theCapypara", 394 394 "repo": "nix-jetbrains-plugins", 395 - "rev": "39cf59f134054d4384b86513e2113799c25c334c", 395 + "rev": "f2cf7768b307f00a883c5d80f7458e6ff7eac978", 396 396 "type": "github" 397 397 }, 398 398 "original": { ··· 425 425 }, 426 426 "nixos-hardware": { 427 427 "locked": { 428 - "lastModified": 1757103352, 429 - "narHash": "sha256-PtT7ix43ss8PONJ1VJw3f6t2yAoGH+q462Sn8lrmWmk=", 428 + "lastModified": 1757891025, 429 + "narHash": "sha256-NfiTk59huy/YK9H4W4wVwRYyiP2u86QqROM5KK4f5F4=", 430 430 "owner": "NixOS", 431 431 "repo": "nixos-hardware", 432 - "rev": "11b2a10c7be726321bb854403fdeec391e798bf0", 432 + "rev": "4c38a024fa32e61db2be8573e5282b15d9733a79", 433 433 "type": "github" 434 434 }, 435 435 "original": { ··· 488 488 }, 489 489 "nixpkgs-stable_2": { 490 490 "locked": { 491 - "lastModified": 1757545623, 492 - "narHash": "sha256-mCxPABZ6jRjUQx3bPP4vjA68ETbPLNz9V2pk9tO7pRQ=", 491 + "lastModified": 1757810152, 492 + "narHash": "sha256-Vp9K5ol6h0J90jG7Rm4RWZsCB3x7v5VPx588TQ1dkfs=", 493 493 "owner": "NixOS", 494 494 "repo": "nixpkgs", 495 - "rev": "8cd5ce828d5d1d16feff37340171a98fc3bf6526", 495 + "rev": "9a094440e02a699be5c57453a092a8baf569bdad", 496 496 "type": "github" 497 497 }, 498 498 "original": { ··· 504 504 }, 505 505 "nixpkgs-unstable": { 506 506 "locked": { 507 - "lastModified": 1757487488, 508 - "narHash": "sha256-zwE/e7CuPJUWKdvvTCB7iunV4E/+G0lKfv4kk/5Izdg=", 507 + "lastModified": 1757745802, 508 + "narHash": "sha256-hLEO2TPj55KcUFUU1vgtHE9UEIOjRcH/4QbmfHNF820=", 509 509 "owner": "NixOS", 510 510 "repo": "nixpkgs", 511 - "rev": "ab0f3607a6c7486ea22229b92ed2d355f1482ee0", 511 + "rev": "c23193b943c6c689d70ee98ce3128239ed9e32d1", 512 512 "type": "github" 513 513 }, 514 514 "original": { ··· 520 520 }, 521 521 "nixpkgs_2": { 522 522 "locked": { 523 - "lastModified": 1757487488, 524 - "narHash": "sha256-zwE/e7CuPJUWKdvvTCB7iunV4E/+G0lKfv4kk/5Izdg=", 523 + "lastModified": 1757745802, 524 + "narHash": "sha256-hLEO2TPj55KcUFUU1vgtHE9UEIOjRcH/4QbmfHNF820=", 525 525 "owner": "NixOS", 526 526 "repo": "nixpkgs", 527 - "rev": "ab0f3607a6c7486ea22229b92ed2d355f1482ee0", 527 + "rev": "c23193b943c6c689d70ee98ce3128239ed9e32d1", 528 528 "type": "github" 529 529 }, 530 530 "original": { ··· 536 536 }, 537 537 "nixpkgs_3": { 538 538 "locked": { 539 - "lastModified": 1757545623, 540 - "narHash": "sha256-mCxPABZ6jRjUQx3bPP4vjA68ETbPLNz9V2pk9tO7pRQ=", 539 + "lastModified": 1757810152, 540 + "narHash": "sha256-Vp9K5ol6h0J90jG7Rm4RWZsCB3x7v5VPx588TQ1dkfs=", 541 541 "owner": "NixOS", 542 542 "repo": "nixpkgs", 543 - "rev": "8cd5ce828d5d1d16feff37340171a98fc3bf6526", 543 + "rev": "9a094440e02a699be5c57453a092a8baf569bdad", 544 544 "type": "github" 545 545 }, 546 546 "original": { ··· 591 591 "nixcord": "nixcord", 592 592 "nixos-hardware": "nixos-hardware", 593 593 "nixpkgs": "nixpkgs_3", 594 - "nixpkgs-unstable": "nixpkgs-unstable" 594 + "nixpkgs-unstable": "nixpkgs-unstable", 595 + "vpn-confinement": "vpn-confinement" 595 596 } 596 597 }, 597 598 "rust-overlay": { ··· 642 643 "original": { 643 644 "owner": "nix-systems", 644 645 "repo": "default", 646 + "type": "github" 647 + } 648 + }, 649 + "vpn-confinement": { 650 + "locked": { 651 + "lastModified": 1749672087, 652 + "narHash": "sha256-j8LG0s0QcvNkZZLcItl78lvTZemvsScir0dG3Ii4B1c=", 653 + "owner": "Maroka-chan", 654 + "repo": "VPN-Confinement", 655 + "rev": "880b3bd2c864dce4f6afc79f6580ca699294c011", 656 + "type": "github" 657 + }, 658 + "original": { 659 + "owner": "Maroka-chan", 660 + "repo": "VPN-Confinement", 645 661 "type": "github" 646 662 } 647 663 },
+2
flake.nix
··· 58 58 }; 59 59 60 60 # Server packages 61 + vpn-confinement.url = "github:Maroka-chan/VPN-Confinement"; 62 + 61 63 emby-flake = { 62 64 url = "github:tofu-salad/emby-server-flake"; 63 65 };
+38 -3
hosts/index/config/torrenting/rtorrent.nix
··· 1 - { flakeRoot, ... }: 1 + { flakeRoot, lib, ... }: 2 2 3 3 let 4 + interface = "rtornt"; 5 + 6 + dhtPort = 6771; 7 + listenStartPort = 33101; 8 + listenEndPort = 33103; 9 + 10 + vpnListenPorts = map (port: { 11 + inherit port; 12 + 13 + protocol = "both"; 14 + }) (lib.range listenStartPort listenEndPort); 15 + 16 + rtorrentModule = import (flakeRoot + /packages/server/torrenting/rtorrent.nix) { 17 + inherit dhtPort; 18 + 19 + listenPorts = { 20 + start = listenStartPort; 21 + end = listenEndPort; 22 + }; 23 + }; 24 + 4 25 floodModule = import (flakeRoot + /packages/server/torrenting/flood.nix) { 5 26 hosts = [ 6 27 { ··· 12 33 in 13 34 { 14 35 imports = [ 15 - (flakeRoot + /packages/server/torrenting/rtorrent.nix) 16 - 36 + rtorrentModule 17 37 floodModule 18 38 ]; 39 + 40 + vpnNamespaces.${interface} = { 41 + enable = true; 42 + 43 + wireguardConfigFile = "/mnt/apps/rtorrent/wg0.conf"; 44 + 45 + openVPNPorts = [ 46 + { 47 + port = dhtPort; 48 + 49 + protocol = "both"; 50 + } 51 + ] 52 + ++ vpnListenPorts; 53 + }; 19 54 20 55 services.rtorrent = { 21 56 dataDir = "/mnt/apps/rtorrent";
+26
hosts/index/config/torrenting/soulseek.nix
··· 1 1 { flakeRoot, ... }: 2 2 3 3 let 4 + interface = "soulsk"; 5 + 6 + port = 50220; 7 + 4 8 soulseekModule = import (flakeRoot + /packages/server/torrenting/soulseek.nix) { 5 9 hosts = [ 6 10 { ··· 15 19 soulseekModule 16 20 ]; 17 21 22 + vpnNamespaces.${interface} = { 23 + enable = true; 24 + 25 + wireguardConfigFile = "/mnt/apps/soulseek/wg0.conf"; 26 + 27 + openVPNPorts = [ 28 + { 29 + inherit port; 30 + } 31 + ]; 32 + }; 33 + 18 34 services.slskd = { 19 35 settings = { 20 36 instance_name = "index"; ··· 28 44 directories = [ 29 45 "[Music]/mnt/data/media/Music" # TODO 30 46 ]; 47 + }; 48 + 49 + soulseek = { 50 + listen_port = port; 31 51 }; 32 52 }; 33 53 34 54 environmentFile = "/mnt/apps/soulseek/soulseek.env"; 55 + }; 56 + 57 + systemd.services.slskd.vpnConfinement = { 58 + enable = true; 59 + 60 + vpnNamespace = interface; 35 61 }; 36 62 }
+1
outputs.nix
··· 33 33 system = "x86_64-linux"; 34 34 35 35 extraModules = [ 36 + inputs.vpn-confinement.nixosModules.default 36 37 inputs.emby-flake.nixosModules.default 37 38 ]; 38 39 };
+16 -8
packages/server/torrenting/flood.nix
··· 13 13 14 14 let 15 15 socket = "/run/flood/flood.sock"; 16 + 17 + rtorrentModule = import ./rtorrent.nix { }; 16 18 in 17 19 { 20 + imports = [ 21 + rtorrentModule 22 + ]; 23 + 18 24 services.flood = { 19 25 enable = true; 20 26 ··· 23 29 ]; 24 30 }; 25 31 26 - systemd.services.flood.serviceConfig.ExecStart = lib.mkForce (utils.escapeSystemdExecArgs ( 27 - [ 28 - (lib.getExe pkgs.flood) 29 - "--port ${socket}" 30 - "--rundir=/var/lib/flood" 31 - ] 32 - ++ config.services.flood.extraArgs 33 - )); 32 + systemd.services.flood.serviceConfig.ExecStart = lib.mkForce ( 33 + utils.escapeSystemdExecArgs ( 34 + [ 35 + (lib.getExe pkgs.flood) 36 + "--port ${socket}" 37 + "--rundir=/var/lib/flood" 38 + ] 39 + ++ config.services.flood.extraArgs 40 + ) 41 + ); 34 42 35 43 services.caddy.virtualHosts = flakeLib.mkProxies hosts '' 36 44 reverse_proxy unix/${socket}
+10 -2
packages/server/torrenting/rtorrent.nix
··· 1 + { 2 + dhtPort ? 6881, 3 + listenPorts ? { 4 + start = 6881; 5 + end = 6889; 6 + }, 7 + }: 8 + 1 9 { 2 10 services.rtorrent = { 3 11 enable = true; 4 12 5 13 configText = '' 6 14 dht.mode.set = auto 7 - dht.port.set = "6881" 15 + dht.port.set = "${toString dhtPort}" 8 16 9 17 protocol.pex.set = yes 10 18 11 - network.port_range.set = "6881-6889" 19 + network.port_range.set = "${toString listenPorts.start}-${toString listenPorts.end}" 12 20 13 21 trackers.use_udp.set = yes 14 22