aboutsummaryrefslogtreecommitdiff
path: root/nixos/serverModules/gonic.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixos/serverModules/gonic.nix')
-rw-r--r--nixos/serverModules/gonic.nix88
1 files changed, 88 insertions, 0 deletions
diff --git a/nixos/serverModules/gonic.nix b/nixos/serverModules/gonic.nix
new file mode 100644
index 0000000..526d79e
--- /dev/null
+++ b/nixos/serverModules/gonic.nix
@@ -0,0 +1,88 @@
+{ config, lib, ... }:
+with lib;
+let
+ cfg = config.gonic;
+in
+{
+ options = {
+ gonic = {
+ enable = mkEnableOption "enable gonic configuration";
+
+ listenAddr = mkOption {
+ type = types.str;
+ default = "127.0.0.1:4747";
+ description = ''
+ Address that gonic will listen on.
+ '';
+ };
+
+ extraGroups = mkOption {
+ type = types.listOf (types.str);
+ default = [];
+ description = ''
+ Additional groups for gonic.
+ '';
+ };
+
+ musicPaths = mkOption {
+ type = types.listOf (types.str);
+ description = ''
+ Directories with music in it.
+ '';
+ };
+
+ podcastsPath = mkOption {
+ type = types.str;
+ default = "${cfg.stateDir}/podcasts";
+ description = ''
+ Directory for podcasts.
+ '';
+ };
+
+ playlistsPath = mkOption {
+ type = types.str;
+ default = "${cfg.stateDir}/playlists";
+ description = ''
+ Directory for playlists.
+ '';
+ };
+
+ stateDir = mkOption {
+ type = types.str;
+ default = "/var/lib/gonic";
+ description = ''
+ A directory where gonic will keep their files.
+ '';
+ };
+ };
+ };
+
+ config = mkIf cfg.enable {
+ nixpkgs.overlays = [
+ (final: prev: {
+ ffmpeg = prev.ffmpeg-headless;
+ })
+ ];
+
+ systemd.services.gonic.serviceConfig = {
+ SupplementaryGroups = cfg.extraGroups;
+ };
+
+ systemd.tmpfiles.rules = [
+ "d ${cfg.stateDir} 0755 nobody nogroup"
+ "d ${cfg.podcastsPath} 0755 nobody nogroup"
+ "d ${cfg.playlistsPath} 0755 nobody nogroup"
+ ];
+
+ services.gonic = {
+ enable = true;
+ settings = {
+ listen-addr = cfg.listenAddr;
+ music-path = cfg.musicPaths;
+ playlists-path = [cfg.podcastsPath];
+ podcast-path = [cfg.playlistsPath];
+ db-path = ["${cfg.stateDir}/gonic.db"];
+ };
+ };
+ };
+}