├── .gitmodules ├── .chezmoidata ├── data.toml └── priv.toml ├── dot_config ├── klog │ ├── config.ini │ └── symlink_bookmarks.json ├── private_focus │ ├── .keep │ └── config.yml ├── bat │ └── config ├── viddy.toml ├── enchant │ └── enchant.ordering ├── tealdeer │ └── config.toml ├── ripgrep │ ├── ignore │ └── config.tmpl ├── yazi │ └── theme.toml ├── dot_curlrc ├── rclone │ └── symlink_rclone.conf ├── age │ └── identity.age.tmpl ├── yt-dlp │ └── config ├── zathura │ └── zathurarc ├── flake8 ├── resticprofile │ ├── repo-pw.txt.tmpl │ ├── executable_parse-gitignore.sh │ ├── notes.org │ ├── executable_git-gc.sh │ ├── executable_generate-excludes.sh │ ├── profiles.yaml.tmpl │ └── ignore.txt ├── tessen │ └── config ├── esplanade │ └── config.yaml.tmpl ├── newsboat │ ├── config │ └── urls.tmpl ├── stern │ ├── config.yaml │ └── stern.tpl ├── handlr │ └── handlr.toml ├── topgrade │ ├── custom │ │ ├── git-push.fish │ │ ├── krew-export.fish │ │ ├── the-way-export.fish │ │ ├── lib.fish │ │ ├── gh-stars-export.fish │ │ ├── buku-export.fish │ │ └── spotify-export.fish │ └── topgrade.toml.tmpl ├── private_pipewire │ ├── Readme.org │ └── pipewire.conf.d │ │ └── 99-input-denoising.conf ├── satty │ └── config.toml ├── terraform │ └── terraformrc.tmpl ├── rustfmt │ └── rustfmt.toml ├── streamlink │ └── config ├── gpg-tui.toml ├── krew │ └── plugins.txt ├── termshark │ └── termshark.toml ├── bottom │ └── bottom.toml ├── the-way │ └── default-config.toml.tmpl ├── atuin │ └── config.toml ├── gopass │ └── config.tmpl ├── fish │ └── conf.d │ │ └── config.fish.tmpl ├── updatecli │ ├── dot │ │ ├── nix-fetch-sha.sh │ │ ├── values.yaml │ │ ├── sourcehut.sh │ │ ├── github.sh │ │ ├── nix-pypi.yaml │ │ └── nix.yaml │ └── justfile ├── swayimg │ └── config ├── chezmoi │ └── chezmoi.yaml.tmpl ├── mako │ └── config ├── grip │ └── settings.py.tmpl ├── wezterm │ ├── start.lua │ ├── mouse.lua │ ├── main.lua │ ├── functions.lua │ └── keys.lua ├── aichat │ ├── private_config.yaml.tmpl │ └── roles.yaml ├── git │ ├── ignore │ ├── config │ └── commit_template.txt ├── sway │ ├── workspace-3.json │ ├── workspace-1.json │ ├── workspace-2.json │ ├── workspace-4.json │ ├── main.conf │ └── keybinds.conf.tmpl ├── helix │ └── config.toml ├── mailctl │ ├── config.yaml.tmpl │ └── services.yaml.tmpl ├── weathercrab │ └── wthrr.ron ├── rofi │ └── config.rasi ├── khal │ └── config ├── wireplumber │ └── main.lua.d │ │ └── 51-device-rename.lua ├── commitlint-rs │ └── config.yaml ├── curl │ └── curl-timing.cfg ├── spotify-player │ └── app.toml.tmpl ├── git-repo-manager │ └── config.yaml.tmpl ├── starship.toml ├── just │ └── justfile ├── i3status-rust │ └── config.toml ├── khard │ └── khard.conf ├── xplr │ └── init.lua ├── mimeapps.list ├── nyxt │ └── init.org ├── broot │ └── conf.hjson └── doctl │ └── private_config.yaml.tmpl ├── dot └── symlink_dot_envrc ├── tf ├── Readme.org ├── google.tf ├── summon.yml ├── backend.tf ├── justfile ├── providers.tf ├── backup.tf └── main.tf ├── Readme.md ├── dot_local ├── share │ ├── symlink_contacts.tmpl │ ├── applications │ │ ├── symlink_mimeapps.list.tmpl │ │ ├── wl-copy.desktop │ │ └── streamlink.desktop │ ├── rofi │ │ └── themes │ │ │ ├── main-no-prompt.rasi │ │ │ ├── main.rasi │ │ │ └── spotlight-dark.rasi │ └── cargo │ │ └── config.toml.tmpl └── bin │ ├── executable_ediff │ ├── executable_wpctl-wob │ ├── executable_diffwatch │ └── executable_ix ├── private_dot_ssh ├── symlink_hosts.tmpl └── config ├── dot_mc └── symlink_config.json.tmpl ├── dot_pomodoro ├── settings └── hooks │ └── executable_stop ├── .sops.yaml ├── dot_kube └── switch-config.yaml ├── .gitignore ├── dot_stardict └── dic │ └── Readme.md ├── secrets.sh ├── .chezmoiignore ├── dot_m2 └── private_settings.xml.tmpl ├── dot_editorconfig ├── misc └── borg.sh ├── encrypted_dot_netrc.age ├── dot_davmail.properties.tmpl └── dot_torrc /.gitmodules: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.chezmoidata/data.toml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /dot_config/klog/config.ini: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /dot_config/private_focus/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.chezmoidata/priv.toml: -------------------------------------------------------------------------------- 1 | ../../priv/vars.toml -------------------------------------------------------------------------------- /dot_config/bat/config: -------------------------------------------------------------------------------- 1 | --style="header,grid" 2 | -------------------------------------------------------------------------------- /dot/symlink_dot_envrc: -------------------------------------------------------------------------------- 1 | /home/moi/dot/priv/dot/dot_envrc 2 | -------------------------------------------------------------------------------- /dot_config/viddy.toml: -------------------------------------------------------------------------------- 1 | [general] 2 | shell = "fish" 3 | -------------------------------------------------------------------------------- /tf/Readme.org: -------------------------------------------------------------------------------- 1 | * Apply 2 | ``` 3 | just apply 4 | ``` 5 | -------------------------------------------------------------------------------- /dot_config/enchant/enchant.ordering: -------------------------------------------------------------------------------- 1 | en:nuspell 2 | de:nuspell 3 | -------------------------------------------------------------------------------- /dot_config/tealdeer/config.toml: -------------------------------------------------------------------------------- 1 | [updates] 2 | auto_update = true 3 | -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | Managed via [chezmoi](https://github.com/twpayne/chezmoi) 2 | -------------------------------------------------------------------------------- /dot_config/klog/symlink_bookmarks.json: -------------------------------------------------------------------------------- 1 | ../../priv/klog/bookmarks.json 2 | -------------------------------------------------------------------------------- /dot_config/ripgrep/ignore: -------------------------------------------------------------------------------- 1 | yarn.lock 2 | package-lock.json 3 | .git/ 4 | -------------------------------------------------------------------------------- /dot_config/yazi/theme.toml: -------------------------------------------------------------------------------- 1 | [flavor] 2 | use = "catppuccin-macchiato" 3 | -------------------------------------------------------------------------------- /dot_local/share/symlink_contacts.tmpl: -------------------------------------------------------------------------------- 1 | {{expandenv "$DOT/priv/contacts"}} 2 | -------------------------------------------------------------------------------- /private_dot_ssh/symlink_hosts.tmpl: -------------------------------------------------------------------------------- 1 | {{expandenv "$DOT/priv/ssh/hosts"}} 2 | -------------------------------------------------------------------------------- /dot_config/dot_curlrc: -------------------------------------------------------------------------------- 1 | -s 2 | -n 3 | # -w "@$HOME/.config/curl/curl-timing.cfg" 4 | -------------------------------------------------------------------------------- /dot_config/rclone/symlink_rclone.conf: -------------------------------------------------------------------------------- 1 | ../../priv/.config/rclone/rclone.conf 2 | -------------------------------------------------------------------------------- /dot_mc/symlink_config.json.tmpl: -------------------------------------------------------------------------------- 1 | {{expandenv "$DOT/priv/dot_mc/config.json"}} 2 | -------------------------------------------------------------------------------- /dot_config/age/identity.age.tmpl: -------------------------------------------------------------------------------- 1 | {{ secretJSON "secrets" | dig "ageSecretKey" "" }} 2 | -------------------------------------------------------------------------------- /dot_config/yt-dlp/config: -------------------------------------------------------------------------------- 1 | --yes-playlist 2 | --netrc 3 | --cookies-from-browser firefox 4 | -------------------------------------------------------------------------------- /dot_config/zathura/zathurarc: -------------------------------------------------------------------------------- 1 | set selection-clipboard clipboard 2 | map file_chooser 3 | -------------------------------------------------------------------------------- /dot_config/flake8: -------------------------------------------------------------------------------- 1 | [flake8] 2 | ignore = E123,E126,E231,E241,E251,E261,E265,E266,E302,E305,E501,E722 3 | -------------------------------------------------------------------------------- /dot_pomodoro/settings: -------------------------------------------------------------------------------- 1 | daily_goal=8 2 | default_break_duration=5 3 | default_pomodoro_duration=15 4 | -------------------------------------------------------------------------------- /.sops.yaml: -------------------------------------------------------------------------------- 1 | creation_rules: 2 | - age: "age1d2mr4ka46pms3j042gyshm3jjxth9jq4cje63nvfkzaz5g8e2q6qxrg588" 3 | -------------------------------------------------------------------------------- /dot_config/resticprofile/repo-pw.txt.tmpl: -------------------------------------------------------------------------------- 1 | {{ secretJSON "secrets" | dig "autorestic" "remoteKey" "" }} 2 | -------------------------------------------------------------------------------- /dot_local/share/applications/symlink_mimeapps.list.tmpl: -------------------------------------------------------------------------------- 1 | {{expandenv "$XDG_CONFIG_HOME/mimeapps.list"}} 2 | -------------------------------------------------------------------------------- /dot_pomodoro/hooks/executable_stop: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | notify-send -t 30000 "🍅 Pomodoro stop" 4 | -------------------------------------------------------------------------------- /dot_config/tessen/config: -------------------------------------------------------------------------------- 1 | pass_backend="gopass" 2 | action="copy" 3 | dmenu_backend="rofi" 4 | notify="false" 5 | -------------------------------------------------------------------------------- /dot_config/esplanade/config.yaml.tmpl: -------------------------------------------------------------------------------- 1 | auto_export: true 2 | spacetraders_token: {{ gopass "ent/spacetraders.io" }} 3 | -------------------------------------------------------------------------------- /dot_config/newsboat/config: -------------------------------------------------------------------------------- 1 | macro 1 set browser mpv; one; set browser firefox 2 | 3 | download-path ~/Downloads/%n 4 | -------------------------------------------------------------------------------- /dot_config/stern/config.yaml: -------------------------------------------------------------------------------- 1 | tail: 1000 2 | exclude-container: (istio-proxy|istio-validation) 3 | timestamps: short 4 | -------------------------------------------------------------------------------- /dot_local/share/rofi/themes/main-no-prompt.rasi: -------------------------------------------------------------------------------- 1 | @import "main" 2 | 3 | 4 | inputbar { 5 | enabled: false; 6 | } 7 | -------------------------------------------------------------------------------- /dot_config/handlr/handlr.toml: -------------------------------------------------------------------------------- 1 | enable_selector = true 2 | selector = "rofi -dmenu" 3 | terminal_emulator = '/usr/bin/wezterm' 4 | -------------------------------------------------------------------------------- /tf/google.tf: -------------------------------------------------------------------------------- 1 | resource "google_project" "tizonia" { 2 | name = "Tizonia" 3 | project_id = "tizonia-311606" 4 | } 5 | -------------------------------------------------------------------------------- /tf/summon.yml: -------------------------------------------------------------------------------- 1 | B2_APPLICATION_KEY: !var moi/dot/b2_application_key 2 | B2_APPLICATION_KEY_ID: !var moi/dot/b2_application_key_id 3 | -------------------------------------------------------------------------------- /dot_config/topgrade/custom/git-push.fish: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | 3 | cd $DOT/priv 4 | git --no-pager log origin/master..HEAD 5 | git push 6 | -------------------------------------------------------------------------------- /dot_config/private_pipewire/Readme.org: -------------------------------------------------------------------------------- 1 | #+begin_src shell 2 | pactl list sources short 3 | pw-loopback -l 5000 -C rnnoise_source 4 | #+end_src 5 | -------------------------------------------------------------------------------- /dot_config/satty/config.toml: -------------------------------------------------------------------------------- 1 | [general] 2 | initial-tool = "rectangle" 3 | copy-command = "wl-copy" 4 | output-filename = "/tmp/satty_%m-%d_%H:%M.png" 5 | -------------------------------------------------------------------------------- /dot_config/terraform/terraformrc.tmpl: -------------------------------------------------------------------------------- 1 | credentials "app.terraform.io" { 2 | token = "{{ secretJSON "secrets" | dig "terraformToken" "" }}" 3 | } 4 | -------------------------------------------------------------------------------- /dot_config/rustfmt/rustfmt.toml: -------------------------------------------------------------------------------- 1 | edition = "2021" 2 | error_on_unformatted = true 3 | group_imports = "StdExternalCrate" 4 | imports_granularity = "Crate" 5 | -------------------------------------------------------------------------------- /dot_kube/switch-config.yaml: -------------------------------------------------------------------------------- 1 | kind: SwitchConfig 2 | version: v1alpha1 3 | showPreview: false 4 | kubeconfigStores: 5 | - kind: digitalocean 6 | required: false 7 | -------------------------------------------------------------------------------- /tf/backend.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | cloud { 3 | organization = "dotfiles" 4 | 5 | workspaces { 6 | name = "dotfiles" 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /dot_config/nyxt/init.lisp 2 | .terraform* 3 | tf/secrets.auto.tfvars 4 | /dot_config/nixpkgs/_sources/ 5 | /dot_config/nixpkgs/versions.json 6 | !tf/summon.yml 7 | -------------------------------------------------------------------------------- /dot_config/ripgrep/config.tmpl: -------------------------------------------------------------------------------- 1 | --color=always 2 | --no-heading 3 | --smart-case 4 | --hidden 5 | --follow 6 | --ignore-file={{expandenv "$XDG_CONFIG_HOME/ripgrep/ignore"}} 7 | -------------------------------------------------------------------------------- /dot_config/streamlink/config: -------------------------------------------------------------------------------- 1 | # Player options 2 | player=mpv 3 | player-args=--cache 10240 4 | player-no-close 5 | # verbose-player 6 | default-stream=best 7 | twitch-disable-ads 8 | -------------------------------------------------------------------------------- /dot_local/share/cargo/config.toml.tmpl: -------------------------------------------------------------------------------- 1 | [target.x86_64-unknown-linux-gnu] 2 | linker = "clang" 3 | rustflags = ["-C", "link-arg=-fuse-ld={{expandenv "$HOME/.nix-profile/bin/mold"}}"] 4 | -------------------------------------------------------------------------------- /dot_local/share/applications/wl-copy.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=wl-copy 3 | MimeType=text/plain 4 | Exec=wl-copy -n 5 | Type=Application 6 | Terminal=false 7 | Categories=Development 8 | -------------------------------------------------------------------------------- /dot_config/gpg-tui.toml: -------------------------------------------------------------------------------- 1 | [general] 2 | splash = false 3 | tick_rate = 250 4 | color = "gray" 5 | style = "plain" 6 | file_explorer = "xplr" 7 | 8 | [gpg] 9 | armor = true 10 | -------------------------------------------------------------------------------- /dot_local/bin/executable_ediff: -------------------------------------------------------------------------------- 1 | if [ -d $1 ]; then 2 | emacsclient -q --eval "(ediff-directories \"$1\" \"$2\" \"\")" 3 | else 4 | emacsclient -q --eval "(ediff-files \"$1\" \"$2\")" 5 | fi 6 | -------------------------------------------------------------------------------- /dot_local/share/applications/streamlink.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=streamlink 3 | MimeType=text/plain 4 | Exec=streamlink 5 | Type=Application 6 | Terminal=false 7 | Categories=Development 8 | -------------------------------------------------------------------------------- /dot_config/krew/plugins.txt: -------------------------------------------------------------------------------- 1 | duplicate 2 | ice 3 | iexec 4 | klock 5 | krew 6 | lineage 7 | neat 8 | pv-migrate 9 | rbac-tool 10 | resource-capacity 11 | slice 12 | sniff 13 | view-secret 14 | -------------------------------------------------------------------------------- /dot_config/termshark/termshark.toml: -------------------------------------------------------------------------------- 1 | 2 | [main] 3 | color-tsharks = ["/usr/bin/tshark"] 4 | last-used-tshark = "/usr/bin/tshark" 5 | validated-tsharks = ["/usr/bin/tshark"] 6 | theme-truecolor = "solarized" 7 | -------------------------------------------------------------------------------- /dot_config/bottom/bottom.toml: -------------------------------------------------------------------------------- 1 | # https://github.com/ClementTsang/bottom/blob/master/sample_configs/default_config.toml 2 | 3 | [flags] 4 | group_processes = true 5 | basic = true 6 | color = "gruvbox" 7 | mem_as_value = true 8 | -------------------------------------------------------------------------------- /dot_config/the-way/default-config.toml.tmpl: -------------------------------------------------------------------------------- 1 | theme = 'base16-ocean.dark' 2 | db_dir = '{{expandenv "$XDG_DATA_HOME/the-way/the_way_db"}}' 3 | themes_dir = '{{expandenv "$XDG_DATA_HOME/the-way/themes"}}' 4 | copy_cmd = 'wl-copy -n' 5 | -------------------------------------------------------------------------------- /dot_stardict/dic/Readme.md: -------------------------------------------------------------------------------- 1 | https://cafebedouin.org/2019/01/29/websters-revised-unabridged-dictionary-1913-on-stardict-on-ubuntu-debian/ 2 | 3 | http://download.huzheng.org/bigdict/ Soule's Dictionary of English Synonyms (En-En) 4 | -------------------------------------------------------------------------------- /dot_config/stern/stern.tpl: -------------------------------------------------------------------------------- 1 | {{.ContainerName}} {{ with $msg := .Message | tryParseJSON }}[{{ colorGreen (toRFC3339Nano (index $msg "@timestamp")) }}] {{ levelColor $msg.level }} {{ $msg.message }}{{ else }} {{ .Message }} {{ end }}{{"\n"}} 2 | -------------------------------------------------------------------------------- /secrets.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [ "$1" == "secrets" ]; then 4 | sops -d --output-type=json "${DOT}/priv/dot/secrets.yml" 5 | elif [ "$1" == "tf" ]; then 6 | sops -d --output-type=json "${DOT}/priv/tf-secrets-output.yml" 7 | fi 8 | -------------------------------------------------------------------------------- /dot_config/resticprofile/executable_parse-gitignore.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -ueo pipefail 4 | 5 | file="$1" 6 | dir="$2" 7 | 8 | if rg -q '[^[:space:]]' "$file"; then 9 | rg --color=never '^/?([^\s#].*)$' -r "$dir"'/**/$1' "$file" 10 | fi 11 | -------------------------------------------------------------------------------- /private_dot_ssh/config: -------------------------------------------------------------------------------- 1 | AddKeysToAgent yes 2 | UserKnownHostsFile ~/.ssh/known_hosts 3 | Include ~/.ssh/hosts 4 | SetEnv TERM=xterm 5 | 6 | # https://superuser.com/questions/98562/way-to-avoid-ssh-connection-timeout-freezing-of-gnome-terminal 7 | Host * 8 | ServerAliveInterval 60 9 | -------------------------------------------------------------------------------- /dot_config/atuin/config.toml: -------------------------------------------------------------------------------- 1 | # https://atuin.sh/docs/config 2 | 3 | auto_sync = false 4 | update_check = false 5 | search_mode = "fulltext" 6 | style = "compact" 7 | inline_height = 10 8 | filter_mode = "directory" 9 | show_help = false 10 | history_filter = [ 11 | "^jj", 12 | ] 13 | -------------------------------------------------------------------------------- /dot_config/gopass/config.tmpl: -------------------------------------------------------------------------------- 1 | [core] 2 | notifications = false 3 | exportkeys = false 4 | [generate] 5 | symbols = true 6 | autoclip = true 7 | [updater] 8 | check = false 9 | [show] 10 | safecontent = true 11 | 12 | {{ include (expandenv "$DOT/priv/dot/gopass.toml") -}} 13 | -------------------------------------------------------------------------------- /dot_config/fish/conf.d/config.fish.tmpl: -------------------------------------------------------------------------------- 1 | ## fish settings 2 | set fish_greeting # Disable greeting 3 | 4 | # set manually once... 5 | # fish_config theme save Nord 6 | 7 | ## plugin settings 8 | set fzf_directory_opts --preview="" 9 | 10 | # kubeswitch 11 | switcher init fish | source 12 | -------------------------------------------------------------------------------- /dot_config/updatecli/dot/nix-fetch-sha.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | URL="$1" 4 | 5 | if [[ "$URL" == *"/archive/refs"* ]] || [[ "$URL" == *".zip" ]]; then 6 | /run/current-system/sw/bin/nix-prefetch-url --unpack "$URL" 7 | else 8 | /run/current-system/sw/bin/nix-prefetch-url "$URL" 9 | fi 10 | -------------------------------------------------------------------------------- /.chezmoiignore: -------------------------------------------------------------------------------- 1 | pkglist.txt 2 | misc/ 3 | secrets.yml 4 | secrets.sh 5 | /**/Readme.md 6 | /**/Readme.org 7 | .config/nyxt/init.org 8 | .config/updatecli 9 | .config/krew/plugins.txt 10 | .config/topgrade/custom 11 | 12 | # TODO: check if still needed 13 | .config/pipewire 14 | 15 | /tf/ 16 | todo.* 17 | *.org 18 | -------------------------------------------------------------------------------- /dot_config/swayimg/config: -------------------------------------------------------------------------------- 1 | # https://github.com/artemsen/swayimg/blob/master/extra/swayimgrc 2 | 3 | [general] 4 | size = fullscreen 5 | 6 | [viewer] 7 | scale = fit 8 | 9 | [info] 10 | show = no 11 | info_timeout = 0 12 | 13 | [keys.gallery] 14 | Ctrl+d = exec gtrash put "%" 15 | 16 | Alt+w = exec wl-copy -n "%" 17 | -------------------------------------------------------------------------------- /dot_config/topgrade/custom/krew-export.fish: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | krew list >"$DOT/dotfiles/dot_config/krew/plugins.txt" 4 | echo "Wrote $DOT/dotfiles/dot_config/krew/plugins.txt" >&2 5 | git --no-pager -C "$DOT/dotfiles" diff dot_config/krew/plugins.txt 6 | 7 | # import: krew install < $DOT/dotfiles/dot_config/krew/plugins.txt 8 | -------------------------------------------------------------------------------- /dot_m2/private_settings.xml.tmpl: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /dot_config/topgrade/custom/the-way-export.fish: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | source (status dirname)/lib.fish 3 | cd $DOT/priv 4 | 5 | the-way export >snippets.json 6 | echo "Wrote the-way snippets to $DOT/priv/snippets.json" >&2 7 | 8 | commitIfChanged snippets.json "the-way snippets" 9 | 10 | # import: the-way import snippets.json 11 | -------------------------------------------------------------------------------- /dot_config/private_focus/config.yml: -------------------------------------------------------------------------------- 1 | work_mins: 15 2 | work_msg: Focus on your task 3 | short_break_mins: 5 4 | short_break_msg: Take a breather 5 | long_break_mins: 20 6 | long_break_msg: Take a long break 7 | long_break_interval: 2 8 | notify: true 9 | auto_start_work: false 10 | auto_start_break: false 11 | 24hr_clock: true 12 | sound: "" 13 | sound_on_break: false 14 | -------------------------------------------------------------------------------- /dot_config/resticprofile/notes.org: -------------------------------------------------------------------------------- 1 | * check usage 2 | #+begin_src shell 3 | 4 | # vars from `resticprofile show` 5 | 6 | export AWS_ACCESS_KEY_ID= 7 | redu -r '' --password-command 'cat ' 8 | #+end_src 9 | 10 | * diff 11 | #+begin_src shell 12 | 13 | resticprofile diff $(resticprofile -q snapshots --json | jq -r '.[-2:][].id') 14 | #+end_src 15 | -------------------------------------------------------------------------------- /dot_config/chezmoi/chezmoi.yaml.tmpl: -------------------------------------------------------------------------------- 1 | sourceDir: {{ env "DOT" }}/dotfiles 2 | secret: 3 | command: {{ env "DOT" }}/dotfiles/secrets.sh 4 | merge: 5 | command: emacsscripts 6 | args: ediff3 7 | encryption: age 8 | age: 9 | identity: {{ env "AGE_IDENTITY_FILE" }} 10 | recipientsFile: {{ env "AGE_RECIPIENTS_FILE" }} 11 | 12 | verbose: true 13 | diff: 14 | pager: '' 15 | -------------------------------------------------------------------------------- /dot_config/mako/config: -------------------------------------------------------------------------------- 1 | font=Iosevka Term 15 2 | format=%s\n%b 3 | padding=6 4 | layer=overlay 5 | default-timeout=5000 6 | output=eDP-1 7 | 8 | [urgency=low] 9 | text-color=#3B7C87 10 | background-color=#191311 11 | 12 | [urgency=normal] 13 | text-color=#5B8234 14 | background-color=#191311 15 | 16 | [urgency=high] 17 | text-color=#B7472A 18 | background-color=#191311 19 | -------------------------------------------------------------------------------- /dot_config/grip/settings.py.tmpl: -------------------------------------------------------------------------------- 1 | def find_password(username): 2 | import subprocess 3 | 4 | cmd = f"gopass -o github.com/{username}" 5 | pwinfo = subprocess.run(cmd, shell=True, check=True, capture_output=True) 6 | return pwinfo.stdout 7 | 8 | 9 | QUIET = True 10 | USERNAME = "{{.mail.moi.username}}" 11 | PASSWORD = find_password(USERNAME) 12 | AUTOREFRESH = False 13 | -------------------------------------------------------------------------------- /dot_config/topgrade/custom/lib.fish: -------------------------------------------------------------------------------- 1 | function commitIfChanged -a file -a msg 2 | if string length --quiet (git status --porcelain $file) 3 | git --no-pager diff --ignore-all-space $file 4 | git add $file 5 | git commit -m "chore: update $msg" 6 | echo "$file changes committed" >&2 7 | else 8 | echo "No changes detected in $file" >&2 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /dot_config/wezterm/start.lua: -------------------------------------------------------------------------------- 1 | local wezterm = require("wezterm") 2 | local mux = wezterm.mux 3 | 4 | wezterm.on("gui-startup", function() 5 | create_workspace("1", "/") 6 | create_workspace("2", "/code/wrk") 7 | end) 8 | 9 | function create_workspace(name, dir) 10 | local project_dir = wezterm.home_dir .. dir 11 | local tab, build_pane, window = mux.spawn_window({ 12 | workspace = name, 13 | cwd = project_dir, 14 | }) 15 | end 16 | -------------------------------------------------------------------------------- /dot_config/aichat/private_config.yaml.tmpl: -------------------------------------------------------------------------------- 1 | # https://github.com/sigoden/aichat/blob/main/config.example.yaml 2 | # https://github.com/sigoden/aichat/blob/main/models.yaml 3 | model: claude:claude-sonnet-4-20250514 4 | editor: emacsclient 5 | save_session: true 6 | keybindings: emacs 7 | clients: 8 | - type: openai 9 | api_key: {{ gopass "tech/openai.com/apikey" }} 10 | - type: claude 11 | api_key: {{ gopass "tech/claude_console.anthropic.com/apikey" }} 12 | -------------------------------------------------------------------------------- /dot_config/updatecli/dot/values.yaml: -------------------------------------------------------------------------------- 1 | # pypi: 2 | # - package: cqlsh 3 | # - package: promformat 4 | # - package: xmlformatte 5 | focus: 6 | owner: ayoisaiah 7 | asset: focus_${VERSION}_linux_amd64.tar.gz 8 | 9 | protocurl: 10 | owner: qaware 11 | asset: protocurl_${VERSION}_linux_amd64.zip 12 | 13 | sane-scan-pdf: 14 | owner: rocketraman 15 | 16 | wutag: 17 | owner: vv9k 18 | asset: wutag-${VERSION}-x86_64-unknown-linux.tar.xz 19 | trimPrefix: false 20 | -------------------------------------------------------------------------------- /dot_config/resticprofile/executable_git-gc.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -ueo pipefail 4 | 5 | fd -H --type directory \ 6 | -E 'golang' -E '.local' -E .cache -E .config/VSCodium -E tmp -E nixpkgs \ 7 | '\.git$' ~/ \ 8 | --exec git -C '{//}' maintenance run --auto 9 | 10 | fd -H --type directory \ 11 | -E 'golang' -E '.local' -E .cache -E .config/VSCodium -E tmp -E nixpkgs \ 12 | '\.git$' ~/ \ 13 | --exec git -C '{//}' submodule foreach git maintenance run --auto 14 | -------------------------------------------------------------------------------- /dot_config/git/ignore: -------------------------------------------------------------------------------- 1 | *~ 2 | *# 3 | #ignore thumbnails created by windows 4 | Thumbs.db 5 | #Ignore files build by Visual Studio 6 | *.obj 7 | *.exe 8 | *.pdb 9 | *.user 10 | *.aps 11 | *.pch 12 | *.vspscc 13 | *_i.c 14 | *_p.c 15 | *.ncb 16 | *.suo 17 | *.tlb 18 | *.tlh 19 | *.bak 20 | *.cache 21 | *.ilk 22 | *.log 23 | *.dll 24 | *.lib 25 | *.sbr 26 | summon.yml 27 | /.mypy_cache/ 28 | pyrightconfig.json 29 | .envrc 30 | .direnv/ 31 | /.local* 32 | .justfile 33 | .ignore 34 | .my/ 35 | .aider* 36 | -------------------------------------------------------------------------------- /dot_config/sway/workspace-3.json: -------------------------------------------------------------------------------- 1 | // vim:ts=4:sw=4:et 2 | { 3 | "border": "none", 4 | "current_border_width": 0, 5 | "floating": "auto_off", 6 | "geometry": { 7 | "height": 556, 8 | "width": 964, 9 | "x": 0, 10 | "y": 0 11 | }, 12 | "name": "urxvt", 13 | "percent": 1, 14 | "swallows": [ 15 | { 16 | // "class": "^URxvt$", 17 | // "instance": "^urxvt$", 18 | // "title": "^urxvt$" 19 | } 20 | ], 21 | "type": "con" 22 | } 23 | 24 | -------------------------------------------------------------------------------- /dot_config/helix/config.toml: -------------------------------------------------------------------------------- 1 | theme = "gruvbox_light" 2 | 3 | [editor] 4 | line-number = "relative" 5 | mouse = false 6 | gutters = ["diff", "diagnostics", "spacer"] 7 | popup-border = "all" 8 | 9 | [editor.statusline] 10 | # left = [] 11 | # center = [] 12 | # right = [] 13 | 14 | [editor.cursor-shape] 15 | insert = "bar" 16 | 17 | [editor.soft-wrap] 18 | enable = true 19 | 20 | [editor.lsp] 21 | display-messages = true 22 | 23 | 24 | [keys.normal] 25 | pageup = "page_cursor_half_up" 26 | pagedown = "page_cursor_half_down" 27 | -------------------------------------------------------------------------------- /dot_config/updatecli/justfile: -------------------------------------------------------------------------------- 1 | apply: 2 | summon -f summon.yml \ 3 | updatecli apply \ 4 | --values dot/values.yaml \ 5 | -c dot/nix.yaml 6 | 7 | diff: 8 | summon -f summon.yml \ 9 | updatecli diff \ 10 | --values dot-values.yaml \ 11 | -c nix.yaml 12 | 13 | 14 | manifest: 15 | summon -f summon.yml \ 16 | updatecli manifest show \ 17 | --values dot-values.yaml \ 18 | -c nix.yaml --clean 19 | 20 | 21 | apply-wrk: 22 | summon -f summon.yml \ 23 | updatecli apply \ 24 | --values wrk/values.yaml \ 25 | -c wrk 26 | -------------------------------------------------------------------------------- /dot_config/mailctl/config.yaml.tmpl: -------------------------------------------------------------------------------- 1 | # https://github.com/pdobsan/mailctl/blob/main/configs/config-template.yaml 2 | 3 | services_file: {{.chezmoi.homeDir}}/.config/mailctl/services.yaml 4 | oauth2_dir: {{.chezmoi.homeDir}}/.local/state/mailctl 5 | 6 | encrypt_cmd: 7 | exec: age 8 | args: 9 | - --identity 10 | - {{.chezmoi.homeDir}}/.config/age/identity.age 11 | - --encrypt 12 | - -o 13 | decrypt_cmd: 14 | exec: age 15 | args: 16 | - --identity 17 | - {{.chezmoi.homeDir}}/.config/age/identity.age 18 | - --decrypt 19 | -------------------------------------------------------------------------------- /dot_config/weathercrab/wthrr.ron: -------------------------------------------------------------------------------- 1 | ( 2 | address: "Neu Wulmstorf,DE", 3 | language: "en_US", 4 | forecast: [day, week], 5 | units: ( 6 | temperature: celsius, 7 | speed: kmh, 8 | time: military, 9 | precipitation: probability, 10 | ), 11 | gui: ( 12 | border: rounded, 13 | color: default, 14 | graph: ( 15 | style: lines(solid), 16 | rowspan: double, 17 | time_indicator: true, 18 | ), 19 | greeting: false, 20 | ), 21 | ) 22 | -------------------------------------------------------------------------------- /dot_config/sway/workspace-1.json: -------------------------------------------------------------------------------- 1 | // vim:ts=4:sw=4:et 2 | { 3 | "border": "none", 4 | "current_border_width": 0, 5 | "floating": "auto_off", 6 | "fullscreen_mode": 0, 7 | "geometry": { 8 | "height": 900, 9 | "width": 1521, 10 | "x": 0, 11 | "y": 0 12 | }, 13 | "name": "emacs@toutesuit", 14 | "percent": 1, 15 | "swallows": [ 16 | { 17 | "class": "^Emacs$" 18 | // "instance": "^emacs$", 19 | // "title": "^emacs\\@toutesuit$", 20 | // "transient_for": "^$" 21 | } 22 | ], 23 | "type": "con" 24 | } 25 | -------------------------------------------------------------------------------- /dot_config/topgrade/custom/gh-stars-export.fish: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | source (status dirname)/lib.fish 3 | cd $DOT/priv 4 | 5 | # only run once a day 6 | if string length --quiet (fd --changed-within 1d gh-stars.txt) 7 | echo "gh-stars.txt last modfied less than 1d ago (at $(date '+%H:%M' -r gh-stars.txt)) - exiting" 8 | exit 9 | end 10 | 11 | gh api --paginate user/starred --template '{{range .}}{{.full_name}} - {{.description}} {{"\n"}}{{end}}' >gh-stars.txt 12 | 13 | echo "Wrote Github stars export to $DOT/priv/gh-stars.txt" >&2 14 | 15 | commitIfChanged gh-stars.txt "Github stars" 16 | -------------------------------------------------------------------------------- /dot_config/rofi/config.rasi: -------------------------------------------------------------------------------- 1 | /* https://davatorium.github.io/rofi/CONFIG/ */ 2 | 3 | @theme "~/.local/share/rofi/themes/main.rasi" 4 | 5 | configuration { 6 | drun-use-desktop-cache: true; 7 | drun-display-format: "{name}"; 8 | run-command: "swaymsg exec '{cmd}'"; 9 | 10 | kb-element-next: "Right"; 11 | kb-element-prev: "Left"; 12 | kb-custom-5: "Alt+3"; 13 | kb-custom-6: "Alt+1"; 14 | kb-custom-9: "Alt+2"; 15 | /* unbind to free keybinding */ 16 | kb-custom-1: ""; 17 | kb-custom-2: ""; 18 | kb-custom-3: ""; 19 | kb-custom-13: ""; 20 | kb-move-char-forward: ""; 21 | kb-move-char-back: ""; 22 | } 23 | -------------------------------------------------------------------------------- /dot_config/topgrade/custom/buku-export.fish: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | source (status dirname)/lib.fish 3 | cd $DOT/priv 4 | 5 | echo y | buku --nostdin -e buku.md 6 | echo "Wrote buku export to $DOT/priv/buku.md" >&2 7 | 8 | commitIfChanged buku.md "buku bookmarks" 9 | 10 | buku -p -j | jq '[.[] | 11 | select( .tags | contains("no-export-ff") | not) | 12 | .["url"] = .uri | 13 | .["name"] = .title | 14 | del(.uri, .title, .tags, .index, .description) 15 | ]' >"$DOT/system/nix-config/bookmarks.json" 16 | 17 | echo "Wrote buku bookmarks to $DOT/system/nix-config/bookmarks.json" >&2 18 | 19 | 20 | # import: buku -i buku.md 21 | -------------------------------------------------------------------------------- /dot_config/updatecli/dot/sourcehut.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -xeo pipefail 3 | 4 | read OWNER REPO ASSET < <(echo $(jq -r '.owner, .repo, .asset' <<<$1)) 5 | 6 | VERSION=$( 7 | curl --fail -s -H "Authorization: token $SH_TOKEN" \ 8 | "https://git.sr.ht/api/${OWNER}/repos/${REPO}/refs" | 9 | jq -r '.results[-1].name' | 10 | sd 'refs/tags/(.*)' '$1' 11 | ) 12 | 13 | eval "ASSET=$ASSET" # substitute ${VERSION} 14 | url="https://git.sr.ht/${OWNER}/${REPO}/refs/download/${VERSION}/${ASSET}" 15 | sha=$(./dot/nix-fetch-sha.sh $url) 16 | echo "'{version: \"$VERSION\", url: \"$url\", sha: \"$sha\"}'" 17 | -------------------------------------------------------------------------------- /dot_editorconfig: -------------------------------------------------------------------------------- 1 | # https://github.com/editorconfig/editorconfig/issues/465 2 | 3 | root = true 4 | 5 | [*] 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [Makefile] 12 | indent_style = tab 13 | 14 | [*.sh] 15 | # shfmt options 16 | # https://github.com/mvdan/sh/blob/master/cmd/shfmt/shfmt.1.scd 17 | shell_variant = bash 18 | switch_case_indent = false 19 | 20 | [*.md] 21 | trim_trailing_whitespace = false 22 | 23 | [*.org{.gpg,}] 24 | indent_size = 8 25 | trim_trailing_whitespace = false 26 | 27 | [*.json] 28 | indent_size = 4 29 | 30 | [package.json] 31 | indent_size = 2 32 | -------------------------------------------------------------------------------- /dot_config/khal/config: -------------------------------------------------------------------------------- 1 | [calendars] 2 | [[wrk_dw]] 3 | path = ~/.local/share/calendars/wrk_dw/calendar 4 | readonly = True 5 | color = light blue 6 | 7 | # [[holidays]] 8 | # path = ~/.local/share/calendars/Feiertage in Deutschland 9 | # readonly = True 10 | 11 | # [[birthdays]] 12 | # type = birthdays 13 | # path = ~/.local/share/contacts/pers 14 | 15 | 16 | 17 | [default] 18 | timedelta = 3d 19 | 20 | [locale] 21 | timeformat = "%H:%M" 22 | 23 | [view] 24 | agenda_event_format = '{calendar-color}{cancelled}{start-end-time-style} {title}{repeat-symbol}{reset}' 25 | blank_line_before_day = True 26 | dynamic_days = false 27 | min_calendar_display = 2 28 | -------------------------------------------------------------------------------- /dot_config/wireplumber/main.lua.d/51-device-rename.lua: -------------------------------------------------------------------------------- 1 | rule_rename_built_in_mic = { 2 | matches = { 3 | { 4 | { "node.name", "equals", "alsa_input.pci-0000_00_1f.3.analog-stereo" }, 5 | }, 6 | }, 7 | apply_properties = { 8 | ["node.description"] = "built-in mic", 9 | }, 10 | } 11 | 12 | rule_rename_built_in_speaker = { 13 | matches = { 14 | { 15 | { "node.name", "equals", "alsa_output.pci-0000_00_1f.3.analog-stereo" }, 16 | }, 17 | }, 18 | apply_properties = { 19 | ["node.description"] = "built-in speaker", 20 | }, 21 | } 22 | 23 | table.insert(alsa_monitor.rules, rule_rename_built_in_mic) 24 | table.insert(alsa_monitor.rules, rule_rename_built_in_speaker) 25 | -------------------------------------------------------------------------------- /dot_config/topgrade/custom/spotify-export.fish: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | source (status dirname)/lib.fish 3 | cd $DOT/priv 4 | 5 | set token (oauth2c https://accounts.spotify.com/ \ 6 | --client-id (pass show -o ent/spotify/client id) \ 7 | --response-types code \ 8 | --response-mode query \ 9 | --grant-type authorization_code \ 10 | --auth-method none \ 11 | --scopes playlist-read-private,playlist-read-collaborative,user-library-read \ 12 | --pkce --redirect-url http://127.0.0.1:43019/callback -s | jq -r '.access_token') 13 | 14 | spotify-backup spotify.txt --token=$token --dump=liked 15 | 16 | echo "Wrote spotify export to $DOT/priv/spotify.txt" >&2 17 | 18 | commitIfChanged spotify.txt "spotify export" 19 | -------------------------------------------------------------------------------- /dot_config/updatecli/dot/github.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -xeo pipefail 3 | 4 | read OWNER REPO ASSET TRIM_PREFIX < <(echo $(/home/moi/.nix-profile/bin/jq -r '.owner, .repo, .asset, .trimPrefix' <<<$1)) 5 | VERSION="$2" 6 | 7 | if [ "$TRIM_PREFIX" == true ]; then 8 | VERSION_PREFIX="v" 9 | fi 10 | 11 | if [ "$ASSET" != false ]; then 12 | eval "ASSET=$ASSET" # substitute ${VERSION} 13 | url="https://github.com/${OWNER}/${REPO}/releases/download/${VERSION_PREFIX}${VERSION}/${ASSET}" 14 | else 15 | url="https://github.com/${OWNER}/${REPO}/archive/refs/tags/${VERSION_PREFIX}${VERSION}.tar.gz" 16 | fi 17 | 18 | sha=$(./dot/nix-fetch-sha.sh "$url") 19 | 20 | echo "'{version: \"$VERSION\", url: \"$url\", sha: \"$sha\"}'" 21 | -------------------------------------------------------------------------------- /dot_config/resticprofile/executable_generate-excludes.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -ueo pipefail 4 | 5 | excludes_file="/tmp/generated-excludes.txt" 6 | 7 | rm -f "$excludes_file" 8 | 9 | script_dir=$(dirname "$0") 10 | 11 | # https://forum.restic.net/t/skipping-git-ignored-files/4638 12 | # https://github.com/borgbackup/borg/issues/641 13 | 14 | fd -H '\.gitignore' ~/code ~/.config ~/dot \ 15 | -E 'golang' -E 'nixpkgs' \ 16 | -x "$script_dir"/parse-gitignore.sh {} {//} \ 17 | >"$excludes_file" 18 | 19 | lines=$(wc -l <"$excludes_file") 20 | 21 | if [ "$lines" -gt 500 ]; then 22 | echo "$lines lines in generated-excludes.txt" 23 | else 24 | echo "generated-excludes.txt has too few lines ($lines)." 25 | exit 1 26 | fi 27 | -------------------------------------------------------------------------------- /dot_config/topgrade/topgrade.toml.tmpl: -------------------------------------------------------------------------------- 1 | [misc] 2 | only = ["krew", "firmware", "custom_commands"] # "chezmoi", 3 | 4 | skip_notify = true 5 | 6 | [firmware] 7 | upgrade = true 8 | 9 | [commands] 10 | krew_export = "$DOT/dotfiles/dot_config/topgrade/custom/krew-export.fish" 11 | 12 | gh_stars_export = "$DOT/dotfiles/dot_config/topgrade/custom/gh-stars-export.fish" 13 | 14 | buku = "$DOT/dotfiles/dot_config/topgrade/custom/buku-export.fish" 15 | 16 | the_way_export = "$DOT/dotfiles/dot_config/topgrade/custom/the-way-export.fish" 17 | 18 | spotify_export = "$DOT/dotfiles/dot_config/topgrade/custom/spotify-export.fish" 19 | 20 | fin = "je fin" 21 | 22 | zlast_git_push = "$DOT/dotfiles/dot_config/topgrade/custom/git-push.fish" 23 | 24 | # "xdg-ninja" = "xdg-ninja" 25 | -------------------------------------------------------------------------------- /dot_config/commitlint-rs/config.yaml: -------------------------------------------------------------------------------- 1 | # https://keisukeyamashita.github.io/commitlint-rs/rules/scope/ 2 | 3 | rules: 4 | description-empty: 5 | level: warning 6 | 7 | description-format: 8 | level: error 9 | format: ^[a-z].*$ 10 | 11 | type-empty: 12 | level: error 13 | 14 | # TODO: panics when nonexistent 15 | # scope-format: 16 | # level: error 17 | # format: ^[A-Za-z]*$ 18 | 19 | # https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional 20 | type: 21 | level: error 22 | options: 23 | - build 24 | - chore 25 | - ci 26 | - docs 27 | - feat 28 | - fix 29 | - minor 30 | - perf 31 | - refactor 32 | - revert 33 | - style 34 | - test 35 | -------------------------------------------------------------------------------- /tf/justfile: -------------------------------------------------------------------------------- 1 | apply: 2 | summon -f summon.yml terraform apply -parallelism=1 3 | 4 | plan: 5 | summon -f summon.yml terraform plan -parallelism=1 6 | 7 | get-rules: 8 | # https://github.com/microsoftgraph/msgraph-cli 9 | docker run -it --cap-add=IPC_LOCK ghcr.io/microsoftgraph/msgraph-cli sh 10 | mgc login --scopes User.ReadWrite Mail.ReadWrite MailboxSettings.ReadWrite 11 | mgc users mail-folders message-rules list --user-id --mail-folder-id inbox 12 | 13 | trigger-rule: 14 | docker run -it --cap-add=IPC_LOCK ghcr.io/microsoftgraph/msgraph-cli sh 15 | mgc login --scopes User.ReadWrite Mail.ReadWrite MailboxSettings.ReadWrite 16 | # Not actually available yet 17 | mgc users mail-folders message-rules get --user-id --mail-folder-id inbox --message-rule-id AgAABSMdbos= --output text 18 | -------------------------------------------------------------------------------- /misc/borg.sh: -------------------------------------------------------------------------------- 1 | REPOSITORY=/mnt/synology 2 | name=${1:-'{now:%Y-%m-%d}'} 3 | # Backup all of /home and /var/www except a few 4 | # excluded directories 5 | borg create -v -s -p \ 6 | $REPOSITORY::"{hostname}-$name" \ 7 | / \ 8 | -e '/dev/*' \ 9 | -e '/proc/*' \ 10 | -e '/sys/*' \ 11 | -e '/tmp/*' \ 12 | -e '/run/*' \ 13 | -e '/mnt/*' \ 14 | -e '/media/*' \ 15 | -e '/lost+found' 16 | # Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly 17 | # archives of THIS machine. The '{hostname}-' prefix is very important to 18 | # limit prune's operation to this machine's archives and not apply to 19 | # other machine's archives also.s 20 | borg prune -v --list $REPOSITORY --prefix '{hostname}-' \ 21 | --keep-daily=7 --keep-weekly=4 --keep-monthly=6 22 | -------------------------------------------------------------------------------- /dot_config/newsboat/urls.tmpl: -------------------------------------------------------------------------------- 1 | # https://newsboat.org/releases/2.29/docs/newsboat.html#_introduction 2 | 3 | 4 | # https://metaebene.me/updates/ 5 | http://raumzeit-podcast.de/feed/opus/ 6 | http://cre.fm/feed/opus/ 7 | http://forschergeist.de/feed/opus/ 8 | 9 | https://www.geschichte.fm/feed/mp3 10 | 11 | https://feeds.acast.com/public/shows/the-rest-is-history-podcast 12 | 13 | http://feeds.libsyn.com/218348/rss # the red line 14 | 15 | https://rss.art19.com/tides-of-history 16 | 17 | https://feeds.acast.com/public/shows/the-ancients 18 | 19 | # The Forum - BBC World Service 20 | https://podcasts.files.bbci.co.uk/p004kln9.rss 21 | 22 | https://feeds.acast.com/public/shows/lets-talk-religion 23 | https://lexfridman.com/feed/podcast/ 24 | https://anno-punktpunktpunkt.de/feed/mp3 25 | 26 | {{ include (expandenv "$DOT/priv/.config/newsboat/urls") }} 27 | -------------------------------------------------------------------------------- /dot_config/curl/curl-timing.cfg: -------------------------------------------------------------------------------- 1 | \n 2 | Remote IP : %{remote_ip}\n 3 | \n 4 | DNS lookup : %{time_namelookup}\n 5 | Connect to server (TCP) : %{time_connect}\n 6 | Connect to server (HTTP/S) : %{time_appconnect}\n 7 | Time from start until transfer began: %{time_pretransfer}\n 8 | Time for redirection (if any) : %{time_redirect}\n 9 | Total time before transfer started : %{time_starttransfer}\n 10 | \n 11 | Total time : %{time_total}\n 12 | Size of download (bytes) : %{size_download}\n 13 | Average d/l speed (bytes/s) : %{speed_download}\n 14 | \n 15 | 16 | 17 | # https://everything.curl.dev/usingcurl/verbose/writeout.html 18 | # https://askubuntu.com/questions/147377/how-to-debug-slow-browsing-speed 19 | -------------------------------------------------------------------------------- /encrypted_dot_netrc.age: -------------------------------------------------------------------------------- 1 | -----BEGIN AGE ENCRYPTED FILE----- 2 | YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxR2N6cElzMzB0bWhrb1ZI 3 | ajVjTkhFUFRERG9WbU5IU2lxTjZza2poc1ZJClpoSG5ydGdvakhITHhUdkhRcGFQ 4 | dklDMGp5dkNpVy9xZHFxSTB6ZkNZQWMKLS0tIDZETmNhVnhYcWtDOVEycXhMM3Rs 5 | WVIzUTROTWlIcGkwR2pPaWk5SUZrbWcK69cbtkp0w/r3Pe6j9ebXsQnS9ta4kpK3 6 | 6vVUNAwJNPM6dI8rPo17yNDhEINHp8hEXNruwOOTLqhhGZuZg17hBVzHGh4qMsJs 7 | YR8JQSlUQSmcv1YKajKmXt3dxr11DQ6fwPkQDQ+Gf42G4KR6wgjle48IqrvJup0y 8 | FkTY0byQJn5UqJR3+xNSzwKvhyAHs8IZJ96kMRU9xxYfr6aT2DMpIaDF2O6crSgi 9 | H6RyD5JN2KfsVD2lGCi6v/g97oMJXpNWrBAZwnrPUm6G3gtR/j3gFyZrKXXTQjw3 10 | BP9CEhBxrPRRQc0kYPx+umT0ivEyfYclX/kx9q/WXXd6F0HJYkd6IPSIQt07mKXi 11 | S6gU24Av+rAYgipzwN3jtgOXQKWC977Znqyh/mKpWR4y0hrwpFrAWoeDcIr+eBYZ 12 | 040evvVB3Evh8gbkE+tDHwxXf1AEoiQK/7vcqKR/M4WIpeMSusZFz1PlC4ppVFsk 13 | j7LuNn87839upGB+RcsTofZA+Xvvklr5PTpHJv6E+Fde3Og956TMJ8E= 14 | -----END AGE ENCRYPTED FILE----- 15 | -------------------------------------------------------------------------------- /tf/providers.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | outlook = { 4 | source = "magodo/outlook" 5 | version = "0.5.0" 6 | } 7 | 8 | google = { 9 | source = "hashicorp/google" 10 | version = "5.17.0" 11 | } 12 | 13 | azuread = { 14 | source = "hashicorp/azuread" 15 | version = "2.47.0" 16 | } 17 | 18 | sops = { 19 | # https://github.com/carlpett/terraform-provider-sops/issues/50 20 | source = "lokkersp/sops" 21 | version = "0.6.10" 22 | } 23 | 24 | b2 = { 25 | source = "Backblaze/b2" 26 | version = "0.8.9" 27 | } 28 | } 29 | 30 | required_version = ">= 1.7" 31 | } 32 | 33 | 34 | provider "sops" {} 35 | 36 | provider "outlook" {} 37 | 38 | provider "google" {} 39 | 40 | provider "azuread" { 41 | tenant_id = "dc6fe035-d1b7-4fe5-b9f5-8a84d1fe06ae" 42 | } 43 | 44 | provider "b2" {} 45 | -------------------------------------------------------------------------------- /dot_config/wezterm/mouse.lua: -------------------------------------------------------------------------------- 1 | local wezterm = require("wezterm") 2 | 3 | mouse_bindings = { -- Change the default click behavior so that it only selects 4 | -- text and doesn't open hyperlinks 5 | { 6 | event = { 7 | Up = { 8 | streak = 1, 9 | button = "Left", 10 | }, 11 | }, 12 | mods = "NONE", 13 | action = wezterm.action({ CompleteSelection = "PrimarySelection" }), 14 | }, 15 | { -- and make CTRL-Click open hyperlinks 16 | event = { 17 | Up = { 18 | streak = 1, 19 | button = "Left", 20 | }, 21 | }, 22 | mods = "CTRL", 23 | action = "OpenLinkAtMouseCursor", 24 | }, -- Disable the 'Down' event of CTRL-Click to avoid weird program behaviors 25 | { 26 | event = { 27 | Down = { 28 | streak = 1, 29 | button = "Left", 30 | }, 31 | }, 32 | mods = "CTRL", 33 | action = "Nop", 34 | }, 35 | } 36 | 37 | return mouse_bindings 38 | -------------------------------------------------------------------------------- /dot_local/bin/executable_wpctl-wob: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env zsh 2 | 3 | 4 | increase-volume() { 5 | wpctl set-volume @DEFAULT_SINK@ 2%+ 6 | _to_wob @DEFAULT_SINK@ 7 | } 8 | 9 | decrease-volume() { 10 | wpctl set-volume @DEFAULT_SINK@ 2%- 11 | _to_wob @DEFAULT_SINK@ 12 | } 13 | 14 | toggle-mute() { 15 | wpctl set-mute @DEFAULT_SINK@ toggle 16 | _to_wob @DEFAULT_SINK@ 17 | } 18 | 19 | toggle-mic-mute() { 20 | wpctl set-mute @DEFAULT_SOURCE@ toggle 21 | _to_wob @DEFAULT_SOURCE@ 22 | 23 | # https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/1849 24 | volume="$(wpctl get-volume @DEFAULT_SOURCE@)" 25 | volume=${volume#Volume: *} 26 | case "$volume" in (*MUTED*) mute=1;; *) mute=0;; esac 27 | echo $mute > /sys/class/leds/platform::micmute/brightness 28 | } 29 | 30 | _to_wob() { 31 | volume="$(wpctl get-volume $1)" 32 | volume=${volume#Volume: *} 33 | case "$volume" in (*MUTED*) volume=0;; esac 34 | printf "%0.0f\n" "${volume%% *}e+2" > "$XDG_RUNTIME_DIR/wob.sock" 35 | } 36 | 37 | 38 | "$@" 39 | -------------------------------------------------------------------------------- /dot_config/sway/workspace-2.json: -------------------------------------------------------------------------------- 1 | // vim:ts=4:sw=4:et 2 | { 3 | // tabbed split container with 1 children 4 | "border": "none", 5 | "floating": "auto_off", 6 | "layout": "tabbed", 7 | "percent": null, 8 | "type": "con", 9 | "nodes": [ 10 | { 11 | "border": "none", 12 | "current_border_width": 0, 13 | "floating": "auto_off", 14 | "geometry": { 15 | "height": 1057, 16 | "width": 1920, 17 | "x": 2560, 18 | "y": 35 19 | }, 20 | "name": "i3: Layout saving in i3 - Google Chrome", 21 | "percent": 1, 22 | "swallows": [ 23 | { 24 | "class": "^Google\\-chrome\\-unstable$", 25 | // "instance": "^google\\-chrome\\-unstable\\ \\(\\/home\\/jm\\/\\.config\\/google\\-chrome\\-unstable\\)$", 26 | // "title": "^i3\\:\\ Layout\\ saving\\ in\\ i3\\ \\-\\ Google\\ Chrome$", 27 | // "transient_for": "^$", 28 | // "window_role": "^browser$" 29 | } 30 | ], 31 | "type": "con" 32 | } 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /dot_config/resticprofile/profiles.yaml.tmpl: -------------------------------------------------------------------------------- 1 | version: 1 2 | 3 | default: 4 | repository: 's3:https://s3.us-west-002.backblazeb2.com/{{ secretJSON "tf" | dig "backup_bon_bucket" "bucket_name" "" }}' 5 | password-file: repo-pw.txt 6 | status-file: /home/moi/.local/state/backup-status.json 7 | force-inactive-lock: true 8 | lock: "/tmp/resticprofile.lock" 9 | 10 | env: 11 | AWS_ACCESS_KEY_ID: '{{ secretJSON "tf" | dig "backup_bon_bucket" "key_id" "" }}' 12 | AWS_SECRET_ACCESS_KEY: '{{ secretJSON "tf" | dig "backup_bon_bucket" "key" "" }}' 13 | 14 | backup: 15 | run-before: 16 | - ~/.config/resticprofile/generate-excludes.sh 17 | - ~/.config/resticprofile/git-gc.sh 18 | 19 | exclude-file: 20 | - /tmp/generated-excludes.txt 21 | - ignore.txt 22 | exclude-caches: true 23 | one-file-system: true 24 | source: '{{ env "HOME" }}' 25 | 26 | retention: 27 | before-backup: false 28 | after-backup: true 29 | keep-daily: 30 30 | keep-hourly: 12 31 | keep-weekly: 4 32 | keep-monthly: 12 33 | -------------------------------------------------------------------------------- /dot_config/mailctl/services.yaml.tmpl: -------------------------------------------------------------------------------- 1 | # https://github.com/pdobsan/mailctl/blob/main/configs/services-template.yaml 2 | 3 | # Note: 4 | # to reauthorize expired renewal token: 5 | # `mailctl authorize microsoft ` 6 | # hint: don't log in with auto-filled account 7 | # 1. choose a different account 8 | # 2. choose organization io 9 | 10 | microsoft: 11 | auth_endpoint: https://login.microsoftonline.com/common/oauth2/v2.0/authorize 12 | auth_http_method: GET 13 | auth_params_mode: query-string 14 | token_endpoint: https://login.microsoftonline.com/common/oauth2/v2.0/token 15 | token_http_method: POST 16 | token_params_mode: request-body-form 17 | redirect_uri: http://localhost:8080 18 | auth_scope: https://outlook.office365.com/IMAP.AccessAsUser.All https://outlook.office365.com/SMTP.Send offline_access 19 | client_id: '{{ output "sops" "--extract" "[\"mail_auth\"][\"client_id\"]" "-d" (printf "%s/tf/secrets-output.yml" .chezmoi.sourceDir) }}' 20 | client_secret: '{{ output "sops" "--extract" "[\"mail_auth\"][\"client_secret\"]" "-d" (printf "%s/tf/secrets-output.yml" .chezmoi.sourceDir) }}' 21 | -------------------------------------------------------------------------------- /dot_local/bin/executable_diffwatch: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # hook into inotify to watch a file, and generate 3 | # diffs for changes in real-time 4 | # 5 | # requires inotify-tools (apt-get install inotify-tools) 6 | # 7 | # @author Filipe Dobreira 8 | usage() { 9 | echo "Usage:" 10 | echo " in-diff |help" 11 | 12 | exit 1 13 | } 14 | 15 | # check arguments: 16 | if [ "$1" == "" ] || [ ! -f "$1" ] || [ "$1" == "help" ]; then 17 | usage 18 | fi 19 | 20 | # check dependencies: 21 | command -v inotifywait >/dev/null 2>&1 || { echo >&2 "inotifywait(1) not available, please install inotify-tools"; exit 1; } 22 | 23 | FILE="$1" 24 | SNAP=$(mktemp) 25 | 26 | # copy the initial snapshot to a temp file 27 | cp "$FILE" "$SNAP" 28 | 29 | watch () { 30 | # start an inotifywatch loop: 31 | while RES=$(inotifywait -q -e modify $FILE); do 32 | delta "$SNAP" "$FILE" 33 | cp "$FILE" "$SNAP" 34 | done 35 | } 36 | 37 | # Keep watching for changes, even if the file is deleted. 38 | while true; do 39 | if [ ! -f "$FILE" ]; then 40 | echo "" > "$SNAP" 41 | else 42 | watch 43 | fi 44 | done 45 | -------------------------------------------------------------------------------- /dot_config/spotify-player/app.toml.tmpl: -------------------------------------------------------------------------------- 1 | theme = "dracula" 2 | client_id = "{{ secretJSON "secrets" | dig "spotify" "client_id" "" }}" 3 | client_port = 8080 4 | playback_format = """ 5 | {track} • {artists} 6 | {album} 7 | {metadata}""" 8 | tracks_playback_limit = 50 9 | app_refresh_duration_in_ms = 32 10 | playback_refresh_duration_in_ms = 0 11 | page_size_in_rows = 20 12 | play_icon = "▶" 13 | pause_icon = "▌▌" 14 | liked_icon = "♥" 15 | border_type = "Plain" 16 | progress_bar_type = "Rectangle" 17 | playback_window_position = "Top" 18 | cover_img_length = 9 19 | cover_img_width = 5 20 | cover_img_scale = 1.0 21 | playback_window_width = 6 22 | enable_media_control = true 23 | enable_streaming = "Always" 24 | enable_notify = false 25 | enable_cover_image_cache = true 26 | default_device = "nix" 27 | notify_streaming_only = false 28 | 29 | [copy_command] 30 | command = "wc-copy" 31 | args = [ 32 | "-n", 33 | ] 34 | 35 | [notify_format] 36 | summary = "{track} • {artists}" 37 | body = "{album}" 38 | 39 | [device] 40 | name = "spotify-player" 41 | device_type = "speaker" 42 | volume = 70 43 | bitrate = 320 44 | audio_cache = false 45 | normalization = false 46 | -------------------------------------------------------------------------------- /dot_config/wezterm/main.lua: -------------------------------------------------------------------------------- 1 | -- https://wezfurlong.org/wezterm/config/files.html 2 | 3 | local wezterm = require("wezterm") 4 | 5 | local keys, key_tables = require("keys")() 6 | local mouse_bindings = require("mouse") 7 | 8 | require("start") 9 | 10 | launch_menu = { 11 | { 12 | label = "New tab", 13 | cwd = wezterm.home_dir, 14 | }, 15 | } 16 | 17 | local config = wezterm.config_builder() 18 | config:set_strict_mode(true) 19 | 20 | config.automatically_reload_config = false 21 | config.check_for_updates = false 22 | config.term = "wezterm" 23 | config.color_scheme = "Gruvbox dark, pale (base16)" 24 | config.enable_tab_bar = false 25 | config.enable_wayland = true 26 | config.font = wezterm.font("Hack") 27 | config.font_size = 13 28 | config.front_end = "WebGpu" 29 | config.keys = keys 30 | config.key_tables = key_tables 31 | config.launch_menu = launch_menu 32 | config.mouse_bindings = mouse_bindings 33 | config.hyperlink_rules = hyperlink_rules 34 | config.debug_key_events = false 35 | config.key_map_preference = "Physical" 36 | config.default_prog = { "fish" } 37 | config.default_workspace = "moi" 38 | config.scrollback_lines = 10000 39 | 40 | return config 41 | -------------------------------------------------------------------------------- /dot_config/git-repo-manager/config.yaml.tmpl: -------------------------------------------------------------------------------- 1 | trees: 2 | - root: ~/dot 3 | repos: 4 | - name: dotfiles 5 | worktree_setup: false 6 | remotes: 7 | - name: origin 8 | url: git@github.com:Croissong/dotfiles.git 9 | type: ssh 10 | - name: system 11 | worktree_setup: false 12 | remotes: 13 | - name: origin 14 | url: git@github.com:Croissong/system.git 15 | type: ssh 16 | 17 | {{ include (expandenv "$DOT/priv/dot/git-repo-manager/priv.yaml") | nindent 2 }} 18 | 19 | - root: ~/.config 20 | repos: 21 | - name: emacs 22 | worktree_setup: false 23 | remotes: 24 | - name: origin 25 | url: git@github.com:Croissong/emacs.git 26 | type: ssh 27 | 28 | - root: ~/code/moi 29 | repos: 30 | - name: patrician 31 | worktree_setup: false 32 | remotes: 33 | - name: origin 34 | url: git@github.com:Croissong/patrician.git 35 | type: ssh 36 | - name: hieroglyph 37 | worktree_setup: false 38 | remotes: 39 | - name: origin 40 | url: git@github.com:Croissong/hieroglyph.git 41 | type: ssh 42 | 43 | 44 | 45 | {{ include (expandenv "$DOT/priv/dot/git-repo-manager/wrk.yaml") }} 46 | -------------------------------------------------------------------------------- /dot_local/bin/executable_ix: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Examples: 4 | # ix hello.txt # paste file (name/ext will be set). 5 | # echo Hello world. | ix # read from STDIN (won't set name/ext). 6 | # ix -n 1 self_destruct.txt # paste will be deleted after one read. 7 | # ix -i ID hello.txt # replace ID, if you have permission. 8 | # ix -d ID 9 | 10 | ix() { 11 | local opts 12 | local OPTIND 13 | [ -f "$HOME/.netrc" ] && opts='-n' 14 | while getopts ":hd:i:n:" x; do 15 | case $x in 16 | h) echo "ix [-d ID] [-i ID] [-n N] [opts]"; return;; 17 | d) $echo curl $opts -X DELETE ix.io/$OPTARG; return;; 18 | i) opts="$opts -X PUT"; local id="$OPTARG";; 19 | n) opts="$opts -F read:1=$OPTARG";; 20 | esac 21 | done 22 | shift $(($OPTIND - 1)) 23 | [ -t 0 ] && { 24 | local filename="$1" 25 | shift 26 | [ "$filename" ] && { 27 | curl $opts -F f:1=@"$filename" $* ix.io/$id 28 | return 29 | } 30 | echo "^C to cancel, ^D to send." 31 | } 32 | curl $opts -F f:1='<-' $* ix.io/$id 33 | } 34 | 35 | ix $* -------------------------------------------------------------------------------- /dot_config/private_pipewire/pipewire.conf.d/99-input-denoising.conf: -------------------------------------------------------------------------------- 1 | context.modules = [ 2 | { name = libpipewire-module-filter-chain 3 | args = { 4 | node.description = "Noise Canceling source" 5 | media.name = "Noise Canceling source" 6 | filter.graph = { 7 | nodes = [ 8 | { 9 | type = ladspa 10 | name = rnnoise 11 | plugin = /usr/lib/ladspa/librnnoise_ladspa.so 12 | label = noise_suppressor_mono 13 | control = { 14 | "VAD Threshold (%)" = 50.0 15 | "VAD Grace Period (ms)" = 200 16 | "Retroactive VAD Grace (ms)" = 20 17 | } 18 | } 19 | ] 20 | } 21 | capture.props = { 22 | node.name = "capture.rnnoise_source" 23 | node.passive = true 24 | audio.rate = 48000 25 | } 26 | playback.props = { 27 | node.name = "rnnoise_source" 28 | media.class = Audio/Source 29 | audio.rate = 48000 30 | } 31 | } 32 | } 33 | ] 34 | -------------------------------------------------------------------------------- /tf/backup.tf: -------------------------------------------------------------------------------- 1 | resource "b2_bucket" "backup" { 2 | bucket_name = "backup-moi" 3 | bucket_type = "allPrivate" 4 | 5 | lifecycle_rules { 6 | file_name_prefix = "" 7 | days_from_hiding_to_deleting = 1 8 | days_from_uploading_to_hiding = 0 9 | } 10 | 11 | lifecycle { 12 | prevent_destroy = true 13 | } 14 | } 15 | 16 | 17 | resource "b2_application_key" "autorestic_key" { 18 | key_name = "autorestic" 19 | capabilities = ["deleteFiles", "listBuckets", "listFiles", "readBucketEncryption", "readBucketReplications", "readBuckets", "readFiles", "shareFiles", "writeBucketEncryption", "writeBucketReplications", "writeFiles"] 20 | bucket_id = b2_bucket.backup.bucket_id 21 | } 22 | 23 | 24 | resource "b2_bucket" "backup_bon" { 25 | bucket_name = "backup-bon" 26 | bucket_type = "allPrivate" 27 | 28 | lifecycle_rules { 29 | file_name_prefix = "" 30 | days_from_hiding_to_deleting = 1 31 | days_from_uploading_to_hiding = 0 32 | } 33 | 34 | lifecycle { 35 | prevent_destroy = true 36 | } 37 | } 38 | 39 | 40 | resource "b2_application_key" "autorestic_key_bon" { 41 | key_name = "autorestic" 42 | capabilities = ["deleteFiles", "listBuckets", "listFiles", "readBucketEncryption", "readBucketReplications", "readBuckets", "readFiles", "shareFiles", "writeBucketEncryption", "writeBucketReplications", "writeFiles"] 43 | bucket_id = b2_bucket.backup_bon.bucket_id 44 | } 45 | -------------------------------------------------------------------------------- /dot_config/starship.toml: -------------------------------------------------------------------------------- 1 | add_newline = false 2 | format = "${custom.tab}$all" 3 | 4 | [character] 5 | success_symbol = "[❯](white)" 6 | 7 | [directory] 8 | style = "bold green" 9 | 10 | [git_branch] 11 | format = "[$branch]($style) " 12 | style = "#d69423" 13 | 14 | [python] 15 | format = '[$virtualenv]($style) ' 16 | style = "yellow" 17 | 18 | [cmd_duration] 19 | format = "[$duration]($style) " 20 | style = "dimmed white" 21 | 22 | [username] 23 | disabled = true 24 | [kubernetes] 25 | disabled = true 26 | [hostname] 27 | disabled = true 28 | [git_state] 29 | disabled = true 30 | [git_status] 31 | disabled = true 32 | [haskell] 33 | disabled = true 34 | [hg_branch] 35 | disabled = true 36 | [docker_context] 37 | disabled = true 38 | [package] 39 | disabled = true 40 | [memory_usage] 41 | disabled = true 42 | [aws] 43 | disabled = true 44 | [gcloud] 45 | disabled = true 46 | [openstack] 47 | disabled = true 48 | [env_var] 49 | disabled = true 50 | [battery] 51 | disabled = true 52 | [time] 53 | disabled = true 54 | [helm] 55 | disabled = true 56 | [nodejs] 57 | disabled = true 58 | [java] 59 | disabled = true 60 | [kotlin] 61 | disabled = true 62 | [terraform] 63 | disabled = true 64 | [rust] 65 | disabled = true 66 | [lua] 67 | disabled = true 68 | [golang] 69 | disabled = true 70 | [status] 71 | disabled = true 72 | [php] 73 | disabled = true 74 | [vagrant] 75 | disabled = true 76 | [cmake] 77 | disabled = true 78 | [nim] 79 | disabled = true 80 | [bun] 81 | disabled = true 82 | -------------------------------------------------------------------------------- /dot_config/updatecli/dot/nix-pypi.yaml: -------------------------------------------------------------------------------- 1 | name: nix 2 | 3 | sources: 4 | {{range .pypi}} 5 | 6 | {{ .package }}-version: 7 | kind: json 8 | spec: 9 | file: https://pypi.org/pypi/{{ .package }}/json 10 | key: info.version 11 | 12 | {{ .package }}-url: 13 | kind: json 14 | dependson: 15 | - {{ printf "%s-version" .package }} 16 | spec: 17 | file: https://pypi.org/pypi/{{ .package }}/{{ source (printf "%s-version" .package) }}/json 18 | key: urls.[0].url 19 | 20 | 21 | {{ .package }}-sha: 22 | kind: shell 23 | dependson: 24 | - {{ printf "%s-url" .package }} 25 | spec: 26 | command: ./dot/nix-fetch-sha.sh {{ source (printf "%s-url" .package) }} 27 | 28 | {{end}} 29 | 30 | targets: 31 | {{range .pypi}} 32 | 33 | {{ .package }}-nixpkgs-version: 34 | name: update nix version 35 | kind: json 36 | sourceid: {{ .package }}-version 37 | spec: 38 | file: {{ requiredEnv "DOT" }}/dot_config/nixpkgs/versions.json 39 | key: {{ .package }}.version 40 | 41 | {{ .package }}-nixpkgs-sha: 42 | name: update nix sha 43 | kind: json 44 | sourceid: {{ .package }}-sha 45 | spec: 46 | file: {{ requiredEnv "DOT" }}/dot_config/nixpkgs/versions.json 47 | key: {{ .package }}.sha 48 | 49 | {{ .package }}-nixpkgs-url: 50 | name: update nix url 51 | kind: json 52 | sourceid: {{ .package }}-url 53 | spec: 54 | file: {{ requiredEnv "DOT" }}/dot_config/nixpkgs/versions.json 55 | key: {{ .package }}.url 56 | 57 | {{end}} 58 | -------------------------------------------------------------------------------- /dot_config/resticprofile/ignore.txt: -------------------------------------------------------------------------------- 1 | $HOME/.azure 2 | $HOME/.cache 3 | $HOME/.cargo 4 | $HOME/.conan 5 | $HOME/.config/.wrangler 6 | $HOME/.config/ansible/roles/ 7 | $HOME/.config/autostart 8 | $HOME/.config/cef_user_data 9 | $HOME/.config/chromium 10 | $HOME/.config/discord 11 | $HOME/.config/doctl/cache 12 | $HOME/.config/gcloud/logs 13 | $HOME/.config/gem 14 | $HOME/.config/GIMP 15 | $HOME/.config/go 16 | $HOME/.config/google-chrome 17 | $HOME/.config/JetBrains 18 | $HOME/.config/Keybase/Cache 19 | $HOME/.config/libreoffice 20 | $HOME/.config/Microsoft/Microsoft Teams 21 | $HOME/.config/mpv/watch_later 22 | $HOME/.config/obs-studio/logs 23 | $HOME/.config/obs-studio/profiler_data 24 | $HOME/.config/packer 25 | $HOME/.config/Slack 26 | $HOME/.config/spotify 27 | $HOME/.config/streamlink-twitch-gui 28 | $HOME/.config/unity3d 29 | $HOME/.config/VSCodium 30 | $HOME/.dartServer 31 | $HOME/.dart-tool 32 | $HOME/.eclipse 33 | $HOME/.gradle 34 | $HOME/.java 35 | $HOME/.kube 36 | $HOME/.local 37 | $HOME/.m2 38 | $HOME/.mongodb3 39 | $HOME/.mozilla/firefox 40 | $HOME/.node_modules 41 | $HOME/.npm 42 | $HOME/.pub-cache 43 | $HOME/.rustup 44 | $HOME/.slime 45 | $HOME/.tor project/ 46 | $HOME/.trash_rmt 47 | $HOME/.yarn 48 | $HOME/.zoom 49 | $HOME/GPUCache 50 | $HOME/Libation 51 | 52 | $HOME/.factorio 53 | 54 | $HOME/.config/lxc 55 | $HOME/.config/virt-viewer 56 | $HOME/.config/draw.io 57 | $HOME/.config/Signal 58 | $HOME/.config/Altair GraphQL Client/ 59 | $HOME/Downloads 60 | $HOME/.terraform.d 61 | $HOME/.visualvm 62 | 63 | tmp/ 64 | 65 | 66 | $HOME/code/golang 67 | $HOME/code/forks/nixpkgs 68 | 69 | # subset of global gitignore 70 | .direnv/ 71 | -------------------------------------------------------------------------------- /dot_config/git/config: -------------------------------------------------------------------------------- 1 | [user] 2 | name = Jan Moeller 3 | email = jan.moeller0@gmail.com 4 | signingkey = 96A438F9EE72572F 5 | [init] 6 | defaultBranch = main 7 | [commit] 8 | template = ~/.config/git/commit_template.txt 9 | gpgsign = true 10 | [pull] 11 | rebase = true 12 | [rebase] 13 | autostash = true 14 | [core] 15 | excludesfile = ~/.config/git/ignore 16 | pager = bat 17 | 18 | [diff] 19 | submodule = log 20 | tool = difftastic 21 | 22 | [difftool] 23 | prompt = false 24 | [difftool "difftastic"] 25 | cmd = difft "$LOCAL" "$REMOTE" 26 | 27 | [diff "json"] 28 | textconv = "jq ''" 29 | [diff "sopsdiffer"] 30 | textconv = sops -d 31 | 32 | [status] 33 | submodulesummary = 1 34 | showuntrackedfiles = normal 35 | 36 | [color] 37 | diff = auto 38 | status = auto 39 | branch = auto 40 | interactive = auto 41 | ui = true 42 | pager = true 43 | 44 | [alias] 45 | br = branch -vv 46 | bra = branch -avv 47 | cm = commit 48 | co = checkout 49 | ds = diff --stat 50 | dc = diff --cached 51 | hist = log --graph --decorate --date=short --pretty=format:\"%Cblue%h%Creset %C(yellow)%ad%Creset %Cgreen%<(20)%an%Creset\t%s %Cred%d%Creset \" 52 | ls = ls-files 53 | mt = mergetool 54 | root = !pwd 55 | grepp = "!git log --patch -G\"$1\" #" 56 | st = status -sb 57 | regexadd = "!f() { git diff --no-ext-diff -U0 \ 58 | | grepdiff -E $1 --output-matching=hunk \ 59 | | git apply --cached --unidiff-zero; }; f" 60 | 61 | # TODO: https://www.atlassian.com/blog/git/advanced-git-aliases 62 | 63 | [apply] 64 | whitespace = warn 65 | 66 | [annex] 67 | resolvemerge = false 68 | synccontent = true 69 | -------------------------------------------------------------------------------- /dot_config/just/justfile: -------------------------------------------------------------------------------- 1 | # TODO?: 2 | # set shell := ['nu', '-m', 'light', '-c'] 3 | 4 | 5 | default: 6 | @just -g --choose 7 | 8 | 9 | nix-hm update='true': 10 | nh home switch {{ if update == "true" {"--update"} else {""} }} -c moi@bon -- --impure 11 | 12 | nix-os update='true': 13 | nh os switch {{ if update == "true" {"--update"} else {""} }} 14 | 15 | nix-diff-os: 16 | # log profile dates 17 | ls -l /nix/var/nix/profiles/system-*-link/|tail -2 18 | nix store diff-closures $(ls -dv /nix/var/nix/profiles/system-*-link/|tail -2) 19 | 20 | 21 | netd-restart: 22 | #!/usr/bin/env nu 23 | sudo systemctl stop strongswan-swanctl 24 | sudo systemctl restart systemd-networkd dnscrypt-proxy2 iwd 25 | systemctl is-active systemd-networkd dnscrypt-proxy2 iwd strongswan-swanctl 26 | 27 | 28 | netd-journal: 29 | journalctl --since "12 hours ago" -u systemd-networkd -u dnscrypt-proxy2 -u iwd 30 | 31 | gc: 32 | podman system prune --all --force && podman rmi --all --force 33 | nix-collect-garbage -d 34 | 35 | 36 | scan out: 37 | systemctl restart avahi-daemon.service 38 | # scanadf -L 39 | scan --verbose --mode Color --resolution 600 -e 1 --no-default-size \ 40 | -x 'airscan:e0:Canon TS5000 series' \ 41 | --unpaper --ocr \ 42 | -o {{out}}.pdf 43 | 44 | 45 | updatecli: 46 | @just --justfile $DOT/dotfiles/dot_config/updatecli/justfile -d $DOT/dotfiles/dot_config/updatecli apply 47 | 48 | grm: 49 | chezmoi apply -v -r $HOME/.config/git-repo-manager/config.yaml 50 | grm repos sync config --config ~/.config/git-repo-manager/config.yaml 51 | 52 | 53 | klog: 54 | @just --choose --justfile $DOT/docs/wrk/timelog/justfile 55 | -------------------------------------------------------------------------------- /dot_config/i3status-rust/config.toml: -------------------------------------------------------------------------------- 1 | 2 | [theme] 3 | theme = "plain" 4 | [theme.overrides] 5 | idle_fg = "#ebdbb2" 6 | 7 | [icons] 8 | icons = "awesome6" 9 | [icons.overrides] 10 | bat_full = "100%" 11 | bat_charging = "+" 12 | bat_discharging = "-" 13 | 14 | [[block]] 15 | block = "custom" 16 | json = true 17 | format = "$text.pango-str()" 18 | interval = 1800 19 | watch_files = [ "$XDG_DATA_HOME/esplanade/export.ron" ] 20 | command = "esplanade cli" 21 | # command = "~/code/moi/hieroglyph/target/debug/esplanade cli" 22 | 23 | [[block]] 24 | block = "maildir" 25 | inboxes = [ 26 | "~/.local/share/mail/jm@iogroup.org/INBOX", 27 | "~/.local/share/mail/jm@iogroup.org/ops" 28 | ] 29 | threshold_warning = 5 30 | threshold_critical = 10000000 31 | interval = 360 32 | display_type = "new" 33 | icons_format = " {icon} " 34 | 35 | [[block]] 36 | block = "sound" 37 | device_kind = "source" 38 | format = " $icon " # only icon 39 | 40 | [[block]] 41 | block = "custom" 42 | format = "{ $icon|} $text.pango-str()" 43 | watch_files = [ "$XDG_CACHE_HOME/service-status/icon.json" ] 44 | command = "cat $XDG_CACHE_HOME/service-status/icon.json" 45 | json = true 46 | [[block.click]] 47 | button = "left" 48 | cmd = "handlr open $XDG_CACHE_HOME/service-status/status.json" 49 | 50 | 51 | [[block]] 52 | block = "load" 53 | interval = 60 54 | format = "$1m " 55 | 56 | 57 | [[block]] 58 | block = "battery" 59 | interval = 60 60 | driver = "upower" 61 | device = "DisplayDevice" 62 | format = "$percentage" 63 | icons_format = " {icon} " 64 | 65 | [[block]] 66 | block = "time" 67 | interval = 15 68 | format = " $timestamp.datetime(f:'%a %m-%d %H:%M') " 69 | -------------------------------------------------------------------------------- /dot_config/git/commit_template.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | # ---------------------------------------------------------- 4 | # Header - type(scope): brief description 5 | # ---------------------------------------------------------- 6 | # * build change to build system 7 | # * ci change to CI pipeline/workflow 8 | # * chore general tooling/config/min refactor 9 | # * docs change to documentation only 10 | # * feat a new feature - SemVar PATCH 11 | # * fix a bug fix - SemVar MINOR 12 | # * minor minor changes 13 | # * perf change that affects performance 14 | # * refactor change not related to a bug or feat 15 | # * revert revert a change 16 | # * style change to style (whitespace, etc.) 17 | # * test change that adds/modifies tests 18 | # ---------------------------------------------------------- 19 | 20 | 21 | # ---------------------------------------------------------- 22 | # Body - More description, if necessary 23 | # ---------------------------------------------------------- 24 | # * Motivation behind changes, more detail into how 25 | # functionality might be affected, etc. 26 | # ---------------------------------------------------------- 27 | 28 | 29 | # ---------------------------------------------------------- 30 | # Footer - Associated issues, PRs, etc. 31 | # ---------------------------------------------------------- 32 | # * Ex: Resolves Issue #207, see PR #15, etc. 33 | # ---------------------------------------------------------- 34 | 35 | 36 | 37 | 38 | # git-commit-prev-message 39 | # auto-fill-mode 40 | -------------------------------------------------------------------------------- /dot_local/share/rofi/themes/main.rasi: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * based on https://github.com/newmanls/rofi-themes-collection/blob/master/themes/nord-oneline.rasi 3 | *******************************************************************************/ 4 | 5 | * { 6 | font: "Pango 11"; 7 | 8 | text-color: inherit; 9 | text-color-selected: #AA7E41; 10 | text-color-accent: #83ADAD; 11 | background-color: #000000; 12 | 13 | margin: 0px; 14 | padding: 0px; 15 | spacing: 0px; 16 | } 17 | 18 | window { 19 | text-color: #ffffff; 20 | location: south; 21 | width: 100%; 22 | background-color: @background-color; 23 | children: [ mainbox,message ]; 24 | } 25 | 26 | mainbox { 27 | orientation: horizontal; 28 | children: [ inputbar,listview ]; 29 | } 30 | 31 | 32 | inputbar { 33 | width: 25%; 34 | padding: 1px 8px; 35 | spacing: 8px; 36 | children: [ prompt, entry ]; 37 | } 38 | 39 | element-text, element-icon, entry { 40 | vertical-align: 0.5; 41 | } 42 | 43 | entry { 44 | text-color: @text-color-selected; 45 | } 46 | 47 | prompt, message { 48 | text-color: @text-color-accent; 49 | } 50 | 51 | listview { 52 | padding: 0 5%; 53 | layout: horizontal; 54 | } 55 | 56 | element { 57 | padding: 1px 4px; 58 | spacing: 2px; 59 | } 60 | 61 | element normal urgent { 62 | text-color: @text-color-accent; 63 | } 64 | 65 | element selected { 66 | text-color: @text-color-selected; 67 | } 68 | 69 | 70 | element-text { 71 | text-color: inherit; 72 | highlight: underline; 73 | } 74 | -------------------------------------------------------------------------------- /dot_config/khard/khard.conf: -------------------------------------------------------------------------------- 1 | [addressbooks] 2 | [[wrk]] 3 | path = ~/.local/share/contacts/wrk 4 | 5 | [[prv]] 6 | path = ~/.local/share/contacts/prv 7 | 8 | 9 | [general] 10 | debug = no 11 | default_action = list 12 | 13 | [contact table] 14 | # display names by first or last name: first_name / last_name / formatted_name 15 | display = first_name 16 | # group by address book: yes / no 17 | group_by_addressbook = no 18 | # reverse table ordering: yes / no 19 | reverse = no 20 | # append nicknames to name column: yes / no 21 | show_nicknames = no 22 | # show uid table column: yes / no 23 | show_uids = yes 24 | # sort by first or last name: first_name / last_name / formatted_name 25 | sort = last_name 26 | # localize dates: yes / no 27 | localize_dates = yes 28 | # set a comma separated list of preferred phone number types in descending priority 29 | # or nothing for non-filtered alphabetical order 30 | preferred_phone_number_type = pref, cell, home 31 | # set a comma separated list of preferred email address types in descending priority 32 | # or nothing for non-filtered alphabetical order 33 | preferred_email_address_type = pref, work, home 34 | 35 | [vcard] 36 | # extend contacts with your own private objects 37 | # these objects are stored with a leading "X-" before the object name in the vcard files 38 | # every object label may only contain letters, digits and the - character 39 | # example: 40 | # private_objects = Jabber, Skype, Twitter 41 | # default: , (the empty list) 42 | private_objects = Jabber, Skype, Twitter 43 | # preferred vcard version: 3.0 / 4.0 44 | preferred_version = 3.0 45 | # Look into source vcf files to speed up search queries: yes / no 46 | search_in_source_files = no 47 | # skip unparsable vcard files: yes / no 48 | skip_unparsable = no 49 | -------------------------------------------------------------------------------- /dot_config/sway/workspace-4.json: -------------------------------------------------------------------------------- 1 | // vim:ts=4:sw=4:et 2 | { 3 | // tabbed split container with 2 children 4 | "border": "none", 5 | "floating": "auto_off", 6 | "layout": "tabbed", 7 | "percent": null, 8 | "type": "con", 9 | "nodes": [ 10 | { 11 | "border": "none", 12 | "current_border_width": 0, 13 | "floating": "auto_off", 14 | "geometry": { 15 | "height": 864, 16 | "width": 1152, 17 | "x": 384, 18 | "y": 108 19 | }, 20 | "name": "Slack - iogroup", 21 | "percent": 0.5, 22 | "swallows": [ 23 | { 24 | // "class": "^Slack$", 25 | // "instance": "^slack$", 26 | // "title": "^Slack\\ \\-\\ iogroup$", 27 | // "window_role": "^browser\\-window$" 28 | } 29 | ], 30 | "type": "con" 31 | }, 32 | { 33 | "border": "none", 34 | "current_border_width": 0, 35 | "floating": "auto_off", 36 | "geometry": { 37 | "height": 700, 38 | "width": 1000, 39 | "x": 460, 40 | "y": 190 41 | }, 42 | "name": "Production Alerts - Smart Voice Hub Mattermost - Smart Voice Hub", 43 | "percent": 0.5, 44 | "swallows": [ 45 | { 46 | // "class": "^Mattermost$", 47 | // "instance": "^mattermost$", 48 | // "title": "^Production\\ Alerts\\ \\-\\ Smart\\ Voice\\ Hub\\ Mattermost\\ \\-\\ Smart\\ Voice\\ Hub$", 49 | // "window_role": "^browser\\-window$" 50 | } 51 | ], 52 | "type": "con" 53 | } 54 | ] 55 | } 56 | 57 | -------------------------------------------------------------------------------- /dot_config/aichat/roles.yaml: -------------------------------------------------------------------------------- 1 | - name: regex 2 | prompt: > 3 | I want you to act as a regex generator. 4 | Your role is to generate regular expressions that match specific patterns in text. 5 | You should provide the regular expressions in a format that can be easily copied and pasted into a regex-enabled text editor or programming language. 6 | Do not write explanations or examples of how the regular expressions work; simply provide only the regular expressions themselves. 7 | 8 | - name: unittest 9 | prompt: > 10 | The user provides you with some code. 11 | Your task is to write a unit test for this code in an appropriate test framework in this language. 12 | Do not write anything else, just the code of the unit test. 13 | 14 | - name: readme 15 | prompt: > 16 | The user provides you with some code. 17 | Your task is to write an appropriate Readme.md in markdown format. 18 | Do not write anything else, just the Readme. 19 | 20 | - name: rate 21 | prompt: > 22 | The user provides you with some code. Your task is to review it. 23 | First explain, what this code does. 24 | Then point to bugs and potential issues with the code. 25 | Then rate the code between 1 and 10 and explain why. 26 | 27 | - name: variables 28 | prompt: > 29 | The user provides you with some code. 30 | Your task is to rewrite the variable names and function names in the style of Robert C. Martin Clean Code book. 31 | Do not write anything else, just the rewritten code. 32 | 33 | - name: refactor 34 | prompt: > 35 | The user provides you with some code. 36 | Your task is to refactor the code in the style of Robert C. Martin Clean Code book. 37 | You are allowed to change variable names, add comments, extract code into functions and fix bugs. The functionality of the code should not be altered. 38 | Do not write anything else, just the rewritten code. 39 | -------------------------------------------------------------------------------- /dot_config/xplr/init.lua: -------------------------------------------------------------------------------- 1 | version = "0.20.1" 2 | 3 | local home = os.getenv("HOME") 4 | local xpm_path = home .. "/.local/share/xplr/dtomvan/xpm.xplr" 5 | local xpm_url = "https://github.com/dtomvan/xpm.xplr" 6 | 7 | xplr.config.general.show_hidden = true 8 | xplr.config.general.hide_remaps_in_help_menu = true 9 | 10 | package.path = package.path .. ";" .. xpm_path .. "/?.lua;" .. xpm_path .. "/?/init.lua" 11 | 12 | os.execute(string.format("[ -e '%s' ] || git clone '%s' '%s'", xpm_path, xpm_url, xpm_path)) 13 | 14 | require("xpm").setup({ 15 | plugins = { 16 | -- Let xpm manage itself 17 | "dtomvan/xpm.xplr", 18 | { name = "sayanarijit/fzf.xplr" }, 19 | { name = "sayanarijit/dual-pane.xplr" }, 20 | { name = "igorepst/context-switch.xplr" }, 21 | { name = "prncss-xyz/icons.xplr" }, 22 | }, 23 | auto_install = true, 24 | auto_cleanup = true, 25 | }) 26 | 27 | require("context-switch").setup({ 28 | key = "alt-s", 29 | }) 30 | 31 | require("icons").setup() 32 | require("fzf").setup() 33 | require("dual-pane").setup() 34 | 35 | xplr.config.modes.builtin.switch_layout.layout = nil 36 | 37 | xplr.config.general.table.header.cols = { 38 | { format = "╭─── path", style = {} }, 39 | { format = "permissions", style = {} }, 40 | { format = "size", style = {} }, 41 | { format = "modified", style = {} }, 42 | } 43 | 44 | xplr.config.general.table.row.cols = { 45 | 46 | { 47 | format = "builtin.fmt_general_table_row_cols_1", 48 | style = {}, 49 | }, 50 | { 51 | format = "builtin.fmt_general_table_row_cols_2", 52 | style = {}, 53 | }, 54 | { 55 | format = "builtin.fmt_general_table_row_cols_3", 56 | style = {}, 57 | }, 58 | { 59 | format = "builtin.fmt_general_table_row_cols_4", 60 | style = {}, 61 | }, 62 | } 63 | 64 | xplr.config.general.table.col_widths = { 65 | { Percentage = 60 }, 66 | { Percentage = 10 }, 67 | { Percentage = 10 }, 68 | { Percentage = 20 }, 69 | } 70 | -------------------------------------------------------------------------------- /dot_local/share/rofi/themes/spotlight-dark.rasi: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * MACOS SPOTLIGHT LIKE DARK THEME FOR ROFI 3 | * User : LR-Tech 4 | * Theme Repo : https://github.com/lr-tech/rofi-themes-collection 5 | *******************************************************************************/ 6 | 7 | * { 8 | font: "Montserrat 12"; 9 | 10 | bg0: #242424E6; 11 | bg1: #7E7E7E80; 12 | bg2: #0860f2E6; 13 | 14 | fg0: #DEDEDE; 15 | fg1: #FFFFFF; 16 | fg2: #DEDEDE80; 17 | 18 | background-color: transparent; 19 | text-color: @fg0; 20 | 21 | margin: 0; 22 | padding: 0; 23 | spacing: 0; 24 | } 25 | 26 | window { 27 | background-color: @bg0; 28 | 29 | location: center; 30 | width: 640; 31 | border-radius: 8; 32 | } 33 | 34 | inputbar { 35 | font: "Montserrat 20"; 36 | padding: 12px; 37 | spacing: 12px; 38 | children: [ entry ]; 39 | } 40 | 41 | 42 | entry, element-icon, element-text { 43 | vertical-align: 0.5; 44 | } 45 | 46 | entry { 47 | font: inherit; 48 | 49 | } 50 | 51 | message { 52 | border: 2px 0 0; 53 | border-color: @bg1; 54 | background-color: @bg1; 55 | } 56 | 57 | textbox { 58 | padding: 8px 24px; 59 | } 60 | 61 | listview { 62 | lines: 10; 63 | columns: 1; 64 | 65 | fixed-height: false; 66 | border: 1px 0 0; 67 | border-color: @bg1; 68 | } 69 | 70 | element { 71 | padding: 8px 16px; 72 | spacing: 16px; 73 | background-color: transparent; 74 | } 75 | 76 | element normal active { 77 | text-color: @bg2; 78 | } 79 | 80 | element selected normal, element selected active { 81 | background-color: @bg2; 82 | text-color: @fg1; 83 | } 84 | 85 | element-icon { 86 | size: 1em; 87 | } 88 | 89 | element-text { 90 | text-color: inherit; 91 | } 92 | -------------------------------------------------------------------------------- /dot_config/updatecli/dot/nix.yaml: -------------------------------------------------------------------------------- 1 | name: nix 2 | 3 | sources: 4 | {{ range $name, $config := . }} 5 | 6 | # set defaults 7 | {{ $config = mergeOverwrite (dict "kind" "github" "repo" $name "asset" false "trimPrefix" true) $config }} 8 | 9 | {{ if eq $config.kind "sourcehut" }} 10 | {{ $name }}: 11 | kind: shell 12 | spec: 13 | environments: 14 | - name: PATH 15 | value: '{{ requiredEnv "PATH" }}' 16 | - name: SH_TOKEN 17 | value: '{{ requiredEnv "SH_TOKEN" }}' 18 | command: ./dot/sourcehut.sh '{{ $config | toJson }}' 19 | 20 | {{ else if eq $config.kind "github" }} 21 | {{ $name }}-version: 22 | kind: githubrelease 23 | spec: 24 | repository: "{{ $config.repo }}" 25 | owner: "{{ $config.owner }}" 26 | token: {{ requiredEnv "GH_TOKEN" }} 27 | versionFilter: 28 | kind: latest 29 | {{ if $config.trimPrefix }} 30 | transformers: 31 | - trimprefix: "v" 32 | {{ end }} 33 | {{ $name }}: 34 | kind: shell 35 | dependson: 36 | - {{ printf "%s-version" $name }} 37 | spec: 38 | command: ./dot/github.sh '{{ $config | toJson }}' '{{ source (printf "%s-version" $name) }}' 39 | {{end}} 40 | 41 | {{end}} 42 | 43 | targets: 44 | {{range $name, $repo := .}} 45 | 46 | {{ $name }}: 47 | kind: shell 48 | sourceid: {{ $name }} 49 | spec: 50 | shell: bash 51 | environments: 52 | - name: PATH 53 | value: '{{ requiredEnv "PATH" }}' 54 | changedif: 55 | kind: file/checksum 56 | spec: 57 | files: 58 | - {{ requiredEnv "DOT" }}/system/nix-config/versions.json 59 | command: | 60 | update_versions_file() { 61 | versions_file={{ requiredEnv "DOT" }}/system/nix-config/versions.json 62 | curr=$(dasel -f "$versions_file" {{ $name }}) 63 | dasel put -f "$versions_file" -t yaml {{ $name }} -v "$1" 64 | next=$(dasel -f "$versions_file" {{ $name }}) 65 | riff <(echo "$curr") <(echo "$next") 66 | } 67 | update_versions_file \ 68 | 69 | {{end}} 70 | -------------------------------------------------------------------------------- /dot_config/sway/main.conf: -------------------------------------------------------------------------------- 1 | set $mod Mod4 2 | font pango:Hack Regular 8 3 | 4 | floating_modifier $mod 5 | 6 | # resize window (you can also use the mouse for that) 7 | mode "resize" { 8 | # These bindings trigger as soon as you enter the resize mode 9 | 10 | # same bindings, but for the arrow keys 11 | bindsym Left resize shrink width 10 px or 10 ppt 12 | bindsym Down resize grow height 10 px or 10 ppt 13 | bindsym Up resize shrink height 10 px or 10 ppt 14 | bindsym Right resize grow width 10 px or 10 ppt 15 | 16 | # back to normal: Enter or Escape 17 | bindsym Return mode "default" 18 | bindsym Escape mode "default" 19 | } 20 | 21 | bindsym $mod+r mode "resize" 22 | 23 | tiling_drag disable 24 | 25 | bar { 26 | mode hide 27 | hidden_state hide 28 | modifier Mod4 29 | status_command i3status-rs $XDG_CONFIG_HOME/i3status-rust/config.toml 30 | font pango:Noto Sans Regular 11 31 | # tray_output DP-1 32 | # diable vertical scrolling 33 | bindsym button4 nop 34 | bindsym button5 nop 35 | # diable horizontal scrolling 36 | bindsym button6 nop 37 | bindsym button7 nop 38 | 39 | colors { 40 | focused_workspace #432423 #432423 #dfd5cf 41 | } 42 | } 43 | 44 | input type:touchpad { 45 | tap enabled 46 | natural_scroll enabled 47 | dwt enabled 48 | pointer_accel 0.3 49 | } 50 | 51 | input type:keyboard { 52 | xkb_layout us,de 53 | # https://man.archlinux.org/man/xkeyboard-config.7#Switching_to_another_layout 54 | # https://gist.github.com/jatcwang/ae3b7019f219b8cdc6798329108c9aee 55 | xkb_options ctrl:nocaps 56 | } 57 | 58 | output "*" { 59 | bg #282828 solid_color 60 | } 61 | 62 | output 'Acer Technologies VG270U P 0x9330E5FA' { 63 | mode 2560x1440 64 | pos 0 0 65 | } 66 | 67 | client.focused #432423 #432423 #dfd5cf 68 | 69 | focus_follows_mouse no 70 | default_border none 71 | hide_edge_borders --i3 both 72 | 73 | 74 | 75 | for_window [title=".*Sharing Indicator.*"] floating enable 76 | 77 | include ./keybinds.conf 78 | 79 | # the nix home manager module adds things like `dbus-update-activation-environment` & `sway-session` 80 | # see ~/.config/sway/config 81 | -------------------------------------------------------------------------------- /dot_config/wezterm/functions.lua: -------------------------------------------------------------------------------- 1 | local wezterm = require("wezterm") 2 | local io = require("io") 3 | local os = require("os") 4 | 5 | functions = {} 6 | 7 | -- https://wezfurlong.org/wezterm/config/lua/wezterm/on.html#custom-events 8 | functions.open_scrollback_in_editor = function(window, pane) 9 | -- Retrieve the text from the pane 10 | local text = pane:get_lines_as_text(pane:get_dimensions().scrollback_rows) 11 | 12 | -- Create a temporary file to pass to vim 13 | local name = os.tmpname() 14 | local f = io.open(name, "w+") 15 | f:write(text) 16 | f:flush() 17 | f:close() 18 | 19 | wezterm.background_child_process({ 20 | "emacsclient", 21 | name, 22 | }) 23 | 24 | -- Wait "enough" time for vim to read the file before we remove it. 25 | -- The window creation and process spawn are asynchronous wrt. running 26 | -- this script and are not awaitable, so we just pick a number. 27 | -- 28 | -- Note: We don't strictly need to remove this file, but it is nice 29 | -- to avoid cluttering up the temporary directory. 30 | wezterm.sleep_ms(1000) 31 | os.remove(name) 32 | end 33 | 34 | functions.copy_cmd = function(window, pane) 35 | local scrollback = pane:get_lines_as_text() 36 | string_after_prompt = string.match(scrollback, ".*❯ (.*)") 37 | cmd = string_after_prompt:gsub("\n", "") 38 | window:copy_to_clipboard(cmd) 39 | end 40 | 41 | -- https://wezfurlong.org/wezterm/config/lua/keyassignment/SwitchToWorkspace.html#prompting-for-the-workspace-name 42 | functions.new_workspace = wezterm.action.PromptInputLine({ 43 | description = wezterm.format({ 44 | { Attribute = { Intensity = "Bold" } }, 45 | { Foreground = { AnsiColor = "Fuchsia" } }, 46 | { Text = "Enter name for new workspace" }, 47 | }), 48 | action = wezterm.action_callback(function(window, pane, line) 49 | -- line will be `nil` if they hit escape without entering anything 50 | -- An empty string if they just hit enter 51 | -- Or the actual line of text they wrote 52 | if line then 53 | window:perform_action( 54 | wezterm.action.SwitchToWorkspace({ 55 | name = line, 56 | }), 57 | pane 58 | ) 59 | end 60 | end), 61 | }) 62 | 63 | return functions 64 | -------------------------------------------------------------------------------- /tf/main.tf: -------------------------------------------------------------------------------- 1 | module "mail" { 2 | source = "../../priv/tf/mail" 3 | } 4 | 5 | 6 | data "azuread_client_config" "current" {} 7 | 8 | resource "azuread_application" "mail_auth" { 9 | display_name = "mail-auth" 10 | owners = [data.azuread_client_config.current.object_id] 11 | sign_in_audience = "AzureADMultipleOrgs" 12 | 13 | web { 14 | redirect_uris = ["http://localhost:8080/"] 15 | } 16 | } 17 | 18 | resource "azuread_application_password" "mail_auth" { 19 | application_id = azuread_application.mail_auth.id 20 | } 21 | 22 | # resource "azuread_service_principal" "mail_auth" { 23 | # application_id = azuread_application.mail_auth.application_id 24 | # app_role_assignment_required = false 25 | # owners = [data.azuread_client_config.current.object_id] 26 | # } 27 | 28 | 29 | resource "sops_file" "secrets" { 30 | encryption_type = "age" 31 | content = yamlencode({ 32 | mail_auth = { 33 | client_id = azuread_application.mail_auth.client_id 34 | client_secret = azuread_application_password.mail_auth.value 35 | } 36 | backup_bucket = { 37 | bucket_name = b2_bucket.backup.bucket_name 38 | key_id = b2_application_key.autorestic_key.application_key_id 39 | key = b2_application_key.autorestic_key.application_key 40 | } 41 | backup_bon_bucket = { 42 | bucket_name = b2_bucket.backup_bon.bucket_name 43 | key_id = b2_application_key.autorestic_key_bon.application_key_id 44 | key = b2_application_key.autorestic_key_bon.application_key 45 | } 46 | }) 47 | filename = "secrets-output.yml" 48 | age = { 49 | key = "age1d2mr4ka46pms3j042gyshm3jjxth9jq4cje63nvfkzaz5g8e2q6qxrg588" 50 | } 51 | } 52 | 53 | 54 | import { 55 | to = module.mail.outlook_message_rule.noop_to 56 | id = "AgAABmYfvGU=" 57 | } 58 | 59 | import { 60 | to = module.mail.outlook_message_rule.ops_from 61 | id = "AgAABmYfvGQ=" 62 | } 63 | 64 | import { 65 | to = module.mail.outlook_message_rule.ops_to 66 | id = "AgAABmYfvGc=" 67 | } 68 | 69 | import { 70 | to = module.mail.outlook_message_rule.junk_from 71 | id = "AgAABmYfvGM=" 72 | } 73 | 74 | import { 75 | to = module.mail.outlook_message_rule.delete_subjects 76 | id = "AgAABmYfvGE=" 77 | } 78 | 79 | import { 80 | to = module.mail.outlook_message_rule.delete_to 81 | id = "AgAABmYfvGI=" 82 | } 83 | 84 | import { 85 | to = module.mail.outlook_message_rule.delete_from 86 | id = "AgAABmYfvGY=" 87 | } 88 | -------------------------------------------------------------------------------- /dot_config/mimeapps.list: -------------------------------------------------------------------------------- 1 | [Added Associations] 2 | application/epub+zip=calibre-ebook-viewer.desktop; 3 | application/msword=writer.desktop; 4 | application/vnd.openxmlformats-officedocument.presentationml.presentation=impress.desktop; 5 | application/vnd.openxmlformats-officedocument.wordprocessingml.document=writer.desktop;calibre-ebook-edit.desktop; 6 | application/x-apple-diskimage=nyxt.desktop; 7 | application/x-extension-htm=nyxt.desktop; 8 | application/x-extension-html=nyxt.desktop; 9 | application/x-extension-shtml=nyxt.desktop; 10 | application/x-extension-xht=nyxt.desktop; 11 | application/x-extension-xhtml=nyxt.desktop; 12 | application/xhtml+xml=nyxt.desktop; 13 | image/jpeg=nyxt.desktop; 14 | image/png=swayimg.desktop;gimp.desktop; 15 | text/csv=calc.desktop; 16 | text/plain=emacsclient.desktop; 17 | text/org=emacsclient.desktop; 18 | x-scheme-handler/ftp=nyxt.desktop; 19 | 20 | [Default Applications] 21 | application/mxf=mpv.desktop; 22 | application/ogg=mpv.desktop; 23 | application/pdf=org.pwmt.zathura.desktop; 24 | application/sdp=mpv.desktop; 25 | application/smil=mpv.desktop; 26 | application/streamingmedia=mpv.desktop; 27 | application/vnd.apple.mpegurl=mpv.desktop; 28 | application/vnd.ms-asf=mpv.desktop; 29 | application/vnd.openxmlformats-officedocument.wordprocessingml.document=writer.desktop; 30 | application/vnd.rn-realmedia=mpv.desktop; 31 | application/vnd.rn-realmedia-vbr=mpv.desktop; 32 | application/x-cue=mpv.desktop; 33 | application/x-extension-htm=nyxt.desktop; 34 | application/x-extension-html=nyxt.desktop; 35 | application/x-extension-m4a=mpv.desktop; 36 | application/x-extension-mp4=mpv.desktop; 37 | application/x-extension-shtml=nyxt.desktop; 38 | application/x-extension-xht=nyxt.desktop; 39 | application/x-extension-xhtml=nyxt.desktop; 40 | application/x-matroska=mpv.desktop; 41 | application/x-mpegurl=mpv.desktop; 42 | application/x-ogg=mpv.desktop; 43 | application/x-ogm=mpv.desktop; 44 | application/x-ogm-audio=mpv.desktop; 45 | application/x-ogm-video=mpv.desktop; 46 | application/x-shellscript=emacsclient.desktop; 47 | application/x-shorten=mpv.desktop; 48 | application/x-smil=mpv.desktop; 49 | application/x-streamingmedia=mpv.desktop; 50 | application/xhtml+xml=nyxt.desktop; 51 | audio/*=mpv.desktop; 52 | image/*=swayimg.desktop; 53 | inode/directory=wl-copy.desktop; 54 | text/english=emacsclient.desktop; 55 | text/html=emacsclient.desktop;firefox.desktop;nyxt.desktop; 56 | text/x-*=emacsclient.desktop; 57 | video/*=mpv.desktop; 58 | x-scheme-handler/ftp=nyxt.desktop; 59 | x-scheme-handler/http=firefox.desktop;nyxt.desktop;wl-copy.desktop; 60 | x-scheme-handler/https=firefox.desktop;streamlink.desktop;mpv.desktop;nyxt.desktop;wl-copy.desktop; 61 | x-scheme-handler/jetbrains=jetbrains-toolbox.desktop; 62 | x-scheme-handler/msteams=teams.desktop; 63 | x-scheme-handler/terminal=org.wezfurlong.wezterm.desktop; 64 | -------------------------------------------------------------------------------- /dot_config/sway/keybinds.conf.tmpl: -------------------------------------------------------------------------------- 1 | set $menu rofi -show drun -theme main-no-prompt 2 | set $menu-reload-cache rofi -drun-reload-desktop-cache -show drun 3 | set $menu-advanced rofi -show calc -modi calc -no-show-match -no-sort -theme spotlight-dark 4 | set $term 'wezterm start --always-new-process' 5 | 6 | 7 | bindsym $mod+Shift+q kill 8 | 9 | ### sway 10 | 11 | bindsym $mod+Return exec $term 12 | bindsym $mod+d exec $menu 13 | bindsym $mod+shift+d exec $menu-reload-cache 14 | 15 | bindsym $mod+left focus left 16 | bindsym $mod+down focus down 17 | bindsym $mod+up focus up 18 | bindsym $mod+right focus right 19 | 20 | # move focused window 21 | bindsym $mod+shift+left move left 22 | bindsym $mod+shift+down move down 23 | bindsym $mod+shift+up move up 24 | bindsym $mod+shift+right move right 25 | 26 | 27 | bindsym $mod+h split h 28 | bindsym $mod+v split v 29 | bindsym $mod+f fullscreen toggle 30 | 31 | 32 | bindsym $mod+s layout stacking 33 | bindsym $mod+w layout tabbed 34 | bindsym $mod+e layout toggle split 35 | 36 | # toggle tiling / floating 37 | bindsym $mod+Shift+space floating toggle 38 | 39 | # change focus between tiling / floating windows 40 | bindsym $mod+space focus mode_toggle 41 | 42 | # focus the parent container 43 | bindsym $mod+a focus parent 44 | 45 | bindsym $mod+1 workspace 1 46 | bindsym $mod+2 workspace 2 47 | bindsym $mod+3 workspace 3 48 | bindsym $mod+4 workspace 4 49 | bindsym $mod+5 workspace 5 50 | bindsym $mod+6 workspace 6 51 | bindsym $mod+7 workspace 7 52 | bindsym $mod+8 workspace 8 53 | bindsym $mod+9 workspace 9 54 | bindsym $mod+0 workspace 10 55 | 56 | bindsym $mod+Shift+1 move container to workspace 1 57 | bindsym $mod+Shift+2 move container to workspace 2 58 | bindsym $mod+Shift+3 move container to workspace 3 59 | bindsym $mod+Shift+4 move container to workspace 4 60 | bindsym $mod+Shift+5 move container to workspace 5 61 | bindsym $mod+Shift+6 move container to workspace 6 62 | bindsym $mod+Shift+7 move container to workspace 7 63 | bindsym $mod+Shift+8 move container to workspace 8 64 | bindsym $mod+Shift+9 move container to workspace 9 65 | bindsym $mod+Shift+0 move container to workspace 10 66 | 67 | bindsym $mod+Control+Shift+left move workspace to output left 68 | bindsym $mod+Control+Shift+down move workspace to output down 69 | bindsym $mod+Control+Shift+up move workspace to output up 70 | bindsym $mod+Control+Shift+right move workspace to output right 71 | 72 | bindsym $mod+Shift+c reload 73 | bindsym $mod+Shift+r restart 74 | bindsym $mod+Control+Shift+e exec "swaynag -t warning -m 'Exit?' -b 'Mais oui!' 'swaymsg exit'" 75 | 76 | 77 | 78 | ### volume 79 | bindsym --locked $mod+F1 exec "wpctl-wob toggle-mute" 80 | bindsym $mod+F2 exec "wpctl-wob decrease-volume" 81 | bindsym $mod+F2+Control exec "pavucontrol" 82 | bindsym $mod+F3 exec "wpctl-wob increase-volume" 83 | 84 | ### mute mic 85 | bindsym $mod+F4 exec "wpctl-wob toggle-mic-mute" 86 | 87 | ### light 88 | 89 | # for external monitor: `modprobe ddcci; brightnessctl -d ddcci0 set 5%-` 90 | bindsym $mod+F5 exec "brightnessctl -m set 5%- | tuc -e ',|%' -f 4 > $WOBSOCK" 91 | bindsym $mod+F6 exec "brightnessctl -m set +5% | tuc -e ',|%' -f 4 > $WOBSOCK" 92 | bindsym $mod+F5+Control exec "swaymsg 'output * power off' && brightnessctl -m set 0%" 93 | bindsym $mod+F6+Control exec "swaymsg 'output * power on' && brightnessctl -m set 100%" 94 | 95 | bindsym $mod+F7 exec "light -s sysfs/leds/tpacpi::kbd_backlight -S 0" 96 | bindsym $mod+F8 exec "light -s sysfs/leds/tpacpi::kbd_backlight -S 100" 97 | 98 | 99 | 100 | ### utils 101 | 102 | bindsym $mod+Control+e exec "wl-paste | xargs handlr open" 103 | bindsym --release $mod+Sys_Req exec grim -g "$(slurp -o -r -c '#ff0000ff'; sleep 2)" - | satty --filename - 104 | bindsym --release $mod+Print exec grim -g "$(slurp -o -r -c '#ff0000ff'; sleep 2)" - | satty --filename - 105 | bindsym $mod+p exec "tessen" 106 | bindsym $mod+Control+p exec "wl-copy {{ .mail.moi.username }}" 107 | 108 | bindsym Control+Alt+z exec "cliphist list | rofi -dmenu -display-columns 2 | cliphist decode | wl-copy" 109 | 110 | bindsym $mod+Prior exec "esplanade" 111 | 112 | bindsym --locked $mod+End input type:keyboard xkb_switch_layout next 113 | -------------------------------------------------------------------------------- /dot_config/nyxt/init.org: -------------------------------------------------------------------------------- 1 | # -*- eval: (babel-tangle-mode 1) -*- 2 | #+PROPERTY: header-args :results silent :tangle "~/.config/nyxt/config.lisp" 3 | * keybindings 4 | ** my-keymap 5 | #+begin_src lisp 6 | (define-configuration buffer 7 | ((default-modes 8 | (pushnew 'nyxt/emacs-mode:emacs-mode %slot-value%)))) 9 | 10 | (defvar *my-keymap* (make-keymap "my-map")) 11 | 12 | (define-key *my-keymap* 13 | "M-d" 'switch-buffer 14 | "M-q" 'delete-buffer 15 | "C-q" 'delete-current-buffer 16 | "C-M-q" 'reopen-buffer 17 | "C-ö" 'switch-buffer-previous 18 | "C-#" 'switch-buffer-next 19 | "M-ö" 'history-backwards 20 | "M-#" 'history-forwards 21 | "C-M-ö" 'history-all-query 22 | "C-M-#" 'jump-to-heading 23 | "C-M-d" 'set-url-new-buffer 24 | "C-d" 'set-url 25 | "C-x" 'visual-mode 26 | "C-l l" 'copy-url 27 | 28 | "M-return" 'follow-hint 29 | 30 | "C-e" 'set-url-from-bookmark 31 | "C-M-e e" 'bookmark-current-url 32 | 33 | "M-s" 'query-selection-in-search-engine 34 | "C-s" 'search-buffer 35 | "C-M-s" 'remove-search-hints 36 | ) 37 | 38 | (define-mode my-mode () 39 | "Dummy mode for the custom key bindings in `*my-keymap*'." 40 | ( 41 | (visible-in-status-p nil) 42 | (keyscheme-map (keymaps:make-keyscheme-map 43 | nyxt/keyscheme:cua *my-keymap* 44 | nyxt/keyscheme:emacs *my-keymap* 45 | nyxt/keyscheme:vi-normal *my-keymap*)))) 46 | 47 | (define-configuration web-buffer 48 | "Enable this mode by default." 49 | ((default-modes (pushnew 'my-mode %slot-value%)))) 50 | 51 | #+end_src 52 | 53 | ** my-prompt-keymap 54 | #+begin_src lisp 55 | (define-configuration buffer 56 | ((default-modes 57 | (pushnew 'nyxt/emacs-mode:emacs-mode %slot-value%)))) 58 | 59 | (defvar *my-prompt-keymap* (make-keymap "my-prompt-map")) 60 | 61 | (define-key *my-prompt-keymap* 62 | "M-ä" 'select-next 63 | "M-ü" 'select-previous 64 | "C-y" 'paste 65 | "M-w" 'copy-selection 66 | ) 67 | 68 | (define-mode my-prompt-mode () 69 | "Dummy mode for the custom key bindings in `*my-prompt-keymap*'." 70 | ( 71 | (visible-in-status-p nil) 72 | (keyscheme-map (keymaps:make-keyscheme-map 73 | nyxt/keyscheme:cua *my-prompt-keymap* 74 | nyxt/keyscheme:emacs *my-prompt-keymap* 75 | nyxt/keyscheme:vi-normal *my-prompt-keymap*)))) 76 | 77 | 78 | (define-configuration prompt-buffer 79 | "Enable this mode by default." 80 | ((default-modes (pushnew 'my-prompt-mode %slot-value%)))) 81 | 82 | #+end_src 83 | 84 | * Keybindings-old 85 | #+begin_src lisp :tangle no 86 | 87 | (define-configuration buffer 88 | ((search-engines (list 89 | (make-instance 'search-engine 90 | :shortcut "wiki" 91 | :search-url "https://en.wikipedia.org/w/index.php?search=~a" 92 | :fallback-url "https://en.wikipedia.org/") 93 | (make-instance 'search-engine 94 | :shortcut "gh" 95 | :fallback-url "https://github.com" 96 | :search-url "https://github.com/search?q=~a") 97 | (make-instance 'search-engine 98 | :shortcut "t" 99 | :fallback-url "https://translate.google.com/?hl=de&tab=TT&sl=de&tl=en&op=translate" 100 | :search-url "https://translate.google.com/?hl=de&sl=de&tl=en&text=~a%0A&op=translate") 101 | (make-instance 'search-engine 102 | :shortcut "g" 103 | :fallback-url "https://google.com" 104 | :search-url "https://google.com/search?q=~a"))))) 105 | 106 | 107 | (define-configuration buffer 108 | ((override-map (let ((map (make-keymap "override-map"))) 109 | (define-key map 110 | "M-x" 'execute-command))))) 111 | #+end_src 112 | * Commands 113 | #+begin_src lisp :tangle no 114 | (define-command play-video-in-current-page (&optional (buffer (current-buffer))) 115 | "Play video in the currently open buffer." 116 | (uiop:run-program (list "mpv" (render-url (url buffer))))) 117 | #+end_src 118 | * extensions 119 | #+begin_src lisp :tangle no 120 | (asdf:load-system :demeter) 121 | ;; (demeter:import-feeds-from-opml "/home/croissong/.config/demeter/feeds.opml") 122 | #+end_src 123 | -------------------------------------------------------------------------------- /dot_davmail.properties.tmpl: -------------------------------------------------------------------------------- 1 | davmail.mode=O365Modern 2 | davmail.logFilePath={{ env "XDG_STATE_HOME" }}/davmail.log 3 | 4 | log4j.logger.davmail=WARN 5 | log4j.logger.httpclient.wire=WARN 6 | log4j.logger.org.apache.commons.httpclient=WARN 7 | log4j.rootLogger=WARN 8 | 9 | davmail.disableGuiNotifications=true 10 | # disable tray icon color switch on activity 11 | davmail.disableTrayActivitySwitch=true 12 | # disable startup balloon notifications 13 | davmail.showStartupBanner=false 14 | 15 | 16 | 17 | 18 | ############################################################# 19 | # Basic settings 20 | 21 | # Server or workstation mode 22 | davmail.server=true 23 | # connection mode auto, EWS or WebDav 24 | # davmail.mode=EWS 25 | # base Exchange OWA or EWS url 26 | davmail.url=https://outlook.office365.com/EWS/Exchange.asmx 27 | 28 | # Listener ports 29 | davmail.caldavPort=1080 30 | davmail.imapPort=1143 31 | davmail.ldapPort=1389 32 | davmail.popPort=1110 33 | davmail.smtpPort=1025 34 | 35 | ############################################################# 36 | # Network settings 37 | 38 | # Network proxy settings 39 | davmail.enableProxy=false 40 | davmail.useSystemProxies=false 41 | davmail.proxyHost= 42 | davmail.proxyPort= 43 | davmail.proxyUser= 44 | davmail.proxyPassword= 45 | 46 | # proxy exclude list 47 | davmail.noProxyFor= 48 | 49 | # allow remote connection to DavMail 50 | davmail.allowRemote=true 51 | # bind server sockets to a specific address 52 | davmail.bindAddress= 53 | # client connection timeout in seconds - default 300, 0 to disable 54 | davmail.clientSoTimeout= 55 | 56 | # DavMail listeners SSL configuration 57 | davmail.ssl.keystoreType= 58 | davmail.ssl.keystoreFile= 59 | davmail.ssl.keystorePass= 60 | davmail.ssl.keyPass= 61 | 62 | # Accept specified certificate even if invalid according to trust store 63 | davmail.server.certificate.hash= 64 | 65 | # disable SSL for specified listeners 66 | davmail.ssl.nosecurecaldav=false 67 | davmail.ssl.nosecureimap=false 68 | davmail.ssl.nosecureldap=false 69 | davmail.ssl.nosecurepop=false 70 | davmail.ssl.nosecuresmtp=false 71 | 72 | # disable update check 73 | davmail.disableUpdateCheck=true 74 | 75 | # Send keepalive character during large folder and messages download 76 | davmail.enableKeepalive=false 77 | # Message count limit on folder retrieval 78 | davmail.folderSizeLimit=0 79 | # Default windows domain for NTLM and basic authentication 80 | davmail.defaultDomain= 81 | 82 | ############################################################# 83 | # Caldav settings 84 | 85 | # override default alarm sound 86 | davmail.caldavAlarmSound= 87 | # retrieve calendar events not older than 90 days 88 | davmail.caldavPastDelay=90 89 | # EWS only: enable server managed meeting notifications 90 | davmail.caldavAutoSchedule=true 91 | # WebDav only: force event update to trigger ActiveSync clients update 92 | davmail.forceActiveSyncUpdate=false 93 | 94 | ############################################################# 95 | # IMAP settings 96 | 97 | # Delete messages immediately on IMAP STORE \Deleted flag 98 | davmail.imapAutoExpunge=true 99 | # To enable IDLE support, set a maximum client polling delay in minutes 100 | # Clients using IDLE should poll more frequently than this delay 101 | davmail.imapIdleDelay= 102 | # Always reply to IMAP RFC822.SIZE requests with Exchange approximate message size for performance reasons 103 | davmail.imapAlwaysApproxMsgSize= 104 | 105 | ############################################################# 106 | # POP settings 107 | 108 | # Delete messages on server after 30 days 109 | davmail.keepDelay=30 110 | # Delete messages in server sent folder after 90 days 111 | davmail.sentKeepDelay=90 112 | # Mark retrieved messages read on server 113 | davmail.popMarkReadOnRetr=false 114 | 115 | ############################################################# 116 | # SMTP settings 117 | 118 | # let Exchange save a copy of sent messages in Sent folder 119 | davmail.smtpSaveInSent=true 120 | 121 | ############################################################# 122 | # Loggings settings 123 | 124 | # log file path, leave empty for default path 125 | # davmail.logFilePath=/var/log/davmail.log 126 | # maximum log file size, use Log4J syntax, set to 0 to use an external rotation mechanism, e.g. logrotate 127 | davmail.logFileSize=1MB 128 | # log levels 129 | # log4j.logger.davmail=WARN 130 | # log4j.logger.httpclient.wire=WARN 131 | # log4j.logger.org.apache.commons.httpclient=WARN 132 | # log4j.rootLogger=WARN 133 | 134 | ############################################################# 135 | # Workstation only settings 136 | 137 | # smartcard access settings 138 | davmail.ssl.pkcs11Config= 139 | davmail.ssl.pkcs11Library= 140 | 141 | # SSL settings for mutual authentication 142 | davmail.ssl.clientKeystoreType= 143 | davmail.ssl.clientKeystoreFile= 144 | davmail.ssl.clientKeystorePass= 145 | 146 | # disable all balloon notifications 147 | # davmail.disableGuiNotifications=false 148 | # disable tray icon color switch on activity 149 | # davmail.disableTrayActivitySwitch=false 150 | # disable startup balloon notifications 151 | # davmail.showStartupBanner=true 152 | 153 | # enable transparent client Kerberos authentication 154 | davmail.enableKerberos=false 155 | -------------------------------------------------------------------------------- /dot_config/wezterm/keys.lua: -------------------------------------------------------------------------------- 1 | local wezterm = require("wezterm") 2 | local act = wezterm.action 3 | 4 | local functions = require("functions") 5 | 6 | function extend(t1, t2) 7 | return table.move(t2, 1, #t2, #t1 + 1, t1) 8 | end 9 | 10 | local menus = { 11 | { 12 | key = "q", 13 | mods = "CTRL", 14 | action = act.ShowLauncherArgs({ flags = "FUZZY|LAUNCH_MENU_ITEMS|WORKSPACES" }), 15 | }, 16 | { 17 | key = "q", 18 | mods = "ALT", 19 | action = act.ShowLauncherArgs({ flags = "FUZZY|KEY_ASSIGNMENTS|DOMAINS|COMMANDS" }), 20 | }, 21 | { 22 | key = "w", 23 | mods = "CTRL|ALT", 24 | action = functions.new_workspace, 25 | }, 26 | { 27 | key = "`", 28 | mods = "ALT", 29 | action = act.ShowTabNavigator, 30 | }, 31 | { 32 | key = "p", 33 | mods = "CTRL", 34 | action = act.ActivateCommandPalette, 35 | }, 36 | } 37 | 38 | local panes = { 39 | { 40 | key = "2", 41 | mods = "CTRL", 42 | action = act.SplitHorizontal({ domain = "CurrentPaneDomain" }), 43 | }, 44 | { 45 | key = "3", 46 | mods = "CTRL", 47 | action = act.SplitVertical({ domain = "CurrentPaneDomain" }), 48 | }, 49 | { 50 | key = "q", 51 | mods = "CTRL|ALT", 52 | action = act.CloseCurrentPane({ confirm = true }), 53 | }, 54 | { 55 | key = "RightArrow", 56 | mods = "CTRL|ALT", 57 | action = act.ActivatePaneDirection("Right"), 58 | }, 59 | { 60 | key = "LeftArrow", 61 | mods = "CTRL|ALT", 62 | action = act.ActivatePaneDirection("Left"), 63 | }, 64 | { 65 | key = "UpArrow", 66 | mods = "CTRL|ALT", 67 | action = act.ActivatePaneDirection("Up"), 68 | }, 69 | { 70 | key = "DownArrow", 71 | mods = "CTRL|ALT", 72 | action = act.ActivatePaneDirection("Down"), 73 | }, 74 | } 75 | 76 | local misc = { 77 | { 78 | key = "r", 79 | mods = "CTRL|ALT", 80 | action = "ReloadConfiguration", 81 | }, 82 | { 83 | key = "+", 84 | mods = "CTRL", 85 | action = "IncreaseFontSize", 86 | }, 87 | { 88 | -- key = "-" not working for some reason :( 89 | key = "raw:61", 90 | mods = "CTRL", 91 | action = "DecreaseFontSize", 92 | }, 93 | 94 | { 95 | -- unbind because key combination already used for fish undo binding 96 | key = "p", 97 | mods = "CTRL", 98 | action = wezterm.action.DisableDefaultAssignment, 99 | }, 100 | } 101 | 102 | local workspaces = { 103 | key = "w", 104 | mods = "CTRL|SHIFT", 105 | action = act.ShowLauncherArgs({ 106 | flags = "WORKSPACES", 107 | }), 108 | } 109 | 110 | for i = 0, 9 do 111 | table.insert(workspaces, { 112 | key = tostring(i), 113 | mods = "CTRL|ALT", 114 | action = act.SwitchToWorkspace({ 115 | name = tostring(i), 116 | }), 117 | }) 118 | end 119 | 120 | local keys = { 121 | { 122 | key = "Space", 123 | mods = "CTRL", 124 | -- https://github.com/wez/wezterm/issues/4608 125 | action = wezterm.action_callback(function(window, pane) 126 | window:perform_action(act.ActivateCopyMode, pane) 127 | window:perform_action(act.CopyMode("ClearPattern"), pane) 128 | end), 129 | }, 130 | { 131 | key = "x", 132 | mods = "CTRL", 133 | action = "QuickSelect", 134 | }, 135 | { 136 | key = "c", 137 | mods = "CTRL|ALT", 138 | action = "Nop", 139 | }, 140 | { 141 | key = "Enter", 142 | mods = "ALT", 143 | action = "DisableDefaultAssignment", 144 | }, 145 | { 146 | key = "w", 147 | mods = "ALT", 148 | action = act.CopyTo("Clipboard"), 149 | }, 150 | { 151 | key = "z", 152 | mods = "CTRL", 153 | action = act.PasteFrom("Clipboard"), 154 | }, 155 | { 156 | key = "DownArrow", 157 | mods = "CTRL", 158 | action = act.ScrollByPage(0.5), 159 | }, 160 | { 161 | key = "UpArrow", 162 | mods = "CTRL", 163 | action = act.ScrollByPage(-0.5), 164 | }, 165 | { 166 | key = "s", 167 | mods = "CTRL", 168 | action = act.Search({ CaseInSensitiveString = "" }), 169 | }, 170 | { 171 | key = "e", 172 | mods = "CTRL|ALT", 173 | action = wezterm.action_callback(functions.open_scrollback_in_editor), 174 | }, 175 | { 176 | key = "c", 177 | mods = "ALT", 178 | action = wezterm.action_callback(functions.copy_cmd), 179 | }, 180 | } 181 | 182 | for i = 1, 8 do 183 | -- ALT + number to activate that tab 184 | table.insert(keys, { 185 | key = tostring(i), 186 | mods = "ALT", 187 | action = act.ActivateTab(i - 1), 188 | }) 189 | end 190 | 191 | -- search mode 192 | 193 | search_mode = wezterm.gui.default_key_tables().search_mode 194 | 195 | search_mode_keys = { 196 | { 197 | key = "w", 198 | mods = "CTRL", 199 | action = act.CopyMode("ClearPattern"), 200 | }, 201 | } 202 | 203 | extend(search_mode, search_mode_keys) 204 | 205 | -- copy mode 206 | 207 | copy_mode = wezterm.gui.default_key_tables().copy_mode 208 | 209 | copy_mode_keys = { 210 | { 211 | key = "a", 212 | mods = "CTRL", 213 | action = act.CopyMode("MoveToStartOfLineContent"), 214 | }, 215 | { 216 | key = "e", 217 | mods = "CTRL", 218 | action = act.CopyMode("MoveToEndOfLineContent"), 219 | }, 220 | { 221 | key = "LeftArrow", 222 | mods = "CTRL", 223 | action = act.CopyMode("MoveBackwardWord"), 224 | }, 225 | { 226 | key = "RightArrow", 227 | mods = "CTRL", 228 | action = act.CopyMode("MoveForwardWord"), 229 | }, 230 | { 231 | key = "Space", 232 | action = act.CopyMode({ SetSelectionMode = "Cell" }), 233 | }, 234 | { 235 | key = "Space", 236 | mods = "CTRL", 237 | action = act.CopyMode({ SetSelectionMode = "Block" }), 238 | }, 239 | } 240 | 241 | extend(copy_mode, copy_mode_keys) 242 | 243 | key_tables = { 244 | search_mode = search_mode, 245 | copy_mode = copy_mode, 246 | } 247 | 248 | extend(keys, menus) 249 | extend(keys, panes) 250 | extend(keys, misc) 251 | extend(keys, workspaces) 252 | 253 | return function() 254 | return keys, key_tables 255 | end 256 | -------------------------------------------------------------------------------- /dot_config/broot/conf.hjson: -------------------------------------------------------------------------------- 1 | ############################################################### 2 | # This configuration file lets you 3 | # - define new commands 4 | # - change the shortcut or triggering keys of built-in verbs 5 | # - change the colors 6 | # - set default values for flags 7 | # - set special behaviors on specific paths 8 | # - and more... 9 | # 10 | # Configuration documentation is available at 11 | # https://dystroy.org/broot 12 | # 13 | # This file's format is Hjson ( https://hjson.github.io/ ). Some 14 | # properties are commented out. To enable them, remove the `#`. 15 | # 16 | ############################################################### 17 | { 18 | 19 | ############################################################### 20 | # Default flags 21 | # You can set up flags you want broot to start with by 22 | # default, for example `default_flags="ihp"` if you usually want 23 | # to see hidden and gitignored files and the permissions (then 24 | # if you don't want the hidden files you can launch `br -H`) 25 | # A popular flag is the `g` one which displays git related info. 26 | # 27 | default_flags: giphd 28 | 29 | ############################################################### 30 | # Date/Time format 31 | # If you want to change the format for date/time, uncomment the 32 | # following line and change it according to 33 | # https://docs.rs/chrono/0.4.11/chrono/format/strftime/index.html 34 | # 35 | # date_time_format: %Y/%m/%d %R 36 | 37 | ############################################################### 38 | # "vim mode" 39 | # 40 | # 41 | # modal: true 42 | 43 | ############################################################### 44 | # Whether to mark the selected line with a triangle 45 | # 46 | # show_selection_mark: true 47 | 48 | ############################################################### 49 | # Column order 50 | # cols_order, if specified, must be a permutation of the following 51 | # array. You should keep the name at the end as it has a variable 52 | # length. 53 | # 54 | cols_order: [ 55 | mark 56 | git 57 | size 58 | permission 59 | date 60 | count 61 | branch 62 | name 63 | ] 64 | 65 | ############################################################### 66 | # Verbs and shortcuts 67 | # You can define your own commands which would be applied to 68 | # the selection. 69 | # You'll also find below verbs that you can customize or enable. 70 | verbs: [ 71 | 72 | # Exemple 1: launching `tail -n` on the selected file (leaving broot) 73 | # { 74 | # name: tail_lines 75 | # invocation: tl {lines_count} 76 | # execution: "tail -f -n {lines_count} {file}" 77 | # } 78 | 79 | # Exemple 2: creating a new file without leaving broot 80 | # { 81 | # name: touch 82 | # invocation: touch {new_file} 83 | # execution: "touch {directory}/{new_file}" 84 | # leave_broot: false 85 | # } 86 | 87 | # A standard recommended command for editing files, that you 88 | # can customize. 89 | # If $EDITOR isn't set on your computer, you should either set it using 90 | # something similar to 91 | # export EDITOR=nvim 92 | # or just replace it with your editor of choice in the 'execution' 93 | # pattern. 94 | # If your editor is able to open a file on a specific line, use {line} 95 | # so that you may jump directly at the right line from a preview. 96 | # Example: 97 | # execution: nvim +{line} {file} 98 | { 99 | invocation: edit 100 | key: F2 101 | shortcut: e 102 | execution: "$EDITOR +{line} {file}" 103 | leave_broot: false 104 | } 105 | 106 | # A convenient shortcut to create new text files in 107 | # the current directory or below 108 | { 109 | invocation: create {subpath} 110 | execution: "$EDITOR {directory}/{subpath}" 111 | leave_broot: false 112 | } 113 | 114 | { 115 | invocation: git_diff 116 | shortcut: gd 117 | leave_broot: false 118 | execution: "git difftool -y {file}" 119 | } 120 | 121 | # This verb lets you launch a terminal on ctrl-T 122 | # (on exit you'll be back in broot) 123 | { 124 | invocation: terminal 125 | key: ctrl-t 126 | execution: "$SHELL" 127 | set_working_dir: true 128 | leave_broot: false 129 | } 130 | 131 | # Here's an example of a shorctut bringing you to your home directory 132 | # { 133 | # invocation: home 134 | # key: ctrl-home 135 | # execution: ":focus ~" 136 | # } 137 | 138 | # A popular set of shorctuts for going up and down: 139 | # 140 | # { 141 | # key: ctrl-k 142 | # execution: ":line_up" 143 | # } 144 | # { 145 | # key: ctrl-j 146 | # execution: ":line_down" 147 | # } 148 | # { 149 | # key: ctrl-u 150 | # execution: ":page_up" 151 | # } 152 | # { 153 | # key: ctrl-d 154 | # execution: ":page_down" 155 | # } 156 | 157 | # If you develop using git, you might like to often switch 158 | # to the git status filter: 159 | # { 160 | # key: ctrl-g 161 | # execution: ":toggle_git_status" 162 | # } 163 | 164 | # You can reproduce the bindings of Norton Commander 165 | # on copying or moving to the other panel: 166 | # { 167 | # key: F5 168 | # external: "cp -r {file} {other-panel-directory}" 169 | # leave_broot: false 170 | # } 171 | # { 172 | # key: F6 173 | # external: "mv {file} {other-panel-directory}" 174 | # leave_broot: false 175 | # } 176 | ] 177 | 178 | ############################################################### 179 | # Skin 180 | # If you want to change the colors of broot, 181 | # uncomment the following bloc and start messing 182 | # with the various values. 183 | # A skin entry value is made of two parts separated with a '/': 184 | # The first one is the skin for the active panel. 185 | # The second one, optional, is the skin for non active panels. 186 | # You may find explanations and other skins on 187 | # https://dystroy.org/broot/skins 188 | ############################################################### 189 | # 190 | # skin: { 191 | # default: gray(23) none / gray(20) none 192 | # tree: ansi(94) None / gray(3) None 193 | # file: gray(20) None / gray(15) None 194 | # directory: ansi(208) None Bold / ansi(172) None bold 195 | # exe: Cyan None 196 | # link: Magenta None 197 | # pruning: gray(12) None Italic 198 | # perm__: gray(5) None 199 | # perm_r: ansi(94) None 200 | # perm_w: ansi(132) None 201 | # perm_x: ansi(65) None 202 | # owner: ansi(138) None 203 | # group: ansi(131) None 204 | # count: ansi(136) gray(3) 205 | # dates: ansi(66) None 206 | # sparse: ansi(214) None 207 | # content_extract: ansi(29) None 208 | # content_match: ansi(34) None 209 | # git_branch: ansi(229) None 210 | # git_insertions: ansi(28) None 211 | # git_deletions: ansi(160) None 212 | # git_status_current: gray(5) None 213 | # git_status_modified: ansi(28) None 214 | # git_status_new: ansi(94) None Bold 215 | # git_status_ignored: gray(17) None 216 | # git_status_conflicted: ansi(88) None 217 | # git_status_other: ansi(88) None 218 | # selected_line: None gray(5) / None gray(4) 219 | # char_match: Yellow None 220 | # file_error: Red None 221 | # flag_label: gray(15) None 222 | # flag_value: ansi(208) None Bold 223 | # input: White None / gray(15) gray(2) 224 | # status_error: gray(22) ansi(124) 225 | # status_job: ansi(220) gray(5) 226 | # status_normal: gray(20) gray(3) / gray(2) gray(2) 227 | # status_italic: ansi(208) gray(3) / gray(2) gray(2) 228 | # status_bold: ansi(208) gray(3) Bold / gray(2) gray(2) 229 | # status_code: ansi(229) gray(3) / gray(2) gray(2) 230 | # status_ellipsis: gray(19) gray(1) / gray(2) gray(2) 231 | # purpose_normal: gray(20) gray(2) 232 | # purpose_italic: ansi(178) gray(2) 233 | # purpose_bold: ansi(178) gray(2) Bold 234 | # purpose_ellipsis: gray(20) gray(2) 235 | # scrollbar_track: gray(7) None / gray(4) None 236 | # scrollbar_thumb: gray(22) None / gray(14) None 237 | # help_paragraph: gray(20) None 238 | # help_bold: ansi(208) None Bold 239 | # help_italic: ansi(166) None 240 | # help_code: gray(21) gray(3) 241 | # help_headers: ansi(208) None 242 | # help_table_border: ansi(239) None 243 | # preview: gray(20) gray(1) / gray(18) gray(2) 244 | # preview_line_number: gray(12) gray(3) 245 | # preview_match: None ansi(29) 246 | # hex_null: gray(11) None 247 | # hex_ascii_graphic: gray(18) None 248 | # hex_ascii_whitespace: ansi(143) None 249 | # hex_ascii_other: ansi(215) None 250 | # hex_non_ascii: ansi(167) None 251 | # } 252 | 253 | 254 | ############################################################### 255 | # File Extension Colors 256 | # 257 | # uncomment and modify the next section if you want to color 258 | # file name depending on their extension 259 | # 260 | # ext_colors: { 261 | # png: rgb(255, 128, 75) 262 | # rs: yellow 263 | # } 264 | 265 | 266 | ############################################################### 267 | # Max Panels Count 268 | # 269 | # Change this if you sometimes want to have more than 2 panels 270 | # open 271 | # max_panels_count: 2 272 | } 273 | -------------------------------------------------------------------------------- /dot_torrc: -------------------------------------------------------------------------------- 1 | ## Configuration file for a typical Tor user 2 | ## Last updated 28 February 2019 for Tor 0.3.5.1-alpha. 3 | ## (may or may not work for much older or much newer versions of Tor.) 4 | ## 5 | ## Lines that begin with "## " try to explain what's going on. Lines 6 | ## that begin with just "#" are disabled commands: you can enable them 7 | ## by removing the "#" symbol. 8 | ## 9 | ## See 'man tor', or https://www.torproject.org/docs/tor-manual.html, 10 | ## for more options you can use in this file. 11 | ## 12 | ## Tor will look for this file in various places based on your platform: 13 | ## https://www.torproject.org/docs/faq#torrc 14 | User tor 15 | 16 | ## Tor opens a SOCKS proxy on port 9050 by default -- even if you don't 17 | ## configure one below. Set "SOCKSPort 0" if you plan to run Tor only 18 | ## as a relay, and not make any local application connections yourself. 19 | #SOCKSPort 9050 # Default: Bind to localhost:9050 for local connections. 20 | #SOCKSPort 192.168.0.1:9100 # Bind to this address:port too. 21 | 22 | ## Entry policies to allow/deny SOCKS requests based on IP address. 23 | ## First entry that matches wins. If no SOCKSPolicy is set, we accept 24 | ## all (and only) requests that reach a SOCKSPort. Untrusted users who 25 | ## can access your SOCKSPort may be able to learn about the connections 26 | ## you make. 27 | #SOCKSPolicy accept 192.168.0.0/16 28 | #SOCKSPolicy accept6 FC00::/7 29 | #SOCKSPolicy reject * 30 | 31 | ## Logs go to stdout at level "notice" unless redirected by something 32 | ## else, like one of the below lines. You can have as many Log lines as 33 | ## you want. 34 | ## 35 | ## We advise using "notice" in most cases, since anything more verbose 36 | ## may provide sensitive information to an attacker who obtains the logs. 37 | ## 38 | ## Send all messages of level 'notice' or higher to /var/log/tor/notices.log 39 | #Log notice file /var/log/tor/notices.log 40 | ## Send every possible message to /var/log/tor/debug.log 41 | #Log debug file /var/log/tor/debug.log 42 | ## Use the system log instead of Tor's logfiles 43 | Log notice syslog 44 | ## To send all messages to stderr: 45 | #Log debug stderr 46 | 47 | ## Uncomment this to start the process in the background... or use 48 | ## --runasdaemon 1 on the command line. This is ignored on Windows; 49 | ## see the FAQ entry if you want Tor to run as an NT service. 50 | #RunAsDaemon 1 51 | 52 | ## The directory for keeping all the keys/etc. By default, we store 53 | ## things in $HOME/.tor on Unix, and in Application Data\tor on Windows. 54 | DataDirectory /var/lib/tor 55 | 56 | ## The port on which Tor will listen for local connections from Tor 57 | ## controller applications, as documented in control-spec.txt. 58 | #ControlPort 9051 59 | ## If you enable the controlport, be sure to enable one of these 60 | ## authentication methods, to prevent attackers from accessing it. 61 | #HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C 62 | #CookieAuthentication 1 63 | 64 | ############### This section is just for location-hidden services ### 65 | 66 | ## Once you have configured a hidden service, you can look at the 67 | ## contents of the file ".../hidden_service/hostname" for the address 68 | ## to tell people. 69 | ## 70 | ## HiddenServicePort x y:z says to redirect requests on port x to the 71 | ## address y:z. 72 | 73 | #HiddenServiceDir /var/lib/tor/hidden_service/ 74 | #HiddenServicePort 80 127.0.0.1:80 75 | 76 | #HiddenServiceDir /var/lib/tor/other_hidden_service/ 77 | #HiddenServicePort 80 127.0.0.1:80 78 | #HiddenServicePort 22 127.0.0.1:22 79 | 80 | ################ This section is just for relays ##################### 81 | # 82 | ## See https://www.torproject.org/docs/tor-doc-relay for details. 83 | 84 | ## Required: what port to advertise for incoming Tor connections. 85 | #ORPort 9001 86 | ## If you want to listen on a port other than the one advertised in 87 | ## ORPort (e.g. to advertise 443 but bind to 9090), you can do it as 88 | ## follows. You'll need to do ipchains or other port forwarding 89 | ## yourself to make this work. 90 | #ORPort 443 NoListen 91 | #ORPort 127.0.0.1:9090 NoAdvertise 92 | ## If you want to listen on IPv6 your numeric address must be explicitly 93 | ## between square brackets as follows. You must also listen on IPv4. 94 | #ORPort [2001:DB8::1]:9050 95 | 96 | ## The IP address or full DNS name for incoming connections to your 97 | ## relay. Leave commented out and Tor will guess. 98 | #Address noname.example.com 99 | 100 | ## If you have multiple network interfaces, you can specify one for 101 | ## outgoing traffic to use. 102 | ## OutboundBindAddressExit will be used for all exit traffic, while 103 | ## OutboundBindAddressOR will be used for all OR and Dir connections 104 | ## (DNS connections ignore OutboundBindAddress). 105 | ## If you do not wish to differentiate, use OutboundBindAddress to 106 | ## specify the same address for both in a single line. 107 | #OutboundBindAddressExit 10.0.0.4 108 | #OutboundBindAddressOR 10.0.0.5 109 | 110 | ## A handle for your relay, so people don't have to refer to it by key. 111 | ## Nicknames must be between 1 and 19 characters inclusive, and must 112 | ## contain only the characters [a-zA-Z0-9]. 113 | ## If not set, "Unnamed" will be used. 114 | #Nickname ididnteditheconfig 115 | 116 | ## Define these to limit how much relayed traffic you will allow. Your 117 | ## own traffic is still unthrottled. Note that RelayBandwidthRate must 118 | ## be at least 75 kilobytes per second. 119 | ## Note that units for these config options are bytes (per second), not 120 | ## bits (per second), and that prefixes are binary prefixes, i.e. 2^10, 121 | ## 2^20, etc. 122 | #RelayBandwidthRate 100 KBytes # Throttle traffic to 100KB/s (800Kbps) 123 | #RelayBandwidthBurst 200 KBytes # But allow bursts up to 200KB (1600Kb) 124 | 125 | ## Use these to restrict the maximum traffic per day, week, or month. 126 | ## Note that this threshold applies separately to sent and received bytes, 127 | ## not to their sum: setting "40 GB" may allow up to 80 GB total before 128 | ## hibernating. 129 | ## 130 | ## Set a maximum of 40 gigabytes each way per period. 131 | #AccountingMax 40 GBytes 132 | ## Each period starts daily at midnight (AccountingMax is per day) 133 | #AccountingStart day 00:00 134 | ## Each period starts on the 3rd of the month at 15:00 (AccountingMax 135 | ## is per month) 136 | #AccountingStart month 3 15:00 137 | 138 | ## Administrative contact information for this relay or bridge. This line 139 | ## can be used to contact you if your relay or bridge is misconfigured or 140 | ## something else goes wrong. Note that we archive and publish all 141 | ## descriptors containing these lines and that Google indexes them, so 142 | ## spammers might also collect them. You may want to obscure the fact that 143 | ## it's an email address and/or generate a new address for this purpose. 144 | ## 145 | ## If you are running multiple relays, you MUST set this option. 146 | ## 147 | #ContactInfo Random Person 148 | ## You might also include your PGP or GPG fingerprint if you have one: 149 | #ContactInfo 0xFFFFFFFF Random Person 150 | 151 | ## Uncomment this to mirror directory information for others. Please do 152 | ## if you have enough bandwidth. 153 | #DirPort 9030 # what port to advertise for directory connections 154 | ## If you want to listen on a port other than the one advertised in 155 | ## DirPort (e.g. to advertise 80 but bind to 9091), you can do it as 156 | ## follows. below too. You'll need to do ipchains or other port 157 | ## forwarding yourself to make this work. 158 | #DirPort 80 NoListen 159 | #DirPort 127.0.0.1:9091 NoAdvertise 160 | ## Uncomment to return an arbitrary blob of html on your DirPort. Now you 161 | ## can explain what Tor is if anybody wonders why your IP address is 162 | ## contacting them. See contrib/tor-exit-notice.html in Tor's source 163 | ## distribution for a sample. 164 | #DirPortFrontPage /etc/tor/tor-exit-notice.html 165 | 166 | ## Uncomment this if you run more than one Tor relay, and add the identity 167 | ## key fingerprint of each Tor relay you control, even if they're on 168 | ## different networks. You declare it here so Tor clients can avoid 169 | ## using more than one of your relays in a single circuit. See 170 | ## https://www.torproject.org/docs/faq#MultipleRelays 171 | ## However, you should never include a bridge's fingerprint here, as it would 172 | ## break its concealability and potentially reveal its IP/TCP address. 173 | ## 174 | ## If you are running multiple relays, you MUST set this option. 175 | ## 176 | ## Note: do not use MyFamily on bridge relays. 177 | #MyFamily $keyid,$keyid,... 178 | 179 | ## Uncomment this if you want your relay to be an exit, with the default 180 | ## exit policy (or whatever exit policy you set below). 181 | ## (If ReducedExitPolicy, ExitPolicy, or IPv6Exit are set, relays are exits. 182 | ## If none of these options are set, relays are non-exits.) 183 | #ExitRelay 1 184 | 185 | ## Uncomment this if you want your relay to allow IPv6 exit traffic. 186 | ## (Relays do not allow any exit traffic by default.) 187 | #IPv6Exit 1 188 | 189 | ## Uncomment this if you want your relay to be an exit, with a reduced set 190 | ## of exit ports. 191 | #ReducedExitPolicy 1 192 | 193 | ## Uncomment these lines if you want your relay to be an exit, with the 194 | ## specified set of exit IPs and ports. 195 | ## 196 | ## A comma-separated list of exit policies. They're considered first 197 | ## to last, and the first match wins. 198 | ## 199 | ## If you want to allow the same ports on IPv4 and IPv6, write your rules 200 | ## using accept/reject *. If you want to allow different ports on IPv4 and 201 | ## IPv6, write your IPv6 rules using accept6/reject6 *6, and your IPv4 rules 202 | ## using accept/reject *4. 203 | ## 204 | ## If you want to _replace_ the default exit policy, end this with either a 205 | ## reject *:* or an accept *:*. Otherwise, you're _augmenting_ (prepending to) 206 | ## the default exit policy. Leave commented to just use the default, which is 207 | ## described in the man page or at 208 | ## https://www.torproject.org/documentation.html 209 | ## 210 | ## Look at https://www.torproject.org/faq-abuse.html#TypicalAbuses 211 | ## for issues you might encounter if you use the default exit policy. 212 | ## 213 | ## If certain IPs and ports are blocked externally, e.g. by your firewall, 214 | ## you should update your exit policy to reflect this -- otherwise Tor 215 | ## users will be told that those destinations are down. 216 | ## 217 | ## For security, by default Tor rejects connections to private (local) 218 | ## networks, including to the configured primary public IPv4 and IPv6 addresses, 219 | ## and any public IPv4 and IPv6 addresses on any interface on the relay. 220 | ## See the man page entry for ExitPolicyRejectPrivate if you want to allow 221 | ## "exit enclaving". 222 | ## 223 | #ExitPolicy accept *:6660-6667,reject *:* # allow irc ports on IPv4 and IPv6 but no more 224 | #ExitPolicy accept *:119 # accept nntp ports on IPv4 and IPv6 as well as default exit policy 225 | #ExitPolicy accept *4:119 # accept nntp ports on IPv4 only as well as default exit policy 226 | #ExitPolicy accept6 *6:119 # accept nntp ports on IPv6 only as well as default exit policy 227 | #ExitPolicy reject *:* # no exits allowed 228 | 229 | ## Bridge relays (or "bridges") are Tor relays that aren't listed in the 230 | ## main directory. Since there is no complete public list of them, even an 231 | ## ISP that filters connections to all the known Tor relays probably 232 | ## won't be able to block all the bridges. Also, websites won't treat you 233 | ## differently because they won't know you're running Tor. If you can 234 | ## be a real relay, please do; but if not, be a bridge! 235 | ## 236 | ## Warning: when running your Tor as a bridge, make sure than MyFamily is 237 | ## NOT configured. 238 | #BridgeRelay 1 239 | ## By default, Tor will advertise your bridge to users through various 240 | ## mechanisms like https://bridges.torproject.org/. If you want to run 241 | ## a private bridge, for example because you'll give out your bridge 242 | ## address manually to your friends, uncomment this line: 243 | #PublishServerDescriptor 0 244 | 245 | ## Configuration options can be imported from files or folders using the %include 246 | ## option with the value being a path. This path can have wildcards. Wildcards are 247 | ## expanded first, using lexical order. Then, for each matching file or folder, the following 248 | ## rules are followed: if the path is a file, the options from the file will be parsed as if 249 | ## they were written where the %include option is. If the path is a folder, all files on that 250 | ## folder will be parsed following lexical order. Files starting with a dot are ignored. Files 251 | ## on subfolders are ignored. 252 | ## The %include option can be used recursively. 253 | #%include /etc/torrc.d/*.conf 254 | 255 | 256 | 257 | 258 | 259 | # ExitNodes RO 260 | -------------------------------------------------------------------------------- /dot_config/doctl/private_config.yaml.tmpl: -------------------------------------------------------------------------------- 1 | access-token: {{ secretJSON "secrets" | dig "digitalocean" "token" "" }} 2 | account: 3 | get: 4 | format: "" 5 | no-header: false 6 | ratelimit: 7 | format: "" 8 | no-header: false 9 | action: 10 | get: 11 | format: "" 12 | no-header: false 13 | list: 14 | action-type: "" 15 | after: "" 16 | before: "" 17 | format: "" 18 | no-header: false 19 | region: "" 20 | resource-type: "" 21 | status: "" 22 | wait: 23 | format: "" 24 | no-header: false 25 | poll-timeout: 5 26 | api-url: "" 27 | cdn: 28 | create: 29 | certificate-id: "" 30 | domain: "" 31 | format: "" 32 | no-header: false 33 | ttl: 3600 34 | delete: 35 | force: false 36 | flush: 37 | files: '[*]' 38 | get: 39 | format: "" 40 | no-header: false 41 | list: 42 | format: "" 43 | no-header: false 44 | update: 45 | certificate-id: "" 46 | domain: "" 47 | format: "" 48 | no-header: false 49 | ttl: 3600 50 | certificate: 51 | create: 52 | certificate-chain-path: "" 53 | dns-names: '[]' 54 | leaf-certificate-path: "" 55 | name: "" 56 | private-key-path: "" 57 | type: "" 58 | delete: 59 | force: false 60 | cluster: 61 | create: 62 | count: 3 63 | node-pool: [] 64 | region: nyc1 65 | size: s-1vcpu-2gb 66 | tag: [] 67 | update-kubeconfig: true 68 | version: latest 69 | wait: true 70 | delete: 71 | force: false 72 | update-kubeconfig: true 73 | update: 74 | cluster-name: "" 75 | tag: [] 76 | update-kubeconfig: true 77 | compute: 78 | ssh: 79 | ssh-agent-forwarding: false 80 | ssh-command: "" 81 | ssh-key-path: /home/croissong/.ssh/id_rsa 82 | ssh-port: 22 83 | ssh-private-ip: false 84 | ssh-user: root 85 | context: default 86 | databases: 87 | create: 88 | engine: pg 89 | num-nodes: 1 90 | region: nyc1 91 | size: db-s-1vcpu-1gb 92 | version: "11" 93 | delete: 94 | force: false 95 | migrate: 96 | region: "" 97 | resize: 98 | num-nodes: 0 99 | size: "" 100 | db: 101 | delete: 102 | force: false 103 | domain: 104 | create: 105 | format: "" 106 | ip-address: 107 | required: true 108 | no-header: false 109 | delete: 110 | force: false 111 | get: 112 | format: "" 113 | no-header: false 114 | list: 115 | format: "" 116 | no-header: false 117 | droplet: 118 | actions: 119 | format: "" 120 | no-header: false 121 | backups: 122 | format: "" 123 | no-header: false 124 | create: 125 | enable-backups: false 126 | enable-ipv6: false 127 | enable-monitoring: false 128 | enable-private-networking: false 129 | format: "" 130 | image: 131 | required: true 132 | no-header: false 133 | region: 134 | required: true 135 | size: 136 | required: true 137 | ssh-keys: '[]' 138 | tag-name: "" 139 | tag-names: '[]' 140 | user-data: "" 141 | user-data-file: "" 142 | volumes: '[]' 143 | wait: false 144 | delete: 145 | force: false 146 | tag-name: "" 147 | get: 148 | format: "" 149 | no-header: false 150 | template: "" 151 | kernels: 152 | format: "" 153 | no-header: false 154 | list: 155 | format: "" 156 | no-header: false 157 | region: "" 158 | tag-name: "" 159 | neighbors: 160 | format: "" 161 | no-header: false 162 | snapshots: 163 | format: "" 164 | no-header: false 165 | tag: 166 | tag-name: "" 167 | untag: 168 | tag-name: '[]' 169 | droplet-action: 170 | change-kernel: 171 | format: "" 172 | kernel-id: 0 173 | no-header: false 174 | wait: false 175 | disable-backups: 176 | format: "" 177 | no-header: false 178 | wait: false 179 | enable-backups: 180 | format: "" 181 | no-header: false 182 | wait: false 183 | enable-ipv6: 184 | format: "" 185 | no-header: false 186 | wait: false 187 | enable-private-networking: 188 | format: "" 189 | no-header: false 190 | wait: false 191 | get: 192 | action-id: 193 | required: true 194 | format: "" 195 | no-header: false 196 | password-reset: 197 | format: "" 198 | no-header: false 199 | wait: false 200 | power-cycle: 201 | format: "" 202 | no-header: false 203 | wait: false 204 | power-off: 205 | format: "" 206 | no-header: false 207 | wait: false 208 | power-on: 209 | format: "" 210 | no-header: false 211 | wait: false 212 | reboot: 213 | format: "" 214 | no-header: false 215 | wait: false 216 | rebuild: 217 | format: "" 218 | image: "" 219 | no-header: false 220 | wait: false 221 | rename: 222 | droplet-name: "" 223 | format: "" 224 | no-header: false 225 | wait: false 226 | resize: 227 | format: "" 228 | no-header: false 229 | resize-disk: false 230 | size: "" 231 | wait: false 232 | restore: 233 | format: "" 234 | image-id: 0 235 | no-header: false 236 | wait: false 237 | shutdown: 238 | format: "" 239 | no-header: false 240 | wait: false 241 | snapshot: 242 | format: "" 243 | no-header: false 244 | snapshot-name: 245 | required: true 246 | wait: false 247 | firewall: 248 | add-droplets: 249 | droplet-ids: '[]' 250 | add-rules: 251 | inbound-rules: "" 252 | outbound-rules: "" 253 | add-tags: 254 | tag-names: '[]' 255 | create: 256 | droplet-ids: '[]' 257 | format: "" 258 | inbound-rules: "" 259 | name: 260 | required: true 261 | no-header: false 262 | outbound-rules: "" 263 | tag-names: '[]' 264 | delete: 265 | force: false 266 | get: 267 | format: "" 268 | no-header: false 269 | list: 270 | format: "" 271 | no-header: false 272 | list-by-droplet: 273 | format: "" 274 | no-header: false 275 | remove-droplets: 276 | droplet-ids: '[]' 277 | remove-rules: 278 | inbound-rules: "" 279 | outbound-rules: "" 280 | remove-tags: 281 | tag-names: '[]' 282 | update: 283 | droplet-ids: '[]' 284 | format: "" 285 | inbound-rules: "" 286 | name: "" 287 | no-header: false 288 | outbound-rules: "" 289 | tag-names: '[]' 290 | floating-ip: 291 | create: 292 | droplet-id: 0 293 | format: "" 294 | no-header: false 295 | region: "" 296 | delete: 297 | force: false 298 | get: 299 | format: "" 300 | no-header: false 301 | list: 302 | format: "" 303 | no-header: false 304 | region: "" 305 | floating-ip-action: 306 | assign: 307 | format: "" 308 | no-header: false 309 | get: 310 | format: "" 311 | no-header: false 312 | unassign: 313 | format: "" 314 | no-header: false 315 | image: 316 | delete: 317 | force: false 318 | get: 319 | format: "" 320 | no-header: false 321 | list: 322 | format: "" 323 | no-header: false 324 | public: false 325 | list-application: 326 | format: "" 327 | no-header: false 328 | public: true 329 | list-distribution: 330 | format: "" 331 | no-header: false 332 | public: true 333 | list-user: 334 | format: "" 335 | no-header: false 336 | public: false 337 | update: 338 | format: "" 339 | image-name: "" 340 | no-header: false 341 | image-action: 342 | get: 343 | action-id: 0 344 | format: "" 345 | no-header: false 346 | transfer: 347 | format: "" 348 | no-header: false 349 | region: 350 | required: true 351 | wait: false 352 | kubeconfig: 353 | exec-credential: 354 | version: "" 355 | load-balancer: 356 | add-droplets: 357 | droplet-ids: '[]' 358 | add-forwarding-rules: 359 | forwarding-rules: "" 360 | create: 361 | algorithm: round_robin 362 | droplet-ids: '[]' 363 | forwarding-rules: "" 364 | health-check: "" 365 | name: 366 | required: true 367 | redirect-http-to-https: false 368 | region: 369 | required: true 370 | sticky-sessions: "" 371 | tag-name: "" 372 | delete: 373 | force: false 374 | remove-droplets: 375 | droplet-ids: '[]' 376 | remove-forwarding-rules: 377 | forwarding-rules: "" 378 | update: 379 | algorithm: round_robin 380 | droplet-ids: '[]' 381 | forwarding-rules: "" 382 | health-check: "" 383 | name: "" 384 | redirect-http-to-https: false 385 | region: "" 386 | sticky-sessions: "" 387 | tag-name: "" 388 | maintenance-window: 389 | update: 390 | day: "" 391 | hour: "" 392 | node-pool: 393 | create: 394 | count: 0 395 | name: "" 396 | size: "" 397 | tag: "" 398 | delete: 399 | force: false 400 | recycle: 401 | node-ids: "" 402 | update: 403 | count: 0 404 | name: "" 405 | tag: "" 406 | output: text 407 | pool: 408 | create: 409 | db: "" 410 | mode: transaction 411 | size: 0 412 | user: "" 413 | delete: 414 | force: false 415 | projects: 416 | create: 417 | description: "" 418 | environment: "" 419 | format: "" 420 | name: "" 421 | no-header: false 422 | purpose: "" 423 | delete: 424 | force: false 425 | get: 426 | format: "" 427 | no-header: false 428 | list: 429 | format: "" 430 | no-header: false 431 | update: 432 | description: "" 433 | environment: "" 434 | format: "" 435 | is_default: false 436 | name: "" 437 | no-header: false 438 | purpose: "" 439 | records: 440 | create: 441 | format: "" 442 | no-header: false 443 | record-data: "" 444 | record-flags: 0 445 | record-name: "" 446 | record-port: 0 447 | record-priority: 0 448 | record-tag: "" 449 | record-ttl: 1800 450 | record-type: "" 451 | record-weight: 0 452 | delete: 453 | force: false 454 | list: 455 | format: "" 456 | no-header: false 457 | update: 458 | format: "" 459 | no-header: false 460 | record-data: "" 461 | record-flags: 0 462 | record-id: 0 463 | record-name: "" 464 | record-port: 0 465 | record-priority: 0 466 | record-tag: "" 467 | record-ttl: 1800 468 | record-type: "" 469 | record-weight: 0 470 | region: 471 | list: 472 | format: "" 473 | no-header: false 474 | replica: 475 | create: 476 | region: nyc1 477 | size: db-s-1vcpu-1gb 478 | delete: 479 | force: false 480 | required: 481 | certificate: 482 | create: 483 | name: true 484 | cluster: 485 | create: 486 | region: true 487 | databases: 488 | migrate: 489 | region: true 490 | resize: 491 | num-nodes: true 492 | size: true 493 | droplet: 494 | create: 495 | image: true 496 | region: true 497 | size: true 498 | tag: 499 | tag-name: true 500 | droplet-action: 501 | change-kernel: 502 | kernel-id: true 503 | get: 504 | action-id: true 505 | rebuild: 506 | image: true 507 | rename: 508 | droplet-name: true 509 | restore: 510 | image-id: true 511 | snapshot: 512 | snapshot-name: true 513 | firewall: 514 | create: 515 | name: true 516 | update: 517 | name: true 518 | image: 519 | update: 520 | image-name: true 521 | image-action: 522 | get: 523 | action-id: true 524 | transfer: 525 | region: true 526 | load-balancer: 527 | create: 528 | name: true 529 | region: true 530 | update: 531 | name: true 532 | region: true 533 | maintenance-window: 534 | update: 535 | day: true 536 | hour: true 537 | node-pool: 538 | create: 539 | count: true 540 | name: true 541 | size: true 542 | pool: 543 | create: 544 | db: true 545 | size: true 546 | user: true 547 | projects: 548 | create: 549 | name: true 550 | purpose: true 551 | ssh-key: 552 | create: 553 | public-key: true 554 | import: 555 | public-key-file: true 556 | update: 557 | key-name: true 558 | volume: 559 | create: 560 | region: true 561 | size: true 562 | snapshot: 563 | snapshot-name: true 564 | volume-action: 565 | resize: 566 | region: true 567 | size: true 568 | resources: 569 | assign: 570 | resource: [] 571 | list: 572 | format: "" 573 | no-header: false 574 | size: 575 | list: 576 | format: "" 577 | no-header: false 578 | snapshot: 579 | delete: 580 | force: false 581 | format: "" 582 | no-header: false 583 | get: 584 | format: "" 585 | no-header: false 586 | list: 587 | format: "" 588 | no-header: false 589 | region: "" 590 | resource: "" 591 | ssh-key: 592 | create: 593 | format: "" 594 | no-header: false 595 | public-key: "" 596 | delete: 597 | force: false 598 | get: 599 | format: "" 600 | no-header: false 601 | import: 602 | format: "" 603 | no-header: false 604 | public-key-file: 605 | required: true 606 | list: 607 | format: "" 608 | no-header: false 609 | update: 610 | format: "" 611 | key-name: 612 | required: true 613 | no-header: false 614 | tag: 615 | delete: 616 | force: false 617 | user: 618 | delete: 619 | force: false 620 | volume: 621 | create: 622 | desc: "" 623 | format: "" 624 | fs-label: "" 625 | fs-type: "" 626 | no-header: false 627 | region: 628 | required: true 629 | size: 4TiB 630 | tag: [] 631 | delete: 632 | force: false 633 | get: 634 | format: "" 635 | no-header: false 636 | list: 637 | format: "" 638 | no-header: false 639 | region: "" 640 | snapshot: 641 | format: "" 642 | no-header: false 643 | snapshot-desc: "" 644 | snapshot-name: 645 | required: true 646 | tag: [] 647 | volume-action: 648 | resize: 649 | region: "" 650 | size: 651 | required: true 652 | --------------------------------------------------------------------------------