diff options
author | Thanos Apollo <[email protected]> | 2022-07-11 18:58:18 +0300 |
---|---|---|
committer | Thanos Apollo <[email protected]> | 2022-07-11 18:58:18 +0300 |
commit | 93f37ec986985dcae235d569f1e29c1cff9d72c6 (patch) | |
tree | 174346af7967586ccc44dfba1fb8312d6ca17560 /.config/qtile/config.py |
new files
Diffstat (limited to '.config/qtile/config.py')
-rwxr-xr-x | .config/qtile/config.py | 631 |
1 files changed, 631 insertions, 0 deletions
diff --git a/.config/qtile/config.py b/.config/qtile/config.py new file mode 100755 index 0000000..412601e --- /dev/null +++ b/.config/qtile/config.py @@ -0,0 +1,631 @@ +# Copyright (c) 2010 Aldo Cortesi +# Copyright (c) 2010, 2014 dequis +# Copyright (c) 2012 Randall Ma +# Copyright (c) 2012-2014 Tycho Andersen +# Copyright (c) 2012 Craig Barnes +# Copyright (c) 2013 horsik +# Copyright (c) 2013 Tao Sauvage +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +# +# 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 re +import socket +import subprocess +from typing import List # noqa: F401 +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" +home = os.path.expanduser('~') +image = '~/Pictures/symbols/arch-linux.png' + +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) + +mod = "mod4" # Sets mod key to SUPER/WINDOWS +myTerm = "alacritty" # My terminal of choice +myBrowser = "librewolf" # My browser of choice + +keys = [ + ### The essentials + Key([mod], "Return", + lazy.spawn(myTerm), + desc='Launches My Terminal' + ), + Key([mod], "Tab", + lazy.spawn("dmenu_run -p 'Run: '"), + desc='Run Launcher' + ), + 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], "space", + lazy.layout.next(), + desc='Switch window focus to other pane(s) of stack' + ), + Key([mod, "shift"], "space", + lazy.layout.toggle_split(), + desc='Toggle between split and unsplit sides of stack' + ), + ### Volume controls + Key([], "XF86AudioLowerVolume", + lazy.spawn('amixer -D pulse sset Master 5%-'), + desc="Decrease volume" + ), + Key([], "XF86AudioRaiseVolume", + lazy.spawn('amixer -D pulse sset Master 5%+'), + desc="Increase volume" + ), + ] + + + +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) + +# keys.extend([ +# # MOVE WINDOW TO NEXT SCREEN +# Key([mod,"shift"], "Right", lazy.function(window_to_next_screen, switch_screen=True)), +# Key([mod,"shift"], "Left", lazy.function(window_to_previous_screen, switch_screen=True)), +# ]) + +groups = [] + +# FOR QWERTY KEYBOARDS +group_names = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0",] + +# FOR AZERTY KEYBOARDS +#group_names = ["ampersand", "eacute", "quotedbl", "apostrophe", "parenleft", "section", "egrave", "exclam", "ccedilla", "agrave",] + +#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()), +# Key([mod], "Tab", lazy.screen.next_group()), +# Key([mod, "shift" ], "Tab", lazy.screen.prev_group()), +# Key(["mod1"], "Tab", lazy.screen.next_group()), +# Key(["mod1", "shift"], "Tab", lazy.screen.prev_group()), + +# 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 +#Theme name : ArcoLinux Default +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"], # color 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(): + prompt = "{0}@{1}: ".format(os.environ["USER"], socket.gethostname()) + widgets_list = [ + widget.Sep( + linewidth = 1, + padding = 6, + foreground = colors[2], + background = colors[1] + ), + widget.Image( + filename = image, + scale = "False", + mouse_callbacks = {'Button1': lambda: qtile.cmd_spawn(myTerm)} + ), + widget.GroupBox(font="FontAwesome", + fontsize = 16, + margin_y = 3, + margin_x = 0, + padding_y = 6, + padding_x = 5, + borderwidth = 1, + disable_drag = True, + active = colors[11], + inactive = colors[10], + rounded = False, + highlight_color = colors[1], + highlight_method = "line", + this_current_screen_border = colors[11], + other_current_screen_border = colors[10], + #this_screen_border = colors [5], + #other_screen_border = colors[9], + 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[5], + background = colors[1] + ), + widget.Sep( + linewidth = 1, + padding = 10, + foreground = colors[2], + background = colors[1] + ), + widget.WindowName(font="Noto Sans", + fontsize = 12, + foreground = colors[5], + background = colors[1], + ), + # widget.Net( + # font="Noto Sans", + # fontsize=12, + # interface="enp0s31f6", + # foreground=colors[2], + # background=colors[1], + # padding = 0, + # ), + # widget.Sep( + # linewidth = 1, + # padding = 10, + # foreground = colors[2], + # background = colors[1] + # ), + # widget.NetGraph( + # font="Noto Sans", + # fontsize=12, + # bandwidth="down", + # interface="auto", + # fill_color = colors[8], + # foreground=colors[2], + # background=colors[1], + # graph_color = colors[8], + # border_color = colors[2], + # padding = 0, + # border_width = 1, + # line_width = 1, + # ), + # widget.Sep( + # linewidth = 1, + # padding = 10, + # foreground = colors[2], + # background = colors[1] + # ), + # # do not activate in Virtualbox - will break qtile + # widget.ThermalSensor( + # foreground = colors[5], + # foreground_alert = colors[6], + # background = colors[1], + # metric = True, + # padding = 3, + # threshold = 80 + # ), + # # battery option 1 ArcoLinux Horizontal icons do not forget to import arcobattery at the top + # widget.Sep( + # linewidth = 1, + # padding = 10, + # foreground = colors[2], + # background = colors[1] + # ), + # arcobattery.BatteryIcon( + # padding=0, + # scale=0.7, + # y_poss=2, + # theme_path=home + "/.config/qtile/icons/battery_icons_horiz", + # update_interval = 5, + # background = colors[1] + # ), + # # battery option 2 from Qtile + # widget.Sep( + # linewidth = 1, + # padding = 10, + # foreground = colors[2], + # background = colors[1] + # ), + # widget.Battery( + # font="Noto Sans", + # update_interval = 10, + # fontsize = 12, + # foreground = colors[5], + # background = colors[1], + # ), + # widget.Sep( + # linewidth = 1, + # padding = 10, + # foreground = colors[2], + # background = colors[1] + # ), + # widget.TextBox( + # font="FontAwesome", + # text=" ", + # foreground=colors[6], + # background=colors[1], + # padding = 0, + # fontsize=16 + # ), + # widget.CPUGraph( + # border_color = colors[2], + # fill_color = colors[8], + # graph_color = colors[8], + # background=colors[1], + # border_width = 1, + # line_width = 1, + # core = "all", + # type = "box" + # ), + # widget.ThermalSensor( + # foreground = colors[6], + # backgroumd = colors[3], + # padding = 0, + # fontsize = 13, + # ), + # widget.Sep( + # linewidth = 1, + # padding = 10, + # foreground = colors[2], + # background = colors[1] + # ), + # widget.TextBox( + # font="FontAwesome", + # text=" ", + # foreground=colors[4], + # background=colors[1], + # padding = 0, + # fontsize=16 + # ), + # widget.Memory( + # foreground = colors[3], + # background = colors[1], + # mouse_callbacks = {'Button1': lambda: qtile.cmd_spawn(myTerm + ' -e htop')}, + # fmt = 'Mem: {}', + # padding = 5 + # ), + # widget.Sep( + # linewidth = 1, + # padding = 10, + # foreground = colors[2], + # background = colors[1] + # ), + # widget.TextBox( + # font="FontAwesome", + # text=" ", + # foreground=colors[4], + # background=colors[1], + # padding = 0, + # fontsize=18 + # ), + # widget.Clock( + # foreground = colors[3], + # background = colors[1], + # fontsize = 18, + # format="%Y-%m-%d | %H:%M " + # ), + widget.Sep( + linewidth = 1, + padding = 10, + foreground = colors[2], + background = colors[1] + ), + widget.Systray( + background=colors[1], + icon_size=20, + padding = 4 + ), + ] + return widgets_list + +widgets_list = init_widgets_list() + + +def init_widgets_screen1(): + widgets_screen1 = init_widgets_list() + return widgets_screen1[:-2] + +def init_widgets_screen2(): + widgets_screen2 = init_widgets_list() + return widgets_screen2 + +widgets_screen1 = init_widgets_screen1() +widgets_screen2 = init_widgets_screen2() + + +def init_screens(): + return [Screen(top=bar.Bar(widgets=init_widgets_screen1(), size=26, opacity=0.8)), + Screen(top=bar.Bar(widgets=init_widgets_screen2(), size=26, opacity=0.8))] +screens = init_screens() + + +# MOUSE CONFIGURATION +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()) +] + +dgroups_key_binder = None +dgroups_app_rules = [] + + + +main = None + [email protected]_once +def start_once(): + home = os.path.expanduser('~') + subprocess.call([home + '/.config/qtile/scripts/autostart.sh']) + +def start_always(): + # Set the cursor to something sane in X + subprocess.Popen(['xsetroot', '-cursor_name', 'left_ptr']) + +def set_floating(window): + if (window.window.get_wm_transient_for() + or window.window.get_wm_type() in floating_types): + window.floating = True + +floating_types = ["notification", "toolbar", "splash", "dialog"] + + +follow_mouse_focus = True +bring_front_click = False +cursor_warp = False +floating_layout = layout.Floating(float_rules=[ + # Run the utility of `xprop` to see the wm class and name of an X client. + *layout.Floating.default_float_rules, + Match(wm_class='confirmreset'), # gitk + Match(wm_class='makebranch'), # gitk + Match(wm_class='maketag'), # gitk + Match(wm_class='ssh-askpass'), # ssh-askpass + Match(title='branchdialog'), # gitk + Match(title='pinentry'), # GPG key password entry + Match(wm_class='Arcolinux-welcome-app.py'), + Match(wm_class='Arcolinux-calamares-tool.py'), + Match(wm_class='confirm'), + Match(wm_class='dialog'), + Match(wm_class='download'), + Match(wm_class='error'), + Match(wm_class='file_progress'), + Match(wm_class='notification'), + Match(wm_class='splash'), + Match(wm_class='toolbar'), + Match(wm_class='Arandr'), + Match(wm_class='feh'), + Match(wm_class='Galculator'), + Match(wm_class='archlinux-logout'), + Match(wm_class='xfce4-terminal'), + +], fullscreen_border_width = 0, border_width = 0) +auto_fullscreen = True + +focus_on_window_activation = "focus" # or smart + +wmname = "Qtile-Apo11o" |