├── README.md ├── dotfiles ├── .zshrc ├── eww │ ├── assets │ │ ├── apps │ │ │ ├── battle.png │ │ │ ├── bitwig.png │ │ │ ├── bottles.png │ │ │ ├── caprine.png │ │ │ ├── code.png │ │ │ ├── editor.png │ │ │ ├── file-manager.png │ │ │ ├── firefox.png │ │ │ ├── kitty.png │ │ │ ├── spotify.png │ │ │ ├── svg │ │ │ │ ├── battle.svg │ │ │ │ ├── bitwig.svg │ │ │ │ ├── bottles.svg │ │ │ │ ├── caprine.svg │ │ │ │ ├── code.svg │ │ │ │ ├── editor.png │ │ │ │ ├── file-manager.svg │ │ │ │ ├── firefox.svg │ │ │ │ ├── kitty.svg │ │ │ │ ├── nvim.svg │ │ │ │ └── spotify.svg │ │ │ └── terminal.png │ │ ├── powermenu │ │ │ ├── light-lock.png │ │ │ ├── light-logout.png │ │ │ ├── light-reboot.png │ │ │ ├── light-shutdown.png │ │ │ ├── light-suspend.png │ │ │ ├── lock.png │ │ │ ├── logout.png │ │ │ ├── reboot.png │ │ │ ├── shutdown.png │ │ │ ├── suspend.png │ │ │ └── svg │ │ │ │ ├── light-lock.svg │ │ │ │ ├── light-logout.svg │ │ │ │ ├── light-reboot.svg │ │ │ │ ├── light-shutdown.svg │ │ │ │ ├── light-suspend.svg │ │ │ │ ├── lock.svg │ │ │ │ ├── logout.svg │ │ │ │ ├── reboot.svg │ │ │ │ ├── shutdown.svg │ │ │ │ └── suspend.svg │ │ ├── prueba │ │ ├── wallpaper.png │ │ └── wallpapers │ │ │ ├── 1.jpeg │ │ │ ├── 2.jpeg │ │ │ ├── 3.jpeg │ │ │ ├── 4.jpeg │ │ │ ├── 5.jpeg │ │ │ ├── 6.jpeg │ │ │ └── 7.jpeg │ ├── eww.scss │ ├── eww.yuck │ ├── scripts │ │ ├── apps │ │ ├── bluetooth │ │ ├── brightness │ │ ├── events │ │ ├── hyprland │ │ ├── init │ │ ├── launcher │ │ ├── myshell │ │ │ ├── apps.js │ │ │ ├── battery.js │ │ │ ├── bluetooth.js │ │ │ ├── dbus.js │ │ │ ├── lib.js │ │ │ ├── main.js │ │ │ ├── media.js │ │ │ ├── myshell │ │ │ ├── network.js │ │ │ └── notifications.js │ │ ├── network │ │ ├── night_light │ │ ├── notifications │ │ ├── osd │ │ ├── player │ │ ├── power │ │ ├── theme │ │ ├── volume │ │ └── weather │ ├── scss │ │ ├── colors.scss │ │ ├── colors_dark.scss │ │ ├── colors_light.scss │ │ ├── common.scss │ │ ├── variables.scss │ │ ├── widgets │ │ │ ├── bar_widget.scss │ │ │ ├── calendar.scss │ │ │ ├── events.scss │ │ │ ├── media.scss │ │ │ ├── notification.scss │ │ │ ├── sys_sliders.scss │ │ │ ├── toggle_button.scss │ │ │ ├── user.scss │ │ │ └── weather.scss │ │ └── windows │ │ │ ├── app_laucher.scss │ │ │ ├── datemenu.scss │ │ │ ├── desktop.scss │ │ │ ├── dock.scss │ │ │ ├── hbar.scss │ │ │ ├── media.scss │ │ │ ├── noti_center.scss │ │ │ ├── notifications.scss │ │ │ ├── osd.scss │ │ │ ├── powermenu.scss │ │ │ ├── quicksettings.scss │ │ │ └── vbar.scss │ ├── setups │ │ ├── leftbar.yuck │ │ └── topbar.yuck │ └── yuck │ │ ├── widgets.yuck │ │ ├── widgets │ │ ├── bar_widgets.yuck │ │ ├── events.yuck │ │ ├── media.yuck │ │ ├── notification.yuck │ │ ├── sys_sliders.yuck │ │ ├── sysprogress.yuck │ │ ├── toggles.yuck │ │ ├── user.yuck │ │ └── weather.yuck │ │ ├── windows.yuck │ │ └── windows │ │ ├── app_launcher.yuck │ │ ├── datemenu.yuck │ │ ├── desktop.yuck │ │ ├── dock.yuck │ │ ├── hbar.yuck │ │ ├── media.yuck │ │ ├── noti_center.yuck │ │ ├── notifications.yuck │ │ ├── osd.yuck │ │ ├── powermenu.yuck │ │ ├── quicksettings.yuck │ │ └── vbar.yuck ├── hypr │ ├── hyprland.conf │ └── hyprpaper.conf ├── neofetch │ ├── config.conf │ └── images │ │ ├── arch.png │ │ ├── arch_dark.png │ │ ├── artix.png │ │ ├── bedrock.png │ │ ├── gentoo.png │ │ ├── gentoo_dark.png │ │ ├── lofi.png │ │ ├── loli.png │ │ ├── lolix.png │ │ ├── pink.jpg │ │ ├── sakura.png │ │ ├── ubuntu.png │ │ ├── ubuntu_dark.png │ │ ├── void.png │ │ └── void_dark.png ├── powerlevel10k │ ├── root │ │ └── .p10k.zsh │ └── user │ │ └── .p10k.zsh ├── scripts │ ├── autolock │ ├── offmonitor │ └── volume ├── swappy │ └── config ├── swaylock │ └── config ├── wallpaper.png ├── waybar │ ├── config.jsonc │ ├── scripts │ │ ├── mediaplayer.py │ │ ├── playerctl │ │ │ └── playerctl.sh │ │ └── wlrecord.sh │ └── style.css └── wezterm │ ├── colors │ ├── rose-pine-dawn.toml │ ├── rose-pine-moon.toml │ └── rose-pine.toml │ ├── lua │ ├── rose-pine-dawn.lua │ ├── rose-pine-moon.lua │ └── rose-pine.lua │ └── wezterm.lua └── setup.sh /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 | 5 |

6 | 7 |
8 |

¡Hola! ¡Gracias por venir! 🩷

9 |

10 | ¡Bienvenid@ a mis archivos de configuración de Hyprland!
11 | En este repositorio encontrarás todos mis archivos de configuración
12 | Siéntete libre de tomar cualquier cosa de aquí, ¡solo recuerda darme crédito por ello! :)

13 | En esta versión de Hyprland podréis disfrutar de un diseño más clásico pero con algunos detalles modernos. 14 |

15 |
16 |

‼️ Importante tener en cuenta!!

17 |

No es compatible con Nvidia ni con Máquinas virtuales.

18 |

Es muy importante entender que dependiendo del hardware donde realices la instalación, el proceso será más o menos rápido.

19 |
20 |

🍧 Información

21 | 30 |
31 |

🔧 Instalación

32 |

Aplica permisos de ejecución a 'setup.sh' e inicialo. Posteriormente debes esperar hasta que finalice.

33 |

Te dejo por aquí un vídeo por si quieres realizar la instalación de una forma más guiada: https://www.youtube.com/watch?v=f4rUgk1rmyc&ab_channel=f3l3p1n0

34 |
35 |

🔴 Posibles problemas y soluciones

36 |

En esta sección se abarcarán los posibles problemas y soluciones que vayan surgiendo:

37 |
◻️ El wallpaper no se aplica al iniciar sesión
38 |

Debes ir a la configuración de hyprpaper: nano .config/hypr/hyprpaper.conf

39 |

Posteriormente, cambia el nombre del monitor que hay establecido por el nombre de tu monitor

40 |

Para saber el nombre de tu monitor debes escribir en la terminal: hyprctl monitors

41 |
◻️ Waybar no carga al iniciar sesión
42 |

Debes abrir la configuración de waybar: nano .config/waybar/config.jsonc

43 |

En el archivo debes modificar el apartado output para cambiar el nombre del monitor.

44 |
◻️ El powermenu no funciona
45 |

Debes editar el archivo 'nano ~/.config/eww/yuck/windows/powermenu.yuck'

46 |

En este archivo encuentra la linea donde haya escrito lo siguiente: ':onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu powermenu && ${action}"'

47 |

En esta linea debes cambiar la parte de '&& ${action}' la cual debe quedar de la siguiente forma '& ${action}"'

48 |

Básicamente lo que habrás realizado es eliminar uno de los símbolos '&'

49 |
50 |

👤 Autor

51 |

f3l3p1n0

52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /dotfiles/.zshrc: -------------------------------------------------------------------------------- 1 | # Fix the Java Problem 2 | export _JAVA_AWT_WM_NONREPARENTING=1 3 | 4 | # Enable Powerlevel10k instant prompt. Should stay at the top of ~/.zshrc. 5 | if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then 6 | source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" 7 | fi 8 | 9 | # Set up the prompt 10 | 11 | autoload -Uz promptinit 12 | promptinit 13 | prompt adam1 14 | 15 | setopt histignorealldups sharehistory 16 | 17 | # Use emacs keybindings even if our EDITOR is set to vi 18 | bindkey -e 19 | 20 | # Keep 1000 lines of history within the shell and save it to ~/.zsh_history: 21 | HISTSIZE=1000 22 | SAVEHIST=1000 23 | HISTFILE=~/.zsh_history 24 | 25 | # Use modern completion system 26 | autoload -Uz compinit 27 | compinit 28 | 29 | zstyle ':completion:*' auto-description 'specify: %d' 30 | zstyle ':completion:*' completer _expand _complete _correct _approximate 31 | zstyle ':completion:*' format 'Completing %d' 32 | zstyle ':completion:*' group-name '' 33 | zstyle ':completion:*' menu select=2 34 | eval "$(dircolors -b)" 35 | zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS} 36 | zstyle ':completion:*' list-colors '' 37 | zstyle ':completion:*' list-prompt %SAt %p: Hit TAB for more, or the character to insert%s 38 | zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=* l:|=*' 39 | zstyle ':completion:*' menu select=long 40 | zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s 41 | zstyle ':completion:*' use-compctl false 42 | zstyle ':completion:*' verbose true 43 | 44 | zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31' 45 | zstyle ':completion:*:kill:*' command 'ps -u $USER -o pid,%cpu,tty,cputime,cmd' 46 | source ~/powerlevel10k/powerlevel10k.zsh-theme 47 | 48 | # To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. 49 | [[ -f ~/.p10k.zsh ]] && source ~/.p10k.zsh 50 | 51 | # Manual configuration 52 | 53 | PATH=/root/.local/bin:/snap/bin:/usr/sandbox/:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/share/games:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games 54 | 55 | # Manual aliases 56 | alias ll='lsd -lh --group-dirs=first' 57 | alias la='lsd -la --group-dirs=first' 58 | alias l='lsd --group-dirs=first' 59 | alias lla='lsd -lha --group-dirs=first' 60 | alias ls='lsd --group-dirs=first' 61 | alias cat='bat' 62 | alias cl='clear' 63 | 64 | [ -f ~/.fzf.zsh ] && source ~/.fzf.zsh 65 | 66 | # Plugins 67 | source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh 68 | source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh 69 | source /usr/share/zsh-sudo/sudo.plugin.zsh 70 | 71 | # Set 'man' colors 72 | function man() { 73 | env \ 74 | LESS_TERMCAP_mb=$'\e[01;31m' \ 75 | LESS_TERMCAP_md=$'\e[01;31m' \ 76 | LESS_TERMCAP_me=$'\e[0m' \ 77 | LESS_TERMCAP_se=$'\e[0m' \ 78 | LESS_TERMCAP_so=$'\e[01;44;33m' \ 79 | LESS_TERMCAP_ue=$'\e[0m' \ 80 | LESS_TERMCAP_us=$'\e[01;32m' \ 81 | man "$@" 82 | } 83 | 84 | # fzf improvement 85 | function fzf-lovely(){ 86 | 87 | if [ "$1" = "h" ]; then 88 | fzf -m --reverse --preview-window down:20 --preview '[[ $(file --mime {}) =~ binary ]] && 89 | echo {} is a binary file || 90 | (bat --style=numbers --color=always {} || 91 | highlight -O ansi -l {} || 92 | coderay {} || 93 | rougify {} || 94 | cat {}) 2> /dev/null | head -500' 95 | 96 | else 97 | fzf -m --preview '[[ $(file --mime {}) =~ binary ]] && 98 | echo {} is a binary file || 99 | (bat --style=numbers --color=always {} || 100 | highlight -O ansi -l {} || 101 | coderay {} || 102 | rougify {} || 103 | cat {}) 2> /dev/null | head -500' 104 | fi 105 | } 106 | 107 | function rmk(){ 108 | scrub -p dod $1 109 | shred -zun 10 -v $1 110 | } 111 | 112 | # Finalize Powerlevel10k instant prompt. Should stay at the bottom of ~/.zshrc. 113 | (( ! ${+functions[p10k-instant-prompt-finalize]} )) || p10k-instant-prompt-finalize 114 | 115 | bindkey "^[[H" beginning-of-line 116 | bindkey "^[[F" end-of-line 117 | bindkey "^[[3~" delete-char 118 | bindkey "^[[1;3C" forward-word 119 | bindkey "^[[1;3D" backward-word 120 | -------------------------------------------------------------------------------- /dotfiles/eww/assets/apps/battle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/apps/battle.png -------------------------------------------------------------------------------- /dotfiles/eww/assets/apps/bitwig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/apps/bitwig.png -------------------------------------------------------------------------------- /dotfiles/eww/assets/apps/bottles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/apps/bottles.png -------------------------------------------------------------------------------- /dotfiles/eww/assets/apps/caprine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/apps/caprine.png -------------------------------------------------------------------------------- /dotfiles/eww/assets/apps/code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/apps/code.png -------------------------------------------------------------------------------- /dotfiles/eww/assets/apps/editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/apps/editor.png -------------------------------------------------------------------------------- /dotfiles/eww/assets/apps/file-manager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/apps/file-manager.png -------------------------------------------------------------------------------- /dotfiles/eww/assets/apps/firefox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/apps/firefox.png -------------------------------------------------------------------------------- /dotfiles/eww/assets/apps/kitty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/apps/kitty.png -------------------------------------------------------------------------------- /dotfiles/eww/assets/apps/spotify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/apps/spotify.png -------------------------------------------------------------------------------- /dotfiles/eww/assets/apps/svg/battle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /dotfiles/eww/assets/apps/svg/bitwig.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /dotfiles/eww/assets/apps/svg/caprine.svg: -------------------------------------------------------------------------------- 1 | 2 | 10 | 12 | 19 | 24 | 29 | 34 | 39 | 40 | 41 | 48 | 52 | 56 | 60 | 64 | 65 | 72 | 76 | 80 | 84 | 88 | 89 | 94 | 99 | 104 | 105 | -------------------------------------------------------------------------------- /dotfiles/eww/assets/apps/svg/code.svg: -------------------------------------------------------------------------------- 1 | 2 | 9 | 11 | 15 | 19 | 23 | 27 | 31 | 35 | 39 | 43 | 44 | -------------------------------------------------------------------------------- /dotfiles/eww/assets/apps/svg/editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/apps/svg/editor.png -------------------------------------------------------------------------------- /dotfiles/eww/assets/apps/svg/file-manager.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /dotfiles/eww/assets/apps/svg/firefox.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /dotfiles/eww/assets/apps/svg/kitty.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /dotfiles/eww/assets/apps/svg/nvim.svg: -------------------------------------------------------------------------------- 1 | 2 | 11 | 13 | 17 | 22 | 27 | 33 | 39 | 45 | 51 | 52 | 60 | 65 | 70 | 71 | 79 | 83 | 87 | 88 | 96 | 101 | 106 | 107 | 108 | 115 | 119 | 123 | 127 | 131 | 135 | 139 | 140 | 147 | 151 | 155 | 159 | 163 | 164 | 168 | 172 | 176 | 181 | 186 | 191 | 197 | 198 | -------------------------------------------------------------------------------- /dotfiles/eww/assets/apps/svg/spotify.svg: -------------------------------------------------------------------------------- 1 | 2 | 10 | 12 | 14 | 18 | 22 | 26 | 30 | 34 | 38 | 39 | 47 | 48 | 53 | 58 | 62 | 66 | 70 | 71 | -------------------------------------------------------------------------------- /dotfiles/eww/assets/apps/terminal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/apps/terminal.png -------------------------------------------------------------------------------- /dotfiles/eww/assets/powermenu/light-lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/powermenu/light-lock.png -------------------------------------------------------------------------------- /dotfiles/eww/assets/powermenu/light-logout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/powermenu/light-logout.png -------------------------------------------------------------------------------- /dotfiles/eww/assets/powermenu/light-reboot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/powermenu/light-reboot.png -------------------------------------------------------------------------------- /dotfiles/eww/assets/powermenu/light-shutdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/powermenu/light-shutdown.png -------------------------------------------------------------------------------- /dotfiles/eww/assets/powermenu/light-suspend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/powermenu/light-suspend.png -------------------------------------------------------------------------------- /dotfiles/eww/assets/powermenu/lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/powermenu/lock.png -------------------------------------------------------------------------------- /dotfiles/eww/assets/powermenu/logout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/powermenu/logout.png -------------------------------------------------------------------------------- /dotfiles/eww/assets/powermenu/reboot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/powermenu/reboot.png -------------------------------------------------------------------------------- /dotfiles/eww/assets/powermenu/shutdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/powermenu/shutdown.png -------------------------------------------------------------------------------- /dotfiles/eww/assets/powermenu/suspend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/powermenu/suspend.png -------------------------------------------------------------------------------- /dotfiles/eww/assets/powermenu/svg/light-lock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dotfiles/eww/assets/powermenu/svg/light-logout.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /dotfiles/eww/assets/powermenu/svg/light-reboot.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dotfiles/eww/assets/powermenu/svg/light-shutdown.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dotfiles/eww/assets/powermenu/svg/light-suspend.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dotfiles/eww/assets/powermenu/svg/lock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dotfiles/eww/assets/powermenu/svg/logout.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /dotfiles/eww/assets/powermenu/svg/reboot.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dotfiles/eww/assets/powermenu/svg/shutdown.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dotfiles/eww/assets/powermenu/svg/suspend.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dotfiles/eww/assets/prueba: -------------------------------------------------------------------------------- 1 | prueba 2 | -------------------------------------------------------------------------------- /dotfiles/eww/assets/wallpaper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/wallpaper.png -------------------------------------------------------------------------------- /dotfiles/eww/assets/wallpapers/1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/wallpapers/1.jpeg -------------------------------------------------------------------------------- /dotfiles/eww/assets/wallpapers/2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/wallpapers/2.jpeg -------------------------------------------------------------------------------- /dotfiles/eww/assets/wallpapers/3.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/wallpapers/3.jpeg -------------------------------------------------------------------------------- /dotfiles/eww/assets/wallpapers/4.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/wallpapers/4.jpeg -------------------------------------------------------------------------------- /dotfiles/eww/assets/wallpapers/5.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/wallpapers/5.jpeg -------------------------------------------------------------------------------- /dotfiles/eww/assets/wallpapers/6.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/wallpapers/6.jpeg -------------------------------------------------------------------------------- /dotfiles/eww/assets/wallpapers/7.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/eww/assets/wallpapers/7.jpeg -------------------------------------------------------------------------------- /dotfiles/eww/eww.scss: -------------------------------------------------------------------------------- 1 | @import "./scss/colors.scss"; 2 | @import "./scss/variables.scss"; 3 | @import "./scss/common.scss"; 4 | 5 | @import "./scss/widgets/sys_sliders.scss"; 6 | @import "./scss/widgets/notification.scss"; 7 | @import "./scss/widgets/toggle_button.scss"; 8 | @import "./scss/widgets/media.scss"; 9 | @import "./scss/widgets/calendar.scss"; 10 | @import "./scss/widgets/bar_widget.scss"; 11 | @import "./scss/widgets/user.scss"; 12 | @import "./scss/widgets/events.scss"; 13 | @import "./scss/widgets/weather.scss"; 14 | 15 | @import "./scss/windows/hbar.scss"; 16 | @import "./scss/windows/vbar.scss"; 17 | @import "./scss/windows/datemenu.scss"; 18 | @import "./scss/windows/quicksettings.scss"; 19 | @import "./scss/windows/powermenu.scss"; 20 | @import "./scss/windows/desktop.scss"; 21 | @import "./scss/windows/osd.scss"; 22 | @import "./scss/windows/dock.scss"; 23 | @import "./scss/windows/notifications.scss"; 24 | @import "./scss/windows/noti_center.scss"; 25 | @import "./scss/windows/media.scss"; 26 | @import "./scss/windows/app_laucher.scss"; 27 | tooltip{ @include tooltip } 28 | -------------------------------------------------------------------------------- /dotfiles/eww/eww.yuck: -------------------------------------------------------------------------------- 1 | (defvar bluetooth "{}") 2 | (defvar network "{}") 3 | (defvar media "{}") 4 | (defvar media_positions "{}") 5 | (defvar battery "{}") 6 | (defvar notifications "{}") 7 | (defvar apps "{}") 8 | 9 | (deflisten window `scripts/hyprland window`) 10 | (deflisten workspaces `scripts/hyprland workspaces`) 11 | 12 | (defpoll volume :interval "3s" :initial "{}" `scripts/volume get`) 13 | (defpoll theme :interval "3s" :initial "{}" `scripts/theme get`) 14 | (defpoll power :interval "3s" :initial "{}" `scripts/power get`) 15 | (defpoll night_light :interval "3s" :initial "{}" `scripts/night_light get`) 16 | (defpoll brightness :interval "3s" :initial "{}" `scripts/brightness get`) 17 | 18 | (deflisten events :initial "[]" `scripts/events get`) 19 | (defpoll weather :interval "3m" :initial "[]" `scripts/weather`) 20 | 21 | (defpoll panel_clock :interval "5s" `date "+%H:%M | %b. %d. %A"`) 22 | (defpoll hour :interval "5s" `date "+%H"`) 23 | (defpoll minutes :interval "5s" `date "+%M"`) 24 | (defpoll date :interval "5s" `date "+%b. %d. %A"`) 25 | (defpoll uptime :interval "60s" "uptime | awk '{print $3}' | tr ',' ' '") 26 | 27 | (defvar real_name "Demeter") 28 | (defvar user_name "@Aylur") 29 | 30 | (include "./yuck/widgets.yuck") 31 | (include "./yuck/windows.yuck") 32 | (include "./setups/leftbar.yuck") 33 | -------------------------------------------------------------------------------- /dotfiles/eww/scripts/apps: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | function query { 4 | dbus-send --session --type=method_call \ 5 | --dest=com.github.aylur.myshell \ 6 | /com/github/aylur/applications \ 7 | com.github.aylur.applications.Query \ 8 | string:$1 9 | } 10 | 11 | if [[ $1 == 'query' ]]; then query $2; fi 12 | -------------------------------------------------------------------------------- /dotfiles/eww/scripts/bluetooth: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | function state { 4 | STATE=$(bluetoothctl show | grep 'Powered' | awk '{print $2}') 5 | if [[ $STATE == 'yes' ]]; then echo 'on' 6 | else echo 'off'; fi 7 | } 8 | 9 | function toggle { 10 | if [[ $(state) = 'on' ]]; then bluetoothctl power off 11 | else bluetoothctl power on; fi 12 | } 13 | 14 | if [[ $1 == 'toggle' ]]; then toggle; fi -------------------------------------------------------------------------------- /dotfiles/eww/scripts/brightness: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | function screen_icon { 4 | ARRAY=( '󰛩' '󱩎' '󱩏' '󱩐' '󱩑' '󱩒' '󱩓' '󱩔' '󱩕' '󱩖' '󰛨' ) 5 | IND=$(( $(screen_level) / 10)) 6 | echo ${ARRAY[$IND]} 7 | } 8 | 9 | function kbd_icon { 10 | ARRAY=( '󰛩' '󱩎' '󱩏' '󱩐' '󱩑' '󱩒' '󱩓' '󱩔' '󱩕' '󱩖' '󰛨' ) 11 | IND=$(( $(kbd_level) / 10)) 12 | echo ${ARRAY[$IND]} 13 | } 14 | 15 | function screen_level { 16 | echo $(brightnessctl info | grep Current | awk '{print $4}' | tr '%' ' ' | tr '(' ' ' | tr ')' ' ') 17 | } 18 | 19 | function kbd_level { 20 | echo $(brightnessctl -d asus::kbd_backlight info | grep Current | awk '{print $4}' | tr '%' ' ' | tr '(' ' ' | tr ')' ' ') 21 | } 22 | 23 | function raise_screen { 24 | brightnessctl set 5%+ -q 25 | update_screen 26 | } 27 | 28 | function lower_screen { 29 | brightnessctl set 5%- -q 30 | update_screen 31 | } 32 | 33 | function raise_kbd { 34 | brightnessctl -d asus::kbd_backlight set +1 -q 35 | update_kbd 36 | } 37 | 38 | function lower_kbd { 39 | brightnessctl -d asus::kbd_backlight set 1- -q 40 | update_kbd 41 | } 42 | 43 | function update_kbd { 44 | eww update brightness="$(get)" 45 | ~/.config/eww/scripts/./osd $(kbd_icon) $(kbd_level) 46 | } 47 | 48 | function update_screen { 49 | eww update brightness="$(get)" 50 | ~/.config/eww/scripts/./osd $(screen_icon) $(screen_level) 51 | } 52 | 53 | function set_screen { 54 | brightnessctl set $1"%" -q 55 | eww update brightness="$(get)" 56 | } 57 | 58 | function get { 59 | echo "{ 60 | \"kbd\": { \"level\": \"$(kbd_level)\", \"icon\": \"$(kbd_icon)\" }, 61 | \"screen\": { \"level\": \"$(screen_level)\", \"icon\": \"$(screen_icon)\" } 62 | }" 63 | } 64 | 65 | if [[ $1 == 'get' ]]; then get; fi 66 | if [[ $1 == 'kbd' ]] && [[ $2 == 'up' ]]; then raise_kbd; fi 67 | if [[ $1 == 'kbd' ]] && [[ $2 == 'down' ]]; then lower_kbd; fi 68 | if [[ $1 == 'screen' ]] && [[ $2 == 'up' ]]; then raise_screen; fi 69 | if [[ $1 == 'screen' ]] && [[ $2 == 'down' ]]; then lower_screen; fi 70 | if [[ $1 == 'set_screen' ]]; then set_screen $2; fi 71 | -------------------------------------------------------------------------------- /dotfiles/eww/scripts/events: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [ ! -f "$HOME/.local/bin/todo" ]; then 4 | exit 0 5 | fi 6 | 7 | if [[ $1 == 'get' ]]; then 8 | $HOME/.local/bin/todo -j | jq -c 9 | 10 | while true; do 11 | inotifywait -q -e modify $HOME/Documents/todos.json 12 | $HOME/.local/bin/todo -j | jq -c 13 | done 14 | fi 15 | -------------------------------------------------------------------------------- /dotfiles/eww/scripts/hyprland: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | NUMBER_OF_WORKSPACES=6 4 | 5 | window_class() { 6 | echo `hyprctl activewindow -j | jq --raw-output .class` 7 | } 8 | 9 | window_title() { 10 | echo `hyprctl activewindow -j | jq --raw-output .title` 11 | } 12 | 13 | workspaces (){ 14 | WORKSPACE_WINDOWS=$(hyprctl workspaces -j | jq 'map({key: .id | tostring, value: .windows}) | from_entries') 15 | seq 1 $NUMBER_OF_WORKSPACES | jq --argjson windows "${WORKSPACE_WINDOWS}" --slurp -Mc 'map(tostring) | map({id: ., windows: ($windows[.]//0)})' 16 | } 17 | 18 | if [[ $1 == 'workspaces' ]]; then 19 | echo "{ \"workspaces\": $(workspaces), \"active\": 1, \"active_empty\": true }" 20 | socat -u UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | while read -r line; do 21 | active=$(eww get workspaces | jq .active) 22 | if [[ ${line:0:9} == 'workspace' ]]; then 23 | active=${line:11:2} 24 | fi 25 | 26 | active_empty='true' 27 | let "i = $active - 1" 28 | if [[ $(workspaces | jq --raw-output .[$i].windows) -gt 0 ]]; then active_empty='false'; fi 29 | 30 | eww update workspaces="{ 31 | \"workspaces\": $(workspaces), 32 | \"active\": $active, 33 | \"active_empty\": $active_empty 34 | }" 35 | 36 | eww update dock_reveal="$active_empty" 37 | done 38 | fi 39 | 40 | if [[ $1 == 'window' ]]; then 41 | window_class 42 | socat -u UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | while read -r line; do 43 | window_class 44 | done 45 | fi 46 | -------------------------------------------------------------------------------- /dotfiles/eww/scripts/init: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | pkill eww 4 | pkill myshell 5 | eww daemon 6 | 7 | # HDMI=$(hyprctl monitors -j | jq .[1].name) 8 | # if [[ $HDMI == '"HDMI-A-1"' ]]; then 9 | # # open both monitor stuff 10 | # else 11 | # # open main monitror stuff 12 | # fi 13 | 14 | #eww open bar 15 | # eww open dock 16 | eww open desktop 17 | eww open notifications_popup 18 | # eww inspector 19 | 20 | $HOME/.config/eww/scripts/myshell/./myshell --eww --file 21 | -------------------------------------------------------------------------------- /dotfiles/eww/scripts/launcher: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | function toggle_menu { 4 | MAIN=$(eww get main_monitor) 5 | hyprctl keyword blurls "remove,gtk-layer-shell" 6 | STATE=$(eww windows | grep $1$MAIN | awk '{print substr ($0, 0, 1)}') 7 | if [[ $STATE == '*' ]]; then 8 | if [[ $1 == 'powermenu' ]]; then 9 | hyprctl keyword blurls "remove,gtk-layer-shell"; 10 | killall -SIGUSR2 waybar; 11 | fi 12 | eww close $1$MAIN; 13 | else 14 | if [[ $1 == 'powermenu' ]]; then 15 | hyprctl keyword blurls "gtk-layer-shell"; 16 | fi 17 | if [[ $1 == 'app_launcher' ]]; then 18 | $HOME/.config/eww/scripts/apps query ""; 19 | fi 20 | eww open $1$MAIN; 21 | fi 22 | } 23 | 24 | function colorpicker { 25 | pkill hyprpicker 26 | hyprpicker -n -a 27 | } 28 | 29 | function network { 30 | nm-connection-editor 31 | } 32 | 33 | function screenlock { 34 | STATE0=$(eww windows | grep powermenu0 | awk '{print substr ($0, 0, 1)}') 35 | STATE1=$(eww windows | grep powermenu1 | awk '{print substr ($0, 0, 1)}') 36 | if [[ $STATE0 == '*' ]]; then eww close powermenu0; fi 37 | if [[ $STATE1 == '*' ]]; then eww close powermenu1; fi 38 | 39 | hyprctl keyword blurls "gtk-layer-shell" 40 | gtklock -s $HOME/.config/gtklock/style.css 41 | } 42 | 43 | function config { 44 | $VISUAL $HOME/.config/hypr 45 | } 46 | 47 | function screenshot { 48 | DIR="$HOME/Pictures/Screenshots" 49 | mkdir -p $DIR 50 | 51 | if [[ $1 == 'screen' ]]; then 52 | distrobox-enter -n Arch -- hyprshot -m output -o $DIR 53 | else 54 | distrobox-enter -n Arch -- hyprshot -m region -o $DIR 55 | fi 56 | } 57 | 58 | if [[ $1 == 'applauncher' ]]; then rofi -show drun; fi 59 | if [[ $1 == 'pavu' ]]; then pavucontrol; fi 60 | if [[ $1 == 'network' ]]; then network; fi 61 | if [[ $1 == 'rog' ]]; then rog-control-center; fi 62 | if [[ $1 == 'brightness' ]]; then wl-gammactl; fi 63 | if [[ $1 == 'bluetooth' ]]; then blueberry; fi 64 | if [[ $1 == 'powermenu' ]]; then powermenu; fi 65 | if [[ $1 == 'toggle_menu' ]]; then toggle_menu $2; fi 66 | if [[ $1 == 'close_calendar' ]]; then close_calendar; fi 67 | if [[ $1 == 'colorpicker' ]]; then colorpicker; fi 68 | if [[ $1 == 'picker' ]]; then picker; fi 69 | if [[ $1 == 'screenlock' ]]; then screenlock; fi 70 | if [[ $1 == 'config' ]]; then config; fi 71 | if [[ $1 == 'screenshot' ]]; then screenshot $2; fi 72 | 73 | if [[ $1 == 'firefox' ]]; then flatpak run org.mozilla.firefox; fi 74 | if [[ $1 == 'terminal' ]]; then wezterm; fi 75 | if [[ $1 == 'file-manager' ]]; then gtk-launch org.gnome.Nautilus; fi 76 | if [[ $1 == 'editor' ]]; then wezterm start $EDITOR; fi 77 | if [[ $1 == 'spotify' ]]; then flatpak run com.spotify.Client; fi 78 | if [[ $1 == 'caprine' ]]; then flatpak run com.sindresorhus.Caprine; fi 79 | if [[ $1 == 'bitwig' ]]; then gtk-launch bitwig; fi 80 | if [[ $1 == 'battle' ]]; then gtk-launch Battle; fi 81 | if [[ $1 == 'bottles' ]]; then flatpak run com.usebottles.bottles; fi 82 | -------------------------------------------------------------------------------- /dotfiles/eww/scripts/myshell/apps.js: -------------------------------------------------------------------------------- 1 | import { ApplicationsIFace } from "./dbus.js" 2 | import { MkDirectory, APPICON_CACHE_PATH } from './main.js' 3 | import { Gio, GObject, Gtk } from './lib.js' 4 | 5 | export const Apps = GObject.registerClass({ 6 | Signals: { 'sync': {} } 7 | }, 8 | class Apps extends GObject.Object{ 9 | constructor(){ 10 | super(); 11 | 12 | this._register(); 13 | } 14 | 15 | get json() { 16 | return this._list; 17 | } 18 | 19 | _iconPath(icon) { 20 | return APPICON_CACHE_PATH+icon+'.png'; 21 | } 22 | 23 | init() { 24 | this._initIcons(); 25 | this.Query(''); 26 | } 27 | 28 | _initIcons() { 29 | MkDirectory(); 30 | let icons = []; 31 | Gio.AppInfo.get_all() 32 | .forEach(app => { 33 | if(!app.should_show() || !app.get_icon()) return; 34 | if(typeof app.get_icon().get_names !== 'function') return; 35 | app?.get_icon()?.get_names() 36 | .forEach(icon => icons.push(icon)) 37 | }); 38 | 39 | icons.forEach(icon => { 40 | if(icon.includes('-symbolic')) return; 41 | let iconInfo = Gtk.IconTheme.get_default() 42 | .lookup_by_gicon( 43 | Gio.Icon.new_for_string(icon), 128, null); 44 | 45 | if(!iconInfo) return; 46 | 47 | let output_stream = 48 | Gio.File.new_for_path(this._iconPath(icon)) 49 | .replace(null, false, Gio.FileCreateFlags.NONE, null); 50 | 51 | iconInfo.load_icon() 52 | .save_to_streamv(output_stream, 'png', null, null, null); 53 | 54 | output_stream.close(null); 55 | }) 56 | } 57 | 58 | _appIconName(app) { 59 | if (!app.get_icon()) 60 | return ''; 61 | 62 | if (typeof app.get_icon().get_names !== 'function') 63 | return ''; 64 | 65 | let name = app.get_icon().get_names()[0]; 66 | return name ? this._iconPath(name) : ''; 67 | } 68 | 69 | Query(search) { 70 | let apps = Gio.AppInfo.get_all(); 71 | let list = []; 72 | apps.forEach(app => { 73 | if(!app.should_show()) return; 74 | if(app.get_name()?.toLowerCase().includes(search)) list.push(app); 75 | else if(app.get_id()?.toLowerCase().includes(search)) list.push(app); 76 | else if(app.get_executable()?.toLowerCase().includes(search)) list.push(app); 77 | else if(app.get_description()?.toLowerCase().includes(search)) list.push(app); 78 | }); 79 | 80 | let outList = []; 81 | list.forEach(app => { 82 | outList.push({ 83 | name: app.get_name(), 84 | desktop: app.get_id(), 85 | description: app.get_description(), 86 | icon: this._appIconName(app), 87 | }) 88 | }) 89 | this._list = outList; 90 | this.emit('sync'); 91 | } 92 | 93 | _register() { 94 | Gio.bus_own_name( 95 | Gio.BusType.SESSION, 96 | 'com.github.aylur.myshell', 97 | Gio.BusNameOwnerFlags.NONE, 98 | (connection, _) => { 99 | this._dbus = Gio.DBusExportedObject.wrapJSObject(ApplicationsIFace, this); 100 | this._dbus.export(connection, '/com/github/aylur/applications'); 101 | }, 102 | null, 103 | null, 104 | ); 105 | } 106 | }) 107 | -------------------------------------------------------------------------------- /dotfiles/eww/scripts/myshell/battery.js: -------------------------------------------------------------------------------- 1 | import { GObject, Gio, UPowerGlib } from './lib.js' 2 | import { PowerManagerProxy } from './dbus.js' 3 | 4 | export const Battery = GObject.registerClass({ 5 | Signals: { 'sync': {} } 6 | }, 7 | class Battery extends GObject.Object{ 8 | constructor(){ 9 | super(); 10 | 11 | this._json = {}; 12 | this._proxy = new PowerManagerProxy( 13 | Gio.DBus.system, 14 | 'org.freedesktop.UPower', 15 | '/org/freedesktop/UPower/devices/DisplayDevice', 16 | () => { 17 | this._proxy.connect( 18 | 'g-properties-changed', () => this._sync() ); 19 | this._sync(); 20 | } 21 | ); 22 | } 23 | 24 | get json(){ 25 | return this._json; 26 | } 27 | 28 | _sync(){ 29 | if(!this._proxy.IsPresent) return { available: false }; 30 | 31 | let percent = this._proxy.Percentage; 32 | let charging = this._proxy.State === UPowerGlib.DeviceState.CHARGING; 33 | let charged = 34 | this._proxy.State === UPowerGlib.DeviceState.FULLY_CHARGED || 35 | (this._proxy.State === UPowerGlib.DeviceState.CHARGING && percent === 100); 36 | 37 | 38 | let icons = ['󰁺', '󰁻', '󰁼', '󰁽', '󰁾', '󰁿', '󰂀', '󰂁', '󰂂', '󰁹']; 39 | let charging_icons = ['󰢜', '󰂆', '󰂇', '󰂈', '󰢝', '󰂉', '󰢞', '󰂊', '󰂋', '󰂅']; 40 | let i = Math.round(percent / 10)-1; 41 | if(i < 0) i = 0; 42 | 43 | let icon; 44 | if(charged) icon = '󰂄'; 45 | else if(charging) icon = charging_icons[i]; 46 | else if(percent < 10) icon = '󱃍'; 47 | else icon = icons[i]; 48 | 49 | let state = ''; 50 | if(charged) state = 'charged'; 51 | else if(charging) state = 'charging'; 52 | else if(percent < 30) state = 'low'; 53 | 54 | this._json = { 55 | available: true, 56 | icon, 57 | percent, 58 | state 59 | }; 60 | this.emit('sync'); 61 | } 62 | }); 63 | -------------------------------------------------------------------------------- /dotfiles/eww/scripts/myshell/bluetooth.js: -------------------------------------------------------------------------------- 1 | import { GObject, GnomeBluetooth } from './lib.js' 2 | 3 | const STATES = { 4 | [GnomeBluetooth.AdapterState.ABSENT]: 'absent', 5 | [GnomeBluetooth.AdapterState.ON]: 'on', 6 | [GnomeBluetooth.AdapterState.TURNING_ON]: 'on', 7 | [GnomeBluetooth.AdapterState.OFF]: 'off', 8 | [GnomeBluetooth.AdapterState.TURNING_OFF]: 'off', 9 | } 10 | 11 | const ICONS = { 12 | absent: '󰂲', 13 | off: '󰂲', 14 | on: '󰂯', 15 | 'audio-headset': '󰋋', 16 | } 17 | 18 | export const Bluetooth = GObject.registerClass({ 19 | Signals: { 'sync': {} } 20 | }, 21 | class Bluetooth extends GObject.Object{ 22 | constructor() { 23 | super(); 24 | 25 | this._json = {}; 26 | this._devices = new Map(); 27 | this._connections = new Map(); 28 | this._client = new GnomeBluetooth.Client(); 29 | this._client.connect('notify::default-adapter-state', this._sync.bind(this)); 30 | this._client.connect('device-added', this._deviceAdded.bind(this)); 31 | this._client.connect('device-removed', this._deviceRemoved.bind(this)); 32 | this._getDevices().forEach(device => this._deviceAdded(_, device)); 33 | this._sync(); 34 | } 35 | 36 | get json() { return this._json } 37 | 38 | _deviceAdded(_, device) { 39 | if(this._devices.has(device.address)) return; 40 | 41 | let connections = []; 42 | [ 43 | 'address', 44 | 'alias', 45 | 'battery-level', 46 | 'battery-percentage', 47 | 'connected', 48 | 'icon', 49 | 'name', 50 | 'paired', 51 | 'truested' 52 | ] 53 | .forEach(prop => connections.push( 54 | device.connect(`notify::${prop}`, this._sync.bind(this)) 55 | )); 56 | this._connections.set(device.address, connections); 57 | 58 | this._devices.set(device.address, device); 59 | this._sync(); 60 | } 61 | 62 | _deviceRemoved(_, device) { 63 | if(!this._devices.has(device.address)) return; 64 | 65 | this._connections.get(device.address).forEach(id => device.disconnect(id)); 66 | this._connections.delete(device.address); 67 | this._devices.delete(device.address); 68 | this._sync(); 69 | } 70 | 71 | _getDevices() { 72 | let devices = []; 73 | const deviceStore = this._client.get_devices(); 74 | 75 | for(let i=0; i 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | ` 19 | ); 20 | 21 | export const DBusProxy = Gio.DBusProxy.makeProxyWrapper( 22 | ` 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | ` 34 | ); 35 | 36 | export const PowerManagerProxy = Gio.DBusProxy.makeProxyWrapper( 37 | ` 38 | 39 | 40 | 41 | 42 | 43 | ` 44 | ); 45 | 46 | export const NotificationIFace = 47 | ` 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | `; 92 | 93 | export const BluetoothIFace = 94 | ` 95 | 96 | 97 | 98 | ` 99 | 100 | export const ApplicationsIFace = 101 | ` 102 | 103 | 104 | 105 | 106 | 107 | ` 108 | -------------------------------------------------------------------------------- /dotfiles/eww/scripts/myshell/lib.js: -------------------------------------------------------------------------------- 1 | imports.gi.versions.Gtk = '3.0' 2 | imports.gi.versions.Gio = '2.0' 3 | imports.gi.versions.GLib = '2.0' 4 | imports.gi.versions.GObject = '2.0' 5 | imports.gi.versions.UPowerGlib = '1.0' 6 | imports.gi.versions.GnomeBluetooth = '3.0' 7 | imports.gi.versions.NM = '1.0' 8 | imports.gi.versions.GdkPixbuf = '2.0' 9 | 10 | export const { 11 | Gtk, 12 | Gio, 13 | GLib, 14 | GObject, 15 | UPowerGlib, 16 | GnomeBluetooth, 17 | NM, 18 | GdkPixbuf, 19 | } = imports.gi; 20 | -------------------------------------------------------------------------------- /dotfiles/eww/scripts/myshell/main.js: -------------------------------------------------------------------------------- 1 | import { Network } from './network.js' 2 | import { Media } from './media.js' 3 | import { Battery } from './battery.js' 4 | import { Bluetooth } from './bluetooth.js' 5 | import { Notifications } from './notifications.js' 6 | import { Apps } from './apps.js' 7 | import { GObject, Gio, GLib, Gtk } from './lib.js' 8 | 9 | const TICK_INTERVAL = 1000 //ms 10 | export const NOTIFICATIONS_BANNER_TIME_OUT = 5000 11 | export const PREFERRED_PLAYER = 'spotify' 12 | export const CACHE_PATH = GLib.get_user_cache_dir()+'/aylur/' 13 | export const MEDIA_CACHE_PATH = CACHE_PATH+'media/' 14 | export const NOTIFICATIONS_CACHE_PATH = CACHE_PATH+'notifications/' 15 | export const APPICON_CACHE_PATH = CACHE_PATH+'apps/' 16 | 17 | export const PlayerIcons = { 18 | 'deafult': '', 19 | 'spotify': '', 20 | 'firefox': '󰈹', 21 | 'mpv': '' 22 | } 23 | 24 | export function MkDirectory() { 25 | [ 26 | CACHE_PATH, 27 | MEDIA_CACHE_PATH, 28 | NOTIFICATIONS_CACHE_PATH, 29 | APPICON_CACHE_PATH, 30 | ] 31 | .forEach(path => { 32 | if(!GLib.file_test(path, GLib.FileTest.EXISTS)) 33 | Gio.File.new_for_path(path) 34 | .make_directory(null); 35 | }) 36 | } 37 | 38 | const App = GObject.registerClass( 39 | class App extends Gtk.Application{ 40 | constructor({ eww, file, stdout, fg_color }) { 41 | super({ 42 | application_id: 'com.github.aylur.myshell', 43 | flags: Gio.ApplicationFlags.DEFAULT_FLAGS 44 | }); 45 | 46 | MkDirectory(); 47 | 48 | this._eww = eww; 49 | this._file = file; 50 | this._stdout = stdout; 51 | this._json = {}; 52 | 53 | this._notifications = new Notifications(fg_color); 54 | this._battery = new Battery(); 55 | this._network = new Network(); 56 | this._bluetooth = new Bluetooth(); 57 | this._media = new Media(); 58 | this._apps = new Apps(); 59 | 60 | this.run(null); 61 | } 62 | 63 | vfunc_activate() { 64 | this.hold(); 65 | 66 | [ 67 | 'notifications', 'battery', 'network', 68 | 'bluetooth', 'apps', 'media' 69 | ] 70 | .forEach(m => this._output(this[`_${m}`].json, m)); 71 | 72 | this._notifications.connect('sync', o => this._output(o.json, 'notifications')); 73 | this._battery.connect('sync', o => this._output(o.json, 'battery')); 74 | this._network.connect('sync', o => this._output(o.json, 'network')); 75 | this._bluetooth.connect('sync', o => this._output(o.json, 'bluetooth')); 76 | this._apps.connect('sync', o => this._output(o.json, 'apps')); 77 | this._apps.init(); 78 | 79 | this._media.connect('sync', o => this._output(o.json, 'media')); 80 | this._media.connect('positions', o => this._output(o.positions, 'media_positions')); 81 | GLib.timeout_add(GLib.PRIORITY_DEFAULT, TICK_INTERVAL, () => this._media.getPositions() ); 82 | } 83 | 84 | _output(json, name){ 85 | if(!json) return; 86 | if(this._file) { 87 | const file = Gio.File.new_for_path(CACHE_PATH+name+'.json'); 88 | 89 | if(!GLib.file_test(file.get_path(), GLib.FileTest.EXISTS)) 90 | file.create(Gio.FileCreateFlags.NONE, null); 91 | 92 | file.replace_contents(JSON.stringify(json, null, 2), null, false, 93 | Gio.FileCreateFlags.REPLACE_DESTINATION, null); 94 | } 95 | 96 | if(this._eww) { 97 | GLib.spawn_command_line_async( 98 | `eww update ${name}=${JSON.stringify(JSON.stringify(json))}` 99 | ); 100 | } 101 | 102 | if(this._stdout) { 103 | this._json[name] = json; 104 | print(JSON.stringify(this._json, null, 2)); 105 | } 106 | } 107 | }) 108 | 109 | function parseArgs(argv) { 110 | let args = {}; 111 | for(let i=0; i. 18 | * 19 | * SPDX-License-Identifier: GPL-3.0-or-later 20 | */ 21 | import { programArgs, programInvocationName } from 'system' 22 | import { main } from './main.js' 23 | 24 | imports.gi.versions.Gtk = '3.0' 25 | imports.gi.versions.Gio = '2.0' 26 | imports.gi.versions.GLib = '2.0' 27 | imports.gi.versions.GObject = '2.0' 28 | imports.gi.versions.UPowerGlib = '1.0' 29 | imports.gi.versions.GnomeBluetooth = '3.0' 30 | imports.gi.versions.NM = '1.0' 31 | imports.gi.versions.GdkPixbuf = '2.0' 32 | 33 | imports.package.init({ 34 | name: 'myshell', 35 | version: '0.1.0', 36 | prefix: '/usr/local', 37 | libdir: '/usr/local/lib64', 38 | }); 39 | 40 | pkg.require({ 41 | 'Gtk': '3.0', 42 | 'Gio': '2.0' 43 | }); 44 | 45 | 46 | main([programInvocationName, ...programArgs]) 47 | -------------------------------------------------------------------------------- /dotfiles/eww/scripts/myshell/network.js: -------------------------------------------------------------------------------- 1 | import { NM, Gio, GObject } from './lib.js' 2 | 3 | Gio._promisify(NM.Client, 'new_async'); 4 | Gio._promisify(NM.DeviceWifi.prototype, 'request_scan_async'); 5 | 6 | const WifiStyles = { 7 | '󰪎': 'none', 8 | '󰤮': 'low', 9 | '󰤯': 'low', 10 | '󰤟': 'low', 11 | '󰤢': 'medium', 12 | '󰤥': 'medium', 13 | '󰤨': 'high' 14 | } 15 | 16 | export const Network = GObject.registerClass({ 17 | Signals: { 'sync': {} } 18 | }, 19 | class Network extends GObject.Object{ 20 | constructor() { 21 | super(); 22 | 23 | this._json = {}; 24 | this._getClient(); 25 | } 26 | 27 | get json() { return this._json } 28 | 29 | _getDevice(devType) { 30 | return this._client 31 | .get_devices() 32 | .find(device => device.get_device_type() === devType); 33 | } 34 | 35 | async _getClient() { 36 | this._client = await NM.Client.new_async(null); 37 | this._client.connect('notify::wireless-enabled', this._sync.bind(this)); 38 | this._client.connect('notify::connectivity', this._sync.bind(this)); 39 | this._client.connect('notify::primary-connection', this._sync.bind(this)); 40 | this._client.connect('notify::activating-connection', this._sync.bind(this)); 41 | 42 | this._wifi = this._getDevice(NM.DeviceType.WIFI); 43 | if(this._wifi) { 44 | this._wifi.connect('notify::active-access-point', this._activeAp.bind(this)); 45 | this._wifi.connect('access-point-added', (_, ap) => this._apAdded(ap)); 46 | this._wifi.connect('access-point-removed', (_, ap) => this._apRemoved(ap)); 47 | } 48 | 49 | this._activeAp(); 50 | this._sync(); 51 | } 52 | 53 | _apAdded(ap) { 54 | //TODO 55 | } 56 | 57 | _apRemoved(ap) { 58 | //TODO 59 | } 60 | 61 | _activeAp() { 62 | if(this._ap) this._ap.disconnect(this._apBind); 63 | this._ap = this._wifi?.get_active_access_point(); 64 | if(!this._ap) return; 65 | this._apBind = this._ap.connect('notify::strength', this._sync.bind(this)); 66 | this._sync(); 67 | } 68 | 69 | _sync() { 70 | const mainConnection = 71 | this._client.get_primary_connection() || 72 | this._client.get_activating_connection(); 73 | 74 | const primary_type = mainConnection?.type || null; // 802-11-wireless ; 802-3-ethernet 75 | const internet = this._client.connectivity === NM.ConnectivityState.FULL; 76 | 77 | let wifi = { 78 | primary: primary_type === '802-11-wireless', 79 | enabled: this._client.wireless_enabled, 80 | state: this._client.wireless_enabled ? 'on' : 'off', 81 | ssid: this._ap && NM.utils_ssid_to_utf8( 82 | this._ap.get_ssid().get_data() ) || 'Unknown', 83 | strength: this._client.wireless_enabled && mainConnection ? `${this._ap?.strength}%` : '󰂭' , 84 | icon: ['󰤮', '󰤯', '󰤟', '󰤢', '󰤥', '󰤨'][Math.ceil(this._ap?.strength/20)] 85 | }; 86 | if(!internet) { 87 | wifi.strength = '󰪎' 88 | wifi.icon = '󰪎' 89 | } 90 | wifi.style = WifiStyles[wifi.icon]; 91 | 92 | let wired ={ 93 | primary: primary_type === '802-3-ethernet', 94 | icon: internet ? '󰛳' : '󰪎' 95 | } 96 | 97 | this._json = { 98 | primary: { '802-3-ethernet': 'wired', '802-11-wireless': 'wifi' }[primary_type] || 'none', 99 | none: { icon: '󰤮' }, 100 | wifi, 101 | wired, 102 | }; 103 | this.emit('sync') 104 | } 105 | 106 | }) 107 | -------------------------------------------------------------------------------- /dotfiles/eww/scripts/network: -------------------------------------------------------------------------------- 1 | function toggle { 2 | STATE=$(nmcli radio wifi) 3 | if [[ $STATE == 'enabled' ]]; then nmcli radio wifi off 4 | else nmcli radio wifi on; fi 5 | } 6 | 7 | if [[ $1 == 'toggle' ]]; then toggle; fi 8 | -------------------------------------------------------------------------------- /dotfiles/eww/scripts/night_light: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | function state { 4 | STATE=$(pgrep wlsunset) 5 | if [[ -z $STATE ]]; then echo 'off' 6 | else echo 'on'; fi 7 | } 8 | 9 | function icon { 10 | echo '󰖨' 11 | } 12 | 13 | function toggle { 14 | STATE=$(state) 15 | if [[ $STATE == 'on' ]]; then 16 | eww update night_light_state="{ \"state\": \"off\", \"icon\": \"$(icon)\"}" 17 | pkill wlsunset 18 | else 19 | eww update night_light_state="{ \"state\": \"on\", \"icon\": \"$(icon)\"}" 20 | wlsunset -t 3400 21 | fi 22 | } 23 | 24 | function get { 25 | echo "{ 26 | \"state\": \"$(state)\", 27 | \"icon\": \"$(icon)\" 28 | }" 29 | } 30 | 31 | if [[ $1 == 'toggle' ]]; then toggle; fi 32 | if [[ $1 == 'get' ]]; then get; fi 33 | -------------------------------------------------------------------------------- /dotfiles/eww/scripts/notifications: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | function toggle { 4 | dbus-send --session --type=method_call \ 5 | --dest=com.github.aylur.myshell \ 6 | /org/freedesktop/Notifications \ 7 | org.freedesktop.Notifications.ToggleDND 8 | } 9 | 10 | function dismiss { 11 | dbus-send --session --type=method_call \ 12 | --dest=com.github.aylur.myshell \ 13 | /org/freedesktop/Notifications \ 14 | org.freedesktop.Notifications.DismissNotification \ 15 | uint32:$1 16 | } 17 | 18 | function close { 19 | dbus-send --session --type=method_call \ 20 | --dest=com.github.aylur.myshell \ 21 | /org/freedesktop/Notifications \ 22 | org.freedesktop.Notifications.CloseNotification \ 23 | uint32:$1 24 | } 25 | 26 | function action { 27 | dbus-send --session --type=method_call \ 28 | --dest=com.github.aylur.myshell \ 29 | /org/freedesktop/Notifications \ 30 | org.freedesktop.Notifications.InvokeAction \ 31 | uint32:$1 string:$2 32 | } 33 | 34 | function clear_all { 35 | dbus-send --session --type=method_call \ 36 | --dest=com.github.aylur.myshell \ 37 | /org/freedesktop/Notifications \ 38 | org.freedesktop.Notifications.Clear 39 | } 40 | 41 | if [[ $1 == 'toggle' ]]; then toggle; fi 42 | if [[ $1 == 'dismiss' ]]; then dismiss $2 $3; fi 43 | if [[ $1 == 'close' ]]; then close $2; fi 44 | if [[ $1 == 'action' ]]; then action $2 $3; fi 45 | if [[ $1 == 'clear' ]]; then clear_all; fi 46 | -------------------------------------------------------------------------------- /dotfiles/eww/scripts/osd: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | STATE=$(eww windows | grep osd | awk '{print substr ($0, 0, 1)}') 4 | if [[ $1 == 'close' ]]; then 5 | if [[ $STATE == '*' ]]; then 6 | eww close osd; 7 | fi 8 | else 9 | eww update osd="{ \"icon\": \"$1\", \"value\": \"$2\" }" 10 | if [[ $STATE != '*' ]]; then 11 | eww open osd; 12 | fi 13 | sleep 4 14 | if [[ $STATE == '*' ]]; then 15 | eww close osd; 16 | fi 17 | fi 18 | -------------------------------------------------------------------------------- /dotfiles/eww/scripts/player: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | function loop { 4 | LOOPSTATUS=$(playerctl -p $1 loop) 5 | if [[ $LOOPSTATUS == 'None' ]]; then playerctl -p $1 loop Track; fi 6 | if [[ $LOOPSTATUS == 'Track' ]]; then playerctl -p $1 loop Playlist; fi 7 | if [[ $LOOPSTATUS == 'Playlist' ]]; then playerctl -p $1 loop None; fi 8 | } 9 | 10 | if [[ $2 == 'up' ]]; then playerctl -p $1 next; fi 11 | if [[ $2 == 'down' ]]; then playerctl -p $1 previous; fi 12 | if [[ $2 == 'next' ]]; then playerctl -p $1 next; fi 13 | if [[ $2 == 'prev' ]]; then playerctl -p $1 previous; fi 14 | if [[ $2 == 'play-pause' ]]; then playerctl -p $1 play-pause; fi 15 | if [[ $2 == 'loop' ]]; then loop $1; fi 16 | if [[ $2 == 'shuffle' ]]; then playerctl -p $1 shuffle Toggle; fi 17 | if [[ $2 == 'volume' ]]; then playerctl -p $1 volume "0.$3"; fi 18 | if [[ $2 == 'position' && ! -z $3 ]]; then playerctl -p $1 position $3; fi -------------------------------------------------------------------------------- /dotfiles/eww/scripts/power: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | function state { 4 | STATE=$(asusctl profile --profile-get | awk '{print $4}') 5 | if [[ $STATE == 'Quiet' ]]; then echo 'off' 6 | elif [[ $STATE == 'Balanced' ]]; then echo 'off' 7 | else echo 'on' 8 | fi 9 | } 10 | 11 | function icon { 12 | STATE=$(asusctl profile --profile-get | awk '{print $4}') 13 | if [[ $STATE == 'Quiet' ]]; then echo '󰾆'; fi 14 | if [[ $STATE == 'Balanced' ]]; then echo '󰾅'; fi 15 | if [[ $STATE == 'Performance' ]]; then echo '󰓅'; fi 16 | } 17 | 18 | function toggle { 19 | STATE=$(state) 20 | if [[ $STATE == 'off' ]]; then 21 | asusctl profile --profile-set Performance 22 | else 23 | asusctl profile --profile-set Quiet 24 | fi 25 | 26 | eww update power="$(get)" 27 | } 28 | 29 | function get { 30 | echo "{ 31 | \"state\": \"$(state)\", 32 | \"icon\": \"$(icon)\" 33 | }" 34 | } 35 | 36 | if [[ $1 == 'get' ]]; then get; fi 37 | if [[ $1 == 'toggle' ]]; then toggle; fi -------------------------------------------------------------------------------- /dotfiles/eww/scripts/theme: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | function state { 4 | THEME=$(gsettings get org.gnome.desktop.interface color-scheme) 5 | if [[ $THEME == "'prefer-dark'" ]]; then echo 'on' 6 | else echo 'off'; fi 7 | } 8 | 9 | function toggle { 10 | STATE=$(state) 11 | if [[ $STATE == 'on' ]]; then 12 | gsettings set org.gnome.desktop.interface color-scheme "'default'" 13 | cp $HOME/.config/eww/scss/colors_light.scss $HOME/.config/eww/scss/colors.scss 14 | cp $HOME/.config/gtklock/style-light.css $HOME/.config/gtklock/style.css 15 | cp $HOME/.config/wezterm/charm-light.lua $HOME/.config/wezterm/theme.lua 16 | else 17 | gsettings set org.gnome.desktop.interface color-scheme "'prefer-dark'" 18 | cp $HOME/.config/eww/scss/colors_dark.scss $HOME/.config/eww/scss/colors.scss 19 | cp $HOME/.config/gtklock/style-dark.css $HOME/.config/gtklock/style.css 20 | cp $HOME/.config/wezterm/charm.lua $HOME/.config/wezterm/theme.lua 21 | fi 22 | 23 | eww update theme="$(get)" 24 | $HOME/.config/eww/scripts/./init 25 | } 26 | 27 | function get { 28 | icon='󱎖' 29 | if [[ $(state) == 'on' ]]; then icon='󰃛'; fi 30 | echo "{ 31 | \"state\": \"$(state)\", 32 | \"icon\": \"$icon\" 33 | }" 34 | } 35 | 36 | if [[ $1 == 'toggle' ]]; then toggle; fi 37 | if [[ $1 == 'get' ]]; then get; fi 38 | -------------------------------------------------------------------------------- /dotfiles/eww/scripts/volume: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | VOLUME=$(pactl get-sink-volume @DEFAULT_SINK@ | grep Volume | awk '{print $5}' | tr % " ") 3 | 4 | function icon { 5 | if [[ $VOLUME -ge 66 ]]; then echo '󰕾 ' 6 | elif [[ $VOLUME -ge 33 ]]; then echo '󰖀 ' 7 | elif [[ $VOLUME -ge 1 ]]; then echo '󰕿 ' 8 | else echo '󰝟 ' 9 | fi 10 | } 11 | 12 | function level { 13 | echo $(pactl get-sink-volume @DEFAULT_SINK@ | grep Volume | awk '{print $5}' | tr % " ") 14 | } 15 | 16 | function lower { 17 | pactl set-sink-volume @DEFAULT_SINK@ -5% 18 | update 19 | } 20 | 21 | function raise { 22 | pactl set-sink-volume @DEFAULT_SINK@ +5% 23 | update 24 | } 25 | 26 | function update { 27 | eww update volume="$(get)" 28 | ~/.config/eww/scripts/osd $(icon) $(level) 29 | } 30 | 31 | function type_icon { 32 | SINK=$(pactl get-default-sink) 33 | if [[ $SINK == *'bluez_output'* ]]; then echo "󰋋" 34 | else echo "󰓃" 35 | fi 36 | } 37 | 38 | function mute_state { 39 | STATE=$(pactl get-source-mute @DEFAULT_SOURCE@ | awk '{print $2}') 40 | if [[ $STATE == 'no' ]]; then echo 'off' 41 | else echo 'on'; fi 42 | } 43 | 44 | function mute_icon { 45 | STATE=$(mute_state) 46 | if [[ $STATE == 'off' ]]; then echo '󰍬' 47 | else echo '󰍭'; fi 48 | } 49 | 50 | function mute_toggle { 51 | pactl set-source-mute @DEFAULT_SOURCE@ toggle 52 | eww update volume="$(get)" 53 | } 54 | 55 | function set { 56 | pactl set-sink-volume @DEFAULT_SINK@ $1"%" 57 | eww update volume="$(get)" 58 | } 59 | 60 | function get { 61 | echo "{ 62 | \"level\": \"$(level)\", 63 | \"icon\": \"$(icon)\", 64 | \"type_icon\": \"$(type_icon)\", 65 | \"mute\": { 66 | \"state\": \"$(mute_state)\", 67 | \"icon\": \"$(mute_icon)\" 68 | } 69 | }" 70 | } 71 | 72 | if [[ $1 == 'mute_toggle' ]]; then mute_toggle; fi 73 | if [[ $1 == 'down' ]]; then lower; fi 74 | if [[ $1 == 'up' ]]; then raise; fi 75 | if [[ $1 == 'set' ]]; then set $2; fi 76 | if [[ $1 == 'get' ]]; then get; fi 77 | -------------------------------------------------------------------------------- /dotfiles/eww/scripts/weather: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | KEY=`cat $HOME/.config/eww/scripts/weather_key` 4 | SZFVAR="3044774" 5 | PEST="3054638" 6 | 7 | ## Get data 8 | get_weather() { 9 | weather=`curl -sf "http://api.openweathermap.org/data/2.5/weather?APPID=$KEY&id=$1&units=metric"` 10 | 11 | w_desc="Weather Unavailable" 12 | w_temp="-" 13 | w_feels="-" 14 | w_city="Nowhere" 15 | w_icon="" 16 | 17 | if [ ! -z "$weather" ]; then 18 | w_desc=`echo $weather | jq -r .weather[].description | head -1 | sed -e "s/\b\(.\)/\u\1/g"` 19 | w_temp=`echo $weather | jq -r .main.temp | cut -d "." -f 1` 20 | w_feels=`echo $weather | jq -r .main.feels_like` 21 | w_city=`echo $weather | jq -r .name` 22 | 23 | w_icon_code=`echo "$weather" | jq -r ".weather[].icon" | head -1` 24 | if [ "$w_icon_code" == "01d" ]; then w_icon=" "; w_class="d clear" 25 | elif [ "$w_icon_code" == "01n" ]; then w_icon=" "; w_class="n clear" 26 | elif [ "$w_icon_code" == "02d" ]; then w_icon=" "; w_class="d clouds" 27 | elif [ "$w_icon_code" == "02n" ]; then w_icon=" "; w_class="n clouds" 28 | elif [ "$w_icon_code" == "03d" ]; then w_icon=" "; w_class="d clouds" 29 | elif [ "$w_icon_code" == "03n" ]; then w_icon=" "; w_class="n clouds" 30 | elif [ "$w_icon_code" == "04d" ]; then w_icon=" "; w_class="d clouds" 31 | elif [ "$w_icon_code" == "04n" ]; then w_icon=" "; w_class="n clouds" 32 | elif [ "$w_icon_code" == "09d" ]; then w_icon=" "; w_class="d rain" 33 | elif [ "$w_icon_code" == "09n" ]; then w_icon=" "; w_class="n rain" 34 | elif [ "$w_icon_code" == "10d" ]; then w_icon=" "; w_class="d rain" 35 | elif [ "$w_icon_code" == "10n" ]; then w_icon=" "; w_class="n rain" 36 | elif [ "$w_icon_code" == "11d" ]; then w_icon=" "; w_class="d thunderstorm" 37 | elif [ "$w_icon_code" == "11n" ]; then w_icon=" "; w_class="n thunderstorm" 38 | elif [ "$w_icon_code" == "13d" ]; then w_icon=" "; w_class="d snow" 39 | elif [ "$w_icon_code" == "13n" ]; then w_icon=" "; w_class="n snow" 40 | elif [ "$w_icon_code" == "50d" ]; then w_icon=" "; w_class="d mist" 41 | elif [ "$w_icon_code" == "50n" ]; then w_icon=" "; w_class="n mist" 42 | fi 43 | fi 44 | 45 | echo "{ 46 | \"desc\": \"$w_desc\", 47 | \"temp\": \"$w_temp\", 48 | \"icon\": \"$w_icon\", 49 | \"class\": \"$w_class\", 50 | \"feels\": \"$w_feels\", 51 | \"city\": \"$w_city\" 52 | }" 53 | } 54 | 55 | echo "[ 56 | $(get_weather $PEST), 57 | $(get_weather $SZFVAR) 58 | ]" 59 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/colors.scss: -------------------------------------------------------------------------------- 1 | $theme: 'dark'; 2 | 3 | //gnome 4 | // $red: #f66151; 5 | // $green: #57e389; 6 | // $blue: #62a0ea; 7 | // $yellow: #f6d32d; 8 | // $magenta: #c061cb; 9 | // $teal: #5bc8aF; 10 | // $orange: #ffa348; 11 | 12 | //charm 13 | $red: #e67090; 14 | $green: #43c383; 15 | $yellow: #d8e77b; 16 | $blue: #f5c2e7; 17 | $magenta: #9077e7; 18 | $teal: #51e6e6; 19 | $orange: #E79E64; 20 | 21 | $bg_color: #171717; 22 | $fg_color: #eee; 23 | $hover_fg: #eee; 24 | $accent_fg: #171717; 25 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/colors_dark.scss: -------------------------------------------------------------------------------- 1 | $theme: 'dark'; 2 | 3 | //gnome 4 | // $red: #f66151; 5 | // $green: #57e389; 6 | // $blue: #62a0ea; 7 | // $yellow: #f6d32d; 8 | // $magenta: #c061cb; 9 | // $teal: #5bc8aF; 10 | // $orange: #ffa348; 11 | 12 | //charm 13 | $red: #e67090; 14 | $green: #43c383; 15 | $yellow: #d8e77b; 16 | $blue: #51a4e7; 17 | $magenta: #9077e7; 18 | $teal: #51e6e6; 19 | $orange: #E79E64; 20 | 21 | $bg_color: #171717; 22 | $fg_color: #eee; 23 | $hover_fg: #eee; 24 | $accent_fg: #171717; 25 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/colors_light.scss: -------------------------------------------------------------------------------- 1 | $theme: 'light'; 2 | 3 | //gnome 4 | $red: #f66151; 5 | $green: #57e389; 6 | $blue: #62a0ea; 7 | $yellow: #f6d32d; 8 | $magenta: #c061cb; 9 | $teal: #5bc8aF; 10 | $orange: #ffa348; 11 | 12 | //charm 13 | // $red: #e67090; 14 | // $green: #43c383; 15 | // $yellow: #d8e77b; 16 | // $blue: #51a4e7; 17 | // $magenta: #9077e7; 18 | // $teal: #51e6e6; 19 | // $orange: #E79E64; 20 | 21 | $bg_color: #fff; 22 | $fg_color: #1f1f1f; 23 | $hover_fg: #1f1f1f; 24 | $accent_fg: #1f1f1f; 25 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/common.scss: -------------------------------------------------------------------------------- 1 | @mixin widget($radii: $widget_radius){ 2 | border-radius: $radii; 3 | color: $fg_color; 4 | background-color: $widget_bg; 5 | box-shadow: inset 0 0 0 $border_width $border_color; 6 | } 7 | 8 | @mixin button($flat: false, $interactive: true, $radii: $radii, $focusable: false){ 9 | border-radius: $radii; 10 | color: $fg_color; 11 | @if $flat{ 12 | background-color: transparent; 13 | background-image: none; 14 | box-shadow: none; 15 | }@else{ 16 | background-color: $button_bg; 17 | box-shadow: inset 0 0 0 $border_width $border_color; 18 | } 19 | @if $interactive{ 20 | @if $focusable { 21 | &:focus{ 22 | box-shadow: inset 0 0 0 $border_width $accent; 23 | background-color: $hover; 24 | color: $hover_fg; 25 | } 26 | } 27 | &:hover{ 28 | box-shadow: inset 0 0 0 $border_width $border_color; 29 | background-color: $hover; 30 | color: $hover_fg; 31 | } 32 | &:active{ 33 | box-shadow: inset 0 0 0 $border_width $border_color; 34 | background-color: $accent; 35 | color: $accent_fg; 36 | } 37 | } 38 | } 39 | 40 | @mixin floating_widget($shadow: true, $padding: $popover_padding){ 41 | @if $shadow { 42 | box-shadow: 0 0 5px 0 rgba(0,0,0,0.6), 43 | inset 0 0 0 $border_width $popover_border_color; 44 | } @else { 45 | box-shadow: inset 0 0 0 $border_width $popover_border_color; 46 | } 47 | border-radius: $popover_radius; 48 | margin: $wm_gaps; 49 | background-color: $bg_color; 50 | color: $fg_color; 51 | padding: $padding; 52 | } 53 | 54 | @mixin slider($width: .4em, $color: $accent, $slider: true, $focusable: false){ 55 | trough{ 56 | border-radius: $button_radius; 57 | border: $border; 58 | background-color: $button_bg; 59 | min-height: $width; 60 | min-width: $width; 61 | highlight, progress{ 62 | border-radius: $popover_radius*0.8; 63 | background-color: $color; 64 | min-height: $width; 65 | min-width: $width; 66 | } 67 | slider{ 68 | @if $slider{ 69 | background-color: $fg_color; 70 | border-radius: $button_radius; 71 | border: $border; 72 | min-height: $width; 73 | min-width: $width; 74 | } 75 | } 76 | } 77 | &:hover trough{ 78 | background-color: $hover; 79 | } 80 | @if $focusable { 81 | trough:focus{ 82 | background-color: $hover; 83 | box-shadow: inset 0 0 0 $border_width $accent; 84 | highlight, progress{ 85 | background-color: transparentize($color, 0.3); 86 | } 87 | } 88 | } 89 | } 90 | 91 | @mixin darkened($radii: 0){ 92 | border-radius: $radii*0.99; 93 | @if $theme == 'dark' { 94 | box-shadow: inset 0 0 3em 1em transparentize($bg_color, 0.1); 95 | } 96 | @if $theme == 'light' { 97 | background-color: transparentize($bg_color, 0.5); 98 | } 99 | } 100 | 101 | @mixin tooltip{ 102 | > * > *{ 103 | background-color: $bg_color; 104 | border-radius: $button_radius; 105 | border: $border_width solid $popover_border_color; 106 | color: $fg_color; 107 | padding: 8px; 108 | margin: 4px; 109 | box-shadow: 0 0 3px 0 rgba(0,0,0,0.4); 110 | } 111 | } 112 | 113 | @mixin scrollbar{ 114 | scrollbar.vertical{ 115 | slider{ 116 | background: $widget_bg; 117 | border-radius: $radii; 118 | min-width: .6em; 119 | min-height: 2em; 120 | } 121 | } 122 | overshoot{ 123 | border-radius: $radii; 124 | &.top{ 125 | background: linear-gradient(transparentize($bg_color, 0.6), transparent); 126 | } 127 | &.bottom{ 128 | background: linear-gradient(transparent,transparentize($bg_color, 0.6)); 129 | } 130 | } 131 | } 132 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/variables.scss: -------------------------------------------------------------------------------- 1 | $assets: './assets/'; 2 | $wallpaper: $assets+'wallpaper.png'; 3 | $avatar: $assets+'avatar.jpg'; 4 | 5 | $hover: transparentize($fg_color, 0.84); 6 | $accent: $blue; 7 | 8 | $wm_gaps: 12px; 9 | $destructive: $red; 10 | $succes: $green; 11 | $radii: 13px; 12 | $spacing: 8px; 13 | 14 | $widget_bg: transparentize($fg_color, 0.94); 15 | $widget_radius: $radii; 16 | 17 | $button_bg: transparentize($fg_color, 0.92); 18 | $button_radius: $radii; 19 | 20 | $panel_radius: $radii * 1; 21 | $panel_button_radius: $radii * 0.8; 22 | 23 | $border_color: rgba(255, 255, 255, 0.002); 24 | $border_width: 1px; 25 | $border: $border_width solid $border_color; 26 | 27 | $text_shadow: 2px 2px 2px rgba(0,0,0,0.5); 28 | 29 | $popover_radius: $radii * 1.8; 30 | $popover_border_color: rgba(255,255,255,0.02); 31 | $popover_padding: 14px; 32 | 33 | * { 34 | all: unset; 35 | font-size: 14px; 36 | font-family: 'Ubuntu Nerd Font'; 37 | transition: 200ms; 38 | } 39 | $mono_font: 'Mononoki Nerd Font'; 40 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/widgets/bar_widget.scss: -------------------------------------------------------------------------------- 1 | @mixin system-indicators($orientation) { 2 | @include button($flat: false, $radii: $panel_button_radius); 3 | .reveal{ 4 | @if $orientation == 'v' { padding-top: .5em; } 5 | @if $orientation == 'h' { padding-left: .2em;} 6 | } 7 | .slider{ 8 | @include slider($width: 1em, $slider: false); 9 | @if $orientation == 'v' { > * { min-height: 80px; } } 10 | @if $orientation == 'h' { > * { min-width: 90px; } } 11 | } 12 | .icon{ 13 | margin: .1em 0; 14 | &.battery{ 15 | &.low{ color: $destructive; } 16 | &.charging{ color: $succes; } 17 | &.charged{ color: $succes; } 18 | } 19 | &.notifications.active{ 20 | color: $yellow; 21 | } 22 | &.network{ 23 | &.none, &.low{ color: $red; } 24 | &.medium{} 25 | &.high{ color: $blue; } 26 | } 27 | &.bluetooth, &.bt_speaker{ 28 | color: $blue; 29 | } 30 | 31 | } 32 | } 33 | 34 | @mixin panel_media() { 35 | .player{ 36 | @include button($flat: true, $radii: $panel_button_radius); 37 | } 38 | .controls{ 39 | @include button($radii: $panel_button_radius); 40 | button { 41 | &.prev, &.next, &.play-pause{ 42 | color: transparentize($fg_color, 0.3); 43 | &:hover{ color: transparentize($fg_color, 0.15) } 44 | &:active{ color: $fg_color } 45 | } 46 | } 47 | } 48 | .icon{ 49 | &.spotify{ color: $green; } 50 | &.firefox{ color: $orange; } 51 | &.mpv{ color: $magenta; } 52 | } 53 | } 54 | 55 | @mixin workspaces() { 56 | @include button($flat: false, $radii: $panel_button_radius); 57 | .workspace-btn{ 58 | &.empty{ color: transparentize($fg_color, 0.34); } 59 | &.occupied{ color: transparentize($fg_color, 0.18); } 60 | &.active{ color: $fg_color; } 61 | &:hover{ 62 | &.empty{ color: transparentize($fg_color, 0.18); } 63 | &.occupied{ color: $fg_color; } 64 | } 65 | &:active{ color: $accent; } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/widgets/calendar.scss: -------------------------------------------------------------------------------- 1 | @mixin calendar() { 2 | calendar{ 3 | &.button{ 4 | @include button($flat: true); 5 | margin: 1em; 6 | } 7 | &:selected{ 8 | box-shadow: inset 0 -8px 0 0 transparentize($accent, 0.5), 9 | inset 0 0 0 1px $accent; 10 | border-radius: $button_radius; 11 | } 12 | &.header{ 13 | background-color: transparent; 14 | border: none; 15 | color: transparentize($fg_color, 0.5); 16 | } 17 | &.highlight{ 18 | background-color: transparent; 19 | color: transparentize($accent, 0.5); 20 | } 21 | &:indeterminate { 22 | color: transparentize($fg_color, 0.9); 23 | } 24 | font-size: 1.2em; 25 | padding: .2em; 26 | font-family: 'Maple Mono SC NF'; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/widgets/events.scss: -------------------------------------------------------------------------------- 1 | @mixin events{ 2 | label{ font-size: 1.1em; } 3 | .title-box{ 4 | padding: $spacing; 5 | border-bottom: 1px solid transparentize($fg_color, 0.9); 6 | label{ font-size: 1.1em; } 7 | } 8 | .events-box{ padding: $spacing; } 9 | .event{ 10 | .deadline{ 11 | color: transparentize($fg_color, 0.5); 12 | font-family: $mono_font; 13 | } 14 | &.done{ 15 | label{ text-decoration: line-through }; 16 | .title{ color: $green } 17 | .deadline{ color: transparentize($green ,0.5) } 18 | } 19 | &.upcoming{ 20 | .title{ color: $red } 21 | .deadline{ color: transparentize($red ,0.5) } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/widgets/media.scss: -------------------------------------------------------------------------------- 1 | @mixin media($style: 'widget', $height: 12em) { 2 | @if $style == 'widget' { @include widget; } 3 | @if $style == 'popover' { @include floating_widget; } 4 | border-radius: $radii; 5 | margin: $spacing; 6 | min-height: $height; 7 | padding: 0; 8 | text-shadow: $text_shadow; 9 | .cover{ 10 | @if $style == 'widget' { @include widget; } 11 | @if $style == 'popover' { border-radius: $radii; } 12 | background-size: cover; 13 | background-position: center; 14 | .darkened{ 15 | @if $style == 'widget' { @include darkened($radii: $button_radius); } 16 | @if $style == 'popover' { @include darkened($radii: $radii); } 17 | } 18 | .slider{ 19 | @include slider($width: .4em, $slider: false, $color: transparentize($fg_color, 0.3)); 20 | scale > contents{ 21 | trough{ 22 | border-radius: 0; 23 | border: 0; 24 | highlight{ 25 | border-radius: 0; 26 | } 27 | } 28 | } 29 | } 30 | .box{ margin: $spacing; } 31 | .artist{ font-size: 1.2em; } 32 | .title, .position{ color: transparentize($fg_color, 0.2);} 33 | .icon.player{ 34 | font-size: 1.4em; 35 | margin-left: .6em; 36 | } 37 | .controls{ 38 | margin: $spacing; 39 | button{ 40 | label{ font-size: 2em; } 41 | &.loop, &.shuffle{ 42 | label{ font-size: 1.2em; } 43 | } 44 | color: transparentize($fg_color, 0.3); 45 | &:hover{ color: $fg_color; } 46 | &.active{ color: $accent; } 47 | &.inactive{ 48 | color: transparentize($fg_color, 0.7); 49 | text-shadow: none; 50 | } 51 | &.loop{ 52 | &.Playlist{ color: transparentize($accent, 0.2); } 53 | &.Track{ color: $accent; } 54 | } 55 | } 56 | } 57 | } 58 | .sidebar{ 59 | .slider{ @include slider($width: .6em, $slider: false); } 60 | margin: $spacing*2; 61 | } 62 | 63 | &.spotify{ 64 | .icon.player{ color: $green; } 65 | .sidebar .slider{ 66 | @include slider($width: .6em, $slider: false, $color: $green); 67 | } 68 | .controls button{ 69 | &.active{ color: $green; } 70 | &.loop{ 71 | &.Playlist{ color: transparentize($green, 0.2); } 72 | &.Track{ color: $green; } 73 | } 74 | } 75 | } 76 | 77 | &.firefox{ 78 | .icon.player{ color: $orange; } 79 | } 80 | 81 | &.mpv{ 82 | .icon.player{ color: $magenta; } 83 | .sidebar .slider{ 84 | @include slider($width: .6em, $slider: false, $color: $magenta); 85 | } 86 | .controls button{ 87 | &.active{ color: $magenta; } 88 | &.loop{ 89 | &.Playlist{ color: transparentize($magenta, 0.2); } 90 | &.Track{ color: $magenta; } 91 | } 92 | } 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/widgets/notification.scss: -------------------------------------------------------------------------------- 1 | @mixin notification() { 2 | .notification-content{ 3 | padding: $popover_padding; 4 | .title{ 5 | font-size: 1.2em; 6 | font-weight: 600; 7 | margin-bottom: $popover_padding/2; 8 | } 9 | .image{ 10 | min-width: 80px; 11 | min-height: 80px; 12 | background-size: cover; 13 | margin-right: $popover_padding; 14 | border-radius: $button_radius; 15 | } 16 | .action-button{ 17 | @include button; 18 | font-size: 1.1em; 19 | font-weight: 500; 20 | padding: .5em; 21 | margin-top: $popover_padding; 22 | &:first-child{ 23 | margin-right: $popover_padding/2; 24 | } 25 | &:last-child{ 26 | margin-left: $popover_padding/2; 27 | } 28 | &:first-child:last-child{ 29 | margin-left: 0; 30 | margin-right: 0; 31 | } 32 | } 33 | .close-button{ 34 | min-width: 1.4em; 35 | min-height: 1.4em; 36 | } 37 | .time{ 38 | color: transparentize($fg_color, 0.4); 39 | margin-right: .4em; 40 | } 41 | } 42 | &:hover{ 43 | .notification-content{ 44 | .close-button{ 45 | @include button; 46 | background-color: transparentize($red, 0.5); 47 | &:hover{ 48 | background-color: transparentize($red, 0.3); 49 | } 50 | &:active{ 51 | background-color: transparentize($red, 0.1); 52 | } 53 | } 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/widgets/sys_sliders.scss: -------------------------------------------------------------------------------- 1 | @mixin sys-sliders () { 2 | .slider{ @include slider($width: .8em, $slider: false); } 3 | .percent{ 4 | margin: $spacing; 5 | min-width: 2.6em; 6 | } 7 | .icon{ 8 | margin: $spacing; 9 | &:first-child{ font-size: 1.4em; } 10 | } 11 | button{ 12 | @include button($flat: true); 13 | margin-right: $spacing; 14 | .icon{ margin: 0; } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/widgets/toggle_button.scss: -------------------------------------------------------------------------------- 1 | @mixin toggle_button($toggle_radius: $radii*2.4) { 2 | @include button($radii: $toggle_radius); 3 | &.small{ @include button($radii: $toggle_radius*1.1); } 4 | margin: $spacing; 5 | .separator{ 6 | background-color: $fg_color; 7 | min-width: 2px; 8 | min-height: 1.4em; 9 | } 10 | .half{ 11 | @include button($flat: true); 12 | min-height: 3.4em; 13 | &:first-child{ border-radius: $toggle_radius 0 0 $toggle_radius } 14 | &:last-child{ border-radius: 0 $toggle_radius $toggle_radius 0 } 15 | &:hover{ background-color: $hover } 16 | } 17 | &.active{ 18 | * { color: $accent_fg; } 19 | background-color: $accent; 20 | .separator{ background-color: $accent_fg; } 21 | &:hover{ 22 | background-color: transparentize($accent, 0.15); 23 | *{ color: $accent_fg} 24 | } 25 | &:focus{ 26 | background-color: transparentize($accent, 0.4); 27 | box-shadow: inset 0 0 0 $border_width*2 $accent; 28 | } 29 | } 30 | .icon{ 31 | font-size: 2em; 32 | &.arrow{ font-size: 1.8em; } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/widgets/user.scss: -------------------------------------------------------------------------------- 1 | @mixin user($width: 10em, $height: 10em) { 2 | padding: 0; 3 | min-height: 10em; 4 | min-width: 10em; 5 | background-image: url($assets+'avatar.jpg'); 6 | background-size: cover; 7 | .darkened{ 8 | @include darkened($radii: $button_radius); 9 | padding: .3em; 10 | label{ 11 | text-shadow: $text_shadow; 12 | &:first-child{ 13 | color: transparentize($fg_color, 0.1); 14 | font-size: 1.3em; 15 | } 16 | &:last-child{ 17 | color: transparentize($fg_color, 0.3); 18 | font-size: 1.1em; 19 | } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/widgets/weather.scss: -------------------------------------------------------------------------------- 1 | @mixin weather{ 2 | .info{ 3 | .place{ 4 | label{ font-size: 1.2em } 5 | .icon{ 6 | font-size: .9em; 7 | margin-right: .2em; 8 | color: transparentize($accent, 0); 9 | } 10 | } 11 | .feels{ color: transparentize($fg_color, 0.3); } 12 | .temp{ font-size: 1.2em; } 13 | } 14 | .icon{ 15 | font-size: 2.6em; 16 | 17 | &.clear.d{ color: transparentize($yellow, 0.6); } 18 | &.clear.n{ color: transparentize($blue, 0.6); } 19 | 20 | &.clouds.d{ color: transparentize($fg_color, 0.6); } 21 | &.clouds.n{ color: transparentize($blue, 0.6); } 22 | 23 | &.rain{ color: transparentize($blue, 0.6); } 24 | &.thunderstorm{ color: transparentize($yellow, 0.6); } 25 | &.snow{ color: transparentize($fg_color, 0.6); } 26 | &.mist{ color: transparentize($teal, 0.6); } 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/windows/app_laucher.scss: -------------------------------------------------------------------------------- 1 | .app-launcher{ 2 | @include floating_widget; 3 | min-height: 530px; 4 | min-width: 520px; 5 | padding: 3em; 6 | 7 | .search{ 8 | min-height: 1.4em; 9 | padding: 2em; 10 | border-radius: $radii; 11 | background-image: url($wallpaper); 12 | background-size: cover; 13 | background-position: right bottom; 14 | margin-bottom: 3em; 15 | .icon, .input{ 16 | @include button; 17 | background-color: transparentize($bg_color, 0.1); 18 | box-shadow: 0 0 5px 0 rgba(0,0,0,0.4); 19 | } 20 | .icon{ 21 | min-width: 2.4em; 22 | margin-right: $spacing 23 | } 24 | .input{ 25 | padding: .6em .8em; 26 | } 27 | } 28 | 29 | .separator{ 30 | min-height: 1px; 31 | background-color: transparentize($fg_color, 0.94); 32 | margin: .2em; 33 | } 34 | 35 | .app{ 36 | @include button($flat: true, $focusable: true); 37 | .app-content{ 38 | .name{ font-size: 1.1em } 39 | .description{ color: transparentize($fg_color, 0.3) } 40 | .appicon{ 41 | background-size: cover; 42 | min-width: 2.4em; 43 | min-height: 2.4em; 44 | margin-right: 1em; 45 | } 46 | padding: .6em; 47 | } 48 | } 49 | 50 | .scroll{ 51 | @include scrollbar; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/windows/datemenu.scss: -------------------------------------------------------------------------------- 1 | .datemenu{ 2 | @include floating_widget; 3 | 4 | margin-left: 120em; 5 | background-color: rgba(0, 0, 0, 0.9); 6 | 7 | .widget{ 8 | @include widget; 9 | margin-left: $spacing; 10 | padding: $spacing; 11 | 12 | } 13 | 14 | .clock *{ 15 | margin-top: $spacing; 16 | text-shadow: $text_shadow; 17 | font-size: 7em; 18 | } 19 | 20 | .uptime{ 21 | margin-bottom: $spacing*2; 22 | font-size: 1.1em; 23 | text-shadow: $text_shadow; 24 | color: transparentize($fg_color, 0.3) 25 | } 26 | 27 | .calendar-bin{ 28 | padding: 1em 2.5em .4em 2em; 29 | margin-bottom: 1em; 30 | margin-right: .5em; 31 | @include calendar; 32 | } 33 | 34 | .system{ 35 | > * { 36 | @include widget; 37 | margin: $spacing; 38 | padding: 5px; 39 | min-width: 3.4em; 40 | min-height: 3.4em; 41 | } 42 | circular-progress{ 43 | background-color: $bg_color; 44 | color: $accent; 45 | &.battery{ 46 | &.low{ color: $red } 47 | } 48 | .icon{ 49 | font-size: 1.5em; 50 | margin-right: 4.5px; 51 | } 52 | } 53 | } 54 | 55 | .media{ 56 | @include media($style: 'widget') 57 | } 58 | 59 | .events.widget{ 60 | padding: 0; 61 | .events{ 62 | @include events; 63 | } 64 | } 65 | 66 | .weather{ 67 | @include weather; 68 | } 69 | 70 | .wallpaper{ 71 | min-height: 13em; 72 | background-image: url($assets+'wallpaper.png'); 73 | background-size: cover; 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/windows/desktop.scss: -------------------------------------------------------------------------------- 1 | .desktop{ 2 | // background-image: url($wallpaper); 3 | background-size: cover; 4 | border-radius: 10em; 5 | .clock{ 6 | color: white; 7 | text-shadow: 4px 4px 4px black; 8 | .time{ 9 | border: 3px solid $fg_color; 10 | box-shadow: inset 0 0 3px 3px $bg_color; 11 | border-radius: $popover_radius; 12 | padding: 2em 3em 0em 2em; 13 | .hour, .minutes, .separator{ 14 | font-size: 11em; 15 | font-family: $mono_font; 16 | } 17 | } 18 | .date { 19 | font-size: 2em; 20 | padding-top: .5em; 21 | } 22 | } 23 | .system{ 24 | > * { 25 | padding: 8px; 26 | } 27 | circular-progress{ 28 | background-color: transparentize($bg_color, 0.5); 29 | color: $fg_color; 30 | &.battery{ 31 | &.low{ color: $red } 32 | } 33 | .icon{ font-size: 3em; } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/windows/dock.scss: -------------------------------------------------------------------------------- 1 | $dock_icon_size: 6em; 2 | 3 | .dock{ 4 | .container{ 5 | min-width: $dock_icon_size*11.5; 6 | min-height: $dock_icon_size*1.3; 7 | &.hovered{ 8 | min-width: $dock_icon_size*11.7; 9 | } 10 | } 11 | 12 | .foot{ 13 | @include floating_widget; 14 | margin: 0 1.5em; 15 | padding: 0; 16 | border-radius: $popover_radius $popover_radius 0 0; 17 | border-bottom: none; 18 | min-height: 1.5em; //footer height 19 | } 20 | 21 | .laucher{ 22 | .indicator{ 23 | min-height: .4em; //indicator height 24 | min-width: 2em; //indicator width 25 | border-radius: $button_radius; 26 | } 27 | .icon{ 28 | min-width: $dock_icon_size; 29 | min-height: $dock_icon_size; 30 | background-size: contain; 31 | background-repeat: no-repeat; 32 | } 33 | &:hover{ 34 | background-image: linear-gradient(transparent, transparentize($fg_color, 0.94)); 35 | .icon{ 36 | min-width: $dock_icon_size*1.2; 37 | min-height: $dock_icon_size*1.2; 38 | } 39 | } 40 | &:active{ 41 | .indicator{ 42 | background-color: $accent; 43 | } 44 | } 45 | &.firefox .icon{ background-image: url($assets+'apps/firefox.png'); } 46 | &.terminal .icon{ background-image: url($assets+'apps/terminal.png'); } 47 | &.file-manager .icon{ background-image: url($assets+'apps/file-manager.png'); } 48 | &.editor .icon{ background-image: url($assets+'apps/editor.png'); } 49 | &.spotify .icon{ background-image: url($assets+'apps/spotify.png'); } 50 | &.caprine .icon{ background-image: url($assets+'apps/caprine.png'); } 51 | &.bitwig .icon{ background-image: url($assets+'apps/bitwig.png'); } 52 | &.battle .icon{ background-image: url($assets+'apps/battle.png'); } 53 | &.bottles .icon{ background-image: url($assets+'apps/bottles.png'); } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/windows/hbar.scss: -------------------------------------------------------------------------------- 1 | .hpanel { 2 | min-height: 2.2em; 3 | font-weight: bold; 4 | font-size: 1.1em; 5 | color: $fg_color; 6 | background-color: $bg_color; 7 | border-bottom: $border_width solid $popover_border_color; 8 | box-shadow: 0 0 6px 0 rgba(0,0,0,0.8); 9 | 10 | .button-bin{ 11 | margin: 3px 2px; 12 | &.launcher{ margin-left: 4px } 13 | &.powermenu{ margin-right: 4px } 14 | } 15 | 16 | .button{ 17 | .icon{ font-size: 1.2em;} 18 | @include button($flat: true, $radii: $panel_button_radius); 19 | > * { padding: 0 .7em } 20 | 21 | &.launcher{ color: $blue; } 22 | &.powermenu{ color: $red; } 23 | &.window{ @include button($flat: true, $interactive: false) } 24 | 25 | &.workspaces{ 26 | @include button($flat: false, $radii: $panel_button_radius); 27 | .workspace-btn{ 28 | label{ font-size: 1.2em; } 29 | margin: 2px; 30 | &.empty{ color: transparentize($fg_color, 0.34); } 31 | &.occupied{ color: transparentize($fg_color, 0.18); } 32 | &.active{ color: $fg_color; } 33 | &:hover{ 34 | &.empty{ color: transparentize($fg_color, 0.18); } 35 | &.occupied{ color: $fg_color; } 36 | } 37 | &:active{ color: $accent; } 38 | } 39 | } 40 | 41 | &.system-indicators{ 42 | @include system-indicators($orientation: 'h'); 43 | > * > * > * { padding: 0 .3em; } 44 | } 45 | 46 | &.media{ 47 | .icon{ 48 | margin-right: .2em; 49 | &.spotify{ color: $green; } 50 | &.firefox{ color: $orange; } 51 | &.mpv{ color: $magenta; } 52 | } 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/windows/media.scss: -------------------------------------------------------------------------------- 1 | .media-window{ 2 | padding: 0; 3 | .media{ 4 | @include media($height: 20em, $style: 'popover'); 5 | padding: 0; 6 | .cover{ 7 | min-width: 20em; 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/windows/noti_center.scss: -------------------------------------------------------------------------------- 1 | .notification-center{ 2 | min-width: 400px; 3 | @include floating_widget; 4 | .title{ 5 | button{ 6 | font-size: 1.0em; 7 | padding: .4em 1em; 8 | @include button; 9 | } 10 | label{ font-size: 1.4em } 11 | margin-bottom: $spacing; 12 | } 13 | .notifications-list{ 14 | @include scrollbar; 15 | .placeholder{ 16 | .icon{ font-size: 8em; } 17 | label{ font-size: 2em; } 18 | } 19 | .notification{ 20 | @include notification; 21 | .notification-content{ 22 | @include widget; 23 | margin-bottom: $spacing; 24 | border-radius: $widget_radius*0.3; 25 | } 26 | &:first-child .notification-content{ 27 | border-radius: $widget_radius $widget_radius $widget_radius*0.3 $widget_radius*0.3; 28 | } 29 | &:last-child .notification-content{ 30 | border-radius: $widget_radius*0.3 $widget_radius*0.3 $widget_radius $widget_radius; 31 | } 32 | &:first-child:last-child .notification-content{ 33 | border-radius: $widget_radius; 34 | } 35 | } 36 | margin-bottom: $spacing; 37 | } 38 | margin-top: 2em; 39 | margin-bottom: 2em; 40 | background-color: rgba(0, 0, 0, 0.9); 41 | .controls{ 42 | @include widget; 43 | padding: $popover_padding * 0.5; 44 | .sys-sliders{ @include sys-sliders; } 45 | .toggle { 46 | min-height: 3.4em; 47 | @include toggle_button($toggle_radius: $radii*1.4); 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/windows/notifications.scss: -------------------------------------------------------------------------------- 1 | .notifications-window-box{ 2 | .notification{ 3 | @include notification; 4 | .notification-content{ 5 | min-width: 450px; 6 | @include floating_widget; 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/windows/osd.scss: -------------------------------------------------------------------------------- 1 | .osd-widget{ 2 | @include floating_widget; 3 | padding: .3em; 4 | .icon{ 5 | font-size: 40px; 6 | color: $accent_fg; 7 | min-width: 30px; 8 | min-height: 30px; 9 | padding-right: 8px; 10 | } 11 | .scale{ 12 | min-height: 14em; 13 | @include slider($width: 3em); 14 | trough{ 15 | background-color: transparent; 16 | border: none; 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /dotfiles/eww/scss/windows/powermenu.scss: -------------------------------------------------------------------------------- 1 | .background.powermenu{ 2 | background-color: rgba(0,0,0,0.5); 3 | .content{ 4 | @include floating_widget; 5 | .user{ @include user; } 6 | .clock{ 7 | text-shadow: $text_shadow; 8 | margin-bottom: 8em; 9 | .hour *{ font-size: 9em } 10 | .date{ font-size: 2em } 11 | } 12 | .power-menu{ 13 | border-radius: $radii*3; 14 | padding: 15px; 15 | } 16 | .button-bin{ 17 | margin: 15px; 18 | margin-bottom: 0; 19 | .button{ 20 | @include button($focusable: true); 21 | border-radius: $radii*2.4; 22 | font-size: 60px; 23 | min-width: 130px; 24 | min-height: 130px; 25 | .icon{ 26 | background-size: contain; 27 | margin: 24px; 28 | @if $theme == 'light' { 29 | &.shutdown{ background-image: url($assets+'powermenu/light-shutdown.png'); } 30 | &.reboot{ background-image: url($assets+'powermenu/light-reboot.png'); } 31 | &.logout{ background-image: url($assets+'powermenu/light-logout.png'); } 32 | &.suspend{ background-image: url($assets+'powermenu/light-suspend.png'); } 33 | &.lock{ background-image: url($assets+'powermenu/light-lock.png'); } 34 | }@else{ 35 | &.shutdown{ background-image: url($assets+'powermenu/shutdown.png'); } 36 | &.reboot{ background-image: url($assets+'powermenu/reboot.png'); } 37 | &.logout{ background-image: url($assets+'powermenu/logout.png'); } 38 | &.suspend{ background-image: url($assets+'powermenu/suspend.png'); } 39 | &.lock{ background-image: url($assets+'powermenu/lock.png'); } 40 | } 41 | } 42 | } 43 | .label{ 44 | font-size: 20px; 45 | margin: 8px 0; 46 | } 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/windows/quicksettings.scss: -------------------------------------------------------------------------------- 1 | .quick-settings{ 2 | @include floating_widget; 3 | 4 | .widget{ 5 | @include widget; 6 | margin: $spacing; 7 | padding: $spacing; 8 | } 9 | 10 | .sys-sliders{ @include sys-sliders; } 11 | 12 | .sys-actions{ 13 | .user{ @include user; } 14 | .sysactions{ 15 | button{ 16 | @include button($radii: 40%); 17 | margin: $spacing; 18 | padding: .4em; 19 | label{ font-size: 2.4em } 20 | &.power{ color: $red; } 21 | } 22 | .uptime{ 23 | font-size: 1.3em; 24 | color: transparentize($fg_color, 0.5); 25 | } 26 | } 27 | } 28 | 29 | .system{ 30 | > * > *{ 31 | @include widget; 32 | margin: $spacing; 33 | padding: 8px; 34 | min-width: 4.4em; 35 | min-height: 4.4em; 36 | } 37 | circular-progress{ 38 | background-color: $bg_color; 39 | color: $accent; 40 | &.battery{ 41 | &.low{ color: $red } 42 | } 43 | .icon{ font-size: 1.8em; } 44 | } 45 | } 46 | 47 | .toggles .toggle{ 48 | @include toggle_button($toggle_radius: $radii*2.4); 49 | } 50 | 51 | .media{ 52 | @include media($height: 12em); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /dotfiles/eww/scss/windows/vbar.scss: -------------------------------------------------------------------------------- 1 | .vpanel { 2 | min-width: 2.2em; 3 | font-weight: bold; 4 | color: $fg_color; 5 | background-color: $bg_color; 6 | 7 | // &.floating { 8 | margin: $wm_gaps; 9 | border-radius: $panel_radius; 10 | box-shadow: 0 0 5px rgba(0,0,0,0.3); 11 | border: $border_width solid $popover_border_color; 12 | // } 13 | 14 | .leftBar .button-bin { 15 | margin: .4em .4em 0 .4em; 16 | } 17 | .centerBar .button-bin { 18 | margin: .2em .4em; 19 | } 20 | .rightBar .button-bin { 21 | margin: 0 .4em .4em .4em; 22 | } 23 | 24 | .media{ 25 | @include panel_media(); 26 | .player{ min-height: 2.6em; } 27 | } 28 | 29 | .icon{ font-size: 1.3em;} 30 | .button{ 31 | @include button($flat: true, $radii: $panel_button_radius); 32 | > * { padding: .4em } 33 | 34 | &.launcher{ color: $blue; } 35 | &.powermenu{ color: $red; } 36 | 37 | &.clock{ 38 | @include button($flat: false, $interactive: true); 39 | label{ font-size: 1.4em;} 40 | .separator{ 41 | min-height: 0.2em; 42 | padding: 0 .3em; 43 | .dot{ 44 | min-height: .15em; 45 | min-width: .15em; 46 | border-radius: $radii; 47 | background-color: $fg_color; 48 | } 49 | } 50 | } 51 | 52 | &.workspaces{ 53 | @include workspaces; 54 | } 55 | 56 | &.system-indicators{ 57 | @include system-indicators($orientation: 'v'); 58 | } 59 | } 60 | 61 | > * > .separator{ 62 | margin: .3em 0; 63 | padding: 0 .8em; 64 | .dot{ 65 | min-height: .3em; 66 | min-width: .3em; 67 | border-radius: $radii; 68 | background-color: transparentize($fg_color, 0.6); 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /dotfiles/eww/setups/leftbar.yuck: -------------------------------------------------------------------------------- 1 | (include "./yuck/windows/vbar.yuck") 2 | 3 | (defwindow bar 4 | :monitor 0 5 | :exclusive true 6 | :stacking "fg" 7 | :focusable false 8 | :geometry (geometry :width "1%" 9 | :height "100%" 10 | :anchor "center left")(bar)) 11 | (defwindow desktop 12 | :monitor 0 13 | :stacking "bottom" 14 | :focusable false 15 | :geometry (geometry :width "100%" 16 | :height "100%" 17 | :anchor "bottom right")(desktop)) 18 | 19 | (defwindow osd 20 | :monitor 0 21 | :stacking "fg" 22 | :namespace "eww_osd" 23 | :focusable false 24 | :geometry (geometry :width "1%" 25 | :height "1%" 26 | :anchor "center right")(osd)) 27 | 28 | (defwindow powermenu 29 | :monitor 0 30 | :stacking "fg" 31 | :focusable true 32 | :namespace "eww_powermenu" 33 | :geometry (geometry :width "120%" 34 | :height "120%" 35 | :anchor "center center") 36 | (eventbox 37 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu powermenu" 38 | (powermenu))) 39 | 40 | (defwindow calendar 41 | :monitor 0 42 | :stacking "fg" 43 | :focusable false 44 | :geometry (geometry :width "100%" 45 | :height "120%" 46 | :anchor "top right") 47 | (eventbox 48 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu calendar" 49 | (datemenu :valign "start" :halign "start"))) 50 | 51 | (defwindow media 52 | :monitor 0 53 | :stacking "fg" 54 | :focusable false 55 | :geometry (geometry :width "100%" 56 | :height "100%" 57 | :anchor "center left") 58 | (box 59 | :space-evenly false 60 | (media :valign "center" :halign "start") 61 | (eventbox 62 | :hexpand true 63 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu media") 64 | )) 65 | 66 | (defwindow quicksettings 67 | :monitor 0 68 | :stacking "fg" 69 | :focusable false 70 | :geometry (geometry :width "100%" 71 | :height "100%" 72 | :anchor "center left") 73 | (box 74 | :space-evenly false 75 | (notifications_center :valign "fill" :halign "start") 76 | (eventbox 77 | :hexpand true 78 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu quicksettings") 79 | )) 80 | 81 | (defwindow dock 82 | :monitor 0 83 | :stacking "fg" 84 | :namespace "eww_dock" 85 | :focusable false 86 | :geometry (geometry :width "1%" 87 | :height "1%" 88 | :anchor "bottom center")(dock)) 89 | 90 | (defwindow notifications_popup 91 | :monitor 0 92 | :stacking "overlay" 93 | :namespace "eww_notifications" 94 | :focusable false 95 | :geometry (geometry :width "0%" 96 | :height "0%" 97 | :anchor "top center")(notifications_popup)) 98 | 99 | (defwindow app_launcher 100 | :monitor 0 101 | :stacking "overlay" 102 | :namespace "eww_applauncher" 103 | :focusable true 104 | :geometry (geometry :width "100%" 105 | :height "100%" 106 | :anchor "center center") 107 | (box 108 | (eventbox 109 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu app_launcher" 110 | (app_launcher :valign "center" :halign "center")) 111 | )) 112 | -------------------------------------------------------------------------------- /dotfiles/eww/setups/topbar.yuck: -------------------------------------------------------------------------------- 1 | (include "./yuck/windows/hbar.yuck") 2 | 3 | (defwindow bar 4 | :monitor 0 5 | :exclusive true 6 | :stacking "fg" 7 | :namespace "eww_bar" 8 | :geometry (geometry :width "100%" 9 | :height "1%" 10 | :anchor "top center")(hbar)) 11 | 12 | (defwindow osd 13 | :monitor 0 14 | :stacking "fg" 15 | :namespace "eww_osd" 16 | :geometry (geometry :width "1%" 17 | :height "1%" 18 | :anchor "center right")(osd)) 19 | 20 | (defwindow powermenu 21 | :monitor 0 22 | :stacking "fg" 23 | :focusable true 24 | :namespace "eww_powermenu" 25 | :geometry (geometry :width "100%" 26 | :height "120%" 27 | :anchor "center center") 28 | (eventbox 29 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu powermenu" 30 | (powermenu))) 31 | 32 | (defwindow calendar 33 | :monitor 0 34 | :stacking "fg" 35 | :geometry (geometry :width "100%" 36 | :height "100%" 37 | :anchor "top right") 38 | (eventbox 39 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu calendar" 40 | (datemenu :valign "start" :halign "start"))) 41 | 42 | (defwindow quicksettings 43 | :monitor 0 44 | :stacking "fg" 45 | :geometry (geometry :width "100%" 46 | :height "100%" 47 | :anchor "top right") 48 | (box 49 | :space-evenly false 50 | (eventbox 51 | :hexpand true 52 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu quicksettings") 53 | (box 54 | :space-evenly false 55 | :orientation "v" 56 | (quicksettings :valign "start" :halign "end") 57 | (eventbox 58 | :vexpand true 59 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu quicksettings") 60 | ) 61 | )) 62 | 63 | (defwindow desktop 64 | :monitor 0 65 | :stacking "bottom" 66 | :namespace "eww_background" 67 | :geometry (geometry :width "100%" 68 | :height "100%" 69 | :anchor "bottom right")(desktop)) 70 | 71 | (defwindow dock 72 | :monitor 0 73 | :stacking "fg" 74 | :namespace "eww_dock" 75 | :geometry (geometry :width "1%" 76 | :height "1%" 77 | :anchor "bottom center")(dock)) 78 | 79 | (defwindow notifications_popup 80 | :monitor 0 81 | :stacking "overlay" 82 | :namespace "eww_notifications" 83 | :geometry (geometry :width "0%" 84 | :height "0%" 85 | :anchor "top center")(notifications_popup)) 86 | 87 | (defwindow app_launcher 88 | :monitor 0 89 | :stacking "overlay" 90 | :namespace "eww_applauncher" 91 | :focusable true 92 | :geometry (geometry :width "100%" 93 | :height "100%" 94 | :anchor "center center") 95 | (box 96 | (eventbox 97 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu app_launcher" 98 | (app_launcher :valign "center" :halign "center")) 99 | )) 100 | -------------------------------------------------------------------------------- /dotfiles/eww/yuck/widgets.yuck: -------------------------------------------------------------------------------- 1 | (include "./yuck/widgets/notification.yuck") 2 | (include "./yuck/widgets/media.yuck") 3 | (include "./yuck/widgets/weather.yuck") 4 | (include "./yuck/widgets/events.yuck") 5 | (include "./yuck/widgets/sys_sliders.yuck") 6 | (include "./yuck/widgets/toggles.yuck") 7 | (include "./yuck/widgets/sysprogress.yuck") 8 | (include "./yuck/widgets/user.yuck") 9 | (include "./yuck/widgets/bar_widgets.yuck") 10 | -------------------------------------------------------------------------------- /dotfiles/eww/yuck/widgets/events.yuck: -------------------------------------------------------------------------------- 1 | (defwidget event [event] (box 2 | :class "event ${event.done ? "done" : ""} ${event.upcoming ? "upcoming" : ""}" 3 | :space-evenly "false" 4 | :visible {event.deadline != ""} 5 | (label 6 | :class "title" 7 | :text {event.title} 8 | :xalign 0 9 | :hexpand true) 10 | (label 11 | :class "deadline" 12 | :text {event.deadline} 13 | :xalign 1 14 | :halign "end") 15 | 16 | )) 17 | 18 | (defwidget events [] (box 19 | :class "events" 20 | :orientation "v" 21 | :space-evenly false 22 | :visible {arraylength(events) > 0} 23 | (box 24 | :class "title-box" 25 | (label :text "Todo" :halign "START") 26 | (label :text "Deadline" :halign "END") 27 | ) 28 | (box 29 | :class "events-box" 30 | :orientation "v" 31 | (for event in events 32 | (event :event event)) 33 | ) 34 | )) 35 | -------------------------------------------------------------------------------- /dotfiles/eww/yuck/widgets/media.yuck: -------------------------------------------------------------------------------- 1 | (defwidget media_player [player] (box 2 | :class "media ${player.name}" 3 | :space-evenly false 4 | (box 5 | :class "cover" 6 | :style "background-image: url('${player.cover}');" 7 | :space-evenly false 8 | :hexpand true 9 | (box 10 | :class "darkened" 11 | :orientation "v" 12 | :hexpand true 13 | (box 14 | :orientation "v" 15 | :valign "START" 16 | :class "box" 17 | :space-evenly false 18 | (label 19 | :class "artist" 20 | :text {player.artist} 21 | :halign "START" 22 | :limit-width 42) 23 | (label 24 | :class "title" 25 | :text {player.title} 26 | :halign "START" 27 | :limit-width 42) 28 | ) 29 | (box 30 | :space-evenly false 31 | :orientation "v" 32 | :valign "END" 33 | (eventbox 34 | :visible {player.length > 0} 35 | :class "slider" 36 | :hexpand true 37 | (scale 38 | :value {media_positions[player.name].position} 39 | :min 0 40 | :max {player.length} 41 | :onchange "${EWW_CONFIG_DIR}/scripts/player ${player.name} position {}" 42 | )) 43 | (box 44 | :hexpand true 45 | :space-evenly false 46 | (box 47 | :space-evenly false 48 | (label 49 | :class "icon player" 50 | :valign "CENTER" 51 | :text {player.icon} 52 | ) 53 | (label 54 | :class "box position" 55 | :visible {player.length > 0} 56 | :text "${media_positions[player.name].positionStr} / ${player.lengthStr}" 57 | :halign "START") 58 | ) 59 | (box 60 | :class "controls" 61 | :space-evenly false 62 | :halign "END" 63 | :hexpand true 64 | (button 65 | :onclick "${EWW_CONFIG_DIR}/scripts/player ${player.name} shuffle" 66 | :class "shuffle ${player.shuffle == "true" ? "active" : ""}" 67 | :visible {player.shuffle != "null"} 68 | (label :class "icon" :text "󰒟")) 69 | (button 70 | :onclick "${EWW_CONFIG_DIR}/scripts/player ${player.name} prev" 71 | :class "prev ${player.canPrev ? "" : "inactive"}" 72 | :active {player.canPrev} 73 | (label :class "icon" :text "󰒮")) 74 | (button 75 | :onclick "${EWW_CONFIG_DIR}/scripts/player ${player.name} play-pause" 76 | :class "play-pause" 77 | :active {player.canPlay} 78 | (label :class "icon" :text "${player.status == "Playing" ? "󰏦" : "󰐍"}" )) 79 | (button 80 | :onclick "${EWW_CONFIG_DIR}/scripts/player ${player.name} next" 81 | :class "next ${player.canNext ? "" : "inactive"}" 82 | :active {player.canNext} 83 | (label :class "icon" :text "󰒭")) 84 | (button 85 | :onclick "${EWW_CONFIG_DIR}/scripts/player ${player.name} loop" 86 | :class "loop ${player.loop}" 87 | :visible {player.loop != "null"} 88 | (label :class "icon" :text "󰑓")) 89 | ) 90 | ) 91 | ) 92 | ) 93 | ) 94 | (box 95 | :class "sidebar" 96 | :visible {player.volume < 0 ? false : true} 97 | :orientation "v" 98 | :space-evenly false 99 | (eventbox 100 | :class "slider" 101 | :vexpand true 102 | (scale 103 | :flipped true 104 | :orientation "v" 105 | :min 0 106 | :max 100 107 | :value {player.volume} 108 | :onchange "${EWW_CONFIG_DIR}/scripts/player ${player.name} volume {}" 109 | ) 110 | ) 111 | ) 112 | )) 113 | -------------------------------------------------------------------------------- /dotfiles/eww/yuck/widgets/notification.yuck: -------------------------------------------------------------------------------- 1 | (defwidget notification [onclick notification] (eventbox 2 | :class "notification" 3 | :onclick "${EWW_CONFIG_DIR}/scripts/notifications ${onclick} ${notification.id}" 4 | (box 5 | :class "notification-content" 6 | :space-evenly false 7 | :orientation "v" 8 | (box 9 | :space-evenly false 10 | (box 11 | :visible {notification.image != "null"} 12 | :class "image" 13 | :style "background-image: url('${notification.image}')" 14 | :valign "start" 15 | ) 16 | (box 17 | :class "content" 18 | :space-evenly false 19 | :orientation "v" 20 | :hexpand true 21 | (box 22 | :space-evenly false 23 | (label 24 | :xalign 0 25 | :class "title" 26 | :wrap true 27 | :text {notification.summary}) 28 | (box :hexpand true) 29 | (label 30 | :xalign 1 31 | :valign "start" 32 | :class "time" 33 | :text "${notification.time.hour}:${notification.time.minute}") 34 | (button 35 | :class "close-button" 36 | :valign "start" 37 | :onclick "${EWW_CONFIG_DIR}/scripts/notifications close ${notification.id}" 38 | (label :text "") 39 | ) 40 | ) 41 | (label 42 | :wrap true 43 | :justify "left" 44 | :xalign 0 45 | :class "body" 46 | :text {notification.body}) 47 | ) 48 | ) 49 | (box 50 | :space-evenly false 51 | (for action in {notification.actions} 52 | (button 53 | :hexpand true 54 | :class "action-button" 55 | :onclick "${EWW_CONFIG_DIR}/scripts/notifications action ${notification.id} ${action.id}" 56 | (label :text {action.label}) 57 | ) 58 | ) 59 | ) 60 | ) 61 | )) 62 | 63 | -------------------------------------------------------------------------------- /dotfiles/eww/yuck/widgets/sys_sliders.yuck: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /dotfiles/eww/yuck/widgets/sysprogress.yuck: -------------------------------------------------------------------------------- 1 | 2 | (defwidget sysprogress [data icon css tip] (box 3 | :class "${css}" (circular-progress 4 | :class css 5 | :value data 6 | :start-at 75 7 | :clockwise false 8 | :thickness 7 9 | :tooltip tip 10 | (overlay 11 | :valign "center" 12 | (label :class "icon" :text icon) 13 | ; (label :text "${round(data, 0)}%") 14 | ) 15 | ))) 16 | 17 | (defwidget sysprogress_cpu [] (sysprogress 18 | :css "cpu" 19 | :tip "CPU ${round(EWW_CPU.avg,0)}%" 20 | :data {EWW_CPU.avg} 21 | :icon "󰘚")) 22 | 23 | (defwidget sysprogress_ram [] (sysprogress 24 | :css "ram" 25 | :tip "RAM ${round(EWW_RAM.used_mem / EWW_RAM.total_mem * 100, 0)}%" 26 | :data {EWW_RAM.used_mem / EWW_RAM.total_mem * 100} 27 | :icon "󰍛")) 28 | 29 | (defwidget sysprogress_temp [] (sysprogress 30 | :css "temp" 31 | :tip "Temperature: ${EWW_TEMPS["ACPITZ_TEMP1"]}°" 32 | :data {EWW_TEMPS["ACPITZ_TEMP1"]} 33 | :icon "󰈸")) 34 | -------------------------------------------------------------------------------- /dotfiles/eww/yuck/widgets/toggles.yuck: -------------------------------------------------------------------------------- 1 | (defwidget small_toggle [state icon toggle_action] (button 2 | :class "toggle small ${state == "on" ? "active" : ""}" 3 | :onclick toggle_action 4 | (overlay (box) (label :class "icon" :valign "center" :text icon)) 5 | )) 6 | 7 | (defwidget arrow_toggle [state icon toggle_action arrow_action] (box 8 | :class "toggle arrow ${state == "on" ? "active" : ""}" 9 | :orientation "h" 10 | :valign "center" 11 | :space-evenly false 12 | (button :class "half" 13 | :onclick toggle_action 14 | :hexpand true 15 | (overlay (box)(label :class "icon indicator" :valign "center" :text icon))) 16 | (box :class "separator" :valign "center") 17 | (button :class "half" 18 | :onclick arrow_action 19 | :hexpand true 20 | (overlay (box) (label :class "icon arrow" :valign "center" :text ""))) 21 | )) 22 | 23 | ; arrow_toggles 24 | (defwidget arrow_toggle_wifi [] (arrow_toggle 25 | :state {network.wifi.state} 26 | :icon {network.wifi.icon} 27 | :arrow_action "${EWW_CONFIG_DIR}/scripts/launcher network" 28 | :toggle_action "${EWW_CONFIG_DIR}/scripts/network toggle")) 29 | 30 | (defwidget arrow_toggle_bt [] (arrow_toggle 31 | :state {bluetooth.state} 32 | :icon {bluetooth.icon} 33 | :arrow_action "${EWW_CONFIG_DIR}/scripts/launcher bluetooth" 34 | :toggle_action "${EWW_CONFIG_DIR}/scripts/bluetooth toggle")) 35 | 36 | (defwidget arrow_toggle_power [] (arrow_toggle 37 | :state {power.state} 38 | :icon {power.icon} 39 | :arrow_action "${EWW_CONFIG_DIR}/scripts/launcher rog" 40 | :toggle_action "${EWW_CONFIG_DIR}/scripts/power toggle")) 41 | 42 | ; small_toggles 43 | (defwidget small_toggle_dnd [] (small_toggle 44 | :state {notifications.dnd.state} 45 | :icon {notifications.dnd.icon} 46 | :toggle_action "${EWW_CONFIG_DIR}/scripts/notifications toggle")) 47 | 48 | (defwidget small_toggle_mute [] (small_toggle 49 | :state {volume.mute.state} 50 | :icon {volume.mute.icon} 51 | :toggle_action "${EWW_CONFIG_DIR}/scripts/volume mute_toggle")) 52 | 53 | (defwidget small_toggle_dark_mode [] (small_toggle 54 | :state {theme.state} 55 | :icon {theme.icon} 56 | :toggle_action "${EWW_CONFIG_DIR}/scripts/theme toggle")) 57 | 58 | (defwidget small_toggle_night_light [] (small_toggle 59 | :state {night_light.state} 60 | :icon {night_light.icon} 61 | :toggle_action "${EWW_CONFIG_DIR}/scripts/night_light toggle")) 62 | 63 | (defwidget small_toggle_bt [] (small_toggle 64 | :state {bluetooth.state} 65 | :icon {bluetooth.icon} 66 | :toggle_action "${EWW_CONFIG_DIR}/scripts/launcher bluetooth")) 67 | 68 | (defwidget small_toggle_network [] (small_toggle 69 | :state {network.wifi.state} 70 | :icon {network.wifi.icon} 71 | :toggle_action "${EWW_CONFIG_DIR}/scripts/launcher network")) 72 | 73 | (defwidget small_toggle_power [] (small_toggle 74 | :state {power.state} 75 | :icon {power.icon} 76 | :toggle_action "${EWW_CONFIG_DIR}/scripts/launcher rog")) 77 | -------------------------------------------------------------------------------- /dotfiles/eww/yuck/widgets/user.yuck: -------------------------------------------------------------------------------- 1 | (defwidget user [show_name ?class] (box 2 | :class "user ${class}" 3 | (box 4 | :class "darkened" 5 | :orientation "v" 6 | :space-evenly false 7 | (label 8 | :visible show_name 9 | :valign "START" 10 | :halign "START" 11 | :text real_name) 12 | (label 13 | :visible show_name 14 | :vexpand true 15 | :valign "END" 16 | :halign "START" 17 | :text user_name) 18 | ))) 19 | -------------------------------------------------------------------------------- /dotfiles/eww/yuck/widgets/weather.yuck: -------------------------------------------------------------------------------- 1 | (defwidget weather [place] (box 2 | :class "weather" 3 | :space-evenly false 4 | (box 5 | :class "info widget" 6 | :orientation "h" 7 | :hexpand true 8 | :space-evenly false 9 | (box 10 | :orientation "v" 11 | (box 12 | :space-evenly false 13 | :class "place" 14 | (label :text "" :class "icon") 15 | (label :text {place.city} :halign "START" )) 16 | (label 17 | :class "feels" 18 | :text "feels like ${place.feels}°" 19 | :halign "START") 20 | ) 21 | (box 22 | :orientation "v" 23 | :hexpand true 24 | :halign "END" 25 | (label :class "temp" :text "${place.temp}°" :halign "END") 26 | (label :text {place.desc} :halign "END") 27 | ) 28 | ) 29 | (label 30 | :class "icon widget ${place.class}" 31 | :text {place.icon} 32 | :halign "center" 33 | ) 34 | )) 35 | -------------------------------------------------------------------------------- /dotfiles/eww/yuck/windows.yuck: -------------------------------------------------------------------------------- 1 | (include "./yuck/windows/desktop.yuck") 2 | (include "./yuck/windows/notifications.yuck") 3 | (include "./yuck/windows/osd.yuck") 4 | (include "./yuck/windows/powermenu.yuck") 5 | (include "./yuck/windows/datemenu.yuck") 6 | (include "./yuck/windows/dock.yuck") 7 | (include "./yuck/windows/quicksettings.yuck") 8 | (include "./yuck/windows/notifications.yuck") 9 | (include "./yuck/windows/noti_center.yuck") 10 | (include "./yuck/windows/media.yuck") 11 | (include "./yuck/windows/app_launcher.yuck") 12 | -------------------------------------------------------------------------------- /dotfiles/eww/yuck/windows/app_launcher.yuck: -------------------------------------------------------------------------------- 1 | (defwidget application [app] (button 2 | :class "app" 3 | :onclick "gtk-launch ${app.desktop}" 4 | :valign "start" 5 | (box 6 | :space-evenly false 7 | :class "app-content" 8 | (box 9 | :class "appicon" 10 | :style "background-image: url('${app.icon}')") 11 | (box 12 | :orientation "v" 13 | :space-evenly false 14 | :valign "center" 15 | (label 16 | :xalign 0 17 | :valign "center" 18 | :class "name" 19 | :text {app.name}) 20 | (label 21 | :xalign 0 22 | :class "description" 23 | :wrap true 24 | :limit-width 60 25 | :visible {app.description != 'null'} 26 | :text {app.description}) 27 | ) 28 | ) 29 | )) 30 | 31 | (defwidget app_separator [] (box 32 | :class "separator" 33 | :hexpand true 34 | )) 35 | 36 | (defwidget app_launcher [halign valign] (box 37 | :halign halign 38 | :valign valign 39 | :orientation "v" 40 | :class "app-launcher" 41 | :space-evenly false 42 | (box 43 | :class "search" 44 | :space-evenly false 45 | :hexpand true 46 | (label :text "" :class "icon") 47 | (input 48 | :class "input" 49 | :hexpand true 50 | :onchange "${EWW_CONFIG_DIR}/scripts/apps query {}" 51 | :onaccept "gtk-launch ${apps[0].desktop} && ${EWW_CONFIG_DIR}/scripts/launcher toggle_menu app_launcher")) 52 | (scroll 53 | :vscroll true 54 | :vexpand true 55 | :class "scroll" 56 | (box 57 | :orientation "v" 58 | :space-evenly false 59 | (for app in apps 60 | (box 61 | :space-evenly false 62 | :orientation "v" 63 | (app_separator) 64 | (application :app app))))) 65 | )) 66 | -------------------------------------------------------------------------------- /dotfiles/eww/yuck/windows/datemenu.yuck: -------------------------------------------------------------------------------- 1 | (defwidget datemenu [valign halign] (box 2 | :valign valign 3 | :halign halign 4 | :orientation "v" 5 | :class "datemenu" 6 | :space-evenly false 7 | (box 8 | :halign "center" 9 | :space-evenly false 10 | :class "clock" 11 | (label :text hour) 12 | (label :text ":") 13 | (label :text minutes)) 14 | (box 15 | :class "calendar-bin widget" 16 | (calendar)) 17 | (box 18 | :class "system" 19 | (sysprogress_cpu) 20 | (sysprogress_ram) 21 | (sysprogress_temp)) 22 | ;;(box :class "events widget" (events)) 23 | ;; (for player in {media.players} 24 | ;; (media_player :player player )) 25 | ;; (box :class "wallpaper module") 26 | )) 27 | -------------------------------------------------------------------------------- /dotfiles/eww/yuck/windows/desktop.yuck: -------------------------------------------------------------------------------- 1 | (defwidget desktop_clock [] (box 2 | :class "clock" 3 | :space-evenly false 4 | :orientation "v" 5 | :valign "center" 6 | :halign "center" 7 | (box 8 | :space-evenly false 9 | :class "time" 10 | (label :class "hour" :text hour) 11 | (label :class "separator" :text ":") 12 | (label :class "minutes" :text minutes) 13 | ) 14 | (label :class "date" :text date) 15 | )) 16 | 17 | (defvar desktop_reveal true) 18 | (defwidget desktop [] (box 19 | :class "desktop" 20 | ;; :style "background-image: url('${EWW_CONFIG_DIR}/assets/wallpapers/${workspaces.active}.jpeg')" 21 | ;;:style "background-image: url('${EWW_CONFIG_DIR}/assets/wallpapers/7.jpeg')" 22 | (desktop_clock) 23 | ;; (eventbox 24 | ;; ;; :onhoverlost "${EWW_CMD} update desktop_reveal=false" 25 | ;; ;; :onhover "${EWW_CMD} update desktop_reveal=true" 26 | ;; :halign "center" 27 | ;; :valign "center" 28 | ;; (box 29 | ;; :orientation "v" 30 | ;; (desktop_clock) 31 | ;; (revealer 32 | ;; :reveal desktop_reveal 33 | ;; :transition "slidedown" 34 | ;; :duration 300 35 | ;; (box 36 | ;; :class "system" 37 | ;; (sysprogress_cpu) 38 | ;; (sysprogress_ram) 39 | ;; (sysprogress_temp) 40 | ;; (sysprogress_bat) 41 | ;; ) 42 | ;; ) 43 | ;; ) 44 | ;; ) 45 | )) 46 | -------------------------------------------------------------------------------- /dotfiles/eww/yuck/windows/dock.yuck: -------------------------------------------------------------------------------- 1 | (defvar dock_hovered false) 2 | (defwidget dock_button [class tooltip onclick] (eventbox 3 | :class "laucher ${class}" 4 | :tooltip tooltip 5 | :onclick onclick 6 | :onhoverlost "${EWW_CMD} update dock_hovered=false" 7 | :onhover "${EWW_CMD} update dock_hovered=true" 8 | :valign "END" 9 | (box 10 | :orientation "v" 11 | :space-evenly false 12 | (box 13 | :class "icon" 14 | :valign "START" 15 | :vexpand true 16 | ) 17 | (box 18 | :class "indicator" 19 | :valign "END" 20 | :halign "CENTER" 21 | ) 22 | ) 23 | )) 24 | 25 | (defvar dock_reveal true) 26 | (defwidget dock [] (eventbox 27 | :class "dock" 28 | :onhover "${EWW_CMD} update dock_reveal=true" 29 | :onhoverlost "${EWW_CMD} update dock_reveal=false" 30 | (revealer 31 | :reveal {dock_reveal || workspaces.active_empty} 32 | :transition "slideup" 33 | :duration "300ms" 34 | (overlay 35 | (button 36 | :class "container ${dock_hovered ? "hovered" : ""}" 37 | ) 38 | (box 39 | :class "foot" 40 | :valign "END" 41 | ) 42 | (box 43 | :halign "CENTER" 44 | :valign "END" 45 | :spacing 20 46 | :space-evenly false 47 | (dock_button 48 | :class "firefox" 49 | :tooltip "Firefox" 50 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher firefox" 51 | ) 52 | (dock_button 53 | :class "terminal" 54 | :tooltip "Terminal" 55 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher terminal" 56 | ) 57 | (dock_button 58 | :class "file-manager" 59 | :tooltip "Nautilus" 60 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher file-manager" 61 | ) 62 | (dock_button 63 | :class "editor" 64 | :tooltip "Editor" 65 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher editor" 66 | ) 67 | (dock_button 68 | :class "spotify" 69 | :tooltip "Spotify" 70 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher spotify" 71 | ) 72 | (dock_button 73 | :class "caprine" 74 | :tooltip "Caprine" 75 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher caprine" 76 | ) 77 | (dock_button 78 | :class "bitwig" 79 | :tooltip "Bitwig Studio" 80 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher bitwig" 81 | ) 82 | (dock_button 83 | :class "battle" 84 | :tooltip "Battle.net" 85 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher battle" 86 | ) 87 | (dock_button 88 | :class "bottles" 89 | :tooltip "Bottles" 90 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher bottles" 91 | ) 92 | ) 93 | ) 94 | ) 95 | )) 96 | -------------------------------------------------------------------------------- /dotfiles/eww/yuck/windows/hbar.yuck: -------------------------------------------------------------------------------- 1 | (defwidget panel_clock [] (box :class "button-bin" 2 | (button 3 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu calendar" 4 | :class "button clock" 5 | (label :text panel_clock) 6 | ) 7 | )) 8 | 9 | (defwidget panel_media [] (box :class "button-bin" 10 | :visible {media.preferred != "null"} 11 | (eventbox 12 | :onclick "${EWW_CONFIG_DIR}/scripts/player ${media.preferred.name} play-pause" 13 | :onscroll "${EWW_CONFIG_DIR}/scripts/player ${media.preferred.name} {}" 14 | :class "button media" 15 | (box 16 | :space-evenly false 17 | (label :class "icon ${media.preferred.name}" :text {media.preferred.icon}) 18 | (label :text "${media.preferred.artist} - ${media.preferred.title}") 19 | ) 20 | ) 21 | )) 22 | 23 | (defwidget hbar [] (centerbox 24 | :class "hpanel ${workspaces.active_empty ? "floating" : ""}" 25 | (box 26 | :class "leftBar" 27 | :space-evenly false 28 | (panel_launcher) 29 | (panel_clock) 30 | (panel_workspaces :orientation "h") 31 | (panel_window :angle 0) 32 | ) 33 | (box 34 | :class "centerBar" 35 | (panel_media) 36 | ) 37 | (box 38 | :class "righBar" 39 | :space-evenly false 40 | :halign "end" 41 | (panel_colorpicker) 42 | (panel_system_indicators :orientation "h") 43 | (panel_powermenu) 44 | ) 45 | )) 46 | -------------------------------------------------------------------------------- /dotfiles/eww/yuck/windows/media.yuck: -------------------------------------------------------------------------------- 1 | (defwidget media [valign halign] (box 2 | :valign valign :halign halign 3 | :orientation "v" 4 | :class "media-window" 5 | :space-evenly false 6 | (for player in {media.players} 7 | (box 8 | :halign "start" 9 | (media_player :player player ))) 10 | )) 11 | -------------------------------------------------------------------------------- /dotfiles/eww/yuck/windows/noti_center.yuck: -------------------------------------------------------------------------------- 1 | (defwidget notifications_center [valign halign] (box 2 | :halign halign :valign valign 3 | :class "notification-center" 4 | :orientation "v" 5 | :space-evenly false 6 | (box 7 | :space-evenly false 8 | :class "title" 9 | (label :text "Notificaciones") 10 | (box :hexpand true) 11 | (button 12 | :onclick "${EWW_CONFIG_DIR}/scripts/notifications clear" 13 | (label :text "Clear "))) 14 | (scroll 15 | :class "notifications-list" 16 | :hscroll false :vscroll true 17 | :vexpand true 18 | (box 19 | :orientation "v" 20 | :space-evenly false 21 | (label :text {notifications} :visible false) 22 | (box 23 | :visible {arraylength(notifications.notifications) == 0} 24 | :space-evenly false 25 | :orientation "v" 26 | :valign "center" 27 | :halign "center" 28 | :vexpand true 29 | :class "placeholder" 30 | (label 31 | :class "icon" 32 | :text "󰂚") 33 | (label 34 | :text "Bandeja vacía")) 35 | (for n in {notifications.notifications} 36 | (notification 37 | :onclick "close" 38 | :notification n) 39 | ) 40 | ) 41 | ) 42 | )) 43 | -------------------------------------------------------------------------------- /dotfiles/eww/yuck/windows/notifications.yuck: -------------------------------------------------------------------------------- 1 | (defwidget notifications_popup [] (box 2 | :class "notifications-window-box" 3 | :orientation "v" 4 | :space-evenly false 5 | :vexpand true 6 | (label :text {notifications} :visible false) 7 | (for n in {notifications.popups} 8 | (notification 9 | :onclick "dismiss" 10 | :notification n) 11 | ) 12 | ) 13 | ) 14 | -------------------------------------------------------------------------------- /dotfiles/eww/yuck/windows/osd.yuck: -------------------------------------------------------------------------------- 1 | (defvar osd "{ \"icon\": \"󰕾\", \"value\": 0 }") 2 | (defwidget osd [] (eventbox 3 | :onclick "${EWW_CONFIG_DIR}/scripts/osd close" 4 | (box :class "osd-widget" 5 | (overlay 6 | (progress 7 | :class "scale" 8 | :value {osd.value} 9 | :valign "CENTER" 10 | :halign "CENTER" 11 | :orientation "v" 12 | :flipped true 13 | ) 14 | (label 15 | :text {osd.icon} 16 | :valign "END" 17 | :halign "CENTER" 18 | :class "icon" 19 | ) 20 | ) 21 | ) 22 | )) 23 | -------------------------------------------------------------------------------- /dotfiles/eww/yuck/windows/powermenu.yuck: -------------------------------------------------------------------------------- 1 | (defwidget powermenu_clock [] (box 2 | :orientation "v" 3 | :class "clock" 4 | :space-evenly false 5 | :halign "center" 6 | :valign "center" 7 | :hexpand true 8 | (box :class "hour" 9 | :space-evenly false 10 | (label :text hour) 11 | (label :text ":") 12 | (label :text minutes)) 13 | (label :class "date" :text date) 14 | (label :class "uptime" :text "uptime: ${uptime}") 15 | )) 16 | 17 | (defwidget powerbutton [action icon label] (box 18 | :orientation "v" 19 | :space-evenly false 20 | :tooltip label 21 | :class "button-bin" 22 | (button 23 | :class "button" 24 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu powermenu && ${action}" 25 | (box :class "icon ${icon}" ) 26 | ) 27 | (label :class "label" :text label) 28 | )) 29 | 30 | (defwidget powermenu [] (box 31 | :class "content" 32 | :halign "center" 33 | :valign "center" 34 | :orientation "v" 35 | :space-evenly false 36 | ;; (box :orientation "h" 37 | ;; :space-evenly false 38 | ;; (powermenu_clock)) 39 | (box 40 | :class "power-menu" 41 | :space-evenly false 42 | :orientation "h" 43 | (powerbutton :action "${EWW_CONFIG_DIR}/scripts/launcher screenlock" :icon "lock" :label "Lock Screen") 44 | (powerbutton :action "systemctl suspend" :icon "suspend" :label "Suspend") 45 | (powerbutton :action "systemctl reboot" :icon "reboot" :label "Restart") 46 | (powerbutton :action "loginctl kill-user $(whoami)" :icon "logout" :label "Log Out") 47 | (powerbutton :action "shutdown now" :icon "shutdown" :label "Shutdown") 48 | ) 49 | )) 50 | -------------------------------------------------------------------------------- /dotfiles/eww/yuck/windows/quicksettings.yuck: -------------------------------------------------------------------------------- 1 | (defwidget quick_toggles [] (box 2 | :class "widget toggles" 3 | (arrow_toggle_wifi) 4 | (arrow_toggle_bt) 5 | (arrow_toggle_power) 6 | )) 7 | 8 | (defwidget quick_toggles_grid [] (box 9 | :class "widget toggles" 10 | :orientation "h" 11 | (box 12 | :orientation "v" 13 | (small_toggle_dnd) 14 | (small_toggle_mute)) 15 | (box 16 | :orientation "v" 17 | (small_toggle_dark_mode) 18 | (small_toggle_night_light)) 19 | )) 20 | 21 | (defwidget syslevels [] (box 22 | :class "system" 23 | :orientation "v" 24 | (box :orientation "h" 25 | (sysprogress_cpu) 26 | (sysprogress_ram) 27 | ) 28 | (box :orientation "h" 29 | (sysprogress_temp) 30 | ) 31 | )) 32 | 33 | (defwidget quick_sys_actions [] (box 34 | :class "sys-actions" 35 | :space-evenly false 36 | (user 37 | :show_name true 38 | :class "widget") 39 | (box 40 | :class "sysactions widget" 41 | :orientation "v" 42 | :space-evenly false 43 | :hexpand true 44 | (box 45 | (button :onclick "${EWW_CONFIG_DIR}/scripts/launcher config" 46 | :class "settings" (label :text "")) 47 | (button :onclick "${EWW_CONFIG_DIR}/scripts/launcher screenlock" 48 | :class "lock" (label :text "")) 49 | (button :onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu powermenu" 50 | :class "power" (label :text "")) 51 | ) 52 | (label 53 | :valign "END" 54 | :vexpand true 55 | :class "uptime" 56 | :halign "END" 57 | :text "uptime: ${uptime}" 58 | ) 59 | ) 60 | )) 61 | 62 | (defwidget quicksettings [valign halign] (box 63 | :valign valign 64 | :halign halign 65 | :class "quick-settings" 66 | :orientation "v" 67 | :space-evenly false 68 | (quick_sys_actions) 69 | (quick_toggles) 70 | (box 71 | (quick_toggles_grid) 72 | (syslevels) 73 | ) 74 | (label :text media_positions :visible false) ;so it is active 75 | (for player in {media.players} 76 | (media_player :player player )) 77 | )) 78 | -------------------------------------------------------------------------------- /dotfiles/eww/yuck/windows/vbar.yuck: -------------------------------------------------------------------------------- 1 | (defwidget panel_clock [] (box :class "button-bin" 2 | (button 3 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu calendar" 4 | :class "button clock" 5 | (box 6 | :space-evenly false 7 | :orientation "v" 8 | (label :text hour :class "clock") 9 | (panel_separator :orientation "h" :dots "[1, 2]" :visible true) 10 | (label :text minutes :class "minutes") 11 | ) 12 | ) 13 | )) 14 | 15 | (defwidget panel_media [] (box 16 | :orientation "v" 17 | :class "media" 18 | :space-evenly false 19 | :visible {arraylength(media.players) > 0} 20 | (box 21 | :space-evenly false 22 | :orientation "v" 23 | :class "controls button-bin" 24 | :visible {media.preferred != "null"} 25 | (button 26 | :onclick "${EWW_CONFIG_DIR}/scripts/player ${media.preferred.name} prev" 27 | :class "icon prev ${media.preferred.canPrev ? "" : "inactive"}" 28 | :active {media.preferred.canPrev} 29 | (label :class "icon" :text "󰒮")) 30 | (button 31 | :onclick "${EWW_CONFIG_DIR}/scripts/player ${media.preferred.name} play-pause" 32 | :class "icon play-pause ${media.preferred.status}" 33 | :active {media.preferred.canPlay} 34 | (label :class "icon" :text "${media.preferred.status == "Playing" ? "󰏦" : "󰐍"}" )) 35 | (button 36 | :onclick "${EWW_CONFIG_DIR}/scripts/player ${media.preferred.name} next" 37 | :class "icon next ${media.preferred.canNext ? "" : "inactive"}" 38 | :active {media.preferred.canNext} 39 | (label :class "icon" :text "󰒭"))) 40 | (box :class "button-bin" 41 | (button 42 | :class "player" 43 | :onclick "${EWW_CONFIG_DIR}/scripts/launcher toggle_menu media" 44 | :onscroll "${EWW_CONFIG_DIR}/scripts/player ${media.preferred.name} {}" 45 | (label :class "icon ${media.preferred.name}" 46 | :text {media.preferred.icon})) 47 | ) 48 | )) 49 | 50 | (defwidget bar [] (centerbox 51 | :orientation "v" 52 | :class "vpanel ${workspaces.active_empty ? "floating" : ""}" 53 | (box 54 | :class "leftBar" 55 | :space-evenly false 56 | :valign "start" 57 | :orientation "v" 58 | (panel_launcher) 59 | (panel_workspaces :orientation "v") 60 | ) 61 | (box 62 | :class "centerBar" 63 | :orientation "v" 64 | :space-evenly false 65 | (panel_clock) 66 | (panel_separator :orientation "h" :dots "[1, 2, 3]" :visible {arraylength(media.players) > 0}) 67 | (panel_media) 68 | ) 69 | (box 70 | :class "rightBar" 71 | :space-evenly false 72 | :valign "end" 73 | :orientation "v" 74 | (panel_colorpicker) 75 | (panel_system_indicators :orientation "v") 76 | (panel_powermenu) 77 | ) 78 | )) 79 | -------------------------------------------------------------------------------- /dotfiles/hypr/hyprpaper.conf: -------------------------------------------------------------------------------- 1 | 2 | ipc = on 3 | 4 | preload = ~/Images/wallpaper.png 5 | wallpaper = DP-2,~/Images/wallpaper.png 6 | wallpaper = DP-3,~/Images/wallpaper.png 7 | -------------------------------------------------------------------------------- /dotfiles/neofetch/images/arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/neofetch/images/arch.png -------------------------------------------------------------------------------- /dotfiles/neofetch/images/arch_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/neofetch/images/arch_dark.png -------------------------------------------------------------------------------- /dotfiles/neofetch/images/artix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/neofetch/images/artix.png -------------------------------------------------------------------------------- /dotfiles/neofetch/images/bedrock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/neofetch/images/bedrock.png -------------------------------------------------------------------------------- /dotfiles/neofetch/images/gentoo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/neofetch/images/gentoo.png -------------------------------------------------------------------------------- /dotfiles/neofetch/images/gentoo_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/neofetch/images/gentoo_dark.png -------------------------------------------------------------------------------- /dotfiles/neofetch/images/lofi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/neofetch/images/lofi.png -------------------------------------------------------------------------------- /dotfiles/neofetch/images/loli.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/neofetch/images/loli.png -------------------------------------------------------------------------------- /dotfiles/neofetch/images/lolix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/neofetch/images/lolix.png -------------------------------------------------------------------------------- /dotfiles/neofetch/images/pink.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/neofetch/images/pink.jpg -------------------------------------------------------------------------------- /dotfiles/neofetch/images/sakura.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/neofetch/images/sakura.png -------------------------------------------------------------------------------- /dotfiles/neofetch/images/ubuntu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/neofetch/images/ubuntu.png -------------------------------------------------------------------------------- /dotfiles/neofetch/images/ubuntu_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/neofetch/images/ubuntu_dark.png -------------------------------------------------------------------------------- /dotfiles/neofetch/images/void.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/neofetch/images/void.png -------------------------------------------------------------------------------- /dotfiles/neofetch/images/void_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/neofetch/images/void_dark.png -------------------------------------------------------------------------------- /dotfiles/scripts/autolock: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | pkill xautolock 4 | xautolock -time 10 -locker "swaylock -i ~/Images/wallpaper.png --effect-blur 10x3 --indicator --clock" -notify 30 -notifier "dunstify 'Locking screen in 30 seconds'" -killtime 5 5 | -------------------------------------------------------------------------------- /dotfiles/scripts/offmonitor: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | swayidle -w timeout 900 'hyprctl dispatch dpms off' resume 'hyprctl dispatch dpms on' > /dev/null 4 | -------------------------------------------------------------------------------- /dotfiles/scripts/volume: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | VOLUME=$(pamixer --get-volume) 4 | 5 | function icon { 6 | if [[ $VOLUME -ge 66 ]]; then echo '󰕾' 7 | elif [[ $VOLUME -ge 33 ]]; then echo '󰖀' 8 | elif [[ $VOLUME -ge 1 ]]; then echo '󰕿' 9 | else echo '󰝟' 10 | fi 11 | } 12 | 13 | function level { 14 | echo $(pamixer --get-volume) 15 | } 16 | 17 | function update { 18 | ~/.config/eww/scripts/osd $(icon) $(level) 19 | } 20 | 21 | down() { 22 | pamixer -d 5 23 | update 24 | } 25 | 26 | up() { 27 | pamixer -i 5 28 | update 29 | } 30 | 31 | playpause() { 32 | playerctl play-pause 33 | } 34 | 35 | mute() { 36 | muted="$(pamixer --get-mute)" 37 | if $muted; then 38 | pamixer -u 39 | else 40 | pamixer -m 41 | fi 42 | } 43 | 44 | case "$1" in 45 | up) up;; 46 | down) down;; 47 | mute) mute;; 48 | playpause) playpause;; 49 | esac 50 | -------------------------------------------------------------------------------- /dotfiles/swappy/config: -------------------------------------------------------------------------------- 1 | [Default] 2 | save_dir=$HOME/Images 3 | save_filename_format=swappy-%Y%m%d-%H%M%S.png 4 | show_panel=true 5 | line_size=3 6 | text_size=20 7 | text_font=sans-serif 8 | paint_mode=brush 9 | early_exit=false 10 | fill_shape=false 11 | -------------------------------------------------------------------------------- /dotfiles/swaylock/config: -------------------------------------------------------------------------------- 1 | color=282a36 2 | inside-color=1F202A 3 | line-color=1F202A 4 | ring-color=93F8F9 5 | text-color=f8f8f2 6 | 7 | layout-bg-color=1F202A 8 | layout-text-color=f8f8f2 9 | 10 | inside-clear-color=6272a4 11 | line-clear-color=1F202A 12 | ring-clear-color=6272a4 13 | text-clear-color=1F202A 14 | 15 | inside-ver-color=bd93f9 16 | line-ver-color=1F202A 17 | ring-ver-color=bd93f9 18 | text-ver-color=1F202A 19 | 20 | inside-wrong-color=ff5555 21 | line-wrong-color=1F202A 22 | ring-wrong-color=ff5555 23 | text-wrong-color=1F202A 24 | 25 | bs-hl-color=ff5555 26 | key-hl-color=50fa7b 27 | 28 | text-caps-lock-color=f8f8f2 29 | -------------------------------------------------------------------------------- /dotfiles/wallpaper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/f3l3p1n0/pinkhypr/cc0ed0973df4d3f3f02db0b94f703041d8435a51/dotfiles/wallpaper.png -------------------------------------------------------------------------------- /dotfiles/waybar/config.jsonc: -------------------------------------------------------------------------------- 1 | { 2 | "position": "top", 3 | "layer": "top", 4 | "output": "DP-2", 5 | "height": 16, 6 | "margin-top": 0, 7 | "margin-bottom": 0, 8 | "margin-left": 0, 9 | "margin-right": 0, 10 | "modules-left": ["custom/launcher", "custom/notifications", "custom/playerctl", "custom/playerlabel"], 11 | "modules-center": ["hyprland/workspaces"], 12 | "modules-right": ["tray", "pulseaudio", "clock"], 13 | 14 | // Modules configuration 15 | 16 | "clock": { 17 | "format": " {:%H:%M}", 18 | "tooltip": "true", 19 | "format-alt": " {:%d/%m}", 20 | "on-click-right": "bash ~/.config/eww/scripts/launcher toggle_menu calendar" 21 | }, 22 | 23 | "custom/notifications": { 24 | "format": " 󰂚 ", 25 | "on-click": "bash ~/.config/eww/scripts/launcher toggle_menu quicksettings" 26 | }, 27 | 28 | "hyprland/workspaces": { 29 | "active-only": false, 30 | "all-outputs": true, 31 | "disable-scroll": false, 32 | "on-scroll-up": "hyprctl dispatch workspace e-1", 33 | "on-scroll-down": "hyprctl dispatch workspace e+1", 34 | "format": "{icon}", 35 | "on-click": "activate", 36 | "format-icons": { 37 | "urgent": "", 38 | "active": "", 39 | "default": "", 40 | "sort-by-number": true 41 | }, 42 | }, 43 | 44 | "custom/playerctl": { 45 | "format": "{icon}", 46 | "return-type": "json", 47 | "max-length": 64, 48 | "exec": "playerctl -a metadata --format '{\"text\": \"{{artist}} - {{markup_escape(title)}}\", \"tooltip\": \"{{playerName}} : {{markup_escape(title)}}\", \"alt\": \"{{status}}\", \"class\": \"{{status}}\"}' -F", 49 | "on-click": "playerctl play-pause", 50 | "format-icons": { 51 | "Playing": "󰏥 ", 52 | "Paused": "󰐌 " 53 | }, 54 | }, 55 | 56 | "custom/playerlabel": { 57 | "format": "{}", 58 | "return-type": "json", 59 | "max-length": 48, 60 | "exec": "playerctl -a metadata --format '{\"text\": \"{{artist}} - {{markup_escape(title)}}\", \"tooltip\": \"{{playerName}} : {{markup_escape(title)}}\", \"alt\": \"{{status}}\", \"class\": \"{{status}}\"}' -F", 61 | "on-click": "playerctl play-pause", 62 | "format-icons": { 63 | "Playing": "󰏥 ", 64 | "Paused": "󰐌 " 65 | }, 66 | }, 67 | 68 | "battery": { 69 | "states": { 70 | "good": 95, 71 | "warning": 30, 72 | "critical": 15 73 | }, 74 | "format":"{icon} {capacity}%", 75 | "format-charging": "{capacity}% ", 76 | "format-plugged": "{capacity}% ", 77 | "format-alt": "{icon} {time}", 78 | // "format-good": "", // An empty format will hide the module 79 | // "format-full": "", 80 | "format-icons": ["", "", "", "", ""] 81 | }, 82 | 83 | "memory": { 84 | "format": "󰍛 {}%", 85 | "format-alt": "󰍛 {used}/{total} GiB", 86 | "interval": 5 87 | }, 88 | 89 | "cpu": { 90 | "format": "󰻠 {usage}%", 91 | "format-alt": "󰻠 {avg_frequency} GHz", 92 | "interval": 5 93 | }, 94 | 95 | "disk": { 96 | "format": "󰋊 {}%", 97 | "format-alt": "󰋊 {used}/{total} GiB", 98 | "interval": 5, 99 | "path": "/mnt/Datos" 100 | }, 101 | 102 | "network": { 103 | "format-wifi": "󰤨", 104 | "format-ethernet": " {ifname}: Aesthetic", 105 | "format-linked": " {ifname} (No IP)", 106 | "format-disconnected": "󰤭", 107 | "format-alt": " {ifname}: {ipaddr}/{cidr}", 108 | "tooltip-format": "{essid}", 109 | "on-click-right": "nm-connection-editor" 110 | }, 111 | 112 | "tray": { 113 | "icon-size": 16, 114 | "spacing": 5 115 | }, 116 | 117 | "backlight": { 118 | // "device": "acpi_video1", 119 | "format": "{icon} {percent}%", 120 | "format-icons": ["", "", "", "", "", "", "", "", ""], 121 | // "on-scroll-up":, 122 | // "on-scroll-down":, 123 | }, 124 | 125 | "pulseaudio": { 126 | "format": "{icon} {volume}%", 127 | "format-muted": "󰝟 Mute", 128 | "format-icons": { 129 | "default": ["󰕿", "󰖀", "󰕾"] 130 | }, 131 | "on-click": "bash ~/.config/scripts/volume mute", 132 | "on-scroll-up": "bash ~/.config/scripts/volume up", 133 | "on-scroll-down": "bash ~/.config/scripts/volume down", 134 | "scroll-step": 5, 135 | "on-click-right": "pavucontrol" 136 | }, 137 | "custom/randwall": { 138 | "format": "󰏘", 139 | "on-click": "bash $HOME/.config/hypr/randwall.sh", 140 | "on-click-right": "bash $HOME/.config/hypr/wall.sh" 141 | }, 142 | "custom/launcher": { 143 | "format": "󰣇 ", 144 | "on-click": "bash ~/.config/eww/scripts/launcher toggle_menu powermenu" 145 | }, 146 | 147 | "custom/wf-recorder": { 148 | "format": "{}", 149 | "interval": "once", 150 | "exec": "echo ''", 151 | "tooltip": "false", 152 | "exec-if": "pgrep 'wf-recorder'", 153 | "on-click": "exec ./scripts/wlrecord.sh", 154 | "signal": 8 155 | }, 156 | 157 | "custom/hyprpicker": { 158 | "format": "󰈋", 159 | "on-click": "hyprpicker -a -f hex", 160 | "on-click-right": "hyprpicker -a -f rgb" 161 | }, 162 | } 163 | } 164 | -------------------------------------------------------------------------------- /dotfiles/waybar/scripts/mediaplayer.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | from gi.repository import Playerctl, GLib 3 | import argparse 4 | import logging 5 | import sys 6 | import signal 7 | import gi 8 | import json 9 | gi.require_version('Playerctl', '2.0') 10 | 11 | logger = logging.getLogger(__name__) 12 | 13 | 14 | def write_output(text, player, mode): 15 | logger.info('Writing output') 16 | 17 | if mode == 'paused': 18 | output = {'text': text, 19 | 'class': 'paused', 20 | 'alt': player.props.player_name} 21 | else: 22 | output = {'text': text, 23 | 'class': 'playing', 24 | 'alt': player.props.player_name} 25 | 26 | sys.stdout.write(json.dumps(output) + '\n') 27 | sys.stdout.flush() 28 | 29 | 30 | def on_play(player, status, manager): 31 | logger.info('Received new playback status') 32 | on_metadata(player, player.props.metadata, manager) 33 | 34 | 35 | def on_metadata(player, metadata, manager): 36 | logger.info('Received new metadata') 37 | track_info = '' 38 | 39 | if player.props.player_name == 'spotify' and \ 40 | 'mpris:trackid' in metadata.keys() and \ 41 | ':ad:' in player.props.metadata['mpris:trackid']: 42 | track_info = 'AD PLAYING' 43 | elif player.get_artist() != '' and player.get_title() != '': 44 | track_info = '{title}'.format(title=player.get_title()) 45 | else: 46 | track_info = player.get_title() 47 | 48 | if player.props.status != 'Playing' and track_info: 49 | write_output(track_info, player, 'paused') 50 | else: 51 | write_output(track_info, player, 'playing') 52 | 53 | 54 | def on_player_appeared(manager, player, selected_player=None): 55 | if player is not None and (selected_player is None or player.name == selected_player): 56 | init_player(manager, player) 57 | else: 58 | logger.debug( 59 | "New player appeared, but it's not the selected player, skipping") 60 | 61 | 62 | def on_player_vanished(manager, player): 63 | logger.info('Player has vanished') 64 | sys.stdout.write('\n') 65 | sys.stdout.flush() 66 | 67 | 68 | def init_player(manager, name): 69 | logger.debug('Initialize player: {player}'.format(player=name.name)) 70 | player = Playerctl.Player.new_from_name(name) 71 | player.connect('playback-status', on_play, manager) 72 | player.connect('metadata', on_metadata, manager) 73 | manager.manage_player(player) 74 | on_metadata(player, player.props.metadata, manager) 75 | 76 | 77 | def signal_handler(sig, frame): 78 | logger.debug('Received signal to stop, exiting') 79 | sys.stdout.write('\n') 80 | sys.stdout.flush() 81 | # loop.quit() 82 | sys.exit(0) 83 | 84 | 85 | def parse_arguments(): 86 | parser = argparse.ArgumentParser() 87 | 88 | # Increase verbosity with every occurrence of -v 89 | parser.add_argument('-v', '--verbose', action='count', default=0) 90 | 91 | # Define for which player we're listening 92 | parser.add_argument('--player') 93 | 94 | return parser.parse_args() 95 | 96 | 97 | def main(): 98 | arguments = parse_arguments() 99 | 100 | # Initialize logging 101 | logging.basicConfig(stream=sys.stderr, level=logging.DEBUG, 102 | format='%(name)s %(levelname)s %(message)s') 103 | 104 | # Logging is set by default to WARN and higher. 105 | # With every occurrence of -v it's lowered by one 106 | logger.setLevel(max((3 - arguments.verbose) * 10, 0)) 107 | 108 | # Log the sent command line arguments 109 | logger.debug('Arguments received {}'.format(vars(arguments))) 110 | 111 | manager = Playerctl.PlayerManager() 112 | loop = GLib.MainLoop() 113 | 114 | manager.connect('name-appeared', 115 | lambda *args: on_player_appeared(*args, arguments.player)) 116 | manager.connect('player-vanished', on_player_vanished) 117 | 118 | signal.signal(signal.SIGINT, signal_handler) 119 | signal.signal(signal.SIGTERM, signal_handler) 120 | signal.signal(signal.SIGPIPE, signal.SIG_DFL) 121 | 122 | for player in manager.props.player_names: 123 | if arguments.player is not None and arguments.player != player.name: 124 | logger.debug('{player} is not the filtered player, skipping it' 125 | .format(player=player.name) 126 | ) 127 | continue 128 | 129 | init_player(manager, player) 130 | 131 | loop.run() 132 | 133 | 134 | if __name__ == '__main__': 135 | main() 136 | -------------------------------------------------------------------------------- /dotfiles/waybar/scripts/playerctl/playerctl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | playerctl_status=$(playerctl status 2>/dev/null) 4 | 5 | if [[ $playerctl_status == "Playing" ]]; then 6 | title=$(playerctl metadata title 2>/dev/null) 7 | echo '{"text":"󰎈 󰏤","class":"playing","title":"$title"}' 8 | elif [[ $playerctl_status == "Paused" ]]; then 9 | title=$(playerctl metadata title 2>/dev/null) 10 | echo '{"text":"󰎈 󰐊","class":"paused","title":"$title"}' 11 | else 12 | echo '{"text":""}' 13 | fi 14 | -------------------------------------------------------------------------------- /dotfiles/waybar/scripts/wlrecord.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | active=$(pacmd list-sources | awk 'c&&!--c;/* index*/{c=1}' | awk '{gsub(/<|>/,"",$0); print $NF}') 4 | 5 | filename=$(date +%F_%T.mkv) 6 | 7 | echo active sink: $active 8 | echo $filename 9 | 10 | if [ -z $(pgrep wf-recorder) ]; 11 | then notify-send "Recording Started ($active)" 12 | if [ "$1" == "-s" ] 13 | then wf-recorder -f $HOME/Videos/wf-recorder/$filename -a "$active" -g "$(slurp -c "#FFFFFF")" >/dev/null 2>&1 & 14 | sleep 2 15 | while [ ! -z $(pgrep -x slurp) ]; do wait; done 16 | pkill -RTMIN+8 waybar 17 | else if [ "$1" == "-w" ] 18 | then wf-recorder -f $HOME/Videos/wf-recorder/$filename -a "$active" -g "$(swaymsg -t get_tree | jq -r '.. | select(.pid? and .visible?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"' | slurp -c "#FFFFFF" )" >/dev/null 2>&1 & 19 | sleep 2 20 | while [ ! -z $(pgrep -x slurp) ]; do wait; done 21 | pkill -RTMIN+8 waybar 22 | else 23 | wf-recorder -f $HOME/Videos/wf-recorder/$filename -a "$active" >/dev/null 2>&1 & 24 | pkill -RTMIN+8 waybar 25 | fi 26 | fi 27 | else 28 | killall -s SIGINT wf-recorder 29 | notify-send "Recording Complete" 30 | while [ ! -z $(pgrep -x wf-recorder) ]; do wait; done 31 | pkill -RTMIN+8 waybar 32 | name="$(zenity --entry --text "enter a filename")" 33 | perl-rename "s/\.(mkv|mp4)$/ $name $&/" $(ls -d $HOME/Videos/wf-recorder/* -t | head -n1) 34 | fi 35 | 36 | -------------------------------------------------------------------------------- /dotfiles/waybar/style.css: -------------------------------------------------------------------------------- 1 | * { 2 | border: none; 3 | border-radius: 0px; 4 | /*font-family: VictorMono, Iosevka Nerd Font, Noto Sans CJK;*/ 5 | font-family: "Maple Mono SC NF"; 6 | font-size: 12px; 7 | font-style: normal; 8 | min-height: 0; 9 | } 10 | 11 | window#waybar { 12 | background: rgba(16, 18, 19, 0.4); 13 | border-bottom: 1px solid #0c0e0f; 14 | color: #cdd6f4 15 | } 16 | 17 | #workspaces { 18 | background: #0c0e0f; 19 | margin: 5px 5px; 20 | padding: 8px 5px; 21 | border-radius: 16px; 22 | border: solid 0px #cdd6f4; 23 | font-weight: normal; 24 | font-style: normal; 25 | } 26 | #workspaces button { 27 | padding: 0px 5px; 28 | margin: 0px 3px; 29 | border-radius: 16px; 30 | color: #2f354a; 31 | background-color: #2f354a; 32 | transition: all 0.3s ease-in-out; 33 | } 34 | 35 | #workspaces button.active { 36 | color: #cdd6f4; 37 | background-color: #cdd6f4; 38 | border-radius: 16px; 39 | min-width: 50px; 40 | background-size: 400% 400%; 41 | transition: all 0.3s ease-in-out; 42 | } 43 | 44 | #workspaces button:hover { 45 | background-color: #cdd6f4; 46 | color: #cdd6f4; 47 | border-radius: 16px; 48 | min-width: 50px; 49 | background-size: 400% 400%; 50 | } 51 | 52 | #custom-date, #clock, #battery, #pulseaudio, #network, #custom-randwall, #custom-launcher { 53 | background: transparent; 54 | padding: 5px 5px 5px 5px; 55 | margin: 5px 5px 5px 5px; 56 | border-radius: 8px; 57 | border: solid 0px #f4d9e1; 58 | } 59 | 60 | #custom-date { 61 | color: #D3869B; 62 | } 63 | 64 | #custom-power { 65 | color: #24283b; 66 | background-color: #db4b4b; 67 | border-radius: 5px; 68 | margin-right: 10px; 69 | margin-top: 5px; 70 | margin-bottom: 5px; 71 | margin-left: 0px; 72 | padding: 5px 10px; 73 | } 74 | 75 | #tray { 76 | background: #0c0e0f; 77 | margin: 5px 5px 5px 5px; 78 | border-radius: 16px; 79 | padding: 0px 5px; 80 | /*border-right: solid 1px #282738;*/ 81 | } 82 | 83 | #clock { 84 | color: #cdd6f4; 85 | background-color: #0c0e0f; 86 | border-radius: 0px 0px 0px 24px; 87 | padding-left: 13px; 88 | padding-right: 15px; 89 | margin-right: 0px; 90 | margin-left: 0px; 91 | margin-top: 0px; 92 | margin-bottom: 0px; 93 | font-weight: bold; 94 | /*border-left: solid 1px #282738;*/ 95 | } 96 | 97 | #battery { 98 | color: #9ece6a; 99 | } 100 | 101 | #battery.charging { 102 | color: #9ece6a; 103 | } 104 | 105 | #battery.warning:not(.charging) { 106 | background-color: #f7768e; 107 | color: #24283b; 108 | border-radius: 5px 5px 5px 5px; 109 | } 110 | 111 | #backlight { 112 | background-color: #24283b; 113 | color: #db4b4b; 114 | border-radius: 0px 0px 0px 0px; 115 | margin: 5px; 116 | margin-left: 0px; 117 | margin-right: 0px; 118 | padding: 0px 0px; 119 | } 120 | 121 | #network { 122 | color: #cdd6f4; 123 | border-radius: 8px; 124 | margin-right: 5px; 125 | } 126 | 127 | #pulseaudio { 128 | color: #cdd6f4; 129 | margin-left: 0px; 130 | font-weight: bold; 131 | } 132 | 133 | #pulseaudio.muted { 134 | color: red; 135 | margin-left: 0px; 136 | font-weight: bold; 137 | } 138 | 139 | #custom-randwall { 140 | color: #cdd6f4; 141 | border-radius: 8px; 142 | margin-right: 0px; 143 | } 144 | 145 | #custom-launcher { 146 | color: #cdd6f4; 147 | background-color: #0c0e0f; 148 | border-radius: 0px 24px 0px 0px; 149 | margin: 0px 0px 0px 0px; 150 | padding: 0 13px 0 13px; 151 | /*border-right: solid 1px #282738;*/ 152 | font-size: 28px; 153 | } 154 | 155 | #custom-launcher button:hover { 156 | background-color: #FB4934; 157 | color: transparent; 158 | border-radius: 8px; 159 | margin-right: -5px; 160 | margin-left: 10px; 161 | } 162 | 163 | #custom-playerctl { 164 | background: #0c0e0f; 165 | padding: 1px 4px 1px 8px; 166 | border-radius: 25px; 167 | /*border-left: solid 1px #282738;*/ 168 | /*border-right: solid 1px #282738;*/ 169 | margin: 10px 3px 8px 10px; 170 | font-weight: normal; 171 | font-style: normal; 172 | font-size: 16px; 173 | } 174 | 175 | #custom-playerlabel { 176 | background: transparent; 177 | padding-left: 10px; 178 | padding-right: 5px; 179 | /*border-left: solid 1px #282738;*/ 180 | /*border-right: solid 1px #282738;*/ 181 | margin-top: 6px; 182 | margin-bottom: 3px; 183 | font-weight: normal; 184 | font-style: normal; 185 | } 186 | 187 | #window { 188 | background: #0c0e0f; 189 | padding-left: 15px; 190 | padding-right: 15px; 191 | border-radius: 16px; 192 | /*border-left: solid 1px #282738;*/ 193 | /*border-right: solid 1px #282738;*/ 194 | margin-top: 5px; 195 | margin-bottom: 5px; 196 | font-weight: normal; 197 | font-style: normal; 198 | } 199 | 200 | #custom-wf-recorder { 201 | padding: 0 20px; 202 | color: #e5809e; 203 | background-color: #1E1E2E; 204 | } 205 | 206 | #cpu { 207 | background-color: #282828; 208 | /*color: #FABD2D;*/ 209 | border-radius: 16px; 210 | margin: 5px; 211 | margin-left: 5px; 212 | margin-right: 5px; 213 | padding: 0px 10px 0px 10px; 214 | font-weight: bold; 215 | } 216 | 217 | #memory { 218 | background-color: #282828; 219 | /*color: #83A598;*/ 220 | border-radius: 16px; 221 | margin: 5px; 222 | margin-left: 5px; 223 | margin-right: 5px; 224 | padding: 0px 10px 0px 10px; 225 | font-weight: bold; 226 | } 227 | 228 | #disk { 229 | background-color: #282828; 230 | /*color: #8EC07C;*/ 231 | border-radius: 16px; 232 | margin: 5px; 233 | margin-left: 5px; 234 | margin-right: 5px; 235 | padding: 0px 10px 0px 10px; 236 | font-weight: bold; 237 | } 238 | 239 | #tray { 240 | margin-top: .5em; 241 | padding: 0px 9px 0px 9px; 242 | } 243 | 244 | #custom-hyprpicker { 245 | background-color: #0c0e0f; 246 | /*color: #8EC07C;*/ 247 | border-radius: 16px; 248 | margin: 5px; 249 | margin-left: 5px; 250 | margin-right: 5px; 251 | padding: 0px 11px 0px 9px; 252 | font-weight: bold; 253 | } 254 | 255 | #custom-notifications { 256 | margin-top: 3px; 257 | margin-left: 10px; 258 | color: #cdd6f4; 259 | } 260 | 261 | 262 | -------------------------------------------------------------------------------- /dotfiles/wezterm/colors/rose-pine-dawn.toml: -------------------------------------------------------------------------------- 1 | # rose-pine-dawn 2 | [colors] 3 | foreground = "#575279" 4 | background = "#faf4ed" 5 | cursor_bg = "#9893a5" 6 | cursor_border = "#9893a5" 7 | cursor_fg = "#575279" 8 | selection_bg = "#f2e9e1" 9 | selection_fg = "#575279" 10 | 11 | ansi = ["#f2e9de", "#b4637a", "#286983", "#ea9d34", "#56949f", "#907aa9", "#d7827e", "#575279"] 12 | brights = ["#6e6a86", "#b4637a", "#286983", "#ea9d34", "#56949f", "#907aa9", "#d7827e", "#575279"] 13 | -------------------------------------------------------------------------------- /dotfiles/wezterm/colors/rose-pine-moon.toml: -------------------------------------------------------------------------------- 1 | # rose-pine-moon 2 | [colors] 3 | foreground = "#e0def4" 4 | background = "#232136" 5 | cursor_bg = "#59546d" 6 | cursor_border = "#59546d" 7 | cursor_fg = "#e0def4" 8 | selection_bg = "#393552" 9 | selection_fg = "#817c9c" 10 | 11 | ansi = ["#393552", "#eb6f92", "#3e8fb0", "#f6c177", "#9ccfd8", "#c4a7e7", "#ebbcba", "#e0def4"] 12 | brights = ["817c9c", "#eb6f92", "#3e8fb0", "#f6c177", "#9ccfd8", "#c4a7e7", "#ebbcba", "#e0def4"] 13 | -------------------------------------------------------------------------------- /dotfiles/wezterm/colors/rose-pine.toml: -------------------------------------------------------------------------------- 1 | # rose-pine 2 | [colors] 3 | foreground = "#e0def4" 4 | background = "#191724" 5 | cursor_bg = "#524f67" 6 | cursor_border = "#524f67" 7 | cursor_fg = "#e0def4" 8 | selection_bg = "#2a283e" 9 | selection_fg = "#e0def4" 10 | 11 | ansi = ["#26233a", "#eb6f92", "#31748f", "#f6c177", "#9ccfd8", "#c4a7e7", "#ebbcba", "#e0def4"] 12 | brights = ["#6e6a86", "#eb6f92", "#31748f", "#f6c177", "#9ccfd8", "#c4a7e7", "#ebbcba", "#e0def4"] 13 | -------------------------------------------------------------------------------- /dotfiles/wezterm/lua/rose-pine-dawn.lua: -------------------------------------------------------------------------------- 1 | -- rose-pine-dawn 2 | 3 | local M = {} 4 | 5 | local palette = { 6 | base = '#faf4ed', 7 | overlay = '#f2e9e1', 8 | muted = '#9893a5', 9 | text = '#575279', 10 | } 11 | 12 | local active_tab = { 13 | bg_color = palette.overlay, 14 | fg_color = palette.text, 15 | } 16 | 17 | local inactive_tab = { 18 | bg_color = palette.base, 19 | fg_color = palette.muted, 20 | } 21 | 22 | function M.colors() 23 | return { 24 | tab_bar = { 25 | background = palette.base, 26 | active_tab = active_tab, 27 | inactive_tab = inactive_tab, 28 | inactive_tab_hover = active_tab, 29 | new_tab = inactive_tab, 30 | new_tab_hover = active_tab, 31 | inactive_tab_edge = palette.muted, -- (Fancy tab bar only) 32 | }, 33 | } 34 | end 35 | 36 | function M.window_frame() -- (Fancy tab bar only) 37 | return { 38 | active_titlebar_bg = palette.base, 39 | inactive_titlebar_bg = palette.base, 40 | } 41 | end 42 | 43 | return M 44 | -------------------------------------------------------------------------------- /dotfiles/wezterm/lua/rose-pine-moon.lua: -------------------------------------------------------------------------------- 1 | -- rose-pine-moon 2 | 3 | local M = {} 4 | 5 | local palette = { 6 | base = '#232136', 7 | overlay = '#393552', 8 | muted = '#6e6a86', 9 | text = '#e0def4', 10 | } 11 | 12 | local active_tab = { 13 | bg_color = palette.overlay, 14 | fg_color = palette.text, 15 | } 16 | 17 | local inactive_tab = { 18 | bg_color = palette.base, 19 | fg_color = palette.muted, 20 | } 21 | 22 | function M.colors() 23 | return { 24 | tab_bar = { 25 | background = palette.base, 26 | active_tab = active_tab, 27 | inactive_tab = inactive_tab, 28 | inactive_tab_hover = active_tab, 29 | new_tab = inactive_tab, 30 | new_tab_hover = active_tab, 31 | inactive_tab_edge = palette.muted, -- (Fancy tab bar only) 32 | }, 33 | } 34 | end 35 | 36 | function M.window_frame() -- (Fancy tab bar only) 37 | return { 38 | active_titlebar_bg = palette.base, 39 | inactive_titlebar_bg = palette.base, 40 | } 41 | end 42 | 43 | return M 44 | -------------------------------------------------------------------------------- /dotfiles/wezterm/lua/rose-pine.lua: -------------------------------------------------------------------------------- 1 | -- rose-pine 2 | 3 | local M = {} 4 | 5 | local palette = { 6 | base = '#191724', 7 | overlay = '#26233a', 8 | muted = '#6e6a86', 9 | text = '#e0def4', 10 | } 11 | 12 | local active_tab = { 13 | bg_color = palette.overlay, 14 | fg_color = palette.text, 15 | } 16 | 17 | local inactive_tab = { 18 | bg_color = palette.base, 19 | fg_color = palette.muted, 20 | } 21 | 22 | function M.colors() 23 | return { 24 | tab_bar = { 25 | background = palette.base, 26 | active_tab = active_tab, 27 | inactive_tab = inactive_tab, 28 | inactive_tab_hover = active_tab, 29 | new_tab = inactive_tab, 30 | new_tab_hover = active_tab, 31 | inactive_tab_edge = palette.muted, -- (Fancy tab bar only) 32 | }, 33 | } 34 | end 35 | 36 | function M.window_frame() -- (Fancy tab bar only) 37 | return { 38 | active_titlebar_bg = palette.base, 39 | inactive_titlebar_bg = palette.base, 40 | } 41 | end 42 | 43 | return M 44 | -------------------------------------------------------------------------------- /dotfiles/wezterm/wezterm.lua: -------------------------------------------------------------------------------- 1 | local wezterm = require("wezterm") 2 | 3 | local function font_with_fallback(name, params) 4 | local names = { name, "Apple Color Emoji", "azuki_font" } 5 | return wezterm.font_with_fallback(names, params) 6 | end 7 | 8 | local font_name = "Maple Mono SC NF" 9 | 10 | return { 11 | -- OpenGL for GPU acceleration, Software for CPU 12 | front_end = "OpenGL", 13 | 14 | color_scheme = 'Catppuccin Mocha', 15 | 16 | -- Font config 17 | font = font_with_fallback(font_name), 18 | font_rules = { 19 | { 20 | italic = true, 21 | font = font_with_fallback(font_name, { italic = true }), 22 | }, 23 | { 24 | italic = false, 25 | font = font_with_fallback(font_name, { bold = true }), 26 | }, 27 | { 28 | intensity = "Bold", 29 | font = font_with_fallback(font_name, { bold = true }), 30 | }, 31 | }, 32 | warn_about_missing_glyphs = false, 33 | font_size = 11, 34 | line_height = 1.0, 35 | dpi = 96.0, 36 | 37 | -- Cursor style 38 | default_cursor_style = "BlinkingUnderline", 39 | 40 | -- X11 41 | enable_wayland = true, 42 | 43 | -- Keybinds 44 | disable_default_key_bindings = true, 45 | keys = { 46 | { 47 | key = [[\]], 48 | mods = "CTRL|ALT", 49 | action = wezterm.action({ 50 | SplitHorizontal = { domain = "CurrentPaneDomain" }, 51 | }), 52 | }, 53 | { 54 | key = [[\]], 55 | mods = "CTRL", 56 | action = wezterm.action({ 57 | SplitVertical = { domain = "CurrentPaneDomain" }, 58 | }), 59 | }, 60 | { 61 | key = "q", 62 | mods = "CTRL", 63 | action = wezterm.action({ CloseCurrentPane = { confirm = false } }), 64 | }, 65 | { 66 | key = "h", 67 | mods = "CTRL|SHIFT", 68 | action = wezterm.action({ ActivatePaneDirection = "Left" }), 69 | }, 70 | { 71 | key = "l", 72 | mods = "CTRL|SHIFT", 73 | action = wezterm.action({ ActivatePaneDirection = "Right" }), 74 | }, 75 | { 76 | key = "k", 77 | mods = "CTRL|SHIFT", 78 | action = wezterm.action({ ActivatePaneDirection = "Up" }), 79 | }, 80 | { 81 | key = "j", 82 | mods = "CTRL|SHIFT", 83 | action = wezterm.action({ ActivatePaneDirection = "Down" }), 84 | }, 85 | { 86 | key = "h", 87 | mods = "CTRL|SHIFT|ALT", 88 | action = wezterm.action({ AdjustPaneSize = { "Left", 1 } }), 89 | }, 90 | { 91 | key = "l", 92 | mods = "CTRL|SHIFT|ALT", 93 | action = wezterm.action({ AdjustPaneSize = { "Right", 1 } }), 94 | }, 95 | { 96 | key = "k", 97 | mods = "CTRL|SHIFT|ALT", 98 | action = wezterm.action({ AdjustPaneSize = { "Up", 1 } }), 99 | }, 100 | { 101 | key = "j", 102 | mods = "CTRL|SHIFT|ALT", 103 | action = wezterm.action({ AdjustPaneSize = { "Down", 1 } }), 104 | }, 105 | { -- browser-like bindings for tabbing 106 | key = "t", 107 | mods = "CTRL", 108 | action = wezterm.action({ SpawnTab = "CurrentPaneDomain" }), 109 | }, 110 | { 111 | key = "w", 112 | mods = "CTRL", 113 | action = wezterm.action({ CloseCurrentTab = { confirm = false } }), 114 | }, 115 | { 116 | key = "Tab", 117 | mods = "CTRL", 118 | action = wezterm.action({ ActivateTabRelative = 1 }), 119 | }, 120 | { 121 | key = "Tab", 122 | mods = "CTRL|SHIFT", 123 | action = wezterm.action({ ActivateTabRelative = -1 }), 124 | }, -- standard copy/paste bindings 125 | { 126 | key = "x", 127 | mods = "CTRL", 128 | action = "ActivateCopyMode", 129 | }, 130 | { 131 | key = "v", 132 | mods = "CTRL|SHIFT", 133 | action = wezterm.action({ PasteFrom = "Clipboard" }), 134 | }, 135 | { 136 | key = "c", 137 | mods = "CTRL|SHIFT", 138 | action = wezterm.action({ CopyTo = "ClipboardAndPrimarySelection" }), 139 | }, 140 | }, 141 | 142 | -- Aesthetic Night Colorscheme 143 | bold_brightens_ansi_colors = true, 144 | -- Padding 145 | window_padding = { 146 | left = 25, 147 | right = 25, 148 | top = 25, 149 | bottom = 25, 150 | }, 151 | 152 | -- Tab Bar 153 | enable_tab_bar = true, 154 | hide_tab_bar_if_only_one_tab = true, 155 | show_tab_index_in_tab_bar = false, 156 | tab_bar_at_bottom = true, 157 | 158 | -- General 159 | automatically_reload_config = true, 160 | inactive_pane_hsb = { saturation = 1.0, brightness = 1.0 }, 161 | window_background_opacity = 0.7, 162 | window_close_confirmation = "NeverPrompt", 163 | window_frame = { active_titlebar_bg = "#45475a", font = font_with_fallback(font_name, { bold = true }) }, 164 | } 165 | --------------------------------------------------------------------------------