feat: recover qtile configuration, make changes for dynamic monitors
5 files changed, 150 insertions(+), 60 deletions(-) M modules/desktop/qtile/config/autostart.sh M modules/desktop/qtile/config/config.py M modules/desktop/qtile/default.nix M modules/desktop/qtile/home.nix M modules/services/picom.nix
M modules/desktop/qtile/config/autostart.sh => modules/desktop/qtile/config/autostart.sh +1 -1
M modules/desktop/qtile/config/config.py => modules/desktop/qtile/config/config.py +78 -18
@@ 19,6 19,9 @@ from mpris2widget import Mpris2 from bluetooth import Bluetooth import xmonadcustom from nixenvironment import setupLocation, configLocation, sequenceDetectorExec import time import screeninfo colors = { @@ 'primary': '51afef', 81,12 84,28 @@ def go_to_group(qtile: Qtile, group_name: str, switch_monitor: bool = False): for window in current_group.windows: if window.fullscreen: window.toggle_fullscreen() time.sleep(0.1) window.toggle_fullscreen() if not switch_monitor or not found: window: Window for window in qtile.groups_map[group_name].windows: if window.fullscreen: window.toggle_fullscreen() time.sleep(0.1) window.toggle_fullscreen() @lazy.function def warp_cursor_to_focused_window(qtile: Qtile): logger.warning("warping") current_window = qtile.current_window win_size = current_window.get_size() win_pos = current_window.get_position() x = win_pos[0] + win_size[0] // 2 y = win_pos[1] + win_size[1] // 2 qtile.core.warp_pointer(x, y) # expands list of keys with the rest of regular keys, @@ # mainly usable for KeyChords, where you want any other key 345,14 364,33 @@ def create_bottom_bar(): ), ], 30) def init_screen(top_bar, wallpaper): return Screen(top=top_bar, bottom=create_bottom_bar(), wallpaper=wallpaper, width=1920, height=1080) def init_screens(): screens = [ init_screen(create_top_bar(), f'{setupLocation}/wall.png'), init_screen(create_top_bar(systray = True), f'{setupLocation}/wall.png'), init_screen(create_top_bar(), f'{setupLocation}/wall.png'), ] wallpaper = f'{setupLocation}/wall.png' screens_info = screeninfo.get_monitors() screens_count = len(screens_info) screens = [None] * screens_count logger.warning(f'setting up {screens_count} screens') for i in range(0, screens_count): screen_info = screens_info[i] systray = False if screens_count <= 2 and i == 0: systray = True print(f'Putting systray on {i}') elif i == 1: systray = True print(f'Putting systray on {i}') top_bar = create_top_bar(systray = systray) screens[i] = Screen(top=top_bar, bottom=create_bottom_bar(), wallpaper=f'{setupLocation}/wall.png', width=screen_info.width, height=screen_info.height) return screens screens = init_screens() # Keys @@ keys = [] 374,6 412,7 @@ keys.extend([ EzKey('M-S-m', lazy.window.toggle_minimize()), EzKey('M-t', lazy.window.disable_floating()), EzKey('M-f', lazy.window.toggle_fullscreen()), EzKey('M-S-f', lazy.to_layout_index(1)), EzKey('M-<Return>', lazy.layout.swap_main()), EzKey('M-<Space>', lazy.next_layout()), @@ EzKey('M-S-<Space>', lazy.to_layout_index(0), desc = 'Default layout'), 393,8 432,8 @@ keys.extend([ # social navigation EzKeyChord('M-a', expand_with_rest_keys([ EzKey('b', focus_window_by_class('discord')), EzKey('n', focus_window_by_class('Cinny')), EzKey('m', focus_window_by_class('Cinny')), EzKey('n', focus_window_by_class('element')), EzKey('m', focus_window_by_class('element')), # notifications @@ EzKey('l', lazy.spawn(f'{setupLocation}/scripts/notifications/clear-popups.sh')), 454,12 493,18 @@ keys.extend([ ]) # Monitor navigation monitor_navigation_keys = ['w', 'e', 'r'] keys.extend([ EzKey('M-C-w', warp_cursor_to_focused_window()), ]) if len(screens) >= 4: monitor_navigation_keys = ['q', 'w', 'e', 'r'] else: monitor_navigation_keys = ['w', 'e', 'r'] for i, key in enumerate(monitor_navigation_keys): monitor_index_map = [ 2, 0, 1 ] keys.extend([ EzKey(f'M-{key}', lazy.to_screen(monitor_index_map[i]), desc = f'Move focus to screen {i}'), EzKey(f'M-S-{key}', lazy.window.toscreen(monitor_index_map[i]), desc = f'Move focus to screen {i}'), EzKey(f'M-{key}', lazy.to_screen(i), desc = f'Move focus to screen {i}'), EzKey(f'M-S-{key}', lazy.window.toscreen(i), desc = f'Move window to screen {i}'), ]) @@ if qtile.core.name == 'x11': 511,6 556,12 @@ groups.append( **scratch_pad_middle ), DropDown( 'ipcam', ['~/doc/utils/ip-cam.sh'], on_focus_lost_hide = True, **scratch_pad_middle ), DropDown( 'bluetooth', ['blueman-manager'], @@ on_focus_lost_hide = True, 611,15 662,25 @@ def startup_applications(client: Window): if client.match(Match(wm_class = 'firefox')) and firefoxInstance <= 1: client.togroup(groups[firefoxInstance].name) firefoxInstance += 1 elif client.match(Match(wm_class = 'discord')) or client.match(Match(wm_class = 'telegram-desktop')) or client.match(Match(wm_class = 'cinny')): elif client.match(Match(wm_class = 'discord')) or client.match(Match(wm_class = 'telegram-desktop')) or client.match(Match(wm_class = 'element')): client.togroup(groups[8].name) @hook.subscribe.screen_change @lazy.function def set_screens(qtile, event): if not os.path.exists(os.path.expanduser('~/NO-AUTORANDR')): subprocess.run(["autorandr", "--change"]) qtile.cmd_restart() logger.warning("screen change") logger.warning(event) # if not os.path.exists(os.path.expanduser('~/NO-AUTORANDR')): # subprocess.run(["autorandr", "--change"]) # qtile.cmd_restart() @hook.subscribe.screens_reconfigured @lazy.function def screen_reconf(qtile): logger.warning("screens reconfigured") l = len(screens) l2 = len(qtile.screens) logger.warnings(f"Reconfigured screens, length of our screens: {l}, of qtile's screens: {l2}") # Turn off fullscreen on unfocus @@ @hook.subscribe.client_focus 653,4 714,3 @@ def scratchpad_startup(): return hide_dropdown hook.subscribe.client_managed(wrapper(dropdown_name))
M modules/desktop/qtile/default.nix => modules/desktop/qtile/default.nix +2 -18
@@ 5,24 5,6 @@ xkblayout-state ]; nixpkgs.overlays = [ (final: super: { pythonPackagesOverlays = (super.pythonPackagesOverlays or []) ++ [ (_: pprev: { qtile-extras = pprev.qtile-extras.overridePythonAttrs(_: { doCheck = false; }); }) ]; python3 = let self = super.python3.override { inherit self; packageOverrides = super.lib.composeManyExtensions final.pythonPackagesOverlays; }; in self; python3Packages = final.python3.pkgs; }) ]; services = { xserver = { @@ enable = true; 30,6 12,8 @@ enable = true; extraPackages = ppkgs: [ ppkgs.qtile-extras ppkgs.xlib ppkgs.screeninfo ]; }; };
M modules/desktop/qtile/home.nix => modules/desktop/qtile/home.nix +64 -18
@@ 1,6 1,6 @@ { config, lib, pkgs, user, location, ... }: let let nur = config.nur.repos; in { @@ # services.udev.extraRules = 34,18 34,18 @@ in { enable = true; hooks = { postswitch = { "reload-qtile" = "${pkgs.qtile}/bin/qtile cmd-obj -o cmd -f reload_config"; # "reload-qtile" = "${pkgs.qtile}/bin/qtile cmd-obj -o cmd -f reload_config"; }; }; profiles = { "desktop" = { "home-docked" = { fingerprint = { DVI-D-0 = "00ffffffffffff0009d1d978455400002b1a010380351e782e6c40a755519f27145054a56b80d1c081c081008180a9c0b30001010101023a801871382d40582c45000f282100001e000000ff0054414730333931303031390a20000000fd00324c1e5311000a202020202020000000fc0042656e51204757323437300a200161020322f14f901f05140413031207161501061102230907078301000065030c002000023a801871382d40582c45000f282100001e011d8018711c1620582c25000f282100009e011d007251d01e206e2855000f282100001e8c0ad08a20e02d10103e96000f2821000018000000000000000000000000000000000000000000f5"; DisplayPort-0 = "00ffffffffffff0009d1e77801010101261e0104a5351e783a05f5a557529c270b5054a56b80d1c0b300a9c08180810081c001010101023a801871382d40582c45000f282100001e000000ff00455442394c3033373432534c30000000fd00324c1e5311010a202020202020000000fc0042656e51204757323438300a2001e002031cf14f901f041303120211011406071516052309070783010000023a801871382d40582c45000f282100001f011d8018711c1620582c25000f282100009f011d007251d01e206e2855000f282100001e8c0ad08a20e02d10103e96000f28210000180000000000000000000000000000000000000000000000000000008d"; HDMI-A-0 = "00ffffffffffff0009d1e778455400000d1c010380351e782e0565a756529c270f5054a56b80d1c0b300a9c08180810081c001010101023a801871382d40582c45000f282100001e000000ff0058334a30303131303031510a20000000fd00324c1e5311000a202020202020000000fc0042656e51204757323438300a2001b0020322f14f901f04130312021101140607151605230907078301000065030c001000023a801871382d40582c45000f282100001f011d8018711c1620582c25000f282100009f011d007251d01e206e2855000f282100001e8c0ad08a20e02d10103e96000f282100001800000000000000000000000000000000000000000003"; "DP-7" = "00ffffffffffff0009d1e77801010101261e0104a5351e783a05f5a557529c270b5054a56b80d1c0b300a9c08180810081c001010101023a801871382d40582c45000f282100001e000000ff00455442394c3033373432534c30000000fd00324c1e5311010a202020202020000000fc0042656e51204757323438300a2001e002031cf14f901f041303120211011406071516052309070783010000023a801871382d40582c45000f282100001f011d8018711c1620582c25000f282100009f011d007251d01e206e2855000f282100001e8c0ad08a20e02d10103e96000f28210000180000000000000000000000000000000000000000000000000000008d"; "DP-8" = "00ffffffffffff0009d1e778455400000d1c0104a5351e783a0565a756529c270f5054a56b80d1c0b300a9c08180810081c001010101023a801871382d40582c45000f282100001e000000ff0058334a30303131303031510a20000000fd00324c1e5311010a202020202020000000fc0042656e51204757323438300a20017d02031cf14f901f041303120211011406071516052309070783010000023a801871382d40582c45000f282100001f011d8018711c1620582c25000f282100009f011d007251d01e206e2855000f282100001e8c0ad08a20e02d10103e96000f28210000180000000000000000000000000000000000000000000000000000008d"; "DP-9" = "00ffffffffffff0009d1d978455400002b1a010380351e782e6c40a755519f27145054a56b80d1c081c081008180a9c0b30001010101023a801871382d40582c45000f282100001e000000ff0054414730333931303031390a20000000fd00324c1e5311000a202020202020000000fc0042656e51204757323437300a200161020322f14f901f05140413031207161501061102230907078301000065030c001000023a801871382d40582c45000f282100001e011d8018711c1620582c25000f282100009e011d007251d01e206e2855000f282100001e8c0ad08a20e02d10103e96000f282100001800000000000000000000000000000000000000000005"; }; config = { DVI-D-0 = { DP-9 = { enable = true; crtc = 0; @@ primary = false; 54,7 54,7 @@ in { gamma = "1.0:0.909:0.833"; rate = "60.00"; }; DisplayPort-0 = { DP-7 = { enable = true; crtc = 0; @@ primary = true; 63,34 63,80 @@ in { gamma = "1.0:0.909:0.833"; rate = "60.00"; }; HDMI-A-0 = { DP-8 = { enable = true; crtc = 0; primary = true; primary = false; position = "3840x0"; mode = "1920x1080"; gamma = "1.0:0.909:0.833"; rate = "60.00"; }; eDP-1 = { enable = false; }; }; }; "virtual" = { "home-internal" = { fingerprint = { Virtual-1 = "00ffffffffffff0049143412000000002a180104a530197806ee91a3544c99260f5054210800e1c0d1c0d100a940b3009500818081405a4f80a072f22330e0395540e70011000018000000f7000a004082002820000000000000000000fd00327d1ea0ff010a202020202020000000fc0051454d55204d6f6e69746f720a019902030b00467d6560591f6100000010000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000002f"; Virtual-2 = "00ffffffffffff0049143412000000002a180104a5301b7806ee91a3544c99260f5054210800e1c0d1c0d100a940b300950081808140d25480a072382540e0395540e71211000018000000f7000a004082002820000000000000000000fd00327d1ea0ff010a202020202020000000fc0051454d55204d6f6e69746f720a01b002030b00467d6560591f6100000010000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000002f"; "DP-7" = "00ffffffffffff0009d1e77801010101261e0104a5351e783a05f5a557529c270b5054a56b80d1c0b300a9c08180810081c001010101023a801871382d40582c45000f282100001e000000ff00455442394c3033373432534c30000000fd00324c1e5311010a202020202020000000fc0042656e51204757323438300a2001e002031cf14f901f041303120211011406071516052309070783010000023a801871382d40582c45000f282100001f011d8018711c1620582c25000f282100009f011d007251d01e206e2855000f282100001e8c0ad08a20e02d10103e96000f28210000180000000000000000000000000000000000000000000000000000008d"; "DP-8" = "00ffffffffffff0009d1e778455400000d1c0104a5351e783a0565a756529c270f5054a56b80d1c0b300a9c08180810081c001010101023a801871382d40582c45000f282100001e000000ff0058334a30303131303031510a20000000fd00324c1e5311010a202020202020000000fc0042656e51204757323438300a20017d02031cf14f901f041303120211011406071516052309070783010000023a801871382d40582c45000f282100001f011d8018711c1620582c25000f282100009f011d007251d01e206e2855000f282100001e8c0ad08a20e02d10103e96000f28210000180000000000000000000000000000000000000000000000000000008d"; "DP-9" = "00ffffffffffff0009d1d978455400002b1a010380351e782e6c40a755519f27145054a56b80d1c081c081008180a9c0b30001010101023a801871382d40582c45000f282100001e000000ff0054414730333931303031390a20000000fd00324c1e5311000a202020202020000000fc0042656e51204757323437300a200161020322f14f901f05140413031207161501061102230907078301000065030c001000023a801871382d40582c45000f282100001e011d8018711c1620582c25000f282100009e011d007251d01e206e2855000f282100001e8c0ad08a20e02d10103e96000f282100001800000000000000000000000000000000000000000005"; "eDP-1" = "00ffffffffffff0009e5660b000000001a200104a51e137807e957a7544c9a26115457000000010101010101010101010101010101019c3e80c870b03c40302036002ebc1000001a163280c870b03c40302036002ebc1000001a000000fd001e3c4c4c10010a202020202020000000fe004e4531343057554d2d4e36470a00f7"; }; config = { Virtual-1 = { DP-9 = { enable = true; primary = true; crtc = 0; primary = false; position = "0x0"; mode = "1920x1080"; gamma = "1.0:0.909:0.833"; rate = "60.00"; }; Virtual-2 = { enable = true; primary = false; DP-7 = { enable = false; crtc = 0; primary = true; position = "1920x0"; mode = "1920x1080"; gamma = "1.0:0.909:0.833"; rate = "60.00"; }; DP-8 = { enable = false; crtc = 0; primary = false; position = "3840x0"; mode = "1920x1080"; gamma = "1.0:0.909:0.833"; rate = "60.00"; }; eDP-1 = { enable = true; crtc = 0; primary = true; position = "1920x1080"; mode = "1920x1200"; gamma = "1.0:0.909:0.833"; rate = "60.00"; }; }; }; "notebook" = { fingerprint = { "eDP-1" = "00ffffffffffff0009e5660b000000001a200104a51e137807e957a7544c9a26115457000000010101010101010101010101010101019c3e80c870b03c40302036002ebc1000001a163280c870b03c40302036002ebc1000001a000000fd001e3c4c4c10010a202020202020000000fe004e4531343057554d2d4e36470a00f7"; }; config = { eDP-1 = { enable = true; crtc = 0; primary = true; position = "0x0"; mode = "1920x1200"; gamma = "1.0:0.909:0.833"; rate = "60.00"; }; }; };
M modules/services/picom.nix => modules/services/picom.nix +5 -5
@@ 6,7 6,7 @@ { services.picom = { # enable = true; enable = true; package = pkgs.picom; @@ backend = "glx"; # Rendering either with glx or xrender. You'll know if you need to switch this. 24,10 24,10 @@ # "100:name = 'Picture in picture'" # "100:name = 'Picture-in-Picture'" # "85:class_i ?= 'rofi'" "90:class_i *= 'discord'" "90:class_i *= 'telegram-desktop'" "90:class_i *= 'emacs'" "90:class_i *= 'Alacritty'" # "90:class_i *= 'discord'" # "90:class_i *= 'telegram-desktop'" # "90:class_i *= 'emacs'" # "90:class_i *= 'Alacritty'" # "100:fullscreen" ]; # Find with $ xprop | grep "WM_CLASS"