Rewrite services

This commit is contained in:
Joseph DiGiovanni 2024-07-25 22:18:22 -04:00
parent bcb41c6df9
commit ee9b7f4c5e

View file

@ -13,11 +13,15 @@ let
fi fi
''; '';
gsr-start-replay = pkgs.writeShellScriptBin "gsr-start-replay" '' gsr-record = pkgs.writeShellScriptBin "gsr-start-recording" ''
systemctl --user start gpu-screen-recorder.service
'';
gsr-replay = pkgs.writeShellScriptBin "gsr-start-replay" ''
systemctl --user start gsr-replay.service systemctl --user start gsr-replay.service
''; '';
gsr-stop-replay = pkgs.writeShellScriptBin "gsr-stop-replay" '' gsr-stop = pkgs.writeShellScriptBin "gsr-stop-replay" ''
systemctl --user stop gsr-replay.service systemctl --user stop gsr-replay.service
''; '';
@ -26,8 +30,9 @@ in
{ {
environment.systemPackages = [ environment.systemPackages = [
gsr-save-replay gsr-save-replay
gsr-start-replay gsr-replay
gsr-stop-replay gsr-record
gsr-stop
]; ];
security.wrappers."gsr-kms-server" = { security.wrappers."gsr-kms-server" = {
@ -53,47 +58,61 @@ in
extraGSettingsOverridePackages = with pkgs; [ gnome.gnome-settings-daemon ]; extraGSettingsOverridePackages = with pkgs; [ gnome.gnome-settings-daemon ];
}; };
systemd.user.services."gsr-replay" = { systemd.user.services = rec {
after = [ "graphical-session.target" ]; "gpu-screen-recorder" = {
description = "GPU Screen Recorder replay service"; after = [ "graphical-session.target" ];
enable = false; # Disabled by default to save resources description = "GPU Screen Recorder service";
serviceConfig = { serviceConfig = {
Environment = [ Environment = [
"AUDIO_CODEC=opus" "AUDIO_CODEC=opus"
"CODEC=auto" "CODEC=auto"
"CONTAINER=mkv" "CONTAINER=mkv"
"FRAMERATE=60" "FRAMERATE=60"
"MAKEFOLDERS=no" "MAKEFOLDERS=no"
"QUALITY=very_high" "QUALITY=very_high"
"REPLAYDURATION=300" "WINDOW=screen"
"WINDOW=screen" ];
]; ExecStart = pkgs.writeShellScript "start-gpu-screen-recorder-replay" ''
ExecStart = pkgs.writeShellScript "start-gpu-screen-recorder-replay" '' #${pkgs.killall}/bin/killall gpu-screen-recorder
${pkgs.gpu-screen-recorder}/bin/gpu-screen-recorder -a "$(${pkgs.pulseaudio}/bin/pactl get-default-sink).monitor" -a "$(${pkgs.pulseaudio}/bin/pactl get-default-source)" -ac "$AUDIO_CODEC" -c "$CONTAINER" -f "$FRAMERATE" -k "$CODEC" -mf "$MAKEFOLDERS" -o "${outputDir}" -q "$QUALITY" -r "$REPLAYDURATION" -v no -w "$WINDOW" $ADDITIONAL_ARGS
'';
Restart = "on-failure";
RestartSec = "5s";
Type = "simple";
};
wantedBy = [ "graphical-session.target" ];
};
systemd.user.services."gsr-audio-device-changer" = { if [ -n "$REPLAYDURATION" ]; then
after = [ "gsr-replay.service" ]; REPLAYARG="-r $REPLAYDURATION"
description = "Restart GPU Screen Recorder replay service on audio device change"; else
requires = [ "gsr-replay.service" ]; REPLAYARG=""
serviceConfig = {
ExecStart = pkgs.writeShellScript "gsr-restart-on-audio-device-change" ''
${pkgs.pulseaudio}/bin/pactl subscribe | while read -r event; do
if [[ $event == *"Event 'change' on server"* ]]; then
systemctl --user restart gsr-replay.service
fi fi
done
''; ${pkgs.gpu-screen-recorder}/bin/gpu-screen-recorder $REPLAYARG -a "$(${pkgs.pulseaudio}/bin/pactl get-default-sink).monitor" -a "$(${pkgs.pulseaudio}/bin/pactl get-default-source)" -ac "$AUDIO_CODEC" -c "$CONTAINER" -f "$FRAMERATE" -k "$CODEC" -mf "$MAKEFOLDERS" -o "${outputDir}" -q "$QUALITY" -v no -w "$WINDOW" $ADDITIONAL_ARGS
Restart = "always"; '';
RestartSec = "5s"; Restart = "on-failure";
Type = "simple"; RestartSec = "5s";
Type = "simple";
};
};
"gsr-replay" = gpu-screen-recorder // {
description = "GPU Screen Recorder replay service";
serviceConfig = gpu-screen-recorder.serviceConfig // {
Environment = gpu-screen-recorder.serviceConfig.Environment ++ [ "REPLAYDURATION=300" ];
};
};
"gsr-replay-change-audio" = {
after = [ "gsr-replay.service" ];
description = "Restart GPU Screen Recorder replay service on audio device change";
requires = [ "gsr-replay.service" ];
serviceConfig = {
ExecStart = pkgs.writeShellScript "gsr-restart-on-audio-device-change" ''
${pkgs.pulseaudio}/bin/pactl subscribe | while read -r event; do
if [[ $event == *"Event 'change' on server"* ]]; then
systemctl --user restart gsr-replay.service
fi
done
'';
Restart = "on-failure";
RestartSec = "5s";
Type = "simple";
};
wantedBy = [ "gsr-replay.service" ];
}; };
wantedBy = [ "gsr-replay.service" ];
}; };
} }