From 550da5a27c744a8f07627dc213be5e3b39ddd02b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Madeleine=20Sydney=20=C5=9Alaga?= Date: Fri, 6 Mar 2026 14:22:39 -0700 Subject: [PATCH] feat(discord): jellyfin-rpc --- modules/home/discord.nix | 75 ++++++++++-------------- modules/home/discord/jellyfin-rpc.nix | 82 +++++++++++++++++++++++++++ modules/home/users/msyds/discord.nix | 1 + secrets.yaml | 6 +- users/msyds/secrets.yaml | 7 ++- 5 files changed, 120 insertions(+), 51 deletions(-) create mode 100644 modules/home/discord/jellyfin-rpc.nix diff --git a/modules/home/discord.nix b/modules/home/discord.nix index a7742e4..6fba9fb 100644 --- a/modules/home/discord.nix +++ b/modules/home/discord.nix @@ -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; + }; + }; + }; } diff --git a/modules/home/discord/jellyfin-rpc.nix b/modules/home/discord/jellyfin-rpc.nix new file mode 100644 index 0000000..c4c92a1 --- /dev/null +++ b/modules/home/discord/jellyfin-rpc.nix @@ -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 < "$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."; + }]; + }; +} diff --git a/modules/home/users/msyds/discord.nix b/modules/home/users/msyds/discord.nix index 124dc3a..89463b4 100644 --- a/modules/home/users/msyds/discord.nix +++ b/modules/home/users/msyds/discord.nix @@ -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; diff --git a/secrets.yaml b/secrets.yaml index d34b43e..6e652ea 100644 --- a/secrets.yaml +++ b/secrets.yaml @@ -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 diff --git a/users/msyds/secrets.yaml b/users/msyds/secrets.yaml index 4f617a9..23f8ab2 100644 --- a/users/msyds/secrets.yaml +++ b/users/msyds/secrets.yaml @@ -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