Disable Transparency for Alacritty on CachyOS running KDE
mkdir -p ~/.config/alacritty && touch ~/.config/alacritty/alacritty.toml
nano ~/.config/alacritty/alacritty.toml
[window] opacity = 1.0 blur = false
mkdir -p ~/.config/alacritty && touch ~/.config/alacritty/alacritty.toml
nano ~/.config/alacritty/alacritty.toml
[window] opacity = 1.0 blur = false
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
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"
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
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
sudo pacman -S rustup rustup default stable
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
sudo nano /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: true
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
sudo netplan apply
sudo nano /etc/sysctl.conf
# Disable IPv6 globally net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1
sudo sysctl -p
Using Registry Editor (regedit) – for all Windows Editions
Press Windows + R, type regedit, and press Enter to open the Registry Editor.
Navigate to HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\NetworkConnectivityStatusIndicator. If the NetworkConnectivityStatusIndicator key does not exist, right-click on the Windows key, select New > Key, and name it exactly that.
In the right pane, right-click and select New > DWORD (32-bit) Value.
Create the following two values and set their data to 1:
NoActiveProbe
DisablePassivePolling
Restart your computer for the changes to take effect.
This method uses a command to forcefully stop the auto-configuration feature.
Search for “Command Prompt”, right-click it, and select Run as administrator.
To disable the automatic configuration, run: netsh wlan set autoconfig enable=no interface="Wi-Fi".
To re-enable it later, simply change no to yes in the same command.
hosts FileThis method is complex and not recommended for the average user as it involves running a local web server to “trick” Windows into thinking the NCSI tests are passing.
Edit the hosts file (C:\Windows\System32\drivers\etc\hosts) and add these lines: 127.0.0.1 www.msftconnecttest.com and 127.0.0.1 www.msftncsi.com.
Run a local web server (like XAMPP) that responds to these requests.