Advertisement
Guest User

test

a guest
Jun 29th, 2021
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.43 KB | None | 0 0
  1. import XMonad
  2. import qualified XMonad.StackSet as W
  3.  
  4. -- Layouts
  5.  
  6. import XMonad.Layout.Grid
  7. import XMonad.Layout.NoBorders
  8. import XMonad.Layout.SimpleFloat
  9. import XMonad.Layout.ThreeColumns
  10. import XMonad.Layout.LayoutModifier
  11. import XMonad.Layout.Spacing
  12. import XMonad.Layout.Renamed
  13. import XMonad.Layout.Gaps
  14. import XMonad.Layout.Spacing
  15. import XMonad.Layout.MultiToggle.Instances
  16. import XMonad.Layout.MultiToggle
  17. import qualified XMonad.Layout.Magnifier as Mag
  18.  
  19. -- Hooks
  20.  
  21. import XMonad.Hooks.DynamicLog
  22. import XMonad.Hooks.ManageDocks
  23. import XMonad.Hooks.ManageHelpers
  24. import XMonad.Hooks.StatusBar
  25. import XMonad.Hooks.StatusBar.PP
  26. import XMonad.Hooks.EwmhDesktops
  27. import XMonad.Hooks.RefocusLast (refocusLastLogHook)
  28.  
  29. -- Utils
  30.  
  31. import XMonad.Util.EZConfig
  32. import XMonad.Util.Loggers
  33. import XMonad.Util.Ungrab
  34. import XMonad.Util.SpawnOnce
  35. import XMonad.Util.NamedScratchpad
  36. import XMonad.Util.ClickableWorkspaces
  37. import qualified XMonad.Util.Hacks as Hacks
  38.  
  39. -- Actions
  40.  
  41. import XMonad.Actions.Promote
  42. import XMonad.Actions.CycleWS
  43.  
  44. -- Datas
  45.  
  46. import Data.Maybe (fromJust)
  47. import Data.Maybe (isJust)
  48.  
  49. -- Default Programs
  50.  
  51. myTerminal :: String
  52. myTerminal = "alacritty"
  53.  
  54. myEmacs :: String
  55. myEmacs = "emacsclient -c -a 'emacs' "
  56.  
  57. myNormColor :: String
  58. myNormColor = "#282c34"
  59.  
  60. myFocusColor :: String
  61. myFocusColor = "#46d9ff"
  62.  
  63. -- Main
  64.  
  65. main :: IO ()
  66. main = xmonad
  67. . ewmhFullscreen
  68. . ewmh
  69. . dynamicEasySBs barSpawner
  70. $ myConfig
  71.  
  72. -- Keybindings
  73.  
  74. myKeys :: [(String, X())]
  75. myKeys =
  76. [ ("M-<Return>", spawn (myTerminal))
  77. , ("M-S-z", spawn "xscreensaver-command -lock")
  78. , ("M-S-=", unGrab *> spawn "scrot -s" )
  79. , ("M-]" , spawn "firefox" )
  80. , ("M-S-<Return>" , spawn "dmenu_run -i -p \"Run: \"")
  81. , ("M-p q", spawn "dmpower")
  82. , ("M-<Backspace>", promote)
  83. , ("M-b", sendMessage ToggleStruts)
  84. , ("M-p d", spawn "dual.sh")
  85. , ("M-p s", spawn "single.sh")
  86. , ("C-s t", namedScratchpadAction myScratchPads "terminal")
  87. , ("M-p c", spawn "picom --experimental-backends")
  88. , ("M-p x", spawn "pkill picom")
  89. , ("M-g", toggleGaps)
  90. , ("M-f", toggleFullScreen)
  91. , ("M-C-r", spawn "xmonad --recompile")
  92. , ("M-S-r", spawn "xmonad --restart")
  93. , ("C-e e", spawn (myEmacs ))
  94. ]
  95.  
  96. -- Xxmobar Definitions/Callouts
  97.  
  98. xmobar1 = statusBarProp "xmobar -x 0 ~/.config/xmonad/.xmobarrc" (myXmobarPP)
  99. xmobar2 = statusBarProp "xmobar -x 1 ~/.config/xmonad/.xmobarrc1" (myXmobarPP)
  100.  
  101. -- Dynamic Xmobars
  102.  
  103. barSpawner :: ScreenId -> IO StatusBarConfig
  104. barSpawner 0 = pure (xmobar1) <> trayerSB
  105. barSpawner 1 = pure xmobar2
  106.  
  107.  
  108. staticStatusBar cmd = pure $ def { sbStartupHook = spawnStatusBar cmd
  109. , sbCleanupHook = killStatusBar cmd
  110. }
  111.  
  112. trayerSB :: IO StatusBarConfig
  113. trayerSB = staticStatusBar
  114. (unwords
  115. ["trayer"
  116. , "--edge top"
  117. , "--align right"
  118. , "--widthtype request"
  119. , "--expand true"
  120. , "--monitor primary"
  121. , "--transparent true"
  122. , "--alpha 0"
  123. , "--tint 0x282c34"
  124. , "--height 20"
  125. , "-l"
  126. , "--padding 2"
  127. , "--SetDockType true"
  128. , "--SetPartialStrut true"
  129. ]
  130. )
  131.  
  132. -- Start Up Hooks
  133.  
  134. myStartupHook :: X()
  135. myStartupHook = do
  136. spawnOnce "picom --experimental-backends &"
  137. spawnOnce "nitrogen --restore"
  138. spawnOnce "nm-applet"
  139. --spawnOnce "/usr/bin/emacs --daemon &"
  140.  
  141. -- Application Management
  142.  
  143. myManageHook :: ManageHook
  144. myManageHook = composeAll
  145. [ className =? "Gimp" --> doFloat
  146. , isDialog --> doFloat
  147. ] <+> namedScratchpadManageHook myScratchPads
  148.  
  149. myLogHook = refocusLastLogHook
  150. >> nsHideOnFocusLoss myScratchPads
  151.  
  152. -- Custom Functions
  153.  
  154. toggleGaps :: X ()
  155. toggleGaps = do
  156. sendMessage ToggleGaps
  157. toggleWindowSpacingEnabled
  158.  
  159. toggleFullScreen :: X ()
  160. toggleFullScreen = do
  161. sendMessage ToggleStruts
  162. sendMessage $ Toggle NBFULL
  163. toggleGaps
  164.  
  165. -- Scratch Pads
  166.  
  167. myScratchPads :: [NamedScratchpad]
  168. myScratchPads = [ NS "terminal" spawnTerm findTerm manageTerm ]
  169. where
  170. spawnTerm = myTerminal ++ " -t scratchpad"
  171. findTerm = title =? "scratchpad"
  172. manageTerm = customFloating $ W.RationalRect l t w h
  173. where
  174. h = 0.9
  175. w = 0.9
  176. t = 0.95 -h
  177. l = 0.95 -w
  178. -- Layouts
  179.  
  180. myLayout =
  181. renamed [KeepWordsRight 1]
  182. . spacingRaw False (Border 0 0 0 0) True (Border 15 0 15 0) True
  183. . gaps [(U, 0), (R, 0), (L, 15), (D, 15)]
  184. . mkToggle (single NBFULL)
  185. . smartBorders
  186. $ tiled
  187. ||| mtiled
  188. ||| Full
  189. ||| threeCol
  190. where
  191. mtiled = renamed [Replace "Mirror"]
  192. $ Mirror tiled
  193. threeCol = renamed [Replace "Centered"]
  194. $ Mag.magnifiercz' 1.3
  195. $ ThreeColMid nmaster delta ratio
  196. tiled = renamed [Replace "Tiled"]
  197. $ Tall nmaster delta ratio
  198. nmaster = 1 -- Default number of windows in the master pane
  199. ratio = 1/2 -- Default proportion of screen occupied by master pane
  200. delta = 3/100 -- Percent of screen to increment by when resizing panes
  201.  
  202.  
  203.  
  204. -- Xmobar Settings
  205.  
  206. myXmobarPP :: X PP
  207. myXmobarPP = clickablePP . filterOutWsPP [scratchpadWorkspaceTag] $ def
  208. { ppSep = nordaurora5 " • "
  209. , ppTitleSanitize = xmobarStrip
  210. , ppCurrent = wrap " " "" . xmobarBorder "Top" "#88c0d0" 2
  211. , ppHidden = nordfrost4 . wrap " " ""
  212. , ppHiddenNoWindows = nordfrost1 . wrap " " ""
  213. , ppUrgent = red . wrap (yellow "!") (yellow "!")
  214. , ppOrder = \[ws, l, _, wins] -> [ws, l, wins]
  215. , ppExtras = [logTitles formatFocused formatUnfocused]
  216. , ppVisible = wrap "[" "]"
  217. }
  218. where
  219. formatFocused = wrap (lowWhite "[") (lowWhite "]") . nordsnow1 . ppWindow
  220. formatUnfocused = wrap (lowWhite "[") (lowWhite "]") . nordfrost1 . ppWindow
  221.  
  222. -- | Windows should have *some* title, which should not not exceed a
  223. -- sane length.
  224. ppWindow :: String -> String
  225. ppWindow = xmobarRaw . (\w -> if null w then "untitled" else w) . shorten 30
  226. blue, lowWhite, magenta, red, white, yellow :: String -> String
  227.  
  228. -- Colors
  229.  
  230. magenta = xmobarColor "#ff79c6" ""
  231. blue = xmobarColor "#bd93f9" ""
  232. white = xmobarColor "#f8f8f2" ""
  233. yellow = xmobarColor "#f1fa8c" ""
  234. red = xmobarColor "#ff5555" ""
  235. lowWhite = xmobarColor "#bbbbbb" ""
  236. nordfrost1 = xmobarColor "#8fbcbb" ""
  237. nordfrost3 = xmobarColor "#81a1c1" ""
  238. nordfrost4 = xmobarColor "#5e91ac" ""
  239. nordsnow1 = xmobarColor "#d8dee9" ""
  240. nordsnow2 = xmobarColor "#e5e9f0" ""
  241. nordsnow3 = xmobarColor "#eceff4" ""
  242. nordnight4 = xmobarColor "4c566a" ""
  243. nordaurora5 = xmobarColor "#b48ead" ""
  244.  
  245. -- Config Default Definitions
  246.  
  247. myConfig = def
  248. { modMask = mod4Mask -- Rebind Mod to the Super key
  249. , layoutHook = myLayout -- Use custom layouts
  250. , manageHook = myManageHook -- Match on certain windows
  251. , logHook = myLogHook
  252. , terminal = myTerminal
  253. , startupHook = myStartupHook
  254. , focusedBorderColor = myFocusColor
  255. , handleEventHook = Hacks.trayerAboveXmobarEventHook <> Hacks.windowedFullscreenFixEventHook
  256. , normalBorderColor = myNormColor
  257. }
  258. `additionalKeysP` myKeys
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement