From e91257797858f3421a1df9351158ba9317acf898 Mon Sep 17 00:00:00 2001 From: Roman Bakirov Date: Fri, 30 Aug 2024 18:59:51 +0500 Subject: [PATCH] Reinit --- .gitignore | 2 + Readme.md | 370 +++++++++++++++++++++++++++++++++++++ ToDo.md | 6 + default/nginx-default.conf | 91 +++++++++ default/nginx.conf | 85 +++++++++ git/config | 9 + newalias-dist.sh | 49 +++++ newalias-function.sh | 105 +++++++++++ newalias.conf | 3 + newalias.png | Bin 0 -> 37509 bytes version.txt | 1 + 11 files changed, 721 insertions(+) create mode 100644 .gitignore create mode 100644 Readme.md create mode 100644 ToDo.md create mode 100644 default/nginx-default.conf create mode 100644 default/nginx.conf create mode 100644 git/config create mode 100644 newalias-dist.sh create mode 100644 newalias-function.sh create mode 100644 newalias.conf create mode 100644 newalias.png create mode 100644 version.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6b39bac --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.idea +newalias-private.sh \ No newline at end of file diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..21fd097 --- /dev/null +++ b/Readme.md @@ -0,0 +1,370 @@ +![Newalias](https://github.com/makhnanov/newalias/blob/main/newalias.png?raw=true) + +## Introduction +Here you can find aliases, tricks, useful things prefer for bash interpreter. \ +This project collect some programs and scripts for your just installed Linux (Ubuntu). \ +Tested on `bash5.1.8(1)-release` \ +Features: +- Function `newalias` with easy control aliases and self update +- File with dist aliases +- File with your private aliases (unversioned) +- After-install recommendations for PC or VPS +- Default configs for some services +- Troubleshooting for some problems + +## Installation via git +```shell +# Clone project to home hidden dir +cd ~ +git clone https://github.com/makhnanov/newalias.git $(pwd)/.newalias +# Become god +sudo su +# Connect this project aliases file to global shell +echo ". $(pwd)/.newalias/newalias-dist.sh" >> /etc/bash.bashrc +# Create and connect your private file to global shell +touch $(pwd)/.newalias/newalias-private.sh +echo ". $(pwd)/.newalias/newalias-private.sh" >> /etc/bash.bashrc +``` + +## newalias -h +```text +Usage: + newalias # Edit your private file with aliases. + # or + newalias [parameter] + +Configuration: + Directory: /home/roman/.newalias + Dist aliases: /home/roman/.newalias/newalias-dist.sh + Private aliases: /home/roman/.newalias/newalias-private.sh + Editor: /usr/bin/nano + Browser: /usr/bin/google-chrome + Configuration file: /home/roman/.newalias/newalias.conf + +Parameters: + -h, --help This message with parameters description. + + -p, --private-edit Edit your private file with aliases. + + -d, --dist-edit Edit dist public file with aliases. + Not recommend for edit if you are not contributor. + + -c, --dist-compare Open browser to compare changes with version of your public aliases and github version. + + -u, --self-update Self update (git pull) for get new public aliases. + + -e, --config-edit Configure editor and browser for work with newalias, and github check updates. + + -v, --version Show current version and git commit sha. + + -t, --test Test config for check editor and browser existence. + + -r, --readme Show readme for get more useful tips. +``` + + +## Distributed aliases +### [Here](https://github.com/makhnanov/newalias/blob/main/newalias-dist.sh) or use `newalias -d` + +## Additionally, after just install OS / first start recommendations +```shell +# Fix bluetooth problems +https://github.com/winterheart/broadcom-bt-firmware + +# Fast entrance to server +alias serv='sshpass -p VerySecretPassword ssh root@ip.v4.address.dist' + +# Install useful programs +sudo apt-get update +sudo apt-get -y install keepassxc git make mc nano nmap sshpass bash-completion cmatrix cheese translate-shell \ + cowsay jq net-tools htop filezilla rsync + +# Show network addresses +hostname -I +ifconfig -a +ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//' +curl -4 icanhazip.com + +# Fix chrome require unlock keyring +/usr/bin/google-chrome-stable %U --password-store=basic +``` + +### Download and install chrome +```shell +# xdg-open https://www.google.ru/chrome/ +cd ~/Downloads 2> /dev/null || cd ~/Загрузки +sudo dpkg -i google-chrome +rm google-chrome* +``` + +### Download and install telegram +```shell +sudo bash -c "wget -O /opt/tg.tar https://telegram.org/dl/desktop/linux && \ + tar -xvf /opt/tg.tar --directory=/opt && \ + rm /opt/tg.tar" +/opt/Telegram/Telegram + +# Desktop shortcut /usr/share/applications +# https://github.com/telegramdesktop/tdesktop/blob/10e7bd0d6eb02c05b49680ad9c3c9270f34c82e9/lib/xdg/telegramdesktop.desktop +``` + +### Download and install jetbrains toolbox +```shell +sudo bash -c "wget -O /opt/toolbox.tar.gz \ + $(curl -s "https://data.services.jetbrains.com/products/releases?code=TBA&latest=true&type=release" | jq '.TBA | .[].downloads.linux.link' | xargs) && \ + tar -xvf /opt/toolbox.tar.gz --directory=/opt && \ + rm /opt/toolbox.tar.gz" +$(find /opt/ -iname jetbrains-toolbox) +``` + +```shell +# Test SSD/HDD io speed +sudo apt-get -y install fio +fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=testfio --bs=4k --iodepth=64 --size=8G --readwrite=randrw --rwmixread=75 + +# Test SSD/HDD ping +sudo apt-get -y install ioping +ioping -c 20 /tmp/ + +# Download and install jetbrains toolbox +xdg-open https://www.jetbrains.com/toolbox-app/ +sudo mkdir /opt/JBToolbox +sudo chmod -R 777 /opt/JBToolbox +tar -xvf jetbrains-toolbox* -C /opt/JBToolbox +/opt/JBToolbox/jetbrains-toolbox-*/jetbrains-toolbox + +# Download and install sublime text +xdg-open https://www.sublimetext.com/docs/linux_repositories.html +wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add - +sudo apt-get -y install apt-transport-https +echo "deb https://download.sublimetext.com/ apt/stable/" | sudo tee /etc/apt/sources.list.d/sublime-text.list +sudo apt-get update +sudo apt-get install sublime-text + +# Generate new SSH key pair +ssh-keygen -t ed25519 -C "your_email@example.com" +cat $(pwd)/.ssh/id_ed25519.pub + +# Add additional git host +sudo nano ~/.ssh/config +[Content](https://github.com/makhnanov/newalias/blob/main/git/config.conf) + +# Download and install Postman Canary +xdg-open https://www.postman.com/downloads/canary/ +sudo mkdir /opt/PostmanCanary +sudo chmod -R 777 /opt/PostmanCanary +tar -xvf PostmanCanary-* -C /opt/PostmanCanary +/opt/PostmanCanary/PostmanCanary/PostmanCanary + +# Download and install docker +xdg-open https://docs.docker.com/engine/install/ubuntu/ +sudo apt-get update +sudo apt-get install \ + ca-certificates \ + curl \ + gnupg \ + lsb-release +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg +echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ + $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null +sudo apt-get update +sudo apt-get -y install docker-ce docker-ce-cli containerd.io +sudo docker run hello-world +xdg-open https://docs.docker.com/engine/install/linux-postinstall/ +sudo groupadd docker +sudo usermod -aG docker $USER +newgrp docker +docker run hello-world +mkdir /home/"$USER"/.docker +sudo chown "$USER":"$USER" /home/"$USER"/.docker -R +sudo chmod g+rwx "$HOME/.docker" -R +sudo chmod 666 /var/run/docker.sock + +# Download and install docker-compose +xdg-open https://docs.docker.com/compose/cli-command/ +sudo mkdir -p /usr/local/lib/docker/cli-plugins +sudo chmod 777 /usr/local/lib/docker/cli-plugins +sudo curl -SL https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-linux-x86_64 -o /usr/local/lib/docker/cli-plugins/docker-compose +sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose +``` + +#### Download and install good docker containers viewer +```shell +# xdg-open https://github.com/bcicen/ctop +echo "deb http://packages.azlux.fr/debian/ buster main" | sudo tee /etc/apt/sources.list.d/azlux.list +wget -qO - https://azlux.fr/repo.gpg.key | sudo apt-key add - +sudo apt update +sudo apt install docker-ctop +``` + +```shell +# Find dir by regex +sudo find / -type d -name 'log' 2>/dev/null +# Find file by regex +sudo find / -type f -name '*.log' 2>/dev/null + +# Install latest PHP +sudo apt update +sudo apt -y install lsb-release ca-certificates apt-transport-https software-properties-common +sudo add-apt-repository ppa:ondrej/php +sudo apt -y install php8.1 php8.1-xml + +# Disable / enable apache2 autostart +sudo update-rc.d apache2 disable +sudo update-rc.d apache2 enable +``` + +## VPS / VDS + +### Programs +```shell +apt-get -y install htop nano mc git jq curl rsync +``` + +### Nginx + +#### Default configs [here](https://github.com/makhnanov/newalias/tree/main/default) + +#### Install and enable ufw +```shell +apt update +apt install nginx +ufw app list +ufw status +ufw allow 'Nginx HTTP' # Or other +# Before execute next command make sure that you allow OpenSSH if you are on remote server =) +ufw enable # ufw allow 'OpenSSH' +``` + +#### Test nginx config +```shell +nginx -t +``` + +#### Включение / выключение автостарта +```shell +sudo systemctl enable nginx +sudo systemctl disable nginx +``` + +#### Redirect from HTTP to HTTPS +``` +server { + listen 80 default_server; + server_name example.com; + return 302 https://$server_name$request_uri; +} +``` + +#### Set HTTPS / SSL +``` +server { + gzip off; + + listen 443 ssl http2 default_server; + listen [::]:443 ssl http2 default_server; + + ssl_certificate certs/expert.crt; + ssl_certificate_key certs/expert.key; + ... +} +``` + +#### Troubleshooting with crt / key +``` +-----BEGIN TRUSTED CERTIFICATE----- +-----END TRUSTED CERTIFICATE----- +-----BEGIN RSA PRIVATE KEY----- +-----END RSA PRIVATE KEY----- +``` + +#### Install OBS Studio +``` +xdg-open https://obsproject.com/wiki/install-instructions#linux-install-directions +sudo apt -y install ffmpeg +sudo apt -y install v4l2loopback-dkms +sudo add-apt-repository ppa:obsproject/obs-studio +sudo apt update +sudo apt -y install obs-studio +``` + + +## Docker +```shell +### Fix docker in container dns / internet troubles +Create ```/etc/docker/daemon.json``` +```json +{ +"dns": ["8.8.8.8"] +} +``` +### Login +``` +docker login -u username -p password host +``` +### Other +```shell +docker rm -f $(docker ps -aq) +docker volume rm $(docker volume ls -q) +docker network prune -f +docker network ls +COMPOSE=docker compose \ +$(COMPOSE) up --detach --remove-orphans --force-recreate --build +$(COMPOSE) down +``` + +## Git +```shell +git config --global init.defaultBranch main +git branch -m main +git config --global user.name "John Doe" +git config --global user.email johndoe@example.com +git config --global core.editor nano +git config --global init.defaultBranch main +git config --list +git config user.name +git branch -m main + +# How to add read and write access for new autogenerated unversioned files inside docker container +docker compose exec php bash -c "chod 777 $(git ls-files --others --exclude-standard | sed "s/src\///g")" +# Also you can add alias allow-read-write-new-files='...' + + +``` + +## Write Windows.iso on linux to USB +[WoeUSB](https://github.com/WoeUSB/WoeUSB-ng) + +## Format usb on linux for windows and linux compatibility +sudo fdisk -l +sudo mkfs -t vfat -L FLASH /dev/sdc + +## Zip folder +zip -qr backup.zip folder # Without output +sudo 7z a backup.zip folder # Witho percentage output + +## Xubuntu clock date format +```shell +%A %_d %b (%m) %G | %j days | %I:%M %p | %T +``` + +## Grub disable timeout +```shell +sudo nano /etc/default/grub +GRUB_TIMEOUT=-1 +sudo update-grub +# https://andreyex.ru/linux/kak-izmenit-vremya-ozhidaniya-grub-v-linux/ +``` + +## Grub remove useless elements +```shell +sudo add-apt-repository ppa:danielrichter2007/grub-customizer +sudo apt-get update +sudo apt-get install grub-customizer +``` + +## Install Postman +```shell +sudo snap install postman +``` diff --git a/ToDo.md b/ToDo.md new file mode 100644 index 0000000..a861c72 --- /dev/null +++ b/ToDo.md @@ -0,0 +1,6 @@ +### ToDo: +- Separate readme for files +- Use builder +- Rewrite with go +- Rename *.sh files to not *.sh +- Separate command in readme for ```shell ``` per one logic for easy IdeIdea* execution diff --git a/default/nginx-default.conf b/default/nginx-default.conf new file mode 100644 index 0000000..9602d48 --- /dev/null +++ b/default/nginx-default.conf @@ -0,0 +1,91 @@ +# Default /etc/nginx/sites-available/default in nginx/1.14.0 (Ubuntu) +## +# You should look at the following URL's in order to grasp a solid understanding +# of Nginx configuration files in order to fully unleash the power of Nginx. +# https://www.nginx.com/resources/wiki/start/ +# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/ +# https://wiki.debian.org/Nginx/DirectoryStructure +# +# In most cases, administrators will remove this file from sites-enabled/ and +# leave it as reference inside of sites-available where it will continue to be +# updated by the nginx packaging team. +# +# This file will automatically load configuration files provided by other +# applications, such as Drupal or Wordpress. These applications will be made +# available underneath a path with that package name, such as /drupal8. +# +# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples. +## + +# Default server configuration + +server { + listen 80 default_server; + listen [::]:80 default_server; + + # SSL configuration + # + # listen 443 ssl default_server; + # listen [::]:443 ssl default_server; + # + # Note: You should disable gzip for SSL traffic. + # See: https://bugs.debian.org/773332 + # + # Read up on ssl_ciphers to ensure a secure configuration. + # See: https://bugs.debian.org/765782 + # + # Self signed certs generated by the ssl-cert package + # Don't use them in a production server! + # + # include snippets/snakeoil.conf; + + root /var/www/html; + + # Add index.php to the list if you are using PHP + index index.html index.htm index.nginx-debian.html; + + server_name _; + + location / { + # First attempt to serve request as file, then + # as directory, then fall back to displaying a 404. + try_files $uri $uri/ =404; + } + + # pass PHP scripts to FastCGI server + # + #location ~ \.php$ { + # include snippets/fastcgi-php.conf; + # + # # With php-fpm (or other unix sockets): + # fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; + # # With php-cgi (or other tcp sockets): + # fastcgi_pass 127.0.0.1:9000; + #} + + # deny access to .htaccess files, if Apache's document root + # concurs with nginx's one + # + #location ~ /\.ht { + # deny all; + #} +} + +# Virtual Host configuration for example.com +# +# You can move that to a different file under sites-available/ and symlink that +# to sites-enabled/ to enable it. +# +#server { +# listen 80; +# listen [::]:80; +# +# server_name example.com; +# +# root /var/www/example.com; +# index index.html; +# +# location / { +# try_files $uri $uri/ =404; +# } +#} diff --git a/default/nginx.conf b/default/nginx.conf new file mode 100644 index 0000000..241b2b2 --- /dev/null +++ b/default/nginx.conf @@ -0,0 +1,85 @@ +# Default /etc/nginx/nginx.conf in nginx/1.14.0 (Ubuntu) + +user www-data; +worker_processes auto; +pid /run/nginx.pid; +include /etc/nginx/modules-enabled/*.conf; + +events { + worker_connections 768; + # multi_accept on; +} + +http { + + ## + # Basic Settings + ## + + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 2048; + # server_tokens off; + + # server_names_hash_bucket_size 64; + # server_name_in_redirect off; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + ## + # SSL Settings + ## + + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE + ssl_prefer_server_ciphers on; + + ## + # Logging Settings + ## + + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + ## + # Gzip Settings + ## + + gzip on; + + # gzip_vary on; + # gzip_proxied any; + # gzip_comp_level 6; + # gzip_buffers 16 8k; + # gzip_http_version 1.1; + # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; + + ## + # Virtual Host Configs + ## + + include /etc/nginx/conf.d/*.conf; + include /etc/nginx/sites-enabled/*; +} +#mail { +# # See sample authentication script at: +# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript +# +# # auth_http localhost/auth.php; +# # pop3_capabilities "TOP" "USER"; +# # imap_capabilities "IMAP4rev1" "UIDPLUS"; +# +# server { +# listen localhost:110; +# protocol pop3; +# proxy on; +# } +# +# server { +# listen localhost:143; +# protocol imap; +# proxy on; +# } +#} diff --git a/git/config b/git/config new file mode 100644 index 0000000..b1a7197 --- /dev/null +++ b/git/config @@ -0,0 +1,9 @@ +# GitLab.com +Host gitlab.com + PreferredAuthentications publickey + IdentityFile ~/.ssh/gitlab_com_rsa + +# Private GitLab instance +Host gitlab.company.com + PreferredAuthentications publickey + IdentityFile ~/.ssh/example_com_rsa diff --git a/newalias-dist.sh b/newalias-dist.sh new file mode 100644 index 0000000..a94d29e --- /dev/null +++ b/newalias-dist.sh @@ -0,0 +1,49 @@ +export NEWALIAS_DIR=$(dirname -- "${BASH_SOURCE[0]}") + +. $NEWALIAS_DIR/newalias-function.sh + +alias hosts='sudo nano /etc/hosts 2>/dev/null || nano /etc/hosts' + +alias ..='cd ..' +alias ...='cd ../..' +alias ....='cd ../../..' + +alias c=clear + +alias nrest='sudo service nginx restart 2>/dev/null || service nginx restart' +alias nconf='sudo mc /etc/nginx 2>/dev/null || mc /etc/nginx' +alias nt='sudo nginx -t 2>/dev/null || nginx -t' +alias nerror='cat /var/log/nginx/error.log' + +alias rwx="sudo chmod -R 777 2>/dev/null || chmod -R 777" + +alias ports='nmap -p- ' + +alias t='trans -target ru+en' + +alias yii='php yii' + +alias matrix='cmatrix -B' + +alias git-config-local='git config --local -e' +alias git-exclude-local='nano .git/info/exclude' +alias nginx-conf='mc /etc/nginx' +alias nginx-status='service nginx status' +alias nginx-reload='service nginx reload' +alias nginx-stop='service nginx stop' +alias nginx-start='service nginx start' +alias nginx-restart='service nginx restart' +alias nginx-error='mc /var/log/nginx' + +alias d=docker +alias dc='docker compose' +alias docker-stop-all='docker stop $(docker ps -aq)' +alias docker-rm-all-containers='docker rm $(docker ps -aq)' +alias docker-rm-all-volumes='docker volume rm $(docker volume ls -q)' +alias docker-rm-all-images='docker rmi $(docker images -q)' + +alias hooks='xfce4-terminal -e "mc .git/hooks/"' +alias rm-vendor='sudo rm -rf vendor/ 2>/dev/null || rm -rf vendor/' + +alias suspend='systemctl suspend' +alias shell='while true; do clear && make shell; sleep 1; done;' diff --git a/newalias-function.sh b/newalias-function.sh new file mode 100644 index 0000000..61171a3 --- /dev/null +++ b/newalias-function.sh @@ -0,0 +1,105 @@ +. $NEWALIAS_DIR/newalias.conf + +sb='\033[1m' +eb='\033[0m' + +newalias() { + case "$1" in + -h|--help ) + echo -e \ +"${sb}Usage:${eb} + newalias [parameter] + +${sb}Configuration:${eb} + Directory: $NEWALIAS_DIR + Dist aliases: $NEWALIAS_DIR/newalias-dist.sh + Private aliases: $NEWALIAS_DIR/newalias-private.sh + Editor: $NEWALIAS_EDITOR + Browser: $NEWALIAS_BROWSER + Configuration file: $NEWALIAS_DIR/newalias.conf + +${sb}Without parameters:${eb} + ${sb}-p${eb}, --private-edit Edit your private file with aliases. + +${sb}Parameters:${eb} + -h, --help This message with parameters description. + + ${sb}-p${eb}, --private-edit Edit your private file with aliases. + -d, --dist-edit Edit dist public file with aliases. + Not recommend for edit if you are not contributor. + + -c, --dist-compare Open browser to compare changes with version of your public aliases and github version. + + -u, --self-update Self update (git pull) for get new public aliases. + + -e, --config-edit Configure editor and browser for work with newalias, and github check updates. + + -v, --version Show current version and git commit sha. + + -t, --test Test config for check editor and browser existence. + + -r, --readme Show readme for get more useful tips. +" + ;; + -p|--private-edit ) + sudo $NEWALIAS_EDITOR $NEWALIAS_DIR/newalias-private.sh || $NEWALIAS_EDITOR $NEWALIAS_DIR/newalias-private.sh + ;; + -d|--dist-edit ) + sudo $NEWALIAS_EDITOR $NEWALIAS_DIR/newalias-dist.sh || $NEWALIAS_EDITOR $NEWALIAS_DIR/newalias-dist.sh + ;; + -c|--dist-compare ) + LATEST_DIST=$(curl -s "https://api.github.com/repos/makhnanov/newalias/commits/main" | jq '."sha"' | xargs) + LINK=https://github.com/makhnanov/newalias/compare/$(git -C $NEWALIAS_DIR log -1 --format="%H")..$LATEST_DIST + if [[ -f "$NEWALIAS_BROWSER" ]]; then + $NEWALIAS_BROWSER $LINK + else + echo $LINK + fi + ;; + -u|--self-update ) + git -C $NEWALIAS_DIR pull + ;; + -e|--config-edit ) + $NEWALIAS_EDITOR $NEWALIAS_DIR/newalias.conf + ;; + -v|--version ) + echo Version: $(cat $NEWALIAS_DIR/version.txt) + echo Branch: $(git -C $NEWALIAS_DIR rev-parse --abbrev-ref HEAD) + echo Commit SHA: $(git -C $NEWALIAS_DIR log -1 --format="%H") + ;; + -t|--test ) + if [[ -f "$NEWALIAS_BROWSER" ]]; then + echo -e "${sb}NEWALIAS_BROWSER:${eb} $NEWALIAS_BROWSER ${sb}OK${eb}" + else + echo -e "${sb}Problem with NEWALIAS_BROWSER.${eb} $NEWALIAS_BROWSER does not exist." + fi + if [[ -f "$NEWALIAS_EDITOR" ]]; then + echo -e "${sb}NEWALIAS_EDITOR:${eb} $NEWALIAS_EDITOR ${sb}OK${eb}" + else + echo -e "${sb}Problem with NEWALIAS_EDITOR.${eb} $NEWALIAS_EDITOR does not exist." + fi + echo -e "Configuration file: \n$NEWALIAS_DIR/newalias.conf" + # todo add interpreter + ;; + -r|--readme ) + echo -e "$(cat $NEWALIAS_DIR/Readme.md | sed 's|^#.*|\\033[1m&\\033[0m|g')" + ;; + * ) + newalias -p + ;; + esac + . /etc/bash.bashrc + exec $NEWALIAS_INTERPRETER +} + +_newalias() { + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + subcommands="-h --help -p --private-edit -d --dist-edit -c --dist-compare -u --self-update -e --config-edit -v --version -t --test -r --readme" + if [[ ${COMP_CWORD} == 1 ]] ; then + COMPREPLY=( $(compgen -W "${subcommands}" -- ${cur}) ) + return 0 + fi +} + +complete -F _newalias newalias diff --git a/newalias.conf b/newalias.conf new file mode 100644 index 0000000..3447b46 --- /dev/null +++ b/newalias.conf @@ -0,0 +1,3 @@ +export NEWALIAS_EDITOR=/usr/bin/nano +export NEWALIAS_BROWSER=/usr/bin/google-chrome +export NEWALIAS_INTERPRETER=/usr/bin/bash diff --git a/newalias.png b/newalias.png new file mode 100644 index 0000000000000000000000000000000000000000..237b19c2de26afedfabc11de41ec2370ac0aea69 GIT binary patch literal 37509 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⪚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 literal 0 HcmV?d00001 diff --git a/version.txt b/version.txt new file mode 100644 index 0000000..e4c0d46 --- /dev/null +++ b/version.txt @@ -0,0 +1 @@ +1.0.3 \ No newline at end of file