Skip to content

Instantly share code, notes, and snippets.

@nefigcas
Last active January 19, 2026 23:58
Show Gist options
  • Select an option

  • Save nefigcas/31e2766621da24666ee85620ab535c6f to your computer and use it in GitHub Desktop.

Select an option

Save nefigcas/31e2766621da24666ee85620ab535c6f to your computer and use it in GitHub Desktop.
Haskell Xmonad
import XMonad
import XMonad.Config.Xfce
import XMonad.Util.EZConfig
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.EwmhDesktops
-- Layouts imports
import XMonad.Layout.NoBorders (noBorders, smartBorders)
import XMonad.Layout.Spiral
import Data.Ratio -- for % operator
import Data.List (isSuffixOf)
import XMonad.Layout.Grid (Grid(..))
import XMonad.Layout.GridVariants
import XMonad.Layout.ThreeColumns
import XMonad.Hooks.ManageHelpers
-- Named ScratchPads
import XMonad.ManageHook
import XMonad.Util.NamedScratchpad
import XMonad.StackSet as W
-- Focus follows mouse and Mouse follows focus
import XMonad.Actions.UpdatePointer
import XMonad.Actions.SpawnOn
myLayouts = desktopLayoutModifiers $
smartBorders $
avoidStruts (
-- spiral (125%146)
-- |||Tall 1 (10/100) (50/100)
-- |||Mirror Grid
ThreeCol 1 (3/100) (1/3)
--GridRatio (1/2)
||| noBorders Full)
-- scratchPads
scratchpads :: [NamedScratchpad]
scratchpads =
[ NS "term" "xfce4-terminal" (className =? "Xfce4-terminal") nonFloating
, NS "keepass" "keepassxc" (className =? "KeePassXC")
(customFloating $ W.RationalRect (1/4) (0/1) (1/2) (3/4))
, NS "emacs" "/home/maribelma/.local/bin/emacsclient-one-frame.sh" (className =? "Emacs") nonFloating
, NS "vlc" "vlc 'rtsp://admin:L2016DF2@192.168.1.64:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif'"
(className =? "vlc") nonFloating
, NS "telegram" "telegram-desktop" (className =? "TelegramDesktop")
(customFloating $ W.RationalRect (3/4) (1/10) (1/4) (4/5))
, NS "thunar" "thunar" (className =? "Thunar")
(customFloating $ W.RationalRect (1/4) (1/3) (1/2) (2/3))
, NS "jd" "jdownloader > /dev/null" (title =? "JDownloader 2") doFullFloat
, NS "spoti" "spotify-launcher" (className =? "Spotify") doFullFloat
, NS "calc" "galculator" (className =? "Galculator") defaultFloating
, NS "private" "firefox --private-window reddit.com" (fmap (isSuffixOf "Mozilla Firefox Private Browsing") title) doCenterFloat ]
myWorkspaces = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "NSP"]
myManageHook = composeAll
[ className =? "Xfce4-panel" --> doIgnore
, className =? "Xfce4-notifyd" --> doIgnore
, className =? "Gimp" --> doFullFloat
, className =? "calibre" --> doShift (myWorkspaces !! 7 )
, className =? "Tor Browser" --> doShift (myWorkspaces !! 7 )
, className =? "Inkscape" --> doShift (myWorkspaces !! 4 )
, className =? "gimp" --> doShift (myWorkspaces !! 4 )
, className =? "firefox" --> doShift (myWorkspaces !! 2 )
, isDialog --> doFloat
, isFullscreen --> doFullFloat
, manageDocks ]
main :: IO()
main = xmonad $ ewmhFullscreen $ ewmh xfceConfig
{ modMask = mod4Mask
, layoutHook = myLayouts
-- , logHook = updatePointer (0.5, 0.5) (0, 0) --breaks jumpapp/wmctrl
, manageHook = myManageHook <+> namedScratchpadManageHook scratchpads
}
`additionalKeysP`
[ ("M-S-<Return>", namedScratchpadAction scratchpads "term")
, ("M-x k", namedScratchpadAction scratchpads "keepass")
, ("M-x e", namedScratchpadAction scratchpads "emacs")
, ("M-x t", namedScratchpadAction scratchpads "telegram")
, ("M-x f", namedScratchpadAction scratchpads "thunar")
, ("M-x j", namedScratchpadAction scratchpads "jd")
, ("M-x s", namedScratchpadAction scratchpads "spoti")
, ("M-x c", namedScratchpadAction scratchpads "calc")
, ("M-x p", namedScratchpadAction scratchpads "private")
, ("M-x v", namedScratchpadAction scratchpads "vlc")
, ("M-f", spawnOn "3" "firefox")
, ("M-i", spawnOn "5" "inkscape")
, ("M-g", spawnOn "5" "gimp")
, ("M-c c", spawnOn "8" "calibre")
, ("M-c t", spawnOn "8" "torbrowser-launcher")]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment