From 7da455e48776cc2171a4a1faf93ec22a3f774271 Mon Sep 17 00:00:00 2001
From: Thanos Apollo <apollothanosmd@gmail.com>
Date: Fri, 10 Feb 2023 06:34:35 +0200
Subject: Qtile: Make as literate configuration

---
 Qtile.org | 536 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 536 insertions(+)
 create mode 100644 Qtile.org

(limited to 'Qtile.org')

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
-- 
cgit v1.2.3