settings API

settings

package

API reference for the settings package.

S
struct

Config

settings/config.go:21-34
type Config struct

Fields

Name Type Description
ApxPath string json:"apxPath"
DistroboxPath string json:"distroboxPath"
StorageDriver string json:"storageDriver"
UserApxPath string
ApxStoragePath string
StacksPath string
UserStacksPath string
PkgManagersPath string
UserPkgManagersPath string
F
function

GetApxDefaultConfig

Returns

error
settings/config.go:36-61
func GetApxDefaultConfig() (*Config, error)

{
	config, err := conf.NewBuilder[Config]("apx").
		WithType("json").
		WithOptional(true).
		Build()
	if err != nil {
		return nil, err
	}

	distroboxPath := config.DistroboxPath

	err = TestFile(distroboxPath)
	if err != nil {
		if os.IsNotExist(err) {
			path, _ := LookPath("distrobox")
			distroboxPath = path
		}
	}

	Cnf := NewApxConfig(
		config.ApxPath,
		distroboxPath,
		config.StorageDriver,
	)
	return Cnf, nil
}
F
function

NewApxConfig

Parameters

apxPath
string
distroboxPath
string
storageDriver
string

Returns

settings/config.go:63-92
func NewApxConfig(apxPath, distroboxPath, storageDriver string) *Config

{
	userDataDir, err := UserDataDir()
	if err != nil {
		panic(err)
	}

	Cnf := &Config{
		// Common
		ApxPath:       apxPath,
		DistroboxPath: distroboxPath,
		StorageDriver: storageDriver,

		// Virtual
		ApxStoragePath:      "",
		UserApxPath:         "",
		StacksPath:          "",
		UserStacksPath:      "",
		PkgManagersPath:     "",
		UserPkgManagersPath: "",
	}

	Cnf.UserApxPath = filepath.Join(userDataDir, "apx")
	Cnf.ApxStoragePath = filepath.Join(Cnf.UserApxPath, "storage")
	Cnf.StacksPath = filepath.Join(Cnf.ApxPath, "stacks")
	Cnf.UserStacksPath = filepath.Join(Cnf.UserApxPath, "stacks")
	Cnf.PkgManagersPath = filepath.Join(Cnf.ApxPath, "package-managers")
	Cnf.UserPkgManagersPath = filepath.Join(Cnf.UserApxPath, "package-managers")

	return Cnf
}
F
function

UserDataDir

Returns

string
error
settings/config.go:94-105
func UserDataDir() (string, error)

{
	dir := os.Getenv("XDG_DATA_HOME")
	if dir != "" {
		return dir, nil
	}

	userHome, err := os.UserHomeDir()
	if err != nil {
		return "", err
	}
	return filepath.Join(userHome, ".local", "share"), nil
}
F
function

IsFlatpak

Returns

bool
settings/config.go:107-110
func IsFlatpak() bool

{
	id := os.Getenv("FLATPAK_ID")
	return id != ""
}
F
function

TestFile

Parameters

path
string

Returns

error
settings/config.go:112-122
func TestFile(path string) error

{
	if IsFlatpak() {
		cmd := exec.Command("flatpak-spawn", "--host", "test", "-f", path)
		if err := cmd.Run(); err != nil {
			return os.ErrNotExist
		}
		return nil
	}
	_, err := os.Stat(path)
	return err
}
F
function

LookPath

Parameters

file
string

Returns

string
error
settings/config.go:124-134
func LookPath(file string) (string, error)

{
	if IsFlatpak() {
		cmd := exec.Command("flatpak-spawn", "--host", "which", file)
		output, err := cmd.Output()
		if err != nil {
			return "", err
		}
		return strings.TrimSpace(string(output)), nil
	}
	return exec.LookPath(file)
}