add qtile and xmonad

This commit is contained in:
frosty 2024-05-26 11:08:13 -04:00
parent f4be49d1ab
commit 0adaa1bb2e
2 changed files with 341 additions and 0 deletions

View file

@ -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

View file

@ -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-<Return>", spawn $ terminal c)
, ("M-p", spawn "dmenu_run")
-- Layouts
, ("M-<Tab>", 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-<Space>", 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-<Delete>", io (exitWith ExitSuccess))
, ("M-<Delete>", 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
}