dwt1--dotfiles/.xmonad/xmonad.hs

116 lines
5.6 KiB
Haskell
Raw Normal View History

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
import System.IO (hPutStrLn)
import XMonad.Actions.MouseResize
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(..))
import XMonad.Hooks.EwmhDesktops -- for some fullscreen events, also for xcomposite in obs.
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
import XMonad.Hooks.WorkspaceHistory
2019-01-15 21:27:01 +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
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 &"
-- 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
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 ]
myManageHook :: XMonad.Query (Data.Monoid.Endo WindowSet)
myManageHook = composeAll
-- using 'doShift ( myWorkspaces !! 7)' sends program to workspace 8!
-- 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 )
, className =? "Gimp" --> doFloat
, title =? "Oracle VM VirtualBox Manager" --> doFloat
2020-07-04 16:36:50 +00:00
, className =? "VirtualBox Manager" --> doShift ( myWorkspaces !! 4 )
, (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
myLogHook :: X ()
myLogHook = fadeInactiveLogHook fadeAmount
where fadeAmount = 1.0
2020-05-25 02:27:19 +00:00
main :: IO ()
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,
-- 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.
, 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
, 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
, 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
, ppUrgent = xmobarColor "#C45500" "" . wrap "!" "!" -- Urgent workspace
, ppExtras = [windowCount] -- # of windows current workspace
, ppOrder = \(ws:l:t:ex) -> [ws,l]++ex++[t]
}
} `additionalKeysP` myKeys