├── Initialize-LinuxDevWorkstation.sh ├── Initialize-WindowsDevWorkstation.ps1 ├── LICENSE ├── glazestart.ps1 ├── glazewm-config.yaml ├── old-glaze-config.yaml ├── old-prompt.ps1 ├── profile.ps1 ├── readme.md ├── starship.toml ├── teamscam.ahk ├── teamsmute.ahk ├── thomasrayner.json ├── vscode-extensions.txt ├── vscode-keybindings.json ├── vscode-settings.json ├── windows-terminal-settings.json ├── with-glazewm.html ├── with-glazewm.zebar.json ├── zebar-config.yaml └── zebar-settings.json /Initialize-LinuxDevWorkstation.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Install PowerShell 4 | sudo apt update -y 5 | sudo apt-get install -y wget apt-transport-https software-properties-common git 6 | source /etc/os-release 7 | wget -q https://packages.microsoft.com/config/ubuntu/$VERSION_ID/packages-microsoft-prod.deb 8 | sudo dpkg -i packages-microsoft-prod.deb 9 | rm packages-microsoft-prod.deb 10 | sudo apt-get update 11 | sudo apt-get install -y powershell 12 | 13 | # Set PowerShell as the default shell 14 | chsh -s $(which pwsh) 15 | 16 | # Dotnet sdk and runtime, latest versions of git, npm - unzip is needed to install LSPs 17 | sudo apt-get install -y dotnet-sdk-8.0 aspnetcore-runtime-8.0 git unzip npm ripgrep 18 | 19 | # Want the pre-release version of neovim 20 | sudo add-apt-repository ppa:neovim-ppa/unstable 21 | sudo apt-get update 22 | sudo apt-get install -y neovim 23 | 24 | # PSES needs to be built locally 25 | git clone https://github.com/thomasrayner/nvim ~/.config/nvim 26 | git clone https://github.com/PowerShell/PowerShellEditorServices ~/.config/PowerShellEditorServices 27 | 28 | pwsh -Command "Install-Module -Name InvokeBuild, platyps -Scope CurrentUser" 29 | cd ~/.config/PowerShellEditorServices 30 | pwsh -Command "Invoke-Build build" 31 | 32 | # coc-powershell is most easily setup this way, some interaction might be required 33 | # use Lazy to install coc.nvim and then use :CocInstall to install the PowerShell bits 34 | nvim -c "sleep 30 | q" 35 | cd ~/.local/share/nvim/lazy/coc.nvim 36 | npm ci 37 | nvim -c ":CocInstall coc-powershell | q" 38 | 39 | # Setup PowerShell profile 40 | mkdir -p ~/.config/powershell 41 | 42 | # install starship for prompt 43 | curl -sS https://starship.rs/install.sh | sh 44 | curl -o ~/.config/starship.toml https://raw.githubusercontent.com/thomasrayner/dev-workstation/master/starship.toml 45 | mkdir ~/.config/powershell 46 | touch ~/.config/powershell/Microsoft.PowerShell_profile.ps1 47 | curl -o ~/.config/powershell/Microsoft.PowerShell_profile.ps1 https://raw.githubusercontent.com/thomasrayner/dev-workstation/master/profile.ps1 48 | 49 | git config --global core.editor "nvim" 50 | 51 | # git-credential-manager 52 | wget https://github.com/git-ecosystem/git-credential-manager/releases/download/v2.6.0/gcm-linux_amd64.2.6.0.deb -O gcm-linux.deb 53 | sudo dpkg -i gcm-linux.deb 54 | rm gcm-linux.deb 55 | git-credential-manager configure 56 | -------------------------------------------------------------------------------- /Initialize-WindowsDevWorkstation.ps1: -------------------------------------------------------------------------------- 1 | #Requires -RunAsAdministrator 2 | 3 | [cmdletbinding()] 4 | param () 5 | 6 | # Install Choco and all the different Choco packages I want on a box 7 | Set-ExecutionPolicy Unrestricted -Force 8 | Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) 9 | $chocoPackages = @( 10 | 'nugetpackageexplorer', 11 | 'nuget.commandline', 12 | 'ripgrep', 13 | 'dotnetcore-sdk', 14 | 'powershell', 15 | 'pwsh', 16 | 'microsoft-edge-insider-dev', 17 | '7zip', 18 | 'git.install', 19 | 'docker-desktop', 20 | 'vscode-insiders', 21 | 'cascadiafonts', 22 | 'telegram', 23 | 'discord.install', 24 | 'autohotkey.install' 25 | 'nodejs', 26 | 'obs-studio', 27 | 'azure-cli', 28 | 'dotnetfx', 29 | 'dotnet-sdk', 30 | 'eartrumpet', 31 | 'neovim', 32 | 'firacode', 33 | 'nerd-fonts-FiraCode' 34 | 'starship' 35 | 'git-credential-manager-for-windows' 36 | ) 37 | choco install $chocoPackages -y 38 | choco install 'microsoft-windows-terminal' -y --pre 39 | 40 | # Window manager isn't on choco 41 | winget install GlazeWM 42 | $glazeConfig = (Invoke-WebRequest 'https://raw.githubusercontent.com/thomasrayner/dev-workstation/master/glazewm-config.yaml' -UseBasicParsing).Content 43 | Set-Content -Path "$env:USERPROFILE\.glzr\glazewm\config.yaml" -Value $glazeConfig -Force 44 | $zebarConfig = (Invoke-WebRequest 'https://raw.githubusercontent.com/thomasrayner/dev-workstation/master/with-glazewm.html' -UseBasicParsing).Content 45 | Set-Content -Path "$env:USERPROFILE\.glzr\zebar\starter\with-glazewm.html" -Value $zebarConfig -Force 46 | 47 | npm install -g yo generator-code vsce typescript ts-node 48 | 49 | # Alias "pog" stands for "pretty log" 50 | git config --global alias.pog "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" 51 | 52 | New-Item -Path "$home\ps" -ItemType Directory -Force -ErrorAction 0 53 | 54 | # Show extensions for known file types; current user 55 | Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "HideFileExt" -Value 0 56 | 57 | # Show extensions for known file types; all users 58 | Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\HideFileExt" -Name "DefaultValue" -Value 0 59 | Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\HideFileExt" -Name "CheckedValue" -Value 0 60 | 61 | # Make for a neat looking PS prompt for each profile 62 | $policy = (Get-PSRepository -Name 'PSGallery').InstallationPolicy 63 | Set-PSRepository -Name 'PSGallery' -InstallationPolicy 'Trusted' 64 | Install-Module -Name posh-git -Repository PSGallery -Scope CurrentUser 65 | Set-PSRepository -Name 'PSGallery' -InstallationPolicy $policy 66 | $starshipPrompt = (Invoke-WebRequest 'https://raw.githubusercontent.com/thomasrayner/dev-workstation/master/starship.toml' -UseBasicParsing).Content 67 | Set-Content -Path "$home\.config\starship.toml" -Value $starshipPrompt -Force -Encoding utf8 68 | 69 | $psProfileContent = (Invoke-WebRequest 'https://raw.githubusercontent.com/thomasrayner/dev-workstation/master/profile.ps1' -UseBasicParsing).Content 70 | foreach ($proPath in @(($profile.PSObject.Properties | Where-Object {$_.MemberType -eq 'NoteProperty'}).Value)) { 71 | Set-Content -Value $psProfileContent -Path $proPath -Force 72 | } 73 | 74 | $vscodeExtensions = (Invoke-WebRequest 'https://raw.githubusercontent.com/thomasrayner/dev-workstation/master/vscode-extensions.txt' -UseBasicParsing).Content 75 | foreach ($ext in $vscodeExtensions.Split("`n")) { 76 | code-insiders --install-extension $ext 77 | } 78 | 79 | $startupPath = "$($env:APPDATA)\Microsoft\Windows\Start Menu\Programs\Startup" 80 | New-Item -Path $startupPath -ItemType Directory -Force -ErrorAction 0 81 | $teamsMute = (Invoke-WebRequest 'https://raw.githubusercontent.com/thomasrayner/dev-workstation/master/teamsmute.ahk' -UseBasicParsing).Content 82 | $teamsCam = (Invoke-WebRequest 'https://raw.githubusercontent.com/thomasrayner/dev-workstation/master/teamscam.ahk' -UseBasicParsing).Content 83 | Set-Content -Path "$startupPath\teamsmute.ahk" -Value $teamsMute -Force 84 | Set-Content -Path "$startupPath\teamscam.ahk" -Value $teamsCam -Force 85 | 86 | # Install WSL & distributions 87 | wsl --install -d Ubuntu 88 | 89 | git config --global core.editor "nvim" 90 | 91 | # Setup Windows Terminal 92 | Set-ItemProperty -Path "HKCU:\Console" -Name "ForceV2" -Value 1 93 | Set-ItemProperty -Path "HKCU:\Console" -Name "Terminal" -Value "Windows Terminal Preview" 94 | $terminalConfig = (Invoke-WebRequest 'https://raw.githubusercontent.com/thomasrayner/dev-workstation/master/windows-terminal-settings.json' -UseBasicParsing).Content 95 | Set-Content -Path "$env:LOCALAPPDATA\Packages\Microsoft.WindowsTerminalPreview_8wekyb3d8bbwe\LocalState\settings.json" -Value $terminalConfig -Force 96 | 97 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Thomas Rayner 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /glazestart.ps1: -------------------------------------------------------------------------------- 1 | Get-Process *glazewm* | Stop-Process 2 | & glazewm 3 | -------------------------------------------------------------------------------- /glazewm-config.yaml: -------------------------------------------------------------------------------- 1 | general: 2 | # Commands to run when the WM has started (e.g. to run a script or launch 3 | # another application). Here we are running a batch script to start Zebar. 4 | startup_commands: ['shell-exec %userprofile%/.glzr/zebar/start.bat'] 5 | 6 | # Whether to automatically focus windows underneath the cursor. 7 | focus_follows_cursor: false 8 | 9 | # Whether to switch back and forth between the previously focused 10 | # workspace when focusing the current workspace. 11 | toggle_workspace_on_refocus: false 12 | 13 | cursor_jump: 14 | # Whether to automatically move the cursor on the specified trigger. 15 | enabled: true 16 | 17 | # Trigger for cursor jump: 18 | # - 'monitor_focus': Jump when focus changes between monitors. 19 | # - 'window_focus': Jump when focus changes between windows. 20 | trigger: 'window_focus' 21 | 22 | gaps: 23 | # Gap between adjacent windows. 24 | inner_gap: '2px' 25 | 26 | # Gap between windows and the screen edge. 27 | outer_gap: 28 | top: '40px' 29 | right: '5px' 30 | bottom: '5px' 31 | left: '5px' 32 | 33 | window_effects: 34 | # Visual effects to apply to the focused window. 35 | focused_window: 36 | # Highlight the window with a colored border. 37 | # ** Exclusive to Windows 11 due to API limitations. 38 | border: 39 | enabled: true 40 | color: '#8dbcff' 41 | 42 | # Visual effects to apply to non-focused windows. 43 | other_windows: 44 | border: 45 | enabled: true 46 | color: '#a1a1a1' 47 | 48 | window_behavior: 49 | # New windows are created in this state whenever possible. 50 | # Allowed values: 'tiling', 'floating'. 51 | initial_state: 'tiling' 52 | 53 | # Sets the default options for when a new window is created. This also 54 | # changes the defaults for when the state change commands, like 55 | # `set-floating`, are used without any flags. 56 | state_defaults: 57 | floating: 58 | # Whether to center floating windows by default. 59 | centered: true 60 | 61 | # Whether to show floating windows as always on top. 62 | shown_on_top: false 63 | 64 | fullscreen: 65 | # Maximize the window if possible. If the window doesn't have a 66 | # maximize button, then it'll be fullscreen'ed normally instead. 67 | maximized: false 68 | 69 | # Whether to show fullscreen windows as always on top. 70 | shown_on_top: false 71 | 72 | workspaces: 73 | - name: "1" 74 | display_name: '[1] Alpha' 75 | - name: "2" 76 | display_name: '[2] Bravo' 77 | - name: "3" 78 | display_name: '[3] Charlie' 79 | - name: "4" 80 | display_name: '[4] Delta' 81 | - name: "5" 82 | display_name: '[5] Echo' 83 | - name: "6" 84 | display_name: '[6] Foxtrot' 85 | - name: "7" 86 | display_name: '[7] Golf' 87 | - name: "8" 88 | display_name: '[8] Hotel' 89 | - name: "9" 90 | display_name: '[9] India' 91 | - name: "10" 92 | display_name: '[10] Juliet' 93 | - name: "11" 94 | display_name: '[11] Kilo' 95 | - name: "12" 96 | display_name: '[12] Lima' 97 | - name: "13" 98 | display_name: '[13] Mike' 99 | - name: "14" 100 | display_name: '[14] November' 101 | - name: "15" 102 | display_name: '[15] Oscar' 103 | - name: "16" 104 | display_name: '[16] Papa' 105 | - name: "17" 106 | display_name: '[17] Quebec' 107 | - name: "18" 108 | display_name: '[18] Romeo' 109 | - name: "19" 110 | display_name: '[19] Sierra' 111 | - name: "20" 112 | display_name: '[20] Tango' 113 | 114 | window_rules: 115 | - commands: ['ignore'] 116 | match: 117 | # Ignores any Zebar windows. 118 | - window_process: { equals: 'zebar' } 119 | 120 | # Ignores picture-in-picture windows for browsers. 121 | - window_title: { regex: '[Pp]icture.in.[Pp]icture' } 122 | window_class: { regex: 'Chrome_WidgetWin_1|MozillaDialogClass' } 123 | 124 | # Ignore rules for various 3rd-party apps. 125 | - window_process: { equals: 'PowerToys.PowerAccent' } 126 | - window_process: { equals: 'Lively' } 127 | window_class: { regex: 'HwndWrapper*' } 128 | 129 | binding_modes: 130 | # When enabled, the focused window can be resized via arrow keys or HJKL. 131 | 132 | # When enabled, all keybindings are disabled except for alt+shift+p which 133 | # returns to default keybindings. 134 | - name: 'pause' 135 | keybindings: 136 | - commands: ['wm-disable-binding-mode --name pause'] 137 | bindings: ['alt+shift+p'] 138 | 139 | keybindings: 140 | # Shift focus in a given direction. 141 | - commands: ['focus --direction left'] 142 | bindings: ['alt+h'] 143 | - commands: ['focus --direction right'] 144 | bindings: ['alt+l'] 145 | - commands: ['focus --direction up'] 146 | bindings: ['alt+k'] 147 | - commands: ['focus --direction down'] 148 | bindings: ['alt+j'] 149 | 150 | # Move focused window in a given direction. 151 | - commands: ['move --direction left'] 152 | bindings: ['alt+shift+h'] 153 | - commands: ['move --direction right'] 154 | bindings: ['alt+shift+l'] 155 | - commands: ['move --direction up'] 156 | bindings: ['alt+shift+k'] 157 | - commands: ['move --direction down'] 158 | bindings: ['alt+shift+j'] 159 | 160 | # Resize focused window by a percentage or pixel amount. 161 | - commands: ['resize --width -2%'] 162 | bindings: ['alt+oem_minus'] 163 | - commands: ['resize --width +2%'] 164 | bindings: ['alt+oem_plus'] 165 | - commands: ['resize --height +2%'] 166 | bindings: ['alt+shift+oem_plus'] 167 | - commands: ['resize --height -2%'] 168 | bindings: ['alt+shift+oem_minus'] 169 | 170 | # Disables all keybindings until alt+shift+p is pressed again. 171 | - commands: ['wm-enable-binding-mode --name pause'] 172 | bindings: ['alt+shift+p'] 173 | 174 | # Change tiling direction. This determines where new tiling windows will 175 | # be inserted. 176 | - commands: ['toggle-tiling-direction'] 177 | bindings: ['alt+x'] 178 | 179 | # Change focus from tiling windows -> floating -> fullscreen. 180 | - commands: ['wm-cycle-focus'] 181 | bindings: ['alt+f'] 182 | 183 | # Change the focused window to be floating. 184 | - commands: ['toggle-floating --centered'] 185 | bindings: ['alt+shift+f'] 186 | 187 | # Change the focused window to be tiling. 188 | - commands: ['toggle-tiling'] 189 | bindings: ['alt+shift+t'] 190 | 191 | # Change the focused window to be fullscreen. 192 | - commands: ['toggle-fullscreen'] 193 | bindings: ['alt+g'] 194 | 195 | # Close focused window. 196 | - commands: ['close'] 197 | bindings: ['alt+shift+q'] 198 | 199 | # Kill GlazeWM process safely. 200 | - commands: ['wm-exit'] 201 | bindings: ['alt+shift+e'] 202 | 203 | # Re-evaluate configuration file. 204 | - commands: 205 | [ 206 | 'wm-reload-config', 207 | 'shell-exec taskkill -IM zebar.exe -F', 208 | 'shell-exec timeout 2', 209 | 'shell-exec %userprofile%/.glzr/zebar/start.bat' 210 | ] 211 | bindings: ['alt+shift+r'] 212 | 213 | # Redraw all windows. 214 | - commands: ['wm-redraw'] 215 | bindings: ['alt+shift+w'] 216 | 217 | # Focus the next/previous workspace defined in `workspaces` config. 218 | - commands: ['focus --next-workspace'] 219 | bindings: ['alt+b'] 220 | - commands: ['focus --prev-workspace'] 221 | bindings: ['alt+v'] 222 | 223 | # Focus the workspace that last had focus. 224 | - commands: ['focus --recent-workspace'] 225 | bindings: ['alt+r'] 226 | 227 | # Change focus to a workspace defined in `workspaces` config. 228 | - commands: ['focus --workspace 1'] 229 | bindings: ['alt+1'] 230 | - commands: ['focus --workspace 2'] 231 | bindings: ['alt+2'] 232 | - commands: ['focus --workspace 3'] 233 | bindings: ['alt+3'] 234 | - commands: ['focus --workspace 4'] 235 | bindings: ['alt+4'] 236 | - commands: ['focus --workspace 5'] 237 | bindings: ['alt+5'] 238 | - commands: ['focus --workspace 6'] 239 | bindings: ['alt+6'] 240 | - commands: ['focus --workspace 7'] 241 | bindings: ['alt+7'] 242 | - commands: ['focus --workspace 7'] 243 | bindings: ['alt+c'] 244 | - commands: ['focus --workspace 8'] 245 | bindings: ['alt+8'] 246 | - commands: ['focus --workspace 9'] 247 | bindings: ['alt+9'] 248 | - commands: ['focus --workspace 10'] 249 | bindings: ['alt+0'] 250 | - commands: ['focus --workspace 11'] 251 | bindings: ['alt+insert+1'] 252 | - commands: ['focus --workspace 12'] 253 | bindings: ['alt+insert+2'] 254 | - commands: ['focus --workspace 13'] 255 | bindings: ['alt+insert+3'] 256 | - commands: ['focus --workspace 14'] 257 | bindings: ['alt+insert+4'] 258 | - commands: ['focus --workspace 15'] 259 | bindings: ['alt+insert+5'] 260 | - commands: ['focus --workspace 16'] 261 | bindings: ['alt+insert+6'] 262 | - commands: ['focus --workspace 17'] 263 | bindings: ['alt+insert+7'] 264 | - commands: ['focus --workspace 18'] 265 | bindings: ['alt+insert+8'] 266 | - commands: ['focus --workspace 19'] 267 | bindings: ['alt+insert+9'] 268 | - commands: ['focus --workspace 20'] 269 | bindings: ['alt+insert+0'] 270 | 271 | # Move the focused window's parent workspace to a monitor in a given 272 | # direction. 273 | - commands: ['move-workspace --direction left'] 274 | bindings: ['alt+left'] 275 | - commands: ['move-workspace --direction right'] 276 | bindings: ['alt+right'] 277 | - commands: ['move-workspace --direction up'] 278 | bindings: ['alt+up'] 279 | - commands: ['move-workspace --direction down'] 280 | bindings: ['alt+down'] 281 | 282 | # Move focused window to a workspace defined in `workspaces` config. 283 | - commands: ['move --workspace 1', 'focus --workspace 1'] 284 | bindings: ['alt+shift+1'] 285 | - commands: ['move --workspace 2', 'focus --workspace 2'] 286 | bindings: ['alt+shift+2'] 287 | - commands: ['move --workspace 3', 'focus --workspace 3'] 288 | bindings: ['alt+shift+3'] 289 | - commands: ['move --workspace 4', 'focus --workspace 4'] 290 | bindings: ['alt+shift+4'] 291 | - commands: ['move --workspace 5', 'focus --workspace 5'] 292 | bindings: ['alt+shift+5'] 293 | - commands: ['move --workspace 6', 'focus --workspace 6'] 294 | bindings: ['alt+shift+6'] 295 | - commands: ['move --workspace 7', 'focus --workspace 7'] 296 | bindings: ['alt+shift+7'] 297 | - commands: ['move --workspace 7', 'focus --workspace 7'] 298 | bindings: ['alt+shift+c'] 299 | - commands: ['move --workspace 8', 'focus --workspace 8'] 300 | bindings: ['alt+shift+8'] 301 | - commands: ['move --workspace 9', 'focus --workspace 9'] 302 | bindings: ['alt+shift+9'] 303 | - commands: ['move --workspace 10', 'focus --workspace 10'] 304 | bindings: ['alt+shift+0'] 305 | - commands: ['move --workspace 11', 'focus --workspace 11'] 306 | bindings: ['alt+insert+shift+1'] 307 | - commands: ['move --workspace 12', 'focus --workspace 12'] 308 | bindings: ['alt+insert+shift+2'] 309 | - commands: ['move --workspace 13', 'focus --workspace 13'] 310 | bindings: ['alt+insert+shift+3'] 311 | - commands: ['move --workspace 14', 'focus --workspace 14'] 312 | bindings: ['alt+insert+shift+4'] 313 | - commands: ['move --workspace 15', 'focus --workspace 15'] 314 | bindings: ['alt+insert+shift+5'] 315 | - commands: ['move --workspace 16', 'focus --workspace 16'] 316 | bindings: ['alt+insert+shift+6'] 317 | - commands: ['move --workspace 17', 'focus --workspace 17'] 318 | bindings: ['alt+insert+shift+7'] 319 | - commands: ['move --workspace 18', 'focus --workspace 18'] 320 | bindings: ['alt+insert+shift+8'] 321 | - commands: ['move --workspace 19', 'focus --workspace 19'] 322 | bindings: ['alt+insert+shift+9'] 323 | - commands: ['move --workspace 20', 'focus --workspace 20'] 324 | bindings: ['alt+insert+shift+0'] 325 | -------------------------------------------------------------------------------- /old-glaze-config.yaml: -------------------------------------------------------------------------------- 1 | general: 2 | # Whether to automatically focus windows underneath the cursor. 3 | focus_follows_cursor: false 4 | 5 | # Whether to jump the cursor between windows focused by the WM. 6 | cursor_follows_focus: true 7 | 8 | # Whether to switch back and forth between the previously focused workspace 9 | # when focusing the current workspace. 10 | toggle_workspace_on_refocus: true 11 | 12 | # Whether to show floating windows as always on top. 13 | show_floating_on_top: false 14 | 15 | # Amount to move floating windows by (eg. when using `alt+` on a floating window) 16 | floating_window_move_amount: "5%" 17 | 18 | # Whether to center new floating windows. 19 | center_new_floating_windows: true 20 | 21 | # *Strongly* recommended to set to 'false'. Whether to globally enable/disable 22 | # window transition animations (on minimize, close, etc). Set to 'unchanged' 23 | # to make no setting changes. 24 | window_animations: "unchanged" 25 | 26 | gaps: 27 | # Gap between adjacent windows. 28 | inner_gap: "1px" 29 | 30 | # Gap between windows and the screen edge. 31 | outer_gap: "0px" 32 | 33 | # Highlight active/inactive windows with a colored border. 34 | # ** Exclusive to Windows 11 due to API limitations. 35 | focus_borders: 36 | active: 37 | enabled: true 38 | color: "#0000ff" 39 | 40 | inactive: 41 | enabled: false 42 | color: "#ff0000" 43 | 44 | bar: 45 | height: "25px" 46 | position: "top" 47 | opacity: 0.75 48 | background: "#20242cc4" 49 | foreground: "#ffffff" 50 | font_family: "Segoe UI" 51 | font_size: "12px" 52 | padding: "4px 50px 4px 50px" 53 | offset_x: "0" 54 | offset_y: "0" 55 | border_radius: "0" 56 | components_left: 57 | - type: "workspaces" 58 | focused_workspace_background: "#ffffff66" 59 | displayed_workspace_background: "#00000000" 60 | default_workspace_background: "transparent" 61 | components_right: 62 | - type: "tiling direction" 63 | label_horizontal: "⮂" 64 | label_vertical: "⮁" 65 | background: "#ffffff33" 66 | margin: "0 4px" 67 | padding: "0 8px" 68 | 69 | workspaces: 70 | - name: "1" 71 | display_name: "[ 1 ] Right Monitor" 72 | bind_to_monitor: 1 73 | - name: "2" 74 | display_name: "[ 2 ] Email" 75 | bind_to_monitor: 2 76 | - name: "3" 77 | display_name: "[ 3 ] Browsers" 78 | bind_to_monitor: 3 79 | - name: "4" 80 | display_name: "[ 4 ] Comms" 81 | bind_to_monitor: 2 82 | - name: "5" 83 | display_name: "[ 5 ] Dev" 84 | bind_to_monitor: 3 85 | - name: "6" 86 | display_name: "[ 6 ] Foxtrot" 87 | - name: "7" 88 | display_name: "[ 7 ] Active Call" 89 | bind_to_monitor: 2 90 | - name: "8" 91 | display_name: "[ 8 ] Hotel" 92 | - name: "9" 93 | display_name: "[ 9 ] India" 94 | - name: "10" 95 | display_name: "[ 10 ] Juliet" 96 | - name: "11" 97 | display_name: "[ 11 ] Kilo" 98 | - name: "12" 99 | display_name: "[ 12 ] Lima" 100 | - name: "13" 101 | display_name: "[ 13 ] Mike" 102 | - name: "14" 103 | display_name: "[ 14 ] November" 104 | - name: "15" 105 | display_name: "[ 15 ] Oscar" 106 | - name: "16" 107 | display_name: "[ 16 ] Papa" 108 | - name: "17" 109 | display_name: "[ 17 ] Quebec" 110 | - name: "18" 111 | display_name: "[ 18 ] Romeo" 112 | - name: "19" 113 | display_name: "[ 19 ] Sierra" 114 | - name: "20" 115 | display_name: "[ 20 ] Tango" 116 | 117 | window_rules: 118 | # Task Manager requires admin privileges to manage and should be ignored unless running 119 | # the WM as admin. 120 | - command: "ignore" 121 | match_process_name: "/Taskmgr|ScreenClippingHost/" 122 | 123 | # Launches system dialogs as floating by default (eg. File Explorer save/open dialog). 124 | - command: "set floating" 125 | match_class_name: "#32770" 126 | 127 | # Do not manage picture-in-picture windows for browsers. Note that the default is for 128 | # English; change `match_title` to the window's title if you use another language. 129 | - command: "ignore" 130 | match_title: "[Pp]icture.in.[Pp]icture" 131 | match_class_name: "Chrome_WidgetWin_1|MozillaDialogClass" 132 | 133 | # Some applications (eg. Steam) have borders that extend past the normal border size. 134 | # - command: "resize borders 0px -7px -7px -7px" 135 | # match_process_name: "steam" 136 | 137 | keybindings: 138 | # Shift focus in a given direction. 139 | - command: "focus left" 140 | bindings: ["Alt+H"] 141 | - command: "focus right" 142 | bindings: ["Alt+L"] 143 | - command: "focus up" 144 | bindings: ["Alt+K"] 145 | - command: "focus down" 146 | bindings: ["Alt+J"] 147 | 148 | # Move focused window in a given direction. 149 | - command: "move left" 150 | bindings: ["Alt+Shift+H"] 151 | - command: "move right" 152 | bindings: ["Alt+Shift+L"] 153 | - command: "move up" 154 | bindings: ["Alt+Shift+K"] 155 | - command: "move down" 156 | bindings: ["Alt+Shift+J"] 157 | 158 | # Resize focused window by a percentage or pixel amount. 159 | - command: "resize width -2%" 160 | binding: "Alt+OemMinus" 161 | - command: "resize width +2%" 162 | binding: "Alt+Oemplus" 163 | - command: "resize height +2%" 164 | binding: "Alt+Shift+Oemplus" 165 | - command: "resize height -2%" 166 | binding: "Alt+Shift+OemMinus" 167 | 168 | # Change tiling direction. This determines where new tiling windows will be inserted. 169 | - command: "tiling direction toggle" 170 | binding: "Alt+X" 171 | 172 | # Change focus between floating / tiling windows. 173 | - command: "focus mode toggle" 174 | binding: "Alt+F" 175 | 176 | # Change the focused window to be floating / tiling. 177 | - command: "toggle floating" 178 | binding: "Alt+Shift+F" 179 | 180 | # Change the focused window to be maximized / unmaximized. 181 | - command: "toggle maximized" 182 | binding: "Alt+G" 183 | 184 | # Close focused window. 185 | - command: "close" 186 | binding: "Alt+Shift+Q" 187 | 188 | # Re-evaluate configuration file. 189 | - command: "reload config" 190 | binding: "Alt+Shift+R" 191 | 192 | # Focus the workspace that last had focus. 193 | - command: "focus workspace recent" 194 | binding: "Alt+Y" 195 | 196 | # Focus the next/previous workspace defined in `workspaces` config. 197 | - command: "focus workspace next" 198 | binding: "Alt+B" 199 | - command: "focus workspace prev" 200 | binding: "Alt+V" 201 | 202 | # Change focus to a workspace defined in `workspaces` config. 203 | - command: "focus workspace 1" 204 | binding: "Alt+1" 205 | - command: "focus workspace 2" 206 | binding: "Alt+2" 207 | - command: "focus workspace 3" 208 | binding: "Alt+3" 209 | - command: "focus workspace 4" 210 | binding: "Alt+4" 211 | - command: "focus workspace 5" 212 | binding: "Alt+5" 213 | - command: "focus workspace 6" 214 | binding: "Alt+6" 215 | - command: "focus workspace 7" 216 | binding: "Alt+7" 217 | - command: "focus workspace 8" 218 | binding: "Alt+8" 219 | - command: "focus workspace 9" 220 | binding: "Alt+9" 221 | - command: "focus workspace 7" 222 | binding: "Alt+C" 223 | - command: "focus workspace 6" 224 | binding: "Alt+W" 225 | - command: "focus workspace 7" 226 | binding: "Alt+E" 227 | - command: "focus workspace 8" 228 | binding: "Alt+R" 229 | - command: "focus workspace 9" 230 | binding: "Alt+T" 231 | - command: "focus workspace 10" 232 | binding: "Alt+0" 233 | - command: "focus workspace 11" 234 | binding: "Alt+Insert+1" 235 | - command: "focus workspace 12" 236 | binding: "Alt+Insert+2" 237 | - command: "focus workspace 13" 238 | binding: "Alt+Insert+3" 239 | - command: "focus workspace 14" 240 | binding: "Alt+Insert+4" 241 | - command: "focus workspace 15" 242 | binding: "Alt+Insert+5" 243 | - command: "focus workspace 16" 244 | binding: "Alt+Insert+6" 245 | - command: "focus workspace 17" 246 | binding: "Alt+Insert+7" 247 | - command: "focus workspace 18" 248 | binding: "Alt+Insert+8" 249 | - command: "focus workspace 19" 250 | binding: "Alt+Insert+9" 251 | - command: "focus workspace 20" 252 | binding: "Alt+Insert+0" 253 | 254 | # Move focused workspace to a monitor in a given direction. 255 | - command: "move workspace left" 256 | binding: "Alt+Left" 257 | - command: "move workspace right" 258 | binding: "Alt+Right" 259 | - command: "move workspace up" 260 | binding: "Alt+Up" 261 | - command: "move workspace down" 262 | binding: "Alt+Down" 263 | 264 | # Move focused window to a workspace defined in `workspaces` config. 265 | - commands: ["move to workspace 1", "focus workspace 1"] 266 | binding: "Alt+Shift+1" 267 | - commands: ["move to workspace 2", "focus workspace 2"] 268 | binding: "Alt+Shift+2" 269 | - commands: ["move to workspace 3", "focus workspace 3"] 270 | binding: "Alt+Shift+3" 271 | - commands: ["move to workspace 4", "focus workspace 4"] 272 | binding: "Alt+Shift+4" 273 | - commands: ["move to workspace 5", "focus workspace 5"] 274 | binding: "Alt+Shift+5" 275 | - commands: ["move to workspace 6", "focus workspace 6"] 276 | binding: "Alt+Shift+6" 277 | - commands: ["move to workspace 7", "focus workspace 7"] 278 | binding: "Alt+Shift+7" 279 | - commands: ["move to workspace 8", "focus workspace 8"] 280 | binding: "Alt+Shift+8" 281 | - commands: ["move to workspace 9", "focus workspace 9"] 282 | bindings: ["Alt+Shift+9"] 283 | - commands: ["move to workspace 7", "focus workspace 7"] 284 | binding: "Alt+Shift+C" 285 | - commands: ["move to workspace 6", "focus workspace 6"] 286 | binding: "Alt+Shift+W" 287 | - commands: ["move to workspace 7", "focus workspace 7"] 288 | binding: "Alt+Shift+E" 289 | - commands: ["move to workspace 8", "focus workspace 8"] 290 | binding: "Alt+Shift+R" 291 | - commands: ["move to workspace 9", "focus workspace 9"] 292 | bindings: ["Alt+Shift+T"] 293 | - commands: ["move to workspace 10", "focus workspace 10"] 294 | bindings: ["Alt+Shift+0"] 295 | - commands: ["move to workspace 11", "focus workspace 11"] 296 | bindings: ["Alt+Shift+Insert+1"] 297 | - commands: ["move to workspace 12", "focus workspace 12"] 298 | bindings: ["Alt+Shift+Insert+2"] 299 | - commands: ["move to workspace 13", "focus workspace 13"] 300 | bindings: ["Alt+Shift+Insert+3"] 301 | - commands: ["move to workspace 14", "focus workspace 14"] 302 | bindings: ["Alt+Shift+Insert+4"] 303 | - commands: ["move to workspace 15", "focus workspace 15"] 304 | bindings: ["Alt+Shift+Insert+5"] 305 | - commands: ["move to workspace 16", "focus workspace 16"] 306 | bindings: ["Alt+Shift+Insert+6"] 307 | - commands: ["move to workspace 17", "focus workspace 17"] 308 | bindings: ["Alt+Shift+Insert+7"] 309 | - commands: ["move to workspace 18", "focus workspace 18"] 310 | bindings: ["Alt+Shift+Insert+8"] 311 | - commands: ["move to workspace 19", "focus workspace 19"] 312 | bindings: ["Alt+Shift+Insert+9"] 313 | - commands: ["move to workspace 20", "focus workspace 20"] 314 | bindings: ["Alt+Shift+Insert+0"] 315 | -------------------------------------------------------------------------------- /old-prompt.ps1: -------------------------------------------------------------------------------- 1 | $global:forePromptColor = 0 2 | $global:leftArrow = [char]0xe0b2 3 | $global:rightArrow = [char]0xe0b0 4 | $global:esc = "$([char]27)" 5 | $global:fore = "$esc[38;5" 6 | $global:back = "$esc[48;5" 7 | $global:prompt = '' 8 | 9 | 10 | [System.Collections.Generic.List[ScriptBlock]]$global:PromptRight = @( 11 | # right aligned 12 | { "$fore;${errorColor}m{0}" -f $leftArrow } 13 | { "$fore;${forePromptColor}m$back;${errorColor}m{0}" -f $(if (@(get-history).Count -gt 0) {(get-history)[-1] | % { "{0:c}" -f (new-timespan $_.StartExecutionTime $_.EndExecutionTime)}}else {'00:00:00.0000000'}) } 14 | 15 | { "$fore;7m$back;${errorColor}m{0}" -f $leftArrow } 16 | { "$fore;0m$back;7m{0}" -f $(get-date -format "hh:mm:ss tt") } 17 | ) 18 | 19 | [System.Collections.Generic.List[ScriptBlock]]$global:PromptLeft = @( 20 | # left aligned 21 | { "$fore;${forePromptColor}m$back;${global:platformColor}m{0}" -f $('{0:d4}' -f $MyInvocation.HistoryId) } 22 | { "$back;22m$fore;${global:platformColor}m{0}" -f $rightArrow } 23 | 24 | { "$back;22m$fore;${forePromptColor}m{0}" -f $(if ($pushd = (Get-Location -Stack).count) { "$([char]187)" + $pushd }) } 25 | { "$fore;22m$back;5m{0}" -f $rightArrow } 26 | 27 | { "$back;5m$fore;${forePromptColor}m{0}" -f $($pwd.Drive.Name) } 28 | { "$back;14m$fore;5m{0}" -f $rightArrow } 29 | 30 | { "$back;14m$fore;${forePromptColor}m{0}$esc[0m" -f $(Split-Path $pwd -leaf) } 31 | ) 32 | function global:prompt { 33 | $global:errorColor = if ($?) {22} else {1} 34 | $global:platformColor = if ($isWindows) {11} else {117} 35 | 36 | $gitTest = $(git config -l) -match 'branch\.' 37 | if (-not [string]::IsNullOrEmpty($gitTest)) { 38 | $branch = git symbolic-ref --short -q HEAD 39 | $aheadbehind = git status -sb 40 | $distance = '' 41 | 42 | if (-not [string]::IsNullOrEmpty($(git diff --staged))) { $branchbg = 3 } 43 | else { $branchbg = 5 } 44 | 45 | if (-not [string]::IsNullOrEmpty($(git status -s))) { $arrowfg = 3 } 46 | else { $arrowfg = 5 } 47 | 48 | if ($aheadbehind -match '\[\w+.*\w+\]$') { 49 | $ahead = [regex]::matches($aheadbehind, '(?<=ahead\s)\d+').value 50 | $behind = [regex]::matches($aheadbehind, '(?<=behind\s)\d+').value 51 | 52 | $distance = "$back;15m$fore;${arrowfg}m{0}$esc[0m" -f $rightArrow 53 | if ($ahead) {$distance += "$back;15m$fore;${forePromptColor}m{0}$esc[0m" -f "a$ahead"} 54 | if ($behind) {$distance += "$back;15m$fore;${forePromptColor}m{0}$esc[0m" -f "b$behind"} 55 | $distance += "$fore;15m{0}$esc[0m" -f $rightArrow 56 | } 57 | else { 58 | $distance = "$fore;${arrowfg}m{0}$esc[0m" -f $rightArrow 59 | } 60 | 61 | [System.Collections.Generic.List[ScriptBlock]]$gitPrompt = @( 62 | { "$back;${branchbg}m$fore;14m{0}$esc[0m" -f $rightArrow } 63 | { "$back;${branchbg}m$fore;${forePromptColor}m{0}$esc[0m" -f $branch } 64 | { "{0}$esc[0m" -f $distance } 65 | ) 66 | $leftSide = -join @($global:PromptLeft + $gitPrompt + {" "}).Invoke() 67 | } 68 | else { 69 | $leftSide = -join @($global:PromptLeft + { "$fore;14m{0}$esc[0m" -f $rightArrow } + {" "}).Invoke() 70 | } 71 | 72 | $rightSide = -join ($global:promptRight).Invoke() 73 | $offset = $global:host.UI.RawUI.BufferSize.Width - 28 74 | $prompt = -join @($leftSide, "$esc[${offset}G", $rightSide, "$esc[0m" + "`n`r`> ") 75 | $prompt 76 | } 77 | 78 | 79 | # Set this alias every time PowerShell launches so I stop mistyping code-insiders 80 | Set-Alias code code-insiders 81 | -------------------------------------------------------------------------------- /profile.ps1: -------------------------------------------------------------------------------- 1 | Set-Alias vim nvim 2 | Set-Alias code code-insiders 3 | Invoke-Expression (&starship init powershell) 4 | cd ~/ 5 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # quick dev workstation bootstrapping 2 | 3 | This repo contains settings files and quick scripts for bare bones dev workstation setup. It'll just about always take more tweaking, but this'll get you going. 4 | 5 | ## nvim .config 6 | 7 | I put my neovim .config in it's own repo for some reason: [thomasrayner/nvim](https://github.com/thomasrayner/nvim) -------------------------------------------------------------------------------- /starship.toml: -------------------------------------------------------------------------------- 1 | format = """ 2 | $directory$git_branch$git_commit[](fg:#641a64)[$git_status](bg:#641a64)[](fg:#641a64)$dotnet$rust$golang$java$nodejs$python$cmd_duration 3 | $character""" 4 | # Get editor completions based on the config schema 5 | "$schema" = 'https://starship.rs/config-schema.json' 6 | 7 | # Inserts a blank line between shell prompts 8 | add_newline = false 9 | 10 | # Disable the package module, hiding it from the prompt completely 11 | [package] 12 | disabled = true 13 | 14 | # my config 15 | 16 | [cmd_duration] 17 | min_time = 100 18 | format = '[](fg:#035306)[$duration](bold fg:green bg:#035306)[](fg:#035306)' 19 | 20 | [directory] 21 | truncation_length = 150 22 | truncation_symbol = '.../' 23 | format = '[](fg:#03507d)[$path](fg:bright-cyan bg:#03507d)[](fg:#03507d)' 24 | 25 | [direnv] 26 | disabled = false 27 | 28 | [dotnet] 29 | heuristic = true 30 | 31 | [git_branch] 32 | format = '[](fg:#420000)[$symbol$branch](fg:bright-red bg:#420000)[](fg:#420000)' 33 | 34 | [git_commit] 35 | format = '[](fg:#8c7012)[$hash](bold fg:bright-yellow bg:#8c7012)[](fg:#8c7012)' 36 | commit_hash_length = 6 37 | tag_symbol = '🔖 ' 38 | only_detached = false 39 | tag_disabled = false 40 | 41 | [git_state] 42 | # nil 43 | 44 | [git_status] 45 | # Show the info relative to the upstream first: how many commits ahead/behind/diverged/conflicted 46 | # Show the info for current working set after: deleted, staged, renamed, modified, untracked. 47 | format = "$ahead$behind$diverged$conflicted$deleted$staged$renamed$modified$untracked" 48 | conflicted = "[≠ $count](bold fg:purple bg:#641a64)" 49 | ahead = "[⇡ $count](bold fg:purple bg:#641a64)" 50 | behind = "[⇣ $count](bold fg:purple bg:#641a64)" 51 | diverged = "[⇕ $count](bold fg:purple bg:#641a64)" 52 | untracked = "[+ $count](bold fg:blue bg:#641a64)" 53 | modified = "[~ $count](bold fg:cyan bg:#641a64)" 54 | staged = "[++ $count](bold fg:green bg:#641a64)" 55 | renamed = "[» $count](bold fg:white bg:#641a64)" 56 | deleted = "[✘ $count](bold fg:red bg:#641a64)" 57 | -------------------------------------------------------------------------------- /teamscam.ahk: -------------------------------------------------------------------------------- 1 | 2 | #Persistent 3 | SetTitleMatchMode, 2 4 | 5 | ; Hotkey to switch focus to Teams meeting and send CTRL+Shift+M 6 | ^+x:: 7 | IfWinExist, Microsoft Teams 8 | { 9 | WinActivate 10 | Sleep, 100 ; Adjust this delay if needed 11 | Send, ^+o 12 | } 13 | else 14 | { 15 | MsgBox, Microsoft Teams is not active. 16 | } 17 | return 18 | -------------------------------------------------------------------------------- /teamsmute.ahk: -------------------------------------------------------------------------------- 1 | #Persistent 2 | SetTitleMatchMode, 2 3 | 4 | ; Hotkey to switch focus to Teams meeting and send CTRL+Shift+M 5 | ^+z:: 6 | IfWinExist, Microsoft Teams 7 | { 8 | WinActivate 9 | Sleep, 100 ; Adjust this delay if needed 10 | Send, ^+m 11 | } 12 | else 13 | { 14 | MsgBox, Microsoft Teams is not active. 15 | } 16 | return 17 | -------------------------------------------------------------------------------- /thomasrayner.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json", 3 | "blocks": [ 4 | { 5 | "type": "prompt", 6 | "alignment": "left", 7 | "segments": [ 8 | { 9 | "foreground": "#757575", 10 | "properties": { 11 | "postfix": "", 12 | "prefix": "", 13 | "text": "┌ " 14 | }, 15 | "style": "plain", 16 | "type": "text" 17 | }, 18 | { 19 | "background": "#91ddff", 20 | "foreground": "#100e23", 21 | "powerline_symbol": "", 22 | "properties": { 23 | "stack_count_enabled": true, 24 | "folder_icon": "📁", 25 | "style": "agnoster_short" 26 | }, 27 | "style": "powerline", 28 | "type": "path" 29 | }, 30 | { 31 | "background": "#95ffa4", 32 | "foreground": "#100e23", 33 | "powerline_symbol": "", 34 | "properties": { 35 | "ahead_and_behind_color": "#f26d50", 36 | "ahead_color": "#c38ae7", 37 | "behind_color": "#f17c37", 38 | "branch_ahead_icon": "↑", 39 | "branch_behind_icon": "↓", 40 | "branch_gone": "≢", 41 | "branch_icon": " ", 42 | "branch_identical_icon": "≡", 43 | "cherry_pick_icon": "✓ ", 44 | "color_background": true, 45 | "commit_icon": "▷ ", 46 | "display_status_detail": true, 47 | "local_changes_color": "#ff9248", 48 | "local_staged_icon": "", 49 | "local_working_icon": "", 50 | "merge_icon": "◴ ", 51 | "no_commits_icon": "[no commits]", 52 | "rebase_icon": "Ɫ ", 53 | "stash_count_icon": "", 54 | "status_colors_enabled": true, 55 | "status_separator_icon": " │", 56 | "tag_icon": "▶ " 57 | }, 58 | "style": "powerline", 59 | "type": "git" 60 | }, 61 | { 62 | "background": "#ff8080", 63 | "foreground": "#ffffff", 64 | "powerline_symbol": "", 65 | "properties": { 66 | "display_exit_code": false, 67 | "error_icon": "❌", 68 | "postfix": " ", 69 | "prefix": " " 70 | }, 71 | "style": "powerline", 72 | "type": "exit" 73 | } 74 | ] 75 | }, 76 | { 77 | "type": "prompt", 78 | "alignment": "right", 79 | "segments": [ 80 | { 81 | "type": "executiontime", 82 | "style": "powerline", 83 | "powerline_symbol": "\uE0B0", 84 | "foreground": "#ffffff", 85 | "background": "#8800dd", 86 | "properties": { 87 | "threshold": 0, 88 | "style": "roundrock" 89 | } 90 | }, 91 | { 92 | "background": "#ffffff", 93 | "foreground": "#8800dd", 94 | "properties": { 95 | "postfix": "", 96 | "time_format": "15:04:05" 97 | }, 98 | "style": "powerline", 99 | "powerline_symbol": "\uE0B0", 100 | "type": "time" 101 | } 102 | ] 103 | }, 104 | { 105 | "type": "prompt", 106 | "alignment": "left", 107 | "newline": true, 108 | "segments": [ 109 | { 110 | "foreground": "#757575", 111 | "properties": { 112 | "postfix": "", 113 | "prefix": "", 114 | "text": "└ " 115 | }, 116 | "style": "plain", 117 | "type": "text" 118 | }, 119 | { 120 | "type": "exit", 121 | "style": "powerline", 122 | "foreground": "lightGreen", 123 | "properties": { 124 | "display_exit_code": false, 125 | "always_enabled": true, 126 | "error_color": "red", 127 | "prefix": "$" 128 | } 129 | } 130 | ] 131 | } 132 | ] 133 | } -------------------------------------------------------------------------------- /vscode-extensions.txt: -------------------------------------------------------------------------------- 1 | andenetalexander.vim-cheatsheet 2 | asvetliakov.vscode-neovim 3 | azurepolicy.azurepolicyextension 4 | ban.spellright 5 | be5invis.vscode-custom-css 6 | bierner.emojisense 7 | cliffordfajardo.highlight-line-vscode 8 | codezombiech.gitignore 9 | darkriszty.markdown-table-prettify 10 | davidanson.vscode-markdownlint 11 | donjayamanne.kusto 12 | eamodio.gitlens 13 | eliverlara.andromeda 14 | eriklynd.json-tools 15 | esbenp.prettier-vscode 16 | fabiospampinato.vscode-diff 17 | formulahendry.code-runner 18 | ghmcadams.lintlens 19 | github.copilot 20 | github.copilot-chat 21 | github.vscode-pull-request-github 22 | golang.go 23 | ibm.output-colorizer 24 | johnpapa.vscode-peacock 25 | mhutchie.git-graph 26 | ms-azure-devops.azure-pipelines 27 | ms-azuretools.vscode-azureappservice 28 | ms-azuretools.vscode-azurefunctions 29 | ms-azuretools.vscode-azureresourcegroups 30 | ms-azuretools.vscode-azurestorage 31 | ms-azuretools.vscode-docker 32 | ms-dotnettools.csharp 33 | ms-dotnettools.dotnet-interactive-vscode 34 | ms-dotnettools.vscode-dotnet-runtime 35 | ms-python.gather 36 | ms-python.python 37 | ms-python.vscode-pylance 38 | ms-toolsai.jupyter 39 | ms-toolsai.jupyter-keymap 40 | ms-toolsai.jupyter-renderers 41 | ms-toolsai.vscode-jupyter-cell-tags 42 | ms-toolsai.vscode-jupyter-slideshow 43 | ms-vscode-remote.remote-containers 44 | ms-vscode-remote.remote-wsl 45 | ms-vscode.azure-account 46 | ms-vscode.powershell 47 | ms-vscode.vscode-typescript-tslint-plugin 48 | ms-vscode.wordcount 49 | ms-vsliveshare.vsliveshare 50 | ms-vsliveshare.vsliveshare-pack 51 | msazurermtools.azurerm-vscode-tools 52 | naumovs.color-highlight 53 | orta.vscode-jest 54 | pkief.material-icon-theme 55 | pnp.polacode 56 | ranger-4297.yagpdb-cc-updated 57 | rosshamish.kuskus-kusto-syntax-highlighting 58 | shd101wyy.markdown-preview-enhanced 59 | talhabalaj.actual-font-changer 60 | thmsrynr.cat-facts 61 | thmsrynr.rightlines 62 | thmsrynr.vscode-namegen 63 | tinkertrain.theme-panda 64 | twxs.cmake 65 | tyriar.windows-terminal 66 | usernamehw.errorlens 67 | vintharas.learn-vim 68 | visualstudioexptteam.intellicode-api-usage-examples 69 | visualstudioexptteam.vscodeintellicode 70 | vscode-icons-team.vscode-icons 71 | vscodevim.vim 72 | vsls-contrib.codetour 73 | yzane.markdown-pdf 74 | zhuangtongfa.material-theme 75 | -------------------------------------------------------------------------------- /vscode-keybindings.json: -------------------------------------------------------------------------------- 1 | // Place your key bindings in this file to overwrite the defaults 2 | [ 3 | { 4 | "key": "ctrl+alt+l", 5 | "command": "workbench.action.terminal.focusNext", 6 | "when": "terminalFocus" 7 | }, 8 | { 9 | "key": "ctrl+alt+h", 10 | "command": "workbench.action.terminal.focusPrevious", 11 | "when": "terminalFocus" 12 | }, 13 | { 14 | "key": "ctrl+alt+j", 15 | "command": "workbench.action.togglePanel" 16 | }, 17 | { 18 | "key": "ctrl+alt+t", 19 | "command": "workbench.action.terminal.new", 20 | "when": "terminalFocus" 21 | }, 22 | { 23 | "key": "ctrl+alt+w", 24 | "command": "workbench.action.terminal.kill", 25 | "when": "terminalFocus" 26 | }, 27 | { 28 | "command": "workbench.action.toggleSidebarVisibility", 29 | "key": "ctrl+e" 30 | }, 31 | { 32 | "command": "workbench.files.action.focusFilesExplorer", 33 | "key": "ctrl+e", 34 | "when": "editorTextFocus" 35 | }, 36 | { 37 | "key": "n", 38 | "command": "explorer.newFile", 39 | "when": "filesExplorerFocus && !inputFocus" 40 | }, 41 | { 42 | "command": "renameFile", 43 | "key": "r", 44 | "when": "filesExplorerFocus && !inputFocus" 45 | }, 46 | { 47 | "command": "explorer.newFolder", 48 | "key": "shift+n", 49 | "when": "explorerViewletFocus" 50 | }, 51 | { 52 | "command": "workbench.action.newWindow", 53 | "key": "shift+n", 54 | "when": "!explorerViewletFocus" 55 | }, 56 | { 57 | "command": "deleteFile", 58 | "key": "d", 59 | "when": "filesExplorerFocus && !inputFocus" 60 | }, 61 | ] -------------------------------------------------------------------------------- /vscode-settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "[jsonc]": { 3 | "editor.defaultFormatter": "vscode.json-language-features" 4 | }, 5 | "azure.resourceFilter": [ 6 | "cdc5aeea-15c5-4db6-b079-fcadd2505dc2/8cb2e938-4609-4592-92e1-281e86d756bf", 7 | "e9ba2328-fd22-44fd-ad5d-59c11d34e20c/bce6e995-ae03-4d35-96ca-7eb1c30f2e3f" 8 | ], 9 | "azureFunctions.showCoreToolsWarning": false, 10 | "breadcrumbs.enabled": true, 11 | "codetour.showMarkers": true, 12 | "color-highlight.markerType": "outline", 13 | "color-highlight.matchWords": true, 14 | "debug.console.fontFamily": "FiraMono Nerd Font Mono", 15 | "debug.inlineValues": true, 16 | "diffEditor.renderSideBySide": true, 17 | "editor.accessibilitySupport": "off", 18 | "editor.codeLensFontFamily": "FiraMono Nerd Font Mono", 19 | "editor.cursorBlinking": "phase", 20 | "editor.cursorSmoothCaretAnimation": "on", 21 | "editor.cursorSurroundingLines": 10, 22 | "editor.cursorWidth": 3, 23 | "editor.fontFamily": "FiraMono Nerd Font Mono", 24 | "editor.formatOnPaste": true, 25 | "editor.guides.indentation": false, 26 | "editor.inlayHints.fontFamily": "FiraMono Nerd Font Mono", 27 | "editor.inlineSuggest.enabled": true, 28 | "editor.lineNumbers": "relative", 29 | "editor.minimap.enabled": true, 30 | "editor.minimap.renderCharacters": false, 31 | "editor.minimap.showSlider": "always", 32 | "editor.minimap.size": "fit", 33 | "editor.renderWhitespace": "all", 34 | "editor.rulers": [ 35 | 80, 36 | 150 37 | ], 38 | "editor.suggestSelection": "first", 39 | "editor.tabCompletion": "on", 40 | "editor.tokenColorCustomizations": { 41 | "comments": "#7c551b" 42 | }, 43 | "errorLens.enabledDiagnosticLevels": [ 44 | "warning", 45 | "info" 46 | ], 47 | "explorer.confirmDragAndDrop": false, 48 | "extensions.experimental.affinity": { 49 | "asvetliakov.vscode-neovim": 1, 50 | "vscodevim.vim": 1 51 | }, 52 | "extensions.ignoreRecommendations": false, 53 | "git.openRepositoryInParentFolders": "never", 54 | "github.copilot.enable": { 55 | "*": false, 56 | "plaintext": false, 57 | "markdown": false, 58 | "scminput": false 59 | }, 60 | "liveshare.featureSet": "insiders", 61 | "notebook.output.textLineLimit": 9999999999999, 62 | "omnisharp.enableRoslynAnalyzers": true, 63 | "peacock.favoriteColors": [ 64 | { 65 | "name": "Angular Red", 66 | "value": "#b52e31" 67 | }, 68 | { 69 | "name": "Auth0 Orange", 70 | "value": "#eb5424" 71 | }, 72 | { 73 | "name": "Azure Blue", 74 | "value": "#007fff" 75 | }, 76 | { 77 | "name": "C# Purple", 78 | "value": "#68217A" 79 | }, 80 | { 81 | "name": "Gatsby Purple", 82 | "value": "#639" 83 | }, 84 | { 85 | "name": "Go Cyan", 86 | "value": "#5dc9e2" 87 | }, 88 | { 89 | "name": "Java Blue-Gray", 90 | "value": "#557c9b" 91 | }, 92 | { 93 | "name": "JavaScript Yellow", 94 | "value": "#f9e64f" 95 | }, 96 | { 97 | "name": "Mandalorian Blue", 98 | "value": "#1857a4" 99 | }, 100 | { 101 | "name": "Node Green", 102 | "value": "#215732" 103 | }, 104 | { 105 | "name": "React Blue", 106 | "value": "#00b3e6" 107 | }, 108 | { 109 | "name": "Something Different", 110 | "value": "#832561" 111 | }, 112 | { 113 | "name": "Vue Green", 114 | "value": "#42b883" 115 | } 116 | ], 117 | "powershell.codeFormatting.alignPropertyValuePairs": false, 118 | "powershell.codeFormatting.autoCorrectAliases": true, 119 | "powershell.codeFormatting.pipelineIndentationStyle": "IncreaseIndentationForFirstPipeline", 120 | "powershell.codeFormatting.preset": "Stroustrup", 121 | "powershell.codeFormatting.trimWhitespaceAroundPipe": true, 122 | "powershell.codeFormatting.useCorrectCasing": true, 123 | "powershell.codeFormatting.whitespaceBetweenParameters": true, 124 | "powershell.codeFormatting.whitespaceInsideBrace": false, 125 | "powershell.debugging.createTemporaryIntegratedConsole": true, 126 | "powershell.helpCompletion": "LineComment", 127 | "powershell.integratedConsole.showOnStartup": false, 128 | "powershell.integratedConsole.suppressStartupBanner": true, 129 | "powershell.promptToUpdatePowerShell": false, 130 | "powershell.startAsLoginShell.linux": true, 131 | "powershell.startAutomatically": true, 132 | "prettier.documentSelectors": [ 133 | "*.json", 134 | "*.yaml" 135 | ], 136 | "scm.inputFontFamily": "FiraMono Nerd Font Mono", 137 | "search.showLineNumbers": true, 138 | "security.workspace.trust.untrustedFiles": "open", 139 | "team.showWelcomeMessage": false, 140 | "terminal.external.windowsExec": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe", 141 | "terminal.integrated.copyOnSelection": true, 142 | "terminal.integrated.cursorBlinking": true, 143 | "terminal.integrated.cursorStyle": "line", 144 | "terminal.integrated.drawBoldTextInBrightColors": false, 145 | "terminal.integrated.fontFamily": "FiraMono Nerd Font Mono", 146 | "terminal.integrated.fontSize": 16, 147 | "terminal.integrated.rendererType": "auto", 148 | "terminal.integrated.rightClickBehavior": "copyPaste", 149 | "terminal.integrated.tabs.location": "left", 150 | "vim.leader": " ", 151 | "vim.sneak": true, 152 | "vim.incsearch": true, 153 | "vim.hlsearch": true, 154 | "vim.normalModeKeyBindingsNonRecursive": [ 155 | { 156 | "before": [ 157 | "", 158 | "t", 159 | "f" 160 | ], 161 | "commands": [ 162 | "workbench.action.quickOpen" 163 | ] 164 | }, 165 | { 166 | "before": [ 167 | "", 168 | "t", 169 | "s" 170 | ], 171 | "commands": [ 172 | "workbench.action.findInFiles" 173 | ] 174 | }, 175 | { 176 | "before": [ 177 | "", 178 | "a" 179 | ], 180 | "commands": [ 181 | ":bprevious" 182 | ] 183 | }, 184 | { 185 | "before": [ 186 | "", 187 | "g" 188 | ], 189 | "commands": [ 190 | ":bnext" 191 | ] 192 | }, 193 | { 194 | "before": [ 195 | "", 196 | "v" 197 | ], 198 | "commands": [ 199 | ":vsplit" 200 | ] 201 | }, 202 | { 203 | "before": [ 204 | "", 205 | "s" 206 | ], 207 | "commands": [ 208 | ":split" 209 | ] 210 | }, 211 | { 212 | "before": [ 213 | "leader", 214 | "H" 215 | ], 216 | "commands": [ 217 | "workbench.action.focusLeftGroup" 218 | ] 219 | }, 220 | { 221 | "before": [ 222 | "", 223 | "J" 224 | ], 225 | "commands": [ 226 | "workbench.action.focusBelowGroup" 227 | ] 228 | }, 229 | { 230 | "before": [ 231 | "", 232 | "K" 233 | ], 234 | "commands": [ 235 | "workbench.action.focusAboveGroup" 236 | ] 237 | }, 238 | { 239 | "before": [ 240 | "", 241 | "L" 242 | ], 243 | "commands": [ 244 | "workbench.action.focusRightGroup" 245 | ] 246 | }, 247 | { 248 | "before": [ 249 | "S" 250 | ], 251 | "commands": [ 252 | "editor.action.addSelectionToNextFindMatch", 253 | "editor.action.startFindReplaceAction" 254 | ], 255 | "args": { 256 | "seedSearchStringFromSelection": true, 257 | "isRegex": true, 258 | "replaceString": "", 259 | "searchString": "" 260 | } 261 | }, 262 | { 263 | "before": [ 264 | "L" 265 | ], 266 | "after": [ 267 | "$" 268 | ] 269 | }, 270 | { 271 | "before": [ 272 | "H" 273 | ], 274 | "after": [ 275 | "^" 276 | ] 277 | }, 278 | { 279 | "before": [ 280 | "", 281 | "y" 282 | ], 283 | "commands": [ 284 | "editor.action.clipboardCopyAction" 285 | ] 286 | }, 287 | { 288 | "before": [ 289 | "", 290 | "p" 291 | ], 292 | "commands": [ 293 | "editor.action.clipboardPasteAction" 294 | ] 295 | }, 296 | { 297 | "before": [ 298 | "", 299 | "k" 300 | ], 301 | "commands": [ 302 | "editor.action.showHover" 303 | ] 304 | }, 305 | { 306 | "before": [ 307 | "J" 308 | ], 309 | "commands": [ 310 | "editor.action.moveLinesDownAction" 311 | ] 312 | }, 313 | { 314 | "before": [ 315 | "K" 316 | ], 317 | "commands": [ 318 | "editor.action.moveLinesUpAction" 319 | ] 320 | }, 321 | { 322 | "before": [ 323 | ">" 324 | ], 325 | "commands": [ 326 | "editor.action.indentLines" 327 | ] 328 | }, 329 | { 330 | "before": [ 331 | "<" 332 | ], 333 | "commands": [ 334 | "editor.action.outdentLines" 335 | ] 336 | }, 337 | { 338 | "before": [ 339 | "" 340 | ], 341 | "after": [ 342 | "", 343 | "z", 344 | "z" 345 | ] 346 | }, 347 | { 348 | "before": [ 349 | "" 350 | ], 351 | "after": [ 352 | "", 353 | "z", 354 | "z" 355 | ] 356 | }, 357 | { 358 | "before": [ 359 | "{" 360 | ], 361 | "after": [ 362 | "{", 363 | "z", 364 | "z" 365 | ] 366 | }, 367 | { 368 | "before": [ 369 | "}" 370 | ], 371 | "after": [ 372 | "}", 373 | "z", 374 | "z" 375 | ] 376 | }, 377 | { 378 | "before": [ 379 | "n" 380 | ], 381 | "after": [ 382 | "n", 383 | "z", 384 | "z" 385 | ] 386 | }, 387 | { 388 | "before": [ 389 | "N" 390 | ], 391 | "after": [ 392 | "N", 393 | "z", 394 | "z" 395 | ] 396 | }, 397 | { 398 | "before": [ 399 | "" 400 | ], 401 | "after": [ 402 | "", 403 | "z", 404 | "z" 405 | ] 406 | }, 407 | { 408 | "before": [ 409 | "" 410 | ], 411 | "after": [ 412 | "", 413 | "z", 414 | "z" 415 | ] 416 | }, 417 | { 418 | "before": [ 419 | "%" 420 | ], 421 | "after": [ 422 | "%", 423 | "z", 424 | "z" 425 | ] 426 | }, 427 | { 428 | "before": [ 429 | "*" 430 | ], 431 | "after": [ 432 | "*", 433 | "z", 434 | "z" 435 | ] 436 | }, 437 | { 438 | "before": [ 439 | "#" 440 | ], 441 | "after": [ 442 | "#", 443 | "z", 444 | "z" 445 | ] 446 | }, 447 | { 448 | "before": [ 449 | "", 450 | "c", 451 | "a" 452 | ], 453 | "commands": [ 454 | "editor.action.quickFix" 455 | ] 456 | } 457 | ], 458 | "vim.visualModeKeyBindingsNonRecursive": [ 459 | { 460 | "before": [ 461 | "S" 462 | ], 463 | "commands": [ 464 | "editor.action.startFindReplaceAction" 465 | ], 466 | "args": { 467 | "seedSearchStringFromSelection": true, 468 | "isRegex": true, 469 | "replaceString": "editor.getSelections()[0].getText()", 470 | "searchString": "editor.getSelections()[0].getText()" 471 | } 472 | }, 473 | { 474 | "before": [ 475 | "", 476 | "y" 477 | ], 478 | "commands": [ 479 | "editor.action.clipboardCopyAction" 480 | ] 481 | }, 482 | { 483 | "before": [ 484 | "", 485 | "p" 486 | ], 487 | "commands": [ 488 | "editor.action.clipboardPasteAction" 489 | ] 490 | }, 491 | { 492 | "before": [ 493 | "J" 494 | ], 495 | "commands": [ 496 | "editor.action.moveLinesDownAction" 497 | ] 498 | }, 499 | { 500 | "before": [ 501 | "K" 502 | ], 503 | "commands": [ 504 | "editor.action.moveLinesUpAction" 505 | ] 506 | }, 507 | { 508 | "before": [ 509 | ">" 510 | ], 511 | "commands": [ 512 | "editor.action.indentLines" 513 | ] 514 | }, 515 | { 516 | "before": [ 517 | "<" 518 | ], 519 | "commands": [ 520 | "editor.action.outdentLines" 521 | ] 522 | } 523 | ], 524 | "vim.useSystemClipboard": false, 525 | "vim.highlightedyank.enable": true, 526 | "vim.enableNeovim": true, 527 | "vim.neovimPath": "C:\\tools\\neovim\\nvim-win64\\bin\\nvim.exe", 528 | "vscode-neovim.neovimExecutablePaths.darwin": "C:\\tools\\neovim\\nvim-win64\\bin\\nvim.exe", 529 | "vscode-neovim.neovimExecutablePaths.linux": "C:\\tools\\neovim\\nvim-win64\\bin\\nvim.exe", 530 | "vscode-neovim.neovimExecutablePaths.win32": "C:\\tools\\neovim\\nvim-win64\\bin\\nvim.exe", 531 | "vscode_custom_css.imports": [ 532 | "file:///c:/Users/thrayner/.vscode-insiders/extensions/brandonkirbyson.vscode-animations-2.0.1/dist/updateHandler.js" 533 | ], 534 | "vsintellicode.modify.editor.suggestSelection": "automaticallyOverrodeDefaultValue", 535 | "window.openWithoutArgumentsInNewWindow": "off", 536 | "window.restoreWindows": "none", 537 | "window.title": "${dirty}${activeEditorLong}${separator}${rootPath}${separator}${appName}", 538 | "workbench.colorTheme": "One Dark Pro Mix", 539 | "workbench.editor.highlightModifiedTabs": true, 540 | "workbench.editor.labelFormat": "medium", 541 | "workbench.editor.openPositioning": "first", 542 | "workbench.editor.scrollToSwitchTabs": true, 543 | "workbench.editor.tabSizing": "shrink", 544 | "workbench.iconTheme": "vscode-icons", 545 | "workbench.startupEditor": "newUntitledFile", 546 | "[typescript]": { 547 | "editor.defaultFormatter": "vscode.typescript-language-features" 548 | }, 549 | "glassit.alpha": 220, 550 | "[javascript]": { 551 | "editor.defaultFormatter": "vscode.typescript-language-features" 552 | }, 553 | "editor.insertSpaces": true, 554 | "[go]": { 555 | "editor.formatOnSave": false 556 | } 557 | } 558 | -------------------------------------------------------------------------------- /windows-terminal-settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "$help": "https://aka.ms/terminal-documentation", 3 | "$schema": "https://aka.ms/terminal-profiles-schema-preview", 4 | "actions": 5 | [ 6 | { 7 | "command": 8 | { 9 | "action": "splitPane", 10 | "split": "auto", 11 | "splitMode": "duplicate" 12 | }, 13 | "id": "User.splitPane.A6751878" 14 | }, 15 | { 16 | "command": "toggleSplitOrientation", 17 | "id": "User.toggleSplitOrientation" 18 | }, 19 | { 20 | "command": 21 | { 22 | "action": "copy", 23 | "singleLine": false 24 | }, 25 | "id": "User.copy.644BA8F2" 26 | }, 27 | { 28 | "command": "paste", 29 | "id": "User.paste" 30 | } 31 | ], 32 | "defaultProfile": "{2c4de342-38b7-51cf-b940-2309a097f518}", 33 | "keybindings": 34 | [ 35 | { 36 | "id": "User.splitPane.A6751878", 37 | "keys": "alt+shift+d" 38 | }, 39 | { 40 | "id": "User.toggleSplitOrientation", 41 | "keys": "alt+shift+t" 42 | }, 43 | { 44 | "id": null, 45 | "keys": "shift+insert" 46 | }, 47 | { 48 | "id": "User.copy.644BA8F2", 49 | "keys": "ctrl+shift+c" 50 | }, 51 | { 52 | "id": null, 53 | "keys": "ctrl+insert" 54 | }, 55 | { 56 | "id": "User.paste", 57 | "keys": "ctrl+shift+v" 58 | } 59 | ], 60 | "launchMode": "default", 61 | "newTabMenu": 62 | [ 63 | { 64 | "type": "remainingProfiles" 65 | } 66 | ], 67 | "profiles": 68 | { 69 | "defaults": 70 | { 71 | "colorScheme": "Dracula", 72 | "font": 73 | { 74 | "face": "FiraMono Nerd Font Mono" 75 | }, 76 | "opacity": 75, 77 | "useAcrylic": true 78 | }, 79 | "list": 80 | [ 81 | { 82 | "colorScheme": "Dracula", 83 | "guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}", 84 | "hidden": false, 85 | "name": "PowerShell", 86 | "opacity": 75, 87 | "source": "Windows.Terminal.PowershellCore" 88 | }, 89 | { 90 | "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}", 91 | "hidden": false, 92 | "name": "Azure Cloud Shell", 93 | "source": "Windows.Terminal.Azure" 94 | }, 95 | { 96 | "font": 97 | { 98 | "face": "FiraMono Nerd Font Mono" 99 | }, 100 | "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}", 101 | "hidden": false, 102 | "name": "Ubuntu", 103 | "opacity": 75, 104 | "source": "Windows.Terminal.Wsl", 105 | "useAcrylic": true 106 | }, 107 | { 108 | "guid": "{a5a97cb8-8961-5535-816d-772efe0c6a3f}", 109 | "hidden": false, 110 | "name": "Arch", 111 | "source": "Windows.Terminal.Wsl" 112 | }, 113 | { 114 | "guid": "{2ece5bfe-50ed-5f3a-ab87-5cd4baafed2b}", 115 | "hidden": false, 116 | "name": "Git Bash", 117 | "source": "Git" 118 | } 119 | ] 120 | }, 121 | "schemes": 122 | [ 123 | { 124 | "background": "#282A36", 125 | "black": "#21222C", 126 | "blue": "#BD93F9", 127 | "brightBlack": "#6272A4", 128 | "brightBlue": "#D6ACFF", 129 | "brightCyan": "#A4FFFF", 130 | "brightGreen": "#69FF94", 131 | "brightPurple": "#FF92DF", 132 | "brightRed": "#FF6E6E", 133 | "brightWhite": "#FFFFFF", 134 | "brightYellow": "#FFFFA5", 135 | "cursorColor": "#FFFFFF", 136 | "cyan": "#8BE9FD", 137 | "foreground": "#F8F8F2", 138 | "green": "#50FA7B", 139 | "name": "Dracula", 140 | "purple": "#FF79C6", 141 | "red": "#FF5555", 142 | "selectionBackground": "#FFFFFF", 143 | "white": "#F8F8F2", 144 | "yellow": "#F1FA8C" 145 | }, 146 | { 147 | "background": "#300A24", 148 | "black": "#171421", 149 | "blue": "#0037DA", 150 | "brightBlack": "#767676", 151 | "brightBlue": "#08458F", 152 | "brightCyan": "#2C9FB3", 153 | "brightGreen": "#26A269", 154 | "brightPurple": "#A347BA", 155 | "brightRed": "#C01C28", 156 | "brightWhite": "#F2F2F2", 157 | "brightYellow": "#A2734C", 158 | "cursorColor": "#FFFFFF", 159 | "cyan": "#3A96DD", 160 | "foreground": "#FFFFFF", 161 | "green": "#26A269", 162 | "name": "Ubuntu20.04LTSColorScheme", 163 | "purple": "#881798", 164 | "red": "#C21A23", 165 | "selectionBackground": "#FFFFFF", 166 | "white": "#CCCCCC", 167 | "yellow": "#A2734C" 168 | }, 169 | { 170 | "background": "#0F1419", 171 | "black": "#000000", 172 | "blue": "#36A3D9", 173 | "brightBlack": "#323232", 174 | "brightBlue": "#68D5FF", 175 | "brightCyan": "#C7FFFD", 176 | "brightGreen": "#EAFE84", 177 | "brightPurple": "#FFA3AA", 178 | "brightRed": "#FF6565", 179 | "brightWhite": "#FFFFFF", 180 | "brightYellow": "#FFF779", 181 | "cursorColor": "#FFFFFF", 182 | "cyan": "#95E6CB", 183 | "foreground": "#E6E1CF", 184 | "green": "#B8CC52", 185 | "name": "ayu", 186 | "purple": "#F07178", 187 | "red": "#FF3333", 188 | "selectionBackground": "#FFFFFF", 189 | "white": "#FFFFFF", 190 | "yellow": "#E7C547" 191 | } 192 | ], 193 | "themes": [] 194 | } 195 | -------------------------------------------------------------------------------- /with-glazewm.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 22 | 23 | 24 |
25 | 26 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /with-glazewm.zebar.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://github.com/glzr-io/zebar/raw/v2.4.0/resources/widget-schema.json", 3 | "htmlPath": "./with-glazewm.html", 4 | "zOrder": "normal", 5 | "shownInTaskbar": false, 6 | "focused": false, 7 | "resizable": false, 8 | "transparent": true, 9 | "presets": [ 10 | { 11 | "name": "default", 12 | "anchor": "top_left", 13 | "offsetX": "0px", 14 | "offsetY": "0px", 15 | "width": "100%", 16 | "height": "40px", 17 | "monitorSelection": { 18 | "type": "all" 19 | } 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /zebar-config.yaml: -------------------------------------------------------------------------------- 1 | # Yaml is white-space sensitive (use 2 spaces to indent). 2 | 3 | ### 4 | # Define a new window with an id of 'bar'. This window can then be opened 5 | # via the Zebar cli by running 'zebar open bar --args '. 6 | # 7 | # Docs regarding window: https://some-future-docs-link.com 8 | window/bar: 9 | providers: ['self'] 10 | # Width of the window in physical pixels. 11 | width: '{{ self.args.MONITOR_WIDTH }}' 12 | # Height of the window in physical pixels. 13 | height: '40' 14 | # X-position of the window in physical pixels. 15 | position_x: '{{ self.args.MONITOR_X }}' 16 | # Y-position of the window in physical pixels. 17 | position_y: '{{ self.args.MONITOR_Y }}' 18 | # Whether to show the window above/below all others. 19 | # Allowed values: 'always_on_top', 'always_on_bottom', 'normal'. 20 | z_order: 'normal' 21 | # Whether the window should be shown in the taskbar. 22 | shown_in_taskbar: false 23 | # Whether the window should have resize handles. 24 | resizable: false 25 | # Styles to apply globally within the window. For example, we can use 26 | # this to import the Nerdfonts icon font. Ref https://www.nerdfonts.com/cheat-sheet 27 | # for a cheatsheet of available Nerdfonts icons. 28 | global_styles: | 29 | @import "https://www.nerdfonts.com/assets/css/webfont.css"; 30 | # CSS styles to apply to the root element within the window. Using CSS 31 | # nesting, we can also target nested elements (e.g. below we set the 32 | # color and margin-right of icons). 33 | styles: | 34 | display: grid; 35 | grid-template-columns: 1fr 1fr 1fr; 36 | align-items: center; 37 | height: 100%; 38 | color: rgb(255 255 255 / 90%); 39 | font-family: ui-monospace, monospace; 40 | font-size: 12px; 41 | padding: 4px 24px; 42 | border-bottom: 1px solid rgb(255 255 255 / 5%);; 43 | background: linear-gradient(rgb(0 0 0 / 90%), rgb(5 2 20 / 85%)); 44 | 45 | i { 46 | color: rgb(115 130 175 / 95%); 47 | margin-right: 7px; 48 | } 49 | 50 | group/left: 51 | styles: | 52 | display: flex; 53 | align-items: center; 54 | 55 | template/glazewm_workspaces: 56 | styles: | 57 | display: flex; 58 | align-items: center; 59 | 60 | .workspace { 61 | background: rgb(255 255 255 / 5%); 62 | margin-right: 4px; 63 | padding: 4px 8px; 64 | color: rgb(255 255 255 / 90%); 65 | border: none; 66 | border-radius: 2px; 67 | cursor: pointer; 68 | 69 | &.displayed { 70 | background: rgb(255 255 255 / 15%); 71 | } 72 | 73 | &.focused, 74 | &:hover { 75 | background: rgb(75 115 255 / 50%); 76 | } 77 | } 78 | providers: ['glazewm'] 79 | events: 80 | - type: 'click' 81 | fn_path: 'script.js#focusWorkspace' 82 | selector: '.workspace' 83 | template: | 84 | @for (workspace of glazewm.currentWorkspaces) { 85 | 91 | } 92 | 93 | group/center: 94 | styles: | 95 | justify-self: center; 96 | 97 | group/right: 98 | styles: | 99 | justify-self: end; 100 | display: flex; 101 | 102 | .template { 103 | margin-left: 20px; 104 | } 105 | 106 | template/glazewm_other: 107 | providers: ['glazewm'] 108 | styles: | 109 | .binding-mode, 110 | .tiling-direction { 111 | background: rgb(255 255 255 / 15%); 112 | color: rgb(255 255 255 / 90%); 113 | border-radius: 2px; 114 | padding: 4px 6px; 115 | margin: 0; 116 | } 117 | 118 | template: | 119 | @for (bindingMode of glazewm.bindingModes) { 120 | 121 | {{ bindingMode.displayName ?? bindingMode.name }} 122 | 123 | } 124 | 125 | @if (glazewm.tilingDirection === 'horizontal') { 126 | 127 | } @else { 128 | 129 | } 130 | 131 | -------------------------------------------------------------------------------- /zebar-settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://github.com/glzr-io/zebar/raw/v2.4.0/resources/settings-schema.json", 3 | "startupConfigs": [ 4 | { 5 | "path": "starter/with-glazewm.zebar.json", 6 | "preset": "default" 7 | } 8 | ] 9 | } 10 | --------------------------------------------------------------------------------