diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf index 95ab39a..3003de3 100644 --- a/.config/hypr/hyprland.conf +++ b/.config/hypr/hyprland.conf @@ -130,6 +130,7 @@ bind = $mainMod, SPACE, togglesplit, # dwindle bind = CONTROL_L ALT_L, L, exec, swaylock bind = $mainMod, C, exec, cliphist list | awk '{print $0, "\0icon\x1fcom.github.davidmhewitt.clipped"}' | rofi -dmenu -display-columns 2 | cliphist decode | wl-copy bind = $mainMod, Y, exec, /home/user/.config/rofi/rofi-ykman.sh +bind = $mainMod, N, exec, /home/user/.config/rofi/rofi-ssh.sh bind = $mainMod, Escape, exec, rofi -show power-menu -modi power-menu:$scripts/rofi-power-menu bind = ,XF86PowerOff, exec, rofi -show power-menu -modi power-menu:$scripts/rofi-power-menu diff --git a/.config/lf/colors b/.config/lf/colors new file mode 100644 index 0000000..b65d3f0 --- /dev/null +++ b/.config/lf/colors @@ -0,0 +1,174 @@ +# vim:ft=dircolors +# (This is not a dircolors file but it helps to highlight colors and comments) + +# default values from dircolors +# (entries with a leading # are not implemented in lf) +# #no 00 # NORMAL +# fi 00 # FILE +# #rs 0 # RESET +# di 01;34 # DIR +# ln 01;36 # LINK +# #mh 00 # MULTIHARDLINK +# pi 40;33 # FIFO +# so 01;35 # SOCK +# #do 01;35 # DOOR +# bd 40;33;01 # BLK +# cd 40;33;01 # CHR +# or 40;31;01 # ORPHAN +# #mi 00 # MISSING +# su 37;41 # SETUID +# sg 30;43 # SETGID +# #ca 30;41 # CAPABILITY +# tw 30;42 # STICKY_OTHER_WRITABLE +# ow 34;42 # OTHER_WRITABLE +# st 37;44 # STICKY +# ex 01;32 # EXEC + +# default values from lf (with matching order) +# ln 01;36 # LINK +# or 31;01 # ORPHAN +# tw 01;34 # STICKY_OTHER_WRITABLE +# ow 01;34 # OTHER_WRITABLE +# st 01;34 # STICKY +# di 01;34 # DIR +# pi 33 # FIFO +# so 01;35 # SOCK +# bd 33;01 # BLK +# cd 33;01 # CHR +# su 01;32 # SETUID +# sg 01;32 # SETGID +# ex 01;32 # EXEC +# fi 00 # FILE + +# file types (with matching order) +ln 01;36 # LINK +or 31;01 # ORPHAN +tw 34 # STICKY_OTHER_WRITABLE +ow 34 # OTHER_WRITABLE +st 01;34 # STICKY +di 01;34 # DIR +pi 33 # FIFO +so 01;35 # SOCK +bd 33;01 # BLK +cd 33;01 # CHR +su 01;32 # SETUID +sg 01;32 # SETGID +ex 01;32 # EXEC +fi 00 # FILE + +# archives or compressed (dircolors defaults) +*.tar 01;31 +*.tgz 01;31 +*.arc 01;31 +*.arj 01;31 +*.taz 01;31 +*.lha 01;31 +*.lz4 01;31 +*.lzh 01;31 +*.lzma 01;31 +*.tlz 01;31 +*.txz 01;31 +*.tzo 01;31 +*.t7z 01;31 +*.zip 01;31 +*.z 01;31 +*.dz 01;31 +*.gz 01;31 +*.lrz 01;31 +*.lz 01;31 +*.lzo 01;31 +*.xz 01;31 +*.zst 01;31 +*.tzst 01;31 +*.bz2 01;31 +*.bz 01;31 +*.tbz 01;31 +*.tbz2 01;31 +*.tz 01;31 +*.deb 01;31 +*.rpm 01;31 +*.jar 01;31 +*.war 01;31 +*.ear 01;31 +*.sar 01;31 +*.rar 01;31 +*.alz 01;31 +*.ace 01;31 +*.zoo 01;31 +*.cpio 01;31 +*.7z 01;31 +*.rz 01;31 +*.cab 01;31 +*.wim 01;31 +*.swm 01;31 +*.dwm 01;31 +*.esd 01;31 + +# image formats (dircolors defaults) +*.jpg 01;35 +*.jpeg 01;35 +*.mjpg 01;35 +*.mjpeg 01;35 +*.gif 01;35 +*.bmp 01;35 +*.pbm 01;35 +*.pgm 01;35 +*.ppm 01;35 +*.tga 01;35 +*.xbm 01;35 +*.xpm 01;35 +*.tif 01;35 +*.tiff 01;35 +*.png 01;35 +*.svg 01;35 +*.svgz 01;35 +*.mng 01;35 +*.pcx 01;35 +*.mov 01;35 +*.mpg 01;35 +*.mpeg 01;35 +*.m2v 01;35 +*.mkv 01;35 +*.webm 01;35 +*.ogm 01;35 +*.mp4 01;35 +*.m4v 01;35 +*.mp4v 01;35 +*.vob 01;35 +*.qt 01;35 +*.nuv 01;35 +*.wmv 01;35 +*.asf 01;35 +*.rm 01;35 +*.rmvb 01;35 +*.flc 01;35 +*.avi 01;35 +*.fli 01;35 +*.flv 01;35 +*.gl 01;35 +*.dl 01;35 +*.xcf 01;35 +*.xwd 01;35 +*.yuv 01;35 +*.cgm 01;35 +*.emf 01;35 +*.ogv 01;35 +*.ogx 01;35 + +# audio formats (dircolors defaults) +*.aac 00;36 +*.au 00;36 +*.flac 00;36 +*.m4a 00;36 +*.mid 00;36 +*.midi 00;36 +*.mka 00;36 +*.mp3 00;36 +*.mpc 00;36 +*.ogg 00;36 +*.ra 00;36 +*.wav 00;36 +*.oga 00;36 +*.opus 00;36 +*.spx 00;36 +*.xspf 00;36 diff --git a/.config/lf/icons b/.config/lf/icons new file mode 100644 index 0000000..ae8d86c --- /dev/null +++ b/.config/lf/icons @@ -0,0 +1,77 @@ +di +fi 📃 +tw 🤝 +ow 📂 +ln ⛓ +or ❌ +ex 🎯 +*.txt ✍ +*.mom ✍ +*.me ✍ +*.ms ✍ +*.avif 🖼 +*.png 🖼 +*.webp 🖼 +*.ico 🖼 +*.jpg 📸 +*.jpe 📸 +*.jpeg 📸 +*.gif 🖼 +*.svg 🗺 +*.tif 🖼 +*.tiff 🖼 +*.xcf 🖌 +*.html 🌎 +*.xml 📰 +*.gpg 🔒 +*.css 🎨 +*.pdf 📚 +*.djvu 📚 +*.epub 📚 +*.csv 📓 +*.xlsx 📓 +*.tex 📜 +*.md 📘 +*.r 📊 +*.R 📊 +*.rmd 📊 +*.Rmd 📊 +*.m 📊 +*.mp3 🎵 +*.opus 🎵 +*.ogg 🎵 +*.m4a 🎵 +*.flac 🎼 +*.wav 🎼 +*.mkv 🎥 +*.mp4 🎥 +*.webm 🎥 +*.mpeg 🎥 +*.avi 🎥 +*.mov 🎥 +*.mpg 🎥 +*.wmv 🎥 +*.m4b 🎥 +*.flv 🎥 +*.zip 📦 +*.rar 📦 +*.7z 📦 +*.tar 📦 +*.z64 🎮 +*.v64 🎮 +*.n64 🎮 +*.gba 🎮 +*.nes 🎮 +*.gdi 🎮 +*.1 ℹ +*.nfo ℹ +*.info ℹ +*.log 📙 +*.iso 📀 +*.img 📀 +*.bib 🎓 +*.ged 👪 +*.part 💔 +*.torrent 🔽 +*.jar ♨ +*.java ♨ diff --git a/.config/lf/lfrc b/.config/lf/lfrc new file mode 100644 index 0000000..4be0e82 --- /dev/null +++ b/.config/lf/lfrc @@ -0,0 +1,6 @@ +set icons true +set autoquit true +set mouse true +set number true +set relativenumber true +set cursorpreviewfmt "" diff --git a/.config/rofi/rofi-ssh.sh b/.config/rofi/rofi-ssh.sh new file mode 100755 index 0000000..6456024 --- /dev/null +++ b/.config/rofi/rofi-ssh.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + + +servers=(Mallorea Kell Riva Vault Aloria Arendia) +selected=$(for server in "${servers[@]}"; do printf "%s\0icon\x1fterminal\n" "$server"; done | rofi -dmenu -i) +if [ -z "$selected" ]; then + exit 1 +fi +alacritty -e zsh -c "source ~/.zshrc && run_waypipe $selected" diff --git a/.config/zsh/.zshrc b/.config/zsh/.zshrc index 3149e3d..bd4f539 100644 --- a/.config/zsh/.zshrc +++ b/.config/zsh/.zshrc @@ -111,51 +111,15 @@ function zvm_after_init() { fi fi if [ ! -f $FZY_CACHE ]; then - PATHS="" + PATHS="$(/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME ls-files | xargs -n 1 dirname | uniq | grep -v '^\.$' | parallel echo ~/{})" search_dirs=(~/Workspace/ \ - ~/Containers/ \ - ~/Storage/Shared/ \ - ~/Storage/Thomas/ \ + /home/server/Storage/Thomas/ \ ) for i in $search_dirs ; do if [ -d $i ]; then PATHS="$PATHS\n$i" PATHS="$PATHS\n$(ssh mallorea fdfind . $i -t d -d 8)" fi - rone - - search_dirs=(~/.config/waybar/ \ - ~/.config/xmodmap/ \ - ~/.config/zsh/ \ - ~/.config/tmux/ \ - ~/.config/vim/ \ - ~/.config/qtile/ \ - ~/.config/rofi/ \ - ~/.config/scripts/ \ - ~/.config/nvim/ \ - ~/.config/picom/ \ - ~/.config/polybar/ \ - ~/.config/awesome/ \ - ~/.config/dunst/ \ - ~/.config/firefox/ \ - ~/.config/git/ \ - ~/.config/gitui/ \ - ~/.config/helix/ \ - ~/.config/hypr/ \ - ~/.config/i3/ \ - ~/.config/kitty/ \ - ~/.config/mpv/ \ - ~/.config/alacritty/ \ - ~/Containers/ \ - ~/Storage/Shared/ \ - ~/Storage/Thomas/ \ - ) - - for i in $search_dirs ; do - if [ -d $i ]; then - PATHS="$PATHS\n$i" - PATHS="$PATHS\n$(fd . $i -t d -d 5)" - fi done echo -e $PATHS > $FZY_CACHE fi @@ -167,8 +131,49 @@ function zvm_after_init() { cd_to "$(fd . -t d | fzy -l 20)" } + function edit_local_files() { + zle -I + file=$(fd . -t f | fzy -l 20) + if [ -z "$file" ]; then + return 0 + fi + nvim "$file" + } + + function edit_global_files() { + zle -I + FZY_CACHE=~/.cache/fzy_file_paths + if [ -f $FZY_CACHE ]; then + # Check if cache is older than 1 day + if [ $(($(date +%s) - $(date -r $FZY_CACHE +%s))) -gt 86400 ]; then + rm $FZY_CACHE + fi + fi + if [ ! -f $FZY_CACHE ]; then + PATHS="$(/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME ls-files | parallel echo ~/{})" + search_dirs=(~/Workspace/ \ + ~/Containers/ \ + ) + for i in $search_dirs ; do + if [ -d $i ]; then + PATHS="$PATHS\n$(fd . $i -t f)" + fi + done + echo -e $PATHS > $FZY_CACHE + fi + file=$(cat $FZY_CACHE | fzy -l 20) + if [ -z "$file" ]; then + return 0 + fi + cd_to "$(dirname $file)" + nvim "$file" + + } + zle -N find_global_files zle -N find_local_files + zle -N edit_global_files + zle -N edit_local_files bindkey "^T" find_global_files bindkey -M emacs "^T" find_global_files @@ -180,6 +185,16 @@ function zvm_after_init() { bindkey -M vicmd "^Y" find_local_files bindkey -M viins "^Y" find_local_files + bindkey "^E" edit_global_files + bindkey -M emacs "^E" edit_global_files + bindkey -M vicmd "^E" edit_global_files + bindkey -M viins "^E" edit_global_files + + bindkey "^W" edit_global_files + bindkey -M emacs "^W" edit_local_files + bindkey -M vicmd "^W" edit_local_files + bindkey -M viins "^W" edit_local_files + if [ "$SSH_SESSION_ID" != "" ]; then mkdir -p /tmp/ssh_sessions @@ -254,6 +269,26 @@ function xterm_title_preexec () { print -Pn -- '\e]2;' && print -n -- "${(q)1}\a" } + +if [[ "$TERM" == (Eterm*|alacritty*|aterm*|gnome*|konsole*|kterm*|putty*|rxvt*|screen*|tmux*|xterm*) ]]; then + add-zsh-hook -Uz precmd xterm_title_precmd + add-zsh-hook -Uz preexec xterm_title_preexec +fi + + +########################################### +# Aliases +########################################### + +if [[ "$(hostname)" == "mallorea" ]]; then + alias lf="/usr/bin/lf -last-dir-path /tmp/lf_dir && cd \"\$(cat /tmp/lf_dir 2> /dev/null || pwd)\"" +else + alias lf="cd \"\$(/usr/bin/lf -print-selection -print-last-dir)\"" +fi + +if command -v fdfind &> /dev/null; then + alias fd="fdfind" +fi function o () { xdg-open "$1" &! } @@ -264,32 +299,28 @@ function run_waypipe() { SSH_SESSION_ID=$SSH_SESSION_ID waypipe ssh -t $1 env REMOTE_PATH=\"$REMOTE_PATH\" SSH_SESSION_ID=$SSH_SESSION_ID "zsh --login" } +function git() { + if [ "$HOME" = "$(pwd)" ]; then + /usr/bin/git --git-dir="$HOME/.dotfiles/" --work-tree="$HOME" "$@" + else + /usr/bin/git "$@" + fi +} + alias mallorea="run_waypipe mallorea" alias vault="run_waypipe vault" alias riva="run_waypipe riva" alias kell="run_waypipe kell" -if [[ "$TERM" == (Eterm*|alacritty*|aterm*|gnome*|konsole*|kterm*|putty*|rxvt*|screen*|tmux*|xterm*) ]]; then - add-zsh-hook -Uz precmd xterm_title_precmd - add-zsh-hook -Uz preexec xterm_title_preexec -fi - -# Aliases -if command -v fdfind &> /dev/null; then - alias fd="fdfind" -fi alias ls="ls --color=auto" alias gdb='gdb -q' alias ll='ls -lhat' -alias clip="xsel --clipboard" alias compress="tar --use-compress-program=lbzip2 -cvf" alias vim="nvim" -alias dot='/usr/bin/git --git-dir="$HOME/.dotfiles/" --work-tree="$HOME"' +alias dot='/usr/bin/git --git-dir="$HOME/.dotfiles/" --work-tree="$HOME" "$@"' alias wget=wget --hsts-file="$XDG_DATA_HOME/wget-hsts" -alias xbindkeys="xbindkeys -f $XDG_CONFIG_HOME/xbindkeys/config" alias python=python3 -alias r=". ranger" -alias v="vim . && cd \"\$(cat /tmp/oil_dir 2> /dev/null || pwd)\"" +alias v="nvim -c ':lua require(\"oil\").open()' && cd \"\$(cat /tmp/oil_dir 2> /dev/null || pwd)\"" alias cpr="rsync --archive -hh --partial --info=stats1,progress2 --modify-window=1" alias mvr="rsync --archive -hh --partial --info=stats1,progress2 --modify-window=1 --remove-source-files" alias rg="rg -i --colors 'match:bg:yellow' --colors 'match:fg:black' --colors 'match:style:nobold' --colors 'path:fg:green' --colors 'path:style:bold' --colors 'line:fg:yellow' --colors 'line:style:bold'" diff --git a/.mailcap b/.mailcap new file mode 100644 index 0000000..3906763 --- /dev/null +++ b/.mailcap @@ -0,0 +1 @@ +text/html; w3m -dump -o -document_charset=%{charset} %s; nametemplate=%s.html; copiousoutput diff --git a/.notmuch-config b/.notmuch-config new file mode 100644 index 0000000..e2a0c6a --- /dev/null +++ b/.notmuch-config @@ -0,0 +1,83 @@ +# .notmuch-config - Configuration file for the notmuch mail system +# +# For more information about notmuch, see https://notmuchmail.org +# Database configuration +# +# The only value supported here is 'path' which should be the top-level +# directory where your mail currently exists and to where mail will be +# delivered in the future. Files should be individual email messages. +# Notmuch will store its database within a sub-directory of the path +# configured here named ".notmuch". +# +[database] +path=/home/user/.config/aerc/mail + +# User configuration +# +# Here is where you can let notmuch know how you would like to be +# addressed. Valid settings are +# +# name Your full name. +# primary_email Your primary email address. +# other_email A list (separated by ';') of other email addresses +# at which you receive email. +# +# Notmuch will use the various email addresses configured here when +# formatting replies. It will avoid including your own addresses in the +# recipient list of replies, and will set the From address based on the +# address to which the original email was addressed. +# +[user] +name=Thomas Avé +primary_email=email@thomasave.be +other_email=Thomas.Ave@uantwerpen.be;Thomas.Ave@imec.be; + +# Configuration for "notmuch new" +# +# The following options are supported here: +# +# tags A list (separated by ';') of the tags that will be +# added to all messages incorporated by "notmuch new". +# +# ignore A list (separated by ';') of file and directory names +# that will not be searched for messages by "notmuch new". +# +# NOTE: *Every* file/directory that goes by one of those +# names will be ignored, independent of its depth/location +# in the mail store. +# +[new] +# Search configuration +# +# The following option is supported here: +# +# exclude_tags +# A ;-separated list of tags that will be excluded from +# search results by default. Using an excluded tag in a +# query will override that exclusion. +# +[search] +# Maildir compatibility configuration +# +# The following option is supported here: +# +# synchronize_flags Valid values are true and false. +# +# If true, then the following maildir flags (in message filenames) +# will be synchronized with the corresponding notmuch tags: +# +# Flag Tag +# ---- ------- +# D draft +# F flagged +# P passed +# R replied +# S unread (added when 'S' flag is not present) +# +# The "notmuch new" command will notice flag changes in filenames +# and update tags, while the "notmuch tag" and "notmuch restore" +# commands will notice tag changes and update flags in filenames +exclude_tags=deleted;spam; + +[maildir] +synchronize_flags=true