blast: port from my own blast-ugjka to the out-for-PR sblast
This commit is contained in:
@@ -204,8 +204,8 @@ in
|
|||||||
];
|
];
|
||||||
|
|
||||||
consoleMediaUtils = declPackageSet [
|
consoleMediaUtils = declPackageSet [
|
||||||
# "blast-ugjka" # cast audio to UPNP/DLNA devices (via pulseaudio sink)
|
|
||||||
# "catt" # cast videos to chromecast
|
# "catt" # cast videos to chromecast
|
||||||
|
# "sblast" # cast audio to UPNP/DLNA devices (via pulseaudio sink)
|
||||||
"ffmpeg"
|
"ffmpeg"
|
||||||
"go2tv" # cast videos to UPNP/DLNA device (i.e. tv).
|
"go2tv" # cast videos to UPNP/DLNA device (i.e. tv).
|
||||||
"imagemagick"
|
"imagemagick"
|
||||||
@@ -1030,8 +1030,8 @@ in
|
|||||||
|
|
||||||
sane-cast.sandbox.net = "clearnet";
|
sane-cast.sandbox.net = "clearnet";
|
||||||
sane-cast.sandbox.autodetectCliPaths = "existingFile";
|
sane-cast.sandbox.autodetectCliPaths = "existingFile";
|
||||||
sane-cast.sandbox.whitelistAudio = true; #< for blast audio casting
|
sane-cast.sandbox.whitelistAudio = true; #< for sblast audio casting
|
||||||
sane-cast.suggestedPrograms = [ "blast-ugjka" "go2tv" ];
|
sane-cast.suggestedPrograms = [ "go2tv" "sblast" ];
|
||||||
|
|
||||||
sane-die-with-parent.sandbox.enable = false; #< it's a launcher; can't sandbox
|
sane-die-with-parent.sandbox.enable = false; #< it's a launcher; can't sandbox
|
||||||
|
|
||||||
|
@@ -13,7 +13,6 @@
|
|||||||
./avahi.nix
|
./avahi.nix
|
||||||
./bemenu.nix
|
./bemenu.nix
|
||||||
./bitcoin-cli.nix
|
./bitcoin-cli.nix
|
||||||
./blast-ugjka
|
|
||||||
./bonsai.nix
|
./bonsai.nix
|
||||||
./brave.nix
|
./brave.nix
|
||||||
./brightnessctl.nix
|
./brightnessctl.nix
|
||||||
@@ -163,6 +162,7 @@
|
|||||||
./sane-sysload.nix
|
./sane-sysload.nix
|
||||||
./sane-theme.nix
|
./sane-theme.nix
|
||||||
./satellite.nix
|
./satellite.nix
|
||||||
|
./sblast
|
||||||
./schlock.nix
|
./schlock.nix
|
||||||
./seatd.nix
|
./seatd.nix
|
||||||
./sfeed.nix
|
./sfeed.nix
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env nix-shell
|
#!/usr/bin/env nix-shell
|
||||||
#!nix-shell -i python3 -p blast-ugjka -p python3
|
#!nix-shell -i python3 -p python3 -p sblast
|
||||||
# vim: set filetype=python :
|
# vim: set filetype=python :
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
@@ -45,7 +45,7 @@ class BlastDriver:
|
|||||||
def __init__(self, blast_flags: list[str] = []):
|
def __init__(self, blast_flags: list[str] = []):
|
||||||
self.ranked_ips = get_ranked_ip_addrs()
|
self.ranked_ips = get_ranked_ip_addrs()
|
||||||
self.blast = subprocess.Popen(
|
self.blast = subprocess.Popen(
|
||||||
["blast", "-source", "blast.monitor"] + blast_flags,
|
["sblast", "-source", "blast.monitor"] + blast_flags,
|
||||||
stdin=subprocess.PIPE,
|
stdin=subprocess.PIPE,
|
||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
stderr=subprocess.PIPE,
|
stderr=subprocess.PIPE,
|
||||||
@@ -138,7 +138,7 @@ def try_blast(*args, **kwargs) -> BlastDriver | None:
|
|||||||
if status == Status.RedoWithFlags:
|
if status == Status.RedoWithFlags:
|
||||||
dev = blast.receiver_names[0]
|
dev = blast.receiver_names[0]
|
||||||
blast_flags = DEVICE_MAP[dev]
|
blast_flags = DEVICE_MAP[dev]
|
||||||
logger.info("re-exec blast for %s with flags: %r", dev, blast_flags)
|
logger.info("re-exec sblast for %s with flags: %r", dev, blast_flags)
|
||||||
blast.blast.terminate()
|
blast.blast.terminate()
|
||||||
return try_blast(blast_flags=blast_flags)
|
return try_blast(blast_flags=blast_flags)
|
||||||
elif status == Status.Error:
|
elif status == Status.Error:
|
@@ -20,10 +20,10 @@
|
|||||||
# - `-mime audio/ac3 -format ac3`: FAILS
|
# - `-mime audio/ac3 -format ac3`: FAILS
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
let
|
let
|
||||||
cfg = config.sane.programs.blast-ugjka;
|
cfg = config.sane.programs.sblast;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
sane.programs.blast-ugjka = {
|
sane.programs.sblast = {
|
||||||
sandbox.whitelistAudio = true;
|
sandbox.whitelistAudio = true;
|
||||||
sandbox.net = "clearnet";
|
sandbox.net = "clearnet";
|
||||||
};
|
};
|
||||||
@@ -32,7 +32,7 @@ in
|
|||||||
# helper to deal with blast's interactive CLI
|
# helper to deal with blast's interactive CLI
|
||||||
packageUnwrapped = pkgs.static-nix-shell.mkPython3 {
|
packageUnwrapped = pkgs.static-nix-shell.mkPython3 {
|
||||||
pname = "blast-to-default";
|
pname = "blast-to-default";
|
||||||
pkgs = [ "blast-ugjka" ];
|
pkgs = [ "sblast" ];
|
||||||
srcRoot = ./.;
|
srcRoot = ./.;
|
||||||
};
|
};
|
||||||
sandbox.whitelistAudio = true;
|
sandbox.whitelistAudio = true;
|
||||||
@@ -40,7 +40,7 @@ in
|
|||||||
#v else it fails to reap its children (or, maybe, it fails to hook its parent's death signal?)
|
#v else it fails to reap its children (or, maybe, it fails to hook its parent's death signal?)
|
||||||
#v might be possible to remove this, but kinda hard to see a clean way.
|
#v might be possible to remove this, but kinda hard to see a clean way.
|
||||||
sandbox.keepPidsAndProc = true;
|
sandbox.keepPidsAndProc = true;
|
||||||
suggestedPrograms = [ "blast-ugjka" "sane-die-with-parent" ];
|
suggestedPrograms = [ "sane-die-with-parent" "sblast" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
networking.firewall.allowedTCPPorts = lib.mkIf cfg.enabled [ 9000 ];
|
networking.firewall.allowedTCPPorts = lib.mkIf cfg.enabled [ 9000 ];
|
@@ -71,6 +71,12 @@ in
|
|||||||
hash = "sha256-3Yv6Yy1K2dNrrduM2XTEDjSmkysguTbqb8T7mDK2ubI=";
|
hash = "sha256-3Yv6Yy1K2dNrrduM2XTEDjSmkysguTbqb8T7mDK2ubI=";
|
||||||
})
|
})
|
||||||
|
|
||||||
|
(fetchpatch' {
|
||||||
|
name = "sblast: init at 0.7.0";
|
||||||
|
prUrl = "https://github.com/NixOS/nixpkgs/pull/343460";
|
||||||
|
hash = "sha256-tp6D0XDPAvIv36XNr09bbw1Xs3kodxxKJbNn8NAas0k=";
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
# (fetchpatch' {
|
# (fetchpatch' {
|
||||||
# name = "nixos/buffyboard: init";
|
# name = "nixos/buffyboard: init";
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
{ static-nix-shell }:
|
{ static-nix-shell }:
|
||||||
static-nix-shell.mkPython3 {
|
static-nix-shell.mkPython3 {
|
||||||
pname = "sane-cast";
|
pname = "sane-cast";
|
||||||
pkgs = [ "blast-ugjka" "go2tv" ];
|
pkgs = [ "go2tv" "sblast" ];
|
||||||
srcRoot = ./.;
|
srcRoot = ./.;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env nix-shell
|
#!/usr/bin/env nix-shell
|
||||||
#!nix-shell -i python3 -p blast-ugjka -p go2tv -p python3
|
#!nix-shell -i python3 -p go2tv -p python3 -p sblast
|
||||||
# vim: set filetype=python :
|
# vim: set filetype=python :
|
||||||
"""
|
"""
|
||||||
cast media (local video or audio files) to a device on the same network
|
cast media (local video or audio files) to a device on the same network
|
||||||
@@ -129,7 +129,7 @@ class Go2TvDriver:
|
|||||||
class BlastDriver:
|
class BlastDriver:
|
||||||
def cast_to(self, dev: Device) -> None:
|
def cast_to(self, dev: Device) -> None:
|
||||||
blast_args = [
|
blast_args = [
|
||||||
"blast",
|
"sblast",
|
||||||
# "blast.monitor" source will create a new output, or we can do that in pipewire config for better predictability.
|
# "blast.monitor" source will create a new output, or we can do that in pipewire config for better predictability.
|
||||||
"-source", "effect_input.virtual.monitor",
|
"-source", "effect_input.virtual.monitor",
|
||||||
"-device", dev.model,
|
"-device", dev.model,
|
||||||
@@ -138,7 +138,7 @@ class BlastDriver:
|
|||||||
if dev.compat != Compat.RenameToMp4:
|
if dev.compat != Compat.RenameToMp4:
|
||||||
blast_args += [ "-usewav" ];
|
blast_args += [ "-usewav" ];
|
||||||
|
|
||||||
os.execvp("blast", blast_args)
|
os.execvp("sblast", blast_args)
|
||||||
|
|
||||||
def get_ranked_ip_addrs():
|
def get_ranked_ip_addrs():
|
||||||
"""
|
"""
|
||||||
|
Reference in New Issue
Block a user