provisioning/taskservs/desktop/default/zed-setup.sh
2025-09-22 23:11:41 +01:00

182 lines
4.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# Zed Editor Setup Script for Desktop Environment
set -euo pipefail
log() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] ZED: $1"
}
error() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] ZED ERROR: $1" >&2
exit 1
}
# Install Zed editor
install_zed() {
local desktop_user="${DESKTOP_USER:-desktop}"
log "Installing Zed editor for user $desktop_user"
# Check architecture
local arch=$(uname -m)
case $arch in
x86_64)
log "Installing Zed for x86_64 architecture"
;;
aarch64|arm64)
log "Installing Zed for ARM64 architecture"
;;
*)
log "WARNING: Zed may not be available for $arch architecture"
return 0
;;
esac
# Download and install Zed
if command -v curl >/dev/null 2>&1; then
# Install system-wide
curl -f https://zed.dev/install.sh | sh
# Also install for the desktop user
sudo -u "$desktop_user" bash -c 'curl -f https://zed.dev/install.sh | sh'
else
error "curl not found - required for Zed installation"
fi
}
# Configure Zed for desktop user
configure_zed() {
local desktop_user="${DESKTOP_USER:-desktop}"
local desktop_home="${DESKTOP_HOME:-/home/$desktop_user}"
log "Configuring Zed editor for $desktop_user"
# Create Zed config directory
sudo -u "$desktop_user" mkdir -p "$desktop_home/.config/zed"
# Create basic Zed configuration
cat > "$desktop_home/.config/zed/settings.json" << 'EOF'
{
"assistant": {
"default_model": {
"provider": "zed.dev",
"model": "claude-3-5-sonnet-20241022"
},
"version": "2"
},
"vim_mode": false,
"ui_font_size": 16,
"buffer_font_size": 14,
"theme": {
"mode": "system",
"light": "One Light",
"dark": "One Dark"
},
"project_panel": {
"dock": "left"
},
"outline_panel": {
"dock": "right"
},
"collaboration_panel": {
"dock": "left"
},
"chat_panel": {
"dock": "right"
},
"notification_panel": {
"dock": "right"
},
"terminal": {
"dock": "bottom"
},
"git": {
"git_gutter": "tracked_files",
"inline_blame": {
"enabled": true
}
},
"lsp": {
"rust-analyzer": {
"binary": {
"path_lookup": true
}
}
},
"languages": {
"Python": {
"format_on_save": "on",
"formatter": "auto"
},
"JavaScript": {
"format_on_save": "on"
},
"TypeScript": {
"format_on_save": "on"
},
"Rust": {
"format_on_save": "on"
},
"Go": {
"format_on_save": "on"
}
},
"auto_update": true,
"telemetry": {
"diagnostics": false,
"metrics": false
}
}
EOF
# Set proper ownership
chown -R "$desktop_user:$desktop_user" "$desktop_home/.config/zed"
log "Zed configuration created"
}
# Create desktop shortcut for Zed
create_desktop_shortcut() {
local desktop_user="${DESKTOP_USER:-desktop}"
local desktop_home="${DESKTOP_HOME:-/home/$desktop_user}"
log "Creating desktop shortcut for Zed"
# Create desktop shortcut
cat > "$desktop_home/Desktop/zed.desktop" << 'EOF'
[Desktop Entry]
Version=1.0
Type=Application
Name=Zed
Comment=A high-performance, multiplayer code editor
Exec=zed %F
Icon=zed
Terminal=false
MimeType=text/plain;text/x-chdr;text/x-csrc;text/x-c++hdr;text/x-c++src;text/x-java;text/x-dsrc;text/x-pascal;text/x-perl;text/x-python;application/x-php;application/x-httpd-php3;application/x-httpd-php4;application/x-httpd-php5;application/x-ruby;text/x-tcl;text/x-tex;application/x-sh;text/x-chdr;text/x-csrc;text/css;text/html;text/xml;text/javascript;application/javascript;application/json;text/x-markdown;text/x-rust;text/x-go;
StartupNotify=true
Categories=Development;TextEditor;
Keywords=editor;development;programming;
EOF
chmod +x "$desktop_home/Desktop/zed.desktop"
chown "$desktop_user:$desktop_user" "$desktop_home/Desktop/zed.desktop"
log "Desktop shortcut created"
}
# Main function
main() {
log "Starting Zed editor setup..."
install_zed
configure_zed
create_desktop_shortcut
log "Zed editor setup completed!"
}
# Run main function if script is executed directly
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
main "$@"
fi