imported previous rust projects and cleaned up unused files
This commit is contained in:
		
							parent
							
								
									0166b32872
								
							
						
					
					
						commit
						10b8db251b
					
				
					 432 changed files with 874 additions and 1585 deletions
				
			
		| 
						 | 
				
			
			@ -1,187 +0,0 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
ICON_THEME="ePapirus-Dark"
 | 
			
		||||
 | 
			
		||||
declare -A occupiedWorkspaces
 | 
			
		||||
declare -A workspaceActiveOn
 | 
			
		||||
declare -A workspaces
 | 
			
		||||
PIDs=()
 | 
			
		||||
workspaces=()
 | 
			
		||||
A=()
 | 
			
		||||
image=()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# get the monitors workspaces are active on and get workspaces that exist
 | 
			
		||||
 | 
			
		||||
workspace_event() {
 | 
			
		||||
 | 
			
		||||
    unset workspaceActiveOn
 | 
			
		||||
	unset occupiedWorkspaces
 | 
			
		||||
 | 
			
		||||
# store the monitor id in workspaceActiveOn with the index of the active workspace
 | 
			
		||||
 | 
			
		||||
    while read -r m w; do
 | 
			
		||||
        workspaceActiveOn[$w]=$m
 | 
			
		||||
    done < <(hyprctl -j monitors | jq -r '.[]|"\(.id) \(.activeWorkspace.id)"')
 | 
			
		||||
 | 
			
		||||
# set occupiedWorkspaces with the workspace as its index true if the index exists
 | 
			
		||||
 | 
			
		||||
    while read -r i; do
 | 
			
		||||
        if (( $i > 0 )); then
 | 
			
		||||
            occupiedWorkspaces[$i]=true
 | 
			
		||||
        fi
 | 
			
		||||
    done < <(hyprctl -j workspaces | jq -r '.[]|"\(.id)"')
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
client_event() {
 | 
			
		||||
 | 
			
		||||
unset clientOnWorkspace
 | 
			
		||||
unset PIDs
 | 
			
		||||
unset classes
 | 
			
		||||
unset icons
 | 
			
		||||
 | 
			
		||||
    classes=()
 | 
			
		||||
    clientOnWorkspace=()
 | 
			
		||||
    images=()
 | 
			
		||||
    numberOnWorkspace=()
 | 
			
		||||
    area=()
 | 
			
		||||
    i=0
 | 
			
		||||
 | 
			
		||||
    while read -r p w x y c; do
 | 
			
		||||
        if [[ $c ]]; then
 | 
			
		||||
 | 
			
		||||
# read PIDs of all clients in consecutive order
 | 
			
		||||
 | 
			
		||||
            PIDs[$i]="$p"
 | 
			
		||||
 | 
			
		||||
# store class of process at index of its PID
 | 
			
		||||
 | 
			
		||||
            classes[$p]="$c"
 | 
			
		||||
 | 
			
		||||
# store workspace process is on at index of its PID
 | 
			
		||||
 | 
			
		||||
            clientOnWorkspace[$p]="$w"
 | 
			
		||||
 | 
			
		||||
# increment numberOnWorkspace by one to reflect amount of clients on it
 | 
			
		||||
 | 
			
		||||
            ((numberOnWorkspace[w]+=1))
 | 
			
		||||
 | 
			
		||||
# store area of the process at index of its PID
 | 
			
		||||
 | 
			
		||||
            area[$p]=$((x * y))
 | 
			
		||||
 | 
			
		||||
# get icon in a hacky way
 | 
			
		||||
 | 
			
		||||
            desktop=$(grep -l "StartupWMClass.*$c$" /usr/share/applications/*.desktop)
 | 
			
		||||
            if [ -z $desktop ]; then
 | 
			
		||||
                desktop=$(grep -Pl "Name\s*=\s*$c$" /usr/share/applications/*.desktop)
 | 
			
		||||
            fi
 | 
			
		||||
            if [ -z $desktop ]; then
 | 
			
		||||
                desktop=$(ls /usr/share/applications | grep -l /usr/share/applications/${c}.desktop)
 | 
			
		||||
            fi
 | 
			
		||||
            if [ -z $desktop ]; then
 | 
			
		||||
                process=$(ps -p ${p} -o comm=)
 | 
			
		||||
                desktop=$(grep -Pl "$process" /usr/share/applications/*.desktop)
 | 
			
		||||
            fi
 | 
			
		||||
            if [ -z $desktop ]; then
 | 
			
		||||
                desktop=$(grep -Pli "$c" /usr/share/applications/*.desktop)
 | 
			
		||||
            fi
 | 
			
		||||
            if [ -z $desktop ]; then
 | 
			
		||||
                continue
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            image=$(awk -F'[[:space:]]*=[[:space:]]*' '/Icon[[:space:]]*=/{print $2}' $desktop)
 | 
			
		||||
            icons[$p]="/usr/share/icons/Papirus-Dark/128x128/apps/${image}.svg"
 | 
			
		||||
            ((i=$i+1))
 | 
			
		||||
            
 | 
			
		||||
        fi
 | 
			
		||||
    done < <(hyprctl clients -j | jq -r '.[]|"\(.pid) \(.workspace.id) \(.size[0]) \(.size[1]) \(.initialClass)"')
 | 
			
		||||
 | 
			
		||||
# store json string of all client information at the index of the clients pid
 | 
			
		||||
 | 
			
		||||
    for ((i=0; i<${#PIDs[@]}; i++)); do
 | 
			
		||||
        PID=${PIDs[$i]}
 | 
			
		||||
        clientInfos[PID]='{"onWorkspace":"'${clientOnWorkspace[$PID]}'","pid":"'${PID}'","class":"'${classes[$PID]}'","mainOn":"''","icon":"'${icons[$PID]}'"}'
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# generate the json for eww
 | 
			
		||||
generate() {
 | 
			
		||||
 | 
			
		||||
    unset message
 | 
			
		||||
    
 | 
			
		||||
    message='['
 | 
			
		||||
 | 
			
		||||
    for i in {1..9}; do
 | 
			
		||||
 | 
			
		||||
        message=$message''$([ $i -eq 1 ] || echo ,)'{"ID":"'$i'","occupied":"'${occupiedWorkspaces[$i]}'","activeID":"'${workspaceActiveOn[$i]}'","clients":['
 | 
			
		||||
 | 
			
		||||
        firstClient=0
 | 
			
		||||
 | 
			
		||||
        for ((j=0; j<${#PIDs[@]}; j++)); do
 | 
			
		||||
 | 
			
		||||
            PID=${PIDs[j]}
 | 
			
		||||
            
 | 
			
		||||
            if [[ $(echo ${clientInfos[$PID]} | jq '"\(.onWorkspace)"') == '"'${i}'"' ]]; then
 | 
			
		||||
                message=$message''$([ $firstClient -eq 0 ] || echo ,)''${clientInfos[$PID]}''
 | 
			
		||||
                firstClient=1
 | 
			
		||||
            fi
 | 
			
		||||
            
 | 
			
		||||
        done
 | 
			
		||||
 | 
			
		||||
        message=$message']}'
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    message="${message}]"
 | 
			
		||||
 | 
			
		||||
    echo $message
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# setup
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# generate initial widget
 | 
			
		||||
workspace_event
 | 
			
		||||
client_event
 | 
			
		||||
generate
 | 
			
		||||
 | 
			
		||||
socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | while read -r line; do
 | 
			
		||||
    case ${line%>>*} in
 | 
			
		||||
        "workspace")
 | 
			
		||||
            workspace_event
 | 
			
		||||
            generate
 | 
			
		||||
            ;;
 | 
			
		||||
#        "createworkspace")
 | 
			
		||||
#            workspace_event
 | 
			
		||||
#            generate
 | 
			
		||||
#            ;;
 | 
			
		||||
#        "destroyworkspace")
 | 
			
		||||
#            workspace_event
 | 
			
		||||
#            generate
 | 
			
		||||
#            ;;
 | 
			
		||||
#        "moveworkspace")
 | 
			
		||||
#            workspace_event
 | 
			
		||||
#            generate
 | 
			
		||||
#            ;;
 | 
			
		||||
        "openwindow")
 | 
			
		||||
            client_event
 | 
			
		||||
            generate
 | 
			
		||||
            ;;
 | 
			
		||||
        "closewindow")
 | 
			
		||||
            client_event
 | 
			
		||||
            generate
 | 
			
		||||
            ;;
 | 
			
		||||
        "movewindow")
 | 
			
		||||
            client_event
 | 
			
		||||
            workspace_event
 | 
			
		||||
            generate
 | 
			
		||||
            ;;
 | 
			
		||||
    esac
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -1,43 +0,0 @@
 | 
			
		|||
#include <filesystem>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <string>
 | 
			
		||||
#include <fstream>
 | 
			
		||||
 | 
			
		||||
namespace fs = std::filesystem;
 | 
			
		||||
 | 
			
		||||
const std::string dir = "/usr/share/applications";
 | 
			
		||||
 | 
			
		||||
int main(int argc, char const *argv[])
 | 
			
		||||
{
 | 
			
		||||
    for (const auto& entry : fs::directory_iterator(dir))
 | 
			
		||||
    {
 | 
			
		||||
        if (entry.path().extension() == ".desktop")
 | 
			
		||||
        {
 | 
			
		||||
            std::ifstream file(entry.path());
 | 
			
		||||
            if (!file.is_open())
 | 
			
		||||
            {
 | 
			
		||||
                std::cerr << "file not opened" << std::endl;
 | 
			
		||||
                return 1;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            std::string output;
 | 
			
		||||
            std::string line;
 | 
			
		||||
 | 
			
		||||
            while (std::getline(file, line))
 | 
			
		||||
            {
 | 
			
		||||
                output += line + "\n";
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            
 | 
			
		||||
            std::cout << output << std::endl;
 | 
			
		||||
 | 
			
		||||
            file.close();
 | 
			
		||||
            
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,65 +0,0 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
PIDs=()
 | 
			
		||||
classes=()
 | 
			
		||||
clientOnWorkspace=()
 | 
			
		||||
images=()
 | 
			
		||||
numberOnWorkspace=()
 | 
			
		||||
area=()
 | 
			
		||||
i=0
 | 
			
		||||
 | 
			
		||||
while read -r p w x y c; do
 | 
			
		||||
    if [[ $c ]]; then
 | 
			
		||||
 | 
			
		||||
        PIDs[$i]="$p"
 | 
			
		||||
        classes[$p]="$c"
 | 
			
		||||
        clientOnWorkspace[$p]="$w"
 | 
			
		||||
        ((numberOnWorkspace[w]+=1))
 | 
			
		||||
        area[$p]=$((x * y))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        desktop=$(grep -l "StartupWMClass.*$c$" /usr/share/applications/*.desktop)
 | 
			
		||||
        echo $c
 | 
			
		||||
        if [ -z $desktop ]; then
 | 
			
		||||
            desktop=$(grep -Pl "Name\s*=\s*$c$" /usr/share/applications/*.desktop)
 | 
			
		||||
        fi
 | 
			
		||||
        if [ -z $desktop ]; then
 | 
			
		||||
            desktop=$(ls /usr/share/applications | grep -l /usr/share/applications/${c}.desktop)
 | 
			
		||||
        fi
 | 
			
		||||
        if [ -z $desktop ]; then
 | 
			
		||||
            process=$(ps -p ${p} -o comm=)
 | 
			
		||||
            desktop=$(grep -Pl "$process" /usr/share/applications/*.desktop)
 | 
			
		||||
        fi
 | 
			
		||||
        if [ -z $desktop ]; then
 | 
			
		||||
            desktop=$(grep -Pli "$c" /usr/share/applications/*.desktop)
 | 
			
		||||
        fi
 | 
			
		||||
        if [ -z $desktop ]; then
 | 
			
		||||
            continue
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        images[$p]=$(awk -F'[[:space:]]*=[[:space:]]*' '/Icon[[:space:]]*=/{print $2}' $desktop)
 | 
			
		||||
        ls /usr/share/icons/ePapirus-Dark/128x128/apps/${images[$p]}.svg
 | 
			
		||||
        ((i=$i+1))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    fi
 | 
			
		||||
done < <(hyprctl clients -j | jq -r '.[]|"\(.pid) \(.workspace.id) \(.size[0]) \(.size[1]) \(.initialClass)"')
 | 
			
		||||
 | 
			
		||||
for ((i=0; i<${#PIDs[@]}; i++)); do
 | 
			
		||||
    PID=${PIDs[$i]}
 | 
			
		||||
    clientInfos[PID]='{"onWorkspace":"'${clientOnWorkspace[$PID]}'","pid":"'${PID}'","class":"'${classes[$PID]}'","mainOn":"''","icon":"'${images[$PID]}'"}'
 | 
			
		||||
    echo ${clientInfos[$PID]}
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#for window in ${!windows[@]}; do
 | 
			
		||||
#  echo -n "${window} "
 | 
			
		||||
#  echo $(ps -p ${windows[$window]} -o comm=)
 | 
			
		||||
#done
 | 
			
		||||
 | 
			
		||||
#test=$(ps -p ${windows[2]} -o comm=)
 | 
			
		||||
#$(feh /usr/share/icons/Papirus-Dark/128x128/apps/${test}.svg)
 | 
			
		||||
| 
						 | 
				
			
			@ -1,102 +0,0 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# get initial focused workspace
 | 
			
		||||
focusedws=$(hyprctl -j monitors | jq -r '.[] | select(.focused == true) | .activeWorkspace.id')
 | 
			
		||||
 | 
			
		||||
declare -A o=([1]=0 [2]=0 [3]=0 [4]=0 [5]=0 [6]=0 [7]=0 [8]=0 [9]=0 [10]=0)
 | 
			
		||||
declare -A monitormap
 | 
			
		||||
declare -A workspaces
 | 
			
		||||
 | 
			
		||||
# handle workspace create/destroy
 | 
			
		||||
workspace_event() {
 | 
			
		||||
    if (( $1 <= 10 )); then
 | 
			
		||||
        o[$1]=$2
 | 
			
		||||
        while read -r k v; do workspaces[$k]="$v"; done < <(hyprctl -j workspaces | jq -r '.[]|"\(.id) \(.monitor)"')
 | 
			
		||||
    fi
 | 
			
		||||
    if [ "$2" == "0" ]; then
 | 
			
		||||
        unset "workspaces[$1]"
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# handle monitor (dis)connects
 | 
			
		||||
monitor_event() {
 | 
			
		||||
    while read -r k v; do monitormap["$k"]=$v; done < <(hyprctl -j monitors | jq -r '.[]|"\(.name) \(.id) "')
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# generate the json for eww
 | 
			
		||||
generate() {
 | 
			
		||||
 | 
			
		||||
    unset activeWorkspaces
 | 
			
		||||
 | 
			
		||||
    while read -r i w; do
 | 
			
		||||
        activeWorkspaces[$w]=$i
 | 
			
		||||
    done < <(hyprctl -j monitors | jq -r '.[]|"\(.id) \(.activeWorkspace.id)"')
 | 
			
		||||
    
 | 
			
		||||
    echo -n '['
 | 
			
		||||
 | 
			
		||||
    for i in {1..10}; do
 | 
			
		||||
        echo -n ''$([ $i -eq 1 ] || echo ,)'{"ID":"'$i'","occupied":"'${o[$i]}'","activeID":"'${activeWorkspaces[$i]}'"}'
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    echo ']'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# setup
 | 
			
		||||
 | 
			
		||||
# add monitors
 | 
			
		||||
monitor_event
 | 
			
		||||
 | 
			
		||||
# add workspaces
 | 
			
		||||
while read -r k v; do workspaces[$k]="$v"; done < <(hyprctl -j workspaces | jq -r '.[]|"\(.id) \(.monitor)"')
 | 
			
		||||
 | 
			
		||||
# get active workspace
 | 
			
		||||
activeWorkspace=$(hyprctl -j monitors | jq -r '.[] | select(.focused == true) | .activeWorkspace.id')
 | 
			
		||||
 | 
			
		||||
# check occupied workspaces
 | 
			
		||||
for num in "${!workspaces[@]}"; do
 | 
			
		||||
    o[$num]=1
 | 
			
		||||
done
 | 
			
		||||
# generate initial widget
 | 
			
		||||
generate
 | 
			
		||||
 | 
			
		||||
socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | while read -r line; do
 | 
			
		||||
    case ${line%>>*} in
 | 
			
		||||
        "createworkspace")
 | 
			
		||||
            o=([1]=0 [2]=0 [3]=0 [4]=0 [5]=0 [6]=0 [7]=0 [8]=0 [9]=0 [10]=0)
 | 
			
		||||
            workspaces=()
 | 
			
		||||
            # add workspaces
 | 
			
		||||
            while read -r k v; do workspaces[$k]="$v"; done < <(hyprctl -j workspaces | jq -r '.[]|"\(.id) \(.monitor)"')
 | 
			
		||||
            # check occupied workspaces
 | 
			
		||||
            for num in "${!workspaces[@]}"; do
 | 
			
		||||
                o[$num]=1
 | 
			
		||||
            done
 | 
			
		||||
            # focusedws=${line#*>>}
 | 
			
		||||
            generate
 | 
			
		||||
            ;;
 | 
			
		||||
        "movewindow")
 | 
			
		||||
            generate
 | 
			
		||||
            ;;
 | 
			
		||||
        "moveworkspace")
 | 
			
		||||
            generate
 | 
			
		||||
            ;;
 | 
			
		||||
        "destroyworkspace")
 | 
			
		||||
            o=([1]=0 [2]=0 [3]=0 [4]=0 [5]=0 [6]=0 [7]=0 [8]=0 [9]=0 [10]=0)
 | 
			
		||||
            workspaces=()
 | 
			
		||||
            # add workspaces
 | 
			
		||||
            while read -r k v; do workspaces[$k]="$v"; done < <(hyprctl -j workspaces | jq -r '.[]|"\(.id) \(.monitor)"')
 | 
			
		||||
            # check occupied workspaces
 | 
			
		||||
            for num in "${!workspaces[@]}"; do
 | 
			
		||||
                o[$num]=1
 | 
			
		||||
            done
 | 
			
		||||
            generate
 | 
			
		||||
            ;;
 | 
			
		||||
        "monitor"*)
 | 
			
		||||
            monitor_event
 | 
			
		||||
            generate
 | 
			
		||||
            ;;
 | 
			
		||||
        "workspace")
 | 
			
		||||
            generate
 | 
			
		||||
            ;;
 | 
			
		||||
    esac
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue