changed color and positioning

This commit is contained in:
Maximilian Wagner 2024-02-23 23:41:24 +01:00
commit 0a845fddc1
6 changed files with 233 additions and 0 deletions

17
config Normal file
View File

@ -0,0 +1,17 @@
hide_scroll=true
show=drun
width=25%
lines=10
line_wrap=word
term=kitty
allow_markup=true
always_parse_args=true
show_all=true
print_command=true
layer=overlay
allow_images=true
insensitive=true
prompt=
image_size=15
display_generic=true
location=center

9
config.power Normal file
View File

@ -0,0 +1,9 @@
hide_search=true
hide_scroll=true
insensitive=true
show=dmenu
width=100
lines=4
location=top_right
x=-100
y=0

9
config.screenshot Normal file
View File

@ -0,0 +1,9 @@
hide_search=true
hide_scroll=true
insensitive=true
width=100
show=dmenu
lines=5
location=top_left
x=0
y=0

47
style.css Normal file
View File

@ -0,0 +1,47 @@
/*
Arc-Dark Color Scheme
*/
/*
Catppuccin Color Scheme
*/
@define-color highlight #585b70 ;
@define-color background #1E1E2E ;
@define-color border #B4BEFE ;
@define-color chars #cdd6f4 ;
*{
font-family: UbuntuMono;
}
window {
border: 1px solid @highlight;
}
#input {
margin-bottom: 15px;
padding:3px;
border-radius: 5px;
border: 0px solid @border;
color: @chars;
}
#inner-box {
background-color: @background;
}
#outer-box {
padding: 15px;
border: 1px solid @border;
background-color: @background;
}
#text {
padding: 5px;
color: @chars;
}
#entry:selected {
background-color: @highlight;
}

32
style.widgets.css Normal file
View File

@ -0,0 +1,32 @@
/*
Arc-Dark Color Scheme
*/
@define-color highlight #585b70 ;
@define-color background #1E1E2E ;
@define-color border #B4BEFE ;
@define-color chars #cdd6f4 ;
*{
font-family: UbuntuMono;
}
#inner-box {
background-color: @background;
}
#outer-box {
padding: 15px;
margin-top: -22px;
border: 1px solid @border;
background-color: @background;
}
#text {
padding: 5px;
color: @chars;
}
#entry:selected {
background-color: @highlight;
}

119
windows.py Executable file
View File

@ -0,0 +1,119 @@
#!/bin/python3
import json
import subprocess
from argparse import ArgumentParser
ENTER = "\n"
def get_windows():
command = "swaymsg -t get_tree"
process = subprocess.Popen(
command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE
)
process = subprocess.Popen(
command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE
)
data = json.loads(process.communicate()[0])
# Select outputs that are active
windows = []
for output in data["nodes"]:
# The scratchpad (under __i3) is not supported
if output.get("name") != "__i3" and output.get("type") == "output":
workspaces = output.get("nodes", [])
for ws in workspaces:
if ws.get("type") == "workspace":
windows.extend(extract_nodes_iterative(ws))
return windows
# Extracts all windows from a sway workspace json object
def extract_nodes_iterative(workspace):
all_nodes = []
floating_nodes = workspace.get("floating_nodes", [])
for floating_node in floating_nodes:
all_nodes.append(floating_node)
nodes = workspace.get("nodes", [])
for node in nodes:
# Leaf node
if not node.get("nodes"):
all_nodes.append(node)
# Nested node, handled iterative
else:
for inner_node in node.get("nodes"):
nodes.append(inner_node)
return all_nodes
# Returns an array of all windows
def parse_windows(windows):
return [window.get("name") for window in windows]
# Returns a newline seperated UFT-8 encoded string of all windows for wofi
def build_wofi_string(windows):
return ENTER.join(windows).encode("UTF-8")
# Executes wofi with the given input string
def show_wofi(windows):
command = 'wofi -c ~/.config/wofi/menu -s ~/.config/wofi/style.css -p "Windows: " -d -i --hide-scroll'
process = subprocess.Popen(
command, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE
)
return process.communicate(input=windows)[0]
# Returns the sway window id of the window that was selected by the user inside wofi
def parse_id(windows, parsed_windows, selected):
if not selected:
return None
else:
selected = (selected.decode("UTF-8"))[:-1] # Remove new line character
window_index = int(
parsed_windows.index(selected)
) # Get index of selected window in the parsed window array
return str(
windows[window_index].get("id")
) # Get sway window id based on the index
# Switches the focus to the given id
def switch_window(id):
command = "swaymsg [con_id={}] focus".format(id)
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
process.communicate()[0]
# Entry point
if __name__ == "__main__":
parser = ArgumentParser(description="Wofi based window switcher")
windows = get_windows()
parsed_windows = parse_windows(windows)
wofi_string = build_wofi_string(parsed_windows)
selected = show_wofi(wofi_string)
# Otherwise no point in running
if selected:
selected_id = parse_id(windows, parsed_windows, selected)
switch_window(selected_id)