dotfiles/config/qtile/config.py
2021-01-02 21:48:35 +02:00

308 lines
8 KiB
Python

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 kblayout
import os
mod = "mod4"
alt = "mod1"
terminal = "alacritty"
browser = "firefox"
filemanager="thunar"
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], "f",
lazy.spawn(filemanager),
desc="Launch filemanager"
),
# 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(),
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(),
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 or/and rofi)
Key([mod, "shift"], "Return",
lazy.spawn("rofi -location 2 -show drun"),
desc="(Rofi) Program launcher"
),
Key([mod, "shift"], "apostrophe",
lazy.spawn("rofi -location 2 -show run"),
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"
),
Key([mod, "shift"], "Escape",
lazy.spawn("xkill"),
desc="Xkill"
),
Key([mod, "shift"], "z",
lazy.spawn("betterlockscreen --off 300 -t \"Computer is locked\" -l"),
desc="Lock screen"
)
]
# Workspaces name, keys
group_names = [("term", {"layout": "columns"}),
("www", {"layout": "max"}),
("dev", {"layout": "columns"}),
("sys", {"layout": "columns"}),
("doc", {"layout": "columns"}),
("chat", {"layout": "columns"}),
("pass", {"layout": "columns"}),
("mus", {"layout": "max"}),
("flo", {"layout": "columns"})
]
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": 2,
"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],
),
widget.Prompt(),
widget.WindowName(),
kblayout.KBLayout(
foreground=color[5],
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(
**layout_theme,
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"