-
-
Save not-fl3/74c8dda8775fd5778e95f73297f0a3eb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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