9 // dataDir returns the data directory and creates it with mode 0700 when it does
10 // not exist. It is ONECHAT_DIR when that is set. Otherwise it is
11 // $XDG_DATA_HOME/onechat when XDG_DATA_HOME is an absolute path, or else
12 // ~/.local/share/onechat.
13 func dataDir() (string, error) {
14 dir := os.Getenv("ONECHAT_DIR")
17 dir, err = defaultDataDir()
23 err := os.MkdirAll(dir, 0o700)
25 return "", fmt.Errorf("create data directory: %w", err)
31 // defaultDataDir returns the data directory for an unset ONECHAT_DIR. The XDG
32 // specification says to ignore a relative XDG_DATA_HOME.
33 func defaultDataDir() (string, error) {
34 xdg := os.Getenv("XDG_DATA_HOME")
35 if filepath.IsAbs(xdg) {
36 return filepath.Join(xdg, "onechat"), nil
39 home, err := os.UserHomeDir()
41 return "", fmt.Errorf("find data directory: set ONECHAT_DIR: %w", err)
44 return filepath.Join(home, ".local", "share", "onechat"), nil