config

package
v1.8.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 3, 2026 License: AGPL-3.0 Imports: 5 Imported by: 0

Documentation

Overview

Package config centralizes OpenDeezer's user configuration (env vars + ~/.config/opendeezer files) for the bits shared between the TUI and the GUI engine (corelib): the control API and Discord Rich Presence settings.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Dir

func Dir() (string, error)

Dir is ~/.config/opendeezer (platform UserConfigDir + "opendeezer").

func IsLoopbackAddr

func IsLoopbackAddr(addr string) bool

IsLoopbackAddr reports whether a host:port binds only the loopback interface.

func LanguageSetting added in v1.8.0

func LanguageSetting() string

LanguageSetting returns ONLY the persisted language file (~/.config/opendeezer/ language.txt), ignoring $OPENDEEZER_LANG. LoadLanguage lets the env var win so a forced locale applies everywhere at startup; the in-app Language menu, however, edits and displays its own persisted selection, so it must read the file alone — otherwise a set OPENDEEZER_LANG would freeze the menu on one entry and desync its label from the locale actually applied.

func LoadDiscordAppID

func LoadDiscordAppID() string

LoadDiscordAppID returns the Discord application id for Rich Presence, from $OPENDEEZER_DISCORD_APP_ID or ~/.config/opendeezer/discord-app-id.txt. Empty disables the feature.

func LoadLanguage added in v1.8.0

func LoadLanguage() string

LoadLanguage returns the persisted UI language code (e.g. "fr", "zh"), from $OPENDEEZER_LANG or ~/.config/opendeezer/language.txt. An empty result means "auto" — the caller should fall back to locale detection. Shared across every client so the language chosen in one place (TUI, GUI) applies everywhere.

func LoadPeers

func LoadPeers() []string

LoadPeers returns manually-configured Connect peer addresses (host[:port]), from $OPENDEEZER_CONNECT_PEERS (comma-separated) and ~/.config/opendeezer/connect-peers.txt (one per line). These are merged into the device picker alongside LAN discovery, so Connect works over networks that carry no multicast/broadcast (e.g. Tailscale/VPN — unicast-only meshes).

func NormalizePeer

func NormalizePeer(addr string) (base, hostport string)

NormalizePeer turns user input ("host", "host:port", "http://host:port") into a base URL + host:port, defaulting the port to 7654. Returns ("","") if empty.

func SaveControlEnabled added in v1.5.1

func SaveControlEnabled(enabled bool, addr string) error

SaveControlEnabled persists whether the control API starts automatically, so a Settings UI can flip it without editing env vars or config files by hand. addr is the bind address to remember while enabled (typically the current LoadControl().Addr); pass "" to disable.

func SaveControlToken added in v1.5.1

func SaveControlToken(token string) error

SaveControlToken persists the control-API bearer token. "" clears it, which falls back to same-account auth on a LAN bind.

func SaveEQ added in v1.7.0

func SaveEQ(eq EQ) error

SaveEQ persists the equalizer state to eq.json in the config dir.

func SaveLanguage added in v1.8.0

func SaveLanguage(code string) error

SaveLanguage persists the UI language code. "" clears it (back to auto).

Types

type Control

type Control struct {
	Enabled     bool
	Addr        string // host:port; "" -> 127.0.0.1:7654
	Token       string // bearer token ("" = no auth, localhost only)
	SameAccount bool   // require a matching Deezer account when no token (LAN)
}

Control holds the control-API settings (remote control + MCP).

func LoadControl

func LoadControl() Control

LoadControl reads the control-API config from $OPENDEEZER_CONTROL ("1"/addr) + $OPENDEEZER_CONTROL_TOKEN, else ~/.config/opendeezer/{control.txt,control-token.txt}.

type EQ added in v1.7.0

type EQ struct {
	Enabled  bool      `json:"enabled"`
	Mono     bool      `json:"mono"`
	PreampDB float64   `json:"preampDb"`
	GainsDB  []float64 `json:"gainsDb"`
	Preset   string    `json:"preset"`
}

EQ is the persisted equalizer + mono-downmix state. It is loaded and saved by the audio engine itself (not per client), so the TUI, every GUI and the control API all share one set of settings through ~/.config/opendeezer.

func LoadEQ added in v1.7.0

func LoadEQ() (eq EQ, ok bool)

LoadEQ reads eq.json from the config dir. ok is false when the file is missing or unparseable (caller falls back to defaults).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL