feat(discord): jellyfin-rpc
This commit is contained in:
@@ -13,51 +13,36 @@ in {
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable
|
||||
(let
|
||||
# Fixes flickering and platform detection on Wayland.
|
||||
vesktop-wayland-wrapper =
|
||||
pkgs.symlinkJoin {
|
||||
name = "vesktop-wayland-wrapper";
|
||||
paths = [ pkgs.callPackage pkgs.vesktop ];
|
||||
buildInputs = [ pkgs.makeWrapper ];
|
||||
postBuild = ''
|
||||
wrapProgram $out/bin/vesktop \
|
||||
--add-flags "--disable-gpu-compositing"
|
||||
# --add-flags "--disable-gpu-compositing --ozone-platform-hint=auto"
|
||||
'';
|
||||
};
|
||||
in {
|
||||
sydnix.impermanence.directories =
|
||||
let xdg-config-home =
|
||||
config.home.confighome
|
||||
or "${config.home.homeDirectory}/.config";
|
||||
in [
|
||||
# This directory should really be written in terms of
|
||||
# `config.programs.nixcord.vesktopConfigDir`, but it defaults to null
|
||||
# for unknown reasons. This is in conflict with the docs, which claim
|
||||
# it should be the path used here.
|
||||
(lib.removePrefix
|
||||
config.home.homeDirectory
|
||||
"${xdg-config-home}/vesktop")
|
||||
];
|
||||
imports = [
|
||||
./discord/jellyfin-rpc.nix
|
||||
];
|
||||
|
||||
programs.nixcord = {
|
||||
enable = true;
|
||||
discord = {
|
||||
# Install Vesktop without Discord.
|
||||
enable = false;
|
||||
# openASAR.enable = true;
|
||||
vencord.enable = false;
|
||||
vencord.package = pkgs.vencord;
|
||||
};
|
||||
vesktop = {
|
||||
enable = true;
|
||||
# package =
|
||||
# if cfg.fixWayland
|
||||
# then vesktop-wayland-wrapper
|
||||
# else pkgs.vesktop;
|
||||
};
|
||||
config = lib.mkIf cfg.enable {
|
||||
sydnix.impermanence.directories =
|
||||
let xdg-config-home =
|
||||
config.home.confighome
|
||||
or "${config.home.homeDirectory}/.config";
|
||||
in [
|
||||
# This directory should really be written in terms of
|
||||
# `config.programs.nixcord.vesktopConfigDir`, but it
|
||||
# defaults to null for unknown reasons. This is in conflict
|
||||
# with the docs, which claim it should be the path used
|
||||
# here.
|
||||
(lib.removePrefix
|
||||
config.home.homeDirectory
|
||||
"${xdg-config-home}/vesktop")
|
||||
];
|
||||
|
||||
programs.nixcord = {
|
||||
enable = true;
|
||||
discord = {
|
||||
enable = false;
|
||||
vencord.enable = false;
|
||||
vencord.package = pkgs.vencord;
|
||||
};
|
||||
});
|
||||
vesktop = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
82
modules/home/discord/jellyfin-rpc.nix
Normal file
82
modules/home/discord/jellyfin-rpc.nix
Normal file
@@ -0,0 +1,82 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
cfg = config.sydnix.discord.jellyfin-rpc;
|
||||
vesktop-wrapper =
|
||||
pkgs.vesktop.overrideAttrs (finalAttrs: prevAttrs: {
|
||||
postFixup = ''
|
||||
${prevAttrs.postFixup or ""}
|
||||
if [[ -e $out/bin/.vesktop-wrapped ]]; then
|
||||
echo ".vesktop-wrapped already exists..."
|
||||
exit 1
|
||||
fi
|
||||
mv $out/bin/vesktop $out/bin/.vesktop-wrapped
|
||||
tee $out/bin/vesktop <<EOF
|
||||
#!/usr/bin/env bash
|
||||
systemctl start --user jellyfin-rpc
|
||||
$out/bin/.vesktop-wrapped "\$@"
|
||||
systemctl stop --user jellyfin-rpc
|
||||
EOF
|
||||
chmod +x $out/bin/vesktop
|
||||
'';
|
||||
});
|
||||
|
||||
jellyfin-rpc-config-template =
|
||||
pkgs.writeText "jellyfin-rpc-config-template"
|
||||
(lib.toJSON {
|
||||
jellyfin = {
|
||||
url = "https://watch.deertopia.net";
|
||||
username = ["lain" "msyds"];
|
||||
music = {
|
||||
display = ["year" "album" "genres"];
|
||||
separator = "-";
|
||||
};
|
||||
};
|
||||
images = {
|
||||
enable_images = true;
|
||||
imgur_images = false;
|
||||
};
|
||||
});
|
||||
in {
|
||||
options.sydnix.discord.jellyfin-rpc = {
|
||||
enable = lib.mkEnableOption "Jellyfin rich presence";
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
systemd.user.services.jellyfin-rpc-configure = {
|
||||
Service = {
|
||||
Type = "oneshot";
|
||||
ExecStart =
|
||||
let
|
||||
jq = lib.getExe pkgs.jq;
|
||||
api-key-file = config.sops.secrets.jellyfin-rpc-api-key.path;
|
||||
in pkgs.writeShellScript "jellyfin-rpc-configure" ''
|
||||
dest=''${XDG_CONFIG_HOME:-$HOME/.config}/jellyfin-rpc/main.json
|
||||
umask 177
|
||||
[[ -f "$dest" ]] && chmod 600 "$dest"
|
||||
jq < ${jellyfin-rpc-config-template} > "$dest" \
|
||||
--rawfile api_key ${api-key-file} \
|
||||
'.jellyfin.api_key = $api_key'
|
||||
'';
|
||||
};
|
||||
};
|
||||
systemd.user.services.jellyfin-rpc = {
|
||||
Unit = {
|
||||
After = ["jellyfin-rpc-configure"];
|
||||
Wants = ["jellyfin-rpc-configure"];
|
||||
};
|
||||
Service = {
|
||||
ExecStart = lib.getExe pkgs.jellyfin-rpc;
|
||||
};
|
||||
};
|
||||
|
||||
sydnix.sops.secrets.jellyfin-rpc-api-key = {};
|
||||
|
||||
programs.nixcord.vesktop.package = vesktop-wrapper;
|
||||
|
||||
assertions = [{
|
||||
assertion = config.programs.nixcord.vesktop.enable;
|
||||
message = "Jellyfin RPC requires Vesktop.";
|
||||
}];
|
||||
};
|
||||
}
|
||||
@@ -8,6 +8,7 @@ in {
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
sydnix.discord.enable = true;
|
||||
sydnix.discord.jellyfin-rpc.enable = true;
|
||||
|
||||
stylix.targets.nixcord.enable = false;
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ sops:
|
||||
TXFLY2l0UHJ3Z0NGZjVpbTQ2UC8yaTQKA7wTmW9Ha6T2KmCr/nkXdizgv8+V6SAp
|
||||
ZhDO+uDQ1evIh2wLWMOXNJ3d/zplLCOTzR2xkqBIUp5V7MXj45RUIA==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
lastmodified: "2026-03-01T08:57:03Z"
|
||||
mac: ENC[AES256_GCM,data:uNqk+x+nLgDUdHI5flUuXF/vGnkMpUUhdFfkOULm+bebkPL6PI5kJHV78GPs+aA9BPCmTvomgGe51zvyJFRcH3gBJ2bF5YfdC0ROrRbZS4KYIuZwrELf77zq73MbIFt//BTpDYK4cUC8CPRoAEwtoTG6lyHbxcAk4+B5w2NFfN8=,iv:rFaEaav1LHrhtKtiRfIqHTj5+cOBv3lC1UyqEvOoUsg=,tag:x/4n+rcQxd+neQGLcXa66g==,type:str]
|
||||
lastmodified: "2026-03-06T21:55:10Z"
|
||||
mac: ENC[AES256_GCM,data:Coff3pzqPxqe1g+2R7V0AN/ZSLog6sKHIBSoWOflYH8tKbIqwvQFRVvEQN6D1o6ZhD2wu8NyTVrKY7FYn4nG9DsEQq8vknq51r1Z9meLSP114N37oX5qjp60ns9kEm3kbf41DTObXETs+jzcA4Rcl2m9Z5I/feKEm7oFp6PvzEg=,iv:Bywv84FGB6IO7M9KFoxx3cVXFElX7QNWossWszMJui8=,tag:D07pceBF1i1vUMZ7nFuslA==,type:str]
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.11.0
|
||||
version: 3.12.1
|
||||
|
||||
@@ -17,6 +17,7 @@ gitlab-oauth: ENC[AES256_GCM,data:1THznoGRZmq7BkisZoGa0ZiPG7aSmkV06SY=,iv:Gq6UPH
|
||||
anki-username: ENC[AES256_GCM,data:cUWaxIc=,iv:I2wy54406Xe4tVHIhIFZqbezepc2wtp2M15T7ES9zGQ=,tag:FiU2CscHDcNv+6S5pODG7w==,type:str]
|
||||
anki-password: ENC[AES256_GCM,data:kXQq1JPjTRpQ4f6/BOFj/gBhUA==,iv:P8MVsmCfyOoEJmyAjBfMSRT6mpkwDUBIzr2UjZmjHOA=,tag:D7KWEpldP/H6CUH7y+5/7Q==,type:str]
|
||||
anki-sync-key: ENC[AES256_GCM,data:wvAo92t6oR8PxE5EId/OC+J4GKs/Rp21PSp+uDt72JWFzeWHO6a1KA==,iv:2yU4skxlDuH6smSr5PnPe8ZkWf4gdxKBXQfzPFiZXoA=,tag:7KXl5A4vzRdkWO++LbMb9A==,type:str]
|
||||
jellyfin-rpc-api-key: ENC[AES256_GCM,data:srElaGG1JVWwDb+xA4iG9ew6oFUEHSd6AlLUXN8iA3c=,iv:z1UQshfWW6Q7GK8Ff8GK3OD7z0Aa5kePVRPLlUsDmF0=,tag:+csa3asD+0qthO05uZqK0A==,type:str]
|
||||
sops:
|
||||
age:
|
||||
- recipient: age1qayk0d0f765v57pedm7mtau6qkmv8rh6jtaqm40g5g9armaty4jqc0v0y2
|
||||
@@ -28,7 +29,7 @@ sops:
|
||||
VVBqSEM2bVFBU0M5YzZBQWIwUmVXUXMKvWb57Rc+rO5M8Pf7lvbSjuZB4FrHgT3A
|
||||
uBQHH3wpv0BVVzL8tucPnwNxDnwpWvFxxwNVy/rtfs6y6HPu6fuOsA==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
lastmodified: "2025-11-30T00:32:08Z"
|
||||
mac: ENC[AES256_GCM,data:9c3xcwnGSoi/IpDHBJ922kd9Xh4EodOL/1B1epdCIB/N3Pu07wVMGSGm97e2uqczbFgebXc/Oz1Gpr9hdxNpvxlldXQgqPhZIlk6Pfelf6E0WcC5+QOE1ZQ6MTsgAE5RjFy2fctphXJi/Z9VuTcSgakSYuy+0QbPCfuwL5CaTVk=,iv:8qwCqjVALlaxJCAfZURpt7c6/3b9KKar7mtsYb3/rlw=,tag:utHZLe3FojSmyvBBIzfY2A==,type:str]
|
||||
lastmodified: "2026-03-06T21:55:34Z"
|
||||
mac: ENC[AES256_GCM,data:kkEZI0Of8KUpGJRoGAD3gXCtNz44Sucki4Fk2lQ55o+IcBYtxJwwpoQH3usihSigaPquee4XAxhdlWyHt7S46Q9dTFXjT9IUpnxrlG0ZQOnTRbdRlT2qcxLSlghdDWRuezhjT5KWFqlq4Av85KmL7kiB7LAkPVk6EERHJuFsWR8=,iv:Y3wd4hP1ui3rtXe++3j1oAKYbd8V4cc0SBLOlcyl5Zc=,tag:/FK8R28WAWDhWImMnm6wQg==,type:str]
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.11.0
|
||||
version: 3.12.1
|
||||
|
||||
Reference in New Issue
Block a user