-
- -- ###### Imports ###### --
- -- ### Xmonad ### --
- import XMonad
- import XMonad.Core as XMonad hiding
- (workspaces,manageHook,keys,logHook,startupHook,borderWidth,mouseBindings
- ,layoutHook,modMask,terminal,normalBorderColor,focusedBorderColor,focusFollowsMouse
- ,handleEventHook,clickJustFocuses)
- import qualified XMonad.Core as XMonad
- (workspaces,manageHook,keys,logHook,startupHook,borderWidth,mouseBindings
- ,layoutHook,modMask,terminal,normalBorderColor,focusedBorderColor,focusFollowsMouse
- ,handleEventHook,clickJustFocuses)
- import XMonad.Operations
- import XMonad.Util.Run
- import XMonad.Actions.CycleWS
- import XMonad.Actions.SpawnOn
- import qualified Data.Map as M
- import qualified XMonad.StackSet as W
- import Data.Bits ((.|.))
- import Data.Monoid
- import Data.Ratio ((%))
- import Graphics.X11.Xlib
- import Graphics.X11.Xlib.Extras
-
- -- ### System ### --
- import System.IO
- import System.Exit
-
- -- ### Prompt ### --
- import XMonad.Prompt
- import XMonad.Prompt.RunOrRaise (runOrRaisePrompt)
- import XMonad.Prompt.AppendFile (appendFilePrompt)
-
- -- ### Hooks ### --
- import XMonad.ManageHook
- import XMonad.Hooks.ManageDocks
- import XMonad.Hooks.ManageHelpers
- import XMonad.Hooks.SetWMName
- import XMonad.Hooks.DynamicLog
- import XMonad.Hooks.UrgencyHook
- import XMonad.Hooks.FadeInactive
- import XMonad.Hooks.EwmhDesktops
- import XMonad.Operations
-
- -- ### Layout ### --
- import XMonad.Layout
- import XMonad.Layout.NoBorders (smartBorders, noBorders)
- import XMonad.Layout.PerWorkspace (onWorkspace, onWorkspaces)
- import XMonad.Layout.Reflect (reflectHoriz)
- import XMonad.Layout.IM
- import XMonad.Layout.SimpleFloat
- import XMonad.Layout.Spacing
- import XMonad.Layout.ResizableTile
- import XMonad.Layout.LayoutHints
- import XMonad.Layout.LayoutModifier
- import XMonad.Layout.Grid
- import XMonad.Layout.Tabbed
- import XMonad.Layout.TrackFloating
-
- -- ###### End Imports ### --
-
- -- ###### Config ###### --
- -- ### Terminal ### --
- myTerminal = "terminator"
-
- -- ### modMask ### --
- mymodMask :: KeyMask
- mymodMask = mod4Mask
-
- -- ### Workspaces ### --
- myWorkspaces = ["1:cKlap","2:www","3:dev","4:file","5:virt","6:mayhem","7:media","8:com"]
-
- -- ### Bars/Dzen2 ### --
- myXmonadBar = "dzen2 -x '0' -y '0' -h '18' -w '1000' -ta 'l' -fg '#999999' -bg '#000000' -fn '-*-fixed-medium-*-*-*-12-*-*-*-*-*-iso8859-*'"
- myTrayBar = "~/.xmonad/dzen/status_bars/dzen_secondary.sh | dzen2 -x '1000' -y '0' -h '18' -w '366' -ta 'r' -fg '#999999' -bg '#000000' -fn '-*-fixed-medium-*-*-*-12-*-*-*-*-*-iso8859-*'"
- myStatusBar = "~/.xmonad/dzen/status_bars/dzen_main.sh | dzen2 -x '0' -w '1000' -y '750' -h '18' -fg '#999999' -bg '#000000' -ta 'l' -fn '-*-fixed-medium-*-*-*-12-*-*-*-*-*-iso8859-*'"
- myMpdBar = "~/.xmonad/dzen/status_bars/dzen_audio.sh | dzen2 -x '1000' -w '366' -y '750' -h '18' -fg '#999999' -bg '#000000' -ta 'r' -fn '-*-fixed-medium-*-*-*-12-*-*-*-*-*-iso8859-*'"
- myBitmapsDir = "/home/coke/.xmonad/dzen"
-
- -- ### Main ### --
- main = do
- --bg <- spawnPipe "feh --bg-tile /home/coke/wallpapers/ska.jpg"
- dzenLeftBar <- spawnPipe myXmonadBar
- dzenStatusBar <- spawnPipe myStatusBar
- dzenTrayBar <- spawnPipe myTrayBar
- dzenMpdBar <- spawnPipe myMpdBar
- xmonad $ defaultConfig
- { terminal = myTerminal
- , workspaces = myWorkspaces
- , keys = myKeys
- , modMask = mymodMask
- , layoutHook = myLayoutHook
- , manageHook = manageSpawn <+> myManageHook
- , logHook = myLogHook dzenLeftBar
- , normalBorderColor = colorNormalBorder
- , focusedBorderColor = colorFocusedBorder
- , borderWidth = 0
- , startupHook = myStartupHook }
-
- -- ### StartupHook ### --
- myStartupHook :: X ()
- myStartupHook = do
- spawn "compton -cfb -D 1 -r 10 -l -15 -t -12 -o 0.6 -e 1.0 -i 1.0"
- spawn "xscreensaver -nosplash"
- spawn "xsetroot -cursor_name left_ptr"
- -- spawnOn "8:com" "terminator -x screen irssi"
- -- spawnOn "1:cKlap" "aterm -e htop"
- -- spawnOn "1:cKlap" "aterm -e tty-clock -c -C 1 -s -n"
- -- spawnOn "1:cKlap" "terminator -x alsamixer --card=1"
- -- spawnOn "1:cKlap" "terminator -x ncmpcpp"
- -- spawnOn "1:cKlap" "terminator -x wicd-curses"
- -- spawnOn "1:cKlap" "terminator -x htop"
- -- spawnOn "2:www" "google-chrome-stable"
- spawnOn "4:file" "nautilus --no-desktop --browser"
- spawnOn "6:mayhem" "terminator -x ssh coke@ccokee.no-ip.org"
- -- spawnOn "6:mayhem" "terminator -x ssh root@ccokee.no-ip.org:2222"
- -- spawnOn "6:mayhem" "terminator"
- -- spawnOn "8:com" "skype"
-
- -- ### ManageHook ### --
- myManageHook :: ManageHook
- myManageHook = (composeAll . concat $
- [ [resource =? r --> doIgnore | r <- myIgnores] -- ignore desktop
- , [className =? c --> doShift "3:develop" | c <- myDev ] -- move myDev to dev
- , [className =? c --> doShift "4:file" | c <- myFiles ] -- move myFiles to file
- , [className =? c --> doShift "7:media" | c <- myMedia ] -- move myMedia to media
- , [className =? c --> doShift "8:com" | c <- myChat ] -- move myChat to com
- , [className =? c --> doShift "5:virt" | c <- myVBox ] -- move myVBox to virt
- , [className =? c --> doCenterFloat | c <- myFloats ] -- float my floats
- , [name =? n --> doCenterFloat | n <- myNames ] -- float my names
- , [isFullscreen --> myDoFullFloat ]])
-
- where
-
- role = stringProperty "WM_WINDOW_ROLE"
- name = stringProperty "WM_NAME"
- -- classnames
- myTerms = ["aterm","urxvt","terminator"]
- myFloats = ["vlc","gimp","VirtualBox","skype"]
- myWebs = ["Firefox","google-chrome-stable"]
- myMedia = ["Spotify","vlc","kodi"]
- myChat = ["skype"]
- myFiles = ["nautilus","thunar","mc"]
- myDev = ["gvim","eclipse","ADT","emacs"]
- myVBox = ["VirtualBox","Virtualbox-bin","vbox"]
- -- resources
- myIgnores = ["desktop","desktop_window","notify-osd","stalonetray","trayer"]
- -- names
- myNames = ["bashrun","Google Chrome Options","Chromium Options"]
-
- -- ### LogHook ### --
- myLogHook :: Handle -> X ()
- myLogHook h = dynamicLogWithPP $ defaultPP
- {
- ppCurrent = dzenColor "#c9dee8" "#000000" . wrap "^fg(#c9dee8)[^fg(#ffffff)" "^fg(#c9dee8)]"
- , ppVisible = dzenColor "#c9dee8" "#000000" . wrap "^fg(#999999)[^fg(#c9dee8)" "^fg(#999999)]"
- , ppHidden = dzenColor "#eeeeee" "#000000" . pad
- , ppHiddenNoWindows = dzenColor "#999999" "#000000" . pad
- , ppUrgent = dzenColor "#ff0000" "#000000" . pad
- , ppWsSep = " "
- , ppSep = ":"
- , ppLayout = dzenColor "#c9dee8" "#000000" .
- (\x -> case x of
- "Spacing 7 ResizableTall" -> "^i(" ++ myBitmapsDir ++ "/tall.xbm)"
- "Mirror ResizableTall" -> "^i(" ++ myBitmapsDir ++ "/mtall.xbm)"
- "Full" -> "^i(" ++ myBitmapsDir ++ "/full.xbm)"
- "Simple Float" -> "~"
- _ -> x
- )
- , ppTitle = (" " ++) . dzenColor "#c9dee8" "#000000" . dzenEscape
- , ppOutput = hPutStrLn h
- }
-
- -- ### LayoutHook ### --
- myLayoutHook = onWorkspaces ["1:cKlap"] cKlapLayout $
- onWorkspaces ["2:www"] wwwLayout $
- onWorkspaces ["3:develop"] simpLayout $
- onWorkspaces ["4:files"] wwwLayout $
- onWorkspaces ["5:virt"] vBoxLayout $
- --onWorkspaces ["6:mayhem"] netLayout $
- onWorkspaces ["7:media"] mediaLayout $
- onWorkspaces ["8:com"] chatLayout $
- simpLayout
-
- -- ### Layouts ### --
-
- cKlapLayout = avoidStruts $ tiled ||| Mirror tiled ||| noBorders Full ||| simpleFloat
- where
- tiled = spacing 7 $ ResizableTall 1 (2/100) (2/3) []
-
- wwwLayout = avoidStruts $ noBorders tiled ||| Mirror tiled ||| noBorders Full ||| simpleFloat
- where
- tiled = spacing 7 $ ResizableTall 1 (2/100) (1/2) []
-
- simpLayout = avoidStruts $ noBorders Full ||| tiled ||| Mirror tiled ||| simpleFloat
- where
- tiled = spacing 7 $ ResizableTall 1 (2/100) (1/2) []
-
- vBoxLayout = avoidStruts $ noBorders simpleFloat
-
- --netLayout = spacing 7 $ avoidStruts $ smartBorders $ withIM (1%5) (And (Resource "aterm") (Role "buddy_list")) Grid
-
- mediaLayout = noBorders Full $ withIM 0.11 (Role "gimp-toolbox") $ reflectHoriz
- $ withIM 0.15 (Role "gimp-dock") (trackFloating simpleTabbed)
-
- chatLayout = avoidStruts $ withIM (1%5) (And (ClassName "skype") (Role "buddy_list")) simpleFloat
-
- -- ### Theme ### --
- colorOrange = "#83bbf4"
- colorDarkGray = "#1B1D1E"
- colorPink = "#F92672"
- colorGreen = "#A6E22E"
- colorBlue = "#66D9EF"
- colorYellow = "#E6DB74"
- colorWhite = "#CCCCC6"
- colorNormalBorder = "#CCCCCC"
- colorFocusedBorder = "#EEEEEE"
-
- -- ### Fonts ### --
- barFont = "-*-fixed-*-*-*-*-10-*-*-*-*-*-*-*"
- barXFont = "fixed"
- xftFont = "xft: fixed"
-
- -- ### Prompt Config ### --
- mXPConfig :: XPConfig
- mXPConfig =
- defaultXPConfig { font = barFont
- , bgColor = colorDarkGray
- , fgColor = colorGreen
- , bgHLight = colorGreen
- , fgHLight = colorDarkGray
- , promptBorderWidth = 0
- , height = 12
- , historyFilter = deleteConsecutive
- }
- -- ### Run or Raise Menu ### --
- largeXPConfig :: XPConfig
- largeXPConfig = mXPConfig
- { font = xftFont
- , height = 12
- }
- -- ### Trick for fullscreen switching windows ### --
- myDoFullFloat :: ManageHook
- myDoFullFloat = doF W.focusDown <+> doFullFloat
-
-
- -- ### Key Bindings ### --
- myKeys conf@(XConfig {XMonad.modMask = modMask}) = M.fromList $
- [ ((modMask, xK_p ), runOrRaisePrompt largeXPConfig)
- , ((modMask, xK_k ), spawn $ XMonad.terminal conf)
- , ((modMask, xK_F2 ), spawn "gmrun")
- , ((modMask .|. shiftMask, xK_c ), kill)
- , ((modMask .|. shiftMask, xK_l ), spawn "xscreensaver-command -lock")
-
- , ((0, xK_Print ), spawn "scrot -e 'mv $f ~/screenshots/'")
- , ((modMask, xK_c ), spawn "google-chrome-stable")
- , ((modMask, xK_n ), spawn "nautilus --no-desktop --browser")
-
- , ((0, 0x1008ff12 ), spawn "amixer -c 1 sset Master toggle") -- XF86AudioMute
- , ((0, 0x1008ff11 ), spawn "amixer -c 1 sset Master 5%-") -- XF86AudioLowerVolume
- , ((0, 0x1008ff13 ), spawn "amixer -c 1 sset Master 5%+")
- , ((0, 0x1008ff14 ), spawn "rhythmbox-client --play-pause")
- , ((0, 0x1008ff17 ), spawn "rhythmbox-client --next")
- , ((0, 0x1008ff16 ), spawn "rhythmbox-client --previous")
- , ((modMask, xK_x ), spawn "xbmc")
- , ((modMask, xK_g ), spawn "gimp")
- , ((modMask, xK_i ), spawn "screen irssi")
- , ((modMask, xK_v ), spawn "VirtualBox")
- , ((modMask .|. shiftMask, xK_v ), spawn "VBoxManage startvm 'Windows 10'")
- , ((modMask, xK_m ), spawn "vlc")
- , ((modMask .|. shiftMask, xK_m ), spawn "kodi")
- , ((modMask, xK_d ), spawn "deluge-gtk")
- , ((modMask, xK_e ), spawn "eclipse")
- , ((modMask .|. shiftMask, xK_e ), spawn "emacs")
- , ((modMask, xK_space ), sendMessage NextLayout)
- , ((modMask .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf) -- reset layout on current desktop to default
- , ((modMask, xK_b ), sendMessage ToggleStruts)
- , ((modMask, xK_r ), refresh)
- , ((modMask, xK_Tab ), windows W.focusDown) -- move focus to next window
- , ((modMask .|. shiftMask, xK_j ), windows W.focusDown)
- , ((modMask .|. shiftMask, xK_k ), windows W.focusUp )
- , ((modMask .|. shiftMask, xK_Down ), windows W.swapDown) -- swap the focused window with the next window
- , ((modMask .|. shiftMask, xK_Up ), windows W.swapUp) -- swap the focused window with the previous window
- , ((modMask, xK_Return ), windows W.swapMaster)
- , ((modMask, xK_t ), withFocused $ windows . W.sink) -- Push window back into tiling
- , ((modMask, xK_h ), sendMessage Shrink) -- %! Shrink a master area
- , ((modMask, xK_l ), sendMessage Expand) -- %! Expand a master area
- , ((modMask, xK_comma ), sendMessage (IncMasterN 1))
- , ((modMask, xK_period ), sendMessage (IncMasterN (-1)))
-
- -- workspaces
- , ((modMask .|. controlMask, xK_Right ), nextWS)
- , ((modMask .|. shiftMask, xK_Right ), shiftToNext)
- , ((modMask .|. controlMask, xK_Left ), prevWS)
- , ((modMask .|. shiftMask, xK_Left ), shiftToPrev)
-
- -- quit, or restart
- , ((modMask .|. shiftMask, xK_q ), io (exitWith ExitSuccess))
- , ((modMask, xK_q ), spawn "killall dzen2 && /home/my_user/.cabal/bin/xmonad --recompile && /home/my_user/.cabal/bin/xmonad --restart")
- ]
- ++
- -- mod-[1..9] %! Switch to workspace N
- -- mod-shift-[1..9] %! Move client to workspace N
- [((m .|. modMask, k), windows $ f i)
- | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
- , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
-
- -- ++
- --
- -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3
- -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3
- --
- -- [((m .|. modMask, key), screenWorkspace sc >>= flip whenJust (windows . f))
- -- | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..]
- -- , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]
-
- -- ###### End Config ###### --
-