#+TITLE: Qtile Configuration #+auto_tangle: t * Table of contents :toc: - [[#colors][Colors]] - [[#keys][Keys]] - [[#base][Base]] * Colors #+begin_src python :tangle .config/qtile/colors.by """ My Favorite Color Themes For Qtile | Feel free to change them as you like """ # Dracula theme dracula = { "bg": "#282a36", "fg": "#f8f8f2", "curr": "#44475a", "cyan": "#8be9fd", "green": "#50fa7b", "orange": "#ffb86c", "purple": "#bd93f9", "red": "#ff5555", } # Gruvbox theme 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' } # Custom version of arcolinux theme my_colors = { "black": "#000000", "black2": "#2F343F", "blue": "#3384d0", "red": "#ff0000", "grey": "#a9a9a9", "grey2": "#C0C5CE", "cyan": "#6790EB", "green": "#62FF00", "white": "#F3F4F5", "orange": "#FBA922", } #+end_src * Keys #+begin_src python :tangle .config/qtile/config.py from libqtile.config import Key from libqtile.command import lazy from libqtile.config import Click, Drag mod = "mod4" mod = "mod4" browser = "firefox" term = "emacsclient -c" editor = "emacsclient -c -a 'emacs'" 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], "n", lazy.layout.down(), ), Key([mod], "p", lazy.layout.up(), ), Key([mod, "shift"], "n", lazy.layout.shuffle_down(), lazy.layout.section_down(), ), Key([mod, "shift"], "p", lazy.layout.shuffle_up(), lazy.layout.section_up(), ), Key([mod], "s", lazy.layout.shrink(), lazy.layout.decrease_nmaster(), ), Key([mod], "l", lazy.layout.grow(), lazy.layout.increase_nmaster(), ), Key([mod], "o", 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%+'), ), # I use mod+F[key] to change volume in my thinkpad, # as I dislike using "fn" key in laptops Key([mod], "F11", lazy.spawn('amixer sset Master 5%-'), ), Key([mod], "F12", lazy.spawn('amixer sset Master 5%+'), ), # Music controls | MOC Key([mod], "u", lazy.spawn("mocp -G "), ), Key([mod], "o", lazy.spawn("mocp -f"), ), Key([mod], "i", lazy.spawn("mocp -r"), ), # Change languages Key([], "F1", lazy.spawn("setxkbmap us -option ctrl:swapcaps"), ), Key([], "F2", lazy.spawn("setxkbmap gr"), ), ] 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 * Base #+begin_src python :tangle .config/qtile/config.py """Configuration for qtile.""" import os import subprocess from libqtile import layout, bar, widget, hook from libqtile.config import Group, Screen from libqtile.dgroups import simple_key_binder from colors import dracula @hook.subscribe.startup_once def start_once(): """Set your autostart script.""" autostart_path = os.path.expanduser('~/.config/autostart/autostart.sh') subprocess.run([autostart_path]) # Use this to change between workspaces dgroups_key_binder = simple_key_binder("mod4") # Groups and layouts 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], )) def init_layout_theme(): """Layout default 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), # layout.Spiral(**layout_theme), layout.TreeTab(bg_color=dracula["bg"], active_bg=dracula["purple"], active_fg=dracula["fg"], inactive_fg=dracula["fg"], inactive_bg=dracula["bg"], font="JetBrains Mono", fontshadow=None, section_fontsize=14, panel_width=135,), # layout.Zoomy(**layout_theme), ] # Widgets def init_widgets_defaults(): """Set widget default settings.""" return dict(font="JetBrains Mono", fontsize=12, padding=2, foreground=dracula["fg"], background=dracula["bg"] ) widget_defaults = init_widgets_defaults() def init_widgets_list(): """My widget 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.Pomodoro( color_active=dracula["cyan"], color_break=dracula["orange"], color_inactive=dracula["curr"], lenghth_pomodori=30, fontsize=17, ), 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 widgets_list = init_widgets_list() def init_widgets_screen1(): """Init every widget for primary screen.""" widgets_screen1 = init_widgets_list() return widgets_screen1 def init_widgets_screen2(): """Remove systray and spacer for second screen.""" widgets_screen2 = init_widgets_list() return widgets_screen2[:-2] widgets_screen1 = init_widgets_screen1() widgets_screen2 = init_widgets_screen2() def init_screens(): """Panel settings.""" return [Screen(top=bar.Bar(widgets=init_widgets_screen1(), size=33, margin=11),), Screen(top=bar.Bar(widgets=init_widgets_screen2(), size=28, margin=7))] screens = init_screens() follow_mouse_focus = True bring_front_click = False cursor_warp = True auto_fullscreen = True focus_on_window_activation = "smart" # or focus wmname = "Qtile-Apo11o" #+end_src