summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordavidovski <david@davidovski.xyz>2023-11-20 23:33:59 +0000
committerdavidovski <david@davidovski.xyz>2023-11-20 23:33:59 +0000
commit2c23da611288c6415a363c07847c82481763908e (patch)
tree29cb278b64b9cea522a5db47ec15303a26f0dc45
parent4c2194a7c5758637259d109df248c24a2fac62e6 (diff)
Switch to compfy
-rw-r--r--bspwm/change_update_order.patch55
-rwxr-xr-xbspwm/deploy.sh13
-rwxr-xr-xcompfy/deploy.sh14
-rw-r--r--compfy/uncomment_sliding_animation.patch259
-rwxr-xr-xconfig/bspwm/bspwmrc2
-rw-r--r--config/compfy/compfy.conf499
-rw-r--r--config/vim/vimrc3
-rwxr-xr-xdeploy.sh2
-rwxr-xr-xscripts/dmenu-iwd96
-rwxr-xr-xscripts/tablet4
10 files changed, 943 insertions, 4 deletions
diff --git a/bspwm/change_update_order.patch b/bspwm/change_update_order.patch
new file mode 100644
index 0000000..f27dce9
--- /dev/null
+++ b/bspwm/change_update_order.patch
@@ -0,0 +1,55 @@
+
+diff --git a/src/ewmh.c b/src/ewmh.c
+index 52f7e53..bdda6a7 100644
+--- a/src/ewmh.c
++++ b/src/ewmh.c
+@@ -93,7 +93,12 @@ void ewmh_update_current_desktop(void)
+ if (mon == NULL) {
+ return;
+ }
+- uint32_t i = ewmh_get_desktop_index(mon->desk);
++ ewmh_set_current_desktop(mon->desk);
++}
++
++void ewmh_set_current_desktop(desktop_t *d)
++{
++ uint32_t i = ewmh_get_desktop_index(d);
+ xcb_ewmh_set_current_desktop(ewmh, default_screen, i);
+ }
+
+diff --git a/src/ewmh.h b/src/ewmh.h
+index 3b50e35..0781eb6 100644
+--- a/src/ewmh.h
++++ b/src/ewmh.h
+@@ -35,6 +35,7 @@ void ewmh_update_number_of_desktops(void);
+ uint32_t ewmh_get_desktop_index(desktop_t *d);
+ bool ewmh_locate_desktop(uint32_t i, coordinates_t *loc);
+ void ewmh_update_current_desktop(void);
++void ewmh_set_current_desktop(desktop_t *d);
+ void ewmh_set_wm_desktop(node_t *n, desktop_t *d);
+ void ewmh_update_wm_desktops(void);
+ void ewmh_update_desktop_names(void);
+diff --git a/src/tree.c b/src/tree.c
+index 52055c5..3762335 100644
+--- a/src/tree.c
++++ b/src/tree.c
+@@ -643,14 +643,18 @@ bool focus_node(monitor_t *m, desktop_t *d, node_t *n)
+ }
+
+ if (m->desk != d) {
++ ewmh_set_current_desktop(d);
++ put_status(SBSC_MASK_DESKTOP_FOCUS, "desktop_focus 0x%08X 0x%08X\n", m->id, d->id);
++
+ show_desktop(d);
+ set_input_focus(n);
+ has_input_focus = true;
+ hide_desktop(m->desk);
+ m->desk = d;
++
+ }
+
+- if (desk_changed) {
++ if (m != mon) {
+ ewmh_update_current_desktop();
+ put_status(SBSC_MASK_DESKTOP_FOCUS, "desktop_focus 0x%08X 0x%08X\n", m->id, d->id);
+ }
diff --git a/bspwm/deploy.sh b/bspwm/deploy.sh
new file mode 100755
index 0000000..65b9fd1
--- /dev/null
+++ b/bspwm/deploy.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+wd="$HOME/.local/src/bspwm"
+
+[ ! -d "$HOME/.local/src" ] && mkdir -p "$wd"
+
+rm -rf "$wd"
+git clone https://github.com/baskerville/bspwm "$wd"
+
+patch -d "$wd" -p1 -i $(realpath change_update_order.patch)
+
+make -C "$wd"
+doas make -C "$wd" install PREFIX=/usr
diff --git a/compfy/deploy.sh b/compfy/deploy.sh
new file mode 100755
index 0000000..3a598cb
--- /dev/null
+++ b/compfy/deploy.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+wd="$HOME/.local/src/compfy"
+
+[ ! -d "$HOME/.local/src" ] && mkdir -p "$wd"
+
+rm -rf "$wd"
+git clone https://github.com/allusive-dev/compfy "$wd"
+
+patch -d "$wd" -p1 -i $(realpath uncomment_sliding_animation.patch)
+
+cd "$wd"
+meson build && meson compile -C build && doas meson install -C build
+cd -
diff --git a/compfy/uncomment_sliding_animation.patch b/compfy/uncomment_sliding_animation.patch
new file mode 100644
index 0000000..77f613d
--- /dev/null
+++ b/compfy/uncomment_sliding_animation.patch
@@ -0,0 +1,259 @@
+diff --git a/src/common.h b/src/common.h
+index 978acf7..bcffb81 100644
+--- a/src/common.h
++++ b/src/common.h
+@@ -186,9 +186,9 @@ typedef struct session {
+ /// Width of root window.
+ int root_width;
+ /// Current desktop number of root window
+- // int root_desktop_num;
++ int root_desktop_num;
+ /// Desktop switch direction
+- // int root_desktop_switch_direction;
++ int root_desktop_switch_direction;
+ /// X Composite overlay window.
+ xcb_window_t overlay;
+ /// The target window for debug mode
+diff --git a/src/compfy.c b/src/compfy.c
+index 975bfaf..d5dcc54 100644
+--- a/src/compfy.c
++++ b/src/compfy.c
+@@ -597,13 +597,13 @@ static void configure_root(session_t *ps) {
+ ps->root_width = r->width;
+ ps->root_height = r->height;
+
+- // auto prop = x_get_prop(ps->c, ps->root, ps->atoms->a_NET_CURRENT_DESKTOP,
+- // 1L, XCB_ATOM_CARDINAL, 32);
++ auto prop = x_get_prop(ps->c, ps->root, ps->atoms->a_NET_CURRENT_DESKTOP,
++ 1L, XCB_ATOM_CARDINAL, 32);
+
+- // ps->root_desktop_switch_direction = 0;
+- // if (prop.nitems) {
+- // ps->root_desktop_num = (int)*prop.c32;
+- // }
++ ps->root_desktop_switch_direction = 0;
++ if (prop.nitems) {
++ ps->root_desktop_num = (int)*prop.c32;
++ }
+
+ rebuild_screen_reg(ps);
+ rebuild_shadow_exclude_reg(ps);
+@@ -1752,7 +1752,7 @@ static void draw_callback_impl(EV_P_ session_t *ps, int revents attr_unused) {
+ }
+ if (!animation_running) {
+ ps->animation_time = 0L;
+- // ps->root_desktop_switch_direction = 0;
++ ps->root_desktop_switch_direction = 0;
+ }
+
+ // TODO(yshui) Investigate how big the X critical section needs to be. There are
+diff --git a/src/config.c b/src/config.c
+index deca6ad..45da9a0 100644
+--- a/src/config.c
++++ b/src/config.c
+@@ -759,6 +759,8 @@ enum wm_support parse_wm_support(const char *src) {
+ return WM_SUPPORT_HERB;
+ } else if (strcmp(src, "dwm") == 0) {
+ return WM_SUPPORT_DWM;
++ } else if (strcmp(src, "bspwm") == 0) {
++ return WM_SUPPORT_BSPWM;
+ } else if (strcmp(src, "legacy") == 0) {
+ return WM_SUPPORT_LEGACY;
+ }
+diff --git a/src/config.h b/src/config.h
+index 4276203..fe03eca 100644
+--- a/src/config.h
++++ b/src/config.h
+@@ -49,8 +49,8 @@ enum open_window_animation {
+ OPEN_WINDOW_ANIMATION_SLIDE_DOWN,
+ OPEN_WINDOW_ANIMATION_SLIDE_LEFT,
+ OPEN_WINDOW_ANIMATION_SLIDE_RIGHT,
+- // OPEN_WINDOW_ANIMATION_SLIDE_IN,
+- // OPEN_WINDOW_ANIMATION_SLIDE_OUT,
++ OPEN_WINDOW_ANIMATION_SLIDE_IN,
++ OPEN_WINDOW_ANIMATION_SLIDE_OUT,
+ OPEN_WINDOW_ANIMATION_INVALID,
+ };
+
+@@ -59,6 +59,7 @@ enum wm_support {
+ WM_SUPPORT_AWESOME,
+ WM_SUPPORT_HERB,
+ WM_SUPPORT_DWM,
++ WM_SUPPORT_BSPWM,
+ WM_SUPPORT_LEGACY,
+ WM_SUPPORT_INVALID,
+ };
+diff --git a/src/event.c b/src/event.c
+index acbc82d..bf5bd1d 100644
+--- a/src/event.c
++++ b/src/event.c
+@@ -450,15 +450,15 @@ static inline void ev_property_notify(session_t *ps, xcb_property_notify_event_t
+
+ if (ps->root == ev->window) {
+ // If desktop number property changes
+- // if (ev->atom == ps->atoms->a_NET_CURRENT_DESKTOP) {
+- // auto prop = x_get_prop(ps->c, ps->root, ps->atoms->a_NET_CURRENT_DESKTOP,
+- // 1L, XCB_ATOM_CARDINAL, 32);
+-
+- // if (prop.nitems) {
+- // ps->root_desktop_switch_direction = ((int)*prop.c32) - ps->root_desktop_num;
+- // ps->root_desktop_num = (int)*prop.c32;
+- // }
+- // }
++ if (ev->atom == ps->atoms->a_NET_CURRENT_DESKTOP) {
++ auto prop = x_get_prop(ps->c, ps->root, ps->atoms->a_NET_CURRENT_DESKTOP,
++ 1L, XCB_ATOM_CARDINAL, 32);
++
++ if (prop.nitems) {
++ ps->root_desktop_switch_direction = ((int)*prop.c32) - ps->root_desktop_num;
++ ps->root_desktop_num = (int)*prop.c32;
++ }
++ }
+
+ if (ps->o.use_ewmh_active_win && ps->atoms->a_NET_ACTIVE_WINDOW == ev->atom) {
+ // to update focus
+diff --git a/src/win.c b/src/win.c
+index 4d96bb7..df3af08 100644
+--- a/src/win.c
++++ b/src/win.c
+@@ -484,13 +484,9 @@ static void init_animation(session_t *ps, struct managed_win *w) {
+ if (ps->o.wintype_option[w->window_type].animation < OPEN_WINDOW_ANIMATION_INVALID)
+ animation = ps->o.wintype_option[w->window_type].animation;
+
+- // if (ps->root_desktop_switch_direction != 0) {
+- // if (ps->o.animation_for_workspace_switch_in == OPEN_WINDOW_ANIMATION_AUTO) {
+- // animation = OPEN_WINDOW_ANIMATION_SLIDE_IN;
+- // } else {
+- // animation = ps->o.animation_for_workspace_switch_in;
+- // }
+- // }
++ if (ps->root_desktop_switch_direction != 0) {
++ animation = OPEN_WINDOW_ANIMATION_SLIDE_IN;
++ }
+
+ if (c2_match(ps, w, ps->o.animation_open_blacklist, NULL)) {
+ animation = OPEN_WINDOW_ANIMATION_NONE;
+@@ -553,28 +549,16 @@ static void init_animation(session_t *ps, struct managed_win *w) {
+ w->animation_h = w->pending_g.height;
+ break;
+ }
+- // case OPEN_WINDOW_ANIMATION_SLIDE_IN: {
+- // w->animation_center_x = w->pending_g.x + w->pending_g.width * 0.5;
+- // w->animation_center_y = w->pending_g.y + w->pending_g.height * 0.5 -
+- // ps->root_height *
+- // ((ps->root_desktop_switch_direction < 0 &&
+- // ps->root_desktop_switch_direction >= -1) ||
+- // ps->root_desktop_switch_direction > 1?1:-1);
+- // w->animation_w = w->pending_g.width;
+- // w->animation_h = w->pending_g.height;
+- // break;
+- // }
+- // case OPEN_WINDOW_ANIMATION_SLIDE_OUT: {
+- // w->animation_dest_center_x = w->pending_g.x + w->pending_g.width * 0.5;
+- // w->animation_dest_center_y = w->pending_g.y + w->pending_g.height * 0.5 -
+- // ps->root_height *
+- // ((ps->root_desktop_switch_direction < 0 &&
+- // ps->root_desktop_switch_direction >= -1) ||
+- // ps->root_desktop_switch_direction > 1?-1:1);
+- // w->animation_dest_w = w->pending_g.width;
+- // w->animation_dest_h = w->pending_g.height;
+- // break;
+- // }
++ case OPEN_WINDOW_ANIMATION_SLIDE_IN: {
++ w->animation_center_x = w->pending_g.x + w->pending_g.width * 0.5 +
++ ps->root_width *
++ (ps->root_desktop_switch_direction < 0?-1:1);
++
++ w->animation_center_y = w->pending_g.y + w->pending_g.height * 0.5;
++ w->animation_w = w->pending_g.width;
++ w->animation_h = w->pending_g.height;
++ break;
++ }
+ case OPEN_WINDOW_ANIMATION_INVALID: assert(false); break;
+ }
+ }
+@@ -599,10 +583,10 @@ static void init_animation_unmap(session_t *ps, struct managed_win *w) {
+ animation = OPEN_WINDOW_ANIMATION_SLIDE_RIGHT;
+ else if (animation == OPEN_WINDOW_ANIMATION_SLIDE_RIGHT)
+ animation = OPEN_WINDOW_ANIMATION_SLIDE_LEFT;
+- // else if (animation == OPEN_WINDOW_ANIMATION_SLIDE_IN)
+- // animation = OPEN_WINDOW_ANIMATION_SLIDE_OUT;
+- // else if (animation == OPEN_WINDOW_ANIMATION_SLIDE_OUT)
+- // animation = OPEN_WINDOW_ANIMATION_SLIDE_IN;
++ else if (animation == OPEN_WINDOW_ANIMATION_SLIDE_IN)
++ animation = OPEN_WINDOW_ANIMATION_SLIDE_OUT;
++ else if (animation == OPEN_WINDOW_ANIMATION_SLIDE_OUT)
++ animation = OPEN_WINDOW_ANIMATION_SLIDE_IN;
+
+ } else {
+ animation = ps->o.animation_for_unmap_window;
+@@ -611,12 +595,9 @@ static void init_animation_unmap(session_t *ps, struct managed_win *w) {
+ animation = ps->o.wintype_option[w->window_type].animation_unmap;
+ }
+
+- // if (ps->root_desktop_switch_direction != 0) {
+- // if (ps->o.animation_for_workspace_switch_out == OPEN_WINDOW_ANIMATION_AUTO)
+- // animation = OPEN_WINDOW_ANIMATION_SLIDE_OUT;
+- // else
+- // animation = ps->o.animation_for_workspace_switch_out;
+- // }
++ if (ps->root_desktop_switch_direction != 0) {
++ animation = OPEN_WINDOW_ANIMATION_SLIDE_OUT;
++ }
+
+ if (c2_match(ps, w, ps->o.animation_unmap_blacklist, NULL)) {
+ animation = OPEN_WINDOW_ANIMATION_NONE;
+@@ -679,28 +660,15 @@ static void init_animation_unmap(session_t *ps, struct managed_win *w) {
+ w->animation_dest_h = w->pending_g.height;
+ break;
+ }
+- // case OPEN_WINDOW_ANIMATION_SLIDE_IN: {
+- // w->animation_center_x = w->pending_g.x + w->pending_g.width * 0.5;
+- // w->animation_center_y = w->pending_g.y + w->pending_g.height * 0.5 -
+- // ps->root_height *
+- // ((ps->root_desktop_switch_direction < 0 &&
+- // ps->root_desktop_switch_direction >= -1) ||
+- // ps->root_desktop_switch_direction > 1?1:-1);
+- // w->animation_w = w->pending_g.width;
+- // w->animation_h = w->pending_g.height;
+- // break;
+- // }
+- // case OPEN_WINDOW_ANIMATION_SLIDE_OUT: {
+- // w->animation_dest_center_x = w->pending_g.x + w->pending_g.width * 0.5;
+- // w->animation_dest_center_y = w->pending_g.y + w->pending_g.height * 0.5 -
+- // ps->root_height *
+- // ((ps->root_desktop_switch_direction < 0 &&
+- // ps->root_desktop_switch_direction >= -1) ||
+- // ps->root_desktop_switch_direction > 1?-1:1);
+- // w->animation_dest_w = w->pending_g.width;
+- // w->animation_dest_h = w->pending_g.height;
+- // break;
+- // }
++ case OPEN_WINDOW_ANIMATION_SLIDE_OUT: {
++ w->animation_dest_center_x = w->pending_g.x + w->pending_g.width * 0.5 -
++ ps->root_width *
++ (ps->root_desktop_switch_direction < 0?-1:1);
++ w->animation_dest_center_y = w->pending_g.y + w->pending_g.height * 0.5;
++ w->animation_dest_w = w->pending_g.width;
++ w->animation_dest_h = w->pending_g.height;
++ break;
++ }
+ case OPEN_WINDOW_ANIMATION_INVALID: assert(false); break;
+ }
+ }
+@@ -1133,11 +1101,11 @@ double win_calc_opacity_target(session_t *ps, const struct managed_win *w) {
+ return 0;
+ }
+ if (w->state == WSTATE_UNMAPPING || w->state == WSTATE_DESTROYING) {
+- // if (ps->root_desktop_switch_direction)
+- // return w->opacity;
++// if (ps->root_desktop_switch_direction)
++// return w->opacity;
+
+- return 0;
+- }
++ return 0;
++ }
+ // Try obeying opacity property and window type opacity firstly
+ if (w->has_opacity_prop) {
+ opacity = ((double)w->opacity_prop) / OPAQUE;
diff --git a/config/bspwm/bspwmrc b/config/bspwm/bspwmrc
index f913564..29c66a3 100755
--- a/config/bspwm/bspwmrc
+++ b/config/bspwm/bspwmrc
@@ -11,7 +11,7 @@ xsetroot -cursor_name left_ptr &
xrdb ~/.config/Xdefaults
pgrep -x sxhkd > /dev/null || sxhkd &
-pgrep -x picom > /dev/null || picom &
+pgrep -x compfy > /dev/null || compfy &
pgrep -x xss-lock > /dev/null || xss-lock slock &
pgrep -x bg.sh > /dev/null || $HOME/.scripts/bg.sh > /dev/null &
diff --git a/config/compfy/compfy.conf b/config/compfy/compfy.conf
new file mode 100644
index 0000000..00c38a6
--- /dev/null
+++ b/config/compfy/compfy.conf
@@ -0,0 +1,499 @@
+
+# Enables patches for specific window managers.
+# Currently patched: "awesome", "dwm", "herb"
+wm-support = "none";
+
+#################################
+# ANIMATIONS #
+#################################
+
+# Toggles whether animations should be used for windows
+animations = true;
+
+# Changes animation stiffness.
+# What stiffness basically is inferring is how much the window geometry will be stretched,
+# when opening/closing windows
+animation-stiffness = 240;
+
+# Change the mass of windows
+# Modifying the mass of windows makes them virtually heavier and therefore slower to animate.
+animation-window-mass = 0.5;
+
+# Change dampening applied during the animation
+# This setting basically does what it says. It dampens the animation of windows.
+animation-dampening = 20;
+
+# Toggles clamping
+# if you are using a animation setting that would make the window extend larger than it would be after,
+# the animation has played then it will cut the animation off once the window reaches its physical geometry.
+animation-clamping = false;
+
+# Set the open window animation.
+# Options: ("none","zoom","fly-in","slide-up","slide-down","slide-left","slide-right")
+animation-for-open-window = "zoom";
+
+# Set the closing window animation.
+# Options: ("none","zoom","fly-in","slide-up","slide-down","slide-left","slide-right")
+animation-for-unmap-window = "zoom";
+
+# Exclude certain windows from having a open animation.
+
+# animation-open-exclude = [
+# "class_g = 'Dunst'"
+# ];
+
+# Exclude certain windows from having a closing animation.
+
+# animation-unmap-exclude = [
+# "class_g = 'Dunst'"
+# ];
+
+#################################
+# Corners #
+#################################
+# requires: https://github.com/sdhand/compton
+corner-radius = 6;
+round-borders = 0;
+
+# Specify a list of border width rules, in the format `PIXELS:PATTERN`,
+# Note we don't make any guarantee about possible conflicts with the
+# border_width set by the window manager.
+#
+# example:
+# round-borders-rule = [ "2:class_g = 'URxvt'" ];
+#
+round-borders-rule = [
+];
+
+#################################
+# Shadows #
+#################################
+
+
+# Enabled client-side shadows on windows. Note desktop windows
+# (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow,
+# unless explicitly requested using the wintypes option.
+#
+#shadow = false
+shadow = true;
+
+# The blur radius for shadows, in pixels. (defaults to 12)
+# shadow-radius = 12
+shadow-radius = 50;
+
+# The opacity of shadows. (1.0 - 1.0, defaults to 0.75)
+shadow-opacity = 1.0;
+
+# The left offset for shadows, in pixels. (defaults to -15)
+# shadow-offset-x = -15
+shadow-offset-x = -50;
+
+# The top offset for shadows, in pixels. (defaults to -15)
+# shadow-offset-y = -15
+shadow-offset-y = -50;
+
+# Don't draw shadows on drag-and-drop windows. This option is deprecated,
+# you should use the *wintypes* option in your config file instead.
+#
+#no-dnd-shadow = true
+#no-dock-shadow = false
+
+# Red color value of shadow (0.0 - 1.0, defaults to 0).
+#shadow-red = 0.86328125
+
+# Green color value of shadow (0.0 - 1.0, defaults to 0).
+#shadow-green = 0.2109375
+
+# Blue color value of shadow (0.0 - 1.0, defaults to 0).
+#shadow-blue = 0.015625
+
+# Do not paint shadows on shaped windows. Note shaped windows
+# here means windows setting its shape through X Shape extension.
+# Those using ARGB background is beyond our control.
+# Deprecated, use
+# shadow-exclude = 'bounding_shaped'
+# or
+# shadow-exclude = 'bounding_shaped && !rounded_corners'
+# instead.
+#
+# shadow-ignore-shaped = ''
+
+# Specify a list of conditions of windows that should have no shadow.
+#
+# examples:
+# shadow-exclude = "n:e:Notification";
+#
+# shadow-exclude = []
+shadow-exclude = [
+ "_GTK_FRAME_EXTENTS@:c",
+ #"_NET_WM_STATE@:32a"
+];
+
+# Specify a X geometry that describes the region in which shadow should not
+# be painted in, such as a dock window region. Use
+# shadow-exclude-reg = "x10+0+0"
+# for example, if the 10 pixels on the bottom of the screen should not have shadows painted on.
+#
+# shadow-exclude-reg = ""
+
+# Crop shadow of a window fully on a particular Xinerama screen to the screen.
+# xinerama-shadow-crop = false
+
+
+#################################
+# Fading #
+#################################
+
+
+# Fade windows in/out when opening/closing and when opacity changes,
+# unless no-fading-openclose is used.
+# fading = false
+fading = true;
+
+# Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028)
+# fade-in-step = 0.028
+fade-in-step = 0.01;
+
+# Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03)
+# fade-out-step = 0.03
+fade-out-step = 0.01;
+
+# The time between steps in fade step, in milliseconds. (> 0, defaults to 10)
+fade-delta = 4
+
+# Specify a list of conditions of windows that should not be faded.
+# don't need this, we disable fading for all normal windows with wintypes: {}
+fade-exclude = [
+ "class_g = 'slop'" # maim
+]
+
+# Do not fade on window open/close.
+# no-fading-openclose = false
+
+# Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox, Fluxbox, etc.
+# no-fading-destroyed-argb = false
+
+
+#################################
+# Transparency / Opacity #
+#################################
+
+
+# Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0)
+# inactive-opacity = 1
+
+# Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default)
+# frame-opacity = 1.0
+
+# Default opacity for dropdown menus and popup menus. (0.0 - 1.0, defaults to 1.0)
+# menu-opacity = 1.0
+
+# Let inactive opacity set by -i override the '_NET_WM_OPACITY' values of windows.
+# inactive-opacity-override = true
+inactive-opacity-override = false;
+
+# Default opacity for active windows. (0.0 - 1.0, defaults to 1.0)
+active-opacity = 1.0;
+
+# Dim inactive windows. (0.0 - 1.0, defaults to 0.0)
+# inactive-dim = 0.0
+
+# Specify a list of conditions of windows that should always be considered focused.
+# focus-exclude = []
+focus-exclude = [
+ "class_g = 'slop'" # maim
+];
+
+# Use fixed inactive dim value, instead of adjusting according to window opacity.
+# inactive-dim-fixed = 1.0
+
+# Specify a list of opacity rules, in the format `PERCENT:PATTERN`,
+# like `50:name *= "Firefox"`. picom-trans is recommended over this.
+# Note we don't make any guarantee about possible conflicts with other
+# programs that set '_NET_WM_WINDOW_OPACITY' on frame or client windows.
+# example:
+# opacity-rule = [ "80:class_g = 'URxvt'" ];
+#
+# opacity-rule = []
+opacity-rule = [
+ "100:class_g = 'slop'", # maim
+];
+
+
+#################################
+# Background-Blurring #
+#################################
+
+
+# Parameters for background blurring, see the *BLUR* section for more information.
+# blur-method = gaussian
+# blur-size = 12
+#
+# blur-deviation = false
+
+# Blur background of semi-transparent / ARGB windows.
+# Bad in performance, with driver-dependent behavior.
+# The name of the switch may change without prior notifications.
+#
+blur-background = true;
+
+# Blur background of windows when the window frame is not opaque.
+# Implies:
+# blur-background
+# Bad in performance, with driver-dependent behavior. The name may change.
+#
+# blur-background-frame = false;
+
+
+# Use fixed blur strength rather than adjusting according to window opacity.
+# blur-background-fixed = false;
+
+
+# Specify the blur convolution kernel, with the following format:
+# example:
+# blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1";
+#
+# blur-kern = ''
+# blur-kern = "3x3box";
+
+blur: {
+ # requires: https://github.com/ibhagwan/picom
+ method = "none";
+ #method = "kernel";
+ strength = 0;
+ # deviation = 1.0;
+ # kernel = "11x11gaussian";
+ background = false;
+ background-frame = false;
+ background-fixed = false;
+ kern = "3x3box";
+}
+
+# Exclude conditions for background blur.
+blur-background-exclude = [
+ "class_g = 'slop'",
+ "_GTK_FRAME_EXTENTS@:c"
+];
+
+
+#################################
+# General Settings #
+#################################
+
+# Daemonize process. Fork to background after initialization. Causes issues with certain (badly-written) drivers.
+daemon = true
+
+# Specify the backend to use: `xrender`, `glx`, or `xr_glx_hybrid`.
+# `xrender` is the default one.
+#
+experimental-backends = true;
+backend = "xrender";
+
+vsync = true
+
+# Enable remote control via D-Bus. See the *D-BUS API* section below for more details.
+# dbus = false
+
+# Try to detect WM windows (a non-override-redirect window with no
+# child that has 'WM_STATE') and mark them as active.
+#
+# mark-wmwin-focused = false
+mark-wmwin-focused = true;
+
+# Mark override-redirect windows that doesn't have a child window with 'WM_STATE' focused.
+# mark-ovredir-focused = false
+mark-ovredir-focused = true;
+
+# Try to detect windows with rounded corners and don't consider them
+# shaped windows. The accuracy is not very high, unfortunately.
+#
+detect-rounded-corners = true;
+
+# Detect '_NET_WM_OPACITY' on client windows, useful for window managers
+# not passing '_NET_WM_OPACITY' of client windows to frame windows.
+#
+#detect-client-opacity = false
+detect-client-opacity = true;
+
+# Specify refresh rate of the screen. If not specified or 0, picom will
+# try detecting this with X RandR extension.
+#
+# refresh-rate = 60
+refresh-rate = 0
+
+# Limit picom to repaint at most once every 1 / 'refresh_rate' second to
+# boost performance. This should not be used with
+# vsync drm/opengl/opengl-oml
+# as they essentially does sw-opti's job already,
+# unless you wish to specify a lower refresh rate than the actual value.
+#
+# sw-opti =
+
+# Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window,
+# rather than listening to 'FocusIn'/'FocusOut' event. Might have more accuracy,
+# provided that the WM supports it.
+#
+# use-ewmh-active-win = false
+
+# Unredirect all windows if a full-screen opaque window is detected,
+# to maximize performance for full-screen windows. Known to cause flickering
+# when redirecting/unredirecting windows. paint-on-overlay may make the flickering less obvious.
+#
+# unredir-if-possible = true
+
+# Delay before unredirecting the window, in milliseconds. Defaults to 0.
+# unredir-if-possible-delay = 0
+
+# Conditions of windows that shouldn't be considered full-screen for unredirecting screen.
+# unredir-if-possible-exclude = []
+
+# Use 'WM_TRANSIENT_FOR' to group windows, and consider windows
+# in the same group focused at the same time.
+#
+# detect-transient = false
+detect-transient = true
+
+# Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same
+# group focused at the same time. 'WM_TRANSIENT_FOR' has higher priority if
+# detect-transient is enabled, too.
+#
+# detect-client-leader = false
+detect-client-leader = true
+
+# Resize damaged region by a specific number of pixels.
+# A positive value enlarges it while a negative one shrinks it.
+# If the value is positive, those additional pixels will not be actually painted
+# to screen, only used in blur calculation, and such. (Due to technical limitations,
+# with use-damage, those pixels will still be incorrectly painted to screen.)
+# Primarily used to fix the line corruption issues of blur,
+# in which case you should use the blur radius value here
+# (e.g. with a 3x3 kernel, you should use `--resize-damage 1`,
+# with a 5x5 one you use `--resize-damage 2`, and so on).
+# May or may not work with *--glx-no-stencil*. Shrinking doesn't function correctly.
+#
+# resize-damage = 1
+
+# Specify a list of conditions of windows that should be painted with inverted color.
+# Resource-hogging, and is not well tested.
+#
+# invert-color-include = []
+
+# GLX backend: Avoid using stencil buffer, useful if you don't have a stencil buffer.
+# Might cause incorrect opacity when rendering transparent content (but never
+# practically happened) and may not work with blur-background.
+# My tests show a 15% performance boost. Recommended.
+#
+# glx-no-stencil = false
+
+# GLX backend: Avoid rebinding pixmap on window damage.
+# Probably could improve performance on rapid window content changes,
+# but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.).
+# Recommended if it works.
+#
+# glx-no-rebind-pixmap = false
+
+# Disable the use of damage information.
+# This cause the whole screen to be redrawn everytime, instead of the part of the screen
+# has actually changed. Potentially degrades the performance, but might fix some artifacts.
+# The opposing option is use-damage
+#
+# no-use-damage = false
+use-damage = true
+
+# Use X Sync fence to sync clients' draw calls, to make sure all draw
+# calls are finished before picom starts drawing. Needed on nvidia-drivers
+# with GLX backend for some users.
+#
+xrender-sync-fence = true
+
+# GLX backend: Use specified GLSL fragment shader for rendering window contents.
+# See `compton-default-fshader-win.glsl` and `compton-fake-transparency-fshader-win.glsl`
+# in the source tree for examples.
+#
+# glx-fshader-win = ''
+
+# Force all windows to be painted with blending. Useful if you
+# have a glx-fshader-win that could turn opaque pixels transparent.
+#
+# force-win-blend = false
+
+# Do not use EWMH to detect fullscreen windows.
+# Reverts to checking if a window is fullscreen based only on its size and coordinates.
+#
+# no-ewmh-fullscreen = false
+
+# Dimming bright windows so their brightness doesn't exceed this set value.
+# Brightness of a window is estimated by averaging all pixels in the window,
+# so this could comes with a performance hit.
+# Setting this to 1.0 disables this behaviour. Requires --use-damage to be disabled. (default: 1.0)
+#
+# max-brightness = 1.0
+
+# Make transparent windows clip other windows like non-transparent windows do,
+# instead of blending on top of them.
+#
+# transparent-clipping = false
+
+# Set the log level. Possible values are:
+# "trace", "debug", "info", "warn", "error"
+# in increasing level of importance. Case doesn't matter.
+# If using the "TRACE" log level, it's better to log into a file
+# using *--log-file*, since it can generate a huge stream of logs.
+#
+# log-level = "debug"
+log-level = "info";
+
+# Set the log file.
+# If *--log-file* is never specified, logs will be written to stderr.
+# Otherwise, logs will to written to the given file, though some of the early
+# logs might still be written to the stderr.
+# When setting this option from the config file, it is recommended to use an absolute path.
+#
+# log-file = '/path/to/your/log/file'
+
+# Show all X errors (for debugging)
+# show-all-xerrors = false
+
+# Write process ID to a file.
+# write-pid-path = '/path/to/your/log/file'
+
+# Window type settings
+#
+# 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard:
+# "unknown", "desktop", "dock", "toolbar", "menu", "utility",
+# "splash", "dialog", "normal", "dropdown_menu", "popup_menu",
+# "tooltip", "notification", "combo", and "dnd".
+#
+# Following per window-type options are available: ::
+#
+# fade, shadow:::
+# Controls window-type-specific shadow and fade settings.
+#
+# opacity:::
+# Controls default opacity of the window type.
+#
+# focus:::
+# Controls whether the window of this type is to be always considered focused.
+# (By default, all window types except "normal" and "dialog" has this on.)
+#
+# full-shadow:::
+# Controls whether shadow is drawn under the parts of the window that you
+# normally won't be able to see. Useful when the window has parts of it
+# transparent, and you want shadows in those areas.
+#
+# redir-ignore:::
+# Controls whether this type of windows should cause screen to become
+# redirected again after been unredirected. If you have unredir-if-possible
+# set, and doesn't want certain window to cause unnecessary screen redirection,
+# you can set this to `true`.
+#
+wintypes:
+{
+ normal = { fade = true; shadow = true;}
+ tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; };
+ dock = { full-shadow = true; }
+ dnd = { shadow = true; }
+ popup_menu = { shadow = true; }
+ dropdown_menu = { shadow = true; }
+};
+unredir-if-possible = false
diff --git a/config/vim/vimrc b/config/vim/vimrc
index 5444edb..6a568a8 100644
--- a/config/vim/vimrc
+++ b/config/vim/vimrc
@@ -112,8 +112,11 @@ Plug 'junegunn/fzf.vim'
nnoremap <F6> :Files<CR>
nnoremap <F7> :Rg<CR>
+
Plug 'heavenshell/vim-pydocstring', { 'do': 'make install', 'for': 'python' }
+Plug 'tpope/vim-fugitive'
+
call plug#end()
highlight Pmenu ctermbg=black guibg=black ctermfg=white
diff --git a/deploy.sh b/deploy.sh
index 744206c..cb42927 100755
--- a/deploy.sh
+++ b/deploy.sh
@@ -1,6 +1,6 @@
#!/bin/sh
-configurations="iocane bg bg.gif bspwm cava neofetch mpd mpv ncmpcpp vim sxhkd polybar picom rofi user-dirs.dirs gtk-3.0 zathura sx mimeapps.list"
+configurations="iocane bg bg.gif bspwm cava neofetch mpd mpv ncmpcpp vim sxhkd polybar compfy rofi user-dirs.dirs gtk-3.0 zathura sx mimeapps.list"
save () {
diff --git a/scripts/dmenu-iwd b/scripts/dmenu-iwd
new file mode 100755
index 0000000..a3cc411
--- /dev/null
+++ b/scripts/dmenu-iwd
@@ -0,0 +1,96 @@
+#!/bin/bash
+
+STATION="wlan0"
+FONT="Monospace"
+NORMAL_BACKGROUND="#000000"
+NORMAL_FOREGROUND="#8f8f8f"
+SELECTED_BACKGROUND="#000000"
+SELECTED_FOREGROUND="#00ff00"
+FLAGS=(
+ "-i"
+ "-nb" "$NORMAL_BACKGROUND"
+ "-nf" "$NORMAL_FOREGROUND"
+ "-sb" "$SELECTED_BACKGROUND"
+ "-sf" "$SELECTED_FOREGROUND"
+ "-fn" "$FONT"
+)
+
+remove_colors() {
+ sed -E 's/\x1B\[[0-9;]*[JKmsu]//g'
+}
+
+connect() {
+ SSID="$1"
+ notify-send --urgency=low "Attempting to connect to network: $SSID"
+ if iwctl station "$STATION" connect "$SSID" --dont-ask; then
+ notify-send "Connected to network: $SSID"
+ exit 0
+ fi
+ if ERROR=$(
+ iwctl station "$STATION" connect "$SSID" \
+ --passphrase "$(dmenu "${FLAGS[@]}" -p Password: </dev/null)" \
+ --dont-ask 2>&1
+ ); then
+ notify-send "Connected to network: $SSID"
+ else
+ notify-send --urgency=critical \
+ "Failed to connect to network: $SSID" "$(remove_colors <<<$ERROR)"
+ fi
+}
+
+networks() {
+ iwctl station "$STATION" get-networks | awk '
+BEGIN {
+ i = -1
+}
+{
+ i++
+ if (i < 4) next # skip header
+
+ network = ""
+ strength = 0
+ for (ix = 1; ix <= NF; ix++) {
+ if (ix == NF - 1) continue # skip protocol
+
+ # calculate strength by reading *s until
+ # a color code is encountered
+ char = sprintf("%c", $ix)
+ if (char == "*") {
+ split($ix, chars, "")
+ for (c = 1; c <= length($ix); c++) {
+ char = sprintf("%c", chars[c])
+ if (char == "\033") break
+ strength++
+ }
+ continue
+ }
+
+ if (char == "\033") continue # color codes
+ if ($ix == "") continue # whitespace
+ if ($ix == ">") continue # current network
+
+ # ssids may contain spaces
+ if (network == "") {
+ network = $ix
+ continue
+ }
+ network = network " " $ix
+ }
+ if (network == "") next
+ networks[network] = strength
+}
+END {
+ for (s = 4; s >= 0; s--) {
+ for (network in networks) {
+ if (networks[network] == s) {
+ print network
+ delete networks[network]
+ }
+ }
+ }
+}
+'
+}
+
+SELECTION=$(networks | dmenu "${FLAGS[@]}") || exit 1
+connect "$SELECTION"
diff --git a/scripts/tablet b/scripts/tablet
index 0cd6144..31c4871 100755
--- a/scripts/tablet
+++ b/scripts/tablet
@@ -69,11 +69,11 @@ for screen in screens:
#Size of the tablet
#Prioritize the width when scaling between aspect ratios
-tw = target[2]
+tw = target[2]
th = tw / tablet_ratio
if "-r" in sys.argv or "-l" in sys.argv:
- th = target[2]
+ th = target[2]
tw = th / tablet_ratio
#make a variable that will try to make the scale the same over diferent resoultions