from libqtile import bar from libqtile import hook from libqtile import layout from libqtile import widget from libqtile.command import lazy from libqtile.config import Click from libqtile.config import Drag from libqtile.config import Group from libqtile.config import Key from libqtile.config import Screen from libqtile.utils import guess_terminal # this import requires python-xlib to be installed from Xlib import display as xdisplay class Colors: background = "#1f2430" accent = "#002F5F" panel_height = 27 panel_font_size = 12 font = "Ubuntu" widget_defaults = dict( font=font, padding=0, fontsize=panel_font_size, borderwidth=0 ) def get_num_monitors(): try: display = xdisplay.Display() screen = display.screen() resources = screen.root.xrandr_get_screen_resources() return len(resources.outputs) except Exception: # always setup at least one monitor return 1 num_monitors = get_num_monitors() def powerline_arrow(direction, color1, color2): if direction == "r": return [ widget.TextBox( text=u"\ue0b0", foreground=color1, background=color2, fontsize=panel_height, font = "NovaMono for Powerline" ), widget.Sep(padding=5, linewidth=0, background=color2), ] else: return [ widget.Sep(padding=7, linewidth=0, background=color1), widget.TextBox( text=u"\ue0b2", foreground=color2, background=color1, fontsize=panel_height, font = "NovaMono for Powerline" ), ] def get_panel(monitor_id): widgets = [ *powerline_arrow("r", Colors.accent, Colors.background), widget.GroupBox( rounded=False, inactive="#ffffff", background=Colors.background, highlight_method="block", highlight_color=Colors.accent, this_current_screen_border=Colors.accent, borderwidth=4, font="Ubuntu", ), *powerline_arrow("r", Colors.background, None), widget.WindowName(foreground="a0a0a0"), *powerline_arrow("l", None, Colors.background), ] if monitor_id == 0: widgets.append( widget.Systray(icon_size=24, background=Colors.background, padding=5) ) widgets.extend( [ *powerline_arrow("l", Colors.background, Colors.accent), *powerline_arrow("l", Colors.accent, Colors.background), widget.Volume(borderwidth=0, background=Colors.background, emoji=True), widget.Volume(borderwidth=0, background=Colors.background, emoji=False), *powerline_arrow("l", Colors.background, Colors.accent), widget.Clock( foreground="#ffffff", background=Colors.accent, format="%Y-%m-%d %H:%M:%S ", ), widget.Sep(padding=10, linewidth=0, background=Colors.accent), ] ) return bar.Bar( widgets, size=panel_height, background=Colors.background, opacity=0.9 ) screens = [] for m in range(num_monitors): screens.append(Screen(top=get_panel(m))) # @hook.subscribe.screen_change # def restart_on_randr(ev): # libqtile.qtile.cmd_restart() @hook.subscribe.client_new def dialogs(window): if ( window.window.get_wm_type() == "dialog" or window.window.get_wm_transient_for() ): window.floating = True @hook.subscribe.client_new def float_steam(window): wm_class = window.window.get_wm_class() w_name = window.window.get_name() if wm_class == ("Steam", "Steam") and ( w_name != "Steam" # w_name == "Friends List" # or w_name == "Screenshot Uploader" # or w_name.startswith("Steam - News") or "PMaxSize" in window.window.get_wm_normal_hints().get("flags", ()) ): window.floating = True @hook.subscribe.client_new def float_firefox(window): wm_class = window.window.get_wm_class() w_name = window.window.get_name() if wm_class == ("Places", "firefox") and w_name == "Library": window.floating = True @lazy.function def float_to_front(qtile): for group in qtile.groups: for window in group.windows: if window.floating: window.cmd_bring_to_front() mod = "mod4" terminal = guess_terminal() keys = [ Key([mod], "h", lazy.layout.left(), desc="Move focus to left"), Key([mod], "l", lazy.layout.right(), desc="Move focus to right"), Key([mod], "j", lazy.layout.down(), desc="Move focus down"), Key([mod], "k", lazy.layout.up(), desc="Move focus up"), Key([mod], "space", lazy.layout.next(), desc="Move window focus to other window"), # Move windows between left/right columns or move up/down in current stack. # Moving out of range in Columns layout will create new column. Key([mod, "shift"], "h", lazy.layout.shuffle_left(), desc="Move window to the left"), Key([mod, "shift"], "l", lazy.layout.shuffle_right(), desc="Move window to the right"), Key([mod, "shift"], "j", lazy.layout.shuffle_down(), desc="Move window down"), Key([mod, "shift"], "k", lazy.layout.shuffle_up(), desc="Move window up"), # Grow windows. If current window is on the edge of screen and direction # will be to screen edge - window would shrink. Key([mod, "control"], "h", lazy.layout.grow_left(), desc="Grow window to the left"), Key([mod, "control"], "l", lazy.layout.grow_right(), desc="Grow window to the right"), Key([mod, "control"], "j", lazy.layout.grow_down(), desc="Grow window down"), Key([mod, "control"], "k", lazy.layout.grow_up(), desc="Grow window up"), Key([mod], "n", lazy.layout.normalize(), desc="Reset all window sizes"), # Toggle between split and unsplit sides of stack. # Split = all windows displayed # Unsplit = 1 window displayed, like Max layout, but still with # multiple stack panes Key( [mod, "shift"], "Return", lazy.layout.toggle_split(), desc="Toggle between split and unsplit sides of stack", ), Key([mod], "Return", lazy.spawn(terminal), desc="Launch terminal"), # Toggle between different layouts as defined below Key([mod], "Tab", lazy.next_layout(), desc="Toggle between layouts"), Key([mod], "w", lazy.window.kill(), desc="Kill focused window"), Key([mod, "control"], "r", lazy.reload_config(), desc="Reload the config"), Key([mod, "control"], "q", lazy.shutdown(), desc="Shutdown Qtile"), Key([mod], "r", lazy.spawncmd(), desc="Spawn a command using a prompt widget"), ] 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()), ] groups = [Group(i) for i in "123456789"] border = dict( border_width=6, margin=10, single_margin=200, border_focus=Colors.background ) layouts = [layout.MonadTall(**border), layout.Columns(**border)] main = None follow_mouse_focus = False bring_front_click = False cursor_warp = False floating_layout = layout.Floating( float_rules=[ {"wmclass": "confirm"}, {"wmclass": "dialog"}, {"wmclass": "download"}, {"wmclass": "error"}, {"wmclass": "file_progress"}, {"wmclass": "notification"}, {"wmclass": "splash"}, {"wmclass": "toolbar"}, {"wmclass": "confirmreset"}, # gitk {"wmclass": "makebranch"}, # gitk {"wmclass": "maketag"}, # gitk {"wname": "branchdialog"}, # gitk {"wname": "pinentry"}, # GPG key password entry {"wmclass": "ssh-askpass"}, # ssh-askpass ] ) auto_fullscreen = True focus_on_window_activation = "smart" wmname = "LG3D" @hook.subscribe.startup_once def startup(): pass # import subprocess # subprocess.Popen(["picom"]) # subprocess.Popen(["systemctl", "--user", "import-environment", "DISPLAY"]) # subprocess.Popen(["xsettingsd"]) # subprocess.Popen(["nitrogen", "--restore"]) # subprocess.Popen(["unclutter", "--root"]) # subprocess.Popen(["nm-applet"]) # subprocess.Popen(["xautolock", "-time", " 5", "-locker", "screenlock"]) # subprocess.Popen(["dex", "-a", "-s", "/home/droccia/.config/autostart/"])