import re from subprocess import run from pathlib import Path from typing import List from libqtile import layout, hook from libqtile.config import Group, Match, Screen, Rule from bars import main_bar, bar1, bar2 from keys import keys, mouse, sc, get_backlight_keys from colors import border_color, theme from util import qtile_func from util.monitor import enable_monitor keys = keys mouse = mouse screens: List[Screen] = [] groups = [ Group('game', layouts=[layout.Max()], persist=False, init=False, matches=[Match(wm_class=['Steam'])], label=''), Group('chat', layouts=[layout.Max()], persist=False, init=False, matches=[Match(wm_class=['discord'])], label=''), Group('music', layouts=[layout.Max()], persist=False, init=False, matches=[Match(wm_class=[re.compile('spotify', re.I)])], label=''), ] float_rules = [ {'wmclass': 'confirm'}, {'wmclass': 'dialog'}, {'wmclass': 'download'}, {'wmclass': 'error'}, {'wmclass': 'file_progress'}, {'wmclass': 'notification'}, {'wmclass': 'splash'}, {'wmclass': 'toolbar'}, {'wmclass': 'Xephyr'}, {'wmclass': 'feh'}, {'wmclass': 'Sms.py'}, {'wmclass': 'leagueclientux.exe'}, {'wmclass': 'Gcr-prompter'}, {'wmclass': 'scrcpy'}, {'wname': 'Friends'}, ] floating_layout = layout.Floating(border_focus=f'#{border_color}', float_rules=float_rules) layouts = [ layout.Max(), layout.Stack(num_stacks=2, border_focus=f'#{border_color}') ] widget_defaults = {'font': 'DejaVu Sans', 'fontsize': 18, 'padding': 4, 'foreground': theme['very_light_white'], 'background': theme['dark_black']} def setup_monitors(qtile): monitors = qtile.conn.monitors nb_monitors = len(monitors) if nb_monitors == 1: run('xrandr --auto'.split()) elif nb_monitors == 2: laptop_monitor = None other_monitor = None for monitor in monitors: if monitor.name.startswith('eDP'): laptop_monitor = monitor else: other_monitor = monitor enable_monitor(other_monitor, primary=True, side='left-of', relative_monitor=laptop_monitor) def setup_screens(qtile, screens, groups): nb_monitors = len(qtile.conn.monitors) if nb_monitors == 1: screens.append(Screen(top=main_bar)) groups += [Group(i) for i in 'asdf'] else: screens += [Screen(top=bar1), Screen(top=bar2)] groups += [Group(i) for i in 'asdfuiop'] def main(qtile): global keys setup_monitors(qtile) setup_screens(qtile, screens, groups) keys += get_backlight_keys(qtile) def wallpaper(): wallpaper_path = Path.home() / '.wallpaper' run(['feh', '--bg-scale', wallpaper_path]) @hook.subscribe.startup def autostart(): wallpaper() sc.set_profile('analog') @hook.subscribe.addgroup def go_to_group(qtile, group): try: qtile.groupMap[group].cmd_toscreen() except AttributeError: pass @hook.subscribe.screen_change def configure_monitors(qtile, ev): setup_monitors(qtile) qtile.cmd_restart() dgroups_app_rules: List[Rule] = [] dgroups_key_binder = None follow_mouse_focus = False bring_front_click = False cursor_warp = False auto_fullscreen = True focus_on_window_activation = 'focus' wmname = 'LG3D'