dotfiles/_gui/_configs/qtile/config.py

236 lines
8.6 KiB
Python

import os
import subprocess
from libqtile import bar, extension, hook, layout, qtile
from libqtile.lazy import lazy
from libqtile.config import Click, Drag, Group, Key, Match, Screen
from libqtile.backend.wayland import InputConfig
from qtile_extras import widget
os.environ["MOZ_ENABLE_WAYLAND"] = "1"
os.environ["MOZ_DBUS_REMOTE"] = "1"
os.environ["XDG_CURRENT_DESKTOP"] = "qtile:wlroots"
wl_input_rules = {
"type:pointer": InputConfig(natural_scroll=True),
"type:touchpad": InputConfig(tap=True,natural_scroll=True),
"type:keyboard": InputConfig(kb_layout="pl",kb_repeat_delay=280,kb_repeat_rate=30),
}
@hook.subscribe.startup_once
def autostart():
autostart = os.path.expanduser('~/.config/qtile/autostart.sh')
subprocess.run([autostart])
@hook.subscribe.shutdown
def autostop():
autostop = os.path.expanduser('~/.config/qtile/stop.sh')
subprocess.run([autostop])
mod = "mod4"
groups = [
Group("1", label="\uf292"),
Group("2", label="\uf738", matches=[Match(wm_class=["Firefox"])]),
Group("3", label="\uf70d", matches=[Match(wm_class=["ferdium"])]),
Group("4", label="\uf70d", matches=[Match(wm_class=["discord"])]),
Group("5", label="\uf7aa", matches=[Match(wm_class=["mutt"])]),
Group("6", label="\uf120"),
Group("7", label="\uf09c", matches=[Match(wm_class=["1Password"])]),
Group("8", label="\uf198", matches=[Match(wm_class=["Slack"])]),
Group("9", label="\uf296"),
Group("0", label="\uf2bb", matches=[Match(wm_class=["workfx"])]),
]
keys = [
# 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()),
Key([mod], "Left", lazy.layout.left()),
Key([mod], "Right", lazy.layout.right()),
Key([mod], "Down", lazy.layout.down()),
Key([mod], "Up", lazy.layout.up()),
# move windows
Key([mod, "control"], "h", lazy.layout.shuffle_left()),
Key([mod, "control"], "l", lazy.layout.shuffle_right()),
Key([mod, "control"], "j", lazy.layout.shuffle_down()),
Key([mod, "control"], "k", lazy.layout.shuffle_up()),
# resize windows
Key([mod, "shift"], "h", lazy.layout.grow_left()),
Key([mod, "shift"], "l", lazy.layout.grow_right()),
Key([mod, "shift"], "j", lazy.layout.grow_down()),
Key([mod, "shift"], "k", lazy.layout.grow_up()),
Key([mod, "shift", "control"], "0", lazy.layout.normalize()),
# app binds
Key([mod], "Return", lazy.spawn("foot")),
Key([mod], "space", lazy.spawncmd()),
Key([mod], "a", lazy.spawn("flatpak run com.yubico.yubioath")),
Key([mod], "e", lazy.spawn("selector-chars")),
Key([mod], "i", lazy.spawn("sh -c 'grim -g \"$(slurp)\"'")),
Key([mod], "m", lazy.spawn("sh -c 'pgrep -x neomutt > /dev/null || foot -a mutt -o bold-text-in-bright=yes neomutt'")),
Key([mod, "shift"], "i", lazy.spawn("grim")),
Key([mod, "shift"], "Return", lazy.spawn("sh -c 'terminal_profile=work foot -o url.launch=workfx\ \${url}'")),
Key([mod, "control"], "a", lazy.spawn("selector-audio")),
Key([mod, "control"], "b", lazy.spawn("selector-bluetooth")),
# WM control
Key([mod], "f", lazy.window.toggle_floating()),
Key([mod], "q", lazy.window.kill()),
Key([mod, "control", "shift"], "l", lazy.spawn("swaylock --image ~/.config/qtile/wallpaper.img")),
Key([mod, "control", "shift"], "q", lazy.shutdown()),
Key([mod, "control", "shift"], "r", lazy.reload_config()),
Key([mod], "r", lazy.reload_config()),
# media keys
Key([], "XF86AudioMute", lazy.spawn("pactl set-sink-mute @DEFAULT_SINK@ toggle")),
Key([], "XF86AudioMicMute", lazy.spawn("sb-volume micmute")),
Key([], "XF86AudioRaiseVolume", lazy.spawn("sb-volume inc")),
Key([], "XF86AudioLowerVolume", lazy.spawn("sb-volume dec")),
Key([], "XF86MonBrightnessUp", lazy.spawn("doas xbacklight -inc 10")),
Key([], "XF86MonBrightnessDown", lazy.spawn("doas xbacklight -dec 10")),
]
for i in groups[:10]:
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),
),
# Key( [mod, "shift"], i.name, lazy.window.togroup(i.name, switch_group=True),
# desc="Switch to & move focused window to group {}".format(i.name),
# ),
Key([mod, "shift"], i.name, lazy.window.togroup(i.name),
desc="move focused window to group {}".format(i.name)
),
]
)
if qtile.core.name is "wayland":
for i in range(1,2):
keys.extend([
Key(["control", "mod1"], f"f{i}", lazy.core.change_vt(i), desc=f"Switch to VT{i}")
])
layouts = [
layout.Columns(
border_focus='#0094d8',
border_normal="#272822",
border_on_single = False,
border_width=5,
insert_position=1,
margin=[5, 5, 5, 5]
),
]
widget_defaults = dict(
background='#272822',
font="RobotoMono Nerd Font Medium",
fontsize=14,
foreground='#feffff',
)
extension_defaults = widget_defaults.copy()
def yubikey_replace(text):
return text.replace('YubiKey is waiting for a touch', 'Touch the Yubikey')
screens = [
Screen(
top=bar.Bar(
[
widget.GroupBox(
active='#feffff',
disable_drag=True,
fontsize=18,
highlight_color='#272822',
highlight_method='block',
mouse_callbacks={"Button1": lambda: None},
rounded=False,
this_current_screen_border='#005577',
urgent_alert_method='block',
urgent_border='#770000',
use_mouse_wheel=False,
),
widget.Prompt(
bell_style=None,
prompt='open: ',
record_history=False,
),
widget.Spacer(),
widget.Notify(
background='#e8b923',
background_low='#272822',
background_urgent='#770000',
foreground='#000000',
foreground_low='#c7c7c7',
foreground_urgent='#feffff',
font='RobotoMono Nerd Font Bold',
parse_text=yubikey_replace,
),
widget.GenPollCommand(
background='#005577',
foreground='#feffff',
update_interval=1,
cmd="sb-mail",
),
widget.GenPollCommand(
background='#770000',
foreground='#feffff',
update_interval=1,
cmd="sb-volume",
),
widget.GenPollCommand(
background='#770000',
foreground='#feffff',
update_interval=1,
cmd="sb-wireguard",
),
widget.Wlan(
background='#770000',
foreground='#feffff',
format='',
disconnected_message="no wifi",
),
widget.GenPollCommand(
update_interval=1,
cmd="sb-battery",
),
widget.Clock(
format='[%d] %H:%M:%S',
),
widget.StatusNotifier(
icon_size=18,
),
],
24,
margin=[5, 5, 0, 5]
),
wallpaper=os.environ['XDG_CONFIG_HOME'] + '/qtile/wallpaper.img',
wallpaper_mode='fill',
),
]
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()),
]
floating_layout = layout.Floating(
float_rules=[
*layout.Floating.default_float_rules,
Match(title="File Upload"),
Match(title="Open File"),
Match(title="Open file"),
Match(title="Open Files"),
Match(title="Firefox — Sharing Indicator"),
Match(title="Enter name of file to save to…"),
Match(title="Save Image"),
],
border_focus='#005577',
border_normal="#272822",
border_width=5,
)
focus_on_window_activation = "urgent"
wmname = "qtile"