Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .env
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
CONTAINER_USER=ubuntu
CONTAINER_HOME=/home/${CONTAINER_USER}
HOST_NVIM_DIR=${HOME}/.config/nvim
15 changes: 12 additions & 3 deletions .script/build-rmcs
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
#! /bin/bash
#!/bin/bash

source /opt/ros/jazzy/setup.bash

cd ${RMCS_PATH}/rmcs_ws
cd "${RMCS_PATH}"/rmcs_ws || exit

colcon build --symlink-install --merge-install $@
[[ -x /opt/cmake/bin/cmake ]] &&
export PATH="/opt/cmake/bin:$PATH"

command -v clang &>/dev/null &&
export CC=clang

command -v clang++ &>/dev/null &&
export CXX=clang++

colcon build --symlink-install --merge-install "$@" --cmake-args -G Ninja
96 changes: 96 additions & 0 deletions .script/host/rmcs
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
#!/bin/bash

set -euo pipefail

readonly DEVELOPER_NAME="ubuntu"
readonly NVIM_PATH="/opt/nvim-linux-x86_64/bin/nvim"
readonly NVIM_PORT=6666
readonly NVIM_HOST="localhost"

function show_help() {
local project_dir="$1"
local service="$2"
echo "Usage: $(basename "$0") [path] [zsh|n|nvim|neovide|vim|ide]"
echo " Project dir: $project_dir"
echo " Service: $service"
}

function rmcs_zsh() {
local service="$1"
echo "Starting and entering container..."
docker compose up -d
docker compose exec "$service" zsh
}

function rmcs_nvim() {
local service="$1"
local timeout=10
local success=0
local port=$NVIM_PORT

echo "Starting container..."
docker compose up -d

echo "Checking available port and starting nvim headless server..."
while nc -z "$NVIM_HOST" "$port" 2>/dev/null; do
echo "Port $port is occupied, trying next..."
port=$((port + 1))
done

echo "Starting nvim server on port $port..."
docker compose exec -u "$DEVELOPER_NAME" -d "$service" \
"$NVIM_PATH" --headless --listen "$NVIM_HOST:$port"

for i in $(seq 1 $timeout); do
if nc -z "$NVIM_HOST" "$port" 2>/dev/null; then
echo "nvim server started on port $port"
success=1
break
fi
echo "Waiting for nvim server to start... ($i/$timeout)"
sleep 1
done

if [ $success -eq 1 ]; then
echo "Starting neovide..."
nohup neovide --server="$NVIM_HOST:$port" >/dev/null 2>&1 &
else
echo "nvim server failed to start within $timeout seconds, neovide not launched"
exit 1
fi
}

function main() {
local project_dir command

if [ -d "${1:-}" ]; then
project_dir="$(cd "$1" && pwd)"
command="${2:-}"
else
project_dir="$(pwd)"
command="${1:-}"
fi

cd "$project_dir" || exit 1

if [ ! -f "docker-compose.yml" ]; then
echo "Error: docker-compose.yml not found in current directory"
exit 1
fi

local service="rmcs-develop"

case "$command" in
zsh)
rmcs_zsh "$service"
;;
n | nvim | neovide | vim | ide)
rmcs_nvim "$service"
;;
*)
show_help "$project_dir" "$service"
;;
esac
}

main "$@"
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ services:
- /dev:/dev:bind
- /tmp/.X11-unix:/tmp/.X11-unix:bind
- /run/user/1000/wayland-0:/run/user/1000/wayland-0:bind
- ${HOST_NVIM_DIR}:${CONTAINER_HOME}/.config/nvim/:bind
- ~/.config/:${CONTAINER_HOME}/.config/:bind
- .:/workspaces/RMCS:bind
environment:
- DISPLAY=${DISPLAY}
Expand Down