diff options
6 files changed, 748 insertions, 0 deletions
diff --git a/assets/easyeffects-eq-presets.org b/assets/easyeffects-eq-presets.org new file mode 100644 index 0000000..37f6478 --- /dev/null +++ b/assets/easyeffects-eq-presets.org @@ -0,0 +1,47 @@ +#+TITLE: EasyEffects EQ Presets - Installation Guide +#+DATE: 2026-01-28 + +* Overview + +Three parametric EQ presets targeting the Harman frequency response curve, formatted for EasyEffects (PipeWire). + +| Preset File | Headphone | Source | Bands | Preamp | +|-----------------------------------+------------------------------+----------------------------+-------+---------| +| dt770-pro-250-harman-eq.json | Beyerdynamic DT 770 Pro 250 | oratory1990 (hand-tuned) | 9 | -4.7 dB | +| pxc-550-ii-harman-eq.json | Sennheiser PXC 550-II | AutoEQ / oratory1990 meas. | 10 | -3.0 dB | +| pixel-buds-pro-2-harman-eq.json | Google Pixel Buds Pro 2 | AutoEQ / DHRME meas. | 10 | -2.8 dB | + +* Prerequisites + +- PipeWire (replaces PulseAudio) +- pipewire-pulse +- EasyEffects (~sudo pacman -S easyeffects~) + +* Programmatic Install + +#+begin_src sh +./easyeffects-eq-presets.sh install +#+end_src + +Or manually: + +#+begin_src sh +mkdir -p ~/.config/easyeffects/output +cp *.json ~/.config/easyeffects/output/ +#+end_src + +* Manual Usage + +1. Open EasyEffects (search in app launcher or run ~easyeffects~) +2. Go to the *Output* tab (speaker icon, top left) +3. Click the *Presets* dropdown (top bar) +4. Select the preset matching your current headphone +5. Switch presets when you switch headphones + +* Notes + +- EasyEffects applies EQ system-wide to whatever PipeWire output is active, including Bluetooth +- Switch presets when switching between headphones — using the wrong preset will sound worse than no EQ +- The DT 770 preset is for the 250 Ohm version specifically (other impedance variants have different frequency responses) +- The PXC 550-II and Pixel Buds Pro 2 presets are AutoEQ-generated (algorithmically computed from measurements), not hand-tuned by oratory1990 +- To start EasyEffects minimized at login: ~easyeffects --gapplication-service~ diff --git a/assets/easyeffects-eq-presets.sh b/assets/easyeffects-eq-presets.sh new file mode 100755 index 0000000..40e9cd9 --- /dev/null +++ b/assets/easyeffects-eq-presets.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash +# Install EasyEffects parametric EQ presets (Harman target) +# +# Presets: +# dt770-pro-250-harman-eq.json - Beyerdynamic DT 770 Pro 250 Ohm (oratory1990) +# pxc-550-ii-harman-eq.json - Sennheiser PXC 550-II (AutoEQ/oratory1990) +# pixel-buds-pro-2-harman-eq.json - Google Pixel Buds Pro 2 (AutoEQ/DHRME) +# +# Prerequisites: easyeffects, pipewire, pipewire-pulse +# +# Usage: ./easyeffects-eq-presets.sh [install|uninstall] + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PRESET_DIR="${HOME}/.config/easyeffects/output" + +PRESETS=( + "dt770-pro-250-harman-eq.json" + "pxc-550-ii-harman-eq.json" + "pixel-buds-pro-2-harman-eq.json" +) + +install_presets() { + # Ensure easyeffects is installed + if ! command -v easyeffects &>/dev/null; then + echo "easyeffects not found. Installing..." + sudo pacman -S --needed --noconfirm easyeffects + fi + + mkdir -p "$PRESET_DIR" + + for preset in "${PRESETS[@]}"; do + if [[ -f "${SCRIPT_DIR}/${preset}" ]]; then + cp "${SCRIPT_DIR}/${preset}" "${PRESET_DIR}/${preset}" + echo "Installed: ${preset}" + else + echo "Warning: ${preset} not found in ${SCRIPT_DIR}" >&2 + fi + done + + echo "" + echo "Presets installed to ${PRESET_DIR}" + echo "Open EasyEffects and select a preset from the dropdown." +} + +uninstall_presets() { + for preset in "${PRESETS[@]}"; do + if [[ -f "${PRESET_DIR}/${preset}" ]]; then + rm "${PRESET_DIR}/${preset}" + echo "Removed: ${preset}" + fi + done +} + +case "${1:-install}" in + install) install_presets ;; + uninstall) uninstall_presets ;; + *) + echo "Usage: $0 [install|uninstall]" >&2 + exit 1 + ;; +esac diff --git a/dotfiles/hyprland/.config/easyeffects/output/dt770-pro-250-harman-eq.json b/dotfiles/hyprland/.config/easyeffects/output/dt770-pro-250-harman-eq.json new file mode 100644 index 0000000..8774a0f --- /dev/null +++ b/dotfiles/hyprland/.config/easyeffects/output/dt770-pro-250-harman-eq.json @@ -0,0 +1,199 @@ +{ + "output": { + "blocklist": [], + "equalizer": { + "input-gain": -4.7, + "output-gain": 0.0, + "mode": "IIR", + "num-bands": 9, + "split-channels": false, + "left": { + "band0": { + "frequency": 45.0, + "gain": -4.7, + "q": 0.4, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band1": { + "frequency": 102.0, + "gain": 7.0, + "q": 5.0, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band2": { + "frequency": 134.0, + "gain": -3.8, + "q": 3.0, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band3": { + "frequency": 217.0, + "gain": 5.5, + "q": 2.3, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band4": { + "frequency": 2400.0, + "gain": -1.4, + "q": 4.0, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band5": { + "frequency": 3350.0, + "gain": 5.0, + "q": 3.0, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band6": { + "frequency": 5200.0, + "gain": 0.7, + "q": 3.0, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band7": { + "frequency": 6200.0, + "gain": -5.6, + "q": 4.0, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band8": { + "frequency": 10000.0, + "gain": -6.0, + "q": 0.7, + "type": "Hi-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + } + }, + "right": { + "band0": { + "frequency": 45.0, + "gain": -4.7, + "q": 0.4, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band1": { + "frequency": 102.0, + "gain": 7.0, + "q": 5.0, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band2": { + "frequency": 134.0, + "gain": -3.8, + "q": 3.0, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band3": { + "frequency": 217.0, + "gain": 5.5, + "q": 2.3, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band4": { + "frequency": 2400.0, + "gain": -1.4, + "q": 4.0, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band5": { + "frequency": 3350.0, + "gain": 5.0, + "q": 3.0, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band6": { + "frequency": 5200.0, + "gain": 0.7, + "q": 3.0, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band7": { + "frequency": 6200.0, + "gain": -5.6, + "q": 4.0, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band8": { + "frequency": 10000.0, + "gain": -6.0, + "q": 0.7, + "type": "Hi-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + } + } + }, + "plugins_order": [ + "equalizer" + ] + } +} diff --git a/dotfiles/hyprland/.config/easyeffects/output/pixel-buds-pro-2-harman-eq.json b/dotfiles/hyprland/.config/easyeffects/output/pixel-buds-pro-2-harman-eq.json new file mode 100644 index 0000000..056e216 --- /dev/null +++ b/dotfiles/hyprland/.config/easyeffects/output/pixel-buds-pro-2-harman-eq.json @@ -0,0 +1,219 @@ +{ + "output": { + "blocklist": [], + "equalizer": { + "input-gain": -2.8, + "output-gain": 0.0, + "mode": "IIR", + "num-bands": 10, + "split-channels": false, + "left": { + "band0": { + "frequency": 105.0, + "gain": 2.1, + "q": 0.7, + "type": "Lo-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band1": { + "frequency": 1384.0, + "gain": -4.3, + "q": 2.82, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band2": { + "frequency": 670.0, + "gain": 1.5, + "q": 1.78, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band3": { + "frequency": 41.0, + "gain": 0.8, + "q": 1.26, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band4": { + "frequency": 4720.0, + "gain": -3.1, + "q": 6.0, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band5": { + "frequency": 10000.0, + "gain": -0.6, + "q": 0.7, + "type": "Hi-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band6": { + "frequency": 3725.0, + "gain": 2.9, + "q": 6.0, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band7": { + "frequency": 2565.0, + "gain": 1.7, + "q": 4.21, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band8": { + "frequency": 153.0, + "gain": 0.7, + "q": 2.47, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band9": { + "frequency": 6024.0, + "gain": 0.7, + "q": 4.95, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + } + }, + "right": { + "band0": { + "frequency": 105.0, + "gain": 2.1, + "q": 0.7, + "type": "Lo-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band1": { + "frequency": 1384.0, + "gain": -4.3, + "q": 2.82, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band2": { + "frequency": 670.0, + "gain": 1.5, + "q": 1.78, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band3": { + "frequency": 41.0, + "gain": 0.8, + "q": 1.26, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band4": { + "frequency": 4720.0, + "gain": -3.1, + "q": 6.0, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band5": { + "frequency": 10000.0, + "gain": -0.6, + "q": 0.7, + "type": "Hi-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band6": { + "frequency": 3725.0, + "gain": 2.9, + "q": 6.0, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band7": { + "frequency": 2565.0, + "gain": 1.7, + "q": 4.21, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band8": { + "frequency": 153.0, + "gain": 0.7, + "q": 2.47, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band9": { + "frequency": 6024.0, + "gain": 0.7, + "q": 4.95, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + } + } + }, + "plugins_order": [ + "equalizer" + ] + } +} diff --git a/dotfiles/hyprland/.config/easyeffects/output/pxc-550-ii-harman-eq.json b/dotfiles/hyprland/.config/easyeffects/output/pxc-550-ii-harman-eq.json new file mode 100644 index 0000000..c400419 --- /dev/null +++ b/dotfiles/hyprland/.config/easyeffects/output/pxc-550-ii-harman-eq.json @@ -0,0 +1,219 @@ +{ + "output": { + "blocklist": [], + "equalizer": { + "input-gain": -3.0, + "output-gain": 0.0, + "mode": "IIR", + "num-bands": 10, + "split-channels": false, + "left": { + "band0": { + "frequency": 105.0, + "gain": 2.5, + "q": 0.7, + "type": "Lo-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band1": { + "frequency": 185.0, + "gain": -3.5, + "q": 1.35, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band2": { + "frequency": 2997.0, + "gain": 3.1, + "q": 1.24, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band3": { + "frequency": 4429.0, + "gain": 3.2, + "q": 5.98, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band4": { + "frequency": 5270.0, + "gain": -5.7, + "q": 4.03, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band5": { + "frequency": 10000.0, + "gain": -2.6, + "q": 0.7, + "type": "Hi-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band6": { + "frequency": 49.0, + "gain": -0.8, + "q": 1.84, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band7": { + "frequency": 359.0, + "gain": 0.8, + "q": 2.24, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band8": { + "frequency": 248.0, + "gain": -0.9, + "q": 4.62, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band9": { + "frequency": 735.0, + "gain": 0.4, + "q": 2.9, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + } + }, + "right": { + "band0": { + "frequency": 105.0, + "gain": 2.5, + "q": 0.7, + "type": "Lo-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band1": { + "frequency": 185.0, + "gain": -3.5, + "q": 1.35, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band2": { + "frequency": 2997.0, + "gain": 3.1, + "q": 1.24, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band3": { + "frequency": 4429.0, + "gain": 3.2, + "q": 5.98, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band4": { + "frequency": 5270.0, + "gain": -5.7, + "q": 4.03, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band5": { + "frequency": 10000.0, + "gain": -2.6, + "q": 0.7, + "type": "Hi-shelf", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band6": { + "frequency": 49.0, + "gain": -0.8, + "q": 1.84, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band7": { + "frequency": 359.0, + "gain": 0.8, + "q": 2.24, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band8": { + "frequency": 248.0, + "gain": -0.9, + "q": 4.62, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + }, + "band9": { + "frequency": 735.0, + "gain": 0.4, + "q": 2.9, + "type": "Bell", + "mode": "RLC (BT)", + "slope": "x1", + "mute": false, + "solo": false + } + } + }, + "plugins_order": [ + "equalizer" + ] + } +} diff --git a/dotfiles/hyprland/.config/hypr/hyprland.conf b/dotfiles/hyprland/.config/hypr/hyprland.conf index 72178f0..2cc42e3 100644 --- a/dotfiles/hyprland/.config/hypr/hyprland.conf +++ b/dotfiles/hyprland/.config/hypr/hyprland.conf @@ -18,6 +18,7 @@ exec-once = hypridle > ~/.local/var/log/hypridle-$(date +%Y-%m-%d-%H%M%S).log 2> exec-once = /usr/lib/geoclue-2.0/demos/agent exec-once = gammastep > ~/.local/var/log/gammastep-$(date +%Y-%m-%d-%H%M%S).log 2>&1 exec-once = blueman-applet +exec-once = easyeffects --gapplication-service exec-once = /usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP exec-once = mpd |
