# -*- conf -*- # # TWM init file using twm 1.0.11 on VirtualBox GNU/Linux guest. # - Adrian C. # # Screenshot: # - https://sysphere.org/gallery/snapshots/omnic-seamless.png.html # # FAQ: # 1. Why: # - If you are forced to use Windows (or MacOS) at work even # 1440p guests with TWM in seamless mode will have minimum # overhead and need only 32MB video memory allocated. # # 2. Titlebar icons are from Graham's TWM page: # - http://www.custompc.plus.com/twm/ # # 3. Mouse pointers for Windows 10 integration: # - https://www.gnome-look.org/p/1409346/ # # 4. Where is the rest (Xdefaults, xinit): # - https://git.sysphere.org/dotfiles/tree # # 5. Fonts I use: # - http://terminus-font.sourceforge.net/ # - http://artwizaleczapka.sourceforge.net/ # - https://tobiasjung.name/profont/ # - https://github.com/liberationfonts # # 6. What is Zenburn: # - https://kippura.org/zenburnpage/ # # This work is licensed under the Creative Commons Attribution # License: http://creativecommons.org/licenses/by/2.0/ # # Base configuration # NoDefaults NoGrabServer #RestartPreviousState DecorateTransients TitleFont "-xos4-terminus-*-*-*-*-*-120-*-*-*-*-*-*" ResizeFont "-xos4-terminus-*-*-*-*-*-120-*-*-*-*-*-*" MenuFont "-xos4-terminus-*-*-*-*-*-120-*-*-*-*-*-*" IconFont "-xos4-terminus-*-*-*-*-*-120-*-*-*-*-*-*" IconManagerFont "-xos4-terminus-*-*-*-*-*-120-*-*-*-*-*-*" #ClientBorderWidth DontMoveOff IconifyByUnmapping WarpUnmapped #RandomPlacement ButtonIndent 0 FramePadding 3 NoTitleHighlight TitlePadding 2 TitleButtonBorderWidth 0 BorderWidth 1 MenuBorderWidth 1 NoMenuShadows #NoHighlight #AutoRelativeResize ##DefaultBackground "white" ForceIcons #NoRaiseOnMove OpaqueMove MoveDelta3 # - with vdesk we don't need you ('Show Iconmgr' menu still there) #ShowIconManager #StartIconified { "someapp" } # # Apps with no decorations # NoTitle { "scratchpad" "TWM Icon Manager" } NoHighlight { "scratchpad" "TWM Icon Manager" } IconManagerDontShow { "scratchpad" "TWM Icon Manager" } # # # # Zenburn Theme # # # Color # { # BorderColor "#6F6F6F" # BorderTileBackground "#3F3F3F" # BorderTileForeground "#3F3F3F" # DefaultBackground "#3F3F3F" # DefaultForeground "#DCDCCC" # TitleBackground "#1E2320" # TitleForeground "#F0DFAF" # MenuBackground "#3F3F3F" # MenuForeground "#DCDCCC" # MenuTitleBackground "#1E2320" # MenuTitleForeground "#F0DFAF" # IconBackground "#1E2320" # IconForeground "#F0DFAF" # IconBorderColor "#6F6F6F" # IconManagerBackground "#1E2320" # IconManagerForeground "#F0DFAF" # } # # Windows 10 Dark Theme [seamless] # Color { DefaultBackground "#222222" DefaultForeground "#FFFFFF" MenuBackground "#222222" MenuForeground "#FFFFFF" MenuBorderColor "#9E9FA1" MenuTitleBackground "#575759" MenuTitleForeground "#FFFFFF" IconBackground "#575759" IconForeground "#FFFFFF" IconBorderColor "#9E9FA1" IconManagerBackground "#222222" IconManagerForeground "#FFFFFF" # Borders # - if you predominantly use 1 seamless window it will always be # considered "focused" so it will have the light border even # when unfocused on the host, in which case it might be better # to flip the colors around #BorderColor "#9E9FA1" #BorderTileBackground "#2D3033" #BorderTileForeground "#2D3033" BorderColor "#2D3033" BorderTileBackground "#9E9FA1" BorderTileForeground "#9E9FA1" # Titlebars # - Firefox is too busy Dark themed, but it's one window that's # always visible and we might want to blend with it even when # native theme is "Dark" but Firefox still uses "Light" #TitleBackground "#000000" #TitleForeground "#FFFFFF" TitleBackground "#E3E4E6" TitleForeground "#18191A" } # # Mouse pointer theme # - corresponds to Xcursor pointers # Cursors { Button "hand2" Menu "left_ptr" Title "left_ptr" Frame "left_ptr" Icon "left_ptr" IconMgr "hand2" Move "fleur" Resize "plus" Wait "watch" Destroy "pirate" # Select "dot" } # # Icon theme # IconDirectory "~/.icons/twm/graham" LeftTitleButton "resize.xbm" = f.resize RightTitleButton "minimize.xbm" = f.iconify RightTitleButton "maximize.xbm" = f.fullzoom RightTitleButton "close.xbm" = f.delete # # Motion-based actions configuration # Function "move-or-lower" { f.move f.deltastop f.lower } Function "move-or-raise" { f.move f.deltastop f.raise } Function "move-or-iconify" { f.move f.deltastop f.iconify } # # Key and button binding configuration # # - Mouse bindings Button1 = : root : f.menu "mainmenu" Button2 = : root : f.menu "defops" # Button1 = c : window|icon : f.resize Button2 = c : window|icon : f.move Button3 = c : window|icon : f.iconify # Button1 = s : window|icon : f.raise Button3 = s : window|icon : f.lower # Button1 = : title : f.function "move-or-raise" Button2 = : title : f.raiselower Button3 = : title : f.function "move-or-lower" # Button2 = c : title : f.delete Button3 = c : title : f.destroy # Button1 = : icon : f.function "move-or-iconify" Button2 = : icon : f.iconify # Button1 = : iconmgr : f.iconify Button2 = : iconmgr : f.iconify # - Key bindings # * maximize awesomeMW style "m" = mod4 : all : f.fullzoom # * capture both kill methods (win and awesomeWM) "F4" = mod1 : all : f.delete "c" = mod4 : all : f.delete # * restart and quit awesomeWM style "r" = mod4 | s : all : f.restart "q" = mod4 | s : all : f.quit # * launch Emacs awesomeWM style "e" = mod4 : all : f.exec "LANG=en_US.UTF-8 xterm -geometry 175x75+700+150 -T Emacs -e emacs &" # * launch a terminal awesomeWM style "F1" = mod1 : all : f.exec "LANG=en_US.UTF-8 xterm -geometry 190x50+700+150 -T xterm &" # * hide a window by iconifying "h" = mod4 : all : f.iconify # * switch virtual desktop/tag "1" = mod4 : all : f.exec "vdesk 1" "2" = mod4 : all : f.exec "vdesk 2" "3" = mod4 : all : f.exec "vdesk 3" "4" = mod4 : all : f.exec "vdesk 4" "5" = mod4 : all : f.exec "vdesk 5" "6" = mod4 : all : f.exec "vdesk 6" "7" = mod4 : all : f.exec "vdesk 7" "8" = mod4 : all : f.exec "vdesk 8" "9" = mod4 : all : f.exec "vdesk 9" # * move window to virtual desktop/tag awesomeWM style # - $ vdesk [DESKTOP] $(xdpyinfo | sed -ne 's/^focus:.*\(0x[^,]\+\).*/\1/p') "1" = mod4 | s : all : f.exec "~/code/bin/move-vdesk 1" "2" = mod4 | s : all : f.exec "~/code/bin/move-vdesk 2" "3" = mod4 | s : all : f.exec "~/code/bin/move-vdesk 3" "4" = mod4 | s : all : f.exec "~/code/bin/move-vdesk 4" "5" = mod4 | s : all : f.exec "~/code/bin/move-vdesk 5" "6" = mod4 | s : all : f.exec "~/code/bin/move-vdesk 6" "7" = mod4 | s : all : f.exec "~/code/bin/move-vdesk 7" "8" = mod4 | s : all : f.exec "~/code/bin/move-vdesk 8" "9" = mod4 | s : all : f.exec "~/code/bin/move-vdesk 9" # - Copy/paste # * VBoxClient clipboard is unreliable with the cut buffer, even if # bridging the buffers with xclipboard it gets stuck. This is a # reliable workaround # # - intercepting Ctrl-c is impossible, use Alt+c and F1 for now and # see which one sticks in muscle memory #"c" = c : all : f.exec "xsel | xclip -selection clipboard" "c" = m : all : f.exec "xsel | xclip -selection clipboard" "F1" = : all : f.exec "xsel | xclip -selection clipboard" # - Alt+Tab and/or modN+j/k WindowRing { "Links" "xterm" "urxvt" "screen" "zsh" "irssi" "Alpine" "Emacs" "scratchpad" } # - enable win style "Tab" = mod1 : all : f.warpring "next" # - enable awesomeWM j/k style too "j" = mod4 : all : f.warpring "next" "k" = mod4 : all : f.warpring "prev" # - Alt+Tilda (partial scratchpad/quaketerm emulation) Function "launch-scratchpad" { f.exec "LANG=en_US.UTF-8 xterm -T scratchpad -geometry 320x20+320+1168 -e zsh &" f.exec "xdotool mousemove 1200 1220" f.raise } "grave" = mod1 : all : f.function "launch-scratchpad" # # Menu(s) configuration # menu "mainmenu" { "Applications" f.title "" f.nop #"XTerm HDTV" f.exec "LANG=en_US.UTF-8 xterm -geometry 320x88+0+0 -e zsh &" #"XTerm WQHD" f.exec "LANG=en_US.UTF-8 xterm -geometry 426x118+0+0 -e zsh &" "XTerm" f.exec "LANG=en_US.UTF-8 xterm -geometry 190x50+100+100 -e zsh &" "Emacs" f.exec "LANG=en_US.UTF-8 xterm -geometry 175x75+700+150 -T Emacs -e emacs &" "Links" f.exec "LANG=en_US.UTF-8 xterm -geometry 175x75+700+150 -T Links -e links &" "" f.nop "XCalc" f.exec "xcalc -rpn &" "XModmap" f.exec "xmodmap ${HOME}/.Xmodmap && xmodmap ${HOME}/.Xmodmap" "XClipboard" f.exec "xclipboard &" #"" f.nop #"Submenu1" f.menu "submenu1_menu" #"" f.nop #"Submenu2" f.menu "submenu2_menu" "" f.nop "Logout" f.quit "Restart" f.restart } #menu "submenu1_menu" #{ # "Item1" f.exec "xterm -T 'Item1' -e /path/to/bin1 &" # "Item2" f.exec "xterm -T 'Item2' -e /path/to/bin2 &" #} #menu "submenu2_menu" #{ # "Item1" f.exec "/path/to/bin1 &" # "Item2" f.exec "/path/to/bin2 &" #} menu "defops" { "TWM" f.title # "Iconify" f.iconify "Resize" f.resize "Move" f.move "Raise" f.raise "Lower" f.lower "" f.nop "Focus" f.focus "Unfocus" f.unfocus "Show Iconmgr" f.showiconmgr "Hide Iconmgr" f.hideiconmgr "" f.nop "Kill" f.destroy "Delete" f.delete "" f.nop "Refresh" f.refresh "" f.nop "Restart" f.restart "Exit" f.quit }