diff --git a/debug/debug.go b/debug/debug.go index 315d56e..f350124 100644 --- a/debug/debug.go +++ b/debug/debug.go @@ -24,6 +24,7 @@ import ( "os" "os/user" "path/filepath" + "runtime" "runtime/debug" "time" @@ -31,11 +32,27 @@ import ( ) var writer io.Writer -var RecoverPrettyPanic bool +var RecoverPrettyPanic bool = true var DeadlockDetection bool var WriteLogs bool var OnRecover func() -var LogDirectory = filepath.Join(os.TempDir(), "gomuks-"+getUname()) +var LogDirectory = GetUserDebugDir() + +func GetUserDebugDir() string { + if runtime.GOOS == "windows" || runtime.GOOS == "darwin" { + return filepath.Join(os.TempDir(), "gomuks-"+getUname()) + } + // See https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html + if xdgStateHome := os.Getenv("XDG_STATE_HOME"); xdgStateHome != "" { + return filepath.Join(xdgStateHome, "gomuks") + } + home := os.Getenv("HOME") + if home == "" { + fmt.Println("XDG_STATE_HOME and HOME are both unset") + os.Exit(1) + } + return filepath.Join(home, ".local", "state", "gomuks") +} func getUname() string { currUser, err := user.Current() diff --git a/main.go b/main.go index 3083683..58401b5 100644 --- a/main.go +++ b/main.go @@ -63,13 +63,10 @@ func main() { debug.LogDirectory = debugDir } debugLevel := strings.ToLower(os.Getenv("DEBUG")) - if debugLevel != "0" && debugLevel != "f" && debugLevel != "false" { - debug.WriteLogs = true - debug.RecoverPrettyPanic = true - } if debugLevel == "1" || debugLevel == "t" || debugLevel == "true" { debug.RecoverPrettyPanic = false debug.DeadlockDetection = true + debug.WriteLogs = true } debug.Initialize() defer debug.Recover()