perplexity-cli
π§ A simple command-line client for the Perplexity API. Ask questions and receive answers directly from the terminal! πππ
π¨βπSet up your Linux server with plain shell scripts
git clone https://github.com/pch/welder.gitpch/welderWelder allows you to set up a Linux server with plain shell scripts.
I wrote it out of frustration with Ansible. Ansible is an amazing and powerful tool, but for my needs it's just too much. 90% of the time all I need is to be able to run a shell script on the server, without extra dependencies.
In most basic terms, that's what welder does.
But there's some more.
β οΈ NOTE: if you're looking for the previous version of welder, you'll find it here.
welder run <playbook> <server>){{ VAR_NAME }}) to substitute config variablesAn example directory structure:
βββ playbook.conf
βββ config.conf
βββ firewall
βΒ Β βββ files
βΒ Β βΒ Β βββ rules.v4
βΒ Β βββ firewall.sh
βββ nginx
βΒ Β βββ nginx.sh
βββ system
βΒ Β βββ files
βΒ Β βΒ Β βββ 10periodic
βΒ Β βΒ Β βββ 50unattended-upgrades
βΒ Β βΒ Β βββ ssh_key
βΒ Β βββ system.sh
βββ website
βββ files
βΒ Β βββ site.conf.template
βββ website.sh
Playbook is just a list of modules to execute. Example:
# playbook.conf system firewall nginx website
Config file:
SITE_DOMAIN = "example.com" SITE_DIR = "/var/www"
You can reference config variables in your scripts like this:
#!/bin/sh set -xeu . ./config.conf echo $SITE_DOMAIN
Welder offers simple sed-based templates that interpolate variables in double brackets
with values defined in config.
# website/files/nginx-site.conf.template
server {
listen 80;
server_name {{ SITE_DOMAIN }};
root {{ SITE_DIR }}/current/public;
}
Run the playbook with the following command:
welder run playbook.conf user@example.com
Welder goes through the modules defined in playbook.conf, copies them to a
cache directory, compiles config files and templates, rsyncs the directory to
the server. Then it runs the setup script that invokes all *.sh files
within the playbook (all scripts will be called with sudo).
# nginx/nginx.sh # NOTE: sudo isn't necessary because the whole script will be # invoked as `sudo nginx/nginx.sh` set -xeu # 'u' will give you warnings on unbound config variables add-apt-repository -y ppa:nginx/stable sapt-get update && apt-get install -y nginx service nginx start cp files/nginx.conf /etc/nginx/nginx.conf # Disable default site if [ -f /etc/nginx/sites-enabled/default ]; then rm /etc/nginx/sites-enabled/default fi service nginx restart
The only dependency required by welder is rsync (which should be
pre-installed on your system in most cases).
Check out welder into ~/.welder (or whatever location you prefer):
$ git clone https://github.com/pch/welder.git ~/.welder
Add ~/.welder/bin to your $PATH for access to the welder
command-line utility.
$ echo 'export PATH="$PATH:$HOME/.welder/bin"' >> ~/.bash_profile
Ubuntu Desktop note: Modify your ~/.bashrc instead of ~/.bash_profile.
Zsh note: Modify your ~/.zshrc file instead of ~/.bash_profile.
Restart your shell so that PATH changes take effect. (Opening a new terminal tab will usually do it.) Now check if welder was set up:
$ which welder /Users/my-user/Code/welder/bin/welder
Since welder allows you to run anything on the server, you should use it
with caution. It won't protect you from screw-ups, like
rm -rf "/$undefined_variable".
Use at your own risk.
There's an alternative version of welder (the classic version), re-implemented in Python by @thomas-mc-work.
more like this
π§ A simple command-line client for the Perplexity API. Ask questions and receive answers directly from the terminal! πππ
search projects, people, and tags