github.com/markusbkk/elvish@v0.0.0-20231204143114-91dc52438621/pkg/shell/paths_windows.go (about) 1 package shell 2 3 import ( 4 "fmt" 5 "os" 6 "path/filepath" 7 8 "golang.org/x/sys/windows" 9 "github.com/markusbkk/elvish/pkg/env" 10 ) 11 12 func newRCPath() (string, error) { 13 d, err := roamingAppData() 14 if err != nil { 15 return "", err 16 } 17 return filepath.Join(d, "elvish", "rc.elv"), nil 18 } 19 20 func newLibPaths() ([]string, error) { 21 local, err := localAppData() 22 if err != nil { 23 return nil, err 24 } 25 localLib := filepath.Join(local, "elvish", "lib") 26 27 roaming, err := roamingAppData() 28 if err != nil { 29 return nil, err 30 } 31 roamingLib := filepath.Join(roaming, "elvish", "lib") 32 33 return []string{roamingLib, localLib}, nil 34 } 35 36 func newDBPath() (string, error) { 37 d, err := localAppData() 38 if err != nil { 39 return "", err 40 } 41 return filepath.Join(d, "elvish", "db.bolt"), nil 42 } 43 44 func localAppData() (string, error) { 45 return windows.KnownFolderPath(windows.FOLDERID_LocalAppData, windows.KF_FLAG_CREATE) 46 } 47 48 func roamingAppData() (string, error) { 49 return windows.KnownFolderPath(windows.FOLDERID_RoamingAppData, windows.KF_FLAG_CREATE) 50 } 51 52 // getSecureRunDir stats elvish-$USERNAME under the default temp dir, creating 53 // it if it doesn't yet exist, and return the directory name. 54 func secureRunDir() (string, error) { 55 username := os.Getenv(env.USERNAME) 56 57 runDir := filepath.Join(os.TempDir(), "elvish-"+username) 58 err := os.MkdirAll(runDir, 0700) 59 if err != nil { 60 return "", fmt.Errorf("mkdir: %v", err) 61 } 62 63 return runDir, nil 64 }