diff --git a/modules/niri/default.nix b/modules/niri/default.nix index 672872c..9d4e558 100644 --- a/modules/niri/default.nix +++ b/modules/niri/default.nix @@ -36,9 +36,9 @@ in }; home-manager.users.${conf.username} = { - home.packages = with pkgs; [ - wl-clipboard - xwayland-satellite-unstable + home.packages = [ + pkgs.wl-clipboard + pkgs.xwayland-satellite ]; services.swayosd = { diff --git a/modules/niri/niri.conf.nix b/modules/niri/niri.conf.nix index 5c69931..10b337a 100644 --- a/modules/niri/niri.conf.nix +++ b/modules/niri/niri.conf.nix @@ -7,6 +7,57 @@ inherit (config.conf) keys extraLayout; inherit (lib.attrsets) genAttrs; inherit (lib) mkMerge; + switch-sink = + pkgs.writeScript "switch-sink" + '' + #!/usr/bin/env fish + + # set -l regex '^.* (\*?) \s+ ([[:digit:]]*)\. .* \[.*$' + set -l sed 's/^.* ([[:digit:]]*)\. .*$/\1/' + set -l awk 'BEGIN { A=0; S=0; } /^Audio/ { A=1; } /Sinks/ { S=1; } /Sources/ { S=0; } /^Video/ { A=0; } { if (A==1 && S==1 && / [[:digit:]]*\./) { print; } }' + + set -l lines (wpctl status | awk $awk) + set -l len (count $lines) + + set -l current + set -l sinks + + for i in (seq 1 $len) + set -l sink (echo $lines[$i] | sed -E $sed) + set -a sinks $sink + + if string match -qr '\*' $lines[$i] + set current $sink + end + + end + + set -l len (count $sinks) + set -l index + + for i in (seq 1 $len) + if [ $sinks[$i] = $current ] + if [ $argv[1] = '-f' ] + if [ $i = $len ] + set index 1 + else + set index (math $i + 1) + end + else if [ $argv[1] = '-b' ] + if [ $i = 1 ] + set index $len + else + set index (math $i - 1) + end + else + exit 1 + end + break + end + end + + wpctl set-default $sinks[$index] + ''; in { input = { keyboard = { @@ -143,6 +194,9 @@ in { "Mod+Space".action.spawn = ["fuzzel"]; "Mod+Y".action.spawn = ["yubioath-flutter"]; + "XF86AudioNext".action.spawn = ["${switch-sink}" "-f"]; + "XF86AudioPrev".action.spawn = ["${switch-sink}" "-b"]; + "XF86AudioRaiseVolume".action.spawn = [ "swayosd-client" "--output-volume"