diff options
author | Thanos Apollo <[email protected]> | 2023-02-10 06:34:35 +0200 |
---|---|---|
committer | Thanos Apollo <[email protected]> | 2023-02-10 06:34:35 +0200 |
commit | 7da455e48776cc2171a4a1faf93ec22a3f774271 (patch) | |
tree | a00f77d34ea200813e024d21920d42c5c589566d | |
parent | caa974134676d409fbb26142fa4ece213777f18f (diff) |
Qtile: Make as literate configuration
-rw-r--r-- | Qtile.org | 536 |
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 |