├── 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 |
22 | Sistema operativo: Arch Linux
23 | WM: Hyprland
24 | Terminal: wezterm
25 | Shell: zsh
26 | Editor: neovim / vscode
27 | Barra: waybar + eww
28 | Lanzador de aplicaciones: eww launcher
29 |
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 |
--------------------------------------------------------------------------------