From fe212c0a92464c652f51c0f2be1ff3a91db408ce Mon Sep 17 00:00:00 2001 From: AquaAI 2026-07-26 Date: Sun, 26 Jul 2026 16:46:02 -0400 Subject: [PATCH] fix(i3): window startup --- .../audio/executable_system-start-audio.sh | 20 ------------ home/bin/executable_start-brave.sh | 29 +++++++++++++++++ home/dot_config/hypr/startup-framework.conf | 2 +- home/dot_config/i3/brave-workspace-9.json | 32 +++++++++++++++++++ home/dot_config/i3/config.tmpl | 6 ++-- 5 files changed, 65 insertions(+), 24 deletions(-) create mode 100644 home/bin/executable_start-brave.sh create mode 100644 home/dot_config/i3/brave-workspace-9.json diff --git a/home/bin/audio/executable_system-start-audio.sh b/home/bin/audio/executable_system-start-audio.sh index 21c675b..78982ec 100644 --- a/home/bin/audio/executable_system-start-audio.sh +++ b/home/bin/audio/executable_system-start-audio.sh @@ -22,15 +22,6 @@ function fixPulse() { fi } -# Start up programs that use audio. -function launchi3() { - if [ -z "$skipi3" ]; then - echo Opening i3wm sound workspaces - sleep .1 && i3-msg 'workspace 5; exec brave-browser' - #sleep 5.1 && python ~/bin/start-firefox.py - fi -} - # Set up sinks. function setupSinks() { pactl set-default-sink speakers @@ -66,23 +57,12 @@ function restartWireplumber() { systemctl --user restart wireplumber } -# arg parser -for arg in "$@" -do - # Skip commands for i3wm - if [[ $arg == *"-s"* ]]; then - skipi3=true - fi -done - # Wire sinks setupSinks # Eurorack audio interface sh ~/bin/audio/es9start.sh -launchi3 systemctl --user restart polybar sleep 5 restartWireplumber - diff --git a/home/bin/executable_start-brave.sh b/home/bin/executable_start-brave.sh new file mode 100644 index 0000000..8b60d57 --- /dev/null +++ b/home/bin/executable_start-brave.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# Restore Brave and place its windows after they finish opening. + +preferences="$HOME/.config/BraveSoftware/Brave-Browser/Default/Preferences" + +function enable_session_restore { + if [ ! -f "$preferences" ] || ! command -v jq &> /dev/null; then + return + fi + + temp_file="$(mktemp "${preferences}.XXXXXX")" + if jq '.session.restore_on_startup = 1 | .profile.exit_type = "Normal"' \ + "$preferences" > "$temp_file"; then + mv "$temp_file" "$preferences" + else + rm -f "$temp_file" + fi +} + +enable_session_restore +i3-msg 'workspace 9; append_layout ~/.config/i3/brave-workspace-9.json; workspace 5' +brave-browser --restore-last-session & + +# Brave creates restored windows asynchronously and after startup focus has moved. +for _ in {1..20}; do + sleep 0.5 + i3-msg '[class="^Brave-browser$" workspace="^(?!9$).*"] move to workspace 5' \ + > /dev/null +done diff --git a/home/dot_config/hypr/startup-framework.conf b/home/dot_config/hypr/startup-framework.conf index 8133dd0..85d88df 100644 --- a/home/dot_config/hypr/startup-framework.conf +++ b/home/dot_config/hypr/startup-framework.conf @@ -1,3 +1,3 @@ exec-once = [workspace 1 silent] $browser exec-once = [workspace 2 silent] $terminal -exec-once = [workspace 10 silent] flatpak run org.signal.Signal \ No newline at end of file +exec-once = [workspace 10 silent] flatpak run org.signal.Signal diff --git a/home/dot_config/i3/brave-workspace-9.json b/home/dot_config/i3/brave-workspace-9.json new file mode 100644 index 0000000..490271a --- /dev/null +++ b/home/dot_config/i3/brave-workspace-9.json @@ -0,0 +1,32 @@ +{ + "border": "normal", + "floating": "auto_off", + "layout": "splitv", + "type": "con", + "nodes": [ + { + "border": "pixel", + "floating": "auto_off", + "percent": 0.5, + "swallows": [ + { + "class": "^Brave-browser$", + "title": ".*Music Assistant.*" + } + ], + "type": "con" + }, + { + "border": "pixel", + "floating": "auto_off", + "percent": 0.5, + "swallows": [ + { + "class": "^Brave-browser$", + "title": ".*YouTube.*" + } + ], + "type": "con" + } + ] +} diff --git a/home/dot_config/i3/config.tmpl b/home/dot_config/i3/config.tmpl index 7f998d6..68e2022 100644 --- a/home/dot_config/i3/config.tmpl +++ b/home/dot_config/i3/config.tmpl @@ -264,7 +264,7 @@ exec_always --no-startup-id g13d --config ~/.config/g13/resolve.bind --logo ~/.c # Startup programs exec --no-startup-id i3-msg "workspace $wsSignal; exec flatpak run org.signal.Signal;" -exec --no-startup-id i3-msg "workspace $ws5" +exec --no-startup-id ~/bin/start-brave.sh exec --no-startup-id i3-msg "workspace $ws1; exec alacritty" # Starts Jack for audio @@ -338,8 +338,8 @@ for_window [class="Minecraft*" title="Minecraft*"] move to workspace $wsGames for_window [class="Minecraft*" title="Minecraft*"] exec --no-startup-id cat ~/.config/g13/minecraft.bind > /tmp/g13-0 && sleep .1 && cat ~/.config/g13/minecraft.lpbm > /tmp/g13-0 # Arkham Knight -for_window [class="steam_app_208650" title="*"] move to workspace $wsGames -for_window [class="steam_app_208650" title="*"] exec --no-startup-id cat ~/.config/g13/arkham-knight.bind > /tmp/g13-0 && sleep .1 && cat ~/.config/g13/arkham-knight.lpbm > /tmp/g13-0 +for_window [class="steam_app_208650" title=".*"] move to workspace $wsGames +for_window [class="steam_app_208650" title=".*"] exec --no-startup-id cat ~/.config/g13/arkham-knight.bind > /tmp/g13-0 && sleep .1 && cat ~/.config/g13/arkham-knight.lpbm > /tmp/g13-0 # Factorio for_window [class="factorio" title="Factorio*"] move to workspace $wsGames