From 0adaa1bb2e732cb9637366b05789f947098b5e9d Mon Sep 17 00:00:00 2001 From: frosty Date: Sun, 26 May 2024 11:08:13 -0400 Subject: [PATCH] add qtile and xmonad --- qtile/.config/qtile/config.py | 118 +++++++++++++++++ xmonad/.config/xmonad/xmonad.hs | 223 ++++++++++++++++++++++++++++++++ 2 files changed, 341 insertions(+) create mode 100644 qtile/.config/qtile/config.py create mode 100644 xmonad/.config/xmonad/xmonad.hs diff --git a/qtile/.config/qtile/config.py b/qtile/.config/qtile/config.py new file mode 100644 index 0000000..de49a01 --- /dev/null +++ b/qtile/.config/qtile/config.py @@ -0,0 +1,118 @@ +from libqtile import bar, layout, qtile, widget +from libqtile.config import Click, Drag, Group, Key, Match, Screen +from libqtile.lazy import lazy + +app_bindings = [ + (["mod4"], "F1", "thunar"), + (["mod4"], "F2", "firefox"), + (["mod4"], "p", "dmenu_run"), + (["mod4"], "Return", "st"), +] + +keys = [ + Key(["mod4"], "j", lazy.layout.next()), + Key(["mod4"], "k", lazy.layout.previous()), + Key(["mod4", "shift"], "j", lazy.layout.shuffle_down()), + Key(["mod4", "shift"], "k", lazy.layout.shuffle_up()), + + Key(["mod4"], "i", lazy.layout.decrease_nmaster()), + Key(["mod4"], "d", lazy.layout.increase_nmaster()), + + Key(["mod4"], "h", lazy.layout.decrease_ratio()), + Key(["mod4"], "l", lazy.layout.increase_ratio()), + Key(["mod4"], "n", lazy.layout.normalize()), + + Key(["mod4", "shift"], "c", lazy.window.kill()), + Key(["mod4", "shift"], "f", lazy.window.toggle_fullscreen()), + Key(["mod4", "shift"], "space", lazy.window.toggle_floating()), + + Key(["mod4", "control"], "r", lazy.reload_config()), + Key(["mod4", "control"], "q", lazy.shutdown()), +] +keys.extend( + Key(mod, key, lazy.spawn(command)) + for mod, key, command in app_bindings +) + +groups = [Group(i) for i in "123456789"] + +for i in groups: + keys.extend( + [ + Key(["mod4"], i.name,lazy.group[i.name].toscreen()), + Key(["mod4", "shift"], i.name, lazy.window.togroup(i.name)), + ] + ) + + +layout_defaults = { + "border_focus": "#ff0000", + "border_normal": "#555555", + "border_width": 1, + "margin": 0, + "ratio": 0.50, +} + +layouts = [ + # layout.Columns(border_focus_stack=["#d75f5f", "#8f3d3d"], border_width=4), + # layout.Max(), + # Try more layouts by unleashing below layouts. + # layout.Stack(num_stacks=2), + # layout.Bsp(), + # layout.Matrix(), + layout.MonadTall( + **layout_defaults, + ), + # layout.MonadWide(), + # layout.RatioTile(), + # layout.Tile(), + # layout.TreeTab(), + # layout.VerticalTile(), + # layout.Zoomy(), +] + +widget_defaults = dict( + font="sans", + fontsize=12, + padding=3, +) +extension_defaults = widget_defaults.copy() + +screens = [ + Screen( + bottom=bar.Bar( + [ + widget.CurrentLayout(), + widget.GroupBox(), + widget.WindowName(), + widget.Systray(), + widget.Clock(format="%Y-%m-%d %a %I:%M %p"), + widget.QuickExit(), + ], + 24, + ), + ), +] + +mouse = [ + Drag(["mod4"], "Button1", lazy.window.set_position_floating(), start=lazy.window.get_position()), + Drag(["mod4"], "Button3", lazy.window.set_size_floating(), start=lazy.window.get_size()), + Click(["mod4"], "Button2", lazy.window.bring_to_front()), +] + +dgroups_key_binder = None +dgroups_app_rules = [] +follow_mouse_focus = True +bring_front_click = False +floats_kept_above = True +cursor_warp = False +floating_layout = layout.Floating( + float_rules=[ + *layout.Floating.default_float_rules, + ] +) +auto_fullscreen = True +focus_on_window_activation = "smart" +reconfigure_screens = True + +auto_minimize = True diff --git a/xmonad/.config/xmonad/xmonad.hs b/xmonad/.config/xmonad/xmonad.hs new file mode 100644 index 0000000..0a92c8c --- /dev/null +++ b/xmonad/.config/xmonad/xmonad.hs @@ -0,0 +1,223 @@ +------------------------------------------------------------------------ +-- Imports + +-- Base +import XMonad +import System.Exit +import qualified XMonad.StackSet as W + +-- Dataq +import Data.Monoid +import qualified Data.Map as M + +-- Layouts +import XMonad.Layout.ThreeColumns + +-- Layout modifiers +import XMonad.Layout.LayoutModifier +import XMonad.Layout.PerWorkspace +import XMonad.Layout.Renamed +import XMonad.Layout.Spacing +import qualified XMonad.Layout.ToggleLayouts as T (toggleLayouts, ToggleLayout(Toggle)) + +-- Hooks +import XMonad.Hooks.EwmhDesktops +import XMonad.Hooks.InsertPosition +import XMonad.Hooks.ManageHelpers +import XMonad.Hooks.WindowSwallowing + +-- Utilities +import XMonad.Util.EZConfig +import XMonad.Util.Hacks (javaHack, windowedFullscreenFixEventHook) +import XMonad.Util.NamedScratchpad + + +------------------------------------------------------------------------ +-- Main options + +myTerminal = "st" + +myWorkspaces = ["1", "2", "3", "4", "5", "6", "7", "8", "9"] + +mySwallowClasses = ["St", "XTerm"] + +myBorderWidth = 1 +myNormalBorderColor = "#888888" +myFocusedBorderColor = "#ff0000" + + +------------------------------------------------------------------------ +-- Scratchpads + +myScratchPads = + [ NS "terminal" "st -c scratchpad" (className =? "scratchpad") (customFloating $ W.RationalRect (1/6) (1/6) (2/3) (2/3)) + ] + + +------------------------------------------------------------------------ +-- Key action functions + +toggleFloat :: Window -> X () +toggleFloat = \w -> do + floating <- gets (M.member w . W.floating . windowset) + if floating + then windows $ W.sink w + else withFocused float + + +------------------------------------------------------------------------ +-- Key bindings + +myKeys = \c -> mkKeymap c $ + -- Launching + [ ("M-", spawn $ terminal c) + , ("M-p", spawn "dmenu_run") + + -- Layouts + , ("M-", sendMessage NextLayout) + , ("M-t", sendMessage $ JumpToLayout "tall") + , ("M-w", sendMessage $ JumpToLayout "wide") + , ("M-m", sendMessage $ JumpToLayout "monocle") + + -- Window focus + , ("M-j", windows W.focusDown) + , ("M-k", windows W.focusUp) + + -- Master focus/swap + , ("M-v", windows W.focusMaster) + , ("M-S-v", windows W.swapMaster) + + -- Swap windows + , ("M-S-j", windows W.swapDown) + , ("M-S-k", windows W.swapUp) + + -- Master area + , ("M-h", sendMessage Shrink) + , ("M-l", sendMessage Expand) + + -- Window actions + , ("M-S-c", kill) + , ("M-S-f", sendMessage $ T.Toggle "monocle") + , ("M-S-", withFocused $ toggleFloat) + + -- Master amount + , ("M-i", sendMessage (IncMasterN 1)) + , ("M-d", sendMessage (IncMasterN (-1))) + + -- Scratchpads + , ("M-'", namedScratchpadAction myScratchPads "terminal") + + -- Window spacing + , ("M-S-i", incWindowSpacing 4) + , ("M-S-d", decWindowSpacing 4) + + -- Session + , ("M-S-", io (exitWith ExitSuccess)) + , ("M-", spawn "xmonad --recompile; xmonad --restart") + ] ++ + + -- View workspace N + [ ("M-" ++ show i, windows $ W.greedyView (myWorkspaces !! (i-1))) + | i <- [1..9] + ] ++ + + -- Shift window to workspace N + [ ("M-S-" ++ show i, windows $ W.shift (myWorkspaces !! (i-1))) + | i <- [1..9] + ] + + +------------------------------------------------------------------------ +-- Mouse bindings + +myMouseBindings (XConfig {XMonad.modMask = modm}) = M.fromList $ + -- Set the window to floating mode and move by dragging + [ ((modm, button1), (\w -> focus w >> mouseMoveWindow w >> windows W.shiftMaster)) + -- Raise the window to the top of the stack + , ((modm, button2), (\w -> focus w >> windows W.shiftMaster)) + -- Set the window to floating mode and resize by dragging + , ((modm, button3), (\w -> focus w >> mouseResizeWindow w >> windows W.shiftMaster)) + ] + + +------------------------------------------------------------------------ +-- Layouts + +tall = + renamed [Replace "tall"] + $ spacing 4 + $ Tall 1 (3/100) (1/2) +wide = + renamed [Replace "wide"] + $ Mirror tall +monocle = + renamed [Replace "monocle"] + $ spacing 4 + $ Full +threeCol = + renamed [Replace "threeCol"] + $ spacing 4 + $ ThreeCol 1 (3/100) (1/2) + +myLayout = + onWorkspaces ["4", "5"] monocle + $ T.toggleLayouts monocle + $ tall ||| wide ||| monocle ||| threeCol + + +------------------------------------------------------------------------ +-- Window rules + + +myManageHook = composeAll + [ className =? "MPlayer" --> doFloat + , className =? "Gimp" --> doFloat + , resource =? "desktop_window" --> doIgnore + , resource =? "kdesktop" --> doIgnore + , isFullscreen --> doFullFloat + ] <+> namedScratchpadManageHook myScratchPads <+> insertPosition End Newer + + +------------------------------------------------------------------------ +-- Event handling + +myEventHook = + swallowEventHook (foldr1 (<||>) $ map (\name -> className =? name) mySwallowClasses) (return True) + -- Fixes + <> windowedFullscreenFixEventHook + + +------------------------------------------------------------------------ +-- Status bars and logging + +myLogHook = return () + + +------------------------------------------------------------------------ +-- Main + +-- Static options +myModMask = mod4Mask +myFocusFollowsMouse = True +myClickJustFocuses = False + +main :: IO () +main = do + xmonad $ def + { terminal = myTerminal + , focusFollowsMouse = myFocusFollowsMouse + , clickJustFocuses = myClickJustFocuses + , borderWidth = myBorderWidth + , modMask = myModMask + , workspaces = myWorkspaces + , normalBorderColor = myNormalBorderColor + , focusedBorderColor = myFocusedBorderColor + + , keys = myKeys + , mouseBindings = myMouseBindings + + , layoutHook = myLayout + , manageHook = myManageHook + , handleEventHook = myEventHook + , logHook = myLogHook + }