Compare commits

..

23 Commits

Author SHA1 Message Date
bf03eaf01e updated icons 2025-04-25 16:13:52 +02:00
3480fedbac fixed wrong flag 2024-04-12 10:47:16 +02:00
34dd851273 fixed typo in flag 2024-04-12 10:46:27 +02:00
18d0a25fb9 formatted code 2024-04-12 10:46:16 +02:00
6b4be3a5d2 Updated README 2021-09-21 10:34:50 +02:00
9e8917cb70 Added my dunstrc if people wanted the same look as in the gif 2021-09-21 10:16:58 +02:00
49f07a75c6 Removed the now obsolete TODO 2021-09-19 20:20:46 +02:00
e772a5d003 Updated the example config to be more explicit 2021-09-19 20:20:29 +02:00
08fdbba358 Updated README 2021-09-19 20:17:01 +02:00
22765f5183 Updated README 2021-09-19 20:16:02 +02:00
ea3d9063aa Updated README 2021-09-19 20:06:46 +02:00
a7ea1d4ae6 Updated README 2021-09-19 19:44:54 +02:00
09c8a1bde7 Updated README 2021-09-19 19:35:16 +02:00
275f0dfc56 Corrected some bugs 2021-09-19 19:31:38 +02:00
b4c2559657 Updated the example config to be more explicit 2021-09-19 19:31:04 +02:00
83d2b840da Updated README 2021-09-19 18:13:55 +02:00
e38b97f17d Updated README 2021-09-19 18:13:34 +02:00
8d0a09c671 Updated README 2021-09-19 18:13:09 +02:00
675f0902eb Updated README 2021-09-19 18:12:14 +02:00
f6ff4addb3 Removed -? as a flag to print the help message because it caused some problems in zsh 2021-09-19 18:11:21 +02:00
ff8525ab8c Updated README 2021-09-19 18:09:28 +02:00
2bb095c08a Updated README 2021-09-19 18:07:24 +02:00
47b24679cc Changed the help message 2021-09-19 18:07:17 +02:00
4 changed files with 667 additions and 69 deletions

148
README.md
View File

@ -14,7 +14,16 @@ from the terminal.
Before installing and using this script, you will need to install the official
[dunst](https://wiki.archlinux.org/title/Dunst) package.
Make sure you have the `dunstify` command available, that's what is needed to
have a nice looking percentage bar.
have a nice looking percentage bar and make you have this in your `dunstrc` to
enable the feature
```
progressbar = true
```
If you want a similar look as in the gif above, you can just copy the [dunstrc](./dunstrc) in you
`$XDG_CONFIG_HOME/dunst/dunstrc` (be sure to **backup** your own `dunstrc`
before copying mine).
#### Bash Ini Reader
@ -62,39 +71,144 @@ sure you set it.
```bash
git clone https://github.com/karma-riuk/volumectl $HOME/.local/lib/volumectl
mkdir -p $HOME/.local/bin # just to make sure that the ~/.local/bin directory exists
mkdir -p $HOME/.local/bin
ln -s $HOME/.local/lib/volumectl $HOME/.local/bin/volumectl
```
#### Option 2 (not recommended): Downloading the script directly
```bash
$ mkdir -p $HOME/.local/bin
$ wget -O $HOME/.local/bin/volumectl https://raw.githubusercontent.com/karma-riuk/volumectl/master/volumectl
$ chmod +x $HOME/.local/bin/volumectl
mkdir -p $HOME/.local/bin
wget -O $HOME/.local/bin/volumectl https://raw.githubusercontent.com/karma-riuk/volumectl/master/volumectl
chmod +x $HOME/.local/bin/volumectl
```
## Usage
### Command line
To use the script, simply execute the `volumectl` with the flag you want,
example:
```bash
$ volumectl -i
volumectl -i
```
### Possible flags
#### Possible flags
(You can find all the information below by doing `volumectl -h`)
|Flag|Description|
|----|-----|
|`-i` or `--increase` | increases the volume by the "normal" amount (by default: 5%) |
|`-i <arg>` or `--increase <arg>` | increase the volume by the `<arg>` amount |
|`-I` or `--big-increase` | increases the volume by the "big" amount (by default: 10%) |
|`-d` or `--decrease` | decreases the volume by the "normal" amount (by default: 5%) |
|`-d arg` or `--decrease arg` | decrease the volume by the `<arg>` amount |
|`-D` or `--big-decrease` | decreases the volume by the "big" amount (by default: 10%) |
|`-s <arg>` or `--set <arg>` | sets the volume to `<arg>` |
|`-m` or `--mute` | sets the volume to `<arg>` |
|Short flag | Equivalent long flag |Description|
|-----|-----|-----|
|`-i` | `--increase` | increases the volume by the "normal" amount (by default: 5%) |
|`-i <arg>` | `--increase <arg>` | increase the volume by the `<arg>` amount |
|`-I` | `--big-increase` | increases the volume by the "big" amount (by default: 10%) |
|`-d` | `--decrease` | decreases the volume by the "normal" amount (by default: 5%) |
|`-d <arg>` | `--decrease <arg>` | decrease the volume by the `<arg>` amount |
|`-D` | `--big-decrease` | decreases the volume by the "big" amount (by default: 10%) |
|`-s <arg>` | `--set <arg>` | sets the volume to `<arg>` |
|`-m` | `--mute` | activates mute |
|`-u` | `--unmute` | deactivates mute |
|`-t` | `--toggle` | toggles mute |
|`-g` | `--get-volume` | prints the current volume level |
|`-G` | `--get-mute` | prints the current mute state |
#### Optional flags
|Short flag | Equivalent long flag |Description|
|-----|-----|-----|
|`-c <file>` | `--config <file>` | use `<file>` as the config file instead of the default location (see below) |
|`-v` | `--verbose` | print each step the script passes through |
|`-h` | `--help` | print the help message and exit |
### Key Bindings
#### Awesomewm
Here is an example of how keybindings would look like in awesomewm (tested)
```lua
---- Volume Management
awful.key({ }, "XF86AudioMute",
function ()
awful.spawn("volumectl -t")
end,
{description = "Toggle mute", group = "Media management"}),
awful.key({ "Shift" }, "XF86AudioMute",
function ()
awful.spawn("volumectl -m")
end,
{description = "Set mute", group = "Media management"}),
awful.key({ }, "XF86AudioRaiseVolume",
function ()
awful.spawn("volumectl -i")
end,
{description = "Increase volume", group = "Media management"}),
awful.key({ "Shift" }, "XF86AudioRaiseVolume",
function ()
awful.spawn("volumectl -I")
end,
{description = "Increase volume a lot", group = "Media management"}),
awful.key({ }, "XF86AudioLowerVolume",
function ()
awful.spawn("volumectl -d")
end,
{description = "Decrease volume", group = "Media management"}),
awful.key({ "Shift" }, "XF86AudioLowerVolume",
function ()
awful.spawn("volumectl -D")
end,
{description = "Decrease volume a lot", group = "Media management"}),
```
#### i3
Here is an example of how keybindings would look like in awesomewm (**NOT TESTED**, please tell me if it's wrong)
```i3
bindsym XF86AudioMute exec --no-startup-id volumectl -t
bindsym Shift+XF86AudioMute exec --no-startup-id volumectl -m
bindsym XF86AudioRaiseVolume exec --no-startup-id volumectl -i
bindsym Shift+XF86AudioRaiseVolume exec --no-startup-id volumectl -I
bindsym XF86AudioLowerVolume exec --no-startup-id volumectl -d
bindsym Shift+XF86AudioLowerVolume exec --no-startup-id volumectl -D
```
## Config
The config file is an optional feature, but it allows you to set a different
volume controller than the default one ([pamixer](https://github.com/cdemoulins/pamixer)).
To enable the config file, first make you installed the `read_ini.sh` script
(see above, in the dependencies) just create a `config.ini` file in the
`$XDG_CONFIG_HOME/volumectl` (`$HOME/.config/volumectl/` if `$XDG_CONFIG_HOME`
is not set) directory.
If you think the default values are fine but want to modify just one value,
then you can just place that value in the config file, `volumectl` will just
take that changed value and keep the rest as default.
You can see what all the available config variables are by looking at the
[example_config.ini](./example_config.ini).
The easiest way to go to setup a custom config is by running the following commands
```bash
mkdir -p ${XDG_CONFIG_HOME:-$HOME/.config}/volumectl
cp $HOME/.local/lib/volumectl/example_config.ini ${XDG_CONFIG_HOME:-$HOME/.config}/volumectl/config.ini
```
and then editing the config with your prefered editor and tinker with it.
Quick tip: when tinkering with the config, be sure to use `volumectl -v` (it's
important to put the `-v` right after the command, so that you see everything
that's happening) so that you see what the values are for the variables and
will be able to spot where your error is, if there is any.

467
dunstrc Normal file
View File

@ -0,0 +1,467 @@
[global]
### Display ###
# Which monitor should the notifications be displayed on.
monitor = 0
# Display notification on focused monitor. Possible modes are:
# mouse: follow mouse pointer
# keyboard: follow window with keyboard focus
# none: don't follow anything
#
# "keyboard" needs a window manager that exports the
# _NET_ACTIVE_WINDOW property.
# This should be the case for almost all modern window managers.
#
# If this option is set to mouse or keyboard, the monitor option
# will be ignored.
follow = mouse
# The geometry of the window:
# [{width}]x{height}[+/-{x}+/-{y}]
# The geometry of the message window.
# The height is measured in number of notifications everything else
# in pixels. If the width is omitted but the height is given
# ("-geometry x2"), the message window expands over the whole screen
# (dmenu-like). If width is 0, the window expands to the longest
# message displayed. A positive x is measured from the left, a
# negative from the right side of the screen. Y is measured from
# 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 = "310x5-30+20"
# 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 = 3
# Set the frame width of the progress bar (values: 0: disabled, 1: enabled)
progress_bar_frame_width = 0
# Set the minimum width for the progress bar (values: any integer)
progress_bar_min_width = 150
# Set the maximum width for the progress bar (values: any integer)
progress_bar_max_width = 300
# Show how many messages are currently hidden (because of geometry).
indicate_hidden = yes
# Shrink window if it's smaller than the width. Will be ignored if
# width is 0.
shrink = no
# 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 = 3
# The height of the entire notification. If the height is smaller
# than the font height and padding combined, it will be raised
# to the font height and padding.
notification_height = 0
# Draw a line of "separator_height" pixel height between two
# notifications.
# Set to 0 to disable.
separator_height = 1
# Padding between text and separator.
padding = 17
# Horizontal padding.
horizontal_padding = 20
# Padding between text and icon.
text_icon_padding = 0
# Defines width in pixels of frame around the notification window.
# Set to 0 to disable.
frame_width = 0
# Defines color of the frame around the notification window.
frame_color = "#abb2bf"
# Define a color for the separator.
# possible values are:
# * auto: dunst tries to find a color fitting to the background;
# * foreground: use the same color as the foreground;
# * frame: use the same color as the frame;
# * anything else will be interpreted as a X color.
separator_color = auto
# Sort messages by urgency.
sort = yes
# Don't remove messages, if the user is idle (no mouse or keyboard input)
# for longer than idle_threshold seconds.
# Set to 0 to disable.
# A client can set the 'transient' hint to bypass this. See the rules
# section for how to disable this if necessary
idle_threshold = 120
### Text ###
font = Noto Mono 17
# The spacing between lines. If the height is smaller than the
# font height, it will get raised to the font height.
line_height = 4
# Possible values are:
# full: Allow a small subset of html markup in notifications:
# <b>bold</b>
# <i>italic</i>
# <s>strikethrough</s>
# <u>underline</u>
#
# For a complete reference see
# <https://developer.gnome.org/pango/stable/pango-Markup.html>.
#
# strip: This setting is provided for compatibility with some broken
# clients that send markup even though it's not enabled on the
# server. Dunst will try to strip the markup but the parsing is
# simplistic so using this option outside of matching rules for
# specific applications *IS GREATLY DISCOURAGED*.
#
# no: Disable markup parsing, incoming notifications will be treated as
# plain text. Dunst will not advertise that it has the body-markup
# capability if this is set as a global setting.
#
# It's important to note that markup inside the format option will be parsed
# regardless of what this is set to.
markup = full
# The format of the message. Possible variables are:
# %a appname
# %s summary
# %b body
# %i iconname (including its path)
# %I iconname (without its path)
# %p progress value if set ([ 0%] to [100%]) or nothing
# %n progress value if set without any extra characters
# %% Literal %
# Markup is allowed
format = <span fgcolor="#61afef" >%s</span>\n%b
# Alignment of message text.
# Possible values are "left", "center" and "right".
alignment = left
# 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.
show_age_threshold = -1
# Split notifications into multiple lines if they don't fit into
# geometry.
word_wrap = yes
# When word_wrap is set to no, specify where to make an ellipsis in long lines.
# Possible values are "start", "middle" and "end".
ellipsize = middle
# Ignore newlines '\n' in notifications.
ignore_newline = no
# Stack together notifications with the same content
stack_duplicates = true
# Hide the count of stacked notifications with the same content
hide_duplicate_count = false
# Display indicators for URLs (U) and actions (A).
show_indicators = yes
### Icons ###
# 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 = 22
# Scale larger icons down to this size, set to 0 to disable
max_icon_size = 32
# Paths to default icons.
icon_path = /usr/share/icons/ePapirus/24x24/panel/:/usr/share/icons/Adwaita/16x16/panel/:/usr/share/icons/Adwaita/16x16/status/:/usr/share/icons/gnome/16x16/devices/
### History ###
# Should a notification popped up from history be sticky or timeout
# as if it would normally do.
sticky_history = yes
# Maximum amount of notifications kept in history
history_length = 20
### Misc/Advanced ###
# dmenu path.
dmenu = /usr/bin/dmenu -p dunst:
# Browser for opening urls in context menu.
browser = /usr/bin/qutebrowser
# Always run rule-defined scripts, even if the notification is suppressed
always_run_script = true
# Define the title of the windows spawned by dunst
title = Dunst
# Define the class of the windows spawned by dunst
class = Dunst
# Print a notification on startup.
# This is mainly for error detection, since dbus (re-)starts dunst
# automatically after a crash.
startup_notification = false
# Manage dunst's desire for talking
# Can be one of the following values:
# crit: Critical features. Dunst aborts
# warn: Only non-fatal warnings
# mesg: Important Messages
# info: all unimportant stuff
# debug: all less than unimportant stuff
verbosity = mesg
# Define the corner radius of the notification window
# in pixel size. If the radius is 0, you have no rounded
# corners.
# The radius will be automatically lowered if it exceeds half of the
# notification height to avoid clipping text and/or icons.
corner_radius = 35
# 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.
# This setting is provided for compatibility with older nVidia drivers that
# do not support RandR and using it on systems that support RandR is highly
# discouraged.
#
# By enabling this setting dunst will not be able to detect when a monitor
# is connected or disconnected which might break follow mode if the screen
# layout changes.
force_xinerama = false
### mouse
# 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 = close_current
mouse_middle_click = do_action, close_current
mouse_right_click = close_all
# Experimental features that may or may not work correctly. Do not expect them
# to have a consistent behaviour across releases.
[experimental]
# Calculate the dpi to use on a per-monitor basis.
# If this setting is enabled the Xft.dpi value will be ignored and instead
# dunst will attempt to calculate an appropriate dpi value for each monitor
# using the resolution and physical size. This might be useful in setups
# 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
# Available modifiers are "ctrl", "mod1" (the alt-key), "mod2",
# "mod3" and "mod4" (windows-key).
# Xev might be helpful to find names for keys.
# Close notification. Equivalent dunstctl command:
# dunstctl close
# close = ctrl+space
# Close all notifications. Equivalent dunstctl command:
# dunstctl close-all
# close_all = ctrl+shift+space
# Redisplay last message(s). Equivalent dunstctl command:
# dunstctl history-pop
# history = ctrl+grave
# Context menu. Equivalent dunstctl command:
# dunstctl context
# context = ctrl+shift+period
[urgency_low]
# IMPORTANT: colors have to be defined in quotation marks.
# Otherwise the "#" and following would be interpreted as a comment.
background = "#222222"
foreground = "#888888"
timeout = 10
# Icon for notifications with low urgency, uncomment to enable
#icon = /path/to/icon
[urgency_normal]
background = "#282c34"
foreground = "#abb2bf"
highlight = "#abb2bf"
timeout = 10
# Icon for notifications with normal urgency, uncomment to enable
#icon = /path/to/icon
[urgency_critical]
background = "#900000"
foreground = "#ffffff"
frame_color = "#ff0000"
timeout = 0
# Icon for notifications with critical urgency, uncomment to enable
#icon = /path/to/icon
# Every section that isn't one of the above is interpreted as a rules to
# override settings for certain messages.
#
# Messages can be matched by
# appname (discouraged, see desktop_entry)
# body
# category
# desktop_entry
# icon
# match_transient
# msg_urgency
# stack_tag
# summary
#
# and you can override the
# background
# foreground
# format
# frame_color
# fullscreen
# new_icon
# set_stack_tag
# set_transient
# timeout
# urgency
#
# Shell-like globbing will get expanded.
#
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
# GLib based applications export their desktop-entry name. In comparison to the appname,
# the desktop-entry won't get localized.
#
# SCRIPTING
# You can specify a script that gets run when the rule matches by
# setting the "script" option.
# The script will be called as follows:
# script appname summary body icon urgency
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
#
# NOTE: if you don't want a notification to be displayed, set the format
# to "".
# NOTE: It might be helpful to run dunst -print in a terminal in order
# to find fitting options for rules.
# Disable the transient hint so that idle_threshold cannot be bypassed from the
# client
#[transient_disable]
# match_transient = yes
# set_transient = no
#
# Make the handling of transient notifications more strict by making them not
# be placed in history.
#[transient_history_ignore]
# match_transient = yes
# history_ignore = yes
# fullscreen values
# show: show the notifications, regardless if there is a fullscreen window opened
# delay: displays the new notification, if there is no fullscreen window active
# If the notification is already drawn, it won't get undrawn.
# pushback: same as delay, but when switching into fullscreen, the notification will get
# withdrawn from screen again and will get delayed like a new notification
#[fullscreen_delay_everything]
# fullscreen = delay
#[fullscreen_show_critical]
# msg_urgency = critical
# fullscreen = show
#[espeak]
# summary = "*"
# script = dunst_espeak.sh
#[script-test]
# summary = "*script*"
# script = dunst_test.sh
#[ignore]
# # This notification will not be displayed
# summary = "foobar"
# format = ""
#[history-ignore]
# # This notification will not be saved in history
# summary = "foobar"
# history_ignore = yes
#[skip-display]
# # This notification will not be displayed, but will be included in the history
# summary = "foobar"
# skip_display = yes
[signed_on]
appname = Pidgin
summary = "*signed on*"
urgency = low
#
#[signed_off]
# appname = Pidgin
# summary = *signed off*
# urgency = low
#
#[says]
# appname = Pidgin
# summary = *says*
# urgency = critical
#
#[twitter]
# appname = Pidgin
# summary = *twitter.com*
# urgency = normal
#
#[stack-volumes]
# appname = "some_volume_notifiers"
# set_stack_tag = "volume"
#
# vim: ft=cfg

View File

@ -1,10 +1,30 @@
[Controller]
# volume_controller: the command to control your volume from the command line (for puslse audio it's `pamixer`)
volume_controller=pamixer
# The follwing are the flags you have to give to the volume controller, the variables are self-explainatory
increase_flag=--increase
decrease_flag=--decrease
set_volume_flag=--set-volume
get_volume_flag=--get-volume
set_mute_flag=--mute
set_unmute_flag=--unmute
toggle_mute_flag=--toggle-mute
get_mute_flag=--get-mute
# Additional flags you always want to be in the command when the volume is changed
# These are placed before the actual instructions, example with the additional
# flag below an end command would look like `pamixer --allow-boost --increase 5`
additional_flags=--allow-boost
[Amounts]
# normal_delta: this is the value used when you use the `-i` flag without arguments
normal_delta=5
# big_delta: this is the value used when you use the `-I` flag
big_delta=10
volume_min=5
volume_max=150
[Notification]
# enabled: set wether or not the notifications are active. Possible values: yes, no, true, false, 1, 0
enabled=yes
timeout=3000
# timeout: the notification timeout time, in milliseconds
timeout=1000

View File

@ -1,10 +1,5 @@
#!/usr/bin/env bash
# TODO: in the readme, remind the user that they don't have to write a fully
# fledged config if they only want to modify a single element (like "normal
# delta"), if the other values are not specified, the default values will be
# used
## Default controller values
DEFAULT_VOLUME_CONTROLLER="pamixer"
DEFAULT_INCREASE_FLAG="--increase"
@ -15,7 +10,7 @@ DEFAULT_SET_UNMUTE_FLAG="--unmute"
DEFAULT_TOGGLE_MUTE_FLAG="--toggle-mute"
DEFAULT_GET_VOLUME_FLAG="--get-volume"
DEFAULT_GET_MUTE_FLAG="--get-mute"
DEFAULT_ADDITIONAL_FLAGS=("--allow-boost")
DEFAULT_ADDITIONAL_FLAGS=()
## Default values
DEFAULT_NOTIFICATION_ENABLED=1
@ -29,16 +24,16 @@ VERBOSE=0
CONFIG_PATH="${XDG_CONFIG_HOME:-$HOME/.config}/volumectl/config.ini"
READ_INI_POSSIBLE_PATHS=(\
"${XDG_LIB_HOME:-$HOME/.local/lib}/read_ini.sh" "${XDG_LIB_HOME:-$HOME/.local/lib}/bash_ini_parser/read_ini.sh" \
)
"${XDG_LIB_HOME:-$HOME/.local/lib}/read_ini.sh" "${XDG_LIB_HOME:-$HOME/.local/lib}/bash_ini_parser/read_ini.sh" \
)
## Args
OPTIONAL_FLAGS=( \
"-v" "--verbose" \
"-c" "--config" \
"-h" "-?" "--help" \
)
"-v" "--verbose" \
"-c" "--config" \
"-h" "-?" "--help" \
)
verbose () {
[[ $VERBOSE -eq 1 ]] && return 0 || return 1
@ -49,18 +44,20 @@ notify () {
muted=$(get_mute)
if [[ $muted = "true" ]]; then
icon="audio-volume-muted"
icon="audio-volume-muted-symbolic"
elif [[ $volume -eq 0 ]]; then
icon="audio-volume-low"
icon="audio-volume-low-symbolic"
elif [[ $volume -gt 0 ]] && [[ $volume -lt 50 ]]; then
icon="audio-volume-medium"
icon="audio-volume-medium-symbolic"
elif [[ $volume -ge 50 ]]; then
icon="audio-volume-high"
icon="audio-volume-high-symbolic"
elif [[ $volume -gt 100 ]]; then
icon="audio-volume-overamplified-symbolic"
fi
local cmd="dunstify -h int:value:$volume -t $NOTIFICATION_TIMEOUT -h string:x-dunst-stack-tag:volume -i \"$icon\" \"Volume ($volume%)\""
[[ $NOTIFICATION_ENABLED -eq 1 ]] && sh -c "$cmd"
# verbose && ( [[ $NOTIFICATION_ENABLED -eq 1 ]] && echo "Notified with \`$cmd\`" || echo "Didn't notify" )
verbose && ( [[ $NOTIFICATION_ENABLED -eq 1 ]] && echo "Notified with \`$cmd\`" || echo "Didn't notify" )
}
@ -100,8 +97,8 @@ checkout_config () {
GET_MUTE_FLAG=${INI__Controller__get_mute_flag:-$DEFAULT_GET_MUTE_FLAG}
ADDITIONAL_FLAGS=${INI__Controller__additional_flags:-$DEFAULT_ADDITIONAL_FLAGS}
NORMAL_DELTA=${INI__Controller__normal_delta:-$DEFAULT_NORMAL_DELTA}
BIG_DELTA=${INI__Controller__big_delta:-$DEFAULT_BIG_DELTA}
NORMAL_DELTA=${INI__Amounts__normal_delta:-$DEFAULT_NORMAL_DELTA}
BIG_DELTA=${INI__Amounts__big_delta:-$DEFAULT_BIG_DELTA}
NOTIFICATION_ENABLED=${INI__Notification__enabled:-$DEFAULT_NOTIFICATION_ENABLED}
NOTIFICATION_TIMEOUT=${INI__Notification__timeout:-$DEFAULT_NOTIFICATION_TIMEOUT}
@ -114,6 +111,7 @@ checkout_config () {
echo "SET_VOLUME_FLAG: '$SET_VOLUME_FLAG'" && \
echo "GET_VOLUME_FLAG: '$GET_VOLUME_FLAG'" && \
echo "SET_MUTE_FLAG: '$SET_MUTE_FLAG'" && \
echo "SET_UNMUTE_FLAG: '$SET_UNMUTE_FLAG'" && \
echo "GET_MUTE_FLAG: '$GET_MUTE_FLAG'" && \
echo "ADDITIONAL_FLAGS: '${ADDITIONAL_FLAGS[@]}'" && \
echo "NORMAL_DELTA: '$NORMAL_DELTA'" && \
@ -222,14 +220,14 @@ usage() {
volumectl - A configurable bash script that makes your life easier in controlling volume and notifying it
at the same time.
Usage: volumectl [-v|--verbose] [-c|--config path] -option [arg]
Usage: volumectl [-v|--verbose] [-c|--config <file>] -option [arg]
Options:
-i [arg], --increase [arg] increase the volume by the "normal" amount or by the [arg] amount
-d [arg], --decrease [arg] decrease the volume by the "normal" amount or by the [arg] amount
-I, --big-increase increase the volume by the "big" amount
-D, --big-decrease decrease the volume by the "big" amount
-s arg, --set arg set volume to arg
-s <arg>, --set <arg> set volume to <arg>
-m, --mute mute
-u, --unmute unmute
-t, --toggle toggle mute
@ -237,10 +235,10 @@ Options:
-G, --get-mute get mute
Optional arguments:
-c path, --config path instead of reading from the default location ($CONFIG_PATH),
-c <file>, --config <file> instead of reading from the default location ($CONFIG_PATH),
read from the path given
-v, --verbose print each step the script passes through
-h, -?, --help show this message
-h, --help show this message
EOF
}
@ -255,12 +253,12 @@ if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then #if '__name__' == '__main__'
shift
;;
-c|--config)
[[ -f "$2" ]] && CONFIG_PATH="$2" || echo "Error: the config file given '$2' doesn't exists." 1>&2 && exit 1
[[ -f "$2" ]] && CONFIG_PATH="$2" || ( echo "Error: the config file given '$2' doesn't exists." 1>&2 && exit 1 )
verbose && echo "Setting \$CONFIG_PATH to $2 (\$CONFIG_PATH=$CONFIG_PATH)"
shift 2
;;
-h|-\?|--help)
verbose && echo "Detected -h, -? or --help"
-h|--help)
verbose && echo "Detected -h or --help"
usage
exit
;;
@ -291,11 +289,11 @@ if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then #if '__name__' == '__main__'
verbose && echo "Detected -s or --set-volume, with argument '$2'"
[[ -z "$2" ]] && echo "Error, missing value to set volume" 1>&2 && exit 1 || volume_set $2
;;
-m|--set-mute)
-m|--mute)
verbose && echo "Detected -m or --mute"
mute
;;
-u|--ummute)
-u|--unmute)
verbose && echo "Detected -u or --unmute"
unmute
;;
@ -320,4 +318,3 @@ if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then #if '__name__' == '__main__'
;;
esac
fi