Skip to content

Instantly share code, notes, and snippets.

@mimi1vx
Created April 26, 2020 10:17
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 mimi1vx/bb7014735c3b9692bba5468963437f59 to your computer and use it in GitHub Desktop.
Save mimi1vx/bb7014735c3b9692bba5468963437f59 to your computer and use it in GitHub Desktop.
my xmonad config
{-# LANGUAGE FlexibleContexts #-}
import XMonad
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.EwmhDesktops
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.ManageHelpers
import XMonad.Layout.Fullscreen hiding (fullscreenEventHook)
import XMonad.Layout.LayoutHints
import XMonad.Layout.LayoutModifier
import XMonad.Layout.NoBorders
import XMonad.Layout.PerWorkspace
import XMonad.Layout.Tabbed
import XMonad.Util.EZConfig
import XMonad.Util.Themes
import XMonad.Prompt
import XMonad.Prompt.Shell
import XMonad.Prompt.Ssh
import Graphics.X11.ExtraTypes.XF86
promptConfig =
def
{position = Top, promptBorderWidth = 0, font = "xft:SourceCodePro:size=10"}
myModMask :: KeyMask
myModMask = mod4Mask
myhandleEventHook =
handleEventHook def <+>
fullscreenEventHook <+> hintsEventHook <+> docksEventHook
myManageHook :: ManageHook
myManageHook =
composeAll $
[className =? c --> doCenterFloat | c <- myFloats] ++
[appName =? r --> doShift wsp | (r, wsp) <- myWorkspaceMove] ++
[title =? t --> doShift wsp | (t, wsp) <- myWorkspaceMoveN] ++
[isFullscreen --> doFullFloat] ++ [fullscreenManageHook, manageDocks]
where
myFloats = ["Steam", "steam", "vlc", "Vlc", "mpv"]
myWorkspaceMove =
[ ("google-chrome", "web")
, ("chromium-browser", "web")
, ("Navigator", "web")
, ("Steam", "steam")
, ("steam", "steam")
, ("Weechat", "irc")
, ("Thunderbird", "email")
, ("Sakura", "con")
, ("sakura", "con")
, ("termonad-linux-x86_64", "con")
]
myWorkspaceMoveN = [("weechat", "irc"), ("mutt", "email")]
myWorkspaces :: [WorkspaceId]
myWorkspaces = ["con", "web", "irc", "email"] ++ map show [5 .. 9]
myBorders = lessBorders (Combine Union Screen OnlyScreenFloat)
myLayout =
avoidStruts $
myBorders $
layoutHints $
onWorkspace "con" (tab ||| tiled ||| mtiled) $
onWorkspaces ["web", "irc"] full $ full ||| tab ||| tiled ||| mtiled
-- default tiling algorithm partitions the screen into two panes
where
tiled = Tall nmaster delta ratio
-- The default number of windows in the master pane
nmaster = 1
-- Default proportion of screen occupied by master pane
ratio = toRational (2 / (1 + sqrt 5 :: Double))
-- Percent of screen to increment by when resizing panes
delta = 5 / 100
-- tab is tabbed
tab = tabbed shrinkText (theme smallClean)
-- full is Full
full = (fullscreenFloat . fullscreenFull) Full
-- mtiled is mirrortiled
mtiled = Mirror tiled
myStartupHook = spawn "/home/mimi/bin/xmonadstartup"
myKeysP =
[ ("M-p", shellPrompt promptConfig)
, ("C-M-p s", sshPrompt promptConfig)
, ("M-l", spawn "i3lock --color=101010 --dpms;")
, ("C-M-p w", spawn "chromium")
, ("C-M-p q", spawn "xterm -name weechat -e weechat")
, ("C-M-p e", spawn "sakura -m -t mutt -x mutt")
]
myKeys =
[ ((0, xF86XK_AudioMute), spawn "pulseaudio-ctl mute")
, ((0, xF86XK_AudioRaiseVolume), spawn "pulseaudio-ctl up")
, ((0, xF86XK_AudioLowerVolume), spawn "pulseaudio-ctl down")
, ((0, xF86XK_AudioMicMute), spawn "pulseaudio-ctl mute-input")
]
main :: IO ()
main = xmonad =<< xmobar defaults
defaults =
ewmh
def
{ modMask = myModMask
, handleEventHook = myhandleEventHook
, workspaces = myWorkspaces
, manageHook = myManageHook
, layoutHook = myLayout
, startupHook = myStartupHook
--, terminal = "/home/mimi/.cabal/bin/termonad"
, terminal = "/usr/bin/sakura"
} `additionalKeysP`
myKeysP `additionalKeys`
myKeys
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment