diff --git a/configuration.nix b/configuration.nix index 5142a0b..adf1b2b 100644 --- a/configuration.nix +++ b/configuration.nix @@ -9,6 +9,9 @@ imports = [ ./hardware-configuration.nix ./packages.nix + ./modules/nfs.nix + ./modules/navidrome.nix + ./modules/slskd.nix ]; nix.settings.experimental-features = [ @@ -59,10 +62,9 @@ swapDevices = [ ]; networking.hostId = "6054e036"; - networking.hostName = "nixos-music"; - networking.networkmanager.enable = true; + networking.firewall.enable = false; time.timeZone = "Europe/Berlin"; @@ -88,6 +90,8 @@ services.rsync.enable = true; programs.nh.enable = true; programs.neovim.enable = true; + programs.tmux.enable = true; + programs.bat.enable = true; programs.git = { enable = true; config = { diff --git a/flake.lock b/flake.lock index a2e2cc5..3e0a6fd 100644 --- a/flake.lock +++ b/flake.lock @@ -22,16 +22,16 @@ }, "nixpkgs": { "locked": { - "lastModified": 1784497964, - "narHash": "sha256-vlHUuqAcbcH2RKmHbPiuQzbv1pnzzavXnI62RD0bqCU=", - "owner": "nixos", + "lastModified": 1784667253, + "narHash": "sha256-35bjWl+VasRT9qKxLhZsoKBxjkyUtiwfxYOuvsZbCX0=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "241313f4e8e508cb9b13278c2b0fa25b9ca27163", + "rev": "3247a2b07cc6751f9aaa1012fea55be69e6f1fe0", "type": "github" }, "original": { - "owner": "nixos", - "ref": "nixos-unstable", + "owner": "NixOS", + "ref": "pull/544340/head", "repo": "nixpkgs", "type": "github" } diff --git a/flake.nix b/flake.nix index 3423101..cb810fe 100644 --- a/flake.nix +++ b/flake.nix @@ -1,6 +1,6 @@ { inputs = { - nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; + nixpkgs.url = "github:NixOS/nixpkgs?ref=pull/544340/head"; home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; diff --git a/modules/navidrome.nix b/modules/navidrome.nix new file mode 100644 index 0000000..4285341 --- /dev/null +++ b/modules/navidrome.nix @@ -0,0 +1,13 @@ +{ + services.navidrome = { + enable = true; + settings = { + MusicFolder = "/media/music"; + PlaylistsPath = "Playlists"; + Address = "0.0.0.0"; + ScanSchedule = "@every 24h"; + EnableInsightsCollector = false; + Scanner.PurgeMissing = "always"; + }; + }; +} diff --git a/modules/nfs.nix b/modules/nfs.nix new file mode 100644 index 0000000..ab9712c --- /dev/null +++ b/modules/nfs.nix @@ -0,0 +1,15 @@ +{ + services.nfs.server = { + enable = true; + exports = { + "/media/music" = { + "192.168.132.0/24" = [ + "rw" + "async" + "no_subtree_check" + "fsid=1" + ]; + }; + }; + }; +} diff --git a/modules/slskd.nix b/modules/slskd.nix new file mode 100644 index 0000000..b13605d --- /dev/null +++ b/modules/slskd.nix @@ -0,0 +1,110 @@ +{config, pkgs, ...}: + +{ + services.slskd = { + enable = true; + environmentFile = /home/user/slskd_secrets; + user = "user"; + settings = { + remote_configuration = true; + remote_file_management = true; + directories = { + downloads = "/media/music/Soulseek"; + }; + shares = { + directories = [ + "/media/music/Tracks" + "/media/music/Tracks2" + "/media/music/samples" + ]; + }; + rooms = [ + "Rare Music" + "nicotine" + "! ! LGBTQ+ ! !" + "lossless" + "Linux" + "Breakcore" + "Jungle" + ]; + transfers = { + upload = { + speed_limit = 3700; + }; + groups = { + blacklisted = { + members = [ + "relay" + "smbd" + ]; + }; + user_defined = { + my_buddies = { + upload = { + priority = 1; + strategy = "firstinfirstout"; + slots = 1000; + }; + members = [ + "noamifur" + "mesityl" + "diphenhydramine" + "monfi" + ]; + }; + }; + }; + }; + soulseek = { + description = '' + Fuck DRM. Fuck Spotify + Discord: keksnino + https://www.last.fm/user/KeksNino + ''; + listen_port = 32895; + }; + integrations = { + webhooks = { + discord_relay = { + call = { + url = "http://127.0.0.1:5001/slskd_webhook"; + }; + on = [ "UploadFileComplete" ]; + timeout = 5000; + retry = { + attempts = 3; + }; + }; + }; + }; + }; + }; + + systemd.user.services.slskd-speed = { + enable = true; + description = "Soulseek True Speed Shower"; + after = [ "network-online.target" ]; + wants = [ "network-online.target" ]; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + Type = "simple"; + Environment = "PYTHONUNBUFFERED=1"; + Restart = "on-failure"; + RestartSec = 30; + StandardOutput = "journal"; + StandardError = "journal"; + EnvironmentFile = "/home/user/slskd_secrets"; + ExecStart = '' + ${pkgs.python3}/bin/python3 /home/user/slskd-speed.py \ + -u "$SLSKD_SLSK_USERNAME" \ + -p "$SLSKD_SLSK_PASSWORD" \ + -s 30mbit/s \ + --slskd-url http://localhost:5030 \ + --slskd-key "$SLSKD_API_KEY" \ + --loop \ + --poll-interval 30 \ + --interval 900 + ''; + }; + }; +} diff --git a/packages.nix b/packages.nix index da3e934..9a38429 100644 --- a/packages.nix +++ b/packages.nix @@ -1,6 +1,6 @@ { pkgs, ... }: { - environment.systemPackages = with pkgs; [ + environment.systemPackages = (with pkgs; [ wget nixfmt tree-sitter @@ -11,8 +11,10 @@ unzip scdl aria2 - python3 nodejs gomi - ]; + slskd + sops + (python314.withPackages(ps: with ps; [ requests python-dotenv ])) + ]); }