From a21e7164751888433e7b307f33ef019cbb5f4a52 Mon Sep 17 00:00:00 2001 From: Syed Daanish Date: Wed, 29 Oct 2025 17:27:23 +0000 Subject: [PATCH] Add remote commands support --- kutu-run.rb | 17 +++++ kutu.rb | 49 ++++++++++--- src/c/X-kutu.c | 47 +++--------- src/c/X-kutu.h | 4 +- src/ruby/X-kutu.rb | 4 +- src/ruby/bindings.rb | 159 +++++++++++++++++++++++++++-------------- src/ruby/commands.rb | 29 ++++++++ src/ruby/controller.rb | 7 +- src/ruby/events.rb | 7 ++ src/ruby/utils.rb | 8 ++- src/ruby/window.rb | 7 +- src/ruby/workspace.rb | 11 ++- src/shell/startup.sh | 4 +- 13 files changed, 238 insertions(+), 115 deletions(-) create mode 100755 kutu-run.rb create mode 100644 src/ruby/commands.rb diff --git a/kutu-run.rb b/kutu-run.rb new file mode 100755 index 0000000..39f4fb1 --- /dev/null +++ b/kutu-run.rb @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby + +require "socket" + +SOCK_PATH = "/tmp/kutu.sock" + +client = Socket.new(:UNIX, :DGRAM) + +cli_addr_path = "/tmp/kutu_client#{Process.pid}.sock" +File.delete(cli_addr_path) if File.exist?(cli_addr_path) +client.bind(Socket.pack_sockaddr_un(cli_addr_path)) + +client.send(ARGV.join(" "), 0, Socket.pack_sockaddr_un(SOCK_PATH)) + +data, = client.recvfrom(1024) + +puts data diff --git a/kutu.rb b/kutu.rb index 73a5552..22803a4 100755 --- a/kutu.rb +++ b/kutu.rb @@ -5,6 +5,12 @@ require_relative "./src/ruby/X-kutu" +# Require dependencies + +require 'json' +require 'socket' + + # Initialize X if X.deploy >= 0 @@ -14,13 +20,14 @@ else end -# Require modules +# Require submodules -load File.join(__dir__, "./src/ruby/utils.rb") -load File.join(__dir__, "./src/ruby/controller.rb") -load File.join(__dir__, "./src/ruby/window.rb") -load File.join(__dir__, "./src/ruby/workspace.rb") -load File.join(__dir__, "./src/ruby/events.rb") +require_relative "./src/ruby/utils" +require_relative "./src/ruby/controller" +require_relative "./src/ruby/window" +require_relative "./src/ruby/workspace" +require_relative "./src/ruby/events" +require_relative "./src/ruby/commands" # Cleanup on exit @@ -36,11 +43,15 @@ end $monitors = {} $windows = {} +$all_windows = [] + $keybind_actions = {} $mousebind_actions = {} $mouse_data = {} + + $root = X.get_root $rect = {} @@ -60,9 +71,31 @@ run File.join(__dir__, "./src/shell/startup.sh") load File.join(__dir__, "./src/ruby/bindings.rb") +# Setup unix socket + +SOCK_PATH = "/tmp/kutu.sock" +File.delete(SOCK_PATH) if File.exist?(SOCK_PATH) + +$socket = Socket.new(:UNIX, :DGRAM) +$socket.bind(Socket.pack_sockaddr_un(SOCK_PATH)) + + # Main loop loop do - event = X.wait_for_event - handle_event event + if IO.select([$socket], nil, nil, 0) + command, sender = $socket.recvfrom(1024) + reply = handle_command(command) + $socket.send(JSON.generate(reply), 0, sender) + end + + event_pointer = X.next_event + if !event_pointer.null? + event = X.translate_event(event_pointer) + handle_event(event) + end + + X.flush + + sleep 0.001 end diff --git a/src/c/X-kutu.c b/src/c/X-kutu.c index 0f2209f..ca24edc 100644 --- a/src/c/X-kutu.c +++ b/src/c/X-kutu.c @@ -9,6 +9,9 @@ xcb_screen_t *scr; // Currently focused window xcb_window_t focuswin; +// Flush +void flush(void) { xcb_flush(conn); } + // Cleanup function to close the X connection on exit void cleanup(void) { if (conn != NULL) @@ -81,34 +84,21 @@ void subscribe(xcb_window_t win) { } // Kill a window -void kill(xcb_window_t window) { - xcb_kill_client(conn, window); - xcb_flush(conn); -} +void kill(xcb_window_t window) { xcb_kill_client(conn, window); } // Destroy a window -void destroy(xcb_window_t win) { - xcb_destroy_window(conn, win); - xcb_flush(conn); -} +void destroy(xcb_window_t win) { xcb_destroy_window(conn, win); } // Show a window -void show(xcb_window_t window) { - xcb_map_window(conn, window); - xcb_flush(conn); -} +void show(xcb_window_t window) { xcb_map_window(conn, window); } // Hide a window -void hide(xcb_window_t window) { - xcb_unmap_window(conn, window); - xcb_flush(conn); -} +void hide(xcb_window_t window) { xcb_unmap_window(conn, window); } // Bring a window to the top of the stack void send_to_top(xcb_window_t win) { uint32_t values[1] = {XCB_STACK_MODE_ABOVE}; xcb_configure_window(conn, win, XCB_CONFIG_WINDOW_STACK_MODE, values); - xcb_flush(conn); } // Get the geometry of a window @@ -139,7 +129,6 @@ Geometry get_screen(void) { // the center) void warp_pointer(xcb_window_t win, int x, int y) { xcb_warp_pointer(conn, XCB_NONE, win, 0, 0, 0, 0, x, y); - xcb_flush(conn); } // Move a window to a specific position @@ -147,7 +136,6 @@ void move_window(xcb_window_t win, int x, int y) { uint32_t values[2] = {x, y}; xcb_configure_window(conn, win, XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y, values); - xcb_flush(conn); } // Resize a window to specific dimensions @@ -155,7 +143,6 @@ void resize_window(xcb_window_t win, int width, int height) { uint32_t values[2] = {width, height}; xcb_configure_window( conn, win, XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT, values); - xcb_flush(conn); } xcb_size_hints_t get_wm_n_hints(xcb_window_t win) { @@ -200,8 +187,6 @@ void set_wm_state(xcb_window_t win, int state) { xcb_change_property(conn, XCB_PROP_MODE_REPLACE, win, WM_STATE, WM_STATE, 32, 2, data); - - xcb_flush(conn); } xcb_window_t draw_rectangle(int x, int y, int width, int height, @@ -242,9 +227,6 @@ xcb_window_t draw_rectangle(int x, int y, int width, int height, xcb_rectangle_t rect = {0, 0, width, height}; // relative to window xcb_poly_fill_rectangle(conn, win, gc, 1, &rect); - // Flush the connection to send commands to the server - xcb_flush(conn); - return win; } @@ -257,25 +239,18 @@ void grab_pointer(xcb_window_t win) { XCB_EVENT_MASK_POINTER_MOTION_HINT, XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC, XCB_NONE, XCB_NONE, XCB_CURRENT_TIME); - xcb_flush(conn); } -void ungrab_pointer(void) { - xcb_ungrab_pointer(conn, XCB_CURRENT_TIME); - xcb_flush(conn); -} +void ungrab_pointer(void) { xcb_ungrab_pointer(conn, XCB_CURRENT_TIME); } + +xcb_generic_event_t *next_event(void) { return xcb_poll_for_event(conn); } // Wait for an event and return it as an Event structure // This function is blocking // The event is sent by value, so no need to free anything -Event wait_for_event(void) { +Event translate_event(xcb_generic_event_t *ev) { Event ret = {0}; - xcb_flush(conn); - - xcb_generic_event_t *ev; - ev = xcb_wait_for_event(conn); - if (!ev) errx(1, "xcb connection broken"); diff --git a/src/c/X-kutu.h b/src/c/X-kutu.h index 7f101c0..04b4512 100644 --- a/src/c/X-kutu.h +++ b/src/c/X-kutu.h @@ -51,6 +51,7 @@ typedef struct Event { } Event; // Function prototypes +void flush(void); int deploy(void); void cleanup(void); @@ -89,6 +90,7 @@ xcb_window_t draw_rectangle(int x, int y, int width, int height, void grab_pointer(xcb_window_t win); void ungrab_pointer(void); -Event wait_for_event(void); +xcb_generic_event_t *next_event(void); +Event translate_event(xcb_generic_event_t *ev); #endif // X_KUTU_H diff --git a/src/ruby/X-kutu.rb b/src/ruby/X-kutu.rb index 0b54b7c..403789f 100644 --- a/src/ruby/X-kutu.rb +++ b/src/ruby/X-kutu.rb @@ -60,6 +60,7 @@ module X :window_group, :xcb_window_t end + attach_function :flush, [], :void attach_function :deploy, [], :int attach_function :add_keybind, [:int, :int], :void attach_function :add_mousebind, [:int, :int], :void @@ -79,7 +80,8 @@ module X attach_function :warp_pointer, [:xcb_window_t, :int, :int], :void attach_function :move_window, [:xcb_window_t, :int, :int], :void attach_function :resize_window, [:xcb_window_t, :int, :int], :void - attach_function :wait_for_event, [], Event.by_value + attach_function :translate_event, [:pointer], Event.by_value + attach_function :next_event, [], :pointer attach_function :get_wm_name, [:xcb_window_t], :string attach_function :get_wm_n_hints, [:xcb_window_t], SizeHints.by_value attach_function :get_wm_hints, [:xcb_window_t], WMHints.by_value diff --git a/src/ruby/bindings.rb b/src/ruby/bindings.rb index cc1c687..45faf70 100644 --- a/src/ruby/bindings.rb +++ b/src/ruby/bindings.rb @@ -1,71 +1,115 @@ -keybind(23) do |_event| +keybind 23 do |_event| run "firefox" end -keybind(24) do |event| +keybind 24 do |event| X.kill event[:window] end -keybind(25) do |_event| +keybind 25 do |_event| run "kitty" end -keybind(26) do |_event| - # run "~/dotfiles/scripts/power.sh" - exit 1 +keybind 26 do |_event| + run "~/dotfiles/scripts/power.sh" end -keybind(38) do |_event| +keybind 123, 0 do |_event| + run "pactl set-sink-volume @DEFAULT_SINK@ +5%;vol=$(pactl get-sink-volume @DEFAULT_SINK@ | grep -o '[0-9]\+%' | head -n1);dunstify 'Volume Adjusted' '' -h int:value:$vol -r 997" +end + +keybind 122, 0 do |_event| + run "pactl set-sink-volume @DEFAULT_SINK@ -5%;vol=$(pactl get-sink-volume @DEFAULT_SINK@ | grep -o '[0-9]\+%' | head -n1);dunstify 'Volume Adjusted' '' -h int:value:$vol -r 997" +end + +keybind 121, 0 do |_event| + run "pactl set-sink-mute @DEFAULT_SINK@ toggle;vol=$(pactl get-sink-volume @DEFAULT_SINK@ | grep -o '[0-9]\+%' | head -n1);dunstify 'Volume Adjusted' '' -h int:value:$vol -r 997" +end + +keybind 38 do |_event| run "maim -c 0.3,0.5,1.0,0.8 -s | tee /tmp/screenshot_temp.png | xclip -selection clipboard -t image/png && if [ -s '/tmp/screenshot_temp.png' ]; then mv /tmp/screenshot_temp.png ~/screenshots/$(date +%Y-%m-%d_%H:%M:%S).png; fi" end -keybind(54) do |_event| +keybind 54 do |_event| run "kitty -e fish -c \"y\"" end -keybind(53) do |_event| +keybind 53 do |_event| run "kitty -e fish -c \"editor\"" end -keybind(40) do |_event| +keybind 40 do |_event| run "~/dotfiles/scripts/run.sh" end -keybind(33) do |_event| +keybind 33 do |_event| run "~/.config/polybar/launch.sh" end -keybind(56) do |_event| +keybind 45 do |_event| + run "~/dotfiles/scripts/caffiene.sh" +end + +keybind 56 do |_event| monitor = current_monitor create_workspace monitor persistence_path = File.join(__dir__, ".num.json") persistence = File.exist?(persistence_path) ? JSON.parse(File.read(persistence_path), symbolize_names: true) : {} - persistence[$monitors.key(monitor)] = monitor[:workspaces].length + persistence[$monitors.key(monitor)] ||= {} + persistence[$monitors.key(monitor)][:length] = monitor[:workspaces].length File.write(persistence_path, JSON.pretty_generate(persistence)) end -keybind(57) do |_event| +keybind 57 do |_event| monitor = current_monitor delete_workspace monitor[:workspaces].length - 1, monitor persistence_path = File.join(__dir__, ".num.json") persistence = File.exist?(persistence_path) ? JSON.parse(File.read(persistence_path), symbolize_names: true) : {} - persistence[$monitors.key(monitor)] = monitor[:workspaces].length + persistence[$monitors.key(monitor)] ||= {} + persistence[$monitors.key(monitor)][:length] = monitor[:workspaces].length File.write(persistence_path, JSON.pretty_generate(persistence)) end -keybind(112, 0) do |_event| +keybind 110, 0 do |_event| + run "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause;" \ + "dbus-send --print-reply --dest=$(busctl --user list | grep -oP 'org.mpris.MediaPlayer2.firefox.instance_1_\d+') /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause" +end + +keybind 110 do |_event| monitor = current_monitor - next_ws = (monitor[:selected_workspace] + 1) % monitor[:workspaces].length + persistence_path = File.join(__dir__, ".num.json") + persistence = File.exist?(persistence_path) ? + JSON.parse(File.read(persistence_path), symbolize_names: true) : + {} + if monitor[:selected_workspace] == 0 + select_workspace persistence[$monitors.key(monitor)]&.[](:saved) || 1, monitor + else + persistence[$monitors.key(monitor)] ||= {} + persistence[$monitors.key(monitor)][:saved] = monitor[:selected_workspace] + File.write(persistence_path, JSON.pretty_generate(persistence)) + select_workspace 0, monitor + end +end + +keybind 118, 0 do |_event| + run "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause" +end + +keybind 117, 0 do |_event| + monitor = current_monitor + next if monitor[:selected_workspace].zero? + next_ws = (monitor[:selected_workspace] % (monitor[:workspaces].length - 1)) + 1 select_workspace next_ws, monitor end -keybind(112) do |_event| - monitor = current_monitor +keybind 117 do |_event| pointer = X.get_pointer + monitor = current_monitor pointer + next if monitor[:selected_workspace].zero? window = monitor[:workspaces][monitor[:selected_workspace]].windows.find do |w| pointer[:x] >= w.x && @@ -74,19 +118,21 @@ keybind(112) do |_event| pointer[:y] < w.y + w.height end - next_ws = (monitor[:selected_workspace] + 1) % monitor[:workspaces].length + next_ws = (monitor[:selected_workspace] % (monitor[:workspaces].length - 1)) + 1 monitor[:workspaces][next_ws].drop monitor[:workspaces][next_ws].tiled_windows.length, window if window end -keybind(117, 0) do |_event| +keybind 112, 0 do |_event| monitor = current_monitor - next_ws = (monitor[:selected_workspace] - 1) % monitor[:workspaces].length + next if monitor[:selected_workspace].zero? + next_ws = ((monitor[:selected_workspace] - 2) % (monitor[:workspaces].length - 1)) + 1 select_workspace next_ws, monitor end -keybind(117) do |_event| - monitor = current_monitor +keybind 112 do |_event| pointer = X.get_pointer + monitor = current_monitor pointer + next if monitor[:selected_workspace].zero? window = monitor[:workspaces][monitor[:selected_workspace]].windows.find do |w| pointer[:x] >= w.x && @@ -95,21 +141,22 @@ keybind(117) do |_event| pointer[:y] < w.y + w.height end - next_ws = (monitor[:selected_workspace] - 1) % monitor[:workspaces].length + next_ws = ((monitor[:selected_workspace] - 2) % (monitor[:workspaces].length - 1)) + 1 monitor[:workspaces][next_ws].drop monitor[:workspaces][next_ws].tiled_windows.length, window if window end -keybind(27) do |_event| +keybind 27 do |_event| + load File.join(__dir__, "./bindings.rb") monitor = current_monitor - return unless monitor + next unless monitor monitor[:workspaces][monitor[:selected_workspace]].switch_direction end -keybind(55) do |_event| +keybind 55 do |_event| run "rofi -modi 'clipboard:greenclip print' -show clipboard -run-command '{cmd}'" end -keybind(39) do |event| +keybind 39 do |event| window = $windows[event[:window]] window.toggle_floating if window end @@ -119,36 +166,17 @@ mousebind 1 mousebind 3 -mousebind(8, 0) do |_event| +mousebind 9, 0 do |_event| monitor = current_monitor - next_ws = (monitor[:selected_workspace] + 1) % monitor[:workspaces].length - select_workspace next_ws, monitor -end - -mousebind 8 do |_event| - monitor = current_monitor - pointer = X.get_pointer - - window = monitor[:workspaces][monitor[:selected_workspace]].windows.find do |w| - pointer[:x] >= w.x && - pointer[:x] < w.x + w.width && - pointer[:y] >= w.y && - pointer[:y] < w.y + w.height - end - - next_ws = (monitor[:selected_workspace] + 1) % monitor[:workspaces].length - monitor[:workspaces][next_ws].drop monitor[:workspaces][next_ws].tiled_windows.length, window if window -end - -mousebind(9, 0) do |_event| - monitor = current_monitor - next_ws = (monitor[:selected_workspace] - 1) % monitor[:workspaces].length + next if monitor[:selected_workspace].zero? + next_ws = (monitor[:selected_workspace] % (monitor[:workspaces].length - 1)) + 1 select_workspace next_ws, monitor end mousebind 9 do |_event| - monitor = current_monitor pointer = X.get_pointer + monitor = current_monitor pointer + next if monitor[:selected_workspace].zero? window = monitor[:workspaces][monitor[:selected_workspace]].windows.find do |w| pointer[:x] >= w.x && @@ -157,6 +185,29 @@ mousebind 9 do |_event| pointer[:y] < w.y + w.height end - next_ws = (monitor[:selected_workspace] - 1) % monitor[:workspaces].length + next_ws = (monitor[:selected_workspace] % (monitor[:workspaces].length - 1)) + 1 + monitor[:workspaces][next_ws].drop monitor[:workspaces][next_ws].tiled_windows.length, window if window +end + +mousebind 8, 0 do |_event| + monitor = current_monitor + next if monitor[:selected_workspace].zero? + next_ws = ((monitor[:selected_workspace] - 2) % (monitor[:workspaces].length - 1)) + 1 + select_workspace next_ws, monitor +end + +mousebind 8 do |_event| + pointer = X.get_pointer + monitor = current_monitor pointer + next if monitor[:selected_workspace].zero? + + window = monitor[:workspaces][monitor[:selected_workspace]].windows.find do |w| + pointer[:x] >= w.x && + pointer[:x] < w.x + w.width && + pointer[:y] >= w.y && + pointer[:y] < w.y + w.height + end + + next_ws = ((monitor[:selected_workspace] - 2) % (monitor[:workspaces].length - 1)) + 1 monitor[:workspaces][next_ws].drop monitor[:workspaces][next_ws].tiled_windows.length, window if window end diff --git a/src/ruby/commands.rb b/src/ruby/commands.rb new file mode 100644 index 0000000..01f8d07 --- /dev/null +++ b/src/ruby/commands.rb @@ -0,0 +1,29 @@ +def handle_command(command) + reply = {} + + command_parts = command.split(" ") + command = command_parts[0] + args = command_parts[1..-1] + + case command + when "get-ws" + monitor = args[0] ? $monitors[args[0].to_sym] : current_monitor + return reply if monitor.nil? + reply[:workspace] = monitor[:selected_workspace] + reply[:monitor] = $monitors.key(monitor) + reply[:count] = monitor[:workspaces].length + when "set-ws" + monitor = args[1] ? $monitors[args[1].to_sym] : current_monitor + return reply if monitor.nil? + select_workspace args[0].to_i, monitor + reply[:workspace] = monitor[:selected_workspace] + reply[:monitor] = $monitors.key(monitor) + reply[:count] = monitor[:workspaces].length + when "topped" + reply[:topped] = $topped_windows + when "stop" + exit 1 + end + + reply +end diff --git a/src/ruby/controller.rb b/src/ruby/controller.rb index a1ef0a2..c082131 100644 --- a/src/ruby/controller.rb +++ b/src/ruby/controller.rb @@ -4,7 +4,7 @@ def create_workspace(monitor) end def delete_workspace(n, monitor) - return if monitor[:workspaces].length <= 1 + return if monitor[:workspaces].length <= 2 monitor[:workspaces][n].windows.each { |w| monitor[:workspaces][(n - 1) % monitor[:workspaces].length].drop 0, w } monitor[:workspaces].delete_at n if monitor[:selected_workspace] >= n @@ -13,6 +13,11 @@ def delete_workspace(n, monitor) end def select_workspace(n, monitor) + if n >= monitor[:workspaces].length + select_workspace monitor[:workspaces].length - 1, monitor + elsif n < 0 + select_workspace 1, monitor + end monitor[:workspaces].each { |w| w.hide if w != monitor[:workspaces][n] } monitor[:selected_workspace] = n monitor[:workspaces][n].show diff --git a/src/ruby/events.rb b/src/ruby/events.rb index fad36a6..c9b87f2 100644 --- a/src/ruby/events.rb +++ b/src/ruby/events.rb @@ -20,12 +20,15 @@ def handle_event(event) when :create + $all_windows << event[:window] return unless event[:override_redirect].zero? X.subscribe event[:window] when :closed + $all_windows.delete event[:window] $windows[event[:window]]&.delete + X.focus $root when :enter @@ -37,6 +40,10 @@ def handle_event(event) if $windows[event[:window]].nil? monitor[:workspaces][monitor[:selected_workspace]].create event[:window] X.show event[:window] + $all_windows.each do |window| + above = `xprop -id #{window} _NET_WM_STATE` + X.send_to_top window if above.include?("ABOVE") + end end diff --git a/src/ruby/utils.rb b/src/ruby/utils.rb index e3556cf..d4c8c2c 100644 --- a/src/ruby/utils.rb +++ b/src/ruby/utils.rb @@ -1,5 +1,3 @@ -require 'json' - def keybind(key, mod = 1, &block) X.add_keybind key, mod $keybind_actions[[key, mod]] = block if block @@ -31,7 +29,11 @@ def load_monitors! next unless line =~ /(\d+)x(\d+)\+(\d+)\+(\d+)/ w, h, x, y = $1.to_i, $2.to_i, $3.to_i, $4.to_i key = index.zero? ? :primary : :secondary - $monitors[key] = { x: x, y: y, width: w, height: h, workspaces: Array.new(persistence[key] || 1) { Workspace.new(key) }, selected_workspace: 0 } + $monitors[key] = { + x: x, y: y, width: w, height: h, + workspaces: Array.new(persistence[key]&.[](:length) || 2) { Workspace.new(key) }, + selected_workspace: 1 + } end end diff --git a/src/ruby/window.rb b/src/ruby/window.rb index abfcd7b..dc7d7e2 100644 --- a/src/ruby/window.rb +++ b/src/ruby/window.rb @@ -22,12 +22,7 @@ class Window apply_geometry! end end - wm_hints = X.get_wm_hints(window_id) - if wm_hints - if wm_hints[:flags] & 1 != 0 && wm_hints[:initial_state] == 3 - X.set_wm_state window_id, 1 - end - end + X.set_wm_state window_id, 1 transient_for = X.get_wm_transient_for(window_id) unless transient_for.zero? @floating = true diff --git a/src/ruby/workspace.rb b/src/ruby/workspace.rb index 88a3712..aaf4432 100644 --- a/src/ruby/workspace.rb +++ b/src/ruby/workspace.rb @@ -144,10 +144,17 @@ class Workspace end def hide - self.windows.each { |window| X.hide window.window_id } + self.windows.each do |window| + X.hide window.window_id + X.set_wm_state window.window_id, 3 + end + X.focus $root end def show - self.windows.each { |window| X.show window.window_id } + self.windows.each do |window| + X.show window.window_id + X.set_wm_state window.window_id, 1 + end end end diff --git a/src/shell/startup.sh b/src/shell/startup.sh index 7522811..c49e02b 100755 --- a/src/shell/startup.sh +++ b/src/shell/startup.sh @@ -2,7 +2,7 @@ picom --config ~/.config/i3/picom.conf & greenclip daemon & -xss-lock --transfer-sleep-lock -- ~/dotfiles/scripts/lock.sh & +# xss-lock --transfer-sleep-lock -- ~/dotfiles/scripts/lock.sh & dunst -config ~/.config/dunst/dunstrc & bluetoothctl power off @@ -13,5 +13,3 @@ xsetroot -cursor_name left_ptr xrdb ~/.Xresources setxkbmap us - -~/.config/polybar/launch.sh special &>>"$LOGFILE" &