My dotfiles
Go to file
2023-06-17 14:49:08 +03:00
.husky Fixes to precommit hook and reformat some zsh files 2022-10-26 14:13:15 +03:00
docker Disable misskey elasticsearch 2023-05-25 22:08:02 +03:00
dotdrop@25d48954b4 Update dotdrop 2023-05-24 09:16:29 +03:00
home Separate neovide settings to it's own file in nvim config 2023-06-17 14:35:24 +03:00
root Revert "Switch from pacserve to flexo" 2023-05-23 21:38:07 +03:00
scripts Add checkupdates script 2022-12-01 21:56:56 +02:00
secrets Removed some old/unneeded shell scripts and formatted the rest 2022-09-16 20:08:03 +03:00
.editorconfig Add pre-commit hook to format files 2022-09-16 19:21:54 +03:00
.gitignore Add pre-commit hook to format files 2022-09-16 19:21:54 +03:00
.gitmodules Switch to freshrss 2020-07-05 12:02:51 +03:00
.ignore Add .ignore file for the root of the repo to ignore the dotdrop 2022-09-16 20:18:56 +03:00
.prettierignore Format all files with prettier, remove udiskie config 2022-09-16 20:01:31 +03:00
.prettierrc.toml Add pre-commit hook to format files 2022-09-16 19:21:54 +03:00
config-root.toml Revert "Switch from pacserve to flexo" 2023-05-23 21:38:07 +03:00
config.toml Add kodi autostart on tty6 for moria 2023-03-09 10:27:45 +02:00
LICENSE Removed commit history 2019-10-26 20:05:31 +03:00
package-lock.json Add pre-commit hook to format files 2022-09-16 19:21:54 +03:00
package.json Add pre-commit hook to format files 2022-09-16 19:21:54 +03:00
README.adoc Include file from URI instead 2023-06-17 14:49:08 +03:00

FunctionalHackers dotfiles

screenshot of my setup

My personal dotfiles for my workstations, mostly for easy access for myself but feel free to steal them for yourself!

Im using dotdrop to manage and ease deployment of my dotfiles.

Mirrors

This repository lives at My git server, but it is also mirrored to:

If you have any ideas for improvements, questions or anything of this sort, you can open an issue or a pull request at my git server (registrations open for anyone), or any of the mirrors.

Testing rouge syntax highlighter with AsciiDoc

My ZSH aliases
# Fix sudo and doas not expanding aliases
# see: https://unix.stackexchange.com/questions/148545/why-does-sudo-ignore-aliases
alias sudo='sudo '
alias doas='doas '

# git shorthands
alias gc='git commit'
alias gac='ga && gc'
alias gs='git status'
alias gpull='git pull'
alias gpush='git push'

alias o='xdg-open'

# Open nvim with diffview
# Handy plugin for viewing git diffs
# and handling merges
alias dv='nvim +DiffviewOpen'

# Rename grc alias from forgit since it
# collides with the grc colorizer
forgit_revert_commit=fgrc

# Modern replacement for ls
alias ls='eza --icons --git'

# Enable command not found handler
{%@@ if distro_id == "arch" @@%}
source /usr/share/doc/pkgfile/command-not-found.zsh
{%@@ elif distro_id == "ubuntu" @@%}
source /etc/zsh_command_not_found
{%@@ elif distro_id == "termux" @@%}
function command_not_found_handler {
	$PREFIX/libexec/termux/command-not-found $1
}
{%@@ endif @@%}

# search and install/remove packages with fzf
pi() {
  {%@@ if distro_id == "arch" @@%}
	SELECTED_PKGS="$(paru -Slq | fzf --header='Install packages' -m --preview 'paru -Si {1}' | tr '\n' ' ')"
  {%@@ else @@%}
	SELECTED_PKGS="$(apt list 2>/dev/null | cut -d '/' -f 1 | tail +2 | fzf --header='Install packages' -m --preview 'apt show 2>/dev/null {1}' | tr '\n' ' ')"
  {%@@ endif @@%}
	if [ -n "$SELECTED_PKGS" ]; then
    {%@@ if distro_id == "arch" @@%}
    cmd="paru -S $SELECTED_PKGS"
    {%@@ elif distro_id == "ubuntu" or distro_id == "debian" @@%}
    cmd="doas apt install $SELECTED_PKGS"
    {%@@ elif distro_id == "termux" @@%}
    cmd="apt install $SELECTED_PKGS"
    {%@@ endif @@%}

		# Append the expanded command to history
		print -s "$cmd"

    # Finally, excecute the command
    eval "$cmd"
	fi
}

mkcd() {
  mkdir -p $1
  cd $1
}

pr() {
  {%@@ if distro_id == "arch" @@%}
	SELECTED_PKGS="$(paru -Qsq | fzf --header='Remove packages' -m --preview 'paru -Si {1}' | tr '\n' ' ')"
  {%@@ else @@%}
	SELECTED_PKGS="$(apt list --installed 2>/dev/null | cut -d '/' -f 1 | tail +2 | fzf --header='Remove packages' -m --preview 'apt show 2>/dev/null {1}' | tr '\n' ' ')"
  {%@@ endif @@%}
	if [ -n "$SELECTED_PKGS" ]; then
    {%@@ if distro_id == "arch" @@%}
    cmd="paru -Rns $SELECTED_PKGS"
    {%@@ elif distro_id == "ubuntu" or distro_id == "debian" @@%}
    cmd="doas apt remove $SELECTED_PKGS"
    {%@@ elif distro_id == "termux" @@%}
    cmd="apt remove $SELECTED_PKGS"
    {%@@ endif @@%}

		# Append the expanded command to history
		print -s "$cmd"

    # Finally, excecute the command
    eval "$cmd"
	fi
}

{%@@ if profile == "Moria" @@%}
# Add packages to repo with fzf
ra() {
	SELECTED_PKGS="$(paru -Slqa | fzf --header='Add packages to repo' -m --preview 'paru -Si {1}' | tr '\n' ' ')"
	if [ -n "$SELECTED_PKGS" ]; then
    cmd="aur sync -S $SELECTED_PKGS"

		# Append the expanded command to history
		print -s "$cmd"

    # Finally, excecute the command
    eval "$cmd"
	fi
}
{%@@ endif @@%}

{%@@ if distro_id == "termux" @@%}
alias gp='okc-gpg'
{%@@ endif @@%}

# find and open man pages with fzf
fman() {
	man -k . | fzf --prompt='Man> ' | awk '{print $1}' | xargs -r man
}

alias :q='cowsay "You are not in vim anymore"'

alias reboot-kodi='systemctl reboot --boot-loader-entry=kodi.conf'

# zbar output only data
alias zbarimg='zbarimg -q --raw'
alias zbarcam='zbarcam -q --raw'

# shorten systemctl and journalctl
alias sc='systemctl'
alias scu='systemctl --user'
alias jc='journalctl'
alias jcu='journalctl --user'

# switch to desktop mode
alias dock='swaymsg output eDP-1 disable'

{%@@ if distro_id != "termux" @@%}
# move to trash instead of remove
alias rm='trash'
{%@@ endif @@%}

# clean stuff
clean() {
	DFCMD="df -h / | tail -n 1 | cut -d' ' -f8- | cut -d' ' -f1 | sed 's/[^0-9]*//g'"
	SPACEBEFORE=$(eval "$DFCMD")
	trash-empty 10
  doas journalctl --vacuum-size=500M
	paru -Sc
	SPACEAFTER=$(eval "$DFCMD")
	echo "Saved $(calc $SPACEAFTER - $SPACEBEFORE)G of space"
}

# connect to wireguard
alias startvpn='doas systemctl start wg-quick@wg0.service'
alias stopvpn='doas systemctl stop wg-quick@wg0.service'

# read qrcode from selection
qr() {
  gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval 'Main.screenshotUI.open();' 2>&1 > /dev/null && wl-paste | zbarimg -q --raw PNG:-
}

# generate qr code in terminal
alias qrencode='qrencode -t ansiutf8'

# color picker
cpick() { grim -g "$(slurp -p)" -t ppm - | convert - -format "%[pixel:p{0,0}]" txt:- }

#iwctl aliases
alias i='iwctl station wlan0'

# monitor cpu freq
cpufreq() { watch -n 1 eval "cat /proc/cpuinfo | grep MHz" }

# dotdrop
alias dotdrop="source $DOTREPO/secrets/secrets && UID=$(id -u) dotdrop --cfg=$DOTREPO/config.toml {%@@ if profile == "Isengard" @@%} -p Isengard{%@@ endif @@%}"


alias sdotdrop="source $DOTREPO/secrets/secrets && sudo -E dotdrop --cfg=$DOTREPO/config-root.toml"
compdef _dotdrop-completion.zsh sdotdrop

updatesecrets() {
  bash $DOTREPO/secrets/secrets.sh
  chmod 600 $DOTREPO/secrets/secrets
}

alias dotgit='git -C $DOTREPO'
dotsync() { cd $DOTREPO && gac && gpull && gpush && cd $OLDPWD }

# sync password manager
passync() { pass git pull && pass git push && updatesecrets }

update() {
	all() {
    dotfiles
		packages
		{%@@ if profile == "Moria" @@%}
		repo
		docker-update
		{%@@ endif @@%}
		plugins
	}

	packages() {
		{%@@ if distro_id == "arch" @@%}
		paru -Syu --noconfirm
		{%@@ elif distro_id == "ubuntu" or distro_id == "debian" @@%}
		doas apt update && doas apt full-upgrade -y && doas apt autoremove -y && doas apt autoclean -y
		{%@@ elif distro_id == "termux" @@%}
		pkg update && pkg upgrade --yes
		{%@@ endif @@%}
		{%@@ if distro_id == "termux" or distro_id == "ubuntu" or distro_id == "debian" @@%}
    pip-update-installed
    cargo-update-installed
		{%@@ endif @@%}
	}

	plugins() {
		echo "Updating NeoVim plugins"
		nvim --headless -c "Lazy! update" -c 'TSUpdateSync' -c 'MasonUpdateAll' -c 'qa'
		zinit self-update
		zinit update -p
		{%@@ if profile == "Moria" @@%}
		$HOME/.tmux/plugins/tpm/bin/update_plugins all
		{%@@ endif @@%}
	}

  pip-update-installed() {
    pip install --upgrade $(pip list --outdated | tail -n +3 | awk '{print $1}')
  }

  cargo-update-installed() {
    cargo install-update -a
  }

	{%@@ if profile == "Moria" @@%}
	repo() {
		aur sync -Su --margs --noconfirm
	}

	local docker-update() {
		prevpwddocker=$PWD
		for dir in $HOME/git/dotfiles/docker/*; do
			cd $dir
			if [[ -f "$dir/DISABLED" ]]; then
				echo "$(basename $dir) stack is disabled, skipping..."
			else
				dct -f $dir/docker-compose.toml pull
				dct -f $dir/docker-compose.toml up -d
			fi
			cd ..
		done
		cd $prevpwddocker
		docker system prune -af --volumes

    occ upgrade
    occ app:update --all
    occ db:add-missing-indices
	}
	{%@@ endif @@%}

  dotfiles() {
    dotgit pull
    dotdrop install
  }

  if [ $# -eq 0 ]; then
    packages  # Update only packages if no option was provided
  else
    case "$1" in
      all)
        all
        ;;
      dotfiles)
        dotfiles
        ;;
      plugins)
        plugins
        ;;
        {%@@ if profile == "Moria" @@%}
        docker)
        docker-update
        ;;
      repo)
        repo
        ;;
        {%@@ endif @@%}
        *)
        echo "Unknown option: $1"
        return 1
        ;;
    esac
  fi
}

_update() {
  local commands=(
    "all:Update everything"
    "dotfiles:Update dotfiles"
    "plugins:Update plugins for NeoVim and ZSH"
		{%@@ if profile == "Moria" @@%}
    "repo:Update packages in Korhonen AUR repository"
    "docker:Update all Docker containers"
		{%@@ endif @@%}
  )

  _arguments \
    '1: :->command' \
    '*:: :->args'

  case "$state" in
    (command)
      _describe -t commands 'available commands' commands
      ;;
  esac
}
compdef _update update

# turn on usb tethering on my android phone
tether() { adb shell su -c "service call connectivity 33 i32 1 s16 me" > /dev/null }

# update arch mirrorlist
alias reflect='doas reflector --latest 200 --threads 8 --verbose --protocol http --protocol https --sort rate --save /etc/pacman.d/mirrorlist'

# default icon for notify-send
alias notify-send='notify-send --icon=alarm'

# download archiso
alias archiso='curl "http://mirror.rackspace.com/archlinux/iso/$(date +%Y.%m).01/archlinux-$(date +%Y.%m).01-x86_64.iso"'

# encrypted tar's with zstd compression
cgpgtar() { tar cf - --zstd $1 | gpg -e -z 0 > $1.tar.zst.gpg }
xgpgtar() { gpg -d $1 | tar x --zstd }

# Switch to different yubikey
alias switch-yubikey='gpg-connect-agent "scd serialno" "learn --force" /bye'

btw, () {
	echo "                 I use"
	echo "                   ▄
                  ▟█▙
                 ▟███▙
                ▟█████▙
               ▟███████▙
              ▂▔▀▜██████▙
             ▟██▅▂▝▜█████▙
            ▟█████████████▙
           ▟███████████████▙
          ▟█████████████████▙
         ▟███████████████████▙
        ▟█████████▛▀▀▜████████▙
       ▟████████▛      ▜███████▙
      ▟█████████        ████████▙
     ▟██████████        █████▆▅▄▃▂
    ▟██████████▛        ▜█████████▙
   ▟██████▀▀▀              ▀▀██████▙
  ▟███▀▘                       ▝▀███▙
 ▟▛▀                               ▀▜▙"
}

# docker-compose with TOML
dct() {
	local file_path=('./docker-compose.toml')

	zmodload zsh/zutil
	zparseopts -D -K -- \
		f:=file_path ||
		return 1

	file_path=${file_path[-1]}

	if [[ ! -a "$file_path" ]]; then
		echo "File $file_path does not exist!"
		return 1
	fi

	yj -ty < $file_path | docker compose -f - $@
}

alias dslr-webcam='pkill -f gphoto2; gphoto2 --stdout --capture-movie | ffmpeg -i - -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video0'

clock() {
  while true; do
    printf '%s\r' "$(date)"
    sleep 0.1
  done
}

# Change file extension made easy
chext() {
  file="$1"
  new_ext="$2"
  dest="${file%.*}.$new_ext"

  help() {
    printf "Change file extension\nUsage: chext file new_extension\nFor example: chext my_script.sh zsh"
  }

  if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
    help
    return
  fi

  if [ $# -lt 2 ]; then
    help
    return 1
  fi

  if [ ! -e "$1" ]; then
    echo "$file: no such file or directory"
    help
    return 1
  fi

  mv "$file" "$dest"
}