Merge pull request 'feat(discord): jellyfin-rpc' (#6) from jellyfin-rpc into main
Reviewed-on: #6
This commit was merged in pull request #6.
This commit is contained in:
@@ -13,51 +13,36 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable
|
imports = [
|
||||||
(let
|
./discord/jellyfin-rpc.nix
|
||||||
# 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")
|
|
||||||
];
|
|
||||||
|
|
||||||
programs.nixcord = {
|
config = lib.mkIf cfg.enable {
|
||||||
enable = true;
|
sydnix.impermanence.directories =
|
||||||
discord = {
|
let xdg-config-home =
|
||||||
# Install Vesktop without Discord.
|
config.home.confighome
|
||||||
enable = false;
|
or "${config.home.homeDirectory}/.config";
|
||||||
# openASAR.enable = true;
|
in [
|
||||||
vencord.enable = false;
|
# This directory should really be written in terms of
|
||||||
vencord.package = pkgs.vencord;
|
# `config.programs.nixcord.vesktopConfigDir`, but it
|
||||||
};
|
# defaults to null for unknown reasons. This is in conflict
|
||||||
vesktop = {
|
# with the docs, which claim it should be the path used
|
||||||
enable = true;
|
# here.
|
||||||
# package =
|
(lib.removePrefix
|
||||||
# if cfg.fixWayland
|
config.home.homeDirectory
|
||||||
# then vesktop-wayland-wrapper
|
"${xdg-config-home}/vesktop")
|
||||||
# else pkgs.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 {
|
config = lib.mkIf cfg.enable {
|
||||||
sydnix.discord.enable = true;
|
sydnix.discord.enable = true;
|
||||||
|
sydnix.discord.jellyfin-rpc.enable = true;
|
||||||
|
|
||||||
stylix.targets.nixcord.enable = false;
|
stylix.targets.nixcord.enable = false;
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ sops:
|
|||||||
TXFLY2l0UHJ3Z0NGZjVpbTQ2UC8yaTQKA7wTmW9Ha6T2KmCr/nkXdizgv8+V6SAp
|
TXFLY2l0UHJ3Z0NGZjVpbTQ2UC8yaTQKA7wTmW9Ha6T2KmCr/nkXdizgv8+V6SAp
|
||||||
ZhDO+uDQ1evIh2wLWMOXNJ3d/zplLCOTzR2xkqBIUp5V7MXj45RUIA==
|
ZhDO+uDQ1evIh2wLWMOXNJ3d/zplLCOTzR2xkqBIUp5V7MXj45RUIA==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
lastmodified: "2026-03-01T08:57:03Z"
|
lastmodified: "2026-03-06T21:55:10Z"
|
||||||
mac: ENC[AES256_GCM,data:uNqk+x+nLgDUdHI5flUuXF/vGnkMpUUhdFfkOULm+bebkPL6PI5kJHV78GPs+aA9BPCmTvomgGe51zvyJFRcH3gBJ2bF5YfdC0ROrRbZS4KYIuZwrELf77zq73MbIFt//BTpDYK4cUC8CPRoAEwtoTG6lyHbxcAk4+B5w2NFfN8=,iv:rFaEaav1LHrhtKtiRfIqHTj5+cOBv3lC1UyqEvOoUsg=,tag:x/4n+rcQxd+neQGLcXa66g==,type:str]
|
mac: ENC[AES256_GCM,data:Coff3pzqPxqe1g+2R7V0AN/ZSLog6sKHIBSoWOflYH8tKbIqwvQFRVvEQN6D1o6ZhD2wu8NyTVrKY7FYn4nG9DsEQq8vknq51r1Z9meLSP114N37oX5qjp60ns9kEm3kbf41DTObXETs+jzcA4Rcl2m9Z5I/feKEm7oFp6PvzEg=,iv:Bywv84FGB6IO7M9KFoxx3cVXFElX7QNWossWszMJui8=,tag:D07pceBF1i1vUMZ7nFuslA==,type:str]
|
||||||
unencrypted_suffix: _unencrypted
|
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-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-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]
|
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:
|
sops:
|
||||||
age:
|
age:
|
||||||
- recipient: age1qayk0d0f765v57pedm7mtau6qkmv8rh6jtaqm40g5g9armaty4jqc0v0y2
|
- recipient: age1qayk0d0f765v57pedm7mtau6qkmv8rh6jtaqm40g5g9armaty4jqc0v0y2
|
||||||
@@ -28,7 +29,7 @@ sops:
|
|||||||
VVBqSEM2bVFBU0M5YzZBQWIwUmVXUXMKvWb57Rc+rO5M8Pf7lvbSjuZB4FrHgT3A
|
VVBqSEM2bVFBU0M5YzZBQWIwUmVXUXMKvWb57Rc+rO5M8Pf7lvbSjuZB4FrHgT3A
|
||||||
uBQHH3wpv0BVVzL8tucPnwNxDnwpWvFxxwNVy/rtfs6y6HPu6fuOsA==
|
uBQHH3wpv0BVVzL8tucPnwNxDnwpWvFxxwNVy/rtfs6y6HPu6fuOsA==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
lastmodified: "2025-11-30T00:32:08Z"
|
lastmodified: "2026-03-06T21:55:34Z"
|
||||||
mac: ENC[AES256_GCM,data:9c3xcwnGSoi/IpDHBJ922kd9Xh4EodOL/1B1epdCIB/N3Pu07wVMGSGm97e2uqczbFgebXc/Oz1Gpr9hdxNpvxlldXQgqPhZIlk6Pfelf6E0WcC5+QOE1ZQ6MTsgAE5RjFy2fctphXJi/Z9VuTcSgakSYuy+0QbPCfuwL5CaTVk=,iv:8qwCqjVALlaxJCAfZURpt7c6/3b9KKar7mtsYb3/rlw=,tag:utHZLe3FojSmyvBBIzfY2A==,type:str]
|
mac: ENC[AES256_GCM,data:kkEZI0Of8KUpGJRoGAD3gXCtNz44Sucki4Fk2lQ55o+IcBYtxJwwpoQH3usihSigaPquee4XAxhdlWyHt7S46Q9dTFXjT9IUpnxrlG0ZQOnTRbdRlT2qcxLSlghdDWRuezhjT5KWFqlq4Av85KmL7kiB7LAkPVk6EERHJuFsWR8=,iv:Y3wd4hP1ui3rtXe++3j1oAKYbd8V4cc0SBLOlcyl5Zc=,tag:/FK8R28WAWDhWImMnm6wQg==,type:str]
|
||||||
unencrypted_suffix: _unencrypted
|
unencrypted_suffix: _unencrypted
|
||||||
version: 3.11.0
|
version: 3.12.1
|
||||||
|
|||||||
Reference in New Issue
Block a user