Skip to main content
InfraGap.com Logo
Home
Getting Started
Core Concept What is a CDE? How It Works Benefits CDE Assessment Getting Started Guide
Implementation
Architecture Patterns DevContainers Language Quickstarts IDE Integration AI/ML Workloads Advanced DevContainers
Operations
Performance Optimization High Availability & DR Monitoring Capacity Planning Troubleshooting Runbooks
Security
Security Deep Dive Secrets Management Vulnerability Management Network Security IAM Guide Compliance Guide
Planning
Pilot Program Design Stakeholder Communication Risk Management Migration Guide Cost Analysis Vendor Evaluation Training Resources Team Structure Industry Guides
Resources
Tools Comparison CDE vs Alternatives Case Studies Lessons Learned Glossary FAQ

IDE Integration Deep Dive

Advanced configuration guides for VS Code Remote SSH, JetBrains Gateway, Neovim, and terminal-based workflows in Cloud Development Environments.

VS Code Remote SSH

Optimized configuration for seamless remote development

SSH Configuration (~/.ssh/config)

# CDE Workspace - Optimized for VS Code
Host cde-workspace
    HostName your-cde.company.com
    User developer
    Port 22

    # Performance optimizations
    Compression yes
    ServerAliveInterval 60
    ServerAliveCountMax 3

    # Faster connection multiplexing
    ControlMaster auto
    ControlPath ~/.ssh/sockets/%r@%h-%p
    ControlPersist 600

    # VS Code specific
    ForwardAgent yes
    AddKeysToAgent yes
    IdentityFile ~/.ssh/cde_key

    # Disable strict host checking for dynamic IPs
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
    LogLevel ERROR

Note: Create the sockets directory: mkdir -p ~/.ssh/sockets

VS Code Settings (settings.json)

{
  // Remote SSH optimizations
  "remote.SSH.remotePlatform": {
    "cde-workspace": "linux"
  },
  "remote.SSH.connectTimeout": 60,
  "remote.SSH.showLoginTerminal": true,
  "remote.SSH.useLocalServer": false,

  // Performance settings
  "remote.SSH.localServerDownload": "off",
  "remote.SSH.remoteServerListenOnSocket": true,

  // File watcher optimization
  "files.watcherExclude": {
    "**/node_modules/**": true,
    "**/.git/objects/**": true,
    "**/vendor/**": true
  },

  // Search optimization
  "search.exclude": {
    "**/node_modules": true,
    "**/dist": true
  },

  // Extension sync
  "remote.SSH.defaultExtensions": [
    "ms-python.python",
    "esbenp.prettier-vscode",
    "dbaeumer.vscode-eslint"
  ]
}

Recommended Extensions for Remote Development

Remote - SSH

Core extension for remote development

Remote Explorer

Manage multiple remote connections

Settings Sync

Sync settings across workspaces

JetBrains Gateway

IntelliJ IDEA, PyCharm, WebStorm, and GoLand remote configuration

Initial Gateway Setup

Step 1: Install Gateway

  1. 1.Download JetBrains Gateway from jetbrains.com/gateway
  2. 2.Install and launch Gateway
  3. 3.Sign in with your JetBrains account
  4. 4.Select "SSH Connection" from the menu

Step 2: Configure Connection

  1. 1.Enter CDE hostname and username
  2. 2.Select SSH key authentication
  3. 3.Choose project path on remote
  4. 4.Select IDE (IntelliJ, PyCharm, etc.)

Performance Tuning

# ~/.config/JetBrains/RemoteDev/options/other.xml
# Add these VM options for better performance:

-Xmx4096m                    # Increase heap for large projects
-XX:+UseG1GC                 # Use G1 garbage collector
-XX:MaxGCPauseMillis=200     # Limit GC pauses

# Network optimizations (on CDE server)
# Add to /etc/sysctl.conf:
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

# Indexing exclusions (idea.properties)
idea.max.intellisense.filesize=2500
idea.max.content.load.filesize=20000

Coder Gateway Plugin

If using Coder, install the official Gateway plugin for seamless workspace connection:

# Install Coder CLI
curl -L https://coder.com/install.sh | sh

# Configure Gateway plugin
# Gateway > Settings > Plugins > Search "Coder"
# Or install from: plugins.jetbrains.com/plugin/19620-coder

Neovim & Vim Configuration

Terminal-based development with full LSP support

Neovim LSP Setup for Remote

-- init.lua for remote development

-- Lazy.nvim plugin manager
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
  vim.fn.system({
    "git", "clone", "--filter=blob:none",
    "https://github.com/folke/lazy.nvim.git",
    "--branch=stable", lazypath,
  })
end
vim.opt.rtp:prepend(lazypath)

require("lazy").setup({
  -- LSP Support
  "neovim/nvim-lspconfig",
  "williamboman/mason.nvim",
  "williamboman/mason-lspconfig.nvim",

  -- Autocompletion
  "hrsh7th/nvim-cmp",
  "hrsh7th/cmp-nvim-lsp",
  "L3MON4D3/LuaSnip",

  -- Fuzzy finder
  "nvim-telescope/telescope.nvim",
  "nvim-lua/plenary.nvim",

  -- File explorer
  "nvim-tree/nvim-tree.lua",
})

-- Mason setup for LSP servers
require("mason").setup()
require("mason-lspconfig").setup({
  ensure_installed = {
    "lua_ls", "pyright", "ts_ls",
    "gopls", "rust_analyzer"
  }
})

Tmux Configuration for CDE

# ~/.tmux.conf optimized for remote

# Enable mouse support
set -g mouse on

# Increase scrollback buffer
set -g history-limit 50000

# Faster key repetition
set -s escape-time 0

# Activity monitoring
setw -g monitor-activity on
set -g visual-activity on

# Status bar with CDE info
set -g status-right '#[fg=green]#(hostname) #[fg=yellow]%H:%M'

# Resurrect sessions on reconnect
# (Install tmux-resurrect plugin)
set -g @resurrect-capture-pane-contents 'on'
set -g @continuum-restore 'on'

# Vi mode for copy
setw -g mode-keys vi
bind-key -T copy-mode-vi v send -X begin-selection
bind-key -T copy-mode-vi y send -X copy-selection

# Easy window navigation
bind -n M-h select-pane -L
bind -n M-j select-pane -D
bind -n M-k select-pane -U
bind -n M-l select-pane -R

Dotfiles & Personalization

Sync your personal configuration across all workspaces

Dotfiles Repository Structure

dotfiles/
├── install.sh          # Bootstrap script
├── .bashrc             # Bash config
├── .zshrc              # Zsh config
├── .gitconfig          # Git settings
├── .tmux.conf          # Tmux config
├── .vimrc              # Vim config
├── nvim/
│   └── init.lua        # Neovim config
├── vscode/
│   └── settings.json   # VS Code settings
└── scripts/
    └── cde-setup.sh    # CDE-specific setup

Bootstrap Script (install.sh)

#!/bin/bash
# Clone and setup dotfiles

DOTFILES="$HOME/.dotfiles"

# Clone if not exists
if [ ! -d "$DOTFILES" ]; then
  git clone https://github.com/you/dotfiles "$DOTFILES"
fi

# Symlink configs
ln -sf "$DOTFILES/.bashrc" "$HOME/.bashrc"
ln -sf "$DOTFILES/.gitconfig" "$HOME/.gitconfig"
ln -sf "$DOTFILES/.tmux.conf" "$HOME/.tmux.conf"
ln -sf "$DOTFILES/nvim" "$HOME/.config/nvim"

echo "Dotfiles installed!"

Coder

# coder.yaml template
dotfiles_uri: https://github.com/you/dotfiles
dotfiles_install_command: ./install.sh

Codespaces

// devcontainer.json
"dotfiles.repository": "you/dotfiles",
"dotfiles.targetPath": "~/.dotfiles",
"dotfiles.installCommand": "./install.sh"

Gitpod

# .gitpod.yml
tasks:
  - before: |
      git clone https://github.com/you/dotfiles ~/.dotfiles
      ~/.dotfiles/install.sh