@rockedge I'm very close to being able to build an audio 08layer. Here's what I have going. In addition to the spectrwm custom bindings, I've edited the config and made a splash and edited the config to open all stable jack applications with keystrokes and have them display properly.
Here's the audio keybinding splash which is referenced in the spectrwm keybinding splash

and here's the spectrwm keybinding splash, which is very tall, and I'm thinking I should break into two splashes with references to each other as well as the audio splash.

This works really well for opening instruments and tools with keystrokes while a midi keyboard is plugged in and then playing away. What I plan to do is add an 09layer with sounds and preset routing in carla or qpwgraph, with a few scripts in /root/my-applications/bin that open a selection of instruments with connections already made, at least as a demo. A document explaining the system setup would be helpful to making it a kind of a turnkey audio system.
This is really a fabulous window manager for live playing as you can open/close things without using the mouse, and there are 10 desktops ootb so that things can be running simultaneously and easily accessed with MOD+[1-10]
I'm curious as to why I can't drag the splash around with MOD+[L_mouse-button} as it seems it used to do that.
here's my spectrwm.conf, still has a few personal favorite apps that I'll remove
Code: Select all
# ___ ___ ___ ___ __ ___ ___ ___
# / /\ / /\ / /\ / /\ / /\ / /\ /__/\ /__/\
# / /:/_ / /::\ / /:/_ / /:/ / /:/ / /::\ _\_ \:\ | |::\
# / /:/ /\ / /:/\:\ / /:/ /\ / /:/ / /:/ / /:/\:\ /__/\ \:\ | |:|:\
# / /:/ /::\ / /:/"/:/ / /:/ /:/_ / /:/ ___ / /:/ / /:/"/:/ _\_ \:\ \:\ __|__|:|\:\
# /__/:/ /:/\:\ /__/:/ /:/ /__/:/ /:/ /\ /__/:/ / /\ / /::\ /__/:/ /:/___ /__/\ \:\ \:\ /__/::::| \:\
# \ \:\/:/"/:/ \ \:\/:/ \ \:\/:/ /:/ \ \:\ / /:/ / /:/\:\ \ \:\/:::::/ \ \:\ \:\/:/ \ \:\""\__\/
# \ \::/ /:/ \ \::/ \ \::/ /:/ \ \:\ /:/ /__/:/ \:\ \ \::/"""" \ \:\ \::/ \ \:\
# \__\/ /:/ \ \:\ \ \:\/:/ \ \:\/:/ \__\/ \ \:\ \ \:\ \ \:\/:/ \ \:\
# /__/:/ \ \:\ \ \::/ \ \::/ \ \:\ \ \:\ \ \::/ \ \:\
# \__\/ \__\/ \__\/ \__\/ \__\/ \__\/ \__\/ \__\/
#
#=================================================================================================================
# Spectrwm Config file
#-----------------------------------------------------------------------------------------------
# Define MOD Key
#-----------------------------------------------------------------------------------------------
# Mod key, (Windows key is Mod4) (Alt key is Mod1) (Apple key is Mod2)
modkey = Mod4
#------------------------------------------------------------------------------------------------
# Workspaces
#------------------------------------------------------------------------------------------------
workspace_limit = 10
focus_mode = follow
#focus_mode = default
focus_close = last
focus_close_wrap = 1
focus_default = first
spawn_position = next
workspace_clamp = 1
warp_focus = 1
warp_pointer = 0
#------------------------------------------------------------------------------------------------
# Window decoration
#------------------------------------------------------------------------------------------------
border_width = 1
color_focus = rgb:67/90/eb
color_focus_maximized = rgb:ff/a5/00
color_unfocus = rgb:88/88/88
color_unfocus_maximized = rgb:88/88/00
region_padding = 5
tile_gap = 5
# Region containment
# Distance window must be dragged/resized beyond the region edge before it is
# allowed outside the region.
# boundary_width = 50
# Remove window border when bar is disabled and there is only one window in workspace
disable_border = 0
#------------------------------------------------------------------------------------------------
# Bar settings
#------------------------------------------------------------------------------------------------
bar_action = ~/.config/polybar/launch.sh
bar_action_expand = 1
bar_enabled = 1
bar_border_width = 5
bar_border[1] = rgb:28/2a/36
bar_border_unfocus[1] = rgb:28/2a/36
bar_color[1] = rgb:28/2a/36, rgb:00/80/80
bar_color_selected[1] = rgb:00/80/80
bar_delay = 1
bar_font_color[1] = rgb:bb/c5/ff, rgb:e1/ac/ff, rgb:dd/ff/a7, rgb:ff/8b/92, rgb:ff/e5/85, rgb:89/dd/ff
bar_font_color_selected = black
bar_font = Noto-Sans-fonts:size=11 awesome-terminal-fonts:size=11 NotoMonoRegular:bold:size=14'
bar_justify = center
bar_format = +N:+I +S (+D) | +A
workspace_indicator = listcurrent,listactive,markcurrent,printnames
bar_at_bottom = 0
stack_enabled = 1
clock_enabled = 1
clock_format = %a %b %d %R %Z %Y
iconic_enabled = 0
maximize_hide_bar = 0
window_class_enabled = 1
window_instance_enabled = 1
window_name_enabled = 1
verbose_layout = 1
urgent_enabled = 1
# Dialog box size ratio when using TRANSSZ quirk; 0.3 < dialog_ratio <= 1.0
# dialog_ratio = 0.6
# Split a non-RandR dual head setup into one region per monitor
# (non-standard driver-based multihead is not seen by spectrwm)
# region = screen[1]:1280x1024+0+0
# region = screen[1]:1280x1024+1280+0
# region = screen[1]:1366x768+0+0
#------------------------------------------------------------------------------------------------
# Auto Launch Applications
#------------------------------------------------------------------------------------------------
# Launch applications in a workspace of choice
autorun = ws[1]:nitrogen --restore
autorun = ws[1]:xcompmgr -C -t-5 -l-5 -r4.2 -o.55 &
autorun = ws[1]:dunst
autorun = ws[1]:flameshot
# autorun = ws[1]:pipewire &
# autorun = ws[1]:pipewire-pulse &
# autorun = ws[1]:pnmixer
# autorun = ws[1]:alacritty
# autorun = ws[1]:volumeicon
# autorun = ws[1]:nm-applet &
# autorun = ws[1]:polkit &
# autorun =
#------------------------------------------------------------------------------------------------
# Customize workspace layout at start
#------------------------------------------------------------------------------------------------
# Customize workspace layout at start
# layout = ws[1]:4:0:0:0:vertical
# layout = ws[2]:0:0:0:0:horizontal
# layout = ws[3]:0:0:0:0:fullscreen
# layout = ws[4]:4:0:0:0:vertical_flip
# layout = ws[5]:0:0:0:0:horizontal_flip
# layout = ws[6]:0:0:0:0:horizontal_flip
# layout = ws[7]:0:0:0:0:horizontal_flip
# layout = ws[8]:0:0:0:0:horizontal_flip
# layout = ws[9]:0:0:0:0:horizontal_flip
# layout = ws[10]:0:0:0:0:horizontal_flip
#------------------------------------------------------------------------------------------------
# Set workspace name at start
# -----------------------------------------------------------------------------------------------
# name = ws[1]:I
# name = ws[2]:II
# name = ws[3]:III
# name = ws[4]:IV
# name = ws[5]:V
# name = ws[6]:VI
# name = ws[7]:VII
# name = ws[8]:VIII
# name = ws[9]:IX
# name = ws[10]:X
#------------------------------------------------------------------------------------------------
# Set workspace name at start
# -----------------------------------------------------------------------------------------------
# name = ws[1]:web
# name = ws[2]:edit
# name = ws[3]:inkscape
# name = ws[4]:gimp
# name = ws[5]:meld
# name = ws[6]:video
# name = ws[7]:vb
# name = ws[8]:files
# name = ws[9]:mail
# name = ws[10]:music
#------------------------------------------------------------------------------------------------
# Set workspace name at start
# -----------------------------------------------------------------------------------------------
# name = ws[1]:One
# name = ws[2]:Two
# name = ws[3]:Three
# name = ws[4]:Four
# name = ws[5]:Five
# name = ws[6]:Six
# name = ws[7]:Seven
# name = ws[8]:Eight
# name = ws[9]:Nine
# name = ws[10]:Ten
#------------------------------------------------------------------------------------------------
# Set workspace name at start
# -----------------------------------------------------------------------------------------------
name = ws[1]:
name = ws[2]:
name = ws[3]:
name = ws[4]:
name = ws[5]:
name = ws[6]:
name = ws[7]:
name = ws[8]:
name = ws[9]:
name = ws[10]:
# ", " ", " ", " ", " ", " ", " ", " ", " ", " ",
# ", " ", " ", " ", " ", " ", " ", " ", " ", " ",
#------------------------------------------------------------------------------------------------
# Predefined Key Bindings
#------------------------------------------------------------------------------------------------
# This allows you to include pre-defined key bindings for your keyboard layout.
keyboard_mapping = /dev/null
#--------------------------------------------------------------------------------------------------
# User Defined Shortcuts
#-------------------------------------------------------------------------------------------------
# Validated default programs:
program[term] = lxterminal
bind[term] = MOD+Return
program[pcmanfm] = pcmanfm
bind[pcmanfm] = MOD+e
program[menu] = dmenu_run $dmenu_bottom -fn $bar_font -nb $bar_color -nf $bar_font_color -sb $bar_color_selected -sf $bar_font_color_selected
bind[menu] = MOD+Shift+d
program[search] = dmenu $dmenu_bottom -i -fn $bar_font -nb $bar_color -nf $bar_font_color -sb $bar_color_selected -sf $bar_font_color_selected
bind[search_workspace] = MOD+slash
program[name_workspace] = dmenu $dmenu_bottom -p Workspace -fn $bar_font -nb $bar_color -nf $bar_font_color -sb $bar_color_selected -sf $bar_font_color_selected
bind[name_workspace] = MOD+Shift+slash
program[rofi] = rofi -show drun
bind[rofi] = MOD+d
program[pavucontrol] = pavucontrol
bind[pavucontrol] = MOD+p
program[touchpad] = touchpad_toggle
bind[touchpad] = MOD1+Menu
program[screenshot_all] = screenshot.sh full # optional
bind[screenshot_all] = MOD+s
program[screenshot_wind] = screenshot.sh window # optional
bind[screenshot_wind] = MOD+Shift+s
program[i3lock] = i3lock -c 000000 # i3lock -i /root/Pictures/*.png / i3lock -c 000000
bind[i3lock] = MOD1+l # MOD1 key - alt
program[hotkeys-wm] = /root/.config/spectrwm/scripts/Spectr-hotkeys-wm.sh
bind[hotkeys-wm] = MOD+z
program[hotkeys-audio] = /root/.config/spectrwm/scripts/Spectr-hotkeys-audio.sh
bind[hotkeys-audio] = MOD+MOD1+z
program[spectrversion] = /root/.config/spectrwm/scripts/Spectr-version.sh
bind[spectrversion] = MOD+v
# geo-systenm hotkeys ### reference used: mod+ ( d e f h i l m p q s t u v z ) ###
program[xfe] = xfe
bind[xfe] = MOD+MOD1+x
program[thunderbird] = /mnt/home/portableAPP/Thunderbird-portable64/LAUNCH
bind[thunderbird] = MOD+MOD1+t
program[mclock] = /root/my-applications/bin/mclock
bind[mclock] = MOD+MOD1+c
program[cpuD] = /root/my-applications/bin/cpuDo
bind[cpuD] = MOD+MOD1+d
program[cpuF] = /root/my-applications/bin/cpuFo
bind[cpuF] = MOD+MOD1+f
program[cpuS] = /root/my-applications/bin/cpuSo
bind[cpuS] = MOD+MOD1+s
program[cpuW] = /root/my-applications/bin/cpuWo
bind[cpuW] = MOD+MOD1+w
program[cpuINFO] = /root/my-applications/bin/cpuINFOo
bind[cpuINFO] = MOD+MOD1+n
program[cpuMON] = /root/my-applications/bin/cpuMONo
bind[cpuMON] = MOD+MOD1+o
program[cpuMEM] = /root/my-applications/bin/cpuMEMo
bind[cpuMEM] = MOD+MOD1+m
# geo-audio hotkeys
# program[parole] = parole
# bind[parole] = MOD+MOD1+p
program[helvum] = helvum
bind[helvum] = MOD+MOD1+h
program[carla] = pw-jack carla
bind[carla] = MOD+MOD1+a
program[qpwgraph] = qpwgraph
bind[qpwgraph] = MOD+MOD1+q
program[jack_mixer] = pw-jack jack_mixer
bind[jack_mixer] = MOD+MOD1+j
program[calf] = pw-jack calfjackhost
bind[calf] = MOD+MOD1+l
program[yoshimi] = pw-jack yoshimi
bind[yoshimi] = MOD+MOD1+y
program[synthv1] = pw-jack synthv1_jack
bind[synthv1] = MOD+MOD1+u
program[samplv1] = pw-jack samplv1_jack
bind[samplv1] = MOD+MOD1+l
program[padthv1] = pw-jack padthv1_jack
bind[padthv1] = MOD+MOD1+p
program[drumkv1] = pw-jack drumkv1_jack
bind[drumkv1] = MOD+MOD1+k
program[hydrogen] = /root/my-applications/bin/h2
bind[hydrogen] = MOD+MOD1+2
program[helm] = pw-jack helm
bind[helm] = MOD+MOD1+7
program[amsynth] = pw-jack /usr/bin/amsynth
bind[amsynth] = MOD+MOD1+8
program[guitarix] = pw-jack guitarix
bind[guitarix] = MOD+MOD1+g
program[drumstickgui] = pw-jack drumstick-guiplayer
bind[drumstickgui] = MOD+MOD1+0
program[drumstickvpiano] = pw-jack drumstick-vpiano
bind[drumstickvpiano] = MOD+MOD1+9
# program[Spectr-hotkeys.sh-camel-teal] = ~/.config/spectrwm/scripts/Spectr-hotkeys.sh-camel-teal
# bind[Spectr-hotkeys.sh-camel-teal] = MOD+z
program[toggle_bars] = ~/.config/spectrwm/scripts/fullscreen-toggle.sh
bind[toggle_bars] = MOD+Shift+f
# To disable validation of the above, free the respective binding(s):
# bind[] = MOD+Shift+Delete # disable lock
# bind[] = MOD+Shift+Return # disable term
# bind[] = MOD+p # disable menu
#---------------------------------------------------------------------------------------------------
# Powermenu
#---------------------------------------------------------------------------------------------------
program[powermenu] = /root/.config/spectrwm/scripts/powermenu.sh
bind[powermenu] = MOD+Shift+x
###############################################################################
# Brightness
###############################################################################
program[brightup] = brightnessctl set +10
bind[brightup] = XF86MonBrightnessUp
program[brightdown] = brightnessctl set 10-
bind[brightdown] = XF86MonBrightnessDown
###############################################################################
# Audio Keybindings
###############################################################################
program[vol+] = pactl set-sink-volume @DEFAULT_SINK@ +5%
bind[vol+] = XF86AudioRaiseVolume
program[vol-] = pactl set-sink-volume @DEFAULT_SINK@ -5%
bind[vol-] = XF86AudioLowerVolume
program[mute] = pactl set-sink-mute @DEFAULT_SINK@ toggle
bind[mute] = XF86AudioMute
#---------------------------------------------------------------------------------------------------
# Floating or not
#---------------------------------------------------------------------------------------------------
# QUIRKS
# Default quirks, remove with: quirk[class:name] = NONE
quirk[mpv:xv] = FLOAT + FULLSCREEN + FOCUSPREV
quirk[Lxappearance:lxappearance] = FLOAT
quirk[Lxappearance] = FLOAT
quirk[Gpick] = FLOAT + ANYWHERE
quirk[Pavucontrol] = FLOAT
quirk[st-256color] = FLOAT
quirk[firefox:menu] = FLOAT
quirk[XTerm:nmtui] = FLOAT
quirk[XTerm:xterm] = FLOAT
quirk[UXTerm:xterm] = FLOAT
quirk[Lxterminal:lxterminal] = FLOAT
quirk[LXTerminal:lxterminal] = FLOAT
quirk[Sxiv:sxiv] = FLOAT
quirk[discord:Discord Updater] = WS[2] + FLOAT
quirk[Subl3:subl] = NONE
quirk[mpv:.*] = NONE
quirk[Pcmanfm:Dialog] = FULLSCREEN + FLOAT
quirk[Dmenu:dmenu.*] = FLOAT + ANYWHERE + IGNORESPAWNWS
quirk[xmenu] = ANYWHERE + IGNORESPAWNWS
quirk[Spectr-hotkeys:Dialog] = FLOAT
quirk[Xitk:Xine Window] = FLOAT + ANYWHERE
quirk[xine:Xine Window] = FLOAT + ANYWHERE
quirk[SMplayer:xv] = FLOAT + FULLSCREEN
quirk[XTerm:xterm] = XTERM_FONTADJ
quirk[Gtkdialog:gtkdialog] = FLOAT
# quirk[gtkdialog-splash:gtkdialog] = FLOAT
quirk[gtkdialog:gtkdialog-splash] = FLOAT
quirk[Jack_mixer:jack_mixer] = FLOAT
quirk[helvum:helvum] = FLOAT
quirk[lsp-plugins:.*] = FLOAT
# quirk[calfjackhost:Calf\ JACK\ Host\ \-\ session\:\ Calf\ Studio\ Gear] = FLOAT
quirk[DrumGrid:drumstick-drumgrid] = FLOAT
quirk[GUIPlayer:drumstick-guiplayer] = FLOAT
quirk[VPiano:drumstick-vpiano] = FLOAT
quirk[Amsynth:amsynth] = FLOAT
# quirk[Parole:parole] = FLOAT
quirk[Guitarix:guitarix] = FLOAT
quirk[padthv1:padthv1_jack] = FLOAT
quirk[samplv1:samplv1_jack] = FLOAT
quirk[synthv1:synthv1_jack] = FLOAT
quirk[drumkv1:drumkv1_jack] = FLOAT
quirk[drumkv1:drumkv1_jack] = FLOAT
# FLTK applies to Yoshimi synth
quirk[FLTK:FLTK] = FLOAT
quirk[FLTK:FLTK] = FLOAT
#---------------------------------------------------------------------------------------------------
# Window Manager Keybindings
#---------------------------------------------------------------------------------------------------
bind[restart] = MOD+Shift+r
bind[width_grow] = MOD+equal
bind[width_shrink] = MOD+minus
bind[height_grow] = MOD+Shift+equal
bind[height_shrink] = MOD+Shift+minus
bind[move_left] = MOD+bracketleft
bind[move_right] = MOD+bracketright
bind[move_up] = MOD+Shift+bracketleft
bind[move_down] = MOD+Shift+bracketright
bind[wind_del] = MOD+Shift+q
bind[cycle_layout] = MOD+space
bind[stack_reset] = MOD+Shift+space
bind[master_del] = MOD+comma
bind[master_add] = MOD+period
bind[stack_dec] = MOD+Shift+comma
bind[stack_inc] = MOD+Shift+period
bind[ws_next_all] = MOD+Right
bind[ws_prev_all] = MOD+Left
bind[ws_next_all] = Control+MOD1+Right
bind[ws_next] = Control+MOD1+Up
bind[ws_next] = MOD+Up
bind[ws_prev_all] = Control+MOD1+Left
bind[ws_prev] = Control+MOD1+Down
bind[ws_prev] = MOD+Down
bind[swap_next] = MOD+Shift+Up
bind[swap_prev] = MOD+Shift+Down
bind[swap_next] = MOD+Shift+j
bind[swap_prev] = MOD+Shift+k
bind[swap_main] = MOD+m
bind[flip_layout] = MOD+Shift+Left
bind[flip_layout] = MOD+Shift+Right
bind[maximize_toggle] = MOD+f
bind[iconify] = MOD+i
bind[uniconify] = MOD+MOD1+i
bind[wind_del] = MOD+q
bind[wind_kill] = MOD+Shift+q
bind[float_toggle] = MOD+t
bind[focus_next] = MOD+Tab
bind[focus_prev] = MOD+Shift+Tab
bind[focus_urgent] = MOD+u
bind[master_grow] = MOD+h
bind[master_shrink] = MOD+l
#---------------------------------------------------------------------------------------------------
# Moving Windows Keybindings
#---------------------------------------------------------------------------------------------------
#Qwerty bindings
bind[ws_1] = MOD+1
bind[ws_2] = MOD+2
bind[ws_3] = MOD+3
bind[ws_4] = MOD+4
bind[ws_5] = MOD+5
bind[ws_6] = MOD+6
bind[ws_7] = MOD+7
bind[ws_8] = MOD+8
bind[ws_9] = MOD+9
bind[ws_10] = MOD+0
bind[mvws_1] = MOD+Shift+1
bind[mvws_2] = MOD+Shift+2
bind[mvws_3] = MOD+Shift+3
bind[mvws_4] = MOD+Shift+4
bind[mvws_5] = MOD+Shift+5
bind[mvws_6] = MOD+Shift+6
bind[mvws_7] = MOD+Shift+7
bind[mvws_8] = MOD+Shift+8
bind[mvws_9] = MOD+Shift+9
bind[mvws_10] = MOD+Shift+0
#Azerty(be) bindings
#bind[ws_1] = MOD+ampersand
#bind[ws_2] = MOD+eacute
#bind[ws_3] = MOD+quotedbl
#bind[ws_4] = MOD+apostrophe
#bind[ws_5] = MOD+parenleft
#bind[ws_6] = MOD+section
#bind[ws_7] = MOD+egrave
#bind[ws_8] = MOD+exclam
#bind[ws_9] = MOD+ccedilla
#bind[ws_10] = MOD+agrave
#
#bind[mvws_1] = MOD+Shift+ampersand
#bind[mvws_2] = MOD+Shift+eacute
#bind[mvws_3] = MOD+Shift+quotedbl
#bind[mvws_4] = MOD+Shift+apostrophe
#bind[mvws_5] = MOD+Shift+parenleft
#bind[mvws_6] = MOD+Shift+section
#bind[mvws_7] = MOD+Shift+egrave
#bind[mvws_8] = MOD+Shift+exclam
#bind[mvws_9] = MOD+Shift+ccedilla
#bind[mvws_10] = MOD+Shift+agrave
#