import os import subprocess from libqtile import bar, extension, hook, layout, widget from libqtile.lazy import lazy from libqtile.config import Click, Drag, DropDown, Group, Key, Match, ScratchPad, Screen @hook.subscribe.startup_once def autostart(): home = os.path.expanduser('~/.config/qtile/autostart.sh') subprocess.Popen([home]) 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", "discord", "Signal"])]), Group("4", label="\uf7aa", matches=[Match(wm_class=["mutt"])]), Group("5", label="\uf120"), Group("6", label="\uf120"), Group("7", label="\ufce1", matches=[Match(wm_class=["1Password"])]), Group("8", label="\uf9b0", matches=[Match(wm_class=["Slack"])]), Group("9", label="\uf296"), Group("0", label="\uf2bb", matches=[Match(wm_class=["workfx"])]), ScratchPad("scratchpad", [ DropDown( "spterm", "sh -c 'BROWSER=firefox st'", on_focus_lost_hide=False, width=0.40, height=0.50, x=0.30, y=0.25, ), DropDown( "spwork", "sh -c 'terminal_profile=work BROWSER=workfx st'", on_focus_lost_hide=False, width=0.40, height=0.50, x=0.30, y=0.25, ), ]), ] 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()), # 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("sh -c 'BROWSER=firefox st'")), Key([mod], "space", lazy.spawncmd()), Key([mod], "a", lazy.spawn("authenticator")), Key([mod], "e", lazy.group["scratchpad"].dropdown_toggle('spterm')), Key([mod], "i", lazy.spawn("scrot -f -s 'scrot_%Y-%m-%d_%H-%M-%S_%s.png'")), Key([mod], "m", lazy.spawn("sh -c 'pgrep -x neomutt > /dev/null || BROWSER=firefox st -n mutt -e neomutt'")), Key([mod, "shift"], "e", lazy.group["scratchpad"].dropdown_toggle('spwork')), Key([mod, "shift"], "i", lazy.spawn("scrot -f 'scrot_%Y-%m-%d_%H-%M-%S_%s.png'")), Key([mod, "shift"], "Return", lazy.spawn("sh -c 'terminal_profile=work BROWSER=workfx st'")), Key([mod, "control"], "a", lazy.spawn("dmenu-audio")), Key([mod, "control"], "b", lazy.spawn("dmenu-bluetooth")), Key([mod, "control"], "e", lazy.spawn("dmenu-emoji")), Key([mod, "control"], "d", lazy.spawn("dmenu-display")), # WM control Key([mod], "f", lazy.window.toggle_floating()), Key([mod], "q", lazy.window.kill()), Key([mod, "control", "shift"], "l", lazy.spawn("physlock")), 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("key-micmute")), 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='#c7c7c7', ) 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, 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.Battery( format='{char} {percent:2.0%}', charge_char='\uf077', discharge_char='\uf078', unknown_char='\uf444', full_char='\uf102', update_interval=1, low_background='#770000', low_foreground='#feffff', low_percentage=0.2, ), widget.Clock( format='[%d] %H:%M:%S', ), widget.Systray(), ], 24, margin=[5, 5, 0, 5] ), wallpaper='~/.local/share/wallpaper.jpg', 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(wm_class='Authenticator'), ], border_focus='#f005577', border_normal="#272822", border_width=2, ) auto_fullscreen = False auto_minimize = True focus_on_window_activation = "smart" follow_mouse_focus = True reconfigure_screens = True wmname = "LG3D"