1// Package home provides utilities for dealing with the user's home directory.
2package home
3
4import (
5 "cmp"
6 "log/slog"
7 "os"
8 "path/filepath"
9 "strings"
10)
11
12var homedir, homedirErr = os.UserHomeDir()
13
14func init() {
15 if homedirErr != nil {
16 slog.Error("Failed to get user home directory", "error", homedirErr)
17 }
18}
19
20// Dir returns the user home directory.
21func Dir() string {
22 return homedir
23}
24
25// Config returns the user config directory.
26func Config() string {
27 return cmp.Or(
28 os.Getenv("XDG_CONFIG_HOME"),
29 filepath.Join(Dir(), ".config"),
30 )
31}
32
33// Short replaces the actual home path from [Dir] with `~`.
34func Short(p string) string {
35 if homedir == "" || !strings.HasPrefix(p, homedir) {
36 return p
37 }
38 return filepath.Join("~", strings.TrimPrefix(p, homedir))
39}
40
41// Long replaces the `~` with actual home path from [Dir].
42func Long(p string) string {
43 if homedir == "" || !strings.HasPrefix(p, "~") {
44 return p
45 }
46 return strings.Replace(p, "~", homedir, 1)
47}