Update xmonad configuration

master
Hektor Misplon 2022-09-24 01:07:06 +02:00
parent 7fd7f2d50d
commit 8ffc997f99
2 changed files with 131 additions and 62 deletions

2
.vimrc
View File

@ -1,4 +1,4 @@
" General config ______________________
" General config {{{
"
" Most acronyms are unreadable, but they keep the overview
" I have to do a quick :h lookup for most of these anyway.

View File

@ -1,85 +1,154 @@
import System.IO
import XMonad
import XMonad.Config.Desktop
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Layout.BorderResize
import XMonad.Layout.Fullscreen
import XMonad.Layout.Grid
import XMonad.Layout.NoBorders (noBorders, smartBorders)
import XMonad.Layout.ResizableTile (MirrorResize (..),
ResizableTall (..))
import XMonad.Layout.Magnifier
import XMonad.Layout.Spacing
import XMonad.Layout.Tabbed (Theme (..), shrinkText,
tabbedAlways)
import XMonad.Layout.ThreeColumns
import XMonad.Layout.ToggleLayouts (ToggleLayout (..), toggleLayouts)
import XMonad.Layout.WindowArranger
import XMonad.Util.EZConfig
import XMonad.Util.Loggers
import XMonad.Util.Paste
import XMonad.Util.Run (spawnPipe)
import XMonad.Util.Ungrab
import XMonad.Actions.CycleWS
import XMonad.Actions.GridSelect
import XMonad.Actions.WindowGo
import XMonad.Hooks.EwmhDesktops
import XMonad.Hooks.ManageHelpers
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 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
addScreenCorners [ (SCLowerRight, nextWS)
, (SCLowerRight, prevWS)
addScreenCorners [ (SCUpperRight, nextWS)
, (SCUpperLeft, prevWS)
]
main = do
xmproc <- spawnPipe "xmobar"
xmonad $ def {
terminal = "alacritty"
-- Use Win key instead of Alt
, modMask = mod4Mask
, workspaces = ["α", "β", "γ", "δ", "ε"]
-- Styling
, focusedBorderColor = "#000000"
, normalBorderColor = "#111111"
, borderWidth = 2
-- Hooks
, startupHook = myStartupHook
, layoutHook = screenCornerLayoutHook $ layoutHook def
, handleEventHook = handleEventHook def <+> screenCornerEventHook
, logHook = dynamicLogWithPP xmobarPP
{ ppOutput = hPutStrLn xmproc
, ppTitle = xmobarColor "green" "" . shorten 50
}
} `additionalKeysP`
-- Keybindings to be added
[ ("M-S-<Space>", withFocused $ windows . W.sink)
, ("M-p", spawn "rofi -show run")
-- Map insert key to paste from clipboard
, ("<Insert>", pasteSelection)
-- Map print screen to take a screenshot with flameshot
, ("<Print>", spawn "flameshot gui")
-- Map audio keys to control volume
, ("<XF86AudioRaiseVolume>", 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")
-- Map brightness keys to control brightness with brightnessctl
, ("<XF86MonBrightnessUp>", spawn "brightnessctl set 20+")
, ("<XF86MonBrightnessDown>", spawn "brightnessctl set 20-")
-- 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-<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
, ("M-S-<XF86MonBrightnessUp>", spawn "echo 3000 > /tmp/temperature && redshift -x")
, ("M-S-<XF86MonBrightnessDown>", spawn "echo 3000 > /tmp/temperature && redshift -x")
-- Use power down key to suspend
, ("<XF86PowerOff>", spawn "systemctl suspend")
, ("M-q", spawn "xmonad --recompile; pkill xmobar; xmonad --restart")
]
`removeKeysP`
-- Keybindings to be removed
[ "M-t" ]
myConfig = def
{
terminal = "alacritty"
mainManageHook = composeAll
[ className =? "plank" --> doIgnore ]
-- Use Win key instead of Alt
, modMask = mod4Mask
, workspaces = ["α", "β", "γ", "δ", "ε", "ζ", "η", "θ", "ι", "κ"]
-- Styling
, focusedBorderColor = "#888"
, normalBorderColor = "#000"
, borderWidth = 2
-- Hooks
, startupHook = myStartupHook
, layoutHook = screenCornerLayoutHook $ avoidStruts myLayout
, handleEventHook = handleEventHook def <> Hacks.windowedFullscreenFixEventHook <+> screenCornerEventHook
} `additionalKeysP` myKeysP
`removeKeysP` myRemoveKeysP
-- Keybindings to be added/overridden
myKeysP = [
-- Fit floating windows back to layout
("M-S-<Space>", withFocused $ windows . W.sink)
-- Use rofi to launch programs
, ("M-p", spawn "rofi -show run")
-- Map insert key to paste from clipboard
, ("<Insert>", pasteSelection)
-- Map print screen to take a screenshot with flameshot
, ("<Print>", spawn "flameshot gui")
-- Map audio keys to control volume
, ("<XF86AudioRaiseVolume>", 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")
-- Map brightness keys to control brightness with brightnessctl
, ("<XF86MonBrightnessUp>", spawn "brightnessctl set 20+")
, ("<XF86MonBrightnessDown>", spawn "brightnessctl set 20-")
-- 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-<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
, ("M-S-<XF86MonBrightnessUp>", spawn "echo 3000 > /tmp/temperature && redshift -x")
, ("M-S-<XF86MonBrightnessDown>", spawn "echo 3000 > /tmp/temperature && redshift -x")
-- Use power down key to suspend
, ("<XF86PowerOff>", spawn "systemctl suspend")
-- FIXME: Spawn firefox in fullscreen, but not in kiosk mode
, ("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