github.com/hrntknr/ntf@v1.0.2-0.20220725163249-d52a7861d93d/utils.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "log" 6 "os" 7 "os/user" 8 "strings" 9 "time" 10 11 "github.com/adrg/xdg" 12 "gopkg.in/yaml.v2" 13 ) 14 15 func getConfig() (map[string]interface{}, error) { 16 homeDir, err := os.UserHomeDir() 17 if err != nil { 18 return nil, err 19 } 20 configPath := []string{ 21 homeDir + "/.ntf.yml", 22 xdg.ConfigHome + "/.ntf.yml", 23 } 24 for _, path := range configPath { 25 cfg, err := tryConfig(path) 26 if err != nil { 27 log.Fatal(err) 28 } 29 if cfg != nil { 30 return cfg, nil 31 } 32 } 33 return map[string]interface{}{}, nil 34 } 35 36 func tryConfig(configPath string) (map[string]interface{}, error) { 37 if _, err := os.Stat(configPath); os.IsNotExist(err) { 38 return nil, nil 39 } 40 fp, err := os.Open(configPath) 41 if err != nil { 42 return nil, err 43 } 44 defer fp.Close() 45 46 var config map[string]interface{} 47 if err := yaml.NewDecoder(fp).Decode(&config); err != nil { 48 return nil, err 49 } 50 51 return config, nil 52 } 53 54 func getContext() (string, error) { 55 user, err := user.Current() 56 if err != nil { 57 return "", err 58 } 59 hostname, err := os.Hostname() 60 if err != nil { 61 return "", err 62 } 63 path, err := os.Getwd() 64 if err != nil { 65 return "", err 66 } 67 homeDir, err := os.UserHomeDir() 68 if err != nil { 69 return "", err 70 } 71 if strings.HasPrefix(path, homeDir) { 72 path = "~" + path[len(homeDir):] 73 } 74 return fmt.Sprintf("%s@%s:%s", user.Username, hostname, path), nil 75 } 76 77 func formatDuration(d time.Duration) string { 78 if d.Seconds() < 60 { 79 return fmt.Sprintf("%ds", int(d.Seconds())) 80 } 81 if d.Minutes() < 60 { 82 return fmt.Sprintf("%dm %ds", int(d.Minutes()), int(d.Seconds())-int(d.Minutes())*60) 83 } 84 if d.Hours() < 24 { 85 return fmt.Sprintf("%dh %dm %ds", int(d.Hours()), int(d.Minutes())-int(d.Hours())*60, int(d.Seconds())-int(d.Minutes())*60) 86 } 87 return fmt.Sprintf("%dd %dh %dm %ds", int(d.Hours())/24, int(d.Hours())-int(d.Hours())/24*24, int(d.Minutes())-int(d.Hours())*60, int(d.Seconds())-int(d.Minutes())*60) 88 }