#
# $NetBSD: system.ctwmrc,v 1.1.2.3 2021/03/09 15:44:50 martin Exp $
#
# ctwmrc by nia
#
# An attempt to strike a usability balance that makes keys and buttons
# do the thing users of various operating systems expect them to do.
#
# Most things should be possible to accomplish with only the keyboard.
#
# Also, mostly inoffensive colours (avoiding potentially inaccessible
# combinations like red-green).
#

# don't use the default buttons or key bindings, we define our own
NoDefaults

ShowWorkSpaceManager
ShowIconManager

# 3D icon managers do not seemingly honor IconManagerHighlight,
# which makes them slightly less useful
#UseThreeDIconManagers
#UseThreeDWMap
UseThreeDBorders
#UseThreeDMenus
UseThreeDTitles

ThreeDBorderWidth         3

# TODO: we can use syscmd() in combination with xdpyinfo to detect
# HiDPI screens and set appropiate fonts.
#
# need some good scaled bitmap fonts imported - terminus or spleen
# would be good candidates
MenuFont         "-misc-fixed-medium-r-*-*-14-*-*-*-*-*-*-*"
TitleFont        "-misc-fixed-bold-r-*-*-18-*-*-*-*-*-*-*"
IconManagerFont  "-misc-fixed-medium-r-*-*-14-*-*-*-*-*-*-*"
IconFont         "-misc-fixed-bold-r-*-*-18-*-*-*-*-*-*-*"
ResizeFont       "-misc-fixed-medium-r-*-*-18-*-*-*-*-*-*-*"
WorkSpaceFont    "-misc-fixed-medium-r-*-*-14-*-*-*-*-*-*-*"

RestartPreviousState

DecorateTransients

# hide window contents while altering windows for performance
NoOpaqueMove
NoOpaqueResize

AutoOccupy
AutoRelativeResize

CenterFeedbackWindow

NoGrabServer

RaiseOnClick

DontMoveOff
MoveOffResistance	  150

ConstrainedMoveTime       0

IgnoreLockModifier

# Not actually that random.
# Means that windows do not have to be placed by hand with a mouse,
# which helps if you are using a keyboard only.
RandomPlacement          "all"

MoveDelta                 3
ClearShadowContrast       40
DarkShadowContrast        60
MovePackResistance        100

RaiseWhenAutoUnSqueeze
ShortAllWindowsMenus

#BeNiceToColorMap

NoStackMode

StayUpMenus
WarpToDefaultMenuEntry
MenuShadowDepth      1

#TitleFocus

# warp through all windows in the current workspace
WindowRing
WarpRingOnScreen

NoTitleHighlight

TitleButtonShadowDepth    1
TitleShadowDepth          1
TitleButtonBorderWidth    0
TitlePadding              0
TitleJustification        "left"
ButtonIndent              0
FramePadding		  0

LeftTitleButton           ":xpm:dot"      = f.menu "titleops"
RightTitleButton          ":xpm:resize"   = f.resize
RightTitleButton          ":xpm:cross"    = f.delete

BorderWidth               4
BorderShadowDepth         2
BorderResizeCursors

MaxIconTitleWidth         120
NoIconManagerFocus
IconManagerShadowDepth    1
IconManagerGeometry       "700x14+3-1" 7
#IconManagerGeometry       "200x-1-1+0" 1
IconifyByUnmapping

ReallyMoveInWorkspaceManager
MapWindowCurrentWorkSpace {  "black" "firebrick" }
DontToggleWorkSpaceManagerState
DontWarpCursorInWMap
NoShowOccupyAll
ReverseCurrentWorkspace
StartInMapState
WMgrHorizButtonIndent     0
WMgrVertButtonIndent      0
WorkSpaceManagerGeometry   "190x22+852+745" 4
#WorkSpaceManagerGeometry  "60x240-1-1" 1
NoWarpToMenuTitle
WarpCursor

WorkSpaces
{
    "1"    { "lavender" "black" "darkslateblue" "white" }
    "2"    { "lavender" "black" "darkslateblue" "white" }
    "3"    { "lavender" "black" "darkslateblue" "white" }
    "4"    { "lavender" "black" "darkslateblue" "white" }
#    "5"    { "lavender" "black" "darkslateblue" "white" }
}

Cursors
{
  Frame    "left_ptr"
  Title    "left_ptr"
  Icon     "left_ptr"
  IconMgr  "left_ptr"
  Move     "fleur"
  Resize   "fleur"
  Menu     "left_ptr"
  Button   "hand2"
  Wait     "watch"
  Select   "dot"
  Destroy  "pirate"
}

Color
{
  BorderColor           "firebrick"

  BorderTileBackground  "steelblue"
  BorderTileForeground  "steelblue"

  DefaultBackground     "grey70"
  DefaultForeground     "black"

  TitleBackground       "lavender"
  TitleForeground       "black"

  MenuBackground        "lavender"
  MenuForeground        "black"
  MenuTitleBackground   "darkorange"
  MenuTitleForeground   "black"
  MenuShadowColor 	"gray15"

  IconBackground        "black"
  IconForeground        "white"
  IconBorderColor       "gray45"

  IconManagerBackground "lavender"
  IconManagerForeground "black"
  IconManagerHighlight  "firebrick"

  MapWindowBackground   "lavender"
  MapWindowForeground   "black"
}

Monochrome
{
    BorderColor 		"black"

    BorderTileForeground 	"black"
    BorderTileBackground 	"white"

    TitleForeground 		"black"
    TitleBackground 		"white"

    MenuForeground 		"black"
    MenuBackground 		"white"
    MenuTitleForeground 	"black"
    MenuTitleBackground 	"white"

    MapWindowForeground 	"white"
    MapWindowBackground 	"white"
}

syscmd(/usr/X11R7/libexec/ctwm_app_menu)

menu "appmenu"
{
    "pkgsrc Applications"       f.title
    " accessories"              f.menu "Accessories"
    " games"                    f.menu "Games"
    " graphics"                 f.menu "Graphics"
    " internet"                 f.menu "Internet"
    " multimedia"               f.menu "Multimedia"
    " office"                   f.menu "Office"
    " programming"              f.menu "Programming"
    " system"                   f.menu "System"
    " Mmisc"                     f.menu "Misc"
}

menu "NetBSD"
{
    "NetBSD"			f.title
    ""				f.separator
    " badwolf"			!"badwolf &"
    " passmenu"			!"passmenu --type &"
    " xlock"			!"xlock -mode star -trek 1000 &"
    " uxterm"			!"uxterm &"
    " ait"			!"uxterm -e ait &"
    " calculator"		!"xcalc &"
#    " Clock"			!"xclock -digital &"
#    " XEyes"			!"xeyes &"
    ""				f.separator
    " applications"		f.menu "appmenu"
    ""				f.separator
    " restart CTWM"		f.twmrc
    " quit"			f.quit
}

menu "titleops"
{
    "Window"       f.title
    ""             f.separator
    " Iconify"     f.iconify
    " Resize"      f.resize
    " Move"        f.move
    ""             f.separator
    " Occupy ..."  f.occupy
    " Occupy All"  f.occupyall
    ""             f.separator
    " Raise"       f.raise
    " Lower"       f.lower
    ""             f.separator
    " Zoom"        f.fullzoom
    " Zoom-V"      f.zoom
    " Zoom-H"      f.horizoom
    ""             f.separator
    " Kill"        f.destroy
    " Close"       f.delete
}

IconManagerDontShow
{
   "xclock"
   "wmbattery"
   "wmmixer"
   "wmnd"
   "xload"
}

OccupyAll
{
   "xclock"
   "wmbattery"
   "wmmixer"
   "wmnd"
   "xload"
}

AlwaysOnTop
{
#   "xclock"
   "wmbattery"
}

NoTitle
{
   "TWM Icon Manager"
   "WorkSpaceManager"
   "wmbattery"
   "wmmixer"
   "wmnd"
   "xload"
   "xclock"
}

WindowRingExclude
{
   "TWM Icon Manager"
   "WorkSpaceManager"
   "xclock"
   "xsm"
   "xconsole"
   "wmbattery"
   "wmmixer"
   "wmnd"
   "xload"
}

StartIconified
{
}

NoBorder
{
   "TWM Icon Manager"
   "WorkSpaceManager"
   "wmbattery"
   "wmmixer"
   "wmnd"
   "xload"
   "xclock"
}

Function "raise-move"          { f.raise f.deltastop f.forcemove }
Function "raise-and-resize"    { f.raise f.deltastop f.resize }

# These are basically essential for basic functionality.

Button1 =	: title		: f.function "raise-move"
Button2 =	: title		: f.function "raise-and-resize"
Button3 =	: title | frame	: f.menu "titleops"

Button1 =	: frame		: f.function "raise-and-resize"

Button1 =	: icon | iconmgr	: f.iconify
Button2 =	: icon			: f.move
Button3 =	: icon | iconmgr	: f.raiselower

Button1 =	: root		: f.menu "NetBSD"
Button2 =	: root		: f.menu "TwmAllWindows"
Button3 =	: root		: f.menu "NetBSD"

#
# Mod1 is the "Alt/Meta" key.
# Mod4 is the "OS" key.
#

Button1 = mod1	: window	: f.forcemove
Button1 = mod4	: window	: f.forcemove
Button3 = mod1	: window 	: f.resize
Button3 = mod4	: window 	: f.resize
Button1 = mod4 | s	: window 	: f.resize

"Up"     = mod4           : all : f.upworkspace
"Down"   = mod4           : all : f.downworkspace
"Left"   = mod4           : all : f.prevworkspace
"Right"  = mod4           : all : f.nextworkspace

"Up"     = mod1 | control : all : f.upworkspace
"Down"   = mod1 | control : all : f.downworkspace
"Left"   = mod1 | control : all : f.prevworkspace
"Right"  = mod1 | control : all : f.nextworkspace

"1"      = mod1 | control : all : f.gotoworkspace "1"
"2"      = mod1 | control : all : f.gotoworkspace "2"
"3"      = mod1 | control : all : f.gotoworkspace "3"
"4"      = mod1 | control : all : f.gotoworkspace "4"
"5"      = mod1 | control : all : f.gotoworkspace "5"
"6"      = mod1 | control : all : f.gotoworkspace "6"
"7"      = mod1 | control : all : f.gotoworkspace "7"
"8"      = mod1 | control : all : f.gotoworkspace "8"
"9"      = mod1 | control : all : f.gotoworkspace "9"

"1"      = mod4 : all : f.gotoworkspace "1"
"2"      = mod4 : all : f.gotoworkspace "2"
"3"      = mod4 : all : f.gotoworkspace "3"
"4"      = mod4 : all : f.gotoworkspace "4"
"5"      = mod4 : all : f.gotoworkspace "5"
"6"      = mod4 : all : f.gotoworkspace "6"
"7"      = mod4 : all : f.gotoworkspace "7"
"8"      = mod4 : all : f.gotoworkspace "8"
"9"      = mod4 : all : f.gotoworkspace "9"

"XF86AudioRaiseVolume" = : all : !"mixerctl -w outputs.master+=5"
"XF86AudioLowerVolume" = : all : !"mixerctl -w outputs.master-=5"
"XF86AudioMute"        = : all : !"mixerctl -w outputs.master=0"

#
# "Windows" style keyboard shortcuts
#

"Tab"    = mod4           : all : f.warpring "next"
"Tab"    = mod4 | s       : all : f.warpring "prev"
"space"  = mod4 | s       : window : f.menu "titleops"
"F4"     = mod4           : window : f.delete

#
# "Mac" style keyboard shortcuts
#

"w"      = mod4           : window : f.delete
"m"      = mod4           : window : f.iconify

#
# "evilwm" style keyboard shortcuts
#


"Return" = mod4 | s : all : !"uxterm &"

"space" = mod4 : all : !"dmenu_run &"

# TODO: Fix tihs
# "XF86Eject" = : all : !"sh ~/bin/rotate-screen inverted"
"i" = mod4 | s : all : !"sh ~/bin/rotate-screen inverted"
"XF86RotateWindows" = : all : !"sh ~/bin/rotate-screen right"

# s for screensaver
"s" = mod4 | s : all : !"xlock -mode star -trek 1000 &"

"slash"  = mod4 : all     : f.menu "TwmAllWindows"
"p"      = mod4 : all     : f.menu "NetBSD"
"Menu"   = mod1 : all     : f.menu "NetBSD"
"Menu"   = mod4 : all     : f.menu "NetBSD"

Function "top-left-corner"    { f.topzoom f.changesize "960x540" }
Function "top-right-corner"    { f.rightzoom f.changesize "960x540" }
Function "bottom-left-corner"    { f.bottomzoom f.changesize "960x540" }
Function "bottom-right-corner"    { f.bottomzoom f.changesize "960x540" f.jumpright "1000000" }

# vi-style directions
"j"      = mod4 : window : f.jumpdown "10"
"k"      = mod4 : window : f.jumpup "10"
"h"      = mod4 : window : f.jumpleft "10"
"l"      = mod4 : window : f.jumpright "10"

"f"      = mod4 | s : window : f.fullzoom
"j"      = mod4 | s : window : f.bottomzoom
"k"      = mod4 | s : window : f.topzoom
"h"      = mod4 | s : window : f.leftzoom
"l"      = mod4 | s : window : f.rightzoom
"y"      = mod4 | s : window : f.function "top-left-corner"
"u"      = mod4 | s : window : f.function "top-right-corner"
"b"      = mod4 | s : window : f.function "bottom-left-corner"
"n"      = mod4 | s : window : f.function "bottom-right-corner"
