Dotfiles/.config/qtile/config.py
2024-09-22 13:03:17 +02:00

450 lines
16 KiB
Python

##################################################################################################################################################
### IF YOU ARE READING CONFIG.PY, SWITCH TO CONFIG.ORG IN EMACS!! THIS VERSION IS TANGELD FROM A LITERATE CONFIG AND HAS NEXT TO NO COMMENTS!! ###
##################################################################################################################################################
import os
import re
import subprocess
from libqtile.config import KeyChord, Key, Screen, Group, Drag, Click
from libqtile.lazy import lazy
from libqtile import layout, bar, widget, hook
from libqtile.lazy import lazy
from typing import List # noqa: F401
mod = "mod4" # Sets mod key to SUPER/WINDOWS
myTerm = "alacritty" # My terminal of choice
keys = [
Key([mod], "Return",
lazy.spawn(myTerm),
desc='Launches My Terminal'
),
Key([mod], "r",
lazy.spawn("rofi -show drun"),
desc='Rofi Run Launcher'
),
Key([mod], "Tab",
lazy.next_layout(),
desc='Toggle through layouts'
),
Key([mod], "x",
lazy.window.kill(),
desc='Kill active window'
),
Key([mod, "shift"], "r",
lazy.restart(),
desc='Restart Qtile'
),
Key([mod, "shift"], "q",
lazy.shutdown(),
desc='Shutdown Qtile'
),
### Window controls
Key([mod], "k",
lazy.layout.down(),
desc='Move focus down in current stack pane'
),
Key([mod], "j",
lazy.layout.up(),
desc='Move focus up in current stack pane'
),
Key([mod, "shift"], "k",
lazy.layout.shuffle_down(),
desc='Move windows down in current stack'
),
Key([mod, "shift"], "j",
lazy.layout.shuffle_up(),
desc='Move windows up in current stack'
),
Key([mod], "h",
lazy.layout.grow(),
lazy.layout.increase_nmaster(),
desc='Expand window (MonadTall), increase number in master pane (Tile)'
),
Key([mod], "l",
lazy.layout.shrink(),
lazy.layout.decrease_nmaster(),
desc='Shrink window (MonadTall), decrease number in master pane (Tile)'
),
Key([mod], "y",
lazy.layout.normalize(),
desc='normalize window size ratios'
),
Key([mod, "shift"], "f",
lazy.window.toggle_floating(),
desc='toggle floating'
),
Key([mod, "shift"], "w",
lazy.to_screen(0),
desc='Move focus to monitor one'
),
Key([mod, "shift"], "e",
lazy.to_screen(1),
desc='Move focus to monitor two'
),
Key([mod], "f",
lazy.spawn("firefox"),
desc='Firefox'
),
Key([mod], "n",
lazy.spawn("/home/emma/AppImages/Vesktop.AppImage"),
desc='Vesktop'
),
Key([mod, "shift"], "n",
lazy.spawn("discord"),
desc='Standard Discord Client'
),
Key([mod], "w",
lazy.spawn("lowriter"),
desc='Libre Office Writer'
),
Key([mod], "p",
lazy.spawn("pcmanfm"),
desc='PCmanFM'
),
Key([mod], "v",
lazy.spawn("vlc"),
desc='VLC Media Player'
),
Key([mod], "d",
lazy.spawn("deadbeef"),
desc='The DeaDBeeF Music Player'
),
Key([mod], "m",
lazy.spawn("mailspring --password-store='gnome-libsecret'"),
desc='My Email Client of Choice'
),
# Gscreenshot
KeyChord([mod], "g", [
Key([], "s", lazy.spawn("flameshot gui")),
Key([], "g", lazy.spawn("flameshot full -c -p /home/emma/Bilder/flameshots"))
]),
# Emacs
KeyChord([mod], "e", [
Key([], "e", lazy.spawn("emacsclient -c -a 'emacs'")),
Key([], "p", lazy.spawn("emacsclient -c -a 'emacs' ~/Projektordner/Hauptprojekt.org")),
Key([], "q", lazy.spawn("emacsclient -c -a 'emacs' ~/.config/qtile/config.org"))
]),
# Switching Keyboard Layouts
KeyChord([mod], "space", [
Key([], "e", lazy.spawn("setxkbmap -layout us -variant altgr-intl")),
Key([], "p", lazy.spawn("setxkbmap -layout pl")),
Key([], "g", lazy.spawn("setxkbmap -layout gr")),
]),
# Steam
KeyChord([mod], "z", [
### Steam Runtime
Key([], "z", lazy.spawn("steam")),
### Hollow Knight
Key([], "h", lazy.spawn("steam steam://rungameid/367520")),
#### Code Vein
Key([], "c", lazy.spawn("steam steam://rungameid/678960")),
### Red Dead Redemption
Key([], "r", lazy.spawn("steam steam://rungameid/1174180")),
### Souls Series
KeyChord([], "d", [
Key([], "1", lazy.spawn("steam steam://rungameid/570940")),
Key([], "3", lazy.spawn("steam steam://rungameid/374320"))
]),
### SAO Series
KeyChord([], "s", [
Key([], "1", lazy.spawn("steam steam://rungameid/607890")),
Key([], "2", lazy.spawn("steam steam://rungameid/626690"))
]),
### Outlast Series
KeyChord([], "o", [
Key([], "1", lazy.spawn("steam steam://rungameid/238320")),
Key([], "2", lazy.spawn("steam steam://rungameid/414700"))
]),
### Tomb Raider Series
KeyChord([], "t", [
Key([], "1", lazy.spawn("steam steam://rungameid/203160")),
Key([], "2", lazy.spawn("steam steam://rungameid/391220")),
Key([], "3", lazy.spawn("steam steam://rungameid/750920"))
])
])
]
group_names = [("Term", {'layout': 'monadtall'}),
("Web", {'layout': 'monadtall'}),
("Chat", {'layout': 'monadtall'}),
("Dev", {'layout': 'monadtall'}),
("Game", {'layout': 'floating'}),
("Text", {'layout': 'monadtall'}),
("Music", {'layout': 'monadtall'}),
("Misc", {'layout': 'floating'}),
("Qbit", {'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())) # Switch to another group
keys.append(Key([mod, "shift"], str(i), lazy.window.togroup(name))) # Send current window to another group
layout_theme = {"border_width": 2,
"margin": 6,
"border_focus": "e1acff",
"border_normal": "1D2330"
}
layouts = [
# layout.MonadWide(**layout_theme),
# layout.Bsp(**layout_theme),
# layout.Stack(stacks=2, **layout_theme),
# layout.Columns(**layout_theme),
# layout.Tile(shift_windows=True, **layout_theme),
# layout.RatioTile(**layout_theme),
# layout.VerticalTile(**layout_theme),
# layout.Zoomy(**layout_theme),
# layout.Matrix(**layout_theme),
# layout.Max(**layout_theme),
# layout.Stack(**layout_theme, num_stacks=2),
layout.MonadTall(**layout_theme),
layout.Floating(**layout_theme)
]
colors = [["#282c34", "#282c34"], # panel background
["#434758", "#434758"], # background for current screen tab
["#ffffff", "#ffffff"], # font color for group names
["#ff5555", "#ff5555"], # border line color for current tab
["#74438f", "#74438f"], # border line color for other tab and odd widgets
["#4f76c7", "#4f76c7"], # color for the even widgets
["#e1acff", "#e1acff"]] # window name
# Sets the format for Qtile's run prompt. The config doesn't work if this isn't set but I didn't want to make a new Source Block and a literrate explanation for this, since it's only a thing that makes stuff work
prompt = "{0}@{1}: ".format(os.environ["USER"], os.uname()[1])
widget_defaults = dict(
font="Mononoki Nerd Font",
fontsize = 12,
padding = 2,
background=colors[2]
)
extension_defaults = widget_defaults.copy()
def init_widgets_list():
widgets_list = [
widget.Sep(
linewidth = 0,
padding = 6,
foreground = colors[2],
background = colors[0]
),
widget.GroupBox(
font = "Mononoki Nerd Font",
fontsize = 9,
margin_y = 3,
margin_x = 0,
padding_y = 5,
padding_x = 3,
borderwidth = 3,
active = colors[2],
inactive = colors[2],
rounded = False,
highlight_color = colors[1],
highlight_method = "line",
this_current_screen_border = colors[3],
this_screen_border = colors [4],
other_current_screen_border = colors[0],
other_screen_border = colors[0],
foreground = colors[2],
background = colors[0]
),
widget.Prompt(
prompt = prompt,
font = "Mononoki Nerd Font",
padding = 10,
foreground = colors[3],
background = colors[1]
),
widget.Sep(
linewidth = 0,
padding = 40,
foreground = colors[2],
background = colors[0]
),
widget.WindowName(
foreground = colors[6],
background = colors[0],
padding = 0
),
widget.TextBox(
text='',
background = colors[0],
foreground = colors[4],
padding = -5,
fontsize = 37
),
widget.CPU(
foreground = colors[2],
background = colors[4],
padding = 3
),
widget.TextBox(
text = '',
background = colors[4],
foreground = colors[5],
padding = -5,
fontsize = 37
),
widget.Memory(
foreground = colors[2],
background = colors[5],
padding = 5
),
widget.TextBox(
text = '',
background = colors[5],
foreground = colors[4],
padding = -5,
fontsize = 37
),
widget.Net(
foreground = colors[2],
background = colors[4],
padding = 5
),
widget.TextBox(
text='',
background = colors[4],
foreground = colors[5],
padding = -5,
fontsize = 37
),
widget.TextBox(
text = "",
padding = 2,
foreground = colors[2],
background = colors[5],
fontsize = 14
),
widget.CheckUpdates(
update_interval = 1800,
distro = "Gentoo_eix",
display_format = "{updates} Updates",
foreground = colors[2],
execute = 'alacritty -e doas emerge --sync && doas emerge -auDN @world && doas emerge -acv',
background = colors[5]
),
widget.TextBox(
text = '',
background = colors[5],
foreground = colors[4],
padding = -5,
fontsize = 37
),
widget.CurrentLayout(
foreground = colors[2],
background = colors[4],
padding = 5
),
widget.TextBox(
text = '',
background = colors[4],
foreground = colors[5],
padding = -5,
fontsize = 37
),
widget.Clock(
foreground = colors[2],
background = colors[5],
execute = 'gnome-calendar',
format = "%A, %B %d [ %H:%M:%S ]"
),
widget.Sep(
linewidth = 0,
padding = 10,
foreground = colors[0],
background = colors[5]
),
widget.TextBox(
text = '',
background = colors[5],
foreground = colors[4],
padding = -5,
fontsize = 37
),
widget.Systray(
background = colors[4],
padding = 2
),
widget.Sep(
linewidth = 0,
padding = 5,
foreground = colors[2],
background = colors[4]
),
]
return widgets_list
def init_widgets_screen1():
widgets_screen1 = init_widgets_list()
return widgets_screen1
def init_widgets_screen2():
widgets_screen2 = init_widgets_list()
widgets_screen2 = widgets_screen2[:-3] + widgets_screen2[-1:]
return widgets_screen2
def init_screens():
return [Screen(top=bar.Bar(widgets=init_widgets_screen1(), opacity=1.0, size=20)),
Screen(top=bar.Bar(widgets=init_widgets_screen2(), opacity=1.0, size=20))]
if __name__ in ["config", "__main__"]:
screens = init_screens()
def window_to_prev_group(qtile):
if qtile.currentWindow is not None:
i = qtile.groups.index(qtile.currentGroup)
qtile.currentWindow.togroup(qtile.groups[i - 1].name)
def window_to_next_group(qtile):
if qtile.currentWindow is not None:
i = qtile.groups.index(qtile.currentGroup)
qtile.currentWindow.togroup(qtile.groups[i + 1].name)
# A list, which tells the mouse what to do when which button is pressed together with the mod key.
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())
]
dgroups_key_binder = None
dgroups_app_rules = [] # type: List
main = None
follow_mouse_focus = False
bring_front_click = True
cursor_warp = False
floating_layout = layout.Floating(float_rules=[
*layout.Floating.default_float_rules
])
auto_fullscreen = True
focus_on_window_activation = "smart"
auto_minimize = False
@hook.subscribe.startup_once
def start_once():
home = os.path.expanduser('~')
subprocess.Popen([home + '/.config/qtile/autostart.sh'])
wmname = "qtile"