diff --git a/.cross_compile.sh b/.cross_compile.sh index a3ee9d3..de85920 100644 --- a/.cross_compile.sh +++ b/.cross_compile.sh @@ -4,14 +4,14 @@ # @Date: 2022-10-20 02:19:06 # @LastEditors: Vincent Yang # @LastEditTime: 2024-03-20 16:52:40 - # @FilePath: /DeepLX/.cross_compile.sh + # @FilePath: /DLX/.cross_compile.sh # @Telegram: https://t.me/missuo # # Copyright © 2022 by Vincent, All Rights Reserved. ### set -e -DIST_PREFIX="deeplx" +DIST_PREFIX="dlx" DEBUG_MODE=${2} TARGET_DIR="dist" PLATFORMS="darwin/amd64 darwin/arm64 linux/386 linux/amd64 linux/arm64 linux/mips openbsd/amd64 openbsd/arm64 freebsd/amd64 freebsd/arm64 windows/386 windows/amd64" diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index 8a30021..5ab9de9 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -8,7 +8,7 @@ on: - 'v*' env: - DOCKER_IMAGE_NAME: missuo/deeplx + DOCKER_IMAGE_NAME: missuo/dlx GHCR_IMAGE_NAME: ${{ github.repository }} DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 6a7c42e..d3ab36c 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -41,7 +41,7 @@ jobs: CGO_ENABLED: "0" run: | mkdir -p dist - BINARY="dist/deeplx_${GOOS}_${GOARCH}" + BINARY="dist/dlx_${GOOS}_${GOARCH}" if [ "${GOOS}" = "windows" ]; then BINARY="${BINARY}.exe" fi @@ -50,7 +50,7 @@ jobs: - name: Upload artifact uses: actions/upload-artifact@v4 with: - name: deeplx_${{ matrix.goos }}_${{ matrix.goarch }} + name: dlx_${{ matrix.goos }}_${{ matrix.goarch }} path: dist/* if-no-files-found: error diff --git a/.gitignore b/.gitignore index 441b910..d23b9a4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ -DeepLX +DLX +dlx # macOS Finder metadata .DS_Store diff --git a/Dockerfile b/Dockerfile index 7ae590b..fe40b8e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,13 @@ FROM golang:1.25 AS builder -WORKDIR /go/src/github.com/OwO-Network/DeepLX +WORKDIR /go/src/github.com/OwO-Network/DLX COPY . . RUN go get -d -v ./ -RUN CGO_ENABLED=0 go build -a -installsuffix cgo -o deeplx . +RUN CGO_ENABLED=0 go build -a -installsuffix cgo -o dlx . FROM alpine:latest WORKDIR /app -RUN addgroup -S deeplx && adduser -h /app -G deeplx -SH deeplx -USER deeplx:deeplx -COPY --from=builder --chown=deeplx:deeplx /go/src/github.com/OwO-Network/DeepLX/deeplx /app/deeplx +RUN addgroup -S dlx && adduser -h /app -G dlx -SH dlx +USER dlx:dlx +COPY --from=builder --chown=dlx:dlx /go/src/github.com/OwO-Network/DLX/dlx /app/dlx EXPOSE 1188 -ENTRYPOINT ["/app/deeplx"] +ENTRYPOINT ["/app/dlx"] diff --git a/README.md b/README.md index b13306a..c7b6089 100644 --- a/README.md +++ b/README.md @@ -2,32 +2,63 @@ * @Author: Vincent Young * @Date: 2022-10-18 07:32:29 * @LastEditors: Vincent Yang - * @LastEditTime: 2024-11-30 19:48:00 - * @FilePath: /DeepLX/README.md + * @LastEditTime: 2026-07-08 00:00:00 + * @FilePath: /DLX/README.md * @Telegram: https://t.me/missuo * * Copyright © 2022 by Vincent, All Rights Reserved. --> -[![GitHub Workflow][1]](https://github.com/OwO-Network/DeepLX/actions) -[![Go Version][2]](https://github.com/OwO-Network/DeepLX/blob/main/go.mod) -[![Go Report][3]](https://goreportcard.com/badge/github.com/OwO-Network/DeepLX) -[![GitHub License][4]](https://github.com/OwO-Network/DeepLX/blob/main/LICENSE) -[![Docker Pulls][5]](https://hub.docker.com/r/missuo/deeplx) -[![Releases][6]](https://github.com/OwO-Network/DeepLX/releases) +# DLX -[1]: https://img.shields.io/github/actions/workflow/status/OwO-Network/DeepLX/release.yaml?logo=github -[2]: https://img.shields.io/github/go-mod/go-version/OwO-Network/DeepLX?logo=go -[3]: https://goreportcard.com/badge/github.com/OwO-Network/DeepLX -[4]: https://img.shields.io/github/license/OwO-Network/DeepLX -[5]: https://img.shields.io/docker/pulls/missuo/deeplx?logo=docker -[6]: https://img.shields.io/github/v/release/OwO-Network/DeepLX?logo=smartthings +[![GitHub Workflow][1]](https://github.com/OwO-Network/DLX/actions) +[![Go Version][2]](https://github.com/OwO-Network/DLX/blob/main/go.mod) +[![Go Report][3]](https://goreportcard.com/badge/github.com/OwO-Network/DLX) +[![GitHub License][4]](https://github.com/OwO-Network/DLX/blob/main/LICENSE) +[![Docker Pulls][5]](https://hub.docker.com/r/missuo/dlx) +[![Releases][6]](https://github.com/OwO-Network/DLX/releases) -## How to use +[1]: https://img.shields.io/github/actions/workflow/status/OwO-Network/DLX/release.yaml?logo=github +[2]: https://img.shields.io/github/go-mod/go-version/OwO-Network/DLX?logo=go +[3]: https://goreportcard.com/badge/github.com/OwO-Network/DLX +[4]: https://img.shields.io/github/license/OwO-Network/DLX +[5]: https://img.shields.io/docker/pulls/missuo/dlx?logo=docker +[6]: https://img.shields.io/github/v/release/OwO-Network/DLX?logo=smartthings -> \[!TIP] -> -> Learn more about [📘 Using DeepLX](https://deeplx.owo.network) by checking it out. +> [!IMPORTANT] +> **Disclaimer:** DLX is an independent, open-source project. It is **not** affiliated with, endorsed by, or sponsored by DeepL SE in any way. "DeepL" is a registered trademark of DeepL SE. Any reference to DeepL in this repository is made solely to describe interoperability with the DeepL translation service. + +DLX is a self-hosted translation API server written in Go. It exposes a simple HTTP API on port `1188`. + +## Usage + +### Docker + +```bash +docker run -d -p 1188:1188 ghcr.io/owo-network/dlx:latest +``` + +Or use the provided [`compose.yaml`](compose.yaml): + +```bash +docker compose up -d +``` + +### Binary + +Download the binary for your platform from [Releases](https://github.com/OwO-Network/DLX/releases) and run it: + +```bash +./dlx +``` + +### Translate + +```bash +curl -X POST http://localhost:1188/translate \ + -H "Content-Type: application/json" \ + -d '{"text": "Hello, world!", "source_lang": "EN", "target_lang": "ZH"}' +``` ## Discussion Group [Telegram Group](https://t.me/+8KDGHKJCxEVkNzll) @@ -36,12 +67,12 @@ ### Contributors - - + + ## Activity ![Alt](https://repobeats.axiom.co/api/embed/5f473f85db27cb30028a2f3db7a560f3577a4860.svg "Repobeats analytics image") ## License -[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FOwO-Network%2FDeepLX.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2FOwO-Network%2FDeepLX?ref=badge_large) +[MIT](LICENSE) diff --git a/compose.yaml b/compose.yaml index eb0bd1b..5f40f2a 100644 --- a/compose.yaml +++ b/compose.yaml @@ -1,6 +1,6 @@ services: - deeplx: - image: ghcr.io/owo-network/deeplx:latest + dlx: + image: ghcr.io/owo-network/dlx:latest restart: always ports: - "1188:1188" diff --git a/deeplx.service b/dlx.service similarity index 71% rename from deeplx.service rename to dlx.service index a38c45e..1042807 100644 --- a/deeplx.service +++ b/dlx.service @@ -1,12 +1,12 @@ [Unit] -Description=DeepLX Service +Description=DLX Service After=network.target [Service] Type=simple Restart=always WorkingDirectory=/usr/bin/ -ExecStart=/usr/bin/deeplx +ExecStart=/usr/bin/dlx [Install] WantedBy=multi-user.target diff --git a/go.mod b/go.mod index 7de87bb..1315651 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/OwO-Network/DeepLX +module github.com/OwO-Network/DLX go 1.25.0 diff --git a/img/6a48ba28621f2465028f0.png b/img/6a48ba28621f2465028f0.png deleted file mode 100644 index e08fe30..0000000 Binary files a/img/6a48ba28621f2465028f0.png and /dev/null differ diff --git a/img/c5c19dd89df6fae1a256d.png b/img/c5c19dd89df6fae1a256d.png deleted file mode 100644 index 13d9845..0000000 Binary files a/img/c5c19dd89df6fae1a256d.png and /dev/null differ diff --git a/install.sh b/install.sh index 44c5615..3ed2bc7 100644 --- a/install.sh +++ b/install.sh @@ -1,21 +1,21 @@ ### # @Author: Vincent Young # @Date: 2023-02-12 09:53:21 - # @LastEditors: Vincent Young - # @LastEditTime: 2023-02-12 10:01:57 - # @FilePath: /DeepLX/install.sh + # @LastEditors: Vincent Yang + # @LastEditTime: 2026-07-08 00:00:00 + # @FilePath: /DLX/install.sh # @Telegram: https://t.me/missuo - # - # Copyright © 2023 by Vincent, All Rights Reserved. -### + # + # Copyright © 2023 by Vincent, All Rights Reserved. +### -install_deeplx(){ - last_version=$(curl -Ls "https://api.github.com/repos/OwO-Network/DeepLX/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') +install_dlx(){ + last_version=$(curl -Ls "https://api.github.com/repos/OwO-Network/DLX/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') if [[ ! -n "$last_version" ]]; then - echo -e "${red}Failed to detect DeepLX version, probably due to exceeding Github API limitations.${plain}" + echo -e "${red}Failed to detect DLX version, probably due to exceeding Github API limitations.${plain}" exit 1 fi - echo -e "DeepLX latest version: ${last_version}, Start install..." + echo -e "DLX latest version: ${last_version}, Start install..." arch=$(uname -m) case "${arch}" in @@ -29,13 +29,13 @@ install_deeplx(){ ;; esac - wget -q -N --no-check-certificate -O /usr/bin/deeplx https://github.com/OwO-Network/DeepLX/releases/download/${last_version}/deeplx_linux_${file_arch} + wget -q -N --no-check-certificate -O /usr/bin/dlx https://github.com/OwO-Network/DLX/releases/download/${last_version}/dlx_linux_${file_arch} - chmod +x /usr/bin/deeplx - wget -q -N --no-check-certificate -O /etc/systemd/system/deeplx.service https://raw.githubusercontent.com/OwO-Network/DeepLX/main/deeplx.service + chmod +x /usr/bin/dlx + wget -q -N --no-check-certificate -O /etc/systemd/system/dlx.service https://raw.githubusercontent.com/OwO-Network/DLX/main/dlx.service systemctl daemon-reload - systemctl enable deeplx - systemctl start deeplx + systemctl enable dlx + systemctl start dlx echo -e "Installed successfully, listening at 0.0.0.0:1188" } -install_deeplx +install_dlx diff --git a/main.go b/main.go index baba880..891134b 100644 --- a/main.go +++ b/main.go @@ -3,7 +3,7 @@ * @Date: 2023-07-01 21:45:34 * @LastEditors: Jason Lyu * @LastEditTime: 2025-04-08 13:45:00 - * @FilePath: /DeepLX/main.go + * @FilePath: /DLX/main.go * @Telegram: https://t.me/missuo * @GitHub: https://github.com/missuo * @@ -17,13 +17,13 @@ import ( "github.com/gin-gonic/gin" - "github.com/OwO-Network/DeepLX/service" + "github.com/OwO-Network/DLX/service" ) func main() { cfg := service.InitConfig() - fmt.Printf("DeepL X has been successfully launched! Listening on %v:%v\n", cfg.IP, cfg.Port) + fmt.Printf("DLX has been successfully launched! Listening on %v:%v\n", cfg.IP, cfg.Port) fmt.Println("Developed by sjlleo and missuo .") // Setting the application to release mode diff --git a/me.missuo.deeplx.plist b/me.missuo.dlx.plist similarity index 83% rename from me.missuo.deeplx.plist rename to me.missuo.dlx.plist index 055115f..6b7d34e 100644 --- a/me.missuo.deeplx.plist +++ b/me.missuo.dlx.plist @@ -3,12 +3,12 @@ Label - me.missuo.deeplx + me.missuo.dlx KeepAlive ProgramArguments - /usr/local/bin/deeplx + /usr/local/bin/dlx RunAtLoad diff --git a/service/config.go b/service/config.go index b1cb4c3..4d407f1 100644 --- a/service/config.go +++ b/service/config.go @@ -3,7 +3,7 @@ * @Date: 2024-04-23 00:39:03 * @LastEditors: Jason Lyu * @LastEditTime: 2025-04-08 13:45:00 - * @FilePath: /DeepLX/config.go + * @FilePath: /DLX/service/config.go * @Telegram: https://t.me/missuo * @GitHub: https://github.com/missuo * diff --git a/service/service.go b/service/service.go index 251d50e..cad70c2 100644 --- a/service/service.go +++ b/service/service.go @@ -3,7 +3,7 @@ * @Date: 2023-07-01 21:45:34 * @LastEditors: Jason Lyu * @LastEditTime: 2025-04-08 13:45:00 - * @FilePath: /DeepLX/main.go + * @FilePath: /DLX/service/service.go * @Telegram: https://t.me/missuo * @GitHub: https://github.com/missuo * @@ -23,7 +23,7 @@ import ( "github.com/gin-contrib/cors" "github.com/gin-gonic/gin" - "github.com/OwO-Network/DeepLX/translate" + "github.com/OwO-Network/DLX/translate" ) func authMiddleware(cfg *Config) gin.HandlerFunc { @@ -101,7 +101,7 @@ func Router(cfg *Config) *gin.Engine { r.GET("/", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "code": http.StatusOK, - "message": "DeepL Free API, Developed by sjlleo and missuo. Go to /translate with POST. http://github.com/OwO-Network/DeepLX", + "message": "DLX Translation API, Developed by sjlleo and missuo. Go to /translate with POST. https://github.com/OwO-Network/DLX", }) }) @@ -131,7 +131,7 @@ func Router(cfg *Config) *gin.Engine { return } - result, err := translate.TranslateByDeepLX(sourceLang, targetLang, translateText, tagHandling, proxyURL, "") + result, err := translate.TranslateByDLX(sourceLang, targetLang, translateText, tagHandling, proxyURL, "") if err != nil { log.Printf("Translation failed: %s", err) c.JSON(http.StatusInternalServerError, gin.H{ @@ -206,7 +206,7 @@ func Router(cfg *Config) *gin.Engine { return } - result, err := translate.TranslateByDeepLX(sourceLang, targetLang, translateText, tagHandling, proxyURL, dlSession) + result, err := translate.TranslateByDLX(sourceLang, targetLang, translateText, tagHandling, proxyURL, dlSession) if err != nil { log.Printf("Translation failed: %s", err) c.JSON(http.StatusInternalServerError, gin.H{ @@ -263,7 +263,7 @@ func Router(cfg *Config) *gin.Engine { targetLang = jsonData.TargetLang } - result, err := translate.TranslateByDeepLX("", targetLang, translateText, "", proxyURL, "") + result, err := translate.TranslateByDLX("", targetLang, translateText, "", proxyURL, "") if err != nil { log.Printf("Translation failed: %s", err) c.JSON(http.StatusInternalServerError, gin.H{ diff --git a/translate/translate.go b/translate/translate.go index e407d36..b632272 100644 --- a/translate/translate.go +++ b/translate/translate.go @@ -3,7 +3,7 @@ * @Date: 2024-09-16 11:59:24 * @LastEditors: Vincent Yang * @LastEditTime: 2026-05-22 00:00:00 - * @FilePath: /DeepLX/translate/translate.go + * @FilePath: /DLX/translate/translate.go * @Telegram: https://t.me/missuo * @GitHub: https://github.com/missuo * @@ -382,13 +382,13 @@ func callOneshot(endpoint string, body []byte, bearerToken, proxyURL string) (gj return gjson.ParseBytes(raw), resp.StatusCode, nil } -// TranslateByDeepLX performs translation via the DeepL oneshot endpoint. +// TranslateByDLX performs translation via the DeepL oneshot endpoint. // Passing dlSession switches to the Pro endpoint; the value is sent // verbatim as the Bearer token (i.e. it must be an OAuth access token, // not the legacy dl_session cookie). -func TranslateByDeepLX(sourceLang, targetLang, text string, tagHandling string, proxyURL string, dlSession string) (DeepLXTranslationResult, error) { +func TranslateByDLX(sourceLang, targetLang, text string, tagHandling string, proxyURL string, dlSession string) (DLXTranslationResult, error) { if text == "" { - return DeepLXTranslationResult{ + return DLXTranslationResult{ Code: http.StatusNotFound, Message: "No text to translate", }, nil @@ -396,21 +396,21 @@ func TranslateByDeepLX(sourceLang, targetLang, text string, tagHandling string, resolvedTarget, err := resolveTargetLang(targetLang) if err != nil { - return DeepLXTranslationResult{ + return DLXTranslationResult{ Code: http.StatusBadRequest, Message: err.Error(), }, nil } resolvedSource, err := resolveSourceLang(sourceLang) if err != nil { - return DeepLXTranslationResult{ + return DLXTranslationResult{ Code: http.StatusBadRequest, Message: err.Error(), }, nil } if n := utf8.RuneCountInString(text); n > maxFreeTextLength { - return DeepLXTranslationResult{ + return DLXTranslationResult{ Code: http.StatusRequestEntityTooLarge, Message: fmt.Sprintf("text exceeds maximum length: %d characters (anonymous oneshot limit is %d)", n, maxFreeTextLength), }, nil @@ -443,13 +443,13 @@ func TranslateByDeepLX(sourceLang, targetLang, text string, tagHandling string, // took too long" from other 503 failure modes (DNS, TLS, etc.). var ue *url.Error if errors.Is(err, context.DeadlineExceeded) || (errors.As(err, &ue) && ue.Timeout()) { - return DeepLXTranslationResult{ + return DLXTranslationResult{ ID: id, Code: http.StatusGatewayTimeout, Message: fmt.Sprintf("upstream DeepL request timed out after %s", oneshotTimeout), }, nil } - return DeepLXTranslationResult{ + return DLXTranslationResult{ ID: id, Code: http.StatusServiceUnavailable, Message: err.Error(), @@ -460,13 +460,13 @@ func TranslateByDeepLX(sourceLang, targetLang, text string, tagHandling string, case http.StatusOK: // fall through to body parsing case http.StatusTooManyRequests: - return DeepLXTranslationResult{ + return DLXTranslationResult{ ID: id, Code: http.StatusTooManyRequests, Message: "too many requests, your IP has been blocked by DeepL temporarily, please don't request it frequently in a short time", }, nil default: - return DeepLXTranslationResult{ + return DLXTranslationResult{ ID: id, Code: http.StatusServiceUnavailable, Message: fmt.Sprintf("request failed with status code: %d", status), @@ -475,7 +475,7 @@ func TranslateByDeepLX(sourceLang, targetLang, text string, tagHandling string, translations := result.Get("translations").Array() if len(translations) == 0 { - return DeepLXTranslationResult{ + return DLXTranslationResult{ ID: id, Code: http.StatusServiceUnavailable, Message: "Translation failed", @@ -484,7 +484,7 @@ func TranslateByDeepLX(sourceLang, targetLang, text string, tagHandling string, mainText := translations[0].Get("text").String() if mainText == "" { - return DeepLXTranslationResult{ + return DLXTranslationResult{ ID: id, Code: http.StatusServiceUnavailable, Message: "Translation failed", @@ -495,7 +495,7 @@ func TranslateByDeepLX(sourceLang, targetLang, text string, tagHandling string, sourceLang = strings.ToUpper(detected) } - return DeepLXTranslationResult{ + return DLXTranslationResult{ Code: http.StatusOK, ID: id, Data: mainText, diff --git a/translate/types.go b/translate/types.go index 7b20801..284df7e 100644 --- a/translate/types.go +++ b/translate/types.go @@ -3,7 +3,7 @@ * @Date: 2024-09-16 11:59:24 * @LastEditors: Vincent Yang * @LastEditTime: 2026-05-22 00:00:00 - * @FilePath: /DeepLX/translate/types.go + * @FilePath: /DLX/translate/types.go * @Telegram: https://t.me/missuo * @GitHub: https://github.com/missuo * @@ -12,11 +12,11 @@ package translate -// DeepLXTranslationResult is the public response shape consumed by the HTTP +// DLXTranslationResult is the public response shape consumed by the HTTP // handlers in the service package. The structure predates the migration to // the oneshot endpoint; Alternatives is now always empty because oneshot does // not return alternative translations, and ID is synthesized from time. -type DeepLXTranslationResult struct { +type DLXTranslationResult struct { Code int `json:"code"` ID int64 `json:"id"` Message string `json:"message,omitempty"` diff --git a/uninstall.sh b/uninstall.sh index e10bce0..d3f5a38 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -12,44 +12,44 @@ if [[ $EUID -ne 0 ]]; then exit 1 fi -uninstall_deeplx() { - echo -e "${green}Starting DeepLX uninstallation...${plain}" +uninstall_dlx() { + echo -e "${green}Starting DLX uninstallation...${plain}" - # 1. Stop and disable the DeepLX service - if systemctl is-active --quiet deeplx; then - echo -e "${yellow}Stopping DeepLX service...${plain}" - systemctl stop deeplx + # 1. Stop and disable the DLX service + if systemctl is-active --quiet dlx; then + echo -e "${yellow}Stopping DLX service...${plain}" + systemctl stop dlx else - echo -e "${yellow}DeepLX service is not running or not found.${plain}" + echo -e "${yellow}DLX service is not running or not found.${plain}" fi - if systemctl is-enabled --quiet deeplx; then - echo -e "${yellow}Disabling DeepLX service from starting on boot...${plain}" - systemctl disable deeplx + if systemctl is-enabled --quiet dlx; then + echo -e "${yellow}Disabling DLX service from starting on boot...${plain}" + systemctl disable dlx else - echo -e "${yellow}DeepLX service is not enabled.${plain}" + echo -e "${yellow}DLX service is not enabled.${plain}" fi # 2. Remove the systemd service file - if [ -f /etc/systemd/system/deeplx.service ]; then - echo -e "${yellow}Removing DeepLX systemd service file (/etc/systemd/system/deeplx.service)...${plain}" - rm -f /etc/systemd/system/deeplx.service + if [ -f /etc/systemd/system/dlx.service ]; then + echo -e "${yellow}Removing DLX systemd service file (/etc/systemd/system/dlx.service)...${plain}" + rm -f /etc/systemd/system/dlx.service systemctl daemon-reload echo -e "${green}Systemd daemon reloaded.${plain}" else - echo -e "${yellow}DeepLX systemd service file not found, skipping removal.${plain}" + echo -e "${yellow}DLX systemd service file not found, skipping removal.${plain}" fi - # 3. Remove the DeepLX executable - if [ -f /usr/bin/deeplx ]; then - echo -e "${yellow}Removing DeepLX executable (/usr/bin/deeplx)...${plain}" - rm -f /usr/bin/deeplx + # 3. Remove the DLX executable + if [ -f /usr/bin/dlx ]; then + echo -e "${yellow}Removing DLX executable (/usr/bin/dlx)...${plain}" + rm -f /usr/bin/dlx else - echo -e "${yellow}DeepLX executable not found, skipping removal.${plain}" + echo -e "${yellow}DLX executable not found, skipping removal.${plain}" fi - echo -e "${green}DeepLX uninstallation complete.${plain}" + echo -e "${green}DLX uninstallation complete.${plain}" echo -e "${green}If you wish to reinstall, please run the install script again.${plain}" } -uninstall_deeplx +uninstall_dlx