config

package
v0.9.0 Latest Latest
Warning

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

Go to latest
Published: Jun 15, 2026 License: MIT Imports: 18 Imported by: 0

Documentation

Index

Constants

View Source
const (
	KB = 1 << 10
	MB = 1 << 20
)
View Source
const (
	ThemeAdaptive = 0
	ThemeLight    = 1
	ThemeDark     = 2
)

Variables

This section is empty.

Functions

func CategoryNames

func CategoryNames(categories []Category) []string

CategoryNames returns a slice of category names.

func CategoryOrder

func CategoryOrder() []string

CategoryOrder returns the display order of settings categories.

func EnsureDirs

func EnsureDirs() error

EnsureDirs creates all required directories

func GetDocumentsDir

func GetDocumentsDir() string

func GetDownloadsDir

func GetDownloadsDir() string

func GetKeyMapConfigPath added in v0.9.0

func GetKeyMapConfigPath() string

GetKeyMapConfigPath returns the path to the Keymaps JSON file.

func GetLogsDir

func GetLogsDir() string

GetLogsDir returns the directory for logs

func GetMusicDir

func GetMusicDir() string

func GetPicturesDir

func GetPicturesDir() string

func GetRuntimeDir

func GetRuntimeDir() string

func GetSettingsMetadata

func GetSettingsMetadata() map[string][]SettingMeta

GetSettingsMetadata returns metadata for all settings organized by category. The result is computed once and cached since metadata is static.

func GetSettingsPath

func GetSettingsPath() string

GetSettingsPath returns the path to the settings JSON file.

func GetStateDir

func GetStateDir() string

func GetSurgeDir

func GetSurgeDir() string

GetSurgeDir returns the directory for configuration files (settings.json). Linux: $XDG_CONFIG_HOME/surge or ~/.config/surge macOS: ~/Library/Application Support/surge Windows: %APPDATA%/surge

func GetSystemRuntimeDir added in v0.8.6

func GetSystemRuntimeDir() string

func GetSystemStateDir added in v0.8.6

func GetSystemStateDir() string

func GetSystemSurgeDir added in v0.8.6

func GetSystemSurgeDir() string

func GetThemesDir added in v0.8.2

func GetThemesDir() string

GetThemesDir returns the directory for themes

func GetVideosDir

func GetVideosDir() string

func Resolve added in v0.8.7

func Resolve[T any](s *Setting) T

Resolve retrieves the value of a setting converted to the expected generic type T. This is a unified, caller-agnostic function that handles all dynamic type conversions safely.

func ResolveCategoryPath

func ResolveCategoryPath(cat *Category, defaultDownloadDir string) string

ResolveCategoryPath returns the Path of a category.

func SaveKeyMap added in v0.9.0

func SaveKeyMap(k *KeyMap) error

SaveKeyMap saves the keymap configuration to file.

func SaveSettings

func SaveSettings(s *Settings) error

SaveSettings saves settings to disk atomically.

func ValidateDNSList added in v0.8.4

func ValidateDNSList(s string) error

ValidateDNSList checks if a comma-separated list of DNS servers (IP or IP:port) is valid.

Types

type BatchConfirmKeyMap added in v0.9.0

type BatchConfirmKeyMap struct {
	Confirm key.Binding
	Cancel  key.Binding
}

BatchConfirmKeyMap defines keybindings for batch import confirmation

func (BatchConfirmKeyMap) FullHelp added in v0.9.0

func (k BatchConfirmKeyMap) FullHelp() [][]key.Binding

func (BatchConfirmKeyMap) ShortHelp added in v0.9.0

func (k BatchConfirmKeyMap) ShortHelp() []key.Binding

type BugReportKeyMap added in v0.9.0

type BugReportKeyMap struct {
	Core      key.Binding
	Extension key.Binding
	Cancel    key.Binding
}

BugReportKeyMap defines keybindings for selecting bug report target.

func (BugReportKeyMap) FullHelp added in v0.9.0

func (k BugReportKeyMap) FullHelp() [][]key.Binding

func (BugReportKeyMap) ShortHelp added in v0.9.0

func (k BugReportKeyMap) ShortHelp() []key.Binding

type Category

type Category struct {
	Name        string `json:"name"`
	Description string `json:"description,omitempty"`
	Pattern     string `json:"pattern"`
	Path        string `json:"path"`
}

Category defines a download category for auto-sorting.

func DefaultCategories

func DefaultCategories() []Category

DefaultCategories returns the default set of download categories.

func GetCategoryForFile

func GetCategoryForFile(filename string, categories []Category) (*Category, error)

GetCategoryForFile returns the last matching category so user-added rules can override broader defaults that appear earlier in the list.

func (*Category) Validate

func (c *Category) Validate() error

type CategoryManagerKeyMap added in v0.9.0

type CategoryManagerKeyMap struct {
	Up     key.Binding
	Down   key.Binding
	Edit   key.Binding
	Add    key.Binding
	Delete key.Binding
	Toggle key.Binding // toggle enable/disable
	Tab    key.Binding
	Close  key.Binding
}

CategoryManagerKeyMap defines keybindings for the category manager

func (CategoryManagerKeyMap) FullHelp added in v0.9.0

func (k CategoryManagerKeyMap) FullHelp() [][]key.Binding

func (CategoryManagerKeyMap) ShortHelp added in v0.9.0

func (k CategoryManagerKeyMap) ShortHelp() []key.Binding

type CategorySettings added in v0.8.0

type CategorySettings struct {
	CategoryEnabled *Setting   `json:"category_enabled"`
	Categories      []Category `json:"categories"`
}

type DashboardKeyMap added in v0.9.0

type DashboardKeyMap struct {
	TabQueued      key.Binding
	TabActive      key.Binding
	TabDone        key.Binding
	NextTab        key.Binding
	PrevTab        key.Binding
	Add            key.Binding
	BatchImport    key.Binding
	Search         key.Binding
	Pause          key.Binding
	Refresh        key.Binding
	Delete         key.Binding
	PurgeFile      key.Binding
	Settings       key.Binding
	SpeedLimits    key.Binding
	Log            key.Binding
	ToggleHelp     key.Binding
	ReportBug      key.Binding
	OpenFile       key.Binding
	OpenFolder     key.Binding
	Quit           key.Binding
	ForceQuit      key.Binding
	CategoryFilter key.Binding
	PinTab         key.Binding
	// Navigation
	Up   key.Binding
	Down key.Binding
	// Log Navigation
	LogUp     key.Binding
	LogDown   key.Binding
	LogTop    key.Binding
	LogBottom key.Binding
	LogClose  key.Binding
}

DashboardKeyMap defines keybindings for the main dashboard

func (DashboardKeyMap) FullHelp added in v0.9.0

func (k DashboardKeyMap) FullHelp() [][]key.Binding

FullHelp returns keybindings for the expanded help view

func (DashboardKeyMap) ShortHelp added in v0.9.0

func (k DashboardKeyMap) ShortHelp() []key.Binding

ShortHelp returns keybindings to show in the mini help view

type DuplicateKeyMap added in v0.9.0

type DuplicateKeyMap struct {
	Continue key.Binding
	Focus    key.Binding
	Cancel   key.Binding
}

DuplicateKeyMap defines keybindings for duplicate warning

func (DuplicateKeyMap) FullHelp added in v0.9.0

func (k DuplicateKeyMap) FullHelp() [][]key.Binding

func (DuplicateKeyMap) ShortHelp added in v0.9.0

func (k DuplicateKeyMap) ShortHelp() []key.Binding

type ExtensionKeyMap added in v0.9.0

type ExtensionKeyMap struct {
	Confirm key.Binding
	Browse  key.Binding
	Next    key.Binding
	Prev    key.Binding
	Cancel  key.Binding
}

ExtensionKeyMap defines keybindings for extension confirmation

func (ExtensionKeyMap) FullHelp added in v0.9.0

func (k ExtensionKeyMap) FullHelp() [][]key.Binding

func (ExtensionKeyMap) ShortHelp added in v0.9.0

func (k ExtensionKeyMap) ShortHelp() []key.Binding

type ExtensionSettings added in v0.8.0

type ExtensionSettings struct {
	ExtensionPrompt     *Setting `json:"extension_prompt"`
	ChromeExtensionURL  *Setting `json:"chrome_extension_url"`
	FirefoxExtensionURL *Setting `json:"firefox_extension_url"`
	AuthToken           *Setting `json:"auth_token"`
	InstructionsURL     *Setting `json:"instructions_url"`
}

type FilePickerKeyMap added in v0.9.0

type FilePickerKeyMap struct {
	UseDir   key.Binding
	GotoHome key.Binding
	Back     key.Binding
	Forward  key.Binding
	Open     key.Binding
	Cancel   key.Binding
}

FilePickerKeyMap defines keybindings for the file picker

func (FilePickerKeyMap) FullHelp added in v0.9.0

func (k FilePickerKeyMap) FullHelp() [][]key.Binding

func (FilePickerKeyMap) ShortHelp added in v0.9.0

func (k FilePickerKeyMap) ShortHelp() []key.Binding

type GeneralSettings

type GeneralSettings struct {
	DefaultDownloadDir           *Setting `json:"default_download_dir"`
	WarnOnDuplicate              *Setting `json:"warn_on_duplicate"`
	DownloadCompleteNotification *Setting `json:"download_complete_notification"`
	AllowRemoteOpenActions       *Setting `json:"allow_remote_open_actions"`
	AutoResume                   *Setting `json:"auto_resume"`
	AutoStart                    *Setting `json:"auto_start"`
	SkipUpdateCheck              *Setting `json:"skip_update_check"`
	ClipboardMonitor             *Setting `json:"clipboard_monitor"`
	Theme                        *Setting `json:"theme"`
	ThemePath                    *Setting `json:"theme_path"`
	LogRetentionCount            *Setting `json:"log_retention_count"`
	LiveSpeedGraph               *Setting `json:"live_speed_graph"`
}

type InputKeyMap added in v0.9.0

type InputKeyMap struct {
	Tab    key.Binding
	Enter  key.Binding
	Esc    key.Binding
	Up     key.Binding
	Down   key.Binding
	Cancel key.Binding
}

InputKeyMap defines keybindings for the add download input

func (InputKeyMap) FullHelp added in v0.9.0

func (k InputKeyMap) FullHelp() [][]key.Binding

func (InputKeyMap) ShortHelp added in v0.9.0

func (k InputKeyMap) ShortHelp() []key.Binding

type KeyBindingConfig added in v0.9.0

type KeyBindingConfig struct {
	Keys []string `json:"keys"`
	Help string   `json:"help"`
}

KeyBindingConfig represents a single key binding.

type KeyMap added in v0.9.0

type KeyMap struct {
	Dashboard      DashboardKeyMap       `json:"dashboard"`
	Input          InputKeyMap           `json:"input"`
	FilePicker     FilePickerKeyMap      `json:"file_picker"`
	Duplicate      DuplicateKeyMap       `json:"duplicate"`
	Extension      ExtensionKeyMap       `json:"extension"`
	Settings       SettingsKeyMap        `json:"settings"`
	SettingsEditor SettingsEditorKeyMap  `json:"settings_editor"`
	BatchConfirm   BatchConfirmKeyMap    `json:"batch_confirm"`
	Update         UpdateKeyMap          `json:"update"`
	BugReport      BugReportKeyMap       `json:"bug_report"`
	CategoryMgr    CategoryManagerKeyMap `json:"category_mgr"`
	SpeedLimits    SpeedLimitsKeyMap     `json:"speed_limits"`
	QuitConfirm    QuitConfirmKeyMap     `json:"quit_confirm"`

	// StartupWarnings holds validation messages from the most recent LoadKeyMap call.
	// It is ignored during JSON serialization.
	StartupWarnings []string `json:"-"`
}

KeyMap defines the keybindings for the entire application

func DefaultKeyMap added in v0.9.0

func DefaultKeyMap() *KeyMap

func LoadKeyMap added in v0.9.0

func LoadKeyMap() (*KeyMap, error)

LoadKeyMap loads the keymap configuration from file.

func (*KeyMap) ApplyConfig added in v0.9.0

func (k *KeyMap) ApplyConfig(cfg *KeyMapConfig)

ApplyConfig applies configuration from KeyMapConfig to KeyMap.

func (*KeyMap) ToConfig added in v0.9.0

func (k *KeyMap) ToConfig() *KeyMapConfig

ToConfig converts KeyMap to KeyMapConfig for serialization.

func (*KeyMap) Validate added in v0.9.0

func (k *KeyMap) Validate()

Validate checks keymap for missing or invalid bindings and fills with defaults at both section and binding levels.

type KeyMapConfig added in v0.9.0

type KeyMapConfig struct {
	Dashboard      map[string]KeyBindingConfig `json:"dashboard"`
	Input          map[string]KeyBindingConfig `json:"input"`
	FilePicker     map[string]KeyBindingConfig `json:"file_picker"`
	Duplicate      map[string]KeyBindingConfig `json:"duplicate"`
	Extension      map[string]KeyBindingConfig `json:"extension"`
	Settings       map[string]KeyBindingConfig `json:"settings"`
	SettingsEditor map[string]KeyBindingConfig `json:"settings_editor"`
	BatchConfirm   map[string]KeyBindingConfig `json:"batch_confirm"`
	Update         map[string]KeyBindingConfig `json:"update"`
	BugReport      map[string]KeyBindingConfig `json:"bug_report"`
	CategoryMgr    map[string]KeyBindingConfig `json:"category_mgr"`
	SpeedLimits    map[string]KeyBindingConfig `json:"speed_limits"`
	QuitConfirm    map[string]KeyBindingConfig `json:"quit_confirm"`
}

KeyMapConfig mirrors the structure of KeyMap for configuration.

type NetworkSettings

type NetworkSettings struct {
	MaxConnectionsPerDownload *Setting `json:"max_connections_per_host"`
	MaxConcurrentDownloads    *Setting `json:"max_concurrent_downloads"`
	MaxConcurrentProbes       *Setting `json:"max_concurrent_probes"`
	UserAgent                 *Setting `json:"user_agent"`
	ProxyURL                  *Setting `json:"proxy_url"`
	CustomDNS                 *Setting `json:"custom_dns"`
	SequentialDownload        *Setting `json:"sequential_download"`
	MinChunkSize              *Setting `json:"min_chunk_size"`
	WorkerBufferSize          *Setting `json:"worker_buffer_size"`
	DialHedgeCount            *Setting `json:"dial_hedge_count"`
	GlobalRateLimit           *Setting `json:"global_rate_limit"`
	DefaultDownloadRateLimit  *Setting `json:"default_download_rate_limit"`
}

type PerformanceSettings

type PerformanceSettings struct {
	MaxTaskRetries        *Setting `json:"max_task_retries"`
	SlowWorkerThreshold   *Setting `json:"slow_worker_threshold"`
	SlowWorkerGracePeriod *Setting `json:"slow_worker_grace_period"`
	StallTimeout          *Setting `json:"stall_timeout"`
	SpeedEmaAlpha         *Setting `json:"speed_ema_alpha"`
}

type QuitConfirmKeyMap added in v0.9.0

type QuitConfirmKeyMap struct {
	Left   key.Binding
	Right  key.Binding
	Yes    key.Binding
	No     key.Binding
	Select key.Binding
	Cancel key.Binding
}

QuitConfirmKeyMap defines keybindings for the quit confirmation modal

func (QuitConfirmKeyMap) FullHelp added in v0.9.0

func (k QuitConfirmKeyMap) FullHelp() [][]key.Binding

func (QuitConfirmKeyMap) ShortHelp added in v0.9.0

func (k QuitConfirmKeyMap) ShortHelp() []key.Binding

type Setting added in v0.8.7

type Setting struct {
	Key          string `json:"key"`
	Label        string `json:"label"`
	Description  string `json:"description"`
	NeedsRestart bool   `json:"needs_restart"`
	Type         string `json:"type"` // "string", "int", "bool", "float64", "duration", "int64", "auth_token", "link"

	Value        any `json:"value"`
	DefaultValue any `json:"default_value"`

	// ValidateFunc is a custom validator for this setting.
	ValidateFunc func(val any) error `json:"-"`
}

Setting represents a single application configuration option. Note: Custom MarshalJSON/UnmarshalJSON methods on *Setting (in settings.go) serialize only the Value field. The json tags on other fields are not used during normal serialization but document the intended schema.

func (*Setting) MarshalJSON added in v0.8.7

func (s *Setting) MarshalJSON() ([]byte, error)

MarshalJSON serializes only the primitive value of this setting.

func (*Setting) Resolve added in v0.8.7

func (s *Setting) Resolve() any

Resolve returns the setting's value dynamically converted to its schema-defined target type. This ensures that unmarshaled types (like float64) are resolved back to their correct Go types (int, duration, etc.) and can be accessed safely as any.

func (*Setting) UnmarshalJSON added in v0.8.7

func (s *Setting) UnmarshalJSON(data []byte) error

UnmarshalJSON updates only the Value field of the initialized pointer.

func (*Setting) Validate added in v0.8.7

func (s *Setting) Validate(val any) error

Validate checks the given value against any custom validation rule.

type SettingMeta

type SettingMeta struct {
	Key             string // JSON key name
	Label           string // Human-readable label
	Description     string // Help text displayed in right pane
	Type            string // "string", "int", "int64", "bool", "duration", "float64", "auth_token", "link"
	RequiresRestart bool   // Whether changing this setting requires an application restart
}

SettingMeta provides metadata for a single setting (for UI rendering).

type Settings

type Settings struct {
	General     GeneralSettings     `json:"general"`
	Network     NetworkSettings     `json:"network"`
	Performance PerformanceSettings `json:"performance"`
	Categories  CategorySettings    `json:"categories"`
	Extension   ExtensionSettings   `json:"extension"`

	// Schema-driven categories list populated on initialization
	CategoriesList []*SettingsCategory `json:"-"`

	StartupWarnings []string `json:"-"`
}

func DefaultSettings

func DefaultSettings() *Settings

DefaultSettings returns a new Settings instance with sensible defaults.

func LoadSettings

func LoadSettings() (*Settings, error)

LoadSettings loads settings from disk. Returns defaults if file doesn't exist or if the JSON is corrupt, so the application can always start.

func (*Settings) Clone added in v0.8.7

func (s *Settings) Clone() *Settings

Clone returns a deep copy of the settings.

func (*Settings) FindSetting added in v0.9.0

func (s *Settings) FindSetting(categoryName, key string) *Setting

FindSetting returns a setting by its category and JSON key without using reflection.

func (*Settings) ToRuntimeConfig

func (s *Settings) ToRuntimeConfig() *types.RuntimeConfig

ToRuntimeConfig creates the engine runtime config from validated settings.

func (*Settings) Validate added in v0.8.4

func (s *Settings) Validate() []string

type SettingsCategory added in v0.8.7

type SettingsCategory struct {
	Name     string     `json:"name"`
	Settings []*Setting `json:"settings"`
}

SettingsCategory represents a group of related Setting options.

type SettingsEditorKeyMap added in v0.9.0

type SettingsEditorKeyMap struct {
	Confirm key.Binding
	Cancel  key.Binding
}

SettingsEditorKeyMap defines keybindings for editing a setting

func (SettingsEditorKeyMap) FullHelp added in v0.9.0

func (k SettingsEditorKeyMap) FullHelp() [][]key.Binding

func (SettingsEditorKeyMap) ShortHelp added in v0.9.0

func (k SettingsEditorKeyMap) ShortHelp() []key.Binding

type SettingsKeyMap added in v0.9.0

type SettingsKeyMap struct {
	Tab1      key.Binding
	Tab2      key.Binding
	Tab3      key.Binding
	Tab4      key.Binding
	Tab5      key.Binding
	NextTab   key.Binding
	PrevTab   key.Binding
	Browse    key.Binding
	Edit      key.Binding
	Up        key.Binding
	Down      key.Binding
	Reset     key.Binding
	Close     key.Binding
	ReportBug key.Binding
}

SettingsKeyMap defines keybindings for the settings view

func (SettingsKeyMap) FullHelp added in v0.9.0

func (k SettingsKeyMap) FullHelp() [][]key.Binding

func (SettingsKeyMap) ShortHelp added in v0.9.0

func (k SettingsKeyMap) ShortHelp() []key.Binding

type SpeedLimitsKeyMap added in v0.9.0

type SpeedLimitsKeyMap struct {
	Up    key.Binding
	Down  key.Binding
	Edit  key.Binding
	Reset key.Binding
	Close key.Binding
}

SpeedLimitsKeyMap defines keybindings for speed limits

func (SpeedLimitsKeyMap) FullHelp added in v0.9.0

func (k SpeedLimitsKeyMap) FullHelp() [][]key.Binding

func (SpeedLimitsKeyMap) ShortHelp added in v0.9.0

func (k SpeedLimitsKeyMap) ShortHelp() []key.Binding

type UpdateKeyMap added in v0.9.0

type UpdateKeyMap struct {
	OpenGitHub  key.Binding
	IgnoreNow   key.Binding
	NeverRemind key.Binding
}

UpdateKeyMap defines keybindings for update notification

func (UpdateKeyMap) FullHelp added in v0.9.0

func (k UpdateKeyMap) FullHelp() [][]key.Binding

func (UpdateKeyMap) ShortHelp added in v0.9.0

func (k UpdateKeyMap) ShortHelp() []key.Binding

Jump to

Keyboard shortcuts

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