diff options
Diffstat (limited to 'lass/2configs/home-media.nix')
-rw-r--r-- | lass/2configs/home-media.nix | 78 |
1 files changed, 73 insertions, 5 deletions
diff --git a/lass/2configs/home-media.nix b/lass/2configs/home-media.nix index f3908e6be..1f7c3fcb5 100644 --- a/lass/2configs/home-media.nix +++ b/lass/2configs/home-media.nix @@ -1,12 +1,34 @@ with import <stockholm/lib>; { pkgs, ... }: { + imports = [ + ./mpv.nix + ]; users.users.media = { isNormalUser = true; uid = genid_uint31 "media"; extraGroups = [ "video" "audio" "pipewire" ]; + packages = [ + (pkgs.writers.writeDashBin "mpv" '' + if test -e "$1"; then + mpv-ipc-cli loadfile "$(realpath "$1")" + else + mpv-ipc-cli loadfile "$1" + fi + '') + ]; }; + users.users.mainUser.packages = [ + (pkgs.writers.writeDashBin "mpv" '' + if test -e "$1"; then + mpv-ipc-cli loadfile "$(realpath "$1")" + else + mpv-ipc-cli loadfile "$1" + fi + '') + ]; + services.xserver.displayManager.autoLogin = { enable = true; user = "media"; @@ -17,12 +39,12 @@ with import <stockholm/lib>; load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;10.42.0.0/24 auth-anonymous=1 ''; - krebs.iptables.tables.filter.INPUT.rules = [ - { predicate = "-p tcp --dport 4713"; target = "ACCEPT"; } # pulseaudio - ]; - environment.systemPackages = [ - (pkgs.writers.writeDashBin "snapmpv" '' + (pkgs.writers.writeDashBin "mpv-ipc-cli" '' + set -efux + ${pkgs.jq}/bin/jq -nc '{ "command": $ARGS.positional }' --args "$@" | ${pkgs.socat}/bin/socat - /tmp/mpv.ipc + '') + (pkgs.writers.writeDashBin "ipc-mpv" '' /run/current-system/sw/bin/mpv \ --audio-display=no --audio-channels=stereo \ --audio-samplerate=48000 --audio-format=s16 \ @@ -30,5 +52,51 @@ with import <stockholm/lib>; --audio-delay=-1 \ "$@" '') + pkgs.mpvc + (pkgs.writers.writeDashBin "iptv" '' + curl -Ssf 'https://iptv-org.github.io/iptv/index.nsfw.m3u' | + sed 's/.*,//' | + sed -z 's/\nhttp/,http/g' | + fzf --bind='enter:execute(echo {} | cut -d ',' -f 2 | xargs -0 mpv-ipc-cli loadfile)' + '') ]; + + environment.variables.SOCKET = "/tmp/mpv.ipc"; + systemd.services.mpvd = { + wantedBy = [ "multi-user.target" ]; + environment.DISPLAY = ":0"; + serviceConfig = { + User = "media"; + RemainAfterExit = true; + Nice = "-10"; + ExecStart = ''${pkgs.tmux}/bin/tmux -2 new-session -d -s mpvd -- /run/current-system/sw/bin/ipc-mpv \ + --audio-display=no --audio-channels=stereo \ + --audio-samplerate=48000 --audio-format=s16 \ + --ao-pcm-file=/run/snapserver/snapfifo --ao=pcm \ + --audio-delay=-1 \ + --network-timeout=3 \ + --untimed --cache-pause=no \ + --idle=yes --force-window=yes \ + --loop-playlist=inf \ + --input-ipc-server=/tmp/mpv.ipc + ''; + ExecStop = "${pkgs.tmux}/bin/tmux kill-session -t mpvd"; + ExecStartPre = [ + "+${pkgs.writers.writeDash "remove_socket" '' + set -efux + rm -f /tmp/mpv.ipc + ''}" + ]; + ExecStartPost = [ + "+${pkgs.writers.writeDash "fix_permissions" '' + set -efux + until test -e /tmp/mpv.ipc; do + sleep 1 + done + # sleep 2 + chmod 666 /tmp/mpv.ipc || : + ''}" + ]; + }; + }; } |