diff options
| author | zachir <zachir@librem.one> | 2022-10-05 22:00:32 -0500 | 
|---|---|---|
| committer | zachir <zachir@librem.one> | 2022-10-05 22:00:32 -0500 | 
| commit | f39d735e2ba625a31a7dbf6fb8bdd62501379ad1 (patch) | |
| tree | d17c96714c930e0b8bc75616cc9c81b961ed5aa0 /qtile | |
Initial Commit
Diffstat (limited to 'qtile')
| -rw-r--r-- | qtile/config.py | 539 | 
1 files changed, 539 insertions, 0 deletions
diff --git a/qtile/config.py b/qtile/config.py new file mode 100644 index 0000000..4b13459 --- /dev/null +++ b/qtile/config.py @@ -0,0 +1,539 @@ +# 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. + +import os +import subprocess +import psutil + +from typing import List  # noqa: F401 + +from libqtile import bar, hook, layout, qtile, widget +from libqtile.config import Click, Drag, DropDown, Group, Key, Match, ScratchPad, Screen +from libqtile.lazy import lazy + +mod = "mod1" +if qtile.core.name == "x11": +    terminal = 'st' +    terminal_session = 'tabbed -c st -w' +    # terminal_session = 'st -e ' +elif qtile.core.name == "wayland": +    terminal = 'alacritty' +    terminal_session = 'tabbed -c alacritty --embed' +    # terminal_session = 'alacritty -e' + +computerrc = open('/home/zachir/.config/computerrc', 'r') +Lines = computerrc.readlines() +count = 0 +for line in Lines: +    if ('inet' in Lines[count][:5]): +        break +    count += 1 +inet = Lines[count][5:-1] + +barcolor_cyan = "39c1ed" +barcolor_black = "000000" +barcolor_gray1 = "111111" +barcolor_gray2 = "222222" +barcolor_gray6 = "666666" +barcolor_gray8 = "888888" +barcolor_graya = "aaaaaa" +barcolor_white = "ffffff" +barcolor_red = "ff0000" +barcolor_magenta = "ff00ff" + +def resize(qtile, direction): +    layout = qtile.current_layout +    child = layout.current +    parent = child.parent + +    while parent: +        if child in parent.children: +            layout_all = False + +            if (direction == "left" and parent.split_horizontal) or ( +                direction == "up" and not parent.split_horizontal +            ): +                parent.split_ratio = max(5, parent.split_ratio - layout.grow_amount) +                layout_all = True +            elif (direction == "right" and parent.split_horizontal) or ( +                direction == "down" and not parent.split_horizontal +            ): +                parent.split_ratio = min(95, parent.split_ratio + layout.grow_amount) +                layout_all = True + +            if layout_all: +                layout.group.layout_all() +                break + +        child = parent +        parent = child.parent + +@lazy.function +def resize_left(qtile): +    resize(qtile, "left") + +@lazy.function +def resize_right(qtile): +    resize(qtile, "right") + +@lazy.function +def resize_up(qtile): +    resize(qtile, "up") + +@lazy.function +def resize_down(qtile): +    resize(qtile, "down") + +keys = [ +    # Switch between windows +    Key([mod], "h", lazy.layout.left(), desc="Move focus down"), +    Key([mod], "l", lazy.layout.right(), desc="Move focus up"), +    Key([mod], "j", lazy.layout.down(), desc="Move focus down"), +    Key([mod], "k", lazy.layout.up(), desc="Move focus up"), +    Key([mod, "shift"], "space", lazy.layout.next(), +        desc="Move window focus to other window"), + +    # swap columns +    Key([mod, "shift", "control"], "h", lazy.layout.swap_column_left()), +    Key([mod, "shift", "control"], "l", lazy.layout.swap_column_right()), + +    # Move windows between left/right columns or move up/down in current stack. +    # Moving out of range in Columns layout will create new column. +    Key([mod, "shift"], "h", lazy.layout.shuffle_left(), +        desc="Move window to the left"), +    Key([mod, "shift"], "l", lazy.layout.shuffle_right(), +        desc="Move window to the right"), +    Key([mod, "shift"], "j", lazy.layout.shuffle_down(), +        desc="Move window down"), +    Key([mod, "shift"], "k", lazy.layout.shuffle_up(), desc="Move window up"), + +    # Grow windows. If current window is on the edge of screen and direction +    # will be to screen edge - window would shrink. +    Key([mod, "control"], "h", lazy.layout.grow_left(), +        desc="Grow window to the left"), +    Key([mod, "control"], "l", lazy.layout.grow_right(), +        desc="Grow window to the right"), +    Key([mod, "control"], "j", lazy.layout.grow_down(), +        desc="Grow window down"), +    Key([mod, "control"], "k", lazy.layout.grow_up(), desc="Grow window up"), +    Key([mod], "n", lazy.layout.normalize(), desc="Reset all window sizes"), + +    # Grow windows. If current window is on the edge of screen and direction +    # will be to screen edge - window would shrink. +    Key([mod, "mod4"], "h", resize_left, +        desc="Grow window to the left"), +    Key([mod, "mod4"], "l", resize_right, +        desc="Grow window to the right"), +    Key([mod, "mod4"], "j", resize_down, +        desc="Grow window down"), +    Key([mod, "mod4"], "k", resize_up, desc="Grow window up"), +    Key([mod], "n", lazy.layout.normalize(), desc="Reset all window sizes"), + +    # Toggle between split and unsplit sides of stack. +    # Split = all windows displayed +    # Unsplit = 1 window displayed, like Max layout, but still with +    # multiple stack panes +    Key([mod, "shift"], "Return", lazy.layout.toggle_split(), +        desc="Toggle between split and unsplit sides of stack"), +    Key([mod], "Return", lazy.spawn(terminal), desc="Launch terminal"), +    Key([mod], "f", lazy.window.toggle_fullscreen(), desc="Toggle fullscreen"), +    Key([mod, "shift"], "n", lazy.spawn('Qminimize -u'), desc="Unminimize window"), +    Key([mod], "n", lazy.spawn('Qminimize -m'), desc="Minimize window"), +    Key([mod], "space", lazy.window.toggle_floating(), +            desc="Toggle floating"), + +    # Toggle between different layouts as defined below +    Key([mod], "Tab", lazy.next_layout(), desc="Toggle between layouts"), +    Key([mod, "shift"], "Tab", lazy.prev_layout(), desc="Toggle between layouts"), +    Key([mod, "shift"], "q", lazy.window.kill(), desc="Kill focused window"), + +    Key([mod, "shift"], "r", lazy.restart(), desc="Restart Qtile"), +    Key([mod, "shift"], "e", lazy.shutdown(), desc="Shutdown Qtile"), +    #Key([mod], "r", lazy.spawncmd(), +        #desc="Spawn a command using a prompt widget"), +] + +groups = [Group(i) for i in "123456789"] + +groups += [ +        ScratchPad("scratchpad", [ +        DropDown("htop", terminal + " htop", +            x=0.25, y=0.2, width=0.5, height=0.6, +            on_focus_lost_hide=True, warp_pointer=True), +        DropDown("term", terminal, +            x=0.25, y=0.2, width=0.5, height=0.6, +            on_focus_lost_hide=True, warp_pointer=True), +        DropDown("alsa", terminal + " pulsemixer", +            x=0.25, y=0.2, width=0.5, height=0.6, +            on_focus_lost_hide=True, warp_pointer=True), +        DropDown("blue", terminal + " bluetoothctl", +            x=0.25, y=0.2, width=0.5, height=0.6, +            on_focus_lost_hide=True, warp_pointer=True), +        DropDown("ncmp", terminal + " ncmpcpp", +            x=0.25, y=0.2, width=0.5, height=0.6, +            on_focus_lost_hide=True, warp_pointer=True), +        DropDown("mutt", terminal + " neomutt", +            x=0.25, y=0.2, width=0.5, height=0.6, +            on_focus_lost_hide=True, warp_pointer=True), +        DropDown("prof", terminal + " /usr/bin/profanity", +            x=0.25, y=0.2, width=0.5, height=0.6, +            on_focus_lost_hide=True, warp_pointer=True), +        DropDown("ircc", terminal + " /usr/bin/irssi", +            x=0.25, y=0.2, width=0.5, height=0.6, +            on_focus_lost_hide=True, warp_pointer=True), +        DropDown("todo", terminal + " /usr/bin/todo", +            x=0.25, y=0.2, width=0.5, height=0.6, +            on_focus_lost_hide=True, warp_pointer=True), +        DropDown("trem", terminal + " /usr/bin/tremc", +            x=0.25, y=0.2, width=0.5, height=0.6, +            on_focus_lost_hide=True, warp_pointer=True), +        ]) +    ] + +@hook.subscribe.startup +def autostart(): +    home = os.path.expanduser('~/.config/autostart.sh') +    subprocess.call([home]) + +keys.extend([ +    Key([mod, "control"], 'z', lazy.group['scratchpad'].dropdown_toggle('htop'), +        desc="Toggle htop scratchpad"), +    Key([mod, "control"], 'x', lazy.group['scratchpad'].dropdown_toggle('term'), +        desc="Toggle terminal scratchpad"), +    Key([mod, "control"], 'c', lazy.group['scratchpad'].dropdown_toggle('alsa'), +        desc="Toggle alsamixer scratchpad"), +    Key([mod, "control"], 'v', lazy.group['scratchpad'].dropdown_toggle('blue'), +        desc="Toggle alsamixer scratchpad"), +    Key([mod, "control"], 'b', lazy.group['scratchpad'].dropdown_toggle('ncmp'), +        desc="Toggle ncmpcpp scratchpad"), +    Key([mod, "control"], 'a', lazy.group['scratchpad'].dropdown_toggle('mutt'), +        desc="Toggle neomutt scratchpad"), +    Key([mod, "control"], 's', lazy.group['scratchpad'].dropdown_toggle('prof'), +        desc="Toggle profanity scratchpad"), +    Key([mod, "control"], 'd', lazy.group['scratchpad'].dropdown_toggle('ircc'), +        desc="Toggle irssi scratchpad"), +    Key([mod, "control"], 'f', lazy.group['scratchpad'].dropdown_toggle('todo'), +        desc="Toggle todo.txt scratchpad"), +    Key([mod, "control"], 'g', lazy.group['scratchpad'].dropdown_toggle('trem'), +        desc="Toggle tremc scratchpad"), +    ]) + +for i in "123456789": +    keys.extend([ +        # mod1 + letter of group = switch to group +        Key([mod], i, lazy.group[i].toscreen(), +            desc="Switch to group {}".format(i)), + +        # mod1 + shift + letter of group = switch to & move focused window to group +        Key([mod, "shift"], i, lazy.window.togroup(i, switch_group=False), +            desc="Switch to & move focused window to group {}".format(i)), +        # Or, use below if you prefer not to switch to that group. +        # # mod1 + shift + letter of group = move focused window to group +        # Key([mod, "shift"], i, lazy.window.togroup(i), +        #     desc="move focused window to group {}".format(i)), +    ]) + +layouts = [ +    layout.Columns( +        border_focus=barcolor_gray8, +        border_focus_stack=barcolor_gray8, +        border_normal=barcolor_black, +        border_normal_stack=barcolor_black, +        insert_position=1, +        margin=5 +    ), +    layout.Bsp( +        border_focus=barcolor_gray8, +        border_normal=barcolor_black, +        fair=False, +        margin=5 +    ), +    # layout.Max(), +    # Try more layouts by unleashing below layouts. +    # layout.Stack(num_stacks=2), +    # layout.Matrix(), +    # layout.MonadTall(), +    # layout.MonadWide(), +    # layout.RatioTile(), +    # layout.Tile(), +    # layout.TreeTab(), +    # layout.VerticalTile(), +    # layout.Zoomy(), +] + +widget_defaults = dict( +    font='mononoki Nerd Font Mono', +    fontsize=12, +    padding=3, +) +extension_defaults = widget_defaults.copy() + +bar_array_1 = [ +                widget.WindowName( +                    background=barcolor_cyan, +                    foreground=barcolor_black, +                    format='{state}{name}' +                ), +                widget.Chord( +                    chords_colors={ +                        'launch': (barcolor_red, barcolor_white), +                    }, +                    name_transform=lambda name: name.upper(), +                ), +                widget.TextBox("ZachIR", name="default", +                    background=barcolor_black, +                    foreground=barcolor_white +                ), +                widget.CPU( +                    background=barcolor_cyan, +                    foreground=barcolor_black, +                    format='CPU {load_percent}%', +                    update_interval=1.0 +                ), +                widget.CPUGraph( +                    background=barcolor_cyan, +                    border_color=barcolor_black, +                    core='all', +                    fill_color=barcolor_graya, +                    graph_color=barcolor_white +                ), +                widget.Memory( +                    background=barcolor_black, +                    foreground=barcolor_white, +                    format='RAM {MemUsed: .0f}{mm}', +                    measure_mem='M', +                    measure_swap='M', +                    update_interval=1.0 +                ), +                widget.MemoryGraph( +                    background=barcolor_black, +                    border_color=barcolor_cyan, +                    fill_color=barcolor_graya, +                    frequency=1, +                    graph_color=barcolor_white +                ), +                widget.Mpd2( +                    background=barcolor_cyan, +                    foreground=barcolor_black, +                    status_format='{play_status} {artist} - {title} \ +[{repeat}{random}{single}{consume}{updating_db}]', +                    idle_format='{idle_message}', +                    idle_message='MPD', +                    host=os.path.expanduser('~/.config/mpd/socket'), +                    prepare_status={ +                        'consume': 'c', +                        'random': 'z', +                        'repeat': 'r', +                        'single': 'y', +                        'updating_db': 'u' } +                ), +                widget.Net( +                    background=barcolor_black, +                    interface=inet +                ) +            ] + +bar_array_2 = [ +                widget.Clock( +                    background=barcolor_black, +                    format='%Y-%m-%d %a %I:%M %p', +                    update_interval=1.0 +                ), +                widget.QuickExit( +                    background=barcolor_cyan, +                    foreground=barcolor_black, +                    countdown_format='[ {}sec ]', +                    countdown_start=5, +                    default_text='[ exit ]', +                    timer_interval=1 +                ) +            ] + +bar_systray = [  +                widget.Systray( +                    background=barcolor_black +                ) +            ] + +bar_battery = [  +                widget.Battery( +                    background=barcolor_cyan, +                    foreground=barcolor_black, +                    battery=0, +                    charge_char='+', +                    discharge_char='-', +                    empty_char='X', +                    format='{char}{percent:2.0%} {hour:d}:{min:02d}', +                    full_char='|', +                    low_foreground=barcolor_red, +                    low_percentage=0.15, +                    notify_below=0.15, +                    unknown_char='?', +                    update_interval=60 +                ) +            ] + +bar_no_battery = [  +                widget.TextBox("None", name="default", +                    background=barcolor_cyan, +                    foreground=barcolor_black +                ) +            ] + +bar_1 = bar_array_1 +if (psutil.sensors_battery() != None): +    bar_1 = bar_1 + bar_battery +else: +    bar_1 = bar_1 + bar_no_battery +if qtile.core.name == "x11": +    bar_1 = bar_1 + bar_systray +bar_1 = bar_1 + bar_array_2 + +bar_2 = bar_array_1 +if (psutil.sensors_battery() != None): +    bar_2 = bar_2 + bar_battery +else: +    bar_2 = bar_2 + bar_no_battery +bar_2 = bar_2 + bar_array_2 + +screens = [ +    Screen( +        top=bar.Bar( +            [ +                widget.CurrentLayoutIcon( +                    background=barcolor_cyan, +                    foreground=barcolor_black, +                    scale=0.8 +                ), +                widget.GroupBox( +                    active=barcolor_white, +                    background=barcolor_black, +                    center_aligned=True, +                    highlight_color=barcolor_gray1, +                    highlight_method='line', +                    inactive=barcolor_gray6, +                    margin_x=2, +                    margin_y=5, +                    other_current_screen_border=barcolor_gray2, +                    other_screen_border=barcolor_gray2, +                    padding_y=5, +                    padding_x=3, +                    this_current_screen_border=barcolor_white, +                    this_screen_border=barcolor_white, +                    urgent_alert_method='block', +                    urgent_border=barcolor_magenta, +                    urgent_text=barcolor_magenta +                ) +            ] + bar_1, +            24, +        ), +    ), +    Screen( +        top=bar.Bar( +            [ +                widget.CurrentLayoutIcon( +                    background=barcolor_cyan, +                    foreground=barcolor_black, +                    scale=0.8 +                ), +                widget.GroupBox( +                    active=barcolor_white, +                    background=barcolor_black, +                    center_aligned=True, +                    highlight_color=barcolor_gray1, +                    highlight_method='line', +                    inactive=barcolor_gray6, +                    margin_x=2, +                    margin_y=5, +                    other_current_screen_border=barcolor_gray2, +                    other_screen_border=barcolor_gray2, +                    padding_y=5, +                    padding_x=3, +                    this_current_screen_border=barcolor_white, +                    this_screen_border=barcolor_white, +                    urgent_alert_method='block', +                    urgent_border=barcolor_magenta, +                    urgent_text=barcolor_magenta +                ) +            ] + bar_2, +            24, +        ), +    ), +] + +# Drag floating layouts. +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 +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(title='FX: Track 1'), # REAPER +    Match(title='Add FX to: Track 1'), # REAPER +    Match(title='REAPER (loading)'), # REAPER +    Match(title='REAPER Query'), # REAPER +    Match(title='REAPER (initializing)'), # REAPER +    Match(title='Browse FX'), # REAPER +    Match(title='Ardour - Preferences'), # ardour +    Match(wm_instance_class='import'),  # ardour +    Match(wm_class='ardour-6.9.0'),  # ardour +    #Match(wm_class="lin-vst-servertrack.exe.so"), #linvst +    Match(title='Edit Text on the Schematic:'), # LTspiceXVII +    Match(wm_class='confirmreset'),  # gitk +    Match(wm_class='makebranch'),  # gitk +    Match(wm_class='maketag'),  # gitk +    Match(title='branchdialog'),  # gitk +    Match(wm_class='ssh-askpass'),  # ssh-askpass +    Match(title='Create Snapshot'),  # timeshift-gtk +    Match(title='pinentry'),  # GPG key password entry +], border_focus=barcolor_gray8, border_normal=barcolor_black) +auto_fullscreen = False +focus_on_window_activation = "smart" +reconfigure_screens = True + +# If things like steam games want to auto-minimize themselves when losing +# focus, should we respect this or not? +auto_minimize = False + +# XXX: Gasp! We're lying here. In fact, nobody really uses or cares about this +# string besides java UI toolkits; you can see several discussions on the +# mailing lists, GitHub issues, and other WM documentation that suggest setting +# this string if your java app doesn't work correctly. We may as well just lie +# and say that we're a working one by default. +# +# We choose LG3D to ], border_focus='', border_normal=''aximize irony: it is a 3D non-reparenting WM written in +# java that happens to be on java's whitelist. +# wmname = "LG3D"  | 
