# # QQQQQQQQQ tttt iiii lllllll # QQ:::::::::QQ ttt:::t i::::i l:::::l # QQ:::::::::::::QQ t:::::t iiii l:::::l # Q:::::::QQQ:::::::Q t:::::t l:::::l # Q::::::O Q::::::Qttttttt:::::ttttttt iiiiiii l::::l eeeeeeeeeeee # Q:::::O Q:::::Qt:::::::::::::::::t i:::::i l::::l ee::::::::::::ee # Q:::::O Q:::::Qt:::::::::::::::::t i::::i l::::l e::::::eeeee:::::ee # Q:::::O Q:::::Qtttttt:::::::tttttt i::::i l::::l e::::::e e:::::e # Q:::::O Q:::::Q t:::::t i::::i l::::l e:::::::eeeee::::::e # Q:::::O Q:::::Q t:::::t i::::i l::::l e:::::::::::::::::e # Q:::::O QQQQ:::::Q t:::::t i::::i l::::l e::::::eeeeeeeeeee # Q::::::O Q::::::::Q t:::::t tttttt i::::i l::::l e:::::::e # Q:::::::QQ::::::::Q t::::::tttt:::::ti::::::il::::::le::::::::e # QQ::::::::::::::Q tt::::::::::::::ti::::::il::::::l e::::::::eeeeeeee # QQ:::::::::::Q tt:::::::::::tti::::::il::::::l ee:::::::::::::e # QQQQQQQQ::::QQ ttttttttttt iiiiiiiillllllll eeeeeeeeeeeeee # Q:::::Q # QQQQQQ # ___ _ _ __ _ # / _ \ | | | / _(_) # / /_\ \_ __ ___ | | | ___ ___ ___ _ __ | |_ _ __ _ # | _ | '_ \ / _ \| | |/ _ \ / __/ _ \| '_ \| _| |/ _` | # | | | | |_) | (_) | | | (_) | | (_| (_) | | | | | | | (_| | # \_| |_/ .__/ \___/|_|_|\___/ \___\___/|_| |_|_| |_|\__, | # | | __/ | # |_| |___/ import os import subprocess from libqtile import layout, bar, widget, hook from libqtile.config import Click, Drag, Group, Key, Match, Screen, Rule from libqtile.command import lazy from libqtile.widget import Spacer #mod4 or mod = super key mod = "mod4" mod1 = "alt" mod2 = "control" image = '~/Pictures/medicine/caduceus-crystal.jpg' @hook.subscribe.startup_once def start_once(): autostart_path = os.path.expanduser('~/.config/autostart/autostart.sh') subprocess.run([autostart_path]) @lazy.function 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) @lazy.function 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) mod = "mod4" # Sets mod key to SUPER/WINDOWS myTerm = "alacritty" # My terminal of choice myBrowser = "qutebrowser" # My browser of choice keys = [ ### The essentials Key([mod], "Return", lazy.spawn(myTerm), desc='Launches My Terminal' ), Key([mod, "shift"], "a", lazy.spawn('anki'), desc='Launch anki'), Key([mod], "Tab", lazy.spawn("dmenu_run -p 'Run: '"), desc='Run Launcher' ), Key([mod], "p", lazy.spawn("passmenu -p 'Password for: '"), ), Key([mod], "b", lazy.spawn(myBrowser), desc='Qutebrowser' ), Key([mod, "shift"], "c", lazy.next_layout(), desc='Toggle through layouts' ), Key([mod], "q", lazy.window.kill(), desc='Kill active window' ), Key([mod, "shift"], "r", lazy.restart(), desc='Restart Qtile' ), Key([mod, "shift"], "0", lazy.shutdown(), desc='Shutdown Qtile' ), Key([mod, "shift"], "e", lazy.spawn("emacsclient -c -a 'emacs'"), desc='Doom Emacs' ), ### Switch focus of monitors Key([mod], "period", lazy.next_screen(), desc='Move focus to next monitor' ), Key([mod], "comma", lazy.prev_screen(), desc='Move focus to prev monitor' ), ### Treetab controls Key([mod, "shift"], "h", lazy.layout.move_left(), desc='Move up a section in treetab' ), Key([mod, "shift"], "l", lazy.layout.move_right(), desc='Move down a section in treetab' ), ### Window controls Key([mod], "j", lazy.layout.down(), desc='Move focus down in current stack pane' ), Key([mod], "k", lazy.layout.up(), desc='Move focus up in current stack pane' ), Key([mod, "shift"], "j", lazy.layout.shuffle_down(), lazy.layout.section_down(), desc='Move windows down in current stack' ), Key([mod, "shift"], "k", lazy.layout.shuffle_up(), lazy.layout.section_up(), desc='Move windows up in current stack' ), Key([mod], "h", lazy.layout.shrink(), lazy.layout.decrease_nmaster(), desc='Shrink window (MonadTall), decrease number in master pane (Tile)' ), Key([mod], "l", lazy.layout.grow(), lazy.layout.increase_nmaster(), desc='Expand window (MonadTall), increase number in master pane (Tile)' ), Key([mod], "n", lazy.layout.normalize(), desc='normalize window size ratios' ), Key([mod], "m", lazy.layout.maximize(), desc='toggle window between minimum and maximum sizes' ), Key([mod, "shift"], "f", lazy.window.toggle_floating(), desc='toggle floating' ), Key([mod], "f", lazy.window.toggle_fullscreen(), desc='toggle fullscreen' ), ### Stack controls Key([mod, "shift"], "Tab", lazy.layout.rotate(), lazy.layout.flip(), desc='Switch which side main pane occupies (XmonadTall)' ), Key([mod, "shift"], "space", lazy.layout.toggle_split(), desc='Toggle between split and unsplit sides of stack' ), ### Volume controls Key([], "XF86AudioLowerVolume", lazy.spawn('amixer sset Master 5%-'), desc="Decrease volume" ), Key([], "XF86AudioRaiseVolume", lazy.spawn('amixer sset Master 5%+'), desc="Increase volume" ), ### Music Key([mod, "shift"], "p", lazy.spawn("playerctl play-pause"), desc="play/pause music" ), Key([mod, "shift"], "l", lazy.spawn("playerctl next"), desc="next song" ), Key([mod, "shift"], "h", lazy.spawn("playerctl previous"), desc="previous song" ), ### Change languages Key([mod], "F1", lazy.spawn("setxkbmap us -option caps:swapescape"), desc= "change to US layout" ), Key([mod],"F2", lazy.spawn("setxkbmap gr"), desc= "change to greek layout" ), ] def window_to_previous_screen(qtile, switch_group=False, switch_screen=False): i = qtile.screens.index(qtile.current_screen) if i != 0: group = qtile.screens[i - 1].group.name qtile.current_window.togroup(group, switch_group=switch_group) if switch_screen == True: qtile.cmd_to_screen(i - 1) def window_to_next_screen(qtile, switch_group=False, switch_screen=False): i = qtile.screens.index(qtile.current_screen) if i + 1 != len(qtile.screens): group = qtile.screens[i + 1].group.name qtile.current_window.togroup(group, switch_group=switch_group) if switch_screen == True: qtile.cmd_to_screen(i + 1) groups = [] group_names = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0",] #group_labels = ["1 ", "2 ", "3 ", "4 ", "5 ", "6 ", "7 ", "8 ", "9 ", "0",] group_labels = ["Ⅰ", "Ⅱ", "Ⅲ", "Ⅳ", "Ⅴ", "Ⅵ", "Ⅶ", "Ⅷ", "Ⅸ", "Ⅹ",] group_layouts = ["monadtall", "monadtall", "monadtall", "monadtall", "monadtall", "monadtall", "monadtall", "monadtall", "monadtall", "monadtall",] #group_layouts = ["monadtall", "matrix", "monadtall", "bsp", "monadtall", "matrix", "monadtall", "bsp", "monadtall", "monadtall",] for i in range(len(group_names)): groups.append( Group( name=group_names[i], layout=group_layouts[i].lower(), label=group_labels[i], )) for i in groups: keys.extend([ #CHANGE WORKSPACES Key([mod], i.name, lazy.group[i.name].toscreen()), # MOVE WINDOW TO SELECTED WORKSPACE 1-10 AND STAY ON WORKSPACE Key([mod, "shift"], i.name, lazy.window.togroup(i.name)), # MOVE WINDOW TO SELECTED WORKSPACE 1-10 AND FOLLOW MOVED WINDOW TO WORKSPACE # Key([mod, "shift"], i.name, lazy.window.togroup(i.name) , lazy.group[i.name].toscreen()), ]) def init_layout_theme(): return {"margin":5, "border_width":2, "border_focus": "#5e81ac", "border_normal": "#4c566a" } layout_theme = init_layout_theme() layouts = [ #layout.MonadTall(margin=8, border_width=2, border_focus="#5e81ac", border_normal="#4c566a"), layout.MonadTall(**layout_theme), #layout.MonadWide(margin=8, border_width=2, border_focus="#5e81ac", border_normal="#4c566a"), # layout.MonadWide(**layout_theme), # layout.Matrix(**layout_theme), # layout.Bsp(**layout_theme), # layout.Floating(**layout_theme), # layout.RatioTile(**layout_theme), layout.Max(**layout_theme) ] # COLORS FOR THE BAR def init_colors(): return [ ["#2F343F", "#2F343F"], # color 0 ["#000000", "#000000"], # black 1 ["#2F343F", "#2F343F"], # color 2 ["#c0c5ce", "#c0c5ce"], # color 3 ["#fba922", "#fba922"], # color 4 ["#3384d0", "#3384d0"], # Blue 5 ["#f3f4f5", "#f3f4f5"], # color 6 ["#cd1f3f", "#cd1f3f"], # color 7 ["#62FF00", "#62FF00"], # color 8 ["#6790eb", "#6790eb"], # color 9 ["#a9a9a9", "#a9a9a9"], # color 10 ['#ff0000', "#ff0000"], # red 11 ] colors = init_colors() # WIDGETS FOR THE BAR def init_widgets_defaults(): return dict(font="Noto Sans", fontsize = 12, padding = 2, background=colors[1]) widget_defaults = init_widgets_defaults() def init_widgets_list(): widgets_list = [ widget.Sep( linewidth = 1, padding = 6, foreground = colors[2], background = colors[1] ), widget.Image( filename = image, scale = "True", ), widget.GroupBox( font="FontAwesome", fontsize = 20, margin_y = 3, margin_x = 0, padding_y = 6, padding_x = 5, borderwidth = 1, disable_drag = True, active = colors[5], inactive = colors[10], rounded = False, highlight_color = colors[1], highlight_method = "line", this_current_screen_border = colors[11], other_current_screen_border = colors[10], foreground = colors[2], background = colors[1], ), widget.Sep( linewidth = 1, padding = 10, foreground = colors[2], background = colors[1] ), widget.CurrentLayout( font = "Noto Sans Bold", foreground = colors[4], background = colors[1] ), widget.Sep( linewidth = 1, padding = 10, foreground = colors[2], background = colors[1] ), widget.WindowName(font="Noto Sans", fontsize = 12, foreground = colors[8], background = colors[1], ), # widget.Sep( # linewidth = 1, # padding = 10, # foreground = colors[2], # background = colors[1] # ), # widget.Net( # format='{interface}: U {up} D {down} T {total}' # ), widget.Sep( linewidth = 1, padding = 10, foreground = colors[2], background = colors[1] ), # widget.Image( # filename='~/Pictures/arch/qwe_download.png', # scale = "True", # ), widget.TextBox( font="FontAwesome", text= '|' + str(subprocess.check_output("uname -r", shell=True).strip()).replace('b','') + '|', foreground=colors[5], background=colors[1], padding = 0, fontsize=14 ), widget.Sep( linewidth = 1, padding = 10, foreground = colors[2], background = colors[1] ), widget.Memory( measure_mem="G", fontsize=15, graph_color = colors[11] ), widget.MemoryGraph( type='box' ), widget.Sep( linewidth = 1, padding = 10, foreground = colors[2], background = colors[1] ), widget.ThermalSensor( format='{tag}: {temp:.Of}{unit}', threshold=50, fontsize=15, ), widget.CPUGraph( type='box', graph_color = colors[5] ), widget.Sep( linewidth = 1, padding = 10, foreground = colors[2], background = colors[1] ), widget.TextBox( font="FontAwesome", text="  ", foreground=colors[5], background=colors[1], padding = 0, fontsize=18 ), widget.Clock( font='Mono', foreground = colors[3], background = colors[1], fontsize = 18, format="%d-%m-%Y | %H:%M" ), widget.Sep( linewidth = 1, padding = 3, foreground = colors[2], background = colors[1] ), widget.Systray( background=colors[1], icon_size=21, padding = 10 ), widget.Sep( linewidth = 1, padding = 20, foreground = colors[2], background = colors[1] ), ] return widgets_list widgets_list = init_widgets_list() def init_widgets_screen1(): widgets_screen1 = init_widgets_list() return widgets_screen1 def init_widgets_screen2(): widgets_screen2 = init_widgets_list() return widgets_screen2[:-2] widgets_screen1 = init_widgets_screen1() widgets_screen2 = init_widgets_screen2() def init_screens(): return [Screen(top=bar.Bar(widgets=init_widgets_screen1(), size=33, opacity=0.8)), Screen(top=bar.Bar(widgets=init_widgets_screen2(), size=26, opacity=0.8))] screens = init_screens() follow_mouse_focus = True bring_front_click = False cursor_warp = False auto_fullscreen = True focus_on_window_activation = "focus" # or smart wmname = "Qtile-Apo11o"