Add installation and uninstallation scripts with updated README instructions

Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
2026-06-02 11:03:45 +02:00
parent c96ac497f7
commit 057c84cf5d
4 changed files with 140 additions and 7 deletions
+32 -5
View File
@@ -13,7 +13,7 @@ environment's system tray.
sh -c 'curl -sL https://nextdns.io/install | sh' sh -c 'curl -sL https://nextdns.io/install | sh'
``` ```
2. **Python 3 & PyQt6**: The interface is built using Python 3 and the Qt6 1. **Python 3 & PyQt6**: The interface is built using Python 3 and the Qt6
toolkit. (This is installed by default on (K)ubuntu.) toolkit. (This is installed by default on (K)ubuntu.)
```bash ```bash
@@ -21,10 +21,34 @@ sudo apt update
sudo apt install python3 python3-pyqt6 sudo apt install python3 python3-pyqt6
``` ```
3. **Polkit Agent**: The script uses pkexec to handle start/stop commands safely. Most desktop environments (KDE, GNOME, XFCE) come with this pre-installed. 1. **Polkit Agent**: The script uses pkexec to handle start/stop commands safely. Most desktop environments (KDE, GNOME, XFCE) come with this pre-installed.
## Installation ## Installation
Preferred (single command):
```bash
./install.sh
```
Enable autostart during install:
```bash
./install.sh --autostart
```
## Uninstall
```bash
./uninstall.sh
```
Preview what would be removed:
```bash
./uninstall.sh --dry-run
```
1. **Copy the files to your home directory:** 1. **Copy the files to your home directory:**
```bash ```bash
@@ -36,20 +60,23 @@ cp home/.local/share/applications/nextdns-tray.desktop ~/.local/share/applicatio
cp home/.local/share/icons/nextdns.png ~/.local/share/icons/ cp home/.local/share/icons/nextdns.png ~/.local/share/icons/
``` ```
2. **Make the script executable** 1. **Make the script executable**
```bash ```bash
chmod +x ~/.local/bin/nextdns-tray chmod +x ~/.local/bin/nextdns-tray
``` ```
3. **(Optional) Add to Autostart**: If you want the tray to start automatically when you log in: The bundled `nextdns-tray.desktop` launcher runs `nextdns-tray` directly (via `PATH`) so it is not tied to any repository location.
If your desktop session does not include `~/.local/bin` in `PATH`, use an absolute path in `~/.local/share/applications/nextdns-tray.desktop`.
1. **(Optional) Add to Autostart**: If you want the tray to start automatically when you log in:
```bash ```bash
mkdir -p ~/.config/autostart mkdir -p ~/.config/autostart
cp ~/.local/share/applications/nextdns-tray.desktop ~/.config/autostart/ cp ~/.local/share/applications/nextdns-tray.desktop ~/.config/autostart/
``` ```
### Installation (one-liner) ### Manual Installation (equivalent)
```bash ```bash
sh -c 'curl -sL https://nextdns.io/install | sh' sh -c 'curl -sL https://nextdns.io/install | sh'
@@ -1,10 +1,10 @@
[Desktop Entry] [Desktop Entry]
Comment=Manage NextDNS Service Comment=Manage NextDNS Service
Exec=/home/hans/git-repos/nextdns-linux-trayicon/venv/bin/python /home/hans/git-repos/nextdns-linux-trayicon/home/.local/bin/nextdns-tray TryExec=nextdns-tray
Exec=nextdns-tray
Icon=nextdns Icon=nextdns
MimeType= MimeType=
Name=NextDNS Tray Icon Name=NextDNS Tray Icon
Path=/home/hans/git-repos/nextdns-linux-trayicon/home/.local/bin
Terminal=false Terminal=false
Type=Application Type=Application
X-KDE-StartupNotify=false X-KDE-StartupNotify=false
Executable
+45
View File
@@ -0,0 +1,45 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SRC_BIN="$SCRIPT_DIR/home/.local/bin/nextdns-tray"
SRC_DESKTOP="$SCRIPT_DIR/home/.local/share/applications/nextdns-tray.desktop"
SRC_ICON="$SCRIPT_DIR/home/.local/share/icons/nextdns.png"
DEST_BIN="$HOME/.local/bin"
DEST_APPS="$HOME/.local/share/applications"
DEST_ICONS="$HOME/.local/share/icons"
DEST_AUTOSTART="$HOME/.config/autostart"
ENABLE_AUTOSTART=0
if [[ "${1:-}" == "--autostart" ]]; then
ENABLE_AUTOSTART=1
fi
if [[ ! -f "$SRC_BIN" || ! -f "$SRC_DESKTOP" || ! -f "$SRC_ICON" ]]; then
echo "Error: expected files were not found under the repository home/ directory."
exit 1
fi
mkdir -p "$DEST_BIN" "$DEST_APPS" "$DEST_ICONS"
install -m 0755 "$SRC_BIN" "$DEST_BIN/nextdns-tray"
install -m 0644 "$SRC_DESKTOP" "$DEST_APPS/nextdns-tray.desktop"
install -m 0644 "$SRC_ICON" "$DEST_ICONS/nextdns.png"
if [[ "$ENABLE_AUTOSTART" -eq 1 ]]; then
mkdir -p "$DEST_AUTOSTART"
install -m 0644 "$DEST_APPS/nextdns-tray.desktop" "$DEST_AUTOSTART/nextdns-tray.desktop"
fi
if command -v update-desktop-database >/dev/null 2>&1; then
update-desktop-database "$DEST_APPS" >/dev/null 2>&1 || true
fi
echo "Installed NextDNS Tray Icon to $HOME/.local"
if [[ "$ENABLE_AUTOSTART" -eq 1 ]]; then
echo "Autostart enabled"
else
echo "Autostart not enabled (use --autostart to enable)"
fi
Executable
+61
View File
@@ -0,0 +1,61 @@
#!/usr/bin/env bash
set -euo pipefail
usage() {
cat <<'EOF'
Usage:
./uninstall.sh [--dry-run]
Options:
--dry-run Show what would be removed without deleting files.
EOF
}
DRY_RUN=0
case "${1:-}" in
"") ;;
--dry-run) DRY_RUN=1 ;;
-h|--help)
usage
exit 0
;;
*)
echo "Unknown option: ${1}" >&2
usage >&2
exit 1
;;
esac
TARGETS=(
"$HOME/.local/bin/nextdns-tray"
"$HOME/.local/share/applications/nextdns-tray.desktop"
"$HOME/.local/share/icons/nextdns.png"
"$HOME/.config/autostart/nextdns-tray.desktop"
)
remove_file() {
local path="$1"
if [[ -e "$path" ]]; then
if [[ "$DRY_RUN" -eq 1 ]]; then
echo "Would remove: $path"
else
rm -f "$path"
echo "Removed: $path"
fi
else
echo "Not present: $path"
fi
}
for path in "${TARGETS[@]}"; do
remove_file "$path"
done
if [[ "$DRY_RUN" -eq 0 ]]; then
if command -v update-desktop-database >/dev/null 2>&1; then
update-desktop-database "$HOME/.local/share/applications" >/dev/null 2>&1 || true
fi
echo "Uninstall complete"
else
echo "Dry run complete"
fi