settings API

settings

package

API reference for the settings package.

S
struct

Config

settings/config.go:22-35
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:37-92
func GetApxDefaultConfig() (*Config, error)

{
	userConfigDir, err := os.UserConfigDir()
	if err != nil {
		return nil, err
	}

	// dev paths
	viper.AddConfigPath("config/")

	// tests paths
	viper.AddConfigPath("../config/")

	// user paths
	viper.AddConfigPath(filepath.Join(userConfigDir, "apx/"))

	// prod paths
	viper.AddConfigPath("/etc/apx/")
	viper.AddConfigPath("/usr/share/apx/")

    // flatpak paths
    viper.AddConfigPath("/app/share/apx/")

	viper.SetConfigName("apx")
	viper.SetConfigType("json")

	err = viper.ReadInConfig()
	if err != nil {
		fmt.Printf("Unable to read config file: \n\t%s\n", err)
		os.Exit(1)
	}

	// if viper.ConfigFileUsed() != "/etc/apx/apx.json" || viper.ConfigFileUsed() != "/usr/share/apx/apx.json" {
	// 	fmt.Printf("Using config file: %s\n\n", viper.ConfigFileUsed())
	// }

	distroboxPath := viper.GetString("distroboxPath")

	err = TestFile(distroboxPath)
	if err != nil {
		if os.IsNotExist(err) {
			path, err := LookPath("distrobox")
			if err != nil {
				fmt.Printf("Unable to find distrobox in PATH.\n")
			} else {
				distroboxPath = path
			}
		}
	}

	Cnf := NewApxConfig(
		viper.GetString("apxPath"),
		distroboxPath,
		viper.GetString("storageDriver"),
	)
	return Cnf, nil
}
F
function

NewApxConfig

Parameters

apxPath
string
distroboxPath
string
storageDriver
string

Returns

settings/config.go:94-123
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:125-136
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:138-141
func IsFlatpak() bool

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

TestFile

Parameters

path
string

Returns

error
settings/config.go:143-153
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:155-165
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)
}