mirror of
https://github.com/olexsmir/dotfiles.git
synced 2026-01-15 08:41:34 +02:00
313 lines
8.7 KiB
Python
313 lines
8.7 KiB
Python
from libqtile import bar, layout, widget, hook
|
|
from libqtile.config import Click, Drag, Group, Key, Screen
|
|
from libqtile.lazy import lazy
|
|
from os import system as cmd
|
|
import kblayout
|
|
|
|
|
|
# Set mod key
|
|
mod = "mod4"
|
|
alt = "mod1"
|
|
|
|
# Set program
|
|
terminal = "alacritty"
|
|
browser = "firefox"
|
|
filemanager = f"{terminal} --title=ranger -e ranger"
|
|
editor = f"{terminal} --title=NVim -e nvim"
|
|
guicodeeitor = "code --disable-gpu"
|
|
|
|
# Set qtile colors
|
|
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
|
|
]
|
|
|
|
|
|
# Auto start
|
|
@hook.subscribe.startup_once
|
|
def autostart():
|
|
cmd("~/.config/qtile/autostart.sh")
|
|
|
|
|
|
keys = [
|
|
# Applications
|
|
Key([mod], "Return",
|
|
lazy.spawn(terminal),
|
|
desc="Launch terminal"),
|
|
Key([mod, "shift"], "w",
|
|
lazy.spawn(browser),
|
|
desc="Launch browser"),
|
|
Key([mod, "shift"], "f",
|
|
lazy.spawn(filemanager),
|
|
desc="Launch filemanager"),
|
|
Key([mod, "shift"], "e",
|
|
lazy.spawn(editor),
|
|
desc="Launch code editor"),
|
|
Key([mod, "shift"], "c",
|
|
lazy.spawn(guicodeeitor),
|
|
desc="Run GUI code editor"),
|
|
|
|
# Window control
|
|
Key([mod], "q",
|
|
lazy.window.kill(),
|
|
desc="Kill focused window"),
|
|
Key([mod, "shift"], "Tab",
|
|
lazy.window.toggle_floating(),
|
|
desc="Toggle floating mode"),
|
|
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("amixer sset Master 2%+"),
|
|
desc="Plus 2% volume"),
|
|
Key([mod], "minus",
|
|
lazy.spawn("amixer sset Master 2%-"),
|
|
desc="Minus 2% volume"),
|
|
Key([mod, "shift"], "minus",
|
|
lazy.spawn("amixer sset Master toggle"),
|
|
desc="Mute volume"),
|
|
|
|
# Menus(dmenu or/and rofi)
|
|
Key([mod, "shift"], "Return",
|
|
lazy.spawn("rofi -show drun"),
|
|
desc="(Rofi) Program launcher"),
|
|
Key([mod], "Escape",
|
|
lazy.spawn("./.script/dmenu/dmenu-power.sh"),
|
|
desc="Power menu"),
|
|
Key([mod, "control"], "i",
|
|
lazy.spawn("./.script/dmenu/dmenu-pass.sh"),
|
|
desc="Dmenu(rofi) password menu"),
|
|
Key([mod, "control"], "u",
|
|
lazy.spawn("./.script/dmenu/dmenu-config-edit.sh"),
|
|
desc="Config editor"),
|
|
|
|
# Screenhot
|
|
Key([], "Print",
|
|
lazy.spawn("scrot -s ./$(date +%Y-%m-%d-%H-%M-%S).png"),
|
|
desc="Create screenhot(scrot -s)"),
|
|
Key(["shift"], "Print",
|
|
lazy.spawn("scrot ./$(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"], "q",
|
|
lazy.spawn("xkill"),
|
|
desc="Xkill"),
|
|
Key([mod, "shift"], "z",
|
|
lazy.spawn("betterlockscreen --off 300 -t \"Computer is locked\" -l"),
|
|
desc="Lock screen")
|
|
]
|
|
|
|
|
|
# Auto send window on specific WP
|
|
@hook.subscribe.client_new
|
|
def client_new(client):
|
|
if client.name == "Alacritty" or client.name == "Kitty":
|
|
client.togroup("term")
|
|
elif client.name == "Mozilla Firefox" or \
|
|
client.name == "Firefox Developer Edition":
|
|
client.togroup("www")
|
|
elif client.name == "NVim" or client.name == \
|
|
"Visual Studio Code":
|
|
client.togroup("dev")
|
|
elif client.name == "Thunar" or client.name == "ranger":
|
|
client.togroup("sys")
|
|
elif client.name == "Joplin":
|
|
client.togroup("doc")
|
|
elif client.name == "Telegram" or client.name == "Discord":
|
|
client.togroup("chat")
|
|
elif client.name == "KeePassXC":
|
|
client.togroup("pass")
|
|
elif client.name == "Spotify":
|
|
client.togroup("mus")
|
|
|
|
|
|
# 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": 2,
|
|
"margin": 2,
|
|
"border_focus": color[2],
|
|
"border_normal": color[3],
|
|
"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=4,
|
|
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"
|