Skip to content

Instantly share code, notes, and snippets.

@not-fl3
Last active November 7, 2017 22:07
Show Gist options
  • Save not-fl3/74c8dda8775fd5778e95f73297f0a3eb to your computer and use it in GitHub Desktop.
Save not-fl3/74c8dda8775fd5778e95f73297f0a3eb to your computer and use it in GitHub Desktop.
import XMonad
import qualified XMonad.StackSet as W
import qualified Data.Map as M
import System.Exit
import Graphics.X11.Xlib
import Graphics.X11.ExtraTypes.XF86
import qualified System.IO
import XMonad.Actions.CycleWS (nextScreen,prevScreen)
import Data.List
-- Prompts
import XMonad.Prompt
import XMonad.Prompt.Shell
-- Actions
import XMonad.Actions.MouseGestures
import XMonad.Actions.UpdatePointer
import XMonad.Actions.GridSelect
-- Utils
import XMonad.Util.Run (spawnPipe)
import XMonad.Util.Loggers
import XMonad.Util.EZConfig
import XMonad.Util.Scratchpad
-- Hooks
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.UrgencyHook
import XMonad.Hooks.Place
import XMonad.Hooks.EwmhDesktops
-- Layouts
import XMonad.Layout.NoBorders
import XMonad.Layout.ResizableTile
import XMonad.Layout.Tabbed
import XMonad.Layout.DragPane
import XMonad.Layout.LayoutCombinators hiding ((|||))
import XMonad.Layout.DecorationMadness
import XMonad.Layout.TabBarDecoration
import XMonad.Layout.Simplest
import XMonad.Layout.SimplestFloat
import XMonad.Layout.LayoutHints
import XMonad.Layout.SubLayouts
import XMonad.Layout.WindowNavigation
import XMonad.Layout.PerWorkspace
import XMonad.Layout.Groups as Groups
import XMonad.Layout.Groups.Wmii as Wmii
import XMonad.Layout.Groups.Examples as GroupsExamples
import XMonad.Layout.Groups.Helpers as GroupsHelpers
import XMonad.Layout.BinarySpacePartition
import XMonad.Util.Cursor
import XMonad.Hooks.ICCCMFocus
import Data.Ratio ((%))
import XMonad.Hooks.ManageHelpers
import XMonad.Layout.Gaps
import XMonad.Hooks.SetWMName
import XMonad.Util.NamedScratchpad
import XMonad.Hooks.InsertPosition
defaults = defaultConfig {
terminal = "xterm"
--`, font = "xft:Droid Sans Mono:size=10"
, normalBorderColor = "black"
, focusedBorderColor = "red"
, workspaces = myWorkspaces
, modMask = mod4Mask
, borderWidth = 2
, startupHook = setWMName "LG3D" >> setDefaultCursor xC_arrow
, manageHook = myManageHook
, handleEventHook = fullscreenEventHook
, layoutHook = myLayoutHook
}`additionalKeys` myKeys
scratchpads = [ NS "Telegram" "telegram-desktop" (className =? "TelegramDesktop") defaultFloating,
NS "Skype" "skypeforlinux" (className =? "skypeforlinux") defaultFloating,
NS "Matrix" "riot-desktop" (className =? "Riot") defaultFloating
]
myLayoutHook = gaps [(U,15)] $ smartBorders $
onWorkspace "5:float" simplestFloat $
myWmii ||| simplestFloat
where
myWmii = GroupsExamples.tallTabs $ def {tabsTheme = myTabConfig}
tiled = Tall nmaster delta ratio
nmaster = 1
delta = 3/100
ratio = 1/2
-- tab theme default
myTabConfig = defaultTheme {
activeColor = "#888888"
, activeBorderColor = "#000000"
, inactiveColor = "#666666"
, inactiveBorderColor = "#000000"
, decoHeight = 10
}
myWorkspaces :: [String]
myWorkspaces = ["1:web","2:dev","3:dev","4:term","5:float"] ++ map show [6..9]
-- Color of current window title in xmobar.
xmobarTitleColor = "#FFB6B0"
-- Color of current workspace in xmobar.
xmobarCurrentWorkspaceColor = "green"
myManageHook :: ManageHook
myManageHook = composeAll . concat $
[ [composeOne [ checkDock -?> doIgnore
, isDialog -?> doFloat
, className =? "Gimp" -?> doFloat
, return True -?> doF W.swapDown
--, return True -?> (liftX GroupsHelpers.moveToNewGroupDown >>= idHook)
]
]
, [className =? c --> doF (W.shift "2:dev") | c <- myDev]
, [className =? c --> doF (W.shift "4:vm") | c <- myVMs]
, [className =? "stalonetray" --> doIgnore]
, [manageDocks]
, [namedScratchpadManageHook scratchpads]
]
where
myWeb = ["Firefox","Chromium","Chrome", "Skype"]
myDev = ["Emacs", "emacs"]
myTerm = ["Terminator","xterm"]
myVMs = ["VirtualBox"]
--KP_Add KP_Subtract
myKeys = [ ((mod4Mask, xK_Right), nextScreen)
, ((mod4Mask, xK_c), kill)
, ((mod4Mask .|. controlMask, xK_Left ), prevScreen)
, ((mod4Mask, xK_g), goToSelected defaultGSConfig)
, ((mod4Mask, xK_s), spawnSelected defaultGSConfig ["firefox-nightly","emacs","gthumb","pcmanfm"])
--, ((mod4Mask, xK_KP_Add), spawn "amixer set Master 10%+ && ~/.xmonad/getvolume.sh >> /tmp/.volume-pipe")
--, ((mod4Mask, xK_KP_Subtract), spawn "amixer set Master 10%- && ~/.xmonad/getvolume.sh >> /tmp/.volume-pipe")
, ((mod4Mask, xK_b ), sendMessage ToggleStruts)
, ((mod4Mask, xK_w), spawn "record")
, ((mod4Mask, xK_e), spawn "killall recordmydesktop")
, ((mod4Mask .|. shiftMask, xK_c), namedScratchpadAction scratchpads "Telegram")
, ((mod4Mask .|. shiftMask, xK_x), namedScratchpadAction scratchpads "Matrix")
, ((mod4Mask .|. shiftMask, xK_z), namedScratchpadAction scratchpads "Skype")
, ((mod4Mask .|. controlMask, xK_m), withFocused (sendMessage . MergeAll))
, ((mod4Mask .|. controlMask, xK_u), withFocused (sendMessage . UnMerge))
, ((mod4Mask, xK_period), GroupsExamples.increaseNMasterGroups)
, ((mod4Mask, xK_comma), GroupsExamples.decreaseNMasterGroups)
, ((mod4Mask .|. controlMask, xK_Right), sendMessage $ Move R)
, ((mod4Mask .|. controlMask, xK_Left ), sendMessage $ Move L)
, ((mod4Mask .|. controlMask, xK_Up ), sendMessage $ Move U)
, ((mod4Mask .|. controlMask, xK_Down ), sendMessage $ Move D)
, ((mod4Mask, xK_o), GroupsHelpers.moveToNewGroupDown)
, ((mod4Mask, xK_y), Wmii.groupToNextLayout)
, ((mod4Mask, xK_f), Wmii.toggleGroupFull)
, ((mod4Mask .|. shiftMask, xK_u), GroupsHelpers.moveToGroupUp False)
, ((mod4Mask .|. shiftMask, xK_i), GroupsHelpers.moveToGroupDown False)
, ((mod4Mask, xK_i), GroupsHelpers.focusUp)
, ((mod4Mask, xK_u), GroupsHelpers.focusDown)
, ((mod4Mask .|. shiftMask, xK_l), GroupsExamples.expandMasterGroups)
, ((mod4Mask .|. shiftMask, xK_h), GroupsExamples.shrinkMasterGroups)
, ((mod4Mask .|. shiftMask, xK_Tab), GroupsHelpers.focusGroupUp)
, ((mod4Mask, xK_Tab), GroupsHelpers.focusGroupDown)
]
main = do
xmproc <- spawnPipe "/usr/bin/xmobar ~/.xmonad/xmobar.hs"
xmonad $ defaults {
logHook = takeTopFocus <+> (dynamicLogWithPP . namedScratchpadFilterOutWorkspacePP $ defaultPP {
ppOutput = System.IO.hPutStrLn xmproc
, ppTitle = xmobarColor xmobarTitleColor "" . wrap " [ <fc=gray>" "</fc> ] " . shorten 200
, ppCurrent = xmobarColor xmobarCurrentWorkspaceColor "" . wrap "[" "]"
, ppSep = " "
, ppWsSep = " "
--, ppLayout = const ""
, ppLayout = (\ x -> case x of
"Tabs by Vertical" -> "[T]"
"SimplestFloat" -> "[F]"
_ -> x )
, ppHiddenNoWindows = showNamedWorkspaces
})
} where showNamedWorkspaces wsId = if any (`elem` wsId) ['a'..'z']
then pad wsId
else ""
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment