Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import XMonad
- import XMonad.Layout.Grid
- import XMonad.Hooks.DynamicLog
- import XMonad.Hooks.ManageDocks
- import XMonad.Hooks.ManageHelpers
- import XMonad.Hooks.StatusBar
- import XMonad.Hooks.StatusBar.PP
- import XMonad.Hooks.EwmhDesktops
- import XMonad.Layout.NoBorders
- import XMonad.Util.EZConfig
- import XMonad.Util.Loggers
- import XMonad.Util.Ungrab
- import XMonad.Util.SpawnOnce
- import XMonad.Util.NamedScratchpad
- import XMonad.Actions.Promote
- import XMonad.Layout.SimpleFloat
- import XMonad.Layout.Magnifier
- import XMonad.Layout.ThreeColumns
- import qualified XMonad.StackSet as W
- import XMonad.Actions.CycleWS
- import Data.Maybe (fromJust)
- import Data.Maybe (isJust)
- import XMonad.Layout.LayoutModifier
- import XMonad.Layout.Spacing
- import XMonad.Layout.Renamed
- import XMonad.Util.ClickableWorkspaces
- -- Default Programs
- myTerminal :: String
- myTerminal = "alacritty"
- myNormColor :: String
- myNormColor = "282c34"
- myFocusColor :: String
- myFocusColor = "#46d9ff"
- main :: IO ()
- main = xmonad
- . ewmhFullscreen
- . ewmh
- . dynamicEasySBs barSpawner
- $ myConfig
- 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...
- xmobar2 = statusBarProp "xmobar -x 1 ~/.config/xmonad/.xmobarrc1" (clickablePP myXmobarPP)
- barSpawner :: ScreenId -> IO StatusBarConfig
- barSpawner 0 = pure (xmobar1) <> trayerSB
- barSpawner 1 = pure xmobar2
- myManageHook :: ManageHook
- myManageHook = composeAll
- [ className =? "Gimp" --> doFloat
- , isDialog --> doFloat
- ] <+> namedScratchpadManageHook myScratchPads
- staticStatusBar cmd = pure $ def { sbStartupHook = spawnStatusBar cmd
- , sbCleanupHook = killStatusBar cmd
- }
- trayerSB :: IO StatusBarConfig
- trayerSB = staticStatusBar
- (unwords
- ["trayer"
- , "--edge top"
- , "--align right"
- , "--widthtype request"
- , "--expand true"
- , "--monitor primary"
- , "--transparent true"
- , "--alpha 0"
- , "--tint 0x282c34"
- , "--height 22"
- , "--padding 4"
- , "--margin 2"
- , "--SetDockType true"
- , "--SetPartialStrut true"
- ]
- )
- myStartupHook :: X()
- myStartupHook = do
- spawnOnce "picom &"
- spawnOnce "nitrogen --restore"
- spawnOnce "nm-applet"
- myScratchPads :: [NamedScratchpad]
- myScratchPads = [ NS "terminal" spawnTerm findTerm manageTerm ]
- where
- spawnTerm = myTerminal ++ " -t scratchpad"
- findTerm = title =? "scratchpad"
- manageTerm = customFloating $ W.RationalRect l t w h
- where
- h = 0.9
- w = 0.9
- t = 0.95 -h
- l = 0.95 -w
- --Makes setting the spacingRaw simpler to write. The spacingRaw module adds a configurable amount of space around windows.
- mySpacing :: Integer -> l a -> XMonad.Layout.LayoutModifier.ModifiedLayout Spacing l a
- mySpacing i = spacingRaw False (Border i i i i) True (Border i i i i) True
- myLayout = smartBorders (tiled ||| Mirror tiled ||| Full ||| threeCol)
- where
- threeCol = renamed [Replace "Centered"]
- $ mySpacing 8
- $ magnifiercz' 1.3
- $ ThreeColMid nmaster delta ratio
- tiled = renamed [Replace "Tiled"]
- $ mySpacing 8
- $ Tall nmaster delta ratio
- nmaster = 1 -- Default number of windows in the master pane
- ratio = 1/2 -- Default proportion of screen occupied by master pane
- delta = 3/100 -- Percent of screen to increment by when resizing panes
- myKeys :: [(String, X())]
- myKeys =
- [ ("M-<Return>", spawn (myTerminal))
- , ("M-S-z", spawn "xscreensaver-command -lock")
- , ("M-S-=", unGrab *> spawn "scrot -s" )
- , ("M-]" , spawn "firefox" )
- , ("M-S-<Return>" , spawn "dmenu_run -i -p \"Run: \"")
- , ("M-p q", spawn "dmpower")
- , ("M-<Backspace>", promote)
- , ("M-b", sendMessage ToggleStruts)
- , ("M-p d", spawn "dual.sh")
- , ("M-p s", spawn "single.sh")
- , ("C-s t", namedScratchpadAction myScratchPads "terminal")
- , ("M-p c", spawn "picom")
- , ("M-p x", spawn "pkill picom")
- , ("M-M1-j", decWindowSpacing 4)
- , ("M-M1-k", incWindowSpacing 4)
- , ("M-M1-h", decScreenSpacing 4)
- , ("M-M1-l", incScreenSpacing 4)
- ]
- -- where nonNSP = WSIs (return (\ws -> W.tag ws /= "NSP"))
- -- nonEmptyNonNSP = WSIs (return (\ws -> isJust (W.stack ws) && W.tag ws /= "NSP"))
- myXmobarPP :: PP
- myXmobarPP = filterOutWsPP [scratchpadWorkspaceTag] $ def
- { ppSep = magenta " • "
- , ppTitleSanitize = xmobarStrip
- , ppCurrent = wrap " " "" . xmobarBorder "Top" "#88c0d0" 2
- , ppHidden = nordfrost4 . wrap " " ""
- , ppHiddenNoWindows = nordfrost1 . wrap " " ""
- , ppUrgent = red . wrap (yellow "!") (yellow "!")
- , ppOrder = \[ws, l, _, wins] -> [ws, l, wins]
- , ppExtras = [logTitles formatFocused formatUnfocused]
- }
- where
- formatFocused = wrap (white "[") (white "]") . magenta . ppWindow
- formatUnfocused = wrap (lowWhite "[") (lowWhite "]") . blue . ppWindow
- -- | Windows should have *some* title, which should not not exceed a
- -- sane length.
- ppWindow :: String -> String
- ppWindow = xmobarRaw . (\w -> if null w then "untitled" else w) . shorten 30
- blue, lowWhite, magenta, red, white, yellow :: String -> String
- magenta = xmobarColor "#ff79c6" ""
- blue = xmobarColor "#bd93f9" ""
- white = xmobarColor "#f8f8f2" ""
- yellow = xmobarColor "#f1fa8c" ""
- red = xmobarColor "#ff5555" ""
- lowWhite = xmobarColor "#bbbbbb" ""
- nordfrost1 = xmobarColor "#8fbcbb" ""
- nordfrost3 = xmobarColor "#81a1c1" ""
- nordfrost4 = xmobarColor "#5e91ac" ""
- nordsnow1 = xmobarColor "#d8dee9" ""
- nordsnow2 = xmobarColor "#e5e9f0" ""
- nordnight4 = xmobarColor "4c566a" ""
- myConfig = def
- { modMask = mod4Mask -- Rebind Mod to the Super key
- , layoutHook = myLayout -- Use custom layouts
- , manageHook = myManageHook -- Match on certain windows
- , terminal = myTerminal
- , startupHook = myStartupHook
- , focusedBorderColor = myFocusColor
- , normalBorderColor = myNormColor
- }
- `additionalKeysP` myKeys
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement