diff options
53 files changed, 85 insertions, 1485 deletions
@@ -3,7 +3,7 @@ ## Install ```sh -git clone https://git.sr.ht/~tobyvin/.dotfiles ~/.dotfiles && cd ~/.dotfiles && ./install.sh +git clone https://git.tobyvin.dev/.dotfiles ~/.dotfiles && cd ~/.dotfiles && ./install.sh ``` ## Getting started diff --git a/TODO.md b/TODO.md deleted file mode 100644 index e107024..0000000 --- a/TODO.md +++ /dev/null @@ -1,149 +0,0 @@ -# TODO - -- ~~migrate from makefile to install.sh script~~ -- package installs? - - install.sh per package? -- cli - - zsh - - neovim - - fzf - - bat - - rg - - fd - - exa - - lsd - - handlr -- gui - - zathura - - feh - - firefox -- document system level changes? - - greetd/sway - - nvidia (?) - - mkinit stuff - - pam - - pam-u2f.so - - pam_rssh - - networkd - - bind fallback - - pacman - - Color - - UseSyslog - - VerbosePkgLists - -## pam - -- unlock gpg-agent/ssh-agent on login - - pass pin from login directly to agents? - -## email - -- migrate to local email server -- setup mail client - - MUA - - aerc - - mutt - - Maildir - - OfflineIMAP - - fdm - - mailctl - - mailnotify - -## zk - -- might not be best option for todos -- use fzf-tmux for interactive selection -- fails when `$ZK_NOTEBOOK_DIR` is set to hidden dir - - e.g. `export ZK_NOTEBOOK_DIR="$HOME/.notebook"` - -## ssh - -- possible to use pam_u2f over ssh? - - if not, alternative for sudo auth without password - - [pam_rssh](https://github.com/z4yx/pam_rssh) - -## tmux - -- emulate sway workspace switching - - on C-#, if tab # does not exist, create it and switch - - move active tab to # with S-# -- add keymap for opening zk/todos in initial session -- yank - - fix yanking whitespace under prompt - - add vim-like keymaps for yanking start>end/cursor>end/cursor>start - - add vim-like keymaps for deleting start>end/cursor>end/cursor>start - - add vim-like keymaps for selecting start>end/cursor>end/cursor>start -- tmux-sessionizer - - improve search - - long runtime on initial search - - more robust filter - - add keybind for creating repo from current input value - - zk does this, start there -- ssh session management - - nested sessions - - remap C-s to ssh-sessionizer - - tmux-sessionizer but for ssh targets - - remap C-S to ssh-switcher - - tmux-sessions but for connected/existing ssh targets - - run different local tmux config if connecting to remote tmux session - - hides local UI - - remote all remaps except for the "switch ssh/host" -- rewrite in rust? - - unify all tools into single rust binary - - tmuxctl create - - tmux-sessionizer - - tmuxctl switch - - tmux-sessions - - tmuxctl switch --ssh - - tmuxctl create --ssh - - host/session creating - - host/session switching - -## nvim - -- fix lua syntax highlighting bug -- fix lag when quickly navigating (large?) files, e.g. plugins.lua -- setup harpoon - - possible to replace tabline with harpoon marks? (currently buffers) -- reorganize lsp configs -- reorganize dap configs -- fix lsp document symbols error in sh files - -## wsl - -- delay usbip service ExecStart until server started - - run on user slice (but needs to be run root?) -- fix having to restart wsl for clipboard support - - possibly done by changing the startup task on windows? - -## sway - -- toggle swayidle/swaylock -- pipewire - - set default audio sink (Possibly fixed?) - - session manager? - - add filter config to dotfiles (done) -- firefox - - crash when reorganizing tabs - - [bug](https://bugzilla.mozilla.org/show_bug.cgi?id=1721453) - - crash when reloading sway -- discord - - crashing on screenshare (when sharing OR viewing) -- notifications - - streamlink-gui not using notify daemon -- swayr - - rebind - - alt-tab mru - - $mod-tab select window -- window layouts - - floating - - pulseaudio volume control - - workspace ordering (1-2 on output 1?) - - open streamlink stuff on output 2 -- swaybar - - open pulseaudio volume control on volume click - - fix media not updating -- rbw - - possibly move to [pass](https://www.passwordstore.org/)? - - login issues - - dep services wait until unlocked? diff --git a/bash/.bashrc b/bash/.bashrc index fa713b3..eae9a0b 100644 --- a/bash/.bashrc +++ b/bash/.bashrc @@ -1,39 +1,12 @@ #!/usr/bin/bash +# shellcheck disable=1090 export HISTFILE=$XDG_STATE_HOME/bash/history -# Aliases -alias ls='ls --color=tty' -alias l='ls -lah' -alias la='ls -lAh' -alias ll='ls -lh' -alias lla='ls -lA' -alias lsa='ls -lah' -alias grep='grep --color' -alias ipa="ip -s -c -h a" -alias untar="tar -zxvf" -alias td=". td.sh" -alias vim=nvim -alias dexec="docker exec -it" -alias dps="docker ps" -alias dc="docker compose" -alias dce="docker compose exec" -alias dcps="docker compose ps" -alias dcls="docker compose ls" -alias dcdn="docker compose down" -alias dcup="docker compose up" -alias dcupd="docker compose up -d" -alias dcl="docker compose logs" -alias dclf="docker compose logs -f" -alias dct="docker context" -alias dcu="docker context use" - if [[ $- == *i* ]] && [ -d "$BASHCOMPDIR" ]; then for f in "$BASHCOMPDIR"/*; do - # shellcheck disable=1090 source "$f" done fi -# shellcheck disable=1090 command -v starship >/dev/null 2>&1 && source <(starship init bash) diff --git a/cargo/.local/share/cargo/config.toml b/cargo/.local/share/cargo/config.toml deleted file mode 100644 index 25d5215..0000000 --- a/cargo/.local/share/cargo/config.toml +++ /dev/null @@ -1,6 +0,0 @@ -[registries.crates-io] -protocol = "sparse" - -[target.x86_64-pc-windows-gnu] -linker = "/usr/bin/x86_64-w64-mingw32-gcc" -ar = "/usr/bin/x86_64-w64-mingw32-ar" diff --git a/cliphist/.local/bin/cliphist-wmenu b/cliphist/.local/bin/cliphist-wmenu deleted file mode 100755 index 951014e..0000000 --- a/cliphist/.local/bin/cliphist-wmenu +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -set -e - -selection="$(cliphist list | "$@")" -echo "$selection" | cliphist decode | wl-copy diff --git a/docker/.config/zsh/.zshrc.d/20-docker.zsh b/docker/.config/zsh/.zshrc.d/20-docker.zsh deleted file mode 100644 index 46efdae..0000000 --- a/docker/.config/zsh/.zshrc.d/20-docker.zsh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/zsh -# vim:ft=sh - -alias dexec="docker exec -it" -alias dps="docker ps" -alias dc="docker compose" -alias dce="docker compose exec" -alias dcps="docker compose ps" -alias dcls="docker compose ls" -alias dcdn="docker compose down" -alias dcup="docker compose up" -alias dcupd="docker compose up -d" -alias dcl="docker compose logs" -alias dclf="docker compose logs -f" -alias dct="docker context" -alias dcu="docker context use" diff --git a/fzf/.local/bin/live-grep.sh b/fzf/.local/bin/live-grep.sh deleted file mode 100755 index 4a19bd8..0000000 --- a/fzf/.local/bin/live-grep.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh - -need() { - for need_cmd in "$@"; do - if ! command -v "$need_cmd" >/dev/null 2>&1; then - printf "live-grep: command not found: %s\n" "$need_cmd" >&2 - exit 1 - fi - done -} - -need "rg" "bat" - -INITIAL_QUERY="${*:-}" -RG_PREFIX="rg --column --line-number --no-heading --color=always --smart-case " -PREVIEW_CMD='bat --color=always {1} --highlight-line {2} 2>/dev/null || bat --color=always {}' -INITIAL_CMD="$RG_PREFIX --files" - -if [ $# -gt 0 ]; then - INITIAL_CMD="$RG_PREFIX '$INITIAL_QUERY'" -fi - -# shellcheck disable=2046 -set -- $( - FZF_DEFAULT_COMMAND="$INITIAL_CMD" fzf \ - --ansi --color="hl:-1:underline,hl+:-1:underline:reverse" \ - --bind="change:reload:sleep 0.1; [ -n {q} ] && ($RG_PREFIX -- {q} || true) || $RG_PREFIX --files" \ - --disabled --query="$INITIAL_QUERY" --delimiter=":" \ - --preview="cat {1} | rg --passthru -i --color always -- {q}" --preview-window='up,60%,border-bottom,+{2}+3/3,~3' -) - -if [ $# -gt 0 ]; then - xdg-open "$1" "+$2" -fi diff --git a/gdb/.config/profile.d/50-gdb.sh b/gdb/.config/profile.d/50-gdb.sh index 86c085a..377a19e 100644 --- a/gdb/.config/profile.d/50-gdb.sh +++ b/gdb/.config/profile.d/50-gdb.sh @@ -1,4 +1,4 @@ #!/bin/sh -export GDBHISTFILE="$XDG_DATA_HOME/gdb/history" +export GDBHISTFILE="$XDG_STATE_HOME/gdb/history" export DEBUGINFOD_URLS="https://debuginfod.elfutils.org/" diff --git a/gdb/install.sh b/gdb/install.sh new file mode 100755 index 0000000..55230df --- /dev/null +++ b/gdb/install.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +pkgname=gdb + +if ! command -v "$pkgname" >/dev/null; then + printf '%s: %s not found, skipping...\n' "$0" "$pkgname" + exit 0 +fi + +mkdir -pv "${XDG_STATE_HOME}/gdb" @@ -1,99 +0,0 @@ -# Git - -My personal cheat sheet of commands for various tools and workflows - -- [Git](#git) - - [Split out subfolder into new repository](#split-out-subfolder-into-new-repository) - - [(Optional) Migrate original subdir to submodule](#optional-migrate-original-subdir-to-submodule) - -## Split out subfolder into new repository - -*Be sure you are inside the original repo* - -```sh -cd <orignal_repository>/<subdir-to-split> -``` - -Set local variables for use - -```sh -username="$(git config user.username)" -subdir="$(git rev-parse --show-prefix)" -newrepo="$(basename $subdir)" -oldrepo="$(git rev-parse --show-toplevel)" -cd $oldrepo -``` - -Create a new branch containing only the sub-directory using `git subtree` - -```sh -git subtree split -P $subdir -b $newrepo -``` - -Create a temp git repo and pull in the newly created branch - -```sh -cd $(mktemp -d) - -git init && git pull $oldrepo $newrepo -``` - -Copy over the git artifacts from original repo's root directory - -```sh -cp -rt ./ $oldrepo/.gitignore $oldrepo/.gitattributes $oldrepo/.vscode -``` - -Commit changes - -```sh -git add -A && git commit -m "split out $newrepo into submodule" -``` - -Create a new remote repository using something like [gh](https://github.com/cli/cli) - -```sh -gh repo create $username/$newrepo -``` - -(Optional) You can also just create the new remote repository manually and set the new local repository's remote with - -```sh -git remote add origin https://github.com/$username/$newrepo -``` - -Push newly created repository to remote - -```sh -git push -u origin master -``` - -### (Optional) Migrate original subdir to submodule - -Switch back into the original repository - -```sh -cd $oldrepo -``` - -Remove the `subdir` from git and the filesystem - -```sh -git rm -rf $subdir -rm -rf $subdir -``` - -Add the newly created remote repository as a submodule at the `subdir`'s path - -```sh -git submodule add git@github.com:$username/$newrepo $subdir -git submodule update --init --recursive -``` - -Commit the changes to the original repository and push to remote - -```sh -git commit -m "split out $newrepo into submodule" -git push -u origin master -``` - diff --git a/git/.local/bin/git-bump b/git/.local/bin/git-bump deleted file mode 100755 index d75a755..0000000 --- a/git/.local/bin/git-bump +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh - -tag="$(git describe --abbrev=0 2>/dev/null)" -IFS=. read -r major minor patch <<EOF -${tag#v} -EOF - -case "$1" in -major) - major=$((major + 1)) - minor=0 - patch=0 - ;; -minor) - minor=$((minor + 1)) - patch=0 - ;; -patch) - patch=$((patch + 1)) - ;; -*) - echo "Invalid semver argument given (major|minor|patch): $1" 1>&2 - exit 1 - ;; -esac - -git shortlog "$tag"..HEAD | git tag -s "v${major}.${minor}.${patch}" --file - diff --git a/git/.local/bin/git-ignore b/git/.local/bin/git-ignore deleted file mode 100644 index 7df638d..0000000 --- a/git/.local/bin/git-ignore +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -# Create useful gitignore files -# Usage: gi [param] -# param is a comma separated list of ignore profiles. -# If param is ommited choose interactively. - -__gi() { - curl -L -s https://www.gitignore.io/api/"$*" -} - -if [ "$#" -eq 0 ]; then - IFS=$IFS+"," - for item in $(__gi list); do - echo "$item" - done | fzf --multi --ansi | paste -s -d "," - | - { read -r result && __gi "$result"; } -else - __gi "$@" -fi diff --git a/gnupg/.config/zsh/.zshrc.d/20-gnupg.zsh b/gnupg/.config/zsh/.zshrc.d/20-gnupg.zsh deleted file mode 100644 index 0b3c422..0000000 --- a/gnupg/.config/zsh/.zshrc.d/20-gnupg.zsh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/zsh -# vim:ft=sh - -if [ -t 0 ] && [ -z "$SSH_TTY" ]; then - export GPG_TTY="$(tty)" - export PINENTRY_USER_DATA=USE_TTY=1 -fi - -gpg-connect-agent updatestartuptty /bye >/dev/null 2>&1 diff --git a/gnupg/.local/bin/pinentry-auto b/gnupg/.local/bin/pinentry-auto deleted file mode 100755 index b788361..0000000 --- a/gnupg/.local/bin/pinentry-auto +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/sh -# Choose between pinentry-tty and pinentry-x11 based on whether -# $PINENTRY_USER_DATA contains USE_TTY=1 -# -# Based on: -# https://kevinlocke.name/bits/2019/07/31/prefer-terminal-for-gpg-pinentry -# -# Note: Environment detection is difficult. -# - stdin is Assuan pipe, preventing tty checking -# - configuration info (e.g. ttyname) is passed via Assuan pipe, preventing -# parsing or fallback without implementing Assuan protocol. -# - environment is sanitized by atfork_cb in call-pinentry.c (removing $GPG_TTY) -# -# $PINENTRY_USER_DATA is preserved since 2.08 https://dev.gnupg.org/T799 -# -# Format of $PINENTRY_USER_DATA not specified (that I can find), pinentry-mac -# assumes comma-separated sequence of NAME=VALUE with no escaping mechanism -# https://github.com/GPGTools/pinentry-mac/blob/v0.9.4/Source/AppDelegate.m#L78 -# and recognizes USE_CURSES=1 for curses fallback -# https://github.com/GPGTools/pinentry-mac/pull/2 -# -# To the extent possible under law, Kevin Locke <kevin@kevinlocke.name> has -# waived all copyright and related or neighboring rights to this work -# under the terms of CC0: https://creativecommons.org/publicdomain/zero/1.0/ - -set -Ceu - -# Use pinentry-tty if $PINENTRY_USER_DATA contains USE_TTY=1 -case "${PINENTRY_USER_DATA-}" in -*USE_TTY=1*) - # Note: Change to pinentry-curses if a Curses UI is preferred. - exec pinentry-curses "$@" - ;; -esac - -# Otherwise, use any X11 UI (configured by Debian Alternatives System) -# Note: Will fall back to curses if $DISPLAY is not available. -exec pinentry-gtk-2 "$@" diff --git a/i3/.config/i3/config b/i3/.config/i3/config deleted file mode 100644 index ded8a6f..0000000 --- a/i3/.config/i3/config +++ /dev/null @@ -1,162 +0,0 @@ -set $mod Mod4 -set $menu dmenu - -set $left h -set $down j -set $up k -set $right l - -set $base00 #1d2021 -set $base01 #3c3836 -set $base02 #504945 -set $base03 #665c54 -set $base04 #bdae93 -set $base05 #d5c4a1 -set $base06 #ebdbb2 -set $base07 #fbf1c7 -set $base08 #fb4934 -set $base09 #fe8019 -set $base0A #fabd2f -set $base0B #b8bb26 -set $base0C #8ec07c -set $base0D #83a598 -set $base0E #d3869b -set $base0F #d65d0e - -# Property Border BG Text Indicator Child Border -client.focused $base05 $base0D $base00 $base0D $base0D -client.focused_inactive $base01 $base01 $base05 $base03 $base01 -client.unfocused $base01 $base00 $base05 $base01 $base01 -client.urgent $base08 $base08 $base00 $base08 $base08 -client.placeholder $base00 $base00 $base05 $base00 $base00 -client.background $base07 - -font pango:FiraCode Nerd Font 15 -focus_on_window_activation focus -default_border pixel -hide_edge_borders smart - -exec_always --no-startup-id feh --bg-fill ~/.local/share/gruvbox/arch_left.png ~/.local/share/gruvbox/i3wm_right.png - -# for_window [shell=".*"] inhibit_idle fullscreen -for_window [class="Pavucontrol" title="^Volume Control$"] border none, floating enable -for_window [class="streamlink-twitch-gui" title="^Streamlink Twitch GUI$"] border none, floating enable -for_window [class="gnome-calculator" title="Calculator"] border none, floating enable -for_window [class="Firefox" title="Firefox — Sharing Indicator"] kill - -bindsym $mod+q kill -bindsym $mod+Shift+r restart -bindsym $mod+Shift+c reload -bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'Do you really want to exit i3?' -B 'Yes, exit i3' 'i3-msg exit'" -bindsym $mod+ctrl+q exec --no-startup-id loginctl lock-session -bindsym $mod+Escape exec --no-startup-id powermenu list | $menu | powermenu -bindsym $mod+space exec --no-startup-id j4-dmenu-desktop --no-generic --dmenu='$menu' --term="$TERMINAL" -bindsym $mod+Shift+space exec --no-startup-id dmenu-run -bindsym $mod+p exec --no-startup-id passmenu -bindsym $mod+Shift+p exec --no-startup-id passmenu --type -bindsym $mod+y exec --no-startup-id yubikey-oath-dmenu --notify --clipboard -bindsym $mod+Shift+y exec --no-startup-id yubikey-oath-dmenu --notify --type -bindsym $mod+Return exec $TERMINAL -bindsym $mod+w exec $BROWSER -# bindsym Print exec slurp | grim -g - - | wl-copy --type image/png -# bindsym $mod+Print exec /usr/share/sway/scripts/grimshot --notify save area - -bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +5% -bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -5% -bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle -bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle -bindsym XF86AudioPlay exec --no-startup-id playerctl play-pause -bindsym XF86AudioNext exec --no-startup-id playerctl next -bindsym XF86AudioPrev exec --no-startup-id playerctl previous -bindsym XF86MonBrightnessDown exec --no-startup-id brightnessctl set 5%- -bindsym XF86MonBrightnessUp exec --no-startup-id brightnessctl set +5% - -bindsym $mod+$left focus left -bindsym $mod+$down focus down -bindsym $mod+$up focus up -bindsym $mod+$right focus right - -bindsym $mod+Left focus left -bindsym $mod+Down focus down -bindsym $mod+Up focus up -bindsym $mod+Right focus right - -bindsym $mod+Shift+$left move left -bindsym $mod+Shift+$down move down -bindsym $mod+Shift+$up move up -bindsym $mod+Shift+$right move right - -bindsym $mod+Shift+Left move left -bindsym $mod+Shift+Down move down -bindsym $mod+Shift+Up move up -bindsym $mod+Shift+Right move right - -bindsym $mod+Ctrl+$left move workspace to output left -bindsym $mod+Ctrl+$down move workspace to output down -bindsym $mod+Ctrl+$up move workspace to output up -bindsym $mod+Ctrl+$right move workspace to output right - -bindsym $mod+Ctrl+Left move workspace to output left -bindsym $mod+Ctrl+Down move workspace to output down -bindsym $mod+Ctrl+Up move workspace to output up -bindsym $mod+Ctrl+Right move workspace to output right - -bindsym $mod+1 workspace number 1 -bindsym $mod+2 workspace number 2 -bindsym $mod+3 workspace number 3 -bindsym $mod+4 workspace number 4 -bindsym $mod+5 workspace number 5 -bindsym $mod+6 workspace number 6 -bindsym $mod+7 workspace number 7 -bindsym $mod+8 workspace number 8 -bindsym $mod+9 workspace number 9 -bindsym $mod+0 workspace number 10 -bindsym $mod+Ctrl+6 workspace back_and_forth - -bindsym $mod+Shift+1 move container to workspace number 1; workspace number 1 -bindsym $mod+Shift+2 move container to workspace number 2; workspace number 2 -bindsym $mod+Shift+3 move container to workspace number 3; workspace number 3 -bindsym $mod+Shift+4 move container to workspace number 4; workspace number 4 -bindsym $mod+Shift+5 move container to workspace number 5; workspace number 5 -bindsym $mod+Shift+6 move container to workspace number 6; workspace number 6 -bindsym $mod+Shift+7 move container to workspace number 7; workspace number 7 -bindsym $mod+Shift+8 move container to workspace number 8; workspace number 8 -bindsym $mod+Shift+9 move container to workspace number 9; workspace number 9 -bindsym $mod+Shift+0 move container to workspace number 10 - -bindsym $mod+f fullscreen -bindsym $mod+Shift+backslash split toggle -bindsym $mod+minus splith -bindsym $mod+backslash splitv -bindsym $mod+r mode 'resize' -mode 'resize' { - bindsym $left resize shrink width 10px - bindsym $down resize grow height 10px - bindsym $up resize shrink height 10px - bindsym $right resize grow width 10px - - bindsym Escape mode 'default' -} - -bar { - status_command i3status-rs - font pango:FiraCode Nerd Font 15 - colors { - background $base00 - separator $base01 - statusline $base04 - - # State Border BG Text - focused_workspace $base05 $base0D $base00 - active_workspace $base05 $base03 $base00 - inactive_workspace $base03 $base01 $base05 - urgent_workspace $base08 $base08 $base00 - binding_mode $base00 $base0A $base00 - } -} - - -include ~/.config/i3/config.d/* -include /etc/i3/config.d/* - -# exec_always "systemctl --user import-environment DISPLAY i3SOCK; systemctl --user start sway-session.target" diff --git a/i3blocks/.local/bin/i3blocks-dunst b/i3blocks/.local/lib/i3blocks/i3blocks-dunst index b21042f..b21042f 100755 --- a/i3blocks/.local/bin/i3blocks-dunst +++ b/i3blocks/.local/lib/i3blocks/i3blocks-dunst diff --git a/i3blocks/.local/bin/i3blocks-miniflux b/i3blocks/.local/lib/i3blocks/i3blocks-miniflux index 05224e2..05224e2 100755 --- a/i3blocks/.local/bin/i3blocks-miniflux +++ b/i3blocks/.local/lib/i3blocks/i3blocks-miniflux diff --git a/i3blocks/.local/bin/i3blocks-notmuch b/i3blocks/.local/lib/i3blocks/i3blocks-notmuch index b25c971..b25c971 100755 --- a/i3blocks/.local/bin/i3blocks-notmuch +++ b/i3blocks/.local/lib/i3blocks/i3blocks-notmuch diff --git a/i3blocks/.local/bin/i3blocks-title b/i3blocks/.local/lib/i3blocks/i3blocks-title index 9cd6abe..9cd6abe 100755 --- a/i3blocks/.local/bin/i3blocks-title +++ b/i3blocks/.local/lib/i3blocks/i3blocks-title diff --git a/i3status/.config/i3status-rust/config.toml b/i3status-rs/.config/i3status-rust/config.toml index 0728766..0298660 100644 --- a/i3status/.config/i3status-rust/config.toml +++ b/i3status-rs/.config/i3status-rust/config.toml @@ -17,7 +17,7 @@ critical_fg = "#1d2021" icons = "material-nf" [icons.overrides] -rss = " " +rss = "" [[block]] block = "focused_window" @@ -48,16 +48,16 @@ block = "amd_gpu" if_command = "lspci -v | grep 'AMD/ATI' >/dev/null" [[block]] -block = "custom_dbus" -path = "/rss" +block = "custom" +command = "~/.local/lib/i3status-rust/i3status-miniflux" +json = true [[block.click]] button = "left" cmd = "xdg-open https://miniflux.tobyvin.dev" -update = true [[block]] block = "custom" -command = "notmuch-status" +command = "~/.local/lib/i3status-rust/i3status-notmuch" json = true [[block.click]] button = "left" diff --git a/i3status-rs/.local/lib/i3status-rust/i3status-miniflux b/i3status-rs/.local/lib/i3status-rust/i3status-miniflux new file mode 100755 index 0000000..c9412fb --- /dev/null +++ b/i3status-rs/.local/lib/i3status-rust/i3status-miniflux @@ -0,0 +1,9 @@ +#!/bin/sh + +curl -s https://miniflux.tobyvin.dev/v1/feeds/counters \ + -H "X-Auth-Token: ${MINIFLUX_TOKEN:-$(pass miniflux.tobyvin.dev/i3status)}" | + jq -r '[.unreads[]] | add // 0 | { + icon: "rss", + state: (if . > 50 then "Critical" elif . > 0 then "Warning" else "Idle" end), + text: (. | tostring) + }' diff --git a/i3status/.local/bin/notmuch-status b/i3status-rs/.local/lib/i3status-rust/i3status-notmuch index 1c51be8..1c51be8 100755 --- a/i3status/.local/bin/notmuch-status +++ b/i3status-rs/.local/lib/i3status-rust/i3status-notmuch diff --git a/i3status/.config/systemd/user/rss-status.service b/i3status/.config/systemd/user/rss-status.service deleted file mode 100644 index b04c09b..0000000 --- a/i3status/.config/systemd/user/rss-status.service +++ /dev/null @@ -1,12 +0,0 @@ -[Unit] -Description=rss status bar block -PartOf=graphical-session.target -After=graphical-session.target - -[Service] -Type=oneshot -BusName=rs.i3status -ExecStart=-%h/.local/bin/rss-status - -[Install] -WantedBy=graphical-session.target diff --git a/i3status/.config/systemd/user/rss-status.timer b/i3status/.config/systemd/user/rss-status.timer deleted file mode 100644 index a0b3177..0000000 --- a/i3status/.config/systemd/user/rss-status.timer +++ /dev/null @@ -1,10 +0,0 @@ -[Unit] -Description=rss status bar block - -[Timer] -OnCalendar=hourly -AccuracySec=15m -Persistent=true - -[Install] -WantedBy=timers.target diff --git a/i3status/.local/bin/rss-status b/i3status/.local/bin/rss-status deleted file mode 100755 index a404a3b..0000000 --- a/i3status/.local/bin/rss-status +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -# shellcheck disable=SC2046 - -set -e - -sleep 1 - -if [ $# -eq 0 ]; then - set -- $(curl -sH "X-Auth-Token: ${MINIFLUX_TOKEN:-$(pass miniflux.tobyvin.dev/i3status)}" https://miniflux.tobyvin.dev/v1/feeds/counters | - jq -r '[.unreads[]] | add // 0 | [., (if . > 50 then "critical" elif . > 0 then "warning" else "idle" end), "rss"] | .[]') -fi - -busctl --user call rs.i3status /rss rs.i3status.custom SetText ss "${1:-0}" "${1:-0}" -busctl --user call rs.i3status /rss rs.i3status.custom SetState s "${2:-idle}" -busctl --user call rs.i3status /rss rs.i3status.custom SetIcon s "${3:-rss}" @@ -1,9 +1,9 @@ #!/bin/sh -# shellcheck disable=SC2035,SC2086 set -e CDPATH='' cd -- "$(dirname -- "$0")" || exit +TARGET=${TARGET:-$HOME} if [ -r .installed ]; then read -r DOTFILES_INSTALLED <.installed @@ -12,14 +12,12 @@ fi printf "%s: Removing bad links\n" "$0" { - git log --name-only --no-renames --diff-filter=D --format=format: $DOTFILES_INSTALLED HEAD + git log --name-only --no-renames --diff-filter=D --format=format: "$DOTFILES_INSTALLED" HEAD git diff --name-only --no-renames --diff-filter=D HEAD - if [ -f .untracked ]; then - cat .untracked - fi -} | sort -u | sed -n 's/^[^/]\+\//..\//p' | while read -r f; do - if [ -L "$f" ] && [ ! -e "$f" ]; then - rm -v "$f" + cat .untracked 2>/dev/null +} | sort -u | while read -r f; do + if [ -L "$TARGET/${f#*/}" ] && [ ! -e "$TARGET/${f#*/}" ]; then + rm -v "$TARGET/${f#*/}" fi done @@ -29,6 +27,7 @@ if [ ! -s .untracked ]; then fi printf "%s: Stowing packages\n" "$0" +# shellcheck disable=SC2086 stow "$@" ${1:-*}/ printf "%s: Installing packages\n" "$0" diff --git a/lazygit/.config/lazygit/config.yml b/lazygit/.config/lazygit/config.yml deleted file mode 100644 index 766650b..0000000 --- a/lazygit/.config/lazygit/config.yml +++ /dev/null @@ -1,4 +0,0 @@ -git: - paging: - colorArg: always - useConfig: true
\ No newline at end of file diff --git a/notmuch/.local/bin/notmuch-notify b/notmuch/.local/lib/notmuch/notmuch-notify index bc93f09..bc93f09 100755 --- a/notmuch/.local/bin/notmuch-notify +++ b/notmuch/.local/lib/notmuch/notmuch-notify diff --git a/nvim/.local/bin/pkgbuildcheck b/nvim/.local/lib/nvim/pkgbuildcheck index 090d8e1..090d8e1 100755 --- a/nvim/.local/bin/pkgbuildcheck +++ b/nvim/.local/lib/nvim/pkgbuildcheck diff --git a/cargo/.config/profile.d/20-cargo.sh b/sh/.config/profile.d/20-cargo.sh index f0c4dbd..f0c4dbd 100644 --- a/cargo/.config/profile.d/20-cargo.sh +++ b/sh/.config/profile.d/20-cargo.sh diff --git a/docker/.config/profile.d/20-docker.sh b/sh/.config/profile.d/20-docker.sh index cd60889..cd60889 100644 --- a/docker/.config/profile.d/20-docker.sh +++ b/sh/.config/profile.d/20-docker.sh diff --git a/sh/.local/bin/ff b/sh/.local/bin/ff deleted file mode 100755 index a3476ab..0000000 --- a/sh/.local/bin/ff +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -## -# Interactive search. -# Usage: `ff` or `ff <PATH>`. -# - -SEARCH_PATH=$(printf %s "$1" | sed 's|/$||') -RG_DEFAULT_COMMAND="rga -i -l --hidden --no-ignore-vcs -e {q} $SEARCH_PATH | sed 's|^$SEARCH_PATH/||'" - -selected=$( - FZF_DEFAULT_COMMAND="rga --files $SEARCH_PATH | sed 's|^$SEARCH_PATH/||'" \ - fzf-tmux "$FZF_TMUX_OPTS" -- -m -e --ansi --disabled --header-first \ - --header "$(printf %s "$SEARCH_PATH" | sed "s|^$HOME|~|")/" \ - --bind "change:reload:$RG_DEFAULT_COMMAND || true" \ - --preview-window='right,66%,<80(up,50%,border-bottom)' \ - --preview "rga -i --pretty --context 3 -e {q} $SEARCH_PATH/{}" | cut -d":" -f1,2 -) - -[ -n "$selected" ] && $EDITOR "$selected" diff --git a/sh/.local/bin/passmenu b/sh/.local/bin/passmenu new file mode 100755 index 0000000..d99949c --- /dev/null +++ b/sh/.local/bin/passmenu @@ -0,0 +1,14 @@ +#!/bin/sh + +if [ ! -t 0 ]; then + set -- "$@" "$(cat)" +elif [ $# -eq 0 ]; then + for passwd in "$PASSWORD_STORE_DIR"/**/*.gpg; do + passwd="${passwd#"$PASSWORD_STORE_DIR"/}" + printf '%s\n' "${passwd%.gpg}" + done + exit 0 +fi + +# shellcheck disable=SC2068 +pass show $@ | head -n1 diff --git a/sway/.config/sway/config b/sway/.config/sway/config index 126f949..e6d38d0 100644 --- a/sway/.config/sway/config +++ b/sway/.config/sway/config @@ -5,8 +5,10 @@ set $down j set $up k set $right l -set $menu wmenu -i -f 'monospace 12' -n$base06 -N$base00 -S$base00 -s$base09 -m$base06 -M$base0C -set $passmenu find $PASSWORD_STORE_DIR/ -name '*.gpg' -printf '%P\n' | sed "s/\.gpg$//" | sort | $menu | xargs -r pass show +set $menu wmenu + +set $out1 - +set $out2 - set $ws01 1 set $ws02 2 @@ -51,16 +53,14 @@ output * bg ~/.local/share/gruvbox/sway.png fill for_window [shell=".*"] inhibit_idle fullscreen for_window [app_id="pavucontrol" title="^Volume Control$"] floating enable -for_window [app_id="^$" title="^$"] { - floating enable - move position cursor -} +for_window [app_id="^$" title="^$"] floating enable, move position cursor for_window [class="^[Ss]team$"] floating enable for_window [class="^[Ss]team$" title="^Steam$"] floating disable for_window [class="^[Ss]team$" title="^Sign in to Steam$"] move to scratchpad for_window [app_id="firefox" title="Firefox — Sharing Indicator"] kill for_window [app_id="deno" title="^Peek preview$"] resize set width 980px for_window [app_id="discord" title="^Discord Updater$"] move to scratchpad +for_window [app_id="zoom" title="^(About|Settings)$"] floating enable assign [app_id="" title="^Streamlink Twitch GUI$"] $ws06 assign [app_id="mpv"] $ws06 @@ -88,23 +88,23 @@ bindsym $mod+Shift+c reload bindsym $mod+Shift+Escape exec swaynag -t warning -m 'Exit sway?' -B 'Yes' 'swaymsg exit' bindsym $mod+Delete exec loginctl lock-session bindsym $mod+Escape exec powermenu | $menu -l 6 | powermenu -bindsym Pause exec swaymsg "output * power toggle" +bindsym Pause exec swaymsg "output - power toggle" bindsym $mod+return exec $TERMINAL -bindsym $mod+Shift+return exec sshr --resolve --port 22 --scan 0.0.0.0/24 | $menu | xargs -0r sway_ssh +bindsym $mod+Shift+return exec sway-ssh | $menu | sway-ssh bindsym $mod+w exec $BROWSER bindsym Print exec slurp | grim -g - - | wl-copy --type image/png bindsym $mod+Print exec /usr/share/sway/scripts/grimshot --notify save area bindsym $mod+space exec j4-dmenu-desktop --dmenu="$menu" --term=$TERMINAL -bindsym $mod+shift+space exec wmenu_path | $menu | xargs swaymsg exec -- +bindsym $mod+shift+space exec wmenu-run | $menu | xargs swaymsg exec -- bindsym $mod+v exec (cliphist list | $menu -l 10 || (cliphist list | head -n1)) | cliphist decode | wl-copy bindsym $mod+Shift+v exec cliphist list | $menu -l 10 | cliphist delete -bindsym $mod+p exec $passmenu -c -bindsym $mod+Shift+p exec $passmenu | wtype - +bindsym $mod+p exec passmenu | $menu | passmenu | wl-copy -o +bindsym $mod+Shift+p exec passmenu | $menu | passmenu | wtype - bindsym $mod+y exec yubikey-oath-dmenu --notify --clipboard --menu-cmd "$menu -l 10" bindsym $mod+Shift+y exec yubikey-oath-dmenu --notify --type --menu-cmd "$menu -l 10" @@ -230,7 +230,6 @@ bar { include /etc/sway/config.d/* exec_always { - ~/.local/bin/rss-status import-gsettings systemctl --user start sway-session.target } diff --git a/sway/.config/sway/config.d/50-zoom.conf b/sway/.config/sway/config.d/50-zoom.conf deleted file mode 100644 index 6339b16..0000000 --- a/sway/.config/sway/config.d/50-zoom.conf +++ /dev/null @@ -1,16 +0,0 @@ -# ~/.config/sway/config.d/zoom.us.conf -# -# Zoom Meeting App -# -# Default for all windows is non-floating. -# - -# For pop up notification windows that don't use notifications api -for_window [app_id="zoom" title="^zoom$"] border none, floating enable - -# For specific Zoom windows -for_window [app_id="zoom" title="^(Zoom|About)$"] border pixel, floating enable -for_window [app_id="zoom" title="Settings"] floating enable, floating_minimum_size 960 x 700 - -# Open Zoom Meeting windows on a new workspace (a bit hacky) -for_window [app_id="zoom" title="Zoom Meeting(.*)?"] workspace next_on_output --create, move container to workspace current, floating disable, inhibit_idle open diff --git a/sway/.config/zsh/.zshrc.d/90-wmenu.zsh b/sway/.config/zsh/.zshrc.d/90-wmenu.zsh deleted file mode 100644 index 66d748b..0000000 --- a/sway/.config/zsh/.zshrc.d/90-wmenu.zsh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/zsh - -alias wmenu="wmenu -i -f 'monospace 12' -n$BASE16_COLOR_06_HEX -N$BASE16_COLOR_00_HEX -S$BASE16_COLOR_00_HEX -s$BASE16_COLOR_09_HEX -m$BASE16_COLOR_06_HEX -M$BASE16_COLOR_0C_HEX" diff --git a/sway/.local/bin/sway-ssh b/sway/.local/bin/sway-ssh new file mode 100755 index 0000000..4e99fdd --- /dev/null +++ b/sway/.local/bin/sway-ssh @@ -0,0 +1,10 @@ +#!/bin/sh + +if [ ! -t 0 ]; then + set -- "$@" "$(cat)" +elif [ $# -eq 0 ]; then + sshr --resolve --port 22 --scan 0.0.0.0/24 +fi + +# shellcheck disable=SC2068 +swaymsg exec -- "$TERMINAL" -e ssh $@ -t -- zsh -l -c '\"tmux new -A\"' diff --git a/sway/.local/bin/sway_ssh b/sway/.local/bin/sway_ssh deleted file mode 100755 index 462dd95..0000000 --- a/sway/.local/bin/sway_ssh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -# shellcheck disable=SC2068 - -swaymsg exec -- "$TERMINAL" -e ssh $@ -t -- zsh -l -c '\"tmux new -A\"' diff --git a/sway/.local/bin/wmenu b/sway/.local/bin/wmenu new file mode 100755 index 0000000..9840721 --- /dev/null +++ b/sway/.local/bin/wmenu @@ -0,0 +1,16 @@ +#!/bin/sh +# shellcheck disable=SC2068 + +base00="${BASE16_COLOR_06_HEX:-#1d2021}" +base06="${BASE16_COLOR_00_HEX:-#ebdbb2}" +base09="${BASE16_COLOR_09_HEX:-#fe8019}" +base0C="${BASE16_COLOR_0C_HEX:-#8ec07c}" + +command -p wmenu -i -f 'monospace 12' \ + -n"$base06" \ + -N"$base00" \ + -S"$base00" \ + -s"$base09" \ + -m"$base06" \ + -M"$base0C" \ + $@ diff --git a/sway/.local/bin/wmenu_path b/sway/.local/bin/wmenu-run index 2cda132..2cda132 100755 --- a/sway/.local/bin/wmenu_path +++ b/sway/.local/bin/wmenu-run diff --git a/sway/.local/bin/import-gsettings b/sway/.local/lib/sway/import-gsettings index 93cd75b..93cd75b 100755 --- a/sway/.local/bin/import-gsettings +++ b/sway/.local/lib/sway/import-gsettings diff --git a/tiny/.config/tiny/config.yml b/tiny/.config/tiny/config.yml deleted file mode 100644 index 1af3419..0000000 --- a/tiny/.config/tiny/config.yml +++ /dev/null @@ -1,147 +0,0 @@ -log_dir: "/home/tobyv/.local/state/tiny/logs" - -defaults: - nicks: [tobyvin] - realname: Toby Vincent - -servers: - - addr: irc.libera.chat - port: 6697 - tls: true - nicks: [tobyvin] - realname: Toby Vincent - sasl: - username: tobyvin - password: - command: "pass show irc.libera.chat/tobyvin" - join: - - "##rust" - - "#sr.ht" - - "#sr.ht.watercooler" - -colors: - nick: [1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14] - - clear: - fg: default - bg: default - - user_msg: - fg: black - bg: default - - err_msg: - fg: black - bg: maroon - attrs: [bold] - - topic: - fg: cyan - bg: default - attrs: [bold] - - cursor: - fg: black - bg: default - - join: - fg: lime - bg: default - attrs: [bold] - - part: - fg: maroon - bg: default - attrs: [bold] - - nick_change: - fg: lime - bg: default - attrs: [bold] - - faded: - fg: 242 - bg: default - - exit_dialogue: - fg: default - bg: navy - - highlight: - fg: red - bg: default - attrs: [bold] - - completion: - fg: 84 - bg: default - - timestamp: - fg: 242 - bg: default - - tab_active: - fg: default - bg: default - attrs: [bold] - - tab_normal: - fg: gray - bg: default - - tab_new_msg: - fg: purple - bg: default - - tab_highlight: - fg: red - bg: default - attrs: [bold] - -key_map: - ctrl_c: exit - ctrl_x: run_editor - - alt_1: - tab_goto: 1 - alt_2: - tab_goto: 2 - alt_3: - tab_goto: 3 - alt_4: - tab_goto: 4 - alt_5: - tab_goto: 5 - alt_6: - tab_goto: 6 - alt_7: - tab_goto: 7 - alt_8: - tab_goto: 8 - alt_9: - tab_goto: 9 - alt_0: - tab_goto: 0 - ctrl_n: tab_next - ctrl_p: tab_prev - - shift_up: messages_scroll_up - shift_down: messages_scroll_down - ctrl_d: messages_page_down - ctrl_u: messages_page_up - pgup: messages_page_up - pgdown: messages_page_down - home: messages_scroll_top - end: messages_scroll_bottom - - left: input_move_curs_left - right: input_move_curs_right - ctrl_a: input_move_curs_start - ctrl_e: input_move_curs_end - ctrl_left: input_move_word_left - ctrl_right: input_move_word_right - ctrl_k: input_delete_to_end - ctrl_w: input_delete_prev_word - backspace: input_delete_prev_char - del: input_delete_next_char - tab: input_auto_complete diff --git a/tmux/.config/tmux/ssh.conf b/tmux/.config/tmux/ssh.conf deleted file mode 100644 index 15f1c97..0000000 --- a/tmux/.config/tmux/ssh.conf +++ /dev/null @@ -1,9 +0,0 @@ -# vim: ft=tmux - -set-option -g remain-on-exit on -set-option -g prefix C-b -set-option -g status off -set-option -g set-clipboard on - -set-hook -g pane-died "detach -E 'tmux -L ssh kill-pane; tmux attach'" - diff --git a/tmux/.config/tmux/tmux.conf b/tmux/.config/tmux/tmux.conf index 26ef703..c95961a 100644 --- a/tmux/.config/tmux/tmux.conf +++ b/tmux/.config/tmux/tmux.conf @@ -21,8 +21,6 @@ set -g history-limit 10000 bind -N "Last session" A switchc -l bind -N "Clock" T clock-mode -bind -N "Host" s run ~/.local/bin/tmux-sshr -bind -N "Last host" S run "~/.local/bin/tmux-sshr -1" bind -N "Session" f run ~/.local/bin/tmux-projectr bind -N "Window" t neww bind -N "Switch" w choose-tree -Zws -F \ @@ -69,7 +67,3 @@ set -g status-left-length 30 set -g status-left-style "fg=#3c3836,#{?client_prefix,bg=#fe8019,bg=#a89984}" set -g status-left " #{s|$HOME|~|:session_path} " set -wg window-status-current-style bg="#3c3836",fg="#ebdbb2" - -%if #{m:*ssh,#{socket_path}} -source "$XDG_CONFIG_HOME/tmux/ssh.conf" -%endif diff --git a/tmux/.local/bin/timestamp.sh b/tmux/.local/bin/timestamp.sh deleted file mode 100755 index 5c60d02..0000000 --- a/tmux/.local/bin/timestamp.sh +++ /dev/null @@ -1,167 +0,0 @@ -#!/bin/sh -# shellcheck disable=2046 - -SCRIPT="$(basename "$0")" - -long='type:,git,sessions::,format:,verbose,help' -short='t:gs::f:vh' - -if ! opts="$(getopt -o $short -l $long -n "$SCRIPT" -- "$@")"; then - exit 1 -fi - -eval set -- "$opts" - -help() { - cat <<-EOF - $SCRIPT - Toby Vincent <tobyv@tobyvin.dev> - - $SCRIPT - Get a timestamp for a given directory using multiple activity sources. By default, uses stat. - - USAGE: - $SCRIPT [OPTION ...] <PATH> [PATH ...] - - OPTIONS: - -t, --type=<file|ssh> Specify type of input - -g, --git Check last git commit for timestamp - -s, --sessions=[PATH] Check nvim sessions directory for existing session files. - (DEFAULT="$XDG_DATA_HOME/nvim/sessions") - - -f, --format=<FORMAT> Format string for output. '{}' will be replaced directory - timestamp and '{1}' will be replaced directory path - - -v, --verbose Increase verbosity - -h, --help Show this help - EOF -} - -say() { - printf "%s: %s\n" "$SCRIPT" "$@" -} - -say_verbose() { - if [ "$verbose" -gt "0" ]; then - say "$@" - fi -} - -say_err() { - say "$@" >&2 -} - -err() { - err_dir="$1" - shift - say_err "cannot timestamp '$err_dir': $*" - exit 1 -} -err_help() { - help - err "$*" -} - -verbose=0 -type='' -git=false -sessions=false -sessions_dir="$XDG_DATA_HOME/nvim/sessions" -histfile="${HISTFILE:-$XDG_STATE_HOME/zsh/history}" -format="{}" -while true; do - case "$1" in - -h | --help) - help - exit 0 - ;; - -v | --verbose) - verbose=$((verbose + 1)) - shift - ;; - -t | --type) - case "$2" in - s*) type="ssh" ;; - f*) type="file" ;; - d*) type="directory" ;; - *) type="$2" ;; - esac - shift 2 - ;; - -e | --git) - git=true - shift - ;; - -s | --sessions) - sessions=true - if [ -n "$2" ]; then - sessions_dir="$2" - fi - shift 2 - ;; - -f | --format) - format="$2" - shift 2 - ;; - --) - shift - break - ;; - *) - err_help "Invalid argument: $1" - ;; - esac -done - -if [ "$#" -eq 0 ]; then - IFS=' -' - set -o noglob - set -- $(cat) -fi - -while [ $# -gt 0 ]; do - ts_max="0" - case "$type" in - ssh) - if ts=$(grep -P "^: \d+:\d;ssh.* $1" "$histfile" | tail -1 | cut -d: -f2 | sed 's/^\s*//'); then - say_verbose "ssh '$1': $ts" - if [ -n "$ts" ] && [ "$ts" -gt "$ts_max" ]; then - ts_max=$ts - fi - fi - ;; - file | directory) - if [ ! -d "$1" ]; then - say_err "$1" "No such file or directory" - shift - continue - fi - - if ts=$(stat -c "%Y" "$1"); then - say_verbose "stat '$1': $ts" - if [ "$ts" -gt "$ts_max" ]; then - ts_max=$ts - fi - fi - - if $git && ts=$(git -C "$1" --no-pager log -1 --all --format="%at" 2>/dev/null); then - say_verbose "git '$1': $ts" - if [ "$ts" -gt "$ts_max" ]; then - ts_max=$ts - fi - fi - - pattern=$(printf %s\\n "$1" | sed 's|/|.{1,2}|g') - if $sessions && ts=$(fd "$pattern" "$sessions_dir" -1 --type=f --max-depth=1 -x stat -c "%Y" {} 2>/dev/null); then - say_verbose "session '$1': $ts" - if [ "$ts" -gt "$ts_max" ]; then - ts_max=$ts - fi - fi - ;; - esac - - printf %s\\n "$format" | sed "s|{}|$ts_max|g" | sed "s|{1}|$1|g" - shift -done diff --git a/tmux/.local/bin/tmux-sshr b/tmux/.local/bin/tmux-sshr deleted file mode 100755 index b206906..0000000 --- a/tmux/.local/bin/tmux-sshr +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/sh - -if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then - tmux_sock=$(tmux display -p "#{socket_path}") - tmux -S "${tmux_sock}.control" run-shell "$(basename "$0") $*" - exit 0 -fi - -HOST=$(tmux display -p '#h' 2>/dev/null) -ATTACHED=$(tmux display -p "#{?#{m:*ssh,#{socket_path}},#{s/_/./:session_name},#{host}}") - -sessions() { - { - tmux -L ssh ls -F '#{?session_last_attached,#{session_last_attached},#{session_created}}:#{s/_/./:session_name}' - tmux ls -F '#{?session_last_attached,#{session_last_attached},#{session_created}}:#{host}' - } 2>/dev/null | sort -u | cut -d':' -f2 -} - -if [ "$#" -eq 0 ]; then - set -- "$( - sessions | sshr --resolve --port 22 --scan 0.0.0.0/24 --exclude "$ATTACHED" --include - | - fzf-tmux -p20%,20% -- --print-query | - tail -1 - )" -elif [ "$1" = "-1" ] 2>/dev/null; then - set -- "$(sessions | sed "/$ATTACHED/d" | head -n1)" -fi - -if [ -z "$1" ]; then - exit 0 -fi - -while read -r k v; do - case "$k" in - "hostname") - hostname=$v - session=$(printf '%s' "$v" | tr '.' '_') - break - ;; - esac -done <<-EOF - $(ssh -G "$@") -EOF - -if [ "${hostname##"$HOST"}" != "$hostname" ]; then - tmux detach -E 'tmux new -A' -else - if ! tmux -L ssh has-session -t "$session" 2>/dev/null; then - tmux -L ssh new-session -ds "$session" -- \ - ssh -t "$@" \ - -R "/tmp/tmux-${HOST}.control:/tmp/tmux-%i/ssh" \ - -- "zsh -l -c 'tmux -S /tmp/tmux-${HOST} new -A'" - fi - - if [ -z "$TMUX" ]; then - tmux -L ssh attach -t "$session" - else - tmux detach -E "tmux -L ssh attach -t $session" - fi - - exit 0 -fi diff --git a/tmux/.local/bin/tmux-windowizer b/tmux/.local/bin/tmux-windowizer deleted file mode 100755 index 81509ae..0000000 --- a/tmux/.local/bin/tmux-windowizer +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -branch_name=$(basename "$1") -session_name=$(tmux display-message -p "#S") -clean_name=$(echo "$branch_name" | tr "./" "__") -target="$session_name:$clean_name" - -if ! tmux has-session -t "$target" 2>/dev/null; then - tmux neww -dn "$clean_name" -fi - -shift -tmux send-keys -t "$target" "$* -" diff --git a/wezterm/.config/wezterm/wezterm.lua b/wezterm/.config/wezterm/wezterm.lua deleted file mode 100644 index 84c908a..0000000 --- a/wezterm/.config/wezterm/wezterm.lua +++ /dev/null @@ -1,37 +0,0 @@ -local wezterm = require("wezterm") - -if wezterm.target_triple == "x86_64-pc-windows-msvc" then - local is_win = true -end - -local config = { - default_prog = { - "/usr/bin/zsh", - "-l", - "-c", - "tmux new -As home", - }, - - enable_tab_bar = false, - color_scheme = "Gruvbox dark, hard (base16)", - window_padding = { - left = 0, - right = 0, - top = 0, - bottom = 0, - }, - - window_background_opacity = 0.9, - font = wezterm.font_with_fallback({ "FiraCode Nerd Font", "FireCodeNF" }), - font_size = 11, - - -- disable_default_key_bindings = true, - keys = { - { key = "-", mods = "CTRL", action = "DecreaseFontSize" }, - { key = "=", mods = "CTRL", action = "IncreaseFontSize" }, - }, - - alternate_buffer_wheel_scroll_speed = 1, -} - -return config diff --git a/wired/.config/systemd/user/wired.service b/wired/.config/systemd/user/wired.service deleted file mode 100644 index e219413..0000000 --- a/wired/.config/systemd/user/wired.service +++ /dev/null @@ -1,11 +0,0 @@ -[Unit] -Description=Wired Notification Daemon -PartOf=graphical-session.target - -[Service] -Type=dbus -BusName=org.freedesktop.Notifications -ExecStart=/usr/bin/wired - -[Install] -WantedBy=graphical-session.target diff --git a/wired/.config/wired/wired.ron b/wired/.config/wired/wired.ron deleted file mode 100644 index 59b8a4d..0000000 --- a/wired/.config/wired/wired.ron +++ /dev/null @@ -1,172 +0,0 @@ -( - // Maximum number of notifications to show at any one time. - // A value of 0 means that there is no limit. - max_notifications: 0, - - // The default timeout, in miliseconds, for notifications that don't have an initial timeout set. - // 1000ms = 1s. - timeout: 10000, - - // `poll_interval` decides decides how often (in milliseconds) Wired checks for new notifications, events, - // draws notifications (if necessary), etc. - // Note that when no notifications are present, Wired always polls at 500ms. - // 16ms ~= 60hz / 7ms ~= 144hz. - poll_interval: 16, - - // Wired will pause notifications if you are idle (no mouse or keyboard input) for longer than - // `idle_threshold` seconds. - // Note that notifications will not be automatically unpaused on wake, and will need to be manually - // cleared, unless `unpause_on_input` is set to true. - // Also note that no distinction is made between manually paused and idle paused notifications. - // If `idle_threshold` is not specified, the behavior will be disabled entirely. - //idle_threshold: 3600, - - // Notifications will spawn paused, and have to be manually unpaused or cleared by the user, - // unless `unpause_on_input` is also set. - //notifications_spawn_paused: false, - - // Unpause notifications when we receive any input after being idle for longer than 1 second. - // Note that no distinction is made between manually paused notifications and idle paused/spawned notifications. - //unpause_on_input: false, - - // Enable/disable replacement functionality. - // If this is disabled, replacement requests will just send a new notification. - // E.g., with replacing_enabled: true, Pidgin will only show the latest message from each contact, - // instead of sending a new one for each message. - // Default: true - //replacing_enabled: true, - - // Whether a notification should reset its timeout when it is replaced. - // No effect if replacing_enabled is set to false. - // Default: false - //replacing_resets_timeout: false, - - // Some apps/programs close notifications on their own by sending a request to dbus. - // Sometimes this is not desired. - // Default: true - //closing_enabled: true, - - // How many notifications are kept in history. - // Each notification is roughly 256 bytes (excluding buffers!), so there's some math to do here. - // Default: 10 - //history_length: 10, - - // When a `NotificationBlock` has monitorr: -1 (i.e. should follow active monitor), then what input - // should we use to determine the active monitor? - // Options: Mouse, Window - // Default: Mouse - //focus_follows: Mouse, - - // Enable printing notification data to a file. - // Useful for scripting purposes. - // The data is written as JSON. - // Default: None - //print_to_file: "/tmp/wired.log", - - // Minimum window width and height. This is used to create the base rect that the notification - // grows within. - // The notification window will never be smaller than this. - // A value of 1 means that the window will generally always resize with notification, unless - // you have a 1x1 pixel notification... - // Generally, you shouldn't need to set this. - //min_window_width: 1, - //min_window_height: 1, - - // Enable/disable debug rendering. - debug: false, - debug_color: Color(r: 0.0, g: 1.0, b: 0.0, a: 1.0), // Primary color for debug rectangles. - debug_color_alt: Color(r: 1.0, g: 0.0, b: 0.0, a: 1.0), // Secondary color for debug rectangles. - - layout_blocks: [ - // Layout 1, when an image is present. - ( - name: "root", - parent: "", - hook: Hook(parent_anchor: TR, self_anchor: TR), - offset: Vec2(x: -7.0, y: 7.0), - //render_criteria: [HintImage], - // https://github.com/Toqozz/wired-notify/wiki/NotificationBlock - params: NotificationBlock(( - monitor: 0, - border_width: 3.0, - border_rounding: 3.0, - //background_color: Color(r: 0.15686, g: 0.15686, b: 0.15686, a: 1.0), - background_color: Color(hex: "#282828"), - border_color: Color(hex: "#ebdbb2"), - border_color_low: Color(hex: "#282828"), - border_color_critical: Color(hex: "#fb4934"), - border_color_paused: Color(hex: "#fabd2f"), - - gap: Vec2(x: 0.0, y: 8.0), - notification_hook: Hook(parent_anchor: BR, self_anchor: TR), - )), - ), - - ( - name: "image", - parent: "root", - hook: Hook(parent_anchor: TL, self_anchor: TL), - offset: Vec2(x: 0.0, y: 0.0), - // https://github.com/Toqozz/wired-notify/wiki/ImageBlock - params: ImageBlock(( - image_type: Hint, - // We actually want 4px padding, but the border is 3px. - padding: Padding(left: 7.0, right: 0.0, top: 7.0, bottom: 7.0), - rounding: 3.0, - scale_width: 48, - scale_height: 48, - filter_mode: Lanczos3, - )), - ), - - ( - name: "summary", - parent: "image", - hook: Hook(parent_anchor: MR, self_anchor: BL), - offset: Vec2(x: 0.0, y: 0.0), - // https://github.com/Toqozz/wired-notify/wiki/TextBlock - params: TextBlock(( - text: "%s", - font: "Arial Bold 11", - ellipsize: Middle, - color: Color(hex: "#ebdbb2"), - color_hovered: Color(hex: "#fbf1c7"), - padding: Padding(left: 7.0, right: 7.0, top: 7.0, bottom: 0.0), - dimensions: (width: (min: 50, max: 150), height: (min: 0, max: 0)), - )), - ), - - ( - name: "body", - parent: "summary", - hook: Hook(parent_anchor: BL, self_anchor: TL), - offset: Vec2(x: 0.0, y: -3.0), - // https://github.com/Toqozz/wired-notify/wiki/ScrollingTextBlock - params: ScrollingTextBlock(( - text: "%b", - font: "Arial 11", - color: Color(hex: "#ebdbb2"), - color_hovered: Color(hex: "#fbf1c7"), - padding: Padding(left: 7.0, right: 7.0, top: 3.0, bottom: 7.0), - width: (min: 150, max: 250), - scroll_speed: 0.1, - lhs_dist: 35.0, - rhs_dist: 35.0, - scroll_t: 1.0, - )), - ), - ], - - // https://github.com/Toqozz/wired-notify/wiki/Shortcuts - shortcuts: ShortcutsConfig ( - notification_interact: 1, - notification_close: 2, - // notification_closeall: 99, - // notification_pause: 99, - - notification_action1: 3, - // notification_action2: 99, - // notification_action3: 99, - // notification_action4: 99, - ), -) diff --git a/yubikey.md b/yubikey.md deleted file mode 100644 index 8e16312..0000000 --- a/yubikey.md +++ /dev/null @@ -1,93 +0,0 @@ -# WSL2 YubiKey setup - -## UPDATE - -This is no longer necessary due to [usbipd-win](https://github.com/dorssel/usbipd-win) - -I am now using [usbipd-win](https://github.com/dorssel/usbipd-win) to mount the yubikey directly into WSL2, and using [distod](https://github.com/nullpo-head/wsl-distrod) (adds bottled systemd to wsl) to start services as I normally would in linux - -- [WSL2 YubiKey Setup](#wsl2-yubikey-setup) - - [Intro](#Intro) - - [SSH Agent](#ssh-agent) - - [In Windows](#in-windows) - - [VS Code](#vs-code) - - [In WSL2](#in-wsl2) - -## Intro - -The following two sections are the result of a painstaking amount of google searches and GitHub issues followed by troubleshooting, tears, and tea breaks. Well, more accurately, the 20% came from the aforementioned alliteration. The 80% came from the following two guides. - -- [drduh/YubiKey-Guide](https://github.com/drduh/YubiKey-Guide) -- [The ultimate guide to YubiKey on WSL2](https://dev.to/dzerycz/series/11353) -- [Forwarding gpg-agent to a remote system over SSH](https://wiki.gnupg.org/AgentForwarding) - -The former is an incredibly detailed guide to setting up GPG keys using YubiKey as a smart card. The amount of information drduh has organized in that repository in immense, so I urge you to go star it if you find anything in this section helpful, as he deserves at least that much. - -The second guide was used more as a reference/verification source for the first guide but none-the-less I found it to be helpful, so I figured I would include it here. - -While I went down this rock filled rabbit hole for the purpose of getting my YubiKey working (seamlessly) in WSL2, the majority of this should be helpful even if you don't use a security key, as its specificity deals with getting the respective agents/sockets communicating between WSL2 and Windows. - -<!-- TODO ssh/git config to use gpnupg --> -<!-- TODO setting up remote gpg/ssh forwarding --> - -## Windows - -### SSH Agent - -Install [gpg-bridge](https://github.com/BusyJay/gpg-bridge) using cargo - -```powershell -# Powershell -cargo install -f --git https://github.com/busyjay/gpg-bridge -``` - -Set gpg-bridge to run on startup - -```powershell -# Powershell -$cmdl = "$HOME\.cargo\bin\gpg-bridge.exe gpg-bridge-ssh --extra 127.0.0.1:4321 --ssh \\.\pipe\gpg-bridge-ssh --detach" -$key = New-Item -Path 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run' -Force -New-ItemProperty -Path $key.PSPath -Name "gpg-bridge" -Value "$cmdl" -``` - -Set SSH_AUTH_SOCK to have ssh use the translated pipe - -```powershell -# Powershell -[System.Environment]::SetEnvironmentVariable('SSH_AUTH_SOCK',"\\.\pipe\gpg-bridge-ssh") -``` - -One-off to run gpg-bridge.exe without restarting - -```powershell -# Powershell -Invoke-Expression "& $cmdl" -``` - -### GPG Agent - -On the windows side the YubiKey is fully accessible, the GPG agent should just work. - -## In WSL2 - -### SSH Agent - -```sh -# Bash - -# Install depends -sudo apt install socat iproute2 - -# Install wsl2-ssh-pageant -destination="$HOME/.ssh/wsl2-ssh-pageant.exe" -curl -sL "https://github.com/BlackReloaded/wsl2-ssh-pageant/releases/latest/download/wsl2-ssh-pageant.exe" -o "$destination" -# wget -O "$destination" "https://github.com/BlackReloaded/wsl2-ssh-pageant/releases/latest/download/wsl2-ssh-pageant.exe" -# Set the executable bit. -chmod +x "$destination" -``` - -### GPG Agent - -The only setup needed for getting the YubiKey working in WSL2 is to source/copy-paste [gpg.sh](wsl/gpg.sh) in your shell profile. - -Along with the initialization code, I wrote a small function the resets all the related agents/sockets. If you do not attempt to access the YubiKey while it is not inserted, in my experience, GPG works great has no issues once reinserting the YubiKey. It is only (inconsistently) when you try to access a YubiKey that you have removed that puts it in a failed state. diff --git a/zk/.config/zk/config.toml b/zk/.config/zk/config.toml deleted file mode 100644 index db5c4c8..0000000 --- a/zk/.config/zk/config.toml +++ /dev/null @@ -1,40 +0,0 @@ -[note] -filename = "{{id}}" -id-charset = "hex" -id-length = 8 -id-case = "lower" - -[extra] -author = "Toby Vincent" - -[format.markdown] -hashtags = true -colon-tags = false -multiword-tags = false - -[tool] -fzf-preview = "bat -p --color always {-1} 2>/dev/null || cat {-1} 2>/dev/null" - -[lsp.diagnostics] -wiki-title = "hint" -dead-link = "error" - -[lsp.completion] -note-label = "{{title-or-path}}" -note-filter-text = "{{title}} {{path}}" -note-detail = "{{filename-stem}}" - -[alias] -ls = "zk list $@" -recent = "zk edit --sort created- --created-after 'last two weeks' --interactive" -log = "zk list --format path --delimiter0 --quiet $@ | xargs -t -0 git log --patch --" -lg = "zk list --format path --delimiter0 --quiet $@ | xargs -t -0 git lg --patch --" -editlast = "zk edit --limit 1 --sort modified- $@" -gen = "neuron gen -o public" -serve = "neuron gen -wS" -conf = '$EDITOR "$ZK_NOTEBOOK_DIR/.zk/config.toml"' -# Print paths separated with colons for the notes found with the given -# arguments. This can be useful to expand a complex search query into a flag -# taking only paths. For example: -# zk list --link-to "`zk path -m potatoe`" -#path = "zk list --quiet --format {{path}} --delimiter , $@" diff --git a/zk/.local/bin/zkf b/zk/.local/bin/zkf deleted file mode 100755 index c33e4f7..0000000 --- a/zk/.local/bin/zkf +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/sh - -if [ "$#" -eq 0 ]; then - set -- "$( - rg '^# (.*)$' "$ZK_NOTEBOOK_DIR" --type=markdown --max-count=1 --vimgrep --replace '$1' \ - --no-line-number --no-column --sort=modified | - fzf-tmux "$FZF_TMUX_OPTS" -- --tac --print-query -d: --with-nth -1 \ - --bind 'focus:transform-header(echo {1})' \ - --preview-window='right,100,<100(up,75%,border-bottom)' \ - --preview="glow -l -w 100 --style dark {1}" | - tail -1 | - cut -d: -f1 - )" -fi - -if [ -z "$1" ]; then - exit 1 -elif [ -f "$1" ]; then - $EDITOR -c "cd $ZK_NOTEBOOK_DIR" "$1" -else - zk new --title="$1" -fi |