Advertisement
Guest User

xmonad.hs

a guest
May 30th, 2021
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.43 KB | None | 0 0
  1. import XMonad
  2. import XMonad.Layout.Grid
  3. import XMonad.Hooks.DynamicLog
  4. import XMonad.Hooks.ManageDocks
  5. import XMonad.Hooks.ManageHelpers
  6. import XMonad.Hooks.StatusBar
  7. import XMonad.Hooks.StatusBar.PP
  8. import XMonad.Hooks.EwmhDesktops
  9. import XMonad.Layout.NoBorders
  10. import XMonad.Util.EZConfig
  11. import XMonad.Util.Loggers
  12. import XMonad.Util.Ungrab
  13. import XMonad.Util.SpawnOnce
  14. import XMonad.Util.NamedScratchpad
  15. import XMonad.Actions.Promote
  16. import XMonad.Layout.SimpleFloat
  17. import XMonad.Layout.Magnifier
  18. import XMonad.Layout.ThreeColumns
  19. import qualified XMonad.StackSet as W
  20. import XMonad.Actions.CycleWS
  21. import Data.Maybe (fromJust)
  22. import Data.Maybe (isJust)
  23. import XMonad.Layout.LayoutModifier
  24. import XMonad.Layout.Spacing
  25. import XMonad.Layout.Renamed
  26. import XMonad.Util.ClickableWorkspaces
  27. -- Default Programs
  28.  
  29. myTerminal :: String
  30. myTerminal = "alacritty"
  31.  
  32. myNormColor :: String
  33. myNormColor = "282c34"
  34.  
  35. myFocusColor :: String
  36. myFocusColor = "#46d9ff"
  37.  
  38. main :: IO ()
  39. main = xmonad
  40. . ewmhFullscreen
  41. . ewmh
  42. . dynamicEasySBs barSpawner
  43. $ myConfig
  44.  
  45. xmobar1 = statusBarProp "xmobar -x 0 ~/.config/xmonad/.xmobarrc" (clickablePP myXmobarPP) -- does not work with statusBarPropTo "_XMONAD_LOG_1", causes the bar to get stuck on updating...
  46. xmobar2 = statusBarProp "xmobar -x 1 ~/.config/xmonad/.xmobarrc1" (clickablePP myXmobarPP)
  47.  
  48. barSpawner :: ScreenId -> IO StatusBarConfig
  49. barSpawner 0 = pure (xmobar1) <> trayerSB
  50. barSpawner 1 = pure xmobar2
  51.  
  52. myManageHook :: ManageHook
  53. myManageHook = composeAll
  54. [ className =? "Gimp" --> doFloat
  55. , isDialog --> doFloat
  56. ] <+> namedScratchpadManageHook myScratchPads
  57.  
  58. staticStatusBar cmd = pure $ def { sbStartupHook = spawnStatusBar cmd
  59. , sbCleanupHook = killStatusBar cmd
  60. }
  61.  
  62. trayerSB :: IO StatusBarConfig
  63. trayerSB = staticStatusBar
  64. (unwords
  65. ["trayer"
  66. , "--edge top"
  67. , "--align right"
  68. , "--widthtype request"
  69. , "--expand true"
  70. , "--monitor primary"
  71. , "--transparent true"
  72. , "--alpha 0"
  73. , "--tint 0x282c34"
  74. , "--height 22"
  75. , "--padding 4"
  76. , "--margin 2"
  77. , "--SetDockType true"
  78. , "--SetPartialStrut true"
  79. ]
  80. )
  81.  
  82. myStartupHook :: X()
  83. myStartupHook = do
  84. spawnOnce "picom &"
  85. spawnOnce "nitrogen --restore"
  86. spawnOnce "nm-applet"
  87.  
  88. myScratchPads :: [NamedScratchpad]
  89. myScratchPads = [ NS "terminal" spawnTerm findTerm manageTerm ]
  90. where
  91. spawnTerm = myTerminal ++ " -t scratchpad"
  92. findTerm = title =? "scratchpad"
  93. manageTerm = customFloating $ W.RationalRect l t w h
  94. where
  95. h = 0.9
  96. w = 0.9
  97. t = 0.95 -h
  98. l = 0.95 -w
  99.  
  100. --Makes setting the spacingRaw simpler to write. The spacingRaw module adds a configurable amount of space around windows.
  101. mySpacing :: Integer -> l a -> XMonad.Layout.LayoutModifier.ModifiedLayout Spacing l a
  102. mySpacing i = spacingRaw False (Border i i i i) True (Border i i i i) True
  103.  
  104.  
  105. myLayout = smartBorders (tiled ||| Mirror tiled ||| Full ||| threeCol)
  106. where
  107. threeCol = renamed [Replace "Centered"]
  108. $ mySpacing 8
  109. $ magnifiercz' 1.3
  110. $ ThreeColMid nmaster delta ratio
  111. tiled = renamed [Replace "Tiled"]
  112. $ mySpacing 8
  113. $ Tall nmaster delta ratio
  114. nmaster = 1 -- Default number of windows in the master pane
  115. ratio = 1/2 -- Default proportion of screen occupied by master pane
  116. delta = 3/100 -- Percent of screen to increment by when resizing panes
  117.  
  118. myKeys :: [(String, X())]
  119. myKeys =
  120. [ ("M-<Return>", spawn (myTerminal))
  121. , ("M-S-z", spawn "xscreensaver-command -lock")
  122. , ("M-S-=", unGrab *> spawn "scrot -s" )
  123. , ("M-]" , spawn "firefox" )
  124. , ("M-S-<Return>" , spawn "dmenu_run -i -p \"Run: \"")
  125. , ("M-p q", spawn "dmpower")
  126. , ("M-<Backspace>", promote)
  127. , ("M-b", sendMessage ToggleStruts)
  128. , ("M-p d", spawn "dual.sh")
  129. , ("M-p s", spawn "single.sh")
  130. , ("C-s t", namedScratchpadAction myScratchPads "terminal")
  131. , ("M-p c", spawn "picom")
  132. , ("M-p x", spawn "pkill picom")
  133. , ("M-M1-j", decWindowSpacing 4)
  134. , ("M-M1-k", incWindowSpacing 4)
  135. , ("M-M1-h", decScreenSpacing 4)
  136. , ("M-M1-l", incScreenSpacing 4)
  137. ]
  138. -- where nonNSP = WSIs (return (\ws -> W.tag ws /= "NSP"))
  139. -- nonEmptyNonNSP = WSIs (return (\ws -> isJust (W.stack ws) && W.tag ws /= "NSP"))
  140.  
  141. myXmobarPP :: PP
  142. myXmobarPP = filterOutWsPP [scratchpadWorkspaceTag] $ def
  143. { ppSep = magenta " • "
  144. , ppTitleSanitize = xmobarStrip
  145. , ppCurrent = wrap " " "" . xmobarBorder "Top" "#88c0d0" 2
  146. , ppHidden = nordfrost4 . wrap " " ""
  147. , ppHiddenNoWindows = nordfrost1 . wrap " " ""
  148. , ppUrgent = red . wrap (yellow "!") (yellow "!")
  149. , ppOrder = \[ws, l, _, wins] -> [ws, l, wins]
  150. , ppExtras = [logTitles formatFocused formatUnfocused]
  151. }
  152. where
  153. formatFocused = wrap (white "[") (white "]") . magenta . ppWindow
  154. formatUnfocused = wrap (lowWhite "[") (lowWhite "]") . blue . ppWindow
  155.  
  156. -- | Windows should have *some* title, which should not not exceed a
  157. -- sane length.
  158. ppWindow :: String -> String
  159. ppWindow = xmobarRaw . (\w -> if null w then "untitled" else w) . shorten 30
  160.  
  161. blue, lowWhite, magenta, red, white, yellow :: String -> String
  162. magenta = xmobarColor "#ff79c6" ""
  163. blue = xmobarColor "#bd93f9" ""
  164. white = xmobarColor "#f8f8f2" ""
  165. yellow = xmobarColor "#f1fa8c" ""
  166. red = xmobarColor "#ff5555" ""
  167. lowWhite = xmobarColor "#bbbbbb" ""
  168. nordfrost1 = xmobarColor "#8fbcbb" ""
  169. nordfrost3 = xmobarColor "#81a1c1" ""
  170. nordfrost4 = xmobarColor "#5e91ac" ""
  171. nordsnow1 = xmobarColor "#d8dee9" ""
  172. nordsnow2 = xmobarColor "#e5e9f0" ""
  173. nordnight4 = xmobarColor "4c566a" ""
  174.  
  175. myConfig = def
  176. { modMask = mod4Mask -- Rebind Mod to the Super key
  177. , layoutHook = myLayout -- Use custom layouts
  178. , manageHook = myManageHook -- Match on certain windows
  179. , terminal = myTerminal
  180. , startupHook = myStartupHook
  181. , focusedBorderColor = myFocusColor
  182. , normalBorderColor = myNormColor
  183. }
  184. `additionalKeysP` myKeys
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement