From 09aeb45decb4729898b82b5916d62a851de7d5c2 Mon Sep 17 00:00:00 2001 From: Aaron Bieber Date: Wed, 27 Apr 2022 09:41:48 -0600 Subject: [PATCH] +xmonad conf --- .xmonad/xmonad-config.cabal | 14 ++++ .xmonad/xmonad.hs | 132 ++++++++++++++++++++++++++++++++++++ 2 files changed, 146 insertions(+) create mode 100644 .xmonad/xmonad-config.cabal create mode 100644 .xmonad/xmonad.hs diff --git a/.xmonad/xmonad-config.cabal b/.xmonad/xmonad-config.cabal new file mode 100644 index 0000000..f270730 --- /dev/null +++ b/.xmonad/xmonad-config.cabal @@ -0,0 +1,14 @@ +cabal-version: 2.4 + +name: xmonad-config +version: 0.1.0.0 +synopsis: XMonad config +author: Aaron Bieber +maintainer: aaron@bolddaemon.com + +executable xmonad-config + main-is: xmonad.hs + ghc-options: -Wall + build-depends: base, containers, xmonad, xmonad-contrib, unix + hs-source-dirs: . + default-language: Haskell2010 diff --git a/.xmonad/xmonad.hs b/.xmonad/xmonad.hs new file mode 100644 index 0000000..ccf502b --- /dev/null +++ b/.xmonad/xmonad.hs @@ -0,0 +1,132 @@ +{-# LANGUAGE QuasiQuotes #-} + +import qualified Data.Map as M +import Data.Monoid +import System.OpenBSD.Process (pledge) +import XMonad +import XMonad.Actions.CycleWS +import XMonad.Hooks.EwmhDesktops +import XMonad.Hooks.ManageDocks +import XMonad.Hooks.UrgencyHook +import XMonad.Layout.Decoration +import XMonad.Layout.LayoutModifier +import XMonad.Layout.Simplest (Simplest(..)) +import XMonad.Layout.Spacing +import XMonad.Layout.SubLayouts +import XMonad.Layout.Tabbed +import XMonad.Layout.WindowNavigation +import qualified XMonad.StackSet as W +import XMonad.Util.EZConfig +import XMonad.Util.NamedWindows +import XMonad.Util.Run +import XMonad.Util.SpawnOnce + +data LibNotifyUrgencyHook = + LibNotifyUrgencyHook + deriving (Read, Show) + +instance UrgencyHook LibNotifyUrgencyHook where + urgencyHook LibNotifyUrgencyHook w = do + name <- getName w + Just idx <- fmap (W.findTag w) $ gets windowset + safeSpawn "notify-send" [show name, "workspace " ++ idx] + +main :: IO () +main = do + _ <- pledge (Just "stdio rpath wpath cpath proc exec unix") Nothing + xmonad $ + ewmh $ + withUrgencyHook LibNotifyUrgencyHook $ + def + { normalBorderColor = "#666666" + , focusedBorderColor = "darkgrey" + , focusFollowsMouse = False + , terminal = "xfce4-terminal" + , workspaces = myWorkspaces + , startupHook = myStartupHook + , layoutHook = myLayoutHook + , keys = \c -> myKeys c `M.union` XMonad.keys def c + , manageHook = manageDocks <+> myManageHook <+> manageHook def + } `removeKeysP` + ["M-p"] -- don't clober emacs. + +myKeys :: XConfig t -> M.Map (KeyMask, KeySym) (X ()) +myKeys (XConfig {XMonad.modMask = modm}) = + M.fromList + [ ((modm .|. shiftMask, xK_Right), shiftToNext) + , ((modm .|. shiftMask, xK_Left), shiftToPrev) + , ((modm, xK_r), spawn "rofi -show run") + , ((modm .|. controlMask, xK_h), sendMessage $ pullGroup L) + , ((modm .|. controlMask, xK_l), sendMessage $ pullGroup R) + , ((modm .|. controlMask, xK_k), sendMessage $ pullGroup U) + , ((modm .|. controlMask, xK_j), sendMessage $ pullGroup D) + , ((modm .|. controlMask, xK_m), withFocused (sendMessage . MergeAll)) + , ((modm .|. controlMask, xK_u), withFocused (sendMessage . UnMerge)) + , ((modm .|. controlMask, xK_period), onGroup W.focusUp') + , ((modm .|. controlMask, xK_comma), onGroup W.focusDown') + ] + +myWorkspaces :: [String] +myWorkspaces = + clickable $ ["main", "2", "3", "4", "5", "6", "7", "8", "console"] + where + clickable l = + [ "%{A1:xdotool key alt+" ++ show (n) ++ "&:}" ++ ws ++ "%{A-}" + | (i, ws) <- zip [1 :: Int .. 9 :: Int] l + , let n = i + ] + +myTabTheme :: Theme +myTabTheme = + def + { activeTextColor = "#000" + , activeColor = "#ffffea" + , inactiveColor = "#dedeff" + , urgentBorderColor = "red" + } + +myLayoutHook :: + XMonad.Layout.LayoutModifier.ModifiedLayout WindowNavigation (XMonad.Layout.LayoutModifier.ModifiedLayout (XMonad.Layout.Decoration.Decoration XMonad.Layout.Tabbed.TabbedDecoration XMonad.Layout.Decoration.DefaultShrinker) (XMonad.Layout.LayoutModifier.ModifiedLayout (Sublayout Simplest) (XMonad.Layout.LayoutModifier.ModifiedLayout Spacing (Choose (XMonad.Layout.LayoutModifier.ModifiedLayout (XMonad.Layout.Decoration.Decoration XMonad.Layout.Tabbed.TabbedDecoration XMonad.Layout.Decoration.DefaultShrinker) (XMonad.Layout.LayoutModifier.ModifiedLayout (Sublayout Simplest) Tall)) (Choose (Mirror (XMonad.Layout.LayoutModifier.ModifiedLayout (XMonad.Layout.Decoration.Decoration XMonad.Layout.Tabbed.TabbedDecoration XMonad.Layout.Decoration.DefaultShrinker) (XMonad.Layout.LayoutModifier.ModifiedLayout (Sublayout Simplest) Tall))) Full))))) Window +myLayoutHook = + windowNavigation $ + subTabbed $ + spacingRaw True (Border 20 5 5 5) True (Border 10 10 10 10) True $ + (tiled ||| Mirror tiled ||| Full) + where + tiled = + addTabs shrinkText myTabTheme . subLayout [] Simplest $ + Tall nmaster delta ratio + nmaster = 1 + ratio = 0.5 + delta = 0.03 + +myManageHook :: Query (Data.Monoid.Endo WindowSet) +myManageHook = + composeAll + [ className =? "mpv" --> doFloat + , className =? "VLC" --> doFloat + , className =? "Pinentry-gtk-2" --> doFloat + , className =? "Pinentry-gnome3" --> doFloat + , className =? "XConsole" --> doF (W.shift (myWorkspaces !! 8)) + ] + +myStartupHook :: X () +myStartupHook = do + spawn "pkill polybar; polybar tal" + --spawnOnce "urxvtc -name Mail" + spawnOnce "xfce4-terminal" + spawnOnce "chrome" + spawnOnce "emacs" + spawnOnce "nheko" +--myXmoStatus :: String +--myXmoStatus = "xmobar" +--myXmoPP :: PP +--myXmoPP = xmobarPP +-- { +-- ppCurrent = xmobarColor "#443740" "" . wrap " " " " +-- , ppHidden = xmobarColor "#ffffff" "" . wrap " " " " +-- , ppUrgent = xmobarColor "#ff0000" "" . wrap " " " " +-- , ppSep = " " +-- , ppLayout = xmobarColor "#ffffff" "" . wrap "|" "|" +-- , ppTitle = xmobarColor "#ffffff" "" . shorten 20 +-- }