From c9dc82165ba6d57deb4388904154fde4d1541256 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Ke=C3=9Fler?= Date: Sat, 23 Jul 2022 12:44:13 +0200 Subject: [PATCH] initial commit --- .gitignore | 1 + .gitmodules | 3 ++ xmonad-custom | 1 + xmonad.hs | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 123 insertions(+) create mode 100644 .gitignore create mode 100644 .gitmodules create mode 160000 xmonad-custom create mode 100644 xmonad.hs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..72e8ffc --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +* diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..6cac4ef --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "xmonad-custom"] + path = xmonad-custom + url = ../xmonad-custom diff --git a/xmonad-custom b/xmonad-custom new file mode 160000 index 0000000..be10c83 --- /dev/null +++ b/xmonad-custom @@ -0,0 +1 @@ +Subproject commit be10c83957d683147da5aa156d3e79d50ab081b7 diff --git a/xmonad.hs b/xmonad.hs new file mode 100644 index 0000000..c479630 --- /dev/null +++ b/xmonad.hs @@ -0,0 +1,118 @@ +import XMonad + +import XMonad.Hooks.DynamicLog +import XMonad.Hooks.StatusBar +import XMonad.Hooks.StatusBar.PP + +import qualified XMonad.StackSet as W + + +-- DBus for PolyBar support +-- import XMonad.Hooks.DynamicLog +import qualified XMonad.DBus as D +import qualified DBus.Client as DC + +-- important for getting polybar to work +import XMonad.Hooks.ManageDocks +import XMonad.Hooks.EwmhDesktops + +-- additionalKeysP +import XMonad.Util.EZConfig + +-- custom imports for clarity +import XMonad.Custom.BasicKeyBindings +import XMonad.Custom.SystemKeyBindings +import XMonad.Custom.AudioKeyBindings +import XMonad.Custom.ProgramWorkspaces +import XMonad.Custom.NumberWorkspaces +import XMonad.Custom.UniversitySetup +import XMonad.Custom.Layout +import XMonad.Custom.Modifiers +import XMonad.Custom.WorkspaceNames +import XMonad.Custom.TopicSpace +import XMonad.Custom.Prompt + +import XMonad.Util.Loggers + +-- | temporary to try out +import XMonad.Actions.TopicSpace +import XMonad.Prompt.Workspace + +myTryOutKeyBindings = [ + ] + +myTopicItems :: [TopicItem] +myTopicItems = [ + TI "1:WEB" ".config" (spawn "firefox") + ] + +myTopicConfig :: TopicConfig +myTopicConfig = def { + topicDirs = tiDirs myTopicItems + , topicActions = tiActions myTopicItems + , defaultTopicAction = const (pure ()) + , defaultTopic = "1:WEB" + } + +myTopicWorkspaces = topicNames myTopicItems + +promptedGoto :: X () +promptedGoto = workspacePrompt def goto + +promptedShift :: X () +promptedShift = workspacePrompt def $ windows . W.shift + +-- Toggle between the two most recently used topics, but keep +-- screens separate. This needs @workspaceHistoryHook@. +toggleTopic :: X () +toggleTopic = switchNthLastFocusedByScreen myTopicConfig 1 + +-- + + +myLogHook :: DC.Client -> PP +myLogHook dbus = def { ppOutput = D.send dbus } + + +main :: IO () +main = do + -- Connect to DBus + dbus <- D.connect + -- Request access (needed when sending messages) + D.requestAccess dbus + -- start xmonad. docks is needed to leave space polybar + xmonad . workspaceNamesEwmh . ewmh . ewmhFullscreen . docks $ myXMonadConfig { logHook = dynamicLogWithPP =<< (workspaceNamesPP $ myLogHook dbus) } + +-- potentially add ewmh support here. for now, this does not seem to be needed + + +myXMonadConfig = def { + modMask = myMainModMask + , workspaces = myWorkspaces + , layoutHook = avoidStruts $ myLayout -- avoidStruts to leave space for polybar + , startupHook = spawn "killall polybar; polybar -q main &!" >> topicStartupHook myTopicConfig + } + `additionalKeysP` myKeyBindings + + +-- | Collect keybindings from imported modules +myKeyBindings :: [(String, X ())] +myKeyBindings = concat [ + myBasicKeyBindings + , myUniversitySetupKeyBindings + , mySystemKeyBindings + , myProgramWorkspacesKeyBindings + , myNumberWorkspacesKeyBindings + , myAudioKeyBindings + , myWorkspaceNamesKeyBindings + , myTryOutKeyBindings + ] + + +-- | Workspace management (currently just defaults) +myWorkspaces :: [WorkspaceId] +myWorkspaces = concat [ + myNumberWorkspaces + , myProgramWorkspaces + , myTopicWorkspaces + ]