about summary refs log tree commit diff
path: root/src/lib/XMonad/Custom/Startup.hs
diff options
context:
space:
mode:
authorAzat Bahawi <azahi@teknik.io>2021-11-23 03:19:06 +0300
committerAzat Bahawi <azahi@teknik.io>2021-11-23 03:19:06 +0300
commit729e030dd25da2e36fa5a1312b8ecb3415dc1675 (patch)
tree53166b6c3bd96f860d0a7242353ef9cc7bb1790f /src/lib/XMonad/Custom/Startup.hs
parentRemove tests (diff)
Huge update
Diffstat (limited to 'src/lib/XMonad/Custom/Startup.hs')
-rw-r--r--src/lib/XMonad/Custom/Startup.hs58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/lib/XMonad/Custom/Startup.hs b/src/lib/XMonad/Custom/Startup.hs
new file mode 100644
index 0000000..f2415ea
--- /dev/null
+++ b/src/lib/XMonad/Custom/Startup.hs
@@ -0,0 +1,58 @@
+-- |
+-- Module                  : XMonad.Custom.Startup
+-- Description             : Startup hooks
+-- Copyright               : (c) Azat Bahawi 2018-2021
+-- SPDX-License-Identifier : GPL-3.0-or-later
+-- Maintainer              : azahi@teknik.io
+-- Stability               : experimental
+-- Portability             : non-portable
+--
+
+module XMonad.Custom.Startup
+  ( startupHook
+  ) where
+
+import           Control.Monad
+import           Data.Maybe
+import           XMonad                  hiding ( startupHook )
+import           XMonad.Hooks.ManageDocks
+import           XMonad.Hooks.SetWMName
+import           XMonad.Util.Cursor
+import           XMonad.Util.SpawnNamedPipe
+
+atomsToFullscreen :: [String]
+atomsToFullscreen =
+  [ "_NET_ACTIVE_WINDOW"
+  , "_NET_CLIENT_LIST"
+  , "_NET_CLIENT_LIST_STACKING"
+  , "_NET_DESKTOP_NAMES"
+  , "_NET_WM_DESKTOP"
+  , "_NET_WM_STATE"
+  , "_NET_WM_STATE_FULLSCREEN"
+  , "_NET_WM_STATE_HIDDEN"
+  , "_NET_WM_STRUT"
+  ]
+
+addNETSupported :: Atom -> X ()
+addNETSupported x = withDisplay $ \d -> do
+  r <- asks theRoot
+  n <- getAtom "_NET_SUPPORTED"
+  a <- getAtom "ATOM"
+  liftIO $ do
+    p <- join . maybeToList <$> getWindowProperty32 d n r
+    when (fromIntegral x `notElem` p)
+      $ changeProperty32 d r n a propModeAppend [fromIntegral x]
+
+addEWMHFullscreen :: X ()
+addEWMHFullscreen = do
+  s <- mapM getAtom atomsToFullscreen
+  mapM_ addNETSupported s
+
+startupHook :: X ()
+startupHook = do
+  spawnNamedPipe "xmobar ~/.xmonad/xmobarrc/top.hs" "xmobarTop"
+  spawnNamedPipe "xmobar ~/.xmonad/xmobarrc/bot.hs" "xmobarBot"
+  docksStartupHook
+  addEWMHFullscreen
+  setDefaultCursor xC_left_ptr
+  setWMName "xmonad"

Consider giving Nix/NixOS a try! <3