2020-07-14 16:54:54 +00:00
|
|
|
-- Custom (my personal configs)
|
|
|
|
import Custom.MyGridMenu
|
|
|
|
import Custom.MyKeys
|
2020-07-15 01:08:47 +00:00
|
|
|
import Custom.MyLayouts
|
2020-07-14 16:54:54 +00:00
|
|
|
import Custom.MyPrompts
|
|
|
|
import Custom.MyScratchpads
|
|
|
|
import Custom.MyTreeMenu
|
|
|
|
import Custom.MyVariables
|
|
|
|
|
2019-01-15 21:27:01 +00:00
|
|
|
-- Base
|
|
|
|
import XMonad
|
2020-07-14 16:54:54 +00:00
|
|
|
import Data.Monoid
|
2020-06-25 04:02:45 +00:00
|
|
|
import System.IO (hPutStrLn)
|
2020-06-16 01:47:50 +00:00
|
|
|
import XMonad.Actions.MouseResize
|
2020-05-20 22:29:47 +00:00
|
|
|
|
2019-01-15 21:27:01 +00:00
|
|
|
-- Hooks
|
2020-05-25 02:27:19 +00:00
|
|
|
import XMonad.Hooks.DynamicLog (dynamicLogWithPP, wrap, xmobarPP, xmobarColor, shorten, PP(..))
|
2020-06-16 01:47:50 +00:00
|
|
|
import XMonad.Hooks.EwmhDesktops -- for some fullscreen events, also for xcomposite in obs.
|
2020-06-25 01:00:02 +00:00
|
|
|
import XMonad.Hooks.FadeInactive
|
2020-06-06 23:40:47 +00:00
|
|
|
import XMonad.Hooks.ManageDocks (avoidStruts, docksEventHook, manageDocks, ToggleStruts(..))
|
2020-05-25 02:27:19 +00:00
|
|
|
import XMonad.Hooks.ManageHelpers (isFullscreen, doFullFloat)
|
2020-06-06 23:40:47 +00:00
|
|
|
import XMonad.Hooks.ServerMode
|
2019-01-15 21:27:01 +00:00
|
|
|
import XMonad.Hooks.SetWMName
|
2020-06-25 01:00:02 +00:00
|
|
|
import XMonad.Hooks.WorkspaceHistory
|
2019-01-15 21:27:01 +00:00
|
|
|
|
2020-06-16 01:47:50 +00:00
|
|
|
-- Utilities
|
|
|
|
import XMonad.Util.EZConfig (additionalKeysP)
|
|
|
|
import XMonad.Util.NamedScratchpad
|
|
|
|
import XMonad.Util.Run (runProcessWithInput, safeSpawn, spawnPipe)
|
|
|
|
import XMonad.Util.SpawnOnce
|
2019-01-15 21:27:01 +00:00
|
|
|
|
2020-05-30 16:49:58 +00:00
|
|
|
myStartupHook :: X ()
|
2019-01-15 21:27:01 +00:00
|
|
|
myStartupHook = do
|
2020-06-25 01:00:02 +00:00
|
|
|
spawnOnce "nitrogen --restore &"
|
2020-05-16 04:04:18 +00:00
|
|
|
spawnOnce "picom &"
|
|
|
|
spawnOnce "nm-applet &"
|
|
|
|
spawnOnce "volumeicon &"
|
2020-07-04 16:36:50 +00:00
|
|
|
spawnOnce "trayer --edge top --align right --widthtype request --padding 6 --SetDockType true --SetPartialStrut true --expand true --monitor 1 --transparent true --alpha 0 --tint 0x292d3e --height 22 &"
|
2020-06-20 03:43:40 +00:00
|
|
|
spawnOnce "/usr/bin/emacs --daemon &"
|
2020-06-12 19:00:09 +00:00
|
|
|
-- spawnOnce "kak -d -s mysession &"
|
2019-01-15 21:27:01 +00:00
|
|
|
setWMName "LG3D"
|
|
|
|
|
2020-07-04 17:38:01 +00:00
|
|
|
xmobarEscape :: String -> String
|
|
|
|
xmobarEscape = concatMap doubleLts
|
|
|
|
where
|
|
|
|
doubleLts '<' = "<<"
|
|
|
|
doubleLts x = [x]
|
2020-06-22 00:48:27 +00:00
|
|
|
|
2020-06-25 01:00:02 +00:00
|
|
|
myWorkspaces :: [String]
|
2020-07-04 17:38:01 +00:00
|
|
|
myWorkspaces = clickable . (map xmobarEscape)
|
|
|
|
-- $ ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
|
|
|
|
$ ["dev", "www", "sys", "doc", "vbox", "chat", "mus", "vid", "gfx"]
|
|
|
|
where
|
2020-07-12 15:52:51 +00:00
|
|
|
clickable l = [ "<action=xdotool key super+" ++ show (n) ++ "> " ++ ws ++ " </action>" |
|
2020-07-04 17:38:01 +00:00
|
|
|
(i,ws) <- zip [1..9] l,
|
|
|
|
let n = i ]
|
2020-07-04 23:25:00 +00:00
|
|
|
|
2020-06-12 19:00:09 +00:00
|
|
|
myManageHook :: XMonad.Query (Data.Monoid.Endo WindowSet)
|
2019-02-25 05:28:46 +00:00
|
|
|
myManageHook = composeAll
|
2020-05-22 15:50:18 +00:00
|
|
|
-- using 'doShift ( myWorkspaces !! 7)' sends program to workspace 8!
|
2020-06-25 01:00:02 +00:00
|
|
|
-- I'm doing it this way because otherwise I would have to write out
|
2020-07-04 16:36:50 +00:00
|
|
|
-- the full name of my workspaces.
|
|
|
|
[ className =? "obs" --> doShift ( myWorkspaces !! 7 )
|
|
|
|
, title =? "firefox" --> doShift ( myWorkspaces !! 1 )
|
|
|
|
, className =? "mpv" --> doShift ( myWorkspaces !! 7 )
|
|
|
|
, className =? "vlc" --> doShift ( myWorkspaces !! 7 )
|
|
|
|
, className =? "Gimp" --> doShift ( myWorkspaces !! 8 )
|
2020-05-22 15:50:18 +00:00
|
|
|
, className =? "Gimp" --> doFloat
|
|
|
|
, title =? "Oracle VM VirtualBox Manager" --> doFloat
|
2020-07-04 16:36:50 +00:00
|
|
|
, className =? "VirtualBox Manager" --> doShift ( myWorkspaces !! 4 )
|
2020-05-22 15:50:18 +00:00
|
|
|
, (className =? "firefox" <&&> resource =? "Dialog") --> doFloat -- Float Firefox Dialog
|
2019-02-26 04:08:15 +00:00
|
|
|
] <+> namedScratchpadManageHook myScratchPads
|
2019-01-15 21:27:01 +00:00
|
|
|
|
2020-06-25 01:00:02 +00:00
|
|
|
myLogHook :: X ()
|
|
|
|
myLogHook = fadeInactiveLogHook fadeAmount
|
2020-06-25 02:20:10 +00:00
|
|
|
where fadeAmount = 1.0
|
2020-06-25 01:00:02 +00:00
|
|
|
|
2020-05-25 02:27:19 +00:00
|
|
|
main :: IO ()
|
2020-05-20 22:29:47 +00:00
|
|
|
main = do
|
|
|
|
-- Launching three instances of xmobar on their monitors.
|
|
|
|
xmproc0 <- spawnPipe "xmobar -x 0 /home/dt/.config/xmobar/xmobarrc0"
|
|
|
|
xmproc1 <- spawnPipe "xmobar -x 1 /home/dt/.config/xmobar/xmobarrc2"
|
|
|
|
xmproc2 <- spawnPipe "xmobar -x 2 /home/dt/.config/xmobar/xmobarrc1"
|
|
|
|
-- the xmonad, ya know...what the WM is named after!
|
2020-06-06 23:40:47 +00:00
|
|
|
xmonad $ ewmh def
|
|
|
|
{ manageHook = ( isFullscreen --> doFullFloat ) <+> myManageHook <+> manageDocks
|
|
|
|
-- Run xmonad commands from command line with "xmonadctl command". Commands include:
|
|
|
|
-- shrink, expand, next-layout, default-layout, restart-wm, xterm, kill, refresh, run,
|
2020-06-25 01:00:02 +00:00
|
|
|
-- focus-up, focus-down, swap-up, swap-down, swap-master, sink, quit-wm. You can run
|
2020-06-06 23:40:47 +00:00
|
|
|
-- "xmonadctl 0" to generate full list of commands written to ~/.xsession-errors.
|
2020-06-25 01:00:02 +00:00
|
|
|
, handleEventHook = serverModeEventHookCmd
|
|
|
|
<+> serverModeEventHook
|
2020-06-06 23:40:47 +00:00
|
|
|
<+> serverModeEventHookF "XMONAD_PRINT" (io . putStrLn)
|
|
|
|
<+> docksEventHook
|
2020-05-22 02:39:36 +00:00
|
|
|
, modMask = myModMask
|
|
|
|
, terminal = myTerminal
|
|
|
|
, startupHook = myStartupHook
|
2020-07-04 23:25:00 +00:00
|
|
|
, layoutHook = myLayoutHook
|
2020-07-04 16:36:50 +00:00
|
|
|
, workspaces = myWorkspaces
|
2020-05-22 02:39:36 +00:00
|
|
|
, borderWidth = myBorderWidth
|
2020-05-22 05:14:58 +00:00
|
|
|
, normalBorderColor = myNormColor
|
|
|
|
, focusedBorderColor = myFocusColor
|
2020-06-25 01:00:02 +00:00
|
|
|
, logHook = workspaceHistoryHook <+> myLogHook <+> dynamicLogWithPP xmobarPP
|
|
|
|
{ ppOutput = \x -> hPutStrLn xmproc0 x >> hPutStrLn xmproc1 x >> hPutStrLn xmproc2 x
|
|
|
|
, ppCurrent = xmobarColor "#c3e88d" "" . wrap "[" "]" -- Current workspace in xmobar
|
|
|
|
, ppVisible = xmobarColor "#c3e88d" "" -- Visible but not current workspace
|
|
|
|
, ppHidden = xmobarColor "#82AAFF" "" . wrap "*" "" -- Hidden workspaces in xmobar
|
2020-07-12 15:52:51 +00:00
|
|
|
, ppHiddenNoWindows = xmobarColor "#c792ea" "" -- Hidden workspaces (no windows)
|
|
|
|
, ppTitle = xmobarColor "#b3afc2" "" . shorten 60 -- Title of active window in xmobar
|
|
|
|
, ppSep = "<fc=#666666> <fn=2>|</fn> </fc>" -- Separators in xmobar
|
2020-06-25 01:00:02 +00:00
|
|
|
, ppUrgent = xmobarColor "#C45500" "" . wrap "!" "!" -- Urgent workspace
|
|
|
|
, ppExtras = [windowCount] -- # of windows current workspace
|
|
|
|
, ppOrder = \(ws:l:t:ex) -> [ws,l]++ex++[t]
|
|
|
|
}
|
|
|
|
} `additionalKeysP` myKeys
|