mirror of
https://github.com/starr-dusT/dotfiles.git
synced 2025-02-19 19:27:31 -08:00
248 lines
8.4 KiB
Python
248 lines
8.4 KiB
Python
from typing import List # noqa: F401
|
|
from libqtile import bar, layout, widget, hook
|
|
from libqtile.config import Click, Drag, Group, Key, Match, Screen
|
|
from libqtile.lazy import lazy
|
|
from libqtile.utils import guess_terminal
|
|
import os, subprocess, json
|
|
|
|
# Use the "Windows" key for mod
|
|
mod = "mod4"
|
|
# Determine terminal with this nifty function
|
|
terminal = guess_terminal()
|
|
# Define workspace names
|
|
groups = [Group(i) for i in "123456789"]
|
|
# Generate group binding hotkeys
|
|
dgroups_key_binder = None
|
|
# List of rule objects (currently empty)
|
|
dgroups_app_rules = []
|
|
# Set mouse functionality
|
|
follow_mouse_focus = True
|
|
bring_front_click = False
|
|
cursor_warp = False
|
|
# Set fullscreen options
|
|
auto_fullscreen = True
|
|
focus_on_window_activation = "smart"
|
|
# Set floating layout options
|
|
floating_layout = layout.Floating(float_rules=[
|
|
{'wmclass': 'Wine'},
|
|
{'wmclass': 'Steam'},
|
|
])
|
|
|
|
wal_loc = os.path.expanduser('~/.cache/wal/colors.json')
|
|
wal = json.load(open(wal_loc))
|
|
spacer_len = 3
|
|
|
|
# Start keys block
|
|
keys = [
|
|
# Close focused window
|
|
Key([mod], "q",
|
|
lazy.window.kill(),
|
|
),
|
|
|
|
# Rotate through the available layout algorithms
|
|
Key([mod], "space",
|
|
lazy.next_layout(),
|
|
),
|
|
Key([mod, "shift"], "space",
|
|
lazy.prev_layout(),
|
|
),
|
|
# Switch between windows
|
|
Key([mod], "h",
|
|
lazy.layout.left(),
|
|
),
|
|
Key([mod], "l",
|
|
lazy.layout.right(),
|
|
),
|
|
Key([mod], "j",
|
|
lazy.layout.down(),
|
|
),
|
|
Key([mod], "k",
|
|
lazy.layout.up(),
|
|
),
|
|
|
|
# Move windows on screen
|
|
Key([mod, "shift"], "h",
|
|
lazy.layout.shuffle_left(),
|
|
lazy.layout.client_to_next(),
|
|
lazy.layout.flip_left(),
|
|
),
|
|
Key([mod, "shift"], "l",
|
|
lazy.layout.shuffle_right(),
|
|
lazy.layout.client_to_previous(),
|
|
lazy.layout.flip_right(),
|
|
),
|
|
Key([mod, "shift"], "j",
|
|
lazy.layout.shuffle_down(),
|
|
lazy.layout.flip_down(),
|
|
),
|
|
Key([mod, "shift"], "k",
|
|
lazy.layout.shuffle_up(),
|
|
lazy.layout.flip_up(),
|
|
),
|
|
# Resize windows on screen
|
|
Key([mod, "control"], "h",
|
|
lazy.layout.grow_left(),
|
|
lazy.layout.shrink()
|
|
),
|
|
Key([mod, "control"], "l",
|
|
lazy.layout.grow_right(),
|
|
lazy.layout.grow()
|
|
),
|
|
Key([mod, "control"], "j",
|
|
lazy.layout.grow_down(),
|
|
),
|
|
Key([mod, "control"], "k",
|
|
lazy.layout.grow_up(),
|
|
),
|
|
# Return sizes to default
|
|
Key([mod], "n", lazy.layout.normalize(),
|
|
desc="Reset all window sizes"),
|
|
# Toggle between split and unsplit sides of stack.
|
|
# Split = all windows displayed
|
|
# Unsplit = 1 window displayed, like Max layout, but still with
|
|
# multiple stack panes
|
|
Key([mod, "shift"], "Return", lazy.layout.toggle_split(),
|
|
desc="Toggle between split and unsplit sides of stack"),
|
|
# Toggle between physical screens
|
|
Key([mod], "comma", lazy.to_screen(0),
|
|
desc="Toggle between split and unsplit sides of stack"),
|
|
Key([mod], "period", lazy.to_screen(1),
|
|
desc="Toggle between split and unsplit sides of stack"),
|
|
# Toggle fullscreen
|
|
Key([mod], "f", lazy.window.toggle_fullscreen(),
|
|
desc="Toggle fullscreen"),
|
|
# Toggle floating
|
|
Key([mod], "t", lazy.window.toggle_floating(),
|
|
desc="Toggle floating"),
|
|
|
|
# Spawn terminal
|
|
Key([mod], "Return", lazy.spawn(terminal),
|
|
desc="Launch terminal"),
|
|
# Spawn rofi drun
|
|
Key([mod], "w", lazy.spawn("rofi -show drun"),
|
|
desc="Launch rofi -drun"),
|
|
# Spawn rofi window
|
|
Key([mod, "shift"], "w", lazy.spawn("rofi -show window"),
|
|
desc="Launch rofi -window"),
|
|
|
|
# Recompile and restart qtile
|
|
Key([mod, "control"], "r", lazy.restart(), desc="Restart Qtile"),
|
|
# Quit qtile
|
|
Key([mod, "control"], "q", lazy.shutdown(), desc="Shutdown Qtile"),
|
|
# Qtile's in-built launcher
|
|
Key([mod], "r", lazy.spawncmd(),
|
|
desc="Spawn a command using a prompt widget"),
|
|
# Start gamemoded
|
|
Key([mod], "g", lazy.spawn("gamemoded -r"),
|
|
desc="Start gamemode"),
|
|
# Stop gamemoded
|
|
Key([mod, "shift"], "g", lazy.spawn("killall gamemoded"),
|
|
desc="Stop gamemode"),
|
|
]
|
|
|
|
# Drag floating layouts.
|
|
mouse = [
|
|
Drag([mod], "Button1", lazy.window.set_position_floating(),
|
|
start=lazy.window.get_position()),
|
|
Drag([mod], "Button3", lazy.window.set_size_floating(),
|
|
start=lazy.window.get_size()),
|
|
Click([mod], "Button2", lazy.window.bring_to_front()),
|
|
]
|
|
|
|
for i in groups:
|
|
keys.extend([
|
|
# mod1 + letter of group = switch to group
|
|
Key([mod], i.name, lazy.group[i.name].toscreen(),
|
|
desc="Switch to group {}".format(i.name)),
|
|
|
|
# mod1 + shift + letter of group = switch to & move focused window to group
|
|
Key([mod, "shift"], i.name, lazy.window.togroup(i.name),
|
|
desc="Switch to & move focused window to group {}".format(i.name)),
|
|
# Or, use below if you prefer not to switch to that group.
|
|
# # mod1 + shift + letter of group = move focused window to group
|
|
# Key([mod, "shift"], i.name, lazy.window.togroup(i.name),
|
|
# desc="move focused window to group {}".format(i.name)),
|
|
])
|
|
|
|
layouts = [
|
|
layout.Columns(border_focus = wal['colors']['color2'],
|
|
border_normal = wal['colors']['color0'], margin = 2),
|
|
layout.Max(),
|
|
# Try more layouts by unleashing below layouts.
|
|
layout.Stack(num_stacks=2),
|
|
# layout.Bsp(),
|
|
# layout.Matrix(),
|
|
layout.MonadTall(),
|
|
# layout.MonadWide(),
|
|
# layout.RatioTile(),
|
|
# layout.Tile(),
|
|
# layout.TreeTab(),
|
|
# layout.VerticalTile(),
|
|
# layout.Zoomy(),
|
|
]
|
|
|
|
widget_defaults = dict(
|
|
font='JetBrains Mono Nerd Font',
|
|
fontsize=10,
|
|
padding=3,
|
|
background = wal['colors']['color0']
|
|
)
|
|
extension_defaults = widget_defaults.copy()
|
|
|
|
screens = [
|
|
Screen(
|
|
top=bar.Bar(
|
|
[
|
|
# Group Box
|
|
widget.GroupBox(active = wal['colors']['color0'],
|
|
inactive = wal['colors']['color0'],
|
|
urgent_text = wal['colors']['color0'],
|
|
background = wal['colors']['color1'],
|
|
this_current_screen_border = wal['colors']['color2'],
|
|
other_screen_border = wal['colors']['color2'],
|
|
urgent_border = wal['colors']['color6'],
|
|
highlight_method='block',
|
|
rounded = False,
|
|
hide_unused=True),
|
|
widget.TextBox(text='\uE0B0',
|
|
fontsize=17,
|
|
padding=0,
|
|
foreground=wal['colors']['color1']),
|
|
# Window Name
|
|
widget.Spacer(length = spacer_len,
|
|
background = wal['colors']['color0']),
|
|
widget.WindowName(),
|
|
# Prompt
|
|
widget.Prompt(),
|
|
# Volume
|
|
widget.TextBox(text = '\uE0B2', fontsize = 17,
|
|
padding = 0, foreground = wal['colors']['color2'],
|
|
background = wal['colors']['color0']),
|
|
widget.TextBox(text = ' ', fontsize = 14,
|
|
foreground = wal['colors']['color0'],
|
|
background = wal['colors']['color2']),
|
|
widget.PulseVolume(foreground = wal['colors']['color0'],
|
|
background = wal['colors']['color2']),
|
|
widget.Spacer(length = spacer_len,
|
|
background = wal['colors']['color2']),
|
|
# Clock
|
|
widget.TextBox(text = '\uE0B2', fontsize = 17,
|
|
padding = 0, foreground = wal['colors']['color1'],
|
|
background = wal['colors']['color2']),
|
|
widget.Clock(format='%Y-%m-%d %a %I:%M %p',
|
|
background = wal['colors']['color1'],
|
|
foreground = wal['colors']['color0']),
|
|
widget.Spacer(length = spacer_len,
|
|
background = wal['colors']['color1']),
|
|
widget.CurrentLayout(scale=0.6),
|
|
],
|
|
20,
|
|
),
|
|
),
|
|
]
|
|
|
|
@hook.subscribe.startup_once
|
|
def autostart():
|
|
home = os.path.expanduser('~/.config/qtile/autostart.sh')
|
|
subprocess.call([home])
|