from libqtile import bar, layout, widget, hook from libqtile.config import Click, Drag, Group, Key, Screen from libqtile.lazy import lazy from typing import List import os mod = "mod4" alt = "mod1" terminal = "kitty" browser = "firefox" user = "sasha" color = [ "#FFFFFF", # 0. Text color "#CED4DA", # 1. Unfocus color "#008DCD", # 2. Focus color "#262A2B", # 3. Panel color "#51AFEF", # 4. Text color "#C678DD", # 5. Text color "#FF6C6B", # 6. Text color "#ECBE7B", # 7. Text color "#98BE65", # 8. Text color ] @hook.subscribe.startup_once def autostart(): os.system("~/.config/qtile/autostart.sh") keys = [ # Applications Key([mod], "Return", lazy.spawn(terminal), desc="Launch terminal" ), Key([mod], "F2", lazy.spawn(browser), desc="Launch browser" ), Key([mod, alt], "t", lazy.spawn(f"{terminal} -e \"nvim /home/{user}/.todo\""), desc="Open ~/.todo file in nvim" ), # Window control Key([mod], "q", lazy.window.kill(), desc="Kill focused window" ), Key([mod], "h", lazy.layout.left(), desc="Change focus window(left)" ), Key([mod], "j", lazy.layout.down(), desc="Change focus window(down)" ), Key([mod], "k", lazy.layout.up(), desc="Change focus window(up)" ), Key([mod], "l", lazy.layout.right(), desc="Change focus window(right)" ), Key([mod, "shift"], "h", lazy.layout.shuffle_left(), desc="Move focus window(left)" ), Key([mod, "shift"], "j", lazy.layout.shuffle_down(), desc="Move focus window(down)" ), Key([mod, "shift"], "k", lazy.layout.shuffle_up(), desc="Move focus window(up)" ), Key([mod, "shift"], "l", lazy.layout.shuffle_right(), desc="Move focus window(right)" ), Key([mod, "control"], "h", lazy.layout.grow_left(), #lazy.layout.grow()), desc="Resize focus window(left)" ), Key([mod, "control"], "j", lazy.layout.grow_down(), desc="Resize focus window(down)" ), Key([mod, "control"], "k", lazy.layout.grow_up(), desc="Resize focus window(up)" ), Key([mod, "control"], "l", lazy.layout.grow_right(), #lazy.layout.shrink() desc="Resize focus window(right)" ), # Layout Key([mod], "Tab", lazy.next_layout(), desc="Toggle between layouts" ), Key([mod], "space", lazy.layout.next(), desc="Switch window focus to other pane(s) of stack" ), Key([mod, "shift"], "space", lazy.layout.rotate(), desc="Swap panes of split stack" ), # Volume Key([mod], "equal", lazy.spawn("pactl set-sink-volume alsa_output.pci-0000_00_1b.0.analog-stereo +2%"), desc="Plus 2% volume" ), Key([mod], "minus", lazy.spawn("pactl set-sink-volume alsa_output.pci-0000_00_1b.0.analog-stereo -2%"), desc="Minus 2% volume" ), Key([mod, "shift"], "minus", lazy.spawn("pactl set-sink-mute alsa_output.pci-0000_00_1b.0.analog-stereo toggle"), desc="Mute volume" ), # Menus(dmenu & rofi) Key([mod, "shift"], "Return", lazy.spawn("rofi -show drun -drun-display-format \"{name}\""), desc="(Rofi) Program launcher" ), Key([mod],"Escape", lazy.spawn(f"/home/{user}/.script/dmenu/dmenu-power.sh"), desc="Power menu" ), Key([mod, "control"], "i", lazy.spawn("passmenu -h 24 -p Password"), desc="Dmenu password menu" ), Key([mod, "control"], "u", lazy.spawn(f"/home/{user}/.script/dmenu/dmenu-config-edit.sh"), desc="Config editor" ), Key([mod, "control"], "o", lazy.spawn(f"/home/{user}/.script/dmenu/dmenu-sysmon.sh"), desc="Choice system monitor" ), # Screenhot Key([], "Print", lazy.spawn(f"scrot -s /home/{user}/$(date +%Y-%m-%d-%H-%M-%S).png"), desc="Create screenhot(scrot -s)" ), Key(["shift"], "Print", lazy.spawn(f"scrot /home/{user}/$(date +%Y-%m-%d-%H-%M-%S).png"), desc="Create screenhot full screen(scrot)" ), # Qtile Key([mod, "control"], "r", lazy.restart(), desc="Restart qtile" ), Key([mod], "r", lazy.spawncmd(), desc="Spawn a command using a prompt widget" ), ] # Workspaces name, keys group_names = [("term", {'layout': 'monadtall'}), ("www", {'layout': 'max'}), ("dev", {'layout': 'monadtall'}), ("sys", {'layout': 'monadtall'}), ("doc", {'layout': 'monadtall'}), ("chat", {'layout': 'monadtall'}), ("pass", {'layout': 'monadtall'}), ("mus", {'layout': 'max'}), ("flo", {'layout': 'monadtall'}) ] groups = [Group(name, **kwargs) for name, kwargs in group_names] for i, (name, kwargs) in enumerate(group_names, 1): keys.append(Key([mod], str(i), lazy.group[name].toscreen())) keys.append(Key([mod, "shift"], str(i), lazy.window.togroup(name))) # Window layout(s) layout_theme = { "border_width": 1, "margin": 3, "border_focus": color[2], "border_normal": color[1], "font": "Jatbrains Mono" } layouts = [ layout.Max(), # layout.Stack(num_stacks=2, **layout_theme), # layout.Bsp(**layout_theme), layout.Columns(**layout_theme), # layout.Matrix(), # layout.MonadTall(**layout_theme), # layout.Floating(**layout_theme), # layout.MonadWide(), # layout.RatioTile(), # layout.Tile(**layout_theme), # layout.TreeTab(), # layout.VerticalTile(), # layout.Zoomy(), ] # Panel widget_defaults = dict( font='Jatbrains Mono', fontsize=12, padding=5, foreground=color[0], background=color[3], ) extension_defaults = widget_defaults.copy() screens = [Screen(top=bar.Bar([ widget.GroupBox( active=color[0], inactive=color[1], rounded=False, disable_drag=True, highlight_color=color[2], highlight_method="block", this_current_screen_border=color[2], this_screen_border=color[3], foreground=color[0], ), widget.Prompt(foreground=color[0]), widget.WindowName(foreground=color[0]), widget.KeyboardKbdd( foreground=color[5], configured_keyboards=['us', 'ru', 'ua'], update_interval=0, fmt=" {}", ), widget.CurrentLayout( foreground=color[8] ), widget.Volume( foreground=color[6], fmt=" {}", ), widget.Net( interface="wlp3s0", format='{down}↓↑{up}', foreground=color[7], ), widget.Systray(), widget.Clock( format=' %H:%M', foreground=color[4] ), widget.Clock( format=" %d.%m.%Y", foreground=color[4] )], 24 # Panel size ))] # Drag floating layouts mouse = [ Drag([mod], "Button1", lazy.window.set_position(), 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()) ] dgroups_key_binder = None dgroups_app_rules = [] main = None follow_mouse_focus = True bring_front_click = False cursor_warp = False floating_layout = layout.Floating(float_rules=[ {'wmclass': 'confirm'}, {'wmclass': 'dialog'}, {'wmclass': 'download'}, {'wmclass': 'error'}, {'wmclass': 'file_progress'}, {'wmclass': 'notification'}, {'wmclass': 'splash'}, {'wmclass': 'toolbar'}, {'wmclass': 'confirmreset'}, {'wmclass': 'makebranch'}, {'wmclass': 'maketag'}, {'wname': 'branchdialog'}, {'wname': 'pinentry'}, {'wmclass': 'ssh-askpass'}, ]) auto_fullscreen = True focus_on_window_activation = "smart" wmname = "LG3D"