Skip to content

Instantly share code, notes, and snippets.

@Pacane
Created January 9, 2023 15:09
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 Pacane/84785ecf23b73424dc4e74a6e334a010 to your computer and use it in GitHub Desktop.
Save Pacane/84785ecf23b73424dc4e74a6e334a010 to your computer and use it in GitHub Desktop.
import XMonad
import XMonad.Hooks.DynamicLog -- Needed for polybar
import XMonad.Hooks.ManageDocks -- Needed for xmobar
import XMonad.Layout.NoBorders -- No borders fullscreen
import XMonad.Hooks.ManageHelpers -- Needed for fullscreen
import XMonad.Util.Run(spawnPipe)
import XMonad.Util.EZConfig -- Adding own keybinds
import System.IO -- Needed for Polybar
import XMonad.Hooks.SetWMName -- Bug with Java/Swing apps
import XMonad.Actions.SpawnOn -- Assign apps to workspaces
import XMonad.Util.SpawnOnce -- Startup programs
import XMonad.Actions.Navigation2D -- Screen swap
import XMonad.Hooks.EwmhDesktops -- EWMH
import Text.Printf -- String interpolation
import XMonad.Layout.MouseResizableTile -- Mouse resize
import XMonad.Layout.ResizableTile -- Mouse resize
import XMonad.Layout.Tabbed
import XMonad.Layout.Fullscreen
import XMonad.Layout.Grid
import XMonad.Layout.SimpleFloat
import XMonad.Layout.SimplestFloat
import XMonad.Layout.WindowArranger
import XMonad.Layout.DragPane
import XMonad.Layout.ZoomRow
import XMonad.Layout.Simplest
import XMonad.Layout.StackTile
import XMonad.Layout.ResizableTile
import XMonad.Layout.BinarySpacePartition
import XMonad.Layout.OneBig
import XMonad.Actions.UpdatePointer
import XMonad.Actions.CycleWindows
import XMonad.Prompt -- Exit prompt
import XMonad.Prompt.ConfirmPrompt -- Exit prompt
import System.Exit -- Exit Prompt
import qualified XMonad.StackSet as W -- Swap windows
main = do
xmonad $ docks $ ewmhFullscreen $ ewmh def
{ terminal = myTerminal
, layoutHook = myLayoutHook
, manageHook = myManageHook <+> manageHook def
, modMask = myModMask
, borderWidth = myBorderWidth
, workspaces = myWorkspaces
, startupHook = myStartupHook
, logHook = dynamicLog
>> updatePointer (0.5, 0.5) (0, 0)
}
`additionalKeysP` myKeybinds
myResizableTall = mouseResizableTile{draggerType = BordersDragger}
myLayoutHook = tiled ||| avoidStruts (smartBorders Full)
where
tiled = avoidStruts $ smartBorders myResizableTall
myKeybinds = [
("M-S-<Left>", windows W.swapUp)
, ("M-S-<Right>", windows W.swapDown)
, ("M-S-<Down>", windows W.swapDown)
, ("M-S-<Up>", windows W.swapUp)
, ("C-M-<Left>", screenSwap L True)
, ("C-M-h", screenSwap L True)
, ("C-M-<Right>", screenSwap R True)
, ("C-M-l", screenSwap R True)
, ("M-comma", sendMessage (IncMasterN 1))
, ("M-period", sendMessage (IncMasterN (-1)))
, ("M-#", windows W.swapMaster)
, ("M-S-j", rotFocusedDown)
, ("M-S-k", rotFocusedUp)
, ("M-S-q", confirmPrompt hotPromptTheme "Quit XMonad" $ io (exitWith ExitSuccess))
]
myStartupHook = do
setWMName "LG3D"
spawn "~/apps/polybar_launcher.sh"
spawn "~/apps/keybinds.sh"
spawnOnce "xsetroot -cursor_name left_ptr"
spawnOnce "redshift-gtk"
spawnOnce "slack"
spawnOnce "google-chrome-stable"
spawnOnce "dunst"
spawnOnce "nm-applet"
spawnOnce "xfce4-terminal -e \"$HOME/apps/transmission/torrent.sh\""
spawnOnce "nitrogen --restore"
spawnOnce "mpd"
spawnOnce "mpdscribble"
--spawnOnce "xrandr --output DP-2 --mode 1920x1080 --rate 144 --primary --left-of DP-1"
spawnOnce "xrandr --output DisplayPort-1 --mode 1920x1080 --rate 144 --primary --left-of DisplayPort-0"
spawn "setxkbmap ca && xmodmap ~/.Xmodmap"
spawnOnce "~/apps/audio.sh"
myTerminal = "xfce4-terminal"
myModMask = mod4Mask -- Win key or Super_L
myBorderWidth = 1
-----------------------------------------------------------------------------}}}
-- WORKSPACES {{{
--------------------------------------------------------------------------------
wsCODE = "\xf120"
wsWEB = "\xf268"
wsMUSIC = "\xf001"
wsCHAT = "\xf198"
wsCALLS = "\xf095"
wsGAMES = "\xf11b"
wsTWITCH = "\xf1e8"
wsSTREAM = "\xf03d"
wsSOUND = "\xf028"
wsJUNK = "\xf1f8"
myWorkspaces :: [String]
myWorkspaces = [wsCODE, wsWEB, wsMUSIC, wsCHAT, wsGAMES, wsTWITCH, wsCALLS, wsSTREAM, wsSOUND, wsJUNK]
--------------
-- WINDOW RULES
-- ---------
myManageHook = composeAll
[ className =? "Gimp" --> doFloat
, className =? "awakened-poe-trade" --> doFloat
, className =? "chaos-recipe" --> doFloat
, className =? "Chaos-recipe" --> doFloat
, className =? "App" --> doFloat
, className =? "app" --> doFloat
, title =? "Archetype Cory Wong (GUI)" --> doFloat
, className =? "jetbrains-idea" --> doShift (wsCODE)
, className =? "Opera" --> doShift (wsWEB)
, className =? "Firefox" --> doShift (wsWEB)
, className =? "Chromium" --> doShift (wsWEB)
, className =? "Chrome" --> doShift (wsWEB)
, className =? "google-chrome" --> doShift (wsWEB)
, className =? "Google-chrome" --> doShift (wsWEB)
, className =? "Slack" --> doShift (wsCHAT)
, className =? "Mumble" --> doShift (wsCHAT)
, title =? "irc / weechat" --> doShift (wsCHAT)
, title =? "TeamSpeak 3" --> doShift (wsCHAT)
, className =? "obs" --> doShift (wsSTREAM)
, className =? "Patchage" --> doShift (wsSOUND)
, className =? "qjackctl" --> doShift (wsSOUND)
, className =? "Qjackctl" --> doShift (wsSOUND)
, title =? "Messages / Status" --> doShift (wsSOUND)
, title =? "JACK Audio Connection Kit [(default)] Active." --> doShift (wsSOUND)
, className =? "calfjackhost" --> doShift (wsSOUND)
, className =? "Patchage" --> doShift (wsSOUND)
, className =? "zoom" --> doShift (wsCALLS)
, title =? "meet.google.com is sharing your screen." --> doShift (wsJUNK)
, className =? "Rofi" --> doFloat
, isFullscreen --> doFullFloat
]
base03 = "#002b36"
base3 = "#fdf6e3"
red = "#dc322f"
blue = "#268bd2"
active = blue
hotPromptTheme = def
{ bgColor = red
, fgColor = base3
, position = Top
, fgHLight = base03
, bgHLight = active
, borderColor = base03
, promptBorderWidth = 0
, height = 20
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment