mirror of
https://github.com/Gerg-L/nixos.git
synced 2025-12-09 16:33:57 -05:00
vocard: use nix for configuration
This commit is contained in:
parent
bf8e99ce0e
commit
4f0a7c169c
5 changed files with 273 additions and 287 deletions
|
|
@ -0,0 +1,94 @@
|
|||
{ link, lavalinkPlugins }:
|
||||
{
|
||||
|
||||
server = {
|
||||
http2.enabled = false;
|
||||
port = link.portStr;
|
||||
address = link.ipv4;
|
||||
};
|
||||
lavalink = {
|
||||
plugins = [
|
||||
{
|
||||
dependency = "dev.lavalink.youtube:youtube-plugin:1.11.5";
|
||||
enabled = true;
|
||||
snapshot = false;
|
||||
}
|
||||
];
|
||||
server = {
|
||||
#password = "";
|
||||
|
||||
bufferDurationMs = 400;
|
||||
filters = {
|
||||
channelMix = true;
|
||||
distortion = true;
|
||||
equalizer = true;
|
||||
karaoke = true;
|
||||
lowPass = true;
|
||||
rotation = true;
|
||||
timescale = true;
|
||||
tremolo = true;
|
||||
vibrato = true;
|
||||
volume = true;
|
||||
};
|
||||
frameBufferDurationMs = 5000;
|
||||
gc-warnings = true;
|
||||
nonAllocatingFrameBuffer = false;
|
||||
opusEncodingQuality = 10;
|
||||
playerUpdateInterval = 5;
|
||||
resamplingQuality = "LOW";
|
||||
soundcloudSearchEnabled = true;
|
||||
sources = {
|
||||
bandcamp = true;
|
||||
http = true;
|
||||
local = false;
|
||||
nico = true;
|
||||
soundcloud = true;
|
||||
twitch = true;
|
||||
vimeo = true;
|
||||
youtube = false;
|
||||
};
|
||||
trackStuckThresholdMs = 10000;
|
||||
useSeekGhosting = true;
|
||||
youtubePlaylistLoadLimit = 6;
|
||||
youtubeSearchEnabled = true;
|
||||
};
|
||||
};
|
||||
logging = {
|
||||
file.path = null;
|
||||
|
||||
level = {
|
||||
"dev.lavalink.youtube.http.YoutubeOauth2Handler" = "INFO";
|
||||
lavalink = "INFO";
|
||||
root = "INFO";
|
||||
};
|
||||
request = {
|
||||
enabled = true;
|
||||
includeClientInfo = true;
|
||||
includeHeaders = false;
|
||||
includePayload = true;
|
||||
includeQueryString = true;
|
||||
maxPayloadLength = 10000;
|
||||
};
|
||||
};
|
||||
|
||||
metrics.prometheus.enabled = false;
|
||||
|
||||
plugins = {
|
||||
pluginsDir = lavalinkPlugins;
|
||||
youtube = {
|
||||
allowDirectPlaylistIds = true;
|
||||
allowDirectVideoIds = true;
|
||||
allowSearch = true;
|
||||
clients = [ "TVHTML5EMBEDDED" ];
|
||||
enabled = true;
|
||||
oauth = {
|
||||
enabled = true;
|
||||
#refreshToken = "";
|
||||
};
|
||||
};
|
||||
};
|
||||
sentry = {
|
||||
dsn = "";
|
||||
environment = "";
|
||||
};
|
||||
}
|
||||
146
nixosConfigurations/gerg-desktop/services/vocard/_settings.nix
Normal file
146
nixosConfigurations/gerg-desktop/services/vocard/_settings.nix
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
{
|
||||
link,
|
||||
ferretLink,
|
||||
p,
|
||||
}:
|
||||
{
|
||||
activity = [
|
||||
{
|
||||
name = "/help";
|
||||
status = "online";
|
||||
type = "listening";
|
||||
}
|
||||
];
|
||||
aliases = {
|
||||
connect = [ "join" ];
|
||||
leave = [
|
||||
"stop"
|
||||
"bye"
|
||||
];
|
||||
play = [ "p" ];
|
||||
view = [ "v" ];
|
||||
};
|
||||
bot_access_user = [ ];
|
||||
client_id = p."vocard/client_id";
|
||||
cooldowns = {
|
||||
connect = [
|
||||
2
|
||||
30
|
||||
];
|
||||
"playlist view" = [
|
||||
1
|
||||
30
|
||||
];
|
||||
};
|
||||
default_controller = {
|
||||
default_buttons = [
|
||||
[
|
||||
"back"
|
||||
"resume"
|
||||
"skip"
|
||||
{ stop = "red"; }
|
||||
"add"
|
||||
]
|
||||
[ "tracks" ]
|
||||
];
|
||||
disableButtonText = false;
|
||||
embeds = {
|
||||
active = {
|
||||
author = {
|
||||
icon_url = "@@bot_icon@@";
|
||||
name = "Music Controller | @@channel_name@@";
|
||||
};
|
||||
color = "@@track_color@@";
|
||||
description = "**Now Playing: ```[@@track_name@@]```\nLink: [Click Me](@@track_url@@) | Requester: @@requester@@ | DJ: @@dj@@**";
|
||||
footer.text = "Queue Length: @@queue_length@@ | Duration: @@track_duration@@ | Volume: @@volume@@% {{loop_mode != 'Off' ?? | Repeat: @@loop_mode@@}}";
|
||||
image = "@@track_thumbnail@@";
|
||||
};
|
||||
inactive = {
|
||||
color = "@@default_embed_color@@";
|
||||
description = "[Support](@@server_invite_link@@) | [Invite](@@invite_link@@) | [Questionnaire](https://forms.gle/Qm8vjBfg2kp13YGD7)";
|
||||
image = "https://i.imgur.com/dIFBwU7.png";
|
||||
title.name = "There are no songs playing right now";
|
||||
};
|
||||
};
|
||||
};
|
||||
default_max_queue = 1000;
|
||||
default_voice_status_template = "{{@@track_name@@ != 'None' ?? @@track_source_emoji@@ Now Playing: @@track_name@@ // Waiting for song requests}}";
|
||||
embed_color = "0xb3b3b3";
|
||||
genius_token = "YOUR_GENIUS_TOKEN";
|
||||
ipc_client = {
|
||||
enable = false;
|
||||
host = "127.0.0.1";
|
||||
password = "YOUR_PASSWORD";
|
||||
port = 8000;
|
||||
secure = false;
|
||||
};
|
||||
logging = {
|
||||
file = {
|
||||
enable = false;
|
||||
path = "./logs";
|
||||
};
|
||||
level = {
|
||||
discord = "INFO";
|
||||
ipc_client = "INFO";
|
||||
vocard = "INFO";
|
||||
};
|
||||
max-history = 30;
|
||||
};
|
||||
lyrics_platform = "lyrist";
|
||||
mongodb_name = "vocard";
|
||||
mongodb_url = ferretLink.url;
|
||||
nodes.DEFAULT = {
|
||||
host = link.ipv4;
|
||||
identifier = "DEFAULT";
|
||||
password = p."vocard/password";
|
||||
inherit (link) port;
|
||||
secure = false;
|
||||
};
|
||||
prefix = "?";
|
||||
sources_settings = {
|
||||
apple = {
|
||||
color = "0xE298C4";
|
||||
emoji = "<:applemusic:994844332374884413>";
|
||||
};
|
||||
bandcamp = {
|
||||
color = "0x6F98A7";
|
||||
emoji = "<:bandcamp:864694003811221526>";
|
||||
};
|
||||
reddit = {
|
||||
color = "0xFF5700";
|
||||
emoji = "<:reddit:996007566863773717>";
|
||||
};
|
||||
soundcloud = {
|
||||
color = "0xFF7700";
|
||||
emoji = "<:soundcloud:852729280027033632>";
|
||||
};
|
||||
spotify = {
|
||||
color = "0x1DB954";
|
||||
emoji = "<:spotify:826661996615172146>";
|
||||
};
|
||||
tiktok = {
|
||||
color = "0x74ECE9";
|
||||
emoji = "<:tiktok:996007689798811698>";
|
||||
};
|
||||
twitch = {
|
||||
color = "0x9B4AFF";
|
||||
emoji = "<:twitch:852729278285086741>";
|
||||
};
|
||||
vimeo = {
|
||||
color = "0x1ABCEA";
|
||||
emoji = "<:vimeo:864694001919721473>";
|
||||
};
|
||||
youtube = {
|
||||
color = "0xFF0000";
|
||||
emoji = "<:youtube:826661982760992778>";
|
||||
};
|
||||
"youtube music" = {
|
||||
color = "0xFF0000";
|
||||
emoji = "<:youtube:826661982760992778>";
|
||||
};
|
||||
};
|
||||
spotify_client_id = p."vocard/spotify_client_id";
|
||||
spotify_client_secret = p."vocard/spotify_client_secret";
|
||||
token = p."vocard/token";
|
||||
version = "v2.6.9";
|
||||
}
|
||||
|
|
@ -1,109 +0,0 @@
|
|||
server: # REST and WS server
|
||||
port: 2333
|
||||
address: 0.0.0.0
|
||||
http2:
|
||||
enabled: false # Whether to enable HTTP/2 support
|
||||
plugins:
|
||||
youtube:
|
||||
enabled: true
|
||||
allowSearch: true # Whether "ytsearch:" and "ytmsearch:" can be used.
|
||||
allowDirectVideoIds: true # Whether just video IDs can match. If false, only complete URLs will be loaded.
|
||||
allowDirectPlaylistIds: true # Whether just playlist IDs can match. If false, only complete URLs will be loaded.
|
||||
# The clients to use for track loading. See below for a list of valid clients.
|
||||
# Clients are queried in the order they are given (so the first client is queried first and so on...)
|
||||
clients:
|
||||
- TVHTML5EMBEDDED
|
||||
oauth:
|
||||
enabled: true
|
||||
# Set with env vars
|
||||
#refreshToken: ""
|
||||
lavalink:
|
||||
plugins:
|
||||
- dependency: "dev.lavalink.youtube:youtube-plugin:1.11.5"
|
||||
snapshot: false
|
||||
# setting "enabled: true" is the bare minimum to get OAuth working.
|
||||
enabled: true
|
||||
|
||||
# Set with env vars
|
||||
#pluginsDir: ""
|
||||
server:
|
||||
|
||||
# Set with env vars
|
||||
#password: ""
|
||||
sources:
|
||||
youtube: false
|
||||
bandcamp: true
|
||||
soundcloud: true
|
||||
twitch: true
|
||||
vimeo: true
|
||||
nico: true
|
||||
http: true
|
||||
local: false
|
||||
filters: # All filters are enabled by default
|
||||
volume: true
|
||||
equalizer: true
|
||||
karaoke: true
|
||||
timescale: true
|
||||
tremolo: true
|
||||
vibrato: true
|
||||
distortion: true
|
||||
rotation: true
|
||||
channelMix: true
|
||||
lowPass: true
|
||||
nonAllocatingFrameBuffer: false # Setting to true reduces the number of allocations made by each player at the expense of frame rebuilding (e.g. non-instantaneous volume changes)
|
||||
bufferDurationMs: 400 # The duration of the NAS buffer. Higher values fare better against longer GC pauses. Duration <= 0 to disable JDA-NAS. Minimum of 40ms, lower values may introduce pauses.
|
||||
frameBufferDurationMs: 5000 # How many milliseconds of audio to keep buffered
|
||||
opusEncodingQuality: 10 # Opus encoder quality. Valid values range from 0 to 10, where 10 is best quality but is the most expensive on the CPU.
|
||||
resamplingQuality: LOW # Quality of resampling operations. Valid values are LOW, MEDIUM and HIGH, where HIGH uses the most CPU.
|
||||
trackStuckThresholdMs: 10000 # The threshold for how long a track can be stuck. A track is stuck if does not return any audio data.
|
||||
useSeekGhosting: true # Seek ghosting is the effect where whilst a seek is in progress, the audio buffer is read from until empty, or until seek is ready.
|
||||
youtubePlaylistLoadLimit: 6 # Number of pages at 100 each
|
||||
playerUpdateInterval: 5 # How frequently to send player updates to clients, in seconds
|
||||
youtubeSearchEnabled: true
|
||||
soundcloudSearchEnabled: true
|
||||
gc-warnings: true
|
||||
#ratelimit:
|
||||
#ipBlocks: ["1.0.0.0/8", "..."] # list of ip blocks
|
||||
#excludedIps: ["...", "..."] # ips which should be explicit excluded from usage by lavalink
|
||||
#strategy: "RotateOnBan" # RotateOnBan | LoadBalance | NanoSwitch | RotatingNanoSwitch
|
||||
#searchTriggersFail: true # Whether a search 429 should trigger marking the ip as failing
|
||||
#retryLimit: -1 # -1 = use default lavaplayer value | 0 = infinity | >0 = retry will happen this numbers times
|
||||
#youtubeConfig: # Required for avoiding all age restrictions by YouTube, some restricted videos still can be played without.
|
||||
#email: "" # Email of Google account
|
||||
#password: "" # Password of Google account
|
||||
#httpConfig: # Useful for blocking bad-actors from ip-grabbing your music node and attacking it, this way only the http proxy will be attacked
|
||||
#proxyHost: "localhost" # Hostname of the proxy, (ip or domain)
|
||||
#proxyPort: 3128 # Proxy port, 3128 is the default for squidProxy
|
||||
#proxyUser: "" # Optional user for basic authentication fields, leave blank if you don't use basic auth
|
||||
#proxyPassword: "" # Password for basic authentication
|
||||
|
||||
metrics:
|
||||
prometheus:
|
||||
enabled: false
|
||||
endpoint: /metrics
|
||||
|
||||
|
||||
sentry:
|
||||
dsn: ""
|
||||
environment: ""
|
||||
|
||||
logging:
|
||||
file:
|
||||
path: null
|
||||
level:
|
||||
root: INFO
|
||||
lavalink: INFO
|
||||
dev.lavalink.youtube.http.YoutubeOauth2Handler: INFO
|
||||
|
||||
request:
|
||||
enabled: true
|
||||
includeClientInfo: true
|
||||
includeHeaders: false
|
||||
includeQueryString: true
|
||||
includePayload: true
|
||||
maxPayloadLength: 10000
|
||||
|
||||
logback:
|
||||
rollingpolicy:
|
||||
max-file-size: 1GB
|
||||
max-history: 30
|
||||
|
|
@ -1,157 +0,0 @@
|
|||
{
|
||||
"token": "@token@",
|
||||
"client_id": "@client_id@",
|
||||
"spotify_client_id": "@spotify_client_id@",
|
||||
"spotify_client_secret": "@spotify_client_secret@",
|
||||
"genius_token": "YOUR_GENIUS_TOKEN",
|
||||
"mongodb_url": "0.0.0.0",
|
||||
"mongodb_name": "vocard",
|
||||
"nodes": {
|
||||
"DEFAULT": {
|
||||
"host": "0.0.0.0",
|
||||
"port": 2333,
|
||||
"password": "@password@",
|
||||
"secure": false,
|
||||
"identifier": "DEFAULT"
|
||||
}
|
||||
},
|
||||
"prefix": "?",
|
||||
"activity": [
|
||||
{
|
||||
"type": "listening",
|
||||
"name": "/help",
|
||||
"status": "online"
|
||||
}
|
||||
],
|
||||
"logging": {
|
||||
"file": {
|
||||
"path": "./logs",
|
||||
"enable": false
|
||||
},
|
||||
"level": {
|
||||
"discord": "INFO",
|
||||
"vocard": "INFO",
|
||||
"ipc_client": "INFO"
|
||||
},
|
||||
"max-history": 30
|
||||
},
|
||||
"bot_access_user": [],
|
||||
"embed_color": "0xb3b3b3",
|
||||
"default_max_queue": 1000,
|
||||
"lyrics_platform": "lyrist",
|
||||
"ipc_client": {
|
||||
"host": "127.0.0.1",
|
||||
"port": 8000,
|
||||
"password": "YOUR_PASSWORD",
|
||||
"secure": false,
|
||||
"enable": false
|
||||
},
|
||||
"sources_settings": {
|
||||
"youtube": {
|
||||
"emoji": "<:youtube:826661982760992778>",
|
||||
"color": "0xFF0000"
|
||||
},
|
||||
"youtube music": {
|
||||
"emoji": "<:youtube:826661982760992778>",
|
||||
"color": "0xFF0000"
|
||||
},
|
||||
"spotify": {
|
||||
"emoji": "<:spotify:826661996615172146>",
|
||||
"color": "0x1DB954"
|
||||
},
|
||||
"soundcloud": {
|
||||
"emoji": "<:soundcloud:852729280027033632>",
|
||||
"color": "0xFF7700"
|
||||
},
|
||||
"twitch": {
|
||||
"emoji": "<:twitch:852729278285086741>",
|
||||
"color": "0x9B4AFF"
|
||||
},
|
||||
"bandcamp": {
|
||||
"emoji": "<:bandcamp:864694003811221526>",
|
||||
"color": "0x6F98A7"
|
||||
},
|
||||
"vimeo": {
|
||||
"emoji": "<:vimeo:864694001919721473>",
|
||||
"color": "0x1ABCEA"
|
||||
},
|
||||
"apple": {
|
||||
"emoji": "<:applemusic:994844332374884413>",
|
||||
"color": "0xE298C4"
|
||||
},
|
||||
"reddit": {
|
||||
"emoji": "<:reddit:996007566863773717>",
|
||||
"color": "0xFF5700"
|
||||
},
|
||||
"tiktok": {
|
||||
"emoji": "<:tiktok:996007689798811698>",
|
||||
"color": "0x74ECE9"
|
||||
}
|
||||
},
|
||||
"default_controller": {
|
||||
"embeds": {
|
||||
"active": {
|
||||
"description": "**Now Playing: ```[@@track_name@@]```\nLink: [Click Me](@@track_url@@) | Requester: @@requester@@ | DJ: @@dj@@**",
|
||||
"footer": {
|
||||
"text": "Queue Length: @@queue_length@@ | Duration: @@track_duration@@ | Volume: @@volume@@% {{loop_mode != 'Off' ?? | Repeat: @@loop_mode@@}}"
|
||||
},
|
||||
"image": "@@track_thumbnail@@",
|
||||
"author": {
|
||||
"name": "Music Controller | @@channel_name@@",
|
||||
"icon_url": "@@bot_icon@@"
|
||||
},
|
||||
"color": "@@track_color@@"
|
||||
},
|
||||
"inactive": {
|
||||
"title": {
|
||||
"name": "There are no songs playing right now"
|
||||
},
|
||||
"description": "[Support](@@server_invite_link@@) | [Invite](@@invite_link@@) | [Questionnaire](https://forms.gle/Qm8vjBfg2kp13YGD7)",
|
||||
"image": "https://i.imgur.com/dIFBwU7.png",
|
||||
"color": "@@default_embed_color@@"
|
||||
}
|
||||
},
|
||||
"default_buttons": [
|
||||
[
|
||||
"back",
|
||||
"resume",
|
||||
"skip",
|
||||
{
|
||||
"stop": "red"
|
||||
},
|
||||
"add"
|
||||
],
|
||||
[
|
||||
"tracks"
|
||||
]
|
||||
],
|
||||
"disableButtonText": false
|
||||
},
|
||||
"default_voice_status_template": "{{@@track_name@@ != 'None' ?? @@track_source_emoji@@ Now Playing: @@track_name@@ // Waiting for song requests}}",
|
||||
"cooldowns": {
|
||||
"connect": [
|
||||
2,
|
||||
30
|
||||
],
|
||||
"playlist view": [
|
||||
1,
|
||||
30
|
||||
]
|
||||
},
|
||||
"aliases": {
|
||||
"connect": [
|
||||
"join"
|
||||
],
|
||||
"leave": [
|
||||
"stop",
|
||||
"bye"
|
||||
],
|
||||
"play": [
|
||||
"p"
|
||||
],
|
||||
"view": [
|
||||
"v"
|
||||
]
|
||||
},
|
||||
"version": "v2.6.9"
|
||||
}
|
||||
|
|
@ -2,8 +2,18 @@
|
|||
self',
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
}:
|
||||
let
|
||||
link = config.local.links.lavalink;
|
||||
ferretLink = config.local.links.ferretdb;
|
||||
in
|
||||
{
|
||||
local.links = {
|
||||
lavalink = { };
|
||||
ferretdb.protocol = "mongodb";
|
||||
};
|
||||
|
||||
sops = {
|
||||
secrets =
|
||||
{
|
||||
|
|
@ -36,23 +46,12 @@
|
|||
"vocard.service"
|
||||
"lavalink.service"
|
||||
];
|
||||
content =
|
||||
builtins.replaceStrings
|
||||
[
|
||||
"@token@"
|
||||
"@client_id@"
|
||||
"@spotify_client_id@"
|
||||
"@spotify_client_secret@"
|
||||
"@password@"
|
||||
]
|
||||
(map (x: config.sops.placeholder.${x}) [
|
||||
"vocard/token"
|
||||
"vocard/client_id"
|
||||
"vocard/spotify_client_id"
|
||||
"vocard/spotify_client_secret"
|
||||
"vocard/password"
|
||||
])
|
||||
(builtins.readFile ./settings.json);
|
||||
content = builtins.toJSON (
|
||||
import ./_settings.nix {
|
||||
inherit link ferretLink;
|
||||
p = config.sops.placeholder;
|
||||
}
|
||||
);
|
||||
};
|
||||
};
|
||||
|
||||
|
|
@ -88,10 +87,20 @@
|
|||
"network-online.target"
|
||||
];
|
||||
|
||||
environment.LAVALINK_PLUGINS_DIR = self'.packages.lavalinkPlugins;
|
||||
|
||||
serviceConfig = {
|
||||
ExecStart = "${lib.getExe self'.packages.lavalink} --spring.config.location='file:${./application.yml}'";
|
||||
ExecStart =
|
||||
let
|
||||
configFile = pkgs.writeText "application.yml" (
|
||||
builtins.toJSON (
|
||||
import ./_application.nix {
|
||||
inherit link;
|
||||
inherit (self'.packages) lavalinkPlugins;
|
||||
}
|
||||
)
|
||||
);
|
||||
in
|
||||
|
||||
"${lib.getExe self'.packages.lavalink} --spring.config.location='file:${configFile}'";
|
||||
DynamicUser = true;
|
||||
EnvironmentFile = config.sops.secrets.lavalink.path;
|
||||
Restart = "on-failure";
|
||||
|
|
@ -100,7 +109,10 @@
|
|||
};
|
||||
};
|
||||
|
||||
services.ferretdb.enable = true;
|
||||
services.ferretdb = {
|
||||
enable = true;
|
||||
settings.FERRETDB_LISTEN_ADDR = ferretLink.tuple;
|
||||
};
|
||||
|
||||
systemd.mounts = [
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue