14 releases

0.2.3 Oct 22, 2024
0.2.2 Apr 13, 2024
0.2.1 Mar 22, 2024
0.1.10 Mar 3, 2024
0.1.6 Sep 28, 2023

#47 in GUI

Download history 3/week @ 2024-07-31 4/week @ 2024-09-18 4/week @ 2024-09-25 117/week @ 2024-10-16 58/week @ 2024-10-23 2/week @ 2024-10-30 3/week @ 2024-11-06

180 downloads per month

MIT license

83KB
2K SLoC

Mixxc

Crates.io License: MIT

Mixxc is a minimalistic and customizable volume mixer, created to seamlessly complement desktop widgets.   Currently, it supports only pulseaudio and pipewire (through the pulseaudio interface) by utilizing libpulseaudio to receive audio events.

Preview - Vertical Preview

Usage

Usage: mixxc [-w <width>] [-h <height>] [-s <spacing>] [-a <anchor...>] [-A] [-m <margin...>] [-M] [-b <bar>] [-u <userstyle>] [-k] [-i] [-x <max-volume>] [-P] [-v]

Minimalistic volume mixer.

Options:
  -w, --width       window height
  -h, --height      window width
  -s, --spacing     spacing between clients
  -a, --anchor      screen anchor point: (t)op, (b)ottom, (l)eft, (r)ight
  -A, --active      show only active sinks
  -m, --margin      margin distance for each anchor point
  -M, --master      enable master volume slider
  -b, --bar         volume slider orientation: (h)orizontal, (v)ertical
  -u, --userstyle   path to the userstyle
  -k, --keep        keep window open
  -i, --icon        enable client icons
  -x, --max-volume  max volume level in percent (default: 100; 1-255)
  -P, --per-process use only one volume slider for each system process
  -v, --version     print version
  --help            display usage information

Anchoring

It is often desirable to be able to position widgets relatively to a screen side.
Two flags will help with this: -a --anchor and -m --margin.
Each margin value provided will match every anchor point respectively.  

mixxc --anchor left --anchor bottom --margin 20 --margin 30

Customization

Mixxc is built with GTK4 and uses CSS to define its appearance.
You will find the style sheet in your config directory after the first launch.

${XDG_CONFIG_HOME:-$HOME/.config}/mixxc/style.css

If you have enabled the Sass feature, it will also look for *.scss and *.sass files.

${XDG_CONFIG_HOME:-$HOME/.config}/mixxc/style.sass
${XDG_CONFIG_HOME:-$HOME/.config}/mixxc/style.scss

Environment

Mixxc is developed and tested with:

  • Wayland (Hyprland): 0.44.1
  • PipeWire: 1.2.5

If your setup is different and you experience issues, feel free to file a bug report.

Tips

Startup Time

If startup seems a bit slow or memory usage seems a bit too high try this:

GSK_RENDERER=cairo GTK_USE_PORTAL=0 mixxc

Manual Closing

By default window will be closed after it looses focus.
This is a workaround for WM's that don't send close request to layer-shells under Wayland.
If this behavior is not desirable, you can disable it:

mixxc --keep

Toggle Window

If you want to toggle window with a click of a button, Unix way is the way:

pkill mixxc | mixxc

Troubleshooting

To get GTK related messages a specific environment variable must be non empty.

GTK_DEBUG=1 mixxc

Dependencies

Features

Some features can be enabled at compile time.

  • Sass - Allows you to use SCSS instead of CSS.
  • Wayland - Uses wlr-layer-shell to imitate window positioning.
  • X11 - Sets WM hints and properties, and repositions the window.

Installation

Can be installed from crates.io with cargo:

cargo install mixxc --locked --features Sass,Wayland...

Building

To build this little thing, you'll need some Rust.

git clone --depth 1 https://github.com/Elvyria/mixxc
cd mixxc
cargo build --locked --release --features Sass,Wayland...

Dependencies

~22–35MB
~654K SLoC