nixcfg/modules/nixos/services/cowsay-mastodon-poster/default.nix
2024-01-11 10:31:04 +00:00

67 lines
1.7 KiB
Nix

{ lib, pkgs, config, ... }:
let
inherit (lib) types mkIf;
inherit (lib.plusultra) mkBoolOpt mkOpt;
inherit (pkgs) fortune toot;
inherit (pkgs.snowfallorg) cow2img;
cfg = config.plusultra.services.cowsay-mastodon-poster;
script = ''
if [ ! -f ~/.config/toot/config.json ]; then
echo "File ~/.config/toot/config.json does not exist. Run 'toot login_cli' first."
exit 1
fi
tmp_dir=$(mktemp -d)
pushd $tmp_dir > /dev/null
${cow2img}/bin/cow2img --no-spinner ${if cfg.short then "--message \"$(${fortune}/bin/fortune -s)\"" else ""}
cow_name=$(cat ./cow/name)
cow_message=$(cat ./cow/message)
post="$cow_name saying:"$'\n\n'"$cow_message"
${toot}/bin/toot post --media ./cow/image.png --description "$post" "#hachybots"
popd > /dev/null
rm -rf $tmp_dir
'';
in
{
options.plusultra.services.cowsay-mastodon-poster = with types; {
enable = mkBoolOpt false "Whether or not to enable cowsay posts.";
short = mkBoolOpt false "Use short fortunes only.";
user = mkOpt str config.plusultra.user.name "The user to run as.";
group = mkOpt str "users" "The group to run as.";
};
config = mkIf cfg.enable {
systemd = {
timers.cowsay-mastodon-poster = {
wantedBy = [ "timers.target" ];
timerConfig = {
# Run once a day at 10am.
OnCalendar = "*-*-* 10:00:00";
Unit = "cowsay-mastodon-poster.service";
};
};
services.cowsay-mastodon-poster = {
after = [ "network-online.target" ];
description = "Post a cowsay image to Mastodon.";
inherit script;
serviceConfig = {
Type = "oneshot";
User = cfg.user;
Group = cfg.group;
};
};
};
};
}