diff --git a/qtile/config.py b/qtile/config.py index 5ca453b..66eba9c 100644 --- a/qtile/config.py +++ b/qtile/config.py @@ -1,178 +1,4 @@ -from libqtile import bar, layout -from qtile_extras import widget -from libqtile.config import Click, Drag, Group, Key, Match, Screen -from libqtile.lazy import lazy -from libqtile.utils import guess_terminal -from qtile_extras.widget.decorations import PowerLineDecoration - -class Colors: - background = "#1f2430" - accent = "#002F5F" - -panel_height = 27 -panel_font_size = 12 -font = "Ubuntu" -widget_defaults = dict( - font=font, padding=0, fontsize=panel_font_size, borderwidth=0 -) - -powerline_left = { - "decorations": [ - PowerLineDecoration(path="arrow_right") - ] -} - - -screens = [ - Screen( - top=bar.Bar( - widgets = [ - widget.TaskList(), - widget.GroupBox( - rounded=False, - inactive="#ffffff", - active=Colors.background, - highlight_method="block", - highlight_color=Colors.accent, - this_current_screen_border=Colors.accent, - font="Ubuntu bold", - padding=9, - ), - widget.Spacer(), - widget.Systray(icon_size=24, background=Colors.background, padding=5, **powerline), - widget.CPU(background=Colors.background, format="CPU {load_percent}%", **powerline), - widget.CPU(background=Colors.accent, format="{freq_max}GHz", **powerline), - widget.Volume(borderwidth=0, background=Colors.background, emoji=False, **powerline), - widget.Clock( - foreground="#ffffff", - background=Colors.accent, - format="%a %b %d, %H:%M:%S", - **powerline - ), - widget.Sep(padding=7, linewidth=0, background=Colors.accent), - ], - size=panel_height, background=Colors.background, opacity=0.9 - ), - wallpaper="/home/user/.config/qtile/wallpaper.png", - wallpaper_mode="stretch" - ) -] - -mod = "mod4" -terminal = guess_terminal() - -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], "q", lazy.window.kill(), desc="Kill focused window"), - Key([mod, "shift"], "r", lazy.reload_config(), desc="Reload the config"), - Key([mod, "control"], "q", 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"] - -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), - layout.Max(), - # Try more layouts by unleashing below layouts. - # layout.Stack(num_stacks=2), - # layout.Bsp(), - # layout.Matrix(), - # layout.MonadTall(), - # layout.MonadWide(), - # layout.RatioTile(), - # layout.Tile(), - # layout.TreeTab(), - # layout.VerticalTile(), - # layout.Zoomy(), -] - -# 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(title="branchdialog"), # gitk - Match(title="pinentry"), # GPG key password entry - ] -) -auto_fullscreen = True -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 -wmname = "LG3D" +try: + from main import * +except Exception as e: + print(e) diff --git a/qtile/main.py b/qtile/main.py new file mode 100644 index 0000000..114ee58 --- /dev/null +++ b/qtile/main.py @@ -0,0 +1,201 @@ +from libqtile import bar, layout, hook +from qtile_extras import widget +from libqtile.config import Click, Drag, Group, Key, Match, Screen +from libqtile.lazy import lazy +from libqtile.utils import guess_terminal +from qtile_extras.widget.decorations import PowerLineDecoration +from widgets.volume import Volume + +class Colors: + background = "#1f2430" + accent = "#002F5F" + +panel_height = 28 +panel_font_size = 13 +font = "Ubuntu" + +powerline_right= { + "decorations": [ + PowerLineDecoration(path="arrow_right", size=10) + ], + "padding": 6 +} + + +screens = [ + Screen( + top=bar.Bar( + widgets = [ + widget.TaskList(theme_path="/user/share/icons/Papirus/16x16/"), + widget.Sep(padding=10, linewidth=0), + widget.GroupBox( + rounded=False, + inactive="#ffffff", + active="#ffffff", + highlight_method="block", + highlight_color=Colors.accent, + this_current_screen_border=Colors.accent, + font="Ubuntu bold", + padding=9, + hide_unused=True + ), + widget.Spacer(), + widget.Sep(linewidth=0, background=None, **powerline_right), # Workaround for having the last arrow + widget.Systray(icon_size=24, background=Colors.accent, **powerline_right), + widget.Memory(format="{MemUsed: .2f}{mm}", measure_mem="G", background=Colors.background, **powerline_right), + widget.ThermalSensor(tag_sensor='Tctl', background=Colors.accent, **powerline_right), + widget.CPU(background=Colors.background, format="CPU {load_percent}%", **powerline_right), + widget.CPU(background=Colors.accent, format="{freq_max}GHz", **powerline_right), + Volume(size=12, background=Colors.background, theme_path="/usr/share/icons/Papirus/16x16/"), + Volume(background=Colors.background, **powerline_right), + widget.Image(filename="/usr/share/icons/Papirus/48x48/apps/org.kde.archUpdate.svg", background=Colors.accent, margin_y=6), + widget.CheckUpdates(background=Colors.accent, distro="Arch_yay", initial_text="0", no_update_string="0", execute='WINIT_X11_SCALE_FACTOR=1 alacritty -e bash -c "yay ; echo \'\nDone, press any key to exit...\' ; read"', **powerline_right), + widget.CurrentLayout(background=Colors.background, **powerline_right), + widget.Clock( + foreground="#ffffff", + background=Colors.accent, + format="%a %b %d, %H:%M:%S", + **powerline_right + ), + widget.Sep(padding=2, linewidth=0, background=Colors.accent), + ], + size=panel_height, background=Colors.background + "99" + ), + wallpaper="/home/user/.config/qtile/wallpaper.png", + wallpaper_mode="stretch" + ), + Screen(wallpaper="/home/user/.config/qtile/wallpaper.png", wallpaper_mode="stretch"), + Screen(wallpaper="/home/user/.config/qtile/wallpaper.png", wallpaper_mode="stretch"), +] + + +mod = "mod4" +terminal = guess_terminal() + +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], "f", lazy.window.toggle_floating(), desc="Move focus up"), + Key([mod], "m", lazy.window.toggle_fullscreen(), 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"), + Key([mod], "b", lazy.spawn("firefox"), desc="Launch browser"), + # Toggle between different layouts as defined below + Key([mod], "Tab", lazy.next_layout(), desc="Toggle between layouts"), + Key([mod], "q", lazy.window.kill(), desc="Kill focused window"), + Key([mod, "shift"], "r", lazy.reload_config(), desc="Reload the config"), + Key([mod, "control"], "q", lazy.shutdown(), desc="Shutdown Qtile"), + Key([mod], "r", lazy.spawncmd(), desc="Spawn a command using a prompt widget"), +] + +groups = [] +for s in screens: + for i in list(range(1, 10)) + [0]: + groups.append(Group(str(i), screen_affinity=s)) + +for i in groups[:10]: + keys.extend( + [ + # mod1 + letter of group = switch to group + Key( + [mod], + i.name, + lazy.group[i.name].toscreen(0), + 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)), + ] + ) + +layout_settings = { + "border_focus": Colors.accent, + "border_normal": "#050f43", + # "border_normal_stack": "#00000000", + # "border_focus_stack": "#00000000", + "border_width": 2, + "margin": 3 +} + +mouse = [ + Drag([mod], "Button1", lazy.window.set_position(), start=lazy.window.get_position()), + Drag([mod], "Button3", lazy.window.set_position(), start=lazy.window.get_size()) +] + +layouts = [ + layout.Tile(**layout_settings), + layout.Columns(**layout_settings), + layout.Max(), + # Try more layouts by unleashing below layouts. + # layout.Stack(num_stacks=2), + # layout.Bsp(), + # layout.Matrix(), + # layout.MonadTall(), + # layout.MonadWide(), + # layout.RatioTile(), + # layout.TreeTab(), + # layout.VerticalTile(), + # layout.Zoomy(), +] + +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=[ + *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 + ] +) +auto_fullscreen = True +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 +wmname = "LG3D" diff --git a/qtile/wallpaper.png b/qtile/wallpaper.png new file mode 100644 index 0000000..54a9847 Binary files /dev/null and b/qtile/wallpaper.png differ diff --git a/qtile/widgets/__pycache__/volume.cpython-311.pyc b/qtile/widgets/__pycache__/volume.cpython-311.pyc new file mode 100644 index 0000000..7acee1d Binary files /dev/null and b/qtile/widgets/__pycache__/volume.cpython-311.pyc differ diff --git a/qtile/widgets/volume.py b/qtile/widgets/volume.py new file mode 100644 index 0000000..28008f9 --- /dev/null +++ b/qtile/widgets/volume.py @@ -0,0 +1,28 @@ +from qtile_extras.widget import Volume as QVolume +from libqtile import images + +class Volume(QVolume): + def __init__(self, size=None, **kwargs): + super().__init__(**kwargs) + self.size = size + + def setup_images(self): + names = ( + "audio-volume-high", + "audio-volume-low", + "audio-volume-medium", + "audio-volume-muted", + ) + d_images = images.Loader(self.theme_path)(*names) + for name, img in d_images.items(): + new_height = self.size if self.size else self.bar.height - 1 + img.resize(height=new_height) + if img.width > self.length: + self.length = img.width + self.actual_padding * 2 + + if self.size: + matrix = img.pattern.get_matrix() + matrix.translate(tx=0, ty=-1 * (self.bar.height -1 - self.size) / 2 - 1) + img.pattern.set_matrix(matrix) + + self.surfaces[name] = img.pattern