diff --git a/nix/configurations/vanadium/home/xmonad/xmonad.hs b/nix/configurations/vanadium/home/xmonad/xmonad.hs index bd224647..dd1c6ffc 100644 --- a/nix/configurations/vanadium/home/xmonad/xmonad.hs +++ b/nix/configurations/vanadium/home/xmonad/xmonad.hs @@ -1,7 +1,9 @@ {-# LANGUAGE NegativeLiterals #-} +{-# OPTIONS_GHC -Wno-missing-signatures #-} -- my layout is getting crazy import XMonad import XMonad.Actions.CopyWindow +import XMonad.Actions.PerWorkspaceKeys import XMonad.Actions.Submap import XMonad.Actions.SwapWorkspaces import XMonad.Hooks.DynamicLog @@ -12,19 +14,23 @@ import XMonad.Hooks.ManageHelpers import XMonad.Hooks.OnPropertyChange import XMonad.Hooks.RefocusLast import XMonad.Hooks.StatusBar -import XMonad.Layout.FocusTracking +import XMonad.Layout.Accordion +import XMonad.Layout.Grid +import XMonad.Layout.IfMax +import XMonad.Layout.LimitWindows +import XMonad.Layout.Maximize import XMonad.Layout.NoBorders -import XMonad.Layout.Reflect -import XMonad.Layout.Reflect.Message +import XMonad.Layout.PerWorkspace import XMonad.Layout.Renamed import XMonad.Layout.ResizableTile import XMonad.Layout.Spacing +import XMonad.Layout.ThreeColumns +import XMonad.Layout.ToggleLayouts import qualified XMonad.StackSet as W import XMonad.Util.EZConfig import XMonad.Util.Hacks import XMonad.Util.NamedScratchpad import XMonad.Util.SpawnOnce -import XMonad.Layout.Magnifier import Data.Char.Greek import Data.Ratio @@ -62,14 +68,31 @@ main = `additionalKeys` keybinds myLayout = - let tallr = renamed [ Replace "Tall" ] - $ smartSpacingWithEdge 5 - $ reflectMsg . reflectHoriz - $ ResizableTall 1 (1/10) (3/7) [] - mag = magnifyxy 1.05 1.3 (NoMaster 3) False - in avoidStruts - $ smartBorders - $ mag tallr ||| focusTracking Full + avoidStruts + $ smartBorders + $ onWorkspace chatWS (ifMaxToggle 2 grid accordion) + $ onWorkspace multimediaWS (ifMaxToggle 2 grid accordion) + -- Magifier doesn't work well with threecol's slaves + -- Full has the property of "only maximizing the focused one" + -- Maximize can have a window maximized but not focused, might be useful when programming + $ maximizeWithPadding 0 threecol + where + ifMaxToggle n tog l = ifMax n l (toggleLayouts tog l) + threecol = + renamed [ Replace "3Col" ] + $ smartSpacingWithEdge 5 + $ ThreeColMid 1 (3/100) (1/2) + + grid = + renamed [ Replace "Grid" ] + $ smartSpacingWithEdge 5 + $ Grid + + accordion = + renamed [ Replace "Accordion" ] + $ smartSpacingWithEdge 5 + $ limitSlice 3 + $ Accordion isSioyek :: Query Bool isSioyek = className =? "sioyek" @@ -264,9 +287,6 @@ keybinds = , ((0, xF86XK_AudioPlay), spawn "playerctl play-pause") , ((0, xF86XK_AudioNext), spawn "playerctl next" ) - -- Toggle fullscreen - , ((superMask, xK_Escape), sendMessage NextLayout) - -- Resize windows , ((superMask, xK_equal ), sendMessage $ IncMasterN 1) , ((superMask, xK_minus ), sendMessage $ IncMasterN -1) @@ -274,7 +294,11 @@ keybinds = , ((superMask, xK_period ), sendMessage Expand ) , ((superMask .|. shiftMask, xK_comma ), sendMessage MirrorShrink ) , ((superMask .|. shiftMask, xK_period), sendMessage MirrorExpand ) - , ((superMask , xK_apostrophe), sendMessage Toggle ) + , ((superMask , xK_space ), chooseAction $ \ws -> + if ws == chatWS then sendMessage ToggleLayout + else if ws == multimediaWS then sendMessage ToggleLayout + else withFocused (sendMessage . maximizeRestore) + ) -- [D]o sink and lift , ( (superMask, xK_d) @@ -343,12 +367,12 @@ altMask = mod1Mask myWorkspaces :: [WorkspaceId] myWorkspaces = map (:[]) $ take 8 greekLower -multimediaWS :: WorkspaceId -multimediaWS = myWorkspaces !! 6 - chatWS :: WorkspaceId chatWS = myWorkspaces !! 3 +multimediaWS :: WorkspaceId +multimediaWS = myWorkspaces !! 6 + centeredFloat, smallFloat, fullFloat, buttomRightFloat :: W.RationalRect centeredFloat = W.RationalRect (1%9) (1%9) (7%9) (7%9) smallFloat = W.RationalRect (3%5) (3%5) (2%7) (2%7)