Skip to content

Instantly share code, notes, and snippets.

@jmcblane
Created April 16, 2019 03:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jmcblane/374972c9b610766b8b8d9b7db5eb270e to your computer and use it in GitHub Desktop.
Save jmcblane/374972c9b610766b8b8d9b7db5eb270e to your computer and use it in GitHub Desktop.
import System.IO
import System.Exit
import XMonad
import qualified Data.Map as M
import qualified XMonad.StackSet as W
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.ManageHelpers
import XMonad.Hooks.EwmhDesktops
import XMonad.Config.Desktop
import XMonad.Util.Run
import XMonad.Layout.LayoutHints
import XMonad.Layout.Maximize
import XMonad.Layout.NoBorders
import XMonad.Layout.PerWorkspace
import XMonad.Layout.Reflect
import XMonad.Layout.ResizableTile
import XMonad.Layout.SimplestFloat
import XMonad.Layout.WindowNavigation
import XMonad.Actions.Navigation2D
--------------------------------------
-- Options
-- -------
myBorderWidth = 3
myModMask = mod1Mask
myNormalBorderColor = "#3a3a3a"
myFocusedBorderColor = "#7a8f65"
myTerminal = "termite"
myWorkspaces = ["tile","float","max", "xtra"]
-- Keybinds
-- --------
myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
[ ((modm .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf)
, ((0, xK_F2 ), spawn $ XMonad.terminal conf)
, ((modm, xK_p ), spawn "dmenu_run -p 'Run:' -y 22")
, ((modm .|. shiftMask, xK_c ), kill)
, ((modm, xK_space ), sendMessage NextLayout)
, ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf)
, ((modm, xK_Tab ), windows W.focusDown)
, ((modm, xK_j ), windowGo D False )
, ((modm, xK_k ), windowGo U False )
, ((modm, xK_l ), windowGo R False )
, ((modm, xK_h ), windowGo L False )
, ((modm, xK_Return), windows W.swapMaster)
, ((modm .|. shiftMask, xK_j ), windowSwap D False )
, ((modm .|. shiftMask, xK_k ), windowSwap U False )
, ((modm .|. shiftMask, xK_l ), windowSwap R False )
, ((modm .|. shiftMask, xK_h ), windowSwap L False )
, ((modm .|. controlMask, xK_h ), sendMessage Shrink)
, ((modm .|. controlMask, xK_l ), sendMessage Expand)
, ((modm, xK_t ), withFocused $ windows . W.sink)
, ((modm, xK_m ), withFocused (sendMessage . maximizeRestore))
, ((modm, xK_comma ), sendMessage (IncMasterN 1))
, ((modm, xK_period), sendMessage (IncMasterN (-1)))
, ((modm .|. shiftMask, xK_q ), io (exitWith ExitSuccess))
, ((modm .|. shiftMask, xK_r ), restart "xmonad" True)
, ((modm, xK_b ), sendMessage ToggleStruts)
, ((modm .|. controlMask, xK_j ), sendMessage MirrorShrink)
, ((modm .|. controlMask, xK_k ), sendMessage MirrorExpand)
--, ((modm, xK_g ), sendMessage $ ToggleGaps)
-- Manual Movements
-- ------ ---------
, ((modm .|. controlMask, xK_Right), sendMessage $ Move R)
, ((modm .|. controlMask, xK_Left ), sendMessage $ Move L)
, ((modm .|. controlMask, xK_Up ), sendMessage $ Move U)
, ((modm .|. controlMask, xK_Down ), sendMessage $ Move D)
-- App Shortcuts
, ((mod4Mask .|. shiftMask, xK_Return), spawn "termite -e tmux")
, ((mod4Mask, xK_p), spawn "termite -e 'ssh -p 4002 jake@voidpi'")
, ((mod4Mask, xK_c), spawn "termite -e bc")
, ((mod4Mask, xK_w), spawn "termite -e /home/jake/scripts/weelaunch.sh")
, ((mod4Mask, xK_m), spawn "termite -e mutt")
, ((mod4Mask, xK_h), spawn "termite -e gotop")
, ((mod4Mask, xK_r), spawn "termite -e rtv")
, ((mod4Mask, xK_g), spawn "termite -e googler")
, ((mod4Mask, xK_e), spawn "termite -e elinks")
, ((mod4Mask, xK_y), spawn "termite -e mpsyt")
, ((mod4Mask, xK_v), spawn "termite -e nvim")
, ((mod4Mask, xK_f), spawn "termite -e vifm")
, ((mod4Mask, xK_a), spawn "termite -e ncpamixer")
, ((mod4Mask, xK_b), spawn "firefox")
, ((modm, xK_o), spawn "/home/jake/scripts/www/www-menu.sh")
, ((modm .|. shiftMask, xK_o), spawn "/home/jake/scripts/www/www-copy.sh")
]
++
[((m .|. modm, k), windows $ f i)
| (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9]
, (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]]
-- Multi monitor stuff?
-- ++
--[((m .|. modm, 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)]]
-- Mouse
-- -----
myMouseBindings (XConfig {XMonad.modMask = modMask}) = M.fromList $
[ ((modMask, button1), (\w -> focus w >> mouseMoveWindow w))
, ((modMask, button2), (\w -> focus w >> windows W.swapMaster))
, ((modMask, button3), (\w -> focus w >> mouseResizeWindow w))
]
myFocusFollowsMouse :: Bool
myFocusFollowsMouse = True
-- Layouts
-- -------
myLayout = smartBorders $ maximize ( lays )
where
tiled = ResizableTall 1 (1/100) (144/227) []
w1 = onWorkspace "float" simplestFloat (tiled)
w2 = reflectHoriz tiled
w3 = ResizableTall 2 (1/100) (55/100) []
lays = onWorkspace "max" Full (w1) ||| Mirror w3
-- Kludges
-- -------
myManageHook = composeAll
[ className =? "feh" --> doFloat
, className =? "lxappearance" --> doFloat
, className =? "Xmessage" --> doFloat
, className =? "sxiv" --> doFloat
, resource =? "desktop_window" --> doIgnore
, isFullscreen --> doFullFloat ]
where unfloat = ask >>= doF . W.sink
-- Log, Startup
-- -------
myLogHook = return ()
myStartupHook = do
spawn "$HOME/.config/polybar/launch.sh"
spawn "source $HOME/.fehbg"
-- XMobar PP
-- ------ --
--myPP :: PP
--myPP = defaultPP
--{ ppCurrent = xmobarColor "#3aab41" ""
--, ppSep = xmobarColor "#3a3a3a" "" " // "
--, ppLayout = xmobarColor "#3aab41" ""
--, ppUrgent = xmobarColor "red" ""
--, ppTitle = xmobarColor "#acacab" "" . pad }
-- Get Ready
-- --- -----
myconfig = desktopConfig {
terminal = myTerminal,
focusFollowsMouse = myFocusFollowsMouse,
borderWidth = myBorderWidth,
modMask = myModMask,
workspaces = myWorkspaces,
normalBorderColor = myNormalBorderColor,
focusedBorderColor = myFocusedBorderColor,
keys = myKeys,
mouseBindings = myMouseBindings,
layoutHook = desktopLayoutModifiers $ myLayout,
manageHook = myManageHook
<+> manageDocks <+> manageHook desktopConfig,
logHook = myLogHook,
handleEventHook = handleEventHook desktopConfig <+> fullscreenEventHook,
startupHook = myStartupHook <+> startupHook desktopConfig
}
-- Make it rain
-- ---- -- ----
main = do
-- xmobar <- spawnPipe "xmobar"
xmonad $ ewmh $ myconfig
-- { logHook = dynamicLogWithPP $ myPP { ppOutput = hPutStrLn xmobar }
-- }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment