aboutsummaryrefslogtreecommitdiff
path: root/files/.config/direnv/direnvrc
blob: c2340e993f92b8b946086df630b9215ecce31af4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# https://github.com/direnv/direnv/wiki/Python#poetry
layout_poetry() {
  PYPROJECT_TOML="${PYPROJECT_TOML:-pyproject.toml}"
  if [[ ! -f "$PYPROJECT_TOML" ]]; then
    log_status "No pyproject.toml found. Executing \`poetry init\` to create a \`$PYPROJECT_TOML\` first."
    poetry init --python "^$(python3 --version 2>/dev/null | cut -d ' ' -f 2 | cur -d . -f 1-2)"
  fi

  if [[ -d ".venv" ]]; then
    VIRTUAL_ENV="$(pwd)/.venv"
  else
    VIRTUAL_ENV=$(
      poetry env info --path 2>/dev/null
      true
    )
  fi

  if [[ -z $VIRTUAL_ENV || ! -d $VIRTUAL_ENV ]]; then
    log_status "No virtual environment exists. Executing \`poetry install\` to create one."
    poetry install
    VIRTUAL_ENV=$(poetry env info --path)
  fi

  PATH_add "$VIRTUAL_ENV/bin"
  export POETRY_ACTIVE=1 # or VENV_ACTIVE=1
  export VIRTUAL_ENV
}

layout_sdkman() {
  if [[ ! -s "${SDKMAN_DIR}/bin/sdkman-init.sh" ]]; then
    log_status "No sdkman found."
    return
  fi

  [[ -s "${SDKMAN_DIR}/bin/sdkman-init.sh" ]] && source "${SDKMAN_DIR}/bin/sdkman-init.sh"

  SDKMANRC="${SDKMANRC:-.sdkmanrc}"
  if [[ ! -f "$SDKMANRC" ]]; then
    log_status "No $SDKMANRC found.  Execution \`sdkman env init\`."
    sdk env init
  fi

  SDKMAN_OFFLINE_MODE=true sdk env install
}

# Create directory (bin by default) and add it to PATH
layout_bin() {
  DIR=".direnv/${1:-bin}"
  mkdir -p "$DIR"
  PATH_add "$DIR"
}

# Extended go layout
layout_go() {
  path_add GOPATH "$(direnv_layout_dir)/go"

  bindir="$(direnv_layout_dir)/go/bin"
  PATH_add "$bindir"
  export GOBIN="$bindir"

  mkdir -p "$GOPATH"
  gostate_file="$(direnv_layout_dir)/go_layout_state.txt"

  if [ -f "$gostate_file" ]; then
    if grep -q installed "$gostate_file"; then
      path_add GOROOT "$(direnv_layout_dir)/.go"
      PATH_add "$GOROOT/bin"
    fi
    return
  fi

  if command -v go >/dev/null; then
    read -rp "Go binary in path ($(command -v go)), keep using it? [Yn] "
    ans="${REPLY:-y}"
    if [ "${ans,,}" = y ]; then
      echo "use_existing" >"$gostate_file"
      return
    fi
  fi

  read -rp "Install go version ${1:-latest}? [Yn] "
  ans="${REPLY:-y}"
  if [ "${ans,,}" = n ]; then
    return
  fi

  path_add GOROOT "$(direnv_layout_dir)/.go"
  PATH_add "$GOROOT/bin"

  # Install go

  OS="$(uname -s)"
  ARCH="$(uname -m)"

  case "$OS" in
  Linux)
    case "$ARCH" in
    x86_64) ARCH=amd64 ;;
    aarch64) ARCH=arm64 ;;
    armv6 | armv7l) ARCH=armv6l ;;
    armv8) ARCH=arm64 ;;
    i686) ARCH=386 ;;
    .*386.*) ARCH=386 ;;
    esac
    PLATFORM="linux-$ARCH"
    ;;
  Darwin)
    case $ARCH in
    x86_64) ARCH=amd64 ;;
    arm64) ARCH=arm64 ;;
    esac
    PLATFORM="darwin-$ARCH"
    ;;
  esac

  if [ -z "$PLATFORM" ]; then
    echo "failed" >"$gostate_file"
    echo "Your operating system is not supported by the script."
    return
  fi

  if [ -d "$GOROOT" ]; then
    echo "failed" >"$gostate_file"
    echo "The Go install directory ($GOROOT) already exists. Exiting."
    return
  fi

  if [ $# -eq 0 ]; then
    VERSION=$(curl -sL "https://go.dev/VERSION?m=text" | head -n 1)
  else
    VERSION="$1"
  fi
  PACKAGE_NAME="$VERSION.$PLATFORM.tar.gz"

  mkdir -p "$GOROOT"

  echo "Downloading $PACKAGE_NAME ..."
  curl -sL "https://storage.googleapis.com/golang/$PACKAGE_NAME" | tar xz -C "$GOROOT" --strip-components=1

  echo "installed" >"$gostate_file"
}