diff --git a/README.md b/README.md index 8ad9a86..9ff4e55 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,19 @@ on follow-up connections to the same server. To disable this feature entirely, pass the `--skipsync` flag. +### Custom settings directories + +If you're using an alternate release of VS Code such as VS Code Insiders, you +must specify your settings directories through the `VSCODE_CONFIG_DIR` and +`VSCODE_EXTENSIONS_DIR` environment variables. + +The following will make `sshcode` work with VS Code Insiders: + +```bash +export VSCODE_CONFIG_DIR="$HOME/.config/Code - Insiders/User" +export VSCODE_EXTENSIONS_DIR="$HOME/.vscode-insiders/extensions" +``` + ### Sync-back By default, VS Code changes on the remote server won't be synced back diff --git a/main.go b/main.go index 7548eba..67782b8 100644 --- a/main.go +++ b/main.go @@ -11,7 +11,6 @@ import ( "os/exec" "os/signal" "path/filepath" - "runtime" "strconv" "strings" "text/tabwriter" @@ -66,6 +65,11 @@ func main() { flag.Usage = func() { fmt.Printf(`Usage: %v [FLAGS] HOST [DIR] Start VS Code via code-server over SSH. + +Environment variables: + `+vsCodeConfigDirEnv+` use special VS Code settings dir. + `+vsCodeExtensionsDirEnv+` use special VS Code extensions dir. + More info: https://github.com/codercom/sshcode Arguments: @@ -336,27 +340,3 @@ func rsync(src string, dest string, sshFlags string, excludePaths ...string) err return nil } - -func configDir() (string, error) { - var path string - switch runtime.GOOS { - case "linux": - path = os.ExpandEnv("$HOME/.config/Code/User/") - case "darwin": - path = os.ExpandEnv("$HOME/Library/Application Support/Code/User/") - default: - return "", xerrors.Errorf("unsupported platform: %s", runtime.GOOS) - } - return filepath.Clean(path), nil -} - -func extensionsDir() (string, error) { - var path string - switch runtime.GOOS { - case "linux", "darwin": - path = os.ExpandEnv("$HOME/.vscode/extensions/") - default: - return "", xerrors.Errorf("unsupported platform: %s", runtime.GOOS) - } - return filepath.Clean(path), nil -} diff --git a/settings.go b/settings.go new file mode 100644 index 0000000..ad962a3 --- /dev/null +++ b/settings.go @@ -0,0 +1,46 @@ +package main + +import ( + "os" + "path/filepath" + "runtime" + + "golang.org/x/xerrors" +) + +const ( + vsCodeConfigDirEnv = "VSCODE_CONFIG_DIR" + vsCodeExtensionsDirEnv = "VSCODE_EXTENSIONS_DIR" +) + +func configDir() (string, error) { + if env, ok := os.LookupEnv(vsCodeConfigDirEnv); ok { + return os.ExpandEnv(env), nil + } + + var path string + switch runtime.GOOS { + case "linux": + path = os.ExpandEnv("$HOME/.config/Code/User/") + case "darwin": + path = os.ExpandEnv("$HOME/Library/Application Support/Code/User/") + default: + return "", xerrors.Errorf("unsupported platform: %s", runtime.GOOS) + } + return filepath.Clean(path), nil +} + +func extensionsDir() (string, error) { + if env, ok := os.LookupEnv(vsCodeExtensionsDirEnv); ok { + return os.ExpandEnv(env), nil + } + + var path string + switch runtime.GOOS { + case "linux", "darwin": + path = os.ExpandEnv("$HOME/.vscode/extensions/") + default: + return "", xerrors.Errorf("unsupported platform: %s", runtime.GOOS) + } + return filepath.Clean(path), nil +}