import os import subprocess from libqtile import bar, extension, hook, layout from libqtile.lazy import lazy from libqtile.config import Click, Drag, DropDown, Group, Key, Match, ScratchPad, Screen from libqtile.backend.wayland import InputConfig from qtile_extras import widget os.environ["MOZ_ENABLE_WAYLAND"] = "1" os.environ["MOZ_DBUS_REMOTE"] = "1" 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.Popen([autostart]) @hook.subscribe.shutdown def autostop(): autostop = os.path.expanduser('~/.config/qtile/stop.sh') subprocess.Popen([autostop]) @hook.subscribe.resume def resume(): wallpaper = os.path.expanduser('~/.config/qtile/wallpaper.img') subprocess.Popen(['swaylock', '--image', wallpaper]) 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", "WebCord"])]), Group("4", label="\uf7aa", matches=[Match(wm_class=["mutt"])]), Group("5", label="\uf120"), 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("footclient")), Key([mod], "space", lazy.spawncmd()), Key([mod], "a", lazy.spawn("authenticator")), 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 || footclient -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 key")), Key([], "XF86AudioRaiseVolume", lazy.spawn("sb-volume inc")), Key([], "XF86AudioLowerVolume", lazy.spawn("sb-volume dec")), Key([], "XF86MonBrightnessUp", lazy.spawn("xbacklight -inc 10")), Key([], "XF86MonBrightnessDown", lazy.spawn("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) ), ] ) 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_method='block', rounded=False, this_current_screen_border='#005577', urgent_alert_method='block', urgent_border='#770000', ), 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-network", ), 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, ) wmname = "qtile"