I use the following oneliner to switch sinks:
wpctl set-default $(pw-cli i $(pactl list short sinks | awk '{print $2}' | sd 'easyeffects_sink\n' '' | sd "$(pactl get-default-sink)\n" '' | rg '.' || echo "$(pactl get-default-sink)" | tofi --prompt-text " " --height 40% --width 40% --auto-accept-single true ) | rg -oP 'id: \K\w+') && notify-send --urgency=low --icon=/usr/share/icons/Flat-Remix-Red-Dark/panel/audio-volume-high-symbolic.svg "$(pactl list sinks | rg -A 1 "Name: $(pactl get-default-sink)" | rg Description: | sd ' Description: ' '')" -h string:x-canonical-private-synchronous:sink-state && pw-play --volume=0.2 /usr/share/sounds/freedesktop/stereo/audio-volume-change.oga &!
This is great, however, i'd like it if the sink menu showed the descriptions for selection instead of the actual sink names
I've started a script like the following:
RET=$(pactl list sinks | rg Description: | sd ' Description: ' '') | tofi
case $RET in
pactl list sinks | rg Description: | sd ' Description: ' '') pactl list short sinks | awk '{print $2}'
esac
but that doesn't seem to work at all, any ideas for how to get this working?
edit: I found a better solution
$sinkswitch = wpctl set-default $(pw-cli i $(pactl list sinks | rg --fixed-strings -B 1 "$(pactl list sinks | rg Description: | sd ' Description: ' '' | sd 'Easy Effects Sink' '' | sd --fixed-strings "$(pactl list sinks | rg -A 1 "Name: $(pactl get-default-sink)" | rg Description: | sd ' Description: ' '')" '' | rg '.' || echo "$(pactl list sinks | rg -A 1 "Name: $(pactl get-default-sink)" | rg Description: | sd ' Description: ' '')" | tofi --prompt-text " " --height 40% --width 40% --auto-accept-single true )" | rg Name: | awk '{print $2}' ) | rg -oP 'id: \K\w+') && notify-send --urgency=low --icon=/usr/share/icons/Flat-Remix-Red-Dark/panel/audio-volume-high-symbolic.svg "$(pactl list sinks | rg -A 1 "Name: $(pactl get-default-sink)" | rg Description: | sd ' Description: ' '')" -h string:x-canonical-private-synchronous:sink-state && pw-play --volume=0.2 /usr/share/sounds/freedesktop/stereo/audio-volume-change.oga &!
I currently use the following one-liner to switch between sinks
pactl set-default-sink $(pactl list short sinks | awk '{print $2}' | sd 'easyeffects_sink\n' '' | sd "$(pactl get-default-sink)\n" '' | tofi --prompt-text " " --height 40% --width 40% --auto-accept-single true ) && pw-play --volume=0.2 /usr/share/sounds/freedesktop/stereo/audio-volume-change.oga
It seems wpctl doesn't currently support node.names which makes this significantly more complex, has anyone done something similar with wpctl? I've found a massive script but I want something more simple that's a one-liner.
wpctl set-default $(pw-cli i $(pactl list short sinks | awk '{print $2}' | sd 'easyeffects_sink\n' '' | sd "$(pactl get-default-sink)\n" '' | tofi --prompt-text " " --height 40% --width 40% --auto-accept-single true ) | rg -oP 'id: \K\w+')
closest I've managed so far is this, which at least makes it so that wpctl sets the sink, which is an upgrade, I guess, but there's still two pactl's to eliminate...
bindntr=CTRL,C,exec,hyprctl dispatch closewindow alacrittyclipboard & hyprctl activewindow | rg -q "class: Wfica" && alacritty -qq --config-file ~/.config/alacritty/alacrittyclipboard.toml --class 'alacrittyclipboard' --title 'Office365 Desktop - Nexus (SSL/TLS Secured, 256 bit)' -e sh -c 'sleep .03 && xclip -o | wl-copy'
windowrulev2 = float,class:(alacrittyclipboard)
windowrulev2 = stayfocused,class:(alacrittyclipboard)
windowrulev2 = noborder,class:(alacrittyclipboard)
windowrulev2 = noanim,class:(alacrittyclipboard)
windowrulev2 = noblur,class:(alacrittyclipboard)
windowrulev2 = opacity 0,class:(alacrittyclipboard)
windowrulev2 = maxsize 1 1,class:(alacrittyclipboard)
i've done it, I've finally figured out a workaround for this stupid bug that has existed on my system for the last 10 years. the citrix clipboard now works properly, this is the glueyest dumbest thing i've ever had to do and i've spent literally years trying to figure it out, turns out the wayland protocol forbids windows that don't have focus from accessing the clipboard, so, i had to make a window, it had to be focused for enough time for it to be recognized and it was a whole thing. Here you go for anybody that needs it, should be relatively easy to adapt from hyprland over to whatever. Fuck.
I have no idea why, I've made a single comment here one time and never asked for this, but I promise to be a benevolent dictator
I have a dumb work related chrome thing, i'd like to make it so that when a certain notification sound plays in chromium, my computer does a few things automatically for me
Does anyone know a good way to make this happen?
I imagine it'd have to be setup like:
when chrome starts playing audio && check if that audio matches soundfile.ogg && myscript.sh, but I don't know any good cli utilities that could get something like that done, and if there are any better ideas!
edit: to avoid X/Y issues i've summarized the problem in full here:
These factors cause me to want to run a script once the noise is recognized, only if the noise is playing in a particular app. I'm using pipewire/hyprland on arch.
My current plan for isolating the noise is to do the following:
pactl load-module module-combine-sink sink_name='Work' slaves='easyeffects_sink'
and then set chrome exclusively to play audio on work.
Then set a script to check the sink work for audio that matches what I want. That should be simpler than the other methods i've seen to isolate the noise.
in my config file exists...
exec-once = zsh -c 'sleep 1' && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar && waybar
Why? Because waybar crashes sometimes when I turn my monitor off/on, I documented this here: https://github.com/Alexays/Waybar/issues/3047
...this opens waybar if it crashes... and if that crashes, it opens another waybar, and you'll notice, if that one crashes, it opens another one... now you may have seen the pattern here but in case you didn't, that one will then lead to another waybar...
Is there a less ridiculous way of making waybar open every time when waybar crashes, giving me better fault tolerance?
https://github.com/mclarkk/lifxlan/issues/185
I've been struggling with this for hours, i'm not a python dev, i'm just trying to control my lights with my linux pc #!/usr/bin/env python import sys from lifxlan import LifxLAN def main (): lan =...
https://github.com/mclarkk/lifxlan/issues/185
I've been struggling with this for hours, i'm not a python dev, i'm just trying to control my lights with my linux pc #!/usr/bin/env python import sys from lifxlan import LifxLAN def main (): lan =...
I'm trying to improve the clipboard sync situation, i've realized that if I can make it so that a bindsym only applies when an xwayland window is in focus, I can basically do
bindsym --release Control+c exec "xclip -o | wl-copy"
And it'll automatically sync the clipboard... however, I can't find a way to make the bindsym only run on xwayland windows, as, if this runs on a wayland window, it'll just overwrite the wayland clipboard with the last xwayland clipboard.
I've discovered you can match all xwayland windows with "swaymsg [shell='xwayland']" but I can't figure out how to make a bindsym only work if that is in focus
edit: I figured out the following:
bindsym --release Control+c exec swaymsg -t get_tree | jq '.. | select(.type?) | select(.focused==true) | .shell' | grep -Eq 'xwayland' && xclip -o | wl-copy
^^ that SHOULD WORK in theory, but it doesn't, because xclip outputs what it remembers as soon as the command starts, and as a result, the string gets messed up... I cannot figure out for the life of me why running "xclip -o | wl-copy" fixes it but not that. please help.
bindsym --release Control+c exec swaymsg -t get_tree | jq '.. | select(.type?) | select(.focused==true) | .shell' | grep -Eq 'xwayland' && [xclip -o | wl-copy]
^^does not fix it, unfortunately
here's an issue tracker: https://github.com/swaywm/sway/issues/7958
I noticed on startup my computer is saying "Failed to start D-bus system message bus"
my sway session would not start
I switched to dbus-deamon-units and now sway will start with seatd, but i can't, for example, use notify-send as it says
Error spawning command line “dbus-launch --autolaunch=82fe279a661a4ecdb58cb22596899103 --binary-syntax --close-stderr”: Child process exited with code 1
I suspect I may have setup dbus to run as root with systemctl or something? but I have no idea what's going on and have been at this for hours, any advice would be helpful
Also, it takes two attempts to run commands, zsh is saying
zsh: corrupt history file
edit: I discovered pacman was lying to me about dbus-daemon-units being installed, and dbus-broker is now running fine at a user level and dbus at the system level, but if I setup dbus broker as root everything breaks, I dunno
@Communist
@lemmy.ml