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 0000000..3bea1e7 Binary files /dev/null and b/home/.config/qtile/icon_luneko.png differ diff --git a/home/.config/qtile/vrm b/home/.config/qtile/vrm new file mode 100644 index 0000000..5a50fb0 --- /dev/null +++ b/home/.config/qtile/vrm @@ -0,0 +1,5 @@ +#!/bin/bash +gpu_vram=$(cat /sys/class/drm/card0/device/mem_info_vram_used | numfmt --to iec) + +printf "$gpu_vram" +exit 0