From 55c207617c715a65431c1c9a56afb1c9a6766bb5 Mon Sep 17 00:00:00 2001 From: luneko Date: Sat, 25 Dec 2021 19:34:13 +0100 Subject: [PATCH] added qtile config --- home/.config/qtile/config.py | 296 +++++++++++++++++++++++++++++ home/.config/qtile/gpu | 6 + home/.config/qtile/icon_luneko.png | Bin 0 -> 5292 bytes home/.config/qtile/vrm | 5 + 4 files changed, 307 insertions(+) create mode 100644 home/.config/qtile/config.py create mode 100644 home/.config/qtile/gpu create mode 100644 home/.config/qtile/icon_luneko.png create mode 100644 home/.config/qtile/vrm diff --git a/home/.config/qtile/config.py b/home/.config/qtile/config.py new file mode 100644 index 0000000..8e7f85a --- /dev/null +++ b/home/.config/qtile/config.py @@ -0,0 +1,296 @@ +# 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 + +from typing import List # noqa: F401 + +from libqtile import bar, layout, widget, hook +from libqtile.config import Click, Drag, Group, Key, Match, Screen +from libqtile.lazy import lazy + +mod = "mod4" +terminal = "kitty" +startscript = os.path.expanduser('~/autostart.sh') + +keys = [ + # 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, "control"], "c", lazy.window.kill(), desc="Kill focused window"), + Key([mod, "control"], "r", lazy.restart(), desc="Restart Qtile"), + + # custom stuff + Key([mod], "r", lazy.spawn("rofi -show run"), desc="Open rofi"), + Key([mod], "e", lazy.spawn("rofi -show drun -show-icons"), desc="Open rofi"), + Key([mod, "shift"], "s", lazy.spawn("sh /home/luneko/snap.sh"), desc="Take sreenshot and upload to omega"), + Key([mod, "shift"], "c", lazy.spawn("sh /home/luneko/snap_clipboard.sh"), desc="Take sreenshot and save to clipboard"), +] + +colors = [["#1a1b26"], # Bar background + ["#7aa2f7"], # Bar accent (blue) + ["#414868"], # Bar accent (black) + ["#f7768e"], # Bar accent (red) + ["#565f89"], # Bar accent (grey) + ["#ecbbfb", "#ecbbfb"]] + +group_names = [("一", {'layout': 'column'}), + ("二", {'layout': 'column'}), + ("三", {'layout': 'column'}), + ("四", {'layout': 'column'}), + ("五", {'layout': 'column'}), + ("六", {'layout': 'column'}), + ("七", {'layout': 'column'}), + ("八", {'layout': 'column'}), + ("九", {'layout': 'column'})] + +groups = [Group(name, **kwargs) for name, kwargs in group_names] + +for i, (name, kwargs) in enumerate(group_names, 1): + keys.append(Key([mod], str(i), lazy.group[name].toscreen())) # Switch to another group + keys.append(Key([mod, "shift"], str(i), lazy.window.togroup(name))) # Send current window to another group + +layout_theme = {"border_focus": "#bb9af7", + "border_focus_stack": "#bb9af7", + "border_normal": "#414868", + "border_normal_stack": "#414868", + "border_on_single": True, + "border_width": 1, + "margin": [8,8,0,0], + } + +layouts = [ + # layout.MonadTall(), + layout.Columns(**layout_theme), + layout.Max(**layout_theme), + # layout.Stack(num_stacks=2), + # layout.Bsp(), + # layout.Matrix(), + # layout.MonadWide(), + # layout.RatioTile(), + # layout.Tile(), + # layout.TreeTab(), + # layout.VerticalTile(), + # layout.Zoomy(), +] + +widget_defaults = dict( + font='Ubuntu', + foreground='#ffffff', + fontsize=14, + padding=3, +) +extension_defaults = widget_defaults.copy() + +screens = [ + Screen( + top=bar.Bar( + [ + widget.Spacer(length=5), + widget.Image( + length=24, + filename='/home/luneko/.config/qtile/icon_luneko.png' + ), + widget.Spacer(length=5), + widget.GroupBox( + fontsize=12, + active='#ffffff', + disable_drag=True, + inactive=colors[4], + rounded=False, + highlight_method='block', + this_current_screen_border=colors[2], + this_screen_border=colors[2], + urgent_alert_method='text', + urgent_border=colors[3], + urgent_text=colors[3], + ), + widget.TaskList( + border=colors[2], + margin_y=0, + icon_size=0, + rounded=False, + highlight_method='block', + urgent_alert_method='text', + urgent_border=colors[3], + urgent_text=colors[3], + ), + widget.Clock( + format='%H:%M:%S', + ), + widget.Spacer(), + widget.TextBox( + text="NET", + foreground=colors[2], + padding=1, + ), + widget.Net(format='{down} ↓↑ {up}'), + widget.Spacer(length=7), + widget.TextBox( + text="CPU", + foreground=colors[2], + padding=1, + ), + widget.CPU(format='{freq_current}GHz → {load_percent}%'), + widget.Spacer(length=7), + widget.TextBox( + text="GPU", + foreground=colors[2], + padding=1, + ), + widget.GenPollText( + update_interval=1, + func=lambda: subprocess.check_output("/home/luneko/.config/qtile/gpu").decode("utf-8"), + ), + widget.Spacer(length=7), + widget.TextBox( + text="VRM", + foreground=colors[2], + padding=1, + ), + widget.GenPollText( + update_interval=1, + func=lambda: subprocess.check_output("/home/luneko/.config/qtile/vrm").decode("utf-8"), + ), + widget.Spacer(length=7), + widget.TextBox( + text="MEM", + foreground=colors[2], + padding=1, + ), + widget.Memory(format='{MemUsed: .0f}{mm}'), + widget.Spacer(length=7), + widget.TextBox( + text="VOL", + foreground=colors[2], + padding=1, + ), + widget.PulseVolume(step=1), + widget.Spacer(length=7), + widget.Systray( + icon_size=18, + background=colors[2], + padding=3, + ), + widget.Spacer( + length=4, + background=colors[2], + ), + widget.CurrentLayoutIcon(scale=0.8), + ], + 24, + opacity=1, + background=colors[0], + margin=[4,4,0,4], + ), + left=bar.Gap(8), + bottom=bar.Gap(8) + ), +] + +# 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 = True + +#Run autostart script when qtile is loaded for the first time +@hook.subscribe.startup_once +def autostart(): + subprocess.call([startscript]) + +# 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 = "Qtile" diff --git a/home/.config/qtile/gpu b/home/.config/qtile/gpu new file mode 100644 index 0000000..0e90b35 --- /dev/null +++ b/home/.config/qtile/gpu @@ -0,0 +1,6 @@ +#!/bin/bash +gpu_freq=$(cat /sys/class/drm/card0/device/pp_dpm_sclk | fgrep '*' | awk '{ print ""$2""}') +gpu_util=$(cat /sys/class/drm/card0/device/gpu_busy_percent) + +printf "$gpu_freq → $gpu_util%%" +exit 0 diff --git a/home/.config/qtile/icon_luneko.png b/home/.config/qtile/icon_luneko.png new file mode 100644 index 0000000000000000000000000000000000000000..3bea1e7be9eab7cec458f424aa01bdcce169e7f6 GIT binary patch literal 5292 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