├── .editorconfig ├── .gitignore ├── common ├── bash │ └── rc ├── bat │ ├── bat │ ├── config │ └── themes │ │ ├── Catppuccin-frappe.tmTheme │ │ ├── Catppuccin-latte.tmTheme │ │ ├── Catppuccin-macchiato.tmTheme │ │ └── Catppuccin-mocha.tmTheme ├── bin │ ├── ? │ ├── N │ ├── archive │ ├── archupdate │ ├── at │ ├── bp │ ├── check-domain-availability │ ├── check-port │ ├── clip │ ├── clipshot │ ├── copy-git-forge-url │ ├── countdown │ ├── dns │ ├── dns-cleaner │ ├── dns-deleter │ ├── dns-deleter-matching │ ├── dotfiles-clone-and-setup │ ├── dotfiles-init │ ├── dotfiles-link-environments │ ├── dotfiles-make-env │ ├── dotfiles-setup │ ├── dotfiles-setup-for-root │ ├── editscrot │ ├── email-via-mailgun-smtp │ ├── emoji │ ├── ezln │ ├── field │ ├── getip │ ├── git-authors │ ├── gitforge-url.ts │ ├── glancepath │ ├── good-morning │ ├── has_command │ ├── install-firefox-user-chrome-css.fish │ ├── is_wayland │ ├── k8s-yaml-diff │ ├── k8s-yaml-sort │ ├── keyrepeat │ ├── kubeline │ ├── kubfc │ ├── kubfn │ ├── launch │ ├── linewise │ ├── maybe_source_env_file │ ├── nd │ ├── nf │ ├── note │ ├── nsync │ ├── nvimdiff │ ├── open-in-git-forge │ ├── optimize-photo-for-web │ ├── pass-migrate-to-pass-otp │ ├── pipeline │ ├── poll │ ├── pr-for-commit │ ├── remote │ ├── resource-usage │ ├── restartbar │ ├── s │ ├── scn │ ├── screenshot │ ├── script-opts │ ├── scrup │ ├── scwd │ ├── setbg │ ├── simple-otp │ ├── source_if_exists │ ├── startbar │ ├── stopbar │ ├── sw │ ├── tdf │ ├── tenv │ ├── terminal-rendering-test │ ├── termrec │ ├── tls │ ├── tmux-edit-buffer │ ├── tmux-lyte-session │ ├── tmux-save-buffer │ ├── tmux-session-dir │ ├── tmux-session-preview │ ├── tmuxswitcher │ ├── unarchive │ ├── unbackupify │ ├── weather │ ├── work-journal-entry │ └── yamldiff ├── blender │ └── userpref.blend ├── data │ ├── ansi_graphics_codes.tsv │ ├── pipelines │ │ ├── b64 │ │ │ └── transform │ │ ├── base64 │ │ │ └── transform │ │ ├── linewise │ │ │ └── transform │ │ ├── test │ │ │ └── transform │ │ └── xxd │ │ │ └── transform │ └── vt_colors ├── elixir │ └── iex.exs ├── empty-env │ ├── hyprland.d.conf │ └── tmux.d.conf ├── envs ├── firefox │ └── userChrome.d.css ├── git │ └── config ├── gitui │ ├── gitui │ ├── mocha.ron │ └── theme.ron ├── gpg │ └── agent.conf ├── helix │ ├── .gitignore │ ├── config.toml │ ├── helix │ ├── languages.toml │ └── themes │ │ └── custom.toml ├── htop │ └── rc ├── kitty │ ├── kitty │ └── kitty.conf ├── lemonade │ └── config.toml ├── mutt │ └── rc ├── ncmpcpp │ └── config ├── nnn │ ├── .gitignore │ ├── config.fish │ ├── nnn │ └── plugins │ │ └── preview ├── pgcli │ ├── .gitignore │ ├── config │ └── pgcli ├── sc-im │ ├── lua │ │ ├── dice.lua │ │ └── h.lua │ └── scimrc ├── scim │ ├── lua │ │ ├── dice.lua │ │ ├── h.lua │ │ └── lua │ └── rc ├── terminal_colors ├── tig │ └── rc ├── tmux │ └── conf ├── weechat │ ├── .gitignore │ ├── alias.conf │ ├── buflist.conf │ ├── charset.conf │ ├── exec.conf │ ├── fifo.conf │ ├── fset.conf │ ├── guile.conf │ ├── irc.conf │ ├── logger.conf │ ├── logs │ │ └── core.weechat.weechatlog │ ├── lua.conf │ ├── perl.conf │ ├── plugins.conf │ ├── python.conf │ ├── relay.conf │ ├── ruby.conf │ ├── script.conf │ ├── sec.conf │ ├── spell.conf │ ├── tcl.conf │ ├── trigger.conf │ ├── weechat │ ├── weechat.conf │ └── xfer.conf ├── wezterm │ ├── .gitkeep │ ├── catpuccin.lua │ ├── wezterm │ └── wezterm.lua └── zellij │ ├── config.kdl │ ├── config.yaml │ └── zellij ├── host ├── desktop │ ├── bin │ │ ├── minecraft │ │ └── reboot-to-windows │ ├── config │ ├── firefox │ │ └── userChrome.d.css │ ├── fstab │ ├── hyprland.d.conf │ ├── sway │ │ └── config │ └── tmux.d.conf ├── laptop │ ├── bin │ │ └── disable-touchscreen │ ├── hyprland.d.conf │ └── sway │ │ └── config └── layer │ ├── personal │ ├── dotfiles-setup.d.fish │ ├── gitconfig │ ├── tmux-tpm.conf │ └── tmux.d.conf │ └── public-webserver │ ├── caddy │ ├── Caddyfile │ └── browse_template.html │ ├── dotfiles-setup.d.fish │ └── webserver-root │ ├── 404.html │ ├── index.html │ ├── public-files │ └── .gitignore │ └── robots.txt ├── os ├── android │ └── config.d.fish ├── linux │ ├── arch │ │ ├── bootstrap-test.fish │ │ ├── dotfiles-init.d.sh │ │ ├── provision.d │ │ │ ├── 00-AS_ROOT-add-user.bash │ │ │ ├── 10-install-paru.bash │ │ │ ├── 20-install-packages.bash │ │ │ ├── 50-install-tmux-plugins.bash │ │ │ ├── 60-AS_ROOT-vt-colors.bash │ │ │ ├── 70-optional-packages.bash │ │ │ └── optional │ │ │ │ ├── amd-cpu.bash │ │ │ │ ├── amd-gpu.bash │ │ │ │ └── ui-packages.bash │ │ └── provision.sh │ ├── bin │ │ ├── app-launcher │ │ ├── batmon │ │ ├── batteries-combined-wattage │ │ ├── batteries-watts │ │ ├── battplot │ │ ├── begin-inhibit-sway-idle.fish │ │ ├── floating-term │ │ ├── maybe-good-morning │ │ ├── wifi-list │ │ └── wm │ ├── config.d.fish │ ├── debian │ │ └── provisioning │ │ │ ├── create-my-user.bash │ │ │ ├── install-packages.bash │ │ │ └── install-tmux-plugins.bash │ ├── desktop │ │ └── neovimterm.desktop │ ├── dotfiles-setup.d.fish │ ├── eww │ │ ├── eww.scss │ │ └── eww.yuck │ ├── gnome │ │ └── gdm-tap-to-click │ ├── gtk │ │ ├── 2rc │ │ └── 3settings.ini │ ├── hypr │ │ ├── hyprland.conf │ │ └── hyprpaper.conf │ ├── key.map │ ├── libinput │ │ ├── gestures.conf │ │ └── sway-gestures.conf │ ├── mako │ │ └── config │ ├── sway │ │ ├── .gitignore │ │ ├── config │ │ ├── dm-entry │ │ ├── init │ │ ├── lock │ │ └── mimeapps.list │ ├── tmpfiles │ │ └── disable-lid-wakeup │ ├── udev-rules │ │ └── gcadapter │ ├── user-dirs │ ├── vconsole.conf │ └── waybar │ │ ├── config │ │ ├── mocha.css │ │ └── style.css └── macos │ └── config.d.fish ├── readme.md └── todo.md /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | insert_final_newline = true 6 | trim_trailing_whitespace = true 7 | charset = utf-8 8 | indent_style = tab 9 | indent_size = 2 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | *.pid 3 | *.tmp 4 | *.secret 5 | fishd.tmp.* 6 | 7 | /tags 8 | -------------------------------------------------------------------------------- /common/bash/rc: -------------------------------------------------------------------------------- 1 | # return if not running interactively 2 | [[ $- != *i* ]] && return 3 | 4 | command -v fish >/dev/null 2>&1 && grep fish /etc/shells >/dev/null 2>&1 && { 5 | echo "This user is configured to use 'fish' as its primary shell." 6 | echo " You may want to run 'chsh' and set your shell to $(grep fish /etc/shells | head -n1)'." 7 | echo " Once that's done, simply run 'fish'." 8 | echo " You can also try fish temporarily by running 'fish'. No 'chsh' commitment required." 9 | echo " If you're in bash intentionally for some reason, then ignore this message." 10 | } -------------------------------------------------------------------------------- /common/bat/bat: -------------------------------------------------------------------------------- 1 | /home/daniel/.home/.config/lytedev-dotfiles/common/bat -------------------------------------------------------------------------------- /common/bat/config: -------------------------------------------------------------------------------- 1 | --theme="Catppuccin-mocha" -------------------------------------------------------------------------------- /common/bin/?: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | 3 | echo "Keys you never remember:" 4 | echo 5 | echo "C-t fuzzy find a file or directory to insert into your command" 6 | echo "C-g fuzzy find a directory to cd to" 7 | 8 | # https://github.com/lotabout/skim/blob/master/shell/key-bindings.fish 9 | -------------------------------------------------------------------------------- /common/bin/N: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | fn="${1}"; shift; nf "${fn}.md" "$@" -------------------------------------------------------------------------------- /common/bin/archive: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | archive_name="$(basename "${1}").tar.zstd" 4 | tar --zstd -cvf "${archive_name}" "${@}" 5 | echo "Archive created at: ${archive_name} " 6 | -------------------------------------------------------------------------------- /common/bin/archupdate: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | yay -Syu --nodiffmenu --nocleanmenu --noeditmenu 4 | 5 | # TODO: update kernel with a flag? 6 | # yes | pacman -Syu && kexec -l --initrd=/boot/initramfs-linux.img /boot/vmlinuz-linux && kexec -e 7 | -------------------------------------------------------------------------------- /common/bin/at: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | usage() { 4 | echo "at - waits until after the specified datetime" 5 | echo "Usage:" 6 | echo " at && command..." 7 | echo 8 | echo "Examples:" 9 | echo " at 15:00:00 && echo \"it is 3 o'clock\"" 10 | } 11 | 12 | [[ -z "$1" ]] && { echo "Error: No DATE argument provided." >&2; usage; exit 1; } 13 | 14 | d="$(date -d "${@}" +%s)" 15 | while [[ "$d" -ge "$(date +%s)" ]]; do 16 | _dt=$((d - $(date +%s))) 17 | days=$((_dt / 86400)) 18 | echo -ne "\rTime Remaining: ${days}d $(date -u --date @$((_dt)) +%H:%M:%S) "; 19 | sleep 0.1 20 | done 21 | exit 0 -------------------------------------------------------------------------------- /common/bin/bp: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | printf '\e[?2004h' 3 | printf '\e[?2004l' 4 | echo bp off 5 | 6 | -------------------------------------------------------------------------------- /common/bin/check-domain-availability: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # TODO: 4 | # + trap exit signals to cleanup all temp files and cancel all jobs 5 | # + run in batches to prevent spawning way too many processes 6 | # + detect when piping into another application and suppress colors? 7 | # + temp file control (or none for no disk space)? 8 | # + command line options or env vars? 9 | # + --tlds "com,net,org" 10 | # + --max-concurrent-whois-jobs 11 | # + --avail-regex and --timeout-regex 12 | 13 | # suggested usage: ./check_domain | tee /tmp/chkdmn && sort /tmp/chkdmn 14 | 15 | # constants 16 | AVAIL_REGEX='^No match|^NOT FOUND|^Not fo|AVAILABLE|^No Data Fou|has not been regi|No entri' 17 | TIMEOUT_REGEX='^Timeout' 18 | 19 | COLOR_RESET="\x1b[0m" COLOR_GREEN="\x1b[32m" 20 | COLOR_YELLOW="\x1b[33m" 21 | COLOR_RED="\x1b[31m" 22 | 23 | TLDS=( \ 24 | '.com' '.net' '.org' '.eu' '.in' '.it' '.sk' '.ac' '.ae' '.af' '.ag' '.al' \ 25 | '.am' '.as' '.at' '.ax' '.be' '.bi' '.bo' '.by' '.bz' '.cc' '.cd' '.cf' '.cg' \ 26 | '.ch' '.ci' '.cl' '.cm' '.cn' '.co' '.cr' '.cx' '.cz' '.dk' '.dm' '.do' '.ec' \ 27 | '.ee' '.es' '.fi' '.fm' '.fo' '.ga' '.gd' '.gf' '.gg' '.gl' '.gp' '.gq' '.gr' \ 28 | '.gs' '.gt' '.gy' '.hk' '.hm' '.hn' '.ht' '.id' '.im' '.in' '.io' '.ir' '.is' \ 29 | '.je' '.ke' '.kg' '.kz' '.la' '.lc' '.li' '.lt' '.lu' '.lv' '.ly' '.me' '.mg' \ 30 | '.mk' '.ml' '.mn' '.mq' '.ms' '.mu' '.mw' '.mx' '.na' '.ne' '.ng' '.nl' '.nu' \ 31 | '.nz' '.pe' '.ph' '.pk' '.pl' '.pr' '.pt' '.pw' '.qa' '.ro' '.rs' '.ru' '.rw' \ 32 | '.sb' '.sc' '.sd' '.se' '.sh' '.si' '.sl' '.sr' '.st' '.su' '.sx' '.sg' '.tk' \ 33 | '.tl' '.to' '.tv' '.tw' '.ug' '.vc' '.ve' '.vg' '.vn' '.vu' '.ws' \ 34 | ) 35 | 36 | # check dependencies 37 | if command -v whois >/dev/null 2>&1; then 38 | : 39 | else 40 | echo "You need to install whois before proceeding!" 41 | exit 2 42 | fi 43 | 44 | # check arguments 45 | if [ "$#" == "0" ]; then 46 | echo "You need to supply at least one argument!" 47 | exit 1 48 | fi 49 | 50 | # main function 51 | check_domain() { 52 | local tmp 53 | local domain 54 | 55 | if [ "$#" == "0" ]; then 56 | echo "No domain specified." 57 | return 58 | fi 59 | 60 | domain="$1" 61 | 62 | # create a unique temporary file 63 | tmp=$(mktemp "${domain}_XXX") 64 | 65 | # dump whois output into temp file 66 | whois "$domain" > "$tmp" 2>&1 67 | 68 | # check contents and output appropriately 69 | if grep -E -q "$AVAIL_REGEX" "$tmp" > /dev/null 2>&1; then 70 | echo -e "$COLOR_GREEN$domain / probably available$COLOR_RESET" 71 | elif grep -E -q "$TIMEOUT_REGEX" "$tmp" > /dev/null 2>&1; then 72 | echo -e "$COLOR_YELLOW$domain / timed out$COLOR_RESET" 73 | else 74 | echo -e "$COLOR_RED$domain / unavailable$COLOR_RESET" 75 | fi 76 | 77 | # cleanup 78 | rm "$tmp" 79 | } 80 | 81 | # iterate all provided domain names combined with all TLDs and check them 82 | # concurrently 83 | elements=${#TLDS[@]} 84 | while (( "$#" )); do 85 | for (( i=0;i&2 6 | exit 1 7 | fi 8 | 9 | if [[ $1 = u ]] || [[ $1 = udp ]] || \ 10 | [[ $1 = U ]] || [[ $1 = UDP ]]; then 11 | shift 12 | set -x 13 | sudo nmap -sU "$1" -p "$2" 14 | else 15 | set -x 16 | nmap "$1" -p "$2" 17 | fi 18 | -------------------------------------------------------------------------------- /common/bin/clip: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # TODO: detect MIME type? 4 | # TODO: figure out how/why these programs "wait" -- can a `clip-once` script exist building on this? 5 | # wl-copy `-o`, xclip `-l 1`? 6 | 7 | if [ "$(uname)" == "Linux" ]; then 8 | if is_wayland; then 9 | wl-copy -n "$@" 10 | else 11 | xclip -i -sel c "$@" 12 | fi 13 | elif [ "$(uname)" == "Darwin" ]; then 14 | pbcopy "$@" 15 | fi 16 | -------------------------------------------------------------------------------- /common/bin/clipshot: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -x 4 | 5 | umask 077 6 | d="$(date +"%Y-%m-%d_%H-%M-%S")" 7 | fn="$SCROTS_PATH/clipshot_$d.png" 8 | mkdir -p "$SCROTS_PATH" 9 | 10 | dim="$(slurp -d -b \#00000066 -c \#ffffffff)" 11 | if [ "$?" -eq 0 ]; then 12 | grim -g "$dim" - | wl-copy -t image/png 13 | wl-paste -n > "$fn" 14 | echo "$fn" 15 | else 16 | exit 1 17 | fi 18 | 19 | # TODO: implement for X and other OSs? 20 | 21 | # pkill unclutter 22 | # sleep 0.1 23 | # import "$fn" 24 | # < "$fn" xclip -t image/png -i -selection clipboard 25 | # < "$fn" xclip -t image/png -i -selection primary 26 | # < "$fn" xclip -t image/png -i -selection secondary 27 | # < "$fn" xclip -t image/png -i -selection buffer-cut 28 | # unclutter & 29 | # echo "$fn" 30 | -------------------------------------------------------------------------------- /common/bin/copy-git-forge-url: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | usage() { 4 | echo "copy-git-forge-url <$FILE>[#L$LINE_NUMBERS]" 5 | echo " Copies a link to the git forge's web interface for the current branch to the clipboard" 6 | echo 7 | echo " Examples:" 8 | echo " \$ copy-git-forge-url readme.md#L12" 9 | } 10 | 11 | if [ "$#" -lt 1 ]; then 12 | usage 13 | exit 1 14 | fi 15 | 16 | url="$(gitforge-url.ts "$1")" 17 | case "$(uname)" in 18 | Linux*) echo "$url" | clip;; 19 | Darwin*) echo "$url" | clip;; 20 | *) echo "OS not supported"; exit 1; 21 | esac -------------------------------------------------------------------------------- /common/bin/countdown: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | [[ $# -lt 1 ]] && { echo "No argument provided." >&2 ; exit 1; } 4 | 5 | d=$(($(date +%s) + $1)); 6 | echo "Countdown started at $(date)" 7 | 8 | while [[ "$d" -ge "$(date +%s)" ]]; do 9 | _dt=$((d - $(date +%s))) 10 | days=$((_dt / 86400)) 11 | echo -ne "\r${days}d $(date -u --date @$((_dt)) +%H:%M:%S) "; 12 | sleep 0.1 13 | done 14 | 15 | echo -ne "\rCountdown finished $(date)\n" 16 | -------------------------------------------------------------------------------- /common/bin/dns: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | getent hosts "$@" 4 | -------------------------------------------------------------------------------- /common/bin/dns-cleaner: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lytedev/dotfiles/1396fb6f46245765099e1e40312f7ca8790e7b4a/common/bin/dns-cleaner -------------------------------------------------------------------------------- /common/bin/dns-deleter: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | hostname="${1}"; shift || { 4 | echo "No hostname arg to delete provided." 5 | exit 1 6 | } 7 | API="https://api.netlify.com/api/v1" 8 | TOKEN="$(pass netlify | grep -i token | tr -d ' ' | cut -d ':' -f 2)" 9 | counter=0 10 | curl -sL "$API/dns_zones/lyte_dev/dns_records?access_token=$TOKEN" | \ 11 | jq -r '.[] | select(.hostname=="'"$hostname"'") | .hostname+": "+.id' | \ 12 | while read -r l; do 13 | counter=$((counter+1)) 14 | ID="$(echo $l | awk '{print $2}')" 15 | URL="$API/dns_zones/lyte_dev/dns_records/$ID?access_token=$TOKEN" 16 | curl -vvv -X DELETE -sL "$URL" 2>&1 | grep 'ratelimit-remaining' & 17 | echo "counter: $counter" 18 | jq 'del(.[] | select(.id == "'$ID'"))' /tmp/zone.json > /tmp/zone2.json 19 | mv /tmp/zone2.json /tmp/zone.json 20 | [ $counter -gt 450 ] && break 21 | done 22 | wait 23 | -------------------------------------------------------------------------------- /common/bin/dns-deleter-matching: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | API="https://api.netlify.com/api/v1" 4 | TOKEN="$(pass netlify | grep -i token | tr -d ' ' | cut -d ':' -f 2)" 5 | while read -r l; do 6 | set -x -e 7 | ID="$(echo $l | awk '{print $2}')" 8 | URL="$API/dns_zones/lyte_dev/dns_records/$ID?access_token=$TOKEN" 9 | curl -X DELETE -sL "$URL" 10 | done 11 | wait 12 | -------------------------------------------------------------------------------- /common/bin/dotfiles-clone-and-setup: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | command -v git >/dev/null 2>&1 || { echo "git not installed"; exit 1; } 4 | command -v fish >/dev/null 2>&1 || { echo "fish not installed"; exit 2; } 5 | 6 | mkdir -p "$HOME/.config" 7 | git clone https://git.lyte.dev/lytedev/dotfiles.git "$HOME/.config/lytedev-dotfiles" 8 | exec "$HOME/.config/lytedev-dotfiles/common/bin/dotfiles-setup" 9 | -------------------------------------------------------------------------------- /common/bin/dotfiles-init: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | export dfp 4 | export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}" 5 | export ENV_PATH="$XDG_CONFIG_HOME/lytedev-env" 6 | export CURDIR 7 | 8 | mkdir -p "$ENV_PATH" 9 | mkdir -p "$XDG_CONFIG_HOME" 10 | dfp="$(realpath "$(dirname "$0")"/../..)" 11 | 12 | # may not be running from inside the dotfiles repo, may have been curl'd down solo, so we need to check 13 | if [[ ! -d "$dfp/.git" ]]; then 14 | echo "Not running from inside the dotfiles git repo, so we need to download it first!" 15 | # each os needs instructions to install git, then we can clone the repo and proceed 16 | if ! command -v git; then 17 | if head /etc/os-release --lines 1 | grep 'Arch Linux' > /dev/null 2>&1; then 18 | if [[ "$EUID" -ne 0 ]]; then 19 | if ! command -v sudo; then 20 | echo "Error: No sudo command available to try and install 'git'" 21 | exit 1 22 | else 23 | sudo pacman -Sy --needed git 24 | fi 25 | else 26 | pacman -Sy --needed git 27 | fi 28 | fi 29 | fi 30 | dfp="$XDG_CONFIG_HOME/lytedev-dotfiles" 31 | git clone https://git.lyte.dev/lytedev/dotfiles.git "$dfp" 32 | fi 33 | 34 | # auto-link any OS-specific environments 35 | if head /etc/os-release --lines 1 | grep 'NixOS$' > /dev/null 2>&1; then 36 | ln -s "$dfp/os/linux/nix" "$ENV_PATH/os-linux-nix" > /dev/null 2>&1 37 | elif head /etc/os-release --lines 1 | grep 'Arch Linux' > /dev/null 2>&1; then 38 | ln -s "$dfp/os/linux/arch" "$ENV_PATH/os-linux-arch" > /dev/null 2>&1 39 | fi 40 | 41 | # perform any pre-requisite setup (includes OS-specific setup scripts since we 42 | # just included those) 43 | for s in "$ENV_PATH"/*; do 44 | f="$s/dotfiles-init.d.sh" 45 | if [ -f "$f" ]; then 46 | echo "dotfiles-init: Running $f..." 47 | CURDIR="$s" "$f" 48 | fi 49 | done 50 | 51 | # perform final dotfiles setup 52 | echo "dotfiles-init: Running setup..." 53 | "$dfp/common/bin/dotfiles-setup" 54 | 55 | # TODO: setup personal files? (ssh keys, gpg keys, password stores, notes) 56 | # these are probably best handled in a dotfiles-init.d.sh script in a particular layer 57 | -------------------------------------------------------------------------------- /common/bin/dotfiles-link-environments: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | 3 | has_command sk || begin 4 | echo "sk not installed (skim fuzzy finder)" 5 | exit 1 6 | end 7 | 8 | mkdir -p $ENV_PATH 9 | 10 | function filter_existing_directory 11 | while read -l line 12 | test -d $DOTFILES_PATH/$line && echo $line 13 | end 14 | end 15 | 16 | function reject_empty_lines 17 | while read -l line 18 | test $line = "" || echo $line 19 | end 20 | end 21 | 22 | function link 23 | while read -l line 24 | set safe_fn (string replace -a / - $line) 25 | echo "Linking $ENV_PATH/$safe_fn to $DOTFILES_PATH/$line" 26 | rm -f $ENV_PATH/$safe_fn 27 | ln -s $DOTFILES_PATH/$line $ENV_PATH/$safe_fn 28 | end 29 | end 30 | 31 | cat $DOTFILES_PATH/common/envs | 32 | filter_existing_directory | 33 | sk --multi \ 34 | --prompt "Select applicable environments (multi-select w/ TAB): " \ 35 | --preview-window="up:50%:noborder" \ 36 | --preview="ls -la --color=always $DOTFILES_PATH/{}" | 37 | string trim | 38 | reject_empty_lines | 39 | link 40 | -------------------------------------------------------------------------------- /common/bin/dotfiles-make-env: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | echo "Not implemented yet!"; exit 1 4 | 5 | edfp="$ENV_PATH/$1" 6 | mkdir -p "$edfp/" 7 | mkdir -p "$edfp/.hidden/bash.d/" 8 | mkdir -p "$edfp/bin/" 9 | mkdir -p "$edfp/x/" 10 | mkdir -p "$edfp/sway/waybar" 11 | mkdir -p "$edfp/sway/config.d" 12 | mkdir -p "$HOME/.bin/" 13 | 14 | touches=( 15 | "$edfp/bash" 16 | "$edfp/x/init" 17 | "$edfp/x/profile" 18 | "$edfp/x/resources" 19 | "$edfp/vim" 20 | "$edfp/bspwm" 21 | "$edfp/polybar" 22 | "$edfp/app-launcher" 23 | "$edfp/workdock" 24 | ) 25 | 26 | for t in "${touches[@]}"; do 27 | touch "$t" 28 | done 29 | 30 | chmod 700 -R "$edfp" 31 | -------------------------------------------------------------------------------- /common/bin/dotfiles-setup: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | 3 | # This script's purpose is to setup the dotfiles configuration for an existing 4 | # and provisioned machine. For provisioning, see `./dotfiles-init`. 5 | 6 | set dfp (realpath (dirname (status -f))/../..) 7 | set lock_file $HOME/.using-lytedev-dotfiles.lock 8 | 9 | if not test -f $lock_file 10 | echo "This will delete existing files. Make sure you know what you're doing." 11 | echo 'Are you sure you want to continue? [y/N]' 12 | read response 13 | set response (string lower $response) 14 | if string match $response y 15 | echo "agreed" > "$lock_file" 16 | else 17 | exit 1 18 | end 19 | end 20 | 21 | set -q XDG_CONFIG_HOME || set XDG_CONFIG_HOME $HOME/.config 22 | set h $HOME; set c $XDG_CONFIG_HOME 23 | if test -d $c/lytedev-env 24 | echo "Warning: no environment-specific configuration detected!" 25 | end 26 | 27 | function l -a dot -a target -d "Symlink a dotfile configuration file or directory" 28 | if test -L $target || test -f $target || test -d $target 29 | command rm -rf "$target" 30 | end 31 | # check if the directory that will contain the link exists 32 | set -l d (dirname $target) 33 | test -d $d || mkdir -p $d 34 | ln -s (pwd)/$dot $target 35 | echo Linked $dot to $target 36 | end 37 | 38 | pushd $dfp 39 | test -d ~/.tmux/pluginx/tpm || \ 40 | git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm 41 | l common/zellij $c/zellij 42 | l common/tmux/conf $h/.tmux.conf 43 | l common/bat $c/bat 44 | l common/bash/rc $h/.bashrc 45 | l common/wezterm $c/wezterm 46 | l common/kitty $c/kitty 47 | l common/weechat $h/.weechat 48 | l common/scim/rc $h/.scimrc 49 | l common/scim/lua $h/.scim/lua 50 | l common/nnn $c/nnn 51 | l common/kak $c/kak 52 | l common/helix $c/helix 53 | l common/gitui $c/gitui 54 | l common/gpg/agent.conf $h/.gnupg/gpg-agent.conf 55 | chmod og-rwx ~/.gnupg 56 | l common/htop/rc $c/htop/htoprc 57 | l common/kitty $c/kitty 58 | l common/alacritty $c/alacritty 59 | l common/pgcli $c/pgcli 60 | l common/mutt/rc $h/.muttrc 61 | l common/git/config $h/.gitconfig 62 | l common/elixir/iex.exs $h/.iex.exs 63 | l common/blender/userpref.blend $c/blender/2.93/config/userpref.blend 64 | l common/lemonade/config.toml $c/lemonade.toml 65 | l common/tig/rc $h/.tigrc 66 | popd 67 | 68 | for s in $c/lytedev-env/*/dotfiles-setup.d.fish 69 | source $s $dfp $h $c 70 | end 71 | 72 | set -q ENV_PATH || set ENV_PATH $XDG_CONFIG_HOME/lytedev-env 73 | set -q DOTFILES_PATH || set DOTFILES_PATH $XDG_CONFIG_HOME/lytedev-dotfiles 74 | command rm -f $ENV_PATH/empty 75 | ln -s $DOTFILES_PATH/common/empty-env $ENV_PATH/empty 76 | 77 | echo "Dotfiles Installed! Don't forget to setup environments and change the user's shell as needed!" 78 | exec fish 79 | -------------------------------------------------------------------------------- /common/bin/dotfiles-setup-for-root: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [[ $UID -ne 0 ]]; then 4 | echo "Re-running with 'sudo -E'..." 5 | sudo -E "$0" "$@" 6 | exit 7 | fi 8 | 9 | dfp=$(cd "$(dirname "${BASH_SOURCE[0]}" )/../../" && pwd) 10 | source "${dfp}/env/common/setup_helpers.bash" 11 | 12 | cp "$dfp/apps/de/sway/dm-entry" "/usr/share/wayland-sessions/lsway.desktop" 13 | 14 | links=( 15 | # display manager files 16 | "apps/de/sway/init" "/usr/bin/sway-lytedev" 17 | 18 | # udev rules 19 | # TODO: how does this work in nix? 20 | "apps/udev-rules/gcadapter" "/etc/udev/rules.d/51-gcadapter.rules" 21 | 22 | # tmpfiles 23 | # TODO: does this even do anything anymore? 24 | "apps/tmpfiles/disable-lid-wakeup" "/etc/tmpfiles.d/disable-lid-wakeup.conf" 25 | 26 | # lightdm 27 | "apps/de/gnome/gdm-tap-to-click" "/etc/dconf/db/gdm.d/06-tap-to-click" 28 | ) 29 | 30 | _dotfiles_setup_run_setup "$HOME/.using-lytedev-etcfiles.lock" "${links[@]}" 31 | 32 | -------------------------------------------------------------------------------- /common/bin/editscrot: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | opener="$(command -v xdg-open 2>&1 >/dev/null && echo "xdg-open" || echo "open")" 3 | exec nohup "$opener" "$NICE_HOME/img/scrots/$(ls -t "$NICE_HOME/img/scrots/" | head -n1)" >/dev/null 2>&1 & 4 | -------------------------------------------------------------------------------- /common/bin/email-via-mailgun-smtp: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | err() { 4 | errpre="" 5 | errpost="" 6 | if test -t 1; then 7 | ncolors=$(tput colors) 8 | if test -n "$ncolors" && test "$ncolors" -ge 8; then 9 | errpre="$(tput setaf 1)" 10 | errpost="$(tput setaf 7)" 11 | fi 12 | fi 13 | >&2 echo "${errpre}ERROR: $*${errpost}"; usage; exit 1 14 | } 15 | 16 | warn() { 17 | pre="" 18 | post="" 19 | if test -t 1; then 20 | ncolors=$(tput colors) 21 | if test -n "$ncolors" && test "$ncolors" -ge 8; then 22 | pre="$(tput setaf 3)" 23 | post="$(tput setaf 7)" 24 | fi 25 | fi 26 | >&2 echo "${pre}WARNING: $*${post}" 27 | } 28 | 29 | usage() { >&2 cat <&2 echo "Finished reading body. Sending email..." 65 | 66 | swaks --auth \ 67 | --server smtp.mailgun.org \ 68 | --au "$username" \ 69 | --ap "$password" \ 70 | --to "$recipient" \ 71 | --h-Subject: "$subject" \ 72 | --body "$body" -------------------------------------------------------------------------------- /common/bin/emoji: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | r="$(< "$HOME/.emoji.txt" sk --height 40%)" 4 | echo "$r" | awk '$0=$1' | tr -d '\n' | clip 5 | echo "Copied $r emoji to your clipboard" 6 | -------------------------------------------------------------------------------- /common/bin/ezln: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | SOURCE="$(realpath "$1")" # this one exists 4 | DEST="$(realpath -m "$2")" # this is the link to what exists 5 | mkdir -p "$(dirname "$2")" 6 | ln -s "$SOURCE" "$DEST" 7 | -------------------------------------------------------------------------------- /common/bin/field: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | has_command gawk || { echo "No gawk." >&2 ; exit 1; } 4 | index="${1:-1}" 5 | [ "$#" -lt 1 ] || shift 6 | gawk "$@" '{print $'"${index}"'}' 7 | -------------------------------------------------------------------------------- /common/bin/getip: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | curl -s --connect-timeout 3 --max-time 10 --retry 5 --retry-delay 0 \ 4 | --retry-max-time 40 "$@" ifconfig.co/json | jq 5 | -------------------------------------------------------------------------------- /common/bin/git-authors: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | git ls-tree -r -z --name-only HEAD -- "$1" \ 4 | | xargs -0 -n1 git blame --line-porcelain HEAD \ 5 | | grep "^author " \ 6 | | sort \ 7 | | uniq -c \ 8 | | sort -nr 9 | -------------------------------------------------------------------------------- /common/bin/gitforge-url.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env -S deno run --allow-read --allow-run --allow-net 2 | 3 | import * as path from "https://deno.land/std@0.181.0/path/mod.ts"; 4 | 5 | // output the best guess URL for viewing the file at the current git revision in 6 | // the git forge's web interface 7 | 8 | // TODO: --help, -h menu 9 | 10 | const file = Deno.args[0]; 11 | 12 | if (!file) { 13 | console.error("No file argument provided"); 14 | Deno.exit(1); 15 | } 16 | 17 | async function cmdOutput(cmd: string[]) { 18 | return new TextDecoder().decode( 19 | await Deno.run({ 20 | cmd: cmd, 21 | stdout: "piped", 22 | }) 23 | .output(), 24 | ).trim(); 25 | } 26 | 27 | type ForgeType = "gitlab" | "github" | "gitea"; 28 | 29 | function getForgeType(hostname: string): ForgeType { 30 | if (hostname == "git.lyte.dev") { 31 | return "gitea"; 32 | } else if (hostname.endsWith("github.com")) { 33 | return "github"; 34 | } else { 35 | return "gitlab"; 36 | } 37 | } 38 | 39 | function getUrl(repoRoot: string, remote: string, commit: string) { 40 | try { 41 | // try http remote 42 | console.log(new URL(remote)); 43 | throw new Error("HTTP(S) remotes not implemented"); 44 | } catch { 45 | const hostname = remote.split("@").slice(-1)[0].split(":")[0]; 46 | const forgeType = getForgeType(hostname); 47 | let repoPath = remote.split(":")[1]; 48 | if (repoPath.endsWith(".git")) { 49 | repoPath = repoPath.slice(0, -4); 50 | } 51 | let fileRepoPath = path.resolve(file); 52 | if (fileRepoPath.startsWith(repoRoot)) { 53 | fileRepoPath = fileRepoPath.slice(repoRoot.length + 1); // for the trailing slash 54 | } else { 55 | throw new Error(`File ${fileRepoPath} is not in repo at ${repoRoot}`); 56 | } 57 | switch (forgeType) { 58 | case "gitlab": 59 | return `https://${hostname}/${repoPath}/-/blob/${commit}/${fileRepoPath}`; 60 | case "gitea": 61 | return `https://${hostname}/${repoPath}/src/commit/${commit}/${fileRepoPath}`; 62 | case "github": 63 | return `https://${hostname}/${repoPath}/blob/${commit}/${fileRepoPath}`; 64 | } 65 | } 66 | } 67 | 68 | // TODO: cd to dir 69 | const repoRoot = await cmdOutput(["git", "rev-parse", "--show-toplevel"]); 70 | const remote = await cmdOutput(["git", "remote", "get-url", "origin"]); 71 | const commit = await cmdOutput(["git", "rev-parse", "HEAD"]); 72 | const url = getUrl(repoRoot, remote, commit); 73 | console.log(url); 74 | -------------------------------------------------------------------------------- /common/bin/glancepath: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env -S awk -f 2 | { 3 | split(substr($0, 2), p, "/"); 4 | for (k in p) { 5 | if (k == length(p)) { 6 | printf "/%s", p[k] 7 | } else { 8 | printf "/%.3s", p[k] 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /common/bin/good-morning: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | 3 | # create a messages file for subscripts to write to or manipulate for ending 4 | # output 5 | set message_file (mktemp) 6 | 7 | for f in (fd good-morning.d.fish $HOME/.config/lytedev-env --max-depth 2) 8 | # run scripts for any linked environments with a hooked script 9 | source $f $message_file 10 | end 11 | 12 | 13 | # output the messages file's contents 14 | echo 15 | command cat $message_file 16 | echo 17 | 18 | # since this script almost always runs in its own window which dies after 19 | # finishing, give the user a chance to read the output 20 | echo "When you're ready, hit enter to finish!" 21 | read 22 | -------------------------------------------------------------------------------- /common/bin/has_command: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | [ "$#" -lt 1 ] && { echo "No arguments provided" >&2 ; exit 1; } 4 | command -v "$1" >/dev/null 2>&1 5 | -------------------------------------------------------------------------------- /common/bin/install-firefox-user-chrome-css.fish: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | 3 | set profile_dirs $HOME/.mozilla/firefox/*.dev-edition-default $HOME/.mozilla/firefox/*.default-release 4 | if test (uname) = Darwin 5 | set profile_dirs $HOME/Library/Application\ Support/Firefox/Profiles/*.dev-edition-default $HOME/.mozilla/firefox/*.default-release 6 | end 7 | 8 | for p in $profile_dirs 9 | mkdir -p $p/chrome 10 | set user_chrome_css_file $p/chrome/userChrome.css 11 | echo '/* Generated by '(status -f)' -- do not edit manually! */' > $user_chrome_css_file 12 | cat $DOTFILES_PATH/common/firefox/userChrome.d.css >> $user_chrome_css_file 13 | echo >> $user_chrome_css_file 14 | for file_part in $ENV_PATH/*/firefox/userChrome.d.css 15 | cat $file_part >> $user_chrome_css_file 16 | echo >> $user_chrome_css_file 17 | end 18 | echo Built $user_chrome_css_file 19 | end 20 | 21 | echo Make sure you set 'toolkit.legacyUserProfileCustomizations.stylesheets' to true in about:config 22 | -------------------------------------------------------------------------------- /common/bin/is_wayland: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | exit 0 4 | # loginctl show-session "$(loginctl | grep "$(whoami)" | head -n 1 | field 1)" -p Type | grep -i wayland >/dev/null 5 | -------------------------------------------------------------------------------- /common/bin/k8s-yaml-diff: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | [ "$#" -lt 2 ] && echo "Need two filenames." && exit 1 4 | 5 | f1="$1"; shift 6 | f2="$1"; shift 7 | 8 | nvim -d <(k8s-yaml-sort "$f1") <(k8s-yaml-sort "$f2") 9 | -------------------------------------------------------------------------------- /common/bin/k8s-yaml-sort: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | [ "$#" -lt 1 ] && echo "Need a filename." && exit 1 4 | < "$1" yq -s . | jq -S ' 5 | sort_by(.metadata.name) | 6 | sort_by(.kind) | 7 | .[] | .spec.template.spec.containers |= 8 | if . == null then empty 9 | else 10 | map( 11 | if . == null then empty 12 | else .env |= sort_by(.name) 13 | | .volumeMounts |= sort_by(.name) 14 | end 15 | ) 16 | end 17 | ' 18 | -------------------------------------------------------------------------------- /common/bin/keyrepeat: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | xset r rate 250 80 4 | -------------------------------------------------------------------------------- /common/bin/kubeline: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | c="$(kubectl config current-context | tr -d "\n")" 3 | if [ -n "$c" ]; then 4 | printf "%s" "$c" 5 | fi 6 | a="$(kubectl config view --minify --output 'jsonpath={..namespace}')" 7 | if [ -n "$a" ]; then 8 | printf ".%s" "$a" 9 | fi 10 | -------------------------------------------------------------------------------- /common/bin/kubfc: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | kubectl config get-contexts --no-headers | \ 3 | uniq | \ 4 | sort | \ 5 | tr -s ' ' | \ 6 | sed -E 's/^\*?[[:space:]]*//g' | \ 7 | cut -d ' ' -f1 | \ 8 | sk | \ 9 | xargs -I{} kubectl config use-context '{}' 10 | -------------------------------------------------------------------------------- /common/bin/kubfn: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | has_command kubectl || { 3 | echo "kubectl command not found" 4 | exit 1 5 | } 6 | 7 | kubectl get namespaces --show-labels | \ 8 | uniq | \ 9 | sort | \ 10 | cut -d ' ' -f1 | \ 11 | sk | \ 12 | xargs -I{} kubectl config set-context --current --namespace='{}' 13 | -------------------------------------------------------------------------------- /common/bin/launch: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | LAUNCHER_HISTORY_FILE="$HOME/.local/share/lytelaunch/launch.log" 4 | mkdir --parents "$(dirname "$LAUNCHER_HISTORY_FILE")" 5 | touch "$LAUNCHER_HISTORY_FILE" 6 | app="$( 7 | < "$LAUNCHER_HISTORY_FILE" \ 8 | awk 'NF{NF--};1' | \ 9 | cat - <(dmenu_path) | \ 10 | sort | uniq -c | sort -nr | \ 11 | sd -fm '^\s+' '' | \ 12 | cut -d' ' -f2- | \ 13 | grep "\S" | \ 14 | sk 15 | )" 16 | # if no app is selected, just exit 17 | test -z "$app" && exit 1 18 | echo "$app $(date +%s)" >> "$LAUNCHER_HISTORY_FILE" 19 | echo "$app" 20 | -------------------------------------------------------------------------------- /common/bin/linewise: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [[ -n "${1+x}" ]]; then 4 | while read -r line; do 5 | <<< "${line}" "$@" 6 | done 7 | else 8 | echo "No reader program provided." 9 | exit 1 10 | fi 11 | -------------------------------------------------------------------------------- /common/bin/maybe_source_env_file: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | f="$1"; shift 4 | [ -f "$f" ] && source "$f" "$@" 5 | true 6 | -------------------------------------------------------------------------------- /common/bin/nd: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | fn="${1}"; shift; N "$(date +%Y-%m-%d)_${fn}" "$@" 4 | -------------------------------------------------------------------------------- /common/bin/nf: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | SUBDIR="${2:-./}" 4 | mkdir -p "$NOTES_PATH/$SUBDIR" 5 | cd "$NOTES_PATH/$SUBDIR" || exit 1 6 | "$EDITOR" "$NOTES_PATH/$SUBDIR/$1" 7 | cd - || exit 1 8 | -------------------------------------------------------------------------------- /common/bin/note: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | fn="${1}"; shift; N "$(date +%Y-%m-%d)_${fn}" "$@" 3 | -------------------------------------------------------------------------------- /common/bin/nsync: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # TODO: warn on merge conflicts? 4 | cd "${NOTES_PATH}" || exit 5 | git add -A 6 | git commit -m Updates 7 | git fetch && git merge origin/master && git push 8 | cd - || exit 9 | -------------------------------------------------------------------------------- /common/bin/nvimdiff: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | nvim -d "$@" 3 | -------------------------------------------------------------------------------- /common/bin/open-in-git-forge: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | usage() { 4 | echo "open-in-git-forge <$FILE>[#L$LINE_NUMBERS]" 5 | echo " Opens the URL in your browser to the git forge's web interface for the current branch for $FILE" 6 | echo 7 | echo " Examples:" 8 | echo " \$ open-in-git-forge readme.md#L12" 9 | } 10 | 11 | if [ "$#" -lt 1 ]; then 12 | usage 13 | exit 1 14 | fi 15 | 16 | url="$(gitforge-url.ts "$1")" 17 | case "$(uname)" in 18 | Linux*) xdg-open "$url";; 19 | Darwin*) open "$url";; 20 | *) echo "OS not supported"; exit 1; 21 | esac -------------------------------------------------------------------------------- /common/bin/optimize-photo-for-web: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | mogrify \ 4 | -filter Triangle \ 5 | -define filter:support=2 \ 6 | -resize 2000x2000\> \ 7 | -unsharp 0.25x0.08+8.3+0.045 \ 8 | -dither None \ 9 | -posterize 136 \ 10 | -quality 82 \ 11 | -define jpeg:fancy-upsampling=off \ 12 | -define png:compression-filter=5 \ 13 | -define png:compression-level=9 \ 14 | -define png:compression-strategy=1 \ 15 | -define png:exclude-chunk=all \ 16 | -interlace none \ 17 | -colorspace sRGB \ 18 | "$1" 19 | -------------------------------------------------------------------------------- /common/bin/pass-migrate-to-pass-otp: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | 3 | set entry $argv[1] 4 | set otp_secret (pass $entry | awk -F': ' '/^otp/{gsub(/\s/,"",$2);print $2}') 5 | set otp_uri "otpauth://totp/totp-secret?secret=$otp_secret&issuer=$entry" 6 | echo $otp_uri | pass otp append $entry 7 | -------------------------------------------------------------------------------- /common/bin/pipeline: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | SAVED_PIPELINE_DIR="$DOTFILES_PATH/env/common/data/pipelines" 4 | mkdir -p "$SAVED_PIPELINE_DIR" 5 | 6 | if [ -n "${1+x}" ]; then 7 | pdir="$SAVED_PIPELINE_DIR/$1"; shift 8 | mkdir -p "$pdir" 9 | if [ -z ${1+x} ]; then 10 | td="$(mktemp -p "$pdir" -d "tmp_pipeline.XXXXXXXX")" 11 | # shellcheck disable=SC2064 12 | trap "rm -rf '$td'" EXIT 13 | else 14 | td="$pdir/$1"; shift 15 | mkdir -p "$td" 16 | fi 17 | transform="$pdir/transform" 18 | else 19 | td="$(mktemp --tmpdir -d pipeline.XXXXXXXX)" 20 | transform="$td/transform" 21 | # shellcheck disable=SC2064 22 | trap "rm -rf '$td'" EXIT 23 | fi 24 | 25 | [ ! -e "$transform" ] && \ 26 | printf "#!/usr/bin/env bash\n# you must save this buffer manually\n# for %s\n 27 | base64" "${td}" > "$transform" 28 | 29 | in="$td/in"; [ -n "${1+x}" ] && in="${1}" && shift 30 | out="$td/out"; [ -n "${1+x}" ] && out="${1}" && shift 31 | 32 | # TODO: if no logging, log="/dev/null" 33 | log="$td/log" 34 | touch "$log" 35 | 36 | chmod +x "$transform" 37 | 38 | # TODO: saved inputs? 39 | echo "Hello World" > "$in" 40 | 41 | env PIPELINE_IN="$in" PIPELINE_TRANSFORM="$transform" PIPELINE_OUT="$out" nvim --cmd "source $DOTFILES_PATH/apps/neovim/scripts/pipeline.vim" 42 | -------------------------------------------------------------------------------- /common/bin/poll: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | 3 | # make sure our stuff gets loaded so aliases will work 4 | source ~/.config/fish/config.fish 5 | 6 | while true 7 | clear 8 | sleep 2 & 9 | echo (tput setaf 0)(date) polled (tput setaf 4)"'"$argv"'"(tput setaf 7) 10 | eval $argv 11 | wait 12 | end -------------------------------------------------------------------------------- /common/bin/pr-for-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | GITHUB_UPSTREAM="$(git remote -vv | awk '{$0=$2}')" 4 | 5 | git log --merges --ancestry-path --oneline "$1"..master \ 6 | | grep -i 'pull request' \ 7 | | tail -n1 \ 8 | | awk '{$0=$5}' \ 9 | | cut -c2- \ 10 | | xargs -I % open https://github.com/"$GITHUB_UPSTREAM"/"${PWD##*/}"/pull/% 11 | -------------------------------------------------------------------------------- /common/bin/remote: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env moon 2 | 3 | arg_spec = { 4 | {"target", "REMOTE_MACHINE", "remote"} 5 | {"mpr", "MOSH_PORT_RANGE", "60000:61000"} 6 | {"sargs", "SSH_ARGS", "-XY"} 7 | {"margs", "MOSH_ARGS", ""} 8 | } 9 | 10 | args = {v[1], os.getenv(v[2]) or arg[i] or v[3] for i, v in ipairs(arg_spec)} 11 | os.execute "mosh -p '#{args.mpr}' '#{args.target}' --ssh='ssh #{args.sargs}' #{args.margs}" 12 | -------------------------------------------------------------------------------- /common/bin/resource-usage: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # TODO: radeontop can continuously dump to a file, would be fast to just keep 4 | # last line and have this run in the background 5 | gpu_usage="$(radeontop -l 1 -d - | rg --color never -o "gpu (\d+.\d+)" -r '$1')" 6 | gpu_temp="$(sensors | rg 'amdgpu.*mem:\s+\+(\d+\.\d+)' --multiline-dotall --multiline -o -r '$1')" 7 | 8 | # NOTE: this is all cpu usage since boot: 9 | # cpu_usage_data_snapshot="$(cat /proc/stat | head -n 1 | cut -d ' ' -f 2- | sd '^\s+' '')" 10 | # function cpu_usage_data() { 11 | # echo "$cpu_usage_data_snapshot" 12 | # } 13 | # cpu_usage="$(bc -l <<< "100-(100*($(cpu_usage_data | awk '{printf $4}').0/$(cpu_usage_data | sd " " "+" | bc).0))")" 14 | 15 | mpstat_samples=2 16 | mpstat_sample_seconds=1 17 | cpu_idle="$(mpstat --dec=2 "$mpstat_sample_seconds" "$mpstat_samples" | tail -n 1 | field 12)" 18 | cpu_usage="$(echo "100.0-$cpu_idle" | bc -l)" 19 | cpu_temp="0.0" 20 | 21 | printf "GPU [USAGE: %6.2f%%] [THERMALS: %6.2f°C]\n" "$gpu_usage" "$gpu_temp" 22 | printf "CPU [USAGE: %6.2f%%] [THERMALS: %6.2f°C]\n" "$cpu_usage" "$cpu_temp" 23 | 24 | -------------------------------------------------------------------------------- /common/bin/restartbar: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | stopbar && startbar & 4 | -------------------------------------------------------------------------------- /common/bin/s: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | N _scratch 4 | -------------------------------------------------------------------------------- /common/bin/scn: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | EDITOR="sc-im" nf "$@" 4 | -------------------------------------------------------------------------------- /common/bin/screenshot: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | SCROT_DIR="$NICE_HOME/img/scrots" 4 | mkdir -p "$SCROT_DIR/" 5 | FILENAME="$SCROT_DIR/screenshot_$(date +%Y-%m-%d_%H-%M-%S).png" 6 | grim -t png "$@" "${FILENAME}" >/dev/null && echo "Saved screenshot to: ${FILENAME}" 7 | -------------------------------------------------------------------------------- /common/bin/script-opts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # TODO: helper for taking a data structure and building bash args? 4 | -------------------------------------------------------------------------------- /common/bin/scrup: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -x 4 | 5 | remote_dir="scrots" 6 | url_prefix="https://files.lyte.dev/$remote_dir" 7 | 8 | u="$(uuid -v4)" 9 | d="$(date +%Y-%m-%d_%H-%M-%S)" 10 | 11 | fn="$(clipshot)" 12 | if [ $? -eq 0 ]; then 13 | echo "Scrot captured. Uploading..." 14 | upload "${fn}" "scrup-$u-$d.png" "$remote_dir" 15 | echo "$url_prefix/scrup-$u-$d.png" | clip 16 | notify-send "Scrot uploaded. URL in clipboard." 17 | else 18 | exit 1 19 | fi 20 | -------------------------------------------------------------------------------- /common/bin/scwd: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | addon=""; [ -n "$1" ] && addon="-${1}" 4 | echo "${PWD}" > "${DOTFILES_PATH}/.cwd${addon}.tmp" 5 | -------------------------------------------------------------------------------- /common/bin/setbg: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | index="${2}" 4 | wp_file="${HOME}/.wallpaper${index}" 5 | rm -f "${wp_file}" 6 | echo "Setting ${1} as ${wp_file}" 7 | ln -s "$(realpath "${1}")" "${wp_file}" 8 | "${HOME}/.fehbg" 9 | -------------------------------------------------------------------------------- /common/bin/simple-otp: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # TODO: check for oathtool 4 | 5 | key="$1"; shift 6 | args=("$@") 7 | 8 | oathtool --totp=sha1 -b "$key" "${args[@]}" 9 | -------------------------------------------------------------------------------- /common/bin/source_if_exists: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | [ "$#" -lt 1 ] && { echo "No arguments provided" >&2 ; exit 1; } 4 | 5 | # shellcheck disable=SC1090 6 | f="$1"; shift 7 | { [ -f "$f" ] && source "$f" "$@"; } || { echo "$f does not exist" >&2 ; exit 3; } 8 | -------------------------------------------------------------------------------- /common/bin/startbar: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | "${DOTFILES_PATH}/apps/de/polybar/run" 4 | -------------------------------------------------------------------------------- /common/bin/stopbar: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # TODO: get the proper monitor! 4 | BAR_MONITOR="$(polybar --list-monitors | tail -n 1 | sed -n 's/^\s*\(.*\):.*$/\1/p')" 5 | bspc config -m "${BAR_MONITOR}" bottom_padding "0" 6 | bspc config -m "${BAR_MONITOR}" top_padding "0" 7 | killall -q polybar 8 | while pgrep -x polybar >/dev/null; do sleep 1; done 9 | -------------------------------------------------------------------------------- /common/bin/sw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | d="$(date +%s)" 4 | _dt=$(($(date +%s) - d)) 5 | echo "Stopwatch started $(date)" 6 | 7 | trap 'echo -ne "\nStopwatch stopped at $(date)\n" && exit 0' SIGINT 8 | 9 | while true; do 10 | _dt=$(($(date +%s) - d)) 11 | days=$((_dt / 86400)) 12 | echo -ne "\r${days}d $(date -u --date @$((_dt)) +%H:%M:%S) " 13 | sleep 0.1 14 | done 15 | 16 | # TODO: add "lap" capabilities? 17 | 18 | -------------------------------------------------------------------------------- /common/bin/tdf: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | tmux-lyte-session dotfiles $DOTFILES_PATH 3 | -------------------------------------------------------------------------------- /common/bin/tenv: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | d="$(command ls "$ENV_PATH" | sk)" && \ 3 | tmux-lyte-session "env-$d" "$ENV_PATH/$d" 4 | -------------------------------------------------------------------------------- /common/bin/terminal-rendering-test: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # sources: 4 | # https://askubuntu.com/questions/528928/how-to-do-underline-bold-italic-strikethrough-color-background-and-size-i 5 | # https://askubuntu.com/questions/27314/script-to-display-all-terminal-colors 6 | 7 | indent=" " 8 | padding=" " 9 | reset="\e[0;39;49m" 10 | 11 | for s in {0..8}; do # text styles 12 | for t in {30..37}; do # text color 13 | for b in {40..47}; do # background 14 | echo -ne "${indent}\e[$s;$t;${b}m${padding}\\\e[$s;$t;${b}m${padding}${reset}" 15 | done 16 | echo 17 | done 18 | echo 19 | done 20 | echo -e "Emoji: 😱😍😬🎉" 21 | echo -e "Possible Ligatures:" 22 | echo -r " --> -> == != === ------> ** ++ |> <* := :: |] [| ===>" 23 | echo -r " >= <= =>= ->- >>- <<- <***> =: <. <.> .> ~> ~~> ~~~~>" 24 | echo -r " (* |- -| =!= :> |} {| >=> <=< ++++ ___" 25 | echo 26 | -------------------------------------------------------------------------------- /common/bin/termrec: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | asciinema rec -i 2 --stdin 4 | -------------------------------------------------------------------------------- /common/bin/tls: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | tmux list-sessions 3 | -------------------------------------------------------------------------------- /common/bin/tmux-edit-buffer: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | f="$(tmux-save-buffer)" 4 | tmux new-window "$EDITOR $f" 5 | -------------------------------------------------------------------------------- /common/bin/tmux-lyte-session: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | 3 | set session_name $argv[1] 4 | set dir (set -q argv[2] && echo $argv[2] || pwd) 5 | 6 | if set -q TMUX 7 | tmux switch -t $session_name 8 | else 9 | tmux new-session -D -s "$session_name" -c "$dir" $argv[3..-1] &>/dev/null || \ 10 | tmux attach -t "$session_name" -c "$dir" 11 | end 12 | -------------------------------------------------------------------------------- /common/bin/tmux-save-buffer: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | d="$(date +%Y-%m-%d_%H-%M-%S)" 4 | f="${USER_LOGS_PATH}/${d}.tmux-buffer.log" 5 | mkdir -p "$(dirname "$f")" 6 | touch "$f" 7 | chmod 600 "$f" 8 | tmux capture-pane -pS -1000000000 > "$f" 9 | echo "$f" 10 | -------------------------------------------------------------------------------- /common/bin/tmux-session-dir: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # if inside a session, use the current session 4 | # if not, a session must be specified after the dir 5 | d="${1}" 6 | [ -z "$d" ] && d="#{pane_current_path}" 7 | target_session="${2}" 8 | [ -n "$TMUX" ] && target_session="." 9 | tmux attach-session -t "$target_session" -c "$d" 10 | -------------------------------------------------------------------------------- /common/bin/tmux-session-preview: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | session_data="$1" 4 | session_id="$(echo "$session_data" | cut -d':' -f1)" 5 | 6 | S="$(tmux ls -F'#{session_id} #{session_name}: #{T:tree_mode_format}' | grep ^"$session_id")" 7 | session_info="${S##$s}" 8 | session_name="$(echo "$session_info" | cut -d ':' -f1)" 9 | 10 | echo "RAW: $1" 11 | echo "S: $S" 12 | echo "INFO: $session_info" 13 | echo "NAME: $session_name" 14 | -------------------------------------------------------------------------------- /common/bin/tmuxswitcher: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | fmt='#{session_id}:|#S|(#{session_attached} attached)' 4 | t="tmux switch-client -t" 5 | [ -z "$TMUX" ] && t="tmux attach-session -t" 6 | 7 | sess="$({ tmux display-message -p -F "$fmt" && tmux list-sessions -F "$fmt"; } \ 8 | | awk '!seen[$1]++' \ 9 | | column -t -s'|' \ 10 | | sk -q '$' --reverse --prompt 'switch session: ' -1 --preview "tmux-session-preview {}" \ 11 | | cut -d':' -f1)" 12 | 13 | [ -z "$sess" ] && exit 1 14 | 15 | $t "$sess" 16 | 17 | 18 | 19 | # | while read w; do 20 | # set W (tmux lsw -t"{}" -F'#{window_id}#{T:tree_mode_format}' | grep ^"$w") 21 | # echo " ﬌ ${W##$w}" 22 | # end 23 | -------------------------------------------------------------------------------- /common/bin/unarchive: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | archive_name="${1}"; shift 4 | to_dir="$(basename "$archive_name")" 5 | mkdir -p "${to_dir}" 6 | pushd "${to_dir}" || ( echo "${to_dir} does not exist" ; exit 1 ) 7 | tar --zstd -xvf "${archive_name}" 8 | echo "Unarchived to: ${to_dir}" 9 | popd || exit 2 10 | -------------------------------------------------------------------------------- /common/bin/unbackupify: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | 3 | # deps: fish, zstd, gpg, ssh 4 | 5 | set -q HOST || set HOST (head -n 1 /etc/hostname | tr -d '\n') 6 | 7 | # use the backup-host in the ~/.ssh/config as the default backup remote host 8 | set -q BACKUP_REMOTE_HOST || set BACKUP_REMOTE_HOST backup-host 9 | 10 | # use a user-specific dir by default to backup to 11 | set -q BACKUP_REMOTE_DIR || set BACKUP_REMOTE_DIR "/storage/"(whoami)"/backups/$HOST" 12 | 13 | set BACKUP_FILE_EXT .tar.zstd.gpg 14 | 15 | set target $argv[1] 16 | if test $target = '--list-backup-files' 17 | ssh $BACKUP_REMOTE_HOST "command ls -1 $BACKUP_REMOTE_DIR" 18 | exit 0 19 | else if test (count $argv) -lt 1 20 | echo "No remote backup filename provided (use --list-backup-files to show)" 21 | exit 1 22 | end 23 | 24 | ssh $BACKUP_REMOTE_HOST "echo 1" &>/dev/null || begin 25 | echo "Cannot ssh to $BACKUP_REMOTE_HOST" 26 | exit 6 27 | end 28 | 29 | ssh $BACKUP_REMOTE_HOST "test -d $BACKUP_REMOTE_DIR/$target" || begin 30 | echo "Remote directory $BACKUP_REMOTE_DIR/$target does not exist on $BACKUP_REMOTE_HOST (use --list-backup-files to show)" 31 | exit 5 32 | end 33 | 34 | # TODO: autocomplete? 35 | # TODO: checksum? 36 | # TODO: progress indicator? 37 | 38 | set local_dir (echo $target | awk -F. '{print $1}') 39 | mkdir $local_dir || begin 40 | echo "Local unbackup directory '$local_dir' exists" 41 | exit 2 42 | end 43 | 44 | pushd $local_dir >/dev/null 45 | 46 | ssh $BACKUP_REMOTE_HOST "cat $BACKUP_REMOTE_DIR/$target" | 47 | gpg --decrypt 2>/dev/null | 48 | zstd --ultra -T2 -22 -dc | 49 | tar -xf - || begin 50 | echo "Failed to stream backup" 51 | exit 4 52 | end 53 | 54 | popd >/dev/null 55 | 56 | echo "Restored to $local_dir" 57 | -------------------------------------------------------------------------------- /common/bin/weather: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | curl 'wttr.in/@h.lyte.dev?format=%l%20%T:%20%t%20%C%20%w%20%h' 4 | -------------------------------------------------------------------------------- /common/bin/work-journal-entry: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | N work/divvy/(date +%Y-%m-%d) && \ 3 | pushd $NOTES_PATH && git add -A && \ 4 | git commit -m "Edit work journal entry for "(date +%Y-%m-%d) && nsync 5 | -------------------------------------------------------------------------------- /common/bin/yamldiff: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | [ "$#" -lt 2 ] && echo "Need two filenames." && exit 1 4 | 5 | f1="$1"; shift; echo "$f1" >&2 6 | f2="$1"; shift; echo "$f2" >&2 7 | 8 | nvim -d <(yq . "$f1" | jq -S .) <(yq . "$f2" | jq -S .) 9 | -------------------------------------------------------------------------------- /common/blender/userpref.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lytedev/dotfiles/1396fb6f46245765099e1e40312f7ca8790e7b4a/common/blender/userpref.blend -------------------------------------------------------------------------------- /common/data/ansi_graphics_codes.tsv: -------------------------------------------------------------------------------- 1 | Code Description Category 2 | Notes For use with the ANSI `\e[TS;FG;BGm` escape sequence N/A 3 | 0 Reset all (default) Text Style (TS) 4 | 1 Bold Text Style (TS) 5 | 2 Dim Text Style (TS) 6 | 3 Italic Text Style (TS) 7 | 4 Underlined Text Style (TS) 8 | 5 Blinking Text Style (TS) 9 | 6 ??? UNKNOWN Text Style (TS) 10 | 7 Inverted colors Text Style (TS) 11 | 8 Hidden (passwords) Text Style (TS) 12 | 39 Default (reset) Foreground Colors (FG) 13 | 30 Black Foreground Colors (FG) 14 | 31 Red Foreground Colors (FG) 15 | 32 Green Foreground Colors (FG) 16 | 33 Yellow Foreground Colors (FG) 17 | 34 Blue Foreground Colors (FG) 18 | 35 Magenta Foreground Colors (FG) 19 | 36 Cyan Foreground Colors (FG) 20 | 37 Light Gray Foreground Colors (FG) 21 | 90 Dark Gray Foreground Colors (FG) 22 | 91 Light Red Foreground Colors (FG) 23 | 92 Light Green Foreground Colors (FG) 24 | 93 Light Yellow Foreground Colors (FG) 25 | 94 Light Blue Foreground Colors (FG) 26 | 95 Light Magenta Foreground Colors (FG) 27 | 96 Light Cyan Foreground Colors (FG) 28 | 97 White Foreground Colors (FG) 29 | 49 Default (reset) Background Colors (BG) 30 | 40 Black Background Colors (BG) 31 | 41 Red Background Colors (BG) 32 | 42 Green Background Colors (BG) 33 | 43 Yellow Background Colors (BG) 34 | 44 Blue Background Colors (BG) 35 | 45 Magenta Background Colors (BG) 36 | 46 Cyan Background Colors (BG) 37 | 47 Light Gray Background Colors (BG) 38 | 100 Dark Gray Background Colors (BG) 39 | 101 Light Red Background Colors (BG) 40 | 102 Light Green Background Colors (BG) 41 | 103 Light Yellow Background Colors (BG) 42 | 104 Light Blue Background Colors (BG) 43 | 105 Light Magenta Background Colors (BG) 44 | 106 Light Cyan Background Colors (BG) 45 | 107 White Background Colors (BG) 46 | -------------------------------------------------------------------------------- /common/data/pipelines/b64/transform: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # for /home/daniel/.home/.config/lytedev-dotfiles/.env/pipelines/b64/pipeline.VRMehQda 3 | 4 | base64 5 | -------------------------------------------------------------------------------- /common/data/pipelines/base64/transform: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # for /home/daniel/.home/.config/lytedev-dotfiles/.env/pipelines/base64/tmp_pipeline.ca7uoTRo 3 | 4 | base64 5 | -------------------------------------------------------------------------------- /common/data/pipelines/linewise/transform: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # for /home/daniel/.home/.config/lytedev-dotfiles/.env/pipelines/linewise/tmp_pipeline.epyGqDjQ 3 | 4 | linewise base64 5 | -------------------------------------------------------------------------------- /common/data/pipelines/test/transform: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # for /home/daniel/.home/.config/lytedev-dotfiles/.env/pipelines/test/pipeline.Zpgm8j42 3 | 4 | base64 5 | -------------------------------------------------------------------------------- /common/data/pipelines/xxd/transform: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # for /home/daniel/.home/.config/lytedev-dotfiles/.env/pipelines/xxd/tmp_pipeline.dmXdfyZv 3 | 4 | hexyl 5 | -------------------------------------------------------------------------------- /common/data/vt_colors: -------------------------------------------------------------------------------- 1 | vt.default_red=0x11,0xf9,0xa6,0xf4,0x66,0xae,0xa1,0xf8,0x75,0xf9,0xa6,0xf4,0x66,0xae,0xa1,0xf9 vt.default_grn=0x11,0x26,0xe2,0xbf,0xd9,0x81,0xef,0xf8,0x71,0x26,0xe2,0xbf,0xd9,0x81,0xef,0xf8 vt.default_blu=0x11,0x72,0x2e,0x75,0xef,0xff,0xe4,0xf2,0x5e,0x72,0x2e,0x75,0xef,0xff,0xe4,0xf5 2 | -------------------------------------------------------------------------------- /common/elixir/iex.exs: -------------------------------------------------------------------------------- 1 | Application.put_env(:elixir, :ansi_enabled, true) 2 | 3 | # PROTIP: to break, `#iex:break` 4 | 5 | IEx.configure( 6 | colors: [enabled: true], 7 | inspect: [ 8 | pretty: true, 9 | printable_limit: :infinity, 10 | limit: :infinity 11 | ], 12 | default_prompt: 13 | [ 14 | # ANSI CHA, move cursor to column 1 15 | "\e[G", 16 | :magenta, 17 | # IEx prompt variable 18 | "%prefix", 19 | "#", 20 | # IEx prompt variable 21 | "%counter", 22 | # plain string 23 | ">", 24 | :reset 25 | ] 26 | |> IO.ANSI.format() 27 | |> IO.chardata_to_string() 28 | ) 29 | -------------------------------------------------------------------------------- /common/empty-env/hyprland.d.conf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lytedev/dotfiles/1396fb6f46245765099e1e40312f7ca8790e7b4a/common/empty-env/hyprland.d.conf -------------------------------------------------------------------------------- /common/empty-env/tmux.d.conf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lytedev/dotfiles/1396fb6f46245765099e1e40312f7ca8790e7b4a/common/empty-env/tmux.d.conf -------------------------------------------------------------------------------- /common/envs: -------------------------------------------------------------------------------- 1 | os/android 2 | os/linux 3 | os/linux/arch 4 | os/linux/nix 5 | os/linux/debian 6 | os/macos 7 | host/desktop 8 | host/desktop/wallwart 9 | host/desktop/rising 10 | host/headless 11 | host/headless/anonode 12 | host/headless/nexus 13 | host/headless/router 14 | host/headless/faceless 15 | host/headless/rift 16 | host/headless/relic 17 | host/headless/ruby 18 | host/headless/comet 19 | host/headless/tilde 20 | host/laptop 21 | host/laptop/third 22 | host/laptop/divvy-macbook 23 | host/laptop/postmates-macbook 24 | host/laptop/uber-macbook 25 | host/laptop/val-macbook 26 | host/layer/personal 27 | host/layer/public-webserver 28 | -------------------------------------------------------------------------------- /common/firefox/userChrome.d.css: -------------------------------------------------------------------------------- 1 | #webrtcIndicator { 2 | display: none; 3 | } 4 | 5 | #main-window[tabsintitlebar="true"]:not([extradragspace="true"]) #TabsToolbar>.toolbar-items { 6 | opacity: 0; 7 | pointer-events: none; 8 | } 9 | 10 | #main-window:not([tabsintitlebar="true"]) #TabsToolbar { 11 | visibility: collapse !important; 12 | } -------------------------------------------------------------------------------- /common/git/config: -------------------------------------------------------------------------------- 1 | [user] 2 | name = Daniel Flanagan 3 | email = daniel@lyte.dev 4 | 5 | [filter "lfs"] 6 | clean = git-lfs clean -- %f 7 | smudge = git-lfs smudge -- %f 8 | process = git-lfs filter-process 9 | required = true 10 | 11 | [core] 12 | editor = $EDITOR 13 | pager = delta 14 | excludesfile = /home/daniel/.home/.gitignore 15 | 16 | [http "https://gopkg.in"] 17 | followRedirects = true 18 | 19 | [diff] 20 | colorMoved = default 21 | 22 | [difftool] 23 | prompt = false 24 | 25 | [alias] 26 | a = add 27 | A = add -A 28 | ac = commit -a 29 | b = rev-parse --symbolic-full-name HEAD 30 | c = commit 31 | cm = commit -m 32 | cnv = commit --no-verify 33 | co = checkout 34 | d = diff 35 | ds = diff --staged 36 | dt = difftool 37 | f = fetch 38 | l = log --graph --abbrev-commit --decorate --oneline --all 39 | plainlog = log --pretty=format:'%h %ad%x09%an%x09%s' --date=short --decorate 40 | ls = ls-files 41 | mm = merge master 42 | p = push 43 | pf = push --force-with-lease 44 | pl = pull 45 | rim = rebase -i master 46 | s = status 47 | sur = submodule update --remote 48 | 49 | [pull] 50 | default = current 51 | 52 | [merge] 53 | conflictstyle = diff3 54 | 55 | [gpg] 56 | program = gpg2 57 | 58 | [color] 59 | ui = auto 60 | 61 | [push] 62 | default = current 63 | autoSetupRemote = true 64 | 65 | [sendemail] 66 | smtpserver = smtp.mailgun.org 67 | smtpuser = daniel@lyte.dev 68 | smtrpencryption = tls 69 | smtpserverport = 587 70 | 71 | [include] 72 | path = ~/.config/lytedev-env/host-layer-personal/gitconfig 73 | path = ~/.config/lytedev-env/divvy/gitconfig 74 | 75 | [branch] 76 | autoSetupMerge = true 77 | 78 | # [push] 79 | # pushOption = merge_request.create 80 | # pushOption = merge_request.remove_source_branch 81 | # pushOption = merge_request.assign="daniel.flanagan" 82 | 83 | [url "git@git.hq.bill.com:"] 84 | insteadOf = https://git.hq.bill.com/ 85 | -------------------------------------------------------------------------------- /common/gitui/gitui: -------------------------------------------------------------------------------- 1 | /home/daniel/.home/.config/lytedev-dotfiles/common/gitui -------------------------------------------------------------------------------- /common/gitui/mocha.ron: -------------------------------------------------------------------------------- 1 | ( 2 | selected_tab: Reset, 3 | command_fg: Rgb(205, 214, 244), 4 | selection_bg: Rgb(88, 91, 112), 5 | selection_fg: Rgb(205, 214, 244), 6 | cmdbar_bg: Rgb(24, 24, 37), 7 | cmdbar_extra_lines_bg: Rgb(24, 24, 37), 8 | disabled_fg: Rgb(127, 132, 156), 9 | diff_line_add: Rgb(166, 227, 161), 10 | diff_line_delete: Rgb(243, 139, 168), 11 | diff_file_added: Rgb(249, 226, 175), 12 | diff_file_removed: Rgb(235, 160, 172), 13 | diff_file_moved: Rgb(203, 166, 247), 14 | diff_file_modified: Rgb(250, 179, 135), 15 | commit_hash: Rgb(180, 190, 254), 16 | commit_time: Rgb(186, 194, 222), 17 | commit_author: Rgb(116, 199, 236), 18 | danger_fg: Rgb(243, 139, 168), 19 | push_gauge_bg: Rgb(137, 180, 250), 20 | push_gauge_fg: Rgb(30, 30, 46), 21 | tag_fg: Rgb(245, 224, 220), 22 | branch_fg: Rgb(148, 226, 213) 23 | ) 24 | -------------------------------------------------------------------------------- /common/gitui/theme.ron: -------------------------------------------------------------------------------- 1 | ( 2 | selected_tab: Reset, 3 | command_fg: Rgb(205, 214, 244), 4 | selection_bg: Rgb(88, 91, 112), 5 | selection_fg: Rgb(205, 214, 244), 6 | cmdbar_bg: Rgb(24, 24, 37), 7 | cmdbar_extra_lines_bg: Rgb(24, 24, 37), 8 | disabled_fg: Rgb(127, 132, 156), 9 | diff_line_add: Rgb(166, 227, 161), 10 | diff_line_delete: Rgb(243, 139, 168), 11 | diff_file_added: Rgb(249, 226, 175), 12 | diff_file_removed: Rgb(235, 160, 172), 13 | diff_file_moved: Rgb(203, 166, 247), 14 | diff_file_modified: Rgb(250, 179, 135), 15 | commit_hash: Rgb(180, 190, 254), 16 | commit_time: Rgb(186, 194, 222), 17 | commit_author: Rgb(116, 199, 236), 18 | danger_fg: Rgb(243, 139, 168), 19 | push_gauge_bg: Rgb(137, 180, 250), 20 | push_gauge_fg: Rgb(30, 30, 46), 21 | tag_fg: Rgb(245, 224, 220), 22 | branch_fg: Rgb(148, 226, 213) 23 | ) 24 | -------------------------------------------------------------------------------- /common/gpg/agent.conf: -------------------------------------------------------------------------------- 1 | max-cache-ttl 60480000 2 | default-cache-ttl 60480000 3 | -------------------------------------------------------------------------------- /common/helix/.gitignore: -------------------------------------------------------------------------------- 1 | runtime 2 | -------------------------------------------------------------------------------- /common/helix/config.toml: -------------------------------------------------------------------------------- 1 | theme = "custom" 2 | 3 | [editor] 4 | soft-wrap.enable = true 5 | auto-pairs = false 6 | auto-save = false 7 | completion-trigger-len = 1 8 | color-modes = false 9 | bufferline = "multiple" 10 | scrolloff = 8 11 | rulers = [80, 120] 12 | cursorline = true 13 | 14 | [editor.cursor-shape] 15 | normal = "block" 16 | insert = "bar" 17 | select = "underline" 18 | 19 | [editor.file-picker] 20 | hidden = false 21 | 22 | [editor.indent-guides] 23 | render = true 24 | character = "▏" 25 | 26 | [editor.lsp] 27 | display-messages = true 28 | display-inlay-hints = true 29 | 30 | [editor.statusline] 31 | left = ["mode", "spinner", "selections", "primary-selection-length", "position", "position-percentage", "diagnostics", "workspace-diagnostics"] 32 | center = ["file-name"] 33 | right = [ "version-control", "total-line-numbers", "file-encoding"] 34 | 35 | [keys.insert] 36 | j = { k = "normal_mode", j = "normal_mode", K = "normal_mode", J = "normal_mode" } 37 | 38 | [keys.normal] 39 | D = "kill_to_line_end" 40 | "^" = "goto_line_start" 41 | "C-k" = "jump_view_up" 42 | "C-j" = "jump_view_down" 43 | "C-h" = "jump_view_left" 44 | "C-l" = "jump_view_right" 45 | "C-q" = ":quit-all!" 46 | "L" = "repeat_last_motion" 47 | 48 | [keys.normal.space] 49 | q = ":reflow 80" 50 | Q = ":reflow 120" 51 | v = ":run-shell-command fish -c 'env > /tmp/env'" 52 | C = ":bc!" 53 | h = ":toggle lsp.display-inlay-hints" 54 | # O = ["select_textobject_inner WORD", ":pipe-to xargs xdg-open"] 55 | 56 | [keys.select] 57 | space = { q = ":reflow 80", Q = ":reflow 120" } 58 | "L" = "repeat_last_motion" -------------------------------------------------------------------------------- /common/helix/helix: -------------------------------------------------------------------------------- 1 | /home/daniel/.home/.config/lytedev-dotfiles/common/helix -------------------------------------------------------------------------------- /common/helix/languages.toml: -------------------------------------------------------------------------------- 1 | [language-server] 2 | lexical = { command = "lexical", args = ["start"] } 3 | 4 | [[language]] 5 | name = "elixir" 6 | language-servers = ["elixir-ls", "lexical"] 7 | auto-format = true 8 | 9 | [[language]] 10 | name = "html" 11 | auto-format = false 12 | 13 | [[language]] 14 | name = "nix" 15 | auto-format = true 16 | formatter = { command = "nixpkgs-fmt", args = [] } 17 | 18 | [[language]] 19 | name = "fish" 20 | auto-format = true 21 | indent = { tab-width = 2, unit = "\t" } 22 | 23 | [[language]] 24 | name = "go" 25 | indent = { tab-width = 2, unit = "\t" } 26 | 27 | [[language]] 28 | name = "javascript" 29 | scope = "source.js" 30 | injection-regex = "^(js|javascript)$" 31 | file-types = ["js", "jsx", "mjs"] 32 | shebangs = ["deno", "node"] 33 | roots = ["deno.jsonc", "deno.json", "package.json", "tsconfig.json"] 34 | comment-token = "//" 35 | # config = { enable = true, lint = true, unstable = true } 36 | # language-server = { command = "typescript-language-server", args = ["--stdio"], language-id = "javascript" } 37 | indent = { tab-width = 2, unit = "\t" } 38 | auto-format = true 39 | 40 | # [[language]] 41 | # name = "jsx" 42 | # scope = "source.jsx" 43 | # injection-regex = "jsx" 44 | # file-types = ["jsx"] 45 | # shebangs = ["deno", "node"] 46 | # roots = ["deno.jsonc", "deno.json", "package.json", "tsconfig.json"] 47 | # comment-token = "//" 48 | # config = { enable = true, lint = true, unstable = true } 49 | # language-server = { command = "deno", args = ["lsp"], language-id = "javascriptreact" } 50 | # indent = { tab-width = 2, unit = " " } 51 | # grammar = "javascript" 52 | # auto-format = true 53 | 54 | # [[language]] 55 | # name = "typescript" 56 | # scope = "source.ts" 57 | # injection-regex = "^(ts|typescript)$" 58 | # file-types = ["ts"] 59 | # shebangs = ["deno", "node"] 60 | # roots = ["deno.jsonc", "deno.json", "package.json", "tsconfig.json"] 61 | # config = { enable = true, lint = true, unstable = true } 62 | # language-server = { command = "deno", args = ["lsp"], language-id = "typescript" } 63 | # indent = { tab-width = 2, unit = " " } 64 | # auto-format = true 65 | 66 | # [[language]] 67 | # name = "tsx" 68 | # scope = "source.tsx" 69 | # injection-regex = "^(tsx)$" # |typescript 70 | # file-types = ["tsx"] 71 | # shebangs = ["deno", "node"] 72 | # roots = ["deno.jsonc", "deno.json", "package.json", "tsconfig.json"] 73 | # config = { enable = true, lint = true, unstable = true } 74 | # language-server = { command = "deno", args = ["lsp"], language-id = "typescriptreact" } 75 | # indent = { tab-width = 2, unit = " " } 76 | # auto-format = true 77 | 78 | # [[language]] 79 | # name = "jsonc" 80 | # scope = "source.jsonc" 81 | # injection-regex = "^(jsonc)$" 82 | # file-types = ["jsonc"] 83 | # shebangs = ["deno", "node"] 84 | # roots = ["deno.jsonc", "deno.json", "package.json", "tsconfig.json"] 85 | # config = { enable = true, lint = true, unstable = true } 86 | # language-server = { command = "deno", args = ["lsp"], language-id = "jsonc" } 87 | # indent = { tab-width = 2, unit = " " } 88 | # auto-format = true 89 | -------------------------------------------------------------------------------- /common/helix/themes/custom.toml: -------------------------------------------------------------------------------- 1 | inherits = "catppuccin_mocha" 2 | 3 | "ui.background" = "default" 4 | 5 | # "ui.cursorline.primary" = { bg = "default" } 6 | # "ui.cursorline.secondary" = { bg = "default" } 7 | # "ui.cursorcolumn.primary" = { bg = "default" } 8 | # "ui.cursorcolumn.secondary" = { bg = "default" } 9 | # "ui.virtual.ruler" = { bg = "default" } 10 | 11 | "ui.bufferline.active" = { fg = "sapphire", bg = "base", underline = { color = "sapphire", style = "" } } 12 | -------------------------------------------------------------------------------- /common/htop/rc: -------------------------------------------------------------------------------- 1 | # Beware! This file is rewritten by htop when settings are changed in the interface. 2 | # The parser is also very primitive, and not human-friendly. 3 | htop_version=3.2.2 4 | config_reader_min_version=3 5 | fields=0 48 17 18 38 39 40 2 46 47 49 1 6 | hide_kernel_threads=1 7 | hide_userland_threads=1 8 | hide_running_in_container=0 9 | shadow_other_users=0 10 | show_thread_names=0 11 | show_program_path=0 12 | highlight_base_name=1 13 | highlight_deleted_exe=1 14 | shadow_distribution_path_prefix=0 15 | highlight_megabytes=1 16 | highlight_threads=1 17 | highlight_changes=0 18 | highlight_changes_delay_secs=5 19 | find_comm_in_cmdline=1 20 | strip_exe_from_cmdline=1 21 | show_merged_command=0 22 | header_margin=1 23 | screen_tabs=0 24 | detailed_cpu_time=0 25 | cpu_count_from_one=1 26 | show_cpu_usage=1 27 | show_cpu_frequency=1 28 | show_cpu_temperature=1 29 | degree_fahrenheit=0 30 | update_process_names=0 31 | account_guest_in_cpu_meter=0 32 | color_scheme=0 33 | enable_mouse=1 34 | delay=15 35 | hide_function_bar=0 36 | header_layout=two_50_50 37 | column_meters_0=LeftCPUs2 Memory Swap 38 | column_meter_modes_0=1 1 1 39 | column_meters_1=RightCPUs2 Tasks LoadAverage Uptime 40 | column_meter_modes_1=1 2 2 2 41 | tree_view=0 42 | sort_key=46 43 | tree_sort_key=0 44 | sort_direction=-1 45 | tree_sort_direction=1 46 | tree_view_always_by_pid=0 47 | all_branches_collapsed=0 48 | screen:Main=PID USER PRIORITY NICE M_VIRT M_RESIDENT M_SHARE STATE PERCENT_CPU PERCENT_MEM TIME Command 49 | .sort_key=PERCENT_CPU 50 | .tree_sort_key=PID 51 | .tree_view=0 52 | .tree_view_always_by_pid=0 53 | .sort_direction=-1 54 | .tree_sort_direction=1 55 | .all_branches_collapsed=0 56 | screen:I/O=PID USER IO_PRIORITY IO_RATE IO_READ_RATE IO_WRITE_RATE PERCENT_SWAP_DELAY PERCENT_IO_DELAY Command 57 | .sort_key=IO_RATE 58 | .tree_sort_key=PID 59 | .tree_view=0 60 | .tree_view_always_by_pid=0 61 | .sort_direction=-1 62 | .tree_sort_direction=1 63 | .all_branches_collapsed=0 64 | -------------------------------------------------------------------------------- /common/kitty/kitty: -------------------------------------------------------------------------------- 1 | /home/daniel/.home/.config/lytedev-dotfiles/common/kitty -------------------------------------------------------------------------------- /common/kitty/kitty.conf: -------------------------------------------------------------------------------- 1 | font_family IosevkaLyteTerm 2 | bold_font IosevkaLyteTerm Heavy 3 | italic_font IosevkaLyteTerm Italic 4 | bold_italic_font IosevkaLyteTerm Heavy Italic 5 | font_size 12.5 6 | inactive_text_alpha 0.5 7 | copy_on_select yes 8 | 9 | scrollback_lines 500000 10 | 11 | symbol_map U+23FB-U+23FE,U+2665,U+26A1,U+2B58,U+E000-U+E00A,U+E0A0-U+E0A3,U+E0B0-U+E0D4,U+E200-U+E2A9,U+E300-U+E3E3,U+E5FA-U+E6AA,U+E700-U+E7C5,U+EA60-U+EBEB,U+F000-U+F2E0,U+F300-U+F32F,U+F400-U+F4A9,U+F500-U+F8FF,U+F0001-U+F1AF0 Symbols Nerd Font Mono 12 | 13 | # use `kitty + list-fonts --psnames` to get the font's PostScript name 14 | 15 | allow_remote_control yes 16 | listen_on unix:/tmp/kitty 17 | repaint_delay 3 18 | input_delay 3 19 | sync_to_monitor yes 20 | 21 | adjust_line_height 0 22 | window_padding_width 10.0 23 | window_margin_width 0.0 24 | 25 | confirm_os_window_close 0 26 | 27 | enabled_layouts splits:split_axis=vertical,stack 28 | 29 | map ctrl+shift+1 change_font_size all 12.5 30 | map ctrl+shift+2 change_font_size all 18.5 31 | map ctrl+shift+3 change_font_size all 26 32 | map ctrl+shift+4 change_font_size all 32 33 | map ctrl+shift+5 change_font_size all 48 34 | map ctrl+shift+o launch --type=tab --stdin-source=@screen_scrollback $EDITOR 35 | 36 | map ctrl+shift+equal change_font_size all +0.5 37 | map ctrl+shift+minus change_font_size all -0.5 38 | 39 | map shift+insert paste_from_clipboard 40 | map ctrl+shift+v paste_from_selection 41 | map ctrl+shift+c copy_to_clipboard 42 | 43 | # kill pane 44 | map ctrl+shift+q close_window 45 | # kill tab 46 | map ctrl+alt+shift+q close_tab 47 | 48 | map ctrl+shift+j launch --location=hsplit --cwd=current 49 | map ctrl+shift+l launch --location=vsplit --cwd=current 50 | 51 | map ctrl+alt+shift+k move_window up 52 | map ctrl+alt+shift+h move_window left 53 | map ctrl+alt+shift+l move_window right 54 | map ctrl+alt+shift+j move_window down 55 | 56 | map ctrl+h neighboring_window left 57 | map ctrl+l neighboring_window right 58 | map ctrl+k neighboring_window up 59 | map ctrl+j neighboring_window down 60 | map ctrl+shift+n nth_window -1 61 | map ctrl+shift+space>u kitten hints --type=url --program @ 62 | 63 | map ctrl+shift+z toggle_layout stack 64 | 65 | shell_integration disabled 66 | 67 | enable_audio_bell yes 68 | visual_bell_duration 0.25 69 | visual_bell_color #333033 70 | 71 | url_style single 72 | 73 | strip_trailing_spaces smart 74 | 75 | # open_url_modifiers ctrl 76 | 77 | tab_bar_align center 78 | tab_bar_style separator 79 | tab_separator "" 80 | tab_bar_edge top 81 | tab_title_template "{fmt.fg.tab}{fmt.bg.tab} {activity_symbol}{title} " 82 | active_tab_font_style normal 83 | 84 | ## name: Catppuccin Kitty Mocha 85 | ## author: Catppuccin Org 86 | ## license: MIT 87 | ## upstream: https://github.com/catppuccin/kitty/blob/main/mocha.conf 88 | ## blurb: Soothing pastel theme for the high-spirited! 89 | 90 | # The basic colors 91 | foreground #CDD6F4 92 | background #1E1E2E 93 | selection_foreground #1E1E2E 94 | selection_background #F5E0DC 95 | 96 | # Cursor colors 97 | cursor #F5E0DC 98 | cursor_text_color #1E1E2E 99 | 100 | # URL underline color when hovering with mouse 101 | url_color #F5E0DC 102 | 103 | # Kitty window border colors 104 | active_border_color #74c7ec 105 | inactive_border_color #313244 106 | bell_border_color #F9E2AF 107 | 108 | # OS Window titlebar colors 109 | wayland_titlebar_color system 110 | macos_titlebar_color system 111 | 112 | # Tab bar colors 113 | active_tab_foreground #11111B 114 | active_tab_background #74c7ec 115 | inactive_tab_foreground #CDD6F4 116 | inactive_tab_background #181825 117 | tab_bar_background #11111B 118 | 119 | # Colors for marks (marked text in the terminal) 120 | mark1_foreground #1E1E2E 121 | mark1_background #B4BEFE 122 | mark2_foreground #1E1E2E 123 | mark2_background #74c7ec 124 | mark3_foreground #1E1E2E 125 | mark3_background #74C7EC 126 | 127 | # The 16 terminal colors 128 | 129 | # black 130 | color0 #45475A 131 | color8 #585B70 132 | 133 | # red 134 | color1 #F38BA8 135 | color9 #F38BA8 136 | 137 | # green 138 | color2 #A6E3A1 139 | color10 #A6E3A1 140 | 141 | # yellow 142 | color3 #F9E2AF 143 | color11 #F9E2AF 144 | 145 | # blue 146 | color4 #89B4FA 147 | color12 #89B4FA 148 | 149 | # magenta 150 | color5 #F5C2E7 151 | color13 #F5C2E7 152 | 153 | # cyan 154 | color6 #94E2D5 155 | color14 #94E2D5 156 | 157 | # white 158 | color7 #BAC2DE 159 | color15 #A6ADC8 160 | -------------------------------------------------------------------------------- /common/lemonade/config.toml: -------------------------------------------------------------------------------- 1 | host = '127.0.0.1' 2 | line-ending = 'cr' 3 | -------------------------------------------------------------------------------- /common/mutt/rc: -------------------------------------------------------------------------------- 1 | set realname = "Daniel Flanagan" 2 | set from = "Daniel Flanagan " 3 | set use_from = yes 4 | set envelope_from = yes 5 | # set edit_headers = yes 6 | 7 | # set folder="~/../mail" 8 | # set sendmail="/usr/bin/esmtp" 9 | # set sidebar_visible 10 | set sidebar_format = "%B%?F? [%F]?%* %?N?%N/?%S" 11 | set mail_check_stats 12 | 13 | bind index,pager \CD sync-mailbox 14 | bind index,pager \CP sidebar-prev 15 | bind index,pager \CN sidebar-next 16 | bind index,pager \CI sidebar-open 17 | bind index,pager \CB sidebar-toggle-visible 18 | 19 | set smtp_url = "smtps://wraithx2@gmail.com@smtp.gmail.com:465/" 20 | set smtp_pass = "`pass google-app-password`" 21 | set imap_user = "wraithx2@gmail.com" 22 | set imap_pass = "`pass google-app-password`" 23 | set folder = "imaps://imap.gmail.com:993" 24 | set spoolfile = "+INBOX" 25 | set ssl_force_tls = yes 26 | 27 | bind pager g top 28 | bind pager G bottom 29 | 30 | bind pager \Cu half-up 31 | bind pager \Cd half-down 32 | bind pager k half-up 33 | bind pager j half-down 34 | bind pager J next-entry 35 | bind pager K previous-entry 36 | bind index \CR imap-fetch-mail 37 | bind index \CR imap-fetch-mail 38 | 39 | bind attach,index g first-entry 40 | bind attach,index G last-entry 41 | 42 | macro index,pager A s>y 43 | macro index \' "~R !~D !~F\ 44 | +[Gmail]/All " \ 45 | "Archive" 46 | 47 | set record = "" 48 | set editor = "nvim" 49 | set charset = "utf-8" 50 | set header_cache = "~/.cache/mutt/headers" 51 | set message_cachedir = "~/.cache/mutt/bodies" 52 | set timeout = 60 53 | set sort = reverse-date 54 | 55 | set new_mail_command="notify-send 'New Email' '%n new messages, %u unread.' &" 56 | -------------------------------------------------------------------------------- /common/ncmpcpp/config: -------------------------------------------------------------------------------- 1 | mpd_music_dir = "~/../music" 2 | lyrics_directory = ~/.ncmpcpp/lyrics 3 | ncmpcpp_directory = ~/.ncmpcpp 4 | mpd_host = "localhost" 5 | mpd_port = "6600" 6 | mpd_connection_timeout = "5" 7 | mpd_crossfade_time = "5" 8 | -------------------------------------------------------------------------------- /common/nnn/.gitignore: -------------------------------------------------------------------------------- 1 | .lastd 2 | mounts 3 | sessions 4 | -------------------------------------------------------------------------------- /common/nnn/config.fish: -------------------------------------------------------------------------------- 1 | # global 2 | set -Ux NNN_OPTS EHacdx 3 | set -Ux NNN_COLORS 1234 4 | set -Ux NNN_PLUG p:preview 5 | set -Ux NNN_FCOLORS 030304020005050805030501 6 | 7 | # per-shell 8 | set --export NNN_TMPDIR (mktemp -d) 9 | set --export NNN_TMPFILE $NNN_TMPDIR/tmp 10 | mkfifo $NNN_TMPDIR/fifo 11 | set --export NNN_FIFO $NNN_TMPDIR/fifo 12 | 13 | function n --wraps nnn --description 'support nnn quit and change directory' 14 | # Block nesting of nnn in subshells 15 | if test -n "$NNNLVL" -a "$NNNLVL" -ge 1 16 | echo "nnn is already running" 17 | return 18 | end 19 | 20 | # The behaviour is set to cd on quit (nnn checks if NNN_TMPFILE is set) 21 | # If NNN_TMPFILE is set to a custom path, it must be exported for nnn to 22 | # see. To cd on quit only on ^G, remove the "-x" from both lines below, 23 | # without changing the paths. 24 | if test -n "$XDG_CONFIG_HOME" 25 | set -x NNN_TMPFILE "$XDG_CONFIG_HOME/nnn/.lastd" 26 | else 27 | set -x NNN_TMPFILE "$HOME/.config/nnn/.lastd" 28 | end 29 | 30 | # Unmask ^Q (, ^V etc.) (if required, see `stty -a`) to Quit nnn 31 | # stty start undef 32 | # stty stop undef 33 | # stty lwrap undef 34 | # stty lnext undef 35 | 36 | # The command function allows one to alias this function to `nnn` without 37 | # making an infinitely recursive alias 38 | command nnn -P p $argv 39 | 40 | if test -e $NNN_TMPFILE 41 | source $NNN_TMPFILE 42 | rm $NNN_TMPFILE 43 | end 44 | end 45 | 46 | alias l 'n' 47 | -------------------------------------------------------------------------------- /common/nnn/nnn: -------------------------------------------------------------------------------- 1 | /home/daniel/.home/.config/lytedev-dotfiles/common/nnn -------------------------------------------------------------------------------- /common/pgcli/.gitignore: -------------------------------------------------------------------------------- 1 | history 2 | log 3 | -------------------------------------------------------------------------------- /common/pgcli/config: -------------------------------------------------------------------------------- 1 | [main] 2 | expand = True 3 | enable_pager = False 4 | -------------------------------------------------------------------------------- /common/pgcli/pgcli: -------------------------------------------------------------------------------- 1 | /home/daniel/.home/.config/lytedev-dotfiles/common/pgcli -------------------------------------------------------------------------------- /common/sc-im/lua/dice.lua: -------------------------------------------------------------------------------- 1 | local os = require "os" 2 | local math = require "math" 3 | 4 | math.randomseed(os.clock()) 5 | 6 | function table.tostring(self, indent, done) 7 | local result = "" 8 | done = done or {} 9 | indent = indent or 0 10 | if type(self) == "table" then 11 | for key, value in pairs(self) do 12 | result = result .. string.rep(" ", indent) 13 | if type(value) == "table" and not done[value] then 14 | done[value] = true 15 | result = result .. 16 | string.format( 17 | "[%s] => table\n", 18 | tostring(key) 19 | ) .. 20 | "{\n" .. 21 | table.tostring(value, indent + 2, done) .. 22 | "}\n" 23 | else 24 | result = result .. 25 | string.format("[%s] => %s\n", 26 | tostring(key), 27 | tostring(value) 28 | ) 29 | end 30 | end 31 | else 32 | result = result .. self .. "\n" 33 | end 34 | return result 35 | end 36 | 37 | function log(s) 38 | s = "[timestamp: " .. tostring(os.time()) .. "]\n" .. s 39 | local out = s:gsub("\n", "\n ") 40 | local file = io.open("/tmp/sc-im-dice.log", "a+") 41 | file:write("\n") 42 | file:write(out) 43 | io.close(file) 44 | end 45 | 46 | local dstr_matcher = "(%d*)d(%d+)" 47 | 48 | function dstr(n, s, fl) 49 | n = tonumber(n) or 1 50 | local sum = 0 51 | for di = 1, n do 52 | sum = sum + math.random(1, tonumber(s)) 53 | end 54 | return sum 55 | end 56 | 57 | function rolls(s) 58 | local pieces = {} 59 | for nd, ds in s:gmatch(dstr_matcher) do 60 | local sum = dstr(tonumber(nd), tonumber(ds)) 61 | pieces[#pieces+1] = { 62 | tostring(nd) .. "d" .. tostring(ds), 63 | tostring(sum) 64 | } 65 | end 66 | return pieces 67 | end 68 | 69 | function replacerolls(s, rolls) 70 | local result = s 71 | for k, n in ipairs(rolls) do 72 | result = result:gsub(n[1], n[2], 1) 73 | end 74 | return result 75 | end 76 | 77 | function evalreturn(s) 78 | local f = loadstring("return " .. s) 79 | return f() 80 | end 81 | 82 | function sc_parserollstr(s) 83 | local r = rolls(s) 84 | log(table.tostring(r)) 85 | return evalreturn(replacerolls(s, r)) 86 | end 87 | 88 | function sc_rollres(c, r) 89 | local os = require "os" 90 | local seed = (os.time() + os.clock()) * 10000000 91 | math.randomseed(seed) 92 | log("Setting Seed: " .. tostring(seed)) 93 | local sum = sc_parserollstr(sc.lgetstr(c, r)) 94 | sc.lsetnum(c, r, sum) 95 | end 96 | -------------------------------------------------------------------------------- /common/sc-im/lua/h.lua: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lytedev/dotfiles/1396fb6f46245765099e1e40312f7ca8790e7b4a/common/sc-im/lua/h.lua -------------------------------------------------------------------------------- /common/sc-im/scimrc: -------------------------------------------------------------------------------- 1 | set autocalc 2 | set numeric 3 | set numeric_decimal=0 4 | set overlap 5 | set xlsx_readformulas 6 | 7 | color "type=HEADINGS fg=WHITE bg=BLACK bold=0 dim=0 standout=0 reverse=0" 8 | color "type=HEADINGS_ODD fg=WHITE bg=BLACK bold=0 dim=0 standout=0 reverse=0" 9 | color "type=CELL_SELECTION_SC fg=WHITE bg=BLACK bold=1 dim=0 standout=1" 10 | color "type=CELL_SELECTION fg=WHITE bg=BLACK bold=1 dim=0 standout=1" 11 | color "type=STRG fg=WHITE bg=BLACK bold=0 dim=1" 12 | color "type=NUMB fg=BLUE bg=BLACK bold=0 dim=1" 13 | color "type=EXPRESSION fg=GREEN bg=BLACK bold=0 dim=1" 14 | color "type=CELL_NEGATIVE fg=RED bg=BLACK bold=0 dim=1" 15 | 16 | nmap "J" "" 17 | nmap "fi" ":format \"0\"" 18 | nmap "B" "Vir" 19 | nmap " " "Ek" 20 | 21 | -------------------------------------------------------------------------------- /common/scim/lua/dice.lua: -------------------------------------------------------------------------------- 1 | local os = require "os" 2 | local math = require "math" 3 | 4 | math.randomseed(os.clock()) 5 | 6 | function table.tostring(self, indent, done) 7 | local result = "" 8 | done = done or {} 9 | indent = indent or 0 10 | if type(self) == "table" then 11 | for key, value in pairs(self) do 12 | result = result .. string.rep(" ", indent) 13 | if type(value) == "table" and not done[value] then 14 | done[value] = true 15 | result = result .. 16 | string.format( 17 | "[%s] => table\n", 18 | tostring(key) 19 | ) .. 20 | "{\n" .. 21 | table.tostring(value, indent + 2, done) .. 22 | "}\n" 23 | else 24 | result = result .. 25 | string.format("[%s] => %s\n", 26 | tostring(key), 27 | tostring(value) 28 | ) 29 | end 30 | end 31 | else 32 | result = result .. self .. "\n" 33 | end 34 | return result 35 | end 36 | 37 | function log(s) 38 | s = "[timestamp: " .. tostring(os.time()) .. "]\n" .. s 39 | local out = s:gsub("\n", "\n ") 40 | local file = io.open("/tmp/sc-im-dice.log", "a+") 41 | file:write("\n") 42 | file:write(out) 43 | io.close(file) 44 | end 45 | 46 | local dstr_matcher = "(%d*)d(%d+)" 47 | 48 | function dstr(n, s, fl) 49 | n = tonumber(n) or 1 50 | local sum = 0 51 | for di = 1, n do 52 | sum = sum + math.random(1, tonumber(s)) 53 | end 54 | return sum 55 | end 56 | 57 | function rolls(s) 58 | local pieces = {} 59 | for nd, ds in s:gmatch(dstr_matcher) do 60 | local sum = dstr(tonumber(nd), tonumber(ds)) 61 | pieces[#pieces+1] = { 62 | tostring(nd) .. "d" .. tostring(ds), 63 | tostring(sum) 64 | } 65 | end 66 | return pieces 67 | end 68 | 69 | function replacerolls(s, rolls) 70 | local result = s 71 | for k, n in ipairs(rolls) do 72 | result = result:gsub(n[1], n[2], 1) 73 | end 74 | return result 75 | end 76 | 77 | function evalreturn(s) 78 | local f = loadstring("return " .. s) 79 | return f() 80 | end 81 | 82 | function sc_parserollstr(s) 83 | local r = rolls(s) 84 | log(table.tostring(r)) 85 | return evalreturn(replacerolls(s, r)) 86 | end 87 | 88 | function sc_rollres(c, r) 89 | local os = require "os" 90 | local seed = (os.time() + os.clock()) * 10000000 91 | math.randomseed(seed) 92 | log("Setting Seed: " .. tostring(seed)) 93 | local sum = sc_parserollstr(sc.lgetstr(c, r)) 94 | sc.lsetnum(c, r, sum) 95 | end 96 | -------------------------------------------------------------------------------- /common/scim/lua/h.lua: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lytedev/dotfiles/1396fb6f46245765099e1e40312f7ca8790e7b4a/common/scim/lua/h.lua -------------------------------------------------------------------------------- /common/scim/lua/lua: -------------------------------------------------------------------------------- 1 | /home/daniel/.home/.config/lytedev-dotfiles/common/scim/lua -------------------------------------------------------------------------------- /common/scim/rc: -------------------------------------------------------------------------------- 1 | set autocalc 2 | set numeric 3 | set numeric_decimal=0 4 | set overlap 5 | set xlsx_readformulas 6 | 7 | color "type=HEADINGS fg=WHITE bg=BLACK bold=0 dim=0 standout=0 reverse=0" 8 | color "type=CELL_SELECTION_SC fg=WHITE bg=BLACK bold=1 dim=0 standout=1" 9 | color "type=CELL_SELECTION fg=WHITE bg=BLACK bold=1 dim=0 standout=1" 10 | color "type=STRG fg=WHITE bg=BLACK bold=0 dim=1" 11 | color "type=NUMB fg=BLUE bg=BLACK bold=0 dim=1" 12 | color "type=EXPRESSION fg=GREEN bg=BLACK bold=0 dim=1" 13 | color "type=CELL_NEGATIVE fg=RED bg=BLACK bold=0 dim=1" 14 | 15 | nmap "J" "" 16 | nmap "fi" ":format \"0\"" 17 | nmap "B" "Vir" 18 | nmap " " "Ek" 19 | 20 | -------------------------------------------------------------------------------- /common/terminal_colors: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "${TERM%%-*}" = 'linux' ]; then 4 | return 2>/dev/null || exit 0 5 | fi 6 | 7 | black="11/11/11" 8 | red="f9/26/72" 9 | green="a6/e2/2e" 10 | yellow="f4/bf/75" 11 | blue="66/d9/ef" 12 | magenta="ae/81/ff" 13 | cyan="a1/ef/e4" 14 | white="cccccc" 15 | 16 | if [ -n "$TMUX" ]; then 17 | # tell tmux to pass the escape sequences through 18 | # (Source: http://permalink.gmane.org/gmane.comp.terminal-emulators.tmux.user/1324) 19 | printf_template="\033Ptmux;\033\033]4;%d;rgb:%s\007\033\\" 20 | printf_template_var="\033Ptmux;\033\033]%d;rgb:%s\007\033\\" 21 | printf_template_custom="\033Ptmux;\033\033]%s%s\007\033\\" 22 | elif [ "${TERM%%-*}" = "screen" ]; then 23 | # GNU screen (screen, screen-256color, screen-256color-bce) 24 | printf_template="\033P\033]4;%d;rgb:%s\007\033\\" 25 | printf_template_var="\033P\033]%d;rgb:%s\007\033\\" 26 | printf_template_custom="\033P\033]%s%s\007\033\\" 27 | elif [[ $- != *i* ]]; then 28 | # non-interactive 29 | alias printf=/bin/false 30 | else 31 | printf_template="\033]4;%d;rgb:%s\033\\" 32 | printf_template_var="\033]%d;rgb:%s\033\\" 33 | printf_template_custom="\033]%s%s\033\\" 34 | fi 35 | 36 | c() { 37 | t="${1}"; shift 38 | c="${1}"; shift 39 | for n in "$@"; do 40 | printf "$t" "$n" "$c" 41 | done 42 | } 43 | 44 | ct() { c "$printf_template" "$@"; } 45 | cv() { c "$printf_template" "$@"; } 46 | cc() { c "$printf_template" "$@"; } 47 | 48 | ct $black 0 49 | ct $red 1 9 50 | ct $green 2 10 51 | ct $yellow 3 11 52 | ct $blue 4 12 53 | ct $magenta 5 13 54 | ct $cyan 6 14 55 | ct $white 7 10 56 | 57 | if [ -n "$ITERM_SESSION_ID" ]; then 58 | # iTerm2 proprietary escape codes 59 | printf $printf_template_custom Pg f8f8f2 # forground 60 | printf $printf_template_custom Ph 111111 # background 61 | printf $printf_template_custom Pi f8f8f2 # bold color 62 | printf $printf_template_custom Pj 49483e # selection color 63 | printf $printf_template_custom Pk f8f8f2 # selected text color 64 | printf $printf_template_custom Pl f8f8f2 # cursor 65 | printf $printf_template_custom Pm 111111 # cursor text 66 | else 67 | cv $white 10 68 | cv $black 11 69 | cc ";7" 12 70 | fi 71 | 72 | unset -f c 73 | unset -f ct 74 | unset -f cv 75 | unset -f cc 76 | 77 | unset black 78 | unset red 79 | unset green 80 | unset yellow 81 | unset blue 82 | unset magenta 83 | unset cyan 84 | unset white 85 | 86 | unset printf_template 87 | unset printf_template_var 88 | unset printf_template_custom 89 | -------------------------------------------------------------------------------- /common/tig/rc: -------------------------------------------------------------------------------- 1 | set git-colors = no 2 | 3 | color cursor default black 4 | color title-blur default black 5 | color title-focus default black 6 | -------------------------------------------------------------------------------- /common/tmux/conf: -------------------------------------------------------------------------------- 1 | unbind C-b 2 | set -g prefix C-s 3 | 4 | set -g update-environment "WAYLAND_DISPLAY DISPLAY" 5 | 6 | bind R source-file "$HOME/.tmux.conf" \; display-message "Reloaded $HOME/.tmux.conf" 7 | bind o display-message "Saved pane output to #(tmux-save-buffer '#S')" 8 | bind O run "tmux-edit-buffer" 9 | 10 | bind D attach-session -t . -c '#{pane_current_path}' \; display-message "Set session path to #{pane_current_path}" 11 | 12 | bind H set -s status # toggle status bar 13 | 14 | bind v split-window -h -c "#{pane_current_path}" 15 | bind b split-window -c "#{pane_current_path}" 16 | bind h split-window -c "#{pane_current_path}" 17 | 18 | bind -n C-l select-pane -R 19 | bind -n C-k select-pane -U 20 | 21 | bind -n C-j select-pane -D 22 | # enabling a ^J hotkey causes breakage when pasting anything that start with a newline, since it triggers the hotkey and some weird interaction with bracketed paste causes the pane to enter a broken state 23 | 24 | bind -n C-h select-pane -L 25 | 26 | bind -n C-M-l split-window -h -c "#{pane_current_path}" 27 | bind -n C-M-j split-window -v -c "#{pane_current_path}" 28 | 29 | # tab creation 30 | bind -n C-t new-window 31 | 32 | # tab nav is the default p and n binds 33 | # window switcher is the default w bind 34 | 35 | bind s run "tmux split-window -l 12 'tmuxswitcher'" # session switcher 36 | 37 | set -g mouse on 38 | set -g escape-time 0 39 | 40 | set -g monitor-activity on 41 | set -g visual-bell off 42 | set -g bell-action other 43 | set -g activity-action none 44 | 45 | set -g mode-keys vi 46 | set -g history-limit 1000000 47 | 48 | set -g status on 49 | set -g status-position bottom 50 | set -g status-style "fg=colour8 bg=default" 51 | set -g status-interval 5 52 | set -g status-left-length 50 53 | set -g window-status-style "fg=colour8 bg=default" 54 | set -g window-status-format "#W" 55 | set -g window-status-separator " " 56 | set -g window-status-activity-style "fg=colour7 bg=default" 57 | set -g window-status-bell-style "fg=colour1 bg=default" 58 | set -g window-status-current-style "fg=colour4 bg=default" 59 | set -g window-status-current-format " #W " 60 | set -g status-left "#{client_user}@#h:#S " 61 | set -g status-right "#(kubeline && printf ' ')" 62 | set -g status-left-length 1000 63 | 64 | set -g message-style "fg=colour7 bg=default" 65 | set -g pane-active-border-style fg=blue 66 | set -g pane-border-style fg=colour0 67 | set -g clock-mode-colour colour8 68 | set -g base-index 1 69 | set -g pane-base-index 1 70 | 71 | set -g window-status-current-format "#W" 72 | 73 | # present a menu of urls to open from the visible pane 74 | # TODO: fuzzy search this 75 | # bind u capture-pane \;\ 76 | # save-buffer /tmp/tmux-buffer \;\ 77 | # split-window -l 10 "urlscan /tmp/tmux-buffer" 78 | 79 | bind -T copy-mode-vi "y" send-keys -X copy-pipe-no-clear 'clip' \; display-message 'Copied to clipboard!' 80 | bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-no-clear 'clip' \; display-message 'Copied to clipboard!' 81 | 82 | bind K kill-pane 83 | bind C-S-k kill-window 84 | 85 | # Activate OFF mode 86 | bind -n M-o \ 87 | set prefix None \;\ 88 | set key-table off \;\ 89 | set -ag status-right " OFF" 90 | 91 | # Disable OFF mode 92 | bind -T off M-O \ 93 | set -u prefix \;\ 94 | set -u key-table \;\ 95 | source-file "$HOME/.tmux.conf" 96 | 97 | source-file "$ENV_PATH/*/tmux.d.conf" 98 | 99 | set -g @plugin 'tmux-plugins/tpm' 100 | set -g @plugin 'tmux-plugins/tmux-resurrect' 101 | set -g @plugin 'tmux-plugins/tmux-continuum' 102 | 103 | set -g @resurrect-capture-pane-contents 'on' 104 | set -g @resurrect-processes 'helix hx vi vim nvim emacs man less more tail top htop btm irssi weechat mutt "git log" iex mix deno watchexec mosh-client ssh' 105 | 106 | bind A run-shell "#{@resurrect-save-script-path}" 107 | bind L run-shell "#{@resurrect-restore-script-path}" 108 | 109 | set -g @continuum-restore 'on' 110 | set -g @continuum-save-interval '120' -------------------------------------------------------------------------------- /common/weechat/.gitignore: -------------------------------------------------------------------------------- 1 | logs 2 | -------------------------------------------------------------------------------- /common/weechat/alias.conf: -------------------------------------------------------------------------------- 1 | # 2 | # weechat -- alias.conf 3 | # 4 | # WARNING: It is NOT recommended to edit this file by hand, 5 | # especially if WeeChat is running. 6 | # 7 | # Use /set or similar command to change settings in WeeChat. 8 | # 9 | # For more info, see: https://weechat.org/doc/quickstart 10 | # 11 | 12 | [cmd] 13 | AAWAY = "allserv /away" 14 | ANICK = "allserv /nick" 15 | BEEP = "print -beep" 16 | BYE = "quit" 17 | C = "buffer clear" 18 | CHAT = "dcc chat" 19 | CL = "buffer clear" 20 | CLOSE = "buffer close" 21 | EXIT = "quit" 22 | IG = "ignore" 23 | J = "join" 24 | K = "kick" 25 | KB = "kickban" 26 | LEAVE = "part" 27 | M = "msg" 28 | MSGBUF = "command -buffer $1 * /input send $2-" 29 | MUB = "unban *" 30 | N = "names" 31 | Q = "query" 32 | REDRAW = "window refresh" 33 | SAY = "msg *" 34 | SIGNOFF = "quit" 35 | T = "topic" 36 | UB = "unban" 37 | UMODE = "mode $nick" 38 | V = "command core version" 39 | W = "who" 40 | WC = "window close" 41 | WI = "whois" 42 | WII = "whois $1 $1" 43 | WM = "window merge" 44 | WW = "whowas" 45 | 46 | [completion] 47 | MSGBUF = "%(buffers_plugins_names)" 48 | -------------------------------------------------------------------------------- /common/weechat/buflist.conf: -------------------------------------------------------------------------------- 1 | # 2 | # weechat -- buflist.conf 3 | # 4 | # WARNING: It is NOT recommended to edit this file by hand, 5 | # especially if WeeChat is running. 6 | # 7 | # Use /set or similar command to change settings in WeeChat. 8 | # 9 | # For more info, see: https://weechat.org/doc/quickstart 10 | # 11 | 12 | [look] 13 | add_newline = on 14 | auto_scroll = 50 15 | display_conditions = "${buffer.hidden}==0" 16 | enabled = on 17 | mouse_jump_visited_buffer = off 18 | mouse_move_buffer = on 19 | mouse_wheel = on 20 | nick_prefix = off 21 | nick_prefix_empty = on 22 | signals_refresh = "" 23 | sort = "number,-active" 24 | use_items = 1 25 | 26 | [format] 27 | buffer = "${format_number}${indent}${format_nick_prefix}${color_hotlist}${format_name}" 28 | buffer_current = "${color:,blue}${format_buffer}" 29 | hotlist = " ${color:green}(${hotlist}${color:green})" 30 | hotlist_highlight = "${color:magenta}" 31 | hotlist_low = "${color:white}" 32 | hotlist_message = "${color:brown}" 33 | hotlist_none = "${color:default}" 34 | hotlist_private = "${color:green}" 35 | hotlist_separator = "${color:default}," 36 | indent = " " 37 | lag = " ${color:green}[${color:brown}${lag}${color:green}]" 38 | name = "${name}" 39 | nick_prefix = "${color_nick_prefix}${nick_prefix}" 40 | number = "${color:green}${number}${if:${number_displayed}?.: }" 41 | -------------------------------------------------------------------------------- /common/weechat/charset.conf: -------------------------------------------------------------------------------- 1 | # 2 | # weechat -- charset.conf 3 | # 4 | # WARNING: It is NOT recommended to edit this file by hand, 5 | # especially if WeeChat is running. 6 | # 7 | # Use /set or similar command to change settings in WeeChat. 8 | # 9 | # For more info, see: https://weechat.org/doc/quickstart 10 | # 11 | 12 | [default] 13 | decode = "iso-8859-1" 14 | encode = "" 15 | 16 | [decode] 17 | 18 | [encode] 19 | -------------------------------------------------------------------------------- /common/weechat/exec.conf: -------------------------------------------------------------------------------- 1 | # 2 | # weechat -- exec.conf 3 | # 4 | # WARNING: It is NOT recommended to edit this file by hand, 5 | # especially if WeeChat is running. 6 | # 7 | # Use /set or similar command to change settings in WeeChat. 8 | # 9 | # For more info, see: https://weechat.org/doc/quickstart 10 | # 11 | 12 | [command] 13 | default_options = "" 14 | purge_delay = 0 15 | shell = "${env:SHELL}" 16 | 17 | [color] 18 | flag_finished = lightred 19 | flag_running = lightgreen 20 | -------------------------------------------------------------------------------- /common/weechat/fifo.conf: -------------------------------------------------------------------------------- 1 | # 2 | # weechat -- fifo.conf 3 | # 4 | # WARNING: It is NOT recommended to edit this file by hand, 5 | # especially if WeeChat is running. 6 | # 7 | # Use /set or similar command to change settings in WeeChat. 8 | # 9 | # For more info, see: https://weechat.org/doc/quickstart 10 | # 11 | 12 | [file] 13 | enabled = on 14 | path = "%h/weechat_fifo" 15 | -------------------------------------------------------------------------------- /common/weechat/fset.conf: -------------------------------------------------------------------------------- 1 | # 2 | # weechat -- fset.conf 3 | # 4 | # WARNING: It is NOT recommended to edit this file by hand, 5 | # especially if WeeChat is running. 6 | # 7 | # Use /set or similar command to change settings in WeeChat. 8 | # 9 | # For more info, see: https://weechat.org/doc/quickstart 10 | # 11 | 12 | [look] 13 | auto_refresh = "*" 14 | auto_unmark = off 15 | condition_catch_set = "${count} >= 1" 16 | export_help_default = on 17 | format_number = 1 18 | marked_string = "*" 19 | scroll_horizontal = 10 20 | show_plugins_desc = off 21 | sort = "~name" 22 | unmarked_string = " " 23 | use_color_value = off 24 | use_keys = on 25 | use_mute = off 26 | 27 | [format] 28 | export_help = "# ${description2}" 29 | export_option = "/set ${name} ${quoted_value}" 30 | export_option_null = "/unset ${name}" 31 | option1 = "" 32 | option2 = "${marked} ${name} ${type} ${value2}${newline} ${empty_name} ${_default_value}${color:darkgray} -- ${min}..${max}${newline} ${empty_name} ${description}" 33 | 34 | [color] 35 | default_value = default 36 | default_value_selected = white 37 | description = default 38 | description_selected = white 39 | file = default 40 | file_changed = brown 41 | file_changed_selected = yellow 42 | file_selected = white 43 | help_default_value = white 44 | help_description = default 45 | help_name = white 46 | help_quotes = darkgray 47 | help_values = default 48 | index = cyan 49 | index_selected = lightcyan 50 | line_marked_bg1 = default 51 | line_marked_bg2 = default 52 | line_selected_bg1 = blue 53 | line_selected_bg2 = red 54 | marked = brown 55 | marked_selected = yellow 56 | max = default 57 | max_selected = white 58 | min = default 59 | min_selected = white 60 | name = default 61 | name_changed = brown 62 | name_changed_selected = yellow 63 | name_selected = white 64 | option = default 65 | option_changed = brown 66 | option_changed_selected = yellow 67 | option_selected = white 68 | parent_name = default 69 | parent_name_selected = white 70 | parent_value = cyan 71 | parent_value_selected = lightcyan 72 | quotes = darkgray 73 | quotes_changed = default 74 | quotes_changed_selected = white 75 | quotes_selected = default 76 | section = default 77 | section_changed = brown 78 | section_changed_selected = yellow 79 | section_selected = white 80 | string_values = default 81 | string_values_selected = white 82 | title_count_options = cyan 83 | title_current_option = lightcyan 84 | title_filter = yellow 85 | title_marked_options = lightgreen 86 | title_sort = white 87 | type = green 88 | type_selected = lightgreen 89 | unmarked = default 90 | unmarked_selected = white 91 | value = cyan 92 | value_changed = brown 93 | value_changed_selected = yellow 94 | value_selected = lightcyan 95 | value_undef = magenta 96 | value_undef_selected = lightmagenta 97 | -------------------------------------------------------------------------------- /common/weechat/guile.conf: -------------------------------------------------------------------------------- 1 | # 2 | # weechat -- guile.conf 3 | # 4 | # WARNING: It is NOT recommended to edit this file by hand, 5 | # especially if WeeChat is running. 6 | # 7 | # Use /set or similar command to change settings in WeeChat. 8 | # 9 | # For more info, see: https://weechat.org/doc/quickstart 10 | # 11 | 12 | [look] 13 | check_license = off 14 | eval_keep_context = on 15 | -------------------------------------------------------------------------------- /common/weechat/irc.conf: -------------------------------------------------------------------------------- 1 | # 2 | # weechat -- irc.conf 3 | # 4 | # WARNING: It is NOT recommended to edit this file by hand, 5 | # especially if WeeChat is running. 6 | # 7 | # Use /set or similar command to change settings in WeeChat. 8 | # 9 | # For more info, see: https://weechat.org/doc/quickstart 10 | # 11 | 12 | [look] 13 | buffer_open_before_autojoin = on 14 | buffer_open_before_join = off 15 | buffer_switch_autojoin = on 16 | buffer_switch_join = on 17 | color_nicks_in_names = off 18 | color_nicks_in_nicklist = off 19 | color_nicks_in_server_messages = on 20 | color_pv_nick_like_channel = on 21 | ctcp_time_format = "%a, %d %b %Y %T %z" 22 | display_away = local 23 | display_ctcp_blocked = on 24 | display_ctcp_reply = on 25 | display_ctcp_unknown = on 26 | display_host_join = on 27 | display_host_join_local = on 28 | display_host_quit = on 29 | display_join_message = "329,332,333,366" 30 | display_old_topic = on 31 | display_pv_away_once = on 32 | display_pv_back = on 33 | display_pv_warning_address = off 34 | highlight_channel = "$nick" 35 | highlight_pv = "$nick" 36 | highlight_server = "$nick" 37 | highlight_tags_restrict = "irc_privmsg,irc_notice" 38 | item_channel_modes_hide_args = "k" 39 | item_display_server = buffer_plugin 40 | item_nick_modes = on 41 | item_nick_prefix = on 42 | join_auto_add_chantype = off 43 | msgbuffer_fallback = current 44 | new_channel_position = none 45 | new_pv_position = none 46 | nick_completion_smart = speakers 47 | nick_mode = prefix 48 | nick_mode_empty = off 49 | nicks_hide_password = "nickserv" 50 | notice_as_pv = auto 51 | notice_welcome_redirect = on 52 | notice_welcome_tags = "" 53 | notify_tags_ison = "notify_message" 54 | notify_tags_whois = "notify_message" 55 | part_closes_buffer = off 56 | pv_buffer = independent 57 | pv_tags = "notify_private" 58 | raw_messages = 256 59 | server_buffer = merge_with_core 60 | smart_filter = on 61 | smart_filter_account = on 62 | smart_filter_chghost = on 63 | smart_filter_delay = 5 64 | smart_filter_join = on 65 | smart_filter_join_unmask = 30 66 | smart_filter_mode = "+" 67 | smart_filter_nick = on 68 | smart_filter_quit = on 69 | temporary_servers = off 70 | topic_strip_colors = off 71 | 72 | [color] 73 | input_nick = lightcyan 74 | item_channel_modes = default 75 | item_lag_counting = default 76 | item_lag_finished = yellow 77 | item_nick_modes = default 78 | message_account = cyan 79 | message_chghost = brown 80 | message_join = green 81 | message_kick = red 82 | message_quit = red 83 | mirc_remap = "1,-1:darkgray" 84 | nick_prefixes = "y:lightred;q:lightred;a:lightcyan;o:lightgreen;h:lightmagenta;v:yellow;*:lightblue" 85 | notice = green 86 | reason_kick = default 87 | reason_quit = default 88 | topic_current = default 89 | topic_new = white 90 | topic_old = default 91 | 92 | [network] 93 | autoreconnect_delay_growing = 2 94 | autoreconnect_delay_max = 600 95 | ban_mask_default = "*!$ident@$host" 96 | colors_receive = on 97 | colors_send = on 98 | lag_check = 60 99 | lag_max = 1800 100 | lag_min_show = 500 101 | lag_reconnect = 300 102 | lag_refresh_interval = 1 103 | notify_check_ison = 1 104 | notify_check_whois = 5 105 | sasl_fail_unavailable = on 106 | send_unknown_commands = off 107 | whois_double_nick = off 108 | 109 | [msgbuffer] 110 | 111 | [ctcp] 112 | 113 | [ignore] 114 | 115 | [server_default] 116 | addresses = "" 117 | anti_flood_prio_high = 2 118 | anti_flood_prio_low = 2 119 | autoconnect = off 120 | autojoin = "" 121 | autoreconnect = on 122 | autoreconnect_delay = 10 123 | autorejoin = off 124 | autorejoin_delay = 30 125 | away_check = 0 126 | away_check_max_nicks = 25 127 | capabilities = "" 128 | charset_message = message 129 | command = "" 130 | command_delay = 0 131 | connection_timeout = 60 132 | default_chantypes = "#&" 133 | ipv6 = on 134 | local_hostname = "" 135 | msg_kick = "" 136 | msg_part = "WeeChat ${info:version}" 137 | msg_quit = "WeeChat ${info:version}" 138 | nicks = "daniel,daniel1,daniel2,daniel3,daniel4" 139 | nicks_alternate = on 140 | notify = "" 141 | password = "" 142 | proxy = "" 143 | realname = "" 144 | sasl_fail = continue 145 | sasl_key = "" 146 | sasl_mechanism = plain 147 | sasl_password = "" 148 | sasl_timeout = 15 149 | sasl_username = "" 150 | split_msg_max_length = 512 151 | ssl = off 152 | ssl_cert = "" 153 | ssl_dhkey_size = 2048 154 | ssl_fingerprint = "" 155 | ssl_password = "" 156 | ssl_priorities = "NORMAL:-VERS-SSL3.0" 157 | ssl_verify = on 158 | usermode = "" 159 | username = "daniel" 160 | 161 | [server] 162 | soupwhale.addresses = "irc.soupwhale.com" 163 | soupwhale.proxy 164 | soupwhale.ipv6 165 | soupwhale.ssl 166 | soupwhale.ssl_cert 167 | soupwhale.ssl_password 168 | soupwhale.ssl_priorities 169 | soupwhale.ssl_dhkey_size 170 | soupwhale.ssl_fingerprint 171 | soupwhale.ssl_verify 172 | soupwhale.password 173 | soupwhale.capabilities 174 | soupwhale.sasl_mechanism 175 | soupwhale.sasl_username 176 | soupwhale.sasl_password 177 | soupwhale.sasl_key 178 | soupwhale.sasl_timeout 179 | soupwhale.sasl_fail 180 | soupwhale.autoconnect 181 | soupwhale.autoreconnect 182 | soupwhale.autoreconnect_delay 183 | soupwhale.nicks 184 | soupwhale.nicks_alternate 185 | soupwhale.username 186 | soupwhale.realname 187 | soupwhale.local_hostname 188 | soupwhale.usermode 189 | soupwhale.command 190 | soupwhale.command_delay 191 | soupwhale.autojoin 192 | soupwhale.autorejoin 193 | soupwhale.autorejoin_delay 194 | soupwhale.connection_timeout 195 | soupwhale.anti_flood_prio_high 196 | soupwhale.anti_flood_prio_low 197 | soupwhale.away_check 198 | soupwhale.away_check_max_nicks 199 | soupwhale.msg_kick 200 | soupwhale.msg_part 201 | soupwhale.msg_quit 202 | soupwhale.notify 203 | soupwhale.split_msg_max_length 204 | soupwhale.charset_message 205 | soupwhale.default_chantypes 206 | soup.addresses = "irc.soupwhale.com" 207 | soup.proxy 208 | soup.ipv6 209 | soup.ssl 210 | soup.ssl_cert 211 | soup.ssl_password 212 | soup.ssl_priorities 213 | soup.ssl_dhkey_size 214 | soup.ssl_fingerprint 215 | soup.ssl_verify 216 | soup.password 217 | soup.capabilities 218 | soup.sasl_mechanism 219 | soup.sasl_username 220 | soup.sasl_password 221 | soup.sasl_key 222 | soup.sasl_timeout 223 | soup.sasl_fail 224 | soup.autoconnect 225 | soup.autoreconnect 226 | soup.autoreconnect_delay 227 | soup.nicks 228 | soup.nicks_alternate 229 | soup.username 230 | soup.realname 231 | soup.local_hostname 232 | soup.usermode 233 | soup.command 234 | soup.command_delay 235 | soup.autojoin 236 | soup.autorejoin 237 | soup.autorejoin_delay 238 | soup.connection_timeout 239 | soup.anti_flood_prio_high 240 | soup.anti_flood_prio_low 241 | soup.away_check 242 | soup.away_check_max_nicks 243 | soup.msg_kick 244 | soup.msg_part 245 | soup.msg_quit 246 | soup.notify 247 | soup.split_msg_max_length 248 | soup.charset_message 249 | soup.default_chantypes 250 | freenode.addresses = "irc.freenode.net" 251 | freenode.proxy 252 | freenode.ipv6 253 | freenode.ssl 254 | freenode.ssl_cert 255 | freenode.ssl_password 256 | freenode.ssl_priorities 257 | freenode.ssl_dhkey_size 258 | freenode.ssl_fingerprint 259 | freenode.ssl_verify 260 | freenode.password 261 | freenode.capabilities 262 | freenode.sasl_mechanism 263 | freenode.sasl_username 264 | freenode.sasl_password 265 | freenode.sasl_key 266 | freenode.sasl_timeout 267 | freenode.sasl_fail 268 | freenode.autoconnect 269 | freenode.autoreconnect 270 | freenode.autoreconnect_delay 271 | freenode.nicks 272 | freenode.nicks_alternate 273 | freenode.username 274 | freenode.realname 275 | freenode.local_hostname 276 | freenode.usermode 277 | freenode.command 278 | freenode.command_delay 279 | freenode.autojoin 280 | freenode.autorejoin 281 | freenode.autorejoin_delay 282 | freenode.connection_timeout 283 | freenode.anti_flood_prio_high 284 | freenode.anti_flood_prio_low 285 | freenode.away_check 286 | freenode.away_check_max_nicks 287 | freenode.msg_kick 288 | freenode.msg_part 289 | freenode.msg_quit 290 | freenode.notify 291 | freenode.split_msg_max_length 292 | freenode.charset_message 293 | freenode.default_chantypes 294 | -------------------------------------------------------------------------------- /common/weechat/logger.conf: -------------------------------------------------------------------------------- 1 | # 2 | # weechat -- logger.conf 3 | # 4 | # WARNING: It is NOT recommended to edit this file by hand, 5 | # especially if WeeChat is running. 6 | # 7 | # Use /set or similar command to change settings in WeeChat. 8 | # 9 | # For more info, see: https://weechat.org/doc/quickstart 10 | # 11 | 12 | [look] 13 | backlog = 20 14 | backlog_conditions = "" 15 | 16 | [color] 17 | backlog_end = default 18 | backlog_line = default 19 | 20 | [file] 21 | auto_log = on 22 | color_lines = off 23 | flush_delay = 120 24 | fsync = off 25 | info_lines = off 26 | mask = "$plugin.$name.weechatlog" 27 | name_lower_case = on 28 | nick_prefix = "" 29 | nick_suffix = "" 30 | path = "%h/logs/" 31 | replacement_char = "_" 32 | time_format = "%Y-%m-%d %H:%M:%S" 33 | 34 | [level] 35 | 36 | [mask] 37 | -------------------------------------------------------------------------------- /common/weechat/logs/core.weechat.weechatlog: -------------------------------------------------------------------------------- 1 | 2021-03-19 21:11:45 Plugins loaded: alias, buflist, charset, exec, fifo, fset, guile, irc, logger, lua, perl, python, relay, ruby, script, spell, tcl, trigger, xfer 2 | -------------------------------------------------------------------------------- /common/weechat/lua.conf: -------------------------------------------------------------------------------- 1 | # 2 | # weechat -- lua.conf 3 | # 4 | # WARNING: It is NOT recommended to edit this file by hand, 5 | # especially if WeeChat is running. 6 | # 7 | # Use /set or similar command to change settings in WeeChat. 8 | # 9 | # For more info, see: https://weechat.org/doc/quickstart 10 | # 11 | 12 | [look] 13 | check_license = off 14 | eval_keep_context = on 15 | -------------------------------------------------------------------------------- /common/weechat/perl.conf: -------------------------------------------------------------------------------- 1 | # 2 | # weechat -- perl.conf 3 | # 4 | # WARNING: It is NOT recommended to edit this file by hand, 5 | # especially if WeeChat is running. 6 | # 7 | # Use /set or similar command to change settings in WeeChat. 8 | # 9 | # For more info, see: https://weechat.org/doc/quickstart 10 | # 11 | 12 | [look] 13 | check_license = off 14 | eval_keep_context = on 15 | -------------------------------------------------------------------------------- /common/weechat/plugins.conf: -------------------------------------------------------------------------------- 1 | # 2 | # weechat -- plugins.conf 3 | # 4 | # WARNING: It is NOT recommended to edit this file by hand, 5 | # especially if WeeChat is running. 6 | # 7 | # Use /set or similar command to change settings in WeeChat. 8 | # 9 | # For more info, see: https://weechat.org/doc/quickstart 10 | # 11 | 12 | [var] 13 | 14 | [desc] 15 | -------------------------------------------------------------------------------- /common/weechat/python.conf: -------------------------------------------------------------------------------- 1 | # 2 | # weechat -- python.conf 3 | # 4 | # WARNING: It is NOT recommended to edit this file by hand, 5 | # especially if WeeChat is running. 6 | # 7 | # Use /set or similar command to change settings in WeeChat. 8 | # 9 | # For more info, see: https://weechat.org/doc/quickstart 10 | # 11 | 12 | [look] 13 | check_license = off 14 | eval_keep_context = on 15 | -------------------------------------------------------------------------------- /common/weechat/relay.conf: -------------------------------------------------------------------------------- 1 | # 2 | # weechat -- relay.conf 3 | # 4 | # WARNING: It is NOT recommended to edit this file by hand, 5 | # especially if WeeChat is running. 6 | # 7 | # Use /set or similar command to change settings in WeeChat. 8 | # 9 | # For more info, see: https://weechat.org/doc/quickstart 10 | # 11 | 12 | [look] 13 | auto_open_buffer = on 14 | raw_messages = 256 15 | 16 | [color] 17 | client = cyan 18 | status_active = lightblue 19 | status_auth_failed = lightred 20 | status_connecting = yellow 21 | status_disconnected = lightred 22 | status_waiting_auth = brown 23 | text = default 24 | text_bg = default 25 | text_selected = white 26 | 27 | [network] 28 | allow_empty_password = off 29 | allowed_ips = "" 30 | auth_timeout = 60 31 | bind_address = "" 32 | clients_purge_delay = 0 33 | compression_level = 6 34 | ipv6 = on 35 | max_clients = 5 36 | nonce_size = 16 37 | password = "" 38 | password_hash_algo = "*" 39 | password_hash_iterations = 100000 40 | ssl_cert_key = "%h/ssl/relay.pem" 41 | ssl_priorities = "NORMAL:-VERS-SSL3.0" 42 | totp_secret = "" 43 | totp_window = 0 44 | websocket_allowed_origins = "" 45 | 46 | [irc] 47 | backlog_max_minutes = 1440 48 | backlog_max_number = 256 49 | backlog_since_last_disconnect = on 50 | backlog_since_last_message = off 51 | backlog_tags = "irc_privmsg" 52 | backlog_time_format = "[%H:%M] " 53 | 54 | [weechat] 55 | commands = "" 56 | 57 | [port] 58 | 59 | [path] 60 | -------------------------------------------------------------------------------- /common/weechat/ruby.conf: -------------------------------------------------------------------------------- 1 | # 2 | # weechat -- ruby.conf 3 | # 4 | # WARNING: It is NOT recommended to edit this file by hand, 5 | # especially if WeeChat is running. 6 | # 7 | # Use /set or similar command to change settings in WeeChat. 8 | # 9 | # For more info, see: https://weechat.org/doc/quickstart 10 | # 11 | 12 | [look] 13 | check_license = off 14 | eval_keep_context = on 15 | -------------------------------------------------------------------------------- /common/weechat/script.conf: -------------------------------------------------------------------------------- 1 | # 2 | # weechat -- script.conf 3 | # 4 | # WARNING: It is NOT recommended to edit this file by hand, 5 | # especially if WeeChat is running. 6 | # 7 | # Use /set or similar command to change settings in WeeChat. 8 | # 9 | # For more info, see: https://weechat.org/doc/quickstart 10 | # 11 | 12 | [look] 13 | columns = "%s %n %V %v %u | %d | %t" 14 | diff_color = on 15 | diff_command = "auto" 16 | display_source = on 17 | quiet_actions = on 18 | sort = "i,p,n" 19 | translate_description = on 20 | use_keys = on 21 | 22 | [color] 23 | status_autoloaded = cyan 24 | status_held = white 25 | status_installed = lightcyan 26 | status_obsolete = lightmagenta 27 | status_popular = yellow 28 | status_running = lightgreen 29 | status_unknown = lightred 30 | text = default 31 | text_bg = default 32 | text_bg_selected = red 33 | text_date = default 34 | text_date_selected = white 35 | text_delimiters = default 36 | text_description = default 37 | text_description_selected = white 38 | text_extension = default 39 | text_extension_selected = white 40 | text_name = cyan 41 | text_name_selected = lightcyan 42 | text_selected = white 43 | text_tags = brown 44 | text_tags_selected = yellow 45 | text_version = magenta 46 | text_version_loaded = default 47 | text_version_loaded_selected = white 48 | text_version_selected = lightmagenta 49 | 50 | [scripts] 51 | autoload = on 52 | cache_expire = 1440 53 | download_enabled = off 54 | download_timeout = 30 55 | hold = "" 56 | path = "%h/script" 57 | url = "https://weechat.org/files/plugins.xml.gz" 58 | -------------------------------------------------------------------------------- /common/weechat/sec.conf: -------------------------------------------------------------------------------- 1 | # 2 | # weechat -- sec.conf 3 | # 4 | # WARNING: It is NOT recommended to edit this file by hand, 5 | # especially if WeeChat is running. 6 | # 7 | # Use /set or similar command to change settings in WeeChat. 8 | # 9 | # For more info, see: https://weechat.org/doc/quickstart 10 | # 11 | 12 | [crypt] 13 | cipher = aes256 14 | hash_algo = sha256 15 | passphrase_command = "" 16 | salt = on 17 | 18 | [data] 19 | -------------------------------------------------------------------------------- /common/weechat/spell.conf: -------------------------------------------------------------------------------- 1 | # 2 | # weechat -- spell.conf 3 | # 4 | # WARNING: It is NOT recommended to edit this file by hand, 5 | # especially if WeeChat is running. 6 | # 7 | # Use /set or similar command to change settings in WeeChat. 8 | # 9 | # For more info, see: https://weechat.org/doc/quickstart 10 | # 11 | 12 | [color] 13 | misspelled = lightred 14 | suggestion = default 15 | suggestion_delimiter_dict = cyan 16 | suggestion_delimiter_word = cyan 17 | 18 | [check] 19 | commands = "away,command,cycle,kick,kickban,me,msg,notice,part,query,quit,topic" 20 | default_dict = "" 21 | during_search = off 22 | enabled = off 23 | real_time = off 24 | suggestions = -1 25 | word_min_length = 2 26 | 27 | [dict] 28 | 29 | [look] 30 | suggestion_delimiter_dict = " / " 31 | suggestion_delimiter_word = "," 32 | 33 | [option] 34 | -------------------------------------------------------------------------------- /common/weechat/tcl.conf: -------------------------------------------------------------------------------- 1 | # 2 | # weechat -- tcl.conf 3 | # 4 | # WARNING: It is NOT recommended to edit this file by hand, 5 | # especially if WeeChat is running. 6 | # 7 | # Use /set or similar command to change settings in WeeChat. 8 | # 9 | # For more info, see: https://weechat.org/doc/quickstart 10 | # 11 | 12 | [look] 13 | check_license = off 14 | eval_keep_context = on 15 | -------------------------------------------------------------------------------- /common/weechat/trigger.conf: -------------------------------------------------------------------------------- 1 | # 2 | # weechat -- trigger.conf 3 | # 4 | # WARNING: It is NOT recommended to edit this file by hand, 5 | # especially if WeeChat is running. 6 | # 7 | # Use /set or similar command to change settings in WeeChat. 8 | # 9 | # For more info, see: https://weechat.org/doc/quickstart 10 | # 11 | 12 | [look] 13 | enabled = on 14 | monitor_strip_colors = off 15 | 16 | [color] 17 | flag_command = lightgreen 18 | flag_conditions = yellow 19 | flag_post_action = lightblue 20 | flag_regex = lightcyan 21 | flag_return_code = lightmagenta 22 | regex = white 23 | replace = cyan 24 | trigger = green 25 | trigger_disabled = red 26 | 27 | [trigger] 28 | beep.arguments = "" 29 | beep.command = "/print -beep" 30 | beep.conditions = "${tg_displayed} && (${tg_highlight} || ${tg_msg_pv})" 31 | beep.enabled = on 32 | beep.hook = print 33 | beep.post_action = none 34 | beep.regex = "" 35 | beep.return_code = ok 36 | cmd_pass.arguments = "5000|input_text_display;5000|history_add;5000|irc_command_auth" 37 | cmd_pass.command = "" 38 | cmd_pass.conditions = "" 39 | cmd_pass.enabled = on 40 | cmd_pass.hook = modifier 41 | cmd_pass.post_action = none 42 | cmd_pass.regex = "==^((/(msg|m|quote) +(-server +[^ ]+ +)?nickserv +(id|identify|set +password|ghost +[^ ]+|release +[^ ]+|regain +[^ ]+|recover +[^ ]+) +)|/oper +[^ ]+ +|/quote +pass +|/set +[^ ]*password[^ ]* +|/secure +(passphrase|decrypt|set +[^ ]+) +)(.*)==${re:1}${hide:*,${re:+}}" 43 | cmd_pass.return_code = ok 44 | cmd_pass_register.arguments = "5000|input_text_display;5000|history_add;5000|irc_command_auth" 45 | cmd_pass_register.command = "" 46 | cmd_pass_register.conditions = "" 47 | cmd_pass_register.enabled = on 48 | cmd_pass_register.hook = modifier 49 | cmd_pass_register.post_action = none 50 | cmd_pass_register.regex = "==^(/(msg|m|quote) +nickserv +register +)([^ ]+)(.*)==${re:1}${hide:*,${re:3}}${re:4}" 51 | cmd_pass_register.return_code = ok 52 | msg_auth.arguments = "5000|irc_message_auth" 53 | msg_auth.command = "" 54 | msg_auth.conditions = "" 55 | msg_auth.enabled = on 56 | msg_auth.hook = modifier 57 | msg_auth.post_action = none 58 | msg_auth.regex = "==^(.*(id|identify|set +password|register|ghost +[^ ]+|release +[^ ]+|regain +[^ ]+|recover +[^ ]+) +)(.*)==${re:1}${hide:*,${re:+}}" 59 | msg_auth.return_code = ok 60 | server_pass.arguments = "5000|input_text_display;5000|history_add" 61 | server_pass.command = "" 62 | server_pass.conditions = "" 63 | server_pass.enabled = on 64 | server_pass.hook = modifier 65 | server_pass.post_action = none 66 | server_pass.regex = "==^(/(server|connect) .*-(sasl_)?password=)([^ ]+)(.*)==${re:1}${hide:*,${re:4}}${re:5}" 67 | server_pass.return_code = ok 68 | -------------------------------------------------------------------------------- /common/weechat/weechat: -------------------------------------------------------------------------------- 1 | /home/daniel/.home/.config/lytedev-dotfiles/common/weechat -------------------------------------------------------------------------------- /common/weechat/xfer.conf: -------------------------------------------------------------------------------- 1 | # 2 | # weechat -- xfer.conf 3 | # 4 | # WARNING: It is NOT recommended to edit this file by hand, 5 | # especially if WeeChat is running. 6 | # 7 | # Use /set or similar command to change settings in WeeChat. 8 | # 9 | # For more info, see: https://weechat.org/doc/quickstart 10 | # 11 | 12 | [look] 13 | auto_open_buffer = on 14 | progress_bar_size = 20 15 | pv_tags = "notify_private" 16 | 17 | [color] 18 | status_aborted = lightred 19 | status_active = lightblue 20 | status_connecting = yellow 21 | status_done = lightgreen 22 | status_failed = lightred 23 | status_waiting = lightcyan 24 | text = default 25 | text_bg = default 26 | text_selected = white 27 | 28 | [network] 29 | blocksize = 65536 30 | fast_send = on 31 | own_ip = "" 32 | port_range = "" 33 | send_ack = on 34 | speed_limit_recv = 0 35 | speed_limit_send = 0 36 | timeout = 300 37 | 38 | [file] 39 | auto_accept_chats = off 40 | auto_accept_files = off 41 | auto_accept_nicks = "" 42 | auto_check_crc32 = off 43 | auto_rename = on 44 | auto_resume = on 45 | convert_spaces = on 46 | download_path = "%h/xfer" 47 | download_temporary_suffix = ".part" 48 | upload_path = "~" 49 | use_nick_in_filename = on 50 | -------------------------------------------------------------------------------- /common/wezterm/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lytedev/dotfiles/1396fb6f46245765099e1e40312f7ca8790e7b4a/common/wezterm/.gitkeep -------------------------------------------------------------------------------- /common/wezterm/catpuccin.lua: -------------------------------------------------------------------------------- 1 | local wezterm = require("wezterm") 2 | 3 | local M = {} 4 | 5 | local colors = { 6 | latte = { 7 | rosewater = "#dc8a78", 8 | flamingo = "#dd7878", 9 | pink = "#ea76cb", 10 | mauve = "#8839ef", 11 | red = "#d20f39", 12 | maroon = "#e64553", 13 | peach = "#fe640b", 14 | yellow = "#df8e1d", 15 | green = "#40a02b", 16 | teal = "#179299", 17 | sky = "#04a5e5", 18 | sapphire = "#209fb5", 19 | blue = "#1e66f5", 20 | lavender = "#7287fd", 21 | text = "#4c4f69", 22 | subtext1 = "#5c5f77", 23 | subtext0 = "#6c6f85", 24 | overlay2 = "#7c7f93", 25 | overlay1 = "#8c8fa1", 26 | overlay0 = "#9ca0b0", 27 | surface2 = "#acb0be", 28 | surface1 = "#bcc0cc", 29 | surface0 = "#ccd0da", 30 | crust = "#dce0e8", 31 | mantle = "#e6e9ef", 32 | base = "#eff1f5", 33 | }, 34 | frappe = { 35 | rosewater = "#f2d5cf", 36 | flamingo = "#eebebe", 37 | pink = "#f4b8e4", 38 | mauve = "#ca9ee6", 39 | red = "#e78284", 40 | maroon = "#ea999c", 41 | peach = "#ef9f76", 42 | yellow = "#e5c890", 43 | green = "#a6d189", 44 | teal = "#81c8be", 45 | sky = "#99d1db", 46 | sapphire = "#85c1dc", 47 | blue = "#8caaee", 48 | lavender = "#babbf1", 49 | text = "#c6d0f5", 50 | subtext1 = "#b5bfe2", 51 | subtext0 = "#a5adce", 52 | overlay2 = "#949cbb", 53 | overlay1 = "#838ba7", 54 | overlay0 = "#737994", 55 | surface2 = "#626880", 56 | surface1 = "#51576d", 57 | surface0 = "#414559", 58 | base = "#303446", 59 | mantle = "#292c3c", 60 | crust = "#232634", 61 | }, 62 | macchiato = { 63 | rosewater = "#f4dbd6", 64 | flamingo = "#f0c6c6", 65 | pink = "#f5bde6", 66 | mauve = "#c6a0f6", 67 | red = "#ed8796", 68 | maroon = "#ee99a0", 69 | peach = "#f5a97f", 70 | yellow = "#eed49f", 71 | green = "#a6da95", 72 | teal = "#8bd5ca", 73 | sky = "#91d7e3", 74 | sapphire = "#7dc4e4", 75 | blue = "#8aadf4", 76 | lavender = "#b7bdf8", 77 | text = "#cad3f5", 78 | subtext1 = "#b8c0e0", 79 | subtext0 = "#a5adcb", 80 | overlay2 = "#939ab7", 81 | overlay1 = "#8087a2", 82 | overlay0 = "#6e738d", 83 | surface2 = "#5b6078", 84 | surface1 = "#494d64", 85 | surface0 = "#363a4f", 86 | base = "#24273a", 87 | mantle = "#1e2030", 88 | crust = "#181926", 89 | }, 90 | mocha = { 91 | rosewater = "#f5e0dc", 92 | flamingo = "#f2cdcd", 93 | pink = "#f5c2e7", 94 | mauve = "#cba6f7", 95 | red = "#f38ba8", 96 | maroon = "#eba0ac", 97 | peach = "#fab387", 98 | yellow = "#f9e2af", 99 | green = "#a6e3a1", 100 | teal = "#94e2d5", 101 | sky = "#89dceb", 102 | sapphire = "#74c7ec", 103 | blue = "#89b4fa", 104 | lavender = "#b4befe", 105 | text = "#cdd6f4", 106 | subtext1 = "#bac2de", 107 | subtext0 = "#a6adc8", 108 | overlay2 = "#9399b2", 109 | overlay1 = "#7f849c", 110 | overlay0 = "#6c7086", 111 | surface2 = "#585b70", 112 | surface1 = "#45475a", 113 | surface0 = "#313244", 114 | base = "#1e1e2e", 115 | mantle = "#181825", 116 | crust = "#11111b", 117 | }, 118 | } 119 | 120 | local mappings = { 121 | mocha = "Catppuccin Mocha", 122 | macchiato = "Catppuccin Macchiato", 123 | frappe = "Catppuccin Frappe", 124 | latte = "Catppuccin Latte", 125 | } 126 | 127 | function M.select(palette, flavor, accent) 128 | local c = palette[flavor] 129 | -- shorthand to check for the Latte flavor 130 | local isLatte = palette == "latte" 131 | 132 | return { 133 | foreground = c.text, 134 | background = c.base, 135 | 136 | cursor_fg = isLatte and c.base or c.crust, 137 | cursor_bg = c.rosewater, 138 | cursor_border = c.rosewater, 139 | 140 | selection_fg = c.text, 141 | selection_bg = c.surface2, 142 | 143 | scrollbar_thumb = c.surface2, 144 | 145 | split = c.overlay0, 146 | 147 | ansi = { 148 | isLatte and c.subtext1 or c.surface1, 149 | c.red, 150 | c.green, 151 | c.yellow, 152 | c.blue, 153 | c.pink, 154 | c.teal, 155 | isLatte and c.surface2 or c.subtext1, 156 | }, 157 | 158 | brights = { 159 | isLatte and c.subtext0 or c.surface2, 160 | c.red, 161 | c.green, 162 | c.yellow, 163 | c.blue, 164 | c.pink, 165 | c.teal, 166 | isLatte and c.surface1 or c.subtext0, 167 | }, 168 | 169 | indexed = { [16] = c.peach, [17] = c.rosewater }, 170 | 171 | -- nightbuild only 172 | compose_cursor = c.flamingo, 173 | 174 | tab_bar = { 175 | background = c.mantle, 176 | active_tab = { 177 | bg_color = c.mantle, 178 | fg_color = c[accent], 179 | }, 180 | inactive_tab = { 181 | bg_color = c.crust, 182 | fg_color = c.surface1, 183 | }, 184 | inactive_tab_hover = { 185 | bg_color = c.base, 186 | fg_color = c.text, 187 | }, 188 | new_tab = { 189 | bg_color = c.mantle, 190 | fg_color = c.text, 191 | }, 192 | new_tab_hover = { 193 | bg_color = c.surface1, 194 | fg_color = c[accent], 195 | }, 196 | -- fancy tab bar 197 | inactive_tab_edge = c.surface0, 198 | }, 199 | 200 | visual_bell = c.surface0, 201 | } 202 | end 203 | 204 | local function select_for_appearance(appearance, options) 205 | if appearance:find("Dark") then 206 | return options.dark 207 | else 208 | return options.light 209 | end 210 | end 211 | 212 | local function tableMerge(t1, t2) 213 | for k, v in pairs(t2) do 214 | if type(v) == "table" then 215 | if type(t1[k] or false) == "table" then 216 | tableMerge(t1[k] or {}, t2[k] or {}) 217 | else 218 | t1[k] = v 219 | end 220 | else 221 | t1[k] = v 222 | end 223 | end 224 | return t1 225 | end 226 | 227 | function M.apply_to_config(c, opts) 228 | if not opts then 229 | opts = {} 230 | end 231 | 232 | -- default options 233 | local defaults = { 234 | flavor = "mocha", 235 | accent = "sapphire", 236 | sync = false, 237 | sync_flavors = { light = "latte", dark = "mocha" }, 238 | color_overrides = { mocha = {}, macchiato = {}, frappe = {}, latte = {} }, 239 | token_overrides = { mocha = {}, macchiato = {}, frappe = {}, latte = {} }, 240 | } 241 | 242 | local o = tableMerge(defaults, opts) 243 | 244 | -- insert all flavors 245 | local color_schemes = {} 246 | local palette = tableMerge(colors, o.color_overrides) 247 | for flavor, name in pairs(mappings) do 248 | local spec = M.select(palette, flavor, o.accent) 249 | local overrides = o.token_overrides[flavor] 250 | color_schemes[name] = tableMerge(spec, overrides) 251 | end 252 | if c.color_schemes == nil then 253 | c.color_schemes = {} 254 | end 255 | c.color_schemes = tableMerge(c.color_schemes, color_schemes) 256 | 257 | if opts.sync then 258 | c.color_scheme = select_for_appearance(wezterm.gui.get_appearance(), { 259 | dark = mappings[o.sync_flavors.dark], 260 | light = mappings[o.sync_flavors.light], 261 | }) 262 | c.command_palette_bg_color = select_for_appearance(wezterm.gui.get_appearance(), { 263 | dark = colors[o.sync_flavors.dark].crust, 264 | light = colors[o.sync_flavors.light].crust, 265 | }) 266 | c.command_palette_fg_color = select_for_appearance(wezterm.gui.get_appearance(), { 267 | dark = colors[o.sync_flavors.dark].text, 268 | light = colors[o.sync_flavors.light].text, 269 | }) 270 | else 271 | c.color_scheme = mappings[o.flavor] 272 | c.command_palette_bg_color = colors[o.flavor].crust 273 | c.command_palette_fg_color = colors[o.flavor].text 274 | end 275 | 276 | local window_frame = { 277 | active_titlebar_bg = colors[o.flavor].crust, 278 | active_titlebar_fg = colors[o.flavor].text, 279 | inactive_titlebar_bg = colors[o.flavor].crust, 280 | inactive_titlebar_fg = colors[o.flavor].text, 281 | button_fg = colors[o.flavor].base, 282 | button_bg = colors[o.flavor].base, 283 | } 284 | 285 | if c.window_frame == nil then 286 | c.window_frame = {} 287 | end 288 | c.window_frame = tableMerge(c.window_frame, window_frame) 289 | end 290 | 291 | return M -------------------------------------------------------------------------------- /common/wezterm/wezterm: -------------------------------------------------------------------------------- 1 | /home/daniel/.home/.config/lytedev-dotfiles/common/wezterm -------------------------------------------------------------------------------- /common/wezterm/wezterm.lua: -------------------------------------------------------------------------------- 1 | local wezterm = require 'wezterm' 2 | local catpuccin = require 'catpuccin' 3 | 4 | local config = {} 5 | 6 | if wezterm.config_builder then 7 | config = wezterm.config_builder() 8 | end 9 | 10 | local hostname = io.popen("/bin/hostname"):read("*a"):gsub("%s", "") 11 | local font_spec = { family = 'IosevkaLyteTerm', weight = 'Medium', italic = false } 12 | local font_size = 12.0 13 | 14 | if hostname == "laptop" then 15 | font_size = 13 16 | end 17 | 18 | local font = wezterm.font_with_fallback{ 19 | font_spec, 20 | { family = 'Symbols Nerd Font Mono', weight = 'Regular', italic = false }, 21 | 'Noto Color Emoji', 22 | } 23 | 24 | if hostname == "laptop" then 25 | config.font_rules = { 26 | -- no italics 27 | { 28 | font = font 29 | }, 30 | } 31 | end 32 | 33 | config.default_cursor_style = 'BlinkingBar' 34 | 35 | catpuccin.apply_to_config(config) 36 | 37 | config.font = font 38 | config.font_size = font_size 39 | 40 | config.hide_tab_bar_if_only_one_tab = true 41 | config.use_fancy_tab_bar = false 42 | config.tab_bar_at_bottom = false 43 | config.window_background_opacity = 1.0 44 | 45 | config.color_scheme = "Catppuccin Mocha" 46 | 47 | config.window_frame.font = config.font 48 | config.window_frame.font_size = font_size 49 | 50 | config.inactive_pane_hsb = { 51 | saturation = 0.8, 52 | brightness = 0.7, 53 | } 54 | 55 | config.keys = { 56 | { 57 | key = 'j', 58 | mods = 'CTRL', 59 | action = wezterm.action.ActivatePaneDirection'Down' 60 | }, 61 | { 62 | key = 'Insert', 63 | mods = 'SHIFT', 64 | action = wezterm.action.PasteFrom'Clipboard' 65 | }, 66 | { 67 | key = 'v', 68 | mods = 'CTRL|SHIFT', 69 | action = wezterm.action.PasteFrom'PrimarySelection' 70 | }, 71 | { 72 | key = 'h', 73 | mods = 'CTRL', 74 | action = wezterm.action.ActivatePaneDirection'Left' 75 | }, 76 | { 77 | key = 'l', 78 | mods = 'CTRL', 79 | action = wezterm.action.ActivatePaneDirection'Right' 80 | }, 81 | { 82 | key = 'k', 83 | mods = 'CTRL', 84 | action = wezterm.action.ActivatePaneDirection'Up' 85 | }, 86 | { 87 | key = 'j', 88 | mods = 'CTRL|SHIFT', 89 | action = wezterm.action.SplitVertical{domain='CurrentPaneDomain'} 90 | }, 91 | { 92 | key = 'l', 93 | mods = 'CTRL|SHIFT', 94 | action = wezterm.action.SplitHorizontal{domain='CurrentPaneDomain'} 95 | }, 96 | { 97 | key = 'l', 98 | mods = 'CTRL|SHIFT|ALT', 99 | action = wezterm.action.ShowDebugOverlay 100 | }, 101 | { 102 | key = 'r', 103 | mods = 'CTRL|SHIFT|ALT', 104 | action = wezterm.action.RotatePanes'Clockwise' 105 | }, 106 | } 107 | 108 | config.unix_domains = { 109 | { 110 | name = 'unix', 111 | local_echo_threshold_ms = 10, 112 | }, 113 | } 114 | 115 | config.default_gui_startup_args = { 'connect', 'unix' } 116 | config.default_domain = 'unix' 117 | 118 | config.window_padding = { 119 | top = '0.5cell', 120 | bottom = '0.5cell', 121 | left = '1cell', 122 | right = '1cell', 123 | } 124 | 125 | return config 126 | -------------------------------------------------------------------------------- /common/zellij/config.kdl: -------------------------------------------------------------------------------- 1 | theme "catppuccin-mocha" 2 | 3 | pane_frames false 4 | 5 | keybinds clear-defaults=true { 6 | normal { 7 | } 8 | locked { 9 | bind "Ctrl g" { SwitchToMode "Normal"; } 10 | bind "Ctrl L" { NewPane "Right"; } 11 | bind "Ctrl J" { NewPane "Down"; } 12 | bind "Ctrl h" { MoveFocus "Left"; } 13 | bind "Ctrl l" { MoveFocus "Right"; } 14 | bind "Ctrl j" { MoveFocus "Down"; } 15 | bind "Ctrl k" { MoveFocus "Up"; } 16 | } 17 | resize { 18 | bind "Ctrl n" { SwitchToMode "Normal"; } 19 | bind "h" "Left" { Resize "Increase Left"; } 20 | bind "j" "Down" { Resize "Increase Down"; } 21 | bind "k" "Up" { Resize "Increase Up"; } 22 | bind "l" "Right" { Resize "Increase Right"; } 23 | bind "H" { Resize "Decrease Left"; } 24 | bind "J" { Resize "Decrease Down"; } 25 | bind "K" { Resize "Decrease Up"; } 26 | bind "L" { Resize "Decrease Right"; } 27 | bind "=" "+" { Resize "Increase"; } 28 | bind "-" { Resize "Decrease"; } 29 | } 30 | pane { 31 | bind "Ctrl p" { SwitchToMode "Normal"; } 32 | bind "h" "Left" { MoveFocus "Left"; } 33 | bind "l" "Right" { MoveFocus "Right"; } 34 | bind "j" "Down" { MoveFocus "Down"; } 35 | bind "k" "Up" { MoveFocus "Up"; } 36 | bind "p" { SwitchFocus; } 37 | bind "n" { NewPane; SwitchToMode "Normal"; } 38 | bind "d" { NewPane "Down"; SwitchToMode "Normal"; } 39 | bind "r" { NewPane "Right"; SwitchToMode "Normal"; } 40 | bind "x" { CloseFocus; SwitchToMode "Normal"; } 41 | bind "f" { ToggleFocusFullscreen; SwitchToMode "Normal"; } 42 | bind "z" { TogglePaneFrames; SwitchToMode "Normal"; } 43 | bind "w" { ToggleFloatingPanes; SwitchToMode "Normal"; } 44 | bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "Normal"; } 45 | bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0;} 46 | } 47 | move { 48 | bind "Ctrl h" { SwitchToMode "Normal"; } 49 | bind "n" "Tab" { MovePane; } 50 | bind "p" { MovePaneBackwards; } 51 | bind "h" "Left" { MovePane "Left"; } 52 | bind "j" "Down" { MovePane "Down"; } 53 | bind "k" "Up" { MovePane "Up"; } 54 | bind "l" "Right" { MovePane "Right"; } 55 | } 56 | tab { 57 | bind "Ctrl t" { SwitchToMode "Normal"; } 58 | bind "r" { SwitchToMode "RenameTab"; TabNameInput 0; } 59 | bind "h" "Left" "Up" "k" { GoToPreviousTab; } 60 | bind "l" "Right" "Down" "j" { GoToNextTab; } 61 | bind "n" { NewTab; SwitchToMode "Normal"; } 62 | bind "x" { CloseTab; SwitchToMode "Normal"; } 63 | bind "s" { ToggleActiveSyncTab; SwitchToMode "Normal"; } 64 | bind "1" { GoToTab 1; SwitchToMode "Normal"; } 65 | bind "2" { GoToTab 2; SwitchToMode "Normal"; } 66 | bind "3" { GoToTab 3; SwitchToMode "Normal"; } 67 | bind "4" { GoToTab 4; SwitchToMode "Normal"; } 68 | bind "5" { GoToTab 5; SwitchToMode "Normal"; } 69 | bind "6" { GoToTab 6; SwitchToMode "Normal"; } 70 | bind "7" { GoToTab 7; SwitchToMode "Normal"; } 71 | bind "8" { GoToTab 8; SwitchToMode "Normal"; } 72 | bind "9" { GoToTab 9; SwitchToMode "Normal"; } 73 | bind "Tab" { ToggleTab; } 74 | } 75 | scroll { 76 | bind "Ctrl s" { SwitchToMode "Normal"; } 77 | bind "e" { EditScrollback; SwitchToMode "Normal"; } 78 | bind "s" { SwitchToMode "EnterSearch"; SearchInput 0; } 79 | bind "Ctrl c" { ScrollToBottom; SwitchToMode "Normal"; } 80 | bind "j" "Down" { ScrollDown; } 81 | bind "k" "Up" { ScrollUp; } 82 | bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; } 83 | bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; } 84 | bind "d" { HalfPageScrollDown; } 85 | bind "u" { HalfPageScrollUp; } 86 | // uncomment this and adjust key if using copy_on_select=false 87 | // bind "Alt c" { Copy; } 88 | } 89 | search { 90 | bind "Ctrl s" { SwitchToMode "Normal"; } 91 | bind "Ctrl c" { ScrollToBottom; SwitchToMode "Normal"; } 92 | bind "j" "Down" { ScrollDown; } 93 | bind "k" "Up" { ScrollUp; } 94 | bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; } 95 | bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; } 96 | bind "d" { HalfPageScrollDown; } 97 | bind "u" { HalfPageScrollUp; } 98 | bind "n" { Search "down"; } 99 | bind "p" { Search "up"; } 100 | bind "c" { SearchToggleOption "CaseSensitivity"; } 101 | bind "w" { SearchToggleOption "Wrap"; } 102 | bind "o" { SearchToggleOption "WholeWord"; } 103 | } 104 | entersearch { 105 | bind "Ctrl c" "Esc" { SwitchToMode "Scroll"; } 106 | bind "Enter" { SwitchToMode "Search"; } 107 | } 108 | renametab { 109 | bind "Ctrl c" { SwitchToMode "Normal"; } 110 | bind "Esc" { UndoRenameTab; SwitchToMode "Tab"; } 111 | } 112 | renamepane { 113 | bind "Ctrl c" { SwitchToMode "Normal"; } 114 | bind "Esc" { UndoRenamePane; SwitchToMode "Pane"; } 115 | } 116 | session { 117 | bind "Ctrl o" { SwitchToMode "Normal"; } 118 | bind "Ctrl s" { SwitchToMode "Scroll"; } 119 | bind "d" { Detach; } 120 | } 121 | tmux { 122 | bind "[" { SwitchToMode "Scroll"; } 123 | bind "Ctrl b" { Write 2; SwitchToMode "Normal"; } 124 | bind "\"" { NewPane "Down"; SwitchToMode "Normal"; } 125 | bind "%" { NewPane "Right"; SwitchToMode "Normal"; } 126 | bind "z" { ToggleFocusFullscreen; SwitchToMode "Normal"; } 127 | bind "c" { NewTab; SwitchToMode "Normal"; } 128 | bind "," { SwitchToMode "RenameTab"; } 129 | bind "p" { GoToPreviousTab; SwitchToMode "Normal"; } 130 | bind "n" { GoToNextTab; SwitchToMode "Normal"; } 131 | bind "Left" { MoveFocus "Left"; SwitchToMode "Normal"; } 132 | bind "Right" { MoveFocus "Right"; SwitchToMode "Normal"; } 133 | bind "Down" { MoveFocus "Down"; SwitchToMode "Normal"; } 134 | bind "Up" { MoveFocus "Up"; SwitchToMode "Normal"; } 135 | bind "h" { MoveFocus "Left"; SwitchToMode "Normal"; } 136 | bind "l" { MoveFocus "Right"; SwitchToMode "Normal"; } 137 | bind "j" { MoveFocus "Down"; SwitchToMode "Normal"; } 138 | bind "k" { MoveFocus "Up"; SwitchToMode "Normal"; } 139 | bind "o" { FocusNextPane; } 140 | bind "d" { Detach; } 141 | bind "Space" { NextSwapLayout; } 142 | bind "x" { CloseFocus; SwitchToMode "Normal"; } 143 | } 144 | shared_except "locked" { 145 | bind "Ctrl g" { SwitchToMode "Locked"; } 146 | bind "Ctrl q" { Quit; } 147 | bind "Alt n" { NewPane; } 148 | bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; } 149 | bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; } 150 | bind "Alt j" "Alt Down" { MoveFocus "Down"; } 151 | bind "Alt k" "Alt Up" { MoveFocus "Up"; } 152 | bind "Alt =" "Alt +" { Resize "Increase"; } 153 | bind "Alt -" { Resize "Decrease"; } 154 | bind "Alt [" { PreviousSwapLayout; } 155 | bind "Alt ]" { NextSwapLayout; } 156 | } 157 | shared_except "normal" "locked" { 158 | bind "Enter" "Esc" { SwitchToMode "Normal"; } 159 | } 160 | shared_except "pane" "locked" { 161 | bind "Ctrl p" { SwitchToMode "Pane"; } 162 | } 163 | shared_except "resize" "locked" { 164 | bind "Ctrl n" { SwitchToMode "Resize"; } 165 | } 166 | shared_except "scroll" "locked" { 167 | bind "Ctrl s" { SwitchToMode "Scroll"; } 168 | } 169 | shared_except "session" "locked" { 170 | bind "Ctrl o" { SwitchToMode "Session"; } 171 | } 172 | shared_except "tab" "locked" { 173 | bind "Ctrl t" { SwitchToMode "Tab"; } 174 | } 175 | shared_except "move" "locked" { 176 | bind "Ctrl h" { SwitchToMode "Move"; } 177 | } 178 | shared_except "tmux" "locked" { 179 | bind "Ctrl b" { SwitchToMode "Tmux"; } 180 | } 181 | } 182 | 183 | plugins { 184 | tab-bar { path "tab-bar"; } 185 | // status-bar { path "status-bar"; } 186 | // strider { path "strider"; } 187 | compact-bar { path "compact-bar"; } 188 | } 189 | 190 | ui { 191 | pane_frames { 192 | rounded_corners true 193 | hide_session_name true 194 | } 195 | } 196 | 197 | // scroll_buffer_size 10000 198 | simplified_ui true 199 | default_layout "default" 200 | default_mode "locked" 201 | mouse_mode true 202 | copy_clipboard "primary" 203 | copy_on_select true 204 | mirror_session false 205 | 206 | themes { 207 | catppuccin-frappe { 208 | fg 198 208 245 209 | bg 98 104 128 210 | black 41 44 60 211 | red 231 130 132 212 | green 166 209 137 213 | yellow 229 200 144 214 | blue 140 170 238 215 | magenta 244 184 228 216 | cyan 153 209 219 217 | white 198 208 245 218 | orange 239 159 118 219 | } 220 | catppuccin-latte { 221 | fg 172 176 190 222 | bg 172 176 190 223 | black 76 79 105 224 | red 210 15 57 225 | green 64 160 43 226 | yellow 223 142 29 227 | blue 30 102 245 228 | magenta 234 118 203 229 | cyan 4 165 229 230 | white 220 224 232 231 | orange 254 100 11 232 | } 233 | catppuccin-macchiato { 234 | fg 202 211 245 235 | bg 91 96 120 236 | black 30 32 48 237 | red 237 135 150 238 | green 166 218 149 239 | yellow 238 212 159 240 | blue 138 173 244 241 | magenta 245 189 230 242 | cyan 145 215 227 243 | white 202 211 245 244 | orange 245 169 127 245 | } 246 | catppuccin-mocha { 247 | fg 205 214 244 248 | bg 88 91 112 249 | black 24 24 37 250 | red 243 139 168 251 | green 166 227 161 252 | yellow 249 226 175 253 | blue 137 180 250 254 | magenta 245 194 231 255 | cyan 137 220 235 256 | white 205 214 244 257 | orange 250 179 135 258 | } 259 | } -------------------------------------------------------------------------------- /common/zellij/config.yaml: -------------------------------------------------------------------------------- 1 | themes: 2 | catppuccin-latte: 3 | bg: "#acb0be" # Surface2 4 | fg: "#acb0be" # Surface2 5 | red: "#d20f39" 6 | green: "#40a02b" 7 | blue: "#1e66f5" 8 | yellow: "#df8e1d" 9 | magenta: "#ea76cb" # Pink 10 | orange: "#fe640b" # Peach 11 | cyan: "#04a5e5" # Sky 12 | black: "#4c4f69" # Text 13 | white: "#dce0e8" # Crust 14 | 15 | catppuccin-frappe: 16 | bg: "#626880" # Surface2 17 | fg: "#c6d0f5" 18 | red: "#e78284" 19 | green: "#a6d189" 20 | blue: "#8caaee" 21 | yellow: "#e5c890" 22 | magenta: "#f4b8e4" # Pink 23 | orange: "#ef9f76" # Peach 24 | cyan: "#99d1db" # Sky 25 | black: "#292c3c" # Mantle 26 | white: "#c6d0f5" 27 | 28 | catppuccin-macchiato: 29 | bg: "#5b6078" # Surface2 30 | fg: "#cad3f5" 31 | red: "#ed8796" 32 | green: "#a6da95" 33 | blue: "#8aadf4" 34 | yellow: "#eed49f" 35 | magenta: "#f5bde6" # Pink 36 | orange: "#f5a97f" # Peach 37 | cyan: "#91d7e3" # Sky 38 | black: "#1e2030" # Mantle 39 | white: "#cad3f5" 40 | 41 | catppuccin-mocha: 42 | bg: "#585b70" # Surface2 43 | fg: "#cdd6f4" 44 | red: "#f38ba8" 45 | green: "#a6e3a1" 46 | blue: "#89b4fa" 47 | yellow: "#f9e2af" 48 | magenta: "#f5c2e7" # Pink 49 | orange: "#fab387" # Peach 50 | cyan: "#89dceb" # Sky 51 | black: "#181825" # Mantle 52 | white: "#cdd6f4" 53 | 54 | -------------------------------------------------------------------------------- /common/zellij/zellij: -------------------------------------------------------------------------------- 1 | /home/daniel/.home/.config/lytedev-dotfiles/common/zellij -------------------------------------------------------------------------------- /host/desktop/bin/minecraft: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | export JAVA_HOME="/usr/lib/jvm/java-8-openjdk/jre/" 3 | exec /opt/minecraft-launcher/minecraft-launcher "$@" 4 | -------------------------------------------------------------------------------- /host/desktop/bin/reboot-to-windows: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | next_boot_entry_n="$(efibootmgr | awk 'match($0,/Boot([0-9]+)\*? Windows Boot Manager/,a){print a[1];exit}')" 4 | 5 | sudo efibootmgr -n "$next_boot_entry_n" 6 | sudo reboot 7 | -------------------------------------------------------------------------------- /host/desktop/config: -------------------------------------------------------------------------------- 1 | exec output '"Dell Inc. DELL U2720Q CWTM623"' transform 270 scale 1.5 2 | gaps inner 0 3 | -------------------------------------------------------------------------------- /host/desktop/firefox/userChrome.d.css: -------------------------------------------------------------------------------- 1 | #main-window[tabsintitlebar="true"]:not([extradragspace="true"]) 2 | #TabsToolbar 3 | > .toolbar-items { 4 | opacity: 0; 5 | pointer-events: none; 6 | } 7 | #main-window:not([tabsintitlebar="true"]) #TabsToolbar { 8 | visibility: collapse !important; 9 | } 10 | -------------------------------------------------------------------------------- /host/desktop/fstab: -------------------------------------------------------------------------------- 1 | # Static information about the filesystems. 2 | # See fstab(5) for details. 3 | 4 | UUID=14b10323-31c1-4eda-8067-4647cdb30c78 / ext4 rw,relatime 0 1 5 | UUID=F6C0-101A /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 2 6 | UUID=d4a27795-14a2-4c3f-ba0e-1c2112fc7228 /home ext4 rw,relatime 0 2 7 | UUID=26F6144A6B518523 /storage/shared ntfs rw,relatime,uid=0,gid=0,umask=00,nls=utf8,auto,nofail,errors=continue,mft_zone_multiplier=1 0 0 8 | UUID=AE624593624560E7 /storage/windows ntfs rw,relatime,uid=0,gid=0,umask=00,nls=utf8,auto,nofail,errors=continue,mft_zone_multiplier=1 0 0 9 | UUID=9c4e25c5-c4de-4722-b79a-ae09881d2a98 /storage/ext ext4 rw,relatime,auto,nofail 0 2 10 | UUID=e568cf1f-3f86-4ef4-b144-bfc1244624f8 /storage/butter btrfs rw,relatime,space_cache,subvolid=5,subvol=/,auto,nofail 0 0 11 | -------------------------------------------------------------------------------- /host/desktop/hyprland.d.conf: -------------------------------------------------------------------------------- 1 | source = ~/.config/hypr/hyprland.conf 2 | 3 | monitor=DP-1,3840x2160@60,5280x0,1.5,transform,3 4 | monitor=DP-2,3840x2160@60,0x0,1.5,transform,3 5 | monitor=DP-3,3840x2160@120,1440x0,1 6 | -------------------------------------------------------------------------------- /host/desktop/sway/config: -------------------------------------------------------------------------------- 1 | default_border pixel 1 2 | 3 | gaps inner 0 4 | 5 | output "Samsung Electric Company SyncMaster H1AK500000" position 0,0 6 | output "GIGA-BYTE TECHNOLOGY CO., LTD. AORUS FO48U 23070B000307" mode 3840x2160@120Hz position 1440,0 7 | output "Dell Inc. DELL U2720Q CWTM623" transform 90 scale 1.5 position 5280,0 8 | output "Dell Inc. DELL U2720Q D3TM623" transform 90 scale 1.5 position 0,0 9 | 10 | exec firefox 11 | -------------------------------------------------------------------------------- /host/desktop/tmux.d.conf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lytedev/dotfiles/1396fb6f46245765099e1e40312f7ca8790e7b4a/host/desktop/tmux.d.conf -------------------------------------------------------------------------------- /host/laptop/bin/disable-touchscreen: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | swaymsg input (swaymsg -t get_inputs | jq -r '.[] | select(.name == "ELAN Touchscreen") | .identifier') events disabled 3 | -------------------------------------------------------------------------------- /host/laptop/hyprland.d.conf: -------------------------------------------------------------------------------- 1 | source = ~/.config/hypr/hyprland.conf 2 | 3 | bind = SUPER, return, exec, wezterm 4 | bind = SUPER, M, exit, 5 | 6 | input { 7 | kb_options = ctrl:nocaps 8 | touchpad { 9 | natural_scroll = yes 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /host/laptop/sway/config: -------------------------------------------------------------------------------- 1 | exec libinput-gestures -c ~/.config/libinput-gestures.conf 2 | gaps inner 0 3 | 4 | bindswitch lid:toggle exec swaylock 5 | 6 | input type:keyboard { 7 | xkb_options ctrl:nocaps 8 | } 9 | 10 | # disabled since we don't have a broken touch screen anymore 11 | # input type:touchscreen { 12 | # events disabled 13 | # } 14 | 15 | output "Dell Inc. DELL U2720Q CWTM623" transform 0 scale 1.0 16 | output "Dell Inc. DELL U2720Q CWTM623" mode 3840x2160 17 | 18 | input type:touchpad { 19 | 20 | } 21 | 22 | gaps inner 0 23 | 24 | exec firefox 25 | -------------------------------------------------------------------------------- /host/layer/personal/dotfiles-setup.d.fish: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | set me (status -f) 3 | set dfp $argv[1] 4 | set h $argv[2] 5 | set c $argv[3] 6 | 7 | pushd (dirname $me) 8 | # l app $c/app 9 | -------------------------------------------------------------------------------- /host/layer/personal/gitconfig: -------------------------------------------------------------------------------- 1 | [user] 2 | email = daniel@lyte.dev 3 | 4 | [commit] 5 | gpgsign = true 6 | -------------------------------------------------------------------------------- /host/layer/personal/tmux-tpm.conf: -------------------------------------------------------------------------------- 1 | bind-key X "display-message PLUGINSCONFIGURED" 2 | 3 | set -g @tpm_plugins ' \ 4 | tmux-plugins/tpm \ 5 | tmux-plugins/tmux-sensible \ 6 | tmux-plugins/tmux-resurrect \ 7 | tmux-plugins/tmux-continuum \ 8 | ' 9 | 10 | set -g @resurrect-save 'V' 11 | set -g @resurrect-restore 'L' 12 | 13 | # set -g @continuum-restore 'on' 14 | # set -g @continuum-boot 'on' 15 | 16 | run '~/.tmux/plugins/tpm/tpm' 17 | -------------------------------------------------------------------------------- /host/layer/personal/tmux.d.conf: -------------------------------------------------------------------------------- 1 | bind-key Z "display-message PERSONALLAYER" 2 | 3 | if-shell -b "test -d $HOME/.tmux/plugins/tpm" "source-file $ENV_PATH/host-layer-personal/tmux-tpm.conf" 4 | -------------------------------------------------------------------------------- /host/layer/public-webserver/caddy/Caddyfile: -------------------------------------------------------------------------------- 1 | { 2 | admin "unix//run/caddy/admin.socket" 3 | } 4 | 5 | http:// { 6 | root * /srv/http 7 | file_server { 8 | browse /etc/caddy/browse_template.html 9 | hide \.* 10 | } 11 | 12 | templates 13 | 14 | handle_errors { 15 | @404 { 16 | expression {http.error.status_code} == 404 17 | } 18 | rewrite @404 /404.html 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /host/layer/public-webserver/caddy/browse_template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{html .Name}} 5 | 6 | 7 | 8 | 9 | 27 | 28 |
29 |
30 | {{range $i, $crumb := .Breadcrumbs}}{{html $crumb.Text}}{{if ne $i 0}}/{{end}}{{end}} 31 |
32 |
33 | {{.NumDirs}} director{{if eq 1 .NumDirs}}y{{else}}ies{{end}} 34 | {{.NumFiles}} file{{if ne 1 .NumFiles}}s{{end}} 35 | {{- if ne 0 .Limit}} 36 | (of which only {{.Limit}} are displayed) 37 | {{- end}} 38 |
39 |
40 |
41 |
42 | 43 | 44 | 45 | 48 | 51 | 54 | 55 | 56 | 57 | 58 | {{- range .Items}} 59 | 60 | 65 | {{- if .IsDir}} 66 | 67 | {{- else}} 68 | 69 | {{- end}} 70 | 71 | 72 | {{- end}} 73 | 74 |
46 | Name 47 | 49 | Size 50 | 52 | Modified 53 |
61 | 62 | {{html .Name}} 63 | 64 | {{.HumanSize}}
75 |
76 |
77 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /host/layer/public-webserver/dotfiles-setup.d.fish: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | 3 | pushd (dirname (status -f)) 4 | # set dfp $argv[1] 5 | # set homedir $argv[2] 6 | # set xdgconfdir $argv[3] 7 | set layerdir (pwd) 8 | 9 | function _p 10 | echo Copying $argv[1..-2] to $argv[-1] 11 | sudo cp -r $argv[1..-2] $argv[-1] 12 | end 13 | 14 | sudo rm -rf /etc/caddy 15 | _p $layerdir/caddy /etc/caddy 16 | 17 | sudo mkdir -p /srv/http 18 | sudo chmod 755 /srv/http 19 | _p $layerdir/webserver-root/* /srv/http 20 | sudo chmod 777 /srv/http/public-files 21 | -------------------------------------------------------------------------------- /host/layer/public-webserver/webserver-root/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 404 Not Found 8 | 9 | 10 |
11 |

404 - File Not Found 😢

12 | 13 |

Go to Index

14 |
15 | 16 | 17 | -------------------------------------------------------------------------------- /host/layer/public-webserver/webserver-root/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | {{ .Host }} - Index 8 | 9 | 10 |
11 |

Welcome to The Index at {{ .Host }}

12 | 13 |

14 | If you wandered here by accident, you are either lost and in need of context, are looking for a particular file, or are just exploring. 15 |

16 | 17 |

Whatever your adventure, welcome!

18 | 19 |

View {{ .Host }} Public Files

20 | 21 |

If you need to get a hold of me for any reason, here is my contact information. 22 |

23 | 24 | 25 | -------------------------------------------------------------------------------- /host/layer/public-webserver/webserver-root/public-files/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | .* 3 | !.gitignore 4 | -------------------------------------------------------------------------------- /host/layer/public-webserver/webserver-root/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: /public-files 3 | -------------------------------------------------------------------------------- /os/android/config.d.fish: -------------------------------------------------------------------------------- 1 | set --export --universal NOTES_PATH $NICE_HOME/storage/shared/notes 2 | set --export --universal FISH_START_TMUX true 3 | 4 | -------------------------------------------------------------------------------- /os/linux/arch/bootstrap-test.fish: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | 3 | docker ps -q || begin 4 | echo "docker not running" 5 | exit 1 6 | end 7 | 8 | docker pull archlinux -q || begin 9 | echo "failed to pull archlinux docker image" 10 | exit 1 11 | end 12 | 13 | docker run -it --rm -v $DOTFILES_PATH:/dotfiles:ro archlinux sh -c "pacman -Sy --noconfirm git; /dotfiles/common/bin/dotfiles-init" 14 | -------------------------------------------------------------------------------- /os/linux/arch/dotfiles-init.d.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env -S sh -i 2 | 3 | "$CURDIR/provision.sh" 4 | -------------------------------------------------------------------------------- /os/linux/arch/provision.d/00-AS_ROOT-add-user.bash: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env -S bash -i 2 | 3 | u=daniel 4 | ud="/home/$u" 5 | 6 | if [[ "$EUID" -ne 0 ]]; then 7 | echo "Error: This script must be run as root." 8 | exit 1 9 | fi 10 | 11 | # user exists - we will assume setup has already run 12 | if grep -E "^$u" /etc/passwd; then 13 | echo "User '$u' already exists. Assuming user has been setup already." 14 | exit 0 15 | fi 16 | 17 | # TODO: setup dotfiles repo? 18 | # TODO: can we copy the envs from /root/.config/lytedev-env in case being setup 19 | # from a script entirely? 20 | 21 | pacman -Sy --needed --noconfirm sudo 22 | echo '%admin ALL=(ALL) ALL' >> /etc/sudoers.d/admin-group-sudoers 23 | groupadd admin 2>/dev/null 24 | mkdir --parents "$ud/.home" "$ud/dl" 25 | useradd --home-dir "$ud/.home" \ 26 | --groups "admin,users,uucp,lock" \ 27 | --shell "/usr/bin/fish" \ 28 | "$u" 29 | chown --recursive "$u:$u" "$ud" 30 | echo "Setting password for user '$u'" 31 | passwd "$u" 32 | -------------------------------------------------------------------------------- /os/linux/arch/provision.d/10-install-paru.bash: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | echo "Installing paru as $(whoami)" 4 | REPOSITORY_PATH="/tmp/provisioning" 5 | sudo pacman -S --needed --noconfirm git base-devel 6 | mkdir -p "$REPOSITORY_PATH" 7 | rm -rf "$REPOSITORY_PATH/paru" 8 | git clone https://aur.archlinux.org/paru-bin.git "$REPOSITORY_PATH/paru" 9 | cd "$REPOSITORY_PATH/paru" || exit 1 10 | makepkg --noconfirm -si 11 | paru -S --noconfirm paru-bin 12 | rm -rf "$REPOSITORY_PATH/paru" 13 | -------------------------------------------------------------------------------- /os/linux/arch/provision.d/20-install-packages.bash: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # if grep -E -q '^\[multilib\]$' /etc/pacman.conf; then 4 | # echo "Multilib Repository Already Enabled!" 5 | # else 6 | # echo "Enabling Multilib Repository (with sudo)..." 7 | # sudo sh -c 'echo -e "\n\n[multilib]\nInclude = /etc/pacman.d/mirrorlist" >> /etc/pacman.conf' 8 | # fi 9 | 10 | pacman -Sy --needed --noconfirm \ 11 | watchexec `# Filesystem Event Wacher` \ 12 | fwupd `# Firmware Update Manager` \ 13 | efibootmgr efivar `# UEFI Boot CLI Stuff` \ 14 | tailscale `# VPN` \ 15 | ripgrep `# Code Search Utilities` \ 16 | git-delta `# Better Diff Viewer` \ 17 | fd `# File Search` \ 18 | dtach `# Persistent Shell Sessions` \ 19 | exa `# Better ls` \ 20 | sd `# Better sed` \ 21 | bat `# Better Cat` \ 22 | skim `# Fuzzy Finder` \ 23 | htop bottom `# Process Management and System Resources Monitoring` \ 24 | openssh mosh `# Remote Access` \ 25 | openssl `# Crypto` \ 26 | hexyl `# CLI Hex Viewer` \ 27 | rsync rclone `# File Transfer` \ 28 | helix `# Text Editors` \ 29 | unzip `# Simple Unzipping` \ 30 | dog bind nmap traceroute iputils `# Networking Utilities` \ 31 | curl wget xh `# HTTP Utilities` \ 32 | w3m `# Web Browser` \ 33 | jq gron `# JSON Utilities` \ 34 | age sops `# Simple Secrets Managements` \ 35 | inotify-tools `# Filesystem Watching` \ 36 | fish `# Shell` \ 37 | time `# GNU Time` \ 38 | fortune-mod `# Fortune` \ 39 | sysstat `# System Statistics` \ 40 | reflector `# Simple Pacman Mirror Management` \ 41 | gnu-netcat socat websocat `# Socket Utilities` \ 42 | nnn `# CLI File Manager` \ 43 | avahi nss-mdns `# mDNS and Network Discovery Utilities` \ 44 | git git-lfs `# Version Control` \ 45 | dua-cli `# Disk Usage Abalyzer` \ 46 | man-db man-pages `# Come On, Man!` 47 | 48 | # TODO: if paru? rtx-bin 49 | -------------------------------------------------------------------------------- /os/linux/arch/provision.d/50-install-tmux-plugins.bash: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}" 4 | 5 | mkdir -p "$XDG_CONFIG_HOME/systemd/user" 6 | 7 | [ ! -d "$XDG_CONFIG_HOME/tmux/plugins/tpm" ] && \ 8 | git clone https://github.com/tmux-plugins/tpm "$XDG_CONFIG_HOME/tmux/plugins/tpm" 9 | 10 | echo "Reloading tmux config..." 11 | tmux source-file "$HOME/.tmux.conf" &>/dev/null 12 | 13 | echo "Installing tmux plugins..." 14 | bash "$XDG_CONFIG_HOME/tmux/plugins/tpm/bindings/clean_plugins" &>/dev/null 15 | bash "$XDG_CONFIG_HOME/tmux/plugins/tpm/bindings/install_plugins" &>/dev/null 16 | bash "$XDG_CONFIG_HOME/tmux/plugins/tpm/bindings/update_plugins" &>/dev/null 17 | 18 | echo "Finalizing tmux plugin installation..." 19 | tmux source-file "$HOME/.tmux.conf" &>/dev/null 20 | -------------------------------------------------------------------------------- /os/linux/arch/provision.d/60-AS_ROOT-vt-colors.bash: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | test -d /boot/loader/entries || { echo "no known bootloader"; exit 1; } 4 | 5 | # TODO: see catppuccin-tty for possible alternate implementation? 6 | # TODO: possibly just setup catppuccin-tty? 7 | 8 | inject_red="vt.default_red=0x11,0xf9,0xa6,0xf4,0x66,0xae,0xa1,0xf8,0x75,0xf9,0xa6,0xf4,0x66,0xae,0xa1,0xf9" 9 | inject_green="vt.default_grn=0x11,0x26,0xe2,0xbf,0xd9,0x81,0xef,0xf8,0x71,0x26,0xe2,0xbf,0xd9,0x81,0xef,0xf8" 10 | inject_blue="vt.default_blu=0x11,0x72,0x2e,0x75,0xef,0xff,0xe4,0xf2,0x5e,0x72,0x2e,0x75,0xef,0xff,0xe4,0xf5" 11 | 12 | optional_space='[[:space:]]\{0,1\}' 13 | not_space="[^[:space:]]" 14 | 15 | function delete_matching_param() { 16 | opt="$1"; shift 17 | sed -i '/^options / s/'"$opt"'//' "$@" 18 | } 19 | 20 | function delete_prefixed_unquoted_param() { 21 | pre="$1"; shift 22 | delete_matching_param "$optional_space$pre$not_space*" "$@" 23 | } 24 | 25 | for f in /boot/loader/entries/*; do 26 | delete_prefixed_unquoted_param 'vt.default_red=' "$f" 27 | delete_prefixed_unquoted_param 'vt.default_grn=' "$f" 28 | delete_prefixed_unquoted_param 'vt.default_blu=' "$f" 29 | # append kernel params 30 | sed -i "/^options / s/$/ $inject_red $inject_green $inject_blue/" "$f" 31 | done 32 | -------------------------------------------------------------------------------- /os/linux/arch/provision.d/70-optional-packages.bash: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | dir="$(dirname "$(realpath "$0")")" 4 | echo "Inside $dir" 5 | 6 | yn() { 7 | echo "$1 [y/N]" 8 | read -r y 9 | # bash convert to lowercase magic 10 | [[ ${y,,} =~ ^y ]] 11 | } 12 | 13 | yn "Do you want to install UI packages?" && "$dir/optional/ui-packages.bash" 14 | 15 | paru -Sy --needed --noconfirm \ 16 | weechat `# IRC Client` \ 17 | rtx-bin `# Version Manager` \ 18 | restic `# Backups` \ 19 | bluetuith-bin `# Disk Usage Analyzer` \ 20 | aria2 `# Downloads Manager` \ 21 | oath-toolkit `# TOTP Utility` \ 22 | pass pass-otp `# Password Management` \ 23 | sc-im `# Spreadsheets` \ 24 | cloc `# For counting lines of code` \ 25 | gitui `# Git TUI` \ 26 | tokei `# Counting Lines of Code (cloc alternative)` \ 27 | swaks `# Email CLI` \ 28 | pigz `# Multicore Compression Utility` \ 29 | -------------------------------------------------------------------------------- /os/linux/arch/provision.d/optional/amd-cpu.bash: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | pacman -S amd-ucode 3 | -------------------------------------------------------------------------------- /os/linux/arch/provision.d/optional/amd-gpu.bash: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | paru -S --needed \ 4 | xf86-video-amdgpu mesa \ 5 | amdvlk \ 6 | libva-mesa-driver mesa-vdpau libva-vdpau-driver libvdpau-va-gl `# Hardware Accelerated Video` 7 | 8 | paru -S --needed lib32-mesa lib32-amdvlk 9 | -------------------------------------------------------------------------------- /os/linux/arch/provision.d/optional/ui-packages.bash: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # if grep -E -q '^\[multilib\]$' /etc/pacman.conf; then 4 | # echo "Multilib Repository Already Enabled!" 5 | # else 6 | # echo "Enabling Multilib Repository (with sudo)..." 7 | # sudo sh -c 'echo -e "\n\n[multilib]\nInclude = /etc/pacman.d/mirrorlist" >> /etc/pacman.conf' 8 | # fi 9 | 10 | # TODO: some of these may be laptop-only? 11 | # TODO: switch from Thunar to Nautilus? 12 | 13 | paru -Sy --needed \ 14 | xf86-input-libinput libinput libinput-gestures `# Trackpad Settings and Customizations` \ 15 | brightnessctl `# Brightness CLI` \ 16 | bluez bluez-libs bluez-utils bluez-tools `# Bluetooth` \ 17 | catppuccin-gtk-theme-mocha elementary-icon-theme `# GUI Theme` \ 18 | thunar thunar-volman gvfs `# GUI File Manager` \ 19 | ttf-iosevka-lyte ttf-nerd-fonts-symbols-mono ttf-opensans `# Fonts` \ 20 | noto-fonts noto-fonts-emoji `# Emoji Fonts` \ 21 | avr-libc avr-gcc dfu-programmer dfu-util `# MCU Programming Utilities` \ 22 | gimp inkscape krita `# Image and Vector Editing Applications` \ 23 | caddy `# Web Server` \ 24 | vlc `# Video Viewer` \ 25 | zathura zathura-pdf-mupdf `# Document Viewer` \ 26 | gammastep `# Screen Color Temp Adjuster` \ 27 | firefox `# Web Browser` \ 28 | hunspell-en_US `# Firefox Spell Checking` \ 29 | passff-host `# pass integration in Firefox` \ 30 | kitty `# Terminal Emulator` \ 31 | pulsemixer pavucontrol pamixer libpulse `# Pulseaudio Controls` \ 32 | playerctl `# Media Keys Controls` \ 33 | feh `# Image Viewer` \ 34 | sway swaybg `# Window Manager and Wallpaper` \ 35 | wofi `# Launcher` \ 36 | polkit polkit-kde-agent `# Privilege Escalation Prompts` \ 37 | swaylock swayidle `# Locking and Idling` \ 38 | mako `# Notification Daemon` \ 39 | slurp grim wl-clipboard `# Screenshots and Clipboard Utilities` \ 40 | pipewire pipewire-pulse wireplumber `# Audio` \ 41 | xdg-desktop-portal xdg-desktop-portal-wlr `# Screensharing` \ 42 | obs-studio `# Live Streaming` 43 | 44 | # eww-wayland `# Bar & Widgets` 45 | # stopped using eww since it didn't _easily_ support wayland workspaces 46 | # laziness! 47 | 48 | # stopped using hyprland due to some weird glitchy stuff that would occasionally 49 | # start happening where keypresses would get doubled 50 | # I don't think I filed an issue 51 | 52 | # wezterm `# Terminal Emulator` \ 53 | # stopped using wezterm due to issues with splits plus daemon sessions 54 | # https://github.com/wez/wezterm/issues/3771 55 | # there may have been other issues? not sure 56 | -------------------------------------------------------------------------------- /os/linux/arch/provision.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env -S sh -i 2 | 3 | pacman -Sy --noconfirm --needed git fish sudo 4 | 5 | echo "## Arch Linux Provisioning ##" 6 | 7 | # TODO: use custom meta packages? 8 | 9 | is_root="$(test "$(whoami)" == 'root' && echo "1" || echo "0")" 10 | for file in "$(dirname "$0")/provision.d"/*; do 11 | test -d "$file" && continue 12 | if echo "$file" | grep -q "AS_ROOT"; then 13 | if [ "$is_root" = "1" ]; then 14 | echo "arch/provision.sh: Runnning $file..." 15 | "$file" 16 | else 17 | echo "arch/provision.sh: Runnning sudo $file..." 18 | sudo "$file" 19 | fi 20 | else 21 | if [ "$is_root" = "1" ]; then 22 | nf="$(mktemp)" 23 | cp "$file" "$nf" 24 | chmod 777 "$nf" 25 | echo "arch/provision.sh: Runnning sudo -u daniel $file via $nf..." 26 | sudo -u daniel "$nf" 27 | rm "$nf" 28 | else 29 | echo "arch/provision.sh: Runnning $file..." 30 | "$file" 31 | fi 32 | fi 33 | done 34 | -------------------------------------------------------------------------------- /os/linux/bin/app-launcher: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | floating-term sh -c "launch | xargs swaymsg exec --" 3 | -------------------------------------------------------------------------------- /os/linux/bin/batmon: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | 3 | while true 4 | echo (date +%s)' '(batteries-combined-wattage) >> ~/.battlog 5 | sleep 5 6 | end 7 | -------------------------------------------------------------------------------- /os/linux/bin/batteries-combined-wattage: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | 3 | cat /sys/class/power_supply/BAT*/power_now | rg . | awk '{print $1*10^-6}' | awk '{sum+=$1}END{print sum}' 4 | -------------------------------------------------------------------------------- /os/linux/bin/batteries-watts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | 3 | for b in /sys/class/power_supply/BAT*/power_now 4 | cat $b | rg . | awk '{print $1*10^-6 " W"}' 5 | end 6 | -------------------------------------------------------------------------------- /os/linux/bin/battplot: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | echo ' 3 | set xdata time 4 | set timefmt "%s" 5 | set format x "%H:%M:%S" 6 | # set yrange[0:96] 7 | while (1) { plot "/home/daniel/.home/.battlog" using 1:2 with linespoints 8 | pause 5 } 9 | ' | gnuplot 10 | -------------------------------------------------------------------------------- /os/linux/bin/begin-inhibit-sway-idle.fish: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | 3 | fd --regex sway-ipc\.$EUID\.\\d+\.sock /var/run/user/$EUID -d 1 --max-results 1 4 | 5 | -------------------------------------------------------------------------------- /os/linux/bin/floating-term: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | kitty \ 4 | --single-instance \ 5 | --class floating_terminal \ 6 | -o remember_window_size=no \ 7 | -o initial_window_width=80c \ 8 | -o initial_window_height=20c \ 9 | "$@" 10 | -------------------------------------------------------------------------------- /os/linux/bin/maybe-good-morning: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | 3 | # TODO: some kind of better time-based or last-awakened heuristic to determine 4 | # whether or not this shows 5 | 6 | set -l hours 08 09 10 7 | if ! contains (date +%H) $hours 8 | echo "Not sending notification since it isn't the morning" >>&2 9 | exit 1 10 | end 11 | 12 | notify-send \ 13 | --expire-time=0 \ 14 | --urgency critical \ 15 | "Good morning!" \ 16 | "Activate this notification (click it or Super+Shift+Space) to run the script. Dismiss (Super+Ctrl+Space) to ignore." \ 17 | --action=default=Activate \ 18 | | rg default \ 19 | && \ 20 | if set -q HYPRLAND_INSTANCE_SIGNATURE 21 | hyprctl dispatch exec [float] wezterm start good-morning 22 | else 23 | sway exec 'floating-term good-morning' 24 | end 25 | -------------------------------------------------------------------------------- /os/linux/bin/wifi-list: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # wip 4 | 5 | SSID=$(nmcli device wifi | tail -n +2 | "$DOTFILES_PATH/scripts/bin/app-launcher" -i --display-mode "wifi" -p "wifi:" -dmenu -width 50 | sed -re 's/^\s*\*//' | awk '{print $1}') 6 | 7 | RESULT=$(nmcli device wifi connect "$SSID") 8 | if echo "$RESULT" | grep -q -E '^Error: Connection activation failed: \(7\)'; then 9 | # TODO: currently, the first attempt to connect fails and then we wait for 10 | # a rescan before trying again 11 | sleep 10 12 | PASSWORD=$(: | "$DOTFILES_PATH/scripts/bin/app-launcher" --display-mode "Password:" -dmenu -p "wifi_password:" -width 50) 13 | nmcli device wifi connect "$SSID" password "$PASSWORD" 14 | fi 15 | -------------------------------------------------------------------------------- /os/linux/bin/wm: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # sway 4 | 5 | if [ "$1" = 'hyprland' ]; then 6 | c="$HOME/.config" 7 | ev="$c/hypr/hyprland.conf" 8 | ee="$c/lytedev-env" 9 | for e in "host-desktop" "host-laptop"; do 10 | f="$ee/$e/hyprland.d.conf" 11 | [ -f "$f" ] && ev="$f" 12 | done 13 | 14 | echo "Using config $ev" 15 | 16 | exec Hyprland -c "$ev" 17 | else 18 | exec "$(dirname "$0")/../sway/init" 19 | fi 20 | -------------------------------------------------------------------------------- /os/linux/config.d.fish: -------------------------------------------------------------------------------- 1 | alias disks "lsblk && df -h" 2 | has_command nmtui && alias wifi "sudo -E nmtui" 3 | has_command pulsemixer && alias pa pulsemixer 4 | has_command neomutt && alias mail neomutt 5 | has_command iex && alias miex 'iex -S mix' 6 | -------------------------------------------------------------------------------- /os/linux/debian/provisioning/create-my-user.bash: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # user's username 4 | USERNAME=daniel 5 | USER_GROUPS="users,docker,sudo" 6 | 7 | # add user with groups 8 | useradd -m -d "/home/$USERNAME/.home" -G "${USER_GROUPS}" -s "/bin/bash" "$USERNAME" 9 | 10 | # give "nice home" directory ownership 11 | chown -R "$USERNAME:$USERNAME" "/home/$USERNAME" 12 | 13 | # have user set new user's password 14 | echo "Setting password for user '$USERNAME'" 15 | passwd "$USERNAME" 16 | -------------------------------------------------------------------------------- /os/linux/debian/provisioning/install-packages.bash: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | sudo apt install curl gnupg2 4 | 5 | echo "Setting up yarn source..." 6 | curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - 7 | echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list 8 | 9 | sudo apt remove cmdtest # conflicts with yarn 10 | 11 | sudo apt update 12 | 13 | sudo apt install \ 14 | tmux \ 15 | fish \ 16 | fd-find \ 17 | ripgrep \ 18 | tree \ 19 | fzf \ 20 | htop \ 21 | ssh mosh \ 22 | openssl \ 23 | python3 python3-pip \ 24 | rsync \ 25 | neovim vim \ 26 | unzip \ 27 | lua5.3 luajit \ 28 | jq \ 29 | age \ 30 | sops \ 31 | w3m \ 32 | ranger \ 33 | inotify-tools \ 34 | time \ 35 | fortune \ 36 | nodejs yarn \ 37 | gawk \ 38 | netcat \ 39 | kitty-terminfo 40 | -------------------------------------------------------------------------------- /os/linux/debian/provisioning/install-tmux-plugins.bash: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | mkdir -p "$HOME/.config/systemd/user" 4 | 5 | # tmux plugin manager 6 | git clone https://github.com/tmux-plugins/tpm "$XDG_CONFIG_HOME/tmux/plugins/tpm" 7 | 8 | # load tmux config 9 | tmux source-file "$HOME/.tmux.conf" 10 | 11 | # clean, install, and update plugins 12 | bash "$XDG_CONFIG_HOME/tmux/plugins/tpm/bindings/clean_plugins" 13 | bash "$XDG_CONFIG_HOME/tmux/plugins/tpm/bindings/install_plugins" 14 | bash "$XDG_CONFIG_HOME/tmux/plugins/tpm/bindings/update_plugins" 15 | 16 | # load tmux config 17 | tmux source-file "$HOME/.tmux.conf" 18 | 19 | systemctl --user enable tmux.service 20 | systemctl --user restart tmux.service 21 | -------------------------------------------------------------------------------- /os/linux/desktop/neovimterm.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | Version=1.0 4 | Name=Neovim-Term 5 | Comment=Edit files using Neovim in the Kitty terminal emulator 6 | Path=/usr/bin 7 | Exec=kitty nvim %f 8 | Icon=kitty 9 | Terminal=true 10 | -------------------------------------------------------------------------------- /os/linux/dotfiles-setup.d.fish: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | set me (status -f) 3 | set dfp $argv[1] 4 | set h $argv[2] 5 | set c $argv[3] 6 | 7 | pushd (dirname $me) 8 | l sway/config $c/sway/config 9 | l sway/mimeapps.list $c/mimeapps.list 10 | l sway/mimeapps.list $c/sway-mimeapps.list 11 | l sway/mimeapps.list $h/.local/share/applications/mimeapps.list 12 | l sway/lock $c/swaylock/config 13 | l hypr $c/hypr 14 | l eww $c/eww 15 | l mako $c/mako 16 | l kanshi $c/kanshi 17 | l gtk/2rc $h/.gtkrc-2.0 18 | l gtk/2rc $h/.gtkrc 19 | l gtk/3settings.ini $c/gtk-3.0/settings.ini 20 | l waybar $c/waybar 21 | l libinput/gestures.conf $c/libinput-gestures.conf 22 | l zathura $c/zathura 23 | l user-dirs $c/user-dirs.dirs 24 | -------------------------------------------------------------------------------- /os/linux/eww/eww.scss: -------------------------------------------------------------------------------- 1 | $base: #1e1e2e; 2 | $mantle: #181825; 3 | $crust: #11111b; 4 | $text: #cdd6f4; 5 | $subtext0: #a6adc8; 6 | $subtext1: #bac2de; 7 | $surface0: #313244; 8 | $surface1: #45475a; 9 | $surface2: #585b70; 10 | $overlay0: #6c7086; 11 | $overlay1: #7f849c; 12 | $overlay2: #9399b2; 13 | $blue: #89b4fa; 14 | $lavender: #b4befe; 15 | $sapphire: #74c7ec; 16 | $sky: #89dceb; 17 | $teal: #94e2d5; 18 | $green: #a6e3a1; 19 | $yellow: #f9e2af; 20 | $peach: #fab387; 21 | $maroon: #eba0ac; 22 | $red: #f38ba8; 23 | $mauve: #cba6f7; 24 | $pink: #f5c2e7; 25 | $flamingo: #f2cdcd; 26 | $rosewater: #f5e0dc; 27 | 28 | * { 29 | all: unset; 30 | } 31 | 32 | .bar { 33 | background-color: $base; 34 | color: $text; 35 | font-family: IosevkaLyteTerm; 36 | font-size: 12.0pt; 37 | } 38 | 39 | .sidestuff slider { 40 | color: #ffd5cd; 41 | } 42 | 43 | .metric {} 44 | 45 | .metric label { 46 | padding-right: 5px; 47 | } 48 | 49 | .metric scale { 50 | /*background-color: #ff00ff;*/ 51 | } 52 | 53 | .metric scale trough { 54 | background-color: $surface1; 55 | color: $mantle; 56 | border-radius: 50px; 57 | min-height: 5px; 58 | min-width: 50px; 59 | } 60 | 61 | .metric scale trough highlight { 62 | background-color: $flamingo; 63 | color: $base; 64 | border-radius: 10px; 65 | } 66 | 67 | .bar>* { 68 | padding-left: 10px; 69 | padding-right: 10px; 70 | } 71 | 72 | .vol .muted, 73 | .mic .live { 74 | color: #f38ba8; 75 | } 76 | 77 | .vol .live, 78 | .mic .muted { 79 | color: #74c7ec; 80 | } -------------------------------------------------------------------------------- /os/linux/eww/eww.yuck: -------------------------------------------------------------------------------- 1 | (defwidget bar [] 2 | (centerbox :orientation "h" 3 | (sidestuff) 4 | (box) 5 | (music))) 6 | 7 | (defwindow bar 8 | :monitor 0 9 | :stacking "fg" 10 | :exclusive true 11 | :geometry 12 | (geometry 13 | :x "0%" 14 | :y "0%" 15 | :width "100%" 16 | :height "31px" 17 | :anchor "bottom center") 18 | (bar)) 19 | 20 | (defwidget sidestuff [] 21 | (box :class "sidestuff" :orientation "h" :space-evenly false :halign "start" :spacing 20 22 | time 23 | ; TODO: idle inhibitor? 24 | ; TODO: get these to align properly? 25 | (box :class "mic" ( 26 | box :class {micMuted == "false" ? "live" : "muted"} {micMuted == "false" ? " " : " "} 27 | ) {micVolume + "%"} 28 | ) 29 | (box :class "vol" ( 30 | box :class {muted == "false" ? "live" : "muted"} {muted == "false" ? "󰕾 " : "󰖁 "} 31 | ) {volume + "%"} 32 | ) 33 | {" " + round(EWW_CPU["avg"], 0) + "%"} 34 | {" " + round(EWW_RAM["used_mem_perc"], 0) + "%"} 35 | {isDesktop == "true" ? "" : " " + brightness + "%"} 36 | {isDesktop == "true" ? "" : "󱊣 " + EWW_BATTERY["BAT0"]["capacity"] + "%/" + EWW_BATTERY["BAT1"]["capacity"] + "%"} 37 | )) 38 | 39 | (defwidget music [] 40 | (box :class "music" 41 | :orientation "h" 42 | :halign "end" 43 | :space-evenly false 44 | {music != "" ? "${music}" : ""})) 45 | 46 | (deflisten music :initial "" 47 | "playerctl --follow metadata --format '{{ title }} by {{ artist }}' || true") 48 | 49 | (deflisten volume :initial "0" 50 | "pamixer --get-volume; pactl subscribe | grep sink --line-buffered | while read i; do pamixer --get-volume; done") 51 | 52 | (deflisten muted :initial "false" 53 | "pamixer --get-mute; pactl subscribe | grep sink --line-buffered | while read i; do pamixer --get-mute; done") 54 | 55 | (deflisten micVolume :initial "0" 56 | "pamixer --default-source --get-volume; pactl subscribe | grep source --line-buffered | while read i; do pamixer --default-source --get-volume; done") 57 | 58 | (deflisten micMuted :initial "false" 59 | "pamixer --default-source --get-mute; pactl subscribe | grep source --line-buffered | while read i; do pamixer --default-source --get-mute; done") 60 | 61 | (defpoll time :interval "1s" 62 | "date '+%a %b %d %H:%M:%S'") 63 | 64 | (defpoll isDesktop :interval "24h" 65 | "if [ -d \"$HOME/.config/lytedev-env/host-desktop\" ]; then echo true; else echo false; fi") 66 | 67 | (defpoll brightness :interval "10s" 68 | "echo $(((100 * $(brightnessctl get)) / $(brightnessctl max)))") 69 | -------------------------------------------------------------------------------- /os/linux/gnome/gdm-tap-to-click: -------------------------------------------------------------------------------- 1 | [org/gnome/desktop/peripherals/touchpad] 2 | tap-to-click=true 3 | -------------------------------------------------------------------------------- /os/linux/gtk/2rc: -------------------------------------------------------------------------------- 1 | gtk-icon-theme-name = "elementary" 2 | gtk-theme-name = "Catppuccin-Mocha-Standard-Sapphire-Dark" 3 | gtk-font-name = "IosevkaLyteTerm 12" 4 | -------------------------------------------------------------------------------- /os/linux/gtk/3settings.ini: -------------------------------------------------------------------------------- 1 | [Settings] 2 | gtk-application-prefer-dark-theme=true 3 | gtk-button-images=true 4 | gtk-cursor-theme-name=breeze_cursors 5 | gtk-cursor-theme-size=24 6 | gtk-decoration-layout=icon:minimize,maximize,close 7 | gtk-enable-animations=true 8 | gtk-font-name=Noto Sans, 10 9 | gtk-icon-theme-name=breeze-dark 10 | gtk-menu-images=true 11 | gtk-modules=colorreload-gtk-module 12 | gtk-primary-button-warps-slider=false 13 | gtk-theme-name=Catppuccin-Mocha-Standard-Sapphire-Dark 14 | gtk-toolbar-style=3 15 | gtk-xft-dpi=98304 16 | -------------------------------------------------------------------------------- /os/linux/hypr/hyprland.conf: -------------------------------------------------------------------------------- 1 | # See https://wiki.hyprland.org/Configuring/Monitors/ 2 | monitor=,preferred,auto,auto 3 | 4 | # See https://wiki.hyprland.org/Configuring/Keywords/ for more 5 | 6 | # Execute your favorite apps at launch 7 | exec-once = firefox & kitty --single-instance & hyprpaper & mako & /usr/lib/polkit-kde-authentication-agent-1 & eww daemon & eww open-many bar 8 | exec-once = swayidle -w timeout 600 'notify-send "Locking in 30 seconds..."' timeout 630 'swaylock -f' timeout 660 'hyprctl dispatch dpms off' resume 'hyprctl dispatch dpms on && maybe-good-morning' before-sleep 'swaylock -f' 9 | exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP 10 | 11 | env = XCURSOR_SIZE,24 12 | 13 | input { 14 | kb_layout = us 15 | # kb_variant = 16 | # kb_model = 17 | # kb_options = 18 | # kb_rules = 19 | 20 | follow_mouse = 2 21 | 22 | repeat_delay = 200 23 | repeat_rate = 60 24 | 25 | touchpad { 26 | natural_scroll = no 27 | tap-to-click = true 28 | middle_button_emulation = true 29 | } 30 | 31 | force_no_accel = true 32 | sensitivity = 1 # -1.0 - 1.0, 0 means no modification. 33 | } 34 | 35 | misc { 36 | disable_hyprland_logo = true 37 | disable_splash_rendering = true 38 | } 39 | 40 | binds { 41 | allow_workspace_cycles = true 42 | } 43 | 44 | general { 45 | # See https://wiki.hyprland.org/Configuring/Variables/ for more 46 | 47 | gaps_in = 3 48 | gaps_out = 6 49 | border_size = 1 50 | no_cursor_warps = true 51 | resize_on_border = true 52 | 53 | col.active_border = rgba(74c7ecff) 45deg 54 | col.inactive_border = rgba(59595988) 55 | 56 | layout = dwindle 57 | } 58 | 59 | decoration { 60 | # See https://wiki.hyprland.org/Configuring/Variables/ for more 61 | 62 | rounding = 3 63 | blur = yes 64 | blur_size = 3 65 | blur_passes = 1 66 | blur_new_optimizations = on 67 | 68 | drop_shadow = yes 69 | shadow_range = 4 70 | shadow_render_power = 3 71 | col.shadow = rgba(1a1a1aee) 72 | 73 | dim_inactive = 0.5 74 | } 75 | 76 | animations { 77 | enabled = yes 78 | 79 | # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more 80 | 81 | bezier = myBezier, 0.05, 0.9, 0.1, 1.05 82 | bezier=overshot,0.05,0.9,0.1,1.1 83 | 84 | animation = windows, 1, 2, default 85 | animation = windowsOut, 1, 2, default, popin 80% 86 | animation = border, 1, 2, default 87 | animation = borderangle, 1, 2, default 88 | animation = fade, 1, 2, default 89 | animation = workspaces, 1, 2, default 90 | } 91 | 92 | dwindle { 93 | # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more 94 | # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below 95 | pseudotile = yes 96 | preserve_split = 1 97 | no_gaps_when_only = true 98 | } 99 | 100 | master { 101 | # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more 102 | new_is_master = true 103 | } 104 | 105 | gestures { 106 | # See https://wiki.hyprland.org/Configuring/Variables/ for more 107 | workspace_swipe = off 108 | } 109 | 110 | # Example per-device config 111 | # See https://wiki.hyprland.org/Configuring/Keywords/#executing for more 112 | # device:epic-mouse-v1 { 113 | # sensitivity = -0.5 114 | # } 115 | 116 | # Example windowrule v1 117 | # windowrule = float, ^(kitty)$ 118 | # Example windowrule v2 119 | # windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ 120 | # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more 121 | 122 | # See https://wiki.hyprland.org/Configuring/Keywords/ for more 123 | $mainMod = SUPER 124 | 125 | # Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more 126 | bind = $mainMod, return, exec, kitty --single-instance 127 | bind = $mainMod SHIFT, return, exec, kitty 128 | bind = $mainMod, U, exec, firefox 129 | bind = $mainMod, space, exec, wofi --show drun 130 | bind = $mainMod, C, killactive, 131 | bind = $mainMod, M, exit, 132 | bind = $mainMod, E, exec, dolphin 133 | bind = $mainMod, F, togglefloating, 134 | bind = $mainMod SHIFT, F, fullscreen, 135 | bind = $mainMod, R, exec, anyrun 136 | bind = $mainMod, S, pseudo, # dwindle 137 | bind = $mainMod, P, togglesplit, # dwindle 138 | 139 | # Move focus with mainMod + arrow keys 140 | bind = $mainMod, left, movefocus, l 141 | bind = $mainMod, right, movefocus, r 142 | bind = $mainMod, up, movefocus, u 143 | bind = $mainMod, down, movefocus, d 144 | bind = $mainMod, h, movefocus, l 145 | bind = $mainMod, l, movefocus, r 146 | bind = $mainMod, k, movefocus, u 147 | bind = $mainMod, j, movefocus, d 148 | 149 | bind = $mainMod SHIFT, H, swapwindow, l 150 | bind = $mainMod SHIFT, L, swapwindow, r 151 | bind = $mainMod SHIFT, K, swapwindow, u 152 | bind = $mainMod SHIFT, J, swapwindow, d 153 | 154 | bind = $mainMod SHIFT, V, exec, pamixer --default-source --toggle-mute 155 | bind = , XF86AudioMicMute, exec, pamixer --default-source --toggle-mute 156 | bind = , XF86AudioMute, exec, pamixer --toggle-mute 157 | bind = , XF86AudioRaiseVolume, exec, pamixer --increase 5 158 | bind = , XF86AudioLowerVolume, exec, pamixer --decrease 5 159 | bind = CTRL, XF86AudioRaiseVolume, exec, pamixer --increase 1 160 | bind = CTRL, XF86AudioLowerVolume, exec, pamixer --decrease 1 161 | 162 | bind = , XF86AudioPlay, exec, playerctl play-pause 163 | bind = , XF86AudioNext, exec, playerctl next 164 | bind = , XF86AudioPrev, exec, playerctl previous 165 | 166 | bind = $mainMod, tab, workspace, previous 167 | 168 | # Switch workspaces with mainMod + [0-9] 169 | bind = $mainMod, 1, workspace, 1 170 | bind = $mainMod, 2, workspace, 2 171 | bind = $mainMod, 3, workspace, 3 172 | bind = $mainMod, 4, workspace, 4 173 | bind = $mainMod, 5, workspace, 5 174 | bind = $mainMod, 6, workspace, 6 175 | bind = $mainMod, 7, workspace, 7 176 | bind = $mainMod, 8, workspace, 8 177 | bind = $mainMod, 9, workspace, 9 178 | bind = $mainMod, 0, workspace, 10 179 | 180 | # Move active window to a workspace with mainMod + SHIFT + [0-9] 181 | bind = $mainMod SHIFT, 1, movetoworkspace, 1 182 | bind = $mainMod SHIFT, 2, movetoworkspace, 2 183 | bind = $mainMod SHIFT, 3, movetoworkspace, 3 184 | bind = $mainMod SHIFT, 4, movetoworkspace, 4 185 | bind = $mainMod SHIFT, 5, movetoworkspace, 5 186 | bind = $mainMod SHIFT, 6, movetoworkspace, 6 187 | bind = $mainMod SHIFT, 7, movetoworkspace, 7 188 | bind = $mainMod SHIFT, 8, movetoworkspace, 8 189 | bind = $mainMod SHIFT, 9, movetoworkspace, 9 190 | bind = $mainMod SHIFT, 0, movetoworkspace, 10 191 | 192 | bind = , XF86MonBrightnessDown, exec, brightnessctl set 10%- 193 | bind = , XF86MonBrightnessUp, exec, brightnessctl set +10% 194 | bind = SHIFT, XF86MonBrightnessDown, exec, brightnessctl set 1% 195 | bind = SHIFT, XF86MonBrightnessUp, exec, brightnessctl set 100% 196 | bind = CTRL, XF86MonBrightnessDown, exec, brightnessctl set 1%- 197 | bind = CTRL, XF86MonBrightnessUp, exec, brightnessctl set +1% 198 | 199 | bind = $mainMod SHIFT, S, exec, clipshot 200 | 201 | # Scroll through existing workspaces with mainMod + scroll 202 | bind = $mainMod, mouse_down, workspace, e+1 203 | bind = $mainMod, mouse_up, workspace, e-1 204 | 205 | bind = CTRL SHIFT $mainMod, L, exec, swaylock 206 | 207 | # Move/resize windows with mainMod + LMB/RMB and dragging 208 | bindm = $mainMod, mouse:272, movewindow 209 | bindm = $mainMod, mouse:273, resizewindow 210 | 211 | bind = $mainMod CTRL, space, exec, makoctl dismiss 212 | bind = $mainMod SHIFT CTRL, space, exec, makoctl restore 213 | bind = $mainMod SHIFT, space, exec, makoctl invoke 214 | 215 | bind = $mainMod, E, exec, thunar 216 | -------------------------------------------------------------------------------- /os/linux/hypr/hyprpaper.conf: -------------------------------------------------------------------------------- 1 | preload = ~/../img/walls/wallpaper.png 2 | wallpaper = eDP-1,~/../img/walls/wallpaper.png 3 | wallpaper = DP-1,~/../img/walls/wallpaper.png 4 | wallpaper = DP-2,~/../img/walls/wallpaper.png 5 | wallpaper = DP-3,~/../img/walls/wallpaper.png 6 | -------------------------------------------------------------------------------- /os/linux/key.map: -------------------------------------------------------------------------------- 1 | include "/usr/share/kbd/keymaps/i386/qwerty/us.map.gz" 2 | include "/usr/share/kbd/keymaps/i386/include/ctrl.map.gz" 3 | -------------------------------------------------------------------------------- /os/linux/libinput/gestures.conf: -------------------------------------------------------------------------------- 1 | swipe_threshold 25 2 | timeout 0.9 3 | 4 | # TODO: sway gestures? 5 | 6 | gesture swipe left 3 swaymsg workspace back_and_forth 7 | 8 | # gesture swipe right 2 swaymsg seat seat0 cursor press BTN_EXTRA && swaymsg seat seat0 cursor release BTN_EXTRA 9 | 10 | # gesture swipe left 2 swaymsg seat seat0 cursor press BTN_SIDE && swaymsg seat seat0 cursor release BTN_SIDE 11 | -------------------------------------------------------------------------------- /os/linux/libinput/sway-gestures.conf: -------------------------------------------------------------------------------- 1 | swipe_threshold 25 2 | timeout 0.9 3 | 4 | # TODO: sway gestures? 5 | 6 | gesture swipe left 3 swaymsg workspace back_and_forth 7 | 8 | gesture swipe right 2 swaymsg seat seat0 cursor press BTN_EXTRA && swaymsg seat seat0 cursor release BTN_EXTRA 9 | 10 | gesture swipe left 2 swaymsg seat seat0 cursor press BTN_SIDE && swaymsg seat seat0 cursor release BTN_SIDE 11 | -------------------------------------------------------------------------------- /os/linux/mako/config: -------------------------------------------------------------------------------- 1 | max-visible=5 2 | default-timeout=30000 3 | font=Symbols Nerd Font 12,IosevkaLyteTerm 12 4 | default-timeout=15000 5 | border-size=1 6 | 7 | # theme src: https://github.com/catppuccin/mako/blob/main/src/mocha 8 | # Colors 9 | 10 | background-color=#1e1e2e 11 | text-color=#cdd6f4 12 | border-color=#89b4fa 13 | progress-color=over #313244 14 | 15 | [urgency=high] 16 | border-color=#fab387 17 | -------------------------------------------------------------------------------- /os/linux/sway/.gitignore: -------------------------------------------------------------------------------- 1 | bg.jpg 2 | bg.png 3 | -------------------------------------------------------------------------------- /os/linux/sway/config: -------------------------------------------------------------------------------- 1 | # TODO: 2 | # 3 | # + Super+r should rotate the selected group of windows. 4 | # + Super+Control+{1-9} should control the size of the preselect space. 5 | # + Super+Shift+b should balance the size of all selected nodes. 6 | 7 | set $mod Mod4 8 | 9 | xwayland enable 10 | focus_wrapping no 11 | smart_borders on 12 | default_border pixel 2 13 | focus_follows_mouse no 14 | mouse_warping none 15 | popup_during_fullscreen smart 16 | 17 | input type:touchscreen { 18 | events disabled 19 | } 20 | 21 | input type:keyboard { 22 | repeat_delay 200 23 | repeat_rate 60 24 | # I have a keyboard that takes care of this on my workstation, so we only enable 25 | # this on laptops 26 | # xkb_options ctrl:nocaps 27 | } 28 | 29 | input type:pointer { 30 | accel_profile flat 31 | pointer_accel 0 32 | } 33 | 34 | input type:touchpad { 35 | dwt disabled 36 | tap enabled 37 | natural_scroll enabled 38 | middle_emulation enabled 39 | # pointer_accel 40 | } 41 | 42 | bindsym $mod+control+space exec makoctl dismiss 43 | bindsym $mod+shift+space exec makoctl invoke 44 | bindsym $mod+return exec kitty --single-instance 45 | bindsym $mod+shift+return exec floating-term 46 | bindsym $mod+shift+alt+return exec kitty 47 | bindsym $mod+c kill 48 | bindsym $mod+shift+c kill # TODO: kill -9? 49 | # bindsym $mod+shift+space exec wofi --show drun 50 | bindsym $mod+space exec wofi --show drun 51 | bindsym $mod+shift+s exec clipshot 52 | bindsym $mod+e exec thunar 53 | bindsym $mod+shift+r reload 54 | bindsym $mod+control+Escape exit 55 | bindsym $mod+shift+e exit 56 | bindsym $mod+shift+p exec pass-chooser 57 | bindsym $mod+control+j split v 58 | bindsym $mod+control+l split h 59 | bindsym $mod+control+f focus mode_toggle 60 | 61 | bindsym $mod+h focus left 62 | bindsym $mod+j focus down 63 | bindsym $mod+k focus up 64 | bindsym $mod+l focus right 65 | 66 | bindsym $mod+left focus left 67 | bindsym $mod+down focus down 68 | bindsym $mod+up focus up 69 | bindsym $mod+right focus right 70 | 71 | bindsym $mod+shift+h move left 72 | bindsym $mod+shift+j move down 73 | bindsym $mod+shift+k move up 74 | bindsym $mod+shift+l move right 75 | 76 | bindsym $mod+shift+left move left 77 | bindsym $mod+shift+down move down 78 | bindsym $mod+shift+up move up 79 | bindsym $mod+shift+right move right 80 | 81 | floating_modifier $mod normal 82 | 83 | bindsym $mod+1 workspace 1 84 | bindsym $mod+2 workspace 2 85 | bindsym $mod+3 workspace 3 86 | bindsym $mod+4 workspace 4 87 | bindsym $mod+5 workspace 5 88 | bindsym $mod+6 workspace 6 89 | bindsym $mod+7 workspace 7 90 | bindsym $mod+8 workspace 8 91 | bindsym $mod+9 workspace 9 92 | bindsym $mod+0 workspace 10 93 | 94 | bindsym $mod+shift+1 move container to workspace 1 95 | bindsym $mod+shift+2 move container to workspace 2 96 | bindsym $mod+shift+3 move container to workspace 3 97 | bindsym $mod+shift+4 move container to workspace 4 98 | bindsym $mod+shift+5 move container to workspace 5 99 | bindsym $mod+shift+6 move container to workspace 6 100 | bindsym $mod+shift+7 move container to workspace 7 101 | bindsym $mod+shift+8 move container to workspace 8 102 | bindsym $mod+shift+9 move container to workspace 9 103 | bindsym $mod+shift+0 move container to workspace 10 104 | 105 | bindsym $mod+b splith 106 | bindsym $mod+v splitv 107 | 108 | bindsym $mod+shift+f fullscreen toggle 109 | bindsym $mod+f floating toggle 110 | bindsym $mod+s floating disable 111 | bindsym $mod+alt+f focus mode_toggle 112 | bindsym $mod+p focus parent 113 | bindsym $mod+period focus child 114 | bindsym $mod+comma focus child 115 | bindsym $mod+tab workspace back_and_forth 116 | 117 | bindsym $mod+minus gaps inner current minus 5 118 | bindsym $mod+plus gaps inner current plus 5 119 | bindsym $mod+control+alt+h gaps horizontal current minus 5 120 | bindsym $mod+control+alt+l gaps horizontal current plus 5 121 | bindsym $mod+control+alt+j gaps vertical current minus 5 122 | bindsym $mod+control+alt+k gaps vertical current plus 5 123 | # TODO: this should also reset the horizontal and vertical gaps? 124 | bindsym $mod+control+equal gaps inner current set 0 125 | 126 | bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5% 127 | bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5% 128 | bindsym control+XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +1% 129 | bindsym control+XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -1% 130 | bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle 131 | bindsym XF86AudioMicMute exec pactl set-source-mute @DEFAULT_SOURCE@ toggle 132 | bindsym XF86MonBrightnessDown exec brightnessctl set 10%- 133 | bindsym XF86MonBrightnessUp exec brightnessctl set +10% 134 | bindsym shift+XF86MonBrightnessDown exec brightnessctl set 1% 135 | bindsym shift+XF86MonBrightnessUp exec brightnessctl set 100% 136 | bindsym control+XF86MonBrightnessDown exec brightnessctl set 1%- 137 | bindsym control+XF86MonBrightnessUp exec brightnessctl set +1% 138 | bindsym XF86AudioPlay exec playerctl play-pause 139 | bindsym XF86AudioNext exec playerctl next 140 | bindsym XF86AudioPrev exec playerctl previous 141 | bindsym $mod+shift+v exec pactl set-source-mute @DEFAULT_SOURCE@ toggle 142 | 143 | bindsym $mod+control+shift+l exec swaylock 144 | # TODO: toggle-able swayidle? 145 | # TODO: one-time swayidle/monitor-off 146 | # bindsym $mod+Control+Shift+s exec lock-and-disable-monitors 147 | 148 | mode "resize" { 149 | bindsym h resize shrink width 10 px or 10 ppt 150 | bindsym j resize grow height 10 px or 10 ppt 151 | bindsym k resize shrink height 10 px or 10 ppt 152 | bindsym l resize grow width 10 px or 10 ppt 153 | 154 | bindsym left resize shrink width 10 px or 10 ppt 155 | bindsym down resize grow height 10 px or 10 ppt 156 | bindsym up resize shrink height 10 px or 10 ppt 157 | bindsym right resize grow width 10 px or 10 ppt 158 | 159 | bindsym return mode "default" 160 | bindsym escape mode "default" 161 | } 162 | 163 | bar { 164 | swaybar_command waybar 165 | } 166 | 167 | set $tilers "(wezterm.*|kitty.*|firefox.*|slack.*|Slack.*|thunar.*|Alacritty.*|alacritty.*|Discord.*|discord.*)" 168 | for_window [title=".*"] floating enable 169 | for_window [app_id=$tilers] floating disable 170 | bindsym $mod+shift+alt+f for_window [class=$tilers] floating toggle 171 | 172 | # for_window [title=".*"] opacity $opacity 173 | 174 | include /etc/sway/config.d/* 175 | include $XDG_CONFIG_HOME/lytedev-env/*/sway/config 176 | 177 | client.focused #74c7ec #74c7ec #74c7ec #74c7ec #74c7ec 178 | client.focused_inactive #100814 #100814 #9b9ebf #100814 #100814 179 | client.unfocused #100814 #100814 #9b9ebf #100814 #100814 180 | 181 | # exec /usr/share/sway/scripts/inactive-windows-transparency.py --opacity 0.95 182 | 183 | exec mako 184 | # exec gammastep -t 6500:3500 -l 39.0:-94.5 185 | # exec /usr/lib/kdeconnectd 186 | 187 | exec kitty --single-instance 188 | exec /usr/lib/polkit-kde-authentication-agent-1 189 | 190 | exec swayidle -w \ 191 | timeout 540 'notify-send "Idling in 90 seconds"' \ 192 | timeout 570 'notify-send "Idling in 60 seconds"' \ 193 | timeout 600 'notify-send "Idling in 30 seconds..."' \ 194 | timeout 630 'swaylock -f' \ 195 | timeout 660 'swaymsg "output * dpms off"' \ 196 | resume 'swaymsg "output * dpms on" & maybe-good-morning &' \ 197 | before-sleep 'swaylock -f' 198 | 199 | # exec_always notify-send -a "sway" -i ~/.wallpaper "sway configuration loaded" 200 | 201 | # prevent all windows from stealing focus 202 | no_focus [class=".*"] 203 | 204 | output * background $HOME/.wallpaper fill 205 | -------------------------------------------------------------------------------- /os/linux/sway/dm-entry: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=sway-lytedev 3 | Comment=Sway with lytedev's config 4 | Exec=sway-lytedev 5 | Type=Application 6 | X-GDM-Session-Type=wayland 7 | -------------------------------------------------------------------------------- /os/linux/sway/init: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | 3 | set --query XDG_CONFIG_HOME || begin 4 | echo XDG_CONFIG_HOME not set 5 | exit 1 6 | end 7 | 8 | set --query DOTFILES_PATH || begin 9 | echo DOTFILES_PATH not set 10 | exit 1 11 | end 12 | 13 | # set --export --universal QT_QPA_PLATFORM xcb 14 | # set --export --universal QT_QPA_PLATFORM_PLUGIN_PATH /usr/lib/qt/plugins 15 | 16 | set --export --universal CLUTTER_BACKEND wayland 17 | # set --export --universal SDL_VIDEODRIVER wayland 18 | set --export --universal MOZ_ENABLE_WAYLAND 1 19 | set --export --universal XDG_CURRENT_DESKTOP sway 20 | set --export --universal _JAVA_AWT_WM_NONREPARENTING 1 21 | 22 | # for s in $ENV_PATH/*/sway-init.d.fish 23 | # source $s (dirname $s) 24 | # end 25 | 26 | set --query SWAY_LOGGING || set SWAY_LOGGING 0 27 | 28 | if test $SWAY_LOGGING = 1 29 | set initstr "\n(date): Starting Sway" 30 | set elogfile ~/.sway.error.log 31 | set logfile ~/.sway.log 32 | 33 | echo $initstr >> $logfile; echo $initstr >> $elogfile 34 | exec sway >> $logfile 2>> $elogfile 35 | else 36 | exec sway 37 | end 38 | -------------------------------------------------------------------------------- /os/linux/sway/lock: -------------------------------------------------------------------------------- 1 | color=ffffffff 2 | image=~/.wallpaper 3 | font=IosevkaLyteTerm 4 | show-failed-attempts 5 | ignore-empty-password 6 | 7 | indicator-radius=150 8 | indicator-thickness=30 9 | 10 | inside-color=11111100 11 | inside-clear-color=11111100 12 | inside-ver-color=11111100 13 | inside-wrong-color=11111100 14 | 15 | key-hl-color=a1efe4 16 | separator-color=11111100 17 | 18 | line-color=111111cc 19 | line-uses-ring 20 | 21 | ring-color=111111cc 22 | ring-clear-color=f9e2af 23 | ring-ver-color=66d9ef 24 | ring-wrong-color=f38ba8 25 | 26 | text-color=ffffff 27 | text-clear-color=ffffff 28 | text-ver-color=ffffff 29 | text-wrong-color=f38ba8 30 | -------------------------------------------------------------------------------- /os/linux/sway/mimeapps.list: -------------------------------------------------------------------------------- 1 | [Default Applications] 2 | image/jpeg=krita_jpeg.desktop 3 | image/png=krita_png.desktop 4 | 5 | [MIME Cache] 6 | image/jpeg=krita_jpeg.desktop 7 | image/png=krita_png.desktop 8 | 9 | [Added Associations] 10 | image/jpeg=krita_jpeg.desktop 11 | image/png=krita_png.desktop -------------------------------------------------------------------------------- /os/linux/tmpfiles/disable-lid-wakeup: -------------------------------------------------------------------------------- 1 | w /proc/acpi/wakeup - - - - LID 2 | -------------------------------------------------------------------------------- /os/linux/udev-rules/gcadapter: -------------------------------------------------------------------------------- 1 | SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="057e", ATTRS{idProduct}=="0337", MODE="0666" 2 | -------------------------------------------------------------------------------- /os/linux/user-dirs: -------------------------------------------------------------------------------- 1 | XDG_DESKTOP_DIR="$HOME/desktop" 2 | XDG_DOCUMENTS_DIR="$NICE_HOME/doc" 3 | XDG_DOWNLOAD_DIR="$NICE_HOME/dl" 4 | XDG_MUSIC_DIR="$NICE_HOME/music" 5 | XDG_PICTURES_DIR="$NICE_HOME/img" 6 | XDG_PUBLICSHARE_DIR="$HOME/public" 7 | XDG_TEMPLATES_DIR="$HOME/templates" 8 | XDG_VIDEOS_DIR="$NICE_HOME/video" 9 | -------------------------------------------------------------------------------- /os/linux/vconsole.conf: -------------------------------------------------------------------------------- 1 | KEYMAP=/usr/local/share/kbd/keymaps/personal.map 2 | -------------------------------------------------------------------------------- /os/linux/waybar/config: -------------------------------------------------------------------------------- 1 | { 2 | "layer": "top", 3 | "position": "bottom", 4 | "output": ["eDP-1", "DP-3"], 5 | "height": 32, 6 | "modules-left": ["clock", "sway/window"], 7 | "modules-center": ["sway/workspaces"], 8 | "modules-right": [ 9 | "mpris", 10 | "idle_inhibitor", 11 | "bluetooth", 12 | // "wireplumber", 13 | "pulseaudio", 14 | // "network", 15 | "cpu", 16 | "memory", 17 | // "temperature", 18 | "backlight", 19 | "battery", 20 | "tray" 21 | ], 22 | "bluetooth": { 23 | "format": "", 24 | "format-connected": "", 25 | "format-connected-battery": "", 26 | // "format-device-preference": [ "device1", "device2" ], // preference list deciding the displayed device 27 | "tooltip-format": "{controller_alias}@{controller_address} ({num_connections} connected)", 28 | "tooltip-format-connected": "{controller_alias}@{controller_address} ({num_connections} connected)\n{device_enumerate}", 29 | "tooltip-format-enumerate-connected": "{device_alias}@{device_address}", 30 | "tooltip-format-enumerate-connected-battery": "{device_alias}@{device_address} (󰁹 {device_battery_percentage}%)" 31 | }, 32 | // "wireplumber": { 33 | // "format": "{volume}% {icon}", 34 | // "format-muted": "", 35 | // "on-click": "helvum" 36 | // }, 37 | "sway/workspaces": { 38 | "disable-scroll": false, 39 | "persistent_workspaces": { 40 | "1": [], 41 | "2": [], 42 | "3": [], 43 | "4": [], 44 | "5": [], 45 | "6": [], 46 | "7": [], 47 | "8": [], 48 | "9": [] 49 | // "10": [] 50 | }, 51 | "all-outputs": true, 52 | "format": "{name}" 53 | }, 54 | "idle_inhibitor": { 55 | "format": "{icon}", 56 | "format-icons": { 57 | "activated": "󰈈", 58 | "deactivated": "󰈉" 59 | } 60 | }, 61 | "tray": { 62 | "icon-size": 24, 63 | "spacing": 4 64 | }, 65 | "clock": { 66 | "interval": 1, 67 | "format": "{:%a %b %d %H:%M:%S}" 68 | }, 69 | "cpu": { 70 | "format": "{usage} ", 71 | "tooltip": true, 72 | "interval": 3 73 | }, 74 | "memory": { 75 | "format": "{} 󰍛" 76 | }, 77 | "temperature": { 78 | // "thermal-zone": 2, 79 | // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input", 80 | "critical-threshold": 80, 81 | // "format-critical": "{temperatureC}°C {icon}", 82 | "format": "{temperatureC}°C {icon}", 83 | "format-icons": ["", "", ""] 84 | }, 85 | "backlight": { 86 | // "device": "acpi_video1", 87 | "format": "{percent}% {icon}", 88 | "format-icons": ["", ""] 89 | }, 90 | "battery": { 91 | "states": { 92 | // "good": 95, 93 | "warning": 30, 94 | "critical": 15 95 | }, 96 | "format": "{capacity}% {icon}", 97 | "format-charging": "{capacity}% 󱐋", 98 | "format-plugged": "{capacity}% 󰚥", 99 | "format-alt": "{time} {icon}", 100 | "format-good": "", // An empty format will hide the module 101 | "format-full": "󰁹", 102 | "format-icons": ["󰂎", "󰁻", "󰁽", "󰁿", "󰂂"] 103 | }, 104 | "network": { 105 | "format-wifi": "{essid} ({signalStrength}%) ", 106 | "format-ethernet": "{ifname}: {ipaddr}/{cidr} ", 107 | "format-linked": "{ifname} (No IP) ", 108 | "format-disconnected": "Disconnected ⚠", 109 | "format-alt": "{ifname}: {ipaddr}/{cidr}" 110 | }, 111 | "mpris": { 112 | "format": "{title} by {artist}" 113 | }, 114 | "pulseaudio": { 115 | // "scroll-step": 1, // %, can be a float 116 | "format": "{volume} {icon} {format_source}", 117 | //"format": "{volume}% {icon} {format_source}", 118 | //"format-bluetooth": "{volume}% {icon} {format_source}", 119 | //"format-bluetooth-muted": " {icon} {format_source}", 120 | //"format-muted": " {format_source}", 121 | "format-muted": "󰝟 {format_source}", 122 | "format-source": "", 123 | "format-source-muted": "", 124 | "format-icons": { 125 | "headphones": "", 126 | "handsfree": "󱥋", 127 | "headset": "󰋎", 128 | "phone": "", 129 | "portable": "", 130 | "car": "", 131 | "default": ["", "", ""] 132 | }, 133 | // TODO: toggle mute? 134 | "on-click": "pavucontrol" 135 | } 136 | } 137 | -------------------------------------------------------------------------------- /os/linux/waybar/mocha.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Catppuccin Mocha palette 3 | * Maintainer: rubyowo 4 | * Source: https://raw.githubusercontent.com/catppuccin/waybar/main/themes/mocha.css 5 | */ 6 | 7 | @define-color base #1e1e2e; 8 | @define-color mantle #181825; 9 | @define-color crust #11111b; 10 | 11 | @define-color text #cdd6f4; 12 | @define-color subtext0 #a6adc8; 13 | @define-color subtext1 #bac2de; 14 | 15 | @define-color surface0 #313244; 16 | @define-color surface1 #45475a; 17 | @define-color surface2 #585b70; 18 | 19 | @define-color overlay0 #6c7086; 20 | @define-color overlay1 #7f849c; 21 | @define-color overlay2 #9399b2; 22 | 23 | @define-color blue #89b4fa; 24 | @define-color lavender #b4befe; 25 | @define-color sapphire #74c7ec; 26 | @define-color sky #89dceb; 27 | @define-color teal #94e2d5; 28 | @define-color green #a6e3a1; 29 | @define-color yellow #f9e2af; 30 | @define-color peach #fab387; 31 | @define-color maroon #eba0ac; 32 | @define-color red #f38ba8; 33 | @define-color mauve #cba6f7; 34 | @define-color pink #f5c2e7; 35 | @define-color flamingo #f2cdcd; 36 | @define-color rosewater #f5e0dc; 37 | 38 | -------------------------------------------------------------------------------- /os/linux/waybar/style.css: -------------------------------------------------------------------------------- 1 | @import "mocha.css"; 2 | 3 | * { 4 | border-radius: 0; 5 | font-family: "IosevkaLyteTerm", "Symbols Nerd Font Mono", sans-serif; 6 | font-size: 16px; 7 | } 8 | 9 | window#waybar { 10 | min-height: 32px; 11 | background-color: @base; 12 | color: @crust; 13 | border-top: solid @sapphire 1px; 14 | transition: none; 15 | } 16 | 17 | window#waybar.hidden { 18 | /* opacity: 0.2; */ 19 | } 20 | 21 | window#waybar.empty { 22 | /* opacity: 0.2; */ 23 | } 24 | 25 | #workspaces button { 26 | padding: 0 0.75em; 27 | background-color: transparent; 28 | border-top: solid @sapphire 1px; 29 | } 30 | 31 | #workspaces button:hover { 32 | /* 33 | * background: rgba(0, 0, 0, 0.2); 34 | * box-shadow: inherit; 35 | */ 36 | } 37 | 38 | #workspaces button.visible { 39 | background-color: @base; 40 | } 41 | 42 | #workspaces button.focused { 43 | color: @base; 44 | background-color: @sapphire; 45 | } 46 | 47 | #workspaces button.persistent { 48 | color: @surface2; 49 | } 50 | 51 | #workspaces button.urgent { 52 | color: @base; 53 | background-color: @red; 54 | border-top: solid @red 1px; 55 | } 56 | 57 | #mode { 58 | background-color: transparent; 59 | } 60 | 61 | #clock, 62 | #battery, 63 | #cpu, 64 | #memory, 65 | #temperature, 66 | #backlight, 67 | #network, 68 | #pulseaudio, 69 | #custom-media, 70 | #tray, 71 | #mode, 72 | #idle_inhibitor, 73 | #mpris, 74 | #window, 75 | #mpd { 76 | margin-top: 1px; 77 | padding: 0 0.75em; 78 | background-color: inherit; 79 | color: @text; 80 | } 81 | 82 | #clock {} 83 | 84 | #battery { 85 | /* background-color: #ffffff; */ 86 | /* color: #000000; */ 87 | } 88 | 89 | #battery.charging { 90 | /* color: #ffffff; */ 91 | /* background-color: #26A65B; */ 92 | } 93 | 94 | @keyframes blink { 95 | to { 96 | background-color: #ffffff; 97 | color: #000000; 98 | } 99 | } 100 | 101 | #battery.critical:not(.charging) { 102 | background-color: @red; 103 | animation-name: blink; 104 | animation-duration: 0.5s; 105 | animation-timing-function: linear; 106 | animation-iteration-count: infinite; 107 | animation-direction: alternate; 108 | } 109 | 110 | #bluetooth, 111 | #bluetooth.connected-battery, 112 | #bluetooth.connected.battery, 113 | #bluetooth.connected { 114 | color: @text; 115 | } 116 | 117 | label:focus { 118 | /* background-color: #000000; */ 119 | } 120 | 121 | #cpu { 122 | /* background-color: #2ecc71; */ 123 | /* color: #000000; */ 124 | } 125 | 126 | #memory { 127 | /* background-color: #9b59b6; */ 128 | } 129 | 130 | #backlight { 131 | /* background-color: #90b1b1; */ 132 | } 133 | 134 | #network { 135 | /* background-color: #2980b9; */ 136 | } 137 | 138 | #network.disconnected { 139 | /* background-color: #f53c3c; */ 140 | } 141 | 142 | #pulseaudio { 143 | color: @red; 144 | /* background-color: #f1c40f; */ 145 | /* color: #000000; */ 146 | } 147 | 148 | #pulseaudio.source-muted { 149 | /* background-color: #90b1b1; */ 150 | color: @text; 151 | } 152 | 153 | #custom-media { 154 | /* background-color: #66cc99; */ 155 | /* color: #2a5c45; */ 156 | /* min-width: 100px; */ 157 | } 158 | 159 | #custom-media.custom-spotify { 160 | /* background-color: #66cc99; */ 161 | } 162 | 163 | #custom-media.custom-vlc { 164 | /* background-color: #ffa000; */ 165 | } 166 | 167 | #temperature { 168 | /* background-color: #f0932b; */ 169 | } 170 | 171 | #temperature.critical { 172 | /* background-color: #eb4d4b; */ 173 | } 174 | 175 | #tray { 176 | /* background-color: #2980b9; */ 177 | } 178 | 179 | #idle_inhibitor { 180 | /* background-color: #2d3436; */ 181 | } 182 | 183 | #idle_inhibitor.activated { 184 | /* background-color: #ecf0f1; */ 185 | /* color: #2d3436; */ 186 | } 187 | 188 | #mpd { 189 | /* background-color: #66cc99; */ 190 | /* color: #2a5c45; */ 191 | } 192 | 193 | #mpd.disconnected { 194 | /* background-color: #f53c3c; */ 195 | } 196 | 197 | #mpd.stopped { 198 | /* background-color: #90b1b1; */ 199 | } 200 | 201 | #mpd.paused { 202 | /* background-color: #51a37a; */ 203 | } -------------------------------------------------------------------------------- /os/macos/config.d.fish: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env fish 2 | 3 | # fish_add_path /opt/homebrew/sbin 4 | # fish_add_path /opt/homebrew/bin 5 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Note 2 | 3 | This repository is no longer maintained. I have moved all my configuration to 4 | a Nix flake here: https://git.lyte.dev/lytedev/nix 5 | 6 | I leave this repository up both for my own reference and for others. 7 | 8 | # lytedev's dotfiles 9 | 10 | My various configuration files. I can't recommend using them directly, just 11 | take what you like. 12 | -------------------------------------------------------------------------------- /todo.md: -------------------------------------------------------------------------------- 1 | - Home DNS/Wireguard VPN? 2 | - Layered gitconfig? 3 | - Get out of Google! 4 | - `calcurse` for Calendar management? 5 | - `aerc` or `neomutt` for email? 6 | - My home-grown backup network for Drive? 7 | - Photos? 8 | - **Learn to use `journalctl`** 9 | - Neovim LSP 10 | - Move to NixOS or Guix? Declarative may be the future...? 11 | - Better/more secure remote management configuration? 12 | - Why can't I hold all these SSH keys/configs/target hosts? 13 | - Setup network file share that's easily accessible from Windows and macOS hosts? 14 | - Samba? 15 | - Add vim in the terminal as the handler for many MIME types (xdg-open and such) 16 | for the rare time I'm in a file manager or for opening easily from 17 | the browser. 18 | - This goes for navigating "into" a file in `nnn` 19 | - Investigate systemd services that may help with various tasks (homed, etc.) 20 | 21 | ## Helix 22 | 23 | Here are some things Helix doesn't do well that are common use cases for my 24 | Neovim setup: 25 | 26 | - Session management: https://github.com/helix-editor/helix/issues/401 27 | - "Infinite" undo persistence 28 | - I want to be able to open a file, make changes, save it, close helix, re- 29 | open that same file and still be able to undo all the changes I made - one 30 | might argue that I should just use git better, and you would be right, but this 31 | is something I've come to rely on for the time being 32 | - Usable as PAGER, VISUAL, MANPAGER, GIT_PAGER, etc: https://github.com/helix-editor/helix/issues/1074 33 | - The ability to `:reflow` with indentation taken into account? 34 | --------------------------------------------------------------------------------