Skip to content

Instantly share code, notes, and snippets.

@nefigcas
Last active August 1, 2025 17:33
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
-- Layouts imports
import XMonad.Layout.NoBorders (noBorders, smartBorders)
import XMonad.Layout.Spiral
import Data.Ratio -- for % operator
import Data.List (isSuffixOf, isPrefixOf)
import XMonad.Layout.Grid (Grid(..))
import XMonad.Hooks.ManageHelpers (isFullscreen, doFullFloat, doCenterFloat)
-- 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
myLayouts = desktopLayoutModifiers $
smartBorders $
spiral (125%146)
-- ||| Grid
-- ||| Tall 1 (10/100) (50/100)
||| noBorders Full
-- scratchPads
scratchpads :: [NamedScratchpad]
scratchpads = [
NS "term" "xfce4-terminal --title scratchpad" (title =? "scratchpad") nonFloating
, NS "keepass" "keepassxc" (className =? "KeePassXC")
(customFloating $ W.RationalRect (1/4) (0/1) (1/2) (2/3))
, NS "emacs" "emacsclient -nc" (className =? "Emacs") nonFloating
, NS "telegram" "telegram-desktop" (className =? "TelegramDesktop")
(customFloating $ W.RationalRect (5/6) (1/6) (1/6) (1/2))
, NS "thunar" "thunar" (className =? "Thunar")
(customFloating $ W.RationalRect (1/4) (1/3) (1/2) (2/3))
, NS "jd" "jdownloader" (className =? "org-jdownloader-update-launcher-JDLauncher") defaultFloating
-- , NS "jd" "jdownloader" (className =? "org-jdownloader-launcher-JDLauncher") defaultFloating
, NS "spoti" "spotify-launcher" (className =? "Spotify") doFullFloat
, NS "calc" "galculator" (className =? "Galculator") defaultFloating
, NS "private" "firefox --private-window reddit.com" (fmap (isSuffixOf "Mozilla Firefox Navegación privada") title) nonFloating]
myRealManageHook = composeAll
[ className =? "Xfce4-panel" --> doIgnore
, className =? "Gimp" --> doFullFloat
, className =? "Xfce4-notifyd" --> doIgnore
, manageDocks ]
main :: IO()
main = xmonad $ xfceConfig
{ terminal = "xfce4-terminal"
, modMask = mod4Mask
, layoutHook = myLayouts
-- , logHook = updatePointer (0.5, 0.5) (0, 0)
, manageHook = myRealManageHook <+> 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") ]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment