Update
This commit is contained in:
parent
34f23cfeda
commit
0f7f16313e
|
@ -63,6 +63,63 @@ nord = {
|
||||||
'nord15':'#B48EAD',
|
'nord15':'#B48EAD',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def parse_task_text(text):
|
||||||
|
"""
|
||||||
|
Removes unwanted text from a given task string.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
text (str): The text to be cleaned.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: The cleaned text.
|
||||||
|
"""
|
||||||
|
text = text.replace(" \u2014 Mozilla Firefox", "")
|
||||||
|
text = text.replace(" - qutebrowser", "")
|
||||||
|
text = text.replace(" - Discord", "")
|
||||||
|
return text
|
||||||
|
|
||||||
|
|
||||||
|
def get_wallpaper(screen_number):
|
||||||
|
"""
|
||||||
|
Returns the wallpaper path based on the size of the screen.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
screen_number (int): Index of the screen to get the wallpaper for.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: The wallpaper path for the specified screen size.
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
IndexError: If the specified screen number is out of bounds.
|
||||||
|
"""
|
||||||
|
screens = run(
|
||||||
|
["xrandr | grep '*' | awk '{ print $1 }'"],
|
||||||
|
shell=True,
|
||||||
|
capture_output=True,
|
||||||
|
encoding="utf-8",
|
||||||
|
)
|
||||||
|
try:
|
||||||
|
size = screens.stdout.split()[screen_number]
|
||||||
|
except IndexError:
|
||||||
|
size = screens.stdout.split()[0]
|
||||||
|
|
||||||
|
match size:
|
||||||
|
case "3440x1440":
|
||||||
|
wallpaper = f"{qtile_dir}gunter_wallpaper3440x1440_fill.png"
|
||||||
|
case "1920x1080":
|
||||||
|
wallpaper = f"{qtile_dir}gunter_throne.png"
|
||||||
|
case "3840x1080":
|
||||||
|
wallpaper = f"{qtile_dir}gunter_throne.png"
|
||||||
|
case "5760x1080":
|
||||||
|
wallpaper = f"{qtile_dir}gunter_throne.png"
|
||||||
|
case "1760x1262":
|
||||||
|
wallpaper = f"{qtile_dir}gunter_throne_1760x1262.png"
|
||||||
|
case _:
|
||||||
|
wallpaper = f"{qtile_dir}not_supported.png"
|
||||||
|
|
||||||
|
return wallpaper
|
||||||
|
|
||||||
# Keys
|
# Keys
|
||||||
keys = [
|
keys = [
|
||||||
# A list of available commands that can be bound to keys can be found
|
# A list of available commands that can be bound to keys can be found
|
||||||
|
@ -171,11 +228,11 @@ discord_match = Match(wm_class="discord")
|
||||||
obsidian_match = Match(wm_class="obsidian")
|
obsidian_match = Match(wm_class="obsidian")
|
||||||
xrdp_match = Match(wm_class="xfreerdp")
|
xrdp_match = Match(wm_class="xfreerdp")
|
||||||
vm_match = Match(wm_class="VirtualBox Machine")
|
vm_match = Match(wm_class="VirtualBox Machine")
|
||||||
groups.extend([Group("7", label='\ue007')])
|
groups.extend([Group("7", label='\ue007'),
|
||||||
groups.extend([Group("8", matches=[obsidian_match], label='\ue13a')])
|
Group("8", matches=[obsidian_match], label='\ue13a'),
|
||||||
groups.extend([Group("9", matches=[discord_match], label='\uf392')])
|
Group("9", matches=[discord_match], label='\uf392'),
|
||||||
groups.extend([Group("0", matches=[xrdp_match], label='\uf512', init=False, persist=False)])
|
Group("0", matches=[xrdp_match], label='\uf512', init=False, persist=False),
|
||||||
groups.extend([Group("o", matches=[vm_match], label='\uf511', init=False, persist=False)])
|
Group("o", matches=[vm_match], label='\uf511', init=False, persist=False)])
|
||||||
|
|
||||||
for i in groups:
|
for i in groups:
|
||||||
keys.extend(
|
keys.extend(
|
||||||
|
@ -189,6 +246,7 @@ for i in groups:
|
||||||
desc=f"Switch to group {i.name}",
|
desc=f"Switch to group {i.name}",
|
||||||
),
|
),
|
||||||
# mod1 + shift + letter of group = move focused window to group
|
# mod1 + shift + letter of group = move focused window to group
|
||||||
|
# switch_group=False stays with current group
|
||||||
Key(
|
Key(
|
||||||
[mod, "shift"],
|
[mod, "shift"],
|
||||||
i.name,
|
i.name,
|
||||||
|
@ -198,51 +256,6 @@ for i in groups:
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_hot_keys():
|
|
||||||
mod_keys = {
|
|
||||||
'mod4':'Super',
|
|
||||||
'shift':'Shift',
|
|
||||||
'control':'Control',
|
|
||||||
'space':'Space',
|
|
||||||
}
|
|
||||||
|
|
||||||
hot_keys = []
|
|
||||||
key_chords = []
|
|
||||||
|
|
||||||
for key in keys:
|
|
||||||
if isinstance(key, Key):
|
|
||||||
if key.desc == "Launch terminal":
|
|
||||||
hot_keys.append("0000\n")
|
|
||||||
if key.desc == "Switch to group 1":
|
|
||||||
hot_keys.append("0000\n")
|
|
||||||
key_modifiers = ' + '.join([mod_keys[modifier] for modifier in key.modifiers])
|
|
||||||
if len(key.key) == 1:
|
|
||||||
hot_keys.append(f"{key_modifiers} + {key.key}: {key.desc}\n")
|
|
||||||
elif len(key.key) > 1:
|
|
||||||
hot_keys.append(f"{key_modifiers} + {key.key.title()}: {key.desc}\n")
|
|
||||||
for key in keys:
|
|
||||||
if isinstance(key, KeyChord):
|
|
||||||
key_modifiers = ' + '.join([mod_keys[modifier] for modifier in key.modifiers])
|
|
||||||
key_chords.append(f"{key_modifiers} + {key.key}: {key.name.upper()}\n")
|
|
||||||
for sub in key.submappings:
|
|
||||||
if isinstance(sub, Key):
|
|
||||||
key_chords.append(f" {sub.key}: {sub.desc}\n")
|
|
||||||
elif isinstance(key, KeyChord):
|
|
||||||
key_chords.append(f" {sub.key}: {sub.name.upper()}\n")
|
|
||||||
for map in sub.submappings:
|
|
||||||
key_chords.append(f" {map.key}: {map.desc}\n")
|
|
||||||
key_chords.append("0000\n")
|
|
||||||
|
|
||||||
return ''.join(hot_keys), ''.join(key_chords)
|
|
||||||
|
|
||||||
hot_key_text, key_chord_text = get_hot_keys()
|
|
||||||
|
|
||||||
with open('/home/roland/.config/qtile/hotkeys.txt', 'w') as file:
|
|
||||||
file.write(hot_key_text)
|
|
||||||
with open('/home/roland/.config/qtile/keychords.txt', 'w') as file:
|
|
||||||
file.write(key_chord_text)
|
|
||||||
|
|
||||||
groups.extend(
|
groups.extend(
|
||||||
[ScratchPad("scratchpad", [
|
[ScratchPad("scratchpad", [
|
||||||
DropDown(
|
DropDown(
|
||||||
|
@ -368,40 +381,6 @@ clock = widget.Clock(
|
||||||
padding=4,
|
padding=4,
|
||||||
format="%Y-%m-%d %a %H:%M")
|
format="%Y-%m-%d %a %H:%M")
|
||||||
|
|
||||||
|
|
||||||
def parse_task_text(text):
|
|
||||||
text = text.replace(' \u2014 Mozilla Firefox','')
|
|
||||||
text = text.replace(' - qutebrowser','')
|
|
||||||
text = text.replace(' - Discord','')
|
|
||||||
return text
|
|
||||||
|
|
||||||
|
|
||||||
def get_wallpaper(screen_number):
|
|
||||||
screens = run(["xrandr | grep '*' | awk '{ print $1 }'"],
|
|
||||||
shell=True,
|
|
||||||
capture_output=True,
|
|
||||||
encoding='utf-8')
|
|
||||||
try:
|
|
||||||
size = screens.stdout.split()[screen_number]
|
|
||||||
except IndexError:
|
|
||||||
size = screens.stdout.split()[0]
|
|
||||||
|
|
||||||
match size:
|
|
||||||
case '3440x1440':
|
|
||||||
wallpaper = f'{qtile_dir}gunter_wallpaper3440x1440_fill.png'
|
|
||||||
case '1920x1080':
|
|
||||||
wallpaper = f'{qtile_dir}gunter_throne.png'
|
|
||||||
case '3840x1080':
|
|
||||||
wallpaper = f'{qtile_dir}gunter_throne.png'
|
|
||||||
case '5760x1080':
|
|
||||||
wallpaper = f'{qtile_dir}gunter_throne.png'
|
|
||||||
case '1760x1262':
|
|
||||||
wallpaper = f'{qtile_dir}gunter_throne_1760x1262.png'
|
|
||||||
case _:
|
|
||||||
wallpaper = f'{qtile_dir}not_supported.png'
|
|
||||||
|
|
||||||
return wallpaper
|
|
||||||
|
|
||||||
screens = [
|
screens = [
|
||||||
Screen( #Screen1
|
Screen( #Screen1
|
||||||
bottom=bar.Bar(
|
bottom=bar.Bar(
|
||||||
|
@ -957,32 +936,54 @@ wl_input_rules = None
|
||||||
# wmname = "LG3D"
|
# wmname = "LG3D"
|
||||||
wmname = f"qtile {VERSION}"
|
wmname = f"qtile {VERSION}"
|
||||||
|
|
||||||
#mod_keys = {
|
|
||||||
#'mod4':'Super',
|
def write_hot_keys():
|
||||||
#'shift':'Shift',
|
"""
|
||||||
#'control':'Control',
|
Generates two text files containing the list of hot keys and key chords.
|
||||||
#'space':'Space',
|
|
||||||
#}
|
Writes the list of hot keys and key chords to two separate text files
|
||||||
#
|
named "hotkeys.txt" and "keychords.txt", respectively. The text files are
|
||||||
#hot_keys = []
|
saved in the directory specified by the qtile_dir variable.
|
||||||
#
|
"""
|
||||||
#for key in keys:
|
mod_keys = {
|
||||||
#if isinstance(key, Key):
|
"mod4": "Super",
|
||||||
#key_modifiers = ' + '.join([mod_keys[modifier] for modifier in key.modifiers])
|
"shift": "Shift",
|
||||||
#if len(key.key) == 1:
|
"control": "Control",
|
||||||
#hot_keys.append(f"{key_modifiers} + {key.key}: {key.desc}\n")
|
"space": "Space",
|
||||||
#elif len(key.key) > 1:
|
}
|
||||||
#hot_keys.append(f"{key_modifiers} + {key.key.title()}: {key.desc}\n")
|
|
||||||
#for key in keys:
|
hot_keys = []
|
||||||
#if isinstance(key, KeyChord):
|
key_chords = []
|
||||||
#key_modifiers = ' + '.join([mod_keys[modifier] for modifier in key.modifiers])
|
|
||||||
#hot_keys.append(f"{key_modifiers} + {key.key}: {key.name.upper()}\n")
|
for key in keys:
|
||||||
#for sub in key.submappings:
|
if isinstance(key, Key):
|
||||||
#if isinstance(sub, Key):
|
if key.desc == "Launch terminal":
|
||||||
#hot_keys.append(f" {sub.key}: {sub.desc}\n")
|
hot_keys.append("0000\n")
|
||||||
#elif isinstance(key, KeyChord):
|
if key.desc == "Switch to group 1":
|
||||||
#hot_keys.append(f" {sub.key}: {sub.name.upper()}\n")
|
hot_keys.append("0000\n")
|
||||||
#for map in sub.submappings:
|
key_modifiers = " + ".join([mod_keys[modifier] for modifier in key.modifiers])
|
||||||
#hot_keys.append(f" {map.key}: {map.desc}\n")
|
if len(key.key) == 1:
|
||||||
#
|
hot_keys.append(f"{key_modifiers} + {key.key}: {key.desc}\n")
|
||||||
#print(''.join(hot_keys))
|
elif len(key.key) > 1:
|
||||||
|
hot_keys.append(f"{key_modifiers} + {key.key.title()}: {key.desc}\n")
|
||||||
|
|
||||||
|
for key in keys:
|
||||||
|
if isinstance(key, KeyChord):
|
||||||
|
key_modifiers = " + ".join([mod_keys[modifier] for modifier in key.modifiers])
|
||||||
|
key_chords.append(f"{key_modifiers} + {key.key}: {key.name.upper()}\n")
|
||||||
|
for sub in key.submappings:
|
||||||
|
if isinstance(sub, Key):
|
||||||
|
key_chords.append(f" {sub.key}: {sub.desc}\n")
|
||||||
|
elif isinstance(key, KeyChord):
|
||||||
|
key_chords.append(f" {sub.key}: {sub.name.upper()}\n")
|
||||||
|
for map in sub.submappings:
|
||||||
|
key_chords.append(f" {map.key}: {map.desc}\n")
|
||||||
|
key_chords.append("0000\n")
|
||||||
|
|
||||||
|
with open(f"{qtile_dir}hotkeys.txt", "w") as file:
|
||||||
|
file.write("".join(hot_keys))
|
||||||
|
with open(f"{qtile_dir}keychords.txt", "w") as file:
|
||||||
|
file.write("".join(key_chords))
|
||||||
|
|
||||||
|
|
||||||
|
write_hot_keys()
|
||||||
|
|
|
@ -1,440 +0,0 @@
|
||||||
# Copyright (c) 2010 Aldo Cortesi
|
|
||||||
# Copyright (c) 2010, 2014 dequis
|
|
||||||
# Copyright (c) 2012 Randall Mmeasure_mem='G'# 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.
|
|
||||||
|
|
||||||
from libqtile import bar, layout, widget, extension
|
|
||||||
from libqtile.config import Click, Drag, Group, Key, Match, Screen, ScratchPad, DropDown
|
|
||||||
from libqtile.lazy import lazy
|
|
||||||
from libqtile.utils import guess_terminal
|
|
||||||
from unicodes import left_arrow, right_arrow, right_half_circle, lower_left_triangle
|
|
||||||
|
|
||||||
mod = "mod4"
|
|
||||||
terminal = guess_terminal()
|
|
||||||
rofi= 'rofi -combi-modi window,drun,ssh -theme nord -font "hack 10" -show drun -icon-theme "Papirus" -show-icons'
|
|
||||||
|
|
||||||
colors = {
|
|
||||||
'purple':'#52497e',
|
|
||||||
'teal':'#559d92',
|
|
||||||
'dark_orange':'#9d6e55',
|
|
||||||
'orange':'#e7510b',
|
|
||||||
'dark_red':'#9d5560',
|
|
||||||
'dark_blue':'#2e3440',
|
|
||||||
'light_blue':'#8fbcbb',
|
|
||||||
'blue':'#5e81ac',
|
|
||||||
'red':'#bf616a',
|
|
||||||
'dark_text':'#d8dee9',
|
|
||||||
}
|
|
||||||
|
|
||||||
nord = {
|
|
||||||
'nord0':'#2E3440',
|
|
||||||
'nord1':'#3B4252',
|
|
||||||
'nord2':'#434C5E',
|
|
||||||
'nord3':'#4C566A',
|
|
||||||
'nord4':'#D8DEE9',
|
|
||||||
'nord5':'#E5E9F0',
|
|
||||||
'nord6':'#ECEFF4',
|
|
||||||
'nord7':'#8FBCBB',
|
|
||||||
'nord8':'#88C0D0',
|
|
||||||
'nord9':'#81A1C1',
|
|
||||||
'nord10':'#5E81AC',
|
|
||||||
'nord11':'#BF616A',
|
|
||||||
'nord12':'#D08770',
|
|
||||||
'nord13':'#EBCB8B',
|
|
||||||
'nord14':'#A3BE8C',
|
|
||||||
'nord15':'#B48EAD',
|
|
||||||
}
|
|
||||||
|
|
||||||
keys = [
|
|
||||||
# A list of available commands that can be bound to keys can be found
|
|
||||||
# at https://docs.qtile.org/en/latest/manual/config/lazy.html
|
|
||||||
# Switch between windows
|
|
||||||
Key([mod], "h", lazy.layout.left(), desc="Move focus to left"),
|
|
||||||
Key([mod], "l", lazy.layout.right(), desc="Move focus to right"),
|
|
||||||
Key([mod], "j", lazy.layout.down(), desc="Move focus down"),
|
|
||||||
Key([mod], "k", lazy.layout.up(), desc="Move focus up"),
|
|
||||||
Key([mod], "space", lazy.layout.next(), desc="Move window focus to other window"),
|
|
||||||
# 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"),
|
|
||||||
# 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"),
|
|
||||||
# Toggle between different layouts as defined below
|
|
||||||
Key([mod], "Tab", lazy.next_layout(), desc="Toggle between layouts"),
|
|
||||||
Key([mod], "w", lazy.window.kill(), desc="Kill focused window"),
|
|
||||||
Key([mod, "control"], "r", lazy.reload_config(), desc="Reload the config"),
|
|
||||||
Key([mod, "control"], "q", lazy.shutdown(), desc="Shutdown Qtile"),
|
|
||||||
Key([mod, "control"], "s", lazy.hide_show_bar()),
|
|
||||||
# Key([mod], "r", lazy.spawncmd(), desc="Spawn a command using a prompt widget"),
|
|
||||||
Key([mod], "r", lazy.run_extension(extension.DmenuRun(dmenu_prompt = ">"))),
|
|
||||||
Key([mod], "q", lazy.spawn(rofi), desc="Launch rofi"),
|
|
||||||
Key([mod], "z", lazy.run_extension(extension.WindowList())),
|
|
||||||
]
|
|
||||||
|
|
||||||
groups = [Group(i) for i in "123456789"]
|
|
||||||
|
|
||||||
for i in groups:
|
|
||||||
keys.extend(
|
|
||||||
[
|
|
||||||
# mod1 + letter of group = switch to group
|
|
||||||
Key(
|
|
||||||
[mod],
|
|
||||||
i.name,
|
|
||||||
lazy.group[i.name].toscreen(),
|
|
||||||
desc="Switch to group {}".format(i.name),
|
|
||||||
),
|
|
||||||
# mod1 + shift + letter of group = switch to & move focused window to group
|
|
||||||
#Key(
|
|
||||||
#[mod, "shift"],
|
|
||||||
#i.name,
|
|
||||||
#lazy.window.togroup(i.name, switch_group=True),
|
|
||||||
#desc="Switch to & move focused window to group {}".format(i.name),
|
|
||||||
#),
|
|
||||||
# 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.name,
|
|
||||||
lazy.window.togroup(i.name),
|
|
||||||
desc="move focused window to group {}".format(i.name)
|
|
||||||
),
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
layouts = [
|
|
||||||
#layout.Columns(border_focus_stack=["#d75f5f", "#8f3d3d"], border_width=4),
|
|
||||||
# Try more layouts by unleashing below layouts.
|
|
||||||
#layout.Stack(num_stacks=2),
|
|
||||||
#layout.Bsp(),
|
|
||||||
#layout.Matrix(),
|
|
||||||
#layout.MonadThreeCol(
|
|
||||||
#main_centered=True,
|
|
||||||
#new_client_position='after_current',
|
|
||||||
#border_focus=colors['red'],
|
|
||||||
#border_normal=colors['blue'],
|
|
||||||
#border_width=2,
|
|
||||||
#margin=4
|
|
||||||
#),
|
|
||||||
layout.MonadTall(
|
|
||||||
border_focus=colors['red'],
|
|
||||||
border_normal=colors['blue'],
|
|
||||||
border_width=2,
|
|
||||||
margin=8
|
|
||||||
),
|
|
||||||
#layout.Spiral(),
|
|
||||||
layout.Max(),
|
|
||||||
#layout.MonadWide(),
|
|
||||||
#layout.RatioTile(),
|
|
||||||
#layout.Tile(),
|
|
||||||
#layout.TreeTab(),
|
|
||||||
#layout.VerticalTile(),
|
|
||||||
#layout.Zoomy(),
|
|
||||||
]
|
|
||||||
|
|
||||||
widget_defaults = dict(
|
|
||||||
#font="sans",
|
|
||||||
font="Hack Nerd Font Mono",
|
|
||||||
fontsize=14,
|
|
||||||
padding=4,
|
|
||||||
)
|
|
||||||
extension_defaults = widget_defaults.copy()
|
|
||||||
|
|
||||||
screens = [
|
|
||||||
Screen(
|
|
||||||
bottom=bar.Bar(
|
|
||||||
[
|
|
||||||
widget.GroupBox(
|
|
||||||
background=colors['blue'],
|
|
||||||
block_highlight_text_color=colors['red'],
|
|
||||||
disable_drag=True,
|
|
||||||
this_screen_border=nord['nord11'],
|
|
||||||
this_current_screen_border=nord['nord13'],
|
|
||||||
#active=nord['nord6'],
|
|
||||||
),
|
|
||||||
#lower_left_triangle(colors['blue'], colors['dark_blue']),
|
|
||||||
#right_arrow(colors['dark_blue'], colors['blue']),
|
|
||||||
# widget.Prompt(),
|
|
||||||
widget.CurrentLayoutIcon(
|
|
||||||
background=colors['blue'],
|
|
||||||
foreground=colors['dark_text'],
|
|
||||||
),
|
|
||||||
widget.WindowCount(
|
|
||||||
background=colors['dark_blue'],
|
|
||||||
foreground=colors['dark_text'],
|
|
||||||
),
|
|
||||||
widget.TaskList(
|
|
||||||
background=colors['dark_blue'],
|
|
||||||
foreground=colors['dark_text'],
|
|
||||||
),
|
|
||||||
#widget.WindowName(
|
|
||||||
#background=colors['dark_blue'],
|
|
||||||
#foreground=colors['dark_text'],
|
|
||||||
#),
|
|
||||||
widget.Chord(
|
|
||||||
chords_colors={
|
|
||||||
"launch": ("#ff0000", "#ffffff"),
|
|
||||||
},
|
|
||||||
name_transform=lambda name: name.upper(),
|
|
||||||
),
|
|
||||||
# widget.TextBox("default config", name="default"),
|
|
||||||
# widget.TextBox("Press <M-r> to spawn", foreground="#d75f5f"),
|
|
||||||
# NB Systray is incompatible with Wayland, consider using StatusNotifier instead
|
|
||||||
# widget.StatusNotifier(),
|
|
||||||
widget.Systray(
|
|
||||||
background=colors['dark_blue'],
|
|
||||||
),
|
|
||||||
widget.OpenWeather(
|
|
||||||
background=nord['nord15'],
|
|
||||||
foreground=colors['dark_blue'],
|
|
||||||
cityid='4198514',
|
|
||||||
app_key='*****',
|
|
||||||
metric=False,
|
|
||||||
),
|
|
||||||
#widget.TextBox(
|
|
||||||
#padding=1,
|
|
||||||
#background=colors['dark_blue'],
|
|
||||||
#),
|
|
||||||
#lower_left_triangle(colors['dark_blue'], colors['blue']),
|
|
||||||
#left_arrow(colors['dark_blue'], colors['blue']),
|
|
||||||
widget.Net(
|
|
||||||
background=nord['nord10'],
|
|
||||||
#background=colors['blue'],
|
|
||||||
foreground=colors['dark_blue'],
|
|
||||||
interface='net0',
|
|
||||||
),
|
|
||||||
#widget.TextBox(
|
|
||||||
#padding=1,
|
|
||||||
#background=colors['blue'],
|
|
||||||
#),
|
|
||||||
#lower_left_triangle(colors['blue'], colors['dark_blue']),
|
|
||||||
#left_arrow(colors['blue'], colors['dark_blue']),
|
|
||||||
widget.Memory(
|
|
||||||
background=nord['nord14'],
|
|
||||||
#background=colors['dark_blue'],
|
|
||||||
foreground=colors['dark_blue'],
|
|
||||||
),
|
|
||||||
#widget.TextBox(
|
|
||||||
#padding=1,
|
|
||||||
#background=colors['dark_blue'],
|
|
||||||
#),
|
|
||||||
#lower_left_triangle(colors['dark_blue'], colors['blue']),
|
|
||||||
#left_arrow(colors['dark_blue'], colors['blue']),
|
|
||||||
widget.CPU(
|
|
||||||
background=nord['nord13'],
|
|
||||||
foreground=colors['dark_blue'],
|
|
||||||
),
|
|
||||||
widget.ThermalSensor(
|
|
||||||
tag_sensor='Package id 0',
|
|
||||||
format='{temp:.0f}{unit}',
|
|
||||||
background=nord['nord13'],
|
|
||||||
#background=colors['blue'],
|
|
||||||
foreground=colors['dark_blue'],
|
|
||||||
),
|
|
||||||
widget.DF(
|
|
||||||
background=nord['nord12'],
|
|
||||||
foreground=colors['dark_blue'],
|
|
||||||
warn_sapce=40,
|
|
||||||
visible_on_warn=True,
|
|
||||||
),
|
|
||||||
widget.DF(
|
|
||||||
background=nord['nord12'],
|
|
||||||
foreground=colors['dark_blue'],
|
|
||||||
partition='/home',
|
|
||||||
warn_sapce=40,
|
|
||||||
visible_on_warn=True,
|
|
||||||
),
|
|
||||||
widget.ThermalSensor(
|
|
||||||
tag_sensor='Composite',
|
|
||||||
format='NVME:{temp:.0f}{unit}',
|
|
||||||
background=nord['nord12'],
|
|
||||||
#background=colors['blue'],
|
|
||||||
foreground=colors['dark_blue'],
|
|
||||||
),
|
|
||||||
#widget.TextBox(
|
|
||||||
#padding=1,
|
|
||||||
#background=colors['blue'],
|
|
||||||
#),
|
|
||||||
#lower_left_triangle(colors['blue'], colors['dark_blue']),
|
|
||||||
#left_arrow(colors['blue'], colors['dark_blue']),
|
|
||||||
widget.Clock(
|
|
||||||
background=nord['nord11'],
|
|
||||||
foreground=colors['dark_blue'],
|
|
||||||
format="%Y-%m-%d %a %H:%M"
|
|
||||||
),
|
|
||||||
# widget.QuickExit(),
|
|
||||||
],
|
|
||||||
size=26,
|
|
||||||
border_width=[2, 2, 2, 2], # Draw top and bottom borders
|
|
||||||
border_color=[colors['blue'], colors['blue'], colors['blue'], colors['blue']],
|
|
||||||
margin=4,
|
|
||||||
),
|
|
||||||
wallpaper='~/.config/qtile/background.jpg',
|
|
||||||
wallpaper_mode='fill',
|
|
||||||
),
|
|
||||||
Screen(
|
|
||||||
bottom=bar.Bar([
|
|
||||||
widget.GroupBox(
|
|
||||||
background=colors['blue'],
|
|
||||||
block_highlight_text_color=colors['red'],
|
|
||||||
disable_drag=True,
|
|
||||||
this_screen_border=nord['nord11'],
|
|
||||||
this_current_screen_border=nord['nord13'],
|
|
||||||
#active=nord['nord15'],
|
|
||||||
),
|
|
||||||
widget.CurrentLayoutIcon(
|
|
||||||
background=colors['blue'],
|
|
||||||
foreground=colors['dark_blue'],
|
|
||||||
),
|
|
||||||
widget.WindowCount(
|
|
||||||
background=colors['dark_blue'],
|
|
||||||
foreground=colors['dark_text'],
|
|
||||||
),
|
|
||||||
widget.TaskList(
|
|
||||||
background=colors['dark_blue'],
|
|
||||||
foreground=colors['dark_text'],
|
|
||||||
),
|
|
||||||
#widget.WindowName(
|
|
||||||
#background=colors['dark_blue'],
|
|
||||||
#foreground=colors['dark_text'],
|
|
||||||
#),
|
|
||||||
widget.Clock(
|
|
||||||
background=nord['nord11'],
|
|
||||||
foreground=colors['dark_blue'],
|
|
||||||
format="%Y-%m-%d %a %H:%M"
|
|
||||||
),
|
|
||||||
],
|
|
||||||
size=26,
|
|
||||||
border_width=[2, 2, 2, 2], # Draw top and bottom borders
|
|
||||||
border_color=[colors['blue'], colors['blue'], colors['blue'], colors['blue']],
|
|
||||||
margin=4,
|
|
||||||
),
|
|
||||||
wallpaper='~/.config/qtile/background.jpg',
|
|
||||||
wallpaper_mode='fill',
|
|
||||||
),
|
|
||||||
Screen(
|
|
||||||
bottom=bar.Bar([
|
|
||||||
widget.GroupBox(
|
|
||||||
background=colors['blue'],
|
|
||||||
block_highlight_text_color=colors['red'],
|
|
||||||
disable_drag=True,
|
|
||||||
this_screen_border=nord['nord11'],
|
|
||||||
this_current_screen_border=nord['nord13'],
|
|
||||||
#active=nord['nord15'],
|
|
||||||
),
|
|
||||||
widget.CurrentLayoutIcon(
|
|
||||||
background=colors['blue'],
|
|
||||||
foreground=colors['dark_text'],
|
|
||||||
),
|
|
||||||
widget.WindowCount(
|
|
||||||
background=colors['dark_blue'],
|
|
||||||
foreground=colors['dark_text'],
|
|
||||||
),
|
|
||||||
widget.TaskList(
|
|
||||||
background=colors['dark_blue'],
|
|
||||||
foreground=colors['dark_text'],
|
|
||||||
),
|
|
||||||
#widget.WindowName(
|
|
||||||
#background=colors['dark_blue'],
|
|
||||||
#foreground=colors['dark_text'],
|
|
||||||
#),
|
|
||||||
widget.Clock(
|
|
||||||
background=nord['nord11'],
|
|
||||||
foreground=colors['dark_blue'],
|
|
||||||
format="%Y-%m-%d %a %H:%M"
|
|
||||||
),
|
|
||||||
],
|
|
||||||
size=26,
|
|
||||||
border_width=[2, 2, 2, 2], # Draw top and bottom borders
|
|
||||||
border_color=[colors['blue'], colors['blue'], colors['blue'], colors['blue']],
|
|
||||||
margin=4,
|
|
||||||
),
|
|
||||||
wallpaper='~/.config/qtile/background.jpg',
|
|
||||||
wallpaper_mode='fill',
|
|
||||||
),
|
|
||||||
]
|
|
||||||
|
|
||||||
# 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(wm_class="confirmreset"), # gitk
|
|
||||||
Match(wm_class="makebranch"), # gitk
|
|
||||||
Match(wm_class="maketag"), # gitk
|
|
||||||
Match(wm_class="ssh-askpass"), # ssh-askpass
|
|
||||||
#Match(wm_class="VirtualBox Machine"), # virt box
|
|
||||||
Match(title="branchdialog"), # gitk
|
|
||||||
Match(title="pinentry"), # GPG key password entry
|
|
||||||
]
|
|
||||||
)
|
|
||||||
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 = True
|
|
||||||
|
|
||||||
# When using the Wayland backend, this can be used to configure input devices.
|
|
||||||
wl_input_rules = None
|
|
||||||
|
|
||||||
# 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 maximize irony: it is a 3D non-reparenting WM written in
|
|
||||||
# java that happens to be on java's whitelist.
|
|
||||||
# wmname = "LG3D"
|
|
||||||
wmname = "qtile"
|
|
|
@ -1,9 +1,41 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
This module creates a tabbed window that displays hotkeys and key chords.
|
||||||
|
|
||||||
|
The hotkeys are read from two text files, "hotkeys.txt" and "keychords.txt".
|
||||||
|
The hotkeys are displayed in two tabs, "Hot Keys" and "Key Chords".
|
||||||
|
|
||||||
|
The user can switch between the tabs using the "Alt+1" and "Alt+2" hotkeys,
|
||||||
|
and toggle between the tabs using the "Alt+n" hotkey.
|
||||||
|
|
||||||
|
The window is created using PyQt5, which must be installed for this class to work.
|
||||||
|
"""
|
||||||
import sys
|
import sys
|
||||||
from PyQt5.QtWidgets import QApplication, QMainWindow, QTabWidget, QWidget, QGridLayout, QLabel, QShortcut
|
from PyQt5.QtWidgets import (
|
||||||
|
QApplication,
|
||||||
|
QMainWindow,
|
||||||
|
QTabWidget,
|
||||||
|
QWidget,
|
||||||
|
QGridLayout,
|
||||||
|
QLabel,
|
||||||
|
QShortcut,
|
||||||
|
)
|
||||||
from PyQt5.QtGui import QKeySequence
|
from PyQt5.QtGui import QKeySequence
|
||||||
|
|
||||||
|
|
||||||
class TabbedWindow(QMainWindow):
|
class TabbedWindow(QMainWindow):
|
||||||
|
"""
|
||||||
|
This class creates a tabbed window that displays hotkeys and key chords.
|
||||||
|
|
||||||
|
The hotkeys are read from two text files, "hotkeys.txt" and "keychords.txt".
|
||||||
|
The hotkeys are displayed in two tabs, "Hot Keys" and "Key Chords".
|
||||||
|
|
||||||
|
The user can switch between the tabs using the "Alt+1" and "Alt+2" hotkeys,
|
||||||
|
and toggle between the tabs using the "Alt+n" hotkey.
|
||||||
|
|
||||||
|
The window is created using PyQt5, which must be installed for this module to work.
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
|
@ -24,7 +56,9 @@ class TabbedWindow(QMainWindow):
|
||||||
layout1.setHorizontalSpacing(30)
|
layout1.setHorizontalSpacing(30)
|
||||||
layout1.setVerticalSpacing(10)
|
layout1.setVerticalSpacing(10)
|
||||||
|
|
||||||
with open('/home/roland/.config/qtile/hotkeys.txt', 'r') as file:
|
with open(
|
||||||
|
"/home/roland/.config/qtile/hotkeys.txt", encoding="UTF-8"
|
||||||
|
) as file:
|
||||||
lines = file.readlines()
|
lines = file.readlines()
|
||||||
length = len(lines)
|
length = len(lines)
|
||||||
|
|
||||||
|
@ -34,7 +68,6 @@ class TabbedWindow(QMainWindow):
|
||||||
switch = False
|
switch = False
|
||||||
even_odd = 0
|
even_odd = 0
|
||||||
for i in range(length):
|
for i in range(length):
|
||||||
#print(lines[i])
|
|
||||||
if lines[i] == "0000\n":
|
if lines[i] == "0000\n":
|
||||||
column += 1
|
column += 1
|
||||||
row = 0
|
row = 0
|
||||||
|
@ -47,8 +80,6 @@ class TabbedWindow(QMainWindow):
|
||||||
label = QLabel(lines[i].strip())
|
label = QLabel(lines[i].strip())
|
||||||
layout1.addWidget(label, row, column)
|
layout1.addWidget(label, row, column)
|
||||||
column += 1
|
column += 1
|
||||||
# layout1.addWidget(QLabel(' '), row, column)
|
|
||||||
# column += 1
|
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
label = QLabel(lines[i].strip())
|
label = QLabel(lines[i].strip())
|
||||||
|
@ -61,8 +92,6 @@ class TabbedWindow(QMainWindow):
|
||||||
label = QLabel(lines[i].strip())
|
label = QLabel(lines[i].strip())
|
||||||
layout1.addWidget(label, row, column)
|
layout1.addWidget(label, row, column)
|
||||||
column += 1
|
column += 1
|
||||||
# layout1.addWidget(QLabel(' '), row, column)
|
|
||||||
# column += 1
|
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
label = QLabel(lines[i].strip())
|
label = QLabel(lines[i].strip())
|
||||||
|
@ -87,7 +116,9 @@ class TabbedWindow(QMainWindow):
|
||||||
layout2.setHorizontalSpacing(10)
|
layout2.setHorizontalSpacing(10)
|
||||||
layout2.setVerticalSpacing(10)
|
layout2.setVerticalSpacing(10)
|
||||||
|
|
||||||
with open('/home/roland/.config/qtile/keychords.txt', 'r') as file:
|
with open(
|
||||||
|
"/home/roland/.config/qtile/keychords.txt", encoding="UTF-8"
|
||||||
|
) as file:
|
||||||
lines = file.readlines()
|
lines = file.readlines()
|
||||||
length = len(lines)
|
length = len(lines)
|
||||||
|
|
||||||
|
@ -95,7 +126,6 @@ class TabbedWindow(QMainWindow):
|
||||||
column = 0
|
column = 0
|
||||||
row = 0
|
row = 0
|
||||||
for i in range(length):
|
for i in range(length):
|
||||||
#print(lines[i])
|
|
||||||
if lines[i] == "0000\n":
|
if lines[i] == "0000\n":
|
||||||
column += 1
|
column += 1
|
||||||
row = 0
|
row = 0
|
||||||
|
@ -109,10 +139,14 @@ class TabbedWindow(QMainWindow):
|
||||||
|
|
||||||
# Assign hotkeys to open each tab
|
# Assign hotkeys to open each tab
|
||||||
self.hotkey1 = QShortcut(QKeySequence("Alt+1"), self)
|
self.hotkey1 = QShortcut(QKeySequence("Alt+1"), self)
|
||||||
self.hotkey1.activated.connect(lambda: self.tab_widget.setCurrentWidget(self.tab1))
|
self.hotkey1.activated.connect(
|
||||||
|
lambda: self.tab_widget.setCurrentWidget(self.tab1)
|
||||||
|
)
|
||||||
|
|
||||||
self.hotkey2 = QShortcut(QKeySequence("Alt+2"), self)
|
self.hotkey2 = QShortcut(QKeySequence("Alt+2"), self)
|
||||||
self.hotkey2.activated.connect(lambda: self.tab_widget.setCurrentWidget(self.tab2))
|
self.hotkey2.activated.connect(
|
||||||
|
lambda: self.tab_widget.setCurrentWidget(self.tab2)
|
||||||
|
)
|
||||||
|
|
||||||
# Assign a hotkey to toggle between the tabs
|
# Assign a hotkey to toggle between the tabs
|
||||||
self.toggle_key = QShortcut(QKeySequence("Alt+n"), self)
|
self.toggle_key = QShortcut(QKeySequence("Alt+n"), self)
|
||||||
|
@ -125,7 +159,7 @@ class TabbedWindow(QMainWindow):
|
||||||
self.tab_widget.setCurrentIndex(next_index)
|
self.tab_widget.setCurrentIndex(next_index)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == "__main__":
|
||||||
app = QApplication(sys.argv)
|
app = QApplication(sys.argv)
|
||||||
window = TabbedWindow()
|
window = TabbedWindow()
|
||||||
window.show()
|
window.show()
|
||||||
|
|
Loading…
Reference in New Issue