diff options
Diffstat (limited to '.config/qtile')
-rw-r--r-- | .config/qtile/README.org | 536 |
1 files changed, 536 insertions, 0 deletions
diff --git a/.config/qtile/README.org b/.config/qtile/README.org new file mode 100644 index 0000000..7cd7a82 --- /dev/null +++ b/.config/qtile/README.org @@ -0,0 +1,536 @@ +#+PROPERTY: header-args:python :tangle ./new_config.py + +* Qtile configuration +* Table of Contents +:PROPERTIES: +:TOC: :include all :ignore this +:END: +:CONTENTS: +- [[#imports][Imports]] +- [[#colors][Colors]] +- [[#keybindings][Keybindings]] + - [[#keyboard][Keyboard]] + - [[#mouse][Mouse]] +- [[#panel][Panel]] + - [[#groups][Groups]] + - [[#layouts][Layouts]] + - [[#widgets][Widgets]] + - [[#defaults][Defaults]] + - [[#custom-widgets][Custom Widgets]] + - [[#widget-list][Widget List]] +- [[#screens][Screens]] +- [[#settings][Settings]] + - [[#cursor-&-wname][Cursor & wname]] +:END: +** Imports +#+begin_src python +import os +import subprocess +from libqtile import layout, bar, widget, hook +from libqtile.config import Click, Drag, Group, Match, Screen, Rule, Key +from libqtile.command import lazy +from libqtile.dgroups import simple_key_binder +from colors import gruvbox, nord_fox, my_colors, dracula +from spotify_widget import Spotify +#+end_src +** Colors +#+begin_src python :tangle ./colors.py +nord_fox = { + 'bg': "#2e3440", + 'fg': "#b9bfca", + 'fg_gutter': "#4b5668", + 'black': "#3b4252", + 'red': "#bf616a", + 'green': "#a3be8c", + 'yellow': "#ebcb8b", + 'blue': "#81a1c1", + 'magenta': "#b48ead", + 'cyan': "#88c0d0", + 'white': "#e5e9f0", + 'orange': "#c9826b", + 'pink': "#bf88bc", +} + +gruvbox = { + 'bg': '#282828', + 'fg': '#d4be98', + 'dark-red': '#ea6962', + 'red': '#ea6962', + 'dark-green': '#a9b665', + 'green': '#a9b665', + 'dark-yellow': '#e78a4e', + 'yellow': '#d8a657', + 'dark-blue': '#7daea3', + 'blue': '#7daea3', + 'dark-magenta': '#d3869b', + 'magenta': '#d3869b', + 'dark-cyan': '#89b482', + 'cyan': '#89b482', + 'dark-gray': '#665c54', + 'gray': '#928374', + + 'fg4': '#766f64', + 'fg3': '#665c54', + 'fg2': '#504945', + 'fg1': '#3c3836', + 'bg0': '#32302f', + 'fg0': '#1d2021', + 'fg9': '#ebdbb2' +} + +my_colors = { + "black" : "#000000", + "black2": "#2F343F", + "blue" : "#3384d0", + "red" : "#ff0000", + "grey" : "#a9a9a9", + "grey2" : "#C0C5CE", + "cyan" : "#6790EB", + "green" : "#62FF00", + "white" : "#F3F4F5", + "orange": "#FBA922", +} +dracula = { + "bg" : "#282a36" , + "fg" : "#f8f8f2", + "curr": "#44475a", + "cyan": "#8be9fd", + "green": "#50fa7b", + "orange": "#ffb86c", + "purple": "#bd93f9", + "red" : "#ff5555", +} + +#+end_src +** Keybindings +*** Keyboard +#+begin_src python + mod = "mod4" + browser = "qutebrowser" + term = "alacritty" + editor = "emacsclient -c -a 'emacs'" + dgroups_key_binder = simple_key_binder("mod4") #Change groups + keys = [ + Key([mod], "Return", + lazy.spawn(term), + ), + Key([mod, "shift"], "a", + lazy.spawn('anki'), + ), + Key([mod, "shift"], "m", + lazy.spawn("spotify"), + ), + Key([mod], "Tab", + lazy.spawn("rofi -show drun"), + ), + Key([mod], "r", + lazy.spawn("rofi -show run"), + ), + Key([mod], "w", + lazy.spawn("rofi -show window"), + ), + Key([mod], "p", + lazy.spawn("passmenu -p 'Password for: '"), + ), + Key([mod], "b", + lazy.spawn(browser), + ), + Key([mod, "shift"], "c", + lazy.next_layout(), + ), + Key([mod], "q", + lazy.window.kill(), + ), + Key([mod, "shift"], "r", + lazy.restart(), + ), + Key([mod, "shift"], "0", + lazy.shutdown(), + ), + Key([mod, "shift"], "e", + lazy.spawn(editor), + ), + ### Switch focus of monitors + Key([mod], "period", + lazy.next_screen(), + ), + ### Treetab controls + Key([mod, "shift"], "h", + lazy.layout.move_left(), + ), + Key([mod, "shift"], "l", + lazy.layout.move_right(), + ), + ### Window controls + Key([mod], "j", + lazy.layout.down(), + ), + Key([mod], "k", + lazy.layout.up(), + ), + Key([mod, "shift"], "j", + lazy.layout.shuffle_down(), + lazy.layout.section_down(), + ), + Key([mod, "shift"], "k", + lazy.layout.shuffle_up(), + lazy.layout.section_up(), + ), + Key([mod], "h", + lazy.layout.shrink(), + lazy.layout.decrease_nmaster(), + ), + Key([mod], "l", + lazy.layout.grow(), + lazy.layout.increase_nmaster(), + ), + Key([mod], "n", + lazy.layout.normalize(), + ), + Key([mod], "m", + lazy.layout.maximize(), + ), + Key([mod, "shift"], "f", + lazy.window.toggle_floating(), + ), + Key([mod], "f", + lazy.window.toggle_fullscreen(), + ), + ### Stack controls + Key([mod, "shift"], "Tab", + lazy.layout.rotate(), + lazy.layout.flip(), + ), + Key([mod, "shift"], "space", + lazy.layout.toggle_split(), + ), + ### Volume controls + Key([], "XF86AudioLowerVolume", + lazy.spawn('amixer sset Master 5%-'), + ), + Key([], "XF86AudioRaiseVolume", + lazy.spawn('amixer sset Master 5%+'), + ), + ### Spotify + Key([mod, "shift"], "p", + lazy.spawn("spotify-control play-pause"), + ), + Key([mod, "shift"], "n", + lazy.spawn("spotify-control next"), + ), + Key([mod, "shift"], "b", + lazy.spawn("spotify-control previous"), + ), + ### Change languages + Key([mod], "F1", + lazy.spawn("setxkbmap us -option caps:swapescape"), + ), + Key([mod],"F2", + lazy.spawn("setxkbmap gr"), + ), + ] + +#+end_src +*** Mouse +#+begin_src python + 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()), + ] +#+end_src + +** Panel +*** Groups +#+begin_src python +groups = [] +group_names = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0",] +group_labels = ["Ⅰ", "Ⅱ", "Ⅲ", "Ⅳ", "Ⅴ", "Ⅵ", "Ⅶ", "Ⅷ", "Ⅸ", "Ⅹ",] +group_layouts = ["monadtall", "monadtall", "monadtall", "monadtall", "monadtall", "monadtall", "monadtall", "monadtall", "monadtall", "monadtall",] +for i in range(len(group_names)): + groups.append( + Group( + name=group_names[i], + layout=group_layouts[i].lower(), + label=group_labels[i], + )) +#+end_src +*** Layouts +#+begin_src python +def init_layout_theme(): + return {"margin":5, + "border_width":2, + "border_focus": dracula["cyan"], + "border_normal": dracula["bg"], + } + +layout_theme = init_layout_theme() + + +layouts = [ + layout.MonadTall(**layout_theme), + #layout.MonadWide(**layout_theme), + #layout.Matrix(**layout_theme), + #layout.Bsp(**layout_theme), + layout.Floating(**layout_theme), + # layout.RatioTile(**layout_theme), + layout.Max(**layout_theme) +] +#+end_src + +*** Widgets +**** Defaults +#+begin_src python +def init_widgets_defaults(): + return dict(font="Noto Sans", + fontsize = 12, + padding = 2, + foreground =dracula["fg"], + background = dracula["bg"] + ) + +widget_defaults = init_widgets_defaults() +#+end_src +**** Custom Widgets +***** Spotify +- A custom widget, pulls metadata via dbus, displaying song and artist of current playing song through spotify +- Qtile provides a similar widget named *Mpris2* + - /I wanted to play around with dbus, so I made this one/ +#+begin_src python :tangle ./spotify_widget.py +import dbus +import subprocess +from functools import partial +from libqtile.widget import base + +class Spotify(base.ThreadPoolText): + """A simple Spotify widget, made using dbus-python. + Show the song and artist of now listening song and allow basic mouse + control from the bar using spotify-control( + Github: https://github.com/J00LZ/spotify-control + AUR: https://aur.archlinux.org/packages/spotify-control + ): + - toggle pause (or play if stopped) on left click; + - skip forward in playlist on scroll up; + - skip backward in playlist on scroll down. + """ + + defaults = [ + ("color", "00ff00", "Text"), + ("update_interval", 0.5, "Update Time in seconds."), + ] + + def __init__(self, **config): + base.ThreadPoolText.__init__(self, "", **config) + self.add_defaults(Spotify.defaults) + self.local = None + self.add_callbacks( + { + "Button1": partial(subprocess.Popen, ["spotify-control", "play-pause"]), + "Button4": partial(subprocess.Popen, ["spotify-control", "next"]), + "Button5": partial(subprocess.Popen, ["spotify-control", "previous"]), + } + ) + + def now_playing(self): + """Return current song""" + session_bus = dbus.SessionBus() + bus_data = ("org.mpris.MediaPlayer2.spotify", "/org/mpris/MediaPlayer2") + spotify_bus = session_bus.get_object(*bus_data) + interface = dbus.Interface(spotify_bus, "org.freedesktop.DBus.Properties") + metadata = interface.Get("org.mpris.MediaPlayer2.Player", "Metadata") + data = { + "artist" : next(iter(metadata.get("xesam:albumArtist"))), + "song" : metadata.get("xesam:title") + } + song = data["song"] + " ♫ " + data["artist"] + self.layout.colour = self.color + return song + + def poll(self): + """Poll content for the text box.""" + try: + return self.now_playing() + except : + return "Spotify is not responding" +#+end_src +**** Widget List +#+begin_src python +def init_widgets_list(): + widgets_list = [ + widget.Spacer( + length=7, + ), + widget.Image( + filename = "~/.config/qtile/rms.png", + scale = "True", + margin = 2, + ), + widget.Spacer( + length=7, + ), + widget.GroupBox( + font="FontAwesome", + fontsize = 20, + padding = 3, + margin = 4, + borderwidth = 1, + active = dracula["cyan"], + inactive = dracula["curr"], + rounded = False, + highlight_method = "line", + this_current_screen_border = dracula["red"], + other_current_screen_border = dracula["curr"], + ), + widget.CurrentLayout( + font = "Noto Sans Bold", + foreground = dracula["fg"], + background = "#5B4B8A", + ), + widget.Spacer( + length=5 + ), + widget.WindowName( + font="JetBrains Mono Bold", + fontsize = 12, + foreground = dracula["green"], + background = dracula["bg"], + ), + # widget.Image( + # filename = "~/.config/qtile/spotify2.png", + # scale = True, + # ), + # Spotify( + # fontsize = 12, + # background = dracula["bg"], + # color = dracula["green"], + # fmt = '{}', + # font = "JetBrains Mono Bold" + # ), + # widget.Moc( + # font = "JetBrains Mono", + # fontsize= 13, + # play_color=dracula["green"], + # paddig = 10, + # ), + widget.Spacer( + length=10, + ), + widget.Image( + filename = "~/.config/qtile/volume1.png", + scale = True, + ), + widget.Spacer( + length=7, + padding = 10, + ), + widget.Volume( + fontsize = 15, + fmt = '{} ' , + background = dracula["bg"], + foreground = dracula['orange'], + font = "JetBrains Mono", + margin = 10, + ), + # widget.Mpris2( + # fontsize= 16, + # background = my_colors["red"], + # objname="org.mpris.MediaPlayer2.spotify" + # ), + widget.Spacer( + length=7, + padding = 10, + ), + widget.Image( + filename = "~/.config/qtile/ram2.png", + scale = True, + ), + widget.Memory( + measure_mem="G", + fontsize=15, + foreground = dracula["cyan"], + background = dracula["bg"], + font='JetBrains Mono Bold', + ), + widget.MemoryGraph( + type='box', + graph_color = dracula["cyan"], + foreground = dracula["fg"], + background = dracula["bg"], + ), + widget.Spacer( + length=7 + ), + widget.Image( + filename = "~/.config/qtile/cpu1.png", + scale = True, + ), + widget.ThermalSensor( + threshold=50, + fontsize=15, + font='JetBrains Mono Bold', + foreground = dracula["cyan"], + background = dracula["bg"], + ), + widget.CPUGraph( + type='box', + graph_color = dracula["cyan"], + background = dracula["bg"], + ), + widget.Spacer( + length=5 + ), + widget.TextBox( + font="FontAwesome", + text=" ", + foreground=dracula["orange"], + background=dracula["bg"], + padding = 2, + fontsize=18 + ), + widget.Clock( + font='JetBrains Mono Bold', + foreground = dracula["cyan"], + background = dracula["bg"], + fontsize = 18, + format="%d-%m-%Y | %H:%M" + ), + widget.Spacer( + length=6 + ), + widget.Systray( + background= dracula["bg"], + icon_size=20, + padding = 10, + margin = 10, + ), + widget.Spacer( + length=5 + ), + ] + return widgets_list +#+end_src + +** Screens +#+begin_src python +widgets_screen1 = init_widgets_screen1() +widgets_screen2 = init_widgets_screen2() + + +def init_screens(): + return [Screen(top=bar.Bar(widgets=init_widgets_screen1(), size=33, margin = [6,20,3,20]),), + Screen(top=bar.Bar(widgets=init_widgets_screen2(), size=28, margin = 7))] + +screens = init_screens() +#+end_src + +** Settings +*** Cursor & wname +#+begin_src python +follow_mouse_focus = True +bring_front_click = False +cursor_warp = True +auto_fullscreen = True +focus_on_window_activation = "smart" # or smart + +wmname = "Qtile-Apo11o" +#+end_src |