diff --git a/README.md b/README.md
index 6c6503b..3b56a16 100644
--- a/README.md
+++ b/README.md
@@ -21,8 +21,9 @@
- `setup/` directory contains installers for additional packages.
- Stuff I use:
- **Text editor:** [Emacs](http://www.gnu.org/software/emacs/) + [Neovim](https://github.com/neovim/neovim)
- - **Fonts:** [Sarasa Gothic](https://github.com/be5invis/Sarasa-Gothic), [Iosevka Nerd Font](https://github.com/ryanoasis/nerd-fonts)
+ - **Fonts:** [Sarasa Gothic](https://github.com/be5invis/Sarasa-Gothic), [Iosevka Nerd Font](https://github.com/ryanoasis/nerd-fonts), [Iosevka](https://github.com/be5invis/Iosevka)
- **Backlight control:** [light](https://github.com/haikarainen/light) / [brightnessctl](https://github.com/Hummer12007/brightnessctl)
+ - **Notification daemon:** [mako](https://github.com/emersion/mako) / [dunst](https://github.com/dunst-project/dunst)
- **Clipboard manager:** [greenclip](https://github.com/erebe/greenclip) / [clipman](https://github.com/yory8/clipman)
- **Mixer:** [pulsemixer](https://github.com/GeorgeFilipkin/pulsemixer)
- **mpris:** [mpDris2](https://github.com/eonpatapon/mpDris2), [mpv-mpris](https://github.com/hoyon/mpv-mpris), [playerctl](https://github.com/altdesktop/playerctl)
diff --git a/deploy.sh b/deploy.sh
index e04c3eb..6fab5d8 100755
--- a/deploy.sh
+++ b/deploy.sh
@@ -43,7 +43,13 @@ case ${server} in
wayland)
cp -rfv ./home/.config/foot/ ~/.config/foot/
cp -rfv ./home/.config/hikari/ ~/.config/hikari/
- cp -rfv ./home/.config/mako/ ~/.config/mako/
+ # Dunst is Wayland native too, since 1.6.0
+ if command -v dunst >/dev/null
+ then
+ cp -rfv ./home/.config/dunst/ ~/.config/dunst/
+ else
+ cp -rfv ./home/.config/mako/ ~/.config/mako/
+ fi
cp -rfv ./home/.config/nwg-launchers/ ~/.config/nwg-launchers/
cp -rfv ./home/.config/river/ ~/.config/river/
cp -rfv ./home/.config/sway/ ~/.config/sway/
diff --git a/home/.config/doom/exwm.el b/home/.config/doom/exwm.el
index ca398c2..ea1559a 100644
--- a/home/.config/doom/exwm.el
+++ b/home/.config/doom/exwm.el
@@ -304,15 +304,12 @@
(desktop-environment-screenlock-command "~/.local/bin/X11/i3lock.sh"))
;; Control dunst
-(defun disable-desktop-notifications ()
+(defun close-desktop-notifications ()
(interactive)
- (start-process-shell-command "notify-send" nil "notify-send \"DUNST_COMMAND_PAUSE\""))
-(defun enable-desktop-notifications ()
- (interactive)
- (start-process-shell-command "notify-send" nil "notify-send \"DUNST_COMMAND_RESUME\""))
+ (start-process-shell-command "dunstctl" nil "dunstctl close-all"))
(defun toggle-desktop-notifications ()
(interactive)
- (start-process-shell-command "notify-send" nil "notify-send \"DUNST_COMMAND_TOGGLE\""))
+ (start-process-shell-command "dunstctl" nil "dunstctl set-paused toggle"))
;; Clipboard managing with greenclip
(defun ivy-greenclip ()
diff --git a/home/.config/dunst/dunstrc b/home/.config/dunst/dunstrc
index 52bc3ef..ba6ee29 100644
--- a/home/.config/dunst/dunstrc
+++ b/home/.config/dunst/dunstrc
@@ -29,7 +29,24 @@
# the top and down respectively.
# The width can be negative. In this case the actual width is the
# screen width minus the width defined in within the geometry option.
- geometry = "0x0-5+30"
+ geometry = "0x5-5+30"
+
+ # Turn on the progess bar
+ progress_bar = true
+
+ # Set the progress bar height. This includes the frame, so make sure
+ # it's at least twice as big as the frame width.
+ progress_bar_height = 10
+
+ # Set the frame width of the progress bar
+ progress_bar_frame_width = 1
+
+ # Set the minimum width for the progress bar
+ progress_bar_min_width = 150
+
+ # Set the maximum width for the progress bar
+ progress_bar_max_width = 300
+
# Show how many messages are currently hidden (because of geometry).
indicate_hidden = yes
@@ -41,7 +58,7 @@
# The transparency of the window. Range: [0; 100].
# This option will only work if a compositing window manager is
# present (e.g. xcompmgr, compiz, etc.).
- transparency = 5
+ transparency = 0
# The height of the entire notification. If the height is smaller
# than the font height and padding combined, it will be raised
@@ -59,6 +76,9 @@
# Horizontal padding.
horizontal_padding = 8
+ # Padding between text and icon.
+ text_icon_padding = 2
+
# Defines width in pixels of frame around the notification window.
# Set to 0 to disable.
frame_width = 2
@@ -102,7 +122,7 @@
# underline
#
# For a complete reference see
- # .
+ # .
#
# strip: This setting is provided for compatibility with some broken
# clients that send markup even though it's not enabled on the
@@ -134,6 +154,10 @@
# Possible values are "left", "center" and "right".
alignment = center
+ # Vertical alignment of message text and icon.
+ # Possible values are "top", "center" and "bottom".
+ vertical_alignment = center
+
# Show age of message if message is older than show_age_threshold
# seconds.
# Set to -1 to disable.
@@ -164,6 +188,11 @@
# Align icons left/right/off
icon_position = left
+ # Scale small icons up to this size, set to 0 to disable. Helpful
+ # for e.g. small files or high-dpi screens. In case of conflict,
+ # max_icon_size takes precedence over this.
+ min_icon_size = 0
+
# Scale larger icons down to this size, set to 0 to disable
max_icon_size = 64
@@ -177,7 +206,7 @@
sticky_history = yes
# Maximum amount of notifications kept in history
- history_length = 7
+ history_length = 20
### Misc/Advanced ###
@@ -217,6 +246,22 @@
# notification height to avoid clipping text and/or icons.
corner_radius = 10
+ # Ignore the dbus closeNotification message.
+ # Useful to enforce the timeout set by dunst configuration. Without this
+ # parameter, an application may close the notification sent before the
+ # user defined timeout.
+ ignore_dbusclose = false
+
+ ### Wayland ###
+ # These settings are Wayland-specific. They have no effect when using X11
+
+ # Uncomment this if you want to let notications appear under fullscreen
+ # applications (default: overlay)
+ # layer = top
+
+ # Set this to true to use X11 output on Wayland.
+ force_xwayland = false
+
### Legacy
# Use the Xinerama extension instead of RandR for multi-monitor support.
@@ -231,13 +276,15 @@
### mouse
- # Defines action of mouse event
+ # Defines list of actions for each mouse event
# Possible values are:
# * none: Don't do anything.
# * do_action: If the notification has exactly one action, or one is marked as default,
# invoke it. If there are multiple and no default, open the context menu.
# * close_current: Close current notification.
# * close_all: Close all notifications.
+ # These values can be strung together for each mouse event, and
+ # will be executed in sequence.
mouse_left_click = do_action
mouse_middle_click = close_all
mouse_right_click = close_current
@@ -252,6 +299,10 @@
# where there are multiple screens with very different dpi values.
per_monitor_dpi = false
+# The internal keyboard shortcut support in dunst is now considered deprecated
+# and should be replaced by dunstctl calls. You can use the configuration of your
+# WM or DE to bind these to shortcuts of your choice.
+# Check the dunstctl manual page for more info.
[shortcuts]
# Shortcuts are specified as [modifier+][modifier+]...key
@@ -259,20 +310,21 @@
# "mod3" and "mod4" (windows-key).
# Xev might be helpful to find names for keys.
- # Close notification.
- close = ctrl+space
+ # Close notification. Equivalent dunstctl command:
+ # dunstctl close
+ # close = ctrl+space
- # Close all notifications.
- close_all = ctrl+shift+space
+ # Close all notifications. Equivalent dunstctl command:
+ # dunstctl close-all
+ # close_all = ctrl+shift+space
- # Redisplay last message(s).
- # On the US keyboard layout "grave" is normally above TAB and left
- # of "1". Make sure this key actually exists on your keyboard layout,
- # e.g. check output of 'xmodmap -pke'
- history = ctrl+grave
+ # Redisplay last message(s). Equivalent dunstctl command:
+ # dunstctl history-pop
+ # history = ctrl+grave
- # Context menu.
- context = ctrl+shift+period
+ # Context menu. Equivalent dunstctl command:
+ # dunstctl context
+ # context = ctrl+shift+period
[urgency_low]
# IMPORTANT: colors have to be defined in quotation marks.
diff --git a/home/.config/hikari/autostart b/home/.config/hikari/autostart
index dad0769..4fcf725 100755
--- a/home/.config/hikari/autostart
+++ b/home/.config/hikari/autostart
@@ -9,7 +9,7 @@ gsettings set org.gnome.desktop.interface cursor-size '24'
# Autostart
pipewire &
mpd &
-mako -c ~/.config/mako/config &
+start_notify &
wl-paste -t text --watch clipman store &
waybar -c ~/.config/waybar/config-generic -s ~/.config/waybar/style-generic.css &
mpDris2 &
diff --git a/home/.config/river/init b/home/.config/river/init
index ae7fbd6..8701dd3 100755
--- a/home/.config/river/init
+++ b/home/.config/river/init
@@ -8,7 +8,7 @@ riverctl spawn 'wlr-randr --output DP-2 --mode 1920x1080@60.000000Hz --pos -1920
riverctl spawn 'pipewire'
riverctl spawn 'mpd'
-riverctl spawn 'mako -c ~/.config/mako/config'
+riverctl spawn 'start_notify'
riverctl spawn 'wl-paste -t text --watch clipman store'
riverctl spawn 'waybar'
riverctl spawn 'swayidle -w before-sleep swaylock'
@@ -68,7 +68,7 @@ riverctl map normal $mod+Mod1 C spawn clipboard --clear
riverctl map normal $mod C spawn clipman clear --tool wofi
# Dismiss notifications
-riverctl map normal $mod+Mod1 N spawn makoctl dismiss --all
+riverctl map normal $mod+Mod1 N spawn dismiss_notify
# Emacs
riverctl map normal $mod+Mod1 E spawn emacsclient -c -a emacs
diff --git a/home/.config/sway/config b/home/.config/sway/config
index c471d0c..63fa17b 100644
--- a/home/.config/sway/config
+++ b/home/.config/sway/config
@@ -80,7 +80,7 @@ input * xkb_numlock enable
#
exec pipewire
exec mpd
-exec mako -c ~/.config/mako/config
+exec start_notify
exec wl-paste -t text --watch clipman store
exec swayidle -w \
timeout 300 'swaylock' \
@@ -205,7 +205,7 @@ bindsym Print exec screenshot --region
bindsym $mod+Print exec screenshot --full
# Dismiss notifications
-bindsym $mod+Mod1+n exec makoctl dismiss --all
+bindsym $mod+Mod1+n exec dismiss_notify
# Emacs
bindsym $mod+Mod1+e exec emacsclient -c -a emacs
diff --git a/home/.config/wayfire.ini b/home/.config/wayfire.ini
index 5b2b075..e6db839 100644
--- a/home/.config/wayfire.ini
+++ b/home/.config/wayfire.ini
@@ -98,7 +98,7 @@ modifier =
autostart_wf_shell = false
# Notifications
-notifications = mako -c ~/.config/mako/config
+notifications = start_notify
# The bar
bar = waybar -c ~/.config/waybar/config-generic -s ~/.config/waybar/style-generic.css
diff --git a/home/.local/bin/Wayland/dismiss_notify b/home/.local/bin/Wayland/dismiss_notify
new file mode 100755
index 0000000..f4f7ba9
--- /dev/null
+++ b/home/.local/bin/Wayland/dismiss_notify
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+makoctl dismiss --all 2>/dev/null || dunstctl close-all
diff --git a/home/.local/bin/Wayland/start_notify b/home/.local/bin/Wayland/start_notify
new file mode 100755
index 0000000..7c0435a
--- /dev/null
+++ b/home/.local/bin/Wayland/start_notify
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+if command -v mako >/dev/null
+then
+ mako -c ~/.config/mako/config &
+else
+ dunst &
+fi
diff --git a/home/.local/bin/brightness b/home/.local/bin/brightness
index 467441f..b615562 100755
--- a/home/.local/bin/brightness
+++ b/home/.local/bin/brightness
@@ -1,25 +1,37 @@
-#!/bin/bash
+#!/bin/sh
-if [ -z "$WAYLAND_DISPLAY" ]; then
- notification=dunst
-else
- notification=mako
-fi
+_notify_brightness() {
+ if command -v mako >/dev/null
+ then
+ icon="$HOME/.config/mako/idea.png"
+ else
+ icon="$HOME/.config/dunst/idea.png"
+ fi
+ notify-send -h string:x-canonical-private-synchronous:brightness "Brightness: $1%" -h int:value:"$1" -i "${icon}"
+}
case $1 in
up)
if command -v light >/dev/null
then
- light -A 5 > /dev/null && notify-send -i ~/.config/${notification}/idea.png "Brightness: $(light -G | cut -d '.' -f 1)%"
+ light -A 5 >/dev/null
+ brightness="$(light -G | cut -d '.' -f 1)"
+ _notify_brightness "$brightness"
else
- brightnessctl set 5%+ >/dev/null && notify-send -i ~/.config/${notification}/idea.png "Brightness: $(brightnessctl i | grep '%' | awk -F'(' '{print $2}' | awk -F'%' '{print $1}')%"
+ brightnessctl set 5%+ >/dev/null
+ brightness="$(brightnessctl i | grep '%' | awk -F'(' '{print $2}' | awk -F'%' '{print $1}')"
+ _notify_brightness "$brightness"
fi ;;
down)
if command -v light >/dev/null
then
- light -U 5 > /dev/null && notify-send -i ~/.config/${notification}/idea.png "Brightness: $(light -G | cut -d '.' -f 1)%"
+ light -U 5 >/dev/null
+ brightness="$(light -G | cut -d '.' -f 1)"
+ _notify_brightness "$brightness"
else
- brightnessctl set 5%- >/dev/null && notify-send -i ~/.config/${notification}/idea.png "Brightness: $(brightnessctl i | grep '%' | awk -F'(' '{print $2}' | awk -F'%' '{print $1}')%"
+ brightnessctl set 5%- >/dev/null
+ brightness="$(brightnessctl i | grep '%' | awk -F'(' '{print $2}' | awk -F'%' '{print $1}')"
+ _notify_brightness "$brightness"
fi ;;
*)
;;
diff --git a/home/.local/bin/colorscript b/home/.local/bin/colorscript
index 0a2767a..935e035 100755
--- a/home/.local/bin/colorscript
+++ b/home/.local/bin/colorscript
@@ -4,7 +4,7 @@ DIR_COLORSCRIPTS="$HOME/.local/bin/colorscripts"
list_colorscripts="$(/usr/bin/ls "${DIR_COLORSCRIPTS}" | cut -d ' ' -f 1 | nl)"
length_colorscripts="$(/usr/bin/ls "${DIR_COLORSCRIPTS}" | wc -l)"
-function _random() {
+_random() {
declare -i random_index=$RANDOM%$length_colorscripts
[[ $random_index -eq 0 ]] && random_index=1
diff --git a/home/.local/bin/volumecontrol b/home/.local/bin/volumecontrol
index 15c5c86..cc4ee83 100755
--- a/home/.local/bin/volumecontrol
+++ b/home/.local/bin/volumecontrol
@@ -1,57 +1,54 @@
#!/bin/sh
-if [ -z "$WAYLAND_DISPLAY" ]
+if command -v mako >/dev/null
then
- notification=dunst
-else
notification=mako
+else
+ notification=dunst
fi
-# Use pulseaudio backend first (pulsemixer)
if command -v pulsemixer >/dev/null
then
- _notify() {
+ _notify_volume() {
volume=$(pulsemixer --get-volume)
- # I only have 2 channels :)
- left=$(echo "$volume" | cut -d' ' -f1)
- right=$(echo "$volume" | cut -d' ' -f2)
- average=$(((left+right)/2))
- notify-send -i "$HOME/.config/${notification}/speaker.png" "Volume: $average%"
+ # 2 channels
+ left=$(echo "${volume}" | cut -d' ' -f1)
+ right=$(echo "${volume}" | cut -d' ' -f2)
+
+ notify-send -h string:x-canonical-private-synchronous:audio -h int:value:"${left}" -i "$HOME/.config/${notification}/speaker.png" "Volume: L:${left}% / R:${right}%"
}
case $1 in
increase)
- pulsemixer --change-volume +5 && _notify
+ pulsemixer --change-volume +5 && _notify_volume
;;
decrease)
- pulsemixer --change-volume -5 && _notify
+ pulsemixer --change-volume -5 && _notify_volume
;;
toggle)
pulsemixer --toggle-mute
status=$(pulsemixer --get-mute)
- if [ "$status" -eq 1 ] || [ "$status" = "true" ]
+ if [ "${status}" -eq 1 ] || [ "${status}" = "true" ]
then
notify-send -i "$HOME/.config/${notification}/mute.png" "Sound muted"
else
notify-send -i "$HOME/.config/${notification}/speaker.png" "Sound unmuted"
- fi
- ;;
+ fi ;;
*)
;;
esac
-# Then fallback to the ALSA one (alsamixer + amixer)
else
- _notify_alsa() {
+ _notify_volume() {
volume=$(amixer get Master | sed -nre 's/.*\\[(.*%)\\].*/\\1/p')
- notify-send -i "$HOME/.config/${notification}/speaker.png" "Volume: $volume"
+ notify-send -h string:x-canonical-private-synchronous:audio -h int:value:"${volume}" -i "$HOME/.config/${notification}/speaker.png" "Volume: ${volume}"
}
case $1 in
increase)
- amixer set Master 5+ && _notify_alsa
+ amixer set Master 5+ && _notify_volume
;;
decrease)
- amixer set Master 5- && _notify_alsa
+ amixer set Master 5- && _notify_volume
;;
toggle)
amixer set Master toggle
@@ -60,8 +57,7 @@ else
notify-send -i "$HOME/.config/${notification}/mute.png" "Sound muted"
else
notify-send -i "$HOME/.config/${notification}/speaker.png" "Sound unmuted"
- fi
- ;;
+ fi ;;
*)
;;
esac