Haron_Prime

2OFT.hs

Apr 29th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Haskell 11.50 KB | None | 0 0
  1. -- XMonad configuration file
  2.  
  3. -- Core
  4. import XMonad.Prompt
  5. import XMonad.Prompt.Man
  6. import XMonad.Prompt.RunOrRaise
  7. import XMonad hiding ( (|||) )
  8. import Control.Monad (liftM2)
  9. import Data.Ratio ((%))
  10. import Foreign.C (CChar)
  11. import System.Exit
  12. import qualified XMonad.StackSet as W
  13. import qualified Data.Map        as M
  14. import qualified Data.ByteString as B
  15.  
  16. -- Hooks
  17. import XMonad.Hooks.Minimize
  18. import XMonad.Hooks.EwmhDesktops
  19. import XMonad.Hooks.DynamicLog
  20. import XMonad.Hooks.ManageDocks
  21. import XMonad.Hooks.Place
  22. import XMonad.Hooks.InsertPosition
  23. import XMonad.Hooks.ManageHelpers
  24. import XMonad.Hooks.FloatNext (floatNextHook, toggleFloatNext, toggleFloatAllNew)
  25. import XMonad.Hooks.WorkspaceByPos
  26. import XMonad.Hooks.SetWMName
  27.  
  28. -- Util
  29. import XMonad.Util.Scratchpad
  30. import XMonad.Util.NamedScratchpad
  31. import XMonad.Util.Run (safeSpawn, unsafeSpawn, runInTerm, spawnPipe)
  32. import XMonad.Util.SpawnOnce
  33. import XMonad.Util.EZConfig
  34.  
  35. -- Actions
  36. import XMonad.Actions.Promote
  37. import XMonad.Actions.FloatSnap
  38. import XMonad.Actions.FloatKeys
  39. import XMonad.Actions.UpdateFocus
  40. import XMonad.Actions.WorkspaceNames
  41.  
  42. -- Layouts
  43. import XMonad.Layout.Minimize
  44. import XMonad.Layout.Grid
  45. import XMonad.Layout.IM
  46. import XMonad.Layout.Spacing
  47. import XMonad.Layout.ResizableTile
  48. import XMonad.Layout.LayoutCombinators ((|||))
  49. import XMonad.Layout.Spacing (spacing)
  50. import XMonad.Layout.NoBorders
  51. import XMonad.Layout.Master
  52. import XMonad.Layout.Minimize
  53. import XMonad.Layout.FixedColumn
  54. import XMonad.Layout.WindowNavigation
  55. import XMonad.Layout.PerWorkspace
  56. import qualified XMonad.Layout.ToggleLayouts as Tog
  57.  
  58. -- Constants
  59. myTerminal            = "urxvtc"
  60. terminalClass         = "URxvt"
  61. myShell               = "bash"
  62. myFocusFollowsMouse   = False
  63. myClickJustFocuses    = False
  64. myBorderWidth         = 1
  65. myModMask             = mod4Mask
  66. myWorkspaces          = [ "WEB", "CODE", "TERM", "MAIL", "FILES"]
  67. myNormalBorderColor   = "#000000"
  68. myFocusedBorderColor  = "#51c4d4"
  69. myBackgroundColor     = "#fe8e38"
  70. myForegroundColor     = "#c7c9cb"
  71. role                  = stringProperty "WM_WINDOW_ROLE"
  72. encodeCChar           = map fromIntegral . B.unpack
  73. scratchPad            = scratchpadSpawnActionTerminal "urxvtc -name scratchpad"
  74.  
  75. -- MyKeyBindings
  76. myKeys conf@(XConfig     {XMonad.modMask = modm})    =    M.fromList $
  77.     [
  78.       ((mod1Mask,                         0xff61 ),        spawn         "scrot  -s -e 'mv $f ~/Pictures/Screenshots/ 2>/dev/null'")
  79.     , ((0,                                0xffc9 ),                       scratchPad )         --F12
  80.     , ((0,                                0xff61 ),        spawn         "scrot  -e 'mv $f ~/Pictures/Screenshots/ 2>/dev/null'"   )
  81.     , ((0,                            0x1008ff13 ),        spawn         "amixer -q set Master        2dB+")
  82.     , ((0,                            0x1008ff11 ),        spawn         "amixer -q set Master        2dB-")
  83.     , ((0,                            0x1008ff12 ),        spawn         "amixer -q set Master  toggleMute")
  84.     , ((modm         .|. controlMask,       xK_x ),        runOrRaisePrompt                             def)
  85.     , ((modm,                               xK_F1),        manPrompt                                    def)
  86.     , ((modm,                               xK_z ),        spawn         "sdmenu"                          )
  87.     , ((modm,                               xK_a ),        spawn         "urxvtc -name  ncmpcpp -e ncmpcpp")
  88.     , ((modm         .|. shiftMask,         xK_b ),        spawn         "subl3                ~/.xmobarrc")
  89.     , ((modm         .|. shiftMask,         xK_e ),        spawn         "eject                   /dev/sr0")
  90.     , ((modm,                               xK_e ),        spawn         "thunderbird"        )
  91.     , ((modm,                               xK_f ),        spawn         "pcmanfm"            )
  92.     , ((modm,                               xK_p ),        spawn         "dmenu_run"          )
  93.     , ((modm         .|. shiftMask,         xK_p ),        spawn         "gmrun"              )
  94.     , ((modm,                               xK_q ),        spawn         "xmonad --recompile && xmonad --restart && killall xmobar && xmobar")
  95.     , ((modm,                               xK_r ),        spawn         "urxvt -name ranger -e ranger")
  96.     , ((modm,                               xK_s ),        spawn         "subl3"                       )
  97.     , ((modm,                               xK_v ),        spawn         "firefox"                    )
  98.     , ((modm,                               xK_w ),        spawn         "vivaldi-snapshot"            )
  99.     , ((modm         .|. shiftMask,         xK_x ),        spawn         "subl3 ~/.xmonad/xmonad.hs"   )
  100.     , ((modm         .|. shiftMask,         xK_v ),        spawn         "mynotes"   )
  101.     , ((modm         .|. shiftMask,         xK_z ),        spawn         "XMYaourt"  )
  102.     , ((modm,                               xK_y ),        withFocused minimizeWindow)
  103.     , ((modm         .|. shiftMask,         xK_y ),        sendMessage RestoreNextMinimizedWin)
  104.  
  105. -- Default KeyBindings
  106.     , ((modm         .|. shiftMask,         xK_c ),                      kill       )
  107.     , ((modm,                               xK_d ),        sendMessage   Expand     )
  108.     , ((modm,                               xK_g ),        sendMessage   Shrink     )
  109.     , ((modm,                               xK_j ),        windows       W.focusDown)
  110.     , ((modm         .|. shiftMask,         xK_j ),        windows       W.swapDown )
  111.     , ((modm,                               xK_k ),        windows       W.focusUp  )
  112.     , ((modm         .|. shiftMask,         xK_k ),        windows       W.swapUp   )
  113.     , ((modm,                               xK_m ),        windows       W.focusMaster)
  114.     , ((modm,                               xK_n ),                      refresh)
  115.     , ((modm         .|. shiftMask,         xK_q ),        io            (exitWith ExitSuccess))
  116.     , ((modm         .|. shiftMask,         xK_t ),        withFocused   $ windows . W.sink)
  117.     , ((modm,                               xK_t ),        spawn         $ XMonad.terminal conf)
  118.     , ((modm,                             xK_Tab ),        windows       W.focusDown      )
  119.     , ((modm,                           xK_space ),        sendMessage   NextLayout       )
  120.     , ((modm         .|. shiftMask,     xK_space ),        setLayout     $ XMonad.layoutHook conf)
  121.     , ((modm,                           xK_comma ),        sendMessage   (IncMasterN 1)   )
  122.     , ((modm,                          xK_Return ),        windows       W.swapMaster     )
  123.     , ((modm,                          xK_period ),        sendMessage   (IncMasterN (-1)))
  124.     ]
  125.  
  126.     ++
  127.     [ ((m            .|.                 modm, k ),        windows       $ f i)
  128.     | (i, k) <- zip (XMonad.workspaces      conf )         [xK_1 .. xK_9]
  129.     , (f, m) <- [(W.greedyView,                0 )
  130.     , (W.shift,                        shiftMask )         ]]
  131.     ++
  132.     [((m             .|.               modm, key ),        screenWorkspace sc >>= flip whenJust (windows . f))
  133.     | (key, sc) <- zip [xK_u, xK_o, xK_i]   [0..]
  134.     , (f, m) <- [(W.view,                      0 ),
  135.       (W.shift,                      shiftMask)]]
  136.  
  137. myMouseBindings (XConfig {XMonad.modMask = modm}) = M.fromList $
  138.     [ ((modm, button1), (\w -> focus w >> mouseMoveWindow w
  139.                                        >> windows W.shiftMaster))
  140.     , ((modm, button2), (\w -> focus w >> windows W.shiftMaster))
  141.     , ((modm, button3), (\w -> focus w >> mouseResizeWindow w
  142.                                        >> windows W.shiftMaster))
  143.     ]
  144.  
  145. -- Window rules:
  146. myLayoutHook          =  avoidStruts
  147.           $ minimize
  148.           $ Tog.toggleLayouts (noBorders Full)
  149.           $ smartBorders
  150.           $ onWorkspace  "WEB"     (Full  ||| Mirror   tiled)
  151.           $ onWorkspace  "CODE"    (Full  ||| Mirror   tiled)
  152.           $ onWorkspace  "FILES"   (Full  ||| Mirror   tiled)
  153.           $ onWorkspace  "MAIL"    (Full  ||| Mirror   tiled)
  154.           $ onWorkspace  "TERM"    (tiled ||| Full ||| Grid )
  155.           $ tiled ||| Mirror tiled ||| Full
  156.           where
  157.               tiled   = Tall nmaster delta ratio
  158.               nmaster = 1
  159.               ratio   = 1/2
  160.               delta   = 3/100
  161.  
  162. myManageHook          =  composeAll . concat $
  163.     [
  164.       [className      =? c           --> doF (W.shift "WEB"  )   | c <- myW]
  165.     , [className      =? c           --> doF (W.shift "MAIL" )   | c <- myM]
  166.     , [className      =? c           --> doF (W.shift "FILES")   | c <- myF]
  167.     , [className      =? c           --> doF (W.shift "TERM" )   | c <- myT]
  168.     , [className      =? c           --> doF (W.shift "CODE" )   | c <- myC]
  169.  
  170.     , [className      =? "mpv"       --> doFullFloat]
  171.     , [className      =? c           --> doCenterFloat       | c <- myFloatC]
  172.     , [appName        =? a           --> doCenterFloat       | a <- myFloatA]
  173.     , [title          =? t           --> doCenterFloat       | t <- myFloatT]
  174.     , [role           =? r           --> doCenterFloat       | r <- myFloatR]
  175.     , [isFullscreen                  --> doFloat]
  176.     , [isDialog                      --> doCenterFloat]
  177.     , [transience']
  178.    , [manageDocks]
  179.  
  180.    ]
  181.    where
  182.    myW               = ["Vivaldi-snapshot", "Firefox"]
  183.    myM               = ["Thunderbird"]
  184.    myF               = ["Pcmanfm", "ranger"]
  185.    myT               = ["URxvt"]
  186.    myC               = ["Subl3", "vim"]
  187.  
  188. -- CenterFloat
  189.    myFloatC          = ["Xmessage","Your_app","feh"]
  190.    myFloatA          = ["Mpv","Update"]
  191.    myFloatT          = ["Software Update"]
  192.    myFloatR          = ["task_dialog","messages","pop-up","^conversation$","About"]
  193.  
  194.  
  195. -- Event handling
  196. myEventHook           =  handleEventHook def <+> fullscreenEventHook <+> docksEventHook <+> ewmhDesktopsEventHook
  197.  
  198. -- Status bars and logging
  199. myLogHook             = do
  200.            dynamicLogString $ xmobarPP {
  201.            ppCurrent = xmobarColor "#ff6500" ""
  202.          , ppTitle   = (\str -> "")
  203.          , ppLayout  = (\str -> "")
  204.                      }
  205.  
  206. -- Startup hook
  207. myStartupHook         =  return () <+> adjustEventInput <+> setWMName "XMonad"
  208.  
  209. -- nameScratchpad
  210. mynameScratchpads     = [ NS "update" "urxvtc -name update -e yaourt -Syua" (appName  =? "update") (customFloating $ W.RationalRect 0.31 0.3 0.4 0.3)
  211.    ]
  212.  
  213. -- Scratchpad
  214. manageScratchPad      = scratchpadManageHook (W.RationalRect l t w h)
  215.    where
  216.    h                 = 0.333   -- terminal height
  217.    w                 = 1       -- terminal width
  218.    t                 = 1 - h   -- distance from top edge
  219.    l                 = 1 - w   -- distance from left edge
  220.  
  221. main = do
  222.       xmonad         =<< xmobar myConfig
  223.  
  224. myConfig              = ewmh $ def {
  225.   terminal           = myTerminal
  226. , focusFollowsMouse  = myFocusFollowsMouse
  227. , clickJustFocuses   = myClickJustFocuses
  228. , borderWidth        = myBorderWidth
  229. , modMask            = myModMask
  230. , workspaces         = myWorkspaces
  231. , normalBorderColor  = myNormalBorderColor
  232. , focusedBorderColor = myFocusedBorderColor
  233. , keys               = myKeys
  234. , mouseBindings      = myMouseBindings
  235. , layoutHook         = myLayoutHook
  236. , manageHook         = manageHook def <+> myManageHook <+> manageScratchPad <+> namedScratchpadManageHook  mynameScratchpads <+> placeHook (smart (0.5,0.5)) <+> workspaceByPos
  237. , handleEventHook    = myEventHook
  238. , logHook            = myLogHook >>= xmonadPropLog
  239. , startupHook        = myStartupHook
  240.    }
Add Comment
Please, Sign In to add comment