From 9ddbe485031beb794288a4970c11e021f91211b3 Mon Sep 17 00:00:00 2001 From: Bartek Stalewski Date: Tue, 21 Feb 2023 11:52:58 +0100 Subject: [PATCH] Preparation to merge. --- _desktop/_scripts/dmenu-display | 56 +++++++++++++++++ .../_scripts/{dmenu-chars => dmenu-emoji} | 0 _desktop/autorandr/docked/config | 20 ------ _desktop/autorandr/docked/setup | 2 - _desktop/autorandr/nomad/config | 19 ------ _desktop/autorandr/nomad/setup | 1 - _desktop/fontconfig/fonts.conf | 12 ++++ _desktop/install-desktop.sh | 2 +- _desktop/qtile/config.py | 61 +++++++++++-------- 9 files changed, 104 insertions(+), 69 deletions(-) create mode 100644 _desktop/_scripts/dmenu-display rename _desktop/_scripts/{dmenu-chars => dmenu-emoji} (100%) delete mode 100644 _desktop/autorandr/docked/config delete mode 100644 _desktop/autorandr/docked/setup delete mode 100644 _desktop/autorandr/nomad/config delete mode 100644 _desktop/autorandr/nomad/setup create mode 100644 _desktop/fontconfig/fonts.conf diff --git a/_desktop/_scripts/dmenu-display b/_desktop/_scripts/dmenu-display new file mode 100644 index 0000000..c73c6fa --- /dev/null +++ b/_desktop/_scripts/dmenu-display @@ -0,0 +1,56 @@ +#!/bin/sh + +twoscreen() { + mirror=$(printf "no\\nyes" | dmenu -c -l 2 -i -p "mirror?") + if [ "$mirror" = "yes" ]; then + external=$(echo "$screens" | dmenu -c -l 2 -i) + internal=$(echo "$screens" | grep -v "$external") + res_external=$(xrandr --query | sed -n "/^$external/,/\+/p" | \ + tail -n 1 | awk '{print $1}') + res_internal=$(xrandr --query | sed -n "/^$internal/,/\+/p" | \ + tail -n 1 | awk '{print $1}') + res_ext_x=$(echo "$res_external" | sed 's/x.*//') + res_ext_y=$(echo "$res_external" | sed 's/.*x//') + res_int_x=$(echo "$res_internal" | sed 's/x.*//') + res_int_y=$(echo "$res_internal" | sed 's/.*x//') + scale_x=$(echo "$res_ext_x / $res_int_x" | bc -l) + scale_y=$(echo "$res_ext_y / $res_int_y" | bc -l) + xrandr --output "$external" --auto --scale 1.0x1.0 \ + --output "$internal" --auto --same-as "$external" \ + --scale "$scale_x"x"$scale_y" + else + primary=$(echo "$screens" | dmenu -c -l 50 -i -p "select primary output") + secondary=$(echo "$screens" | grep -v "$primary") + direction=$(printf "left\\nright" | dmenu -c -l 2 -i -p "secondary display location") + xrandr --output "$primary" --auto --scale 1.0x1.0 --output "$secondary" --"$direction"-of "$primary" --auto --scale 1.0x1.0 + fi +} + +onescreen() { + if [ "$2" = "native" ]; then + xrandr --output "$1" --auto --scale 1.0x1.0 $(echo "$allposs" | grep -v "\b$1" | awk '{print "--output", $1, "--off"}' | paste -sd ' ' -) + else + scale=$(printf "native\\n0.75\\n0.5" | dmenu -c -l 3 -i -p "scale") && + case "$scale" in + "native") xrandr --output "$1" --auto --scale 1.0x1.0 $(echo "$allposs" | grep -v "\b$1" | awk '{print "--output", $1, "--off"}' | paste -sd ' ' -);; + *) xrandr --output "$1" --auto --scale ${scale}x${scale} $(echo "$allposs" | grep -v "\b$1" | awk '{print "--output", $1, "--off"}' | paste -sd ' ' -);; + esac + fi +} + +# Get all possible displays +allposs=$(xrandr -q | grep "connected") + +# Get all connected screens. +screens=$(echo "$allposs" | awk '/ connected/ {print $1}') + +# If there's only one screen +[ "$(echo "$screens" | wc -l)" -lt 2 ] && + { onescreen "$screens" "native"; notify-send -t 2000 -u critical ' no device to switch'; exit ;} + +# Get user choice including both and manual selection: +chosen=$(printf -- "%s\\nmulti" "$screens" | dmenu -c -l 5 -i -p "select output") && +case "$chosen" in + "multi") twoscreen ;; + *) onescreen "$chosen" ;; +esac diff --git a/_desktop/_scripts/dmenu-chars b/_desktop/_scripts/dmenu-emoji similarity index 100% rename from _desktop/_scripts/dmenu-chars rename to _desktop/_scripts/dmenu-emoji diff --git a/_desktop/autorandr/docked/config b/_desktop/autorandr/docked/config deleted file mode 100644 index 1955d95..0000000 --- a/_desktop/autorandr/docked/config +++ /dev/null @@ -1,20 +0,0 @@ -output HDMI-A-0 -off -output DisplayPort-1 -off -output eDP -off -output DisplayPort-0 -crtc 1 -filter bilinear -mode 3840x2160 -pos 0x0 -rate 60.00 -transform 0.700000,0.000000,0.000000,0.000000,0.700000,0.000000,0.000000,0.000000,1.000000 -x-prop-max_bpc 8 -x-prop-non_desktop 0 -x-prop-scaling_mode None -x-prop-tearfree on -x-prop-underscan off -x-prop-underscan_hborder 0 -x-prop-underscan_vborder 0 diff --git a/_desktop/autorandr/docked/setup b/_desktop/autorandr/docked/setup deleted file mode 100644 index f8fca52..0000000 --- a/_desktop/autorandr/docked/setup +++ /dev/null @@ -1,2 +0,0 @@ -DisplayPort-0 00ffffffffffff001e6d0777dadb04000c1d0104b53c22789e3e31ae5047ac270c50542108007140818081c0a9c0d1c08100010101014dd000a0f0703e803020650c58542100001a286800a0f0703e800890650c58542100001a000000fd00383d1e8738000a202020202020000000fc004c472048445220344b0a20202001aa0203197144900403012309070783010000e305c000e3060501023a801871382d40582c450058542100001e565e00a0a0a029503020350058542100001a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029 -eDP 00ffffffffffff0006af3d5700000000001c0104a51f1178022285a5544d9a270e505400000001010101010101010101010101010101b43780a070383e401010350035ae100000180000000f0000000000000000000000000020000000fe0041554f0a202020202020202020000000fe004231343048414e30352e37200a0070 diff --git a/_desktop/autorandr/nomad/config b/_desktop/autorandr/nomad/config deleted file mode 100644 index 2e2f8ab..0000000 --- a/_desktop/autorandr/nomad/config +++ /dev/null @@ -1,19 +0,0 @@ -output HDMI-A-0 -off -output DisplayPort-0 -off -output DisplayPort-1 -off -output eDP -crtc 0 -mode 1920x1080 -pos 0x0 -primary -rate 60.03 -x-prop-max_bpc 16 -x-prop-non_desktop 0 -x-prop-scaling_mode None -x-prop-tearfree on -x-prop-underscan off -x-prop-underscan_hborder 0 -x-prop-underscan_vborder 0 diff --git a/_desktop/autorandr/nomad/setup b/_desktop/autorandr/nomad/setup deleted file mode 100644 index ff6927c..0000000 --- a/_desktop/autorandr/nomad/setup +++ /dev/null @@ -1 +0,0 @@ -eDP 00ffffffffffff0006af3d5700000000001c0104a51f1178022285a5544d9a270e505400000001010101010101010101010101010101b43780a070383e401010350035ae100000180000000f0000000000000000000000000020000000fe0041554f0a202020202020202020000000fe004231343048414e30352e37200a0070 diff --git a/_desktop/fontconfig/fonts.conf b/_desktop/fontconfig/fonts.conf new file mode 100644 index 0000000..92002f2 --- /dev/null +++ b/_desktop/fontconfig/fonts.conf @@ -0,0 +1,12 @@ + + + + + + RobotoMono Nerd Font + + + 90 + + + diff --git a/_desktop/install-desktop.sh b/_desktop/install-desktop.sh index 0b862d3..9eb88d5 100644 --- a/_desktop/install-desktop.sh +++ b/_desktop/install-desktop.sh @@ -4,7 +4,7 @@ mkdir -p ~/.config ~/.local/bin # link config -for i in autorandr clipit gtk-3.0 neofetch qtile zathura; do +for i in clipit gtk-3.0 neofetch qtile zathura; do rm -rf ~/.config/${i} ln -sf $(pwd)/${i} ~/.config done diff --git a/_desktop/qtile/config.py b/_desktop/qtile/config.py index 15c1a2a..b33d4a1 100644 --- a/_desktop/qtile/config.py +++ b/_desktop/qtile/config.py @@ -1,15 +1,16 @@ import os +import psutil import subprocess from libqtile import bar, extension, hook, layout, widget -from libqtile.lazy import lazy from libqtile.config import Click, Drag, DropDown, Group, Key, Match, ScratchPad, Screen +from libqtile.dgroups import simple_key_binder +from libqtile.lazy import lazy @hook.subscribe.startup_once def autostart(): home = os.path.expanduser('~/.config/qtile/autostart.sh') subprocess.Popen([home]) -mod = "mod4" groups = [ Group("1", label="\uf292"), Group("2", label="\uf738", matches=[Match(wm_class=["firefox"])]), @@ -41,6 +42,7 @@ groups = [ ]), ] +mod = "mod4" keys = [ # switch between windows Key([mod], "h", lazy.layout.left()), @@ -70,7 +72,7 @@ keys = [ Key([mod, "shift"], "Return", lazy.spawn("sh -c 'terminal_profile=work BROWSER=workfx st'")), Key([mod, "control"], "a", lazy.spawn("dmenu-audio")), Key([mod, "control"], "b", lazy.spawn("dmenu-bluetooth")), - Key([mod, "control"], "e", lazy.spawn("dmenu-chars")), + Key([mod, "control"], "e", lazy.spawn("dmenu-emoji")), Key([mod, "control"], "d", lazy.spawn("dmenu-display")), # WM control Key([mod], "f", lazy.window.toggle_floating()), @@ -78,7 +80,6 @@ keys = [ Key([mod, "control", "shift"], "l", lazy.spawn("physlock")), Key([mod, "control", "shift"], "q", lazy.shutdown()), Key([mod, "control", "shift"], "r", lazy.reload_config()), - Key([mod], "r", lazy.reload_config()), # media keys Key([], "XF86AudioMute", lazy.spawn("pactl set-sink-mute @DEFAULT_SINK@ toggle")), Key([], "XF86AudioMicMute", lazy.spawn("key-micmute")), @@ -88,22 +89,8 @@ keys = [ Key([], "XF86MonBrightnessDown", lazy.spawn("xbacklight -dec 10")), ] -for i in groups[:10]: - keys.extend( - [ - # mod1 + letter of group = switch to group - Key( - [mod], i.name, lazy.group[i.name].toscreen(), - desc="Switch to group {}".format(i.name), - ), - # Key( [mod, "shift"], i.name, lazy.window.togroup(i.name, switch_group=True), - # desc="Switch to & move focused window to group {}".format(i.name), - # ), - Key([mod, "shift"], i.name, lazy.window.togroup(i.name), - desc="move focused window to group {}".format(i.name) - ), - ] - ) +dgroups_key_binder = simple_key_binder(mod) +dgroups_app_rules = [] # type: list layouts = [ layout.Columns( @@ -117,10 +104,10 @@ layouts = [ ] widget_defaults = dict( + foreground='#c7c7c7', background='#272822', font="RobotoMono Nerd Font Medium", fontsize=14, - foreground='#c7c7c7', ) extension_defaults = widget_defaults.copy() @@ -141,7 +128,6 @@ screens = [ urgent_border='#770000', ), widget.Prompt( - bell_style=None, prompt='open: ', record_history=False, ), @@ -193,7 +179,7 @@ screens = [ 24, margin=[5, 5, 0, 5] ), - wallpaper=os.environ['XDG_CONFIG_HOME'] + '/qtile/wallpaper.img', + wallpaper='~/.local/share/wallpaper.jpg', wallpaper_mode='fill', ), ] @@ -209,14 +195,37 @@ floating_layout = layout.Floating( *layout.Floating.default_float_rules, Match(wm_class='Authenticator'), ], - border_focus='#005577', + border_focus='#feffff', border_normal="#272822", border_width=2, ) -auto_fullscreen = False +@hook.subscribe.client_new +def _swallow(window): + pid = window.window.get_net_wm_pid() + ppid = psutil.Process(pid).ppid() + cpids = {c.window.get_net_wm_pid(): wid for wid, c in window.qtile.windows_map.items()} + for i in range(5): + if not ppid: + return + if ppid in cpids: + parent = window.qtile.windows_map.get(cpids[ppid]) + if parent.window.get_wm_class()[0] != "xterm-256color": + return + parent.minimized = True + window.parent = parent + return + ppid = psutil.Process(ppid).ppid() + +@hook.subscribe.client_killed +def _unswallow(window): + if hasattr(window, 'parent'): + window.parent.minimized = False + +auto_fullscreen = True auto_minimize = True +bring_front_click = False +cursor_warp = False focus_on_window_activation = "smart" follow_mouse_focus = True reconfigure_screens = True -wmname = "LG3D"