Advertisement
Guest User

splittercode xmonad.hs

a guest
Jul 21st, 2010
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Haskell 11.10 KB | None | 0 0
  1. import XMonad
  2.  
  3. import XMonad.Hooks.ManageHelpers
  4. import XMonad.Hooks.DynamicLog
  5. import XMonad.Hooks.ManageDocks
  6. import XMonad.Hooks.SetWMName
  7. import XMonad.Hooks.InsertPosition
  8.  
  9. import XMonad.Actions.CycleWS
  10. import XMonad.Actions.DwmPromote
  11.  
  12. import XMonad.Layout.NoBorders
  13. import XMonad.Layout.IM
  14. import XMonad.Layout.PerWorkspace
  15. import XMonad.Layout.Reflect
  16. import XMonad.Layout.ResizableTile
  17. import XMonad.Layout.MultiToggle
  18. import XMonad.Layout.MultiToggle.Instances
  19. import XMonad.Layout.WorkspaceDir
  20.  
  21. import XMonad.Prompt
  22. import XMonad.Prompt.Shell
  23. import XMonad.Prompt.Workspace
  24. import XMonad.Prompt.AppendFile
  25.  
  26. import XMonad.Util.NamedScratchpad
  27. import XMonad.Util.Run
  28.  
  29. import System.Exit
  30.  
  31. import qualified XMonad.StackSet as W
  32. import qualified Data.Map        as M
  33.  
  34. main :: IO ()
  35. main = myConfig >>= xmonad
  36.  
  37. myConfig = do
  38.   workspaceBar <- spawnPipe "xmobar ~/.xmobarrc"
  39.   return defaultConfig {
  40.      terminal           = "urxvtc",
  41.      startupHook        = setWMName "LG3D",
  42.      manageHook         = myManageHook,
  43.      borderWidth        = 1,
  44.      normalBorderColor  = black4,
  45.      focusedBorderColor = orange,
  46.      layoutHook         = myLayouts,
  47.      workspaces         = myWorkspaces,
  48.      keys               = myKeys,
  49.      logHook            = myLogHook workspaceBar
  50.   }
  51.  
  52. -------------------------
  53. -- LOGGING/STATUS BARS --
  54. -------------------------
  55.  
  56. myLogHook bar = dynamicLogWithPP $ defaultPP {
  57.         ppCurrent           =   xmobarColor orange "" . pad
  58.       , ppVisible           =   xmobarColor orange "" . pad
  59.       , ppHidden            =   xmobarColor white  "" . pad . removeNSP
  60.       , ppHiddenNoWindows   =   xmobarColor grey2  "" . pad . removeNSP
  61.       , ppSep               =   "| "
  62.       , ppWsSep             =   ""
  63.       , ppLayout            =   (++ " ") . xmobarColor orange "" . layoutNames
  64.       , ppTitle             =   xmobarColor white  ""
  65.       , ppOutput            =   hPutStrLn bar
  66.       }
  67.  
  68.  where
  69.  
  70.     removeNSP x
  71.      | x == "NSP" = []
  72.      | otherwise  = x
  73.  
  74.     layoutNames x
  75.      | x == "ResizableTall"        = "|"
  76.      | x == "Mirror ResizableTall" = "-"
  77.      | x == "Full"                 = "[]"
  78.      | x == "IM ReflectX IM Full"  = "|=|"
  79.      | otherwise                   = x
  80.  
  81. ------------------
  82. -- WINDOW RULES --
  83. ------------------
  84.  
  85. myManageHook = namedScratchpadManageHook genScratchPads <+> (composeOne . concat $
  86.    [ [ className =? x <&&> resource =? y -?> doFloat       | (x,y) <- specFloats  ]
  87.    , [ title     =? x                    -?> doFloat       |  x    <- namedFloats ]
  88.    , [ className =? x                    -?> doFloat       |  x    <- genFloats   ]
  89.    , [ className =? x                    -?> doCenterFloat |  x    <- cenFloats   ]
  90.    , [ className =? x                    -?> doFullFloat   |  x    <- fullFloats  ]
  91.    , [ isFullscreen                      -?> doFullFloat                          ]
  92.    , [ return True                       -?> insertPosition Below Newer           ]
  93.    ] ) <+> manageDocks <+> (composeOne . concat $
  94.    [ [ className =? x                    -?> doShift y     | (x,y) <- autoShifts ]])
  95.  
  96.   where
  97.  
  98.       specFloats  = [ ("Namoroka", "Extension")
  99.                     , ("Namoroka",  "Download")
  100.                     , ("Namoroka",   "Mozilla")
  101.                     , ("Namoroka",    "Dialog")
  102.                     , ("Namoroka",   "Browser")
  103.                     ]
  104.  
  105.       namedFloats = [ "Guitar In"
  106.                     , "Save As"
  107.                     , "MIDI Setup Property Sheet"
  108.                     , "Guitar Property Sheet"
  109.                     , "Open"
  110.                     , "Open File"
  111.                     , "Dynamic"
  112.                     , "Chord Dictionary - Version 1.0"
  113.                     , "Tuning Dictionary"
  114.                     , "Score Checker - Version 1.0"
  115.                     , "Shifter Tool - Version 1.0"
  116.                     , "Tonality Tool - Version 1.0"
  117.                     , "Music Bar"
  118.                     , "Trill"
  119.                     , "Rehearsal Sign"
  120.                     , "Bend"
  121.                     , "Tapped Harmonic"
  122.                     , "Artificial Harmonic"
  123.                     , "Song Fade In/Out"
  124.                     , "Tempo Marker"
  125.                     , "Tremelo Bar"
  126.                     , "Alteration of Pace"
  127.                     ]
  128.  
  129.       fullFloats  = [ "Gnome-mplayer"
  130.                     , "MPlayer"
  131.                     ]
  132.  
  133.       genFloats   = [ "Qsynth"
  134.                     , "Qjackctl"
  135.                     ]
  136.  
  137.       cenFloats   = [ "Lxappearance"
  138.                     , "Nitrogen"
  139.                     , "ROX-Filer"
  140.                     ]
  141.  
  142.       autoShifts  = [ ("Gimp",      "gimp")
  143.                     , ("Qsynth",    "misc")
  144.                     , ("Qjackctl",  "misc")
  145.                     , ("Hydrogen",  "aud1")
  146.                     , ("Tuxguitar", "aud2")
  147.                     ]
  148.  
  149. -----------------
  150. -- SCRATCHPADS --
  151. -----------------
  152.  
  153. myScratchPads= [ ("terminal", "", 0.5, 0.33)
  154.                , ("htop", "htop", 0.8, 0.8)
  155.                , ("notes", "tail -F ~/bin/notes -s 60 -n 20", 0.2, 0.6)
  156.                , ("mutt", "mutt", 0.7, 0.5)
  157.                ]
  158.  
  159. genScratchPads = map createPad myScratchPads
  160.   where
  161.     createPad (name,spawn,w,h)
  162.       | name == "terminal" = NS name
  163.                              (myTerm name)
  164.                              (resource =? name)
  165.                              (customFloating $ W.RationalRect ((1 - w)/2) ((1 - h)/2) w h)
  166.       | otherwise          = NS name
  167.                              ((myTerm name) ++ " -e " ++ spawn)
  168.                              (resource =? name)
  169.                              (customFloating $ W.RationalRect ((1 - w)/2) ((1 - h)/2) w h)
  170.  
  171. myScratchPadNames = map getName myScratchPads
  172.     where getName (x,_,_,_) = x
  173.  
  174. ------------
  175. -- PROMPT --
  176. ------------
  177.  
  178. myXPConfig :: XPConfig
  179. myXPConfig = defaultXPConfig
  180.           { font        = myFont
  181.           , bgColor     = black2
  182.           , fgColor     = white
  183.           , bgHLight    = black3
  184.           , fgHLight    = orange
  185.           , borderColor = black
  186.           , position    = Top
  187.           , height      = 17
  188.           }
  189.  
  190. -------------
  191. -- LAYOUTS --
  192. -------------
  193.  
  194. myLayouts = smartBorders
  195.             $ avoidStruts
  196.             $ onWorkspace "gimp" gimp
  197.             $ mkToggle (single NBFULL)
  198.             $ workspaceDir "~"
  199.             $ tiled ||| Mirror tiled
  200.   where
  201.      tiled   = ResizableTall nmaster delta ratio []
  202.      nmaster = 1
  203.      delta   = 1/20
  204.      ratio   = goldenRatio
  205.      gimp    = withIM (0.11) (Role "gimp-toolbox")
  206.                $ reflectHoriz
  207.                $ withIM (0.15) (Role "gimp-dock") Full
  208.  
  209. ------------------
  210. -- KEY BINDINGS --
  211. ------------------
  212.  
  213. myKeys ::  XConfig t -> M.Map (KeyMask, KeySym) (X ())
  214. myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
  215.  
  216.     -- launch a terminal
  217.     [ ((modm, xK_Return), spawn $ XMonad.terminal conf)
  218.  
  219.     -- close focused window
  220.     , ((modm,               xK_Escape ), kill)
  221.  
  222.      -- Rotate through the available layout algorithms
  223.     , ((modm,               xK_grave  ), sendMessage NextLayout)
  224.  
  225.     -- DWM style promoting
  226.     , ((modm,               xK_space  ), dwmpromote)
  227.  
  228.     -- Move focus around stack
  229.     , ((modm,               xK_j      ), windows W.focusDown)
  230.     , ((modm,               xK_k      ), windows W.focusUp)
  231.  
  232.     -- Move windows around in stack
  233.     , ((modm .|. shiftMask, xK_j      ), windows W.swapDown)
  234.     , ((modm .|. shiftMask, xK_k      ), windows W.swapUp)
  235.  
  236.     -- Navigate around screns/workspaces
  237.     , ((modm,               xK_Left   ), prevWS)
  238.     , ((modm,               xK_Right  ), nextWS)
  239.     , ((modm,               xK_Tab    ), nextScreen)
  240.     , ((modm .|. shiftMask, xK_Tab    ), toggleWS)
  241.  
  242.     -- Resize master area
  243.     , ((modm,               xK_s      ), sendMessage Shrink)
  244.     , ((modm,               xK_x      ), sendMessage Expand)
  245.  
  246.     -- Resize Slaves
  247.     , ((modm,               xK_z      ), sendMessage MirrorShrink)
  248.     , ((modm,               xK_a      ), sendMessage MirrorExpand)
  249.  
  250.     -- Toggle FullScreen for a window
  251.     , ((modm,               xK_f      ), sendMessage $ Toggle NBFULL)
  252.  
  253.     -- Push window back into tiling
  254.     , ((modm,               xK_t      ), withFocused $ windows . W.sink)
  255.  
  256.     -- Change # of windows in master area
  257.     , ((modm,               xK_comma  ), sendMessage (IncMasterN 1))
  258.     , ((modm,               xK_period ), sendMessage (IncMasterN (-1)))
  259.  
  260.     -- Quit xmonad
  261.     , ((modm .|. shiftMask, xK_q      ), io (exitWith ExitSuccess))
  262.  
  263.     -- Restart xmonad
  264.     , ((modm,               xK_q      ), spawn "killall xmobar; xmonad --recompile; xmonad --restart")
  265.  
  266.     -- Change working directory
  267.     , ((modm,               xK_d      ), changeDir myXPConfig)
  268.  
  269.     -- Prompts
  270.     , ((modm,               xK_p      ), shellPrompt myXPConfig)
  271.     , ((modm,               xK_n      ), appendFilePrompt myXPConfig "/home/zak/bin/notes")
  272.     , ((modm,               xK_m      ), workspacePrompt myXPConfig $ windows . W.view)
  273.  
  274.     -- Launch Applications/Volume Control
  275.     , ((modm,               xK_w      ), spawn "firefox")
  276.     , ((modm,               xK_u      ), spawn powerTab)
  277.     , ((0,                  0x1008FF11), spawn "amixer -q set Master 5-")
  278.     , ((0,                  0x1008FF12), spawn "amixer -q set Master 0")
  279.     , ((0,                  0x1008FF13), spawn "amixer -q set Master 5+")
  280.     , ((0,                  0x1008FF14), spawn "ncmpcpp toggle")
  281.     , ((0,                  0x1008FF15), spawn "ncmpcpp stop")
  282.     , ((0,                  0x1008FF16), spawn "ncmpcpp prev")
  283.     , ((0,                  0x1008FF17), spawn "ncmpcpp next")
  284.     ]
  285.  
  286.     ++
  287.  
  288.     -- Scratchpads (mapped from F12 to F1 keys automatically)
  289.     [ ((0, x), namedScratchpadAction genScratchPads y) | (x,y) <- zip [xK_F12, xK_F11..xK_F1] myScratchPadNames ]
  290.  
  291.     ++
  292.  
  293.     -- mod-[1..9], Switch to workspace N
  294.     [((modm, k), windows $ W.greedyView i)
  295.         | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
  296.     ]
  297.  
  298.     ++
  299.  
  300.     -- Sends/follows a window to another workspace and
  301.     -- places it on top of the slave stack, rather than
  302.     -- replacing the master with the new window
  303.     [((modm .|. shiftMask, k), (windows $ W.shift i) >> (windows $ W.greedyView i) >> (windows $ W.swapDown))
  304.         | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
  305.     ]
  306.  
  307. ------------
  308. -- COLORS --
  309. ------------
  310.  
  311. orange = "#ebac54"
  312. white  = "#ffffff"
  313. black  = "#000000"
  314. black1 = "#1f1f1f"
  315. black2 = "#1c1c1c"
  316. black3 = "#2c2c2c"
  317. black4 = "#3f3f3f"
  318. grey1  = "#4f4f4f"
  319. grey2  = "#7f7f7f"
  320.  
  321. --------------------------------
  322. -- SOME UGLY/LONG DEFINITIONS --
  323. --------------------------------
  324.  
  325. myWorkspaces   = ["www","dev","mus","irc","aud1","aud2","gimp","sys","misc"]
  326. myFont         = "-*-proggycleanszcp-medium-r-normal-*-13-80-96-96-c-70-iso8859-1"
  327. myTerm x       = "urxvtc +sb -fn '" ++ myFont ++ "' -fb '" ++ myFont ++ "' -fi '" ++ myFont ++ "' -name " ++ x
  328. powerTab       = "wine .wine/drive_c/'Program Files'/'Power Tab Software'/'Power Tab Editor 1.7'/PTEditor.exe"
  329. goldenRatio    = toRational $ 2/(1 + sqrt 5 :: Double)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement