Personal-use NixOS configuration
1{
2 hosts ? [ ],
3}:
4
5{
6 config,
7 flakeLib,
8 pkgs-flake,
9 lib,
10 ...
11}:
12
13let
14 socket = "/run/navidrome/navidrome.sock";
15in
16{
17 services.navidrome = {
18 enable = true;
19
20 settings = {
21 Address = "unix:${socket}";
22
23 DefaultTheme = "Spotify-ish";
24 DefaultUIVolume = 25;
25
26 EnableCoverAnimation = false;
27 EnableGravatar = false;
28 EnableStarRating = false;
29 MaxSidebarPlaylists = 15;
30
31 EnableSharing = true;
32 EnableDownloads = true;
33 DefaultShareExpiration = "72h";
34
35 Deezer.Enabled = false;
36 #LastFM.Enabled = false;
37 ListenBrainz.Enabled = false; # TODO: Self-host Maloja
38 AlbumPlayCountMode = "normalized";
39
40 EnableInsightsCollector = false;
41
42 Tags.genre.Split = [
43 "; "
44 ", "
45 " / "
46 "/"
47 "\\"
48 ];
49
50 Scanner.ArtistJoiner = ", ";
51 Scanner.WatcherWait = "1m";
52 Scanner.ScanOnStartup = false;
53
54 LyricsPriority = ".lrc, embedded";
55 ArtistArtPriority = "artist.*";
56 CoverArtPriority = "cover.*, embedded";
57 EnableMediaFileCoverArt = true;
58 CoverJpegQuality = 100;
59
60 AutoImportPlaylists = false;
61
62 Subsonic.ArtistParticipations = true;
63
64 ImageCacheSize = "2GB";
65 TranscodingCacheSize = "8GB";
66 };
67 };
68
69 # Caddy reverse proxy configuration
70 users.users.caddy.extraGroups = [ config.users.users.navidrome.group ];
71
72 services.caddy.virtualHosts = flakeLib.mkProxies hosts ''
73 reverse_proxy unix/${socket}
74 '';
75}