home.go

 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}