diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e9d30ae6..eadd07525 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,19 @@ All notable changes to `HyDE` will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to _Modified_ [CalVer](https://calver.org/). See [Versioning](https://github.com/HyDE-Project/HyDE/blob/master/RELEASE_POLICY.md#versioning-yymq) For more info --> +## v26.1.2 + + +### Fixed + +- Broken venvs are now auto-rebuilt when installing a dependency + +### Changed + +- Cpuinfo: colors are now available as css class instead hardcoding in scripts. +- Gpuinfo: colors are now available as css class instead hardcoding in scripts. + + ## v25.12.4 ### Fixed diff --git a/Configs/.local/bin/hyde-shell b/Configs/.local/bin/hyde-shell index 2a41c7263..aaf5c19cc 100755 --- a/Configs/.local/bin/hyde-shell +++ b/Configs/.local/bin/hyde-shell @@ -3,25 +3,25 @@ # wallbash script can source this script to resolve the paths cleanly on a separate shell python_initialized() { - python "${LIB_DIR}/hyde/pyutils/pip_env.py" rebuild + python "${LIB_DIR}/hyde/pyutils/pip_env.py" rebuild } python_activate() { - local python_env="${XDG_STATE_HOME:-$HOME/.local/state}/hyde/pip_env/bin/activate" - if [[ -r "${python_env}" ]]; then - # shellcheck disable=SC1090 - source "${python_env}" - else - printf "Warning: Python virtual environment not found at %s\n" "${python_env}" - printf "You may need to run 'hyde-shell pyinit' to set it up.\n" - python_initialized - fi + local python_env="${XDG_STATE_HOME:-$HOME/.local/state}/hyde/pip_env/bin/activate" + if [[ -r "${python_env}" ]]; then + # shellcheck disable=SC1090 + source "${python_env}" + else + printf "Warning: Python virtual environment not found at %s\n" "${python_env}" + printf "You may need to run 'hyde-shell pyinit' to set it up.\n" + python_initialized + fi } initialized() { - cat </dev/null - done | sort -u + # Use HYDE_SCRIPTS_PATH to find scripts from all configured directories + local HYDE_SCRIPTS_PATH="${HYDE_SCRIPTS_PATH:-${XDG_CONFIG_HOME:-$HOME/.config}/hyde/scripts:${LIB_DIR}/hyde}" + + # Convert to array, deduplicate, and filter out empty entries + IFS=':' read -ra RAW_DIRS <<<"$HYDE_SCRIPTS_PATH" + declare -A seen_dirs + local SCRIPT_DIRS=() + for dir in "${RAW_DIRS[@]}"; do + # Skip empty entries (handles multiple colons like :::) + [[ -z "$dir" ]] && continue + # Deduplicate directories + [[ -n "${seen_dirs[$dir]}" ]] && continue + seen_dirs["$dir"]=1 + # Only add existing directories + [[ -d "$dir" ]] && SCRIPT_DIRS+=("$dir") + done + + # Find scripts in all configured directories + for dir in "${SCRIPT_DIRS[@]}"; do + find -L "$dir" -maxdepth 1 -type f \( -name "*.sh" -o -name "*.py" \) -exec basename {} \; 2>/dev/null + done | sort -u } list_script_path() { - find -L "$LIB_DIR/hyde" -type f \( -name "*.sh" -o -name "*.py" \) -exec echo {} \; + find -L "$LIB_DIR/hyde" -type f \( -name "*.sh" -o -name "*.py" \) -exec echo {} \; } get_version() { - # shellcheck source=/dev/null - if [[ ! -f "${XDG_STATE_HOME:-$HOME/.local/state}/hyde/version" ]]; then - echo "HyDE version file not found. Please update HyDE." - exit 1 - fi - # shellcheck source=/dev/null - source "${XDG_STATE_HOME:-$HOME/.local/state}/hyde/version" - # Extract only the date part from HYDE_VERSION using Bash parameter expansion - # HYDE_VERSION_DATE="${HYDE_VERSION%%-*}" - cat </dev/null | sort -u) - - # Get wallbash scripts - local dirs=("${WALLBASH_DIRS[@]}") - wallbash_scripts=("--help") # Add --help as first option - # Simplified - just --help for now since dynamic parsing is complex - - # Export arrays for use by completion generators - export HYDE_BUILT_IN_COMMANDS="${built_in_commands[*]}" - export HYDE_SCRIPTS="${hyde_scripts[*]}" - export HYDE_WALLBASH_SCRIPTS="${wallbash_scripts[*]}" + # Get all available commands and scripts + local built_in_commands=("--help" "help" "-h" "-r" "reload" "wallbash" "--version" "version" "-v" "--release-notes" "release-notes" "--list-script" "--list-script-path" "--completions") + local hyde_scripts=() + local wallbash_scripts=() + + # Get HyDE scripts (remove extensions) + while IFS= read -r script; do + if [[ -n "$script" ]]; then + script_name="${script%.*}" + hyde_scripts+=("$script_name") + fi + done < <(list_script 2>/dev/null | sort -u) + + # Get wallbash scripts + local dirs=("${WALLBASH_DIRS[@]}") + wallbash_scripts=("--help") # Add --help as first option + # Simplified - just --help for now since dynamic parsing is complex + + # Export arrays for use by completion generators + export HYDE_BUILT_IN_COMMANDS="${built_in_commands[*]}" + export HYDE_SCRIPTS="${hyde_scripts[*]}" + export HYDE_WALLBASH_SCRIPTS="${wallbash_scripts[*]}" } gen_bash_completion() { - get_completion_data + get_completion_data - cat <<'BASH_COMPLETION' + cat <<'BASH_COMPLETION' # Bash completion for hyde-shell _hyde_shell_completion() { local cur prev words cword @@ -261,9 +261,9 @@ BASH_COMPLETION } gen_zsh_completion() { - get_completion_data + get_completion_data - cat <<'ZSH_COMPLETION' + cat <<'ZSH_COMPLETION' #compdef hyde-shell _hyde_shell() { @@ -316,9 +316,9 @@ ZSH_COMPLETION } gen_fish_completion() { - get_completion_data + get_completion_data - cat <<'FISH_COMPLETION' + cat <<'FISH_COMPLETION' # Fish completion for hyde-shell function __hyde_shell_get_commands @@ -372,148 +372,153 @@ FISH_COMPLETION } generate_completions() { - local shell_type="$1" - - case "$shell_type" in - bash) - gen_bash_completion - ;; - zsh) - gen_zsh_completion - ;; - fish) - gen_fish_completion - ;; - *) - echo "Usage: hyde-shell --completions [bash|zsh|fish]" - echo "Generate shell completions for the specified shell" - return 1 - ;; - esac + local shell_type="$1" + + case "$shell_type" in + bash) + gen_bash_completion + ;; + zsh) + gen_zsh_completion + ;; + fish) + gen_fish_completion + ;; + *) + echo "Usage: hyde-shell --completions [bash|zsh|fish]" + echo "Generate shell completions for the specified shell" + return 1 + ;; + esac } hyde-logout() { - if uwsm check is-active; then - uwsm stop - elif [[ -n "${HYPRLAND_INSTANCE_SIGNATURE}" ]]; then - hyprctl dispatch exit 0 - fi + if uwsm check is-active; then + uwsm stop + elif [[ -n "${HYPRLAND_INSTANCE_SIGNATURE}" ]]; then + if command -v hyprshutdown >/dev/null 2>&1; then + hyprshutdown --top-label "Stay HyDErated!🫧" + else + hyprctl dispatch exit 0 + fi + hyprctl dispatch exit 0 + fi } run_command() { - # Convert to array, deduplicate, and filter out empty entries - IFS=':' read -ra RAW_DIRS <<<"$HYDE_SCRIPTS_PATH" - declare -A seen_dirs - SCRIPT_DIRS=() - for dir in "${RAW_DIRS[@]}"; do - # Skip empty entries (handles multiple colons like :::) - [[ -z "$dir" ]] && continue - # Deduplicate directories - [[ -n "${seen_dirs[$dir]}" ]] && continue - seen_dirs["$dir"]=1 - # Only add existing directories - [[ -d "$dir" ]] && SCRIPT_DIRS+=("$dir") - done - - # Try to find and execute the command in priority order - for dir in "${SCRIPT_DIRS[@]}"; do - # Try .sh extension first - if [[ -f "$dir/${1}.sh" ]]; then - exec bash "$dir/${1}.sh" "${@:2}" - # Try .py extension - elif [[ -f "$dir/${1}.py" ]]; then - python_activate - exec python "$dir/${1}.py" "${@:2}" - # Try exact name (executable) - elif [[ -f "$dir/${1}" && -x "$dir/${1}" ]]; then - exec "$dir/${1}" "${@:2}" - fi - done - - # Finally try as a direct file path - if [[ -f "$1" && -x "$1" ]]; then - exec "$1" "${@:2}" - else - echo "Command not found: $1" - echo "Available commands:" - list_script - # Show user scripts from all configured directories - for dir in "${SCRIPT_DIRS[@]}"; do - echo "Scripts in $dir:" - find -L "$dir" -maxdepth 1 -type f \( -name "*.sh" -o -name "*.py" -o -executable \) -exec basename {} \; 2>/dev/null | sort - done - fi + # Convert to array, deduplicate, and filter out empty entries + IFS=':' read -ra RAW_DIRS <<<"$HYDE_SCRIPTS_PATH" + declare -A seen_dirs + SCRIPT_DIRS=() + for dir in "${RAW_DIRS[@]}"; do + # Skip empty entries (handles multiple colons like :::) + [[ -z "$dir" ]] && continue + # Deduplicate directories + [[ -n "${seen_dirs[$dir]}" ]] && continue + seen_dirs["$dir"]=1 + # Only add existing directories + [[ -d "$dir" ]] && SCRIPT_DIRS+=("$dir") + done + + # Try to find and execute the command in priority order + for dir in "${SCRIPT_DIRS[@]}"; do + # Try .sh extension first + if [[ -f "$dir/${1}.sh" ]]; then + exec bash "$dir/${1}.sh" "${@:2}" + # Try .py extension + elif [[ -f "$dir/${1}.py" ]]; then + python_activate + exec python "$dir/${1}.py" "${@:2}" + # Try exact name (executable) + elif [[ -f "$dir/${1}" && -x "$dir/${1}" ]]; then + exec "$dir/${1}" "${@:2}" + fi + done + + # Finally try as a direct file path + if [[ -f "$1" && -x "$1" ]]; then + exec "$1" "${@:2}" + else + echo "Command not found: $1" + echo "Available commands:" + list_script + # Show user scripts from all configured directories + for dir in "${SCRIPT_DIRS[@]}"; do + echo "Scripts in $dir:" + find -L "$dir" -maxdepth 1 -type f \( -name "*.sh" -o -name "*.py" -o -executable \) -exec basename {} \; 2>/dev/null | sort + done + fi } run_pip() { - python_activate - shift - pip "$@" + python_activate + shift + pip "$@" } run_pypr() { - python_activate - shift - - if command -v pypr >/dev/null 2>&1; then - - socket_path="${XDG_RUNTIME_DIR}/hypr/${HYPRLAND_INSTANCE_SIGNATURE}/.pyprland.sock" - if [[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/hypr/pyprland.toml " ]]; then - send_notifs "Missing pyprland.toml" "Please create a pyprland.toml file in ${XDG_CONFIG_HOME:-$HOME/.config}/hypr/ to configure PyPR." - exit 1 - fi - - if [[ -S "$socket_path" ]] && pgrep -u "$USER" pypr >/dev/null 2>&1; then - message="${*:-"help"}" - # Send the message to the socket and print the response - if ! printf "%s" "${message[@]}" | nc -N -U "$socket_path" 2>/dev/null; then #! openbsd netcat only - if ! printf "%s" "${message[@]}" | socat - UNIX-CONNECT:"$socket_path" 2>/dev/null; then - if ! printf "%s" "${message[@]}" | ncat -U "$socket_path" 2>/dev/null; then - if ! pypr "${message[@]}"; then - print_log -sec "pypr" "Error communicating with socket: $socket_path" - exit 1 - fi - fi - fi - fi - - else - print_log -sec "pypr" "PyPR is not running properly, starting fresh" - [[ -S "$socket_path" ]] && print_log -y "Removing stale socket: $socket_path" - pgrep -u "$USER" pypr >/dev/null && print_log -y "Killing existing pypr process" - rm -f "$socket_path" - - exec app2unit.sh -t service pypr - fi - - else - pip install --no-input pyprland==2.4.7 - fi + python_activate + shift + + if command -v pypr >/dev/null 2>&1; then + + socket_path="${XDG_RUNTIME_DIR}/hypr/${HYPRLAND_INSTANCE_SIGNATURE}/.pyprland.sock" + if [[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/hypr/pyprland.toml " ]]; then + send_notifs "Missing pyprland.toml" "Please create a pyprland.toml file in ${XDG_CONFIG_HOME:-$HOME/.config}/hypr/ to configure PyPR." + exit 1 + fi + + if [[ -S "$socket_path" ]] && pgrep -u "$USER" pypr >/dev/null 2>&1; then + message="${*:-"help"}" + # Send the message to the socket and print the response + if ! printf "%s" "${message[@]}" | nc -N -U "$socket_path" 2>/dev/null; then #! openbsd netcat only + if ! printf "%s" "${message[@]}" | socat - UNIX-CONNECT:"$socket_path" 2>/dev/null; then + if ! printf "%s" "${message[@]}" | ncat -U "$socket_path" 2>/dev/null; then + if ! pypr "${message[@]}"; then + print_log -sec "pypr" "Error communicating with socket: $socket_path" + exit 1 + fi + fi + fi + fi + + else + print_log -sec "pypr" "PyPR is not running properly, starting fresh" + [[ -S "$socket_path" ]] && print_log -y "Removing stale socket: $socket_path" + pgrep -u "$USER" pypr >/dev/null && print_log -y "Killing existing pypr process" + rm -f "$socket_path" + + exec app2unit.sh -t service pypr + fi + + else + pip install --no-input pyprland==2.4.7 + fi } lock_session() { - #? hyde-shell lock-session wraps around the lockscreen.sh script - #? lockscreen.sh activates the set lockscreen blindly - #? however, lock-session will check if the lockscreen is set FD's ScreenSaver - #? if it is, it will use loginctl lock-session - #? otherwise, it will use lockscreen.sh - if busctl --user list | grep -q "org.freedesktop.ScreenSaver"; then - echo "Using org.freedesktop.ScreenSaver for locking" - loginctl lock-session - else - lockscreen.sh - fi + #? hyde-shell lock-session wraps around the lockscreen.sh script + #? lockscreen.sh activates the set lockscreen blindly + #? however, lock-session will check if the lockscreen is set FD's ScreenSaver + #? if it is, it will use loginctl lock-session + #? otherwise, it will use lockscreen.sh + if busctl --user list | grep -q "org.freedesktop.ScreenSaver"; then + echo "Using org.freedesktop.ScreenSaver for locking" + loginctl lock-session + else + lockscreen.sh + fi } #*-------------------------------------------------------------------------------- if [[ -z "${BASH_SOURCE[0]}" ]]; then - EXECUTABLE="${0}" + EXECUTABLE="${0}" else - EXECUTABLE="${BASH_SOURCE[0]}" + EXECUTABLE="${BASH_SOURCE[0]}" fi BIN_DIR=$(dirname "$(which "${EXECUTABLE:-hyde-shell}")") @@ -533,95 +538,95 @@ export BIN_DIR LIB_DIR SHARE_DIR PATH HYDE_SCRIPTS_PATH # Priority commands case "$1" in app) - export PATH="${HYDE_SCRIPTS_PATH}:${PATH}" - [[ "${HYDEPY}" -eq 1 ]] && python_activate - shift - exec app2unit.sh "$@" - ;; + export PATH="${HYDE_SCRIPTS_PATH}:${PATH}" + [[ "${HYDEPY}" -eq 1 ]] && python_activate + shift + exec app2unit.sh "$@" + ;; init | --init) - initialized - exit 0 - ;; + initialized + exit 0 + ;; lock-session) - lock_session - exit 0 - ;; + lock_session + exit 0 + ;; *) - export HYDE_SHELL_INIT=1 - ;; + export HYDE_SHELL_INIT=1 + ;; esac # shellcheck disable=SC1091 if ! source "${LIB_DIR}/hyde/globalcontrol.sh"; then - echo "Error: Could not load HyDE, broken installation?" - exit 1 + echo "Error: Could not load HyDE, broken installation?" + exit 1 fi #*-------------------------------------------------------------------------------- if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then - case $1 in - logout) - hyde-logout - ;; - - pypr) - run_pypr "${@}" - exit 0 - ;; - - pip) - run_pip "${@}" - exit 0 - ;; - -r | reload) - hyde_reload - ;; - - wallbash) - shift - call_wallbashScript "$@" - ;; - --release-notes | release-notes) - get_release_notes - ;; - --version | version | -v) - get_version - ;; - --help | help | -h) - USAGE - ;; - --list-script) - list_script - ;; - --list-script-path) - list_script_path - ;; - --completions) - shift - generate_completions "$1" - ;; - validate) - shift - if command -v hyde-shell >/dev/null 2>&1; then - hyde-config -no-daemon "${@}" - else - echo "hyde-config not found. Please make sure it is in \$PATH." - fi - exit 0 - ;; - pyinit) - python_initialized - ;; - "") - for func in $(compgen -A function); do - export -f "${func?}" - done - ;; - *) - run_command "$@" - ;; - esac + case $1 in + logout) + hyde-logout + ;; + + pypr) + run_pypr "${@}" + exit 0 + ;; + + pip) + run_pip "${@}" + exit 0 + ;; + -r | reload) + hyde_reload + ;; + + wallbash) + shift + call_wallbashScript "$@" + ;; + --release-notes | release-notes) + get_release_notes + ;; + --version | version | -v) + get_version + ;; + --help | help | -h) + USAGE + ;; + --list-script) + list_script + ;; + --list-script-path) + list_script_path + ;; + --completions) + shift + generate_completions "$1" + ;; + validate) + shift + if command -v hyde-shell >/dev/null 2>&1; then + hyde-config -no-daemon "${@}" + else + echo "hyde-config not found. Please make sure it is in \$PATH." + fi + exit 0 + ;; + pyinit) + python_initialized + ;; + "") + for func in $(compgen -A function); do + export -f "${func?}" + done + ;; + *) + run_command "$@" + ;; + esac fi diff --git a/Configs/.local/lib/hyde/cpuinfo.sh b/Configs/.local/lib/hyde/cpuinfo.sh index bea30ce24..fcf372f0b 100755 --- a/Configs/.local/lib/hyde/cpuinfo.sh +++ b/Configs/.local/lib/hyde/cpuinfo.sh @@ -44,35 +44,6 @@ init_query() { fi } -get_temp_color() { - local temp=$1 - declare -A temp_colors=( - [90]="#8b0000" - [85]="#ad1f2f" - [80]="#d22f2f" - [75]="#ff471a" - [70]="#ff6347" - [65]="#ff8c00" - [60]="#ffa500" - [45]="" - [40]="#add8e6" - [35]="#87ceeb" - [30]="#4682b4" - [25]="#4169e1" - [20]="#0000ff" - [0]="#00008b") - for threshold in $(echo "${!temp_colors[@]}" | tr ' ' '\n' | sort -nr); do - if ((temp >= threshold)); then - color=${temp_colors[$threshold]} - if [[ -n $color ]]; then - echo "$temp°C" - else - echo "$temp°C" - fi - return - fi - done -} get_utilization() { local statFile currStat currIdle diffStat diffIdle utilization statFile=$(head -1 /proc/stat) @@ -90,29 +61,37 @@ get_utilization() { } [[ -f $cpuinfo_file ]] && source "$cpuinfo_file" init_query -if [[ $CPUINFO_EMOJI -ne 1 ]]; then - temp_lv="85:, 65:, 45:☁, ❄" -else - temp_lv="85:🌋, 65:🔥, 45:☁️, ❄️" -fi -util_lv="90:, 60:󰓅, 30:󰾅, 󰾆" sensors_json=$(sensors -j 2>/dev/null) -cpu_temps="$(jq -r '[ -.["coretemp-isa-0000"], -.["k10temp-pci-00c3"], -.["zenpower-pci-00c3"] -] | -map(select(. != null)) | -map(to_entries) | -add | -map(select(.value | -objects) | -"\(.key): \((.value | -to_entries[] | -select(.key | -test("temp[0-9]+_input")) | -.value | floor))°C") | -join("\\n\t")' <<<"$sensors_json")" +cpu_temps="$(perl -e ' +use strict; +use warnings; +my $parser; +BEGIN { + eval { require Cpanel::JSON::XS; $parser = Cpanel::JSON::XS->new->utf8; 1 } + or eval { require JSON::XS; $parser = JSON::XS->new->utf8; 1 } + or do { require JSON::PP; $parser = JSON::PP->new->utf8; }; +} +my $json = do { local $/; <> }; +my $data = eval { $parser->decode($json) } || {}; +my @chips = ("coretemp-isa-0000","k10temp-pci-00c3","zenpower-pci-00c3"); +my @lines; +for my $chip (@chips) { + next unless exists $data->{$chip} && ref $data->{$chip} eq "HASH"; + my $entries = $data->{$chip}; + for my $label (keys %$entries) { + my $obj = $entries->{$label}; + next unless ref $obj eq "HASH"; + my $temp; + for my $k (keys %$obj) { + next unless $k =~ /^temp\d+_input$/; + $temp = int($obj->{$k}); + last; + } + push @lines, "$label: ${temp}°C" if defined $temp; + } +} +print join("\\n\\t", @lines); +' <<<"$sensors_json")" if [ -n "$CPUINFO_TEMPERATURE_ID" ]; then temperature=$(perl -ne 'BEGIN{$id=shift} if (/^\Q$id\E:\s*([0-9]+)/){print $1; exit}' "$CPUINFO_TEMPERATURE_ID" <<<"$cpu_temps") @@ -123,14 +102,27 @@ if [[ -z $temperature ]]; then fi utilization=$(get_utilization) frequency=$(perl -ne 'BEGIN { $sum = 0; $count = 0 } if (/cpu MHz\s+:\s+([\d.]+)/) { $sum += $1; $count++ } END { if ($count > 0) { printf "%.2f\n", $sum / $count } else { print "NaN\n" } }' /proc/cpuinfo) -icons="$(map_floor "$util_lv" "$utilization")$(map_floor "$temp_lv" "$temperature")" -speedo="${icons:0:1}" -thermo="${icons:1:1}" -emoji="${icons:2}" -tooltip_str="$emoji $CPUINFO_MODEL\n" -[[ -n $thermo ]] && tooltip_str+="$thermo Temperature: \n\t$cpu_temps \n" -[[ -n $speedo ]] && tooltip_str+="$speedo Utilization: $utilization%\n" -tooltip_str+=" Clock Speed: $frequency/$CPUINFO_MAX_FREQ MHz" + +# Numeric classes and percentage for Waybar formatting +temp_val=${temperature%%.*} +((temp_val < 0)) && temp_val=0 +((temp_val > 999)) && temp_val=999 +temp_bucket=$(((temp_val / 5) * 5)) +((temp_bucket > 100)) && temp_bucket=100 +temp_class="temp-$temp_bucket" + +util_val=${utilization%.*} +((${util_val:-0} < 0)) && util_val=0 +((${util_val:-0} > 100)) && util_val=100 +util_bucket=$(((util_val / 10) * 10)) +util_class="util-$util_bucket" + +temp_pct=$temp_val +((temp_pct > 100)) && temp_pct=100 +tooltip_str="$CPUINFO_MODEL\n" +tooltip_str+="Temperature: \n\t$cpu_temps \n" +tooltip_str+="Utilization: $utilization%\n" +tooltip_str+="Clock Speed: $frequency/$CPUINFO_MAX_FREQ MHz" cat <> "$gpuinfo_file" + echo "tired=true" >>"$gpuinfo_file" echo "set tired flag" else echo "already set tired flag" @@ -16,7 +16,7 @@ if [[ " $* " =~ " --tired " ]]; then fi if [[ " $* " =~ " --emoji " ]]; then if ! grep -q "GPUINFO_EMOJI" "$gpuinfo_file"; then - echo "export GPUINFO_EMOJI=1" >> "$gpuinfo_file" + echo "export GPUINFO_EMOJI=1" >>"$gpuinfo_file" echo "set emoji flag" else echo "already set emoji flag" @@ -46,20 +46,20 @@ query() { GPUINFO_NVIDIA_ENABLE=0 GPUINFO_AMD_ENABLE=0 GPUINFO_INTEL_ENABLE=0 touch "$gpuinfo_file" if lsmod | grep -q 'nouveau'; then - echo 'GPUINFO_NVIDIA_GPU="Linux"' >> "$gpuinfo_file" - echo "GPUINFO_NVIDIA_ENABLE=1 # Using nouveau an open-source nvidia driver" >> "$gpuinfo_file" - elif command -v nvidia-smi &> /dev/null; then + echo 'GPUINFO_NVIDIA_GPU="Linux"' >>"$gpuinfo_file" + echo "GPUINFO_NVIDIA_ENABLE=1 # Using nouveau an open-source nvidia driver" >>"$gpuinfo_file" + elif command -v nvidia-smi &>/dev/null; then GPUINFO_NVIDIA_GPU=$(nvidia-smi --query-gpu=gpu_name --format=csv,noheader,nounits | head -n 1) if [[ -n $GPUINFO_NVIDIA_GPU ]]; then if [[ $GPUINFO_NVIDIA_GPU == *"NVIDIA-SMI has failed"* ]]; then - echo "GPUINFO_NVIDIA_ENABLE=0 # NVIDIA-SMI has failed" >> "$gpuinfo_file" + echo "GPUINFO_NVIDIA_ENABLE=0 # NVIDIA-SMI has failed" >>"$gpuinfo_file" else NVIDIA_ADDR=$(lspci | grep -Ei "VGA|3D" | grep -i "${GPUINFO_NVIDIA_GPU/NVIDIA /}" | cut -d' ' -f1) { echo "NVIDIA_ADDR=\"$NVIDIA_ADDR\"" echo "GPUINFO_NVIDIA_GPU=\"${GPUINFO_NVIDIA_GPU/NVIDIA /}\"" echo "GPUINFO_NVIDIA_ENABLE=1" - } >> "$gpuinfo_file" + } >>"$gpuinfo_file" fi fi fi @@ -70,7 +70,7 @@ query() { echo "AMD_ADDR=\"$AMD_ADDR\"" echo "GPUINFO_AMD_ENABLE=1" echo "GPUINFO_AMD_GPU=\"$GPUINFO_AMD_GPU\"" - } >> "$gpuinfo_file" + } >>"$gpuinfo_file" fi if lspci -nn | grep -E "(VGA|3D)" | grep -iq "8086"; then GPUINFO_INTEL_GPU="$(lspci -nn | grep -Ei "VGA|3D" | grep -m 1 "8086" | awk -F'Intel Corporation ' '{gsub(/ *\[[^\]]*\]/,""); gsub(/ *\([^)]*\)/,""); print $2}')" @@ -79,7 +79,7 @@ query() { echo "INTEL_ADDR=\"$INTEL_ADDR\"" echo "GPUINFO_INTEL_ENABLE=1" echo "GPUINFO_INTEL_GPU=\"$GPUINFO_INTEL_GPU\"" - } >> "$gpuinfo_file" + } >>"$gpuinfo_file" fi if ! grep -q "GPUINFO_PRIORITY=" "$gpuinfo_file" && [[ -n $AQ_DRM_DEVICES ]]; then trap detect EXIT @@ -94,13 +94,13 @@ toggle() { else if ! grep -q "GPUINFO_AVAILABLE=" "$gpuinfo_file"; then GPUINFO_AVAILABLE=$(grep "_ENABLE=1" "$gpuinfo_file" | cut -d '=' -f 1 | tr '\n' ' ' | tr -d '#') - echo "" >> "$gpuinfo_file" - echo "GPUINFO_AVAILABLE=\"${GPUINFO_AVAILABLE[*]}\"" >> "$gpuinfo_file" + echo "" >>"$gpuinfo_file" + echo "GPUINFO_AVAILABLE=\"${GPUINFO_AVAILABLE[*]}\"" >>"$gpuinfo_file" fi if ! grep -q "GPUINFO_PRIORITY=" "$gpuinfo_file"; then GPUINFO_AVAILABLE=$(grep "GPUINFO_AVAILABLE=" "$gpuinfo_file" | cut -d'=' -f 2) initGPU=$(echo "$GPUINFO_AVAILABLE" | cut -d ' ' -f 1) - echo "GPUINFO_PRIORITY=$initGPU" >> "$gpuinfo_file" + echo "GPUINFO_PRIORITY=$initGPU" >>"$gpuinfo_file" fi mapfile -t anchor < <(grep "_ENABLE=1" "$gpuinfo_file" | cut -d '=' -f 1) GPUINFO_PRIORITY=$(grep "GPUINFO_PRIORITY=" "$gpuinfo_file" | cut -d'=' -f 2) @@ -117,13 +117,13 @@ toggle() { sed -i "s/GPUINFO_PRIORITY=$GPUINFO_PRIORITY/GPUINFO_PRIORITY=$NEXT_PRIORITY/" "$gpuinfo_file" } map_floor() { - IFS=', ' read -r -a pairs <<< "$1" + IFS=', ' read -r -a pairs <<<"$1" if [[ ${pairs[-1]} != *":"* ]]; then def_val="${pairs[-1]}" unset 'pairs[${#pairs[@]}-1]' fi for pair in "${pairs[@]}"; do - IFS=':' read -r key value <<< "$pair" + IFS=':' read -r key value <<<"$pair" num="${2%%.*}" if [[ $num =~ ^-?[0-9]+$ && $key =~ ^-?[0-9]+$ ]]; then if ((num > key)); then @@ -137,35 +137,7 @@ map_floor() { done [ -n "$def_val" ] && echo $def_val || echo " " } -get_temp_color() { - local temp=$1 - declare -A temp_colors=( - [90]="#8b0000" - [85]="#ad1f2f" - [80]="#d22f2f" - [75]="#ff471a" - [70]="#ff6347" - [65]="#ff8c00" - [60]="#ffa500" - [45]="" - [40]="#add8e6" - [35]="#87ceeb" - [30]="#4682b4" - [25]="#4169e1" - [20]="#0000ff" - [0]="#00008b") - for threshold in $(echo "${!temp_colors[@]}" | tr ' ' '\n' | sort -nr); do - if ((temp >= threshold)); then - color=${temp_colors[$threshold]} - if [[ -n $color ]]; then - echo "$temp°C" - else - echo "$temp°C" - fi - return - fi - done -} + generate_json() { if [[ $GPUINFO_EMOJI -ne 1 ]]; then temp_lv="85:, 65:, 45:☁, ❄" @@ -177,8 +149,24 @@ generate_json() { speedo=${icons:0:1} thermo=${icons:1:1} emoji=${icons:2} - temp_color=$(get_temp_color "$temperature") - local json="{\"text\":\"$thermo $temp_color\", \"tooltip\":\"$emoji $primary_gpu\n$thermo Temperature: $temp_color" + # Compute classes and percentage (5°C buckets for temp, 10% for util) + local temp_val=${temperature%%.*} + ((temp_val < 0)) && temp_val=0 + ((temp_val > 999)) && temp_val=999 + local temp_bucket=$(((temp_val / 5) * 5)) + ((temp_bucket > 100)) && temp_bucket=100 + local temp_class="temp-$temp_bucket" + + local util_val=${utilization%.*} + ((${util_val:-0} < 0)) && util_val=0 + ((${util_val:-0} > 100)) && util_val=100 + local util_bucket=$(((util_val / 10) * 10)) + local util_class="util-$util_bucket" + + local temp_pct=$temp_val + ((temp_pct > 100)) && temp_pct=100 + + local json="{\"text\":\"$thermo $temperature°C\", \"tooltip\":\"$emoji $primary_gpu\n$thermo Temperature: $temperature°C" declare -A tooltip_parts if [[ -n $utilization ]]; then tooltip_parts["\n$speedo Utilization: "]="$utilization%"; fi if [[ -n $current_clock_speed ]] && [[ -n $max_clock_speed ]]; then tooltip_parts["\n Clock Speed: "]="$current_clock_speed/$max_clock_speed MHz"; fi @@ -198,12 +186,12 @@ generate_json() { json+="$key$value" fi done - json="$json\"}" + json="$json\", \"class\":[\"$temp_class\",\"$util_class\"], \"percentage\":$temp_pct, \"alt\":\"$temp_bucket\"}" echo "$json" } general_query() { filter='' - sensors_data=$(sensors 2> /dev/null) + sensors_data=$(sensors 2>/dev/null) temperature=$(echo "$sensors_data" | $filter grep -m 1 -E "(edge|Package id.*|another keyword)" | awk -F ':' '{print int($2)}') fan_speed=$(echo "$sensors_data" | $filter grep -m 1 -E "fan[1-9]" | awk -F ':' '{print int($2)}') for file in /sys/class/power_supply/BAT*/power_now; do @@ -215,22 +203,22 @@ general_query() { get_utilization() { statFile=$(head -1 /proc/stat) if [[ -z $GPUINFO_PREV_STAT ]]; then - GPUINFO_PREV_STAT=$(awk '{print $2+$3+$4+$6+$7+$8 }' <<< "$statFile") - echo "GPUINFO_PREV_STAT=\"$GPUINFO_PREV_STAT\"" >> "$gpuinfo_file" + GPUINFO_PREV_STAT=$(awk '{print $2+$3+$4+$6+$7+$8 }' <<<"$statFile") + echo "GPUINFO_PREV_STAT=\"$GPUINFO_PREV_STAT\"" >>"$gpuinfo_file" fi if [[ -z $GPUINFO_PREV_IDLE ]]; then - GPUINFO_PREV_IDLE=$(awk '{print $5 }' <<< "$statFile") - echo "GPUINFO_PREV_IDLE=\"$GPUINFO_PREV_IDLE\"" >> "$gpuinfo_file" + GPUINFO_PREV_IDLE=$(awk '{print $5 }' <<<"$statFile") + echo "GPUINFO_PREV_IDLE=\"$GPUINFO_PREV_IDLE\"" >>"$gpuinfo_file" fi - currStat=$(awk '{print $2+$3+$4+$6+$7+$8 }' <<< "$statFile") - currIdle=$(awk '{print $5 }' <<< "$statFile") + currStat=$(awk '{print $2+$3+$4+$6+$7+$8 }' <<<"$statFile") + currIdle=$(awk '{print $5 }' <<<"$statFile") diffStat=$((currStat - GPUINFO_PREV_STAT)) diffIdle=$((currIdle - GPUINFO_PREV_IDLE)) GPUINFO_PREV_STAT=$currStat GPUINFO_PREV_IDLE=$currIdle sed -i -e "/^GPUINFO_PREV_STAT=/c\GPUINFO_PREV_STAT=\"$currStat\"" -e "/^GPUINFO_PREV_IDLE=/c\GPUINFO_PREV_IDLE=\"$currIdle\"" "$gpuinfo_file" || { - echo "GPUINFO_PREV_STAT=\"$currStat\"" >> "$cpuinfo_file" - echo "GPUINFO_PREV_IDLE=\"$currIdle\"" >> "$cpuinfo_file" + echo "GPUINFO_PREV_STAT=\"$currStat\"" >>"$cpuinfo_file" + echo "GPUINFO_PREV_IDLE=\"$currIdle\"" >>"$cpuinfo_file" } awk -v stat="$diffStat" -v idle="$diffIdle" 'BEGIN {printf "%.1f", (stat/(stat+idle))*100}' } @@ -256,7 +244,7 @@ nvidia_GPU() { fi fi gpu_info=$(nvidia-smi --query-gpu=temperature.gpu,utilization.gpu,clocks.current.graphics,clocks.max.graphics,power.draw,power.limit --format=csv,noheader,nounits) - IFS=',' read -ra gpu_data <<< "$gpu_info" + IFS=',' read -ra gpu_data <<<"$gpu_info" temperature="${gpu_data[0]// /}" utilization="${gpu_data[1]// /}" current_clock_speed="${gpu_data[2]// /}" @@ -282,57 +270,57 @@ if [[ ! -f $gpuinfo_file ]]; then fi source "$gpuinfo_file" case "$1" in - "--toggle" | "-t") - toggle - echo -e "Sensor: $NEXT_PRIORITY GPU" | sed 's/_ENABLE//g' - exit +"--toggle" | "-t") + toggle + echo -e "Sensor: $NEXT_PRIORITY GPU" | sed 's/_ENABLE//g' + exit + ;; +"--use" | "-u") + toggle "$2" + ;; +"--reset" | "-rf") + rm -fr "$gpuinfo_file"* + query + echo -e "Initialized Variable:\n$(cat "$gpuinfo_file" || true)\n\nReboot or '$0 --reset' to RESET Variables" + exit + ;; +"--stat") + case "$2" in + "amd") + if + [[ $GPUINFO_AMD_ENABLE -eq 1 ]] + then + echo "GPUINFO_AMD_ENABLE: $GPUINFO_AMD_ENABLE" + exit 0 + fi ;; - "--use" | "-u") - toggle "$2" + "intel") + if + [[ $GPUINFO_INTEL_ENABLE -eq 1 ]] + then + echo "GPUINFO_INTEL_ENABLE: $GPUINFO_INTEL_ENABLE" + exit 0 + fi ;; - "--reset" | "-rf") - rm -fr "$gpuinfo_file"* - query - echo -e "Initialized Variable:\n$(cat "$gpuinfo_file" || true)\n\nReboot or '$0 --reset' to RESET Variables" - exit + "nvidia") + if + [[ $GPUINFO_NVIDIA_ENABLE -eq 1 ]] + then + echo "GPUINFO_NVIDIA_ENABLE: $GPUINFO_NVIDIA_ENABLE" + exit 0 + fi ;; - "--stat") - case "$2" in - "amd") - if - [[ $GPUINFO_AMD_ENABLE -eq 1 ]] - then - echo "GPUINFO_AMD_ENABLE: $GPUINFO_AMD_ENABLE" - exit 0 - fi - ;; - "intel") - if - [[ $GPUINFO_INTEL_ENABLE -eq 1 ]] - then - echo "GPUINFO_INTEL_ENABLE: $GPUINFO_INTEL_ENABLE" - exit 0 - fi - ;; - "nvidia") - if - [[ $GPUINFO_NVIDIA_ENABLE -eq 1 ]] - then - echo "GPUINFO_NVIDIA_ENABLE: $GPUINFO_NVIDIA_ENABLE" - exit 0 - fi - ;; - *) - echo "Error: Invalid argument for --stat. Use amd, intel, or nvidia." - exit 1 - ;; - esac - echo "GPU not enabled." + *) + echo "Error: Invalid argument for --stat. Use amd, intel, or nvidia." exit 1 ;; - *"-"*) - GPUINFO_AVAILABLE=${GPUINFO_AVAILABLE//GPUINFO_/} - cat << EOF + esac + echo "GPU not enabled." + exit 1 + ;; +*"-"*) + GPUINFO_AVAILABLE=${GPUINFO_AVAILABLE//GPUINFO_/} + cat < "$swpy_dir"/config + echo -e "[Default]\nsave_dir=$save_dir\nsave_filename_format=$save_file" >"$swpy_dir"/config fi if [[ $annotation_tool == "satty" ]]; then annotation_args+=("--copy-command" "wl-copy") @@ -114,13 +114,13 @@ qr_screenshot() { pre_cmd case $1 in - p) take_screenshot "screen" ;; - s) take_screenshot "area" ;; - sf) take_screenshot "area" "--freeze" ;; - m) take_screenshot "output" ;; - sc) ocr_screenshot "area" "--freeze" ;; - sq) qr_screenshot "area" "--freeze" ;; - *) USAGE ;; +p) take_screenshot "screen" ;; +s) take_screenshot "area" ;; +sf) take_screenshot "area" "--freeze" ;; +m) take_screenshot "output" ;; +sc) ocr_screenshot "area" "--freeze" ;; +sq) qr_screenshot "area" "--freeze" ;; +*) USAGE ;; esac [ -f "$temp_screenshot" ] && rm "$temp_screenshot" diff --git a/Configs/.local/lib/hyde/theme.switch.sh b/Configs/.local/lib/hyde/theme.switch.sh index d58d84233..c65212435 100755 --- a/Configs/.local/lib/hyde/theme.switch.sh +++ b/Configs/.local/lib/hyde/theme.switch.sh @@ -144,14 +144,14 @@ QT5_FONT_SIZE="${QT5_FONT_SIZE:-$FONT_SIZE}" QT5_MONOSPACE_FONT="${QT5_MONOSPACE_FONT:-$MONOSPACE_FONT}" QT5_MONOSPACE_FONT_SIZE="${QT5_MONOSPACE_FONT_SIZE:-${MONOSPACE_FONT_SIZE:-9}}" toml_write "$confDir/qt5ct/qt5ct.conf" "Appearance" "icon_theme" "$ICON_THEME" -toml_write "$confDir/qt5ct/qt5ct.conf" "Fonts" "general" "\"$QT5_FONT,$QT5_FONT_SIZE,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,$FONT_STYLE\"" -toml_write "$confDir/qt5ct/qt5ct.conf" "Fonts" "fixed" "\"$QT5_MONOSPACE_FONT,$QT5_MONOSPACE_FONT_SIZE,-1,5,400,0,0,0,0,0,0,0,0,0,0,1\"" +toml_write "$confDir/qt5ct/qt5ct.conf" "Fonts" "general" "\"$QT5_FONT,$QT5_FONT_SIZE,-1,5,50,0,0,0,0,0,$QT_FONT_STYLE\"" +toml_write "$confDir/qt5ct/qt5ct.conf" "Fonts" "fixed" "\"$QT5_MONOSPACE_FONT,$QT5_MONOSPACE_FONT_SIZE,-1,5,50,0,0,0,0,0\"" QT6_FONT="${QT6_FONT:-$FONT}" QT6_FONT_SIZE="${QT6_FONT_SIZE:-$FONT_SIZE}" QT6_MONOSPACE_FONT="${QT6_MONOSPACE_FONT:-$MONOSPACE_FONT}" QT6_MONOSPACE_FONT_SIZE="${QT6_MONOSPACE_FONT_SIZE:-${MONOSPACE_FONT_SIZE:-9}}" toml_write "$confDir/qt6ct/qt6ct.conf" "Appearance" "icon_theme" "$ICON_THEME" -toml_write "$confDir/qt6ct/qt6ct.conf" "Fonts" "general" "\"$QT6_FONT,$QT6_FONT_SIZE,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,$FONT_STYLE\"" +toml_write "$confDir/qt6ct/qt6ct.conf" "Fonts" "general" "\"$QT6_FONT,$QT6_FONT_SIZE,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,$QT_FONT_STYLE\"" toml_write "$confDir/qt6ct/qt6ct.conf" "Fonts" "fixed" "\"$QT6_MONOSPACE_FONT,${QT6_MONOSPACE_FONT_SIZE:-9},-1,5,400,0,0,0,0,0,0,0,0,0,0,1\"" toml_write "$confDir/kdeglobals" "Icons" "Theme" "$ICON_THEME" toml_write "$confDir/kdeglobals" "General" "TerminalApplication" "$TERMINAL" diff --git a/Configs/.local/lib/hyde/wallpaper.hyprpaper.sh b/Configs/.local/lib/hyde/wallpaper.hyprpaper.sh index 3ed339224..5a7fff629 100755 --- a/Configs/.local/lib/hyde/wallpaper.hyprpaper.sh +++ b/Configs/.local/lib/hyde/wallpaper.hyprpaper.sh @@ -14,8 +14,22 @@ if [ "$is_video" -eq 1 ]; then mkdir -p "$HYDE_CACHE_HOME/wallpapers/thumbnails" cached_thumb="$HYDE_CACHE_HOME/wallpapers/$(${hashMech:-sha1sum} "$selected_wall" | cut -d' ' -f1).png" extract_thumbnail "$selected_wall" "$cached_thumb" - selected_wall="$cached_thumb" + selected_wall="${cached_thumb}" fi -hyprctl hyprpaper wallpaper ",$selected_wall" || - hyprctl hyprpaper reload ,~/.cache/hyde/wall.set #TODO: I do not know when did they change this command but yeah will remove this line after some time +if [[ -n $HYPRLAND_INSTANCE_SIGNATURE ]]; then + hyprctl hyprpaper wallpaper ",${selected_wall}" || + hyprctl hyprpaper reload ,"${selected_wall}" #TODO: I do not know when did they change this command but yeah will remove this line after some time +else + cat <"$XDG_STATE_HOME/hyde/hyprpaper.conf" +splash = false +wallpaper:path = "${selected_wall}" +EOF + + if systemctl --user is-active --quiet hyprpaper.service; then + systemctl --user restart hyprpaper.service + else + app2unit.sh -- hyprpaper --config "$XDG_STATE_HOME/hyde/hyprpaper.conf" + fi + +fi diff --git a/Configs/.local/share/hyde/schema/config.toml.json b/Configs/.local/share/hyde/schema/config.toml.json index 06e24152a..89a0543f5 100644 --- a/Configs/.local/share/hyde/schema/config.toml.json +++ b/Configs/.local/share/hyde/schema/config.toml.json @@ -983,6 +983,10 @@ "description": "Qt5 font.", "type": "string" }, + "font_style": { + "description": "Qt5 font style.", + "type": "string" + }, "font_size": { "default": 10, "description": "Qt5 font size.", @@ -1009,6 +1013,10 @@ "description": "Qt6 font.", "type": "string" }, + "font_style": { + "description": "Qt6 font style.", + "type": "string" + }, "font_size": { "default": 10, "description": "Qt6 font size.", diff --git a/Configs/.local/share/hyde/schema/schema.toml b/Configs/.local/share/hyde/schema/schema.toml index 6f6bb8ef4..e19f3f5e6 100644 --- a/Configs/.local/share/hyde/schema/schema.toml +++ b/Configs/.local/share/hyde/schema/schema.toml @@ -870,6 +870,10 @@ type = "object" description = "Qt5 font." type = "string" +[properties.qt5.properties.font_style] + description = "Qt5 font style." + type = "string" + [properties.qt5.properties.font_size] default = 10 description = "Qt5 font size." @@ -894,6 +898,10 @@ type = "object" description = "Qt6 font." type = "string" +[properties.qt6.properties.font_style] + description = "Qt6 font style." + type = "string" + [properties.qt6.properties.font_size] default = 10 description = "Qt6 font size." diff --git a/Configs/.local/share/hypr/dynamic.conf b/Configs/.local/share/hypr/dynamic.conf index 971edf79f..95f73f44b 100644 --- a/Configs/.local/share/hypr/dynamic.conf +++ b/Configs/.local/share/hypr/dynamic.conf @@ -19,7 +19,8 @@ group:groupbar { col.locked_active = rgba($wallbash_pry2ee) col.locked_inactive = rgba($wallbash_pry4ee) text_color = rgba($wallbash_txt3ee) - text_color_inactive = rgba($wallbash_txt1ee) + text_color_inactive = rgba($wallbash_txt1ee) + blur = true } source = $XDG_CONFIG_HOME/hypr/themes/theme.conf # theme specific settings diff --git a/Configs/.local/share/hypr/windowrules.conf b/Configs/.local/share/hypr/windowrules.conf index e894944b7..923d05dff 100644 --- a/Configs/.local/share/hypr/windowrules.conf +++ b/Configs/.local/share/hypr/windowrules.conf @@ -15,9 +15,16 @@ windowrule = center on,match:tag portal-dialogs # Only add the Core applications here windowrule { -name = hyde_floating_apps -tag = +hyde_floating_apps -match:class = ^(blueman-manager|pavucontrol-qt|com\.gabm\.satty|org\.kde\.dolphin|vlc|kvantummanager|qt[56]ct|nwg-(look|displays)|org\.kde\.ark|org\.pulseaudio\.pavucontrol|blueman-manager|nm-(applet|connection-editor)|org\.kde\.polkit-kde-authentication-agent-1|console-dropdown)$ + name = hyde_floating_apps + tag = +hyde_floating_apps + match:class = ^(blueman-manager|pavucontrol-qt|com\.gabm\.satty|vlc|kvantummanager|qt[56]ct|nwg-(look|displays)|org\.kde\.ark|org\.pulseaudio\.pavucontrol|blueman-manager|nm-(applet|connection-editor)|org\.kde\.polkit-kde-authentication-agent-1|console-dropdown)$ +} + +windowrule { + name = hyde_dolphin_popups + tag = +hyde_floating_apps + match:class = ^(org\.kde\.dolphin)$ + match:title = ^(Progress Dialog — Dolphin|Copying — Dolphin)$ } # common popups @@ -61,15 +68,15 @@ windowrule = match:float true, match:class hyde_floating_apps # // █▄▄ █▀█ ░█░ ██▄ █▀▄   █▀▄ █▄█ █▄▄ ██▄ ▄█ layerrule { -name = hyde_layer_blur -match:namespace = ^(rofi|notifications|swaync-(notification-window|control-center)|waybar|logout_dialog)$ -blur = true + name = hyde_layer_blur + match:namespace = ^(rofi|notifications|swaync-(notification-window|control-center)|waybar|logout_dialog)$ + blur = true } layerrule { -name = hyde_layer_ignore_alpha -match:namespace = ^(rofi|notifications|swaync-(notification-window|control-center)|logout_dialog|waybar|selection)$ -ignore_alpha = true + name = hyde_layer_ignore_alpha + match:namespace = ^(rofi|notifications|swaync-(notification-window|control-center)|logout_dialog|waybar|selection)$ + ignore_alpha = true } layerrule = no_anim true,match:namespace selection diff --git a/Configs/.local/share/waybar/styles/classes/cpuinfo.css b/Configs/.local/share/waybar/styles/classes/cpuinfo.css new file mode 100644 index 000000000..20767df26 --- /dev/null +++ b/Configs/.local/share/waybar/styles/classes/cpuinfo.css @@ -0,0 +1,78 @@ +/* Temperature buckets (5°C increments from cpuinfo.sh: temp-0, temp-5, …) */ +#custom-cpuinfo.temp-0, +#custom-cpuinfo.temp-5, +#custom-cpuinfo.temp-10 { + color: #4169e1; +} + +#custom-cpuinfo.temp-15, +#custom-cpuinfo.temp-20 { + color: #4682b4; +} + +#custom-cpuinfo.temp-25, +#custom-cpuinfo.temp-35, +#custom-cpuinfo.temp-30 { + color: #87ceeb; +} + +#custom-cpuinfo.temp-40, +#custom-cpuinfo.temp-45, +#custom-cpuinfo.temp-50, +#custom-cpuinfo.temp-55 { + color: unset; +} + +#custom-cpuinfo.temp-60 { + color: #ffa500; +} + +#custom-cpuinfo.temp-65 { + color: #ff8c00; +} + +#custom-cpuinfo.temp-70 { + color: #ff6347; +} + +#custom-cpuinfo.temp-75 { + color: #ff471a; +} + +#custom-cpuinfo.temp-80 { + color: #d22f2f; +} + +#custom-cpuinfo.temp-85 { + color: #ad1f2f; +} + +#custom-cpuinfo.temp-90, +#custom-cpuinfo.temp-95, +#custom-cpuinfo.temp-100 { + color: #8b0000; +} + +/* Utilization buckets (font weight by load) */ +#custom-cpuinfo.util-0, +#custom-cpuinfo.util-10, +#custom-cpuinfo.util-20 { + font-weight: 400; +} + +#custom-cpuinfo.util-30, +#custom-cpuinfo.util-40, +#custom-cpuinfo.util-50 { + font-weight: 500; +} + +#custom-cpuinfo.util-60, +#custom-cpuinfo.util-70, +#custom-cpuinfo.util-80 { + font-weight: 600; +} + +#custom-cpuinfo.util-90, +#custom-cpuinfo.util-100 { + font-weight: 700; +} \ No newline at end of file diff --git a/Configs/.local/share/waybar/styles/classes/gpuinfo.css b/Configs/.local/share/waybar/styles/classes/gpuinfo.css new file mode 100644 index 000000000..7e45c8a1c --- /dev/null +++ b/Configs/.local/share/waybar/styles/classes/gpuinfo.css @@ -0,0 +1,78 @@ +/* Temperature buckets (5°C increments) */ +#custom-gpuinfo.temp-0, +#custom-gpuinfo.temp-5, +#custom-gpuinfo.temp-10 { + color: #4169e1; +} + +#custom-gpuinfo.temp-15, +#custom-gpuinfo.temp-20 { + color: #4682b4; +} + +#custom-gpuinfo.temp-25, +#custom-gpuinfo.temp-35, +#custom-gpuinfo.temp-30 { + color: #87ceeb; +} + +#custom-gpuinfo.temp-40, +#custom-gpuinfo.temp-45, +#custom-gpuinfo.temp-50, +#custom-gpuinfo.temp-55 { + color: unset; +} + +#custom-gpuinfo.temp-60 { + color: #ffa500; +} + +#custom-gpuinfo.temp-65 { + color: #ff8c00; +} + +#custom-gpuinfo.temp-70 { + color: #ff6347; +} + +#custom-gpuinfo.temp-75 { + color: #ff471a; +} + +#custom-gpuinfo.temp-80 { + color: #d22f2f; +} + +#custom-gpuinfo.temp-85 { + color: #ad1f2f; +} + +#custom-gpuinfo.temp-90, +#custom-gpuinfo.temp-95, +#custom-gpuinfo.temp-100 { + color: #8b0000; +} + +/* Utilization buckets (font weight by load) */ +#custom-gpuinfo.util-0, +#custom-gpuinfo.util-10, +#custom-gpuinfo.util-20 { + font-weight: 400; +} + +#custom-gpuinfo.util-30, +#custom-gpuinfo.util-40, +#custom-gpuinfo.util-50 { + font-weight: 500; +} + +#custom-gpuinfo.util-60, +#custom-gpuinfo.util-70, +#custom-gpuinfo.util-80 { + font-weight: 600; +} + +#custom-gpuinfo.util-90, +#custom-gpuinfo.util-100 { + font-weight: 700; +} \ No newline at end of file diff --git a/Configs/.local/share/waybar/styles/defaults.css b/Configs/.local/share/waybar/styles/defaults.css index cb5eaebfb..9d7cf5fc4 100644 --- a/Configs/.local/share/waybar/styles/defaults.css +++ b/Configs/.local/share/waybar/styles/defaults.css @@ -12,6 +12,10 @@ @import "groups/leaf.css"; @import "groups/leaf-inverse.css"; +/* classes */ +@import "classes/cpuinfo.css"; +@import "classes/gpuinfo.css"; + /* Dynamic Stuff */ /* diff --git a/README.md b/README.md index 07eba0d70..ac7be2fd1 100644 --- a/README.md +++ b/README.md @@ -146,9 +146,13 @@ Whether you're helping with code, testing, or documentation, we appreciate your To update HyDE, you will need to pull the latest changes from GitHub and restore the configs by running the following commands: +> [!WARNING] +> The following commands will discard any uncommitted local changes in the repository. + ```shell cd ~/HyDE/Scripts -git pull origin master +git fetch --update-shallow --depth 1 origin master +git reset --hard origin/master ./install.sh -r ``` diff --git a/Scripts/install.sh b/Scripts/install.sh index abce923f2..0b7620cc4 100755 --- a/Scripts/install.sh +++ b/Scripts/install.sh @@ -25,8 +25,8 @@ EOF scrDir="$(dirname "$(realpath "$0")")" # shellcheck disable=SC1091 if ! source "${scrDir}/global_fn.sh"; then - echo "Error: unable to source global_fn.sh..." - exit 1 + echo "Error: unable to source global_fn.sh..." + exit 1 fi #------------------# @@ -41,28 +41,28 @@ flg_Nvidia=1 flg_ThemeInstall=1 while getopts idrstmnh RunStep; do - case $RunStep in - i) flg_Install=1 ;; - d) - flg_Install=1 - export use_default="--noconfirm" - ;; - r) flg_Restore=1 ;; - s) flg_Service=1 ;; - n) - # shellcheck disable=SC2034 - export flg_Nvidia=0 - print_log -r "[nvidia] " -b "Ignored :: " "skipping Nvidia actions" - ;; - h) - # shellcheck disable=SC2034 - export flg_Shell=1 - print_log -r "[shell] " -b "Reevaluate :: " "shell options" - ;; - t) flg_DryRun=1 ;; - m) flg_ThemeInstall=0 ;; - *) - cat <>"${scrDir}/install_pkg.lst" # Add a marker for user packages - if [ -f "${custom_pkg}" ] && [ -n "${custom_pkg}" ]; then - cat "${custom_pkg}" >>"${scrDir}/install_pkg.lst" - fi - - #--------------------------------# - # add nvidia drivers to the list # - #--------------------------------# - if nvidia_detect; then - if [ ${flg_Nvidia} -eq 1 ]; then - cat /usr/lib/modules/*/pkgbase | while read -r kernel; do - echo "${kernel}-headers" >>"${scrDir}/install_pkg.lst" - done - nvidia_detect --drivers >>"${scrDir}/install_pkg.lst" - else - print_log -warn "Nvidia" "Nvidia GPU detected but ignored..." - fi - fi - nvidia_detect --verbose - - #----------------# - # get user prefs # - #----------------# - echo "" - if ! chk_list "aurhlpr" "${aurList[@]}"; then - print_log -c "\nAUR Helpers :: " - aurList+=("yay-bin" "paru-bin") # Add this here instead of in global_fn.sh - for i in "${!aurList[@]}"; do - print_log -sec "$((i + 1))" " ${aurList[$i]} " - done - - prompt_timer 120 "Enter option number [default: yay-bin] | q to quit " - - case "${PROMPT_INPUT}" in - 1) export getAur="yay" ;; - 2) export getAur="paru" ;; - 3) export getAur="yay-bin" ;; - 4) export getAur="paru-bin" ;; - q) - print_log -sec "AUR" -crit "Quit" "Exiting..." - exit 1 - ;; - *) - print_log -sec "AUR" -warn "Defaulting to yay-bin" - print_log -sec "AUR" -stat "default" "yay-bin" - export getAur="yay-bin" - ;; - esac - if [[ -z "$getAur" ]]; then - print_log -sec "AUR" -crit "No AUR helper found..." "Log file at ${cacheDir}/logs/${HYDE_LOG}" - exit 1 - fi - fi - - if ! chk_list "myShell" "${shlList[@]}"; then - print_log -c "Shell :: " - for i in "${!shlList[@]}"; do - print_log -sec "$((i + 1))" " ${shlList[$i]} " - done - prompt_timer 120 "Enter option number [default: zsh] | q to quit " - - case "${PROMPT_INPUT}" in - 1) export myShell="zsh" ;; - 2) export myShell="fish" ;; - q) - print_log -sec "shell" -crit "Quit" "Exiting..." - exit 1 - ;; - *) - print_log -sec "shell" -warn "Defaulting to zsh" - export myShell="zsh" - ;; - esac - print_log -sec "shell" -stat "Added as shell" "${myShell}" - echo "${myShell}" >>"${scrDir}/install_pkg.lst" - - if [[ -z "$myShell" ]]; then - print_log -sec "shell" -crit "No shell found..." "Log file at ${cacheDir}/logs/${HYDE_LOG}" - exit 1 - else - print_log -sec "shell" -stat "detected :: " "${myShell}" - fi - fi - - if ! grep -q "^#user packages" "${scrDir}/install_pkg.lst"; then - print_log -sec "pkg" -crit "No user packages found..." "Log file at ${cacheDir}/logs/${HYDE_LOG}/install.sh" - exit 1 - fi - - #--------------------------------# - # install packages from the list # - #--------------------------------# - "${scrDir}/install_pkg.sh" "${scrDir}/install_pkg.lst" + #----------------------# + # prepare package list # + #----------------------# + shift $((OPTIND - 1)) + custom_pkg=$1 + cp "${scrDir}/pkg_core.lst" "${scrDir}/install_pkg.lst" + trap 'mv "${scrDir}/install_pkg.lst" "${cacheDir}/logs/${HYDE_LOG}/install_pkg.lst"' EXIT + + echo -e "\n#user packages" >>"${scrDir}/install_pkg.lst" # Add a marker for user packages + if [ -f "${custom_pkg}" ] && [ -n "${custom_pkg}" ]; then + cat "${custom_pkg}" >>"${scrDir}/install_pkg.lst" + fi + + #--------------------------------# + # add nvidia drivers to the list # + #--------------------------------# + if nvidia_detect; then + if [ ${flg_Nvidia} -eq 1 ]; then + cat /usr/lib/modules/*/pkgbase | while read -r kernel; do + echo "${kernel}-headers" >>"${scrDir}/install_pkg.lst" + done + nvidia_detect --drivers >>"${scrDir}/install_pkg.lst" + else + print_log -warn "Nvidia" "Nvidia GPU detected but ignored..." + fi + fi + nvidia_detect --verbose + + #----------------# + # get user prefs # + #----------------# + echo "" + if ! chk_list "aurhlpr" "${aurList[@]}"; then + print_log -c "\nAUR Helpers :: " + aurList+=("yay-bin" "paru-bin") # Add this here instead of in global_fn.sh + for i in "${!aurList[@]}"; do + print_log -sec "$((i + 1))" " ${aurList[$i]} " + done + + prompt_timer 120 "Enter option number [default: yay-bin] | q to quit " + + case "${PROMPT_INPUT}" in + 1) export getAur="yay" ;; + 2) export getAur="paru" ;; + 3) export getAur="yay-bin" ;; + 4) export getAur="paru-bin" ;; + q) + print_log -sec "AUR" -crit "Quit" "Exiting..." + exit 1 + ;; + *) + print_log -sec "AUR" -warn "Defaulting to yay-bin" + print_log -sec "AUR" -stat "default" "yay-bin" + export getAur="yay-bin" + ;; + esac + if [[ -z "$getAur" ]]; then + print_log -sec "AUR" -crit "No AUR helper found..." "Log file at ${cacheDir}/logs/${HYDE_LOG}" + exit 1 + fi + fi + + if ! chk_list "myShell" "${shlList[@]}"; then + print_log -c "Shell :: " + for i in "${!shlList[@]}"; do + print_log -sec "$((i + 1))" " ${shlList[$i]} " + done + prompt_timer 120 "Enter option number [default: zsh] | q to quit " + + case "${PROMPT_INPUT}" in + 1) export myShell="zsh" ;; + 2) export myShell="fish" ;; + q) + print_log -sec "shell" -crit "Quit" "Exiting..." + exit 1 + ;; + *) + print_log -sec "shell" -warn "Defaulting to zsh" + export myShell="zsh" + ;; + esac + print_log -sec "shell" -stat "Added as shell" "${myShell}" + echo "${myShell}" >>"${scrDir}/install_pkg.lst" + + if [[ -z "$myShell" ]]; then + print_log -sec "shell" -crit "No shell found..." "Log file at ${cacheDir}/logs/${HYDE_LOG}" + exit 1 + else + print_log -sec "shell" -stat "detected :: " "${myShell}" + fi + fi + + if ! grep -q "^#user packages" "${scrDir}/install_pkg.lst"; then + print_log -sec "pkg" -crit "No user packages found..." "Log file at ${cacheDir}/logs/${HYDE_LOG}/install.sh" + exit 1 + fi + + #--------------------------------# + # install packages from the list # + #--------------------------------# + "${scrDir}/install_pkg.sh" "${scrDir}/install_pkg.lst" fi #---------------------------# # restore my custom configs # #---------------------------# if [ ${flg_Restore} -eq 1 ]; then - cat <<"EOF" + cat <<"EOF" _ _ ___ ___ ___| |_ ___ ___|_|___ ___ @@ -245,21 +245,21 @@ if [ ${flg_Restore} -eq 1 ]; then EOF - if [ "${flg_DryRun}" -ne 1 ] && [ -n "$HYPRLAND_INSTANCE_SIGNATURE" ]; then - hyprctl keyword misc:disable_autoreload 1 -q - fi - - "${scrDir}/restore_fnt.sh" - "${scrDir}/restore_cfg.sh" - "${scrDir}/restore_thm.sh" - print_log -g "[generate] " "cache ::" "Wallpapers..." - if [ "${flg_DryRun}" -ne 1 ]; then - export PATH="$HOME/.local/lib/hyde:$HOME/.local/bin:${PATH}" - "$HOME/.local/lib/hyde/swwwallcache.sh" -t "" - "$HOME/.local/lib/hyde/theme.switch.sh" -q || true - "$HOME/.local/lib/hyde/waybar.py" --update || true - echo "[install] reload :: Hyprland" - fi + if [ "${flg_DryRun}" -ne 1 ] && [ -n "$HYPRLAND_INSTANCE_SIGNATURE" ]; then + hyprctl keyword misc:disable_autoreload 1 -q + fi + + "${scrDir}/restore_fnt.sh" + "${scrDir}/restore_cfg.sh" + "${scrDir}/restore_thm.sh" + print_log -g "[generate] " "cache ::" "Wallpapers..." + if [ "${flg_DryRun}" -ne 1 ]; then + export PATH="$HOME/.local/lib/hyde:$HOME/.local/bin:${PATH}" + "$HOME/.local/lib/hyde/swwwallcache.sh" -t "" + "$HOME/.local/lib/hyde/theme.switch.sh" -q || true + "$HOME/.local/lib/hyde/waybar.py" --update || true + echo "[install] reload :: Hyprland" + fi fi @@ -267,7 +267,7 @@ fi # post-install script # #---------------------# if [ ${flg_Install} -eq 1 ] && [ ${flg_Restore} -eq 1 ]; then - cat <<"EOF" + cat <<"EOF" _ _ _ _ _ ___ ___ ___| |_ |_|___ ___| |_ ___| | | @@ -277,34 +277,33 @@ if [ ${flg_Install} -eq 1 ] && [ ${flg_Restore} -eq 1 ]; then EOF - "${scrDir}/install_pst.sh" + "${scrDir}/install_pst.sh" fi - #---------------------------# # run migrations # #---------------------------# if [ ${flg_Restore} -eq 1 ]; then -# migrationDir="$(realpath "$(dirname "$(realpath "$0")")/../migrations")" -migrationDir="${scrDir}/migrations" + # migrationDir="$(realpath "$(dirname "$(realpath "$0")")/../migrations")" + migrationDir="${scrDir}/migrations" -if [ ! -d "${migrationDir}" ]; then - print_log -warn "Migrations" "Directory not found: ${migrationDir}" -fi + if [ ! -d "${migrationDir}" ]; then + print_log -warn "Migrations" "Directory not found: ${migrationDir}" + fi -echo "Running migrations from: ${migrationDir}" + echo "Running migrations from: ${migrationDir}" -if [ -d "${migrationDir}" ] && find "${migrationDir}" -type f | grep -q .; then - migrationFile=$(find "${migrationDir}" -maxdepth 1 -type f -printf '%f\n' | sort -r | head -n 1) + if [ -d "${migrationDir}" ] && find "${migrationDir}" -type f | grep -q .; then + migrationFile=$(find "${migrationDir}" -maxdepth 1 -type f -printf '%f\n' | sort -r | head -n 1) - if [[ -n "${migrationFile}" && -f "${migrationDir}/${migrationFile}" ]]; then - echo "Found migration file: ${migrationFile}" - sh "${migrationDir}/${migrationFile}" - else - echo "No migration file found in ${migrationDir}. Skipping migrations." - fi -fi + if [[ -n "${migrationFile}" && -f "${migrationDir}/${migrationFile}" ]]; then + echo "Found migration file: ${migrationFile}" + sh "${migrationDir}/${migrationFile}" + else + echo "No migration file found in ${migrationDir}. Skipping migrations." + fi + fi fi @@ -312,7 +311,7 @@ fi # enable system services # #------------------------# if [ ${flg_Service} -eq 1 ]; then - cat <<"EOF" + cat <<"EOF" _ ___ ___ ___ _ _|_|___ ___ ___ @@ -321,31 +320,31 @@ if [ ${flg_Service} -eq 1 ]; then EOF - "${scrDir}/restore_svc.sh" + "${scrDir}/restore_svc.sh" fi if [ $flg_Install -eq 1 ]; then - echo "" - print_log -g "Installation" " :: " "COMPLETED!" + echo "" + print_log -g "Installation" " :: " "COMPLETED!" fi print_log -b "Log" " :: " -y "View logs at ${cacheDir}/logs/${HYDE_LOG}" if [ $flg_Install -eq 1 ] || - [ $flg_Restore -eq 1 ] || - [ $flg_Service -eq 1 ] && - [ $flg_DryRun -ne 1 ]; then - - if [[ -z "${HYPRLAND_CONFIG:-}" ]] || [[ ! -f "${HYPRLAND_CONFIG}" ]]; then - print_log -warn "Hyprland config not found! Might be a new install or upgrade." - print_log -warn "Please reboot the system to apply new changes." - fi - - print_log -stat "HyDE" "It is not recommended to use newly installed or upgraded HyDE without rebooting the system. Do you want to reboot the system? (y/N)" - read -r answer - - if [[ "$answer" == [Yy] ]]; then - echo "Rebooting system" - systemctl reboot - else - echo "The system will not reboot" - fi + [ $flg_Restore -eq 1 ] || + [ $flg_Service -eq 1 ] && + [ $flg_DryRun -ne 1 ]; then + + if [[ -z "${HYPRLAND_CONFIG:-}" ]] || [[ ! -f "${HYPRLAND_CONFIG}" ]]; then + print_log -warn "Hyprland config not found! Might be a new install or upgrade." + print_log -warn "Please reboot the system to apply new changes." + fi + + print_log -stat "HyDE" "It is not recommended to use newly installed or upgraded HyDE without rebooting the system. Do you want to reboot the system? (y/N)" + read -r answer + + if [[ "$answer" == [Yy] ]]; then + echo "Rebooting system" + systemctl reboot + else + echo "The system will not reboot" + fi fi diff --git a/Source/assets/keybinds/KEYBINDINGS.es.md b/Source/assets/keybinds/KEYBINDINGS.es.md index 37cee7673..e4b018b75 100644 --- a/Source/assets/keybinds/KEYBINDINGS.es.md +++ b/Source/assets/keybinds/KEYBINDINGS.es.md @@ -6,7 +6,7 @@ ###### _
// design by t2
_ -![hyde_banner](../assets/hyde_banner.png) +![hyde_banner](../hyde_banner.png) + +[![All Contributors](https://img.shields.io/badge/all_contributors-2-orange.svg?style=flat-square)](#contributors-) + [![en](https://img.shields.io/badge/lang-en-red.svg)](../../README.md) [![de](https://img.shields.io/badge/lang-de-black.svg)](README.de.md) [![nl](https://img.shields.io/badge/lang-nl-green.svg)](README.nl.md) @@ -26,10 +30,11 @@ Soporte multilingüe para el README

 Instalación 
   -
actualizar
   +
Actualizar
   +
 Contribuir 
  
 Temas 
  
 Estilos 
   -
 Combinaciones 
   +
 Atajos 
  
 Youtube 
  
 Wiki 
  
 Discord 
@@ -46,7 +51,7 @@ Soporte multilingüe para el README -Mira esto para ver la nota completa: +Mire esto para ver la nota completa: [Viaje a HyDE y más allá](./Hyprdots-to-HyDE.es.md) -Reinicie después de que el script de instalación se complete y lo lleve a la pantalla de inicio de sesión de SDDM (o pantalla negra) por primera vez. -Para obtener más detalles, consulte la [wiki de instalación](https://github.com/HyDE-Project/HyDE/wiki/installation). +Por favor, reinicie el sistema una vez que el script de instalación haya finalizado y lo lleve por primera vez a la pantalla de inicio de sesión de SDDM (o a una pantalla negra). +Para más detalles, consulte la [wiki de instalación](https://github.com/HyDE-Project/HyDE/wiki/installation). @@ -109,7 +120,7 @@ Para obtener más detalles, consulte la [wiki de instalación](https://github.co --- -Para actualizar HyDE, necesitarás extraer los últimos cambios de GitHub y restaurar las configuraciones ejecutando los siguientes comandos: +Para actualizar HyDE, deberá obtener los últimos cambios desde GitHub y restaurar las configuraciones ejecutando los siguientes comandos: ```shell cd ~/HyDE/Scripts @@ -118,12 +129,12 @@ git pull origin master ``` > [!IMPORTANT] -> Tenga en cuenta que cualquier configuración que haya realizado se sobrescribirá si se indica que debe realizarse tal como se indica en `Scripts/restore_cfg.psv`. -> Sin embargo, se realiza una copia de seguridad de todas las configuraciones reemplazadas y se pueden recuperar desde allí `~/.config/cfg_backups`. +> Tenga en cuenta que cualquier configuración que haya realizado se sobrescribirá si está incluida en la lista de `Scripts/restore_cfg.psv`. +> Sin embargo, todas las configuraciones reemplazadas se respaldan y pueden recuperarse desde `~/.config/cfg_backups.`
@@ -131,13 +142,67 @@ For more details, you can refer to [Hyde-cli - dots management wiki](https://git
 🡅 
+ + + +--- + +¡Damos la bienvenida a las contribuciones de la comunidad! Para comenzar: + +- Consulte nuestras pautas en [CONTRIBUTING.md](CONTRIBUTING.md) +- Lea sobre los roles del equipo en [TEAM_ROLES.md](TEAM_ROLES.md) +- Revise nuestro proceso de lanzamiento en [RELEASE_POLICY.md](RELEASE_POLICY.md) +- Agregue su nombre en [CONTRIBUTORS.md](CONTRIBUTORS.md) al realizar su primer PR + +Ya sea que ayude con código, pruebas o documentación, agradecemos su apoyo para mejorar HyDE para todos. ¡Gracias! + +
+
+
🡅
+
+ + + + +--- + +HyDEVM es un script que le permite ejecutar HyDE en una máquina virtual para pruebas y desarrollo. + +## Inicio rápido + +### Arch Linux + +```bash +# Descargar y ejecutar (detectará automáticamente los paquetes faltantes) +curl -L https://raw.githubusercontent.com/HyDE-Project/HyDE/main/Scripts/hydevm/hydevm.sh -o hydevm +chmod +x hydevm +./hydevm +``` + +### NixOS (o Nix) + +```bash +# Usando flakes desde el repositorio de HyDE +nix run github:HyDE-Project/HyDE + +# O si tiene el repositorio clonado localmente +nix run . +``` + +Para más detalles, consulte el [README de HyDEVM](Scripts/hydevm/README.md). + + + --- -Todos nuestros temas oficiales se almacenan en un repositorio separado, lo que permite a los usuarios instalarlos mediante themepatcher. -Para obtener más información, visite [Temas HyDE](https://github.com/HyDE-Project/hyde-themes). +Todos nuestros temas oficiales se almacenan en un repositorio separado, lo que permite a los usuarios instalarlos usando themepatcher. +Para más información, visite [HyDE-Project/hyde-themes](https://github.com/HyDE-Project/hyde-themes).
@@ -159,9 +224,9 @@ Para obtener más información, visite [Temas HyDE](https://github.com/HyDE-Proj > [!TIP] -> Todos, incluido usted, pueden crear, mantener y compartir temas adicionales, ¡todos los cuales pueden instalarse usando themepatcher! -> Para crear su propio tema personalizado, consulte la [Wiki de temas](https://github.com/prasanthrangan/hyprdots/wiki/Theming). -> Si desea que se muestre su tema de Hyde o desea encontrar algunos temas no oficiales, visite [Galeria HyDE](https://github.com/kRHYME7/hyde-gallery)! +> Cualquiera, incluyendo usted, puede crear, mantener y compartir temas adicionales, todos los cuales se pueden instalar usando themepatcher. +> Para crear su propio tema personalizado, consulte la [wiki de tematización](https://github.com/prasanthrangan/hyprdots/wiki/Theming). +> Si desea que su tema de HyDE se muestre o quiere encontrar algunos temas no oficiales, visite [kRHYME7/hyde-gallery](https://github.com/kRHYME7/hyde-gallery).

@@ -173,14 +238,14 @@ Para obtener más información, visite [Temas HyDE](https://github.com/HyDE-Proj --- -
Seleccionar tema
+
Selección de Tema
-
Seleccionar fondo de pantallaSeleccionar lanzador
+
-
Selección de Fondo de PantallaSelección del Lanzador
Modos de WallbashAcción de notificación
+
Modos de WallbashAcción de Notificación
@@ -200,11 +265,11 @@ Para obtener más información, visite [Temas HyDE](https://github.com/HyDE-Proj
-
Cerrar sesión
+
Menú de WLogout
-
Lanzador de juegos
+
Lanzador de Juegos
@@ -212,16 +277,23 @@ Para obtener más información, visite [Temas HyDE](https://github.com/HyDE-Proj
- + + + +[![Stargazers over time](https://starchart.cc/HyDE-Project/HyDE.svg?background=%231f2226&axis=%23ebbcba&line=%23c79bf0)](https://starchart.cc/HyDE-Project/HyDE) + + +--- + + + + + +- [Consulte todos los Créditos aquí](./CREDITS.md). + +---

@@ -229,18 +301,29 @@ Para obtener más información, visite [Temas HyDE](https://github.com/HyDE-Proj
- Última edición el: 21/03/2025 + Última edición el: 01/01/2026
- - + +## Contribuidores ✨ ---- +Muchas gracias a estas maravillosas personas ([clave de emojis](https://allcontributors.org/docs/en/emoji-key)): + + + + + + + + + + + +
Rubin Bhandari
Rubin Bhandari

💻
Khing
Khing

💻 📖
+ + + + + - - - - - Star History Chart - - +Este proyecto sigue la especificación de [all-contributors](https://github.com/all-contributors/all-contributors). ¡Se aceptan contribuciones de cualquier tipo!