valise-sh 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +152 -2
- package/README.md +99 -146
- package/bin/valise +57 -5376
- package/docs/architecture.md +77 -121
- package/docs/contrib-modules.md +172 -218
- package/docs/installation.md +137 -83
- package/docs/module-abi.md +125 -126
- package/docs/projects.md +249 -0
- package/docs/release-policy.md +68 -93
- package/docs/shared-modules.md +40 -39
- package/examples/README.md +12 -11
- package/examples/e2e/README.md +59 -66
- package/examples/e2e/bundles.tsv +6 -0
- package/examples/e2e/module.d/e2e_aliases.meta +1 -2
- package/examples/e2e/module.d/e2e_completions_bash.meta +0 -1
- package/examples/e2e/module.d/e2e_completions_zsh.meta +0 -1
- package/examples/e2e/module.d/e2e_env_setup.meta +2 -3
- package/examples/e2e/module.d/e2e_fish_features.meta +0 -1
- package/examples/e2e/module.d/e2e_generated_config.meta +1 -2
- package/examples/e2e/module.d/e2e_ksh_features.meta +0 -1
- package/examples/e2e/module.d/e2e_layer_probe.meta +1 -2
- package/examples/e2e/module.d/e2e_optional_network.meta +1 -2
- package/examples/e2e/module.d/e2e_platform_tools.meta +8 -0
- package/examples/e2e/module.d/e2e_platform_tools_bsd.meta +2 -3
- package/examples/e2e/module.d/e2e_platform_tools_darwin.meta +2 -3
- package/examples/e2e/module.d/e2e_platform_tools_linux.meta +2 -3
- package/examples/e2e/valise.conf +4 -0
- package/examples/e2e/variants.tsv +3 -0
- package/examples/local/module.d/hello_valise.meta +1 -2
- package/examples/profile-project/README.md +78 -108
- package/examples/profile-project/bundles.tsv +8 -0
- package/examples/profile-project/{shell/layers → layers}/demo/module.d/contrib_demo_greeting.meta +1 -2
- package/examples/profile-project/{shell/module.d → module.d}/greeting.meta +1 -2
- package/examples/profile-project/{shell/module.d → module.d}/profile_main.meta +0 -1
- package/examples/profile-project/{shell/modules → modules}/greeting.sh +1 -1
- package/examples/profile-project/valise.conf +4 -0
- package/examples/profile-project/variants.tsv +3 -0
- package/examples/shared/README.md +13 -34
- package/examples/shared/module.d/contrib_shared_paths.meta +2 -3
- package/examples/shared/module.d/contrib_shared_umask.meta +1 -2
- package/examples/shared/modules/shared/contrib_shared_paths.sh +2 -2
- package/lib/capabilities.sh +40 -13
- package/lib/cli/commands.sh +278 -0
- package/lib/cli/common.sh +326 -0
- package/lib/cli/devtools.sh +539 -0
- package/lib/cli/fish-hook.sh +986 -0
- package/lib/cli/integration.sh +337 -0
- package/lib/cli/lifecycle.sh +578 -0
- package/lib/cli/project.sh +1807 -0
- package/lib/cli/store.sh +1023 -0
- package/lib/cli/usage.sh +308 -0
- package/lib/compiler.awk +11 -4
- package/lib/fish/loader.fish +69 -9
- package/lib/fish/metadata.fish +49 -5
- package/lib/fish/profile.fish +170 -0
- package/lib/loader.sh +6 -8
- package/lib/metadata.sh +111 -5
- package/manifests/parser-support.tsv +2 -2
- package/module.d/valise_editor.meta +9 -0
- package/module.d/valise_history.meta +9 -0
- package/module.d/valise_pager.meta +9 -0
- package/module.d/valise_path.meta +9 -0
- package/module.d/{platform_bsd.meta → valise_platform_bsd.meta} +3 -4
- package/module.d/{platform_linux.meta → valise_platform_linux.meta} +3 -4
- package/module.d/{platform_macos.meta → valise_platform_macos.meta} +3 -4
- package/module.d/{platform_posix.meta → valise_platform_posix.meta} +2 -3
- package/module.d/valise_xdg.meta +9 -0
- package/modules/system/{contrib_editor.sh → valise_editor.sh} +2 -2
- package/modules/system/{contrib_history.sh → valise_history.sh} +2 -2
- package/modules/system/{contrib_pager.sh → valise_pager.sh} +2 -2
- package/modules/system/{contrib_path.sh → valise_path.sh} +3 -3
- package/modules/system/{contrib_xdg.sh → valise_xdg.sh} +2 -2
- package/package.json +91 -10
- package/docs/variants.md +0 -327
- package/entrypoints/.gitkeep +0 -0
- package/entrypoints/fish/profile.fish +0 -99
- package/examples/e2e/build-manifest.sh +0 -138
- package/examples/local/.gitkeep +0 -0
- package/examples/profile-project/shell/release/bundle-roots +0 -9
- package/examples/profile-project/shell/release/install-variants +0 -3
- package/examples/profile-project/shell/release/module-registry.tsv +0 -4
- package/examples/profile-project/shell/release/project.conf +0 -3
- package/lib/.gitkeep +0 -0
- package/manifests/.gitkeep +0 -0
- package/module.d/.gitkeep +0 -0
- package/module.d/contrib_editor.meta +0 -10
- package/module.d/contrib_history.meta +0 -10
- package/module.d/contrib_pager.meta +0 -10
- package/module.d/contrib_path.meta +0 -10
- package/module.d/contrib_xdg.meta +0 -10
- package/modules/.gitkeep +0 -0
- /package/examples/profile-project/{shell/layers → layers}/demo/modules/shared/contrib_demo_greeting.sh +0 -0
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
name=e2e_platform_tools_bsd
|
|
2
|
-
requires=
|
|
2
|
+
requires=valise_platform_bsd
|
|
3
3
|
optional=
|
|
4
|
-
shells=
|
|
4
|
+
shells=posix bash zsh ksh
|
|
5
5
|
platforms=bsd freebsd openbsd netbsd
|
|
6
6
|
side_effect=read-only
|
|
7
7
|
exports=e2e_bsd_tools_ready
|
|
8
|
-
updates=
|
|
9
8
|
load=modules/e2e/platform_tools_bsd.sh
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
name=e2e_platform_tools_darwin
|
|
2
|
-
requires=
|
|
2
|
+
requires=valise_platform_macos
|
|
3
3
|
optional=e2e_env_setup
|
|
4
|
-
shells=
|
|
4
|
+
shells=posix bash zsh ksh
|
|
5
5
|
platforms=darwin
|
|
6
6
|
side_effect=read-only
|
|
7
7
|
exports=e2e_darwin_tools_ready
|
|
8
|
-
updates=
|
|
9
8
|
load=modules/e2e/platform_tools_darwin.sh
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
name=e2e_platform_tools_linux
|
|
2
|
-
requires=
|
|
2
|
+
requires=valise_platform_linux
|
|
3
3
|
optional=
|
|
4
|
-
shells=
|
|
4
|
+
shells=posix bash zsh ksh
|
|
5
5
|
platforms=linux
|
|
6
6
|
side_effect=read-only
|
|
7
7
|
exports=e2e_linux_tools_ready
|
|
8
|
-
updates=
|
|
9
8
|
load=modules/e2e/platform_tools_linux.sh
|
|
@@ -1,40 +1,32 @@
|
|
|
1
|
-
# profile-project: a
|
|
1
|
+
# profile-project: a small valise project
|
|
2
2
|
|
|
3
|
-
This
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
roots load, a variant that says what to leave out, and project defaults.
|
|
7
|
-
|
|
8
|
-
Everything here is plain text. There is no build script and no hand-written
|
|
9
|
-
registry. `valise` reads the metadata and generates what it needs.
|
|
3
|
+
This project has two modules of its own, one module from a provider layer, a
|
|
4
|
+
bundle, and two variants. Everything is plain text; `valise` reads the
|
|
5
|
+
metadata and generates the rest.
|
|
10
6
|
|
|
11
7
|
## What is in it
|
|
12
8
|
|
|
13
9
|
```
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
install-variants named exclusion sets
|
|
26
|
-
project.conf defaults for build and apply
|
|
10
|
+
valise.conf default bundle and variant
|
|
11
|
+
module.d/
|
|
12
|
+
profile_main.meta the root: requires greeting
|
|
13
|
+
greeting.meta defines greet
|
|
14
|
+
modules/
|
|
15
|
+
greeting.sh
|
|
16
|
+
layers/demo/ a provider layer
|
|
17
|
+
module.d/contrib_demo_greeting.meta
|
|
18
|
+
modules/shared/contrib_demo_greeting.sh
|
|
19
|
+
bundles.tsv the roots for bash, zsh, and ksh
|
|
20
|
+
variants.tsv default and workstation-lean
|
|
27
21
|
```
|
|
28
22
|
|
|
29
|
-
`profile_main` is a meta module: it has `requires=greeting` and no body
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
`greet`.
|
|
23
|
+
`profile_main` is a meta module: it has `requires=greeting` and no body. It
|
|
24
|
+
names what the project loads. `greeting` is an ordinary module with
|
|
25
|
+
`shells=posix`.
|
|
33
26
|
|
|
34
|
-
The layer
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
release, so it never collides with the project's own modules.
|
|
27
|
+
The layer module is named `contrib_demo_greeting`, following the
|
|
28
|
+
`contrib_<owner>_<thing>` convention. A release copies it to
|
|
29
|
+
`layers/demo/`, so it cannot collide with the project's own files.
|
|
38
30
|
|
|
39
31
|
## Build it
|
|
40
32
|
|
|
@@ -44,60 +36,38 @@ From this directory:
|
|
|
44
36
|
valise build
|
|
45
37
|
```
|
|
46
38
|
|
|
47
|
-
That compiles a plan for each supported shell and writes a release under
|
|
48
|
-
`build/release/`. The release contains:
|
|
49
|
-
|
|
50
39
|
```
|
|
51
40
|
build/release/
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
layers/demo/
|
|
60
|
-
shell/release/ registry, bundle, variants, defaults
|
|
61
|
-
shell/install/profile-release.manifest
|
|
41
|
+
valise-release.conf bundle, variant, roots, modules
|
|
42
|
+
manifest.tsv every file with its size and SHA-256
|
|
43
|
+
plans/bash.sh the compiled plan for bash
|
|
44
|
+
plans/zsh.sh
|
|
45
|
+
plans/ksh.sh
|
|
46
|
+
runtime/capabilities.sh the sp_cap_* helpers
|
|
47
|
+
module.d/, modules/ the project's modules
|
|
48
|
+
layers/demo/ the layer module
|
|
62
49
|
```
|
|
63
50
|
|
|
64
|
-
The plans are plain POSIX shell
|
|
65
|
-
|
|
51
|
+
The plans are plain POSIX shell; read one to see what will run at startup.
|
|
52
|
+
`bundles.tsv` has no `sh` row, so dash and other plain `sh` shells load
|
|
53
|
+
nothing.
|
|
66
54
|
|
|
67
55
|
## Load it
|
|
68
56
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
`apply` builds the release, installs it under your XDG data directory, and
|
|
74
|
-
writes a managed block into the startup files your shells read. It prints
|
|
75
|
-
what it changed and where.
|
|
76
|
-
|
|
77
|
-
The managed block is guarded by a source-once variable, so your login shell
|
|
78
|
-
loads the profile exactly once. It prefers the compiled plan for your shell
|
|
79
|
-
and falls back to the loader if the release has no compiled plan.
|
|
80
|
-
|
|
81
|
-
zsh does not read `~/.profile` on its own, so when zsh is present `apply`
|
|
82
|
-
writes the same managed block to `~/.zprofile`. bash reads `~/.profile` only
|
|
83
|
-
when no `~/.bash_profile` exists; `apply` never creates one, so it does not
|
|
84
|
-
shadow your `~/.profile`.
|
|
85
|
-
|
|
86
|
-
Now open a new login shell:
|
|
57
|
+
Run this in a scratch `HOME` (see the main README) unless you want it in your
|
|
58
|
+
real startup files:
|
|
87
59
|
|
|
88
60
|
```sh
|
|
89
|
-
|
|
90
|
-
greet
|
|
61
|
+
valise apply
|
|
62
|
+
bash -l -c greet
|
|
91
63
|
# hello from the valise profile project
|
|
92
64
|
```
|
|
93
65
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
To check the current state:
|
|
66
|
+
`apply` builds the release, installs it under your XDG data directory, and
|
|
67
|
+
writes a managed block into `~/.profile`, `~/.zprofile` when zsh is
|
|
68
|
+
installed, and `~/.bashrc` or `~/.zshrc` when that is your shell. It prints
|
|
69
|
+
each file it wrote. `valise apply --dry-run` prints what it would change
|
|
70
|
+
without changing it.
|
|
101
71
|
|
|
102
72
|
```sh
|
|
103
73
|
valise status
|
|
@@ -105,77 +75,77 @@ valise status
|
|
|
105
75
|
|
|
106
76
|
```
|
|
107
77
|
project: /path/to/profile-project
|
|
108
|
-
|
|
109
|
-
|
|
78
|
+
project default bundle: default
|
|
79
|
+
project default variant: default
|
|
110
80
|
integration: /home/you/.profile: managed block present
|
|
111
81
|
integration: /home/you/.zprofile: managed block present
|
|
112
|
-
|
|
113
|
-
active
|
|
114
|
-
|
|
82
|
+
active release: ad98ea2ba30bb6c6d4f08b6dec59585228cdf855b814543a37f80ee0f0518773
|
|
83
|
+
active bundle: default
|
|
84
|
+
active variant: default
|
|
85
|
+
active built by valise: 0.3.0
|
|
86
|
+
build output: /path/to/profile-project/build/release (bundle default, variant default)
|
|
115
87
|
drift: active release matches build output
|
|
116
88
|
```
|
|
117
89
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
90
|
+
Edit a module and run `valise status` again after `valise build`: the drift
|
|
91
|
+
line reports that the active release no longer matches the build.
|
|
92
|
+
|
|
93
|
+
`valise uninstall` removes the managed blocks, the Fish hook, and the
|
|
94
|
+
installed releases.
|
|
122
95
|
|
|
123
96
|
## Try a variant
|
|
124
97
|
|
|
125
|
-
|
|
126
|
-
`workstation-lean` leaves out the provider layer:
|
|
98
|
+
`workstation-lean` leaves out the layer module:
|
|
127
99
|
|
|
128
100
|
```sh
|
|
129
101
|
valise explain-variant workstation-lean
|
|
130
102
|
```
|
|
131
103
|
|
|
132
|
-
To use the lean variant, set it in `shell/release/project.conf`:
|
|
133
|
-
|
|
134
|
-
```sh
|
|
135
|
-
variant=workstation-lean
|
|
136
104
|
```
|
|
105
|
+
Variant: workstation-lean
|
|
106
|
+
Description: No provider layer
|
|
107
|
+
Excluded modules: contrib_demo_greeting@layers/demo/module.d
|
|
137
108
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
error, not a silent surprise:
|
|
143
|
-
|
|
144
|
-
```
|
|
145
|
-
ERROR: variant exclusion breaks a required dependency: profile_main requires contrib_demo_greeting
|
|
109
|
+
Per-shell impact (bundle default):
|
|
110
|
+
bash: 1 of 2 roots, 2 of 3 modules
|
|
111
|
+
zsh: 1 of 2 roots, 2 of 3 modules
|
|
112
|
+
ksh: 1 of 2 roots, 2 of 3 modules
|
|
146
113
|
```
|
|
147
114
|
|
|
115
|
+
Build it with `valise apply --variant=workstation-lean`, or set
|
|
116
|
+
`variant=workstation-lean` in `valise.conf`. An exclusion that removes a
|
|
117
|
+
module something else still requires fails the build and names both
|
|
118
|
+
modules.
|
|
119
|
+
|
|
148
120
|
## Try a bundle
|
|
149
121
|
|
|
150
|
-
`
|
|
122
|
+
`bundles.tsv` lists the roots for each shell:
|
|
151
123
|
|
|
152
124
|
```
|
|
153
|
-
default bash profile_main contrib_demo_greeting
|
|
125
|
+
default bash profile_main contrib_demo_greeting
|
|
154
126
|
```
|
|
155
127
|
|
|
156
|
-
|
|
157
|
-
`
|
|
158
|
-
|
|
128
|
+
A bare name means the project's own module when there is one, otherwise the
|
|
129
|
+
only module with that name. `name@layers/demo/module.d` names the layer's
|
|
130
|
+
copy exactly, which you need when two sources define the same name.
|
|
159
131
|
|
|
160
132
|
```sh
|
|
161
133
|
valise explain-bundles
|
|
162
134
|
```
|
|
163
135
|
|
|
164
|
-
## Check
|
|
165
|
-
|
|
166
|
-
A provider layer has rules: the `contrib_` prefix, a version, a body that
|
|
167
|
-
exists, and no dependency that escapes the layer.
|
|
136
|
+
## Check it
|
|
168
137
|
|
|
169
138
|
```sh
|
|
139
|
+
valise lint # metadata, layers, every bundle and variant, syntax
|
|
170
140
|
valise layer-lint demo
|
|
171
141
|
# layer demo: 1 module(s) validated
|
|
172
142
|
```
|
|
173
143
|
|
|
174
144
|
## Where to go next
|
|
175
145
|
|
|
176
|
-
- [
|
|
177
|
-
- [
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
- [Shared modules](../../docs/shared-modules.md)
|
|
146
|
+
- [Projects](../../docs/projects.md): bundles, variants, compile, and build.
|
|
147
|
+
- [Writing modules](../../docs/contrib-modules.md): authoring, linting, and
|
|
148
|
+
testing.
|
|
149
|
+
- [The module ABI](../../docs/module-abi.md): every metadata field.
|
|
150
|
+
- [Shared modules](../../docs/shared-modules.md): how layer modules are
|
|
181
151
|
named and owned.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
bundle shell roots
|
|
2
|
+
# Each row names a bundle, a shell (sh bash zsh ksh fish), and the
|
|
3
|
+
# space-separated root modules for that shell. A bare name means the module
|
|
4
|
+
# in module.d/, else the only module of that name; name@layers/<p>/module.d
|
|
5
|
+
# names a layer module exactly.
|
|
6
|
+
default bash profile_main contrib_demo_greeting
|
|
7
|
+
default zsh profile_main contrib_demo_greeting
|
|
8
|
+
default ksh profile_main contrib_demo_greeting
|
|
@@ -9,41 +9,20 @@ be pinned to a reviewed commit in the consuming project.
|
|
|
9
9
|
|
|
10
10
|
| Module | Version | Export | Behavior |
|
|
11
11
|
|---|---|---|---|
|
|
12
|
-
| `contrib_shared_paths` | 1.0.0 | `contrib_shared_paths_setup` | Adds `$HOME/.local/bin` and `$HOME/.go/bin` using `
|
|
12
|
+
| `contrib_shared_paths` | 1.0.0 | `contrib_shared_paths_setup` | Adds `$HOME/.local/bin` and `$HOME/.go/bin` using `valise_path_prepend`. |
|
|
13
13
|
| `contrib_shared_umask` | 1.0.0 | `contrib_shared_umask_secure` | Sets `umask 077` when explicitly called. |
|
|
14
14
|
|
|
15
15
|
The modules and their metadata are under `modules/shared/` and
|
|
16
16
|
`module.d/`. Layer-only modules use the `contrib_` prefix. The paths module
|
|
17
|
-
requires the engine's `
|
|
18
|
-
resolution from a layer into the
|
|
19
|
-
|
|
20
|
-
## Use in
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
cd examples/e2e/build/release
|
|
30
|
-
valise install
|
|
31
|
-
valise release verify
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
Then load the shared modules from a POSIX shell. The active release path
|
|
35
|
-
below uses the default XDG locations; if you set `XDG_CONFIG_HOME`, use that
|
|
36
|
-
instead.
|
|
37
|
-
|
|
38
|
-
```sh
|
|
39
|
-
_active=$(cd "$HOME/.config/valise/active" && pwd -P)
|
|
40
|
-
VALISE_MODULE_ROOT="$_active" \
|
|
41
|
-
VALISE_MODULE_PATH="$_active/layer/shared" \
|
|
42
|
-
VALISE_MODULES='e2e_layer_probe contrib_shared_umask' \
|
|
43
|
-
VALISE_MODE=strict \
|
|
44
|
-
. "$_active/entrypoints/profile.sh"
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
For a Fish example and details about provider pinning, see
|
|
48
|
-
[the end-to-end walkthrough](../e2e/README.md) and the
|
|
49
|
-
[module ABI](../../docs/module-abi.md).
|
|
17
|
+
requires the engine's `valise_path` module; this exercises dependency
|
|
18
|
+
resolution from a layer into the engine's modules.
|
|
19
|
+
|
|
20
|
+
## Use in a project
|
|
21
|
+
|
|
22
|
+
A consuming project vendors this directory as `layers/<provider>/`, for
|
|
23
|
+
example `layers/shared/`, and names the modules it wants in `bundles.tsv` or
|
|
24
|
+
in the `requires=` and `optional=` fields of its own modules. `valise build`
|
|
25
|
+
then copies only the provider modules some plan loads into the release under
|
|
26
|
+
`layers/shared/`. [The end-to-end walkthrough](../e2e/README.md) shows the
|
|
27
|
+
steps against the sample project; see the [module ABI](../../docs/module-abi.md)
|
|
28
|
+
for dependency resolution across a project and its layers.
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
name=contrib_shared_paths
|
|
2
|
-
requires=
|
|
2
|
+
requires=valise_path
|
|
3
3
|
optional=
|
|
4
|
-
shells=
|
|
4
|
+
shells=posix bash zsh ksh
|
|
5
5
|
platforms=any
|
|
6
6
|
side_effect=path-env
|
|
7
7
|
exports=contrib_shared_paths_setup
|
|
8
|
-
updates=
|
|
9
8
|
version=1.0.0
|
|
10
9
|
load=modules/shared/contrib_shared_paths.sh
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# contrib_shared_paths: team-standard development directories on PATH.
|
|
5
5
|
#
|
|
6
6
|
# Puts $HOME/.local/bin and $HOME/.go/bin on PATH through
|
|
7
|
-
#
|
|
7
|
+
# valise_path_prepend (provided by the engine's valise_path module,
|
|
8
8
|
# which this module requires), keeping PATH duplicate-free. When HOME is
|
|
9
9
|
# unset, nothing is added. Prints nothing and succeeds in every case.
|
|
10
10
|
|
|
@@ -12,5 +12,5 @@ contrib_shared_paths_setup() {
|
|
|
12
12
|
if [ -z "${HOME-}" ]; then
|
|
13
13
|
return 0
|
|
14
14
|
fi
|
|
15
|
-
|
|
15
|
+
valise_path_prepend "$HOME/.local/bin" "$HOME/.go/bin"
|
|
16
16
|
}
|