{"id":13405872,"url":"https://github.com/Lissy93/dotfiles","last_synced_at":"2025-03-14T10:31:47.162Z","repository":{"id":50905629,"uuid":"334707165","full_name":"Lissy93/dotfiles","owner":"Lissy93","description":"🧰 ~ • My Đotfiles","archived":false,"fork":false,"pushed_at":"2024-08-12T15:00:13.000Z","size":734,"stargazers_count":283,"open_issues_count":1,"forks_count":29,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-08-12T17:23:34.065Z","etag":null,"topics":["dotbot","dotfiles","ranger","tmux","vim","zsh"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Lissy93.png","metadata":{"files":{"readme":".github/README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-01-31T16:54:34.000Z","updated_at":"2024-08-12T15:00:18.000Z","dependencies_parsed_at":"2023-02-09T19:45:29.423Z","dependency_job_id":"937f3597-2b1d-4a73-88c7-6d003c6a92a9","html_url":"https://github.com/Lissy93/dotfiles","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lissy93%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lissy93%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lissy93%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lissy93%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Lissy93","download_url":"https://codeload.github.com/Lissy93/dotfiles/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243562074,"owners_count":20311213,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dotbot","dotfiles","ranger","tmux","vim","zsh"],"created_at":"2024-07-30T19:02:14.468Z","updated_at":"2025-03-14T10:31:47.152Z","avatar_url":"https://github.com/Lissy93.png","language":"Shell","funding_links":[],"categories":["Shell","vim"],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\u003ccode\u003e~/.Dotfiles\u003c/code\u003e\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\u003ci\u003eMy dotfiles for configuring literally everything (automatically!)\u003c/i\u003e\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/lissy93/dotfiles\" title=\"Automate all the things!\"\u003e\n    \u003cimg width=\"140\" src=\"https://github.com/Lissy93/dotfiles/raw/master/.github/logo.png\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003ch3 align=\"center\"\u003e\u003ccode\u003e$HOME, sweet $HOME\u003c/code\u003e\u003c/h3\u003e\n\n## Contents\n- [Introduction to Dotfiles](#intro)\n    - [What are dotfiles?](#what-are-dotfiles)\n    - [Why do you need them?](#why-you-need-a-dotfile-system)\n    - [XDG Directories](#xdg-directories)\n    - [Containerized Userspace](#containerized-userspace)\n    - [Security](#security)\n    - [Dotfile Management Systems](#dotfile-management-systems)\n    - [So copy paste, right?](#so-copy-paste-right)\n- [My Dots](#my-dotfiles)\n    - [Setup](#setup)\n    - [Directory Structure](#directory-structure)\n    - [Install Script](#install-script)\n    - [Configuring](#configuring)\n    - [Colors](#color-theme)\n    - [Aliases](#aliases)\n    - [Packages](#packages)\n    - [System Preferences](#system-preferences)\n    - [Config Files](#config-files)\n    - [ZSH](#zsh)\n    - [Vim](#vim)\n    - [Tmux](#tmux)\n    - [Git](#git)\n    - [Dependencies](#dependencies)\n    - [Utilities](#utilities)\n        \n---\n\n## Intro\n\n### What are dotfiles?\n\nOne of the beautiful things about Linux, is how easily customizable everything is. Usually these custom configurations are stored in files that start with a dot (hence dotfiles!), and typically located in your users home `~`, or better yet `~/.config` (even this can be customized, for apps that respect the XDG Base Directory spec). Some examples of dotfiles that you're likely already familiar with include `.gitconfig`, `.zshrc` or `.vimrc`.\n\nYou will often find yourself tweaking your configs over time, so that your system perfectly matches your needs. It makes sense to back these files up, so that you don't need to set everything up from scratch each time you enter a new environment. Git is a near-perfect system for this, as it allows for easy roll-backs, branches and it's well supported with plenty of hosting options (like here on GitHub).\n\nOnce everything's setup, you'll be able to SSH into a fresh system or reinstall your OS, then just run your script and go from zero to feeling at right at home within a minute or two.\n\nIt's not hard to create your own dotfile repo, it's great fun and you'll learn a ton along the way!\n\n---\n\n### Why you need a Dotfile System?\n\nBy using a dotfile system, you can set up a brand new machine in minutes, keep settings synced across multiple environments, easily roll-back changes, and never risk loosing your precious config files. \n\nThis is important, because as a developer, we usually have multiple machines (work / personal laptops, cloud servers, virtual machines, some GH codespaces, maybe a few Pis, etc). And you're much more productive when working from a familiar environment, with all your settings applied just how you like them. But it would be a pain to have to set each of these machines up manually. Even if you've only got a single device, how much time would you loose if your data became lost or corrupted?\n\n---\n\n### XDG Directories\n\nThe location of config files can usually be defined using the [XDG base directory specification](https://specifications.freedesktop.org/basedir-spec), which is honored by most apps. This lets you specify where config, log, cache and data files are stored, keeping your top-level home directory free from clutter. You can do this by setting environmental variables, usually within the [`.zshenv`](https://github.com/Lissy93/dotfiles/blob/master/config/zsh.zshenv) file.\n\nFor example, in my setup I've [set these variables](https://github.com/Lissy93/dotfiles/blob/e839ab2d77f0be0d09b4f4ba3503c8b69ad925f3/config/zsh/.zshenv#L6=L10) to:\n\nVariable | Location\n--- | ---\n`XDG_CONFIG_HOME` | `~/.config`\n`XDG_DATA_HOME`   | `~/.local/share`\n`XDG_BIN_HOME`   | `~/.local/bin`\n`XDG_LIB_HOME`    | `~/.local/lib`\n`XDG_CACHE_HOME`  | `~/.local/var/cache`\n\n---\n\n### Containerized Userspace\n\nYou can also containerize your dotfiles, meaning with a single command, you can spin up a fresh virtual environment on any system, and immediately feel right at home with all your configurations, packages, aliases and utils.\n\nThis is awesome for a number of reasons: 1) Super minimal dependency installation on the host 2) Blazing fast, as you can pull your built image from a registry, instead of compiling everything locally 3) Cross-platform compatibility, whatever your host OS is, you can always have a familiar Linux system in the container 4) Security, you can control which host resources are accessible within each container\n\nThere's several methods of doing this, like having a Docker container or spinning up VMs with a predefined config (with something like [Vagrant](https://www.vagrantup.com/) or a [NixOS](https://nixos.org/)-based config).\n\nI went with an Alpine-based Docker container defined in the [`Dockerfile`](https://github.com/Lissy93/dotfiles/blob/master/Dockerfile). To try it out, just run `docker run lissy93/dotfiles`.\n\n---\n\n### Security\n\nSomething that is important to keep in mind, is security. Often you may have some personal info included in some of your dotfiles. Before storing anything on the internet, double check there's no sensitive info (think SSH keys, API keys or plaintext passwords). There's several solutions for managing sensitve info.\n\nThe simplest is just to have a [`.gitignore`](https://git-scm.com/docs/gitignore), so no private files get committed. Be sure to make sure your setup doesn't depend on those files though, or you'll get an error while setting up a fresh system.\n\nAnother option, is to encrypt sensitive info. A great tool for this is [`pass`](https://www.passwordstore.org/) as it makes GPG-encrypting passwords very easy ([this article](https://www.outcoldman.com/en/archive/2015/09/17/keep-sensitive-data-encrypted-in-dotfiles/) outlines how), or you could also just use plain old GPG (as outlined in [this article](https://www.abdullah.today/encrypted-dotfiles/)).\n\nI went with [git-crypt](https://github.com/AGWA/git-crypt), a GPG-based solution designed specifically for git repos. There's fallback (safe) plaintext versions, to prevent any errors if the GPG keys aren't present.\n\n---\n\n\n### Dotfile Management Systems\n\nIn terms of managing and applying your dotfiles, you can make things simple, or complex as you like.\n\nThe two most common approaches are be either [symlinking](#option-1---symlinking), or using [git bare repo](#option-2---git-bare-repo), but you could also do things manually by writing a simple script.\n\n#### Option 1 - Symlinking\n\nSymlinks let you maintain all your dotfiles in a working directory, and then link them to the appropriate places on disk, sort of like shortcuts.\n\nFor example, if your dotfiles are in `~/Documents/dotfiles`, you could create a zshrc file there, and link it with:\n\n```bash\nln -s ~/Documents/dotfiles/zsh/.zshrc ~/.zshrc\n``` \n\nThis would obviously get cumbersome very quickly if you had a lot of files, so you would really want to automate this process. You could either create your own script to do this, or use a tool specifically designed for this.\n\nI personally use [Dotbot](https://github.com/anishathalye/dotbot), as it doesn't have any dependencies - just include it as a sub-module, define a list of links in a simple YAML file, and hit go.\n[GNU Stow](https://www.gnu.org/software/stow/) is also a popular choice, and it's usage is explained well in [this article](https://alexpearce.me/2016/02/managing-dotfiles-with-stow/) by Alex Pearce.\nThere's many other tools which do a similar thing, like [Homesick](https://github.com/technicalpickles/homesick), [Rcm](https://github.com/thoughtbot/rcm), [dotdrop](https://github.com/deadc0de6/dotdrop) or [mackup](https://github.com/lra/mackup).\n\n#### Option 2 - Git Bare Repo\n\nBare repositories let you add files from anywhere on your system, maintaining the original directory structure, and without the need for symlinks ([learn more](https://www.saintsjd.com/2011/01/what-is-a-bare-git-repository/)). Just initiialize or clone using the [`--bare`](https://git-scm.com/docs/git-clone#Documentation/git-clone.txt---bare) flag, then add a global alias to manage files with git.\n\n```bash\n# Initialise a new repo, or clone an existing one with the --bare flag\ngit init --bare $HOME/dotfiles\n\n# Next create an alias that sets the directory to your dotfile (add to .zshrc/ .bashrc)\nalias dotfiles='$(where git) --git-dir=$HOME/dotfiles/ --work-tree=$HOME'\n\n# Hide untracked files\ndotfiles config --local status.showUntrackedFiles no\n```\n\nThen, from anywhere in your system you can use your newly created alias to add, commit and push files to your repo using all the normal git commands, as well as pull them down onto another system.\n\n```bash\ndotfiles add ~/.config/my-file\ndotfiles commit -m \"A short message\"\ndotfiles push\n```\n\nBoth [Chezmoi](https://github.com/twpayne/chezmoi/) and [YADM](https://github.com/TheLocehiliosan/yadm) are dotfile management tools, which wrap bare git repo functionality, adding some additional QoL features.\n\nTo learn more, DistroTube made an excellent [video about bare git repos](https://www.youtube.com/watch?v=tBoLDpTWVOM), and Marcel Krčah has written [a post](https://marcel.is/managing-dotfiles-with-git-bare-repo/) outlining the benefits.\n\n#### Dotfile Dependencies\n\nIn terms of managing dependencies, using either [git submodules](https://git-scm.com/book/en/v2/Git-Tools-Submodules) or [git subtree](https://github.com/git/git/blob/master/contrib/subtree/git-subtree.txt) will let you keep dependencies in your project, while also separate from your own code and easily updatable. But again, you could do this yourself with a simple script.\n\n\n---\n\n### So copy paste, right?\n\nZach Holman wrote a great article titled [Dotfiles Are Meant to Be Forked](https://zachholman.com/2010/08/dotfiles-are-meant-to-be-forked/). I personally disagree with this, since your dotfiles are usually highly personalized, so what's right for one developer, likely won't be what someone else is looking for. They're also typically something you build up over time, and although some repos may provide a great starting point, it's really important to know what everything does, and how it works.\n\nBy all means feel free to take what you want from mine. I've taken care to ensure that each file is standalone, and well documented so that certain files can just be dropped into any system. But I cannot stress enough the importance of reading through files to ensure it's actually what you want. \n\nIf you're looking for some more example dotfile repos to get you started, I can highly recommend taking a look at: [@holman/dotfiles](https://github.com/holman/dotfiles), [@nickjj/dotfiles](https://github.com/nickjj/dotfiles), [@caarlos0/dotfiles](https://github.com/caarlos0/dotfiles), [@cowboy/dotfiles](https://github.com/cowboy/dotfiles), [@drduh/config](https://github.com/drduh/config).\n\nAnd for some more inspiration, check out [webpro/awesome-dotfiles](https://github.com/webpro/awesome-dotfiles), [dotfiles.github.io](https://dotfiles.github.io/) and [r/unixporn](https://www.reddit.com/r/unixporn/).\n\n---\n\n## My Dotfiles\n\n\u003cp align=\"center\"\u003e\u003cimg width=\"380\" src=\"https://i.ibb.co/rH30RbM/Dotfiles.png\" /\u003e\u003c/p\u003e\n\n### Setup\n\n\u003e **Warning**\n\u003e Prior to running the setup script, read through everything and confirm it's what you want.\n\nLet's Go!\n\n```bash\nbash \u003c(curl -s https://raw.githubusercontent.com/Lissy93/dotfiles/master/lets-go.sh)\n```\n\nThis will execute the quick setup script (in [`lets-go.sh`](https://github.com/Lissy93/dotfiles/blob/master/lets-go.sh)), which just clones the repo (if not yet present), then executes the [`install.sh`](https://github.com/Lissy93/dotfiles/blob/master/install.sh) script. You can re-run this at anytime to update the dotfiles. You can also optionally pass in some variables to change the install location (`DOTFILES_DIR`) and source repo (`DOTFILES_REPO`) to use your fork.\n\nThe install script [does several things](#install-script), it takes care of checking dependencies are met, updating dotfiles and symlinks, configuring CLI (Vim, Tmux, ZSH, etc), and will prompt the user to install listed packages, update the OS and apply any system preferences. The script is idempotent, so it can be run multiple times without changing the result, beyond the initial application.\n\n_Alternatively, you can clone the repo yourself, cd into it, allow execution of [`install.sh`](https://github.com/Lissy93/dotfiles/blob/master/install.sh) then run it to install or update._\n\n\u003cdetails\u003e\n\u003csummary\u003eExample\u003c/summary\u003e\n\n\n```bash\ngit clone --recursive git@github.com:Lissy93/dotfiles.git ~/.dotfiles\nchmod +x ~/.dotfiles/install.sh\n~/.dotfiles/install.sh\n```\n\nYou'll probably want to fork the repo, then clone your fork instead, so update the above commands with the path to your repo, and optionally change the clone location on your disk.\n\nOnce the repo is cloned, you can modify whatever files you like before running the install script. The [Directory Structure](#directory-structure) section provides an overview of where each file is located. Then see the [Configuring](#configuring) section for setting file paths and symlink locations. \n\n\u003c/details\u003e\n\n---\n\n\n### Directory Structure\n\n\u003cpre\u003e\n~\n└──.\n   ├── \u003ca href=\"https://github.com/Lissy93/dotfiles/tree/master/config\"\u003econfig/\u003c/a\u003e               # All configuration files\n   │ ├── \u003ca href=\"https://github.com/Lissy93/dotfiles/tree/master/bash\"\u003ebash/\u003c/a\u003e               # Bash (shell) config\n   │ ├── \u003ca href=\"https://github.com/Lissy93/dotfiles/tree/master/tmux\"\u003etmux/\u003c/a\u003e               # Tmux (multiplexer) config\n   │ ├── \u003ca href=\"https://github.com/Lissy93/dotfiles/tree/master/vim\"\u003evim/\u003c/a\u003e                # Vim (text editor) config\n   │ ├── \u003ca href=\"https://github.com/Lissy93/dotfiles/tree/master/zsh\"\u003ezsh/\u003c/a\u003e                # ZSH (shell) config\n   │ ├── \u003ca href=\"https://github.com/Lissy93/dotfiles/tree/master/macos\"\u003emacos/\u003c/a\u003e              # Config files for Mac-specific apps\n   │ └── \u003ca href=\"https://github.com/Lissy93/dotfiles/tree/master/desktop-apps\"\u003edesktop-apps/\u003c/a\u003e       # Config files for GUI apps\n   ├── \u003ca href=\"https://github.com/Lissy93/dotfiles/tree/master/scripts\"\u003escripts/\u003c/a\u003e              # Bash scripts for automating tasks\n   │ ├── \u003ca href=\"https://github.com/Lissy93/dotfiles/tree/master/scripts/installs\"\u003einstalls/\u003c/a\u003e           # Scripts for software installation\n   │ │ ├── \u003ca href=\"https://github.com/Lissy93/dotfiles/blob/master/scripts/installs/Brewfile\"\u003eBrewfile\u003c/a\u003e          # Package installs for MacOS via Homebrew\n   │ │ ├── \u003ca href=\"https://github.com/Lissy93/dotfiles/blob/master/scripts/installs/arch-pacman.sh\"\u003earch-pacman.sh\u003c/a\u003e    # Package installs for Arch via Pacman\n   │ │ └── \u003ca href=\"https://github.com/Lissy93/dotfiles/blob/master/scripts/installs/flatpak.sh\"\u003eflatpak.sh\u003c/a\u003e        # Package installs for Linux desktops via Flatpak\n   │ ├── \u003ca href=\"https://github.com/Lissy93/dotfiles/tree/master/scripts/linux\"\u003elinux/\u003c/a\u003e              # Automated configuration for Linux\n   │ │ └── \u003ca href=\"https://github.com/Lissy93/dotfiles/blob/master/scripts/linux/dconf-prefs.sh\"\u003edconf-prefs.sh\u003c/a\u003e    # Setting GNOME settings via dconf util\n   │ └── \u003ca href=\"https://github.com/Lissy93/dotfiles/tree/master/scripts/macos-setup\"\u003emacos-setup/\u003c/a\u003e        # Scripts for setting up Mac OS machines\n   │   ├── \u003ca href=\"https://github.com/Lissy93/dotfiles/blob/master/scripts/macos-setup/macos-apps.sh\"\u003emacos-apps.sh\u003c/a\u003e     # Sets app preferences\n   │   ├── \u003ca href=\"https://github.com/Lissy93/dotfiles/blob/master/scripts/macos-setup/macos-preferences.sh\"\u003emacos-prefs.sh\u003c/a\u003e    # Sets MacOS system preferences\n   │   └── \u003ca href=\"https://github.com/Lissy93/dotfiles/blob/master/scripts/macos-setup/macos-security.sh\"\u003emacos-security.sh\u003c/a\u003e # Applies MacOS security and privacy settings\n   ├── \u003ca href=\"https://github.com/Lissy93/dotfiles/tree/master/utils\"\u003eutils/\u003c/a\u003e                # Handy Shell utilitis for various day-to-day tasks\n   ├── \u003ca href=\"https://github.com/Lissy93/dotfiles/tree/master/.github\"\u003e.github/\u003c/a\u003e              # Meta files for GitHub repo\n   ├── \u003ca href=\"https://github.com/Lissy93/dotfiles/tree/master/lib\"\u003elib/\u003c/a\u003e                  # External dependencies, as git sub-modules\n   ├── \u003ca href=\"https://github.com/Lissy93/dotfiles/blob/master/lets-go.sh\"\u003elets-go.sh\u003c/a\u003e            # One-line remote installation entry point\n   ├── \u003ca href=\"https://github.com/Lissy93/dotfiles/blob/master/install.sh\"\u003einstall.sh\u003c/a\u003e            # All-in-one install and setup script\n   └── \u003ca href=\"https://github.com/Lissy93/dotfiles/blob/master/symlinks.yaml\"\u003esymlinks.yml\u003c/a\u003e          # List of symlink locations\n\u003c/pre\u003e\n\n\n---\n\n### Install Script\n\nThe setup script ([`install.sh`](https://github.com/Lissy93/dotfiles/blob/master/install.sh)) will do the following:\n\n- **Setup**\n  - Print welcome message, and a summary of proposed changes, and prompt user to continue\n  - Ensure that core dependencies are met (git, zsh, vim)\n  - Set variables by reading any passed parameters, or fallback to sensible defaults (see [`.zshenv`](https://github.com/Lissy93/dotfiles/blob/master/config/zsh/.zshenv))  \n- **Dotfiles**\n  - If dotfiles not yet present, will clone from git, otherwise pulls latest changes\n  - Setup / update symlinks each file to it's correct location on disk\n- **System Config**\n  - Checks default shell, if not yet set, will prompt to set to zsh\n  - Installs Vim plugins via Plug\n  - Installs Tmux plugins via TPM\n  - Installs ZSH plugins via Antigen\n  - Prompts to apply system preferences (for compatible OS / DE)\n  - On MacOS arranges apps into folders within the Launchpad view\n  - On MacOS prompts to set essential privacy + security settings\n  - On MacOS prompts to set system preferences and app settings\n- **App Installations**\n  - On MacOS if Homebrew is not yet installed, will prompt to install it\n  - On MacOS will prompt to install user apps listed in Brewfile, via Homebrew\n  - On Linux will prompt to install listed CLI apps via native package manager (pacman or apt)\n  - On Linux desktop systems, will prompt to istall desktop apps via Flatpak\n  - Checks OS is up-to-date, prompts to install updates if available\n- **Finishing up**\n  - Outputs time taken and a summary of changes applied\n  - Re-sources ZSH and refreshes current session\n  - Prints a pretty Tux ASCII picture\n  - Exits\n\nThe install script can accept several flags and environmental variables to configure installation:\n- **Flags**\n  - `--help` - Prints help menu / shows info, without making any changes\n  - `--auto-yes` - Doesn't prompt for any user input, always assumes Yes (use with care!)\n  - `--no-clear` - Doesn't clear the screen before starting (useful if being run by another app)\n- **Env Vars**\n  - `REPO_NAME` - The repository name to pull, e.g. `Lissy93/Dotfiles`\n  - `DOTFILES_DIR` - The directory to clone source dotfiles into, e.g. `~/.dotfiles`\n\n---\n\n### Configuring\n\nThe locations for all symlinks are defined in [`symlinks.yaml`](https://github.com/Lissy93/dotfiles/blob/master/symlinks.yaml). These are managed using [Dotbot](https://github.com/anishathalye/dotbot), and will be applied whenever you run the [`install.sh`](https://github.com/Lissy93/dotfiles/blob/master/install.sh) script. The symlinks set locations based on XDG paths, all of which are defined in [`.zshenv`](https://github.com/Lissy93/dotfiles/blob/master/config/zsh/.zshenv).\n\n---\n\n## Color Theme\n\n---\n\n### Aliases\n\n#### Into to Aliases\n\nAn alias is simply a command shortcut. These are very useful for shortening long or frequently used commands.\n\n\u003cdetails\u003e\n\u003csummary\u003eHow to use Aliases\u003c/summary\u003e\n\nFor example, if you often find yourself typing `git add .` you could add an alias like `alias gaa='git add .'`, then just type `gaa`. You can also override existing commands, for example to always show hidden files with `ls` you could set `alias ls='ls -a'`.\n\nAliases should almost always be created at the user-level, and then sourced from your shell config file (usually `.bashrc` or `.zshrc`). System-wide aliases would be sourced from `/etc/profile`. Don't forget that for your changes to take effect, you'll need to restart your shell, or re-source the file containing your aliases, e.g. `source ~/.zshrc`.\n\nYou can view a list of defined aliases by running `alias`, or search for a specific alias with `alias | grep 'search-term'`. The `unalias` command is used for removing aliases.\n\n\u003c/details\u003e\n\n#### My Aliases\n\nAll aliases in my dotfiles are categorised into files located in [`zsh/aliases/`](https://github.com/Lissy93/dotfiles/blob/master/config/zsh/aliases/) which are imported in [`zsh/.zshrc`](https://github.com/Lissy93/dotfiles/blob/master/config/zsh/.zshrc#L9-L14).\n\nThe following section lists all (or most) the aliases by category:\n\n\u003cdetails\u003e\n\n\u003csummary\u003e\u003cb\u003eGit Aliases\u003c/b\u003e\u003c/summary\u003e\n\n\u003e [`zsh/aliases/git.zsh`](https://github.com/Lissy93/dotfiles/blob/master/config/zsh/aliases/git.zsh)\n\nAlias | Description\n---|---\n`g` | git\n`gs` | `git status` - List changed files\n`ga` | `git add` - Add \u003cfiles\u003e to the next commit\n`gaa` | `git add .` - Add all changed files\n`grm` | `git rm` - Remove \u003cfile\u003e\n`gc` | `git commit` - Commit staged files, needs -m \"\"\n`gcm` | `git commit` takes $1 as commit message\n`gps` | `git push` - Push local commits to \u003corigin\u003e \u003cbranch\u003e\n`gpl` | `git pull` - Pull changes with \u003corigin\u003e \u003cbranch\u003e\n`gf` | `git fetch` - Download branch changes, without modifying files\n`grb` | `git rebase` - Rebase the current HEAD into \u003cbranch\u003e\n`grba` | `git rebase --abort` - Cancel current rebase sesh\n`grbc` | `git rebase --continue` - Continue onto next diff\n`gm` | `git merge` - Merge \u003cbranch\u003e into your current HEAD\n`gi` | `git init` - Initiialize a new empty local repo\n`gcl` | `git clone` - Downloads repo from \u003curl\u003e\n`gch` | `git checkout` - Switch the HEAD to \u003cbranch\u003e\n`gb` | `git branch` - Create a new \u003cbranch\u003e from HEAD\n`gd` | `git diff` - Show all changes to untracked files\n`gtree` | `git log --graph --oneline --decorate` # Show branch tree\n`gl` | `git log`\n`gt` | `git tag` - Tag the current commit, 1 param\n`gtl` | `git tag -l` - List all tags, optionally with pattern\n`gtlm` | `git tag -n` - List all tags, with their messages\n`gtp` | `git push --tags` - Publish tags\n`gr` | `git remote`\n`grs` | `git remote show` - Show current remote origin\n`grl` | `git remote -v` - List all currently configured remotes\n`grr` | `git remote rm origin` - Remove current origin\n`gra` | `git remote add` - Add new remote origin\n`grurl` | `git remote set-url origin` - Sets URL of existing origin\n`guc` | `git revert` - Revert a \u003ccommit\u003e\n`gu` | `git reset` - Reset HEAD pointer to a \u003ccommit\u003e, perserves changes\n`gua` | `git reset --hard HEAD` - Resets all uncommited changes\n`gnewmsg` | `git commit --amend -m` - Update \u003cmessage\u003e of previous commit\n`gclean` | `git clean -df` - Remove all untracked files\n`glfsi` | `git lfs install`\n`glfst` | `git lfs track`\n`glfsls` | `git lfs ls-files`\n`glfsmi` | `git lfs migrate import --include=`\n`gplfs` | `git lfs push origin \"$(git_current_branch)\" --all` - Push LFS changes to current branch\n`gj` | Find and cd into the root of your current project (based on where the .git directory\n`clone` | Shorthand for clone, run `clone user/repo`, if user isn't specified will default to yourself\n`gsync` | Sync fork against upstream repo\n`gfrb` | Fetch, rebase and push updates to current branch. Optionally specify target, defaults to 'master'\n`gignore` | Integrates with gitignore.io to auto-populate .gitignore file\n`gho` | Opens the current repo + branch in GitHub\n`ghp` | Opens pull request tab for the current GH repo\n\n\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\n\u003csummary\u003e\u003cb\u003eFlutter Aliases\u003c/b\u003e\u003c/summary\u003e\n\n\u003e [`zsh/aliases/flutter.zsh`](https://github.com/Lissy93/dotfiles/blob/master/config/zsh/aliases/flutter.zsh)\n\nAlias | Description\n---|---\n`fl` | flutter - Main fultter command\n`flattach` | `flutter attach` - Attaches flutter to a running flutter application with enabled observatory\n`flb` | `flutter build` - Build flutter application\n`flchnl` | `flutter channel` - Switches flutter channel (requires input of desired channel)\n`flc` | `flutter clean` - Cleans flutter project\n`fldvcs` | `flutter devices` - List connected devices (if any)\n`fldoc` | `flutter doctor` - Runs flutter doctor\n`flpub` | `flutter pub` - Shorthand for flutter pub command\n`flget` | `flutter pub get` - Installs dependencies\n`flr` | `flutter run` - Runs flutter app\n`flrd` | `flutter run --debug` - Runs flutter app in debug mode (default mode)\n`flrp` | `flutter run --profile` - Runs flutter app in profile mode\n`flrr` | `flutter run --release` - Runs flutter app in release mode\n`flupgrd` | `flutter upgrade` - Upgrades flutter version depending on the current channel\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003e\u003cb\u003eRust / Cargo Aliases\u003c/b\u003e\u003c/summary\u003e\n\n\u003e [`zsh/aliases/rust.zsh`](https://github.com/Lissy93/dotfiles/blob/master/config/zsh/aliases/rust.zsh) \u003cbr\u003e\n\u003e Aliases and shortcuts for frequently used Rust and Cargo commands and common tasks\n\n#### Cargo Basic Commands\n\nAlias | Description\n---|---\n`cr` | `cargo run` - Compiles and runs the current project\n`cb` | `cargo build` - Compiles the current project\n`ct` | `cargo test` - Runs tests for the current project\n\n#### Extended Cargo Commands\n\nAlias | Description\n---|---\n`carc` | `cargo clean` - Removes the target directory\n`caru` | `cargo update` - Updates dependencies as recorded in the local lock file\n`carch` | `cargo check` - Checks the current project to see if it compiles without producing an executable\n`carcl` | `cargo clippy` - Lints the project with Clippy\n`card` | `cargo doc` - Builds documentation for the current project\n`carbr` | `cargo build --release` - Compiles the project with optimizations\n`carrr` | `cargo run --release` - Runs the project with optimizations\n`carws` | `cargo workspace` - Manages workspace-level tasks\n`carwsl` | `cargo workspace list` - Lists all members of the current workspace\n`carad` | `cargo add` - Adds a dependency to a Cargo.toml manifest file\n`carrm` | `cargo rm` - Removes a dependency from a Cargo.toml manifest file\n`carp` | `cargo publish` - Packages and uploads the project to crates.io\n`carau` | `cargo audit` - Audits Cargo.lock for crates with security vulnerabilities\n`cargen` | `cargo generate --git` - Generates a new project from a Git repository template\n`carfmt` | `cargo fmt` - Formats the code in the current project\n\n#### Rustup Commands\n\nAlias | Description\n---|---\n`ru-update` | `rustup update` - Updates the Rust toolchain\n`ru-default` | `rustup default` - Sets a default Rust toolchain\n\n#### Helper Functions and Other Aliases\n\nFunction / Alias | Description\n---|---\n`new_rust_project` | Function to create a new Rust project with the specified name\n`search_crates` | Function to search crates.io for a given query\n`rustdoc` | Opens the Rust documentation in the default web browser\n`rustbook` | Opens 'The Rust Programming Language' book in the default web browser\n`update_rust` | Updates the Rust toolchain and all installed components\n`rvalgrind` | Runs Rust programs with Valgrind for memory leak analysis (if Valgrind is installed)\n`clean_rust_workspace` | Cleans up the target directory in all workspaces\n\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\n\u003csummary\u003e\u003cb\u003eNode.js Aliases\u003c/b\u003e\u003c/summary\u003e\n\n\u003e [`zsh/aliases/node-js.zsh`](https://github.com/Lissy93/dotfiles/blob/master/config/zsh/aliases/node-js.zsh)\n\nThese short-hand aliases and helper functions speed up running common commands and tasks for web development, within Node / JavaScript projects.\n\n\n- After `cd`-ing into a directory which contains an `.nvmrc` file (to specify Node version), NVM will automatically switch to that version. Run `nvmlts` / `nvmlatest` to go back to LTS/latest Node version\n- If you try an use Yarn, and corepack isn't yet configured, Corepack will be enabled, and Yarn installed\n- Running `yv` will print a neatly formatted summary of the versions of core packages (Node, NPM, Yarn, NVM, Git, etc..) currently being used\n\n\n#### Helper Functions\n\nFunction | Description\n---|---\n`yarn-nuke` | Removes and reinstalls all `node_modules` and associated lock files\n`print_node_versions` | Displays installed versions of Node.js and related packages\n`source_nvm` | Initializes NVM when using Node.js commands\n`enable_corepack` | Enables Corepack to use Yarn if not already installed\n`yarn_wrapper` | Wrapper function for Yarn, setting up Yarn if it's not yet found\n`install_nvm` | Installs or updates NVM\n`launch-url` | Opens a given URL using the system's default method\n`node-docs` | Opens Node.js documentation for a specific API section\n`open-npm` | Opens a specified module's page on npmjs.com\n`open_repo` | Opens the current Git repository's remote URL in a web browser\n\n#### Special Node Commands\n\nAlias | Description\n---|---\n`npmscripts` | Prints available scripts from the current project's package.json\n`docker-node` | Runs Node.js using Docker, mounting the current directory\n`nodesize` | Prints the size of the `node_modules` folder\n\n#### Yarn\n\nAlias | Description\n---|---\n`ys` | `yarn start` - Runs the start command as defined in the package.json\n`yt` | `yarn test` - Runs tests associated with the project\n`yb` | `yarn build` - Builds the project\n`yl` | `yarn lint` - Runs the linting tool on the project codebase\n`yd` | `yarn dev` - Starts the development server\n`yp` | `yarn publish` - Publishes the package to the registry\n`yr` | `yarn run` - Runs a defined package script\n`ya` | `yarn add` - Installs a given dependency\n`ye` | `yarn remove` - Removes a specified dependency\n`yi` | `yarn install` - Installs project dependencies\n`yg` | `yarn upgrade` - Upgrades project dependencies\n`yu` | `yarn update` - Updates project dependencies\n`yf` | `yarn info` - Shows information about a package\n`yz` | `yarn audit` - Audits package dependencies for security vulnerabilities\n`yc` | `yarn autoclean` - Cleans and removes unnecessary dependencies\n`yk` | `yarn check` - Verifies the integrity of dependencies\n`yh` | `yarn help` - Displays help information about Yarn\n`yarn-nuke` | Removes `node_modules`, `yarn.lock`, `package-lock.json` and does a full fresh reinstall of dependencies\n`yv` | Prints out the current version of Node.js, Yarn, NPM, NVM, and Git\n\n#### NPM\n\nAlias | Description\n---|---\n`npmi` | `npm install` - Installs project dependencies\n`npmu` | `npm uninstall` - Uninstalls a specified dependency\n`npmr` | `npm run` - Runs a defined script in package.json\n`npms` | `npm start` - Runs the start script from package.json\n`npmt` | `npm test` - Runs tests in the project\n`npml` | `npm run lint` - Runs the linting tool on the project codebase\n`npmd` | `npm run dev` - Runs the development server\n`npmp` | `npm publish` - Publishes the package to the npm registry\n`npmo` | Opens NPM documentation for a specific module or the package's homepage\n\n#### NVM\n\nAlias | Description\n---|---\n`nvmi` | `nvm install` - Installs a specified version of Node.js\n`nvmu` | `nvm use` - Switches to a specific Node.js version\n`nvml` | `nvm ls` - Lists installed Node.js versions\n`nvmr` | `nvm run` - Runs a given version of Node.js\n`nvme` | `nvm exec` - Executes a command using a specified version of Node.js\n`nvmw` | `nvm which` - Identifies which version of Node.js is being used\n`nvmlr` | `nvm ls-remote` - Lists Node.js versions available for installation\n`nvmlts` | Installs and uses the latest LTS version of Node.js\n`nvmlatest` | Installs the latest version of Node.js with the latest npm\n`nvmsetup` | Installs or updates NVM (Node Version Manager)\n\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\n\u003csummary\u003e\u003cb\u003eGeneral Aliases\u003c/b\u003e\u003c/summary\u003e\n\n\u003e [`zsh/aliases/general.zsh`](https://github.com/Lissy93/dotfiles/blob/master/config/zsh/aliases/general.zsh)\n\n\n##### Single-Letter Frequently-Used Commands (only set if not already in use)\n\nAlias | Description\n---|---\n`a` | alias`\n`c` | `clear`\n`d` | `date`\n`e` | `exit`\n`f` | `find`\n`g` | `grep`\n`h` | `history`\n`i` | `id`\n`j` | `jobs`\n`l` | `ls`\n`m` | `man`\n`p` | `pwd`\n`s` | `sudo`\n`t` | `touch`\n`v` | `vim`\n\n##### File listing options\n\nAlias | Description\n---|---\n`la` | `ls -A` - List all files/ includes hidden\n`ll` | `ls -lAFh` - List all files, with full details\n`lm` | `ls -tA -1` - List files sorted by last modified\n`lb` | `ls -lhSA` - List all files sorted by biggest\n`lr` | `ls -R` - List files in sub-directories, recursivley\n`lf` | `ls -A \\| grep` - Use grep to find files\n`ln` | `find . -type f \\| wc -l` - Shows number of files\n`ld` | `ls -l \\| grep \"^d\"` - List directories only\n`la` | `exa -aF --icons` - List all files, including hidden (only if `exa` is installed)\n`ll` | `exa -laF --icons` - Show files with all details (only if `exa` is installed)\n`lm` | `exa -lahr --color-scale --icons -s=modified` - Sort by date modified, most revent first (only if `exa` is installed)\n`lb` | `exa -lahr --color-scale --icons -s=size` - Sort by size largest first (only if `exa` is installed)\n`tree` | `f() { exa -aF --tree -L=${1:-2} --icons };f` - List files as tree (only if `exa` is installed)\n`lz` | List the contents of a specified compressed archive. Supported formats include zip, rar, tar, tar.gz and ace\n\n##### Getting Around\n\nAlias | Description\n---|---\n`mkcd` | Create new directory, and cd into it. Takes new directory name as param\n`mkcp` | Copies a directory, and navigates into it\n`mkmv` | Moves a directory, and navigates into it\n\n##### Getting outa directories\n\nAlias | Description\n---|---\n`c~` | Navigate to ~\n`c.` | Go up 1 directory\n`c..` | Go up 2 directories\n`c...` | Go up 3 directories\n`c....` | Go up 4 directories\n`c.....` | Go up 5 directories\n`cg` | Navigate to base of git project\n\n##### Finding files and directories\n\nAlias | Description\n---|---\n`dud` | `du -d 1 -h` - List sizes of files within directory\n`duf` | `du -sh *` - List total size of current directory\n`ff` | `find . -type f -name` - Find a file by name within current directory\n`fd` | `find . -type d -name` - Find direcroy by name\n\n##### Command line history\n\nAlias | Description\n---|---\n`h` | `history` - Shows full history\n`h-search` | `fc -El 0 \\| grep` - Searchses for a word in terminal history\n`top-history` | `history 0 \\| awk '{print $2}' \\| sort \\| uniq -c \\| sort -n -r \\| head` - Most used\n\n##### Head / tail shortcuts\n\nAlias | Description\n---|---\n`H` | `\\| head` - Pipes output to head (the first part of a file)\n`T` | `\\| tail` - Pipes output to tail (the last part of a file)\n`G` | `\\| grep` - Pipes output to grep to search for some word\n`L` | `\\| less` - Pipes output to less, useful for paging\n`M` | `\\| most` - Pipes output to more, useful for paging\n`LL` | `2\u003e\u00261 \\| less` - Writes stderr to stdout and passes it to less\n`CA` | `2\u003e\u00261 \\| cat -A` - Writes stderr to stdout and passes it to cat\n`NE` | `2\u003e /dev/null` - Silences stderr\n`NUL` | `\u003e /dev/null 2\u003e\u00261` - Silences both stdout and stderr\n`P` | `2\u003e\u00261\\| pygmentize -l pytb` - Writes stderr to stdout, and passes to pygmentize\n\n##### Find + manage aliases\n\nAlias | Description\n---|---\n`al` | `alias \\| less` - List all aliases\n`as` | `alias \\| grep` - Search aliases\n`ar` | `unalias` - Remove given alias\n\n##### System Monitoring\n\nAlias | Description\n---|---\n`meminfo` | `free -m -l -t` - Show free and used memory\n`memhog` | `ps -eo pid,ppid,cmd,%mem --sort=-%mem \\| head` - Processes consuming most mem\n`cpuhog` | `ps -eo pid,ppid,cmd,%cpu --sort=-%cpu \\| head` - Processes consuming most cpu\n`cpuinfo` | `lscpu` - Show CPU Info\n`distro` | `cat /etc/*-release` - Show OS info\n\n##### Utilities\n\nAlias | Description\n---|---\n`myip` | `curl icanhazip.com` - Fetches and displays public IP\n`weather` | `curl wttr.in` - Fetches and displays local weather\n`weather-short` | `curl \"wttr.in?format=3\"`\n`cheat` | `curl cheat.sh/` - Gets manual for a Linux command\n`tinyurl` | `curl -s \"http://tinyurl.com/api-create.php?url=` - URL shortening\n`ports` | `netstat -tulanp` - List currently used ports\n`crypto` | `cointop` - Launch cointop (only registered if installed)\n`gto` | `gotop` - Launch gotop (only registered if installed)\n\n##### Random lolz\n\nAlias | Description\n---|---\n`cls` | `clear;ls` - Clear and ls\n`plz` | `fc -l -1 | cut -d' ' -f2- | xargs sudo` - Re-run last cmd as root\n`yolo` | `git add .; git commit -m \"YOLO\"; git push origin master` - Why not..\n`when` | `date` - Show date\n`whereami` | `pwd` - Just show current path\n`dog` | `cat` - I don't know why...\n`gtfo` | `exit` - This just feels better than exit\n\n\n\u003c/details\u003e\n\n\n\n---\n\n### Packages\n\nThe dotfile installation script can also, detect which system and environemnt you're running, and optionally prompt to update and install listed packages and applications.\n\nPackage lists are stored in [`scripts/installs/`](https://github.com/Lissy93/dotfiles/tree/master/scripts/installs) directory, with separate files for different OSs. The install script will [pick the appropriate file](https://github.com/Lissy93/dotfiles/blob/22c6a04fdb22c140448b7d15ef8187c3a424ab47/install.sh#L243-L260) based on your distro.\n\nYou will be prompted before anything is installed. Be sure to remove / comment out anything you do not need before proceeding.\n\n- Linux (desktop): [`flatpak.sh`](https://github.com/Lissy93/dotfiles/blob/master/scripts/installs/flatpak.sh) - Desktop apps can be installed on Linux systems via [Flatpack](https://flatpak.org/)\n- Mac OS: [`Brewfile`](https://github.com/Lissy93/dotfiles/blob/master/scripts/installs/Brewfile) - Mac apps installed via [Homebrew](https://brew.sh/)\n- Arch (and Arch-based systems, like Manjaro): [`arch-pacman.sh`](https://github.com/Lissy93/dotfiles/blob/master/scripts/installs/arch-pacman.sh) - Arch CLI apps installed via [pacman](https://wiki.archlinux.org/title/Pacman)\n- Debian (and Debian-based systems, like Ubuntu): [`debian-apt.sh`](https://github.com/Lissy93/dotfiles/blob/master/scripts/installs/debian-apt.sh) - Debian CLI apps installed via [apt](https://wiki.debian.org/Apt)\n- Alpine: [`aplpine-apk.sh`](https://github.com/Lissy93/dotfiles/blob/master/scripts/installs/aplpine-apk.sh) - Alpine CLI apps installed via [apk](https://docs.alpinelinux.org/user-handbook/0.1a/Working/apk.html)\n\nThe following section lists apps installed for each category:\n\n#### Command Line\n\n\u003cdetails\u003e\n\u003csummary\u003eCLI Essentials\u003c/summary\u003e\n\n- [`git`](https://git-scm.com/) - Version controll\n- [`neovim`](https://neovim.io/) - Text editor\n- [`ranger`](https://ranger.github.io/) - Directory browser\n- [`tmux`](https://github.com/tmux/tmux/wiki) - Term multiplexer\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eCLI Basics\u003c/summary\u003e\n\n- [`aria2`](https://github.com/aria2/aria2) - Resuming download util _(better wget)_\n- [`bat`](https://github.com/sharkdp/bat) - Output highlighting _(better cat)_\n- [`ctags`](https://github.com/universal-ctags/ctags) - Indexing of file info + headers\n- [`diff-so-fancy`](https://github.com/so-fancy/diff-so-fancy) - Readable file compares _(better diff)_\n- [`entr`](https://eradman.com/entrproject/) - Run command whenever file changes\n- [`duf`](https://github.com/muesli/duf) - Get info on mounted disks _(better df)_\n- [`exa`](https://github.com/ogham/exa) - Listing files with info _(better ls)_\n- [`exiftool`](https://exiftool.org/) - Reading and writing exif metadata\n- [`fdupes`](https://github.com/jbruchon/jdupes) - Duplicate file finder\n- [`fzf`](https://github.com/junegunn/fzf) - Fuzzy file finder and filtering\n- [`hyperfine`](https://github.com/sharkdp/hyperfine) - Benchmarking for arbitrary commands\n- [`jq`](https://github.com/stedolan/jq) - JSON parser\n- [`most`](https://www.jedsoft.org/most/) - Multi-window scroll pager _(better less)_\n- [`procs`](https://github.com/dalance/procs) - Advanced process viewer _(better ps)_\n- [`rip`](https://github.com/nivekuil/rip) - Safe and ergonomic deletion tool _(better rm)_\n- [`ripgrep`](https://github.com/BurntSushi/ripgrep) - Searching within files _(better grep)_\n- [`rsync`](https://rsync.samba.org/) - Fast, incremental file transfer\n- [`scc`](https://github.com/boyter/scc) - Count lines of code _(better cloc)_\n- [`sd`](https://github.com/chmln/sd) - RegEx find and replace _(better sed)_\n- [`thefuck`](https://github.com/nvbn/thefuck) - Auto-correct miss-typed commands\n- [`tldr`](https://github.com/tldr-pages/tldr) - Community-maintained docs _(better man)_\n- [`tree`](https://gitlab.com/OldManProgrammer/unix-tree) - Directory listings as tree\n- [`trash-cli`](https://github.com/andreafrancia/trash-cli) - Record + restore removed files\n- [`watch`](https://gitlab.com/procps-ng/procps) - Run commands periorically\n- [`xsel`](https://github.com/kfish/xsel) - Copy paste access to X clipboard\n- [`zoxide`](https://github.com/ajeetdsouza/zoxide) - Easy navigation _(better cd)_\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eCLI Monitoring and Performance Apps\u003c/summary\u003e\n\n- [`bandwhich`](https://github.com/imsnif/bandwhich) - Bandwidth utilization monitor \n- [`ctop`](https://github.com/bcicen/ctop) - Container metrics and monitoring\n- [`bpytop`](https://github.com/aristocratos/bpytop) - Resource monitoring _(like htop)_\n- [`glances`](https://github.com/nicolargo/glances) - Resource monitor + web and API\n- [`gping`](https://github.com/orf/gping) - Interactive ping tool, with graph\n- [`ncdu`](https://dev.yorhel.nl/ncdu) - Disk usage analyzer and monitor _(better du)_\n- [`speedtest-cli`](https://github.com/sivel/speedtest-cli) - Command line speed test utility\n- [`dog`](https://github.com/ogham/dog)  - DNS lookup client _(better dig)_\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eCLI Productivity Apps\u003c/summary\u003e\n\n- [`browsh`](https://github.com/browsh-org/browsh) - CLI web browser\n- [`buku`](https://github.com/jarun/buku) - Bookmark manager\n- [`cmus`](https://github.com/cmus/cmus) - Music browser / player\n- [`khal`](https://github.com/pimutils/khal) - Calendar client\n- [`mutt`](https://gitlab.com/muttmua/mutt) - Email client\n- [`newsboat`](https://github.com/newsboat/newsboat) - RSS / ATOM news reader\n- [`rclone`](https://github.com/rclone/rclone) - Manage cloud storage\n- [`task`](https://github.com/GothenburgBitFactory/taskwarrior) - Todo + task management\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eCLI Dev Suits\u003c/summary\u003e\n\n- [`httpie`](https://httpie.io/) - HTTP / API testing testing client\n- [`lazydocker`](https://github.com/jesseduffield/lazydocker) - Full Docker management app\n- [`lazygit`](https://github.com/jesseduffield/lazygit) - Full Git managemtne app\n- [`kdash`](https://github.com/kdash-rs/kdash/) - Kubernetes dashboard app\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eCLI External Sercvices\u003c/summary\u003e\n\n- [`ngrok`](https://ngrok.com/) - Reverse proxy for sharing localhost\n- [`tmate`](https://github.com/tmate-io/tmate) - Share a terminal session via internet\n- [`asciinema`](https://asciinema.org/) - Recording + sharing terminal sessions\n- [`navi`](https://github.com/denisidoro/navi) - Browse, search, read cheat sheets\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eCLI Fun\u003c/summary\u003e\n\n- [`cowsay`](https://github.com/piuccio/cowsay) - Have an ASCII cow say your message\n- [`figlet`](http://www.figlet.org/) - Output text as big ASCII art text\n- [`lolcat`](https://github.com/busyloop/lolcat) - Make console output raibow colored\n- [`neofetch`](https://github.com/dylanaraps/neofetch) - Show system data and ditstro info\n\n\u003c/details\u003e\n\n#### Software Development\n\n\u003cdetails\u003e\n\u003csummary\u003eDevelopment Apps\u003c/summary\u003e\n\n- [Android Studio](https://developer.android.com/studio/) - IDE for Android development\n- [Boop](https://github.com/IvanMathy/Boop) - Test transformation tool _(MacOS Only)_\n- [iterm2](https://iterm2.com/) - Better terminal emulator _(MacOS Only)_\n- [Postman](https://www.postman.com/) - HTTP API testing app\n- [Sourcetree](https://www.sourcetreeapp.com/) - Git visual client _(MacOS Only)_\n- [Virtual Box](https://www.virtualbox.org/) - VM management console\n- [VS Code](https://code.visualstudio.com/) - Code editor\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eDevelopment Langs, Compilers, Package Managers and SDKs\u003c/summary\u003e\n\n- `docker` - Containers\n- `gcc` - GNU C++ compilers\n- `go` - Compiler for Go Lang\n- `gradle` - Build tool for Java\n- `lua` - Lua interpreter\n- `luarocks` - Package manager for Lua\n- `node` - Node.js\n- `nvm` - Switching node versions\n- `openjdk` - Java development kit\n- `python` - Python interpriter\n- `rust` - Rust language\n- `android-sdk` - Android software dev kit\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eDevelopment Utils\u003c/summary\u003e\n\n- [`gh`](https://cli.github.com/) - Interact with GitHub PRs, issues, repos\n- [`scrcpy`](https://github.com/Genymobile/scrcpy) - Display and control Andrdroid devices\n- [`terminal-notifier`](https://github.com/julienXX/terminal-notifier) - Trigger Mac notifications from terminal _(MacOS Only)_\n- [`tig`](https://jonas.github.io/tig/) - Text-mode interface for git\n- [`ttygif`](https://github.com/icholy/ttygif) - Generate GIF from terminal commands + output\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eNetwork and Security Testing\u003c/summary\u003e\n\n- [`bettercap`](https://www.bettercap.org/) - Network, scanning and moniroting\n- [`nmap`](https://nmap.org/) - Port scanning\n- [`wrk`](https://github.com/giltene/wrk2) - HTTP benchmarking\n- [`burp-suite`](https://portswigger.net/burp) - Web security testing\n- [`metasploit`](https://www.metasploit.com/) - Pen testing framework\n- [`owasp-zap`](https://owasp.org/www-project-zap/) - Web app security scanner\n- [`wireshark`](https://www.wireshark.org/) - Network analyzer + packet capture\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eSecurity Utilities\u003c/summary\u003e\n\n- [`bcrypt`](https://bcrypt.sourceforge.net/) - Encryption utility, using blowfish\n- [`clamav`](https://www.clamav.net/) - Open source virus scanning suite\n- [`git-crypt`](https://www.agwa.name/projects/git-crypt/) - Transparent encryption for git repos\n- [`lynis`](https://cisofy.com/lynis/) - Scan system for common security issues\n- [`openssl`](https://www.openssl.org/) - Cryptography and SSL/TLS Toolkit\n- [`rkhunter`](https://rkhunter.sourceforge.net/) - Search / detect potential root kits\n- [`veracrypt`](https://www.veracrypt.fr/code/VeraCrypt/) - File and volume encryption\n\n\u003c/details\u003e\n\n#### Desktop Applications\n\n\u003cdetails\u003e\n\u003csummary\u003eCreativity\u003c/summary\u003e\n\n- [Audacity](https://www.audacityteam.org/) - Multi-track audio editor and recording\n- [Blender](https://www.blender.org/) - 3D modelling, rendering and sculpting\n- [Cura](https://ultimaker.com/software/ultimaker-cura) - 3D Printing software, for slicing models\n- [DarkTable](https://www.darktable.org/) - Organize and bulk edit photos (similar to Lightroom)\n- [Dia](https://wiki.gnome.org/Apps/Dia) - Versatile diagramming tool, useful for UML\n- [Gimp](https://www.gimp.org/) - Image and photo editing application\n- [HandBrake](https://handbrake.fr/) - For converting video from any format to a selection of modern codecs\n- [InkScape](https://inkscape.org/) - Digital drawing/ illustration\n- [OBS Studio](https://obsproject.com/) - Streaming and screencasting\n- [Shotcut](https://www.shotcut.org/) - Video editor\n- [Synfig Studio](https://www.synfig.org/) - 2D animation\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eMedia\u003c/summary\u003e\n\n- [Calibre](https://calibre-ebook.com/) - E-Book reader\n- [Spotify](https://spotify.com) - Propietary music streaming\n- [Transmission](https://transmissionbt.com/) - Torrent client\n- [VLC](https://www.videolan.org/vlc/) - Media player\n- [Pandoc](https://pandoc.org/) - Universal file converter\n- [Youtube-dl](https://youtube-dl.org/) - YouTube video downloader\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003ePersonal Applications\u003c/summary\u003e\n\n- [1Password](https://1password.com/) - Password manager _(proprietary)_\n- [Tresorit](https://tresorit.com/) - Encrypted file backup _(proprietary)_\n- [Standard Notes](https://standardnotes.com/) - Encrypted synced notes\n- [Signal](https://www.signal.org) - Link to encrypted mobile messenger\n- [Ledger Live](https://www.ledger.com/ledger-live) - Crypto hardware wallet manager\n- [ProtonMail-Bridge](https://proton.me/mail/bridge) - Decrypt ProtonMail emails\n- [ProtonVPN](https://protonvpn.com/) - Client app for ProtonVPN\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eBrowsers\u003c/summary\u003e\n\n- [Firefox](https://www.mozilla.org/en-GB/firefox/)\n- [Chromium](https://github.com/ungoogled-software/ungoogled-chromium)\n- [Tor](https://www.torproject.org/)\n\n\u003c/details\u003e\n\n#### MacOS Apps\n\n\u003cdetails\u003e\n\u003csummary\u003eMacOS Mods and Imrovments\u003c/summary\u003e\n\n- `alt-tab` - Much better alt-tab window switcher\n- `anybar` - Custom programatic menubar icons\n- `copyq` - Clipboard manager _(cross platform)_\n- `espanso` - Live text expander _(cross-platform)_\n- `finicky` - Website-specific default browser\n- `hiddenbar` - Hide / show annoying menubar icons\n- `iproute2mac` - MacOS port of netstat and ifconfig\n- `lporg` - Backup and restore launchpad layout\n- `m-cli` - All in one MacOS management CLI app\n- `mjolnir` - Util for loading Lua automations\n- `openinterminal` - Finder button, opens directory in terminal\n- `popclip` - Popup options for text on highlight\n- `raycast` - Spotlight alternative\n- `shottr` - Better screenshot utility\n- `skhd` - Hotkey daemon for macOS\n- `stats` - System resource usage in menubar\n- `yabai` - Tiling window manager\n\n\u003c/details\u003e\n\n---\n\n### System Preferences\n\nThe installation script can also prompt you to confiture system settings and user preferences. This is useful for setting up a completely fresh system in just a few seconds.\n\n#### MacOS\n\nMacOS includes a built-in utility named [`defaults`](https://real-world-systems.com/docs/defaults.1.html), which lets you configure all system and app preferences programatically through the command line. This is very powerful, as you can write a script that configures every aspect of your system enabling you to setup a brand new machine in seconds.\n\nAll settings are then updated in the `.plist` files stored in `~/Library/Preferences`. This can also be used to configure preferences for any installed app on your system, where the application is specified by its domain identifier - you can view a full list of your configurable apps by running `defaults domains`.\n\n\nIn my dotfiles, the MacOS preferences will configure everything from system security to launchpad layout.\nThe Mac settings are located in [`scripts/macos-setup/`](https://github.com/Lissy93/dotfiles/tree/master/scripts/macos-setup), and are split into three files:\n- [`macos-security.sh`](https://github.com/Lissy93/dotfiles/blob/master/scripts/macos-setup/macos-security.sh) - Sets essential security settings, disables telementry, disconnects unused ports, enforces signing, sets logout timeouts, and much more\n- [`macos-preferences.sh`](https://github.com/Lissy93/dotfiles/blob/master/scripts/macos-setup/macos-preferences.sh) - Configures all user preferences, including computer name, highlight color, finder options, spotlight settings, hardware preferences and more\n- [`macos-apps.sh`](https://github.com/Lissy93/dotfiles/blob/master/scripts/macos-setup/macos-apps.sh) - Applies preferences to any installed desktop apps, such as Terminal, Time Machine, Photos, Spotify, and many others\n\nUpon running each script, a summary of what will be changed will be shown, and you'll be prompted as to weather you'd like to continue. Each script also handles permissions, compatibility checking, and graceful fallbacks. Backup of original settings will be made, and a summary of all changes made will be logged as output when the script is complete.\n\nIf you choose to run any of these scripts, take care to read it through first, to ensure you understand what changes will be made, and optionally update or remove anything as you see fit.\n\n---\n\n### Config Files\n\nAll config files are located in [`./config/`](https://github.com/Lissy93/dotfiles/tree/master/config/).\n\nConfigurations for ZSH, Tmux, Vim, and a few others are in dedicated sub-directories (covered in the section below). While all other, small config files are located in the [`./config/general`](https://github.com/Lissy93/dotfiles/tree/master/config/general) direcroty, and include:\n\n- [`.bashrc`](https://github.com/Lissy93/dotfiles/blob/master/config/general/.bashrc)\n- [`.curlrc`](https://github.com/Lissy93/dotfiles/blob/master/config/general/.curlrc)\n- [`.gemrc`](https://github.com/Lissy93/dotfiles/blob/master/config/general/.gemrc)\n- [`.gitconfig`](https://github.com/Lissy93/dotfiles/blob/master/config/general/.gitconfig)\n- [`.gitignore_global`](https://github.com/Lissy93/dotfiles/blob/master/config/general/.gitignore_global)\n- [`.wgetrc`](https://github.com/Lissy93/dotfiles/blob/master/config/general/.wgetrc)\n- [`dnscrypt-proxy.toml`](https://github.com/Lissy93/dotfiles/blob/master/config/general/dnscrypt-proxy.toml)\n- [`gpg.conf`](https://github.com/Lissy93/dotfiles/blob/master/config/general/gpg.conf)\n- [`starship.toml`](https://github.com/Lissy93/dotfiles/blob/master/config/general/starship.toml)\n\n---\n\n### ZSH\n\n[ZSH](https://www.zsh.org/) (or Z shell) is a UNIX command interpriter (shell), similar to and compatible with Korn shell (KSH). Compared to Bash, it includes many useful features and enchanements, notably in the CLI editor, advanced behaviour customization options, filename globbing, recursive path expansion, completion, and it's easyily extandable through plugins. For more info about ZSH, see the [Introduction to ZSH Docs](https://zsh.sourceforge.io/FAQ/zshfaq01.html).\n\nMy ZSH config is located in [`config/zsh/`](https://github.com/Lissy93/dotfiles/tree/master/config/zsh)\n\n---\n\n### Vim\n\nThe entry point for the Vim config is the [`vimrc`](https://github.com/Lissy93/dotfiles/blob/master/config/vim/vimrc), but the main editor settings are defined in [`vim/editor.vim`](https://github.com/Lissy93/dotfiles/blob/master/config/vim/editor.vim)\n\n#### Vim Plugins\n\nVim plugins are managed using [Plug](https://github.com/junegunn/vim-plug) defined in [`vim/plugins.vim`](https://github.com/Lissy93/dotfiles/blob/master/config/vim/setup-vim-plug.vim).\nTo install them from GitHub, run `:PlugInstall` (see [options](https://github.com/junegunn/vim-plug#commands)) from within Vim. They will also be installed or updated when you run the main dotfiles setup script ([`install.sh`](https://github.com/Lissy93/dotfiles/blob/d4b8426629e7fbbd6d17d0b87f0bb863d6618bfd/install.sh#L132-L134)).\n\nThe following plugins are being used:\n\n\u003cdetails\u003e\n\n\u003csummary\u003e\u003cb\u003eLayout \u0026 Navigation\u003c/b\u003e\u003c/summary\u003e\n\n- **[Airline](https://github.com/vim-airline/vim-airline)**: `vim-airline/vim-airline` - A very nice status line at the bottom of each window, displaying useful info\n- **[Nerd-tree](https://github.com/preservim/nerdtree)**: `preservim/nerdtree` - Alter files in larger projects more easily, with a nice tree-view pain\n- **[Matchup](https://github.com/andymass/vim-matchup)**: `andymass/vim-matchup` - Better % naviagtion, to highlight and jump between open and closing blocks\n- **[TagBar](https://github.com/preservim/tagbar)**: `preservim/tagbar` - Provides an overview of the structure of a long file, shows tags ordered by scope\n- **[Gutentags](https://github.com/ludovicchabant/vim-gutentags)**: `ludovicchabant/vim-gutentags` - Manages tag files\n- **[Fzf](https://github.com/junegunn/fzf.vim)**: `junegunn/fzf` and `junegunn/fzf.vim` - Command-line fuzzy finder and corresponding vim bindings\n- **[Deoplete.nvim](https://github.com/Shougo/deoplete.nvim)**: `Shougo/deoplete.nvim` - Extensible and asynchronous auto completion framework\n- **[Smoothie](https://github.com/psliwka/vim-smoothie)**: `psliwka/vim-smoothie` - Smooth scrolling, supporting `^D`, `^U`, `^F` and `^B`\n- **[DevIcons](https://github.com/ryanoasis/vim-devicons)**: `ryanoasis/vim-devicons` - Adds file-type icons to Nerd-tree and other plugins\n\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\n\u003csummary\u003e\u003cb\u003eOperations\u003c/b\u003e\u003c/summary\u003e\n\n- **[Nerd-Commenter](https://github.com/preservim/nerdcommenter)**: `preservim/nerdcommenter` - For auto-commenting code blocks\n- **[Ale](https://github.com/dense-analysis/ale)**: `dense-analysis/ale` - Checks syntax asynchronously, with lint support\n- **[Surround](https://github.com/tpope/vim-surround)**: `tpope/vim-surround` - Easily surround selected text with brackets, quotes, tags etc\n- **[IncSearch](https://github.com/haya14busa/incsearch.vim)**: `haya14busa/incsearch.vim` - Efficient incremental searching within files\n- **[Vim-Visual-Multi](https://github.com/mg979/vim-visual-multi)**: `mg979/vim-visual-multi` - Allows for inserting/ deleting in multiple places simultaneously\n- **[Visual-Increment](https://github.com/triglav/vim-visual-increment)**: `triglav/vim-visual-increment` - Create an increasing sequence of numbers/ letters with `Ctrl` + `A`/`X`\n- **[Vim-Test](https://github.com/janko/vim-test)**: `janko/vim-test` - A wrapper for running tests on different granularities\n- **[Syntastic](https://github.com/vim-syntastic/syntastic)**: `vim-syntastic/syntastic` - Syntax checking that warns in the gutter when there's an issue\n\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\n\u003csummary\u003e\u003cb\u003eGit\u003c/b\u003e\u003c/summary\u003e\n\n- **[Git-Gutter](https://github.com/airblade/vim-gitgutter)**: `airblade/vim-gitgutter` - Shows git diff markers in the gutter column\n- **[Vim-fugitive](https://github.com/tpope/vim-fugitive)**: `tpope/vim-fugitive` - A git wrapper for git that lets you call a git command using `:Git`\n- **[Committia](https://github.com/rhysd/committia.vim)**: `rhysd/committia.vim` - Shows a diff, status and edit window for git commits\n- **[Vim-Git](https://github.com/tpope/vim-git)**: `tpope/vim-git` - Runtime files for git in vim, for  git, gitcommit, gitconfig, gitrebase, and gitsendemail\n\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\n\u003csummary\u003e\u003cb\u003eFile-Type Plugins\u003c/b\u003e\u003c/summary\u003e\n\n- **[Vim-JavaScript](https://github.com/pangloss/vim-javascript)**: `pangloss/vim-javascript` *(JavaScript)* - Syntax highlighting and improved indentation for JS files\n- **[Yats](https://github.com/HerringtonDarkholme/yats.vim)**: `HerringtonDarkholme/yats.vim` *(TypeScript)* - Syntax highlighting and snippets for TypeScript files\n- **[Vim-jsx-pretty](https://github.com/MaxMEllon/vim-jsx-pretty)**: `MaxMEllon/vim-jsx-pretty` *(React)* - Highlighting and indentation for React .tsx and .jsx files\n- **[Vim-CSS-Color](https://github.com/ap/vim-css-color)**: `ap/vim-css-color` *(CSS/ SASS)* - Previews colors as text highlight, where hex codes are present\n- **[Mustache and Handlebars](https://github.com/mustache/vim-mustache-handlebars)**: `mustache/vim-mustache-handlebars` *(Mustache/ Handlebars)* - Auto handles braces\n- **[Vim-Go](https://github.com/fatih/vim-go)**: `fatih/vim-go` *(GoLang)* - Go support, with syntax highlighting, quick execute, imports, formatting etc\n- **[Indentpython](https://github.com/vim-scripts/indentpython.vim)**: `vim-scripts/indentpython.vim` *(Python)* - Correct indentation for Python files\n- **[Semshi](https://github.com/numirias/semshi)**: `numirias/semshi` *(Python)* - Advanced syntax highlighting for Python files\n- **[SimpylFold](https://github.com/tmhedberg/SimpylFold)**: `tmhedberg/SimpylFold` *(Python)* - Code-folding for Python\n- **[Vimtex](https://github.com/lervag/vimtex)**: `lervag/vimtex` *(LaTex)* - Completion of citations, labels, commands and glossary entries\n- **[Dockerfile.vim](https://github.com/ekalinin/Dockerfile.vim)**: `ekalinin/Dockerfile.vim` *(Docker)* - Syntax highlighting and snippets for Dockerfiles\n- **[Vim-Json](https://github.com/elzr/vim-json)**: `elzr/vim-json` *(JSON)* - Syntax highlighting, warnings, and quote concealing foe .json files\n- **[Requirements](https://github.com/raimon49/requirements.txt.vim)**: `raimon49/requirements.txt.vim` *(Requirements)* - Syntax highlighting for the requirements file format\n- **[Vim-Markdown](https://github.com/gabrielelana/vim-markdown)**: `gabrielelana/vim-markdown` *(Markdown)* - Syntax highlighting, auto format, easy tables and more\n- **[Zinit](https://github.com/zinit-zsh/zinit-vim-syntax)**: `zinit-zsh/zinit-vim-syntax` *(ZSH)* - syntax definition for Zinit commands in any file of type zsh\n- **[Nginx](https://github.com/chr4/nginx.vim)**:`chr4/nginx.vim` *(Nginx)* - Integer matching, hichlight syntax and IPv4/ IPv6, mark insecure protocols and more\n\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\n\u003csummary\u003e\u003cb\u003eThemes\u003c/b\u003e\u003c/summary\u003e\n\n\n\u003c/details\u003e\n\n---\n\n### Tmux\n\n\nFairly standard Tmux configuration, strongly based off Tmux-sensible. Configuration is defined in [`.tmux.conf`](https://github.com/Lissy93/dotfiles/blob/master/config/tmux/tmux.conf)\n\nTmux plugins are managed using [TMP](https://github.com/tmux-plugins/tpm) and defined in [`.tmux.conf`](https://github.com/Lissy93/dotfiles/blob/master/config/tmux/tmux.conf). To install them from GitHub, run `prefix` + \u003ckbd\u003eI\u003c/kbd\u003e from within Tmux, and they will be cloned int `~/.tmux/plugins/`.\n\n##### Plugins\n\n- [Tmux-sensible](https://github.com/tmux-plugins/tmux-sensible): `tmux-plugins/tmux-sensible` - General, sensible Tmux config\n- [Tmux-continuum](https://github.com/tmux-plugins/tmux-continuum): `tmux-plugins/tmux-continuum` - Continuously saves and environment with automatic restore\n- [Tmux-yank](https://github.com/tmux-plugins/tmux-yank): `tmux-plugins/tmux-yank` - Allows access to system clipboard\n- [Tmux-prefix-highlight](https://github.com/tmux-plugins/tmux-prefix-highlight): `tmux-plugins/tmux-prefix-highlight` - Highlight Tmux prefix key when pressed\n- [Tmux-online-status](https://github.com/tmux-plugins/tmux-online-status): `tmux-plugins/tmux-online-status` - Displays network status\n- [Tmux-open](https://github.com/tmux-plugins/tmux-open): `tmux-plugins/tmux-open` - Bindings for quick opening selected path/ url\n- [Tmux-mem-cpu-load](https://github.com/thewtex/tmux-mem-cpu-load): `thewtex/tmux-mem-cpu-load` - Shows system resources\n\n\n---\n\n### Git\n\n// TODO\n\nGit aliases for ZSH are located in [`/zsh/aliases/git.zsh`](https://github.com/Lissy93/dotfiles/blob/master/config/zsh/aliases/git.zsh), and are documented under the [Aliases](https://github.com/lissy93/dotfiles#my-aliases) section, above.\n\n---\n\n## Dependencies\n\nIt's strongly recomended to have the following packages installed on your system before proceeding:\n\n- [zsh](https://www.zsh.org/) - Interactive Shell\n- [nvim](http://neovim.io/) - Extensible Vim-based text editor\n- [tmux](https://github.com/tmux/tmux) - Detachable terminal multiplexer\n- [ranger](https://ranger.github.io/) - CLI-based file manager with VI bindings\n- [git](https://git-scm.com/) - Version control system\n\nThey can be easily installed/ updated with your package manger, e.g:\n- Ubuntu Server: `sudo apt install -y zsh neovim tmux ranger git`\n- Arch Linux:  `sudo pacman -S zsh neovim tmux ranger git`\n- Alpine: `apk add zsh neovim tmux ranger git`\n- MacOS: `brew install zsh neovim tmux ranger git`\n\n---\n\n### Utilities\n\n\nThe dotfiles also contains several handy bash scripts to carry out useful tasks with slightly more ease.\n\nEach of these scripts is standalone, without any dependencies, and can be executed directly to use. \nAlternatively, they can be sourced from within a .zshrc / .bashrc, for use anywhere via their alias.\n\nFor usage instructions about any of them, just append the `--help` flag.\n\n- [Transfer]() - Quickly transfer files or folders to the internet\n- [Web Search]() - Open a specific search engine with a given query\n- [QR Code]() - Generates a QR code for a given string, to transfer data to mobile device\n- [Weather]() - Shows current and forecasted weather for your location\n- [Color Map]() - Just outputs your terminal emulators supported color pallete\n- [Welcome]() - Used for first login, prints personalised greeting, system info, and other handy info\n- [Online]() - Checks if you are connected to the internet\n\n\n\n#### Transfer\n\nQuickly transfer a file, group of files or directory via the transfer.sh service.\u003cbr\u003e\nTo get started, run `transfer \u003cfile(s) / folder\u003e`, for more info, run `transfer --help`\n\nIf multiple files are passed in, they will automatically be compressed into an archive.\nYou can change the file transfer service, or use a self-hosted instance by setting the URL in `FILE_TRANSFER_SERVICE`\nThe file can be either run directly, or sourced in your `.zshrc` and used via the `transfer` alias.\n\n\u003e For info, run `transfer --help`\u003cbr\u003e\n\u003e Source: [`utils/transfer.sh`](https://github.com/Lissy93/dotfiles/blob/master/utils/transfer.sh)\n\n#### Web Search\n\nQuickly open web search results for a given query using a selected search engine. To get started, run `web-search`, or `web-search --help` for more info.\n\nUsage:\n\nAll parameters are optional, to get started just run `web-search` or `web-search \u003csearch provider (optional)\u003e \u003cquery (optional)\u003e`, the `ws` alias can also be used. If a search engine isn't specified, you'll be prompted to select one from the list. Similarly, if a query hasn't been included you'll be asked for that too.\n\n- `web-search` - Opens interactive menu, you'll be prompted to select a search engine from the list then enter your query\n- `web-search \u003csearch term\u003e` - Specify a search term, and you'll be prompted to select the search engine\n  - For example, `web-search Hello World!`\n- `web-search \u003csearch engine\u003e` - Specify a search engine, and you'll be prompted for your search term\n  - For example, `web-search duckduckgo`\n- `web-search \u003csearch engine\u003e \u003csearch engine\u003e` - Specify both a search engine and query, and results will open immediately \n  - For example, `web-search wikipedia Matrix Defense`\n\n\u003cdetails\u003e\n\n\u003csummary\u003e\u003cb\u003eSupported Search Providers\u003c/b\u003e\u003c/summary\u003e\n\nThe following search engines are supported by default:\n- DuckDuckGo: `ws duckduckgo` (or `wsddg`)\n- Wikipedia: `ws wikipedia` or (`wswiki`)\n- GitHub: `ws github` (or `wsgh`)\n- StackOverflow: `ws stackoverflow` (or `wsso`)\n- Wolframalpha: `ws wolframalpha` (or `wswa`)\n- Reddit: `ws reddit` (or `wsrdt`)\n- Maps: `ws maps` (or `wsmap`)\n- Google: `ws google` (or `wsggl`)\n- Grep App: `ws grepapp` (or `wsgra`)\n\n\u003c/details\u003e\n\nThe alias `ws` will also resolve to `web-search`, if it's not already in use. You can either run the script directly, e.g.`~/.config/utils/web-search.sh` (don't forget to `chmod +x` the file first, to make it executable), or use the `web-search` / `ws` alias anywhere, once it has been source'd from your .zshrc. \n\n\u003e For info, run `web-search --help`\u003cbr\u003e\n\u003e Source: [`utils/web-search.sh`](https://github.com/Lissy93/dotfiles/blob/master/utils/web-search.sh)\n\n\u003cdetails\u003e\n\n\u003csummary\u003eTry now!\u003c/summary\u003e\n\n```bash\nbash \u003c(curl -s https://raw.githubusercontent.com/Lissy93/dotfiles/master/utils/web-search.sh)\n```\n\n\u003c/details\u003e\n\n\n---\n\n---\n\n\n\u003c!-- License + Copyright --\u003e\n\u003cp  align=\"center\"\u003e\n  \u003ci\u003e© \u003ca href=\"https://aliciasykes.com\"\u003eAlicia Sykes\u003c/a\u003e 2022\u003c/i\u003e\u003cbr\u003e\n  \u003ci\u003eLicensed under \u003ca href=\"https://gist.github.com/Lissy93/143d2ee01ccc5c052a17\"\u003eMIT\u003c/a\u003e\u003c/i\u003e\u003cbr\u003e\n  \u003ca href=\"https://github.com/lissy93\"\u003e\u003cimg src=\"https://i.ibb.co/4KtpYxb/octocat-clean-mini.png\" /\u003e\u003c/a\u003e\u003cbr\u003e\n  \u003csup\u003eThanks for visiting :)\u003c/sup\u003e\n\u003c/p\u003e\n\n\u003c!-- Dinosaur --\u003e\n\u003c!-- \n                        . - ~ ~ ~ - .\n      ..     _      .-~               ~-.\n     //|     \\ `..~                      `.\n    || |      }  }              /       \\  \\\n(\\   \\\\ \\~^..'                 |         }  \\\n \\`.-~  o      /       }       |        /    \\\n (__          |       /        |       /      `.\n  `- - ~ ~ -._|      /_ - ~ ~ ^|      /- _      `.\n              |     /          |     /     ~-.     ~- _\n              |_____|          |_____|         ~ - . _ _~_-_\n--\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FLissy93%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FLissy93%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FLissy93%2Fdotfiles/lists"}