about summary refs log tree commit diff
path: root/dotfiles
diff options
context:
space:
mode:
authorBaitinq <manuelpalenzuelamerino@gmail.com>2022-07-04 11:48:31 +0200
committerBaitinq <manuelpalenzuelamerino@gmail.com>2022-07-05 14:12:47 +0200
commit834f19223d817258108ad780a1bde2058ab3ee17 (patch)
treed7e954b3424b247200b07f9058a0e0364600a51f /dotfiles
parentfmt (diff)
downloadnixos-config-834f19223d817258108ad780a1bde2058ab3ee17.tar.gz
nixos-config-834f19223d817258108ad780a1bde2058ab3ee17.tar.bz2
nixos-config-834f19223d817258108ad780a1bde2058ab3ee17.zip
Switch windowmanager to xmonad
Diffstat (limited to 'dotfiles')
-rw-r--r--dotfiles/.xinitrc5
-rw-r--r--dotfiles/sxhkd/xmonad46
-rw-r--r--dotfiles/xmobar.hs27
-rw-r--r--dotfiles/xmonad.hs223
4 files changed, 300 insertions, 1 deletions
diff --git a/dotfiles/.xinitrc b/dotfiles/.xinitrc
index a4a32a9..1920a74 100644
--- a/dotfiles/.xinitrc
+++ b/dotfiles/.xinitrc
@@ -51,6 +51,8 @@ fi
 xrandr --auto
 #xrandr -s 1920x1080 &
 
+xsetroot -cursor_name left_ptr
+
 sxhkd &
 clipmenud &
 unclutter &
@@ -65,5 +67,6 @@ dwmbar &
 
 while :; do ssh-agent smart-wallpaper -d ~/Images/Wallpapers/Day -n ~/Images/Wallpapers/Night -l $LOCATION -r; done &
 
-exec dwm 2> /tmp/dwm.log
+exec xmonad 2> /tmp/xmonad.log
+#exec dwm 2> /tmp/dwm.log
 
diff --git a/dotfiles/sxhkd/xmonad b/dotfiles/sxhkd/xmonad
new file mode 100644
index 0000000..bcefaff
--- /dev/null
+++ b/dotfiles/sxhkd/xmonad
@@ -0,0 +1,46 @@
+##################################
+#
+##### DWM #####
+##################################
+
+alt + shift + q
+    xmonadctl quit
+
+alt + q
+    xmonadctl kill-window
+
+alt + {1-9}
+    xmonadctl focus-workspace-{1-9}
+
+alt + shift + {1-9}
+    xmonadctl send-to-workspace-{1-9}
+
+#alt + Tab
+#   dwmc view
+
+#alt + 0
+#    dwmc viewall
+
+#alt + shift + 0
+#    dwmc tagall
+
+#move clockwise & anticlockwise
+alt + {h,j,k}
+    xmonadctl focus-{master,next,prev}
+
+#move windows clockwise and anticlockwsie
+alt + shift + {h,j,k}
+    xmonadctl swap-with-{master,next,prev}
+
+alt + f
+    xmonadctl togglefullscreen
+alt + F11
+    xmonadctl togglefullscreen
+
+alt + ctrl + period
+    xmonadctl next-layout
+alt + space
+    xmonadctl next-layout
+
+##################################
+##################################
\ No newline at end of file
diff --git a/dotfiles/xmobar.hs b/dotfiles/xmobar.hs
new file mode 100644
index 0000000..1636209
--- /dev/null
+++ b/dotfiles/xmobar.hs
@@ -0,0 +1,27 @@
+
+Config { 
+
+   -- appearance
+     font =         "xft:Noto Sans Display Nerd Font:size=10"
+   , bgColor =      "#222222"
+   , fgColor =      "#bbbbbb"
+   , position =     Top
+   , border =       NoBorder
+   , borderColor =  "#222222"
+
+   -- layout
+   , sepChar =  "%"   -- delineator between plugin names and straight text
+   , alignSep = "}{"  -- separator between left-right alignment
+   , template = "%XMonadLog% }{ %WM_NAME%"
+
+   -- general behavior
+   , lowerOnStart =     True    -- send to bottom of window stack on start
+   , hideOnStart =      False   -- start with window unmapped (hidden)
+   , allDesktops =      True    -- show on all desktops
+   , overrideRedirect = True    -- set the Override Redirect flag (Xlib)
+   , pickBroadest =     False   -- choose widest display (multi-monitor)
+   , persistent =       True    -- enable/disable hiding (True = disabled)
+
+   , commands = [ Run XMonadLog,
+                  Run XPropertyLog "WM_NAME" ]
+   }
diff --git a/dotfiles/xmonad.hs b/dotfiles/xmonad.hs
new file mode 100644
index 0000000..0c0e320
--- /dev/null
+++ b/dotfiles/xmonad.hs
@@ -0,0 +1,223 @@
+-- xmonad config used by Malcolm MD
+-- https://github.com/randomthought/xmonad-config
+
+import System.IO
+import System.Exit
+
+import qualified Data.List as L
+
+import XMonad
+import XMonad.Actions.Navigation2D
+import XMonad.Actions.UpdatePointer
+
+import XMonad.Hooks.DynamicLog
+import XMonad.Hooks.ManageDocks
+import XMonad.Hooks.ManageHelpers
+import XMonad.Hooks.SetWMName
+
+import XMonad.Layout.Gaps
+import XMonad.Layout.Fullscreen
+import XMonad.Layout.BinarySpacePartition as BSP
+import XMonad.Layout.NoBorders
+import XMonad.Layout.Tabbed
+import XMonad.Layout.ThreeColumns
+import XMonad.Layout.Spacing
+import XMonad.Layout.MultiToggle
+import XMonad.Layout.MultiToggle.Instances
+import XMonad.Layout.NoFrillsDecoration
+import XMonad.Layout.Renamed
+import XMonad.Layout.Simplest
+import XMonad.Layout.SubLayouts
+import XMonad.Layout.WindowNavigation
+import XMonad.Layout.ZoomRow
+
+import XMonad.Util.Run(spawnPipe)
+import XMonad.Util.EZConfig(additionalKeys)
+import XMonad.Util.Cursor
+
+import Graphics.X11.ExtraTypes.XF86
+import qualified XMonad.StackSet as W
+import qualified Data.Map        as M
+
+import XMonad.Hooks.ServerMode
+import XMonad.Actions.WorkspaceNames
+
+import XMonad.Hooks.StatusBar
+import XMonad.Hooks.StatusBar.PP
+
+------------------------------------------------------------------------
+-- Workspaces
+-- The default number of workspaces (virtual screens) and their names.
+--
+myWorkspaces :: [String]
+myWorkspaces = map show [1..9]
+
+
+------------------------------------------------------------------------
+-- Window rules
+-- Execute arbitrary actions and WindowSet manipulations when managing
+-- a new window. You can use this to, for example, always float a
+-- particular program, or have a client always appear on a particular
+-- workspace.
+--
+-- To find the property name associated with a program, use
+-- > xprop | grep WM_CLASS
+-- and click on the client you're interested in.
+--
+-- To match on the WM_NAME, you can use 'title' in the same way that
+-- 'className' and 'resource' are used below.
+--
+myManageHook = composeAll
+    [
+      isFullscreen --> (doF W.focusDown <+> doFullFloat)
+    ]
+
+
+
+------------------------------------------------------------------------
+-- Layouts
+-- You can specify and transform your layouts by modifying these values.
+-- If you change layout bindings be sure to use 'mod-shift-space' after
+-- restarting (with 'mod-q') to reset your layout state to the new
+-- defaults, as xmonad preserves your old layout settings by default.
+--
+-- The available layouts.  Note that each layout is separated by |||,
+-- which denotes layout choice.
+
+gap         = 7
+
+myGaps       = gaps [(U, gap), (R, gap), (L, gap), (D, gap)]
+addSpace     = renamed [CutWordsLeft 2] . spacing gap
+
+tiledLayout = renamed [Replace "[]"]  $ tiled
+                where
+                  -- default tiling algorithm partitions the screen into two panes
+                  tiled   = Tall nmaster delta ratio
+
+                  -- The default number of windows in the master pane
+                  nmaster = 1
+
+                  -- Default proportion of screen occupied by master pane
+                  ratio   = 1/2
+
+                  -- Percent of screen to increment by when resizing panes
+                  delta   = 3/100
+
+layouts      =  tiledLayout
+
+myLayout    = smartBorders
+              $ mkToggle (NOBORDERS ?? FULL ?? EOT)
+              $ avoidStruts $ myGaps $ addSpace
+              $ layouts
+
+------------------------------------------------------------------------
+-- Colors and borders
+
+-- Width of the window border in pixels.
+myBorderWidth = 1
+
+myNormalBorderColor     = "#000000"
+myFocusedBorderColor    = "#005577"
+
+    ------------------------------------------------------------------------
+-- External commands
+myCommands :: [(String, X ())]
+myCommands =
+        [ ("decrease-master-size"      , sendMessage Shrink                               )
+        , ("increase-master-size"      , sendMessage Expand                               )
+        , ("decrease-master-count"     , sendMessage $ IncMasterN (-1)                    )
+        , ("increase-master-count"     , sendMessage $ IncMasterN ( 1)                    )
+        , ("focus-prev"                , windows W.focusUp                                )
+        , ("focus-next"                , windows W.focusDown                              )
+        , ("focus-master"              , windows W.focusMaster                            )
+        , ("swap-with-prev"            , windows W.swapUp                                 )
+        , ("swap-with-next"            , windows W.swapDown                               )
+        , ("swap-with-master"          , windows W.swapMaster                             )
+        , ("togglefullscreen"          , sendMessage $ Toggle FULL                        )
+        , ("next-layout"               , sendMessage NextLayout                           )
+        , ("kill-window"               , kill                                             )
+        , ("quit"                      , io $ exitWith ExitSuccess                        )
+        , ("restart"                   , spawn "xmonad --recompile; xmonad --restart"     )
+        ]
+
+-----------------------------------------------------------------------
+-- Custom server mode
+
+myServerModeEventHook = serverModeEventHookCmd' $ return myCommands'
+myCommands' = ("list-commands", listMyServerCmds) : myCommands ++ wscs ++ sccs -- ++ spcs
+    where
+        wscs = [((m ++ s), windows $f s) | s <- myWorkspaces
+               , (f, m) <- [(W.view, "focus-workspace-"), (W.shift, "send-to-workspace-")] ]
+
+        sccs = [((m ++ show sc), screenWorkspace (fromIntegral sc) >>= flip whenJust (windows . f))
+               | sc <- [0..10], (f, m) <- [(W.view, "focus-screen-"), (W.shift, "send-to-screen-")]]
+
+listMyServerCmds :: X ()
+listMyServerCmds = spawn ("echo '" ++ asmc ++ "' | xmessage -file -")
+    where asmc = concat $ "Available commands:" : map (\(x, _)-> "    " ++ x) myCommands'
+
+------------------------------------------------------------------------
+-- Mouse bindings
+--
+-- Focus rules
+-- True if your focus should follow your mouse cursor.
+myFocusFollowsMouse :: Bool
+myFocusFollowsMouse = False
+
+myMouseBindings (XConfig {XMonad.modMask = modMask}) = M.fromList $
+  [
+    -- mod-button1, Set the window to floating mode and move by dragging
+    ((modMask, button1),
+     (\w -> focus w >> mouseMoveWindow w))
+
+    -- mod-button2, Raise the window to the top of the stack
+    , ((modMask, button2),
+       (\w -> focus w >> windows W.swapMaster))
+
+    -- mod-button3, Set the window to floating mode and resize by dragging
+    , ((modMask, button3),
+       (\w -> focus w >> mouseResizeWindow w))
+
+    -- you may also bind events to the mouse scroll wheel (button4 and button5)
+  ]
+
+------------------------------------------------------------------------
+-- Run xmonad with all the defaults we set up.
+--
+
+getNumberOfWindowsInWorkpace :: X Int
+getNumberOfWindowsInWorkpace = withWindowSet (pure . length . W.index)
+
+myStatusBar = statusBarProp "xmobar" (do 
+                                        numWindows <- getNumberOfWindowsInWorkpace
+                                        return $ xmobarPP {
+                                                    ppCurrent = (\s -> 
+                                                                      if numWindows > 0
+                                                                        then ((xmobarBorder "Top" "#bbbbbb" 4 . xmobarColor "#bbbbbb" "#005577") ("  " ++ s ++ "  "))
+                                                                        else (xmobarColor "#bbbbbb" "#005577" ("  " ++ s ++ "  "))
+                                                                )
+                                                  , ppTitle = shorten 77
+                                                  , ppSep = " |  "
+                                                  , ppLayout = (\_ -> "")
+                                                  , ppHidden = (\s -> xmobarBorder "Top" "#bbbbbb" 2 ("  " ++ s ++ "  ")) --probs better way to do this
+                                                  , ppHiddenNoWindows =  wrap "  " "  "
+                                          }
+                                      )
+
+main :: IO ()
+main = do
+  spawn "xmobar"
+  xmonad . withSB myStatusBar . docks
+         $ def {
+                focusFollowsMouse  = myFocusFollowsMouse,
+                borderWidth        = myBorderWidth,
+                workspaces         = myWorkspaces,
+                normalBorderColor  = myNormalBorderColor,
+                focusedBorderColor = myFocusedBorderColor,
+
+                mouseBindings      = myMouseBindings,
+
+                layoutHook         = myLayout,
+                handleEventHook    = fullscreenEventHook <+> myServerModeEventHook,
+                manageHook         = manageDocks <+> myManageHook
+                }
\ No newline at end of file