Install codebase-memory-mcp

One-line install (macOS / Linux):

curl -fsSL https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.sh | bash

With graph visualization UI:

curl -fsSL https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.sh | bash -s -- --ui

Windows (PowerShell):

# 1. Download the installer
Invoke-WebRequest -Uri https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.ps1 -OutFile install.ps1

# 2. (Optional but recommended) Inspect the script
notepad install.ps1

# 3. Run it
.\install.ps1

Options: --ui (graph visualization), --skip-config (binary only, no agent setup), --dir=<path> (custom location).

Restart your coding agent. Say “Index this project” — done.

Graph Visualization UI

If you downloaded the ui variant:

codebase-memory-mcp --ui=true --port=9749

Open http://localhost:9749 in your browser. The UI runs as a background thread alongside the MCP server — it’s available whenever your agent is connected.

Auto-Index

Enable automatic indexing on MCP session start:

codebase-memory-mcp config set auto_index true

When enabled, new projects are indexed automatically on first connection. Previously-indexed projects are registered with the background watcher for ongoing git-based change detection. Configurable file limit: config set auto_index_limit 50000.

Keeping Up to Date

codebase-memory-mcp update

The MCP server also checks for updates on startup and notifies on the first tool call if a newer release is available.

Uninstall

codebase-memory-mcp uninstall

Removes all agent configs, skills, hooks, and instructions. Does not remove the binary or SQLite databases.

Add “Open in Alacritty” right-click context menu option in KDE CachyOS

mkdir -p ~/.local/share/kio/servicemenus/
nano ~/.local/share/kio/servicemenus/alacritty_here.desktop
[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin
MimeType=inode/directory;
Actions=openAlacrittyHere;
X-KDE-Priority=TopLevel
X-KDE-Protocols=file

[X-Action-Collection]
Name=AlacrittyActions

[Desktop Action openAlacrittyHere]
Name=Open Alacritty Here
Icon=Alacritty
Exec=alacritty --working-directory %f
chmod +x ~/.local/share/kio/servicemenus/alacritty_here.desktop
killall dolphin && dolphin & disown

 

One-time set date/time on Ubuntu without NTP, using proxychains

set-time-once.sh
#!/usr/bin/env bash

set -euo pipefail

# ============================================================
# One-time Ubuntu date/time setter without NTP
# Uses HTTP Date header through proxychains/proxychains4
# ============================================================

# Optional timezone.
# Change this if needed.
TIMEZONE="Asia/Tehran"

# HTTP URLs only. Avoid HTTPS because wrong system time can break TLS validation.
URLS=(
  "http://www.google.com/generate_204"
  "http://example.com"
  "http://neverssl.com"
  "http://cloudflare.com"
)

# ------------------------------------------------------------
# Check root
# ------------------------------------------------------------
if [[ "$EUID" -ne 0 ]]; then
  echo "Please run as root:"
  echo "sudo $0"
  exit 1
fi

# ------------------------------------------------------------
# Find proxychains command
# ------------------------------------------------------------
if command -v proxychains4 >/dev/null 2>&1; then
  PROXYCHAINS="proxychains4"
elif command -v proxychains >/dev/null 2>&1; then
  PROXYCHAINS="proxychains"
else
  echo "Error: proxychains or proxychains4 not found."
  echo "Install it first, for example:"
  echo "sudo apt install proxychains4"
  exit 1
fi

# ------------------------------------------------------------
# Find curl
# ------------------------------------------------------------
if ! command -v curl >/dev/null 2>&1; then
  echo "Error: curl is not installed."
  echo "Install it first:"
  echo "sudo apt install curl"
  exit 1
fi

echo "Using: $PROXYCHAINS"
echo "Disabling NTP..."
timedatectl set-ntp false || true

echo "Setting timezone to: $TIMEZONE"
timedatectl set-timezone "$TIMEZONE"

# ------------------------------------------------------------
# Fetch Date header
# ------------------------------------------------------------
HTTP_DATE=""

for URL in "${URLS[@]}"; do
  echo "Trying: $URL"

  HTTP_DATE="$(
    "$PROXYCHAINS" -q curl -sI --max-time 20 "$URL" \
      | awk -F': ' 'tolower($1)=="date"{print $2}' \
      | tr -d '\r' \
      | tail -n 1
  )"

  if [[ -n "$HTTP_DATE" ]]; then
    echo "Received internet time: $HTTP_DATE"
    break
  fi
done

if [[ -z "$HTTP_DATE" ]]; then
  echo "Error: could not get Date header from any server."
  echo "Check your proxychains config and internet access."
  exit 1
fi

# ------------------------------------------------------------
# Set system clock
# ------------------------------------------------------------
echo "Setting system clock..."
date -s "$HTTP_DATE"

# ------------------------------------------------------------
# Save system time to hardware clock
# Ubuntu normally expects RTC/hardware clock in UTC.
# ------------------------------------------------------------
echo "Writing system time to hardware clock as UTC..."
hwclock --systohc --utc

echo
echo "Done ✅"
echo
echo "Current system time:"
date

echo
echo "timedatectl status:"
timedatectl

echo
echo "Hardware clock:"
hwclock --show
chmod +x set-time-once.sh
sudo ./set-time-once.sh

For a different timezone

Edit this line:

TIMEZONE="Europe/Berlin"

For example:

TIMEZONE="Europe/Berlin"

or:

TIMEZONE="UTC"

 

Cross-Compile Rust Application for Linux, Windows, and Android Termux on EndeavourOS

sudo pacman -S rustup
rustup default stable
# 🐧 Linux (Already default, but ensuring native architecture toolchain)
rustup target add x86_64-unknown-linux-gnu

# 🪟 Windows (Using GNU/MinGW ABI for easy cross-compiling from Linux)
rustup target add x86_64-pc-windows-gnu

# 🤖 Android / Termux (armv8 / 64-bit ARM)
rustup target add aarch64-linux-android

# 🤖 Android / Termux (armv7 / 32-bit ARM)
rustup target add armv7-linux-androideabi

rustup target add x86_64-unknown-linux-musl
rustup target add wasm32-unknown-unknown

Install System Cross-Linkers

sudo pacman -S mingw-w64-gcc
yay -S android-ndk

Configure Cargo Linkers

Cargo needs to know which linker to pull when you pass a --target flag. Create or edit your global Cargo configuration file at ~/.cargo/config.toml (or create one locally inside your project folder) and add the following mapping:

# ==================== 🪟 WINDOWS TARGET ====================
[target.x86_64-pc-windows-gnu]
linker = "x86_64-w64-mingw32-gcc"
ar = "x86_64-w64-mingw32-ar"

# ==================== 🤖 ANDROID ARMV8 (64-bit ARM) ====================
# This matches: aarch64-linux-android35-clang
[target.aarch64-linux-android]
linker = "/opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android35-clang"

# ==================== 🤖 ANDROID ARMV7 (32-bit ARM) ====================
# This matches: armv7a-linux-androideabi35-clang
[target.armv7-linux-androideabi]
linker = "/opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi35-clang"

⚠️ Important NDK Note: Double-check the path inside /opt/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/. Depending on the NDK version installed, the API version number suffix at the end of the compiler name (e.g., android34-clang) might vary (like android31-clang). Change it to match what is present in your folder.

Fix the Critical Android Linker Issue

Rust cross-compilation for Android has a historic quirk: even when you specify the custom clang compiler executable above as your linker, Cargo’s internal driver often tries to pass arguments to it using standard GNU tools (strip, ar) rather than the LLVM tools inside the NDK.

To prevent compilation failures when building complex dependency crates, you must let your terminal environment know where the NDK binaries live. Add these exports to your shell script or run them right before building:

export ANDROID_NDK_HOME="/opt/android-ndk"
export PATH="$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH"

If you are using the Fish Shell, run these lines instead to set them up:

set -gx ANDROID_NDK_HOME /opt/android-ndk
set -gx PATH $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin $PATH

Building the App

# 🐧 Build for Linux
cargo build --release

# 🪟 Build for Windows (Generates a .exe in target/x86_64-pc-windows-gnu/release/)
cargo build --target x86_64-pc-windows-gnu --release

# 🤖 Build for Termux 64-bit (armv8)
cargo build --target aarch64-linux-android --release

# 🤖 Build for Termux 32-bit (armv7)
cargo build --target armv7-linux-androideabi --release

 

Run Git Commands with a Specific SSH Key

GIT_SSH_COMMAND="ssh -i /home/user/keys/project_private_key" git [any-command]

Making it Persistent for Your Session

# 1. Lock in the key for this terminal tab
export GIT_SSH_COMMAND="ssh -i /home/user/keys/project_private_key"

# 2. Run as many commands as you want freely!
git fetch
git status
git push origin feature-branch

 

Install Ghostty and Fish on EndeavourOS

sudo pacman -Syu ghostty fish

Set Fish as Your Default Shell

chsh -s $(which fish)

Configure Ghostty to Launch Fish Natively

mkdir -p ~/.config/ghostty
touch ~/.config/ghostty/config
nano ~/.config/ghostty/config
# --- Shell Execution ---
command = /usr/bin/fish

window-inherit-working-directory = false

# --- Visual Tuning (Optional Suggestions) ---
font-family = "JetBrainsMono Nerd Font"
font-size = 11
theme = dark:tomorrow-night,light:tomorrow-day
window-padding-x = 10
window-padding-y = 10
nano ~/.config/fish/config.fish

Add this snippet to the top of the file to force Ghostty’s terminal environment mapping:

if set -q GHOSTTY_RESOURCES_DIR
    source "$GHOSTTY_RESOURCES_DIR/shell-integration/fish/vendor_conf.d/ghostty-shell-integration.fish"
end

First-Time Fish Setup

fish_config