Advertisement
Guest User

Untitled

a guest
Sep 6th, 2024
18
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.96 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.WindowSwallowing
  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 = "#3b4252"
  59.  
  60. myFocusColor :: String
  61. myFocusColor = "#88c0d0"
  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 ~/Personal/Pictures/screenShots/%Y-%m-%d-%T-screenshot.png")
  79. , ("M-]" , spawn "firefox" )
  80. , ("M-[" , spawn "chromium" )
  81. --, ("M-S-<Return>" , spawn "dmenu_run -i -p \"Run: \"")
  82. , ("M-S-<Return>" , spawn "rofi -show drun")
  83. , ("M1-<Tab>" , spawn "rofi -show window")
  84. --, ("M-p q", spawn "dmpower")
  85. , ("M-p q", spawn "rofi -show power-menu -modi power-menu:rpower")
  86. , ("M-<Backspace>", promote)
  87. , ("M-b", sendMessage ToggleStruts)
  88. , ("M-p d", spawn "dual.sh")
  89. , ("M-p s", spawn "single.sh")
  90. , ("M-p o", spawn "xset dpms force off")
  91. , ("C-e t", namedScratchpadAction myScratchpads "terminal")
  92. , ("M-p c", spawn "picom")
  93. , ("M-p x", spawn "pkill picom")
  94. , ("M-g", toggleGaps)
  95. , ("M-f", toggleFullScreen)
  96. , ("M-C-r", spawn "xmonad --recompile")
  97. , ("M-S-r", spawn "xmonad --restart")
  98. , ("C-e e", spawn (myEmacs ))
  99. , ("C-e i", spawn "alacritty -e sh -c 'sleep 0.1 && $(which lvim) $*'")
  100. , ("C-e f", spawn "alacritty -e vifm")
  101. , ("C-s s", spawn "steam")
  102. , ("C-e u" , spawn "alacritty --working-directory ~/.config/xmonad/ -e ./update.sh")
  103. , ("C-S-l", spawn "locate.sh")
  104. --, ("C-m .", spawn "playerctl -p ncspot next")
  105. --, ("C-m ,", spawn "playerctl -p ncspot previous")
  106. --, ("C-m <Space>", spawn "playerctl -p ncspot play-pause")
  107. --, ("C-e m", namedScratchpadAction myScratchpads "ncspot")
  108. , ("C-g u", spawn "sudo undervolt")
  109. , ("C-g r", spawn "sudo resetGpu")
  110. ]
  111.  
  112. -- Xxmobar Definitions/Callouts
  113.  
  114. xmobar1 = statusBarProp "xmobar -x 0 ~/.config/xmonad/.xmobarrc" (myXmobarPP)
  115. xmobar2 = statusBarProp "xmobar -x 1 ~/.config/xmonad/.xmobarrc1" (myXmobarPP)
  116.  
  117. -- Dynamic Xmobars
  118.  
  119. barSpawner :: ScreenId -> IO StatusBarConfig
  120. barSpawner 0 = pure (xmobar1) <> trayerSB
  121. barSpawner 1 = pure xmobar2
  122.  
  123.  
  124. staticStatusBar cmd = pure $ def { sbStartupHook = spawnStatusBar cmd
  125. , sbCleanupHook = killStatusBar cmd
  126. }
  127.  
  128. trayerSB :: IO StatusBarConfig
  129. trayerSB = staticStatusBar
  130. (unwords
  131. ["trayer"
  132. , "--edge top"
  133. , "--align right"
  134. , "--widthtype request"
  135. , "--expand true"
  136. , "--monitor primary"
  137. , "--transparent true"
  138. , "--alpha 0"
  139. , "--tint 0x282c34"
  140. , "--height 20"
  141. , "-l"
  142. , "--padding 6"
  143. , "--SetDockType true"
  144. , "--SetPartialStrut true"
  145. ]
  146. )
  147.  
  148. -- Start Up Hooks
  149.  
  150. myStartupHook :: X()
  151. myStartupHook = do
  152. spawnOnce "picom"
  153. spawnOnce "nitrogen --restore"
  154. spawnOnce "udiskie -t"
  155. spawnOnce "nm-applet"
  156. spawnOnce "dunst"
  157. spawnOnce "easyeffects --gapplication-service"
  158. spawnOnce "polychromatic-tray-applet"
  159. --spawnOnce "/usr/bin/emacs --daemon &"
  160.  
  161. -- Application Management
  162.  
  163. myManageHook :: ManageHook
  164. myManageHook = composeAll
  165. [ className =? "Gimp" --> doFloat
  166. , isDialog --> doFloat
  167. , isFullscreen --> doFullFloat
  168. ] <+> namedScratchpadManageHook myScratchpads
  169.  
  170. -- Custom Functions
  171.  
  172. toggleGaps :: X ()
  173. toggleGaps = do
  174. sendMessage ToggleGaps
  175. toggleWindowSpacingEnabled
  176.  
  177. toggleFullScreen :: X ()
  178. toggleFullScreen = do
  179. sendMessage ToggleStruts
  180. sendMessage $ Toggle NBFULL
  181. toggleGaps
  182.  
  183. -- Scratch Pads
  184.  
  185. myScratchpads :: [NamedScratchpad]
  186. myScratchpads = [ -- NS "ncspot" "alacritty -t ncspot -e ncspot" (title =? "ncspot")
  187. -- (customFloating $ W.RationalRect (1/6) (1/6) (2/3) (2/3)),
  188. NS "terminal" "alacritty -t scratchpad" (title =? "scratchpad")
  189. (customFloating $ W.RationalRect (1/6) (1/6) (2/3) (2/3))]
  190.  
  191. -- myScratchpads :: [NamedScratchpad]
  192. -- myScratchpads = [ NS "terminal" spawnTerm findTerm manageTerm ]
  193. -- where
  194. -- spawnTerm = myTerminal ++ " -t scratchpad"
  195. -- findTerm = title =? "scratchpad"
  196. -- manageTerm = customFloating $ W.RationalRect l t w h
  197. -- where
  198. -- h = 0.9
  199. -- w = 0.9
  200. -- t = 0.95 -h
  201. -- l = 0.95 -w
  202. -- Layouts
  203.  
  204. myLayout =
  205. renamed [KeepWordsRight 1]
  206. . spacingRaw False (Border 0 0 0 0) True (Border 15 0 15 0) True
  207. . gaps [(U, 0), (R, 0), (L, 15), (D, 15)]
  208. . mkToggle (single NBFULL)
  209. . smartBorders
  210. $ tiled
  211. ||| mtiled
  212. ||| Full
  213. ||| threeCol
  214. where
  215. mtiled = renamed [Replace "Mirror"]
  216. $ Mirror tiled
  217. threeCol = renamed [Replace "Centered"]
  218. $ Mag.magnifiercz' 1.3
  219. $ ThreeColMid nmaster delta ratio
  220. tiled = renamed [Replace "Tiled"]
  221. $ Tall nmaster delta ratio
  222. nmaster = 1 -- Default number of windows in the master pane
  223. ratio = 1/2 -- Default proportion of screen occupied by master pane
  224. delta = 3/100 -- Percent of screen to increment by when resizing panes
  225.  
  226.  
  227.  
  228. -- Xmobar Settings
  229.  
  230. myXmobarPP :: X PP
  231. myXmobarPP = clickablePP . filterOutWsPP [scratchpadWorkspaceTag] $ def
  232. { ppSep = nordaurora5 " • "
  233. , ppTitleSanitize = xmobarStrip
  234. , ppCurrent = wrap " " "" . xmobarBorder "Top" "#88c0d0" 2
  235. , ppHidden = nordfrost4 . wrap " " ""
  236. , ppHiddenNoWindows = nordfrost1 . wrap " " ""
  237. , ppUrgent = red . wrap (yellow "!") (yellow "!")
  238. , ppOrder = \[ws, l, _, wins] -> [ws, l, wins]
  239. , ppExtras = [logTitles formatFocused formatUnfocused]
  240. , ppVisible = wrap "[" "]"
  241. }
  242. where
  243. formatFocused = wrap (lowWhite "[") (lowWhite "]") . nordsnow1 . ppWindow
  244. formatUnfocused = wrap (lowWhite "[") (lowWhite "]") . nordfrost1 . ppWindow
  245.  
  246. -- | Windows should have *some* title, which should not not exceed a
  247. -- sane length.
  248. ppWindow :: String -> String
  249. ppWindow = xmobarRaw . (\w -> if null w then "untitled" else w) . shorten 30
  250. blue, lowWhite, magenta, red, white, yellow :: String -> String
  251.  
  252. -- Colors
  253.  
  254. magenta = xmobarColor "#ff79c6" ""
  255. blue = xmobarColor "#bd93f9" ""
  256. white = xmobarColor "#f8f8f2" ""
  257. yellow = xmobarColor "#f1fa8c" ""
  258. red = xmobarColor "#ff5555" ""
  259. lowWhite = xmobarColor "#bbbbbb" ""
  260. nordfrost1 = xmobarColor "#8fbcbb" ""
  261. nordfrost3 = xmobarColor "#81a1c1" ""
  262. nordfrost4 = xmobarColor "#5e91ac" ""
  263. nordsnow1 = xmobarColor "#d8dee9" ""
  264. nordsnow2 = xmobarColor "#e5e9f0" ""
  265. nordsnow3 = xmobarColor "#eceff4" ""
  266. nordnight4 = xmobarColor "4c566a" ""
  267. nordaurora5 = xmobarColor "#b48ead" ""
  268.  
  269. -- Config Default Definitions
  270.  
  271. myConfig = def
  272. { modMask = mod4Mask -- Rebind Mod to the Super key
  273. , layoutHook = myLayout -- Use custom layouts
  274. , borderWidth = 2
  275. , manageHook = myManageHook -- Match on certain windows
  276. , terminal = myTerminal
  277. , startupHook = myStartupHook
  278. , focusedBorderColor = myFocusColor
  279. , handleEventHook = Hacks.trayerAboveXmobarEventHook -- <> Hacks.windowedFullscreenFixEventHook
  280. <> swallowEventHook (className =? "Alacritty")
  281. (return True)
  282. , normalBorderColor = myNormColor
  283. }
  284. `additionalKeysP` myKeys
  285.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement