Files
nix-files/hosts/common/programs/gpodder/default.nix
2025-07-28 20:03:41 +00:00

60 lines
2.5 KiB
Nix

# help:
# - #gpodder on irc.libera.chat
{ config, pkgs, sane-lib, ... }:
let
feeds = sane-lib.feeds;
all-feeds = config.sane.feeds;
wanted-feeds = feeds.filterByFormat [ "podcast" "video" ] all-feeds;
in {
sane.programs.gpodder = {
packageUnwrapped = (pkgs.gpodder-configured.override {
gpodder = pkgs.gpodder-adaptive;
}).overrideAttrs (base: {
# environment variables:
# - GPODDER_HOME (defaults to "~/gPodder")
# - GPODDER_DOWNLOAD_DIR (defaults to "$GPODDER_HOME/Downloads")
# - GPODDER_WRITE_LOGS ("yes" or "no")
# - GPODDER_EXTENSIONS
# - GPODDER_DISABLE_EXTENSIONS ("yes" or "no")
extraMakeWrapperArgs = (base.extraMakeWrapperArgs or []) ++ [
"--set" "GPODDER_HOME" "~/.local/share/gPodder"
# "--run" "export GPODDER_HOME=~/.local/share/gPodder" #< unquote `~/.local/share/gPodder` to force run-time home expansion
# place downloads in a shared media directory to ensure sandboxed apps can read them
"--set" "GPODDER_DOWNLOAD_DIR" "~/Videos/gPodder"
# "--run" "export GPODDER_DOWNLOAD_DIR=~/Videos/gPodder"
];
});
sandbox.whitelistDbus.user.own = [ "org.gpodder" "org.gpodder.gpodder" ];
sandbox.whitelistDri = true; #< makes the UI way more responsive
sandbox.whitelistPortal = [
"OpenURI"
];
sandbox.whitelistWayland = true;
sandbox.net = "clearnet";
fs.".config/gpodderFeeds.opml".symlink.text = feeds.feedsToOpml wanted-feeds;
fs.".local/share/gPodder/Settings.json".symlink.text = builtins.toJSON (import ./settings.nix);
# if you don't persist its database, you get untracked (and hence non-gc'd) downloads, plus slooow startup.
# but i *don't* want to persist all the things in this directory, so dedicate a subdir to the persisted data.
fs.".local/share/gPodder/Database".symlink.target = "persist/Database";
# fs.".local/share/gPodder/gpodder.net".symlink.text = "persist/gpodder.net"; #< for synching episode playback positions between devices, i think
services.gpodder-ensure-feeds = {
description = "synchronize static OPML feeds into gPodder's subscription database";
partOf = [ "default" ];
startCommand = ''gpodder-ensure-feeds ''${HOME}/.config/gpodderFeeds.opml'';
};
persist.byStore.plaintext = [
"Videos/gPodder"
".local/share/gPodder/persist"
];
persist.byStore.ephemeral = [
".local/share/gPodder/Logs"
".local/share/gPodder/youtube-dl"
];
};
}