Compare commits
No commits in common. "8e6abe83dd7fce2df0910788826f42e23447c527" and "d3939b6dc778874cac99f640c07f153ffbb525e4" have entirely different histories.
8e6abe83dd
...
d3939b6dc7
7 changed files with 13 additions and 278 deletions
|
@ -1,168 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# See README.md for usage instructions
|
||||
volume_step=1
|
||||
brightness_step=5
|
||||
max_volume=100
|
||||
notification_timeout=1500
|
||||
download_album_art=true
|
||||
show_album_art=true
|
||||
show_music_in_volume_indicator=true
|
||||
|
||||
# Uses regex to get volume from pactl
|
||||
function get_volume {
|
||||
pactl get-sink-volume @DEFAULT_SINK@ | grep -Po '[0-9]{1,3}(?=%)' | head -1
|
||||
}
|
||||
|
||||
# Uses regex to get mute status from pactl
|
||||
function get_mute {
|
||||
pactl get-sink-mute @DEFAULT_SINK@ | grep -Po '(?<=Mute: )(yes|no)'
|
||||
}
|
||||
|
||||
# Uses regex to get brightness from xbacklight
|
||||
function get_brightness {
|
||||
sudo light | grep -Po '[0-9]{1,3}' | head -n 1
|
||||
}
|
||||
|
||||
# Returns a mute icon, a volume-low icon, or a volume-high icon, depending on the volume
|
||||
function get_volume_icon {
|
||||
volume=$(get_volume)
|
||||
mute=$(get_mute)
|
||||
if [ "$volume" -eq 0 ] || [ "$mute" == "yes" ] ; then
|
||||
volume_icon=""
|
||||
elif [ "$volume" -lt 50 ]; then
|
||||
volume_icon=""
|
||||
else
|
||||
volume_icon=""
|
||||
fi
|
||||
}
|
||||
|
||||
# Always returns the same icon - I couldn't get the brightness-low icon to work with fontawesome
|
||||
function get_brightness_icon {
|
||||
brightness_icon=""
|
||||
}
|
||||
|
||||
function get_album_art {
|
||||
url=$(playerctl -f "{{mpris:artUrl}}" metadata)
|
||||
if [[ $url == "file://"* ]]; then
|
||||
album_art="${url/file:\/\//}"
|
||||
elif [[ $url == "http://"* ]] && [[ $download_album_art == "true" ]]; then
|
||||
# Identify filename from URL
|
||||
filename="$(echo $url | sed "s/.*\///")"
|
||||
|
||||
# Download file to /tmp if it doesn't exist
|
||||
if [ ! -f "/tmp/$filename" ]; then
|
||||
wget -O "/tmp/$filename" "$url"
|
||||
fi
|
||||
|
||||
album_art="/tmp/$filename"
|
||||
elif [[ $url == "https://"* ]] && [[ $download_album_art == "true" ]]; then
|
||||
# Identify filename from URL
|
||||
filename="$(echo $url | sed "s/.*\///")"
|
||||
|
||||
# Download file to /tmp if it doesn't exist
|
||||
if [ ! -f "/tmp/$filename" ]; then
|
||||
wget -O "/tmp/$filename" "$url"
|
||||
fi
|
||||
|
||||
album_art="/tmp/$filename"
|
||||
else
|
||||
album_art=""
|
||||
fi
|
||||
}
|
||||
|
||||
# Displays a volume notification
|
||||
function show_volume_notif {
|
||||
volume=$(get_mute)
|
||||
get_volume_icon
|
||||
|
||||
if [[ $show_music_in_volume_indicator == "true" ]]; then
|
||||
current_song=$(playerctl -f "{{title}} - {{artist}}" metadata)
|
||||
|
||||
if [[ $show_album_art == "true" ]]; then
|
||||
get_album_art
|
||||
fi
|
||||
|
||||
notify-send -t $notification_timeout -h string:x-dunst-stack-tag:volume_notif -h int:value:$volume -i "$album_art" "$volume_icon $volume%" "$current_song"
|
||||
else
|
||||
notify-send -t $notification_timeout -h string:x-dunst-stack-tag:volume_notif -h int:value:$volume "$volume_icon $volume%"
|
||||
fi
|
||||
}
|
||||
|
||||
# Displays a music notification
|
||||
function show_music_notif {
|
||||
song_title=$(playerctl -f "{{title}}" metadata)
|
||||
song_artist=$(playerctl -f "{{artist}}" metadata)
|
||||
song_album=$(playerctl -f "{{album}}" metadata)
|
||||
|
||||
if [[ $show_album_art == "true" ]]; then
|
||||
get_album_art
|
||||
fi
|
||||
|
||||
notify-send -t $notification_timeout -h string:x-dunst-stack-tag:music_notif -i "$album_art" "$song_title" "$song_artist - $song_album"
|
||||
}
|
||||
|
||||
# Displays a brightness notification using dunstify
|
||||
function show_brightness_notif {
|
||||
brightness=$(get_brightness)
|
||||
echo $brightness
|
||||
get_brightness_icon
|
||||
notify-send -t $notification_timeout -h string:x-dunst-stack-tag:brightness_notif -h int:value:$brightness "$brightness_icon $brightness%"
|
||||
}
|
||||
|
||||
# Main function - Takes user input, "volume_up", "volume_down", "brightness_up", or "brightness_down"
|
||||
case $1 in
|
||||
volume_up)
|
||||
# Unmutes and increases volume, then displays the notification
|
||||
pactl set-sink-mute @DEFAULT_SINK@ 0
|
||||
volume=$(get_volume)
|
||||
if [ $(( "$volume" + "$volume_step" )) -gt $max_volume ]; then
|
||||
pactl set-sink-volume @DEFAULT_SINK@ $max_volume%
|
||||
else
|
||||
pactl set-sink-volume @DEFAULT_SINK@ +$volume_step%
|
||||
fi
|
||||
show_volume_notif
|
||||
;;
|
||||
|
||||
volume_down)
|
||||
# Raises volume and displays the notification
|
||||
pactl set-sink-volume @DEFAULT_SINK@ -$volume_step%
|
||||
show_volume_notif
|
||||
;;
|
||||
|
||||
volume_mute)
|
||||
# Toggles mute and displays the notification
|
||||
pactl set-sink-mute @DEFAULT_SINK@ toggle
|
||||
show_volume_notif
|
||||
;;
|
||||
|
||||
brightness_up)
|
||||
# Increases brightness and displays the notification
|
||||
sudo light -A $brightness_step
|
||||
show_brightness_notif
|
||||
;;
|
||||
|
||||
brightness_down)
|
||||
# Decreases brightness and displays the notification
|
||||
sudo light -U $brightness_step
|
||||
show_brightness_notif
|
||||
;;
|
||||
|
||||
next_track)
|
||||
# Skips to the next song and displays the notification
|
||||
playerctl next
|
||||
sleep 0.5 && show_music_notif
|
||||
;;
|
||||
|
||||
prev_track)
|
||||
# Skips to the previous song and displays the notification
|
||||
playerctl previous
|
||||
sleep 0.5 && show_music_notif
|
||||
;;
|
||||
|
||||
play_pause)
|
||||
playerctl play-pause
|
||||
show_music_notif
|
||||
# Pauses/resumes playback and displays the notification
|
||||
;;
|
||||
esac
|
|
@ -1,84 +0,0 @@
|
|||
# See dunst(5) for all configuration options
|
||||
|
||||
[global]
|
||||
monitor = 0
|
||||
follow = mouse
|
||||
width = 400
|
||||
height = (0,400)
|
||||
origin = top-right
|
||||
offset = (15,15)
|
||||
scale = 0
|
||||
notification_limit = 0
|
||||
progress_bar = true
|
||||
progress_bar_height = 10
|
||||
progress_bar_frame_width = 1
|
||||
progress_bar_min_width = 150
|
||||
progress_bar_max_width = 400
|
||||
indicate_hidden = yes
|
||||
transparency = 15
|
||||
separator_height = 1
|
||||
padding = 8
|
||||
horizontal_padding = 10
|
||||
text_icon_padding = 0
|
||||
frame_width = 1
|
||||
frame_color = "#44475a"
|
||||
highlight = "#50fa7b"
|
||||
separator_color = frame
|
||||
sort = yes
|
||||
idle_threshold = 120
|
||||
line_height = 0
|
||||
font = Droid Sans Regular 12
|
||||
markup = full
|
||||
format = "<b>%s</b> <span foreground='#f8f8f2'>\n%b</span>"
|
||||
alignment = left
|
||||
vertical_alignment = center
|
||||
show_age_threshold = 60
|
||||
ellipsize = middle
|
||||
ignore_newline = no
|
||||
stack_duplicates = true
|
||||
hide_duplicate_count = false
|
||||
show_indicators = yes
|
||||
icon_position = left
|
||||
min_icon_size = 64
|
||||
max_icon_size = 64
|
||||
icon_path = /usr/share/icons/Papirus-Dark/16x16/status/:/usr/share/icons/Papirus-Dark/16x16/devices
|
||||
sticky_history = yes
|
||||
history_length = 20
|
||||
dmenu = /usr/bin/rofi -dmenu -p dunst:
|
||||
browser = /usr/bin/firefox -new-tab
|
||||
always_run_script = true
|
||||
title = Dunst
|
||||
class = Dunst
|
||||
corner_radius = 6
|
||||
ignore_dbusclose = false
|
||||
force_xwayland = false
|
||||
force_xinerama = false
|
||||
mouse_middle_click = close_current
|
||||
mouse_left_click = do_action, close_current
|
||||
mouse_right_click = close_all
|
||||
|
||||
[experimental]
|
||||
per_monitor_dpi = false
|
||||
|
||||
[urgency_low]
|
||||
background = "#282a36"
|
||||
foreground = "#6272a4"
|
||||
timeout = 10
|
||||
|
||||
[urgency_normal]
|
||||
background = "#282a36"
|
||||
foreground = "#bd93f9"
|
||||
timeout = 10
|
||||
|
||||
[urgency_critical]
|
||||
background = "#ff5555"
|
||||
foreground = "#f8f8f2"
|
||||
frame_color = "#ff5555"
|
||||
timeout = 0
|
||||
|
||||
[fullscreen_delay_everything]
|
||||
fullscreen = delay
|
||||
|
||||
[fullscreen_show_critical]
|
||||
msg_urgency = critical
|
||||
fullscreen = show
|
|
@ -55,8 +55,8 @@ exec-once = udiskie -t &
|
|||
exec-once = /usr/lib/polkit-kde-authentication-agent-1
|
||||
exec-once = sleep 1; blueman-applet
|
||||
exec-once = hyprpaper
|
||||
exec-once = [workspace special:music silent] supersonic-desktop
|
||||
exec-once = dunst
|
||||
exec-once = swaync
|
||||
exec-once = [workspace special:music silent] sleep 1; supersonic-desktop
|
||||
exec-once = waybar
|
||||
exec-once = hypridle
|
||||
exec-once = hyprctl setcursor Dracula-cursors 24
|
||||
|
@ -222,7 +222,7 @@ bind = $mainMod, F, fullscreen
|
|||
bind = $mainMod, C, exec, galculator
|
||||
bind = $mainMod CTRL, T, exec, steam
|
||||
bind = $mainMod CTRL, Y, exec, heroic
|
||||
bind = $mainMod, N, exec, dunstctl context
|
||||
bind = $mainMod, N, exec, exec swaync-client -t -sw
|
||||
bind = $mainMod CTRL, U, exec, [workspace special:scratchpad silent] signal-desktop --ozone-platform-hint=auto --enable-features=UseOzonePlatform,WaylandWindowDecorations
|
||||
bind = $mainMod CTRL, P, exec, [workspace special:password silent] keepassxc
|
||||
bind = $mainMod CTRL, M, exec, [workspace special:music silent] sleep 1; supersonic-desktop
|
||||
|
@ -256,20 +256,15 @@ bind = ALT, SPACE, focuscurrentorlast
|
|||
|
||||
# Media keys
|
||||
|
||||
bind = ,XF86AudioPlayPause,exec,~/.bin/sh/dunstaudio.sh play_pause
|
||||
bind = ,XF86AudioPlay,exec,~/.bin/sh/dunstaudio.sh play_pause
|
||||
bind = ,XF86AudioPause,exec,~/.bin/sh/dunstaudio.sh play_pause
|
||||
bind = ,XF86AudioPlay,exec,playerctl play-pause
|
||||
bind = ,XF86AudioPause,exec,playerctl pause
|
||||
bind = ,XF86AudioStop,exec,playerctl stop
|
||||
bind = ,XF86AudioNext,exec,~/.bin/sh/dunstaudio.sh next_track
|
||||
bind = ,XF86AudioPrev,exec,~/.bin/sh/dunstaudio.sh prev_track
|
||||
bind = ,XF86AudioRaiseVolume,exec,~/.bin/sh/dunstaudio.sh volume_up
|
||||
bind = ,XF86AudioLowerVolume,exec,~/.bin/sh/dunstaudio.sh volume_down
|
||||
bind = ,XF86AudioMute,exec,~/.bin/sh/dunstaudio.sh volume_mute
|
||||
bind = ,XF86AudioNext,exec,playerctl next
|
||||
bind = ,XF86AudioPrev,exec,playerctl previous
|
||||
bind = ,XF86AudioRaiseVolume,exec,wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%+
|
||||
bind = ,XF86AudioLowerVolume,exec,wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%-
|
||||
bind = ,XF86AudioMute,exec,pactl set-sink-mute @DEFAULT_SINK@ toggle
|
||||
|
||||
# Brightness keys
|
||||
|
||||
bind = ,XF86MonBrightnessUp,exec,~/.bin/sh/dunstaudio.sh brightness_up
|
||||
bind = ,XF86MonBrightnessDown,exec,~/.bin/sh/dunstaudio.sh brightness_down
|
||||
|
||||
# Move focus with Mod + arrow keys
|
||||
|
||||
|
@ -379,7 +374,6 @@ bind = ,Print,exec,grim -g "$(slurp)" - | swappy -f -
|
|||
|
||||
# Environment management
|
||||
|
||||
bind = $mainMod Shift, n, exec, killall dunst || exec dunst
|
||||
bind = $mainMod Shift, w, exec, killall waybar || exec waybar
|
||||
bind = $mainMod Shift, h, exec, killall hypridle || exec hypridle
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ configuration {
|
|||
show-icons: true;
|
||||
display-drun: "";
|
||||
disable-history: false;
|
||||
modi: "window,drun,run,ssh,filebrowser,keys";
|
||||
}
|
||||
|
||||
* {
|
||||
|
|
|
@ -10,7 +10,7 @@ InputBackground = "#44475A"
|
|||
InputBorder = "#44475A"
|
||||
MenuBackground = "#282A36"
|
||||
OverlayBackground = "#282A36"
|
||||
Hyperlink = "#50FA7B"
|
||||
Hyperlink = "#BD93F9"
|
||||
Pressed = "#44475A"
|
||||
ListHeader = "#1E1F29"
|
||||
PageHeader = "#1E1F29"
|
||||
|
|
|
@ -54,9 +54,6 @@
|
|||
"tooltip-format": " {artist}: {title} ( {album})",
|
||||
"interval": 1,
|
||||
"album-len": 0,
|
||||
"on-click": "exec ~/.bin/sh/dunstaudio.sh play_pause",
|
||||
"on-click-right": "exec ~/.bin/sh/dunstaudio.sh next_track",
|
||||
"on-click-middle": "exec ~/.bin/sh/dunstaudio.sh prev_track",
|
||||
"player-icons": {
|
||||
"default": "",
|
||||
"mpv": ""
|
||||
|
@ -245,9 +242,7 @@
|
|||
"car": "",
|
||||
"default": ["", "", "", ""]
|
||||
},
|
||||
"on-click": "pavucontrol",
|
||||
"on-scroll-up": "exec ~/.bin/sh/dunstaudio.sh volume_up",
|
||||
"on-scroll-down": "exec ~/.bin/sh/dunstaudio.sh volume_down"
|
||||
"on-click": "pavucontrol"
|
||||
},
|
||||
"bluetooth": {
|
||||
"format": "<span color=\"#6272a4\"></span> {status}",
|
||||
|
|
|
@ -19,7 +19,7 @@ I use the [Dracula theme](https://draculatheme.com/), following their [color pal
|
|||
* Networking: [NetworkManager](https://networkmanager.dev/)
|
||||
* Wayland Compositor: [Hyprland](https://github.com/hyprwm/Hyprland)
|
||||
* Bar: [Waybar](https://github.com/Alexays/Waybar)
|
||||
* Notifications: [Dunst](https://dunst-project.org)
|
||||
* Notifications: [SwayNotificationCenter](https://github.com/ErikReider/SwayNotificationCenter)
|
||||
* Launcher: [Wofi](https://hg.sr.ht/~scoopta/wofi)
|
||||
* Menu Editor: [alacarte](https://gitlab.gnome.org/GNOME/alacarte)
|
||||
* File Manager: [nnn](https://github.com/jarun/nnn)
|
||||
|
@ -98,6 +98,5 @@ A lot of the code was modified or borrowed from others that I will attempt to li
|
|||
* MrRoy's swaync [style.css](https://gist.github.com/MrRoy/3a4a0b1462921e78bf667e1b36697268) and his [config.json](https://gist.github.com/MrRoy/40f103bc34f3a58699e218c3d06d1a43).
|
||||
* Chick2D's [neofetch-themes](https://github.com/Chick2D/neofetch-themes) repository.
|
||||
* MrVivekRajan's [themes for Hyprlock](https://github.com/MrVivekRajan/Hyprlock-Styles), which I used as base for mine.
|
||||
* Nicholas Anand's [i3-volume-brightness-indicator ](https://gitlab.com/Nmoleo/i3-volume-brightness-indicator/-/tree/main), whose awesome script is powering my notifications with dunst.
|
||||
|
||||
If I'm missing anybody else, just open up a MR.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue