Advertisement
Guest User

trayer

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