summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThanos Apollo <[email protected]>2023-02-10 06:34:35 +0200
committerThanos Apollo <[email protected]>2023-02-10 06:34:35 +0200
commit7da455e48776cc2171a4a1faf93ec22a3f774271 (patch)
treea00f77d34ea200813e024d21920d42c5c589566d
parentcaa974134676d409fbb26142fa4ece213777f18f (diff)
Qtile: Make as literate configuration
-rw-r--r--Qtile.org536
1 files changed, 536 insertions, 0 deletions
diff --git a/Qtile.org b/Qtile.org
new file mode 100644
index 0000000..1857fdf
--- /dev/null
+++ b/Qtile.org
@@ -0,0 +1,536 @@
+#+TITLE: Qtile Configuration
+#+auto_tangle: t
+* Table of contents :toc:
+- [[#colors][Colors]]
+- [[#base][Base]]
+- [[#keys][Keys]]
+
+* Colors
+#+begin_src python :tangle .config/qtile/colors.py
+ """
+ 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
+* 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 keys import MyKeys
+ 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])
+
+
+ # Keybindings
+ my_keys = MyKeys()
+
+ keys = my_keys.init_keys()
+
+ # Use this to change between workspaces
+ dgroups_key_binder = simple_key_binder("mod4")
+
+ mouse = my_keys.init_mouse()
+
+ # 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
+
+* Keys
+#+begin_src python :tangle .config/qtile/keys.py
+ from libqtile.config import Key
+ from libqtile.command import lazy
+ from libqtile.config import Click, Drag
+
+
+ class MyKeys():
+ """
+ Emacs-like keybindings for qtile
+ I prefer having my keys seperated so I won't mess anything up,
+ especially if you are running the same config in different machines
+ """
+
+ def __init__(self):
+ """
+ Default customization
+ """
+ self.mod = "mod4"
+ self.browser = "firefox"
+ self.term = "emacsclient -c"
+ self.editor = "emacsclient -c -a 'emacs'"
+
+ def init_keys(self):
+ """
+ Keyboard keybindings | Emacs-like | Set them and forget them.
+
+ I'm used to having the superkey to control my window manager,
+ and control for my emacs.
+ """
+ my_keys = [
+ Key([self.mod], "Return",
+ lazy.spawn(self.term),
+ ),
+ Key([self.mod, "shift"], "a",
+ lazy.spawn('anki'),
+ ),
+ Key([self.mod, "shift"], "m",
+ lazy.spawn("spotify"),
+ ),
+ Key([self.mod], "Tab",
+ lazy.spawn("rofi -show drun"),
+ ),
+ Key([self.mod], "r",
+ lazy.spawn("rofi -show run"),
+ ),
+ Key([self.mod], "w",
+ lazy.spawn("rofi -show window"),
+ ),
+ Key([self.mod], "p",
+ lazy.spawn("passmenu -p 'Password for: '"),
+ ),
+ Key([self.mod], "b",
+ lazy.spawn(self.browser),
+ ),
+ Key([self.mod, "shift"], "c",
+ lazy.next_layout(),
+ ),
+ Key([self.mod], "q",
+ lazy.window.kill(),
+ ),
+ Key([self.mod, "shift"], "r",
+ lazy.restart(),
+ ),
+ Key([self.mod, "shift"], "0",
+ lazy.shutdown(),
+ ),
+ Key([self.mod, "shift"], "e",
+ lazy.spawn(self.editor),
+ ),
+ # Switch focus of monitors
+ Key([self.mod], "period",
+ lazy.next_screen(),
+ ),
+ # Treetab controls
+ Key([self.mod, "shift"], "h",
+ lazy.layout.move_left(),
+ ),
+ Key([self.mod, "shift"], "l",
+ lazy.layout.move_right(),
+ ),
+ # Window controls
+ Key([self.mod], "n",
+ lazy.layout.down(),
+ ),
+ Key([self.mod], "p",
+ lazy.layout.up(),
+ ),
+ Key([self.mod, "shift"], "n",
+ lazy.layout.shuffle_down(),
+ lazy.layout.section_down(),
+ ),
+ Key([self.mod, "shift"], "p",
+ lazy.layout.shuffle_up(),
+ lazy.layout.section_up(),
+ ),
+ Key([self.mod], "s",
+ lazy.layout.shrink(),
+ lazy.layout.decrease_nmaster(),
+ ),
+ Key([self.mod], "l",
+ lazy.layout.grow(),
+ lazy.layout.increase_nmaster(),
+ ),
+ Key([self.mod], "o",
+ lazy.layout.normalize(),
+ ),
+ Key([self.mod], "m",
+ lazy.layout.maximize(),
+ ),
+ Key([self.mod, "shift"], "f",
+ lazy.window.toggle_floating(),
+ ),
+ Key([self.mod], "f",
+ lazy.window.toggle_fullscreen(),
+ ),
+ # Stack controls
+ Key([self.mod, "shift"], "Tab",
+ lazy.layout.rotate(),
+ lazy.layout.flip(),
+ ),
+ Key([self.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([self.mod], "F11",
+ lazy.spawn('amixer sset Master 5%-'),
+ ),
+ Key([self.mod], "F12",
+ lazy.spawn('amixer sset Master 5%+'),
+ ),
+ # Music controls | MOC
+ Key([self.mod], "u",
+ lazy.spawn("mocp -G "),
+ ),
+ Key([self.mod], "o",
+ lazy.spawn("mocp -f"),
+ ),
+ Key([self.mod], "i",
+ lazy.spawn("mocp -r"),
+ ),
+ # Change languages
+ Key([self.mod], "F1",
+ lazy.spawn("setxkbmap us -option ctrl:swapcaps"),
+ ),
+ Key([self.mod], "F2",
+ lazy.spawn("setxkbmap gr"),
+ ),
+ ]
+
+ return my_keys
+
+ def init_mouse(self):
+ """Mouse keys | cause sometimes we have to use the mouse."""
+ mouse_keys = [
+ Drag([self.mod], "Button1", lazy.window.set_position_floating(),
+ start=lazy.window.get_position()),
+ Drag([self.mod], "Button3", lazy.window.set_size_floating(),
+ start=lazy.window.get_size()),
+ Click([self.mod], "Button2",
+ lazy.window.bring_to_front()),
+ ]
+ return mouse_keys
+#+end_src