Haron_Prime

2OFT

Feb 26th, 2017
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Core
  2. import XMonad
  3. import qualified XMonad.StackSet as W
  4. import System.IO (hPutStrLn)
  5. import System.Exit
  6. import qualified Data.Map as M
  7. import XMonad.Util.EZConfig
  8.  
  9. -- Util
  10. import XMonad.Util.NamedScratchpad (NamedScratchpad(NS), namedScratchpadManageHook, namedScratchpadAction, customFloating)
  11. import XMonad.Util.Run (safeSpawn, unsafeSpawn, runInTerm, spawnPipe)
  12. import XMonad.Util.SpawnOnce
  13. import XMonad.Util.Scratchpad
  14.  
  15. -- Hooks
  16. import XMonad.Hooks.EwmhDesktops
  17. import XMonad.Hooks.DynamicLog
  18. import XMonad.Hooks.ManageDocks
  19. import XMonad.Hooks.Place (placeHook, withGaps, smart)
  20. import XMonad.Hooks.InsertPosition
  21. import XMonad.Hooks.ManageHelpers
  22. import XMonad.Hooks.FloatNext (floatNextHook, toggleFloatNext, toggleFloatAllNew)
  23. import XMonad.Hooks.WorkspaceByPos
  24.  
  25. -- Actions
  26. import XMonad.Actions.Promote
  27. import XMonad.Actions.FloatSnap
  28. import XMonad.Actions.FloatKeys
  29.  
  30. -- Layouts
  31. import XMonad.Layout.Spacing (spacing)
  32. import XMonad.Layout.NoBorders
  33. import XMonad.Layout.Gaps
  34. import XMonad.Layout.ResizableTile
  35. import XMonad.Layout.OneBig
  36. import XMonad.Layout.AutoMaster
  37. import XMonad.Layout.Circle
  38. import XMonad.Layout.Grid
  39. import XMonad.Layout.Spiral
  40. import XMonad.Layout.NoBorders
  41.  
  42. -- Constants
  43. myModMask            = mod4Mask
  44. myBrowser            = "vivaldi-stable"
  45. browserClass         = "Vivaldi-stable"
  46. myTerminal           = "urxvtc"
  47. terminalClass        = "URxvt"
  48. myNormalBorderColor  = "#000000"
  49. myFocusedBorderColor = "#51c4d4"
  50. myBackgroundColor    = "#fe8e38"
  51. myForegroundColor    = "#c7c9cb"
  52. myBorderWidth        = 2
  53. myFocusFollowsMouse :: Bool
  54. myFocusFollowsMouse  = True
  55. myClickJustFocuses  :: Bool
  56. myClickJustFocuses   = False
  57. scratchPad = scratchpadSpawnActionTerminal "urxvtc -name scratchpad"
  58.  
  59. -- Workspaces
  60. myWorkspaces         :: [String]
  61. myWorkspaces         = [ "W", "F", "T", "C"] ++ map show [5..9]
  62.  
  63. -- Keybindings
  64. myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
  65.     [
  66.       ((0,  0xff61), spawn "scrot -e 'mv $f ~/Pictures/Screenshots/ 2>/dev/null'")
  67.     , ((mod1Mask, 0xff61), spawn "scrot -s -e 'mv $f ~/Pictures/Screenshots/ 2>/dev/null'")
  68.     , ((modm, xK_a), spawn "urxvt -name ncmpcpp -e ncmpcpp")
  69.     , ((modm, xK_t), spawn "urxvt")
  70.     , ((modm, xK_v), spawn "viewnior")
  71.     , ((modm, xK_p), spawn "dmenu_run")
  72.     , ((modm, xK_f), spawn "pcmanfm")
  73.     , ((modm .|. shiftMask, xK_p), spawn "gmrun")
  74.     , ((modm, xK_w), spawn "vivaldi-stable")
  75.     , ((modm, xK_g), spawn "subl")
  76.     , ((modm, xK_e), spawn "thunderbird")
  77.     , ((modm, xK_r), spawn "urxvt -name ranger -e ranger")
  78.     , ((modm .|. shiftMask, xK_b), spawn "urxvt -name vim -e vim ~/.xmobarrc")
  79.     , ((modm .|. shiftMask, xK_x), spawn "urxvt -name vim -e vim ~/.xmonad/xmonad.hs")
  80.     , ((modm .|. shiftMask, xK_c), kill)
  81.     , ((modm, xK_space), sendMessage NextLayout)
  82.     , ((modm .|. shiftMask, xK_space), setLayout $ XMonad.layoutHook conf)
  83.     , ((modm, xK_n), refresh)
  84.     , ((0, 0x1008ff13), spawn "amixer -q set Master 2dB+")
  85.     , ((0, 0x1008ff11), spawn "amixer -q set Master 2dB-")
  86.     , ((0, 0x1008ff12), spawn "amixer -q set Master toggleMute")
  87.     , ((modm .|. shiftMask, xK_e), spawn "eject /dev/sr0")
  88.     , ((modm, xK_Tab), windows W.focusDown)
  89.     , ((modm, xK_j), windows W.focusDown)
  90.     , ((modm, xK_k), windows W.focusUp)
  91.     , ((modm, xK_m), windows W.focusMaster)
  92.     , ((modm, xK_Return), windows W.swapMaster)
  93.     , ((modm .|. shiftMask, xK_j), windows W.swapDown)
  94.     , ((modm .|. shiftMask, xK_k), windows W.swapUp)
  95.     , ((modm, xK_s), sendMessage Shrink)
  96.     , ((modm, xK_d), sendMessage Expand)
  97.     , ((modm .|.shiftMask, xK_t), withFocused $ windows . W.sink)
  98.     , ((modm, xK_comma ), sendMessage (IncMasterN 1))
  99.     , ((modm, xK_period), sendMessage (IncMasterN (-1)))
  100.     , ((modm .|. shiftMask, xK_q), io (exitWith ExitSuccess))
  101.     , ((modm, xK_q), spawn "xmonad --recompile && xmonad --restart && killall xmobar && xmobar")
  102.     ]
  103.     ++
  104.     [((m .|. modm, k), windows $ f i)
  105.     | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
  106.     , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
  107.     ++
  108.     [((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f))
  109.     | (key, sc) <- zip [xK_u, xK_o, xK_i] [0..]
  110.     , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]
  111.  
  112. -- My Layouts
  113. myLayout  =  gaps [(U,16),(L,0),(R,0)] $ spacing 0 $ lessBorders OnlyFloat $ tiled ||| Mirror tiled ||| Full
  114.     where
  115.     tiled = Tall nmaster delta ratio
  116.     nmaster = 1
  117.     ratio   = 1/2
  118.     delta   = 3/100
  119.  
  120. -- XP
  121. myXPConfig = def {
  122.           font              = "xft:Terminus Re33:size=12:antialias=true:hinting=true"
  123.         , bgColor           = "#151515"
  124.         , fgColor           = "#959595"
  125.         , bgHLight          = "#151515"
  126.         , fgHLight          = "#9df"
  127.         , promptBorderWidth = 0
  128.         , position          = Top
  129.         , height            = 20
  130.         , alwaysHighlight   = True
  131.         , historySize       = 100
  132.     }
  133.  
  134. -- Window rules
  135. myManageHook :: ManageHook
  136. myManageHook = composeAll . concat $
  137.      [
  138.      [isFullscreen                              --> doFullFloat]
  139.      ,[isDialog                               --> doCenterFloat]
  140.      ,[className  =? "mpv"                      --> doFullFloat]
  141.      ,[className  =? c --> doF (W.shift "W")      | c <-  myWeb]
  142.      ,[className  =? c --> doF (W.shift "F")      | c <- myFile]
  143.      ,[className  =? c --> doF (W.shift "T")      | c <- myTerm]
  144.      ,[className  =? c --> doF (W.shift "C")      | c <- myCode]
  145.      ,[manageDocks]
  146.     ]
  147.     where
  148.     myWeb    = ["vivaldi-stable","thunderbird"]
  149.     myFile   = ["pcmanfm","ranger"]
  150.     myTerm   = ["xterm","urxvt"]
  151.     myCode   = ["subl","vim"]
  152.  
  153.     -- Event handling
  154. myEventHook = ewmhDesktopsEventHook <+> fullscreenEventHook <+> docksEventHook
  155.  
  156. -- Status bars and logging
  157. myLogHook = do
  158.     currentWorkspaceOnTop
  159.     dynamicLogString $ xmobarPP {
  160.           ppCurrent         = xmobarColor "#9fdfff" ""
  161.         , ppTitle           = (\str -> "")
  162.         }
  163.  
  164. -- Startup hook
  165. myStartupHook = return () <+> adjustEventInput
  166.  
  167. -- Scratchpad
  168. manageScratchPad :: ManageHook
  169. manageScratchPad = scratchpadManageHook (W.RationalRect l t w h)
  170.  
  171.   where
  172.  
  173.     h = 0.333   -- terminal height
  174.     w = 1       -- terminal width
  175.     t = 1 - h   -- distance from top edge
  176.     l = 1 - w   -- distance from left edge
  177.  
  178. main = do
  179.     xmonad =< xmobar myConfig
  180. myConfig = def {
  181.         terminal           = myTerminal,
  182.         focusFollowsMouse  = myFocusFollowsMouse,
  183.         clickJustFocuses   = myClickJustFocuses,
  184.         borderWidth        = myBorderWidth,
  185.         modMask            = myModMask,
  186.         workspaces         = myWorkspaces,
  187.         normalBorderColor  = myNormalBorderColor,
  188.         focusedBorderColor = myFocusedBorderColor,
  189.         keys               = myKeys,
  190.         layoutHook         = myLayout,
  191.         manageHook         = manageHook def <+> myManageHook <+> manageScratchPad <+> handleEventHook
  192.         handleEventHook    = myEventHook,
  193.         logHook            = myLogHook,
  194.         startupHook        = myStartupHook
  195.   }
Advertisement
Add Comment
Please, Sign In to add comment