## Usage [Read here.](https://github.com/lcpz/lain/wiki/Widgets#usage) ### Description Shows ALSA volume. ```lua local volume = lain.widget.alsa() ``` ## Input table Variable | Meaning | Type | Default --- | --- | --- | --- `timeout` | Refresh timeout (in seconds) | integer | 5 `cmd` | Alsa mixer command | string | "amixer" `channel` | Mixer channel | string | "Master" `togglechannel` | Toggle channel | string | `nil` `settings` | User settings | function | empty function `cmd` is useful if you need to pass additional arguments to amixer. For instance, you may want to define `cmd = "amixer -c X"` in order to set amixer with card `X`. `settings` can use the following variables: Variable | Meaning | Type | Values --- | --- | --- | --- `volume_now.level` | Volume level | integer | 0-100 `volume_now.status` | Device status | string | "on", "off" ## Output table Variable | Meaning | Type --- | --- | --- `widget` | The widget | `wibox.widget.textbox` `channel` | ALSA channel | string `update` | Update `widget` | function ## Toggle channel In case mute toggling can't be mapped to master channel (this happens, for instance, when you are using an HDMI output), define togglechannel as your S/PDIF device. You can get the device ID with `scontents` command. For instance, if card number is 1 and S/PDIF number is 3: ```shell $ amixer -c 1 scontents Simple mixer control 'Master',0 Capabilities: volume Playback channels: Front Left - Front Right Capture channels: Front Left - Front Right Limits: 0 - 255 Front Left: 255 [100%] Front Right: 255 [100%] Simple mixer control 'IEC958',0 Capabilities: pswitch pswitch-joined Playback channels: Mono Mono: Playback [on] Simple mixer control 'IEC958',1 Capabilities: pswitch pswitch-joined Playback channels: Mono Mono: Playback [on] Simple mixer control 'IEC958',2 Capabilities: pswitch pswitch-joined Playback channels: Mono Mono: Playback [on] Simple mixer control 'IEC958',3 Capabilities: pswitch pswitch-joined Playback channels: Mono Mono: Playback [on] ``` you have to set `togglechannel = "IEC958,3"`. ## Buttons If you want buttons, just add the following after your widget in `rc.lua`. ```lua volume.widget:buttons(awful.util.table.join( awful.button({}, 1, function() -- left click awful.spawn(string.format("%s -e alsamixer", terminal)) end), awful.button({}, 2, function() -- middle click os.execute(string.format("%s set %s 100%%", volume.cmd, volume.channel)) volume.update() end), awful.button({}, 3, function() -- right click os.execute(string.format("%s set %s toggle", volume.cmd, volume.togglechannel or volume.channel)) volume.update() end), awful.button({}, 4, function() -- scroll up os.execute(string.format("%s set %s 1%%+", volume.cmd, volume.channel)) volume.update() end), awful.button({}, 5, function() -- scroll down os.execute(string.format("%s set %s 1%%-", volume.cmd, volume.channel)) volume.update() end) )) ``` ## Keybindings You can control the widget with keybindings like these: ```lua -- ALSA volume control awful.key({ altkey }, "Up", function () os.execute(string.format("amixer set %s 1%%+", volume.channel)) volume.update() end), awful.key({ altkey }, "Down", function () os.execute(string.format("amixer set %s 1%%-", volume.channel)) volume.update() end), awful.key({ altkey }, "m", function () os.execute(string.format("amixer set %s toggle", volume.togglechannel or volume.channel)) volume.update() end), awful.key({ altkey, "Control" }, "m", function () os.execute(string.format("amixer set %s 100%%", volume.channel)) volume.update() end), awful.key({ altkey, "Control" }, "0", function () os.execute(string.format("amixer set %s 0%%", volume.channel)) volume.update() end), ``` where `altkey = "Mod1"`.