From daa8df5c770484adb29a2d41b988dca0efb9ad89 Mon Sep 17 00:00:00 2001 From: Anthony Axenov Date: Mon, 16 Feb 2026 17:22:49 +0800 Subject: [PATCH 01/13] fix postman icon in desktop file --- install/postman | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/postman b/install/postman index 2d2db9a..d4b276c 100755 --- a/install/postman +++ b/install/postman @@ -19,7 +19,7 @@ download "https://dl.pstmn.io/download/latest/linux64" "$HOME/install/postman.ta [Desktop Entry] Name=Postman Exec=$HOME/.local/bin/postman %U -Icon=$HOME/install/Postman/app/icons/icon_128x128.png +Icon=$HOME/install/Postman/app/resources/app/assets/icon.png Categories=Development,Network Terminal=false Type=Application From 642522a01d7e517ad11146c78424f5669914ef5d Mon Sep 17 00:00:00 2001 From: Anthony Axenov Date: Mon, 16 Feb 2026 17:24:42 +0800 Subject: [PATCH 02/13] frkn removed --- install/frkn | 53 ---------------------- scripts/frkn.sh | 115 ------------------------------------------------ 2 files changed, 168 deletions(-) delete mode 100755 install/frkn delete mode 100755 scripts/frkn.sh diff --git a/install/frkn b/install/frkn deleted file mode 100755 index fb100a0..0000000 --- a/install/frkn +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env bash -##makedesc: Install Wireguard + FRKN (deprecated) -source "$( dirname $(readlink -e -- "${BASH_SOURCE}"))/../helpers.sh" || exit 255 - -# https://frkn.org/ru/installation - -title - -mkdir -p "$HOME/install/frkn" -cd "$HOME/install/frkn" - -apt_install wireguard jq - -countries=(jp nl tr at ru se) -for idx in ${!countries[@]}; do - country=${countries[idx]} - info "Downloading config for $country ($(expr $idx + 1)/${#countries[@]})" - - json=$(curl -s "https://api.frkn.org/peer?location=$country" | jq) - - iface_address=$(echo $json | jq -r .iface.address) - iface_privkey=$(echo $json | jq -r .iface.key) - iface_dns=$(echo $json | jq -r .iface.dns) - peer_pubkey=$(echo $json | jq -r .peer.pubkey) - peer_psk=$(echo $json | jq -r .peer.psk) - peer_allowed_ips=$(echo $json | jq -r .peer.allowed_ips) - peer_endpoint=$(echo $json | jq -r .peer.endpoint) - - cat << EOF > "frkn-$country.conf" -[Interface] -Address = $iface_address -DNS = $iface_dns -PrivateKey = $iface_privkey - -[Peer] -PublicKey = $peer_pubkey -PresharedKey = $peer_psk -AllowedIPs = $peer_allowed_ips -Endpoint = $peer_endpoint -PersistentKeepalive = 25 -EOF - -done - -sudo cp frkn-*.conf /etc/wireguard/ - -[ $? = 0 ] && { - echo - success "Wireguard + FRKN installed!" - wg --version - info "Use 'wg-quick (up|down) frkn-($(implode '|' ${countries[@]}))' to control connections" - info "Use 'sudo wg show' to see connection status" -} diff --git a/scripts/frkn.sh b/scripts/frkn.sh deleted file mode 100755 index d64ba9c..0000000 --- a/scripts/frkn.sh +++ /dev/null @@ -1,115 +0,0 @@ -#!/usr/bin/env bash - -function disconnect() { - echo "Disconnecting: $1" - sudo wg-quick down "$1" - sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1 - sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1 - sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=1 - echo -} - -function connect() { - echo "Connecting: frkn-$1" - sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0 - sudo sysctl -w net.ipv6.conf.default.disable_ipv6=0 - sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0 - sudo wg-quick up "frkn-$1" - echo -} - -function in_array() { - local find=$1 - shift - for e in "$@"; do - [[ "$e" == "$find" ]] && return 0 - done - return 1 -} - -function update_wg() { - sudo apt install -y wireguard jq && wg --version -} - -function update_frkn() { - local countries=(uk ru nl nl2 ch) - for idx in ${!countries[@]}; do - country=${countries[idx]} - echo "Downloading config for $country ($(expr $idx + 1)/${#countries[@]})" - - json=$(curl -s "https://api.frkn.org/peer?location=$country" | jq) - - iface_address=$(echo $json | jq -r .iface.address) - iface_privkey=$(echo $json | jq -r .iface.key) - iface_dns=$(echo $json | jq -r .iface.dns) - peer_pubkey=$(echo $json | jq -r .peer.pubkey) - peer_psk=$(echo $json | jq -r .peer.psk) - peer_allowed_ips=$(echo $json | jq -r .peer.allowed_ips) - peer_endpoint=$(echo $json | jq -r .peer.endpoint) - - cat << EOF > "./frkn-$country.conf" -[Interface] -Address = $iface_address -DNS = $iface_dns -PrivateKey = $iface_privkey - -[Peer] -PublicKey = $peer_pubkey -PresharedKey = $peer_psk -AllowedIPs = $peer_allowed_ips -Endpoint = $peer_endpoint -PersistentKeepalive = 25 -EOF - done - sudo mv -f ./frkn-*.conf /etc/wireguard/ -} - -command="$1" -countries=() -current=$(sudo wg show | head -n 1 | awk '{print $2}') - -for file in /etc/wireguard/*.conf; do - filename=${file/\/etc\/wireguard\/frkn-} - code=${filename/.conf/} - countries+=($code) -done - -correct=-1 -if [ -z "$command" ] ; then - while [ $correct -lt 0 ]; do - read -rp "Entry on of country code (${countries[*]}): " command - if in_array "$command" ${countries[@]}; then - correct=1 - else - echo "Неверный код страны!" - fi - done -fi - -case "$command" in - "update" ) - if update_wg && update_frkn; then - echo "Wireguard and FRKN updated" - else - echo "Something went wrong" - exit 1 - fi - ;; - - "down" ) - if [ -n "$current" ]; then - disconnect "$current" - fi - ;; - - "show" ) - sudo wg show - ;; - - * ) - if [ -n "$current" ]; then - disconnect "$current" - fi - connect "$command" - ;; -esac From edac0e49c4a7458954dc99df02a569e32e3895fe Mon Sep 17 00:00:00 2001 From: Anthony Axenov Date: Mon, 16 Feb 2026 17:25:18 +0800 Subject: [PATCH 03/13] ddns scripts updated --- scripts/ddns/afraid/.env | 1 + scripts/ddns/afraid/update.sh | 25 +++++++++++++++++++++++++ scripts/{ => ddns}/duckdns/.env.example | 0 scripts/{ => ddns}/duckdns/.gitignore | 0 scripts/{ => ddns}/duckdns/install.sh | 0 scripts/{ => ddns}/duckdns/uninstall.sh | 0 scripts/{ => ddns}/duckdns/update.sh | 0 7 files changed, 26 insertions(+) create mode 100755 scripts/ddns/afraid/.env create mode 100755 scripts/ddns/afraid/update.sh rename scripts/{ => ddns}/duckdns/.env.example (100%) rename scripts/{ => ddns}/duckdns/.gitignore (100%) rename scripts/{ => ddns}/duckdns/install.sh (100%) rename scripts/{ => ddns}/duckdns/uninstall.sh (100%) rename scripts/{ => ddns}/duckdns/update.sh (100%) diff --git a/scripts/ddns/afraid/.env b/scripts/ddns/afraid/.env new file mode 100755 index 0000000..47d77e5 --- /dev/null +++ b/scripts/ddns/afraid/.env @@ -0,0 +1 @@ +AFRAID_TOKEN=6qfkK3VmHf7t4PwvTUJtxNEQ diff --git a/scripts/ddns/afraid/update.sh b/scripts/ddns/afraid/update.sh new file mode 100755 index 0000000..f329cb3 --- /dev/null +++ b/scripts/ddns/afraid/update.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# shellcheck disable=SC1091 +thisdir="$( dirname "$(readlink -e -- "${BASH_SOURCE[0]}")")" + +log() { + timestamp="$(date +'%Y-%m-%d %H:%M:%S')" + datestamp="$(date +'%Y-%m-%d')" + [ ! -d "$thisdir/log" ] && mkdir "$thisdir/log" + echo "[$timestamp] $*" >> "$thisdir/log/$datestamp.log" +} + +[ ! -f "$thisdir/.env" ] && { + log "ERROR: .env not exists" + exit 1 +} + +source "$thisdir/.env" + +[ -z "$AFRAID_TOKEN" ] && { + log "ERROR: env var AFRAID_TOKEN not specified" + exit 1 +} + +result=$(curl -s "http://sync.afraid.org/u/${AFRAID_TOKEN}/") +log "$result" diff --git a/scripts/duckdns/.env.example b/scripts/ddns/duckdns/.env.example similarity index 100% rename from scripts/duckdns/.env.example rename to scripts/ddns/duckdns/.env.example diff --git a/scripts/duckdns/.gitignore b/scripts/ddns/duckdns/.gitignore similarity index 100% rename from scripts/duckdns/.gitignore rename to scripts/ddns/duckdns/.gitignore diff --git a/scripts/duckdns/install.sh b/scripts/ddns/duckdns/install.sh similarity index 100% rename from scripts/duckdns/install.sh rename to scripts/ddns/duckdns/install.sh diff --git a/scripts/duckdns/uninstall.sh b/scripts/ddns/duckdns/uninstall.sh similarity index 100% rename from scripts/duckdns/uninstall.sh rename to scripts/ddns/duckdns/uninstall.sh diff --git a/scripts/duckdns/update.sh b/scripts/ddns/duckdns/update.sh similarity index 100% rename from scripts/duckdns/update.sh rename to scripts/ddns/duckdns/update.sh From d13a8a44d1e35495b4d9f15f748a7c994d05a27b Mon Sep 17 00:00:00 2001 From: Anthony Axenov Date: Mon, 16 Feb 2026 17:26:38 +0800 Subject: [PATCH 04/13] change-amd-driver added --- scripts/ubuntu/change-amd-driver/change.sh | 55 ++++++++++++++++++++ scripts/ubuntu/change-amd-driver/rollback.sh | 54 +++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100755 scripts/ubuntu/change-amd-driver/change.sh create mode 100755 scripts/ubuntu/change-amd-driver/rollback.sh diff --git a/scripts/ubuntu/change-amd-driver/change.sh b/scripts/ubuntu/change-amd-driver/change.sh new file mode 100755 index 0000000..7f3ba80 --- /dev/null +++ b/scripts/ubuntu/change-amd-driver/change.sh @@ -0,0 +1,55 @@ +#!/bin/bash +set -e +################################################################################ +# НАЗНАЧЕНИЕ: Переключение драйвера для видеокарт AMD GCN 1.0 (Pitcairn/SI). +# +# ЧТО ИСПРАВЛЯЕТ: +# Артефакты, мерцание, черные окна и "шахматную сетку" в Electron-приложениях +# (VS Code, Discord, Obsidian, Skype) и браузере Chrome/Chromium в среде KDE. +# +# ПОЧЕМУ ЭТО НУЖНО: +# По умолчанию для старых карт (R7 370 / R9 270X) Ubuntu использует драйвер 'radeon'. +# Он стабилен, но плохо поддерживает современное аппаратное ускорение и Vulkan. +# Переключение на драйвер 'amdgpu' дает: +# 1. Полную поддержку Vulkan API. +# 2. Совместимость с современным аппаратным ускорением Chromium. +# 3. Повышенную производительность в KDE Plasma (движок KWin). +# +# ПРИНЦИП РАБОТЫ: +# Скрипт передает ядру параметры 'radeon.si_support=0' (отключить старый драйвер +# для архитектуры Southern Islands) и 'amdgpu.si_support=1' (включить новый). +################################################################################ + +# Проверка на права суперпользователя +if [ "$EUID" -ne 0 ]; then + echo "Пожалуйста, запустите скрипт через sudo" + exit +fi + +echo "--- Настройка AMDGPU для GCN 1.0 (Pitcairn) ---" + +# 1. Резервное копирование конфига Grub +cp /etc/default/grub /etc/default/grub.bak +echo "[1/4] Бэкап Grub создан: /etc/default/grub.bak" + +# 2. Добавление параметров поддержки amdgpu и отключение старого radeon +# Используем sed для вставки параметров в строку GRUB_CMDLINE_LINUX_DEFAULT +sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="/GRUB_CMDLINE_LINUX_DEFAULT="radeon.si_support=0 amdgpu.si_support=1 /' /etc/default/grub +echo "[2/4] Параметры ядра добавлены в /etc/default/grub" + +# 3. Обновление конфигурации Grub +echo "[3/4] Обновление загрузчика..." +update-grub + +# 4. Проверка необходимости внесения в blacklist (опционально, но надежно) +if [ ! -f /etc/modprobe.d/amdgpu.conf ]; then + echo "options amdgpu si_support=1" > /etc/modprobe.d/amdgpu.conf + echo "options radeon si_support=0" >> /etc/modprobe.d/amdgpu.conf + echo "[4/4] Конфиг modprobe создан" +else + echo "[4/4] Конфиг modprobe уже существует" +fi + +echo "-------------------------------------------------------" +echo "Готово! Перезагрузите компьютер, чтобы изменения вступили в силу." +echo "После перезагрузки выполните: lspci -k | grep -EA3 'VGA|3D'" diff --git a/scripts/ubuntu/change-amd-driver/rollback.sh b/scripts/ubuntu/change-amd-driver/rollback.sh new file mode 100755 index 0000000..5da532d --- /dev/null +++ b/scripts/ubuntu/change-amd-driver/rollback.sh @@ -0,0 +1,54 @@ +#!/bin/bash +set -e +################################################################################ +# НАЗНАЧЕНИЕ: Откат изменений и возврат к стандартному драйверу 'radeon'. +# +# ЗАЧЕМ ЭТО НУЖНО: +# Этот скрипт используется, если после перехода на 'amdgpu' возникли проблемы: +# 1. Система загружается в черный экран или зависает. +# 2. Появились проблемы с выводом звука через HDMI (иногда бывает на GCN 1.0). +# 3. Наблюдаются специфические графические баги, которых не было ранее. +# +# ЧТО ИСПРАВЛЯЕТ: +# Возвращает конфигурацию системы к стандартному состоянию Ubuntu. Драйвер +# 'radeon' является базовым и максимально стабильным для старых карт AMD, +# хотя и не поддерживает современные функции (Vulkan, новый стек Electron). +# +# ПРИНЦИП РАБОТЫ: +# 1. Восстанавливает исходный файл /etc/default/grub из резервной копии. +# 2. Удаляет специфические инструкции из /etc/modprobe.d/, которые заставляли +# ядро игнорировать карту для драйвера radeon. +# 3. Обновляет конфигурацию загрузчика для применения изменений. +################################################################################ + +# Проверка на права суперпользователя +if [ "$EUID" -ne 0 ]; then + echo "Пожалуйста, запустите скрипт через sudo" + exit +fi + +echo "--- Откат изменений и возврат к драйверу Radeon ---" + +# 1. Восстановление Grub из бэкапа или очистка вручную +if [ -f /etc/default/grub.bak ]; then + mv /etc/default/grub.bak /etc/default/grub + echo "[1/3] Конфигурация Grub восстановлена из бэкапа." +else + # Если бэкапа нет, удаляем параметры через sed + sed -i 's/radeon.si_support=0 //g' /etc/default/grub + sed -i 's/amdgpu.si_support=1 //g' /etc/default/grub + echo "[1/3] Параметры удалены из /etc/default/grub вручную." +fi + +# 2. Удаление файлов из modprobe.d +if [ -f /etc/modprobe.d/amdgpu.conf ]; then + rm /etc/modprobe.d/amdgpu.conf + echo "[2/3] Файл /etc/modprobe.d/amdgpu.conf удален." +fi + +# 3. Обновление конфигурации Grub +echo "[3/3] Обновление загрузчика..." +update-grub + +echo "-------------------------------------------------------" +echo "Откат завершен. После перезагрузки система вернется на драйвер 'radeon'." From 6e4c5eee38219563deb6f45de04bb7f26f4c81db Mon Sep 17 00:00:00 2001 From: Anthony Axenov Date: Mon, 16 Feb 2026 17:28:48 +0800 Subject: [PATCH 05/13] wip4 --- gen-makefile | 6 +- install/_example | 46 +++++++++ install/anytype | 46 +++++++++ install/apache2 | 49 ++++++++-- install/apt | 6 +- install/canon-mg2500 | 55 +++++++++-- install/chrome | 57 +++++++++-- install/clamav | 56 ++++++++++- install/docker | 97 +++++++++++++------ install/golang | 63 ++++++++---- install/jbmono | 20 ---- install/keyd | 69 +++++++++++++ install/nerd-fonts | 66 +++++++++++++ install/nvim | 81 ++++++++++++---- install/tilt | 33 +++++++ scripts/display-rotate.sh | 11 --- scripts/free-space.sh | 57 ----------- scripts/ubuntu/lemp.sh | 0 scripts/ubuntu/mediasrv.sh | 0 scripts/ubuntu/server.sh | 0 scripts/vscode-fix-cache.sh | 22 +++++ ...{fix-repo-vscode.sh => vscode-fix-repo.sh} | 0 uninstall/apache2 | 10 -- uninstall/canon-mg2500 | 15 --- 24 files changed, 656 insertions(+), 209 deletions(-) create mode 100644 install/_example create mode 100755 install/anytype delete mode 100755 install/jbmono create mode 100755 install/keyd create mode 100755 install/nerd-fonts create mode 100755 install/tilt delete mode 100755 scripts/display-rotate.sh delete mode 100755 scripts/free-space.sh mode change 100644 => 100755 scripts/ubuntu/lemp.sh mode change 100644 => 100755 scripts/ubuntu/mediasrv.sh mode change 100644 => 100755 scripts/ubuntu/server.sh create mode 100755 scripts/vscode-fix-cache.sh rename scripts/{fix-repo-vscode.sh => vscode-fix-repo.sh} (100%) delete mode 100755 uninstall/apache2 delete mode 100755 uninstall/canon-mg2500 diff --git a/gen-makefile b/gen-makefile index cb56d2c..ba37291 100755 --- a/gen-makefile +++ b/gen-makefile @@ -18,7 +18,7 @@ for file in ./install/*; do name=${name%.sh} desc=$(grep -m 1 -oP "(?<=^##makedesc:\s).*$" ${file}) [ -z "$desc" ] && desc='' - echo -e "##${name}: ${desc}\n${name}:\n\t@${file}\n" >> Makefile + echo -e "##${name}: ${desc}\n${name}:\n\t@${file} install\n" >> Makefile done; cat << EOF >> Makefile @@ -47,7 +47,7 @@ for file in ./upgrade/*; do name=${name%.sh} desc=$(grep -m 1 -oP "(?<=^##makedesc:\s).*$" ${file}) [ -z "$desc" ] && desc='' - echo -e "##${CHR_UPGRADE}${name}: ${desc}\n${CHR_UPGRADE}${name}:\n\t@${file}\n" >> Makefile + echo -e "##${CHR_UPGRADE}${name}: ${desc}\n${CHR_UPGRADE}${name}:\n\t@${file} upgrade\n" >> Makefile done; cat << EOF >> Makefile @@ -62,7 +62,7 @@ for file in ./uninstall/*; do name=${name%.sh} desc=$(grep -m 1 -oP "(?<=^##makedesc:\s).*$" ${file}) [ -z "$desc" ] && desc='' - echo -e "##${CHR_UNINSTALL}${name}: ${desc}\n${CHR_UNINSTALL}${name}:\n\t@${file}\n" >> Makefile + echo -e "##${CHR_UNINSTALL}${name}: ${desc}\n${CHR_UNINSTALL}${name}:\n\t@${file} remove\n" >> Makefile done; cat << EOF >> Makefile diff --git a/install/_example b/install/_example new file mode 100644 index 0000000..43a2d3f --- /dev/null +++ b/install/_example @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +##makedesc: Example script + +set -eo pipefail + +install() { + echo + echo "===============================================" + echo "Installing example" + echo "===============================================" + echo + sleep 3 + echo + echo "Finish! example v1.2.3" + echo +} + +upgrade() { + echo + echo "===============================================" + echo "Upgrading example" + echo "===============================================" + echo + sleep 3 + echo + echo "Finish! example v1.2.3" + echo +} + +remove() { + echo + echo "===============================================" + echo "Removing example" + echo "===============================================" + echo + sleep 3 + echo + echo "Finish!" + echo +} + +case "$1" in + u|upgrade|update) upgrade ;; + r|remove|d|delete|p|purge) remove ;; + *) install ;; +esac diff --git a/install/anytype b/install/anytype new file mode 100755 index 0000000..2de74db --- /dev/null +++ b/install/anytype @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +##makedesc: Manage anytype (deb) + +set -eo pipefail + +installDir="$HOME/install/anytype" + +install() { + release="$(curl -s 'https://api.github.com/repos/anyproto/anytype-ts/releases/latest')" + tag="$(echo "$release" | jq -r '.tag_name')" + asset="$(echo "$release" | jq -r '.assets.[] | select(.name | test("amd64.deb$"))')" + url="$(echo "$asset" | jq -r '.browser_download_url')" + echo -e "$tag $url" + + echo + echo "===============================================" + echo "Installing anytype $tag" + echo "===============================================" + echo + + mkdir -p "$installDir" + filepath="$installDir/anytype_${tag}_amd46.deb" + wget "$url" -O "$filepath" + sudo dpkg -i "$filepath" + + echo + echo "Finish! $tag" + echo +} + +remove() { + echo + echo "===============================================" + echo "Removing anytype" + echo "===============================================" + echo + sudo apt purge -y anytype* + echo + echo "Finish!" + echo +} + +case "$1" in + r|remove|d|delete|p|purge) remove ;; + *) install ;; +esac diff --git a/install/apache2 b/install/apache2 index 4907851..f610a5f 100755 --- a/install/apache2 +++ b/install/apache2 @@ -1,11 +1,46 @@ #!/usr/bin/env bash -##makedesc: Install apache2 (latest) -source "$( dirname $(readlink -e -- "${BASH_SOURCE}"))/../helpers.sh" || exit 255 +##makedesc: Manage apache2 (apt) -title +install() { + echo + echo "===============================================" + echo "Installing apache2" + echo "===============================================" + echo + sudo apt install -y apache2 + sudo systemctl restart apache2 + echo + echo "Finish! $(apache2 -v)" + echo +} -apt_install apache2 -sudo systemctl restart apache2 +upgrade() { + echo + echo "===============================================" + echo "Upgrading apache2" + echo "===============================================" + echo + sudo apt upgrade -y apache2 apache2-data apache2-utils + sudo systemctl restart apache2 + echo + echo "Finish! $(apache2 -v)" + echo +} -success "apache2 installed!" -apache2 -v +remove() { + echo + echo "===============================================" + echo "Removing apache2" + echo "===============================================" + echo + sudo apt purge -y apache2* + echo + echo "Finish!" + echo +} + +case "$1" in + u|upgrade|update) upgrade ;; + r|remove|d|delete|p|purge) remove ;; + *) install ;; +esac diff --git a/install/apt b/install/apt index b918b2c..2a255de 100755 --- a/install/apt +++ b/install/apt @@ -1,5 +1,5 @@ #!/usr/bin/env bash -##makedesc: Install software from apt +##makedesc: Install basic software from apt sudo apt update && \ sudo apt upgrade -y --autoremove && \ @@ -34,17 +34,17 @@ sudo apt update && \ p7zip-full \ easyeffects \ software-properties-common \ - terminator \ ubuntu-restricted-extras \ unzip \ vlc \ ffmpeg \ - xclip \ inotify-tools \ notify-osd \ fonts-open-sans \ libnotify-bin \ tree \ earlyoom + # terminator + # xclip # sqlitebrowser # etckeeper diff --git a/install/canon-mg2500 b/install/canon-mg2500 index 536e058..61a31d4 100755 --- a/install/canon-mg2500 +++ b/install/canon-mg2500 @@ -1,13 +1,52 @@ #!/usr/bin/env bash -##makedesc: Install Canon Pixma MG2500 + ppa -source "$( dirname $(readlink -e -- "${BASH_SOURCE}"))/../helpers.sh" || exit 255 +##makedesc: Canon Pixma MG2500 + ppa -title +install() { + echo + echo "===============================================" + echo "Installing Canon Pixma MG2500 + ppa" + echo "===============================================" + echo + sudo add-apt-repository -y ppa:thierry-f/fork-michael-gruz + sudo apt install -y cnijfilter-mg2500series scangearmp-mg2500series + echo + echo "Finish!" + echo "Drivers for Canon Pixma MG2500 installed!" + echo "Now you must reboot PC and connect your printer." + echo +} -apt_ppa_add ppa:thierry-f/fork-michael-gruz +upgrade() { + echo + echo "===============================================" + echo "Upgrading Canon Pixma MG2500 + ppa" + echo "===============================================" + echo + sudo apt upgrade -y cnijfilter-mg2500series scangearmp-mg2500series + echo + echo "Finish! Canon Pixma MG2500 + ppa" + echo +} -apt_install cnijfilter-mg2500series -apt_install scangearmp-mg2500series +remove() { + echo + echo "===============================================" + echo "Removing Canon Pixma MG2500 + ppa" + echo "===============================================" + echo + # sudo apt purge -y cnijfilter-mg2500series scangearmp-mg2500series + sudp dpkg -r cnijfilter-mg2500series + sudp dpkg -r cnijfilter-common + sudp dpkg -r scangearmp-mg2500series + sudp dpkg -r scangearmp-common + sudo add-apt-repository -ry ppa:thierry-f/fork-michael-gruz + echo + echo "Finish!" + echo +} -success "Drivers for Canon Pixma MG2500 installed!" -info "Now you must reboot PC and connect your printer." +case "$1" in + u|upgrade|update) upgrade ;; + r|remove|d|delete|p|purge) remove ;; + *) install ;; +esac diff --git a/install/chrome b/install/chrome index 4fe1cf9..24488e3 100755 --- a/install/chrome +++ b/install/chrome @@ -1,17 +1,56 @@ #!/usr/bin/env bash -##makedesc: Install google chrome (latest) -source "$( dirname $(readlink -e -- "${BASH_SOURCE}"))/../helpers.sh" || exit 255 +##makedesc: Google Chrome (latest) + +set -eo pipefail # https://t.me/axenov_blog/251 -title +dest="$HOME/install/deb" +deb="$dest/google-chrome.deb" +url="https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb" -mkdir -p "$HOME/install/deb" +install() { + echo + echo "===============================================" + echo "Installing Google Chrome" + echo "===============================================" + echo + mkdir -p "$dest" + wget "$url" -O "$deb" + sudo dpkg -i "$deb" + echo + echo "Finish! $(google-chrome --version)" + echo +} -download "https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb" \ - "$HOME/install/deb/google-chrome.deb" +upgrade() { + echo + echo "===============================================" + echo "Upgrading Google Chrome" + echo "===============================================" + echo + mkdir -p "$dest" + wget "$url" -O "$deb" + sudo dpkg -i "$deb" + echo + echo "Finish! $(google-chrome --version)" + echo +} -dpkg_install "$HOME/install/deb/google-chrome.deb" +remove() { + echo + echo "===============================================" + echo "Removing Google Chrome" + echo "===============================================" + echo + sudo dpkg -r google-chrome + echo + echo "Finish!" + echo +} -success "Google Chrome installed!" -google-chrome --version +case "$1" in + u|upgrade|update) upgrade ;; + r|remove|d|delete|p|purge) remove ;; + *) install ;; +esac diff --git a/install/clamav b/install/clamav index d8672a4..8cd87d4 100755 --- a/install/clamav +++ b/install/clamav @@ -1,6 +1,56 @@ #!/usr/bin/env bash -##makedesc: ClamAV (WIP) +##makedesc: ClamAV -sudo apt install clamav -y && \ - echo "DatabaseMirror packages.microsoft.com/clamav" | sudo tee -a /etc/clamav/freshclam.conf && \ +set -eo pipefail + +install() { + echo + echo "===============================================" + echo "Installing clamav" + echo "===============================================" + echo + + sudo apt install -y clamav + echo "DatabaseMirror packages.microsoft.com/clamav" \ + | sudo tee -a /etc/clamav/freshclam.conf sudo freshclam + + echo + echo "Finish!" + echo +} + +upgrade() { + echo + echo "===============================================" + echo "Upgrading clamav" + echo "===============================================" + echo + + sudo apt upgrade -y clamav + sudo freshclam + + echo + echo "Finish!" + echo +} + +remove() { + echo + echo "===============================================" + echo "Removing clamav" + echo "===============================================" + echo + + sudo apt purge -y clamav* + + echo + echo "Finish!" + echo +} + +case "$1" in + u|upgrade|update) upgrade ;; + r|remove|d|delete|p|purge) remove ;; + *) install ;; +esac diff --git a/install/docker b/install/docker index 231172f..4530e37 100755 --- a/install/docker +++ b/install/docker @@ -1,39 +1,78 @@ #!/usr/bin/env bash -##makedesc: Install docker (latest) + ppa -source "$( dirname $(readlink -e -- "${BASH_SOURCE}"))/../helpers.sh" || exit 255 +##makedesc: Docker + ppa # https://docs.docker.com/engine/install/ubuntu/ # https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user -title +set -eo pipefail -for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do - apt_remove $pkg -done +doRemove() { + sudo apt purge -y docker* podman-docker containerd runc +} -require ca-certificates lsb-release -source /etc/os-release +install_() { + echo + echo "===============================================" + echo "Installing Docker" + echo "===============================================" + echo + doRemove + sudo apt install -y ca-certificates lsb-release + source /etc/os-release + codename="$VERSION_CODENAME" + key="/etc/apt/keyrings/docker.asc" + arch=$(dpkg --print-architecture) + sudo install -m 0755 -d /etc/apt/keyrings + curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" -o "$key" + sudo chmod a+r $key + echo "deb [arch=$arch signed-by=$key] https://download.docker.com/linux/ubuntu $codename stable" \ + | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + sudo apt update + sudo apt install -y \ + docker-ce \ + docker-ce-cli \ + containerd.io \ + docker-buildx-plugin \ + docker-compose-plugin + sudo usermod -aG docker "$(whoami)" + newgrp docker + echo + echo "Finish! $(docker --version)" + echo "Probably, you need to relogin to apply 'docker' group permanently." + echo +} -key="/etc/apt/keyrings/docker.asc" +upgrade() { + echo + echo "===============================================" + echo "Upgrading Docker" + echo "===============================================" + echo + sudo apt upgrade -y \ + docker-ce \ + docker-ce-cli \ + containerd.io \ + docker-buildx-plugin \ + docker-compose-plugin + echo + echo "Finish!" + echo +} -sudo install -m 0755 -d /etc/apt/keyrings -sudo cdownload https://download.docker.com/linux/ubuntu/gpg $key -sudo chmod a+r $key +remove() { + echo + echo "===============================================" + echo "Removing Docker" + echo "===============================================" + echo + doRemove + echo + echo "Finish!" + echo +} -echo "deb [arch=$(dpkg_arch) signed-by=$key] https://download.docker.com/linux/ubuntu $VERSION_CODENAME stable" \ - | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null - -apt_update -apt_install \ - docker-ce \ - docker-ce-cli \ - containerd.io \ - docker-buildx-plugin \ - docker-compose-plugin - -sudo usermod -aG docker $(whoami) -newgrp docker - -success "Docker installed!" -docker --version -info "Probably, you need to relogin to apply 'docker' group permanently." +case "$1" in + u|upgrade|update) upgrade ;; + r|remove|d|delete|p|purge) remove ;; + *) install ;; +esac diff --git a/install/golang b/install/golang index 05be71a..a71c565 100755 --- a/install/golang +++ b/install/golang @@ -1,28 +1,57 @@ #!/usr/bin/env bash -##makedesc: Install golang v1.21.0 -source "$( dirname $(readlink -e -- "${BASH_SOURCE}"))/../helpers.sh" || exit 255 +##makedesc: Install golang # https://go.dev/dl/ # https://golang.org/doc/install -# https://www.vultr.com/docs/install-the-latest-version-of-golang-on-ubuntu +# https://github.com/udhos/update-golang/blob/master/update-golang.sh -[ $1 ] && VERSION="$1" || VERSION="1.23.0" -title "Installing golang v$VERSION..." +set -eo pipefail -FILE="go$VERSION.linux-amd64.tar.gz" -sudo rm -rf /usr/local/go && \ - download "https://golang.org/dl/$FILE" "/tmp/$FILE" && \ - sudo tar -xzf "/tmp/$FILE" -C /usr/local && \ - rm -rf "/tmp/$FILE" && \ - sudo chown $USER: -R /usr/local/go && \ - echo 'export PATH="/usr/local/go/bin:$PATH"' >> "$HOME/.profile" && \ - echo "export GOPATH=\"\$HOME/.go\"" >> "$HOME/.profile" && \ - source ~/.profile +doRemove() { + [ -d "/usr/local/go" ] && sudo rm -rf "/usr/local/go" +} -[ $? = 0 ] && { +install() { + dlUrl="https://go.dev/dl" + json=$(curl -sSL "$dlUrl/?mode=json") + version=$(echo "$json" | jq -r '.[0].version') + echo + echo "===============================================" + echo "Installing golang v$version" + echo "===============================================" + echo + latestJson=$(echo "$json" | jq -r '.[0].files.[] | select (.kind == "archive" and .os == "linux" and .arch == "amd64")') + fileName=$(echo "$latestJson" | jq -r '.filename') + fileUrl="$dlUrl/$fileName" + downloadPath="$HOME/install" + archivePath="$downloadPath/$fileName" + doRemove + [ -f "$archivePath" ] || wget "$fileUrl" -O "$archivePath" + [ -f "$archivePath" ] && sudo tar -xzf "$archivePath" -C /usr/local + sudo chown "$USER": -R /usr/local/go + echo 'export PATH="/usr/local/go/bin:$PATH"' >> "$HOME/.profile" + echo "export GOPATH=\"\$HOME/.go\"" >> "$HOME/.profile" echo - success "golang installed!" - info "NOTE: now run 'source ~/.profile' to apply new env vars" go version + go install github.com/go-delve/delve/cmd/dlv@latest + go install + echo "Finish!" +} + +remove() { + echo + echo "===============================================" + echo "Removing golang" + echo "===============================================" + echo + doRemove + echo + echo "Finish!" echo } + +case "$1" in + r|remove|d|delete|p|purge) remove ;; + *) install ;; +esac + diff --git a/install/jbmono b/install/jbmono deleted file mode 100755 index c36de48..0000000 --- a/install/jbmono +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash -##makedesc: Install JetBrains Mono fonts -source "$( dirname $(readlink -e -- "${BASH_SOURCE}"))/../helpers.sh" || exit 255 - -# https://www.jetbrains.com/lp/mono/#how-to-install - -title - -require unzip - -mkdir -p "$HOME/install/jbmono" "$HOME/.local/share/fonts/" -download "https://download.jetbrains.com/fonts/JetBrainsMono-2.304.zip" "$HOME/install/jbmono.zip" && \ - unzip -oj "$HOME/install/jbmono.zip" "fonts/ttf/*.ttf" -d "$HOME/.local/share/fonts/" && \ - fc-cache -vf "$HOME/.local/share/fonts/" - -[ $? = 0 ] && { - echo - success "JetBrains Mono fonts installed!" - echo -} diff --git a/install/keyd b/install/keyd new file mode 100755 index 0000000..df88927 --- /dev/null +++ b/install/keyd @@ -0,0 +1,69 @@ +#!/usr/bin/env bash +##makedesc: Install keyd + +# https://github.com/rvaiya/keyd + +set -eo pipefail + +mkdir -p "$HOME/install" + +install() { + echo + echo "===============================================" + echo "Installing keyd (latest)" + echo "===============================================" + echo + hash git || { echo "ERROR: git not installed" ; exit 1; } + cd "$HOME/install" + git clone --depth=1 --single-branch https://github.com/rvaiya/keyd.git "$HOME/install/keyd" + cd "$HOME/install/keyd" + make && sudo make install + sudo systemctl enable --now keyd + echo + echo "Finish!" +} + +upgrade() { + echo + echo "===============================================" + echo "Upgrading keyd" + echo "===============================================" + echo + hash git || { echo "ERROR: git not installed" ; exit 1; } + [ -d "$HOME/install/keyd" ] || { echo "ERROR: repo not found: $HOME/install/keyd" ; exit 1; } + cd "$HOME/install/keyd" + make && sudo make install + sudo systemctl enable --now keyd + sudo usermod -aG keyd "$(whoami)" + echo + echo "Finish!" +} + +restart() { + sudo systemctl restart keyd +} + +reload() { + sudo systemctl reload keyd +} + +remove() { + echo + echo "===============================================" + echo "Removing keyd" + echo "===============================================" + echo + sudo dpkg -r keyd + echo + echo "Finish!" + echo +} + +case "$1" in + restart) restart ;; + reload) reload ;; + u|upgrade|update) upgrade ;; + r|remove|d|delete|p|purge) remove ;; + *) install ;; +esac + diff --git a/install/nerd-fonts b/install/nerd-fonts new file mode 100755 index 0000000..e6595ea --- /dev/null +++ b/install/nerd-fonts @@ -0,0 +1,66 @@ +#!/usr/bin/env bash +##makedesc: Install nerd-fonts + +set -eo pipefail + +#TODO nokia-sans + +downloadPath="$HOME/install/nerd-fonts" +installPath="$HOME/.local/share/fonts/" +url="https://github.com/ryanoasis/nerd-fonts/releases/latest/download" + +fonts=( + FiraCode + FiraMono + JetBrainsMono + Meslo + Noto + RobotoMono + Ubuntu + UbuntuMono + UbuntuSans +) + +install() { + echo + echo "===============================================" + echo "Installing nerd-fonts" + echo "===============================================" + echo + + [[ -d "$downloadPath" ]] || mkdir -p "$downloadPath" + + for fontname in "${fonts[@]}"; do + fontdir="$installPath/Nerd-$fontname" + wget "$url/$fontname.tar.xz" -O "$downloadPath/$fontname.tar.xz" + [[ -d "$installPath/$fontname" ]] || mkdir -p "$fontdir" + tar -xJf "$downloadPath/$fontname.tar.xz" -C "$fontdir" + done + + fc-cache -vf "$installPath" + + echo + echo "Finish!" + echo +} + +remove() { + echo + echo "===============================================" + echo "Removing nerd-fonts" + echo "===============================================" + echo + + find "$installPath" -type d -name "Nerd-*" -exec rm -rf {} + + fc-cache -vf "$installPath" + + echo + echo "Finish!" + echo +} + +case "$1" in + r|remove|d|delete|p|purge) remove ;; + *) install ;; +esac + diff --git a/install/nvim b/install/nvim index b93beaf..870c9a1 100755 --- a/install/nvim +++ b/install/nvim @@ -1,33 +1,80 @@ #!/usr/bin/env bash ##makedesc: Install nvim + lazyvim -source "$( dirname $(readlink -e -- "${BASH_SOURCE}"))/../helpers.sh" || exit 255 +set -eo pipefail # https://www.lazyvim.org/installation # https://www.devas.life/effective-neovim-setup-for-web-development-towards-2024/ -title +# TODO https://github.com/rockerBOO/awesome-neovim +# TODO https://docs.astronvim.com -require git +url="https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.tar.gz" +downloadPath="$HOME/install" +downloadTarGz="$downloadPath/nvim.tar.gz" +installPath="/opt/nvim" +cfgPath="$HOME/.config/nvim" +nvimDataPaths=( + "$cfgPath" + "$HOME"/.local/share/nvim + "$HOME"/.local/state/nvim + "$HOME"/.cache/nvim +) -nvimUrl="https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.tar.gz" -installPath="$HOME/install" -installTar="$installPath/nvim.tar.gz" +backup() { + echo "Backup configuration files..." + t=$(date +'%s') + for path in "${nvimDataPaths[@]}"; do + [[ -d "$path" ]] && cp -v "$path" "$path-$t.bak" + done + echo "Done" +} -[ -d "$HOME/.config/nvim" ] && mv "$HOME"/.config/nvim{,.bak} -[ -d "$HOME/.local/share/nvim" ] && mv "$HOME"/.local/share/nvim{,.bak} -[ -d "$HOME/.local/state/nvim" ] && mv "$HOME"/.local/state/nvim{,.bak} -[ -d "$HOME/.cache/nvim" ] && mv "$HOME"/.cache/nvim{,.bak} +install() { + echo + echo "===============================================" + echo "Installing neovim" + echo "===============================================" + echo -download "$nvimUrl" "$installTar" -unpack_targz "$installTar" "$installPath" + backup + wget "$url" -O "$downloadTarGz" + tar -xzf "$downloadTarGz" -C "$downloadPath" -sudo rm -vrf /opt/nvim -sudo mv -v "$installPath/nvim-linux-x86_64" /opt/nvim + sudo rm -rf "$installPath" + sudo mv "$downloadPath/nvim-linux-x86_64" "$installPath" -git.clone_quick https://github.com/LazyVim/starter "$HOME/.config/nvim" -rm -rf "$HOME/.config/nvim/.git" + git clone --depth=1 --single-branch https://github.com/LazyVim/starter "$cfgPath" + rm -rf "$cfgPath/.git" -sudo update-desktop-database && \ + sudo update-desktop-database xdg-desktop-menu forceupdate + echo + echo "Finish!" + nvim -v + echo +} + +remove() { + echo + echo "===============================================" + echo "Removing nerd-fonts" + echo "===============================================" + echo + + find "$downloadPath" -type d -name "Nerd-*" -exec rm -rf {} + + fc-cache -vf "$downloadPath" + + echo + echo "Finish!" + echo +} + +case "$1" in + b|backup) backup ;; + r|remove|d|delete|p|purge) remove ;; + *) install ;; +esac + + # export PATH="$PATH:/opt/nvim-linux-x86_64/bin" diff --git a/install/tilt b/install/tilt new file mode 100755 index 0000000..9558dbf --- /dev/null +++ b/install/tilt @@ -0,0 +1,33 @@ +#!/bin/bash + +mkdir -p ~/install/tilt ~/.local/bin +cd ~/install/tilt + +KUBECTL_VERSION=$(curl -L -s https://dl.k8s.io/release/stable.txt) +curl -LO "https://dl.k8s.io/release/$KUBECTL_VERSION/bin/linux/amd64/kubectl" +curl -LO "https://dl.k8s.io/release/$KUBECTL_VERSION/bin/linux/amd64/kubectl.sha256" +echo "$(cat kubectl.sha256) kubectl" | sha256sum --check +chmod +x kubectl +cp ./kubectl ~/.local/bin/kubectl + +################################################################################ + +CTLPTL_URL=$(curl -s "https://api.github.com/repos/tilt-dev/ctlptl/releases/latest" \ + | jq -r '.assets.[] | select(.name | test("linux.x86_64.tar.gz")).browser_download_url') + +curl -fsSL "$CTLPTL_URL" | tar -xz -C ~/.local/bin ctlptl +# chmod +x ~/.local/bin/ctlptl + +################################################################################ + +TILT_URL=$(curl -s "https://api.github.com/repos/tilt-dev/tilt/releases/latest" \ + | jq -r '.assets.[] | select(.name | test("linux.x86_64.tar.gz")).browser_download_url') + +curl -fsSL "$TILT_URL" | tar -xz -C ~/.local/bin tilt +# chmod +x ~/.local/bin/tilt +cd - + +echo "Version of ctlptl = $(ctlptl version)" +echo "Version of tilt = $(tilt version)" +echo "Version of kubectl:" +kubectl version diff --git a/scripts/display-rotate.sh b/scripts/display-rotate.sh deleted file mode 100755 index 385e053..0000000 --- a/scripts/display-rotate.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -# X11: -# xrandr --listactivemonitors -# xrandr --output $OUTPUT --rotate (left|right|normal|...) - -# Wayland KDE: https://www.reddit.com/r/kde/comments/11vrbwc/how_do_i_rotate_the_screen_on_kde_with_wayland/ -# kscreen-doctor --outputs -OUTPUT='HDMI-A-1' -[ "$1" ] && DIRECTION="$1" || DIRECTION="normal" # (left|right|normal|inverted) -kscreen-doctor "output.$OUTPUT.rotation.$DIRECTION" diff --git a/scripts/free-space.sh b/scripts/free-space.sh deleted file mode 100755 index 341fae7..0000000 --- a/scripts/free-space.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env bash -# Очистка места на диске -# https://gist.github.com/anthonyaxenov/02c00c965be4eb5bb163a153abdf4c2b -# https://itsfoss.com/free-up-space-ubuntu-linux/ - -echo -echo -df -hx tmpfs -echo - -echo -echo "[1/5] Removing apt caches and unused packages" -echo - -sudo apt autoremove --purge -sudo apt autoclean -sudo apt clean - -echo -echo "[2/5] Removing old system logs" -echo - -sudo journalctl --vacuum-time=1d -sudo rm -rf /var/log/journal/user-*@* -sudo rm -rf /var/log/journal/system*@* -sudo rm /var/log/{syslog,dmesg,btmp}.* -sudo rm /var/log/{auth,dpkg,kern,alternatives,dmesg}.log.* - -echo -echo "[3/5] Cleaning user trash and thumbnails" -echo - -rm -rf ~/.local/share/Trash/files/* -rm -rf ~/.cache/thumbnails/* - -echo -echo "[4/5] Cleaning out dangling docker objects" -echo - -docker system prune -f -# docker system prune -af - -echo -echo "[5/5] Removing disabled unused snaps" -echo - -sudo snap list --all \ - | awk '/disabled/{print $1, $3}' \ - | while read snapname revision; do - sudo snap remove "$snapname" --revision="$revision" - done - -echo -echo -df -hx tmpfs -echo -echo diff --git a/scripts/ubuntu/lemp.sh b/scripts/ubuntu/lemp.sh old mode 100644 new mode 100755 diff --git a/scripts/ubuntu/mediasrv.sh b/scripts/ubuntu/mediasrv.sh old mode 100644 new mode 100755 diff --git a/scripts/ubuntu/server.sh b/scripts/ubuntu/server.sh old mode 100644 new mode 100755 diff --git a/scripts/vscode-fix-cache.sh b/scripts/vscode-fix-cache.sh new file mode 100755 index 0000000..19f95b9 --- /dev/null +++ b/scripts/vscode-fix-cache.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +rename() { + local dir="$1" + echo "Processing: $dir" + [ -d "$dir.bak" ] && rm -rf "$dir.bak" + mv "$dir" "$dir.bak" +} + +dirs=( + "$HOME/.config/Code/Cache" + "$HOME/.config/Code/CachedData" + "$HOME/.config/Code/Code Cache" + "$HOME/.config/Code/GPUCache" + "$HOME/.config/Code/Service Worker" +) + +for dir in "${dirs[@]}"; do + rename "$dir" +done + +echo "Success" diff --git a/scripts/fix-repo-vscode.sh b/scripts/vscode-fix-repo.sh similarity index 100% rename from scripts/fix-repo-vscode.sh rename to scripts/vscode-fix-repo.sh diff --git a/uninstall/apache2 b/uninstall/apache2 deleted file mode 100755 index aa232c4..0000000 --- a/uninstall/apache2 +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash -##makedesc: Uninstall apache2 -source "$( dirname $(readlink -e -- "${BASH_SOURCE}"))/../helpers.sh" || exit 255 - -title - -apt_remove apache2 - -success "apache2 removed!" - diff --git a/uninstall/canon-mg2500 b/uninstall/canon-mg2500 deleted file mode 100755 index 4d9641e..0000000 --- a/uninstall/canon-mg2500 +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash -##makedesc: Uninstall Canon Pixma MG2500 + ppa -source "$( dirname $(readlink -e -- "${BASH_SOURCE}"))/../helpers.sh" || exit 255 - -title - -apt_ppa_remove ppa:thierry-f/fork-michael-gruz - -dpkg_remove cnijfilter-mg2500series -dpkg_remove cnijfilter-common -dpkg_remove scangearmp-mg2500series -dpkg_remove scangearmp-common - -success "Drivers for Canon Pixma MG2500 removed!" - From 93aba39cbe0d9b79763f98e538ad5a6312f0479e Mon Sep 17 00:00:00 2001 From: Anthony Axenov Date: Tue, 24 Mar 2026 00:33:16 +0800 Subject: [PATCH 06/13] brew --- install/brew | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100755 install/brew diff --git a/install/brew b/install/brew new file mode 100755 index 0000000..82abafb --- /dev/null +++ b/install/brew @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +##makedesc: Install software from brew + +/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + +brew install \ + bash \ + stow \ + gnupg \ + pinentry-mac + +echo "pinentry-program $(which pinentry-mac)" >> ~/.gnupg/gpg-agent.conf +gpgconf --kill gpg-agent From 1c66ce8946c4db4bdf83ca6598dce848d33b0369 Mon Sep 17 00:00:00 2001 From: Anthony Axenov Date: Tue, 24 Mar 2026 00:33:33 +0800 Subject: [PATCH 07/13] llmfit --- install/llmfit | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100755 install/llmfit diff --git a/install/llmfit b/install/llmfit new file mode 100755 index 0000000..be9d6cf --- /dev/null +++ b/install/llmfit @@ -0,0 +1,49 @@ +#!/usr/bin/env bash +##makedesc: Install llmfit + +# https://github.com/AlexsJones/llmfit + +set -eo pipefail + +mkdir -p "$HOME/install" + +install() { + echo + echo "===============================================" + echo "Installing llmfit (latest)" + echo "===============================================" + echo + curl -fsSL https://llmfit.axjns.dev/install.sh | sh -s -- --local + echo + echo "Finish!" +} + +upgrade() { + echo + echo "===============================================" + echo "Upgrading llmfit" + echo "===============================================" + echo + curl -fsSL https://llmfit.axjns.dev/install.sh | sh -s -- --local + echo + echo "Finish!" +} + +remove() { + echo + echo "===============================================" + echo "Removing llmfit" + echo "===============================================" + echo + sudo rm -rf "$(which llmfit)" + echo + echo "Finish!" + echo +} + +case "$1" in + u|upgrade) upgrade ;; + r|remove|d|delete|p|purge) remove ;; + *) install ;; +esac + From 7fb1b37e4f9107e08f3daea8ad829a4f74e96680 Mon Sep 17 00:00:00 2001 From: Anthony Axenov Date: Tue, 24 Mar 2026 00:33:45 +0800 Subject: [PATCH 08/13] ollama --- install/ollama | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100755 install/ollama diff --git a/install/ollama b/install/ollama new file mode 100755 index 0000000..6e46b21 --- /dev/null +++ b/install/ollama @@ -0,0 +1,61 @@ +#!/usr/bin/env bash +##makedesc: Install ollama + +# https://github.com/ollama/ollama + +set -o pipefail + +mkdir -p "$HOME/install" + +install() { + echo + echo "===============================================" + echo "Installing ollama (latest)" + echo "===============================================" + echo + curl -fsSL https://ollama.com/install.sh | sh + echo + echo "Finish!" +} + +upgrade() { + echo + echo "===============================================" + echo "Upgrading ollama" + echo "===============================================" + echo + curl -fsSL https://ollama.com/install.sh | sh + echo + echo "Finish!" +} + +remove() { + # https://docs.ollama.com/linux#uninstall + echo + echo "===============================================" + echo "Removing ollama" + echo "===============================================" + echo + sudo systemctl stop ollama + sudo systemctl disable ollama + sudo rm /etc/systemd/system/ollama.service + sudo rm -r "$(which ollama | tr 'bin' 'lib')" + sudo rm "$(which ollama)" + sudo userdel ollama + sudo groupdel ollama + sudo rm -rf \ + /usr/bin/ollama \ + /usr/share/ollama \ + /usr/local/lib/ollama \ + /usr/local/bin/ollama + echo + echo "Finish!" + echo +} + +case "$1" in + u|upgrade) upgrade ;; + r|remove|d|delete|p|purge) remove ;; + *) install ;; +esac + From 0df1b31065313868d09624c15e487c33d75b3d63 Mon Sep 17 00:00:00 2001 From: Anthony Axenov Date: Tue, 24 Mar 2026 00:34:34 +0800 Subject: [PATCH 09/13] docker-model-plugin --- install/docker | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/install/docker b/install/docker index 4530e37..4a4c5c6 100755 --- a/install/docker +++ b/install/docker @@ -10,24 +10,27 @@ doRemove() { sudo apt purge -y docker* podman-docker containerd runc } -install_() { - echo - echo "===============================================" - echo "Installing Docker" - echo "===============================================" - echo - doRemove +installRepo() { sudo apt install -y ca-certificates lsb-release source /etc/os-release - codename="$VERSION_CODENAME" key="/etc/apt/keyrings/docker.asc" arch=$(dpkg --print-architecture) sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" -o "$key" sudo chmod a+r $key - echo "deb [arch=$arch signed-by=$key] https://download.docker.com/linux/ubuntu $codename stable" \ + echo "deb [arch=$arch signed-by=$key] https://download.docker.com/linux/ubuntu $VERSION_CODENAME stable" \ | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update +} + +install() { + echo + echo "===============================================" + echo "Installing Docker" + echo "===============================================" + echo + # doRemove + installRepo sudo apt install -y \ docker-ce \ docker-ce-cli \ @@ -53,7 +56,8 @@ upgrade() { docker-ce-cli \ containerd.io \ docker-buildx-plugin \ - docker-compose-plugin + docker-compose-plugin \ + docker-model-plugin echo echo "Finish!" echo @@ -74,5 +78,7 @@ remove() { case "$1" in u|upgrade|update) upgrade ;; r|remove|d|delete|p|purge) remove ;; + install-repo) installRepo ;; + # remove-repo) removeRepo ;; #TODO *) install ;; esac From 3b089218248773f2c4547ea3bea7379314b57920 Mon Sep 17 00:00:00 2001 From: Anthony Axenov Date: Tue, 24 Mar 2026 00:35:17 +0800 Subject: [PATCH 10/13] Makefile update --- .gitignore | 1 + Makefile | 208 ++++++++++++++++++++++++++++------------------------- 2 files changed, 113 insertions(+), 96 deletions(-) diff --git a/.gitignore b/.gitignore index 364e565..d478305 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ +.DS_Store *.bak *.log diff --git a/Makefile b/Makefile index b622c27..610b82b 100644 --- a/Makefile +++ b/Makefile @@ -1,241 +1,261 @@ -# Autogenerated at 10.07.2025 23:45 using ./gen-makefile +# Autogenerated at 24.03.2026 00:34 using ./gen-makefile .DEFAULT_GOAL := help #=============================================== # Scripts listed in ./install #=============================================== -##apache2: Install apache2 (latest) +##anytype: Manage anytype (deb) +anytype: + @./install/anytype install + +##apache2: Manage apache2 (apt) apache2: - @./install/apache2 + @./install/apache2 install -##apt: Install software from apt +##apt: Install basic software from apt apt: - @./install/apt + @./install/apt install -##canon-mg2500: Install Canon Pixma MG2500 + ppa +##brew: Install software from brew +brew: + @./install/brew install + +##canon-mg2500: Canon Pixma MG2500 + ppa canon-mg2500: - @./install/canon-mg2500 + @./install/canon-mg2500 install -##chrome: Install google chrome (latest) +##chrome: Google Chrome (latest) chrome: - @./install/chrome + @./install/chrome install -##clamav: ClamAV (WIP) +##clamav: ClamAV clamav: - @./install/clamav + @./install/clamav install ##composer: Install composer (latest) composer: - @./install/composer + @./install/composer install -##docker: Install docker (latest) + ppa +##docker: Docker + ppa docker: - @./install/docker + @./install/docker install ##dots: Install dotfiles dots: - @./install/dots + @./install/dots install ##droidcam: Install droidcam v1.9.0 droidcam: - @./install/droidcam + @./install/droidcam install ##droidcam-obs: Install droidcam-obs plugin v1.5.1 droidcam-obs: - @./install/droidcam-obs + @./install/droidcam-obs install + +##_example: Example script +_example: + @./install/_example install ##flameshot: Install flameshot (latest) flameshot: - @./install/flameshot - -##frkn.deprecated: Install Wireguard + FRKN -frkn.deprecated: - @./install/frkn.deprecated + @./install/flameshot install ##git: Install git (latest) git: - @./install/git + @./install/git install -##golang: Install golang v1.21.0 +##golang: Install golang golang: - @./install/golang + @./install/golang install ##grub-customizer: Install grub-customizer (latest + ppa) grub-customizer: - @./install/grub-customizer - -##jbmono: Install JetBrains Mono fonts -jbmono: - @./install/jbmono + @./install/grub-customizer install ##kde-appmenu: Install KDE Window AppMenu Applet kde-appmenu: - @./install/kde-appmenu + @./install/kde-appmenu install ##kde-backports: Install KDE Backports kde-backports: - @./install/kde-backports + @./install/kde-backports install ##kde-file-templates: Install file templates (KDE) kde-file-templates: - @./install/kde-file-templates + @./install/kde-file-templates install ##kde-portal: Install KDE portal kde-portal: - @./install/kde-portal + @./install/kde-portal install + +##keyd: Install keyd +keyd: + @./install/keyd install ##libreoffice: Install libreoffice libreoffice: - @./install/libreoffice + @./install/libreoffice install ##lite-xl: Install lite-xl v2.1.7 lite-xl: - @./install/lite-xl + @./install/lite-xl install + +##llmfit: Install llmfit +llmfit: + @./install/llmfit install ##mariadb: Install mariadb (latest) and php-mysql + phpMyAdmin (if php is installed) mariadb: - @./install/mariadb + @./install/mariadb install + +##nerd-fonts: Install nerd-fonts +nerd-fonts: + @./install/nerd-fonts install ##nodejs: Install nodejs + npm via nvm nodejs: - @./install/nodejs + @./install/nodejs install ##ntfy: Install ntfy (latest) + ppa ntfy: - @./install/ntfy + @./install/ntfy install ##nvim: Install nvim + lazyvim nvim: - @./install/nvim + @./install/nvim install ##obs-studio: Install obs-studio (latest snap) obs-studio: - @./install/obs-studio + @./install/obs-studio install + +##ollama: Install ollama +ollama: + @./install/ollama install ##omz-clean: Install omz (latest) omz-clean: - @./install/omz-clean + @./install/omz-clean install ##omz-fancy: Install omz fancy (powerline10k + MesloLGS font) omz-fancy: - @./install/omz-fancy + @./install/omz-fancy install ##openvpn: Install openvpn v2.6.3 (src) openvpn: - @./install/openvpn + @./install/openvpn install ##papirus: Install papirus-icon-theme (latest) papirus: - @./install/papirus + @./install/papirus install ##pgsql: Install postgresql (latest) and php-pgsql (if php is installed) pgsql: - @./install/pgsql + @./install/pgsql install ##php: Install php v8.4 php: - @./install/php + @./install/php install ##phpcs: Install phpcs + php-cs-fixer phpcs: - @./install/phpcs + @./install/phpcs install ##phpmd: Install phpmd phpmd: - @./install/phpmd + @./install/phpmd install ##php-psalm: Install psalm php-psalm: - @./install/php-psalm + @./install/php-psalm install ##php-spx: Install php-spx php-spx: - @./install/php-spx + @./install/php-spx install ##phpstan: Install phpstan phpstan: - @./install/phpstan + @./install/phpstan install ##phpunit: Install phpunit phpunit: - @./install/phpunit + @./install/phpunit install ##postman: Install postman (latest) postman: - @./install/postman + @./install/postman install ##qt5: Install qt5 qt5: - @./install/qt5 + @./install/qt5 install -##rustdesk: Install rustdesk client (flatpak) +##rustdesk: Install rustdesk client v1.4.2 (deb) rustdesk: - @./install/rustdesk - -##rustdesk-deb: Install rustdesk client v1.4.0 (deb) -rustdesk-deb: - @./install/rustdesk-deb + @./install/rustdesk install ##snap: Install bunch of software from snap snap: - @./install/snap + @./install/snap install ##sublimemerge: Install Sublime Merge sublimemerge: - @./install/sublimemerge + @./install/sublimemerge install ##sublimetext: Install Sublime Text sublimetext: - @./install/sublimetext + @./install/sublimetext install ##suld: Samsung Unified Linux Driver repo suld: - @./install/suld + @./install/suld install ##syncthing: Install syncthing (latest) + ppa syncthing: - @./install/syncthing + @./install/syncthing install ##telebit: Install telebit (latest) telebit: - @./install/telebit + @./install/telebit install ##telegram: Install telegram (latest) telegram: - @./install/telegram + @./install/telegram install + +##tilt: +tilt: + @./install/tilt install ##ulauncher: Install ulauncher (latest) + ppa ulauncher: - @./install/ulauncher + @./install/ulauncher install ##vivaldi: Install Vivaldi + ppa vivaldi: - @./install/vivaldi + @./install/vivaldi install ##vscode: VSCode deb-package vscode: - @./install/vscode + @./install/vscode install ##wine: Install wine (latest) + ppa wine: - @./install/wine + @./install/wine install ##youtube-dl: Install youtube-dl (src) youtube-dl: - @./install/youtube-dl + @./install/youtube-dl install ##ytdlcue: Install ytdlcue ytdlcue: - @./install/ytdlcue + @./install/ytdlcue install ##zint: Install zint (latest) zint: - @./install/zint + @./install/zint install ##zsh: Install vanilla zsh zsh: - @./install/zsh + @./install/zsh install #=============================================== @@ -265,63 +285,59 @@ phpstack: php phptools ##^omz: Upgrade omz ^omz: - @./upgrade/omz + @./upgrade/omz upgrade #=============================================== # Scripts listed in ./uninstall #=============================================== -##/apache2: Uninstall apache2 -/apache2: - @./uninstall/apache2 - -##/canon-mg2500: Uninstall Canon Pixma MG2500 + ppa -/canon-mg2500: - @./uninstall/canon-mg2500 - ##/chrome: Uninstall google chrome /chrome: - @./uninstall/chrome + @./uninstall/chrome remove ##/composer: Uninstall composer /composer: - @./uninstall/composer + @./uninstall/composer remove ##/docker: Uninstall docker + ppa /docker: - @./uninstall/docker + @./uninstall/docker remove ##/grub-customizer: Uninstall grub-customizer with ppa /grub-customizer: - @./uninstall/grub-customizer + @./uninstall/grub-customizer remove ##/lazynvim: /lazynvim: - @./uninstall/lazynvim + @./uninstall/lazynvim remove ##/lite-xl: Uninstall lite-xl /lite-xl: - @./uninstall/lite-xl + @./uninstall/lite-xl remove ##/omz: Uninstall omz /omz: - @./uninstall/omz + @./uninstall/omz remove + +##/rustdesk: Uninstall rustdesk client +/rustdesk: + @./uninstall/rustdesk remove ##/sublimemerge: Uninstall Sublime Merge /sublimemerge: - @./uninstall/sublimemerge + @./uninstall/sublimemerge remove ##/sublimetext: Uninstall Sublime Text /sublimetext: - @./uninstall/sublimetext + @./uninstall/sublimetext remove ##/vivaldi: Uninstall vivaldi + ppa /vivaldi: - @./uninstall/vivaldi + @./uninstall/vivaldi remove ##/wine: Uninstall wine /wine: - @./uninstall/wine + @./uninstall/wine remove #=============================================== # Service goals From 721b69b3f96c77116c6b9c71f50ff2afccaf4bd8 Mon Sep 17 00:00:00 2001 From: Anthony Axenov Date: Wed, 25 Mar 2026 23:10:23 +0800 Subject: [PATCH 11/13] nerd-fonts for mac --- install/nerd-fonts | 42 +++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/install/nerd-fonts b/install/nerd-fonts index e6595ea..5c948a7 100755 --- a/install/nerd-fonts +++ b/install/nerd-fonts @@ -5,16 +5,31 @@ set -eo pipefail #TODO nokia-sans -downloadPath="$HOME/install/nerd-fonts" -installPath="$HOME/.local/share/fonts/" -url="https://github.com/ryanoasis/nerd-fonts/releases/latest/download" +isMac() { + uname -s | grep -q "Darwin" +} -fonts=( +isLinux() { + uname -s | grep -q "Linux" +} + +url="https://github.com/ryanoasis/nerd-fonts/releases/latest/download" +downloadPath="$HOME/install/nerd-fonts" +if isMac; then + installPath="$HOME/Library/Fonts/" +elif isLinux; then + installPath="$HOME/.local/share/fonts/" +else + echo "Ths OS not supported yet!" + exit +fi + +fontsNames=( FiraCode FiraMono JetBrainsMono Meslo - Noto + # Noto RobotoMono Ubuntu UbuntuMono @@ -30,14 +45,16 @@ install() { [[ -d "$downloadPath" ]] || mkdir -p "$downloadPath" - for fontname in "${fonts[@]}"; do - fontdir="$installPath/Nerd-$fontname" + for fontname in "${fontsNames[@]}"; do + fontDir="$installPath/Nerd-$fontname" wget "$url/$fontname.tar.xz" -O "$downloadPath/$fontname.tar.xz" - [[ -d "$installPath/$fontname" ]] || mkdir -p "$fontdir" - tar -xJf "$downloadPath/$fontname.tar.xz" -C "$fontdir" + [[ -d "$installPath/$fontname" ]] || mkdir -p "$fontDir" + tar -xJf "$downloadPath/$fontname.tar.xz" -C "$fontDir" done - fc-cache -vf "$installPath" + if isLinux; then + fc-cache -vf "$installPath" + fi echo echo "Finish!" @@ -52,7 +69,10 @@ remove() { echo find "$installPath" -type d -name "Nerd-*" -exec rm -rf {} + - fc-cache -vf "$installPath" + + if isLinux; then + fc-cache -vf "$installPath" + fi echo echo "Finish!" From 7112296339e9fd15f4dabb480892473d25b35e27 Mon Sep 17 00:00:00 2001 From: Anthony Axenov Date: Sun, 29 Mar 2026 00:14:29 +0800 Subject: [PATCH 12/13] nerd-fonts misc --- install/nerd-fonts | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/install/nerd-fonts b/install/nerd-fonts index 5c948a7..9d55fe5 100755 --- a/install/nerd-fonts +++ b/install/nerd-fonts @@ -5,13 +5,8 @@ set -eo pipefail #TODO nokia-sans -isMac() { - uname -s | grep -q "Darwin" -} - -isLinux() { - uname -s | grep -q "Linux" -} +isMac() { uname -s | grep -q "Darwin"; } +isLinux() { uname -s | grep -q "Linux"; } url="https://github.com/ryanoasis/nerd-fonts/releases/latest/download" downloadPath="$HOME/install/nerd-fonts" @@ -20,20 +15,20 @@ if isMac; then elif isLinux; then installPath="$HOME/.local/share/fonts/" else - echo "Ths OS not supported yet!" + echo "This OS is not supported yet!" exit fi fontsNames=( FiraCode - FiraMono + # FiraMono JetBrainsMono Meslo # Noto RobotoMono - Ubuntu - UbuntuMono - UbuntuSans + # Ubuntu + # UbuntuMono + # UbuntuSans ) install() { @@ -44,17 +39,13 @@ install() { echo [[ -d "$downloadPath" ]] || mkdir -p "$downloadPath" - for fontname in "${fontsNames[@]}"; do fontDir="$installPath/Nerd-$fontname" wget "$url/$fontname.tar.xz" -O "$downloadPath/$fontname.tar.xz" [[ -d "$installPath/$fontname" ]] || mkdir -p "$fontDir" tar -xJf "$downloadPath/$fontname.tar.xz" -C "$fontDir" done - - if isLinux; then - fc-cache -vf "$installPath" - fi + isLinux && fc-cache -vf "$installPath" echo echo "Finish!" @@ -69,10 +60,7 @@ remove() { echo find "$installPath" -type d -name "Nerd-*" -exec rm -rf {} + - - if isLinux; then - fc-cache -vf "$installPath" - fi + isLinux && fc-cache -vf "$installPath" echo echo "Finish!" From a167f2f393d9bebd07dbc103a593ec52257aa01e Mon Sep 17 00:00:00 2001 From: Anthony Axenov Date: Sun, 29 Mar 2026 00:36:48 +0800 Subject: [PATCH 13/13] nodejs nvm for macos --- install/nodejs | 75 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 57 insertions(+), 18 deletions(-) diff --git a/install/nodejs b/install/nodejs index ab55a79..fa0c8ae 100755 --- a/install/nodejs +++ b/install/nodejs @@ -1,27 +1,66 @@ #!/usr/bin/env bash ##makedesc: Install nodejs + npm via nvm -echo -echo "===============================================" -echo "Installing nodejs..." -echo "===============================================" -echo +isMac() { uname -s | grep -q "Darwin"; } +isLinux() { uname -s | grep -q "Linux"; } -installed() { - command -v "$1" >/dev/null 2>&1 +install() { + echo + echo "===============================================" + echo "Installing nodejs + nvm..." + echo "===============================================" + echo + + if isMac; then + brew install nvm + elif isLinux; then + wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash + else + echo "This OS is not supported yet!" + exit + fi + nvm install-latest-npm + nvm install node + nvm use node + export NVM_DIR="$HOME/.nvm" + [ -s "$NVM_DIR/nvm.sh" ] && source "$NVM_DIR/nvm.sh" + [ -s "$NVM_DIR/bash_completion" ] && source "$NVM_DIR/bash_completion" + + cat << EOF >> "$HOME/.profile" + +# nvm (not nvim!) +export NVM_DIR="\$HOME/.nvm" # nvim_autoinstalled +[ -s "\$NVM_DIR/nvm.sh" ] && source "\$NVM_DIR/nvm.sh" # nvim_autoinstalled +[ -s "\$NVM_DIR/bash_completion" ] && source "\$NVM_DIR/bash_completion" # nvim_autoinstalled + +EOF + + echo + echo "Finish!" + echo + + nvm current + nvm ls } -installed "nvm" && sudo apt install -y --autoremove nodejs npm nvm +remove() { + echo + echo "===============================================" + echo "Removing nodejs + nvm..." + echo "===============================================" + echo -! installed "nvm" && wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash + nvm unload + rm -rf "$NVM_DIR" + # sed -i "/NVM_DIR[=\].+/d" "$HOME/.profile" + brew uninstall nvm -export NVM_DIR="$HOME/.nvm" -[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" -[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" + echo + echo "Finish!" + echo +} -nvm install-latest-npm -nvm install node -nvm use node -echo "Finish!" -nvm current -nvm ls +case "$1" in + r|remove|d|delete|p|purge) remove ;; + *) install ;; +esac