451 lines
		
	
	
	
		
			16 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			451 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
 | 
						|
          ["#b00b69", "#b00b69"]] # tits
 | 
						|
 | 
						|
# 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[7],
 | 
						|
                       this_screen_border = colors [5],
 | 
						|
                       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"
 |