diff options
81 files changed, 1122 insertions, 940 deletions
diff --git a/.bin/_music b/.bin/_music new file mode 100755 index 0000000..6ef5ef8 --- /dev/null +++ b/.bin/_music @@ -0,0 +1,70 @@ +#!/bin/sh + + +MUSIC_DIR="${HOME}/music" +MUSIC_LIST= +MUSIC_FILE= +MUSIC_YT_OPTIONS= + +log() { + echo "[${0} ] ${@}" +} + +main() { + # arguments + while getopts "c:" arg; do + case "${arg}" in + c) + MUSIC_FILE="${OPTARG}" + ;; + h) + exit 0 + ;; + esac + done + + # ensure parameters are correct + [ ! -f "${MUSIC_FILE}" ] && exit 1 + + + while read -r line; do + + # skip comments + line=$(echo ${line} | grep -v -e "^$" -e "^#") + [ -z "${line}" ] && continue + + # retrieve playlist params + url=$(echo "${line}" | cut -d " " -f 1) + dir=$(echo "${line}" | cut -d " " -f 2) + + dir="${MUSIC_DIR}/${dir}" + + [ -d "${dir}" ] && + log "${dir}: directory already exists" && + continue + + mkdir "${dir}" + log "${dir} ${url}: download" + + yt-dlp --rm-cache-dir >/dev/null + yt-dlp \ + --extract-audio \ + --audio-format mp3 \ + --prefer-ffmpeg \ + --audio-quality 0 \ + --embed-thumbnail \ + --metadata-from-title "%(artist)s - %(title)s" \ + --no-warnings \ + --ignore-errors \ + --no-overwrites \ + --continue \ + --add-metadata \ + --user-agent "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" \ + --output "${dir}/'%(title)s.%(ext)s'" \ + "${url}" + + + done < "${MUSIC_FILE}" +} + +main ${@} diff --git a/.bin/ag-status b/.bin/ag-status index 3970e54..abd2fff 100755 --- a/.bin/ag-status +++ b/.bin/ag-status @@ -6,10 +6,13 @@ __cleanup_value() { uname=$(uname) +status="" + battery="" battery_status="" time="" volume="" +vpn="" while true; do case "${uname}" in @@ -24,8 +27,9 @@ while true; do ;; Linux) battery=$(acpi -b | - cut -d " " -f 4 | - cut -d "%" -f 1) + tr -s " " "\n" | + grep "%" | + sed 's/[%,]//g') battery_status=$(acpi -a | tr -s " " | cut -d " " -f 3) @@ -33,18 +37,25 @@ while true; do __cleanup_value) if $(pamixer --get-mute); then - volume_status="__mute__" + volume="%mute" fi ;; esac - time=$(date +%Y-%m-%dT%H:%M:%S) status="VOL: ${volume}%" + vpn="" + ! wg && vpn="wireguard" + pgrep openvpn && vpn="openvpn" + if [ -n "${vpn}" ]; then + status="${status} | VPN: ${vpn}" + fi + if [ -n "${battery}" ]; then status="${status} | BATTERY ${battery}%" fi + time=$(date +%Y-%m-%dT%H:%M:%S) status="${status} | DATE: ${time}" echo "${status}" diff --git a/.bin/bck-create b/.bin/bck-create new file mode 100755 index 0000000..9714af6 --- /dev/null +++ b/.bin/bck-create @@ -0,0 +1,21 @@ +#!/bin/sh + +set -xe + +directories="${HOME}/docs + ${HOME}/git.rgoncalves.se + ${HOME}/.local/share/gopass + ${HOME}/.local/share/mail + ${HOME}/.local/share/yadm + ${HOME}/.local/share/zk" + +pgp_id=$(gpg --list-secret-keys | grep -A 1 sec | tail -n 1 | tr -d " ") +output_name="$(date -u +"%Y-%m-%dT%H_%M_%S%Z").tar.pgp" + +if [ -d "${1}" ]; then + output_name="${1}/${output_name}" +elif [ -f "${1}" ] || [ "${1}" ]; then + output_name="${1}" +fi + +tar cvf - ${directories} | lz4 | gpg -e -z 0 -r "${pgp_id}" > "${output_name}" diff --git a/.bin/ccurse b/.bin/ccurse deleted file mode 100755 index 6377bb0..0000000 --- a/.bin/ccurse +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -default_calendar="personal" -data_dir="${HOME}/docs/calendar" - -for calendar; do true; done -args=$(echo ${@} | rev | cut -d " " -f 2- | rev) - -exec calcurse -C "${HOME}/.config/calcurse" \ - -D "${data_dir}/${last:-${default_calendar}}" \ - ${args} diff --git a/.bin/ccurse-ical b/.bin/ccurse-ical deleted file mode 100755 index d5c6e90..0000000 --- a/.bin/ccurse-ical +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -set -xe - -[ "${1}" ] -[ "${2}" ] - -ccurse diff --git a/.bin/clear-efi-suspend b/.bin/clear-efi-suspend deleted file mode 100755 index 9086ef3..0000000 --- a/.bin/clear-efi-suspend +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -set -xe - -mkdir -p /dev/pstore -mount -t pstore pstore /dev/pstore -ls /dev/pstore -rm -f /dev/pstore/* - -rm /sys/firmware/efi/efivars/dump-type0-* diff --git a/.bin/create-local-backup b/.bin/create-local-backup deleted file mode 100755 index 4e4cb1b..0000000 --- a/.bin/create-local-backup +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh - -set -xe - -source_directories="./git.rgoncalves.se/ - ./ - " - -out_dir=$(readlink -f "${1}") - -[ -d "${out_dir}" ] - -exit -rsync -hvrPt \ - --delete-after \ - --fuzzy \ - --prune-empty-dirs \ - --include "*.pdf" \ - --include "*.epub" \ - --include "*.png" \ - --include "*.jpg" \ - --include "*/" \ - --exclude "*" \ - "${src_dir}/" "${out_dir}/" diff --git a/.bin/dot-bootstrap b/.bin/dot-bootstrap index 766eaf1..0da52d0 100755 --- a/.bin/dot-bootstrap +++ b/.bin/dot-bootstrap @@ -2,17 +2,27 @@ set -x -e -directories="git \ - downloads \ - .cache/dot \ - .cache/neomutt \ - .local/bin \ - .local/share/dot \ - .mail" - +# dotfiles setup remote=$(yadm remote | head -n 1) yadm branch --set-upstream-to="${remote}/trunk" trunk -for directory in ${directories}; do mkdir -p "${HOME}/${directory}"; done +# directory structure +for directory in "${HOME}/.cache/dot \ + ${HOME}/.cache/neomutt \ + ${HOME}/.local/bin \ + ${HOME}/.local/share/dot \ + ${HOME}/.mail + ${HOME}/downloads \ + ${HOME}/git \ + ${HOME}/mnt \ + ${HOME}/tmp \ + ${ZK_NOTEBOOK_DIR}"; do + mkdir -p "${directory}" +done + +# default venvs +venv_root_dir="${HOME}/.local/venv" +mkdir -p "${venv_root_dir}" -notmuch new +python -m venv "${venv_root_dir}/weechat" +"${venv_root_dir}/weechat/bin/pip" install websocket-client diff --git a/.bin/dot-sync b/.bin/dot-sync index 7f4d490..0643086 100755 --- a/.bin/dot-sync +++ b/.bin/dot-sync @@ -13,13 +13,21 @@ yadm add \ $HOME/.config/neomutt \ $HOME/.config/newsboat \ $HOME/.config/nvim \ - $HOME/.config/qutebrowser/{*.py,greasemonkey} \ + $HOME/.config/qutebrowser/*.py \ + $HOME/.config/qutebrowser/bookmarks \ + $HOME/.config/qutebrowser/greasemonkey \ + $HOME/.config/qutebrowser/quickmarks \ + $HOME/.config/qutebrowser/userscripts/*.py \ $HOME/.config/sway \ + $HOME/.config/task \ $HOME/.config/yadm \ $HOME/.config/waybar \ + $HOME/.config/zk \ $HOME/.public-keys yadm push +nvim --headless -c "PaqSync" -c "TSInstall all" -c "TSUpdate" -c "qa" + yadm commit -m "$(date +%Y-%m-%dT%H:%M:%S)" yadm push diff --git a/.bin/get-mailbox-imap b/.bin/get-mailbox-imap deleted file mode 100755 index b78752d..0000000 --- a/.bin/get-mailbox-imap +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 - -import imaplib -import sys - - -def get_boxes(list): - """ Retrieve and decode all mailboxes. """ - return [box.decode('utf-8').rsplit(' ')[-1] for box in list] - - -def flatten_output(list): - """ Print all boxes with a flattened output. """ - return ''.join([f"+'{box}' " for box in list]) - - -def sort_mailboxes(mailboxes): - """ Sort boxes list according to a predefined order. """ - - order = [ - "INBOX", - "Unread", - "Drafts", - "Sent", - "Spam", - "Trash", - "Junk", - "Archive" - ] - - mailboxes = sorted(mailboxes) - - # sort based on predefined order - output = [] - for exp in order: - matching = [s for s in mailboxes if exp in s] - output.extend(matching) - - # ensure all retrieved boxes are present - for box in mailboxes: - if box not in output: - output.append(box) - - return output - - -def main(): - """ - Retrieve, sort, and pretty print for neomutt - """ - - # user information - remote = sys.argv[1] - username = sys.argv[2] - password = sys.argv[3] - - # connection - mail = imaplib.IMAP4_SSL(remote) - mail.login(username, password) - - # parse folders output - bxs = sort_mailboxes(get_boxes(mail.list()[1])) - - # oneline pretty-print for neomutt - print(flatten_output(bxs), end=' ') - - -if __name__ == "__main__": - main() diff --git a/.bin/get-mailbox-local b/.bin/get-mailbox-local deleted file mode 100755 index b579016..0000000 --- a/.bin/get-mailbox-local +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -root_dir=$(readlink -f ${1}) - -mailboxes=$(find "${1}" -name "cur" | - xargs dirname | - sed "s@$root_dir/@+@g" | - grep "${2:-.*}" | - sort) - -echo ${mailboxes} @@ -1,70 +1,104 @@ -#!/bin/sh - - -MUSIC_DIR="${HOME}/music" -MUSIC_LIST= -MUSIC_FILE= -MUSIC_YT_OPTIONS= - -log() { - echo "[${0} ] ${@}" -} - -main() { - # arguments - while getopts "c:" arg; do - case "${arg}" in - c) - MUSIC_FILE="${OPTARG}" - ;; - h) - exit 0 - ;; - esac - done - - # ensure parameters are correct - [ ! -f "${MUSIC_FILE}" ] && exit 1 - - - while read -r line; do - - # skip comments - line=$(echo ${line} | grep -v -e "^$" -e "^#") - [ -z "${line}" ] && continue - - # retrieve playlist params - url=$(echo "${line}" | cut -d " " -f 1) - dir=$(echo "${line}" | cut -d " " -f 2) - - dir="${MUSIC_DIR}/${dir}" - - [ -d "${dir}" ] && - log "${dir}: directory already exists" && - continue - - mkdir "${dir}" - log "${dir} ${url}: download" - - yt-dlp --rm-cache-dir >/dev/null - yt-dlp \ - --extract-audio \ - --audio-format mp3 \ - --prefer-ffmpeg \ - --audio-quality 0 \ - --embed-thumbnail \ - --metadata-from-title "%(artist)s - %(title)s" \ - --no-warnings \ - --ignore-errors \ - --no-overwrites \ - --continue \ - --add-metadata \ - --user-agent "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" \ - --output "${dir}/'%(title)s.%(ext)s'" \ - "${url}" - - - done < "${MUSIC_FILE}" -} - -main ${@} +#!/usr/bin/python3 + +import os +import sys +import yt_dlp +from dataclasses import dataclass + + +def _match_filter(info: dict, *, incomplete) -> str | None: + _duration = info.get("duration") + _duration_min = 60 + + if _duration and int(_duration) < _duration_min: + return "Duration too short: < _duration_min" + + return None + + +@dataclass(frozen=True) +class Collection: + """A music collection.""" + + title: str + links: frozenset[str] + + def __eq__(self, other) -> bool: + if isinstance(other, Collection): + return self.title == other.title + raise NotImplementedError + + +def parse_raw_to_collections(raw_data: list[str]) -> frozenset[Collection]: + collections: set[Collection] = set() + _collection_data: list[str] = [] + + for index, line in enumerate(raw_data): + if line.startswith("#"): + continue + elif line == "" or index + 1 == len(raw_data): + if len(_collection_data) == 0: + continue + + collections.add( + Collection(_collection_data[0], frozenset(_collection_data[1:])) + ) + _collection_data.clear() + else: + _collection_data.append(line) + + return frozenset(collections) + + +def get_ytdlp_options(output_dir: str) -> dict: + return { + "format": "bestaudio/best", + "match_filter": _match_filter, + "postprocessors": [ + { + "key": "FFmpegExtractAudio", + #"preferredcodec": "m4a", + }, + { + "key": "FFmpegMetadata", + "add_metadata": True, + }, + { + "key": "EmbedThumbnail", + "already_have_thumbnail": False, + }, + ], + "outtmpl": f"{output_dir}/%(title)s.%(ext)s", + "restrictfilenames": True, + "ignoreerrors": True, + } + + +def download_collection(collection: Collection, parent_dir: str) -> None: + output_dir = os.path.join(parent_dir, collection.title) + + if os.path.isdir(output_dir): + return + + os.makedirs(output_dir, exist_ok=True) + + with yt_dlp.YoutubeDL(get_ytdlp_options(output_dir)) as downloader: + downloader.download(collection.links) + + +def main() -> int: + # input handling + if len(sys.argv) != 2: + return 1 + + with open(sys.argv[1], "r") as file: + filedata = file.read().splitlines() + + for collection in parse_raw_to_collections(filedata): + download_collection(collection, os.getcwd()) + + return 0 + + +if __name__ == "__main__": + exit(main()) @@ -1,6 +1,6 @@ #!/bin/sh -NMUTT_CONFIGURATION_FILE="${HOME}/.config/neomutt/personal" +NMUTT_CONFIGURATION_FILE="${HOME}/.config/neomutt/credentials-personal" get_param() { grep "${2}" "${1}" | @@ -15,5 +15,7 @@ export MAIL_SERVER=$(get_param "${NMUTT_CONFIGURATION_FILE}" "my_server") export MAIL_USERNAME=$(get_param "${NMUTT_CONFIGURATION_FILE}" "my_user") export MAIL_PASSWORD=$(get-pass "mailbox") -#notmuch new -exec neomutt ${@} +notmuch new >/dev/null 2>&1 & +neomutt ${@} + +notmuch new >/dev/null 2>&1 & diff --git a/.bin/pipx-sync b/.bin/pipx-sync deleted file mode 100755 index 181768e..0000000 --- a/.bin/pipx-sync +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -set -x -e - -packages="pywal - ipython" - -pipx upgrade-all - -for package in ${packages}; do - pipx install "${package}" || true -done diff --git a/.bin/poetry-clean-init b/.bin/poetry-clean-init new file mode 100755 index 0000000..ad7da81 --- /dev/null +++ b/.bin/poetry-clean-init @@ -0,0 +1,12 @@ +#!/bin/sh + +set -xe + + +poetry env info -p +test -x "${1}" + +rm -r $(poetry env info -p) poetry.lock +poetry env use "${1}" +poetry update --dry-run +poetry install @@ -109,11 +109,11 @@ def main(): QB_PROFILE_TAG = QB_PROFILE[0].lower() # Ensure directory existence - for dir in [QB_PROFILES_DIR, QB_PROFILE_DIR, QB_PROFILE_DIR_CONFIG]: + for dir in (QB_PROFILES_DIR, QB_PROFILE_DIR, QB_PROFILE_DIR_CONFIG): bypass_file_exists(os.mkdir, dir) # Ensure common files are shared with other profiles - for file in ['config.py', 'bookmarks', 'greasemonkey']: + for file in ('config.py', 'bookmarks', 'greasemonkey', 'userscripts'): bypass_file_exists(os.symlink, f'{QB_DIR}/{file}', f'{QB_PROFILE_DIR_CONFIG}/{file}') diff --git a/.bin/se-plan b/.bin/se-plan new file mode 100755 index 0000000..f16a2f7 --- /dev/null +++ b/.bin/se-plan @@ -0,0 +1,6 @@ +#!/bin/sh + +T=$(mktemp) +curl -so $T https://plan.cat/~rgoncalves +$EDITOR $T +curl -su "rgoncalves:$(get-pass plan.cat)" -F "plan=<$T" https://plan.cat/stdin diff --git a/.bin/start-org b/.bin/start-org deleted file mode 100755 index c32b99e..0000000 --- a/.bin/start-org +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh - -set -xe - -session_name="org" -windows="wchat:weechat - nmutt:neomutt - calcurse:calcurse" - -if [ "${1}" = "-f" ]; then - tmux kill-session -t "${session_name}" -fi - -tmux new-session -s "${session_name}" -d - -for window in ${windows}; do - window_cmd=$(echo "${window}" | cut -d ":" -f 1) - window_name=$(echo "${window}" | cut -d ":" -f 2) - - tmux new-window -n "${window_name}" - tmux send-keys -t "${session_name}:${window_name}" \ - "${window_cmd} " -done - -tmux a -t "${session_name}" diff --git a/.bin/synchronize-pub-dots b/.bin/synchronize-pub-dots index ae018b2..b1f2e7b 100755 --- a/.bin/synchronize-pub-dots +++ b/.bin/synchronize-pub-dots @@ -3,6 +3,7 @@ set -e command -v yadm git +git rev-parse --is-inside-work-tree allowed_patterns="-e ^.bin -e ^.config/alacritty/ diff --git a/.bin/x11-config b/.bin/x11-config index 5230c13..efd47d7 100755 --- a/.bin/x11-config +++ b/.bin/x11-config @@ -11,7 +11,8 @@ synclient_options="TapButton1=1 \ # synaptic if command -v syndaemon; then - pkill syndaemon && syndaemon -RKd -i 0.2 + pkill syndaemon && true + syndaemon -RKd -i 0.1 synclient ${synclient_options} fi diff --git a/.bin/x11-screen b/.bin/x11-screen index ccccda7..ea9e08d 100755 --- a/.bin/x11-screen +++ b/.bin/x11-screen @@ -22,6 +22,12 @@ fi if [ "${hostname}" = "ws-xps01" ]; then xrandr --output eDP1 --mode 3200x1800 - echo a __hidpi fi + +if [ "${hostname}" = "work-01" ]; then + xrandr --output eDP1 --mode 1920x1080 + xrandr --output DP3 --off + xrandr --addmode DP3 1920x1080 + xrandr --output DP3 --mode 1920x1080 --same-as eDP1 +fi diff --git a/.bin/yubikey-reset b/.bin/yubikey-reset deleted file mode 100755 index 4824bc8..0000000 --- a/.bin/yubikey-reset +++ /dev/null @@ -1,20 +0,0 @@ -echo "DESTRUCTIVE !!!" - -sleep 60 - -gpg-connect-agent <<EOF -/hex -scd serialno -scd apdu 00 20 00 81 08 40 40 40 40 40 40 40 40 -scd apdu 00 20 00 81 08 40 40 40 40 40 40 40 40 -scd apdu 00 20 00 81 08 40 40 40 40 40 40 40 40 -scd apdu 00 20 00 81 08 40 40 40 40 40 40 40 40 -scd apdu 00 20 00 83 08 40 40 40 40 40 40 40 40 -scd apdu 00 20 00 83 08 40 40 40 40 40 40 40 40 -scd apdu 00 20 00 83 08 40 40 40 40 40 40 40 40 -scd apdu 00 20 00 83 08 40 40 40 40 40 40 40 40 -scd apdu 00 e6 00 00 -scd apdu 00 44 00 00 -/echo Yubikey has been successfully reset. -/echo The factory default PINs are 123456 (user) and 12345678 (admin). -EOF diff --git a/.config/calcurse/keys b/.config/calcurse/keys index 0f5ee8d..3304bbb 100755 --- a/.config/calcurse/keys +++ b/.config/calcurse/keys @@ -16,6 +16,7 @@ generic-reload R generic-copy c generic-paste p ^V generic-change-view TAB +generic-prev-view KEY_BTAB generic-import i I generic-export x X generic-goto g G diff --git a/.config/dot/term-color-light b/.config/dot/term-color-light index 96ad2e1..b6f8678 100755 --- a/.config/dot/term-color-light +++ b/.config/dot/term-color-light @@ -1 +1 @@ -]4;0;#eeeeee\]4;1;#ff0000\]4;2;#00dd00\]4;3;#dddd00\]4;4;#0000ff\]4;5;#dd00dd\]4;6;#00dddd\]4;7;#808080\]4;8;#c0c0c0\]4;9;#af0000\]4;10;#00af00\]4;11;#afd700\]4;12;#005fff\]4;13;#af00af\]4;14;#00d7af\]4;15;#000000\]10;#000000\]11;#eeeeee\]12;#eeeeee\]13;#000000\]17;#000000\]19;#eeeeee\]4;232;#eeeeee\]4;256;#000000\]708;#eeeeee\ +]4;0;#eeeeee\]4;1;#ff0000\]4;2;#00dd00\]4;3;#dddd00\]4;4;#0000ff\]4;5;#dd00dd\]4;6;#00dddd\]4;7;#808080\]4;8;#c0c0c0\]4;9;#af0000\]4;10;#00af00\]4;11;#ccaa00\]4;12;#005fff\]4;13;#af00af\]4;14;#00d7bc\]4;15;#000000\]10;#000000\]11;#eeeeee\]12;#eeeeee\]13;#000000\]17;#000000\]19;#eeeeee\]4;232;#eeeeee\]4;256;#000000\]708;#eeeeee\ diff --git a/.config/gopass/config.yml b/.config/gopass/config.yml index dea9ee4..7046a1b 100755 --- a/.config/gopass/config.yml +++ b/.config/gopass/config.yml @@ -5,6 +5,6 @@ exportkeys: true nopager: false notifications: false parsing: true -path: /home/qwd/.password-store +path: /home/qwd/.local/share/gopass safecontent: false mounts: {} diff --git a/.config/i3/config b/.config/i3/config index dbdb03f..362d057 100755 --- a/.config/i3/config +++ b/.config/i3/config @@ -18,7 +18,7 @@ set $ws5 "5: five " set $wss1 "11: one " set $wss2 "12: two " set $wss3 "13: three " -set $wss4 "14: four " +set $wss4 "14: four " set $wss5 "15: five " # keybinds diff --git a/.config/neomutt/neomuttrc b/.config/neomutt/neomuttrc index d1a8634..386b7fd 100755 --- a/.config/neomutt/neomuttrc +++ b/.config/neomutt/neomuttrc @@ -1,38 +1,13 @@ -#set folder = "~/.mail" -set my_password = "" -set my_server = "" -set my_user = "" -source "~/.config/neomutt/personal" +source "~/.config/neomutt/mail-personal" -# IMAP -set imap_user = "$my_user@$my_server" -set imap_pass = "$my_password" -set hostname = "imap.$my_server" -set folder = "imaps://imap.$my_server:993" -#set folder = "~/.mail/personal" - -# SMTP -set smtp_pass = "$my_password" -set smtp_url = "smtps://$my_user@$my_server:$my_password@smtp.$my_server" - -# force tls +#force tls set ssl_verify_host = yes set ssl_force_tls = yes # notmuch -#set virtual_spoolfile = yes -#set nm_query_type = threads -#set nm_default_url = "notmuch:///home/qwd/.mail" - -# mailboxes -mailboxes `python3 ~/.bin/get-mailbox-imap \ -imap.$MAIL_SERVER \ -$MAIL_USERNAME@$MAIL_SERVER \ -$MAIL_PASSWORD` - -#mailboxes `get-mailbox-local ~/.mail INBOX` -#mailboxes `get-mailbox-local ~/.mail` -#virtual-mailboxes "Threads" "notmuch://?query=tag:f-sent" +set virtual_spoolfile = yes +set nm_query_type = threads +set nm_default_url = "notmuch:///home/qwd/.mail" set spoolfile = "+INBOX" set mbox = "+INBOX" @@ -45,7 +20,7 @@ set imap_delim_chars = "aa" # dl set mail_check = 90 set sleep_time = 0 -set timeout = 15 +set timeout = 300 set beep = no set edit_headers = yes set fast_reply = yes @@ -62,8 +37,8 @@ set sig_dashes = no set sort_re = yes set charset = "utf-8" -set date_format = "%d.%m.%Y-%H:%M" -set index_format = "%4C %Z %{$date_format} %-15.15L (%?l?%4l&%4c?) %s" +set date_format = "%d %b %Y, %H:%M" +set index_format = "%4C %Z %{$date_format} %-25.25L (%?l?%4l&%4c?) %s" set quote_regex = "^( {0,4}[>|:#%]| {0,4}[a-z0-9]+[>|]+)+" set reply_regex = "^(([Rr][Ee]?(\[[0-9]+\])?: *)?(\[[^]]+\] *)?)*" set send_charset = "utf-8:iso-8859-1:us-ascii" @@ -72,10 +47,15 @@ set header_cache = "~/.cache/neomutt" set message_cachedir = "$header_cache" set mail_check_stats +# forgotten attachment +set abort_noattach_regex = "\\<(attach|attached|attachments?|attaché|attachés|attache|attachons|joint|jointe|joints|jointes|joins|joignons)\\>" +set abort_noattach = ask-yes + # headers ignore * unignore from date subject to cc -unignore organization organisation x-mailer: x-newsreader: x-mailing-list: +unignore organization organisation +unignore x-mailer: x-newsreader: x-mailing-list: unignore posted-to: list-id: # threads @@ -97,13 +77,15 @@ set sidebar_indent_string = "> " # keybinds bind editor <space> noop bind editor "> " quote-char -bind pager c imap-fetch-mail +bind editor ^T complete-query +bind editor <Tab> complete bind index G last-entry bind index \CR imap-fetch-mail bind index g noop bind index gg first-entry bind index - collapse-thread bind index _ collapse-all +bind pager c imap-fetch-mail bind pager,attach h exit bind attach <return> view-mailcap bind attach l view-mailcap @@ -120,11 +102,20 @@ bind index \CL limit bind pager,browser gg top-page bind pager,browser G bottom-page bind index,pager R group-reply +bind index,pager g group-chat-reply bind index,pager K sidebar-prev bind index,pager J sidebar-next bind index,pager O sidebar-open bind index,pager,browser d half-down bind index,pager,browser u half-up +bind index,pager @ compose-to-sender + +# macro +macro index S "<shell-escape>notmuch new<enter>" "sync email" # colors color hdrdefault color07 default + +# hooks +account-hook . 'echo `notmuch new >/dev/null 2>&1`' +timeout-hook 'echo "`notmuch new >/dev/null 2>&1`"' diff --git a/.config/neomutt/neomuttrc.back b/.config/neomutt/neomuttrc.back deleted file mode 100755 index 1f85eb8..0000000 --- a/.config/neomutt/neomuttrc.back +++ /dev/null @@ -1,132 +0,0 @@ - -# rgoncalves.se - -# personal informations -set my_password = "" -set my_server = "" -set my_user = "" -source "~/.config/neomutt/personal" - -# IMAP -set imap_user = "$my_user@$my_server" -set imap_pass = "$my_password" -set hostname = "imap.$my_server" -set folder = "imaps://imap.$my_server:993" -#set folder = "~/.mail/personal" - -# SMTP -set smtp_pass = "$my_password" -set smtp_url = "smtps://$my_user@$my_server:$my_password@smtp.$my_server" - -# force tls -set ssl_verify_host = yes -set ssl_force_tls = yes - -# mailboxes -set spoolfile = "+INBOX" -set mbox = "+INBOX" -set postponed = "+Drafts" -set record = "+Sent" -set trash = "+Trash" -set mail_check_stats = yes -set imap_delim_chars = "aa" - -mailboxes `python3 ~/.bin/get-mailbox-imap \ -imap.$MAIL_SERVER \ -$MAIL_USERNAME@$MAIL_SERVER \ -$MAIL_PASSWORD` - -# dl -set mail_check = 90 -set sleep_time = 0 -set timeout = 15 -set beep = no -set edit_headers = yes -set fast_reply = yes -set forward_quote = yes -set include = yes -set pipe_decode = yes -set postpone = no -set recall = no -set reflow_space_quotes = yes -set reply_to = yes -set reverse_name = yes -set reverse_name = yes -set sig_dashes = no -set sort_re = yes - -set charset = "utf-8" -set date_format = "%d.%m.%Y-%H:%M" -set index_format = "%4C %Z %{$date_format} %-15.15L (%?l?%4l&%4c?) %s" -set quote_regex = "^( {0,4}[>|:#%]| {0,4}[a-z0-9]+[>|]+)+" -set reply_regex = "^(([Rr][Ee]?(\[[0-9]+\])?: *)?(\[[^]]+\] *)?)*" -set send_charset = "utf-8:iso-8859-1:us-ascii" - -set signature = "~/.signature" -set header_cache = "~/.cache/neomutt" -set message_cachedir = "$header_cache" - -# auto_view text/html -# alternative_order text/plain text/html - -# headers -ignore * -unignore from date subject to cc -unignore organization organisation x-mailer: x-newsreader: x-mailing-list: -unignore posted-to: list-id: - -# threads -set sort ="threads" -set sort_aux = "reverse-last-date-received" -set strict_threads ="yes" -set collapse_unread = no - -# sidebar -set sidebar_visible = yes -set sidebar_short_path = yes -set sidebar_sort_method = "unsorted" -set sidebar_delim_chars = "/" -set sidebar_format = "%D %?F?[%F]?%* %4N|%4S" -set sidebar_folder_indent = yes -set sidebar_indent_string = "> " - -# keybinds -bind editor <space> noop -bind editor "> " quote-char -bind pager c imap-fetch-mail -bind index G last-entry -bind index \CR imap-fetch-mail -bind index g noop -bind index gg first-entry -bind index - collapse-thread -bind index _ collapse-all -bind pager,attach h exit -bind attach <return> view-mailcap -bind attach l view-mailcap -bind pager j next-line -bind pager k previous-line -bind pager l view-attachments -bind index D delete-message -bind index U undelete-message -bind index h noop -bind index l display-message -bind browser h goto-parent -bind browser l select-entry -bind index \CL limit -bind pager,browser gg top-page -bind pager,browser G bottom-page -bind index,pager R group-reply -bind index,pager K sidebar-prev -bind index,pager J sidebar-next -bind index,pager O sidebar-open -bind index,pager,browser d half-down -bind index,pager,browser u half-up - -# colors -color hdrdefault color07 default -#color quoted color08 default - -# notmuch -#set virtual_spoolfile = yes -#set nm_query_type = threads -#virtual-mailboxes "INBOX" "notmuch://?query=tag:inbox" diff --git a/.config/newsboat/config b/.config/newsboat/config index c9d9fcd..2766562 100755 --- a/.config/newsboat/config +++ b/.config/newsboat/config @@ -28,8 +28,14 @@ color info color0 color15 color article color15 color0 # multimedia +player "mpv" browser "qutebrowser %u" -macro y set browser "mpv %u" ; open-in-browser ; set browser "qutebrowser %u" +macro m set browser "mpv %u" ; open-in-browser ; set browser "qutebrowser %u" # format feedlist-format "%4i %n %8u %24T | %t" +datetime-format "%b %d" + +# killfile +ignore-mode "display" +ignore-article "*" "( feedlink =~ \"yewtu.be\" and ( title =~ \"#shorts\" or content =~ \"#shorts\" ) )" diff --git a/.config/nvim/after/ftplugin/dart.lua b/.config/nvim/after/ftplugin/dart.lua new file mode 100755 index 0000000..777faa6 --- /dev/null +++ b/.config/nvim/after/ftplugin/dart.lua @@ -0,0 +1,4 @@ +o.colorcolumn = '80' +bo.expandtab = true +bo.shiftwidth = 2 +bo.tabstop = 2 diff --git a/.config/nvim/after/ftplugin/markdown.lua b/.config/nvim/after/ftplugin/markdown.lua index bfcca96..3c7e009 100755 --- a/.config/nvim/after/ftplugin/markdown.lua +++ b/.config/nvim/after/ftplugin/markdown.lua @@ -6,3 +6,33 @@ bo.shiftwidth = 2 bo.formatoptions = 'qc' bo.textwidth = 80 o.colorcolumn = '80' + +if require("zk.util").notebook_root(vim.fn.expand('%:p')) ~= nil then + local function map(...) vim.api.nvim_buf_set_keymap(0, ...) end + local opts = { noremap=true, silent=false } + + map("n", "<CR>", "<Cmd>lua vim.lsp.buf.definition()<CR>", opts) + map("n", "K", "<Cmd>lua vim.lsp.buf.hover()<CR>", opts) + + vim.api.nvim_exec([[ + syn region markdownWikiLink matchgroup=markdownLinkDelimiter + \ start="\[\[" end="\]\]" contains=markdownUrl keepend oneline concealends + syn region markdownLink matchgroup=markdownLinkDelimiter + \ start="\[" end="\]" contains=markdownUrl keepend oneline concealends + syn region markdownLink matchgroup=markdownLinkDelimiter + \ start="(" end=")" contains=markdownUrl keepend contained conceal + syn region markdownLinkText matchgroup=markdownLinkTextDelimiter + \ start="!\=\[\%(\%(\_[^][]\|\[\_[^][]*\]\)*]\%( \=[[(]\)\)\@=" + \ end="\]\%( \=[[(]\)\@=" nextgroup=markdownLink,markdownId + \ skipwhite contains=@markdownInline,markdownLineStart concealends + + " unlet b:current_syntax + syntax include @Yaml syntax/yaml.vim + syntax include @Toml syntax/toml.vim + syntax region yamlFrontmatter start=/\%^---$/ end=/^---$/ + \ keepend contains=@Yaml + syntax region tomlFrontmatter start=/\%^+++$/ end=/^+++$/ + \ keepend contains=@Toml + + ]], true) +end diff --git a/.config/nvim/after/ftplugin/python.lua b/.config/nvim/after/ftplugin/python.lua index b6c54ff..64eb9f0 100755 --- a/.config/nvim/after/ftplugin/python.lua +++ b/.config/nvim/after/ftplugin/python.lua @@ -1 +1,5 @@ o.colorcolumn = '80' + +require"nvim-treesitter.highlight".set_custom_captures { + ["docstring"] = "Comment", +} diff --git a/.config/nvim/after/ftplugin/yaml.lua b/.config/nvim/after/ftplugin/yaml.lua index b89af72..4f9234b 100755 --- a/.config/nvim/after/ftplugin/yaml.lua +++ b/.config/nvim/after/ftplugin/yaml.lua @@ -4,3 +4,9 @@ o.colorcolumn = '80' bo.tabstop = 2 bo.softtabstop = 2 bo.shiftwidth = 2 + + +vim.api.nvim_exec([[ + set is hlsearch ai ic scs + nnoremap <esc><esc> :nohls +]], true) diff --git a/.config/nvim/after/queries/python/highlights.scm b/.config/nvim/after/queries/python/highlights.scm new file mode 100755 index 0000000..4b664d4 --- /dev/null +++ b/.config/nvim/after/queries/python/highlights.scm @@ -0,0 +1,3 @@ +(block (expression_statement (string)) @docstring) + +(type) @type diff --git a/.config/nvim/colors/colorscheme.vim b/.config/nvim/colors/colorscheme.vim index 48df51c..e401231 100755 --- a/.config/nvim/colors/colorscheme.vim +++ b/.config/nvim/colors/colorscheme.vim @@ -209,3 +209,12 @@ sign define semshiError text=E> texthl=semshiErrorSign hi VirtColumn cterm=NONE ctermbg=0 ctermfg=2 hi IndentBlankLineChar cterm=NONE ctermbg=0 ctermfg=15 + + + + +" Highlight docstrings as comments, not string. +syn region pythonDocstring start=+^\s*[uU]\?[rR]\?"""+ end=+"""+ keepend excludenl contains=pythonEscape,@Spell,pythonDoctest,pythonDocTest2,pythonSpaceError +syn region pythonDocstring start=+^\s*[uU]\?[rR]\?'''+ end=+'''+ keepend excludenl contains=pythonEscape,@Spell,pythonDoctest,pythonDocTest2,pythonSpaceError + +hi def link pythonDocstring pythonComment diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua index eda0497..5abff38 100755 --- a/.config/nvim/init.lua +++ b/.config/nvim/init.lua @@ -5,6 +5,7 @@ cmd = vim.cmd require('settings') require('plugins') +require('diagnostic') require('lsp') require('statusline') require('keymaps') diff --git a/.config/nvim/init.old.vim b/.config/nvim/init.old.vim deleted file mode 100755 index 35630e8..0000000 --- a/.config/nvim/init.old.vim +++ /dev/null @@ -1,218 +0,0 @@ -" nvim configuration ~~ rgoncalves.se - -" vim-plug autoinstall -if empty(glob('~/.local/share/nvim/site/autoload/plug.vim')) - silent !curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs - \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim - autocmd VimEnter * PlugInstall --sync | source $MYVIMRC -endif - -" system agnostic detection -let uname = system('uname')[:-2] - -" global configuration -set encoding=utf-8 -set laststatus=2 -set scrolloff=3 -set viminfo= -set mouse=a -set title -set number -set noswapfile -set shell=/bin/sh -set updatetime=2500 -set synmaxcol=300 -set lazyredraw -set ttyfast -set wildoptions= -set autochdir -let sh_minlines=100 -let sh_maxlines=600 - -" filetypes and colorschemes -syntax on -filetype on -filetype plugin on -filetype indent on -colorscheme base - -" keybindings -noremap =j :%!python -m json.tool<CR> -noremap =k :%s/-\|-/-+-/g<CR> -noremap =l :%s/-+-/-\|-/g<CR> -noremap <F2> :NERDTreeToggle <CR> -noremap <F3> :GitGutterCustomToggle <CR> -inoremap <C-h> <Left> -inoremap <C-j> <Down> -inoremap <C-k> <Up> -inoremap <C-l> <Right> -" keybindings - omnifunc -inoremap <expr> <CR> pumvisible() ? "\<C-Y>" : "\<CR>" -inoremap <expr> <C-l> pumvisible() ? "\<CR>" : "\<CR>" -inoremap <expr> <C-n> pumvisible() ? '<C-n>' : - \ '<C-n><C-r>=pumvisible() ? "\<lt>Down>" : ""<CR>' -inoremap <expr> <M-,> pumvisible() ? '<C-n>' : - \ '<C-x><C-o><C-n><C-p><C-r>=pumvisible() ? "\<lt>Down>" : ""<CR>' -inoremap <expr> <C-Space> (pumvisible() ? (col('.') > 1 ? '<Esc>i<Right>' : '<Esc>i') : '') . - \ '<C-x><C-o><C-r>=pumvisible() ? "\<lt>C-n>\<lt>C-p>\<lt>Down>" : ""<CR>' -inoremap <expr> <S-Space> (pumvisible() ? (col('.') > 1 ? '<Esc>i<Right>' : '<Esc>i') : '') . - \ '<C-x><C-u><C-r>=pumvisible() ? "\<lt>C-n>\<lt>C-p>\<lt>Down>" : ""<CR>' - -let g:polyglot_disabled = ['autoindent', 'sensible'] - -" PLUGINS list -if !empty(glob('~/.local/share/nvim/site/autoload/plug.vim')) - call plug#begin('~/.nvim/plugged/') - " core - Plug 'scrooloose/nerdtree' - " completion - Plug 'w0rp/ale' - " Plug 'davidhalter/jedi-vim' - Plug 'maralla/completor.vim' - " fzf - Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } - Plug 'junegunn/fzf.vim' - " indent - Plug 'nathanaelkane/vim-indent-guides' - Plug 'editorconfig/editorconfig-vim' - Plug 'pangloss/vim-javascript' - Plug 'pearofducks/ansible-vim' - Plug 'sheerun/vim-polyglot' - Plug 'dbeniamine/vim-mail' - Plug 'ap/vim-css-color' - " notes - Plug 'dhruvasagar/vim-table-mode' - Plug 'jceb/vim-orgmode' - " headers and source - Plug 'vim-scripts/a.vim' - Plug 'majutsushi/tagbar' - " git - Plug 'airblade/vim-gitgutter' - Plug 'tpope/vim-fugitive' - Plug 'jreybert/vimagit' - Plug 'junegunn/gv.vim' - " python - Plug 'petobens/poet-v' - call plug#end() -endif - -" indentation -set smarttab -set autoindent -set nocompatible -set tabstop=8 -set shiftwidth=8 -set softtabstop=8 -set noexpandtab -set list lcs=tab:\|\ ". -set fillchars+=vert:\ ". -set ve+=onemore -set list -set shortmess=atToOF - -" plugins settings -let g:ale_sign_error = '' -let g:ale_sign_warning = '' -let g:ale_c_clang_options='-std=gnu99 -Wall' -let g:ale_c_gcc_options='-std=gnu99 -Wall' -let g:ale_sh_shellcheck_options = '-e SC1090 SC2181 -e SC2155' -let g:ale_python_flake8_options = '--ignore=E501' -let g:ale_linters = { 'python': ['bandit', 'flake8'], } - -let g:gitgutter_max_signs = 500 -let g:gitgutter_sign_added = '+' -let g:gitgutter_sign_modified = '~' -let g:gitgutter_sign_removed = '-' -let g:gitgutter_sign_modified_removed = '-' - -let g:indent_guides_enable_on_vim_startup = 0 -let g:indent_guides_auto_colors = 0 -let g:indent_cuides_exclude_filetypes = [ - \'help', - \'terminal' - \] -let g:poetv_executables = ['poetry'] -let g:poetv_auto_activate = 1 - -let g:python_host_prog = system('which python2')[:-2] -let g:python3_host_prog = system('which python3')[:-2] -let g:jedi#auto_initialization = 1 -let g:jedi#popup_on_dot = 0 - -let g:NERDTreeAutoDeleteBuffer = 1 -let g:NERDTreeMinimalUI = 1 -let g:NERDTreeDirArrowExpandable = '+' -let g:NERDTreeDirArrowCollapsible = '-' - -let g:EditorConfig_exclude_patterns = ['fugitive://.*', 'scp://.*'] -let g:fzf_layout = { 'down': '40%'} -let g:magit_default_fold_level = 2 -let g:sql_type_default = 'pgsql' -let g:table_mode_always_active = 0 - -if uname == 'OpenBSD' - let g:ncm2_pyclang#library_path = '/usr/local/lib/libclang.so.8.1' - let g:completor_python_binary = '/usr/bin/python3' -endif - -" netrw -let g:netrw_banner = 0 -let g:netrw_browse_split = 4 -let g:netrw_liststyle = 3 -let g:netrw_altv = 1 -let g:netrw_winsize = 25 -let g:netrw_list_hide = '\(^\|\s\s\)\zs\.\S\+' - -autocmd BufNewFile,BufReadPost *.{yaml,yml} set filetype=yaml -autocmd BufNewFile,BufReadPost */*ssh/config.d/* set syntax=sshconfig -autocmd BufNewFile,BufReadPost */*ansible*/**/*.yml set filetype=yaml.ansible -autocmd BufNewFile,BufRead ~/.config/i3/config set filetype=i3config -autocmd BufNewFile,BufRead ~/.config/sway/config set filetype=i3config -autocmd BufNewFile,BufRead ~/.config/polybar/config set filetype=dosini -autocmd FileType conf let b:EditorConfig_disable = 1 -autocmd FileType gitcommit let b:EditorConfig_disable = 1 -autocmd FileType java setlocal omnifunc=javacomplete#Complete -autocmd FileType yaml let b:EditorConfig_disable = 1 - -" statusline -set statusline= -set statusline+=\ %f -set statusline+=%m -set statusline+=%= -set statusline+=\ %y -set statusline+=\ %{&fileencoding?&fileencoding:&encoding} -set statusline+=\ [%{&fileformat}\] -set statusline+=\ %p%% -set statusline+=\ %l:%c -set statusline+=\ - -" completion -set omnifunc=syntaxcomplete#Complete -set completeopt=longest,menuone - -" commands -command! PlugSync PlugClean | - \ PlugInstall | - \ UpdateRemotePlugins -command! GitGutterCustomToggle GitGutterLineHighlightsToggle | - \ GitGutterLineNrHighlightsToggle -command! Gblame Git blame - -" cnoremap <silent> <cr> <cr>:call <SID>CommandCallback()<cr> - -function! s:SyncColorcolumnColorscheme() - let l:length = '/\%' . string(&colorcolumn + 1) . 'v.\+/' - execute 'match' 'OverLength' l:length -endfunction - -function! s:CommandCallback() - let l:last_command = @: - - if l:last_command =~ 'set colorcolumn' - call s:SyncColorcolumnColorscheme() - endif -endfunction - -function! s:Init() - call s:SyncColorcolumnColorscheme() -endfunction diff --git a/.config/nvim/lua/diagnostic.lua b/.config/nvim/lua/diagnostic.lua new file mode 100755 index 0000000..0eb4e91 --- /dev/null +++ b/.config/nvim/lua/diagnostic.lua @@ -0,0 +1,45 @@ +local original_diagnostic_set = vim.diagnostic.set +local disabled_diagnostics_patterns = { + -- { 'mypy', 'Library stubs not installed' }, + -- { 'mypy', 'Cannot find implementation or library stub' }, + -- { 'mypy', 'Skipping analyzing' } +} + +local function is_diagnostic_disabled(diagnostic, disabled_diagnostic_patterns) + return string.find(diagnostic.source, disabled_diagnostic_patterns[1]) and + string.find(diagnostic.message, disabled_diagnostic_patterns[2]) +end + +local function is_diagnostic_enabled(diagnostic, disabled_diagnostic_patterns) + local found_diagnostic = true + for _, disabled_diagnostic_patterns in pairs(disabled_diagnostics_patterns) do + if is_diagnostic_disabled(diagnostic, disabled_diagnostic_patterns) then + found_diagnostic = false + end + end + return found_diagnostic +end + +vim.diagnostic.set = function(namespace, bufnr, diagnostics, opts) + local filtered_diagnostics = {} + for _, diagnostic in pairs(diagnostics) do + if is_diagnostic_enabled(diagnostic, disabled_diagnostics_patterns) then + table.insert(filtered_diagnostics, diagnostic) + end + end + original_diagnostic_set(namespace, bufnr, filtered_diagnostics, opts) +end + +vim.diagnostic.config{ + underline = false, + signs = true, + severity_sort = true, + update_in_insert = false, + float = { + source = 'always', + }, + virtual_text = { + prefix = '▒ ', + spacing = 8, + }, +} diff --git a/.config/nvim/lua/keymaps.lua b/.config/nvim/lua/keymaps.lua index 070ddc9..5243d8b 100755 --- a/.config/nvim/lua/keymaps.lua +++ b/.config/nvim/lua/keymaps.lua @@ -1,24 +1,9 @@ ---[[ --- Keymaps ---]] - local map = vim.api.nvim_set_keymap local cmd = vim.cmd - -options = {noremap=true} +local options = { noremap=true } map('i', '<C-h>', '<Left>', options) map('i', '<C-j>', '<Down>', options) map('i', '<C-k>', '<Up>', options) map('i', '<C-l>', '<Right>', options) -map('i', '<C-l>', '<Right>', options) - -map('', '<C-n>', ':NvimTreeToggle<CR>', options) - ---[[ -map('n', '<silent><expr>', '<C-Space>', 'compe#complete()', options) -map('n', '<silent><expr>', '<CR>', 'compe#confirm(\'<CR>\'', options) -map('n', '<silent><expr>', '<C-e>', 'compe#close(\'<C-e>\'', options) -map('n', '<silent><expr>', '<C-f>', 'compe#scroll({\'delta\': +4}', options) -map('n', '<silent><expr>', '<C-d>', 'compe#scroll({\'delta\': -4}', options) ---]] +map('i', '<C-L>', '<leader><space> :noh', options) diff --git a/.config/nvim/lua/lsp.lua b/.config/nvim/lua/lsp.lua index 95d9409..4e0624c 100755 --- a/.config/nvim/lua/lsp.lua +++ b/.config/nvim/lua/lsp.lua @@ -1,9 +1,6 @@ ---[[ --- lsp ---]] - local lsp = vim.lsp +--[[ lsp.handlers["textDocument/publishDiagnostics"] = lsp.with( lsp.diagnostic.on_publish_diagnostics, { @@ -15,3 +12,4 @@ lsp.handlers["textDocument/publishDiagnostics"] = lsp.with( signs = true, } ) +--]] diff --git a/.config/nvim/lua/plugins.lua b/.config/nvim/lua/plugins.lua deleted file mode 100755 index bb7a7b4..0000000 --- a/.config/nvim/lua/plugins.lua +++ /dev/null @@ -1,164 +0,0 @@ --- bootstrap paq -local install_path = vim.fn.stdpath('data')..'/site/pack/paqs/start/paq-nvim' -if vim.fn.empty(vim.fn.glob(install_path)) > 0 then - vim.fn.system({ - 'git', 'clone', '--depth=1', - 'https://github.com/savq/paq-nvim.git', - install_path - }) - vim.cmd 'packadd paq-nvim' -end - --- enable paq -vim.cmd 'packadd paq-nvim' - --- plugins -require('paq') { - {'savq/paq-nvim'}; - - -- treesiter / lsp - {'nvim-treesitter/playground'}; - {'nvim-treesitter/nvim-treesitter-textobjects'}; - { - 'nvim-treesitter/nvim-treesitter', - run=vim.api.nvim_command(':silent! TSUpdate') - }; - { - 'neovim/nvim-lspconfig', - run='python3 -m pipx install python-lsp-server[all]' - }; - - -- utils - {'folke/trouble.nvim'}; - {'hrsh7th/nvim-compe'}; - - {'hrsh7th/cmp-nvim-lsp'}; - {'hrsh7th/cmp-cmdline'}; - {'hrsh7th/cmp-buffer'}; - {'hrsh7th/cmp-path'}; - {'hrsh7th/cmp-calc'}; - {'hrsh7th/nvim-cmp'}; - - -- indent - {'lewis6991/gitsigns.nvim'}; - {'glepnir/indent-guides.nvim'}; - {'darazaki/indent-o-matic'}; - - -- dep - {'nvim-lua/plenary.nvim'}; -} - --- treesitter - -local parser_configs = require('nvim-treesitter.parsers').get_parser_configs() - -require('nvim-treesitter.configs').setup { - ensure_installed = 'maintained', - ignore_install = { - 'verilog', - 'kotlin' - }, - highlight = { enable = true }, - incremental_selection = { enable = true }, - textobjects = { enable = true } -} - --- completion - -local cmp = require('cmp') - -cmp.setup({ - mapping = { - ['<C-l>'] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }), - ['<C-j>'] = cmp.mapping(cmp.mapping.select_next_item(), { 'i', 'c' }), - ['<C-k>'] = cmp.mapping(cmp.mapping.select_prev_item(), { 'i', 'c' }), - ['<C-Space>'] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }), - }, - sources = cmp.config.sources({ - { name = 'nvim_lsp' }, - { name = 'cmdline' }, - { name = 'path' }, - { name = 'calc' } - }, - { - { name = 'buffer' } - }) -}) - -cmp.setup.cmdline('/', { - sources = { - { name = 'buffer' } - } -}) - --- lsp configuration - -local lsputil = require('lspconfig/util') -local python_venv = require('utils').get_python_venv() -require('lspconfig').pylsp.setup{ - cmd = {'pylsp', '-v'}, - cmd_env = { - VIRTUAL_ENV = python_venv, - PATH = lsputil.path.join(python_venv, 'bin') .. ':' .. vim.env.PATH - }, -} - -require('lspconfig').clangd.setup{} -require('lspconfig').elixirls.setup{ cmd = {'elixir-ls'} } -require('lspconfig').eslint.setup{} -require('lspconfig').terraformls.setup{} - --- org - -require('trouble').setup{} - --- syntactic sugar - -require('indent_guides').setup{ - indent_enable=true; - exclude_filetypes={ - 'calendar', - 'gitcommit', - 'help', - 'NvimTree', - }; -} - -require('indent-o-matic').setup { - max_lines = 0, - standard_widths = { 2, 4, 8 }, - - filetype_ = { - standard_widths = { 2, 4 }, - }, - - filetype_css = { - max_lines = 4096, - }, - - filetype_scss = { - max_lines = 4096, - }, - - filetype_javascript = { - max_lines = 4096, - }, - - filetype_json = { - max_lines = 4096, - }, - - filetype_typescript = { - max_lines = 4096, - }, -} - -require('gitsigns').setup{ - signs = { - add = {hl = 'GitSignsAdd', text = '▍', numhl='GitSignsAddNr', linehl='GitSignsAddLn'}, - change = {hl = 'GitSignsChange', text = '▍', numhl='GitSignsChangeNr', linehl='GitSignsChangeLn'}, - delete = {hl = 'GitSignsDelete', text = '▍', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn'}, - topdelete = {hl = 'GitSignsDelete', text = '▍', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn'}, - changedelete = {hl = 'GitSignsChange', text = '▍', numhl='GitSignsChangeNr', linehl='GitSignsChangeLn'}, - } -} diff --git a/.config/nvim/lua/plugins/aerial.lua b/.config/nvim/lua/plugins/aerial.lua new file mode 100755 index 0000000..7b915db --- /dev/null +++ b/.config/nvim/lua/plugins/aerial.lua @@ -0,0 +1,32 @@ +require("aerial").setup{ + highlight_on_jump = 800, + min_width = 10, + filter_kind = { + "Array", + "Boolean", + "Class", + "Constant", + "Constructor", + "Enum", + "EnumMember", + "Event", + "Field", + "File", + "Function", + "Interface", + "Key", + "Method", + "Module", + "Namespace", + "Null", + "Number", + "Object", + "Operator", + "Package", + "Property", + "String", + "Struct", + "TypeParameter", + "Variable" + }, +} diff --git a/.config/nvim/lua/plugins/bufresize.lua b/.config/nvim/lua/plugins/bufresize.lua new file mode 100755 index 0000000..c4212f8 --- /dev/null +++ b/.config/nvim/lua/plugins/bufresize.lua @@ -0,0 +1 @@ +require('bufresize').setup{} diff --git a/.config/nvim/lua/plugins/cmp.lua b/.config/nvim/lua/plugins/cmp.lua new file mode 100755 index 0000000..503440f --- /dev/null +++ b/.config/nvim/lua/plugins/cmp.lua @@ -0,0 +1,26 @@ +local cmp = require('cmp') + +cmp.setup({ + mapping = { + ['<C-j>'] = cmp.mapping(cmp.mapping.select_next_item(), { 'i', 'c' }), + ['<C-k>'] = cmp.mapping(cmp.mapping.select_prev_item(), { 'i', 'c' }), + ['<C-Space>'] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }), + -- ['<C-l>'] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }), + -- ['<CR>'] = cmp.mapping.confirm({ select = true }) + }, + sources = cmp.config.sources({ + { name = 'nvim_lsp' }, + { name = 'cmdline' }, + { name = 'path' }, + { name = 'calc' } + }, + { + { name = 'buffer' } + }) +}) + +cmp.setup.cmdline('/', { + sources = { + { name = 'buffer' } + } +}) diff --git a/.config/nvim/lua/plugins/dap.lua b/.config/nvim/lua/plugins/dap.lua new file mode 100755 index 0000000..b927ca6 --- /dev/null +++ b/.config/nvim/lua/plugins/dap.lua @@ -0,0 +1,21 @@ +local dap = require('dap') +local python_venv = require('utils').get_python_venv() + +dap.adapters.python = { + type = 'executable'; + command = 'python'; + args = { '-m', 'debugpy.adapter' }; +} + +dap.configurations.python = { + { + type = 'python'; + request = 'launch'; + name = "Launch file"; + + program = "${file}"; + pythonPath = python_venv .. '/bin/python'; + }, +} + +-- require("dapui").setup{} diff --git a/.config/nvim/lua/plugins/diffview.lua b/.config/nvim/lua/plugins/diffview.lua new file mode 100755 index 0000000..857b041 --- /dev/null +++ b/.config/nvim/lua/plugins/diffview.lua @@ -0,0 +1,4 @@ +require('diffview').setup{ + diff_binaries = false, + enhanced_diff_hl = false, +} diff --git a/.config/nvim/lua/plugins/gitsigns.lua b/.config/nvim/lua/plugins/gitsigns.lua new file mode 100755 index 0000000..7c4a92b --- /dev/null +++ b/.config/nvim/lua/plugins/gitsigns.lua @@ -0,0 +1,14 @@ +require('gitsigns').setup{ + signs = { + add = {hl = 'GitSignsAdd', text = '▍', + numhl='GitSignsAddNr', linehl='GitSignsAddLn'}, + change = {hl = 'GitSignsChange', text = '▍', + numhl='GitSignsChangeNr', linehl='GitSignsChangeLn'}, + delete = {hl = 'GitSignsDelete', text = '▍', + numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn'}, + topdelete = {hl = 'GitSignsDelete', text = '▍', + numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn'}, + changedelete = {hl = 'GitSignsChange', text = '▍', + numhl='GitSignsChangeNr', linehl='GitSignsChangeLn'}, + } +} diff --git a/.config/nvim/lua/plugins/indent-guides.lua b/.config/nvim/lua/plugins/indent-guides.lua new file mode 100755 index 0000000..c50f74d --- /dev/null +++ b/.config/nvim/lua/plugins/indent-guides.lua @@ -0,0 +1,11 @@ +require('indent_guides').setup{ + indent_enable=true; + exclude_filetypes={ + 'calendar', + 'gitcommit', + 'help', + 'lsp-installer', + 'man', + 'NvimTree', + }; +} diff --git a/.config/nvim/lua/plugins/indent-o-matic.lua b/.config/nvim/lua/plugins/indent-o-matic.lua new file mode 100755 index 0000000..4b2abb5 --- /dev/null +++ b/.config/nvim/lua/plugins/indent-o-matic.lua @@ -0,0 +1,14 @@ +require('indent-o-matic').setup { + max_lines = 0, + standard_widths = { 2, 4, 8 }, + + filetype_ = { standard_widths = { 2, 4 } }, + + filetype_css = { max_lines = 4096 }, + filetype_scss = { max_lines = 4096 }, + filetype_json = { max_lines = 4096 }, + filetype_javascript = { max_lines = 4096 }, + filetype_typescript = { max_lines = 4096 }, + filetype_xml = { max_lines = 4096 }, + filetype_django = { max_lines = 4096 }, +} diff --git a/.config/nvim/lua/plugins/init.lua b/.config/nvim/lua/plugins/init.lua new file mode 100755 index 0000000..cd325d2 --- /dev/null +++ b/.config/nvim/lua/plugins/init.lua @@ -0,0 +1,93 @@ +-- bootstrap +local install_path = vim.fn.stdpath('data')..'/site/pack/paqs/start/paq-nvim' +if vim.fn.empty(vim.fn.glob(install_path)) > 0 then + vim.fn.system({ + 'git', 'clone', '--depth=1', + 'https://github.com/savq/paq-nvim.git', + install_path + }) +end + +vim.cmd 'packadd paq-nvim' + +require('paq') { + {'savq/paq-nvim'}; + + -- treesiter + {'nvim-treesitter/playground'}; + {'nvim-treesitter/nvim-treesitter-textobjects'}; + { + 'nvim-treesitter/nvim-treesitter', + run=vim.api.nvim_command(':silent! TSUpdate') + }; + + -- lsp + { + 'neovim/nvim-lspconfig', + run = function() + vim.fn.system({'npm', 'install', '-g', '@ansible/ansible-language-server'}) + vim.fn.system({'npm', 'install', '-g', 'vscode-langservers-extracted'}) + vim.fn.system({'python3', '-m', 'pipx', 'install', '--force', 'python-lsp-server[all]'}) + vim.fn.system({'python3', '-m', 'pipx', 'inject', 'python-lsp-server', 'git+https://github.com/python/mypy'}) + vim.fn.system({'python3', '-m', 'pipx', 'inject', 'python-lsp-server', 'pylsp-mypy'}) + vim.fn.system({'python3', '-m', 'pipx', 'inject', 'python-lsp-server', 'types-all'}) + vim.fn.system({'python3', '-m', 'pipx', 'upgrade', '--include-injected', 'python-lsp-server'}) + -- vim.fn.system({'python3', '-m', 'pip', 'install', '--force', 'debugpy'}) + end + }; + {'mickael-menu/zk-nvim'}; + + {'nvim-telescope/telescope.nvim'}; + {'stevearc/aerial.nvim'}; + {'sindrets/diffview.nvim'}; + {'folke/which-key.nvim'}; + { + 'michaelb/sniprun', + run = 'bash install.sh' + }; + + -- dap + {'mfussenegger/nvim-dap'}; + {'rcarriga/nvim-dap-ui'}; + + -- completion + {'hrsh7th/cmp-nvim-lsp'}; + {'hrsh7th/cmp-cmdline'}; + {'hrsh7th/cmp-buffer'}; + {'hrsh7th/cmp-path'}; + {'hrsh7th/cmp-calc'}; + {'hrsh7th/nvim-cmp'}; + + -- indentation + {'lewis6991/gitsigns.nvim'}; + {'glepnir/indent-guides.nvim'}; + {'darazaki/indent-o-matic'}; + { + 'stsewd/sphinx.nvim', + run=function() + vim.fn.system({'python3', '-m', 'pip', 'install', 'sphinx'}) + vim.api.nvim_command(':silent! UpdateRemotePlugins') + end + }; + + -- qol + {'kwkarlwang/bufresize.nvim'}; + + -- dependencies + {'nvim-lua/plenary.nvim'}; +} + +require('plugins.aerial') +require('plugins.bufresize') +require('plugins.cmp') +-- require('plugins.dap') +require('plugins.diffview') +require('plugins.gitsigns') +require('plugins.indent-guides') +require('plugins.indent-o-matic') +require('plugins.sniprun') +require('plugins.lspconfig') +require('plugins.telescope') +require('plugins.treesitter') +require('plugins.which-key') +require('plugins.zk') diff --git a/.config/nvim/lua/plugins/lspconfig.lua b/.config/nvim/lua/plugins/lspconfig.lua new file mode 100755 index 0000000..9ef6a1d --- /dev/null +++ b/.config/nvim/lua/plugins/lspconfig.lua @@ -0,0 +1,82 @@ +local opts = { noremap=true, silent=true } + +local lsputil = require('lspconfig/util') +local python_venv = require('utils').get_python_venv() + +local on_attach = function(client, bufnr) + -- Enable completion triggered by <c-x><c-o> + vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') + + -- Mappings. + -- See `:help vim.lsp.*` for documentation on any of the below functions + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>f', '<cmd>lua vim.lsp.buf.formatting()<CR>', opts) + vim.api.nvim_buf_set_keymap(bufnr, 'n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts) + + require("aerial").on_attach(client, bufnr) +end + +vim.api.nvim_set_keymap('n', '<space>d', '<cmd>lua vim.diagnostic.open_float()<CR>', opts) +vim.api.nvim_set_keymap('n', '[d', '<cmd>lua vim.diagnostic.goto_prev()<CR>', opts) +vim.api.nvim_set_keymap('n', ']d', '<cmd>lua vim.diagnostic.goto_next()<CR>', opts) +vim.api.nvim_set_keymap('n', '<space>q', '<cmd>lua vim.diagnostic.setloclist()<CR>', opts) + +require('lspconfig').ansiblels.setup{ on_attach = on_attach } +require('lspconfig').clangd.setup{ on_attach = on_attach } +require('lspconfig').eslint.setup{ on_attach = on_attach } +require('lspconfig').gopls.setup{ on_attach = on_attach } +require('lspconfig').terraformls.setup{ on_attach = on_attach } + +require('lspconfig').dartls.setup{ + on_attach = on_attach, + settings = { + dart = { + analysisExcludedFolders = { '.git' }, + completeFunctionCalls = true, + enableSdkFormatter = true, + showTodos = true + } + } +} + +require('lspconfig').pylsp.setup{ + cmd_env = { + VIRTUAL_ENV = python_venv, + PATH = lsputil.path.join(python_venv, 'bin') .. ':' .. vim.env.PATH, + MYPYPATH = lsputil.path.join(python_venv, 'bin') .. ':' .. (vim.env.MYPYPATH or "") + }, + on_attach = on_attach, + settings = { + pylsp = { + configurationSources = {'flake8', 'pycodestyle'}, + plugins = { + flake8 = { + enabled = true, + ignore = {}, + maxLineLength = 160 + }, + rope_completion = { + enabled = true, + }, + pyflakes = { + enabled = true + }, + } + } + } +} + +require('lspconfig').elixirls.setup{ + cmd = {'elixir-ls'}, + on_attach = on_attach +} diff --git a/.config/nvim/lua/plugins/sniprun.lua b/.config/nvim/lua/plugins/sniprun.lua new file mode 100755 index 0000000..d6d1265 --- /dev/null +++ b/.config/nvim/lua/plugins/sniprun.lua @@ -0,0 +1,3 @@ +require('sniprun').setup{ + display = { 'Terminal' }, +} diff --git a/.config/nvim/lua/plugins/telescope.lua b/.config/nvim/lua/plugins/telescope.lua new file mode 100755 index 0000000..6a5f8c6 --- /dev/null +++ b/.config/nvim/lua/plugins/telescope.lua @@ -0,0 +1,25 @@ +require('telescope').setup{ + defaults = { + borderchars = { '─', '│', '─', '│', '┌', '┐', '┘', '└'} + } +} + +require('telescope').load_extension('aerial') + +local opt = { noremap=true } +local keybinds = { + {'fa', 'aerial'}, + {'fb', 'buffers'}, + {'ff', 'find_files'}, + {'fg', 'git_files'}, + {'fl', 'live_grep'}, + {'fh', 'help_tags'}, + {'fm', 'man_pages'}, + {'fo', 'oldfiles'}, + {'fr', 'resume'}, + {'f/', 'current_buffer_fuzzy_find'}, +} + +for _, keybind in pairs(keybinds) do + vim.api.nvim_set_keymap('n', keybind[1], '<cmd>Telescope ' .. keybind[2] .. '<cr>', opt) +end diff --git a/.config/nvim/lua/plugins/treesitter.lua b/.config/nvim/lua/plugins/treesitter.lua new file mode 100755 index 0000000..7fb6d45 --- /dev/null +++ b/.config/nvim/lua/plugins/treesitter.lua @@ -0,0 +1,18 @@ +require('nvim-treesitter.configs').setup { + ensure_installed = 'all', + ignore_install = { + 'verilog', + 'kotlin' + }, + highlight = { + enable = true, + -- additional_vim_regex_highlighting = { "markdown" } + additional_vim_regex_highlighting = true, + set_custom_captures = { + ["type.string"] = "pythonFunction", + } + }, + incremental_selection = { enable = true }, + textobjects = { enable = true } +} + diff --git a/.config/nvim/lua/plugins/which-key.lua b/.config/nvim/lua/plugins/which-key.lua new file mode 100755 index 0000000..93e19f9 --- /dev/null +++ b/.config/nvim/lua/plugins/which-key.lua @@ -0,0 +1,13 @@ +require("which-key").setup{ + window = { + position = "bottom", -- bottom, top + margin = { 1, 40, 1, 0 }, -- extra window margin [top, right, bottom, left] + padding = { 0, 0, 0, 0 }, -- extra window padding [top, right, bottom, left] + winblend = 0 + }, + icons = { + breadcrumb = ">", -- symbol used in the command line area that shows your active key combo + separator = ":", -- symbol used between a key and it's label + group = "+", -- symbol prepended to a group + }, +} diff --git a/.config/nvim/lua/plugins/zk.lua b/.config/nvim/lua/plugins/zk.lua new file mode 100755 index 0000000..1a091b9 --- /dev/null +++ b/.config/nvim/lua/plugins/zk.lua @@ -0,0 +1,3 @@ +require('zk').setup{ + picker = 'telescope' +} diff --git a/.config/nvim/lua/settings.lua b/.config/nvim/lua/settings.lua index aa04dce..ef8fb95 100755 --- a/.config/nvim/lua/settings.lua +++ b/.config/nvim/lua/settings.lua @@ -11,12 +11,21 @@ o.autochdir = false o.smarttab = true o.number = true o.list = true +o.mouse = '' o.swapfile = false -- o.foldmethod = 'expr' -- o.foldexpr = 'nvim_treesitter#foldexpr()' +local format = function(diagnostic) + if diagnostic.severity == vim.diagnostic.severity.ERROR then + -- return string.format("E: %s", diagnostic.message) + return diagnostic.message .. diagnostic.source + end + return diagnostic.message +end + cmd 'syntax enable' cmd 'filetype on' cmd 'filetype plugin on' @@ -24,7 +33,30 @@ cmd 'filetype indent on' cmd 'colorscheme colorscheme' vim.cmd([[ -au BufNewFile,BufRead *.Dockerfile,Dockerfile.* setlocal filetype=dockerfile -au BufNewFile,BufRead *.j2*,*.jinja* setlocal filetype=django -au BufNewFile,BufRead *.env* setlocal filetype=sh + au BufNewFile,BufRead *.Dockerfile,Dockerfile.* setlocal filetype=dockerfile + au BufNewFile,BufRead *.j2*,*.jinja* setlocal filetype=django + au BufNewFile,BufRead */task/config setlocal filetype=taskrc + au BufNewFile,BufRead *.env* setlocal filetype=sh + + au BufNewFile,BufRead */playbooks/*.yml set filetype=yaml.ansible + + au BufNewFile,BufRead */.config/neomutt/* + \ if &filetype == "" | + \ setlocal filetype=neomuttrc | + \ endif ]]) + +--[[ +require'nvim-treesitter.configs'.setup { + textobjects = { + lsp_interop = { + enable = true, + border = 'none', + peek_definition_code = { + ["<space>k"] = "@function.outer", + ["<space>K"] = "@class.outer", + }, + }, + }, +} +]]-- diff --git a/.config/pipewire/pipewire-pulse.sh b/.config/pipewire/pipewire-pulse.sh index 4abff58..bbcfa48 100755 --- a/.config/pipewire/pipewire-pulse.sh +++ b/.config/pipewire/pipewire-pulse.sh @@ -3,27 +3,25 @@ sleep 3 source_name="master-mono" +source_position=1 + +if [ "$(cat /etc/hostname)" = "work-01" ]; then + source_position=2 +fi source_index=$(pactl list short sources | grep "input.*pci-" | head -n 1 | + head -n "${source_position}" | awk '{print $1;}') echo "${source_index}" -#pactl load-module module-remap-source \ -# "source_name=${source_name}" \ -# "master=${source_index}" \ -# use_master_format=1 \ -# master_channel_map=front-left \ -# channel_map=mono \ -# channels=1 - pactl load-module module-echo-cancel \ "source_name=${source_name}" \ "master=${source_index}" \ use_master_format=1 \ aec_method="webrtc" \ - aec_args='"beamforming=1 mic_geometry=-1,0,0,1,0,0"' + aec_args='"beamforming=1 mic_geometry=-0.04,0,0,0.04,0,0"' pactl set-default-source "${source_name}" diff --git a/.config/qutebrowser/config.py b/.config/qutebrowser/config.py index cd3695d..d9aaa8f 100755 --- a/.config/qutebrowser/config.py +++ b/.config/qutebrowser/config.py @@ -2,38 +2,75 @@ # ~/.config/qutebrowser/config.py # rgoncalves.se +import html import logging import os import re -import subprocess -import platform +import socket + +from PyQt5.QtCore import QUrl + +from qutebrowser.api import cmdutils +from qutebrowser.browser.urlmarks import ( + AlreadyExistsError as UrlAlreadyExistsError +) +from qutebrowser.browser.urlmarks import UrlMarkManager +from qutebrowser.config.config import ConfigContainer +from qutebrowser.config.configfiles import ConfigAPI +from qutebrowser.utils import message, objreg +from qutebrowser.utils.usertypes import PromptMode +from userscripts.urlmarks import urlmarkmanager_save + +config: ConfigAPI = config # noqa: F821 pylint: disable=E0602,C0103 +c: ConfigContainer = c # noqa: F821 pylint: disable=E0602,C0103 logging.basicConfig(level=logging.DEBUG) -""" -Bypass flake8 warnings. -""" -try: - config -except NameError: - config = None +UrlMarkManager.save = ( + lambda manager: urlmarkmanager_save(manager, config.configdir) +) -def is_musl_system(): - return bool(re.search('musl', os.popen("ldd /bin/ls").read())) +def is_musl_system() -> bool: + return bool(re.search('musl', os.popen('ldd /bin/ls').read())) -def select_qt_arguments(): + +def get_qt_arguments() -> list: """ Select best arguments for launching qutebrowser. Empty by default, it picks lag free options for musl systems. """ - args = [] - - if is_musl_system(): - args.append('disable-seccomp-filter-sandbox') - - return args + filters = { + 'disable-seccomp-filter-sandbox': is_musl_system() + } + + return list( + filter(lambda x: x, map(lambda x: x[1], list(filters.items()))) + ) + + +@cmdutils.register() +def bookmark_save(url: QUrl): + """Save the current page as a bookmark.""" + manager = objreg.get('bookmark-manager') + tags = message.ask( + title="Add bookmark:", + mode=PromptMode.text, + url=url.toString(QUrl.RemovePassword | QUrl.FullyEncoded), + text=( + "Please enter bookmark tags for<br/><b>" + f"{html.escape(url.toDisplayString())}</b>" + ), + ) + + if not tags: + return + + try: + manager.add(url, tags) + except UrlAlreadyExistsError: + message.warning("Bookmark already exists.") config.load_autoconfig(False) @@ -41,10 +78,8 @@ config.set('auto_save.session', True) config.set('scrolling.smooth', False) config.set('qt.highdpi', False) config.set('qt.force_software_rendering', 'none') -config.set('qt.args', select_qt_arguments()) -config.set('messages.timeout', 1000) - -config.bind(',m', 'spawn mpv {url}') +config.set('qt.args', get_qt_arguments()) +config.set('messages.timeout', 2500) config.set('content.images', True, 'chrome-devtools://*') config.set('content.images', True, 'devtools://*') @@ -57,6 +92,8 @@ config.set('content.notifications.enabled', False) config.set('content.notifications.enabled', True, '*://*.zoho.eu/*') config.set('content.notifications.enabled', True, '*://*.viperdev.io/*') config.set('content.notifications.enabled', True, '*://*.rgoncalves.se/*') +config.set('content.notifications.enabled', True, '*://app.slack.com/*') +config.set('content.notifications.enabled', True, '*://mail.google.com/*') config.set('content.register_protocol_handler', False) config.set('content.geolocation', False) @@ -93,13 +130,22 @@ config.set('content.prefers_reduced_motion', True) config.set('content.headers.referer', 'same-domain') config.set('url.default_page', 'https://lite.duckduckgo.com/lite/') config.set('url.start_pages', 'https://lite.duckduckgo.com/lite/') -config.set('url.searchengines', - {'DEFAULT': 'https://lite.duckduckgo.com/lite/?q={}'}) +config.set( + 'url.searchengines', {'DEFAULT': 'https://lite.duckduckgo.com/lite/?q={}'} +) config.set('downloads.location.directory', f'{os.environ["HOME"]}/downloads') +config.set('downloads.prevent_mixed_content', False) config.set('content.autoplay', False) config.set('content.cookies.accept', 'no-3rdparty') +config.set('content.javascript.alert', False) config.set('content.headers.do_not_track', False, '*://*.thetrainline.com/*') config.set('content.blocking.enabled', False, '*://*.thetrainline.com/*') config.set('content.cookies.accept', 'all', '*://*.thetrainline.com/*') + +config.bind(',m', 'spawn mpv {url}') +config.bind('M', 'bookmark-save {url}') + +if socket.gethostname() == 'work-01': + config.set('fonts.default_size', '14pt') diff --git a/.config/qutebrowser/greasemonkey/fandom-to-breezewiki.js b/.config/qutebrowser/greasemonkey/fandom-to-breezewiki.js new file mode 100755 index 0000000..59369f5 --- /dev/null +++ b/.config/qutebrowser/greasemonkey/fandom-to-breezewiki.js @@ -0,0 +1,21 @@ +// ==UserScript== +// @name fandom to breezewiki +// @match *://*.fandom.com/* +// @grant none +// @run-at document-start +// ==/UserScript== + +BREEZEWIKI_INSTANCE = "breezewiki.pussthecat.org" + +url = location.href +url = url.replace(/\bwww\.\b/, "") +host = location.hostname +path = location.pathname +if (url.includes("/wiki/")) { + // this is bad + location.href = "https://" + BREEZEWIKI_INSTANCE + "/" + host.split(".")[0] + path +} +else { + url = url.replace("fandom.com", BREEZEWIKI_ISNTANCE) + location.href = url +} diff --git a/.config/qutebrowser/greasemonkey/gensdeconfiance.js b/.config/qutebrowser/greasemonkey/gensdeconfiance.js new file mode 100755 index 0000000..8e62a30 --- /dev/null +++ b/.config/qutebrowser/greasemonkey/gensdeconfiance.js @@ -0,0 +1,8 @@ +// ==UserScript== +// @name gensdeconfiance +// @match https://gensdeconfiance.com/* +// @run-at document-end +// @grant none +// ==/UserScript== + +document.getElementById('react-paywall').remove() diff --git a/.config/qutebrowser/greasemonkey/gitlab.js b/.config/qutebrowser/greasemonkey/gitlab.js new file mode 100755 index 0000000..5ebb8a3 --- /dev/null +++ b/.config/qutebrowser/greasemonkey/gitlab.js @@ -0,0 +1,18 @@ +// ==UserScript== +// @name gitlab +// @match *://*/* +// @run-at document-end +// @grant none +// ==/UserScript== + +(async function unwrap(subgroups) { + await new Promise(resolve => setTimeout(resolve, 600)); + for (subgroup of subgroups) { + if (! subgroup.classList.contains("has-children")) { + continue; + } + subgroup.click() + unwrap(subgroup.getElementsByClassName("group-row has-children")); + } + return +})(document.getElementsByClassName("group-row has-children")); diff --git a/.config/qutebrowser/greasemonkey/glassdoor.js b/.config/qutebrowser/greasemonkey/glassdoor.js index e6e44fc..664448c 100755 --- a/.config/qutebrowser/greasemonkey/glassdoor.js +++ b/.config/qutebrowser/greasemonkey/glassdoor.js @@ -1,6 +1,7 @@ // ==UserScript== // @name glassdoor // @match https://*.glassdoor.com/* +// @match https://*.glassdoor.ch/* // @match https://*.glassdoor.fr/* // @run-at document-end // @grant none @@ -20,5 +21,3 @@ window.addEventListener('load', function() { ]; functions.forEach(f => f()); }); - -console.log('aaaaaaaaaaaaa'); diff --git a/.config/qutebrowser/greasemonkey/google.js b/.config/qutebrowser/greasemonkey/google.js new file mode 100755 index 0000000..b410eff --- /dev/null +++ b/.config/qutebrowser/greasemonkey/google.js @@ -0,0 +1,13 @@ +// ==UserScript== +// @name custom google +// @match https://www.google.com/* +// @grant none +// ==/UserScript== + +(function() { + 'use strict'; + + document.querySelectorAll('.ads-ad').forEach(function(e){ + e.remove(); + }); +})(); diff --git a/.config/qutebrowser/greasemonkey/imgur-to-imgin.js b/.config/qutebrowser/greasemonkey/imgur-to-imgin.js index d4ac434..1263eb5 100755 --- a/.config/qutebrowser/greasemonkey/imgur-to-imgin.js +++ b/.config/qutebrowser/greasemonkey/imgur-to-imgin.js @@ -5,4 +5,4 @@ // @run-at document-start // ==/UserScript== -top.location.hostname = "imgin.voidnet.tech"; +// top.location.hostname = "imgin.voidnet.tech"; diff --git a/.config/qutebrowser/greasemonkey/imgur-to-rimgo.js b/.config/qutebrowser/greasemonkey/imgur-to-rimgo.js new file mode 100755 index 0000000..d0735cb --- /dev/null +++ b/.config/qutebrowser/greasemonkey/imgur-to-rimgo.js @@ -0,0 +1,8 @@ +// ==UserScript== +// @name imgur to rimgo +// @match *://imgur.com/* +// @grant none +// @run-at document-start +// ==/UserScript== + +top.location.hostname = "rimgo.pussthecat.org"; diff --git a/.config/qutebrowser/greasemonkey/instagram-to-bibliogram.js b/.config/qutebrowser/greasemonkey/instagram-to-bibliogram.js index a608059..53f11ee 100755 --- a/.config/qutebrowser/greasemonkey/instagram-to-bibliogram.js +++ b/.config/qutebrowser/greasemonkey/instagram-to-bibliogram.js @@ -5,4 +5,5 @@ // @run-at document-start // ==/UserScript== -top.location.hostname = "bibliogram.art"; +top.location.hostname = "bibliogram.pussthecat.org"; +// document.getElementsByClassName('explanation')[0].getElementsByTagName('a')[0].click() diff --git a/.config/qutebrowser/greasemonkey/linkedin.js b/.config/qutebrowser/greasemonkey/linkedin.js new file mode 100755 index 0000000..b8468ec --- /dev/null +++ b/.config/qutebrowser/greasemonkey/linkedin.js @@ -0,0 +1,59 @@ +// ==UserScript== +// @name linkedin css +// @match *://*.linkedin.com/* +// @grant none +// @inject-into content +// ==/UserScript== + +(function() { + 'use strict'; + + // Selectors + const storySelector = '.feed-shared-update-v2'; + const descriptionSelector = '.feed-shared-actor__description, .feed-shared-actor__sub-description'; + + // Search strings + const searchStrings = { + 'da': ['Promoveret'], + 'en': ['Promoted'], + 'es': ['Promocionado'], + 'fr': ['Post sponsorisé'] + }; + + const language = searchStrings.hasOwnProperty(document.documentElement.lang) ? document.documentElement.lang : 'en'; + + function blockSponsoredPosts() { + const stories = document.querySelectorAll(storySelector); + for (const story of stories) { + if (story.style.display == 'none') { + continue; + } + + const descriptions = story.querySelectorAll(descriptionSelector); + for (const description of descriptions) { + + const descriptionContent = description.innerText.trim(); + if (searchStrings[language].find(searchString => searchString == descriptionContent)) { + + console.debug('Blocked sponsored story', story); + story.style.display = 'none'; + } + } + } + } + + const observer = new MutationObserver(blockSponsoredPosts); + observer.observe(document.body, { + 'childList': true, + 'subtree': true + }); + + blockSponsoredPosts(); + + GM_addStyle(` + .scaffold-layout__aside { + visibility: hidden; + } + `) + +})(); diff --git a/.config/qutebrowser/greasemonkey/minimal-css.js b/.config/qutebrowser/greasemonkey/minimal-css.js deleted file mode 100755 index 1fe1414..0000000 --- a/.config/qutebrowser/greasemonkey/minimal-css.js +++ /dev/null @@ -1,16 +0,0 @@ -// ==UserScript== -// @name minimal css -// @match *://www.google.com -// @match *://www.google.com/search* -// @match *://cliq.zoho.eu/chats/* -// @match *://www.pinterest.com/* -// @grant none -// ==/UserScript== - -GM_addStyle(` - * { - border-radius: 0px !important; - transition: none !important; - animation: none !important; - } -`) diff --git a/.config/qutebrowser/greasemonkey/rarbg.js b/.config/qutebrowser/greasemonkey/rarbg.js new file mode 100755 index 0000000..cb99969 --- /dev/null +++ b/.config/qutebrowser/greasemonkey/rarbg.js @@ -0,0 +1,12 @@ +// ==UserScript== +// @name rarbg css +// @match *://rarbg.to/* +// @match *://rarbgaccessed.org/* +// @grant none +// ==/UserScript== + +GM_addStyle(` + div:last-of-type { + z-index: -1 !important; + } +`) diff --git a/.config/qutebrowser/greasemonkey/teddit.js b/.config/qutebrowser/greasemonkey/teddit.js new file mode 100755 index 0000000..2e9c829 --- /dev/null +++ b/.config/qutebrowser/greasemonkey/teddit.js @@ -0,0 +1,23 @@ +// ==UserScript== +// @name yewtube +// @match *://*.teddit.net/* +// @match *://teddit.net/* +// @grant none +// @run-at document-start +// ==/UserScript== + +document.cookie = "post_media_max_height=medium"; +document.cookie = "flairs=true"; +document.cookie = "highlight_controversial=true"; +document.cookie = "show_upvotes=true"; +document.cookie = "collapse_child_comments=false"; +document.cookie = "nsfw_enabled=false"; +document.cookie = "show_upvoted_percentage=false"; +document.cookie = "videos_muted=true"; +document.cookie = "show_large_gallery_images=true"; +document.cookie = "domain_twitter="; +document.cookie = "domain_youtube="; +document.cookie = "domain_instagram="; +document.cookie = "prefer_frontpage=true"; +document.cookie = "default_comment_sort=best"; +document.cookie = "theme=white"; diff --git a/.config/qutebrowser/greasemonkey/yewtube.js b/.config/qutebrowser/greasemonkey/yewtube.js new file mode 100755 index 0000000..0362a7b --- /dev/null +++ b/.config/qutebrowser/greasemonkey/yewtube.js @@ -0,0 +1,9 @@ +// ==UserScript== +// @name yewtube +// @match *://*.yewtu.be/* +// @match *://yewtu.be/* +// @grant none +// @run-at document-start +// ==/UserScript== + +document.cookie = "PREFS=%7B%22annotations%22%3Afalse%2C%22annotations_subscribed%22%3Afalse%2C%22autoplay%22%3Atrue%2C%22automatic_instance_redirect%22%3Afalse%2C%22captions%22%3A%5B%22%22%2C%22%22%2C%22%22%5D%2C%22comments%22%3A%5B%22youtube%22%2C%22reddit%22%5D%2C%22continue%22%3Afalse%2C%22continue_autoplay%22%3Atrue%2C%22dark_mode%22%3A%22%22%2C%22latest_only%22%3Afalse%2C%22listen%22%3Afalse%2C%22local%22%3Atrue%2C%22watch_history%22%3Afalse%2C%22vr_mode%22%3Atrue%2C%22show_nick%22%3Afalse%2C%22locale%22%3A%22en-US%22%2C%22region%22%3A%22US%22%2C%22max_results%22%3A40%2C%22notifications_only%22%3Afalse%2C%22player_style%22%3A%22invidious%22%2C%22quality%22%3A%22dash%22%2C%22quality_dash%22%3A%221080p%22%2C%22default_home%22%3A%22Popular%22%2C%22feed_menu%22%3A%5B%22Popular%22%2C%22Trending%22%5D%2C%22related_videos%22%3Atrue%2C%22sort%22%3A%22published%22%2C%22speed%22%3A1%2C%22thin_mode%22%3Afalse%2C%22unseen_only%22%3Afalse%2C%22video_loop%22%3Afalse%2C%22extend_desc%22%3Afalse%2C%22volume%22%3A50%2C%22save_player_pos%22%3Afalse%7D"; diff --git a/.config/tmux/tmux.conf b/.config/tmux/tmux.conf index 9e77b7c..b54721e 100755 --- a/.config/tmux/tmux.conf +++ b/.config/tmux/tmux.conf @@ -4,7 +4,9 @@ set-option -g mouse off set-option -g mode-keys vi set-option -g escape-time 0 set-option -g default-terminal "screen-256color" +set-option -g renumber-windows on set-option -g history-limit 5000 +set-option -g xterm-keys on set -s escape-time 0 # keybindings diff --git a/.config/user-dirs.dirs b/.config/user-dirs.dirs index 0e54d8c..a529fd4 100755 --- a/.config/user-dirs.dirs +++ b/.config/user-dirs.dirs @@ -1,15 +1,8 @@ -# This file is written by xdg-user-dirs-update -# If you want to change or add directories, just edit the line you're -# interested in. All local changes will be retained on the next run. -# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped -# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an -# absolute path. No other format is supported. -# XDG_DOWNLOAD_DIR="$HOME/downloads" -XDG_DOCUMENTS_DIR="$HOME/" -XDG_MUSIC_DIR="$HOME/" +XDG_DOCUMENTS_DIR="$HOME/docs" +XDG_MUSIC_DIR="$HOME/music" XDG_PICTURES_DIR="$HOME/pictures" XDG_DESKTOP_DIR="$HOME/" XDG_TEMPLATES_DIR="$HOME/" -XDG_PUBLICSHARE_DIR="$HOME/" +XDG_PUBLICSHARE_DIR="$HOME/mnt" XDG_VIDEOS_DIR="$HOME/" @@ -9,8 +9,8 @@ Account personal MaildirStore personal-local SubFolders Verbatim -Path ~/.mail/ -Inbox ~/.mail/INBOX +Path ~/.local/share/mail/personal/ +Inbox ~/.local/share/mail/personal/INBOX Channel personal Far :personal-remote: diff --git a/.weechat/buflist.conf b/.weechat/buflist.conf index 99bd851..b56726d 100755 --- a/.weechat/buflist.conf +++ b/.weechat/buflist.conf @@ -6,25 +6,25 @@ # # Use commands like /set or /fset to change settings in WeeChat. # -# For more info, see: https://weechat.org/doc/quickstart +# For more info, see: https://weechat.org/doc/quickstart/ # [look] add_newline = on auto_scroll = 50 -display_conditions = "${buffer.hidden}==0" +display_conditions = "${bar_item.name} == buflist && (${buffer.hidden} == || ${plugins.var.buflist.look.show_hidden_buffers} !=) && (${type} !~ ^(channel|private)$ || ${type} =~ ^(channel|private)$ && ${buffer[${if:${plugin}==irc?${info:irc_buffer,${irc_server.name}}:${info:slack_matrix_server_search,${buffer}}}].local_variables.fold}==) || ${bar_item.name} == buflist2 && ${buffer.local_variables.control_buffer} != || ${bar_item.name} == buflist3 && ${buffer.local_variables.control_buffer2} !=" enabled = on mouse_jump_visited_buffer = off mouse_move_buffer = on mouse_wheel = on nick_prefix = off nick_prefix_empty = on -signals_refresh = "" +signals_refresh = "irc_server_connected,relay_client_connected,relay_client_disconnected" sort = "number,-active" -use_items = 1 +use_items = 3 [format] -buffer = "${format_number}${indent}${format_nick_prefix}${color_hotlist}${name}${buffer.nick}" +buffer = "${format_number}${indent}${format_nick_prefix}${color_hotlist}${format_name}" buffer_current = "${color:,blue}${format_buffer}" hotlist = " ${color:green}(${hotlist}${color:green})" hotlist_highlight = "${color:magenta}" diff --git a/.weechat/fset.conf b/.weechat/fset.conf index 3d7a814..1b52d85 100755 --- a/.weechat/fset.conf +++ b/.weechat/fset.conf @@ -6,7 +6,7 @@ # # Use commands like /set or /fset to change settings in WeeChat. # -# For more info, see: https://weechat.org/doc/quickstart +# For more info, see: https://weechat.org/doc/quickstart/ # [look] diff --git a/.weechat/logger.conf b/.weechat/logger.conf index 37c02b4..9bd4719 100755 --- a/.weechat/logger.conf +++ b/.weechat/logger.conf @@ -6,7 +6,7 @@ # # Use commands like /set or /fset to change settings in WeeChat. # -# For more info, see: https://weechat.org/doc/quickstart +# For more info, see: https://weechat.org/doc/quickstart/ # [look] diff --git a/.weechat/weechat.conf b/.weechat/weechat.conf index 53e2776..e79493e 100755 --- a/.weechat/weechat.conf +++ b/.weechat/weechat.conf @@ -6,7 +6,7 @@ # # Use commands like /set or /fset to change settings in WeeChat. # -# For more info, see: https://weechat.org/doc/quickstart +# For more info, see: https://weechat.org/doc/quickstart/ # [debug] @@ -212,7 +212,7 @@ status_time = default [completion] base_word_until_cursor = on command_inline = on -default_template = "%(nicks)|%(irc_channels)" +default_template = "%(nicks)|%(irc_channels)|%(usergroups)" nick_add_space = on nick_case_sensitive = off nick_completer = ": " @@ -243,7 +243,6 @@ proxy_curl = "" [plugin] autoload = "*" -debug = off extension = ".so,.dll" path = "%h/plugins" save_config_on_unload = on @@ -324,7 +323,7 @@ status.conditions = "" status.filling_left_right = vertical status.filling_top_bottom = horizontal status.hidden = off -status.items = "[time],[buffer_last_number],[buffer_plugin],buffer_number+:+buffer_name+(buffer_modes)+{buffer_nicklist_count}+buffer_zoom+buffer_filter,scroll,[lag],[hotlist],[matrix_typing_notice],completion" +status.items = "[time],[buffer_last_number],[buffer_plugin],buffer_number+:+buffer_name+(buffer_modes)+{buffer_nicklist_count}+buffer_zoom+buffer_filter,scroll,[lag],[hotlist],[matrix_typing_notice],[slack_typing_notice],completion,cmd_completion" status.position = bottom status.priority = 500 status.separator = off @@ -362,9 +361,24 @@ vi_line_numbers.size = 0 vi_line_numbers.size_max = 0 vi_line_numbers.type = window +[custom_bar_item] + [layout] [notify] +python.slack.scaleway.#briq = highlight +python.slack.scaleway.#datacenter = highlight +python.slack.scaleway.#fivefoot5x5urban = highlight +python.slack.scaleway.#foodporn = highlight +python.slack.scaleway.#it-internal-services = highlight +python.slack.scaleway.#production-incidents = highlight +python.slack.scaleway.#production-ops = highlight +python.slack.scaleway.#protobuf = highlight +python.slack.scaleway.#social-media = highlight +python.slack.scaleway.#sport-paris = highlight +python.slack.scaleway.#squad-managed-databases = highlight +python.slack.scaleway.#squad-redis = highlight +python.slack.scaleway.#squad-website = highlight [filter] topic = on;*;irc_topic;* @@ -653,6 +667,11 @@ meta2-A = "/cursor move up" meta2-B = "/cursor move down" meta2-C = "/cursor move right" meta2-D = "/cursor move left" +@chat(python.*):D = "hsignal:slack_cursor_delete" +@chat(python.*):L = "hsignal:slack_cursor_linkarchive" +@chat(python.*):M = "hsignal:slack_cursor_message" +@chat(python.*):R = "hsignal:slack_cursor_reply" +@chat(python.*):T = "hsignal:slack_cursor_thread" @chat(python.matrix.*):r = "hsignal:matrix_cursor_reply" @item(buffer_nicklist):K = "/window ${_window_number};/kickban ${nick}" @item(buffer_nicklist):b = "/window ${_window_number};/ban ${nick}" @@ -675,6 +694,7 @@ meta2-D = "/cursor move left" @chat(fset.fset):button2* = "hsignal:fset_mouse" @chat(fset.fset):wheeldown = "/fset -down 5" @chat(fset.fset):wheelup = "/fset -up 5" +@chat(python.*):button2 = "hsignal:slack_mouse" @chat(script.scripts):button1 = "/window ${_window_number};/script go ${_chat_line_y}" @chat(script.scripts):button2 = "/window ${_window_number};/script go ${_chat_line_y};/script installremove -q ${script_name_with_extension}" @chat(script.scripts):wheeldown = "/script down 5" diff --git a/.xinitrc.dwm b/.xinitrc.dwm index 04ea96f..d1edaee 100755 --- a/.xinitrc.dwm +++ b/.xinitrc.dwm @@ -1,2 +1,8 @@ +eval $(gnome-keyring-daemon --start) +export SSH_AUTH_SOCK +dbus-update-activation-environment --systemd DISPLAY + xrdb -merge ~/.Xresources -exec dbus-run-session -- ~/.bin/dwm-start +exec ~/.bin/dwm-start +# exec dbus-run-session -- ~/.bin/dwm-start +# exec dbus-launch ~/.bin/dwm-start @@ -1,9 +1,12 @@ # ~/.zshrc configuration ~~ rgoncalves.se -. ~/.cprofile set -o vi +for cprofile in $HOME/.cprofile*; do + . "${cprofile}" +done + precmd() { vcs_info } @@ -12,13 +15,14 @@ precmd() { autoload -U history-search-end zle -N history-beginning-search-backward-end history-search-end zle -N history-beginning-search-forward-end history-search-end +bindkey '^R' history-incremental-search-backward bindkey "^[[A" history-beginning-search-backward-end bindkey "^[[B" history-beginning-search-forward-end bindkey "^[[1;5C" forward-word bindkey "^[[1;5D" backward-word bindkey "\[[H" beginning-of-line bindkey "\[[F" end-of-line -bindkey "\e[3~" delete-char +bindkey "\e[3~" delete-char bindkey '^[[Z' reverse-menu-complete zstyle ':completion:*' completer _complete zstyle ':completion:*' matcher-list '' 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' '+l:|=* r:|=*' @@ -43,7 +47,7 @@ _dir="%~" _color=002 autoload -Uz vcs_info -zstyle ':vcs_info:*' enable git svn +zstyle ':vcs_info:*' enable svn zstyle ':vcs_info:*' enable git zstyle ':vcs_info:*' get-revision true zstyle ':vcs_info:*' check-for-changes true @@ -60,8 +64,13 @@ RPROMPT='${vcs_info_msg_0_}' # pyenv # export PYENV_ROOT="$HOME/.pyenv" -eval "$(pyenv init --path)" eval "$(pyenv init -)" +eval "$(pyenv virtualenv-init - 2>/dev/null &)" (cat ~/.cache/dot/sequences 2>/dev/null &) # clear + +if [ -z "${SSH_AUTH_SOCK}" ]; then + eval $(ssh-agent) >/dev/null 2>&1 + ssh-add -k >/dev/null 2>&1 +fi |