Guest User

xmonadhs

a guest
Aug 23rd, 2024
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import XMonad
  2.  
  3. import XMonad.Util.EZConfig
  4. import XMonad.Hooks.EwmhDesktops
  5. import XMonad.Util.Loggers
  6. import XMonad.Util.SpawnOnce
  7.  
  8. import XMonad.Hooks.DynamicLog
  9. import XMonad.Hooks.ManageDocks
  10. import XMonad.Hooks.ManageHelpers -- doCenterFloat
  11. import XMonad.Hooks.StatusBar
  12. import XMonad.Hooks.StatusBar.PP
  13. import XMonad.Util.ClickableWorkspaces
  14. import XMonad.Actions.CycleWS
  15.  
  16. import XMonad.Layout.Spacing
  17. import qualified Data.Map as M -- toggle float
  18. import qualified XMonad.StackSet as W -- window count
  19.  
  20. import XMonad.Hooks.InsertPosition -- new window position always left
  21. import XMonad.Hooks.RefocusLast -- keep focus on last focused window
  22.  
  23. import Graphics.X11.ExtraTypes.XF86 -- audio keys
  24.  
  25. import XMonad.Layout.NoBorders -- NBFULL, FULL
  26. import XMonad.Layout.MultiToggle -- NBFULL, FULL, MIRROR
  27. import XMonad.Layout.MultiToggle.Instances -- NBFULL, FULL, MIRROR
  28.  
  29.  
  30. myWorkspaces = ["term","http","file","docs","misc","mail","edit","medi","sett"]
  31. myBorderWidth = 1
  32. myFocusedBorderColor = "#61afef"
  33. myNormalBorderColor  = "#dddddd"
  34. myFocusFollowsMouse :: Bool
  35. myFocusFollowsMouse = False
  36. myClickJustFocuses :: Bool
  37. myClickJustFocuses = False
  38.  
  39. main :: IO ()
  40. main = xmonad
  41.      . ewmhFullscreen
  42.      . ewmh
  43.      . withEasySB (statusBarProp "xmobar ~/.config/xmonad/xmobarrc" (clickablePP myXmobarPP)) defToggleStrutsKey
  44.      $ myConfig
  45.  
  46. myConfig = def
  47.     { modMask            = mod4Mask  -- Rebind Mod to the Super key
  48.     , layoutHook         = myLayout  -- Use custom layouts
  49.     , startupHook        = myStartupHook
  50.     , manageHook         = myManageHook <+> insertPosition Master Newer -- new window position always left
  51.     , workspaces         = myWorkspaces
  52.     , normalBorderColor  = myNormalBorderColor
  53.     , focusedBorderColor = myFocusedBorderColor
  54.     , focusFollowsMouse  = myFocusFollowsMouse
  55.     , clickJustFocuses   = myClickJustFocuses
  56.     , borderWidth        = myBorderWidth
  57.     , handleEventHook    = refocusLastWhen refocusingIsActive -- keep focus on last focused window
  58.     , logHook            = refocusLastLogHook <> logHook def  -- keep focus on last focused window
  59.     }
  60.   `additionalKeysP`
  61.     [ ("M-S-e"                  , spawn "geany" )
  62.     , ("M-S-f"                  , spawn "thunar" )
  63.     , ("M-S-w"                  , spawn "firefox" )
  64.     , ("M-S-y"                  , spawn "thunderbird" )
  65.     , ("M-S-<Return>"           , spawn "st -c stfloat -g 100x25" )
  66.     , ("M-<Return>"             , spawn "st" )
  67.     , ("M1-<F1>"                , spawn "dmenu_run -h 30 -fn 'Iosevka:weight=bold:size=10' -nb '#212733' -nf '#c7c7c7' -sb '#212733' -sf '#54b0fc'" )
  68.     , ("M1-p"                   , spawn "~/.config/dmenu/dmenu_run_history -h 30 -fn 'Iosevka:weight=bold:size=10' -nb '#212733' -nf '#c7c7c7' -sb '#212733' -sf '#54b0fc'" )
  69.     , ("M-n"                    , spawn "nmd" )
  70.     , ("C-M1-p"                 , spawn "st -c stfloat -g 100x25 -e pulsemixer" )
  71.     , ("M-S-p"                  , spawn "st -c newsboat -e newsboat --config-file ~/.config/newsboat/config_st" )
  72.     , ("M-S-m"                  , spawn "st -c micro -e micro" )
  73.     , ("M-S-l"                  , spawn "st -c lf -T lf -e .local/bin/lf-filemanager" )
  74.     , ("M-c"                    , kill )
  75.     , ("C-M1-<Right>"           , nextWS )
  76.     , ("C-M1-<Left>"            , prevWS )
  77.     , ("M1-<Tab>"               , toggleWS )
  78.     , ("M-<Right>"              , windows W.focusDown )
  79.     , ("M-<Left>"               , windows W.focusUp )
  80.     , ("M-S-<Right>"            , windows W.swapDown )
  81.     , ("M-S-<Left>"             , windows W.swapUp )
  82.     , ("M-m"                    , sendMessage $ Toggle NBFULL )
  83.     , ("M-i"                    , sendMessage $ Toggle MIRROR )
  84.     , ("M-<Space>"              , sendMessage NextLayout )
  85.     , ("M-f"                    , withFocused toggleFloat )
  86.     , ("<XF86AudioLowerVolume>" , spawn "~/.config/xmonad/bin/xmovolume.sh --dec" )
  87.     , ("<XF86AudioRaiseVolume>" , spawn "~/.config/xmonad/bin/xmovolume.sh --inc" )
  88.     , ("<XF86AudioMute>"        , spawn "~/.config/xmonad/bin/xmovolume.sh --toggle" )
  89.     , ("<XF86AudioPlay>"        , spawn "playerctl play-pause" )
  90.     , ("<XF86AudioStop>"        , spawn "playerctl stop" )
  91.     , ("<XF86AudioPrev>"        , spawn "playerctl previous" )
  92.     , ("<XF86AudioNext>"        , spawn "playerctl next" )
  93.     , ("C-M1-/"                 , spawn "mpc toggle" )
  94.     , ("C-M1-m"                 , spawn "mpc stop" )
  95.     , ("C-M1-."                 , spawn "mpc next" )
  96.     , ("C-M1-,"                 , spawn "mpc prev" )
  97.     , ("C-M1-n"                 , spawn "~/.config/xmonad/bin/xmodunstsong.sh" )
  98.     , ("M-p"                    , spawn "~/.config/xmonad/bin/xmocolorpicker.sh" )
  99.     , ("<Print>"                , spawn "maim ~/Pictures/Screenshots/$(date +%s).png && paplay /usr/share/sounds/freedesktop/stereo/screen-capture.oga" )
  100.     , ("M-<Print>"              , spawn "maim -i `xdotool getactivewindow` ~/Pictures/Screenshots/$(date +%s).png && paplay /usr/share/sounds/freedesktop/stereo/screen-capture.oga" )
  101.     , ("M-S-<Print>"            , spawn "maim -s ~/Pictures/Screenshots/$(date +%s).png && paplay /usr/share/sounds/freedesktop/stereo/screen-capture.oga" )
  102.     ]
  103.       where
  104.         toggleFloat w = windows (\s -> if M.member w (W.floating s)
  105.                         then W.sink w s
  106.                         else (W.float w (W.RationalRect (1/4) (1/4) (1/2) (1/2)) s))
  107.  
  108. myManageHook :: ManageHook
  109. myManageHook = composeAll
  110.     [ className =? "Galculator"           --> doCenterFloat
  111.     , className =? "stfloat"              --> doCenterFloat
  112.     , className =? "Nm-connection-editor" --> doCenterFloat
  113.     , className =? "Gsimplecal"           --> doRectFloat (W.RationalRect 0.881 0.030 0.118 0.177)
  114.     , className =? "newsboat"             --> doShift (myWorkspaces !! 7)
  115.     , className =? "firefox"              --> doShift (myWorkspaces !! 1)
  116.     , className =? "firefox" <&&> resource =? "Places" --> doCenterFloat
  117.     , className =? "thunderbird"          --> doShift (myWorkspaces !! 5)
  118.     , className =? "Thunar"               --> doShift (myWorkspaces !! 2)
  119.     , className =? "Brave-browser"        --> doShift (myWorkspaces !! 8)
  120.     ]
  121.  
  122. myStartupHook :: X ()
  123. myStartupHook = do
  124.   spawnOnce "~/.config/xmonad/bin/autostart.sh"
  125.  
  126. myLayout = avoidStruts $ lessBorders OnlyScreenFloat
  127.  $ mkToggle (NBFULL ?? NOBORDERS ?? EOT)
  128.  $ mkToggle (single MIRROR)
  129.  $ spacingWithEdge 5 $ Tall 1 (495/10000) (55/100) ||| Full
  130.  
  131.  
  132. -- Xmobar config --
  133.  
  134. myXmobarPP :: PP
  135. myXmobarPP = def
  136.     { ppSep             = lowWhite "  :  "
  137.     , ppTitle           = wrap "" "" . shorten 64
  138.     , ppCurrent         = blue . wrap " " ""
  139.     , ppHidden          = white . wrap " " ""
  140.     , ppHiddenNoWindows = lowWhite . wrap " " ""
  141.     , ppUrgent          = red . wrap (yellow "!") (yellow "!")
  142.     , ppOrder           = \[ws, l, t, ex] -> [ws, l, ex, t]
  143.     , ppExtras          = [windowCount]
  144.     , ppLayout          = (\layout -> case layout of
  145.                             "Spacing Tall"        -> "Tall"
  146.                             "Spacing Full"        -> "Full"
  147.                             "Mirror Spacing Tall" -> "Mirror"
  148.                             "Full"                -> "Mono"
  149.                            )
  150.     }
  151.       where
  152.         windowCount :: X (Maybe String)
  153.         windowCount = gets $ Just . show . length . W.integrate' . W.stack . W.workspace . W.current . windowset
  154.  
  155.        blue, lowWhite, magenta, red, white, yellow, green, cyan, lime, pink, parrot, orange :: String -> String
  156.        magenta  = xmobarColor "#c778dd" ""
  157.        blue     = xmobarColor "#54b0fc" ""
  158.        white    = xmobarColor "#c7c7c7" ""
  159.        yellow   = xmobarColor "#e5c07a" ""
  160.        red      = xmobarColor "#e06b74" ""
  161.        green    = xmobarColor "#98c379" ""
  162.        cyan     = xmobarColor "#55b6c2" ""
  163.        lime     = xmobarColor "#bbf545" ""
  164.        pink     = xmobarColor "#ff85cc" ""
  165.        parrot   = xmobarColor "#0fff00" ""
  166.        orange   = xmobarColor "#e09d6b" ""
  167.        lowWhite = xmobarColor "#777777" ""
  168.  
Advertisement
Add Comment
Please, Sign In to add comment