297 lines
9.8 KiB
Org Mode
297 lines
9.8 KiB
Org Mode
#+TITLE: My custom Spectrwm configuration
|
|
#+PROPERTY: header-args :tangle spectrwm.conf
|
|
#+author: Joelchrono12
|
|
* My config
|
|
:PROPERTIES:
|
|
:DIR: ~/.config/spectrwm/org-assets/
|
|
:END:
|
|
This is my personal config for the Spectrwm window manager. Spectrwm its a really minimal program to manage windows, not as simple as DWM, while still being fairly customizable.
|
|
You can see how it looks here!
|
|
|
|
[[./org-assets/spectrwm.png][My config]]
|
|
|
|
* Initial setup
|
|
These first lines are pretty easy to understand. The variables in spectrwm describe their functionality quite well. These first lines are just setting up the minimal, simple configuration.
|
|
#+begin_src conf
|
|
# Initial setup config
|
|
workspace_limit = 9
|
|
focus_mode = manual
|
|
focus_close = previous
|
|
focus_close_wrap = 0
|
|
focus_default = last
|
|
spawn_position = next
|
|
workspace_clamp = 1
|
|
warp_focus = 0
|
|
warp_pointer = 0
|
|
|
|
#+end_src
|
|
* Window decoration & boundaries
|
|
This is a fairly customizable section of the config, we configure the borders of the windows, the colors when focused or not, as well as the gaps and padding.
|
|
|
|
I like to have quite a big amount of gaps. The focus color is the blue from the [[https://www.nordtheme.com/][Nord]] color scheme, and the unfocused is dark gray
|
|
|
|
#+begin_src conf
|
|
# Window decorations & boundaries
|
|
border_width = 3
|
|
color_focus = rgb:b4/8e/ad
|
|
color_unfocus = rgb:2e/34/40
|
|
region_padding = 0
|
|
tile_gap = 0
|
|
boundary_width = 50
|
|
|
|
#+end_src
|
|
|
|
* The bar
|
|
My bar is the most important aspect of this config, since its the one that will appear in all of my workspaces. It is a top bar and it shows all of the
|
|
available workspaces, marking the current one with an asterisk The bar borders are useless to me since I only have one screen
|
|
|
|
#+begin_src conf
|
|
# Bar configuration
|
|
bar_enabled = 1
|
|
bar_border_width = 1
|
|
bar_border[1] = rgb:18/18/18
|
|
bar_border_unfocus[1] = rgb:18/18/18
|
|
bar_color[1] = rgb:2e/34/40,rgb:eb/cb/8b,rgb:a3/be/8c,rgb:bf/61/6a,rgb:b4/8e/ad,rgb:88/c0/d0,rgb:d0/87/70,rgb:3b/42/52,rgb:4c/56/6a
|
|
bar_color_selected[1] = rgb:88/c0/d0
|
|
bar_font_color[1] = rgb:ec/ef/f4,rgb:2e/34/40,rgb:2e/34/40,rgb:eb/cb/8b,rgb:a3/be/8c,rgb:bf/61/6a,rgb:b4/8e/ad,rgb:88/c0/d0,rgb:d0/87/70,rgb:3b/42/52,rgb:4c/56/6a
|
|
bar_font = Blex Mono Nerd Font:pixelsize=15:antialias=true
|
|
bar_action = ~/.config/spectrwm/baraction.sh
|
|
bar_action_expand = 1
|
|
bar_justify = right
|
|
bar_format = +|L +@bg=0;+S +L +@bg=0; +@bg=8; +C +@fg=0; +|2R +A +@bg=0;+@fg=0; %a, %b %d %R +<
|
|
bar_at_bottom = 0
|
|
workspace_indicator = listall,markcurrent
|
|
stack_enabled = 1
|
|
clock_enabled = 1
|
|
clock_format = %a, %b %d %R
|
|
iconic_enabled = 1
|
|
maximize_hide_bar = 0
|
|
window_class_enabled = 1
|
|
window_instance_enabled = 1
|
|
window_name_enabled = 0
|
|
verbose_layout = 0
|
|
urgent_enabled = 1
|
|
urgent_collapse = 0
|
|
|
|
#+end_src
|
|
|
|
* Starting up and applications
|
|
No need to talk about these, I use these programs to set up stuff as soon as my session starts, maybe I should put some in another file, like ~.initrc~, but I've not done it yet.
|
|
|
|
#+begin_src conf
|
|
# Autorunning applications
|
|
autorun = ws[1]:nitrogen --set-auto ~/Pictures/walls/paranoid.jpg &
|
|
autorun = ws[1]:setxkbmap -layout latam &
|
|
autorun = ws[1]:alacritty
|
|
autorun = ws[1]:volumeicon
|
|
autorun = ws[1]:xfce4-power-manager
|
|
autorun = ws[1]:syncthing
|
|
autorun = ws[1]:nm-applet &
|
|
autorun = ws[1]:lxpolkit &
|
|
autorun = ws[1]:picom --experimental-backends --backend glx --blur-method 'dual_kawase' --blur-strength 6
|
|
|
|
#+end_src
|
|
|
|
Other important details are setup here, like workspace names and defining a Modifier key, I could use glyphs as workspace names, but honestly, they don't really describe that well what I want to do in them.
|
|
|
|
#+begin_src conf
|
|
# Workspace names and modkey
|
|
layout = ws[1]:4:0:0:0:vertical
|
|
name = ws[1]:WEB
|
|
name = ws[2]:DEV
|
|
name = ws[3]:MAIL
|
|
name = ws[4]:FILE
|
|
name = ws[5]:CHAT
|
|
name = ws[6]:SSH
|
|
name = ws[7]:EMACS
|
|
name = ws[8]:TERM
|
|
name = ws[9]:ETC
|
|
# ", " ", " ", " ", " ", " ", " ", " ", " ", " "
|
|
modkey = Mod4
|
|
|
|
#+end_src
|
|
* Quirks
|
|
These are different ways to treat the windows of specific programs, making them float, or appear in a certain workspace all the time. These are really powerful settings, but are still being set up, since some apps don't behave as I expect them to do so.
|
|
|
|
#+begin_src conf
|
|
# Quirks and custom per program behavior
|
|
quirk[firefox:Dialog] = FLOAT + MINIMALBORDER + TRANSSZ
|
|
quirk[Image Lounge] = FLOAT
|
|
quirk[firefox] = IGNOREPID + TRANSSZ + ANYWHERE
|
|
quirk[Thunderbird] = ANYWHERE + IGNORESPAWNWS + IGNOREPID + TRANSSZ
|
|
quirk[Claws-mail] = ANYWHERE + IGNORESPAWNWS + IGNOREPID + TRANSSZ
|
|
quirk[Xarchiver] = ANYWHERE + IGNORESPAWNWS + IGNOREPID + TRANSSZ
|
|
quirk[Lxappearance] = FLOAT
|
|
quirk[Pavucontrol] = FLOAT
|
|
quirk[Volumeicon] = FLOAT + ANYWHERE + IGNORESPAWNWS + IGNOREPID
|
|
quirk[discord:Discord Updater] = FLOAT + IGNOREPID
|
|
quirk[stalonetray] = FLOAT + ANYWHERE
|
|
quirk[trayer] = FLOAT + ANYWHERE + NOFOCUSCYCLE + MINIMALBORDER + NOFOCUSONMAP
|
|
quirk[Lxpolkit] = FLOAT + IGNOREPID +FOCUSPREV + IGNORESPAWNWS
|
|
quirk[Xfce4-power-manager-settings] = FLOAT + ANYWHERE
|
|
quirk[Nm-connection-editor] = ANYWHERE + IGNORESPAWNWS + FLOAT
|
|
quirk[Pcmanfm] = ANYWHERE + IGNORESPAWNWS
|
|
quirk[Thunar] = ANYWHERE + IGNORESPAWNWS
|
|
|
|
#+end_src
|
|
|
|
* General Keybindings
|
|
This is the defining factor of any window manager, how good and optimized are your keybindings. As you can assume, these are made to fit my needs, so your mileage may vary, but a lot of them are just the default one, in case you are wondering.
|
|
|
|
It is important to remember that default kebindings are not unbinded unless you add ~bind[] = <keybinding>~, so that's why you'll seee a few of them here and there.
|
|
#+begin_src conf
|
|
# General keybindings
|
|
bind[] = MOD+x
|
|
bind[] = MOD+v
|
|
bind[bar_toggle] = MOD+b
|
|
bind[bar_toggle_ws] = MOD+Shift+b
|
|
bind[cycle_layout] = MOD+space
|
|
bind[flip_layout] = MOD+Shift+backslash
|
|
bind[float_toggle] = MOD+t
|
|
bind[focus_main] = MOD+m
|
|
bind[focus_next] = MOD+j
|
|
bind[focus_next] = MOD+Tab
|
|
bind[focus_prev] = MOD+k
|
|
bind[focus_prev] = MOD+Shift+Tab
|
|
bind[focus_urgent] = MOD+u
|
|
bind[height_grow] = MOD+Shift+equal
|
|
bind[height_shrink] = MOD+Shift+minus
|
|
bind[iconify] = MOD+w
|
|
bind[initscr] = MOD+Shift+i
|
|
bind[lock] = MOD+Shift+Delete
|
|
bind[master_add] = MOD+Shift+comma
|
|
bind[master_del] = MOD+Shift+period
|
|
bind[master_grow] = MOD+l
|
|
bind[master_shrink] = MOD+h
|
|
bind[maximize_toggle] = MOD+e
|
|
bind[fullscreen_toggle] = MOD+Shift+e
|
|
bind[move_down] = MOD+Shift+bracketright
|
|
bind[move_left] = MOD+bracketleft
|
|
bind[move_right] = MOD+bracketright
|
|
bind[move_up] = MOD+Shift+bracketleft
|
|
bind[mvrg_1] = MOD+Shift+KP_End
|
|
bind[mvrg_2] = MOD+Shift+KP_Down
|
|
bind[mvrg_3] = MOD+Shift+KP_Next
|
|
bind[mvrg_4] = MOD+Shift+KP_Left
|
|
bind[mvrg_5] = MOD+Shift+KP_Begin
|
|
bind[mvrg_6] = MOD+Shift+KP_Right
|
|
bind[mvrg_7] = MOD+Shift+KP_Home
|
|
bind[mvrg_8] = MOD+Shift+KP_Up
|
|
bind[mvrg_9] = MOD+Shift+KP_Prior
|
|
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
|
|
bind[mvws_11] = MOD+Shift+F1
|
|
bind[mvws_12] = MOD+Shift+F2
|
|
bind[mvws_13] = MOD+Shift+F3
|
|
bind[mvws_14] = MOD+Shift+F4
|
|
bind[mvws_15] = MOD+Shift+F5
|
|
bind[mvws_16] = MOD+Shift+F6
|
|
bind[mvws_17] = MOD+Shift+F7
|
|
bind[mvws_18] = MOD+Shift+F8
|
|
bind[mvws_19] = MOD+Shift+F9
|
|
bind[mvws_20] = MOD+Shift+F10
|
|
bind[mvws_21] = MOD+Shift+F11
|
|
bind[mvws_22] = MOD+Shift+F12
|
|
bind[name_workspace] = MOD+Shift+slash
|
|
bind[quit] = MOD+Control+q
|
|
bind[raise_toggle] = MOD+Control+r
|
|
bind[restart] = MOD+Shift+r
|
|
bind[rg_1] = MOD+KP_End
|
|
bind[rg_2] = MOD+KP_Down
|
|
bind[rg_3] = MOD+KP_Next
|
|
bind[rg_4] = MOD+KP_Left
|
|
bind[rg_5] = MOD+KP_Begin
|
|
bind[rg_6] = MOD+KP_Right
|
|
bind[rg_7] = MOD+KP_Home
|
|
bind[rg_8] = MOD+KP_Up
|
|
bind[rg_9] = MOD+KP_Prior
|
|
bind[rg_next] = MOD+period
|
|
bind[rg_prev] = MOD+comma
|
|
bind[screenshot_all] = MOD+s
|
|
bind[screenshot_wind] = MOD+Shift+s
|
|
bind[search_win] = MOD+f
|
|
bind[search_workspace] = MOD+slash
|
|
bind[stack_dec] = MOD+Shift+period
|
|
bind[stack_inc] = MOD+Shift+comma
|
|
bind[stack_reset] = MOD+Shift+space
|
|
bind[swap_next] = MOD+Shift+j
|
|
bind[swap_prev] = MOD+Shift+k
|
|
bind[uniconify] = MOD+Shift+w
|
|
bind[version] = MOD+Shift+v
|
|
bind[width_grow] = MOD+equal
|
|
bind[width_shrink] = MOD+minus
|
|
bind[wind_del] = MOD+q
|
|
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[ws_11] = MOD+F1
|
|
bind[ws_12] = MOD+F2
|
|
bind[ws_13] = MOD+F3
|
|
bind[ws_14] = MOD+F4
|
|
bind[ws_15] = MOD+F5
|
|
bind[ws_16] = MOD+F6
|
|
bind[ws_17] = MOD+F7
|
|
bind[ws_18] = MOD+F8
|
|
bind[ws_19] = MOD+F9
|
|
bind[ws_20] = MOD+F10
|
|
bind[ws_21] = MOD+F11
|
|
bind[ws_22] = MOD+F12
|
|
bind[ws_next_all] = MOD+Right
|
|
bind[ws_next] = MOD+Up
|
|
bind[ws_next_move] = MOD+Shift+Right
|
|
bind[ws_prev_all] = MOD+Left
|
|
bind[ws_prev] = MOD+Down
|
|
bind[ws_prev_move] = MOD+Shift+Left
|
|
bind[ws_prior] = MOD+a
|
|
|
|
#+end_src
|
|
|
|
* Program Keybindings
|
|
These are the keybindings I setup myself, in order to open programs and execute any command I configure, they don't change much, but I add some new one from time to time.
|
|
#+begin_src conf
|
|
# Custom program keybindings
|
|
program[Discord] = discord
|
|
bind[Discord] = MOD+mod1+d
|
|
program[term] = alacritty
|
|
bind[term] = MOD+Return
|
|
program[rofi_run] = rofi -show run
|
|
bind[rofi_run] = MOD+r
|
|
program[post] = ~/.config/rofi/scripts/qpost.sh
|
|
bind[post] = MOD+mod1+p
|
|
program[rofi_pass] = rofi-pass
|
|
bind[rofi_pass] = MOD+mod1+k
|
|
program[tab_switch] = rofi -show window
|
|
bind[tab_switch] = Mod1+Tab
|
|
program[rofi] = rofi -show drun
|
|
bind[rofi] = MOD+p
|
|
program[power_menu] = ~/.config/rofi/scripts/power-menu.sh
|
|
bind[power_menu] = MOD+Shift+q
|
|
program[screenshot] = flameshot gui
|
|
bind[screenshot] = MOD+Shift+s
|
|
program[firefox] = firefox
|
|
bind[firefox] = MOD+Mod1+b
|
|
program[pcmanfm] = pcmanfm
|
|
bind[pcmanfm] = MOD+Mod1+f
|
|
program[pulsemixer] = alacritty -e pulsemixer
|
|
bind[pulsemixer] = MOD+mod1+v
|
|
program[brightup] = brightnessctl set +15
|
|
bind[brightup] = XF86MonBrightnessUp
|
|
program[brightdown] = brightnessctl set 15-
|
|
bind[brightdown] = XF86MonBrightnessDown
|
|
#+end_src
|