Merge branch 'refactor2' of git.axenov.dev:anthony/shell into refactor2

This commit is contained in:
2026-07-06 15:38:50 +08:00
32 changed files with 689 additions and 398 deletions
+1
View File
@@ -1,2 +1,3 @@
.DS_Store
*.bak
*.log
+112 -96
View File
@@ -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: <no description>
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: <no description>
/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
+3 -3
View File
@@ -18,7 +18,7 @@ for file in ./install/*; do
name=${name%.sh}
desc=$(grep -m 1 -oP "(?<=^##makedesc:\s).*$" ${file})
[ -z "$desc" ] && desc='<no description>'
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='<no description>'
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='<no description>'
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
+46
View File
@@ -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
Executable
+13
View File
@@ -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
+16 -10
View File
@@ -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
-53
View File
@@ -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"
}
+46 -17
View File
@@ -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
Executable
+69
View File
@@ -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
Executable
+49
View File
@@ -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
+25 -17
View File
@@ -5,20 +5,30 @@ 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"; }
isLinux() { uname -s | grep -q "Linux"; }
fonts=(
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 "This OS is not supported yet!"
exit
fi
fontsNames=(
FiraCode
FiraMono
# FiraMono
JetBrainsMono
Meslo
Noto
# Noto
RobotoMono
Ubuntu
UbuntuMono
UbuntuSans
# Ubuntu
# UbuntuMono
# UbuntuSans
)
install() {
@@ -29,15 +39,13 @@ install() {
echo
[[ -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"
isLinux && fc-cache -vf "$installPath"
echo
echo "Finish!"
@@ -52,7 +60,7 @@ remove() {
echo
find "$installPath" -type d -name "Nerd-*" -exec rm -rf {} +
fc-cache -vf "$installPath"
isLinux && fc-cache -vf "$installPath"
echo
echo "Finish!"
+57 -18
View File
@@ -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
Executable
+61
View File
@@ -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
+1 -1
View File
@@ -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
Executable
+33
View File
@@ -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
+1
View File
@@ -0,0 +1 @@
AFRAID_TOKEN=6qfkK3VmHf7t4PwvTUJtxNEQ
+25
View File
@@ -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"
-11
View File
@@ -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"
-57
View File
@@ -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
-115
View File
@@ -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
+55
View File
@@ -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'"
+54
View File
@@ -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'."
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
+22
View File
@@ -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"