├── .shortcuts ├── 90_vim ├── 99_sshd ├── 80_sync ├── 40_fecni_new ├── 10_agenda_search ├── 30_search_all ├── 20_project_search └── 50_cetli_questions ├── .config ├── sioyek │ ├── keys_user.config │ └── prefs_user.config ├── ranger │ ├── plugins │ │ └── __init__.py │ ├── colorschemes │ │ ├── __init__.py │ │ └── dracula.pyo │ └── rc.conf ├── yadm │ ├── encrypt │ ├── hooks │ │ └── dontuse_post_pull │ └── minimalbootstrap ├── ripgrep │ └── ripgreprc ├── aerc │ ├── imap-folder-map-bence.conf │ ├── hooks │ │ ├── tag-modified │ │ ├── mail-added │ │ ├── flag-changed │ │ ├── mail-sent │ │ ├── mail-deleted │ │ ├── mail-received │ │ ├── aerc-shutdown │ │ ├── aerc-startup │ │ └── general │ ├── imap-folder-map-pharmahungary.conf │ ├── filters │ │ └── csv │ ├── templates │ │ ├── new_message │ │ ├── forward_as_body │ │ └── quoted_reply │ ├── imap-folder-map-elte.conf │ ├── imap-folder-map-priestoferis.conf │ ├── stylesets │ │ └── default │ ├── generateNotmuchMap.py │ ├── notmuchmap.conf │ ├── accounts.conf##default │ └── accounts.conf##c.imap ├── emailconfiguration │ ├── mailsync-high │ ├── ferdinandy_signature.txt │ ├── trailers │ ├── cleanupoldmail │ ├── mailsync-medium │ ├── run-all-mbsync.sh │ ├── pharmahungary_signature.txt │ ├── mailsync-low │ ├── rearchive.py │ └── googlestat.py ├── environment.d │ ├── X_10_editor.conf │ ├── X_02_rust.conf │ ├── X_99_systemd.conf │ ├── X_90_path.conf │ ├── X_02_ripgrep.conf │ ├── X_20_git.conf │ ├── X_02_zig.conf │ ├── X_01_go.conf │ ├── X_10_fzf.conf │ └── README.md ├── systemfiles │ ├── boot_loader_loader.conf │ ├── etc_x11_xorg.conf.d_30-touchpad.conf │ ├── etc_pam.d_login │ └── etc_sdboot-manage.conf ├── i3 │ ├── wallpaper.png │ ├── bar.conf │ ├── config.d │ │ ├── 35_i3-gaps │ │ └── 29_workspace-names │ └── scripts │ │ └── i3-next-workspace ├── git │ ├── commands │ │ ├── git-changed-since │ │ ├── git-switch-default │ │ ├── git-review-stat │ │ ├── git-review │ │ ├── git-whose-branch │ │ └── git-push-notmp │ ├── ignore │ ├── signifyd-config │ └── committrailers ├── task │ ├── taskwarrior-tui │ ├── taskrc │ ├── taskagentrc │ └── bubblegum-256.theme ├── regolith3 │ ├── i3xrocks │ │ └── conf.d │ │ │ └── 80_notmuch_unread │ ├── scripts │ │ └── searchrecentrofi.sh │ ├── i3 │ │ └── config.d │ │ │ ├── 35_i3-gaps │ │ │ └── 29_workspace-names │ ├── i3status-rs.toml │ └── Xresources ├── nvim │ ├── coc-settings.json │ └── init.vim ├── systemd │ └── user │ │ ├── sync-org-git.service │ │ ├── restic.timer │ │ ├── sync-org-git.timer │ │ ├── vdirsyncer.service │ │ ├── mailsync-low.timer │ │ ├── mailsync-high.timer │ │ ├── mailsync-medium.timer │ │ ├── tasksync.timer │ │ ├── bugwarrior-pull.timer │ │ ├── tasksync.service │ │ ├── vdirsyncer.timer │ │ ├── bugwarrior-pull.service │ │ ├── rofication.service │ │ ├── davmail.service │ │ ├── throttle.service │ │ ├── restic.service │ │ ├── tasksync.sh │ │ ├── mailsync-high.service │ │ ├── mailsync-low.service │ │ ├── mailsync-medium.service │ │ ├── manageemail.sh │ │ ├── tmux.service │ │ └── goimapnotify@.service ├── keyboards │ └── selfmadehunmackeylayout.bundle │ │ └── Contents │ │ ├── Resources │ │ ├── HungarianLinuxMod.icns │ │ ├── ProgHungarianLinuxMod.icns │ │ └── en.lproj │ │ │ └── InfoPlist.strings │ │ ├── version.plist │ │ └── Info.plist ├── rofi │ ├── greenclip-paste-modi.sh │ ├── greenclip-paste-fmt-modi.sh │ └── copypastemodi.sh ├── flameshot │ └── flameshot.ini ├── hut │ └── config ├── glow │ └── glow.yml ├── maildir-rank-addr │ └── config ├── greenclip.toml ├── throttle │ └── config.toml ├── i3status-rust │ ├── scripts │ │ ├── tailscale-switch-menu │ │ ├── tailscale-status │ │ └── focused-window-name │ └── config.toml ├── goimapnotify │ ├── bence.yaml │ ├── priestoferis.yaml │ ├── elte.yaml │ ├── pharmahungary.yaml │ └── yettel.conf ├── agents │ ├── tmux.md │ ├── directives.md │ └── skills │ │ └── tecton │ │ └── SKILL.md ├── polybar │ ├── launch.sh │ └── scripts │ │ ├── arch_updates.sh │ │ ├── info-hackspeed.sh │ │ └── weather-openmap.sh ├── shell │ ├── zsh │ │ └── customfunctions.zsh │ └── aliases.sh ├── cloud-init │ └── user-data ├── wsl │ └── README.md ├── starship.toml ├── opencode │ ├── AGENTS.md │ ├── command │ │ └── handoff.md │ └── opencode.jsonc ├── vdirsyncer │ └── config ├── khal │ └── config ├── oama │ └── config.yaml ├── khard │ └── khard.conf ├── msmtp │ └── config ├── bugwarrior │ └── bugwarrior.toml ├── docs │ └── cachyos_starting.md ├── kitty │ └── kitty.conf ├── mimeapps.list ├── whkdrc ├── notmuch │ └── default │ │ └── config ├── ghostty │ └── config └── bashmount │ └── bashmount.conf ├── .xprofile ├── .local ├── bin │ ├── msmtpq │ ├── yadmlistall │ └── msmtp-queue └── share │ ├── yadm │ ├── archive │ └── repo.git │ │ └── info │ │ └── sparse-checkout##template │ ├── icons │ └── sioyek.png │ └── applications │ ├── zulip.desktop │ ├── gmail.desktop │ ├── outlook.desktop │ ├── trello.desktop │ ├── messenger.desktop │ ├── googlecalendar.desktop │ ├── sioyek.desktop │ ├── aerc.desktop │ └── zulip.svg ├── .vim ├── after │ └── ftplugin │ │ ├── help.vim │ │ ├── javascript.vim │ │ ├── gitcommit.vim │ │ ├── floggraph.vim │ │ ├── python.vim │ │ ├── latex.vim │ │ ├── vue.vim │ │ ├── mail.vim │ │ ├── markdown.vim │ │ └── vimwiki.vim ├── vim-plug-configs │ ├── tags.vim │ ├── iamcco-markdown-preview.vim │ ├── vim-auto-save.vim │ ├── vim-obsession.vim │ ├── vim-easy-align.vim │ ├── vim-polyglot.vim │ ├── floaterm.vim │ ├── vim-swap.vim │ ├── jupyter.vim │ ├── vim-slime.vim │ ├── i3wm-kitty-vim-tmux-navigator.vim │ ├── goyo.vim │ ├── movements.vim │ ├── writing.vim │ ├── vimspector.vim │ ├── org.vim │ ├── ale.vim │ ├── fzf.vim │ ├── git.vim │ ├── theme-setup.vim │ ├── coc.vim │ └── plugins.vim ├── coc-settings.json ├── nvim-plug-configs │ └── nvim.vim ├── autoload │ ├── insertlinesfzf.vim │ ├── contactfunction.vim │ └── myfunctions.vim ├── plugin │ ├── mycommands.vim │ └── hungarian_keymap.vim ├── firenvim.vim └── vimrc ├── bin ├── taskagent ├── khalselector ├── haste ├── sync_org_git ├── any2sixel ├── tmuxscratch ├── addresslookup ├── notify-send ├── clip ├── confed ├── khalimport ├── dros └── testinternetconnection ├── .xinitrc ├── .ssh ├── gpg-ssh-pub.key └── config.template ├── .jupyter └── requirements.txt ├── .claude ├── settings.json ├── setup.md └── CLAUDE.md ├── .gnupg ├── gpg-agent.conf ├── gpg.conf └── sshcontrol ├── .gcalclirc ├── .zshenv ├── .ipython └── profile_default │ └── startup │ ├── 01-fix-error-colors.py │ ├── 00-base-data-imports.py │ ├── 40-projectimports.py │ ├── 10-clip.py │ └── 20-pyspark.py ├── .ctags.d └── default.tags ├── .Xresources ├── .restic.sh └── .termux └── termux.properties /.shortcuts/90_vim: -------------------------------------------------------------------------------- 1 | vim 2 | -------------------------------------------------------------------------------- /.shortcuts/99_sshd: -------------------------------------------------------------------------------- 1 | sshd 2 | -------------------------------------------------------------------------------- /.config/sioyek/keys_user.config: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.config/ranger/plugins/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.config/yadm/encrypt: -------------------------------------------------------------------------------- 1 | .ssh/config 2 | -------------------------------------------------------------------------------- /.config/ranger/colorschemes/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.config/ripgrep/ripgreprc: -------------------------------------------------------------------------------- 1 | --glob=!tags 2 | -------------------------------------------------------------------------------- /.xprofile: -------------------------------------------------------------------------------- 1 | export TERMINAL=/usr/bin/contour 2 | -------------------------------------------------------------------------------- /.local/bin/msmtpq: -------------------------------------------------------------------------------- 1 | /usr/share/doc/msmtp/msmtpq/msmtpq -------------------------------------------------------------------------------- /.config/aerc/imap-folder-map-bence.conf: -------------------------------------------------------------------------------- 1 | Inbox=INBOX 2 | -------------------------------------------------------------------------------- /.config/emailconfiguration/mailsync-high: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | -------------------------------------------------------------------------------- /.config/environment.d/X_10_editor.conf: -------------------------------------------------------------------------------- 1 | EDITOR=nvim 2 | -------------------------------------------------------------------------------- /.config/yadm/hooks/dontuse_post_pull: -------------------------------------------------------------------------------- 1 | yadm bootstrap 2 | -------------------------------------------------------------------------------- /.vim/after/ftplugin/help.vim: -------------------------------------------------------------------------------- 1 | nnoremap gq :q 2 | -------------------------------------------------------------------------------- /.config/environment.d/X_02_rust.conf: -------------------------------------------------------------------------------- 1 | PATH=$HOME/.cargo/bin:$PATH 2 | -------------------------------------------------------------------------------- /.config/environment.d/X_99_systemd.conf: -------------------------------------------------------------------------------- 1 | SYSTEMDUSERENVLOADED=1 2 | -------------------------------------------------------------------------------- /.vim/after/ftplugin/javascript.vim: -------------------------------------------------------------------------------- 1 | setlocal foldmethod=syntax 2 | -------------------------------------------------------------------------------- /.config/aerc/hooks/tag-modified: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # no usecase for this 4 | -------------------------------------------------------------------------------- /.config/aerc/imap-folder-map-pharmahungary.conf: -------------------------------------------------------------------------------- 1 | *=INBOX.* 2 | Inbox=INBOX 3 | -------------------------------------------------------------------------------- /.config/environment.d/X_90_path.conf: -------------------------------------------------------------------------------- 1 | PATH=$HOME/bin:$HOME/.local/bin:$PATH 2 | -------------------------------------------------------------------------------- /bin/taskagent: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | exec task rc:~/.config/task/taskagentrc "$@" 3 | -------------------------------------------------------------------------------- /.config/aerc/filters/csv: -------------------------------------------------------------------------------- 1 | #/bin/bash 2 | 3 | cat - | column -t --separator=",;" 4 | -------------------------------------------------------------------------------- /.config/aerc/templates/new_message: -------------------------------------------------------------------------------- 1 | X-Mailer: aerc {{version}} 2 | {{.Signature}} 3 | -------------------------------------------------------------------------------- /.shortcuts/80_sync: -------------------------------------------------------------------------------- 1 | #!/data/data/com.termux/files/usr/bin/bash 2 | ~/bin/sync_org_git 3 | -------------------------------------------------------------------------------- /bin/khalselector: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | khal printcalendars | fzf | sed 's/\(.*\)/"\1"/g' 4 | -------------------------------------------------------------------------------- /.config/emailconfiguration/ferdinandy_signature.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | -- 4 | bence.ferdinandy.com 5 | -------------------------------------------------------------------------------- /.config/environment.d/X_02_ripgrep.conf: -------------------------------------------------------------------------------- 1 | RIPGREP_CONFIG_PATH=$HOME/.config/ripgrep/ripgreprc 2 | -------------------------------------------------------------------------------- /.config/systemfiles/boot_loader_loader.conf: -------------------------------------------------------------------------------- 1 | default @saved 2 | timeout 0 3 | console-mode keep 4 | -------------------------------------------------------------------------------- /.config/environment.d/X_20_git.conf: -------------------------------------------------------------------------------- 1 | PATH=$HOME/.config/git/commands:$PATH 2 | TESTINGGIT=hellobello 3 | -------------------------------------------------------------------------------- /.config/i3/wallpaper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ferdinandyb/dotfiles/HEAD/.config/i3/wallpaper.png -------------------------------------------------------------------------------- /.local/share/yadm/archive: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ferdinandyb/dotfiles/HEAD/.local/share/yadm/archive -------------------------------------------------------------------------------- /.config/git/commands/git-changed-since: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | git diff --name-only $(git merge-base --fork-point $1) 4 | -------------------------------------------------------------------------------- /.local/share/icons/sioyek.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ferdinandyb/dotfiles/HEAD/.local/share/icons/sioyek.png -------------------------------------------------------------------------------- /.shortcuts/40_fecni_new: -------------------------------------------------------------------------------- 1 | #!/data/data/com.termux/files/usr/bin/bash 2 | source ~/.config/shell/aliases.sh 3 | cfn 4 | -------------------------------------------------------------------------------- /.xinitrc: -------------------------------------------------------------------------------- 1 | [[ -f ~/.Xmodmap ]] && xmodmap ~/.Xmodmap 2 | [[ -f ~/.Xresources ]] && xrdb -merge -I$HOME ~/.Xresources 3 | -------------------------------------------------------------------------------- /.config/aerc/hooks/mail-added: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | AERC_HOOK_ORIGIN="mail-added-hook" $HOME/.config/aerc/hooks/general 4 | -------------------------------------------------------------------------------- /.config/task/taskwarrior-tui: -------------------------------------------------------------------------------- 1 | uda.taskwarrior-tui.keyconfig.next-tab=ú 2 | uda.taskwarrior-tui.keyconfig.previous-tab=ő 3 | -------------------------------------------------------------------------------- /.config/aerc/hooks/flag-changed: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | AERC_HOOK_ORIGIN="flag-changed-hook" $HOME/.config/aerc/hooks/general 4 | -------------------------------------------------------------------------------- /.ssh/gpg-ssh-pub.key: -------------------------------------------------------------------------------- 1 | ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPLaBt/j7H7lZycuIMYn/QiF6xordCd0ppJB8pFBqzMz openpgp:0xD9C8EA4B 2 | -------------------------------------------------------------------------------- /.vim/vim-plug-configs/tags.vim: -------------------------------------------------------------------------------- 1 | Plug 'ludovicchabant/vim-gutentags' 2 | Plug 'preservim/tagbar', { 'on': 'TagbarToggle' } 3 | -------------------------------------------------------------------------------- /.config/environment.d/X_02_zig.conf: -------------------------------------------------------------------------------- 1 | ZVM_INSTALL="$HOME/.zvm/self" 2 | PATH="$PATH:$HOME/.zvm/bin" 3 | PATH="$PATH:$ZVM_INSTALL/" 4 | -------------------------------------------------------------------------------- /.jupyter/requirements.txt: -------------------------------------------------------------------------------- 1 | jupyter 2 | ipykernel 3 | remote-kernel 4 | black[jupyter] 5 | isort 6 | jupyter_contrib_nbextensions 7 | -------------------------------------------------------------------------------- /.claude/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "statusLine": { 3 | "type": "command", 4 | "command": "~/.claude/statusline-command.sh" 5 | } 6 | } -------------------------------------------------------------------------------- /.config/ranger/colorschemes/dracula.pyo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ferdinandyb/dotfiles/HEAD/.config/ranger/colorschemes/dracula.pyo -------------------------------------------------------------------------------- /.vim/after/ftplugin/gitcommit.vim: -------------------------------------------------------------------------------- 1 | nnoremap t :call insertlinesfzf#insertlines('~/.config/git/committrailers') 2 | -------------------------------------------------------------------------------- /.config/git/commands/git-switch-default: -------------------------------------------------------------------------------- 1 | #/bin/sh 2 | 3 | git switch $(git rev-parse --abbrev-ref origin/HEAD | sed 's:\w\+/\(\w\+\):\1:') 4 | -------------------------------------------------------------------------------- /.shortcuts/10_agenda_search: -------------------------------------------------------------------------------- 1 | #!/data/data/com.termux/files/usr/bin/bash 2 | ~/bin/sync_org_git 3 | source ~/.config/shell/aliases.sh 4 | cas 5 | -------------------------------------------------------------------------------- /.shortcuts/30_search_all: -------------------------------------------------------------------------------- 1 | #!/data/data/com.termux/files/usr/bin/bash 2 | ~/bin/sync_org_git 3 | source ~/.config/shell/aliases.sh 4 | cs 5 | -------------------------------------------------------------------------------- /.vim/after/ftplugin/floggraph.vim: -------------------------------------------------------------------------------- 1 | nnoremap ]c FlogNextCommit 2 | nnoremap [c FlogPrevCommit 3 | set nolist 4 | -------------------------------------------------------------------------------- /.config/regolith3/i3xrocks/conf.d/80_notmuch_unread: -------------------------------------------------------------------------------- 1 | # notmuch unread 2 | [notmuch] 3 | # Uncomment to show an icon 4 | label=✉ 5 | interval=10 6 | -------------------------------------------------------------------------------- /.shortcuts/20_project_search: -------------------------------------------------------------------------------- 1 | #!/data/data/com.termux/files/usr/bin/bash 2 | ~/bin/sync_org_git 3 | source ~/.config/shell/aliases.sh 4 | cps 5 | -------------------------------------------------------------------------------- /.vim/coc-settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "diagnostic.displayByAle": false, 3 | "suggest.noselect": false, 4 | "inlayHint.display": false 5 | } 6 | -------------------------------------------------------------------------------- /.config/nvim/coc-settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "diagnostic.displayByAle": false, 3 | "suggest.noselect": false, 4 | "inlayHint.display": false 5 | } 6 | -------------------------------------------------------------------------------- /.vim/vim-plug-configs/iamcco-markdown-preview.vim: -------------------------------------------------------------------------------- 1 | Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install() }, 'for': ['markdown', 'vim-plug']} 2 | -------------------------------------------------------------------------------- /.config/aerc/imap-folder-map-elte.conf: -------------------------------------------------------------------------------- 1 | Archive=Archívum* 2 | Sent=Elküldött elemek 3 | Spam=Levélszemét 4 | Drafts=Piszkozatok 5 | Inbox=INBOX 6 | Trash=Törölt elemek 7 | -------------------------------------------------------------------------------- /.config/systemd/user/sync-org-git.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=sync org to git 3 | 4 | 5 | [Service] 6 | Type=oneshot 7 | ExecStart=/home/fbence/bin/sync_org_git 8 | -------------------------------------------------------------------------------- /.config/git/commands/git-review-stat: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | REVIEW_BASE="${REVIEW_BASE:-refs/remotes/origin/HEAD}" 4 | 5 | git diff --stat $(git merge-base HEAD $REVIEW_BASE) 6 | -------------------------------------------------------------------------------- /.shortcuts/50_cetli_questions: -------------------------------------------------------------------------------- 1 | #!/data/data/com.termux/files/usr/bin/bash 2 | source ~/.config/shell/aliases.sh 3 | ~/bin/sync_org_git 4 | vim ~/org/fecnidoboz/questions.md 5 | -------------------------------------------------------------------------------- /.vim/after/ftplugin/python.vim: -------------------------------------------------------------------------------- 1 | nnoremap r :Dispatch python3 % 2 | nnoremap c o# %%o 3 | 4 | let b:slime_cell_delimiter = "# %%" 5 | -------------------------------------------------------------------------------- /.config/aerc/imap-folder-map-priestoferis.conf: -------------------------------------------------------------------------------- 1 | Archive=[Gmail]/Összes levél 2 | Sent=[Gmail]/Elküldött levelek 3 | Spam=[Gmail]/Spam 4 | Drafts=[Gmail]/Piszkozatok 5 | Inbox=INBOX 6 | -------------------------------------------------------------------------------- /.gnupg/gpg-agent.conf: -------------------------------------------------------------------------------- 1 | enable-ssh-support 2 | # default-cache-ttl 34560000 3 | # max-cache-ttl 34560000 4 | 5 | # required to be able to run many threads: 6 | auto-expand-secmem 100 7 | -------------------------------------------------------------------------------- /.gcalclirc: -------------------------------------------------------------------------------- 1 | --default-calendar=Bence1: ott lenni 2 | --client-id=383468411712-c7fribvfctpabmnh7d2o8c1n06g4dgkf.apps.googleusercontent.com 3 | --client-secret=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 4 | -------------------------------------------------------------------------------- /.local/bin/yadmlistall: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | function _yadm_list_all(){ 4 | yadm list -a | while read -r line; do 5 | echo $HOME/$line 6 | done 7 | } 8 | 9 | _yadm_list_all 10 | -------------------------------------------------------------------------------- /.vim/nvim-plug-configs/nvim.vim: -------------------------------------------------------------------------------- 1 | Plug 'glacambre/firenvim', { 'do': { _ -> firenvim#install(0) } } 2 | Plug 'nvim-treesitter/nvim-treesitter' 3 | Plug 'nvim-treesitter/nvim-treesitter-context' 4 | -------------------------------------------------------------------------------- /.config/emailconfiguration/trailers: -------------------------------------------------------------------------------- 1 | Acked-by: Bence Ferdinandy 2 | Tested-by: Bence Ferdinandy 3 | Reviewed-by: Bence Ferdinandy 4 | -------------------------------------------------------------------------------- /.config/systemd/user/restic.timer: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Restic backup timer 3 | 4 | [Timer] 5 | OnCalendar=daily 6 | Persistent=true 7 | 8 | 9 | [Install] 10 | WantedBy=default.target 11 | -------------------------------------------------------------------------------- /.config/systemd/user/sync-org-git.timer: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Sync org git timer 3 | 4 | [Timer] 5 | OnBootSec=0min 6 | OnCalendar=*:*:0/5 7 | 8 | [Install] 9 | WantedBy=default.target 10 | -------------------------------------------------------------------------------- /.config/git/ignore: -------------------------------------------------------------------------------- 1 | tags 2 | tags.lock 3 | tags.temp 4 | Session.vim 5 | *.swp 6 | .ipynb_checkpoints 7 | .vimrc 8 | .gcli 9 | .python-version 10 | *.log 11 | 12 | **/.claude/settings.local.json 13 | -------------------------------------------------------------------------------- /.config/systemd/user/vdirsyncer.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=vdirsyncer sync 3 | 4 | [Service] 5 | ExecStart=vdirsyncer sync 6 | Type=oneshot 7 | 8 | [Install] 9 | WantedBy=default.target 10 | -------------------------------------------------------------------------------- /.config/systemd/user/mailsync-low.timer: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Mail Sync low frequency timer 3 | 4 | [Timer] 5 | OnBootSec=1h 6 | OnUnitActiveSec=6h 7 | 8 | [Install] 9 | WantedBy=timers.target 10 | -------------------------------------------------------------------------------- /.config/systemd/user/mailsync-high.timer: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Mail Sync high frequency timer 3 | 4 | [Timer] 5 | OnBootSec=2min 6 | OnUnitActiveSec=1m 7 | 8 | [Install] 9 | WantedBy=default.target 10 | -------------------------------------------------------------------------------- /.config/systemd/user/mailsync-medium.timer: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Mail Sync medium frequency timer 3 | 4 | [Timer] 5 | OnBootSec=5min 6 | OnUnitActiveSec=15m 7 | 8 | [Install] 9 | WantedBy=timers.target 10 | -------------------------------------------------------------------------------- /.config/nvim/init.vim: -------------------------------------------------------------------------------- 1 | set runtimepath^=~/.vim runtimepath+=~/.vim/after 2 | let &packpath = &runtimepath 3 | if exists('g:started_by_firenvim') 4 | runtime! firenvim.vim 5 | else 6 | runtime! vimrc 7 | endif 8 | -------------------------------------------------------------------------------- /.config/systemd/user/tasksync.timer: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Run task sync every 15 min and on boot 3 | 4 | [Timer] 5 | OnBootSec=2min 6 | OnUnitActiveSec=5min 7 | 8 | [Install] 9 | WantedBy=timers.target 10 | -------------------------------------------------------------------------------- /.config/systemd/user/bugwarrior-pull.timer: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Run bugwarrior-pull hourly and on boot 3 | 4 | [Timer] 5 | OnBootSec=10min 6 | OnUnitActiveSec=720min 7 | 8 | [Install] 9 | WantedBy=timers.target 10 | -------------------------------------------------------------------------------- /.config/systemd/user/tasksync.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=taskwarrior sync 3 | 4 | [Service] 5 | ExecStart=%h/.config/systemd/user/tasksync.sh 6 | Type=oneshot 7 | 8 | [Install] 9 | WantedBy=default.target 10 | -------------------------------------------------------------------------------- /.config/systemd/user/vdirsyncer.timer: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Run vdirsyncersync every 15 min and on boot 3 | 4 | [Timer] 5 | OnBootSec=2min 6 | OnUnitActiveSec=5min 7 | 8 | [Install] 9 | WantedBy=timers.target 10 | -------------------------------------------------------------------------------- /bin/haste: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ $# -eq 0 ]; then 4 | URL=$(exec curl -F file=@- https://0x0.st) 5 | else 6 | URL=$(exec curl -F file=@"$1" https://0x0.st) 7 | fi 8 | echo $URL 9 | echo $URL | $HOME/bin/clip 10 | -------------------------------------------------------------------------------- /.vim/after/ftplugin/latex.vim: -------------------------------------------------------------------------------- 1 | set conceallevel=2 2 | let g:vim_markdown_folding_disabled = 1 3 | nnoremap nc :BibtexciteInsert latex 4 | inoremap @@ :BibtexciteInsert latex 5 | -------------------------------------------------------------------------------- /.config/keyboards/selfmadehunmackeylayout.bundle/Contents/Resources/HungarianLinuxMod.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ferdinandyb/dotfiles/HEAD/.config/keyboards/selfmadehunmackeylayout.bundle/Contents/Resources/HungarianLinuxMod.icns -------------------------------------------------------------------------------- /.config/environment.d/X_01_go.conf: -------------------------------------------------------------------------------- 1 | GOBIN=$HOME/.local/bin 2 | GOMODCACHE=$HOME/.cache/go 3 | GOPATH=$HOME/.local/share/go 4 | GOPROXY=direct 5 | GOTELEMETRY=off 6 | # Add Go executables to PATH 7 | PATH=/usr/local/go/bin:$GOPATH/bin:$PATH 8 | -------------------------------------------------------------------------------- /.config/rofi/greenclip-paste-modi.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [ -z "$@" ]; then 4 | greenclip print 5 | else 6 | greenclip print "$1" 7 | coproc (xdotool key --clearmodifiers "Shift+Insert" &) 8 | exit 0 9 | fi 10 | -------------------------------------------------------------------------------- /.vim/vim-plug-configs/vim-auto-save.vim: -------------------------------------------------------------------------------- 1 | " this provides the autosave toggle 2 | Plug '907th/vim-auto-save' 3 | " autosave normally saves on exiting insertmode, which is slow 4 | let g:auto_save_events = ["WinLeave","BufLeave","CursorHold"] 5 | -------------------------------------------------------------------------------- /.config/keyboards/selfmadehunmackeylayout.bundle/Contents/Resources/ProgHungarianLinuxMod.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ferdinandyb/dotfiles/HEAD/.config/keyboards/selfmadehunmackeylayout.bundle/Contents/Resources/ProgHungarianLinuxMod.icns -------------------------------------------------------------------------------- /.config/keyboards/selfmadehunmackeylayout.bundle/Contents/Resources/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ferdinandyb/dotfiles/HEAD/.config/keyboards/selfmadehunmackeylayout.bundle/Contents/Resources/en.lproj/InfoPlist.strings -------------------------------------------------------------------------------- /.config/sioyek/prefs_user.config: -------------------------------------------------------------------------------- 1 | startup_commands toggle_dark_mode 2 | should_launch_new_window 1 3 | new_command _printto lp -d %{command_text} %{file_path} 4 | new_command _print lp %{file_path} 5 | new_command _evince evince %{file_path} 6 | -------------------------------------------------------------------------------- /.config/systemd/user/bugwarrior-pull.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=bugwarrior-pull 3 | 4 | [Service] 5 | Environment="DISPLAY=:0" 6 | ExecStart=/usr/bin/bugwarrior-pull 7 | Type=oneshot 8 | 9 | [Install] 10 | WantedBy=default.target 11 | -------------------------------------------------------------------------------- /.config/systemd/user/rofication.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=rofication daemon 3 | 4 | [Service] 5 | ExecStart=/usr/bin/rofication-daemon 6 | Type=simple 7 | Restart=always 8 | RestartSec=3 9 | 10 | [Install] 11 | WantedBy=default.target 12 | -------------------------------------------------------------------------------- /.local/share/applications/zulip.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Zulip 3 | StartupNotify=true 4 | Terminal=false 5 | Exec=/home/fbence/.local/bin/Zulip-5.9.4-x86_64.AppImage 6 | Icon=/home/fbence/.local/share/applications/zulip.svg 7 | Type=Application 8 | -------------------------------------------------------------------------------- /.config/systemfiles/etc_x11_xorg.conf.d_30-touchpad.conf: -------------------------------------------------------------------------------- 1 | Section "InputClass" 2 | Identifier "SynPS/2 Synaptics TouchPad" 3 | MatchIsTouchpad "on" 4 | Option "Tapping" "on" 5 | Driver "libinput" 6 | Option "NaturalScrolling" "true" 7 | EndSection 8 | -------------------------------------------------------------------------------- /.config/aerc/hooks/mail-sent: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # AERC_ACCOUNT 4 | # AERC_FROM_NAME 5 | # AERC_FROM_ADDRESS 6 | # AERC_SUBJECT 7 | # AERC_TO 8 | # AERC_CC 9 | 10 | AERC_HOOK_ORIGIN="mail-added-hook" AERC_FOLDER=Sent $HOME/.config/aerc/hooks/general 11 | -------------------------------------------------------------------------------- /.config/aerc/hooks/mail-deleted: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # AERC_ACCOUNT 4 | # AERC_FOLDER 5 | 6 | 7 | # exactly the same as mail-added really, so maybe I should just call that here 8 | 9 | AERC_HOOK_ORIGIN="mail-deleted-hook" $HOME/.config/aerc/hooks/general 10 | -------------------------------------------------------------------------------- /.config/regolith3/scripts/searchrecentrofi.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ -z "$@" ] 4 | then 5 | fd --search-path=$HOME/Documents --search-path=$HOME/Codes --search-path=$HOME/Downloads --changed-within 2weeks 6 | else 7 | xdg-open $@ 8 | exit 0; 9 | fi 10 | -------------------------------------------------------------------------------- /.config/rofi/greenclip-paste-fmt-modi.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [ -z "$@" ]; then 4 | greenclip print 5 | else 6 | echo $1 | fmt -w 2000 | xclip -selection clipboard 7 | coproc (xdotool key --clearmodifiers "Shift+Insert" &) 8 | exit 0 9 | fi 10 | -------------------------------------------------------------------------------- /.vim/vim-plug-configs/vim-obsession.vim: -------------------------------------------------------------------------------- 1 | Plug 'tpope/vim-obsession' 2 | " Tpope Session 3 | " start auto saving sessions, tmux needs the default name Session.vim 4 | noremap os :Obsession 5 | noremap ol :source Session.vim " load session 6 | 7 | -------------------------------------------------------------------------------- /.config/aerc/hooks/mail-received: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # AERC_ACCOUNT 4 | # AERC_FOLDER 5 | # AERC_FROM_NAME 6 | # AERC_FROM_ADDRES 7 | # AERC_SUBJECT 8 | # AERC_MESSAGE_ID 9 | 10 | # New mail should only come via mbsync, so there's no need to do anything here. 11 | -------------------------------------------------------------------------------- /.config/systemd/user/davmail.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=davmail service 3 | 4 | [Service] 5 | ExecStart=/usr/bin/davmail %h/.config/davmail/davmail.properties 6 | Type=simple 7 | Restart=always 8 | RestartSec=3 9 | 10 | [Install] 11 | WantedBy=default.target 12 | -------------------------------------------------------------------------------- /.vim/vim-plug-configs/vim-easy-align.vim: -------------------------------------------------------------------------------- 1 | Plug 'junegunn/vim-easy-align' 2 | " Start interactive EasyAlign in visual mode (e.g. vipga) 3 | xmap ga (EasyAlign) 4 | 5 | " Start interactive EasyAlign for a motion/text object (e.g. gaip) 6 | nmap ga (EasyAlign) 7 | 8 | -------------------------------------------------------------------------------- /.vim/vim-plug-configs/vim-polyglot.vim: -------------------------------------------------------------------------------- 1 | Plug 'sheerun/vim-polyglot' 2 | 3 | let g:polyglot_disabled = [ 4 | \'sensible', 5 | \'markdown', 6 | \'python', 7 | \'vue', 8 | \'javascript', 9 | \'csv'] 10 | -------------------------------------------------------------------------------- /.gnupg/gpg.conf: -------------------------------------------------------------------------------- 1 | # GnuPG config file created by KGpg 2 | 3 | default-key 89487CAC018C3DB58BDF360A79768ABA7C3D9B56 4 | encrypt-to D92449B0F2D9363A2DE3260B207C0A2055199A65 5 | 6 | keyserver https://keyserver.ubuntu.com 7 | 8 | auto-key-locate local,wkd,keyserver 9 | use-agent 10 | -------------------------------------------------------------------------------- /.zshenv: -------------------------------------------------------------------------------- 1 | # ZDOTDIR=$HOME/.config/shell/zsh 2 | # source . $ZDOTDIR/.zshenv 3 | if [ -f $HOME/.cargo/env ]; then 4 | . "$HOME/.cargo/env" 5 | fi 6 | 7 | # ZVM 8 | export ZVM_INSTALL="$HOME/.zvm/self" 9 | export PATH="$PATH:$HOME/.zvm/bin" 10 | export PATH="$PATH:$ZVM_INSTALL/" 11 | -------------------------------------------------------------------------------- /.config/systemd/user/throttle.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=throttle service 3 | 4 | [Service] 5 | ExecStart=%h/.local/bin/throttle-server --LOGLEVEL DEBUG 6 | Type=simple 7 | Restart=always 8 | RestartSec=3 9 | KeyringMode=shared 10 | 11 | [Install] 12 | WantedBy=default.target 13 | -------------------------------------------------------------------------------- /.config/flameshot/flameshot.ini: -------------------------------------------------------------------------------- 1 | [General] 2 | contrastOpacity=188 3 | copyPathAfterSave=true 4 | disabledTrayIcon=false 5 | drawColor=#800080 6 | filenamePattern=%F_%H-%M-%S 7 | showDesktopNotification=false 8 | showHelp=false 9 | showStartupLaunchMessage=false 10 | startupLaunch=false 11 | -------------------------------------------------------------------------------- /.local/share/applications/gmail.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Version=1.0 3 | Name=Gmail 4 | Comment=Gmail as a Chrome app 5 | Exec=/opt/google/chrome/chrome --app=https://mail.google.com/mail/u/0/#inbox 6 | Icon=gmail 7 | Terminal=false 8 | StartupWMClass=GmailDesktop 9 | Type=Application 10 | -------------------------------------------------------------------------------- /.local/share/applications/outlook.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Version=1.0 3 | Name=Outlook 4 | Comment=Outlook as a Chrome app 5 | Exec=/opt/google/chrome/chrome --app=https://outlook.office.com/ 6 | Icon=outlook 7 | Terminal=false 8 | StartupWMClass=OutlookDesktop 9 | Type=Application 10 | -------------------------------------------------------------------------------- /.config/hut/config: -------------------------------------------------------------------------------- 1 | instance "sr.ht" { 2 | access-token-cmd pass show sourcehut/tokens/hut 3 | meta { 4 | # You can set the origin for each service. As fallback hut will 5 | # construct the origin from the instance name and the service. 6 | origin "https://meta.sr.ht" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /.local/share/applications/trello.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Version=1.0 3 | Name=Trello 4 | Comment=Trello as a Chrome app 5 | Exec=/usr/bin/brave-browser --app=https://trello.com/benceferdinandy/boards 6 | Icon=trello 7 | Terminal=false 8 | StartupWMClass=TrelloDesktop 9 | Type=Application 10 | -------------------------------------------------------------------------------- /.vim/vim-plug-configs/floaterm.vim: -------------------------------------------------------------------------------- 1 | Plug 'voldikss/vim-floaterm' 2 | 3 | command! Lazygit FloatermNew lazygit 4 | command! LG FloatermNew lazygit 5 | command! Yazi FloatermNew yazi 6 | command! Glow FloatermNew glow -p % 7 | 8 | let g:floaterm_width = 0.95 9 | let g:floaterm_height = 0.95 10 | -------------------------------------------------------------------------------- /.config/glow/glow.yml: -------------------------------------------------------------------------------- 1 | # style name or JSON path (default "auto") 2 | style: "auto" 3 | # show local files only; no network (TUI-mode only) 4 | local: false 5 | # mouse support (TUI-mode only) 6 | mouse: true 7 | # use pager to display markdown 8 | pager: true 9 | # word-wrap at width 10 | width: 80 11 | -------------------------------------------------------------------------------- /.ipython/profile_default/startup/01-fix-error-colors.py: -------------------------------------------------------------------------------- 1 | try: 2 | from IPython.core import ultratb 3 | 4 | ultratb.VerboseTB.tb_highlight = "bg:ansired" 5 | except Exception: 6 | print( 7 | "Error patching background color for tracebacks, they'll be the ugly default instead" 8 | ) 9 | -------------------------------------------------------------------------------- /.local/share/applications/messenger.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Version=1.0 3 | Name=Messenger 4 | Comment=Messenger as a Chrome app 5 | Exec=/opt/google/chrome/chrome --app=https://www.messenger.com/ 6 | Icon=messenger 7 | Terminal=false 8 | StartupWMClass=MessengerDesktop 9 | Type=Application 10 | -------------------------------------------------------------------------------- /.config/git/signifyd-config: -------------------------------------------------------------------------------- 1 | [user] 2 | email = bence.ferdinandy@signifyd.com 3 | [core] 4 | sshCommand = ssh -i ~/.ssh/id_ed25519 -o IdentitiesOnly=yes 5 | [filter "lfs"] 6 | clean = git-lfs clean -- %f 7 | smudge = git-lfs smudge -- %f 8 | process = git-lfs filter-process 9 | required = true 10 | -------------------------------------------------------------------------------- /bin/sync_org_git: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CURDIR=`pwd` 4 | cd $HOME/org 5 | git pull > /dev/null 2>&1 6 | git add **/*.md > /dev/null 2>&1 7 | git add **/.*.md > /dev/null 2>&1 8 | git add -u > /dev/null 2>&1 9 | git commit -m "auto update" > /dev/null 2>&1 10 | git push > /dev/null 2>&1 11 | cd $CURDIR 12 | -------------------------------------------------------------------------------- /bin/any2sixel: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # partly copied from here: https://konfou.xyz/posts/sixel-for-terminal-graphics/ 4 | 5 | if [[ "$1" == "-g" ]]; then 6 | GEOMETRY="$2" 7 | shift 2 8 | fi 9 | for f in "$@"; do 10 | convert -density 300 "$f" -geometry ${GEOMETRY:=800x480} -alpha remove sixel:- 11 | done 12 | -------------------------------------------------------------------------------- /.config/systemd/user/restic.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Mail Sync high frequency 3 | #OnFailure=status-email-user@%n.service 4 | After=local-fs.target 5 | After=network.target 6 | 7 | 8 | [Service] 9 | Type=oneshot 10 | ExecStart=/home/fbence/.restic.sh 11 | 12 | 13 | # https://usher.dev/posts/my-email-setup/ 14 | -------------------------------------------------------------------------------- /.config/git/commands/git-review: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | REVIEW_BASE="${REVIEW_BASE:-refs/remotes/origin/HEAD}" 4 | CHANGED=$(git diff --name-only $(git merge-base HEAD $REVIEW_BASE)) 5 | vim -p ${CHANGED} \ 6 | +"tabdo Gvdiffsplit! $REVIEW_BASE" \ 7 | +"tabdo set foldlevel=9999" \ 8 | +"let g:gitgutter_diff_base = '$REVIEW_BASE'" 9 | -------------------------------------------------------------------------------- /.config/emailconfiguration/cleanupoldmail: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | re='[0-9]+$' 4 | #mdedup ~/.mail/oldmail/ -i maildir -s discard-all-but-one -a delete-discarded 5 | for d in ~/.mail/oldmail/* 6 | do 7 | if [[ $d =~ $re ]] ; then 8 | mdedup $d -i maildir -s discard-all-but-one -a delete-discarded 9 | fi 10 | done 11 | -------------------------------------------------------------------------------- /.config/maildir-rank-addr/config: -------------------------------------------------------------------------------- 1 | maildir = "~/.mail" 2 | addresses = [ 3 | "bence@ferdinandy.com", 4 | "ferdinandy.bence@ttk.elte.hu", 5 | "priestoferis@gmail.com", 6 | "bence.ferdinandy@pharmahungary.com", 7 | "bence.ferdinandy@formsense.com" 8 | ] 9 | template = "{{.Address}}\t{{.Name}}\t{{.NormalizedName}}" 10 | -------------------------------------------------------------------------------- /.local/share/applications/googlecalendar.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Version=1.0 3 | Name=Google Calendar 4 | Comment=Google Calendar as a Chrome app 5 | Exec=/usr/bin/brave-browser --app=https://calendar.google.com/calendar/r 6 | Icon=googlecalendar 7 | Terminal=false 8 | StartupWMClass=GoogleCalendarDesktop 9 | Type=Application 10 | -------------------------------------------------------------------------------- /.vim/vim-plug-configs/vim-swap.vim: -------------------------------------------------------------------------------- 1 | Plug 'machakann/vim-swap' 2 | " g< and g> on English 3 | nmap gö (swap-prev) 4 | nmap gü (swap-next) 5 | 6 | " vim swap text objects 7 | omap i, (swap-textobject-i) 8 | xmap i, (swap-textobject-i) 9 | omap a, (swap-textobject-a) 10 | xmap a, (swap-textobject-a) 11 | -------------------------------------------------------------------------------- /.config/systemd/user/tasksync.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ -d /home/linuxbrew/.linuxbrew ]; then 4 | eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" 5 | fi 6 | task sync 7 | tw_caldav_sync --caldav-url https://nc.vpn.ferdinandy.com/remote.php/dav/calendars/bence --caldav-calendar tw --caldav-user bence --caldav-passwd nextcloud/bence --all 8 | -------------------------------------------------------------------------------- /.local/share/applications/sioyek.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Comment=View pdf documents 3 | Keywords=pdf;ppdf; 4 | StartupNotify=true 5 | Terminal=false 6 | Type=Application 7 | Categories=Office;Viewer 8 | MimeType=application/pdf;application/ppdf; 9 | Icon=sioyek 10 | Exec=/home/fbence/bin/Sioyek-x86_64.AppImage 11 | Name=Sioyek PDF Reader 12 | -------------------------------------------------------------------------------- /.config/systemd/user/mailsync-high.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Mail Sync high frequency 3 | #OnFailure=status-email-user@%n.service 4 | After=local-fs.target 5 | After=network.target 6 | 7 | 8 | [Service] 9 | Type=oneshot 10 | ExecStart=/home/fbence/.config/emailconfiguration/mailsync-high 11 | 12 | 13 | # https://usher.dev/posts/my-email-setup/ 14 | -------------------------------------------------------------------------------- /.config/systemd/user/mailsync-low.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Mail Sync low frequency 3 | #OnFailure=status-email-user@%n.service 4 | After=local-fs.target 5 | After=network.target 6 | 7 | 8 | [Service] 9 | Type=oneshot 10 | ExecStart=/home/fbence/.config/emailconfiguration/mailsync-low 11 | 12 | 13 | # https://usher.dev/posts/my-email-setup/ 14 | -------------------------------------------------------------------------------- /.config/systemd/user/mailsync-medium.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Mail Sync medium frequency 3 | #OnFailure=status-email-user@%n.service 4 | After=local-fs.target 5 | After=network.target 6 | 7 | 8 | [Service] 9 | Type=oneshot 10 | ExecStart=%h/.config/emailconfiguration/mailsync-medium 11 | 12 | 13 | # https://usher.dev/posts/my-email-setup/ 14 | -------------------------------------------------------------------------------- /.vim/after/ftplugin/vue.vim: -------------------------------------------------------------------------------- 1 | au FileType vue silent! call s:set_vue_marks() 2 | function! s:set_vue_marks() 3 | if search("data()","w") 4 | mark d 5 | endif 6 | if search("methods:","w") 7 | mark m 8 | endif 9 | if search("mounted()","w") 10 | mark l 11 | endif 12 | endfunction 13 | 14 | setlocal foldmethod=expr 15 | -------------------------------------------------------------------------------- /.vim/autoload/insertlinesfzf.vim: -------------------------------------------------------------------------------- 1 | 2 | function! insertlinesfzf#insertinput(input) abort 3 | exec 'normal! a' . a:input 4 | endfunction 5 | 6 | function! insertlinesfzf#insertlines(path) 7 | call fzf#run(fzf#wrap('insertrailer', { 8 | \ 'source':'cat ' . a:path, 9 | \ 'sink': function('insertlinesfzf#insertinput') 10 | \})) 11 | endfunction 12 | -------------------------------------------------------------------------------- /.ipython/profile_default/startup/00-base-data-imports.py: -------------------------------------------------------------------------------- 1 | try: 2 | import numpy as np 3 | except ImportError: 4 | pass 5 | try: 6 | import pandas as pd 7 | 8 | pd.options.display.max_columns = 0 9 | except ImportError: 10 | pass 11 | try: 12 | from matplotlib import pyplot as plt 13 | except ImportError: 14 | pass 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /.vim/vim-plug-configs/jupyter.vim: -------------------------------------------------------------------------------- 1 | Plug 'untitled-ai/jupyter_ascending.vim' 2 | Plug 'goerz/jupytext.vim' 3 | 4 | " disable the jupyter-vim bindings 5 | let g:jupyter_mapkeys = 0 6 | 7 | nnoremap x JupyterExecute 8 | nnoremap X JupyterExecuteAll 9 | nmap R JupyterRestartAndExecuteAll 10 | let g:jupyter_ascending_match_pattern=".sync.py" 11 | -------------------------------------------------------------------------------- /bin/tmuxscratch: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | width=${1:-80%} 4 | height=${2:-80%} 5 | if [ "$(tmux display-message -p -F "#{session_name}")" = "scratch" ]; then 6 | tmux detach-client 7 | else 8 | tmux popup -d '#{pane_current_path}' -xC -yC -w$width -h$height -E "tmux attach -t scratch || tmux new -s scratch" 9 | fi 10 | 11 | # https://blog.meain.io/2020/tmux-flating-scratch-terminal/ 12 | -------------------------------------------------------------------------------- /.config/systemfiles/etc_pam.d_login: -------------------------------------------------------------------------------- 1 | #%PAM-1.0 2 | 3 | auth requisite pam_nologin.so 4 | auth include system-local-login 5 | auth optional pam_gnome_keyring.so 6 | account include system-local-login 7 | session include system-local-login 8 | password include system-local-login 9 | session optional pam_gnome_keyring.so auto_start 10 | -------------------------------------------------------------------------------- /.config/environment.d/X_10_fzf.conf: -------------------------------------------------------------------------------- 1 | FZF_DEFAULT_COMMAND='fd --type f' 2 | FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND" 3 | FZF_COMPLETION_TRIGGER='óó' 4 | FZF_DEFAULT_OPTS='--color=fg:#f8f8f2,bg:#282a36,hl:#bd93f9 --color=fg+:#f8f8f2,bg+:#44475a,hl+:#bd93f9 --color=info:#ffb86c,prompt:#50fa7b,pointer:#ff79c6 --color=marker:#ff79c6,spinner:#ffb86c,header:#6272a4 --bind "alt-a:select-all,alt-d:deselect-all"' 5 | -------------------------------------------------------------------------------- /.config/git/commands/git-whose-branch: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | BRANCHES=$(git branch --list --all --format='%(refname)') 4 | 5 | for branch in $BRANCHES; do 6 | rev=origin/HEAD..$branch 7 | num=$(git rev-list $rev | wc -l) 8 | if [ "$num" -gt 0 ]; then 9 | echo "$branch (commits: $num)" 10 | git log --format='%an <%ae>' $rev | sort | uniq | paste -sd "," - 11 | echo "" 12 | fi 13 | done 14 | -------------------------------------------------------------------------------- /.config/systemd/user/manageemail.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | systemctl --user $@ throttle.service 4 | systemctl --user $@ goimapnotify@elte.service 5 | systemctl --user $@ goimapnotify@bence.service 6 | systemctl --user $@ goimapnotify@pharmahungary.service 7 | systemctl --user $@ goimapnotify@priestoferis.service 8 | systemctl --user $@ mailsync-medium.timer 9 | systemctl --user $@ mailsync-low.timer 10 | -------------------------------------------------------------------------------- /.config/aerc/hooks/aerc-shutdown: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # AERC_LIFETIME 4 | 5 | # This could be used to enable/disable goimapnotify if it seems to eat too much: 6 | # systemctl --user disable goimapnotify@bence.service 7 | # systemctl --user disable goimapnotify@elte.service 8 | # systemctl --user disable goimapnotify@pharmahungary.service 9 | # systemctl --user disable goimapnotify@priestoferis.service 10 | -------------------------------------------------------------------------------- /bin/addresslookup: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | LIMIT="${2:-100}" 3 | 4 | if [ $LIMIT -eq 0 ]; then 5 | LIMITARG="" 6 | else 7 | LIMITARG="-m $LIMIT" 8 | fi 9 | 10 | FILES=$HOME/.cache/maildir-rank-addr/*.tsv 11 | 12 | SEARCH="${1:-.}" 13 | # -Zn does n distance levenshtein, ommiting n makes n = 1 14 | ugrep -jPh $LIMITARG --color=never $SEARCH $FILES || echo -e "addressbook@missing\tplease run maildir-rank-addr" 15 | -------------------------------------------------------------------------------- /.config/greenclip.toml: -------------------------------------------------------------------------------- 1 | 2 | [greenclip] 3 | blacklisted_applications = [] 4 | enable_image_support = true 5 | history_file = "/home/fbence/.cache/greenclip.history" 6 | image_cache_directory = "/tmp/greenclip" 7 | max_history_length = 50 8 | max_selection_size_bytes = 0 9 | static_history = ["Nothing here yet."] 10 | trim_space_from_selection = true 11 | use_primary_selection_as_input = false 12 | -------------------------------------------------------------------------------- /.config/emailconfiguration/mailsync-medium: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # sync all appropriate channels with isync 4 | $HOME/.config/emailconfiguration/run-all-mbsync.sh "mailsync-medium" 5 | 6 | # set all unread emails not in Inbox to read 7 | fd -E '*/Inbox/' -E '~/.mail/priestoferis' '\d+\.\d+_\d+\.\w+,U=\d+:2,[^S]*$' ~/.mail -x mv {} {}S 8 | 9 | # send all stuck emails 10 | throttle --origin "mailsync-medium" msmtp-queue -r 11 | -------------------------------------------------------------------------------- /.config/throttle/config.toml: -------------------------------------------------------------------------------- 1 | task_timeout = 60 2 | retry_sequence = [5,15,30,60,120,300,900] 3 | retry_sequence_silent = [5,15,30,60] 4 | notification_cmd = 'notify-send --urgency={urgency} --app-name="throttle" "{job} ({origin})" "({errcode}): {msg}"' 5 | notify_on_counter = 3 6 | job_timeout = 3600 7 | 8 | [[filters]] 9 | pattern = '^mbsync (\w+)-(?!(inbox|archive|sent|drafts)$).+' 10 | substitute = 'mbsync \1-folders' 11 | -------------------------------------------------------------------------------- /.config/i3status-rust/scripts/tailscale-switch-menu: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CHOICE=$(echo -e "PharmaHungary\nFerdinandy\nDisconnect" | rofi -dmenu -p "Tailscale Network") 4 | 5 | case "$CHOICE" in 6 | "PharmaHungary") 7 | sudo tailscale switch 0263 8 | ;; 9 | "Ferdinandy") 10 | sudo tailscale switch 5120 11 | ;; 12 | "Disconnect") 13 | sudo tailscale down 14 | ;; 15 | esac 16 | -------------------------------------------------------------------------------- /.config/systemd/user/tmux.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=tmux default session (detached) 3 | Documentation=man:tmux(1) 4 | After=graphical-session.target 5 | 6 | 7 | [Service] 8 | Type=forking 9 | ExecStart=tmux start-server 10 | 11 | ExecStop=%h/.tmux/plugins/tmux-resurrect/scripts/save.sh 12 | ExecStop=tmux kill-server 13 | # KillMode=control-group 14 | 15 | RestartSec=2 16 | 17 | [Install] 18 | WantedBy=graphical-session.target 19 | -------------------------------------------------------------------------------- /.local/share/applications/aerc.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Version=1.0 3 | Name=aerc 4 | 5 | GenericName=Mail Client 6 | GenericName[de]=Email Client 7 | Comment=Launches the aerc email client 8 | Comment[de]=Startet den aerc Email-Client 9 | Keywords=Email,Mail,IMAP,SMTP 10 | Categories=Office;Network;Email;ConsoleOnly 11 | 12 | Type=Application 13 | Icon=aerc 14 | Terminal=true 15 | Exec=aerc %u 16 | MimeType=x-scheme-handler/mailto 17 | -------------------------------------------------------------------------------- /.config/aerc/templates/forward_as_body: -------------------------------------------------------------------------------- 1 | X-Mailer: aerc {{version}} 2 | 3 | Forwarded message from {{(index .OriginalFrom 0).Name}} <{{(index .OriginalFrom 0).Address}}> on {{dateFormat (.OriginalDate | toLocal) "Mon Jan 2, 2006 at 15:04"}}: 4 | {{ if eq .OriginalMIMEType "text/html" -}} 5 | {{- exec `~/.local/softwarefromsource/aerc/filters/html` .OriginalText -}} 6 | {{- else -}} 7 | {{- .OriginalText -}} 8 | {{- end}} 9 | 10 | {{.Signature}} 11 | -------------------------------------------------------------------------------- /.config/keyboards/selfmadehunmackeylayout.bundle/Contents/version.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildVersion 6 | 7 | ProjectName 8 | selfmadehunmackeylayout 9 | SourceVersion 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.config/emailconfiguration/run-all-mbsync.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ -z "$1" ] 4 | then 5 | origin="run-all-mbsync" 6 | else 7 | origin=$1 8 | fi 9 | 10 | # gathers all the channels in isyncrc 11 | channels=$(grep '^Channel' $HOME/.config/isyncrc | sort | uniq | sed 's/Channel //') 12 | # run the machine dependent channels 13 | echo "$channels" | xargs -i throttle --origin $origin --silent-job "testinternetconnection" --job "mbsync {}" --job "notmuch new" 14 | -------------------------------------------------------------------------------- /.config/goimapnotify/bence.yaml: -------------------------------------------------------------------------------- 1 | configurations: 2 | - 3 | host: mail.ferdinandy.com 4 | port: 993 5 | tls: true 6 | tlsOptions: 7 | rejectUnauthorized: true 8 | username: bence@ferdinandy.com 9 | passwordCmd: 'pass show aerc/bence | head -n1' 10 | xoauth2: false 11 | wait: 0 12 | boxes: 13 | - 14 | mailbox: Inbox 15 | onNewMail: "throttle --job 'mbsync bence-inbox' --job 'notmuch new' --origin 'goimap'" 16 | -------------------------------------------------------------------------------- /.config/goimapnotify/priestoferis.yaml: -------------------------------------------------------------------------------- 1 | configurations: 2 | - 3 | host: imap.gmail.com 4 | port: 993 5 | tls: true 6 | tlsOptions: 7 | rejectUnauthorized: true 8 | username: priestoferis@gmail.com 9 | passwordCmd: oama access priestoferis@gmail.com 10 | xoauth2: true 11 | wait: 0 12 | boxes: 13 | - 14 | mailbox: Inbox 15 | onNewMail: "throttle --job 'mbsync priestoferis-inbox' --job 'notmuch new' --origin 'goimap'" 16 | -------------------------------------------------------------------------------- /.config/aerc/templates/quoted_reply: -------------------------------------------------------------------------------- 1 | X-Mailer: aerc {{version}} 2 | 3 | 4 | On {{dateFormat (.OriginalDate | toLocal) "Mon Jan 02, 2006 at 15:04"}}, {{(index .OriginalFrom 0).Name}} <{{(index .OriginalFrom 0).Address}}> wrote: 5 | {{ if eq .OriginalMIMEType "text/html" -}} 6 | {{- trimSignature (exec `~/.local/softwarefromsource/aerc/filters/html` .OriginalText) | quote -}} 7 | {{- else -}} 8 | {{- trimSignature .OriginalText | quote -}} 9 | {{- end}} 10 | 11 | {{.Signature}} 12 | -------------------------------------------------------------------------------- /.config/agents/tmux.md: -------------------------------------------------------------------------------- 1 | # Tmux 2 | 3 | When trying to interact with tmux use the tmux-mcp-handler subagent whenever possible. 4 | 5 | If you are not sending commands to a shell (e.g. zsh), but something else (like 6 | ipython), then you need to use raw mode and CANNOT use TMUX_MCP_START/DONE idiom. 7 | 8 | When I ask you to become an orchestrator, that means you need to spawn 9 | additional claude code instances in new window but the same session and have 10 | them do subtasks. 11 | -------------------------------------------------------------------------------- /.config/git/committrailers: -------------------------------------------------------------------------------- 1 | Acked-by: Bence Ferdinandy 2 | Tested-by: Bence Ferdinandy 3 | Reviewed-by: Bence Ferdinandy 4 | Signed-off-by: Bence Ferdinandy 5 | Fixes: 6 | Implements: 7 | References: 8 | Link: 9 | Changelog-added: 10 | Changelog-fixed: 11 | Changelog-changed: 12 | Changelog-deprecated: 13 | Cc: 14 | Suggested-by: 15 | Requested-by: 16 | Reported-by: 17 | Co-authored-by: 18 | -------------------------------------------------------------------------------- /.config/goimapnotify/elte.yaml: -------------------------------------------------------------------------------- 1 | configurations: 2 | - 3 | host: outlook.office365.com 4 | port: 993 5 | tls: true 6 | tlsOptions: 7 | rejectUnauthorized: true 8 | username: ferdinandy.bence@ttk.elte.hu 9 | passwordCmd: oama access ferdinandy.bence@ttk.elte.hu 10 | xoauth2: true 11 | wait: 0 12 | boxes: 13 | - 14 | mailbox: Inbox 15 | onNewMail: "throttle --job 'mbsync elte-inbox' --job 'notmuch new' --origin 'goimap'" 16 | -------------------------------------------------------------------------------- /.config/goimapnotify/pharmahungary.yaml: -------------------------------------------------------------------------------- 1 | configurations: 2 | - 3 | host: mail.securebox.hu 4 | port: 993 5 | tls: true 6 | tlsOptions: 7 | rejectUnauthorized: true 8 | username: bence.ferdinandy@pharmahungary.com 9 | passwordCmd: "pass show aerc/pharmahungary | head -n1" 10 | xoauth2: false 11 | wait: 0 12 | boxes: 13 | - 14 | mailbox: Inbox 15 | onNewMail: throttle --job 'mbsync pharmahungary-inbox' --job 'notmuch new' --origin 'goimap' 16 | -------------------------------------------------------------------------------- /.config/polybar/launch.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # Terminate already running bar instances 4 | killall -q polybar 5 | 6 | # Wait until the processes have been shut down 7 | while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done 8 | 9 | # for multimonitor 10 | if type "xrandr"; then 11 | for m in $(xrandr --query | grep " connected" | cut -d" " -f1); do 12 | MONITOR=$m polybar --reload example & disown 13 | done 14 | else 15 | polybar --reload example & disown 16 | fi 17 | -------------------------------------------------------------------------------- /.config/i3/bar.conf: -------------------------------------------------------------------------------- 1 | bar { 2 | status_command i3status-rs 3 | position top 4 | font pango:CaskaydiaCove Nerd Font 9 5 | strip_workspace_numbers yes 6 | colors { 7 | background #002B36 8 | statusline #BCC3C3 9 | separator #93A1A1 10 | focused_workspace #BCC3C3 #BCC3C3 #002B36 11 | active_workspace #002B36 #002B36 #BCC3C3 12 | inactive_workspace #002B36 #002B36 #BCC3C3 13 | urgent_workspace #FF0000 #FF0000 #BCC3C3 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /.config/systemd/user/goimapnotify@.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=start goimapnotify for various mailboxes 3 | # OnFailure=status-email-user@%n.service 4 | After=local-fs.target 5 | After=network.target 6 | StartLimitIntervalSec=3600 7 | StartLimitBurst=5 8 | 9 | 10 | [Service] 11 | Restart=always 12 | RestartSec=60 13 | ExecStart=goimapnotify -wait 0 -conf %h/.config/goimapnotify/%i.yaml 14 | KeyringMode=shared 15 | 16 | [Install] 17 | WantedBy=default.target 18 | # https://usher.dev/posts/my-email-setup/ 19 | -------------------------------------------------------------------------------- /.config/aerc/hooks/aerc-startup: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # $AERC_VERSION 4 | # $AERC_BINARY 5 | 6 | # This could be used to enable/disable goimapnotify if it seems to eat too much: 7 | # systemctl --user enable --now goimapnotify@bence.service 8 | # systemctl --user enable --now goimapnotify@elte.service 9 | # systemctl --user enable --now goimapnotify@pharmahungary.service 10 | # systemctl --user enable --now goimapnotify@priestoferis.service 11 | 12 | $HOME/.config/emailconfiguration/run-all-mbsync.sh "aerc-startup" 13 | -------------------------------------------------------------------------------- /bin/notify-send: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # https://github.com/stuartleeks/wsl-notify-send 4 | if [[ $(grep -i Microsoft /proc/version) ]]; then 5 | # expects this format: 6 | #notify-send --urgency=HIGH --app-name="appname" "message" "details in detail" 7 | shift 8 | appname=`echo $1 | sed 's/--app-name/--appId/g'` 9 | shift 10 | category=$1 11 | shift 12 | /mnt/c/bferdinandy/bin/wsl-notify-send.exe "$appname" --category="$category" "$1" 13 | else 14 | /usr/bin/notify-send "$@" 15 | fi 16 | -------------------------------------------------------------------------------- /.claude/setup.md: -------------------------------------------------------------------------------- 1 | # Setting up claude 2 | 3 | Claude's configuration is atrocious, so some things just need to be written up, 4 | because I can't version control them properly via the settings file. 5 | 6 | ``` 7 | claude mcp add-json --scope user "tmux" '{"command":"tmux-mcp"}' 8 | claude mcp add --scope user --transport sse atlassian https://mcp.atlassian.com/v1/sse 9 | claude mcp add-json --scope user "nvim" '{"command":"mcp-neovim-server", "env": {"ALLOW_SHELL_COMMANDS": "false", "NVIM_SOCKET_PATH": "./.nvim.sock"}} 10 | ``` 11 | -------------------------------------------------------------------------------- /.config/git/commands/git-push-notmp: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # This script is just a toy which I don't actually use. 4 | # Expect bugs. 5 | # Drops commits that are marked tmp 6 | 7 | push() { 8 | export GIT_SEQUENCE_EDITOR=git-push-notmp 9 | git rebase -i origin/HEAD || git rebase --abort && exit 1 10 | git push || git reset ORIG_HEAD && exit 1 11 | git reset ORIG_HEAD 12 | } 13 | 14 | edittodo() { 15 | sed -i 's/\w\+\(\s\+\w\+\s\+\(tmp$\|tmp:\)\)/drop\1/' $1 16 | } 17 | 18 | if [ -z "$1" ]; then 19 | push 20 | else 21 | edittodo $1 22 | fi 23 | -------------------------------------------------------------------------------- /.config/goimapnotify/yettel.conf: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "host": "localhost", 4 | "hostCmd": "", 5 | "port": 1143, 6 | "tls": false, 7 | "tlsOptions": { 8 | "rejectUnauthorized": true 9 | }, 10 | "username": "bferdinandy@yettel.hu", 11 | "usernameCmd": "", 12 | "password": "", 13 | "xoauth2": false, 14 | "wait": 0, 15 | "boxes": [ 16 | { 17 | "mailbox": "Inbox", 18 | "onNewMail": "throttle --job 'mbsync yettel-inbox' --job 'notmuch new' --origin 'goimap'" 19 | } 20 | ] 21 | } 22 | ] 23 | -------------------------------------------------------------------------------- /bin/clip: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | var=$(cat) 4 | if [[ "$(uname)" == "Darwin" ]]; then 5 | # macOS 6 | printf '%s' "$var" | pbcopy 7 | elif [[ $(grep -i Microsoft /proc/version) ]]; then 8 | # To make UTF-8 work properly on WSL 9 | # after changing the system language to use Beta: Use Unicode UTF-8 for global 10 | # language support in settings - and language - language settings - settings 11 | # - system language >time >administrative >administrative >change 12 | # 13 | /mnt/c/Windows/System32/clip.exe <<<$var 14 | else 15 | # X11 16 | xclip -selection c <<<$var 17 | fi 18 | -------------------------------------------------------------------------------- /.vim/vim-plug-configs/vim-slime.vim: -------------------------------------------------------------------------------- 1 | Plug 'jpalardy/vim-slime' 2 | let g:slime_bracketed_paste = 1 3 | let g:slime_default_config = {"socket_name": "default", "target_pane": "1"} 4 | " let g:slime_dont_ask_default = 1 5 | let g:slime_target = "tmux" 6 | 7 | let g:slime_no_mappings = 1 8 | xmap s SlimeRegionSend 9 | nmap sp SlimeParagraphSend 10 | nmap ss SlimeLineSend 11 | nmap s SlimeMotionSend 12 | 13 | nmap s7 SlimeMotionSendiq 14 | " nmap v SlimeConfig 15 | 16 | 17 | nmap S SlimeSendCell 18 | -------------------------------------------------------------------------------- /.vim/plugin/mycommands.vim: -------------------------------------------------------------------------------- 1 | command! CocToggle call myfunctions#coc_toggle() 2 | command! ALEFixToggle call myfunctions#ale_fix_toggle() 3 | command! CocInlayToggle CocCommand document.toggleInlayHint 4 | 5 | command! WrapHard call myfunctions#set_hardwrap() 6 | command! WrapSoft call myfunctions#set_softwrap() 7 | command! -nargs=* -complete=file W w 8 | command! -nargs=* -complete=file Wq wq 9 | 10 | command! FormatThousandWord call myfunctions#make_thousand_separators_word() 11 | command! -range FormatThousandLine ,call myfunctions#make_thousand_separators_line() 12 | -------------------------------------------------------------------------------- /.config/rofi/copypastemodi.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | call_rofi () { 4 | echo "running $1" 5 | rofi -modi \ 6 | 'clipboard:greenclip print,'\ 7 | 'paste:~/.config/rofi/greenclip-paste-modi.sh,'\ 8 | 'fmtpaste:~/.config/rofi/greenclip-paste-fmt-modi.sh,'\ 9 | 'fmtclipboard:~/.config/rofi/greenclip-clipboard-fmt-modi.sh'\ 10 | -show $1 -run-command '{cmd}' 11 | 12 | } 13 | case $1 in 14 | 15 | "clipboard") 16 | call_rofi "clipboard" ;; 17 | "paste") 18 | call_rofi "paste";; 19 | "fmtpaste") 20 | call_rofi "fmtpaste";; 21 | "fmtclipboard") 22 | call_rofi "fmtclipboard";; 23 | esac 24 | -------------------------------------------------------------------------------- /bin/confed: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | export GIT_DIR=$HOME/.local/share/yadm/repo.git 4 | export GIT_WORK_TREE=$HOME 5 | 6 | # Determine which editor to use 7 | extra_args="" 8 | if [ "$1" = "--vim" ]; then 9 | vimvariant=vim 10 | shift 11 | else 12 | if command -v nvim >/dev/null 2>&1; then 13 | vimvariant=nvim 14 | if [ ! -S "$HOME/.nvim.sock" ]; then 15 | extra_args="--listen $HOME/.nvim.sock" 16 | fi 17 | else 18 | vimvariant=vim 19 | fi 20 | fi 21 | 22 | $vimvariant $extra_args \ 23 | -c "cd ~" \ 24 | -c "let g:rooter_change_directory_for_non_project_files = 'home'" \ 25 | -c "silent AutoSaveToggle" \ 26 | -S ~/.local/share/yadm/Session.vim 27 | -------------------------------------------------------------------------------- /.vim/firenvim.vim: -------------------------------------------------------------------------------- 1 | call plug#begin('~/.vim/plugged') 2 | Plug 'glacambre/firenvim', { 'do': { _ -> firenvim#install(0) } } 3 | Plug 'ferdinandyb/vim', { 'as': 'dracula' } 4 | Plug '907th/vim-auto-save' 5 | Plug 'tpope/vim-commentary' 6 | Plug 'machakann/vim-sandwich' 7 | Plug 'AndrewRadev/splitjoin.vim' 8 | source ~/.vim/configs/vim-swap.vim 9 | call plug#end() 10 | 11 | let g:auto_save_events = ["CursorHoldI","CursorHold"] 12 | colorscheme dracula 13 | set laststatus=0 14 | 15 | let g:firenvim_config = { 16 | \ 'localSettings': { 17 | \ '.*': { 18 | \ 'cmdline': 'nvim -c "startinsert"', 19 | \ 'takeover': 'never', 20 | \ }, 21 | \ } 22 | \ } 23 | -------------------------------------------------------------------------------- /.config/agents/directives.md: -------------------------------------------------------------------------------- 1 | # Directives 2 | 3 | Development files may have directives in the form of `@somedirective`. Directives may have shortened versions like `@somedir`. 4 | 5 | When you encounter a directive you need to act upon it, and once resolved 6 | remove the entire directive. 7 | 8 | Each directive is described below, in their own section, the directive and it's, possible shortened versions listed in the header. 9 | 10 | ## @implement, @impl 11 | 12 | Use the instruction provided with the implement directive to implement the change at the place of the directive. 13 | 14 | If the implement block is about a function signature add the necessary 15 | documentation for the signature. 16 | -------------------------------------------------------------------------------- /.config/shell/zsh/customfunctions.zsh: -------------------------------------------------------------------------------- 1 | function myissues(){ 2 | jira issue list -q "assignee = currentUser() AND resolution is NULL" 3 | } 4 | 5 | # function confed(){ 6 | # env GIT_DIR=$HOME/.local/share/yadm/repo.git GIT_WORK_TREE=$HOME \ 7 | # vim -c "cd ~" \ 8 | # -c "let g:rooter_change_directory_for_non_project_files = 'home'" \ 9 | # -c "silent AutoSaveToggle" \ 10 | # -S ~/.local/share/yadm/Session.vim 11 | # } 12 | 13 | function y() { 14 | local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" cwd 15 | yazi "$@" --cwd-file="$tmp" 16 | if cwd="$(command cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then 17 | builtin cd -- "$cwd" 18 | fi 19 | rm -f -- "$tmp" 20 | } 21 | -------------------------------------------------------------------------------- /.ipython/profile_default/startup/40-projectimports.py: -------------------------------------------------------------------------------- 1 | import subprocess 2 | import sys 3 | from pathlib import Path 4 | 5 | def get_git_root(): 6 | try: 7 | result = subprocess.check_output(["git", "rev-parse", "--show-toplevel"], 8 | stderr=subprocess.DEVNULL, 9 | universal_newlines=True) 10 | return Path(result.strip()) 11 | except subprocess.CalledProcessError: 12 | return Path.cwd() 13 | 14 | def add_to_path(path): 15 | git_root = get_git_root() 16 | full_path = git_root / path 17 | if full_path.exists() and str(full_path) not in sys.path: 18 | sys.path.insert(0, str(full_path)) 19 | -------------------------------------------------------------------------------- /.vim/vim-plug-configs/i3wm-kitty-vim-tmux-navigator.vim: -------------------------------------------------------------------------------- 1 | Plug 'christoomey/vim-tmux-navigator' 2 | 3 | let g:tmux_navigator_no_mappings = 1 4 | 5 | nnoremap :TmuxNavigateLeft 6 | nnoremap :TmuxNavigateDown 7 | nnoremap :TmuxNavigateUp 8 | nnoremap :TmuxNavigateRight 9 | nnoremap :TmuxNavigatePrevious 10 | 11 | vnoremap :TmuxNavigateLeftgv 12 | vnoremap :TmuxNavigateDowngv 13 | vnoremap :TmuxNavigateUpgv 14 | vnoremap :TmuxNavigateRightgv 15 | vnoremap :TmuxNavigatePreviousgv 16 | -------------------------------------------------------------------------------- /.config/cloud-init/user-data: -------------------------------------------------------------------------------- 1 | #cloud-config 2 | # 3 | ssh_pwauth: false 4 | # Create my user & SSH keys 5 | users: 6 | - name: fbence 7 | groups: [sudo] 8 | lock_passwd: false 9 | ssh_import_id: 10 | - gh:ferdinandyb 11 | passwd: $6$rounds=4096$BsOROgUGXW1EsRhS$AXXO9qCnqQxGlZfTp5hnRcoLGpe7Vhvu2QXW/C5XSCc7JlP/K48mE8GWsgU57cyS1hojS6NR9ZQqZsWwGb.k21 12 | 13 | groups: 14 | - docker: [fbence] 15 | 16 | apt: 17 | sources: 18 | docker.list: 19 | source: deb [arch=amd64] https://download.docker.com/linux/ubuntu $RELEASE stable 20 | keyid: 9DC858229FC7DD38854AE2D88D81803C0EBFCD88 21 | 22 | packages: 23 | - docker-ce 24 | - docker-ce-cli 25 | - containerd.io 26 | - docker-buildx-plugin 27 | - docker-compose-plugin 28 | -------------------------------------------------------------------------------- /.gnupg/sshcontrol: -------------------------------------------------------------------------------- 1 | # List of allowed ssh keys. Only keys present in this file are used 2 | # in the SSH protocol. The ssh-add tool may add new entries to this 3 | # file to enable them; you may also add them manually. Comment 4 | # lines, like this one, as well as empty lines are ignored. Lines do 5 | # have a certain length limit but this is not serious limitation as 6 | # the format of the entries is fixed and checked by gpg-agent. A 7 | # non-comment line starts with optional white spaces, followed by the 8 | # keygrip of the key given as 40 hex digits, optionally followed by a 9 | # caching TTL in seconds, and another optional field for arbitrary 10 | # flags. Prepend the keygrip with an '!' mark to disable it. 11 | 20511C407A32F1164D11B02937D02CA7D73A9FF0 12 | -------------------------------------------------------------------------------- /.config/polybar/scripts/arch_updates.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euo pipefail 3 | 4 | if ! updates_arch=$(checkupdates 2> /dev/null | wc -l ); then 5 | updates_arch=0 6 | fi 7 | 8 | if ! updates_aur=$(paru -Qum | wc -l); then 9 | # if ! updates_aur=$(cower -u 2> /dev/null | wc -l); then 10 | # if ! updates_aur=$(trizen -Su --aur --quiet | wc -l); then 11 | updates_aur=0 12 | fi 13 | 14 | updates=$(("$updates_arch" + "$updates_aur")) 15 | 16 | #if [ "$updates" -gt 0 ]; then 17 | # echo "# $updates" 18 | #else 19 | # echo "" 20 | #fi 21 | 22 | 23 | re='^[0-9]+$' 24 | if ! [[ $updates_arch =~ $re ]] ; then 25 | updates_aur=999; exit 1 26 | fi 27 | 28 | if ! [[ $updates_arch =~ $re ]] ; then 29 | updates_aur=999; exit 1 30 | fi 31 | 32 | echo "P:$updates_arch Y:$updates_aur" 33 | -------------------------------------------------------------------------------- /.config/emailconfiguration/pharmahungary_signature.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | -- 4 | Bence Ferdinandy, PhD 5 | 6 | R&D associate, Pharmahungary Group 7 | Graphisoft Park, Building I, Zahony u. 7., Budapest, H-1031, Hungary 8 | cell: +36 30 5425054 fax: +36 1 242 7643 9 | 10 | More than a CRO, your creative R&D team 11 | www.pharmahungary.com 12 | 13 | Disclaimer: 14 | The information contained in this e-mail, and any attachment to it, is confidential and intended for the recipient(s) only. No part of this e-mail nor it attachment(s) may be accessed or disclosed by anyone else. Copying or transmission in any form or by any means without permission from the author is prohibited and may be a criminal offence. If you receive this communication unintentionally, please notify the sender by reply immediately and delete the material from your computer. 15 | -------------------------------------------------------------------------------- /.config/aerc/stylesets/default: -------------------------------------------------------------------------------- 1 | # 2 | # aerc default styleset 3 | # 4 | # This styleset uses the terminal defaults as its base. 5 | # More information on how to configure the styleset can be found in 6 | # the aerc-stylesets(7) manpage. Please read the manual before 7 | # modifying or creating a styleset. 8 | 9 | *.default=true 10 | *.selected.reverse=toggle 11 | 12 | title.reverse=true 13 | header.bold=true 14 | 15 | *error.bold=true 16 | error.fg=red 17 | warning.fg=yellow 18 | success.fg=green 19 | 20 | statusline*.default=true 21 | statusline_default.reverse=true 22 | statusline_error.fg=red 23 | statusline_error.reverse=true 24 | 25 | msglist_unread.bold=true 26 | msglist_deleted.fg=gray 27 | 28 | completion_pill.reverse=true 29 | 30 | tab.reverse=true 31 | border.reverse = true 32 | 33 | selector_focused.reverse=true 34 | selector_chooser.bold=true 35 | -------------------------------------------------------------------------------- /.ssh/config.template: -------------------------------------------------------------------------------- 1 | Host socks5proxy 2 | HostName ipordomain 3 | User myuser 4 | DynamicForward 8080 5 | # the next three is needed to put it cleanly in background 6 | ForkAfterAuthentication yes 7 | RequestTTY no 8 | StdinNull yes 9 | # the trick is that sleep doesn't use resources, but once it 10 | # finished the connection will only be killed if the 11 | # socks proxy is not in use anymore, so basically as long as 12 | # you need it, but will autoclose after that 13 | # https://unix.stackexchange.com/a/83812 14 | RemoteCommand sleep 60 15 | 16 | host generichost 17 | hostname domain 18 | user user 19 | port 22 20 | ServerAliveInterval 300 21 | 22 | host hiddenhost 23 | hostname hiddendomain 24 | user user 25 | port 22 26 | ServerAliveInterval 300 27 | # this way generichost doesn't need to have the key needed 28 | # to access hiddenhost 29 | ProxyJump generichost 30 | -------------------------------------------------------------------------------- /bin/khalimport: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Default calendar 4 | CALENDAR="Bence1: ott lenni" 5 | 6 | # Parse flags 7 | while getopts "cp" opt; do 8 | case $opt in 9 | c) 10 | CALENDAR="Családi Naptár" 11 | ;; 12 | p) 13 | CALENDAR=$(khal printcalendars | fzf) 14 | if [ -z "$CALENDAR" ]; then 15 | echo "No calendar selected" >&2 16 | exit 1 17 | fi 18 | ;; 19 | *) 20 | echo "Usage: khalimport [-c] [-p]" >&2 21 | echo " -c: Import to 'Családi Naptár'" >&2 22 | echo " -p: Pick calendar interactively" >&2 23 | echo " Default: Import to 'Bence1: ott lenni'" >&2 24 | exit 1 25 | ;; 26 | esac 27 | done 28 | 29 | # Import from stdin 30 | khal import --batch -a "$CALENDAR" 31 | -------------------------------------------------------------------------------- /.config/i3status-rust/scripts/tailscale-status: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | STATUS=$(tailscale status --json 2>/dev/null) 4 | 5 | if [ $? -ne 0 ] || [ -z "$STATUS" ]; then 6 | echo '{"text":" ✗", "state":"Critical"}' 7 | exit 0 8 | fi 9 | 10 | STATE=$(echo "$STATUS" | jq -r '.BackendState') 11 | DNS_DOMAIN=$(echo "$STATUS" | jq -r '.Self.DNSName') 12 | 13 | if echo "$DNS_DOMAIN" | grep -q "pharmahungary"; then 14 | NETWORK="PH" 15 | elif echo "$DNS_DOMAIN" | grep -q "ferdinandy"; then 16 | NETWORK="FY" 17 | else 18 | NETWORK="?" 19 | fi 20 | 21 | case "$STATE" in 22 | "Running") 23 | echo "{\"text\":\"⇄ $NETWORK\", \"state\":\"Good\"}" 24 | ;; 25 | "Starting") 26 | echo "{\"text\":\"⇄ ~\", \"state\":\"Warning\"}" 27 | ;; 28 | *) 29 | echo "{\"text\":\"⇄ ✗\", \"state\":\"Critical\"}" 30 | ;; 31 | esac 32 | -------------------------------------------------------------------------------- /.local/share/yadm/repo.git/info/sparse-checkout##template: -------------------------------------------------------------------------------- 1 | # never ever remove the template 2 | .local/share/yadm/repo.git/info/sparse-checkout##template 3 | 4 | {% if yadm.class == "minimal" %} 5 | # bare minimum on a remote computer 6 | .vim/** 7 | 8 | # these plugins take a lot of space 9 | !.vim/vim-plug-configs/iamcco-markdown-preview.vim 10 | !.vim/vim-plug-configs/vimspector.vim 11 | 12 | # these plugins have complicated external dependencies 13 | !.vim/vim-plug-configs/coc.vim 14 | !.vim/vim-plug-configs/tags.vim 15 | 16 | .zshrc 17 | .p10k.zsh 18 | .bashrc 19 | .tmux.conf 20 | .tmux/** 21 | .config/shell/** 22 | .config/git/** 23 | .ipython/** 24 | {% endif %} 25 | 26 | {% if yadm.class == "org" %} 27 | # org stuff 28 | .config/task/** 29 | .config/vit/** 30 | .config/bugwarrior/** 31 | .config/systemd/user/** 32 | {% else %} 33 | !.vim/vim-plug-configs/org.vim 34 | {% endif %} 35 | -------------------------------------------------------------------------------- /bin/dros: -------------------------------------------------------------------------------- 1 | #/bin/bash 2 | 3 | export ROS_MASTER_URI=http://192.168.0.200:11311 4 | export ROS_HOSTNAME=192.168.0.98 #your computer's IP 5 | 6 | if [ "$1" ];then 7 | # also works with the simulation container 8 | docker run -it \ 9 | --user=$(id -u $USER):$(id -g $USER) \ 10 | --env="DISPLAY" \ 11 | --env="ROS_MASTER_URI" \ 12 | --env="ROS_HOSTNAME" \ 13 | --net=host \ 14 | --workdir="/home/$USER" \ 15 | --volume="/home/$USER:/home/$USER" \ 16 | --volume="/etc/group:/etc/group:ro" \ 17 | --volume="/etc/passwd:/etc/passwd:ro" \ 18 | --volume="/etc/shadow:/etc/shadow:ro" \ 19 | --volume="/etc/sudoers.d:/etc/sudoers.d:ro" \ 20 | --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \ 21 | osrf/ros:melodic-desktop-full \ 22 | $1 23 | else 24 | echo "call with something to run" 25 | fi 26 | -------------------------------------------------------------------------------- /.config/i3/config.d/35_i3-gaps: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # i3-gaps Window Resize 3 | ############################################################################### 4 | 5 | 6 | ############################################################################### 7 | # i3-gaps Appearance and Behavior 8 | ############################################################################### 9 | 10 | # Specify the distance between windows in pixels. (i3-gaps) 11 | # set_from_resource $i3-wm.gaps.inner.size i3-wm.gaps.inner.size 5 12 | # set_from_resource $i3-wm.gaps.outer.size i3-wm.gaps.outer.size 0 13 | # gaps inner $i3-wm.gaps.inner.size 14 | # gaps outer $i3-wm.gaps.outer.size 15 | 16 | # # Only enable gaps on a workspace when there is at least one container 17 | # set_from_resource $i3-wm.gaps.smart i3-wm.gaps.smart on 18 | # smart_gaps $i3-wm.gaps.smart 19 | -------------------------------------------------------------------------------- /.config/regolith3/i3/config.d/35_i3-gaps: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # i3-gaps Window Resize 3 | ############################################################################### 4 | 5 | 6 | ############################################################################### 7 | # i3-gaps Appearance and Behavior 8 | ############################################################################### 9 | 10 | # Specify the distance between windows in pixels. (i3-gaps) 11 | # set_from_resource $i3-wm.gaps.inner.size i3-wm.gaps.inner.size 5 12 | # set_from_resource $i3-wm.gaps.outer.size i3-wm.gaps.outer.size 0 13 | # gaps inner $i3-wm.gaps.inner.size 14 | # gaps outer $i3-wm.gaps.outer.size 15 | 16 | # # Only enable gaps on a workspace when there is at least one container 17 | # set_from_resource $i3-wm.gaps.smart i3-wm.gaps.smart on 18 | # smart_gaps $i3-wm.gaps.smart 19 | -------------------------------------------------------------------------------- /.local/share/applications/zulip.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vim/after/ftplugin/mail.vim: -------------------------------------------------------------------------------- 1 | nnoremap dq :.,$global/^>\($\\s\)/delete:noh 2 | setlocal spell! spelllang=en_gb,hu 3 | set formatoptions-=r 4 | set fileformat=unix 5 | " set columns=90 6 | set textwidth=0 7 | set wrap 8 | augroup loading goyo " { 9 | autocmd! 10 | autocmd BufReadPost call goyo#execute(0,[]) 11 | autocmd BufReadPost echo "hello" 12 | augroup END " } 13 | " let b:auto_save = 1 14 | " let b:auto_save_events = ["InsertLeave", "TextChanged"] 15 | 16 | nmap i 3]jji 17 | nmap s }o 18 | 19 | 20 | 21 | 22 | nnoremap a :call contactfunction#insertAddressAerc() 23 | nnoremap A :call contactfunction#insertAddress() 24 | 25 | 26 | nnoremap t :call insertlinesfzf#insertlines('~/.config/emailconfiguration/trailers') 27 | 28 | 29 | 30 | let b:coc_enabled = 0 31 | let b:ale_enabled = 0 32 | let b:ale_fix_on_save = 0 33 | -------------------------------------------------------------------------------- /.claude/CLAUDE.md: -------------------------------------------------------------------------------- 1 | @~/.config/agents/git.md 2 | @~/.config/agents/tmux.md 3 | @~/.config/agents/directives.md 4 | 5 | 6 | # shell tools 7 | 8 | I prefer ugrep (ug) over grep, and fd-find (fd) over find. 9 | 10 | # personal config 11 | 12 | I use `yadm` for my dotfiles. There is a README for it at ~/README.md 13 | `yadm` is a drop in replacement for `git` that uses my dotfiles repo. 14 | 15 | # nvim mcp 16 | 17 | Check the cursor position and visual select in nvim for possibly important context. 18 | 19 | # opencode 20 | 21 | If you are running in opencode, remember that after every edit formatters are invoked. For example, when editing python files you need to add import and usage together, otherwise the unused import rule will be triggered and the imports removed. 22 | 23 | # data 24 | 25 | Avoid reading large data files directly, to preserve context. Delegate it to a subagent or use tools like ugrep, ripgrep or jq. 26 | -------------------------------------------------------------------------------- /.vim/vim-plug-configs/goyo.vim: -------------------------------------------------------------------------------- 1 | Plug 'junegunn/goyo.vim' 2 | 3 | function! s:goyo_enter() 4 | if executable('tmux') && strlen($TMUX) 5 | silent !tmux set status off 6 | silent !tmux list-panes -F '\#F' | grep -q Z || tmux resize-pane -Z 7 | endif 8 | if !exists("g:lightweight") 9 | CocDisable 10 | ALEDisable 11 | endif 12 | " set noshowmode 13 | " set noshowcmd 14 | " set scrolloff=999 15 | " ... 16 | endfunction 17 | 18 | function! s:goyo_leave() 19 | if executable('tmux') && strlen($TMUX) 20 | silent !tmux set status on 21 | silent !tmux list-panes -F '\#F' | grep -q Z && tmux resize-pane -Z 22 | endif 23 | " set showmode 24 | " set showcmd 25 | " set scrolloff=5 26 | " ... 27 | if !exists("g:lightweight") 28 | CocEnable 29 | ALEEnable 30 | endif 31 | endfunction 32 | 33 | autocmd! User GoyoEnter nested call goyo_enter() 34 | autocmd! User GoyoLeave nested call goyo_leave() 35 | -------------------------------------------------------------------------------- /.vim/vim-plug-configs/movements.vim: -------------------------------------------------------------------------------- 1 | " if has('nvim') 2 | " Plug 'ggandor/lightspeed.nvim' 3 | " map í Lightspeed_s 4 | " map Í Lightspeed_S 5 | " else 6 | " Plug 'justinmk/vim-sneak' 7 | " map í Sneak_s 8 | " map Í Sneak_S 9 | " let g:sneak#label = 1 10 | " Plug 'unblevable/quick-scope' 11 | " let g:qs_highlight_on_keys = ['f', 'F', 't', 'T'] 12 | " let g:qs_max_chars=150 13 | " endif 14 | Plug 'justinmk/vim-sneak' 15 | Plug 'unblevable/quick-scope' 16 | 17 | let g:qs_highlight_on_keys = ['f', 'F', 't', 'T'] 18 | let g:qs_max_chars=150 19 | map í Sneak_s 20 | map Í Sneak_S 21 | map , Sneak_; 22 | map ; Sneak_, 23 | let g:sneak#label = 1 24 | 25 | 26 | autocmd User SneakLeave highlight clear Sneak 27 | autocmd User PlugLoaded ++nested highlight Sneak ctermfg=84 guifg=#50FA7B ctermbg=237 guibg=#343746 28 | autocmd User PlugLoaded ++nested highlight link SneakScope DraculaBgLight 29 | -------------------------------------------------------------------------------- /.config/wsl/README.md: -------------------------------------------------------------------------------- 1 | # WSL stuff 2 | 3 | ## GPG 4 | 5 | The easiest is to just symlink the windows executable, the CLI works the same. 6 | 7 | ## Proper windowing 8 | 9 | WSL(g) doesn't work well with Windows really, because you can't even snap the windows with the built-in tiling. The solution is running vxcsrv. 10 | 11 | To fix firewall issues: 12 | ``` 13 | Set-NetFirewallProfile -Profile Public -DisabledInterfaceAliases "vEthernet (WSL)" 14 | ``` 15 | 16 | Force usage without disabling wayland: 17 | ``` 18 | export MY_EXT_IP=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}') 19 | export DISPLAY=$MY_EXT_IP:0.0 20 | export GDK_BACKEND=x11 21 | ``` 22 | 23 | ## C:\Users\bferdinandy\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 24 | 25 | Starting up WSL: 26 | ``` 27 | ❯ cat startwsl.bat 28 | @echo off 29 | echo "Starting Ubuntu" 30 | wsl -u root service dbus start 31 | echo "Done" 32 | ``` 33 | 34 | - switcheroo is a pretty good launcher and window changer 35 | -------------------------------------------------------------------------------- /.vim/after/ftplugin/markdown.vim: -------------------------------------------------------------------------------- 1 | nmap gf Markdown_EditUrlUnderCursor 2 | set conceallevel=2 3 | let g:vim_markdown_folding_disabled = 1 4 | let g:vim_markdown_new_list_item_indent = 0 5 | let g:vim_markdown_emphasis_multiline = 0 6 | let g:vim_markdown_frontmatter = 1 7 | let g:vim_markdown_toml_frontmatter = 1 8 | 9 | " https://github.com/preservim/vim-markdown/issues/232 10 | " setlocal comments=b:*,b:+,b:-,b:> 11 | setlocal formatoptions-=q 12 | setlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^\\s*\[-*+]\\s\\+ 13 | 14 | inoremap [[ :w:ZettelFind 15 | nnoremap nc :BibtexciteInsert 16 | inoremap @@ :BibtexciteInsert 17 | 18 | let b:auto_save_events = ["WinLeave","BufLeave","CursorHold","CursorHoldI"] 19 | 20 | 21 | function! VisualCodeBlock() 22 | call search('```', 'b') 23 | normal! j0v 24 | call search('```') 25 | normal! k$ 26 | endfunction 27 | 28 | vnoremap iq call VisualCodeBlock() 29 | omap iq :normal Viq 30 | -------------------------------------------------------------------------------- /.config/ranger/rc.conf: -------------------------------------------------------------------------------- 1 | set preview_images true 2 | set preview_images method kitty 3 | set vcs_aware true 4 | linemode devicons 5 | default_linemode sizehumanreadablemtime 6 | set colorscheme dracula 7 | set update_title true 8 | set update_tmux_title true 9 | set dirname_in_tabs true 10 | setlocal path=~/Downloads sort mtime 11 | 12 | map shell -w echo "Use DD to delete files. It uses trash-cli." 13 | map shell -w echo "Use DD to delete files. It uses trash-cli." 14 | #map DD shell -p trash -v %s 2>&1 15 | map DD shell -s trash-put %s 16 | map fzf_select 17 | map shell dragon -a -x %p --and-exit 18 | map Md linemode devicons 19 | map cw eval fm.execute_console("bulkrename") if fm.thisdir.marked_items else fm.open_console("rename ") 20 | map cz console z%space 21 | map cf zi 22 | map eval fm.tab_new('%d') 23 | 24 | # TODO: make these consistent with vim 25 | map ú move_parent 1 26 | map ő move_parent -1 27 | map Ú traverse 28 | map Ő traverse_backwards 29 | map gd cd /home/fbence/Downloads 30 | 31 | -------------------------------------------------------------------------------- /.vim/vim-plug-configs/writing.vim: -------------------------------------------------------------------------------- 1 | " need to have npm and yarn for markdown preview 2 | Plug 'lervag/vimtex' 3 | " required by vim-markdown but easy-align is probably better 4 | Plug 'godlygeek/tabular' 5 | Plug 'plasticboy/vim-markdown' 6 | " Plug 'alok/notational-fzf-vim' 7 | Plug 'vim-scripts/loremipsum' 8 | " Plug 'vim-pandoc/vim-pandoc' 9 | " Plug 'vim-pandoc/vim-pandoc-syntax' 10 | 11 | " These are overkill but good for inspiration 12 | 13 | " vimtex setup 14 | let g:tex_flavor='latex' 15 | let g:vimtex_view_method='zathura' 16 | let g:vimtex_fold_enabled = 1 17 | " let g:vimtex_quickfix_mode=0 18 | " set conceallevel=1 19 | " let g:tex_conceal='abdmg' 20 | 21 | " usage of vimtex 22 | " - need to start vim with `vim --servername vim`: should add alias 23 | " - run :VimtexCompile to start compilation 24 | 25 | let g:vim_markdown_math = 1 26 | let g:vim_markdown_conceal = 2 27 | let g:vim_markdown_conceal_code_blocks = 0 28 | let g:vim_markdown_strikethrough = 1 29 | let g:vim_markdown_new_list_item_indent = 2 30 | let g:vim_markdown_frontmatter = 1 31 | -------------------------------------------------------------------------------- /.vim/vimrc: -------------------------------------------------------------------------------- 1 | 2 | " run vimrc found in local folder, not safe 3 | " set exrc 4 | 5 | 6 | if empty(glob('~/.vim/autoload/plug.vim')) 7 | silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs 8 | \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim 9 | autocmd VimEnter * PlugInstall --sync | source $MYVIMRC 10 | endif 11 | 12 | if !exists("g:os") 13 | if has("win64") || has("win32") || has("win16") 14 | let g:os = "Windows" 15 | else 16 | let g:os = split(system('uname -a'))[-1] 17 | endif 18 | endif 19 | 20 | " leaders need to be set early because it is not dynamical 21 | let mapleader="\" 22 | let maplocalleader="\" 23 | 24 | let g:polyglot_disabled = ['markdown.plugin'] 25 | 26 | let g:java_ignore_javadoc = 1 27 | let g:java_ignore_html = 1 28 | let g:java_ignore_markdown = 1 29 | 30 | call plug#begin() 31 | runtime! vim-plug-configs/*.vim 32 | if has('nvim') 33 | runtime! nvim-plug-configs/*.vim 34 | endif 35 | call plug#end() 36 | 37 | doautocmd User PlugLoaded 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /.ctags.d/default.tags: -------------------------------------------------------------------------------- 1 | --langdef=tex2 2 | --langmap=tex2:.tex 3 | --regex-tex2=/\\label[ \t]*\*?\{[ \t]*([^}]*)\}/\1/l,label/ 4 | 5 | --langdef=bib 6 | --langmap=bib:.bib 7 | --regex-bib=/^@[A-Za-z]+\{([^,]+),/\1/e,BibTeX-Entries/i 8 | --regex-bib=/^@string\{([^ "#%')(,=}{]+)/\1/s,BibTeX-Strings/i 9 | --regex-bib=/author[[:space:]]*=[[:space:]]*("([^"]+)"|\{([^\}]+)\})[[:space:]]*,?[[:space:]]*$/\2\3/a,BibTeX-Authors/i 10 | 11 | 12 | --exclude=*.min.* 13 | --exclude=*.spec.* 14 | --exclude=*.test.* 15 | --exclude=*.stories.* 16 | --exclude=*.tar.* 17 | --exclude=.*bundle.* 18 | --exclude=.Master 19 | --exclude=.bak 20 | --exclude=.cache 21 | --exclude=.class 22 | --exclude=.csproj 23 | --exclude=.csproj.user 24 | --exclude=.dll 25 | --exclude=.map 26 | --exclude=.pdb 27 | --exclude=.pyc 28 | --exclude=.sln 29 | --exclude=.swp 30 | --exclude=.tmp 31 | --exclude=bower_components 32 | --exclude=coverage 33 | --exclude=cscope.* 34 | --exclude=dist 35 | --exclude=min 36 | --exclude=node_modules 37 | --exclude=tags 38 | --exclude=test 39 | --exclude=tests 40 | --exclude=vendor 41 | --exclude=.ipynb_checkpoint 42 | -------------------------------------------------------------------------------- /.config/starship.toml: -------------------------------------------------------------------------------- 1 | "$schema" = 'https://starship.rs/config-schema.json' 2 | continuation_prompt = "▶▶" 3 | 4 | 5 | add_newline = false 6 | format="$sudo$all" 7 | 8 | 9 | [c] 10 | symbol = " " 11 | 12 | 13 | [character] 14 | error_symbol = "[❯](bold #ff5555)" 15 | success_symbol = "[❯](bold #50fa7b)" 16 | 17 | [cmd_duration] 18 | style = "bold #f1fa8c" 19 | 20 | 21 | [directory] 22 | read_only = " " 23 | truncate_to_repo = false 24 | truncation_symbol = ".../" 25 | 26 | [docker_context] 27 | symbol = " " 28 | 29 | 30 | [git_branch] 31 | symbol = " " 32 | style = "bold #ff79c6" 33 | 34 | [git_state] 35 | disabled = false 36 | 37 | [git_status] 38 | style = "bold #ff5555" 39 | 40 | [golang] 41 | symbol = " " 42 | 43 | 44 | [julia] 45 | symbol = " " 46 | 47 | 48 | [nodejs] 49 | symbol = " " 50 | 51 | [package] 52 | symbol = " " 53 | 54 | 55 | [python] 56 | symbol = " " 57 | pyenv_version_name = false 58 | style = "bold #ffb86c" 59 | 60 | [rust] 61 | symbol = " " 62 | 63 | [sudo] 64 | disabled = false 65 | symbol="root" 66 | style = "bold red" 67 | format='\[[$symbol]($style)\]' 68 | -------------------------------------------------------------------------------- /.vim/after/ftplugin/vimwiki.vim: -------------------------------------------------------------------------------- 1 | nmap VimwikiRemoveHeaderLevel 2 | nmap >h VimwikiAddHeaderLevel 3 | nunmap - 4 | nunmap = 5 | nmap ]w VimwikiFollowLink 6 | nmap [w VimwikiGoBackLink 7 | nmap ]sw VimwikiSplitLink 8 | nmap ]vw VimwikiVSplitLink 9 | 10 | set foldlevel=1 11 | 12 | 13 | function! DiaryWeeklyTemplate() 14 | let l:weekstart = expand('%:t:r') 15 | let l:ws_unix = strptime('%Y-%m-%d', l:weekstart) 16 | let l:weekend = strftime('%Y-%m-%d', l:ws_unix + 7*24*60*60) 17 | let l:weeknumber = strftime("%W", l:ws_unix) 18 | call append(line('$') - 1 , "# Week " . l:weeknumber) 19 | call append(line('$') - 1 , "") 20 | call append(line('$') - 1 , "") 21 | call append(line('$') - 1 , "") 22 | call append(line('$') - 1, "# Task reports") 23 | call append(line('$') - 1, "## completed | end.after:" . l:weekstart . " and end.before:". l:weekend) 24 | call append(line('$') - 1, "## added | entry.after:" . l:weekstart . " and entry.before:". l:weekend) 25 | endfunction 26 | -------------------------------------------------------------------------------- /.local/bin/msmtp-queue: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | ##-------------------------------------------------------------- 4 | ## 5 | ## msmtp-queue : wrapper script for msmtpq 6 | ## to expose the management functions 7 | ## for the msmtp queue 8 | ## Copyright (C) 2011 Chris Gianniotis 9 | ## 10 | ## This program is free software: you can redistribute it and/or modify 11 | ## it under the terms of the GNU General Public License as published by 12 | ## the Free Software Foundation, either version 3 of the License, or, at 13 | ## your option, any later version. 14 | ## 15 | ##-------------------------------------------------------------- 16 | 17 | ## msmtp-queue 18 | ## is only a wrapper 19 | ## it invokes the queue management functions of msmtpq 20 | ## by calling it as msmtpq --q-mgmt 21 | ## 22 | ## all configuration and documentation is in the msmtpq script 23 | 24 | ## note that for 'special circumstances' 25 | ## (e.g. embedded systems, etc.) 26 | ## where the msmtpq script itself is not on the path 27 | ## change the below line to be 28 | ## exec /path/to/msmtpq --q-mgmt 29 | 30 | exec msmtpq --q-mgmt "$1" 31 | -------------------------------------------------------------------------------- /.config/i3status-rust/config.toml: -------------------------------------------------------------------------------- 1 | [theme] 2 | theme = "plain" 3 | [theme.overrides] 4 | idle_bg = "#002B36" 5 | idle_fg = "#BCC3C3" 6 | info_bg = "#002B36" 7 | info_fg = "#BCC3C3" 8 | good_bg = "#002B36" 9 | good_fg = "#BCC3C3" 10 | warning_bg = "#ffb52a" 11 | warning_fg = "#002B36" 12 | critical_bg = "#FF0000" 13 | critical_fg = "#BCC3C3" 14 | separator = "│" 15 | 16 | [icons] 17 | icons = "material-nf" 18 | 19 | [[block]] 20 | block = "custom" 21 | command = "~/.config/i3status-rust/scripts/focused-window-name -s 50" 22 | interval = 1 23 | 24 | [[block]] 25 | block = "custom" 26 | command = "~/.config/i3status-rust/scripts/tailscale-status" 27 | interval = 5 28 | json = true 29 | 30 | [[block.click]] 31 | button = "left" 32 | cmd = "~/.config/i3status-rust/scripts/tailscale-switch-menu" 33 | update = true 34 | 35 | [[block.click]] 36 | button = "right" 37 | cmd = "tailscale down || tailscale up" 38 | update = true 39 | 40 | [[block]] 41 | block = "battery" 42 | device = "BAT0" 43 | format = " $icon $percentage " 44 | full_format = " $icon $percentage " 45 | 46 | [[block]] 47 | block = "time" 48 | interval = 1 49 | format = " $timestamp.datetime(f:'%a %d %H:%M:%S') " 50 | -------------------------------------------------------------------------------- /.vim/autoload/contactfunction.vim: -------------------------------------------------------------------------------- 1 | function! contactfunction#insertAddressAerc() 2 | call fzf#run(fzf#wrap("insertaddress", { 3 | \ 'source':'addresslookup . 0', 4 | \ 'sink*': function("contactfunction#insertContactsLine"), 5 | \ 'options': '--no-sort -i --multi --exact' 6 | \})) 7 | endfunction 8 | 9 | function! contactfunction#insertAddress() 10 | call fzf#run(fzf#wrap("insertaddress", { 11 | \ 'source':'addresslookup . 0', 12 | \ 'sink': function("contactfunction#insertContact"), 13 | \ 'options': '--no-sort -i --exact' 14 | \})) 15 | endfunction 16 | 17 | function! contactfunction#insertContactsLine(names) abort 18 | for name in a:names 19 | call contactfunction#insertContactLine(name) 20 | endfor 21 | endfunction 22 | 23 | function! contactfunction#insertContactLine(name) abort 24 | let [address, name; rest] = split(a:name,"\t") 25 | call append(line('.'), ' ' . name . " <" . address . ">,") 26 | endfunction 27 | 28 | function! contactfunction#insertContact(name) abort 29 | let [address, name; rest] = split(a:name,"\t") 30 | exec 'normal! a' . name . " <" . address . ">\" 31 | endfunction 32 | -------------------------------------------------------------------------------- /.config/yadm/minimalbootstrap: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # https://stackoverflow.com/questions/76984446/bash-script-seems-to-be-skipping-lines 4 | # see the above thread for some interesting things 5 | 6 | # TODO: detect if we're running in a terminal and remove escape sequences if not 7 | 8 | echo -e "\033[1mrunning minimal bootstrap\033[0m" 9 | 10 | mkdir -p ~/.local/bin 11 | 12 | echo -e "\033[1msetting up yadm with local.class minimal\033[0m" 13 | curl -fLo ~/.local/bin/yadm https://github.com/TheLocehiliosan/yadm/raw/master/yadm && chmod a+x ~/.local/bin/yadm 14 | ~/.local/bin/yadm clone https://github.com/ferdinandyb/dotfiles.git 15 | ~/.local/bin/yadm config --add local.class minimal 16 | ~/.local/bin/yadm sparse-checkout reapply 17 | 18 | echo -e "\033[1minstalling fzf\033[0m" 19 | git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf 20 | ~/.fzf/install 21 | 22 | echo -e "\033[1minstalling zoxide\033[0m" 23 | curl -sS https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | bash 24 | 25 | echo -e "\033[1minstalling vim plugins\033[0m" 26 | vim +PlugUpdate '+qall!' 27 | 28 | echo -e "\033[1mchange default shell to zsh\033[0m" 29 | chsh -s $(which zsh) 30 | -------------------------------------------------------------------------------- /.vim/vim-plug-configs/vimspector.vim: -------------------------------------------------------------------------------- 1 | Plug 'puremourning/vimspector' 2 | Plug 'sagi-z/vimspectorpy', { 'do': { -> vimspectorpy#update() } } 3 | 4 | let g:vimspector_install_gadgets = [ 'debugpy', 'CodeLLDB', 'delve' ] 5 | let g:vimspectorpy#tmux#split = "h" 6 | let g:vimspectorpy#tmux#size = 100 7 | " for normal mode - the word under the cursor 8 | nmap di VimspectorBalloonEval 9 | " for visual mode, the visually selected text 10 | xmap di VimspectorBalloonEval 11 | 12 | nmap vc VimspectorContinue 13 | nmap vs VimspectorStop 14 | nmap vr VimspectorRestart 15 | nmap vp VimspectorPause 16 | nmap vb VimspectorToggleBreakpoint 17 | nmap vB VimspectorToggleConditionalBreakpoint 18 | nmap vf VimspectorAddFunctionBreakpoint 19 | nmap vo VimspectorRunToCursor 20 | nmap vj VimspectorStepOver 21 | nmap vl VimspectorStepInto 22 | nmap vh VimspectorStepOut 23 | nmap vw :VimspectorWatch 24 | nmap vq :VimspectorReset 25 | nmap VimspectorUpFrame 26 | nmap VimspectorDownFrame 27 | nmap B VimspectorBreakpoints 28 | nmap D VimspectorDisassemble 29 | -------------------------------------------------------------------------------- /.config/keyboards/selfmadehunmackeylayout.bundle/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleIdentifier 6 | org.sil.ukelele.keyboardlayout.selfmadehun 7 | CFBundleName 8 | selfmadehunmackeylayout 9 | CFBundleVersion 10 | 11 | KLInfo_HungarianLinuxMod 12 | 13 | TICapsLockLanguageSwitchCapable 14 | 15 | TISIconIsTemplate 16 | 17 | TISInputSourceID 18 | org.sil.ukelele.keyboardlayout.selfmadehun.hungarianlinuxmod 19 | TISIntendedLanguage 20 | hu 21 | 22 | KLInfo_ProgHungarianLinuxMod 23 | 24 | TICapsLockLanguageSwitchCapable 25 | 26 | TISIconIsTemplate 27 | 28 | TISInputSourceID 29 | org.sil.ukelele.keyboardlayout.selfmadehun.proghungarianlinuxmod 30 | TISIntendedLanguage 31 | hu 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /.Xresources: -------------------------------------------------------------------------------- 1 | ! workspaces 2 | !! fancy names 3 | wm.workspace.00.name: 0: 0  4 | wm.workspace.01.name: 1: 1  5 | wm.workspace.06.name: 6: 6  6 | wm.workspace.07.name: 7: 7  7 | wm.workspace.08.name: 8: 8  8 | /* wm.workspace.09.name: 9: 9  */ 9 | wm.workspace.09.name: 9: 9 10 | !! not fancy names 11 | wm.workspace.02.name: 2: 2 12 | wm.workspace.03.name: 3: 3 13 | wm.workspace.04.name: 4: 4 14 | wm.workspace.05.name: 5: 5 15 | wm.workspace.10.name: 10: 10 16 | wm.workspace.11.name: 11: 11 17 | wm.workspace.12.name: 12: 12 18 | wm.workspace.13.name: 13: 13 19 | wm.workspace.14.name: 14: 14 20 | wm.workspace.15.name: 15: 15 21 | wm.workspace.16.name: 16: 16 22 | wm.workspace.17.name: 17: 17 23 | wm.workspace.18.name: 18: 18 24 | wm.workspace.19.name: 19: 19 25 | 26 | 27 | wm.binding.split_h: ü 28 | wm.binding.split_v: ö 29 | wm.binding.next_free: u 30 | wm.binding.take_next_free: Mod1+u 31 | wm.binding.move_next_free: Shift+u 32 | wm.binding.focus_child: y 33 | wm.binding.swap_focus: comma 34 | -------------------------------------------------------------------------------- /.config/opencode/AGENTS.md: -------------------------------------------------------------------------------- 1 | @~/.config/agents/tmux.md 2 | @~/.config/agents/directives.md 3 | 4 | # CRITICAL: Python Edits 5 | 6 | Formatters (ruff) run after EVERY edit. They WILL delete unused imports. 7 | 8 | **RULE**: When adding an import, you MUST include it in the SAME edit as the code that uses it. Never add an import in a separate edit. 9 | 10 | WRONG (import gets deleted): 11 | 12 | - Edit 1: add `import pandas as pd` 13 | - Edit 2: add `df = pd.DataFrame()` 14 | 15 | CORRECT (single edit): 16 | 17 | - Edit 1: add both `import pandas as pd` AND `df = pd.DataFrame()` 18 | 19 | # shell tools 20 | 21 | I prefer ugrep (ug) over grep, and fd-find (fd) over find. 22 | 23 | # personal config 24 | 25 | I use `yadm` for my dotfiles. There is a README for it at ~/README.md 26 | `yadm` is a drop in replacement for `git` that uses my dotfiles repo. 27 | 28 | # nvim mcp 29 | 30 | Check the cursor position and visual select in nvim for possibly important context. 31 | 32 | # data 33 | 34 | Avoid reading large data files directly, to preserve context. Delegate it to a subagent or use tools like ugrep, ripgrep or jq. 35 | 36 | # bash tool 37 | 38 | NEVER prepend cd to a command if you are already in the same directory. Resolve shorthands like `~` and `$HOME` when determining this. 39 | -------------------------------------------------------------------------------- /.vim/vim-plug-configs/org.vim: -------------------------------------------------------------------------------- 1 | Plug 'vimwiki/vimwiki' 2 | Plug 'michal-h21/vim-zettel' 3 | Plug 'tools-life/taskwiki' 4 | Plug 'ferdinandyb/bibtexcite.vim' 5 | 6 | let g:bibtexcite_bibfile = $HOME . "/org/zotero.bib" 7 | let g:bibtexcite_floating_window_border = ['│', '─', '╭', '╮', '╯', '╰'] 8 | let g:bibtexcite_openfilecommand = 'zathura' 9 | 10 | 11 | let g:vimwiki_list = [{ 12 | \ 'path': '~/org/', 13 | \ 'syntax': 'markdown', 14 | \ 'ext': '.md', 15 | \ 'diary_frequency':'weekly', 16 | \ 'auto_diary_index':1, 17 | \ 'links_space_char': '_', 18 | \ 'auto_tags': 1, 19 | \ 'auto_generate_links': 1, 20 | \ 'auto_generate_tags': 1, 21 | \}] 22 | let g:vimwiki_global_ext = 0 23 | let g:vimwiki_markdown_link_ext = 1 24 | let g:vimwiki_dir_link = '' " this is the default, but maybe 'index' would be better 25 | let g:vimwiki_key_mappings = 26 | \ { 27 | \ 'all_maps': 1, 28 | \ 'global': 1, 29 | \ 'headers': 1, 30 | \ 'text_objs': 1, 31 | \ 'table_format': 1, 32 | \ 'table_mappings': 1, 33 | \ 'lists': 1, 34 | \ 'links': 0, 35 | \ 'html': 0, 36 | \ 'mouse': 0, 37 | \ } 38 | 39 | " let g:vimwiki_filetypes = ['markdown', 'pandoc'] 40 | 41 | 42 | let g:zettel_options = [{'rel_path': 'zettel/'}] 43 | -------------------------------------------------------------------------------- /.config/regolith3/i3status-rs.toml: -------------------------------------------------------------------------------- 1 | theme = "semi-native" 2 | icons = "material-nf" 3 | 4 | 5 | [[block]] 6 | block = "bluetooth" 7 | mac = "04:ED:33:CA:23:E8" 8 | hide_disconnected = true 9 | format = "" 10 | 11 | [[block]] 12 | block = "music" 13 | format = "$combo.str(20)" 14 | player = "spotify" 15 | 16 | [[block]] 17 | block = "rofication" 18 | interval = 1 19 | socket_path = "/tmp/rofi_notification_daemon" 20 | 21 | [[block]] 22 | block = "disk_space" 23 | path="/" 24 | info_type = "available" 25 | alert = 10.0 26 | warning = 15.0 27 | format = "$percentage.eng(2)" 28 | 29 | [[block]] 30 | block = "memory" 31 | display_type = "memory" 32 | format_mem = "$mem_used_percents.eng(1)" 33 | format_swap = "$swap_used_percents.eng(2)" 34 | 35 | [[block]] 36 | block = "cpu" 37 | 38 | [[block]] 39 | block = "load" 40 | interval = 5 41 | 42 | # [[block]] 43 | # block = "sound" 44 | 45 | [[block]] 46 | block = "custom" 47 | command="~/.config/regolith3/scripts/notification" 48 | interval=1 49 | json=true 50 | 51 | [[block]] 52 | block = "time" 53 | interval = 1 54 | format = "%b. %d. %H:%M:%S" 55 | 56 | [[block]] 57 | block = "battery" 58 | format = "$percentage|N/A" 59 | 60 | # [[block]] 61 | # block = "notmuch" 62 | # query = "tag:unread" 63 | # threshold_warning = 1 64 | # threshold_critical = 10 65 | -------------------------------------------------------------------------------- /.config/aerc/generateNotmuchMap.py: -------------------------------------------------------------------------------- 1 | MAILDIRS = ["elte", "priestoferis", "pharmahungary", "elte", "bence"] 2 | 3 | FOLDERS = [ 4 | "Inbox", 5 | "1_megválaszolni", 6 | "2_rám_vár", 7 | "3_másra_vár", 8 | "4_olvasni", 9 | "5_információ", 10 | "6_visszaigazolások", 11 | "7_hivatalos+pénzügyek", 12 | "8_talán", 13 | "Sent", 14 | "Archive", 15 | ] 16 | 17 | 18 | with open("notmuchmap.conf", "w") as f: 19 | # RECENT 20 | s = "Recent=date:30days..today and not (" 21 | for i, m in enumerate(MAILDIRS): 22 | s += f"path:{m}/Spam/**" 23 | if i != len(MAILDIRS) - 1: 24 | s += " or " 25 | s += ")\n" 26 | f.write(s) 27 | 28 | # THREADED INBOX 29 | s = 'InboxThreaded=thread:"{' 30 | for i, m in enumerate(MAILDIRS): 31 | s += f"path:{m}/Inbox/**" 32 | if i != len(MAILDIRS) - 1: 33 | s += " or " 34 | s += '}"\n' 35 | f.write(s) 36 | 37 | # FOLDERS 38 | for folder in FOLDERS: 39 | s = f"{folder}=" 40 | for i, m in enumerate(MAILDIRS): 41 | s += f"path:{m}/{folder}/**" 42 | if i != len(MAILDIRS) - 1: 43 | s += " or " 44 | if folder == "Archive": 45 | s += " or path:oldmail/**\n" 46 | else: 47 | s += "\n" 48 | f.write(s) 49 | -------------------------------------------------------------------------------- /.config/i3/config.d/29_workspace-names: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Workspace Names 3 | # These are the labels which define each i3 workspace. 4 | ############################################################################### 5 | 6 | set_from_resource $ws0 wm.workspace.00.name "0" 7 | set_from_resource $ws1 wm.workspace.01.name "1" 8 | set_from_resource $ws2 wm.workspace.02.name "2" 9 | set_from_resource $ws3 wm.workspace.03.name "3" 10 | set_from_resource $ws4 wm.workspace.04.name "4" 11 | set_from_resource $ws5 wm.workspace.05.name "5" 12 | set_from_resource $ws6 wm.workspace.06.name "6" 13 | set_from_resource $ws7 wm.workspace.07.name "7" 14 | set_from_resource $ws8 wm.workspace.08.name "8" 15 | set_from_resource $ws9 wm.workspace.09.name "9" 16 | set_from_resource $ws10 wm.workspace.10.name "10" 17 | set_from_resource $ws11 wm.workspace.11.name "11" 18 | set_from_resource $ws12 wm.workspace.12.name "12" 19 | set_from_resource $ws13 wm.workspace.13.name "13" 20 | set_from_resource $ws14 wm.workspace.14.name "14" 21 | set_from_resource $ws15 wm.workspace.15.name "15" 22 | set_from_resource $ws16 wm.workspace.16.name "16" 23 | set_from_resource $ws17 wm.workspace.17.name "17" 24 | set_from_resource $ws18 wm.workspace.18.name "18" 25 | set_from_resource $ws19 wm.workspace.19.name "19" 26 | -------------------------------------------------------------------------------- /.ipython/profile_default/startup/10-clip.py: -------------------------------------------------------------------------------- 1 | """ 2 | For getting data out of ipython. 3 | """ 4 | 5 | import importlib 6 | 7 | if importlib.util.find_spec("clipman") is None: 8 | import sys 9 | 10 | sys.exit(0) 11 | 12 | import clipman 13 | 14 | clipman.init() 15 | 16 | 17 | def clip(data=None, **kwargs): 18 | """ 19 | 20 | If no data is given, it will try to copy the last output stored in 21 | Out. If an input is given, it will try to do something smart. 22 | 23 | - pandas: to_markdown() called 24 | 25 | """ 26 | 27 | def getrepr(data): 28 | """ 29 | 30 | We can't use match/case here to make sure it doesn't die in an 31 | older environment. We also need to try/except any reference to 32 | certain types coming from modules which may or may not be present. 33 | 34 | """ 35 | if hasattr(data, "to_markdown"): 36 | data = data.to_markdown(**kwargs) 37 | elif hasattr(data, "toPandas"): 38 | data = data.toPandas().to_markdown(**kwargs) 39 | 40 | 41 | if data is not None: 42 | # using __repr__ here would yank verbatim as you 43 | # would type in source code (e.g. leave a \n in ) 44 | return data.__str__() 45 | return Out[max(list(Out.keys()))] 46 | 47 | clipman.set(getrepr(data)) 48 | -------------------------------------------------------------------------------- /.vim/plugin/hungarian_keymap.vim: -------------------------------------------------------------------------------- 1 | " set langmap=\ 2 | " \ő[, 3 | " \Ő{, 4 | " \ú], 5 | " \Ú}, 6 | " \é:, 7 | " \á`, 8 | " \ű', 9 | " \ö<, 10 | " \ü>, 11 | " \ó= 12 | " 13 | " 14 | " Langmap is broken currently, see https://github.com/vim/vim/issues/3018 15 | " This means we need to manually add the required mappings. Unfortunately, 16 | " while langmap would work for arbitrary stuff (e.g. translate úú -> ]], in 17 | " any mode). For mappings where the actual target mapping is something like 18 | " ]b, we can get away with úb, but for double mappings, we need to spell them 19 | " out explicitly, because vim will look for a nonexistent úú mapping 20 | " otherwise. We also need to spell it out for all modes explicitly. 21 | " 22 | " Since the amount of double mappings would blow up, we only add ones that we 23 | " know are actually used, for the single ones we add everything. 24 | 25 | nmap ő [ 26 | xmap ő [ 27 | omap ő [ 28 | 29 | nmap ú ] 30 | omap ú ] 31 | xmap ú ] 32 | 33 | nmap őő [[ 34 | nmap úú ]] 35 | nmap őú [] 36 | nmap úő ][ 37 | 38 | nmap Ő { 39 | xmap Ő { 40 | omap Ő { 41 | 42 | nmap Ú } 43 | omap Ú } 44 | xmap Ú } 45 | 46 | nmap ö < 47 | xmap ö < 48 | omap ö < 49 | 50 | nmap ü > 51 | xmap ü > 52 | omap ü > 53 | 54 | nmap ó = 55 | xmap ó = 56 | omap ó = 57 | -------------------------------------------------------------------------------- /bin/testinternetconnection: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Taken from: 4 | # https://stackoverflow.com/a/51863508/2241241 5 | # LICENCE: https://creativecommons.org/licenses/by-sa/4.0/ 6 | # user: Ajedi32 7 | 8 | connected_to_internet() { 9 | test_urls="\ 10 | https://www.google.com/ \ 11 | https://www.microsoft.com/ \ 12 | https://www.cloudflare.com/ \ 13 | " 14 | 15 | processes="0" 16 | pids="" 17 | 18 | for test_url in $test_urls; do 19 | curl --silent --head "$test_url" > /dev/null & 20 | pids="$pids $!" 21 | processes=$(($processes + 1)) 22 | done 23 | 24 | while [ $processes -gt 0 ]; do 25 | for pid in $pids; do 26 | if ! ps | grep "^[[:blank:]]*$pid[[:blank:]]" > /dev/null; then 27 | # Process no longer running 28 | processes=$(($processes - 1)) 29 | pids=$(echo "$pids" | sed --regexp-extended "s/(^| )$pid($| )/ /g") 30 | 31 | if wait $pid; then 32 | # Success! We have a connection to at least one public site, so the 33 | # internet is up. Ignore other exit statuses. 34 | kill -TERM $pids > /dev/null 2>&1 || true 35 | wait $pids 36 | return 0 37 | fi 38 | fi 39 | done 40 | # wait -n $pids # Better than sleep, but not supported on all systems 41 | sleep 0.1 42 | done 43 | 44 | return 1 45 | } 46 | 47 | 48 | if connected_to_internet; then 49 | exit 0; 50 | else 51 | exit 1; 52 | fi 53 | -------------------------------------------------------------------------------- /.ipython/profile_default/startup/20-pyspark.py: -------------------------------------------------------------------------------- 1 | """ """ 2 | 3 | import importlib 4 | 5 | if importlib.util.find_spec("pyspark") is None: 6 | import sys 7 | 8 | sys.exit(0) 9 | 10 | from pyspark.sql import DataFrame 11 | from pyspark.sql import functions as F # noqa: F401 12 | 13 | 14 | def dataframe_checkpoint_table(self, path: str, overwrite=False): 15 | if overwrite or not self.sparkSession.catalog.tableExists(path): 16 | self.write.mode("overwrite").saveAsTable(path) 17 | return self.sparkSession.read.table(path) 18 | 19 | 20 | setattr(DataFrame, "checkpoint", dataframe_checkpoint_table) 21 | 22 | 23 | def dataframe_display(self): 24 | """ 25 | This exists when working in a databricks notebook 26 | """ 27 | return self.toPandas() 28 | 29 | 30 | if not hasattr(DataFrame, "display"): 31 | setattr(DataFrame, "display", dataframe_display) 32 | 33 | 34 | def getSparkSession(appname: str = "bence-test-app"): 35 | if importlib.util.find_spec("databricks"): 36 | from databricks.connect import DatabricksSession 37 | 38 | return DatabricksSession.builder.getOrCreate() 39 | 40 | from pyspark.sql import SparkSession 41 | 42 | return ( 43 | SparkSession.builder.appName(appname) 44 | .master("local[2]") 45 | .config("spark.sql.adaptive.enabled", "false") 46 | .config("spark.sql.adaptive.coalescePartitions.enabled", "false") 47 | .getOrCreate() 48 | ) 49 | -------------------------------------------------------------------------------- /.vim/vim-plug-configs/ale.vim: -------------------------------------------------------------------------------- 1 | Plug 'dense-analysis/ale' 2 | let g:ale_disable_lsp = 1 3 | let g:ale_cursor_detail = 0 4 | let g:ale_detail_to_floating_preview=1 5 | let g:ale_echo_msg_format = '%linter% - %code: %%s' 6 | let g:ale_cache_executable_check_failures = 1 7 | 8 | let g:ale_floating_window_border = ['│', '─', '╭', '╮', '╯', '╰', '│', '─'] 9 | let g:ale_hover_to_preview = 1 10 | let g:ale_hover_to_floating_preview = 1 11 | 12 | 13 | " TODO: set nicer signs for the column! 14 | " g:ale_sign_warning *g:ale_sign_warning* 15 | " g:ale_sign_error *g:ale_sign_error* 16 | 17 | " ruff does not play nice with fugitive 18 | let g:ale_python_ruff_change_directory = 0 19 | " check the defaults before chaning this! TODO move to filetype? 20 | let g:ale_linters = { 21 | \ 'javascript': ['eslint'], 22 | \ 'python': ['ruff','mypy'], 23 | \ 'tex': ['proselint', 'lacheck', 'chktex'] 24 | \} 25 | 26 | let g:ale_fixers = { 27 | \ '*': ['remove_trailing_lines','trim_whitespace'], 28 | \ 'python': ['black', 'ruff'], 29 | \ 'go': ['gofumpt'], 30 | \ 'vue': ['prettier','eslint'], 31 | \ 'javascript': ['prettier','eslint'], 32 | \ 'sh': ['shfmt'], 33 | \ 'tex': ['latexindent'] 34 | \} 35 | 36 | let g:ale_fix_on_save = 1 37 | nmap ]h (ale_next_wrap_error) 38 | nmap [h (ale_previous_wrap_error) 39 | nmap [w (ale_previous_wrap) 40 | nmap ]w (ale_next_wrap) 41 | -------------------------------------------------------------------------------- /.config/aerc/hooks/general: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # AERC_ACCOUNT 4 | # AERC_FOLDER 5 | # AERC_HOOK_ORIGIN 6 | if [ $(hostname) = "BFERDINANDY-NB" ]; then 7 | if [ ! "$AERC_ACCOUNT" = "yettel" ]; then 8 | exit 0 9 | fi 10 | fi 11 | 12 | if [ "$AERC_FOLDER" = "Trash" ]; then 13 | exit 0 14 | fi 15 | 16 | if [ "$AERC_ACCOUNT" = "notmuch" ]; then 17 | if echo $AERC_FOLDER | grep -Pv '(Inbox|Archive|Sent|Drafts|\d_\w+)'; then 18 | # we're likely in an ad-hoc query folder 19 | # we'd need to sync basically everything to make sure we match state 20 | # but it's unlikely it is _that_ crucial 21 | exit 0 22 | fi 23 | 24 | if [ $(dirname $AERC_FOLDER) == "." ]; then 25 | # we are in a unified folder and thus do not know which account we operated in 26 | # this is a suboptimal solution for now, but we sync the folder for all accounts 27 | accounts=$(grep '^IMAPAccount' $HOME/.config/isyncrc | sort | uniq | sed 's/IMAPAccount //' | grep -v '^yettel') 28 | echo "$accounts" | xargs -i throttle --job "notmuch new" --silent-job "testinternetconnection" --job "mbsync {}-${AERC_FOLDER,,}" --job "notmuch new" --origin $AERC_HOOK_ORIGIN 29 | exit 0 30 | else 31 | # we are in one of the maildir folders, so it's easy 32 | mbsynccmd=$(dirname ${AERC_FOLDER,,})-$(basename ${AERC_FOLDER,,}) 33 | fi 34 | else 35 | mbsynccmd=${AERC_ACCOUNT,,}-${AERC_FOLDER,,} 36 | fi 37 | 38 | systemd-run --user throttle --job "notmuch new" --silent-job "testinternetconnection" --job "mbsync $mbsynccmd" --job "notmuch new" --origin $AERC_HOOK_ORIGIN 39 | -------------------------------------------------------------------------------- /.config/emailconfiguration/mailsync-low: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # generate addressbook 4 | throttle maildir-rank-addr 5 | 6 | # move any email older than 1 year from flat Archive to Archive/year 7 | throttle --origin "mailsync-low" python3 ~/.config/emailconfiguration/rearchive.py ~/.mail/bence/Archive 8 | throttle --origin "mailsync-low" python3 ~/.config/emailconfiguration/rearchive.py ~/.mail/bence/Sent -t ~/.mail/bence/Archive 9 | throttle --origin "mailsync-low" mbsync bence-sent 10 | throttle --origin "mailsync-low" mbsync bence-archive 11 | throttle --origin "mailsync-low" python3 ~/.config/emailconfiguration/rearchive.py ~/.mail/elte/Archive 12 | throttle --origin "mailsync-low" python3 ~/.config/emailconfiguration/rearchive.py ~/.mail/elte/Sent -t ~/.mail/elte/Archive 13 | throttle --origin "mailsync-low" mbsync elte-sent 14 | throttle --origin "mailsync-low" mbsync elte-archive 15 | throttle --origin "mailsync-low" python3 ~/.config/emailconfiguration/rearchive.py ~/.mail/pharmahungary/Archive 16 | throttle --origin "mailsync-low" python3 ~/.config/emailconfiguration/rearchive.py ~/.mail/pharmahungary/Sent -t ~/.mail/pharmahungary/Archive 17 | throttle --origin "mailsync-low" mbsync pharmahungary-sent 18 | throttle --origin "mailsync-low" mbsync pharmahungary-archive 19 | # Due to how gmail's imap works, unfortunately, this does not make sense 20 | # python3 ~/.config/emailconfiguration/rearchive.py ~/.mail/priestoferis/Archive 21 | # python3 ~/.config/emailconfiguration/rearchive.py ~/.mail/priestoferis/Sent -t ~/.mail/priestoferis/Archive 22 | -------------------------------------------------------------------------------- /.vim/vim-plug-configs/fzf.vim: -------------------------------------------------------------------------------- 1 | Plug 'junegunn/fzf' 2 | Plug 'junegunn/fzf.vim' 3 | Plug 'stsewd/fzf-checkout.vim' 4 | 5 | let g:fzf_command_prefix = 'F' 6 | 7 | let g:fzf_action = { 8 | \ 'ctrl-t': 'tab split', 9 | \ 'ö': 'split', 10 | \ 'ü': 'vsplit', 11 | \ 'ctrl-o': ':r !echo'} 12 | 13 | " let g:fzf_action = { 'ctrl-r': function('s:insert_file_name')} 14 | 15 | let g:fzf_layout = { 'up': '~90%', 'window': { 'width': 0.8, 'height': 0.8, 'yoffset':0.5, 'xoffset': 0.5 } } 16 | let $FZF_DEFAULT_OPTS = '--layout=reverse --info=inline --bind "alt-a:select-all,alt-d:deselect-all"' 17 | 18 | " Customise the Files command to use rg which respects .gitignore files 19 | command! -bang -nargs=? -complete=dir FFiles 20 | \ call fzf#run(fzf#wrap('files', 21 | \ fzf#vim#with_preview({ 22 | \ 'source': 'rg --files --hidden'}), 0)) 23 | 24 | " " Add an AllFiles variation that ignores .gitignore files 25 | command! -bang -nargs=? -complete=dir FAllFiles 26 | \ call fzf#run(fzf#wrap('allfiles', 27 | \ fzf#vim#with_preview( 28 | \ { 'dir': , 29 | \ 'source': 'rg --files --hidden --no-ignore' }), 30 | \ 0)) 31 | 32 | " a command to search for files managed by yadm 33 | command! -bang -nargs=? -complete=dir FYadm 34 | \ call fzf#run(fzf#wrap('yadm', 35 | \ fzf#vim#with_preview( 36 | \ { 'dir': , 37 | \ 'source': 'yadm list -a' }), 0)) 38 | 39 | nmap y :FYadm! 40 | 41 | nnoremap * :execute 'FRg ' . expand('') 42 | -------------------------------------------------------------------------------- /.config/vdirsyncer/config: -------------------------------------------------------------------------------- 1 | [general] 2 | status_path = "~/.local/state/vdirsyncer" 3 | 4 | [storage nccaldav] 5 | type = "caldav" 6 | url = "https://nc.vpn.ferdinandy.com/remote.php/dav" 7 | username = "bence" 8 | password.fetch = ["command", "pass", "nextcloud/bence"] 9 | 10 | [storage nccalendar_local] 11 | type = "filesystem" 12 | path = "~/.calendars/nc" 13 | fileext = ".ics" 14 | 15 | [pair nccalendars] 16 | a = "nccalendar_local" 17 | b = "nccaldav" 18 | collections = ["from a", "from b"] 19 | metadata = ["color", "displayname", "description", "order"] 20 | 21 | [storage googlecaldav] 22 | type = "google_calendar" 23 | client_id = "406964657835-aq8lmia8j95dhl1a2bvharmfk3t1hgqj.apps.googleusercontent.com" 24 | token_file = "~/.local/state/vdirsyncer/tokenfile" 25 | client_secret = "kSmqreRr0qwBWJgbf5Y-PjSU" 26 | 27 | [storage googlecalendar_local] 28 | type = "filesystem" 29 | path = "~/.calendars/google" 30 | fileext = ".ics" 31 | 32 | [pair googlecalendars] 33 | a = "googlecalendar_local" 34 | b = "googlecaldav" 35 | collections = ["family08293460438548096658@group.calendar.google.com"] 36 | metadata = ["color", "displayname", "description", "order"] 37 | 38 | [storage nccarddav] 39 | type = "carddav" 40 | url = "https://nc.vpn.ferdinandy.com/remote.php/dav" 41 | username = "bence" 42 | password.fetch = ["command", "pass", "nextcloud/bence"] 43 | 44 | [storage contacts_local] 45 | type = "filesystem" 46 | path = "~/.contacts" 47 | fileext = ".vcf" 48 | 49 | 50 | [pair contacts] 51 | a = "contacts_local" 52 | b = "nccarddav" 53 | collections = ["contacts"] 54 | metadata = ["color", "displayname", "description", "order"] 55 | -------------------------------------------------------------------------------- /.config/khal/config: -------------------------------------------------------------------------------- 1 | [view] 2 | 3 | agenda_event_format= {calendar-color}{cancelled}{start-end-time-style} {title} ({calendar}) {repeat-symbol}{alarm-symbol}{description-separator}{description}{reset} 4 | 5 | [locale] 6 | local_timezone= Europe/Budapest 7 | default_timezone= Europe/Budapest 8 | timeformat= %H:%M 9 | dateformat= %m.%d. 10 | longdateformat= %Y.%m.%d 11 | datetimeformat= %m.%d. %H:%M 12 | longdatetimeformat= %Y.%m.%d %H:%M 13 | 14 | [calendars] 15 | 16 | [[Bence1: ott lenni]] 17 | path = ~/.calendars/nc/bence1-ott-lenni/ 18 | priority = 20 19 | addresses=bence@ferdinandy.com,ferdinandy.bence@ttk.elte.hu,priestoferis@gmail.com 20 | 21 | [[Bence2: cselekedni]] 22 | path = ~/.calendars/nc/bence2-cselekedni/ 23 | priority = 30 24 | addresses=bence@ferdinandy.com,ferdinandy.bence@ttk.elte.hu,priestoferis@gmail.com 25 | 26 | [[Bence3: információ]] 27 | path = ~/.calendars/nc/bence3-informci 28 | priority = 40 29 | addresses=bence@ferdinandy.com,ferdinandy.bence@ttk.elte.hu,priestoferis@gmail.com 30 | 31 | [[Bence4: emlékeztető]] 32 | path = ~/.calendars/nc/bence4-emlkeztet 33 | priority = 50 34 | addresses=bence@ferdinandy.com,ferdinandy.bence@ttk.elte.hu,priestoferis@gmail.com 35 | 36 | [[taskwarrior]] 37 | path = ~/.calendars/nc/0e46d1e1-6a69-11f0-972a-001fc69bac97 38 | priority = 5 39 | readonly = True 40 | 41 | [[google]] 42 | type=discover 43 | path = ~/.calendars/google/* 44 | priority = 10 45 | addresses=bence@ferdinandy.com,ferdinandy.bence@ttk.elte.hu,priestoferis@gmail.com 46 | 47 | [[birthdays]] 48 | type=birthdays 49 | path=~/.contacts/contacts 50 | color=light green 51 | -------------------------------------------------------------------------------- /.vim/vim-plug-configs/git.vim: -------------------------------------------------------------------------------- 1 | " ##### GIT ####### 2 | " git integration from tpope 3 | " (as commandline but :G instead of git, % is current file) 4 | Plug 'tpope/vim-fugitive' 5 | " bitbucket plugin for fugitive 6 | Plug 'tommcdo/vim-fubitive' 7 | Plug 'shumphrey/fugitive-gitlab.vim' 8 | Plug 'tpope/vim-rhubarb' 9 | Plug 'https://git.sr.ht/~willdurand/srht.vim' 10 | 11 | " fugitive plugin for branch management 12 | Plug 'sodapopcan/vim-twiggy' 13 | " commit browser plugin for fugitive 14 | " Plug 'junegunn/gv.vim' 15 | " alternate commit browser 16 | Plug 'rbong/vim-flog' 17 | Plug 'airblade/vim-gitgutter' 18 | 19 | let g:twiggy_close_on_fugitive_command = 1 20 | let g:twiggy_split_position = 'topleft' 21 | 22 | let g:fugitive_gitlab_oldstyle_urls = 1 23 | let g:fugitive_gitlab_domains = ['https://gitlab.org','https://mrbd15.pgsm.hu'] 24 | if !empty(glob(expand('~/.config/glab-cli/token'))) 25 | let g:gitlab_api_keys = {'mrbd15.pgsm.hu': readfile(expand('~/.config/glab-cli/token'))[0]} 26 | endif 27 | 28 | nnoremap Gd :Gvdiff 29 | nnoremap gs :Git 30 | nnoremap gS :vert Git 31 | nnoremap Gb :.GBrowse! 32 | xnoremap Gb :'<'>GBrowse! 33 | 34 | 35 | let g:flog_default_opts = {'date':'short', 'order':'topo'} 36 | 37 | " fugitive 3way split: 38 | " obtain hunk: d2o ours, d3o theirs 39 | " Plug 'seanbreckenridge/yadm-git.vim'" 40 | " let g:yadm_git_enabled = 1 41 | " let g:yadm_git_verbose = 0 42 | 43 | " let g:yadm_git_fugitive_enabled = 1 44 | " let g:yadm_git_gitgutter_enabled = 1 45 | 46 | " let g:yadm_git_repo_path = "~/.local/share/yadm/repo.git" 47 | " let g:yadm_git_default_git_path = "git"" 48 | 49 | " autocmd BufReadPost fugitive://* set bufhidden=delete 50 | -------------------------------------------------------------------------------- /.config/systemfiles/etc_sdboot-manage.conf: -------------------------------------------------------------------------------- 1 | # config file for sdboot-manage 2 | 3 | # kernel options to be appended to the "options" line 4 | LINUX_OPTIONS="zswap.enabled=0 nowatchdog" 5 | #LINUX_FALLBACK_OPTIONS="" 6 | 7 | # when DISABLE_FALLBACK is set to "yes", it will stop creating fallback entries for each kernel. 8 | #DISABLE_FALLBACK="no" 9 | 10 | # initrd override, seperated by space, if not set the script will attempt to add them automatically 11 | #INITRD_ENTRIES="intel-ucode.cpio i915-firmware.cpio.xz" 12 | 13 | # Use this pattern to match kernels which should be considered native OS kernels 14 | #KERNEL_PATTERN="vmlinuz-" 15 | 16 | # setting REMOVE_EXISTING to "yes" will remove all your existing systemd-boot entries before building new entries 17 | REMOVE_EXISTING="no" 18 | 19 | # unless OVERWRITE_EXISTING is set to "yes" existing entries for currently installed kernels will not be touched 20 | # this setting has no meaning if REMOVE_EXISTING is set to "yes" 21 | OVERWRITE_EXISTING="yes" 22 | 23 | # when REMOVE_OBSOLETE is set to "yes" entries for kernels no longer available on the system will be removed 24 | REMOVE_OBSOLETE="yes" 25 | 26 | # if PRESERVE_FOREIGN is set to "yes", do not delete entries starting with $ENTRY_ROOT 27 | #PRESERVE_FOREIGN="no" 28 | 29 | # setting NO_AUTOUPDATE to "yes" will stop the updates to systemd-boot when systemd is updated - not recommended unless you are seperately updating systemd-boot 30 | #NO_AUTOUPDATE="no" 31 | 32 | # setting NO_AUTOGEN to "yes" will stop the automatic creation of entries when kernels are installed or updated 33 | #NO_AUTOGEN="no" 34 | 35 | # use this to change the default initramfs prefix (e.g. when using booster) 36 | #INITRD_PREFIX="initramfs" 37 | -------------------------------------------------------------------------------- /.config/oama/config.yaml: -------------------------------------------------------------------------------- 1 | ## oama version 0.16 2 | 3 | ## This is a YAML configuration file, indentation matters. 4 | ## Double ## indicates comments while single # default values. 5 | ## Not all defaults are shown, for full list run `oama printenv` 6 | ## and look at the `services:` section. 7 | 8 | ## Possible options for keeping refresh and access tokens: 9 | ## GPG - in a gpg encrypted file $XDG_STATE_HOME/oama/.oauth 10 | ## (XDG_STATE_HOME defaults to ~/.local/state) 11 | ## GPG - in a gpg encrypted file ~/.local/state/oama/.oauth 12 | ## KEYRING - in the keyring of a password manager with Secret Service API 13 | ## 14 | ## Choose exactly one. 15 | 16 | # encryption: 17 | # tag: KEYRING 18 | 19 | encryption: 20 | tag: GPG 21 | contents: 79768ABA7C3D9B56 22 | 23 | ## Builtin service providers 24 | ## - google 25 | ## - microsoft 26 | ## Required fields: client_id, client_secret 27 | ## 28 | services: 29 | google: 30 | auth_scope: https://mail.google.com/ 31 | client_id: 406964657835-aq8lmia8j95dhl1a2bvharmfk3t1hgqj.apps.googleusercontent.com 32 | client_secret: kSmqreRr0qwBWJgbf5Y-PjSU 33 | 34 | microsoft: 35 | # auth_scope: https://outlook.office365.com/IMAP.AccessAsUser.All https://outlook.office365.com/SMTP.Send offline_access 36 | client_id: 9e5f94bc-e8a4-4e73-b8be-63364c29d753 37 | # client_secret: 'TxRBilcHdC6WGBee]fs?QR:SJ8nI[g82' 38 | tenant: common 39 | 40 | ## User configured providers 41 | ## Required fields: client_id, client_secret, auth_endpoint, auth_scope, token_endpoint 42 | ## 43 | ## For example: 44 | # yahoo: 45 | # client_id: application-CLIENT-ID 46 | # client_secret: application-CLIENT_SECRET 47 | # auth_endpoint: EDIT-ME! 48 | # auth_scope: EDIT-ME! 49 | # token_endpoint: EDIT-ME! 50 | -------------------------------------------------------------------------------- /.vim/vim-plug-configs/theme-setup.vim: -------------------------------------------------------------------------------- 1 | Plug 'dracula/vim', { 'as': 'dracula' } 2 | Plug 'vim-airline/vim-airline' 3 | Plug 'vim-airline/vim-airline-themes' 4 | Plug 'edkolev/promptline.vim' 5 | Plug 'edkolev/tmuxline.vim' 6 | " just nice icons 7 | Plug 'ryanoasis/vim-devicons' 8 | 9 | let g:airline_theme = 'dracula' 10 | " let g:airline_theme = 'solarized' 11 | let g:airline_powerline_fonts = 1 12 | let g:airline_skip_empty_sections = 1 13 | 14 | let g:airline_left_sep = '' 15 | let g:airline_right_sep = '' 16 | 17 | let g:airline#extensions#tabline#enabled = 1 18 | let g:airline#extensions#tabline#buffer_nr_show = 1 19 | let g:airline#extensions#searchcount#enabled = 1 20 | let g:airline_detect_spell=1 21 | let g:airline_detect_spelllang=1 22 | let g:airline_experimental=1 23 | 24 | 25 | 26 | let g:promptline_theme = 'airline' 27 | 28 | autocmd User PlugLoaded ++nested let g:promptline_preset = { 29 | \'b' : [ '$(if [[ -n "$SSH_CLIENT" ]]; then echo $USER; fi;)' ], 30 | \'c' : [ promptline#slices#cwd() ], 31 | \'a' : [ promptline#slices#vcs_branch(), promptline#slices#python_virtualenv() ], 32 | \'warn' : [ promptline#slices#last_exit_code() ]} 33 | 34 | " let g:airline#extensions#tabline#left_sep = ' ' 35 | " let g:airline#extensions#tabline#left_alt_sep = ' ' 36 | 37 | 38 | " sets the title to the open buffer, useful for tmux pane search 39 | set title 40 | " aerc dies on this sometimes it seems 41 | if !exists("g:lightweight") 42 | set titlestring=VIM:\ %(%m%)%(%{expand(\"%:~\")}%) 43 | endif 44 | " powerline 45 | " set rtp+=$HOME/.local/lib/python3.8/site-packages/powerline/bindings/vim/ 46 | 47 | " Always show statusline 48 | set laststatus=2 49 | " set showtabline=2 50 | set noshowmode 51 | 52 | " this is needed for kitty background to work properly 53 | let &t_ut='' 54 | 55 | autocmd User PlugLoaded ++nested colorscheme dracula 56 | -------------------------------------------------------------------------------- /.config/khard/khard.conf: -------------------------------------------------------------------------------- 1 | [addressbooks] 2 | [[contacts]] 3 | path = ~/.contacts/contacts/ 4 | 5 | [general] 6 | debug = no 7 | default_action = list 8 | # These are either strings or comma seperated lists 9 | editor = vim, -i, NONE 10 | merge_editor = vimdiff 11 | 12 | [contact table] 13 | # display names by first or last name: first_name / last_name / formatted_name 14 | display = last_name 15 | # group by address book: yes / no 16 | group_by_addressbook = no 17 | # reverse table ordering: yes / no 18 | reverse = no 19 | # append nicknames to name column: yes / no 20 | show_nicknames = yes 21 | # show uid table column: yes / no 22 | show_uids = no 23 | # show kind table column: yes / no 24 | show_kinds = no 25 | # sort by first or last name: first_name / last_name / formatted_name 26 | sort = last_name 27 | # localize dates: yes / no 28 | localize_dates = yes 29 | # set a comma separated list of preferred phone number types in descending priority 30 | # or nothing for non-filtered alphabetical order 31 | preferred_phone_number_type = pref, cell, home 32 | # set a comma separated list of preferred email address types in descending priority 33 | # or nothing for non-filtered alphabetical order 34 | preferred_email_address_type = pref, work, home 35 | 36 | [vcard] 37 | # extend contacts with your own private objects 38 | # these objects are stored with a leading "X-" before the object name in the vcard files 39 | # every object label may only contain letters, digits and the - character 40 | # example: 41 | # private_objects = Jabber, Skype, Twitter 42 | # default: , (the empty list) 43 | # private_objects = Jabber, Skype, Twitter 44 | # preferred vcard version: 3.0 / 4.0 45 | preferred_version = 3.0 46 | # Look into source vcf files to speed up search queries: yes / no 47 | search_in_source_files = no 48 | # skip unparsable vcard files: yes / no 49 | skip_unparsable = no 50 | -------------------------------------------------------------------------------- /.config/msmtp/config: -------------------------------------------------------------------------------- 1 | # Set default values for all following accounts. 2 | defaults 3 | auth on 4 | tls on 5 | tls_trust_file /etc/ssl/certs/ca-certificates.crt 6 | logfile ~/.msmtp.log 7 | 8 | # Gmail 9 | account priestoferis 10 | host smtp.gmail.com 11 | port 587 12 | auth oauthbearer 13 | tls_starttls on 14 | from priestoferis@gmail.com 15 | user priestoferis@gmail.com 16 | passwordeval oama access priestoferis@gmail.com 17 | 18 | # ELTE 19 | account elte 20 | host smtp.office365.com 21 | port 587 22 | auth xoauth2 23 | tls_starttls on 24 | tls_certcheck on 25 | from ferdinandy.bence@ttk.elte.hu 26 | user ferdinandy.bence@ttk.elte.hu 27 | passwordeval oama access ferdinandy.bence@ttk.elte.hu 28 | 29 | # ferdinandy: bence 30 | account bence 31 | host mail.ferdinandy.com 32 | port 465 33 | auth on 34 | tls on 35 | tls_starttls off 36 | tls_certcheck on 37 | from bence@ferdinandy.com 38 | user bence@ferdinandy.com 39 | passwordeval "pass show aerc/bence | head -n1" 40 | 41 | # eloszerepjatek: bence 42 | account eloszerepjatek 43 | host mail.ferdinandy.com 44 | port 465 45 | auth on 46 | tls on 47 | tls_starttls off 48 | tls_certcheck on 49 | from bence.ferdinandy@eloszerepjatek.hu 50 | user bence.ferdinandy@eloszerepjatek.hu 51 | passwordeval "pass show email/eloszerepjatek/bence | head -n1" 52 | 53 | # securebox: pharmahungary 54 | account pharmahungary 55 | host mail.securebox.hu 56 | port 465 57 | auth on 58 | tls on 59 | tls_starttls off 60 | tls_certcheck on 61 | from bence.ferdinandy@pharmahungary.com 62 | user bence.ferdinandy@pharmahungary.com 63 | passwordeval "pass show aerc/pharmahungary | head -n1" 64 | 65 | # Set a default account 66 | account default : bence 67 | -------------------------------------------------------------------------------- /.config/task/taskrc: -------------------------------------------------------------------------------- 1 | # [Created by task 2.6.1 6/6/2023 15:33:31] 2 | # Taskwarrior program configuration file. 3 | # For more documentation, see https://taskwarrior.org or try 'man task', 'man task-color', 4 | # 'man task-sync' or 'man taskrc' 5 | 6 | # Here is an example of entries that use the default, override and blank values 7 | # variable=foo -- By specifying a value, this overrides the default 8 | # variable= -- By specifying no value, this means no default 9 | # #variable=foo -- By commenting out the line, or deleting it, this uses the default 10 | 11 | # You can also refence environment variables: 12 | # variable=$HOME/task 13 | # variable=$VALUE 14 | 15 | # Use the command 'task show' to see all defaults and overrides 16 | 17 | # Files 18 | data.location=$HOME/.task 19 | 20 | 21 | # To use the default location of the XDG directories, 22 | # move this configuration file from ~/.taskrc to ~/.config/task/taskrc and uncomment below 23 | 24 | #data.location=~/.local/share/task 25 | #hooks.location=~/.config/task/hooks 26 | 27 | # Color theme (uncomment one to use) 28 | #include light-16.theme 29 | #include light-256.theme 30 | #include dark-16.theme 31 | #include dark-256.theme 32 | #include dark-red-256.theme 33 | #include dark-green-256.theme 34 | #include dark-blue-256.theme 35 | #include dark-violets-256.theme 36 | #include dark-yellow-green.theme 37 | #include dark-gray-256.theme 38 | #include dark-gray-blue-256.theme 39 | #include /usr/share/taskwarrior/solarized-dark-256.theme 40 | include ~/.config/task/bubblegum-256.theme 41 | #include solarized-dark-256.theme 42 | #include no-color.theme 43 | 44 | # report.next.filter = status:pending -WAITING limit:20 45 | 46 | search.case.sensitive=no 47 | uda.priority.values=H,M,,L # no priority is higher than low 48 | urgency.user.tag.trello.coefficient=-2 49 | urgency.user.tag.github.coefficient=-2 50 | reserved.lines=2 51 | 52 | news.version=3.4.1 53 | include ~/.config/task/bugwarrioruda 54 | include ~/.config/task/adhoc-configs 55 | #include ~/.config/task/taskserver 56 | #include ~/.config/task/taskwarrior-tui 57 | -------------------------------------------------------------------------------- /.config/i3/scripts/i3-next-workspace: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import i3ipc 4 | import argparse 5 | import subprocess 6 | import re 7 | 8 | if __name__ == "__main__": 9 | 10 | parser = argparse.ArgumentParser( 11 | description = "Find the next non-opened workspace and go there.") 12 | parser.add_argument('-s','--startnum',type=int,default = 1, 13 | help="DEPRECATED") 14 | group = parser.add_mutually_exclusive_group() 15 | group.add_argument("-mv","--move-window",action="store_true", 16 | help="Instead of going to next non-opened workspace, move current window there.") 17 | group.add_argument("-mvf","--move-window-and-follow",action="store_true", 18 | help="Move current window to next non-opened workspace and follow.") 19 | args = parser.parse_args() 20 | 21 | # Get names of the Xserver 22 | mapping_names = {} 23 | output, err = subprocess.Popen(["xrdb","-query"],stdout=subprocess.PIPE).communicate() 24 | output = output.decode().split("\n") 25 | output = [ 26 | line.split("\t")[1] 27 | for line in output 28 | if re.search(r"wm\.workspace\...\.name:",line) 29 | ] 30 | mapping_names = {} 31 | for line in output: 32 | if ":" in line: 33 | key, value = line.split(":") 34 | mapping_names[int(key)] = value 35 | else: 36 | mapping_names[int(line)] = line 37 | 38 | startnum = min(mapping_names.keys()) 39 | endnum = 50 40 | i3 = i3ipc.Connection() 41 | workspaces = i3.get_workspaces() 42 | nums = {w.num for w in workspaces} 43 | s_ = {x for x in range(startnum,endnum)} 44 | targetnum = min(s_ - nums) 45 | try: 46 | targetstring = f"{targetnum}:{mapping_names[targetnum]}" 47 | except KeyError: 48 | targetstring = f"{targetnum}:{targetnum}" 49 | 50 | if args.move_window or args.move_window_and_follow: 51 | i3.command("move container workspace " + targetstring) 52 | if not args.move_window: 53 | i3.command("workspace number " + targetstring) 54 | 55 | -------------------------------------------------------------------------------- /.config/regolith3/i3/config.d/29_workspace-names: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Workspace Names 3 | # These are the labels which define each i3 workspace. 4 | ############################################################################### 5 | 6 | set_from_resource $ws0 wm.workspace.00.name "0" 7 | set_from_resource $ws1 wm.workspace.01.name "1" 8 | set_from_resource $ws2 wm.workspace.02.name "2" 9 | set_from_resource $ws3 wm.workspace.03.name "3" 10 | set_from_resource $ws4 wm.workspace.04.name "4" 11 | set_from_resource $ws5 wm.workspace.05.name "5" 12 | set_from_resource $ws6 wm.workspace.06.name "6" 13 | set_from_resource $ws7 wm.workspace.07.name "7" 14 | set_from_resource $ws8 wm.workspace.08.name "8" 15 | set_from_resource $ws9 wm.workspace.09.name "9" 16 | set_from_resource $ws10 wm.workspace.10.name "10" 17 | set_from_resource $ws11 wm.workspace.11.name "11" 18 | set_from_resource $ws12 wm.workspace.12.name "12" 19 | set_from_resource $ws13 wm.workspace.13.name "13" 20 | set_from_resource $ws14 wm.workspace.14.name "14" 21 | set_from_resource $ws15 wm.workspace.15.name "15" 22 | set_from_resource $ws16 wm.workspace.16.name "16" 23 | set_from_resource $ws17 wm.workspace.17.name "17" 24 | set_from_resource $ws18 wm.workspace.18.name "18" 25 | set_from_resource $ws19 wm.workspace.19.name "19" 26 | 27 | ############################################################################### 28 | # Workspace Keys 29 | # These are the keys which will be used while binding workspace switching 30 | ############################################################################### 31 | 32 | set_from_resource $ws0_key wm.workspace.00.key 0 33 | set_from_resource $ws1_key wm.workspace.01.key 1 34 | set_from_resource $ws2_key wm.workspace.02.key 2 35 | set_from_resource $ws3_key wm.workspace.03.key 3 36 | set_from_resource $ws4_key wm.workspace.04.key 4 37 | set_from_resource $ws5_key wm.workspace.05.key 5 38 | set_from_resource $ws6_key wm.workspace.06.key 6 39 | set_from_resource $ws7_key wm.workspace.07.key 7 40 | set_from_resource $ws8_key wm.workspace.08.key 8 41 | set_from_resource $ws9_key wm.workspace.09.key 9 42 | -------------------------------------------------------------------------------- /.config/aerc/notmuchmap.conf: -------------------------------------------------------------------------------- 1 | Recent=date:30days..today and not (path:elte/Spam/** or path:priestoferis/Spam/** or path:pharmahungary/Spam/** or path:elte/Spam/** or path:bence/Spam/**) 2 | InboxThreaded=thread:"{path:elte/Inbox/** or path:priestoferis/Inbox/** or path:pharmahungary/Inbox/** or path:elte/Inbox/** or path:bence/Inbox/**}" 3 | Inbox=path:elte/Inbox/** or path:priestoferis/Inbox/** or path:pharmahungary/Inbox/** or path:elte/Inbox/** or path:bence/Inbox/** 4 | 1_megválaszolni=path:elte/1_megválaszolni/** or path:priestoferis/1_megválaszolni/** or path:pharmahungary/1_megválaszolni/** or path:elte/1_megválaszolni/** or path:bence/1_megválaszolni/** 5 | 2_rám_vár=path:elte/2_rám_vár/** or path:priestoferis/2_rám_vár/** or path:pharmahungary/2_rám_vár/** or path:elte/2_rám_vár/** or path:bence/2_rám_vár/** 6 | 3_másra_vár=path:elte/3_másra_vár/** or path:priestoferis/3_másra_vár/** or path:pharmahungary/3_másra_vár/** or path:elte/3_másra_vár/** or path:bence/3_másra_vár/** 7 | 4_olvasni=path:elte/4_olvasni/** or path:priestoferis/4_olvasni/** or path:pharmahungary/4_olvasni/** or path:elte/4_olvasni/** or path:bence/4_olvasni/** 8 | 5_információ=path:elte/5_információ/** or path:priestoferis/5_információ/** or path:pharmahungary/5_információ/** or path:elte/5_információ/** or path:bence/5_információ/** 9 | 6_visszaigazolások=path:elte/6_visszaigazolások/** or path:priestoferis/6_visszaigazolások/** or path:pharmahungary/6_visszaigazolások/** or path:elte/6_visszaigazolások/** or path:bence/6_visszaigazolások/** 10 | 7_hivatalos+pénzügyek=path:elte/7_hivatalos+pénzügyek/** or path:priestoferis/7_hivatalos+pénzügyek/** or path:pharmahungary/7_hivatalos+pénzügyek/** or path:elte/7_hivatalos+pénzügyek/** or path:bence/7_hivatalos+pénzügyek/** 11 | 8_talán=path:elte/8_talán/** or path:priestoferis/8_talán/** or path:pharmahungary/8_talán/** or path:elte/8_talán/** or path:bence/8_talán/** 12 | Sent=path:elte/Sent/** or path:priestoferis/Sent/** or path:pharmahungary/Sent/** or path:elte/Sent/** or path:bence/Sent/** 13 | Archive=path:elte/Archive/** or path:priestoferis/Archive/** or path:pharmahungary/Archive/** or path:elte/Archive/** or path:bence/Archive/** or path:oldmail/** 14 | -------------------------------------------------------------------------------- /.config/regolith3/Xresources: -------------------------------------------------------------------------------- 1 | regolith.look.path: /usr/share/regolith-look/dracula 2 | gtk.font_name: Source Sans Pro 3 | gtk.monospace_font_name: Cascadia Code 4 | 5 | wm.bar.trayoutput: primary 6 | wm.bar.status_command: i3status-rs ~/.config/regolith3/i3status-rs.toml 7 | wm.bar.status_command: i3xrocks -d /usr/share/i3xrocks/conf.d 8 | /* wm.bar.status_command: i3xrocks -u ~/.config/regolith3/i3xrocks/conf.d -d /usr/share/i3xrocks/conf.d */ 9 | 10 | # workspaces 11 | ## fancy names 12 | wm.workspace.00.name: 0: 0  13 | wm.workspace.01.name: 1: 1  14 | wm.workspace.06.name: 6: 6  15 | wm.workspace.07.name: 7: 7  16 | wm.workspace.08.name: 8: 8  17 | /* wm.workspace.09.name: 9: 9  */ 18 | wm.workspace.09.name: 9: 9 19 | ## not fancy names 20 | wm.workspace.02.name: 2: 2 21 | wm.workspace.03.name: 3: 3 22 | wm.workspace.04.name: 4: 4 23 | wm.workspace.05.name: 5: 5 24 | wm.workspace.10.name: 10: 10 25 | wm.workspace.11.name: 11: 11 26 | wm.workspace.12.name: 12: 12 27 | wm.workspace.13.name: 13: 13 28 | wm.workspace.14.name: 14: 14 29 | wm.workspace.15.name: 15: 15 30 | wm.workspace.16.name: 16: 16 31 | wm.workspace.17.name: 17: 17 32 | wm.workspace.18.name: 18: 18 33 | wm.workspace.19.name: 19: 19 34 | 35 | 36 | wm.binding.split_h: ü 37 | wm.binding.split_v: ö 38 | wm.gaps.inner.size: 3 39 | wm.binding.next_free: u 40 | wm.binding.take_next_free: Mod1+u 41 | wm.binding.move_next_free: Shift+u 42 | wm.binding.focus_child: y 43 | wm.binding.swap_focus: comma 44 | 45 | wm.auto_back_and_forth: yes 46 | wm.program.files: /usr/bin/gtk-launch ranger 47 | wm.program.launcher.app: rofi -show drun 48 | wm.program.launcher.cmd: rofi -show run 49 | wm.program.launcher.window: rofi -show window 50 | wm.program.file_search: rofi -show recentfiles -modi "recentfiles:/home/fbence/.config/regolith2/scripts/searchrecentrofi.sh" 51 | 52 | i3xrocks.date.format2: %b. %d. %H:%M:%S 53 | i3xrocks.time.interval: 1 54 | -------------------------------------------------------------------------------- /.config/task/taskagentrc: -------------------------------------------------------------------------------- 1 | data.location=$HOME/.local/state/taskagent 2 | 3 | include ~/.config/task/bubblegum-256.theme 4 | #include solarized-dark-256.theme 5 | #include no-color.theme 6 | 7 | # report.next.filter = status:pending -WAITING limit:20 8 | 9 | search.case.sensitive=no 10 | 11 | # UDAs for agent workflow 12 | uda.details.type=string 13 | uda.details.label=Details 14 | 15 | uda.discovered_from.type=string 16 | uda.discovered_from.label=Discovered From 17 | 18 | # Urgency tweaks for agent workflow 19 | urgency.user.tag.side_quest.coefficient=-3.0 20 | 21 | # Reduce verbose output (removed: override, project, news) 22 | verbose=affected,blank,context,edit,header,footnote,label,new-id,special,sync,recur 23 | 24 | # Minimal info report for agents (use 'agentinfo' instead of 'information') 25 | report.agentinfo.description=Essential task info for agents 26 | report.agentinfo.columns=uuid.short,status,project,priority,description.combined,details,depends.list,discovered_from 27 | report.agentinfo.labels=UUID,Status,Project,Pri,Description+Annotations,Details,Depends,Discovered 28 | 29 | # Override default reports to show UUID instead of short ID (short IDs renumber frequently) 30 | report.list.columns=uuid.short,start.age,entry.age,depends.indicator,priority,project,tags,description.count,urgency 31 | report.list.labels=UUID,Active,Age,D,P,Project,Tags,Description,Urg 32 | 33 | report.ready.columns=uuid.short,start.age,entry.age,depends.indicator,priority,project,tags,description,urgency 34 | report.ready.labels=UUID,Active,Age,D,P,Project,Tags,Description,Urg 35 | 36 | report.next.columns=uuid.short,start.age,entry.age,depends,priority,project,tags,description,urgency 37 | report.next.labels=UUID,Active,Age,Deps,P,Project,Tags,Description,Urg 38 | 39 | # Human-friendly report: clean descriptions, no annotations, with both ID and UUID 40 | report.human.description=Clean task list for humans (no annotations) 41 | report.human.columns=id,uuid.short,start.age,entry.age,depends.indicator,priority,project,tags,description.desc,urgency 42 | report.human.labels=ID,UUID,Active,Age,D,P,Project,Tags,Description,Urg 43 | report.human.filter=status:pending 44 | report.human.sort=urgency- 45 | -------------------------------------------------------------------------------- /.config/bugwarrior/bugwarrior.toml: -------------------------------------------------------------------------------- 1 | [general] 2 | targets = ["signifydjira"] 3 | taskrc = "~/.config/task/taskrc" 4 | # log.level = DEBUG 5 | merge_annotations = "False" 6 | annotation_comments = false 7 | static_fields = ["priority"] 8 | # replace_tags = True 9 | 10 | [signifydjira] 11 | service = "jira" 12 | base_uri = "https://signifyd.atlassian.net" 13 | username = "bence.ferdinandy@signifyd.com" 14 | password = "@oracle:eval:pass show jira" 15 | description_template = "{{jiraid}} ({{jirastatus}}) - {{jirasummary}} - {{jiraurl}}" 16 | label_template = "jira_{{label}}" 17 | import_sprints_as_tags = true 18 | 19 | 20 | [elteeto] 21 | service = "bitbucket" 22 | default_priority = "" 23 | add_tags = ["bb-eto"] 24 | only_if_assigned = "ferdinandyb" 25 | include_merge_requests = true 26 | username = "ferdinandyb" 27 | key = "@oracle:eval:pass show bugwarrior/bitbucket/elteethologydepartment/key" 28 | secret = "@oracle:eval:pass show bugwarrior/bitbucket/elteethologydepartment/secret" 29 | login = "ferdinandyb" 30 | # bitbucket.password = @oracle:eval:pass show bugwarrior/bitbucket/pass 31 | 32 | [github] 33 | service = "github" 34 | login = "ferdinandyb" 35 | token = "@oracle:eval:pass show bugwarrior/github" 36 | username = "ferdinandyb" 37 | default_priority = "" 38 | add_tags = ["github"] 39 | # bitbucket.only_if_assigned = ferdinandyb 40 | include_merge_requests = "True" 41 | query = "assignee:ferdinandyb is:open" 42 | project_template = 'github.{{project | replace(".","")}}' 43 | annotation_comments = "False" 44 | import_labels_as_tags = true 45 | label_template = 'gh_{{label | replace(" ","")}}' 46 | 47 | [trello] 48 | service = "trello" 49 | api_key = "d9b874cb64f9a3d38c5f8c2f8d818548" 50 | token = "@oracle:eval:pass show bugwarrior/trello/token" 51 | annotation_comments = "False" 52 | default_priority = "" 53 | only_if_assigned = "benceferdinandy" 54 | add_tags = ["trello"] 55 | import_labels_as_tags = true 56 | label_template = 'tr_{{label | replace(" ","") }}' 57 | project_template = 'trello.{{project | replace(" ","") | replace(".","") | replace("-","") }}' 58 | exclude_lists = ["Done"] 59 | 60 | [notifications] 61 | notifications = true 62 | backend = "applescript" 63 | only_on_new_tasks = false 64 | -------------------------------------------------------------------------------- /.config/environment.d/README.md: -------------------------------------------------------------------------------- 1 | ## Documentation 2 | 3 | https://www.freedesktop.org/software/systemd/man/latest/environment.d.html 4 | 5 | 6 | ## Usage 7 | 8 | Check result: 9 | 10 | ``` 11 | /usr/lib/systemd/user-environment-generators/30-systemd-environment-d-generator 12 | ``` 13 | 14 | Reload for current login session: 15 | 16 | ``` 17 | systemctl --user daemon-reload 18 | ``` 19 | 20 | ## Shell integration 21 | 22 | Usually, one will launch terminals via a GUI that was already launched via systemd, meaning these environment variables are already loaded. There are two exceptions I know of: WSL and a tty. To circumvent this, the last `.conf` file to be loaded defines `SYSTEMDUSERENVLOADED=1` and for example a `.zshrc` can check for the existence of this, and if it is missing, manually load the environment variables, e.g.: 23 | 24 | ``` 25 | if [ "$SYSTEMDUSERENVLOADED" != 1 ]; then 26 | export $(systemctl --user show-environment | xargs) 27 | fi 28 | ``` 29 | 30 | ## Important note about precedence 31 | 32 | These are all the files that are loaded: 33 | 34 | - ~/.config/environment.d/*.conf 35 | - /etc/environment.d/*.conf 36 | - /run/environment.d/*.conf 37 | - /usr/lib/environment.d/*.conf 38 | - /etc/environment 39 | 40 | > All configuration files are sorted by their filename in lexicographic order, 41 | > regardless of which of the directories they reside in. If multiple files 42 | > specify the same option, the entry in the file with the lexicographically 43 | > latest name will take precedence. Thus, the configuration in a certain file 44 | > may either be replaced completely (by placing a file with the same name in 45 | > a directory with higher priority), or individual settings might be changed 46 | > (by specifying additional settings in a file with a different name that is 47 | > ordered later). 48 | 49 | This means that if you want to make non-system files in `~/.config/` take 50 | precedence, one must make sure they are last when sorted by name. In 51 | particular, Ubuntu sets `$PATH` in `/etc/environment`, so anything modifying 52 | `$PATH` most come later in lexicographics sort than `environment`. Hence the 53 | `X_` prefix for all of my config files (even if `Z_` would be more logical). 54 | -------------------------------------------------------------------------------- /.restic.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | HDDPATH=/media/fbence/LaCie 4 | 5 | echo email 6 | for backend in \ 7 | local:$HDDPATH/restic/email \ 8 | rclone:onedrive:mashenka-restic/email 9 | do 10 | echo backend: $backend 11 | restic backup -r $backend --password-command "pass show restic" \ 12 | /home/fbence/.mail \ 13 | --exclude=".notmuch/**" 14 | 15 | restic forget -r $backend --password-command "pass show restic" \ 16 | --keep-within-daily 7d \ 17 | --keep-within-weekly 1m \ 18 | --keep-within-monthly 1y \ 19 | --keep-within-yearly 75y 20 | 21 | done 22 | 23 | echo documents 24 | for backend in \ 25 | local:$HDDPATH/restic/documents \ 26 | rclone:onedrive:mashenka-restic/documents 27 | do 28 | echo backend: $backend 29 | restic backup -r $backend --password-command "pass show restic" \ 30 | /home/fbence/Documents 31 | 32 | restic forget -r $backend --password-command "pass show restic" \ 33 | --keep-within-daily 7d \ 34 | --keep-within-weekly 1m \ 35 | --keep-within-monthly 1y \ 36 | --keep-within-yearly 75y 37 | 38 | done 39 | 40 | echo pictures 41 | for backend in \ 42 | local:$HDDPATH/restic/pictures \ 43 | rclone:onedrive:mashenka-restic/pictures 44 | do 45 | echo backend: $backend 46 | restic backup -r $backend --password-command "pass show restic" \ 47 | /disk2/Pictures \ 48 | /disk2/FamilyPictures \ 49 | /disk2/PicturesÉviBence \ 50 | /disk2/PhonePics 51 | 52 | restic forget -r $backend --password-command "pass show restic" \ 53 | --keep-within-daily 7d \ 54 | --keep-within-weekly 1m \ 55 | --keep-within-monthly 1y \ 56 | --keep-within-yearly 75y 57 | 58 | done 59 | 60 | echo org 61 | for backend in \ 62 | local:$HDDPATH/restic/org \ 63 | rclone:onedrive:mashenka-restic/org 64 | do 65 | echo backend: $backend 66 | restic backup -r $backend --password-command "pass show restic" \ 67 | /home/fbence/org \ 68 | /home/fbence/.task 69 | 70 | restic forget -r $backend --password-command "pass show restic" \ 71 | --keep-within-daily 7d \ 72 | --keep-within-weekly 1m \ 73 | --keep-within-monthly 1y \ 74 | --keep-within-yearly 75y 75 | 76 | done 77 | -------------------------------------------------------------------------------- /.config/aerc/accounts.conf##default: -------------------------------------------------------------------------------- 1 | default=Inbox 2 | folders-sort=Inbox 3 | copy-to=Sent 4 | pgp-key-id=D92449B0F2D9363A2DE3260B207C0A2055199A65 5 | pgp-auto-sign=false 6 | pgp-opportunistic-encrypt=false 7 | 8 | [bence] 9 | # source=notmuch://~/.mail/ 10 | # maildir-store=~/.mail/ 11 | # maildir-account-path=bence 12 | source=maildir://~/.mail/bence 13 | outgoing=msmtpq -a bence 14 | from=Bence Ferdinandy 15 | signature-file=~/.config/emailconfiguration/ferdinandy_signature.txt 16 | 17 | [elte] 18 | # source=notmuch://~/.mail/ 19 | # maildir-store=~/.mail/ 20 | # maildir-account-path=elte 21 | source=maildir://~/.mail/elte 22 | outgoing=msmtpq -a elte 23 | from=Bence Ferdinandy 24 | copy-to= 25 | aliases=Bence Ferdinandy 26 | signature-file=~/.config/emailconfiguration/ferdinandy_signature.txt 27 | # check-mail=1m 28 | 29 | [pharmahungary] 30 | # source=notmuch://~/.mail/ 31 | # maildir-store=~/.mail/ 32 | # maildir-account-path=pharmahungary 33 | source=maildir://~/.mail/pharmahungary 34 | outgoing=msmtpq -a pharmahungary 35 | from=Bence Ferdinandy 36 | signature-file=~/.config/emailconfiguration/pharmahungary_signature.txt 37 | 38 | [priestoferis] 39 | # source=notmuch://~/.mail/ 40 | # maildir-store=~/.mail/ 41 | # maildir-account-path=priestoferis 42 | source=maildir://~/.mail/priestoferis 43 | outgoing=msmtpq -a priestoferis 44 | from=Bence Ferdinandy 45 | signature-file=~/.config/emailconfiguration/priestoferis_signature.txt 46 | carddav-source = https://priestoferis@www.googleapis.com/carddav/v1/principals/priestoferis@gmail.com/lists/default 47 | carddav-source-cred-cmd = pass show gmail 48 | 49 | # [eloszerepjatek] 50 | # source=maildir://~/.mail/eloszerepjatek 51 | # outgoing=msmtpq -a eloszerepjatek 52 | # from=Bence Ferdinandy 53 | # default=Inbox 54 | # folders-sort=Inbox 55 | # copy-to=Sent 56 | 57 | [notmuch] 58 | source=notmuch://~/.mail/ 59 | # check-mail=30s 60 | # check-mail-cmd=notmuch new 61 | maildir-store=~/.mail/ 62 | # maildir-account-path=pharmahungary 63 | outgoing=msmtpq -a bence 64 | from=Bence Ferdinandy 65 | query-map=~/.config/aerc/notmuchmap.conf 66 | signature-file=~/.config/emailconfiguration/ferdinandy_signature.txt 67 | copy-to=bence/Sent 68 | -------------------------------------------------------------------------------- /.config/polybar/scripts/info-hackspeed.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # shellcheck disable=SC2016,SC2059 3 | 4 | KEYBOARD_ID="Keyboard K380 Keyboard" 5 | 6 | # cpm: characters per minute 7 | # wpm: words per minute (1 word = 5 characters) 8 | METRIC=cpm 9 | FORMAT="# %d $METRIC" 10 | 11 | INTERVAL=20 12 | 13 | # If you have a keyboard layout that is not listed here yet, create a condition 14 | # yourself. $3 is the key index. Use `xinput test "AT Translated Set 2 keyboard"` 15 | # to see key codes in real time. Be sure to open a pull request for your 16 | # layout's condition! 17 | LAYOUT=qwerty 18 | 19 | case "$LAYOUT" in 20 | qwerty) CONDITION='($3 >= 10 && $3 <= 19) || ($3 >= 24 && $3 <= 33) || ($3 >= 37 && $3 <= 53) || ($3 >= 52 && $3 <= 58)'; ;; 21 | azerty) CONDITION='($3 >= 10 && $3 <= 19) || ($3 >= 24 && $3 <= 33) || ($3 >= 37 && $3 <= 54) || ($3 >= 52 && $3 <= 57)'; ;; 22 | dontcare) CONDITION='1'; ;; # Just register all key presses, not only letters and numbers 23 | *) echo "# Unsupported layout \"$LAYOUT\""; exit 1; ;; 24 | esac 25 | 26 | # We have to account for the fact we're not listening a whole minute 27 | multiply_by=60 28 | divide_by=$INTERVAL 29 | 30 | case "$METRIC" in 31 | wpm) divide_by=$((divide_by * 5)); ;; 32 | cpm) ;; 33 | *) echo "Unsupported metric \"$METRIC\""; exit 1; ;; 34 | esac 35 | 36 | hackspeed_cache="$(mktemp -p '' hackspeed_cache.XXXXX)" 37 | trap 'rm "$hackspeed_cache"' EXIT 38 | 39 | # Write a dot to our cache for each key press 40 | printf '' > "$hackspeed_cache" 41 | xinput test "$KEYBOARD_ID" | \ 42 | stdbuf -o0 awk '$1 == "key" && $2 == "press" && ('"$CONDITION"') {printf "."}' >> "$hackspeed_cache" & 43 | 44 | while true; do 45 | # Ask the kernel how big the file is with the command `stat`. The number we 46 | # get is the file size in bytes, which equals the amount of dots the file 47 | # contains, and hence how much keys were pressed since the file was last 48 | # cleared. 49 | lines=$(stat --format %s "$hackspeed_cache") 50 | 51 | # Truncate the cache file so that in the next iteration, we count only new 52 | # keypresses 53 | printf '' > "$hackspeed_cache" 54 | 55 | # The shell only does integer operations, so make sure to first multiply and 56 | # then divide 57 | value=$((lines * multiply_by / divide_by)) 58 | 59 | printf "$FORMAT\\n" "$value" 60 | 61 | sleep $INTERVAL 62 | done 63 | -------------------------------------------------------------------------------- /.config/docs/cachyos_starting.md: -------------------------------------------------------------------------------- 1 | 2 | Folders that need to be copied: 3 | - isync state 4 | - .mail 5 | - .ssh 6 | - .gnupg 7 | - .password-store 8 | - oama state 9 | 10 | Things that need installing: 11 | 12 | ``` 13 | pacman -S paru 14 | paru -S \ 15 | arandr \ 16 | asciidoc \ 17 | ansible \ 18 | bashmount \ 19 | bat \ 20 | blueman \ 21 | brightnessctl \ 22 | catdoc \ 23 | contour-git \ 24 | ctags \ 25 | cyrus-sasl \ 26 | cyrus-sasl-xoauth2-git \ 27 | dante \ 28 | deluge-gtk \ 29 | dust \ 30 | element-desktop \ 31 | fd \ 32 | fzf \ 33 | htop \ 34 | git-delta \ 35 | glow \ 36 | go \ 37 | gofumpt \ 38 | gopls \ 39 | goimapnotify \ 40 | gnome-keyring \ 41 | gvim \ 42 | lazygit \ 43 | libsixel \ 44 | libreoffice-fresh \ 45 | i3-back \ 46 | ipython \ 47 | isync \ 48 | jq \ 49 | msmtp \ 50 | network-manager-applet \ 51 | networkmanager \ 52 | nm-connection-editor \ 53 | nodejs \ 54 | npm \ 55 | notmuch \ 56 | oama \ 57 | oci-cli \ 58 | pandoc \ 59 | pass \ 60 | pavucontrol \ 61 | perl-authen-sasl \ 62 | perl-net-smtp-ssl \ 63 | perl-mime-tools \ 64 | pod2man \ 65 | python-dateutil \ 66 | python-i3ipc \ 67 | python-pipx \ 68 | ripgrep \ 69 | rofi-greenclip \ 70 | rsync \ 71 | sasl-xoauth-git \ 72 | sasl-xoauth2-git \ 73 | speedtest-cli \ 74 | spotify-launcher \ 75 | scdoc \ 76 | task \ 77 | terraform \ 78 | tig \ 79 | tmux \ 80 | tlp \ 81 | unclutter \ 82 | ugrep \ 83 | xcape \ 84 | xclip \ 85 | xmlto \ 86 | xournalpp \ 87 | xss-lock \ 88 | yadm \ 89 | zoxide \ 90 | vit \ 91 | watchexec \ 92 | w3m \ 93 | whois \ 94 | zip \ 95 | zotero-bin 96 | 97 | pipx \ 98 | mail-deduplicate \ 99 | xlsx2csv 100 | 101 | ``` 102 | 103 | Enable services: 104 | 105 | ``` 106 | scu enable --now throttle.service 107 | scu enable --now goimapnotify@pharmahungary.service 108 | scu enable --now goimapnotify@elte_.service 109 | scu enable --now goimapnotify@bence.service 110 | scu enable --now goimapnotify@priestoferis.service 111 | scu enable --now mailsync-low.timer 112 | scu enable --now mailsync-medium.timer 113 | ``` 114 | -------------------------------------------------------------------------------- /.config/opencode/command/handoff.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Structured session handoff with learnings capture 3 | --- 4 | 5 | # Session Handoff 6 | 7 | Perform a structured handoff for the current session. This captures learnings, misalignments, and session state for future sessions. 8 | 9 | ## Steps 10 | 11 | ### 1. Identify the Plan File 12 | 13 | Determine the plan file for this session: 14 | - Check if an org/projects file was referenced - look for `plan file:` field 15 | - If working in a repo, check for PLAN.md or similar in the repo root 16 | - If no plan file exists, ask the user where to write the handoff 17 | 18 | ### 2. Summarize Learnings and Misalignments 19 | 20 | From the conversation history, identify and summarize: 21 | 22 | **Learnings** - New information acquired during the session: 23 | - User preferences discovered 24 | - Codebase patterns learned 25 | - Correct approaches identified 26 | 27 | **Misalignments** - Corrections that occurred: 28 | - Wrong assumptions made 29 | - Direction changes after user feedback 30 | - Mistakes that needed fixing 31 | 32 | ### 3. If Taskagent Was Used 33 | 34 | If taskagent was used during this session: 35 | 36 | a) Invoke `@taskagent-reader` to retrieve task state and any recorded learnings/misalignments: 37 | ``` 38 | @taskagent-reader Retrieve session summary for handoff. 39 | - Project: 40 | - Focus on: tasks modified this session, any LEARNING/MISALIGNMENT annotations 41 | - Return: task progress summary, recorded learnings, recorded misalignments 42 | ``` 43 | 44 | b) Checkpoint any active tasks: 45 | ```bash 46 | taskagent annotate "HANDOFF: . NEXT: ." 47 | ``` 48 | 49 | ### 4. Write to Plan File 50 | 51 | Update the plan file with: 52 | 53 | **## Learnings section** (create if doesn't exist): 54 | - Add new learnings with date prefix 55 | - Add misalignments with date prefix 56 | - Format: 57 | ```markdown 58 | ## Learnings 59 | 60 | - YYYY-MM-DD: LEARNING: 61 | - YYYY-MM-DD: MISALIGNMENT: 62 | ``` 63 | 64 | **## Notes section** (or equivalent): 65 | - Brief session summary (1-2 sentences on what was accomplished) 66 | - High-level direction/goal alignment (are we on track?) 67 | 68 | Do NOT put tactical next steps in the plan file - those belong in taskagent annotations. 69 | 70 | ### 5. Confirm Handoff 71 | 72 | Report to the user: 73 | - What was written to the plan file 74 | - If taskagent: current task state 75 | - Any outstanding items for next session 76 | -------------------------------------------------------------------------------- /.config/kitty/kitty.conf: -------------------------------------------------------------------------------- 1 | # font_family Sauce Code Pro Nerd Font Complete Mono 2 | # bold_font Sauce Code Pro Bold Nert Font Complete Mono 3 | # italic_font Sauce Code Pro Italic Nerd Font Complete Mono 4 | # bold_italic_font Sauce Code Pro Bold Italic Nerd Font Complete Mono 5 | # font_family Fira Code Retina 6 | # bold_font Fira Code Bold Nert Font Complete 7 | # italic_font Sauce Code Pro Italic Nerd Font Complete Mono 8 | # bold_italic_font Sauce Code Pro Bold Italic Nerd Font Complete Mono 9 | font_family Cascadia Code PL Light 10 | bold_font Cascadia Code PL Semibold 11 | italic_font Cascadia Code PL Light Italic 12 | bold_italic_font Cascadia Code PL Semibold Italic 13 | # font_family JetBrains Mono NL 14 | # bold_font auto 15 | # italic_font auto 16 | # bold_italic_font auto 17 | font_size 13.0 18 | disable_ligatures cursor 19 | confirm_os_window_close 0 20 | 21 | mouse_hide_wait 3.0 22 | copy_on_select yes 23 | strip_trailing_spaces always 24 | 25 | enable_audio_bell no 26 | visual_bell_duration 0.0 27 | 28 | map kitty_mod+j neighboring_window down 29 | map kitty_mod+k neighboring_window up 30 | map kitty_mod+h neighboring_window left 31 | map kitty_mod+l neighboring_window right 32 | map kitty_mod+, nth_window -1 33 | map kitty_mod+c new_tab 34 | map kitty_mod+z toggle_layout stack 35 | map kitty_mod+ó detach_window new-tab 36 | map kitty_mod+ő previous_tab 37 | map kitty_mod+ú next_tab 38 | 39 | map ctrl+alt+l next_layout 40 | map ctrl+alt+z toggle_layout stack 41 | map ctrl+shift+p>l kitten hints --type line --program - 42 | map ctrl+shift+p>f kitten hints --type path --program - 43 | map ctrl+shift+p>w kitten hints --type word --program - 44 | map ctrl+shift+p>h kitten hints --type hash --program - 45 | map ctrl+shift+p>m kitten hints --regex [a-zA-Z0-9+_.-]+@[a-zA-Z0-9.-]+ --program @ 46 | map ctrl+shift+e kitten hints --type url --program default --ascending 47 | map ctrl+shift+f kitten hints --type url --multiple --program default --ascending 48 | allow_remote_control yes 49 | listen_on unix:/tmp/mykitty 50 | 51 | include dracula.conf 52 | map kitty_mod+ö launch --location=hsplit --cwd=current 53 | map kitty_mod+ü launch --location=vsplit --cwd=current 54 | 55 | enabled_layouts splits 56 | 57 | scrollback_pager vim -u NONE - -c 'w! /tmp/kitty_scrollback' -c 'term ++curwin cat /tmp/kitty_scrollback' -c 'map q :qa!' -c 'set clipboard=unnamedplus' 58 | #TODO: make a small vimrc for kitty scrollback; also https://github.com/kovidgoyal/kitty/issues/719 59 | -------------------------------------------------------------------------------- /.config/mimeapps.list: -------------------------------------------------------------------------------- 1 | [Default Applications] 2 | text/html=firefox.desktop 3 | x-scheme-handler/http=firefox.desktop 4 | x-scheme-handler/https=firefox.desktop 5 | x-scheme-handler/about=firefox.desktop 6 | x-scheme-handler/unknown=firefox.desktop 7 | x-scheme-handler/webcal=brave-browser.desktop 8 | x-scheme-handler/mailto=aerc.desktop 9 | x-scheme-handler/viber=viber.desktop 10 | x-scheme-handler/msteams=teams.desktop 11 | x-scheme-handler/tg=userapp-Telegram Desktop-IOUYV1.desktop 12 | application/pdf=sioyek.desktop 13 | x-scheme-handler/terminal=kitty.desktop 14 | x-scheme-handler/discord-413081698159296512=discord-413081698159296512.desktop 15 | application/ppdf=FoxitReader.desktop 16 | application/xfdf=FoxitReader.desktop 17 | application/fdf=FoxitReader.desktop 18 | inode/directory=ranger.desktop 19 | text/plain=vim.desktop 20 | text/x-python=vim.desktop 21 | application/lrf=calibre-lrfviewer.desktop 22 | 23 | [Added Associations] 24 | image/x-portable-graymap=gimp.desktop; 25 | image/png=gimp.desktop; 26 | text/x-bibtex=gvim.desktop; 27 | text/csv=libreoffice-calc.desktop;vim.desktop;org.gnome.gedit.desktop; 28 | application/epub+zip=FBReader.desktop; 29 | video/mp4=mpv.desktop;vlc.desktop;openshot-qt.desktop; 30 | image/jpeg=gimp.desktop;pdfshuffler.desktop; 31 | application/pdf=org.gnome.Evince.desktop;xournal.desktop;pdfsam.desktop;org.inkscape.Inkscape.desktop;libreoffice-draw.desktop;gimp.desktop;mupdf.desktop;org.pwmt.zathura-pdf-mupdf.desktop;org.pwmt.zathura-pdf-poppler.desktop; 32 | text/plain=libreoffice-calc.desktop;vim.desktop; 33 | text/markdown=vim.desktop; 34 | image/svg+xml=gimp.desktop; 35 | text/html=google-chrome.desktop;gvim.desktop; 36 | application/pkix-cert=gvim.desktop; 37 | audio/mpeg=vlc.desktop;audacity.desktop; 38 | audio/basic=vlc.desktop; 39 | video/webm=firefox.desktop;openshot-qt.desktop; 40 | text/x-tex=vim.desktop; 41 | application/x-ms-dos-executable=net.lutris.Lutris.desktop; 42 | text/x-matlab=vim.desktop; 43 | text/x-r-source=rstudio.desktop; 44 | application/json=gvim.desktop; 45 | model/stl=slic3r.desktop; 46 | text/x-python=vim.desktop; 47 | audio/x-wav=vlc.desktop; 48 | text/x-csrc=vim.desktop;gvim.desktop; 49 | x-scheme-handler/tg=userapp-Telegram Desktop-SUYAO1.desktop;userapp-Telegram Desktop-IOUYV1.desktop; 50 | application/pgp-keys=nvim.desktop; 51 | x-scheme-handler/mailto=aerc.desktop; 52 | text/calendar=vim.desktop;google-chrome.desktop; 53 | video/x-matroska=vlc.desktop; 54 | application/x-cd-image=org.gnome.FileRoller.desktop; 55 | application/x-raw-disk-image=gnome-disk-image-mounter.desktop; 56 | -------------------------------------------------------------------------------- /.config/aerc/accounts.conf##c.imap: -------------------------------------------------------------------------------- 1 | default=Inbox 2 | folders-sort=Inbox 3 | copy-to=Sent 4 | pgp-key-id=D92449B0F2D9363A2DE3260B207C0A2055199A65 5 | pgp-auto-sign=false 6 | pgp-opportunistic-encrypt=false 7 | 8 | [bence] 9 | source=imaps://bence%40ferdinandy.com@mail.ferdinandy.com 10 | source-cred-cmd="pass show aerc/bence | head -n1" 11 | outgoing=smtps://bence%40ferdinandy.com@mail.ferdinandy.com 12 | outgoing-cred-cmd="pass show aerc/bence | head -n1" 13 | from=Bence Ferdinandy 14 | signature-file=~/.config/emailconfiguration/ferdinandy_signature.txt 15 | folder-map=~/.config/aerc/imap-folder-map-bence.conf 16 | 17 | [elte] 18 | # cat ~/.local/var/mailctl/ferdinandy.bence@ttk.elte.hu.auth | gpg -d | jq -r .refresh_token | pass insert -e aerc/elte/refresh 19 | source=imaps+xoauth2://ferdinandy.bence%40ttk.elte.hu@outlook.office365.com?token_endpoint=https://login.microsoftonline.com/common/oauth2/v2.0/token&client_id=08162f7c-0fd2-4200-a84a-f25a4db0b584&client_secret=TxRBilcHdC6WGBee]fs?QR:SJ8nI[g82 20 | source-cred-cmd="pass show aerc/elte/refresh" 21 | outgoing=smtp+xoauth2://ferdinandy.bence%40ttk.elte.hu@smtp.office365.com 22 | outgoing-cred-cmd="mailctl access ferdinandy.bence@ttk.elte.hu" 23 | from=Bence Ferdinandy 24 | aliases=Bence Ferdinandy 25 | #copy-to=Elküldött elemek 26 | archive=Archívum 27 | signature-file=~/.config/emailconfiguration/ferdinandy_signature.txt 28 | folders-exclude=Feladatok,Feljegyzések,Napló,Névjegyek,Naptár,Beszélgetési előzmények,Kimenő levelek 29 | folder-map=~/.config/aerc/imap-folder-map-elte.conf 30 | # check-mail=1m 31 | 32 | [pharmahungary] 33 | source=imaps://bence.ferdinandy%40pharmahungary.com@mail.securebox.hu 34 | source-cred-cmd="pass show aerc/pharmahungary | head -n1" 35 | outgoing=smtps://bence.ferdinandy%40pharmahungary.com@mail.securebox.hu 36 | outgoing-cred-cmd="pass show aerc/pharmahungary | head -n1" 37 | from=Bence Ferdinandy 38 | signature-file=~/.config/emailconfiguration/pharmahungary_signature.txt 39 | folder-map=~/.config/aerc/imap-folder-map-pharmahungary.conf 40 | 41 | [priestoferis] 42 | source=imaps+oauthbearer://priestoferis@imap.gmail.com 43 | source-cred-cmd="mailctl access priestoferis" 44 | outgoing=smtps+oauthbearer://priestoferis@smtp.gmail.com 45 | outgoing-cred-cmd="mailctl access priestoferis" 46 | from=Bence Ferdinandy 47 | signature-file=~/.config/emailconfiguration/priestoferis_signature.txt 48 | folder-map=~/.config/aerc/imap-folder-map-priestoferis.conf 49 | -------------------------------------------------------------------------------- /.config/shell/aliases.sh: -------------------------------------------------------------------------------- 1 | alias vims="/usr/bin/vim --servername VIMSERVER" 2 | alias nvs="nvim --listen ./.nvim.sock" 3 | alias v="vim" 4 | alias vl="vim --cmd 'let g:lightweight=1'" 5 | 6 | alias week="date +%V" 7 | alias diary="vim +VimwikiMakeDiaryNote" 8 | 9 | alias bw-ssh='SSH_AUTH_SOCK=$HOME/.bitwarden-ssh-agent.sock ssh' 10 | alias alias-gpg-ssh='export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)" ssh' 11 | alias set-bw-ssh='export SSH_AUTH_SOCK=$HOME/.bitwarden-ssh-agent.sock' 12 | alias set-gpg-ssh='export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"' 13 | 14 | alias citemarkdown="bibtex-ls ~/org/zotero.bib | fzf | bibtex-markdown ~/org/zotero.bib | xclip -selection clipboard" 15 | 16 | alias t="task" 17 | alias ta="task add" 18 | alias tt="taskwarrior-tui" 19 | alias tmux-new-attach="tmux new-session -t" 20 | 21 | alias bm="bashmount" 22 | alias cdl='cd "$(\ls -1dt ./*/ | head -n 1)"' # cd into last modified directory 23 | alias cr='cd $(git rev-parse --show-toplevel)' 24 | alias xo="xargs -i xdg-open {}" 25 | alias scu="systemctl --user" 26 | alias jcu="journalctl --user" 27 | 28 | alias jn="jupyter notebook" 29 | 30 | alias g="git" 31 | alias lazyadm="lazygit -w ~ -g ~/.local/share/yadm/repo.git" 32 | alias yadiff="diff <(ls) <(yadm list)" 33 | 34 | if [ -x /usr/bin/dircolors ]; then 35 | test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" 36 | alias ls='ls --color=auto' 37 | #alias dir='dir --color=auto' 38 | #alias vdir='vdir --color=auto' 39 | 40 | alias grep='grep --color=auto' 41 | alias fgrep='fgrep --color=auto' 42 | alias egrep='egrep --color=auto' 43 | fi 44 | 45 | alias ll='ls -ltrhA' 46 | alias la='ls -A' 47 | alias lh='ls -lh' 48 | alias lt='ls -ltrh' 49 | alias l='ls' 50 | alias lf="ls -tr | tail -n1" #usage: command `lf` 51 | 52 | alias t1="tree -L 1" 53 | 54 | # Add an "alert" alias for long running commands. Use like so: 55 | # sleep 10; alert 56 | alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' 57 | 58 | # Shortcuts for switching Databricks workspaces 59 | alias dbx_aws_sdp='export DATABRICKS_CONFIG_PROFILE=aws-sdp; databricks auth login --profile aws-sdp' 60 | alias dbx_gcp_prod='export DATABRICKS_CONFIG_PROFILE=gcp-prod; databricks auth login --profile gcp-prod' 61 | alias dbx_gcp_prod_dev='export DATABRICKS_CONFIG_PROFILE=gcp-prod-dev; databricks auth login --profile gcp-prod-dev' 62 | 63 | # Use AWS by default 64 | export DATABRICKS_CONFIG_PROFILE=aws-sdp 65 | -------------------------------------------------------------------------------- /.config/opencode/opencode.jsonc: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://opencode.ai/config.json", 3 | "snapshot": true, 4 | // Theme configuration 5 | "theme": "dracula", 6 | "autoupdate": false, 7 | "share": "disabled", 8 | "permission": { 9 | "bash": { 10 | "taskagent *": "allow", 11 | "ssh *": "ask", 12 | "scp *": "ask", 13 | "git commit *": "ask", 14 | "git merge *": "ask", 15 | "git rebase *": "ask", 16 | "git branch -d *": "ask", 17 | "git branch -D *": "ask", 18 | "git tag *": "ask", 19 | "git reset *": "ask", 20 | "git checkout *": "ask", 21 | "git switch *": "ask", 22 | "git stash *": "ask", 23 | "git add *": "ask", 24 | "git add -A*": "deny", 25 | "git add --all*": "deny", 26 | "git add . *": "deny", 27 | "git push *": "deny", 28 | "yadm commit *": "ask", 29 | "yadm merge *": "ask", 30 | "yadm rebase *": "ask", 31 | "yadm branch -d *": "ask", 32 | "yadm branch -D *": "ask", 33 | "yadm tag *": "ask", 34 | "yadm reset *": "ask", 35 | "yadm checkout *": "ask", 36 | "yadm switch *": "ask", 37 | "yadm stash *": "ask", 38 | "yadm add *": "ask", 39 | "yadm add -A*": "deny", 40 | "yadm add --all*": "deny", 41 | "yadm add . *": "deny", 42 | "yadm push *": "deny", 43 | "docker *": "ask", 44 | "rsync *": "ask", 45 | "terraform apply *": "deny", 46 | "sudo *": "deny", 47 | "jira issue list *": "allow", 48 | "jira epic list *": "allow", 49 | "jira issue view *": "allow", 50 | "jq *": "allow", 51 | "jaq *": "allow", 52 | "fd *": "allow", 53 | "ug *": "allow", 54 | "TMPFILE=$(mktemp)": "allow" 55 | }, 56 | }, 57 | "keybinds": { 58 | "leader": "ctrl+x", 59 | "input_newline": "ctrl+enter", 60 | "editor_open": "v", 61 | }, 62 | "mcp": { 63 | "tmux-mcp": { 64 | "type": "local", 65 | "command": ["tmux-mcp"], 66 | }, 67 | "mcp-neovim-server": { 68 | "type": "local", 69 | "command": ["mcp-neovim-server"], 70 | "environment": { 71 | "ALLOW_SHELL_COMMANDS": "false", 72 | "NVIM_SOCKET_PATH": "./.nvim.sock", 73 | }, 74 | }, 75 | "universal-skills": { 76 | "type": "local", 77 | "command": [ 78 | "universal-skills", 79 | "mcp", 80 | "--skill-dir", 81 | "~/.config/agents/skills", 82 | ], 83 | "enabled": true, 84 | }, 85 | }, 86 | "plugin": ["@franlol/opencode-md-table-formatter@0.0.3"] 87 | } 88 | -------------------------------------------------------------------------------- /.config/whkdrc: -------------------------------------------------------------------------------- 1 | .shell powershell 2 | 3 | # Reload whkd configuration 4 | # alt + o : taskkill /f /im whkd.exe && start /b whkd # if shell is cmd 5 | alt + o : taskkill /f /im whkd.exe && Start-Process whkd -WindowStyle hidden # if shell is pwsh / powershell 6 | alt + shift + o : komorebic reload-configuration 7 | 8 | # App shortcuts - these require shell to be pwsh / powershell 9 | # The apps will be focused if open, or launched if not open 10 | # alt + f : if ($wshell.AppActivate('Firefox') -eq $False) { start firefox } 11 | # alt + b : if ($wshell.AppActivate('Chrome') -eq $False) { start chrome } 12 | 13 | # Focus windows 14 | alt + h : komorebic focus left 15 | alt + j : komorebic focus down 16 | alt + k : komorebic focus up 17 | alt + l : komorebic focus right 18 | alt + shift + oem_4 : komorebic cycle-focus previous # oem_4 is [ 19 | alt + shift + oem_6 : komorebic cycle-focus next # oem_6 is ] 20 | 21 | # Move windows 22 | alt + shift + h : komorebic move left 23 | alt + shift + j : komorebic move down 24 | alt + shift + k : komorebic move up 25 | alt + shift + l : komorebic move right 26 | alt + shift + return : komorebic promote 27 | 28 | # Stack windows 29 | alt + left : komorebic stack left 30 | alt + down : komorebic stack down 31 | alt + up : komorebic stack up 32 | alt + right : komorebic stack right 33 | alt + oem_1 : komorebic unstack # oem_1 is ; 34 | alt + oem_4 : komorebic cycle-stack previous # oem_4 is [ 35 | alt + oem_6 : komorebic cycle-stack next # oem_6 is ] 36 | 37 | # Resize 38 | alt + oem_plus : komorebic resize-axis horizontal increase 39 | alt + oem_minus : komorebic resize-axis horizontal decrease 40 | alt + shift + oem_plus : komorebic resize-axis vertical increase 41 | alt + shift + oem_minus : komorebic resize-axis vertical decrease 42 | 43 | # Manipulate windows 44 | alt + t : komorebic toggle-float 45 | alt + shift + f : komorebic toggle-monocle 46 | 47 | # Window manager options 48 | alt + shift + r : komorebic retile 49 | alt + p : komorebic toggle-pause 50 | 51 | # Layouts 52 | alt + x : komorebic flip-layout horizontal 53 | alt + y : komorebic flip-layout vertical 54 | 55 | # Workspaces 56 | alt + 1 : komorebic focus-workspace 0 57 | alt + 2 : komorebic focus-workspace 1 58 | alt + 3 : komorebic focus-workspace 2 59 | 60 | alt + return : wsl.exe wezterm 61 | # Move windows across workspaces 62 | alt + shift + 1 : komorebic move-to-workspace 0 63 | alt + shift + 2 : komorebic move-to-workspace 1 64 | alt + shift + 3 : komorebic move-to-workspace 2 65 | -------------------------------------------------------------------------------- /.config/polybar/scripts/weather-openmap.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euo pipefail 3 | 4 | get_icon() { 5 | case $1 in 6 | 01d) icon="🟠";; 7 | 01n) icon="⚫";; 8 | 02d) icon="⛅";; 9 | 02n) icon="⛅";; 10 | 04d) icon="🌥️";; 11 | 04n) icon="🌥️";; 12 | 09d) icon="🌧️";; 13 | 09n) icon="🌧️";; 14 | 10d) icon="🌦️";; 15 | 10n) icon="🌦️";; 16 | 11d) icon="🌩️";; 17 | 11n) icon="🌩️";; 18 | 13d) icon="❄️";; 19 | 13n) icon="❄️";; 20 | 50d) icon="🌫️";; 21 | 50n) icon="🌫️";; 22 | *) icon="☁️"; 23 | esac 24 | 25 | echo $icon 26 | } 27 | 28 | get_duration() { 29 | 30 | osname=$(uname -s) 31 | 32 | case $osname in 33 | *BSD) date -r "$1" -u +%H:%M;; 34 | *) date --date="@$1" -u +%H:%M;; 35 | esac 36 | 37 | } 38 | 39 | KEY="" 40 | CITY="" 41 | UNITS="metric" 42 | SYMBOL="°" 43 | 44 | API="https://api.openweathermap.org/data/2.5" 45 | 46 | if [ ! -z $CITY ]; then 47 | if [ "$CITY" -eq "$CITY" ] 2>/dev/null; then 48 | CITY_PARAM="id=$CITY" 49 | else 50 | CITY_PARAM="q=$CITY" 51 | fi 52 | 53 | current=$(curl -sf "$API/weather?appid=$KEY&$CITY_PARAM&units=$UNITS") 54 | #curl -s "https://api.openweathermap.org/data/2.5/onecall?lat=0&lon=0&appid=TOKEN&units=metric" | jq -r '.daily[1].temp.day' 55 | forecast=$(curl -sf "$API/forecast?appid=$KEY&$CITY_PARAM&units=$UNITS&cnt=1") 56 | else 57 | location=$(curl -sf https://location.services.mozilla.com/v1/geolocate?key=geoclue) 58 | 59 | if [ ! -z "$location" ]; then 60 | location_lat="$(echo "$location" | jq '.location.lat')" 61 | location_lon="$(echo "$location" | jq '.location.lng')" 62 | 63 | current=$(curl -sf "$API/weather?appid=$KEY&lat=$location_lat&lon=$location_lon&units=$UNITS") 64 | forecast=$(curl -sf "$API/forecast?appid=$KEY&lat=$location_lat&lon=$location_lon&units=$UNITS&cnt=1") 65 | fi 66 | fi 67 | 68 | if [ ! -z "$current" ] && [ ! -z "$forecast" ]; then 69 | current_temp=$(printf "%.0f" $(echo "$current" | jq ".main.temp")) 70 | current_icon=$(echo "$current" | jq -r ".weather[0].icon") 71 | 72 | forecast_temp=$(printf "%.0f" $(echo "$forecast" | jq ".list[].main.temp")) 73 | forecast_icon=$(echo "$forecast" | jq -r ".list[].weather[0].icon") 74 | 75 | sun_rise=$(echo "$current" | jq ".sys.sunrise") 76 | sun_set=$(echo "$current" | jq ".sys.sunset") 77 | now=$(date +%s) 78 | 79 | if [ "$sun_rise" -gt "$now" ]; then 80 | daytime="🌅 $(get_duration "$((sun_rise-now))")" 81 | elif [ "$sun_set" -gt "$now" ]; then 82 | daytime="🌇 $(get_duration "$((sun_set-now))")" 83 | else 84 | daytime="🌅 $(get_duration "$((sun_rise-now))")" 85 | fi 86 | 87 | echo "$(get_icon "$current_icon") $current_temp$SYMBOL $(get_icon "$forecast_icon") $forecast_temp$SYMBOL $daytime" 88 | fi 89 | -------------------------------------------------------------------------------- /.vim/autoload/myfunctions.vim: -------------------------------------------------------------------------------- 1 | function! myfunctions#show_documentation() 2 | if (index(['vim','help'], &filetype) >= 0) 3 | execute 'h '.expand('') 4 | elseif (len(bibtexcite#getfilepath('pandoc')) > 1) 5 | call bibtexcite#openfile('pandoc') 6 | elseif (len(bibtexcite#getfilepath('latex')) > 1) 7 | call bibtexcite#openfile('latex') 8 | elseif (len(bibtexcite#getcitekey('pandoc')) > 1) 9 | call bibtexcite#showcite('pandoc') 10 | elseif (len(bibtexcite#getcitekey('latex')) > 1) 11 | call bibtexcite#showcite('latex') 12 | elseif (coc#rpc#ready()) 13 | call CocActionAsync('doHover') 14 | else 15 | execute '!' . &keywordprg . " " . expand('') 16 | endif 17 | endfunction 18 | 19 | 20 | function! myfunctions#coc_toggle() 21 | if exists('g:did_coc_loaded') 22 | if g:coc_enabled 23 | CocDisable 24 | else 25 | CocEnable 26 | endif 27 | endif 28 | endfunction 29 | 30 | function! myfunctions#ale_fix_toggle() 31 | if exists('b:ale_fix_on_save') 32 | if b:ale_fix_on_save 33 | let b:ale_fix_on_save = 0 34 | else 35 | let b:ale_fix_on_save = 1 36 | endif 37 | else 38 | if g:ale_fix_on_save 39 | let b:ale_fix_on_save = 0 40 | else 41 | let b:ale_fix_on_save = 1 42 | endif 43 | endif 44 | endfunction 45 | 46 | function! myfunctions#set_softwrap() 47 | set columns=90 48 | set textwidth=0 49 | set wrap 50 | endfunction 51 | 52 | function! myfunctions#set_hardwrap() 53 | " silent !tput cols 54 | set textwidth=80 55 | set nowrap 56 | endfunction 57 | 58 | 59 | function! myfunctions#make_thousand_separators_get_word(word) 60 | if a:word =~ '\<\d\.\d\+[eE]+\d\+\>' 61 | let l:parts = split(a:word,'\ce+') 62 | let l:parts2 = split(l:parts[0],'\.') 63 | let znum = str2nr(l:parts[1]) - len(l:parts2[1]) 64 | let l:cword = join(l:parts2) . repeat(0,l:znum) 65 | else 66 | let l:cword = a:word 67 | endif 68 | let l:newword = substitute(l:cword, '\(\.\d\+\)\@') 74 | execute 'norm! ciW' . myfunctions#make_thousand_separators_get_word(l:cword) 75 | endfunction 76 | 77 | function! myfunctions#make_thousand_separators_line() 78 | " add spaces as thousands separator for the current word under the cursor 79 | " TODO: do it on ranges: https://stackoverflow.com/questions/10572996/passing-command-range-to-a-function 80 | " TODO: make it dot repeatable 81 | let l:newline = [] 82 | for word in split(getline(line('.'))) 83 | call add(l:newline, myfunctions#make_thousand_separators_get_word(word)) 84 | endfor 85 | let l:newline = join(l:newline) 86 | execute 'norm! cc' . l:newline 87 | endfunction 88 | -------------------------------------------------------------------------------- /.config/notmuch/default/config: -------------------------------------------------------------------------------- 1 | # .notmuch-config - Configuration file for the notmuch mail system 2 | # 3 | # For more information about notmuch, see https://notmuchmail.org 4 | 5 | # Database configuration 6 | # 7 | # The only value supported here is 'path' which should be the top-level 8 | # directory where your mail currently exists and to where mail will be 9 | # delivered in the future. Files should be individual email messages. 10 | # Notmuch will store its database within a sub-directory of the path 11 | # configured here named ".notmuch". 12 | # 13 | [database] 14 | path=.mail 15 | 16 | # User configuration 17 | # 18 | # Here is where you can let notmuch know how you would like to be 19 | # addressed. Valid settings are 20 | # 21 | # name Your full name. 22 | # primary_email Your primary email address. 23 | # other_email A list (separated by ';') of other email addresses 24 | # at which you receive email. 25 | # 26 | # Notmuch will use the various email addresses configured here when 27 | # formatting replies. It will avoid including your own addresses in the 28 | # recipient list of replies, and will set the From address based on the 29 | # address to which the original email was addressed. 30 | # 31 | # [user] 32 | # name=Bence Ferdinandy 33 | # primary_email=bence@ferdinandy.com 34 | # other_email=priestoferis@gmail.com;ferdinandy.bence@ttk.elte.hu; 35 | 36 | # Configuration for "notmuch new" 37 | # 38 | # The following options are supported here: 39 | # 40 | # tags A list (separated by ';') of the tags that will be 41 | # added to all messages incorporated by "notmuch new". 42 | # 43 | # ignore A list (separated by ';') of file and directory names 44 | # that will not be searched for messages by "notmuch new". 45 | # 46 | # NOTE: *Every* file/directory that goes by one of those 47 | # names will be ignored, independent of its depth/location 48 | # in the mail store. 49 | # 50 | [new] 51 | tags=inbox;unread 52 | ignore=.uidvalidity 53 | # Search configuration 54 | # 55 | # The following option is supported here: 56 | # 57 | # exclude_tags 58 | # A ;-separated list of tags that will be excluded from 59 | # search results by default. Using an excluded tag in a 60 | # query will override that exclusion. 61 | # 62 | [search] 63 | 64 | # Maildir compatibility configuration 65 | # 66 | # The following option is supported here: 67 | # 68 | # synchronize_flags Valid values are true and false. 69 | # 70 | # If true, then the following maildir flags (in message filenames) 71 | # will be synchronized with the corresponding notmuch tags: 72 | # 73 | # Flag Tag 74 | # ---- ------- 75 | # D draft 76 | # F flagged 77 | # P passed 78 | # R replied 79 | # S unread (added when 'S' flag is not present) 80 | # 81 | # The "notmuch new" command will notice flag changes in filenames 82 | # and update tags, while the "notmuch tag" and "notmuch restore" 83 | # commands will notice tag changes and update flags in filenames 84 | # 85 | [maildir] 86 | synchronize_flags=true 87 | -------------------------------------------------------------------------------- /.vim/vim-plug-configs/coc.vim: -------------------------------------------------------------------------------- 1 | " LSP implementation 2 | Plug 'neoclide/coc.nvim', {'branch': 'release'} 3 | Plug 'antoinemadec/coc-fzf', {'branch': 'release'} 4 | " https://github.com/neoclide/coc.nvim/pull/3862 5 | let s:cocextensions = [ 6 | \ 'coc-json', 7 | \ 'coc-volar', 8 | \ 'coc-pyright', 9 | \ 'coc-snippets', 10 | \ 'coc-tag', 11 | \ 'coc-tsserver', 12 | \ 'coc-vimtex', 13 | \ 'coc-go', 14 | \ 'coc-texlab', 15 | \ 'coc-sourcekit', 16 | \ 'coc-sql', 17 | \ 'coc-db'] 18 | 19 | " if g:os == 'Android' 20 | " let g:coc_global_extensions = s:cocextensions 21 | " else 22 | " let g:coc_global_extensions = s:cocextensions + ['coc-tabnine'] 23 | " endif 24 | 25 | let g:coc_fzf_preview = '' 26 | let g:coc_fzf_opts = [] 27 | " let coc-config-notification-disabledProgressSources = * <- this is not 28 | " working somehow 29 | 30 | 31 | autocmd CursorHold * silent call CocActionAsync('highlight') 32 | 33 | nmap gd (coc-definition) 34 | nmap gy (coc-type-definition) 35 | nmap gz (coc-implementation) 36 | nmap gr (coc-references) 37 | nmap gR (coc-plug-references-used) 38 | " maybe instead of coc-rename refactor? 39 | nmap dn (coc-rename) 40 | nmap dr (coc-refactor) 41 | " apply autofix to problem on the current line. 42 | nmap df (coc-fix-current) 43 | nmap dm (coc-format-selected) 44 | xmap dm (coc-format-selected) 45 | nmap dc (coc-codeaction) 46 | " Applying codeAction to the selected region. 47 | " Example: `aap` for current paragraph 48 | xmap a (coc-codeaction-selected) 49 | nmap a (coc-codeaction-selected) 50 | nmap da (coc-codeaction-line) 51 | 52 | nmap do :CocFzfList outline 53 | nmap dl :CocFzfList 54 | 55 | xmap if (coc-funcobj-i) 56 | omap if (coc-funcobj-i) 57 | xmap af (coc-funcobj-a) 58 | omap af (coc-funcobj-a) 59 | xmap ic (coc-classobj-i) 60 | omap ic (coc-classobj-i) 61 | xmap ac (coc-classobj-a) 62 | omap ac (coc-classobj-a) 63 | 64 | inoremap coc#pum#visible() ? coc#pum#confirm() : (pumvisible() ? "\" : "\") 65 | 66 | 67 | " Remap and for scroll float windows/popups. 68 | if has('nvim-0.4.0') || has('patch-8.2.0750') 69 | nnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" 70 | nnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" 71 | inoremap coc#float#has_scroll() ? "\=coc#float#scroll(1)\" : "\" 72 | inoremap coc#float#has_scroll() ? "\=coc#float#scroll(0)\" : "\" 73 | vnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" 74 | vnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" 75 | endif 76 | " 77 | -------------------------------------------------------------------------------- /.config/emailconfiguration/rearchive.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import re 3 | from datetime import datetime, timezone 4 | from email.parser import BytesParser 5 | from email.utils import parsedate_to_datetime 6 | from pathlib import Path 7 | 8 | from dateutil import parser as dateparser 9 | from dateutil.relativedelta import relativedelta 10 | 11 | 12 | def setUpMaildir(date): 13 | date = str(date) 14 | Path.mkdir(Path(date) / "cur", parents=True, exist_ok=True) 15 | Path.mkdir(Path(date) / "tmp", parents=True, exist_ok=True) 16 | Path.mkdir(Path(date) / "new", parents=True, exist_ok=True) 17 | 18 | 19 | def move_maildir(path, targetfolder, dry): 20 | name = re.sub(r",U\=\d+", "", path.name) 21 | newname = targetfolder / "cur" / name 22 | if dry: 23 | print(f"{path} -> {newname}") 24 | else: 25 | path.rename(newname) 26 | 27 | 28 | def main(path, targetpath, dry): 29 | parser = BytesParser() 30 | if targetpath is None: 31 | targetpath = path 32 | print("source:", path, "target:", targetpath) 33 | totalmessages = 0 34 | movedmessages = 0 35 | for i, msgpath in enumerate(Path(path).glob("cur/*")): 36 | totalmessages += 1 37 | msg = parser.parse(open(msgpath, "rb"), headersonly=True) 38 | # print(msg["date"]) 39 | if msg["date"] is None: 40 | continue 41 | try: 42 | dateheader = msg["date"].replace("Date:", "") 43 | except AttributeError: 44 | pass 45 | try: 46 | date = dateparser.parse(dateheader) 47 | except dateparser.ParserError: 48 | date = parsedate_to_datetime(dateheader) 49 | if date.tzinfo is None or date.tzinfo.utcoffset(date) is None: 50 | date = date.replace(tzinfo=timezone.utc) 51 | if datetime.now(timezone.utc) - relativedelta(years=1) >= date: 52 | targetfolder = Path(targetpath) / str(date.year) 53 | setUpMaildir(targetfolder) 54 | move_maildir(msgpath, targetfolder, dry) 55 | movedmessages += 1 56 | print(f"Moved {movedmessages} messages out of {totalmessages}") 57 | 58 | 59 | if __name__ == "__main__": 60 | parser = argparse.ArgumentParser( 61 | usage="""python3 rearchive.py ~/mail/account/Archive [-t ~/mail/otherfolder/Archive] 62 | 63 | The script will look for messages in ~/mail/account/Archive/cur and move them 64 | to yearly archived folders in the maildir (e.g. to Archive/2022/cur) if the 65 | message is older than one year. That is if the current date is 2023.03.15, then 66 | all emails from 2021 will be in the 2021 folder, but emails from after 67 | 2022.03.15 will still be in the top folder. The target folder can optionally be 68 | changed to a different one then the original. 69 | 70 | """ 71 | ) 72 | parser.add_argument("folder", type=str) 73 | parser.add_argument("-t", "--target", type=str) 74 | parser.add_argument("--dry-run", action="store_true") 75 | args = parser.parse_args() 76 | main(args.folder, args.target, args.dry_run) 77 | -------------------------------------------------------------------------------- /.config/emailconfiguration/googlestat.py: -------------------------------------------------------------------------------- 1 | import pickle 2 | from datetime import datetime 3 | from email.parser import BytesParser 4 | from email.utils import parsedate_to_datetime 5 | from pathlib import Path 6 | 7 | import numpy as np 8 | from dateutil import parser as dateparser 9 | from matplotlib import pyplot as plt 10 | 11 | MAILDIR = Path("/home/fbence/.mail") 12 | 13 | 14 | def checkIfMail(path): 15 | if path.is_dir(): 16 | return False 17 | if path.parent.stem in ["cur", "tmp", "new"]: 18 | return True 19 | return False 20 | 21 | 22 | def parseMessage(msg): 23 | addresses = [] 24 | for header in ["to", "from", "cc", "bcc"]: 25 | parsed = parseHeader(msg[header]) 26 | if parsed is not None: 27 | addresses += parsed 28 | try: 29 | date = parsedate_to_datetime(msg["date"]).timestamp() 30 | except ValueError: 31 | date = 0 32 | return addresses, date 33 | 34 | 35 | parser = BytesParser() 36 | counters = {} 37 | for i, msgpath in enumerate(Path(MAILDIR).glob("**/*")): 38 | if i == 100: 39 | pass 40 | if not checkIfMail(msgpath): 41 | continue 42 | try: 43 | msg = parser.parse(open(msgpath, "rb"), headersonly=True) 44 | try: 45 | dateheader = msg["date"].replace("Date:", "") 46 | except AttributeError: 47 | pass 48 | try: 49 | date = dateparser.parse(dateheader) 50 | except dateparser.ParserError: 51 | date = parsedate_to_datetime(dateheader) 52 | year = date.year 53 | if year not in counters: 54 | counters[year] = [0, 0] 55 | 56 | for key, val in msg.items(): 57 | if "google.com" in val or "gmail.com" in val: 58 | counters[year][0] += 1 59 | break 60 | counters[year][1] += 1 61 | except: 62 | pass 63 | print(counters) 64 | pickle.dump(counters, open("googlestat.pkl", "wb")) 65 | data = [] 66 | for key, val in counters.items(): 67 | data.append([key, val[0] / val[1]]) 68 | data = sorted(data, key=lambda x: x[0]) 69 | data = np.array(data) 70 | fig = plt.figure() 71 | plt.plot(data[:, 0], data[:, 1], "*-") 72 | # plt.legend() 73 | plt.title("gmail ratio") 74 | plt.savefig("googlestat.svg") 75 | # addresses = set() 76 | # datetimes = [] 77 | # addressnum = [] 78 | # for i, (addresslist, date) in enumerate(sorted(parsed, key=lambda x: x[1])): 79 | # if date <= 0: 80 | # continue 81 | # for addr in addresslist: 82 | # addresses.add(addr[1]) 83 | # datetimes.append(datetime.fromtimestamp(date)) 84 | # addressnum.append(len(addresses)) 85 | 86 | # fig = plt.figure() 87 | # plt.plot(datetimes, addressnum, label="# addresses") 88 | # plt.plot(datetimes, [i + 1 for i in range(len(datetimes))], label="# emails") 89 | # plt.legend() 90 | # fig.autofmt_xdate() 91 | # plt.savefig("date-address.svg") 92 | 93 | 94 | # fig = plt.figure() 95 | # plt.plot([i + 1 for i in range(len(addressnum))], addressnum) 96 | # plt.xlabel("# emails") 97 | # plt.ylabel("# addresses") 98 | # plt.savefig("email-address.svg") 99 | -------------------------------------------------------------------------------- /.config/agents/skills/tecton/SKILL.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: tecton 3 | description: >- 4 | Run Tecton plan and tests via Pants in the data-science repo. 5 | Handles long-running commands with proper output capture to avoid truncation. 6 | --- 7 | 8 | # Tecton Operations Skill 9 | 10 | ## Critical: Output Handling for Long Commands 11 | 12 | Tecton commands (especially `tecton-plan`) produce very long output that gets truncated. 13 | **Always use temp file capture pattern:** 14 | 15 | ```bash 16 | TMPFILE=$(mktemp) 17 | PANTS_CONCURRENT=True pants tecton-plan --workspace= --skip-tests 2>&1 | tee "$TMPFILE"; echo "EXIT_CODE: $?" 18 | # Inspect results 19 | tail -200 "$TMPFILE" 20 | # If needed, inspect more or search for specific errors 21 | rg "error|Error|ERROR" "$TMPFILE" 22 | # Clean up when done 23 | rm -f "$TMPFILE" 24 | ``` 25 | 26 | **Key points:** 27 | - Use `tee` to capture output to temp file while still streaming 28 | - Check exit code with `echo "EXIT_CODE: $?"` 29 | - Use `tail` or `rg` to inspect the temp file as needed 30 | - **Always clean up the temp file** when done with the operation 31 | 32 | ## Environment 33 | 34 | - Set `PANTS_CONCURRENT=True` when running multiple pants invocations concurrently 35 | - All commands must be run from the data-science repo root 36 | 37 | ## Workspaces for Testing 38 | 39 | - **`checkoutandsale-v1-staging`**: Staging workspace - check against this first 40 | - **`bence-dev`**: Personal dev workspace for clarifying issues if staging fails with confusing errors 41 | 42 | If staging passes, no need to check against `bence-dev`. Use `bence-dev` only when staging errors are unclear. 43 | 44 | ## Operations 45 | 46 | ### tecton-plan 47 | 48 | Runs `tecton plan` against a workspace. Use `--skip-tests` to speed up iteration. 49 | 50 | ```bash 51 | # Plan against staging (check this first) 52 | TMPFILE=$(mktemp) 53 | PANTS_CONCURRENT=True pants tecton-plan --workspace=checkoutandsale-v1-staging --skip-tests 2>&1 | tee "$TMPFILE"; echo "EXIT_CODE: $?" 54 | tail -200 "$TMPFILE" 55 | rm -f "$TMPFILE" 56 | 57 | # Plan against dev workspace (only if staging errors are unclear) 58 | TMPFILE=$(mktemp) 59 | PANTS_CONCURRENT=True pants tecton-plan --workspace=bence-dev --skip-tests 2>&1 | tee "$TMPFILE"; echo "EXIT_CODE: $?" 60 | tail -200 "$TMPFILE" 61 | rm -f "$TMPFILE" 62 | ``` 63 | 64 | ### tecton-test-run 65 | 66 | Run Tecton tests using the pants test goal with `--tecton-test-run` flag. 67 | 68 | ```bash 69 | # Run all tecton tests in a directory 70 | pants test --tecton-test-run projects/features/repos/sig_tecton/tests/sig_tecton/datasources/orders/:: 71 | 72 | # Run a specific test file 73 | pants test --tecton-test-run projects/features/repos/sig_tecton/tests/sig_tecton/datasources/orders/test_orders_datasources.py 74 | 75 | # Run a specific test function 76 | pants test --tecton-test-run projects/features/repos/sig_tecton/tests/path/to/test_file.py -- -k test_function_name 77 | ``` 78 | 79 | For long test runs, use the same temp file capture pattern: 80 | 81 | ```bash 82 | TMPFILE=$(mktemp) 83 | pants test --tecton-test-run projects/features/repos/sig_tecton/tests/:: 2>&1 | tee "$TMPFILE"; echo "EXIT_CODE: $?" 84 | tail -200 "$TMPFILE" 85 | rm -f "$TMPFILE" 86 | ``` 87 | -------------------------------------------------------------------------------- /.termux/termux.properties: -------------------------------------------------------------------------------- 1 | ### After making changes and saving you need to run `termux-reload-settings` 2 | ### to update the terminal. All information here can also be found on the 3 | ### wiki: https://wiki.termux.com/wiki/Terminal_Settings 4 | 5 | ############### 6 | # Extra keys 7 | ############### 8 | 9 | ### Settings for choosing which set of symbols to use for illustrating keys. 10 | ### Choose between default, arrows-only, arrows-all, all and none 11 | # extra-keys-style = default 12 | 13 | ### Default extra-key configuration 14 | # extra-keys = [[ESC, TAB, CTRL, ALT, {key: '-', popup: '|'}, DOWN, UP]] 15 | 16 | ### Two rows with more keys 17 | # extra-keys = [['ESC','/','-','HOME','UP','END','PGUP'], \ 18 | # ['TAB','CTRL','ALT','LEFT','DOWN','RIGHT','PGDN']] 19 | 20 | ### Configuration with additional popup keys (swipe up from an extra key) 21 | # extra-keys = [[ \ 22 | # {key: ESC, popup: {macro: "CTRL f d", display: "tmux exit"}}, \ 23 | # {key: CTRL, popup: {macro: "CTRL f BKSP", display: "tmux ←"}}, \ 24 | # {key: ALT, popup: {macro: "CTRL f TAB", display: "tmux →"}}, \ 25 | # {key: TAB, popup: {macro: "ALT a", display: A-a}}, \ 26 | # {key: LEFT, popup: HOME}, \ 27 | # {key: DOWN, popup: PGDN}, \ 28 | # {key: UP, popup: PGUP}, \ 29 | # {key: RIGHT, popup: END}, \ 30 | # {macro: "ALT j", display: A-j, popup: {macro: "ALT g", display: A-g}}, \ 31 | # {key: KEYBOARD, popup: {macro: "CTRL d", display: exit}} \ 32 | # ]] 33 | 34 | extra-keys = [[ \ 35 | ESC, \ 36 | TAB, \ 37 | '/', \ 38 | HOME,\ 39 | UP, \ 40 | END, \ 41 | { key: ']', popup: {macro: "] f"}} \ 42 | ],[ \ 43 | KEYBOARD, \ 44 | CTRL, \ 45 | ALT, \ 46 | { key: LEFT, popup: {macro: "[ b"}}, \ 47 | DOWN, \ 48 | { key: RIGHT, popup: {macro: "] b"}}, \ 49 | { key: '[', popup: {macro: "[ f"}} \ 50 | ]] 51 | 52 | ############### 53 | # Colors/themes 54 | ############### 55 | 56 | ### Force black colors for drawer and dialogs 57 | use-black-ui = true 58 | 59 | ############### 60 | # Keyboard shortcuts 61 | ############### 62 | 63 | ### Open a new terminal with ctrl + t (volume down + t) 64 | # shortcut.create-session = ctrl + t 65 | 66 | ### Go one session down with (for example) ctrl + 2 67 | # shortcut.next-session = ctrl + 2 68 | 69 | ### Go one session up with (for example) ctrl + 1 70 | # shortcut.previous-session = ctrl + 1 71 | 72 | ### Rename a session with (for example) ctrl + n 73 | # shortcut.rename-session = ctrl + n 74 | 75 | ############### 76 | # Bell key 77 | ############### 78 | 79 | ### Vibrate device (default). 80 | # bell-character = vibrate 81 | 82 | ### Beep with a sound. 83 | # bell-character = beep 84 | 85 | ### Ignore bell character. 86 | # bell-character = ignore 87 | 88 | ############### 89 | # Back key 90 | ############### 91 | 92 | ### Send the Escape key. 93 | # back-key=escape 94 | 95 | ### Hide keyboard or leave app (default). 96 | # back-key=back 97 | 98 | ############### 99 | # Keyboard issue workarounds 100 | ############### 101 | 102 | ### Letters might not appear until enter is pressed on Samsung devices 103 | # enforce-char-based-input = true 104 | 105 | ### ctrl+space (for marking text in emacs) does not work on some devices 106 | # ctrl-space-workaround = true 107 | -------------------------------------------------------------------------------- /.config/i3status-rust/scripts/focused-window-name: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | # 4 | # Copyright 2019 Bence Ferdinandy 5 | # 6 | # This program is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation, either version 3 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # This program is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with this program. If not, see . 18 | # 19 | # USAGE: 20 | # 21 | # Can read from environment variables (filter_list and short_length) or 22 | # from command line arguments, but the latter takes precendence. 23 | # 24 | # 25 | import argparse 26 | import os 27 | import subprocess 28 | import sys 29 | 30 | from i3ipc import Connection, Event 31 | 32 | 33 | def escape(name): 34 | name = name.replace("&", "&") 35 | name = name.replace("<", "<") 36 | name = name.replace(">", ">") 37 | name = name.replace('"', """) 38 | return name 39 | 40 | 41 | def value_span(value): 42 | return value 43 | 44 | 45 | parser = argparse.ArgumentParser( 46 | description="Returns the title of the currently focused window" 47 | ) 48 | parser.add_argument( 49 | "-f", 50 | "--filter_list", 51 | nargs="+", 52 | help="only return window title if the window instance is in the provided list, eg. specifying libreoffice will result in only instance of libreoffice being returned", 53 | ) 54 | parser.add_argument( 55 | "-s", 56 | "--short_length", 57 | type=int, 58 | help="max number of characters to print for short version", 59 | ) 60 | args = parser.parse_args() 61 | 62 | filter_list_env = os.environ.get("filter_list") 63 | short_length_env = os.environ.get("short_length") 64 | 65 | if filter_list_env is None and args.filter_list is None: 66 | filter_list = [] 67 | elif args.filter_list is None: 68 | filter_list = filter_list_env.split() 69 | else: 70 | filter_list = args.filter_list 71 | 72 | if short_length_env is None and args.short_length is None: 73 | short_length = 10 74 | elif args.short_length is None: 75 | short_length = int(short_length_env) 76 | else: 77 | short_length = args.short_length 78 | i3 = Connection() 79 | focused = i3.get_tree().find_focused() 80 | 81 | if focused is None: 82 | sys.exit() 83 | 84 | name = ( 85 | focused.name 86 | if hasattr(focused, "name") and focused.name is not None 87 | else sys.exit() 88 | ) 89 | instance = focused.window_instance if hasattr(focused, "window_instance") else None 90 | if instance is None: 91 | sys.exit() 92 | # LibreOffice adds its own name at the end so we need to remove that 93 | if ( 94 | name is not None 95 | and "LibreOffice" in name.split("-")[-1] 96 | and instance == "libreoffice" 97 | ): 98 | name = "-".join(name.split("-")[:-1]) 99 | 100 | if len(filter_list) == 0 or instance in filter_list: 101 | print(value_span(escape(name[:short_length]))) 102 | -------------------------------------------------------------------------------- /.config/task/bubblegum-256.theme: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Copyright 2006 - 2021, Tomas Babej, Paul Beckingham, Federico Hernandez. 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included 13 | # in all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 16 | # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 | # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | # SOFTWARE. 22 | # 23 | # https://www.opensource.org/licenses/mit-license.php 24 | # 25 | ############################################################################### 26 | 27 | # Theme author: Adrian Galilea @adriangalilea 28 | 29 | rule.precedence.color=deleted,completed,active,keyword.,tag.,project.,overdue,scheduled,due.today,due,blocked,blocking,recurring,tagged,uda. 30 | 31 | # General decoration 32 | color.label= 33 | color.label.sort= 34 | color.alternate=on gray2 35 | color.header=rgb013 36 | color.footnote=rgb013 37 | color.warning=rgb520 38 | color.error=red 39 | color.debug=blue 40 | 41 | # Task state 42 | color.completed= 43 | color.deleted= 44 | color.active=rgb553 45 | color.recurring=rgb535 46 | color.scheduled= 47 | color.until= 48 | color.blocked=gray10 49 | color.blocking=on rgb002 50 | 51 | # Project 52 | color.project.none= 53 | 54 | # Priority 55 | color.uda.priority.H=rgb435 56 | color.uda.priority.L=gray15 57 | 58 | # Tags 59 | color.tag.next=rgb253 60 | color.tag.none= 61 | color.tagged= 62 | 63 | # Due 64 | color.due= 65 | color.due.today=rgb125 66 | color.overdue=bold inverse 67 | 68 | # Report: burndown 69 | color.burndown.pending=on rgb103 70 | color.burndown.started=on rgb214 71 | color.burndown.done=on gray4 72 | 73 | # Report: history 74 | color.history.add=color0 on rgb105 75 | color.history.done=color0 on rgb205 76 | color.history.delete=color0 on rgb305 77 | 78 | # Report: summary 79 | color.summary.bar=white on rgb104 80 | color.summary.background=white on rgb001 81 | 82 | # Command: calendar 83 | color.calendar.due=color0 on rgb325 84 | color.calendar.due.today=color0 on rgb404 85 | color.calendar.holiday=color15 on rgb102 86 | color.calendar.overdue=color0 on color5 87 | color.calendar.scheduled= 88 | color.calendar.today=color15 on rgb103 89 | color.calendar.weekend=gray12 on gray3 90 | color.calendar.weeknumber=rgb104 91 | 92 | # Command: sync 93 | color.sync.added=gray4 94 | color.sync.changed=rgb214 95 | color.sync.rejected=rgb103 96 | 97 | # Command: undo 98 | color.undo.before=rgb103 99 | color.undo.after=rgb305 100 | -------------------------------------------------------------------------------- /.vim/vim-plug-configs/plugins.vim: -------------------------------------------------------------------------------- 1 | Plug 'dstein64/vim-startuptime' 2 | " dispatch commands in the background 3 | Plug 'tpope/vim-dispatch' 4 | " run tests with e.g. Dispatch 5 | Plug 'vim-test/vim-test' 6 | " database fun 7 | Plug 'tpope/vim-dadbod' 8 | Plug 'kristijanhusak/vim-dadbod-ui' 9 | Plug 'kristijanhusak/vim-dadbod-completion' 10 | " it is in conflict with unimpaired so needs to be before 11 | Plug 'rickhowe/diffchar.vim' 12 | " extended % 13 | Plug 'andymass/vim-matchup' 14 | " add new targets to vim eg c2i) 15 | Plug 'wellle/targets.vim' 16 | " adds xml/html text objects 17 | Plug 'kana/vim-textobj-user' | Plug 'whatyouhide/vim-textobj-xmlattr' 18 | " tmux config syntax highlight 19 | Plug 'whatyouhide/vim-tmux-syntax' 20 | " syntax for kitty 21 | Plug 'fladson/vim-kitty' 22 | " command to align text (never used it yet, learn or remove) 23 | " make path also when writing a new file with 24 | Plug 'jessarcher/vim-heritage' 25 | " open files at the last edit with some smart settings 26 | Plug 'farmergreg/vim-lastplace' 27 | " better surrounds than tpope's 28 | Plug 'machakann/vim-sandwich' 29 | " for interactively viewing json with jq 30 | Plug 'bfrg/vim-jqplay' 31 | 32 | 33 | " register viewing 34 | Plug 'junegunn/vim-peekaboo' 35 | let g:peekaboo_delay = 200 36 | 37 | 38 | " substitution for singular and plurals + changing the from snake_case to 39 | " camelCase 40 | Plug 'tpope/vim-abolish' 41 | 42 | " auto expandtab setting 43 | Plug 'tpope/vim-sleuth' 44 | 45 | 46 | " n_ctrl-x/a work as expected for dates, roman numerals etc. 47 | Plug 'tpope/vim-speeddating' 48 | " makes speeddating repeatable 49 | Plug 'tpope/vim-repeat' 50 | " simple comment facilities 51 | Plug 'tpope/vim-commentary' 52 | " file browser 53 | Plug 'preservim/nerdtree', { 'on': 'NERDTreeToggle' } 54 | Plug 'Xuyuanp/nerdtree-git-plugin', { 'on': 'NERDTreeToggle' } 55 | Plug 'tpope/vim-vinegar' 56 | 57 | Plug 'honza/vim-snippets' 58 | 59 | 60 | " generate tags for jumping between latex tags and others 61 | " requires https://askubuntu.com/questions/796408/installing-and-using-universal-ctags-instead-of-exuberant-ctags 62 | " clears searches smarter 63 | Plug 'junegunn/vim-slash' 64 | " visualize undo trees 65 | Plug 'simnalamburt/vim-mundo' 66 | let g:mundo_help = 1 67 | let g:mundo_close_on_revert = 1 68 | 69 | 70 | " doesn't open misspelled files 71 | " Plug 'einfachtoll/didyoumean' 72 | " let g:dym_use_fzf = 1 73 | " did you mean will use fzf 74 | 75 | 76 | " vim unimpaired might not be really needed ... 77 | Plug 'tpope/vim-unimpaired' 78 | " wrap unix commands 79 | Plug 'tpope/vim-eunuch' 80 | " asynchronous linting 81 | " switch between multiple lines and single lines 82 | Plug 'AndrewRadev/splitjoin.vim' 83 | 84 | Plug 'nanotee/zoxide.vim' 85 | " auto switch to root dir 86 | " Plug 'airblade/vim-rooter' 87 | 88 | Plug 'hauleth/vim-backscratch' 89 | 90 | Plug 'pangloss/vim-javascript' 91 | Plug 'othree/html5.vim' 92 | Plug 'elzr/vim-json' 93 | " Plug 'jpalardy/vim-slime', { 'for': 'python' } 94 | " Plug 'hanschen/vim-ipython-cell', { 'for': 'python' }" 95 | " PYTHON 96 | " python code folding 97 | Plug 'tmhedberg/SimpylFold' 98 | Plug 'jeetsukumaran/vim-pythonsense' 99 | 100 | " python textobjects: isn't this covered by the LSP? 101 | Plug 'Konfekt/FastFold' 102 | Plug 'vim-scripts/LargeFile' 103 | " Plug 'mhinz/vim-startify' 104 | " let g:startify_custom_header = '' 105 | " 106 | Plug 'Fymyte/mbsync.vim' 107 | 108 | Plug 'Konfekt/filepicker.vim' 109 | -------------------------------------------------------------------------------- /.config/ghostty/config: -------------------------------------------------------------------------------- 1 | theme = Dracula 2 | font-family = "CaskaydiaCove Nerd Font Mono" 3 | font-size = 14 4 | mouse-hide-while-typing = true 5 | fullscreen = false 6 | maximize = true 7 | window-decoration = auto 8 | confirm-close-surface = false 9 | # copy-on-select = true 10 | copy-on-select = clipboard 11 | cursor-click-to-move = true 12 | macos-option-as-alt = left 13 | macos-titlebar-style = tabs 14 | macos-window-buttons = hidden 15 | macos-auto-secure-input = true 16 | macos-secure-input-indication = true 17 | unfocused-split-opacity = 0.95 18 | link-previews = true 19 | focus-follows-mouse = true 20 | shell-integration-features = true 21 | app-notifications = no-clipboard-copy 22 | 23 | # keybinds 24 | keybind = ctrl+shift+r=reload_config 25 | keybind = ctrl+shift+i=inspector:toggle 26 | keybind = super+comma=unbind 27 | keybind = global:alt+shift+t=toggle_quick_terminal 28 | keybind = ctrl+shift+p=toggle_command_palette 29 | 30 | ## window handling 31 | keybind = ctrl+shift+n=new_window 32 | keybind = ctrl+shift+x=close_window 33 | keybind = ctrl+shift+q=close_surface 34 | 35 | ## tab handling 36 | keybind = ctrl+shift+one=goto_tab:1 37 | keybind = ctrl+shift+two=goto_tab:2 38 | keybind = ctrl+shift+three=goto_tab:3 39 | keybind = ctrl+shift+four=goto_tab:4 40 | keybind = ctrl+shift+five=goto_tab:5 41 | keybind = ctrl+shift+six=goto_tab:6 42 | keybind = ctrl+shift+seven=goto_tab:7 43 | keybind = ctrl+shift+eight=goto_tab:8 44 | keybind = ctrl+shift+nine=goto_tab:9 45 | 46 | keybind = ctrl+page_up=previous_tab 47 | keybind = ctrl+page_down=next_tab 48 | keybind = ctrl+shift+left=previous_tab 49 | keybind = ctrl+shift+right=next_tab 50 | keybind = ctrl+shift+t=new_tab 51 | 52 | ## split handling 53 | keybind = ctrl+shift+down=goto_split:bottom 54 | keybind = ctrl+shift+up=goto_split:top 55 | 56 | keybind = ctrl+shift+j=goto_split:bottom 57 | keybind = ctrl+shift+h=goto_split:left 58 | keybind = ctrl+shift+l=goto_split:right 59 | keybind = ctrl+shift+k=goto_split:top 60 | 61 | keybind = ctrl+shift+ö=new_split:down 62 | keybind = ctrl+shift+ü=new_split:right 63 | keybind = ctrl+shift+equal=equalize_splits 64 | keybind = ctrl+shift+z=toggle_split_zoom 65 | 66 | ## font size manipulation 67 | keybind = ctrl+shift+Digit3=increase_font_size:1 68 | keybind = ctrl+shift+Slash=decrease_font_size:1 69 | keybind = ctrl+shift+Backquote=reset_font_size 70 | 71 | ## copy/paste 72 | keybind = ctrl+shift+a=select_all 73 | keybind = ctrl+shift+c=copy_to_clipboard 74 | keybind = ctrl+shift+j=write_scrollback_file:paste 75 | keybind = super+shift+j=write_screen_file:paste 76 | keybind = shift+insert=paste_from_selection 77 | keybind = ctrl+shift+v=paste_from_clipboard 78 | 79 | ## jumping around in the scrollback 80 | keybind = ctrl+shift+bracket_right=jump_to_prompt:1 81 | keybind = ctrl+shift+bracket_left=jump_to_prompt:-1 82 | keybind = ctrl+shift+end=scroll_to_bottom 83 | keybind = ctrl+shift+home=scroll_to_top 84 | keybind = ctrl+shift+page_down=scroll_page_down 85 | keybind = ctrl+shift+page_up=scroll_page_up 86 | 87 | ## resizing 88 | keybind = super+ctrl+shift+down=resize_split:down,10 89 | keybind = super+ctrl+shift+left=resize_split:left,10 90 | keybind = super+ctrl+shift+right=resize_split:right,10 91 | keybind = super+ctrl+shift+up=resize_split:up,10 92 | 93 | 94 | # make stuff work 95 | keybind = ctrl+ő=text:\x1b 96 | keybind = ctrl+ú=text:\x1d 97 | 98 | 99 | ## these should be handled by the OS 100 | # keybind = ctrl+shift+q=quit 101 | # keybind = ctrl+enter=toggle_fullscreen 102 | -------------------------------------------------------------------------------- /.config/bashmount/bashmount.conf: -------------------------------------------------------------------------------- 1 | # 2 | # bashmount.conf 3 | # 4 | 5 | # Place in /etc/bashmount.conf for system wide configuration. 6 | # Place in ~/.config/bashmount/config for per-user configuration. 7 | # XDG_CONFIG_HOME is respected if it has been set. 8 | 9 | # Set whether to or not to use udisksctl. The default is to autodetect whether 10 | # it is available. This can be '0', '1', or 'auto'. 11 | #udisks='auto' 12 | 13 | # Set which sections to show in the output. These can be '0' or '1'. 14 | #show_internal='1' 15 | #show_removable='1' 16 | #show_optical='1' 17 | #show_commands='1' 18 | 19 | # Set whether to colourize the output. This can be '0' or '1'. 20 | #colourize='1' 21 | 22 | # Set whether to use unicode for pretty layout. This can be '0' or '1'. 23 | #pretty='1' 24 | 25 | # Set default mount options. The default is to pass no options. 26 | #mount_options='--options nosuid,noexec,noatime' 27 | 28 | # Set devices to exclude. Any device whose "lsblk -P" output contains a string 29 | # listed here will be hidden. The following key-value-pairs are printed: 30 | # lsblk -dPno NAME,TYPE,FSTYPE,LABEL,MOUNTPOINT,PARTLABEL,UUID [device_name] 31 | # The strings are matched using "grep -E" regular expression. 32 | #exclude=() 33 | 34 | ### 35 | ### This example will match any device with "Photosmart" in any field. 36 | ### exclude=( 'Photosmart' ) 37 | ### 38 | ### This example will match the device found at /dev/sda1. 39 | ### exclude=( 'NAME="sda1"' ) 40 | ### 41 | ### This example will match /dev/sda1, /dev/sda2 and /dev/sda3. 42 | ### exclude=( 'NAME="sda[1-3]"' ) 43 | ### 44 | ### This example matches several different devices. Note that the array can be 45 | ### split over multiple lines for convenience. 46 | ### exclude=( 'FSTYPE="ext3"' ) 47 | ### exclude+=( 'LABEL="secret"' ) 48 | ### exclude+=( 'MOUNTPOINT="/"' ) 49 | ### exclude+=( 'UUID="0c4d6d9c-87a2-4579-b2ae-35b0790c718a"' ) 50 | ### 51 | 52 | # Set filemanager command to use when performing the "open" command. The mount 53 | # point is passed as the first argument. The default is to open the directory 54 | # within your terminal. 55 | 56 | # Uncomment this example to launch a graphical file manager. 57 | #filemanager() { 58 | # /usr/bin/nautilus "$1" & >/dev/null 2>&1 59 | #} 60 | 61 | # Uncomment this example to launch midnight commander in a new window. 62 | #filemanager() { 63 | # /usr/bin/uxterm -wf -e /usr/bin/mc "$1" & >/dev/null 2>&1 64 | #} 65 | 66 | # Set custom commands. Set "customX_show" to '0' to disable or '1' to enable. 67 | # If enabled, the custom commands will be shown in the device sub-menu. The 68 | # description and command functions can be set to anything you desire. The 69 | # device name (e.g. /dev/sdb1) is passed as the first and only argument. 70 | # A maximum of 3 custom actions are configurable. 71 | 72 | #custom4_show='0' 73 | #custom4_desc='changeme' 74 | #custom4_command() { 75 | # sudo mount --options remount,ro "$1" "/mnt/${1##*/}" 76 | #} 77 | 78 | #custom5_show='0' 79 | #custom5_desc='changeme' 80 | #custom5_command() { 81 | # 82 | #} 83 | 84 | #custom6_show='0' 85 | #custom6_desc='changeme' 86 | #custom6_command() { 87 | # 88 | #} 89 | 90 | # Set custom commands to be run automatically after mounting or unmounting. 91 | # post_mount is run immediately after a successful mount operation, and 92 | # post_unmount is run immediately after a successful unmount operation. 93 | 94 | # Set "run_post_mount" to '0' to disable or '1' to enable. 95 | #run_post_mount='0' 96 | 97 | #post_mount() { 98 | # 99 | #} 100 | 101 | # Set "run_post_unmount" to '0' to disable or '1' to enable. 102 | #run_post_unmount='0' 103 | 104 | #post_unmount() { 105 | # 106 | #} 107 | --------------------------------------------------------------------------------