Update xmonad configuration
							parent
							
								
									7fd7f2d50d
								
							
						
					
					
						commit
						8ffc997f99
					
				
							
								
								
									
										2
									
								
								.vimrc
								
								
								
								
							
							
						
						
									
										2
									
								
								.vimrc
								
								
								
								
							| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
" General config ______________________
 | 
					" General config {{{
 | 
				
			||||||
"
 | 
					"
 | 
				
			||||||
" Most acronyms are unreadable, but they keep the overview
 | 
					" Most acronyms are unreadable, but they keep the overview
 | 
				
			||||||
" I have to do a quick :h lookup for most of these anyway.
 | 
					" I have to do a quick :h lookup for most of these anyway.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,85 +1,154 @@
 | 
				
			||||||
import           System.IO
 | 
					 | 
				
			||||||
import           XMonad
 | 
					import           XMonad
 | 
				
			||||||
import           XMonad.Config.Desktop
 | 
					 | 
				
			||||||
import           XMonad.Hooks.DynamicLog
 | 
					import           XMonad.Hooks.DynamicLog
 | 
				
			||||||
import           XMonad.Hooks.ManageDocks
 | 
					import           XMonad.Hooks.ManageDocks
 | 
				
			||||||
import           XMonad.Layout.BorderResize
 | 
					
 | 
				
			||||||
import           XMonad.Layout.Fullscreen
 | 
					import           XMonad.Layout.Magnifier
 | 
				
			||||||
import           XMonad.Layout.Grid
 | 
					 | 
				
			||||||
import           XMonad.Layout.NoBorders      (noBorders, smartBorders)
 | 
					 | 
				
			||||||
import           XMonad.Layout.ResizableTile  (MirrorResize (..),
 | 
					 | 
				
			||||||
                                               ResizableTall (..))
 | 
					 | 
				
			||||||
import           XMonad.Layout.Spacing
 | 
					import           XMonad.Layout.Spacing
 | 
				
			||||||
import           XMonad.Layout.Tabbed         (Theme (..), shrinkText,
 | 
					import           XMonad.Layout.Tabbed         (Theme (..), shrinkText,
 | 
				
			||||||
                                               tabbedAlways)
 | 
					                                               tabbedAlways)
 | 
				
			||||||
 | 
					import           XMonad.Layout.ThreeColumns
 | 
				
			||||||
import           XMonad.Layout.ToggleLayouts  (ToggleLayout (..), toggleLayouts)
 | 
					import           XMonad.Layout.ToggleLayouts  (ToggleLayout (..), toggleLayouts)
 | 
				
			||||||
import           XMonad.Layout.WindowArranger
 | 
					import           XMonad.Layout.WindowArranger
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import           XMonad.Util.EZConfig
 | 
					import           XMonad.Util.EZConfig
 | 
				
			||||||
 | 
					import           XMonad.Util.Loggers
 | 
				
			||||||
import           XMonad.Util.Paste
 | 
					import           XMonad.Util.Paste
 | 
				
			||||||
import           XMonad.Util.Run              (spawnPipe)
 | 
					import           XMonad.Util.Run              (spawnPipe)
 | 
				
			||||||
 | 
					import           XMonad.Util.Ungrab
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import           XMonad.Actions.CycleWS
 | 
					import           XMonad.Actions.CycleWS
 | 
				
			||||||
import           XMonad.Actions.GridSelect
 | 
					 | 
				
			||||||
import           XMonad.Actions.WindowGo
 | 
					import           XMonad.Actions.WindowGo
 | 
				
			||||||
import           XMonad.Hooks.EwmhDesktops
 | 
					
 | 
				
			||||||
import           XMonad.Hooks.ManageHelpers
 | 
					import           XMonad.Hooks.ManageHelpers
 | 
				
			||||||
import           XMonad.Hooks.ScreenCorners
 | 
					import           XMonad.Hooks.ScreenCorners
 | 
				
			||||||
 | 
					import           XMonad.Hooks.StatusBar
 | 
				
			||||||
 | 
					import           XMonad.Hooks.StatusBar.PP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import qualified XMonad.Util.Hacks            as Hacks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- EWMH compliance
 | 
				
			||||||
 | 
					import           XMonad.Hooks.EwmhDesktops
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import qualified Data.Map.Strict              as M
 | 
					import qualified Data.Map.Strict              as M
 | 
				
			||||||
import qualified XMonad.StackSet              as W
 | 
					import qualified XMonad.StackSet              as W
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Magnifier is off by default (can be controlled using arrow keys)
 | 
				
			||||||
 | 
					myLayout = threeColMid |||
 | 
				
			||||||
 | 
					           magnifiercz magnificationFactorH tiled |||
 | 
				
			||||||
 | 
					           magnifiercz magnificationFactorV (Mirror tiled) |||
 | 
				
			||||||
 | 
					           Full
 | 
				
			||||||
 | 
					  where
 | 
				
			||||||
 | 
					    magnificationFactorV = 1.384
 | 
				
			||||||
 | 
					    magnificationFactorH = 1.621
 | 
				
			||||||
 | 
					    tiled   = Tall nmaster delta ratio
 | 
				
			||||||
 | 
					    threeCol = ThreeCol nmaster delta ratio
 | 
				
			||||||
 | 
					    threeColMid = ThreeColMid nmaster delta ratio
 | 
				
			||||||
 | 
					    nmaster = 1
 | 
				
			||||||
 | 
					    ratio   = 1/2
 | 
				
			||||||
 | 
					    delta   = 4/100
 | 
				
			||||||
 | 
					
 | 
				
			||||||
myStartupHook = do
 | 
					myStartupHook = do
 | 
				
			||||||
  addScreenCorners [ (SCLowerRight, nextWS)
 | 
					  addScreenCorners [ (SCUpperRight, nextWS)
 | 
				
			||||||
                   , (SCLowerRight, prevWS)
 | 
					                   , (SCUpperLeft, prevWS)
 | 
				
			||||||
                   ]
 | 
					                   ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
main = do
 | 
					myConfig = def
 | 
				
			||||||
  xmproc <- spawnPipe "xmobar"
 | 
					  {
 | 
				
			||||||
  xmonad $ def {
 | 
					 | 
				
			||||||
    terminal = "alacritty"
 | 
					    terminal = "alacritty"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  -- Use Win key instead of Alt
 | 
					  -- Use Win key instead of Alt
 | 
				
			||||||
  , modMask = mod4Mask
 | 
					  , modMask = mod4Mask
 | 
				
			||||||
      , workspaces = ["α", "β", "γ", "δ", "ε"]
 | 
					  , workspaces = ["α", "β", "γ", "δ", "ε", "ζ", "η", "θ", "ι", "κ"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  -- Styling
 | 
					  -- Styling
 | 
				
			||||||
      , focusedBorderColor = "#000000"
 | 
					  , focusedBorderColor = "#888"
 | 
				
			||||||
      , normalBorderColor = "#111111"
 | 
					  , normalBorderColor = "#000"
 | 
				
			||||||
  , borderWidth = 2
 | 
					  , borderWidth = 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  -- Hooks
 | 
					  -- Hooks
 | 
				
			||||||
  , startupHook = myStartupHook
 | 
					  , startupHook = myStartupHook
 | 
				
			||||||
      , layoutHook = screenCornerLayoutHook $ layoutHook def
 | 
					  , layoutHook = screenCornerLayoutHook $ avoidStruts myLayout
 | 
				
			||||||
      , handleEventHook = handleEventHook def <+> screenCornerEventHook
 | 
					  , handleEventHook = handleEventHook def <> Hacks.windowedFullscreenFixEventHook <+> screenCornerEventHook
 | 
				
			||||||
      , logHook = dynamicLogWithPP xmobarPP
 | 
					  } `additionalKeysP` myKeysP
 | 
				
			||||||
        { ppOutput = hPutStrLn xmproc
 | 
					    `removeKeysP` myRemoveKeysP
 | 
				
			||||||
        , ppTitle = xmobarColor "green" "" . shorten 50
 | 
					
 | 
				
			||||||
        }
 | 
					-- Keybindings to be added/overridden
 | 
				
			||||||
  } `additionalKeysP`
 | 
					myKeysP = [
 | 
				
			||||||
    -- Keybindings to be added
 | 
					  -- Fit floating windows back to layout
 | 
				
			||||||
    [ ("M-S-<Space>", withFocused $ windows . W.sink)
 | 
					    ("M-S-<Space>", withFocused $ windows . W.sink)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  -- Use rofi to launch programs
 | 
				
			||||||
  , ("M-p", spawn "rofi -show run")
 | 
					  , ("M-p", spawn "rofi -show run")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  -- Map insert key to paste from clipboard
 | 
					  -- Map insert key to paste from clipboard
 | 
				
			||||||
  , ("<Insert>", pasteSelection)
 | 
					  , ("<Insert>", pasteSelection)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  -- Map print screen to take a screenshot with flameshot
 | 
					  -- Map print screen to take a screenshot with flameshot
 | 
				
			||||||
  , ("<Print>", spawn "flameshot gui")
 | 
					  , ("<Print>", spawn "flameshot gui")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  -- Map audio keys to control volume
 | 
					  -- Map audio keys to control volume
 | 
				
			||||||
  , ("<XF86AudioRaiseVolume>", spawn "pactl set-sink-volume @DEFAULT_SINK@ +5%")
 | 
					  , ("<XF86AudioRaiseVolume>", spawn "pactl set-sink-volume @DEFAULT_SINK@ +5%")
 | 
				
			||||||
  , ("<XF86AudioLowerVolume>", spawn "pactl set-sink-volume @DEFAULT_SINK@ -5%")
 | 
					  , ("<XF86AudioLowerVolume>", spawn "pactl set-sink-volume @DEFAULT_SINK@ -5%")
 | 
				
			||||||
  , ("<XF86AudioMute>", spawn "pactl set-sink-mute @DEFAULT_SINK@ toggle")
 | 
					  , ("<XF86AudioMute>", spawn "pactl set-sink-mute @DEFAULT_SINK@ toggle")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  -- Map brightness keys to control brightness with brightnessctl
 | 
					  -- Map brightness keys to control brightness with brightnessctl
 | 
				
			||||||
  , ("<XF86MonBrightnessUp>", spawn "brightnessctl set 20+")
 | 
					  , ("<XF86MonBrightnessUp>", spawn "brightnessctl set 20+")
 | 
				
			||||||
  , ("<XF86MonBrightnessDown>", spawn "brightnessctl set 20-")
 | 
					  , ("<XF86MonBrightnessDown>", spawn "brightnessctl set 20-")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  -- Map brightness keys + shift to adjust redshift temperature
 | 
					  -- Map brightness keys + shift to adjust redshift temperature
 | 
				
			||||||
  , ("S-<XF86MonBrightnessUp>", spawn "echo $(($(cat /tmp/temperature) + 50)) > /tmp/temperature && redshift -O $(cat /tmp/temperature) -P && notify < /tmp/temperature -h string:x-canonical-private-synchronous:anything")
 | 
					  , ("S-<XF86MonBrightnessUp>", spawn "echo $(($(cat /tmp/temperature) + 50)) > /tmp/temperature && redshift -O $(cat /tmp/temperature) -P && notify < /tmp/temperature -h string:x-canonical-private-synchronous:anything")
 | 
				
			||||||
  , ("S-<XF86MonBrightnessDown>", spawn "echo $(($(cat /tmp/temperature) - 50)) > /tmp/temperature && redshift -O $(cat /tmp/temperature) -P && notify < /tmp/temperature -h string:x-canonical-private-synchronous:anything")
 | 
					  , ("S-<XF86MonBrightnessDown>", spawn "echo $(($(cat /tmp/temperature) - 50)) > /tmp/temperature && redshift -O $(cat /tmp/temperature) -P && notify < /tmp/temperature -h string:x-canonical-private-synchronous:anything")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  -- Reset redshift temperature
 | 
					  -- Reset redshift temperature
 | 
				
			||||||
  , ("M-S-<XF86MonBrightnessUp>", spawn "echo 3000 > /tmp/temperature && redshift -x")
 | 
					  , ("M-S-<XF86MonBrightnessUp>", spawn "echo 3000 > /tmp/temperature && redshift -x")
 | 
				
			||||||
  , ("M-S-<XF86MonBrightnessDown>", spawn "echo 3000 > /tmp/temperature && redshift -x")
 | 
					  , ("M-S-<XF86MonBrightnessDown>", spawn "echo 3000 > /tmp/temperature && redshift -x")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  -- Use power down key to suspend
 | 
					  -- Use power down key to suspend
 | 
				
			||||||
  , ("<XF86PowerOff>", spawn "systemctl suspend")
 | 
					  , ("<XF86PowerOff>", spawn "systemctl suspend")
 | 
				
			||||||
    , ("M-q", spawn "xmonad --recompile; pkill xmobar; xmonad --restart")
 | 
					 | 
				
			||||||
    ]
 | 
					 | 
				
			||||||
    `removeKeysP`
 | 
					 | 
				
			||||||
    -- Keybindings to be removed
 | 
					 | 
				
			||||||
    [ "M-t" ]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
mainManageHook = composeAll
 | 
					  -- FIXME: Spawn firefox in fullscreen, but not in kiosk mode
 | 
				
			||||||
  [ className =? "plank"     --> doIgnore ]
 | 
					  , ("M-S-b", spawn "firefox --fullscreen")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  -- Magnify window using arrow keys
 | 
				
			||||||
 | 
					  , ("M-<Up>", sendMessage MagnifyMore)
 | 
				
			||||||
 | 
					  , ("M-<Down>", sendMessage MagnifyLess)
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Keybindings to be removed
 | 
				
			||||||
 | 
					myRemoveKeysP = [ "M-t" ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					myXmobarPP :: PP
 | 
				
			||||||
 | 
					myXmobarPP = def
 | 
				
			||||||
 | 
					    { ppSep             = tertiaryColor " | "
 | 
				
			||||||
 | 
					    , ppTitleSanitize   = xmobarStrip
 | 
				
			||||||
 | 
					    , ppCurrent         = brackitify
 | 
				
			||||||
 | 
					    , ppHidden          = secondaryColor . wrap " " ""
 | 
				
			||||||
 | 
					    , ppHiddenNoWindows = secondaryColor . wrap " " ""
 | 
				
			||||||
 | 
					    , ppUrgent          = red . wrap (yellow "!") (yellow "!")
 | 
				
			||||||
 | 
					    , ppLayout  = \l -> case l of "Tall"                  -> "[]="
 | 
				
			||||||
 | 
					                                  "Magnifier Tall"        -> "[]+"
 | 
				
			||||||
 | 
					                                  "Magnifier Mirror Tall" -> "+[]"
 | 
				
			||||||
 | 
					                                  "Full"                  -> "[ ]"
 | 
				
			||||||
 | 
					                                  "ThreeCol"              -> "|||"
 | 
				
			||||||
 | 
					                                  _                       -> l
 | 
				
			||||||
 | 
					    , ppTitle   = shorten 80
 | 
				
			||||||
 | 
					    , ppOrder           = \[ws, l, _, wins] -> [ws, l, wins]
 | 
				
			||||||
 | 
					    , ppExtras          = [logTitles formatFocused formatUnfocused]
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  where
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    brackitify = wrap "[" "]"
 | 
				
			||||||
 | 
					    formatFocused   = primaryColor . brackitify . ppWindow
 | 
				
			||||||
 | 
					    formatUnfocused = secondaryColor . brackitify . ppWindow
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ppWindow = xmobarRaw . (\w -> if null w then "Untitled" else w) . shorten 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    primaryColor = xmobarColor "#eeeeee" ""
 | 
				
			||||||
 | 
					    secondaryColor = xmobarColor "#888888" ""
 | 
				
			||||||
 | 
					    tertiaryColor = xmobarColor "#555555" ""
 | 
				
			||||||
 | 
					    white    = xmobarColor "#ffffff" ""
 | 
				
			||||||
 | 
					    yellow   = xmobarColor "#ff0" ""
 | 
				
			||||||
 | 
					    red      = xmobarColor "#ff5555" ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					main :: IO ()
 | 
				
			||||||
 | 
					main = do xmonad $ docks $ ewmh $ withEasySB (statusBarProp "xmobar" (pure myXmobarPP)) defToggleStrutsKey myConfig
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue