--- version: '3' # This is your local Taskfile.yml file. You can define tasks and scripts while leveraging some of the nifty # features of https://taskfile.dev. You can safely place your scripts here and they will be combined with # a veteran stack of Taskfile.yml files. You can access the tasks defined here by running # `task local:default` for example. You must keep all the tasks in this file without including other files # because the main Taskfile.yml is a symlinked one. Anyway, try `task local:default`. tasks: bitwarden: cmds: - | # Command to copy to clipboard COPY="wl-copy" # Get list of all logins as json logins="$(bw list items)" # Grab the name of every login and pip them into fzf name="$(echo "$logins" | jq -r '.[].name' | fzf)" # Find the login with the selected name (as a json) selected="$(echo "$logins" | jq -r ".[] | select(.name == \"$name\")")" # Print the name of the selected login echo "Name: $(echo "$selected" | jq -r '.name')" echo "> Copying Username" # Copy the username to the clipboard printf '%s' "$(echo "$selected" | jq -r '.login.username')" | $COPY echo "Press any key to copy password..." # Wait for user input before coping the password read -r echo "> Copying Password" # Copy the password to the clipboard printf '%s' "$(echo "$selected" | jq -r '.login.password')" | $COPY browser:profile:save:brave: vars: BrowserProfile: > {{if eq OS "darwin"}}~/Library/Application\ Support/BraveSoftware/Brave-Browser/Default{{end}} {{if eq OS "linux"}}{{end}} {{if eq OS "windows"}}{{end}} cmds: - tar -czpf ~/brave-profile.tar.gz {{.BrowserProfile}} browser:profile:save:chrome: vars: BrowserProfile: > {{if eq OS "darwin"}}~/Library/Application\ Support/BraveSoftware/Brave-Browser/Default{{end}} {{if eq OS "linux"}}{{end}} {{if eq OS "windows"}}{{end}} cmds: - tar -czpf ~/brave-profile.tar.gz {{.BrowserProfile}} browser:profile:save:edge: vars: BrowserProfile: > {{if eq OS "darwin"}}~/Library/Application\ Support/BraveSoftware/Brave-Browser/Default{{end}} {{if eq OS "linux"}}{{end}} {{if eq OS "windows"}}{{end}} cmds: - tar -czpf ~/brave-profile.tar.gz {{.BrowserProfile}} browser:profile:save:firefox: vars: BrowserProfile: > {{if eq OS "darwin"}}~/Library/Application\ Support/BraveSoftware/Brave-Browser/Default{{end}} {{if eq OS "linux"}}{{end}} {{if eq OS "windows"}}{{end}} cmds: - tar -czpf ~/brave-profile.tar.gz {{.BrowserProfile}} default: echo "Get started on https://taskfile.dev" font-test: cmds: - | echo -en "Regular" echo -en "\e[3m Italic \e[0m" echo -en "\e[1m Bold \e[0m" echo -en "\e[3m\e[1m Bold-Italic \e[0m" echo -en " \e[4mUnderline\e[0m " echo -e " \e[9mStrikethrough\e[0m" ferdium:profile:backup: desc: Imports the user's Ferdium profile from the CloudFlare R2 Restic repository for Ferdium summary: | # Ferdium Profile Backup This command backups the Ferdium profile to the S3-backed Restic repository, if the profile exists. If the repository has not been initialized then it will initialize it. After you backup the profile, you can restore it with the `ferdium:profile:restore` command. The Ferdium backup is encrypted with the same key that Chezmoi uses (stored in `~/.config/age/chezmoi.txt`, by default). The backup uses Restic so all the functionality that Restic offers is available with backups made by this command. cmds: - | for FERDIUM_PROFILE in "~/Library/Application Support/Ferdium"; do if [ -d '{{ .FerdiumProfile }}' ]; then if [ -d ~/.local/mnt/s3 ]; then if command -v rclone > /dev/null && command -v restic > /dev/null; then logg info 'Ferdium profile folder exists and user S3 mount exists. Backing the profile up to user S3 bucket.' if ([ -z "$(restic -r "rclone:$USER-s3:user/ferdium" --password-file "$HOME/.config/age/chezmoi.txt" cat config)" ]) 2>/dev/null; then logg info 'Initializing Ferdium Restic repository' restic -r "rclone:$USER-s3:user/ferdium" --password-file "$HOME/.config/age/chezmoi.txt" init fi restic -r "rclone:$USER-s3:user/ferdium" --password-file "$HOME/.config/age/chezmoi.txt" --verbose backup --tag "$FERDIUM_PROFILE" --tag {{ OS }} --tag "$HOST" "$FERDIUM_PROFILE" else logg warn 'Both `rclone` and `restic` must be available' fi else logg warn 'User S3 bucket mount is unavailable' fi else logg warn 'The Ferdium profile folder does not exist yet. You must run the Ferdium app to generate an initialial profile.' fi done ferdium:profile:restore: desc: Imports the user's Ferdium profile from the CloudFlare R2 Restic repository for Ferdium summary: | # Ferdium Profile Import This command imports the Ferdium profile from the Restic repository if it exists. In order to use this command for the first time, you should initialize Ferdium by opening the application. Then, after making any changes you wish to be saved, you should backup the Ferdium profile to the CloudFlare R2 user bucket by running the `ferdium:profile:import` task first. The Ferdium backup is encrypted with the same key that Chezmoi uses (stored in `~/.config/age/chezmoi.txt`, by default). The backup uses Restic so all the functionality that Restic offers is available with backups made by this command. cmds: - | ### Detect Ferdium profile location if [ -d "/Applications/Ferdium.app" ]; then FERDIUM_PROFILE="$HOME/Library/Application Support/Ferdium" fi ### Restore Ferdium profile if [ -d ~/.local/mnt/s3 ]; then if command -v rclone > /dev/null && command -v restic > /dev/null; then logg info 'Ferdium profile folder exists and user S3 mount exists. Restoring the profile from the user S3 bucket.' restic -r "rclone:$USER-s3:user/ferdium" --password-file "$HOME/.config/age/chezmoi.txt" restore latest --target "$FERDIUM_PROFILE" else logg warn 'Both `rclone` and `restic` must be available' fi else logg warn 'User S3 bucket mount is unavailable' fi provision: desc: Provision the environment summary: | # Provision the Environment This task will provision the current environment using a variety of tools. It will prompt you for details like what type of environment you are provisioning. Optionally, you can skip the prompt by passing a CLI argument like so: **Example:** `run localhost:provision -- terminal` The above example will run the `localhost:provision:terminal` task. cmds: - | if [ "{{.CLI_ARGS}}" != "" ]; then run localhost:provision:{{.CLI_ARGS}} else run localhost:provision:prompt fi provision:dev: deps: - :install:software:bundle - provision:terminal cmds: - brew bundle --file "$HOME/.local/Brewfile.dev" provision:full: deps: - :install:software:bundle - provision:dev cmds: - brew bundle --file "$HOME/.local/Brewfile.full" provision:prompt: deps: - :install:software:gum cmds: - logg prompt 'Select the type of environment you would like to provision' - logg prompt '`Terminal` - Installs standard CLI tools that augment the terminal experience' - logg prompt '`Development` - Provisions Terminal and also installs useful tools for development' - logg prompt '`Full` - Provisions with both Terminal and Development and then it installs all the Brewfile-supported software from the Gas Station project (e.g. https://gitlab.com/megabyte-labs/gas-station).' - | CHOICE="$(logg choose "Terminal" "Development" "Full")" if [ "$CHOICE" = 'Development' ]; then run localhost:provision:dev elif [ "$CHOICE" = 'Terminal' ]; then run localhost:provision:terminal elif [ "$CHOICE" = 'Full' ]; then run localhost:provision:full fi provision:terminal: deps: - :install:software:bundle cmds: - brew bundle --file "$HOME/.local/Brewfile.terminal" squash-symlink: summary: | Example: find . -type l -exec /path/tos/script {} + cmds: - | set -e for link; do test -h "$link" || continue dir=$(dirname "$link") reltarget=$(readlink "$link") case $reltarget in /*) abstarget=$reltarget;; *) abstarget=$dir/$reltarget;; esac rm -fv "$link" cp -afv "$abstarget" "$link" || { # on failure, restore the symlink rm -rfv "$link" ln -sfv "$reltarget" "$link" } done