From 6b374f6278997e250b924d0b5e520b6034db9341 Mon Sep 17 00:00:00 2001 From: Daniel Flanagan Date: Wed, 3 Nov 2021 12:01:43 -0500 Subject: [PATCH] Cleanup --- common/bash/rc | 9 ++ common/bin/arch-in-docker | 7 + common/bin/dotfiles-clone-and-setup | 8 ++ common/bin/dotfiles-setup | 7 +- common/bin/editscrot | 5 +- common/bin/ltl | 13 -- common/bin/ltld | 13 -- common/bin/scount | 6 - common/fish/aliases.fish | 113 ---------------- common/fish/colors.fish | 11 -- common/fish/config.fish | 43 +------ common/fish/functions.fish | 164 ++++++++++++++++++++++++ common/fish/key-bindings.fish | 35 +---- common/fish/paths.fish | 89 +++++++------ common/fish/prompt.fish | 17 +-- common/fish/vars.fish | 24 ++++ common/htop/rc | 4 +- common/neovim/colors/base16-donokai.vim | 2 +- os/linux/config.d.fish | 5 + os/linux/sway/init | 34 +++-- readme.md | 83 ++++++------ 21 files changed, 354 insertions(+), 338 deletions(-) create mode 100644 common/bash/rc create mode 100755 common/bin/arch-in-docker create mode 100644 common/bin/dotfiles-clone-and-setup delete mode 100755 common/bin/ltl delete mode 100755 common/bin/ltld delete mode 100755 common/bin/scount delete mode 100755 common/fish/aliases.fish mode change 100755 => 100644 common/fish/colors.fish create mode 100644 common/fish/functions.fish mode change 100755 => 100644 common/fish/key-bindings.fish mode change 100755 => 100644 common/fish/paths.fish mode change 100755 => 100644 common/fish/prompt.fish create mode 100644 common/fish/vars.fish create mode 100644 os/linux/config.d.fish diff --git a/common/bash/rc b/common/bash/rc new file mode 100644 index 0000000..8412f44 --- /dev/null +++ b/common/bash/rc @@ -0,0 +1,9 @@ +# return if not running interactively +[[ $- != *i* ]] && return + +command -v fish >/dev/null 2>&1 && grep fish /etc/shells >/dev/null 2>&1 && { + echo "This user is configured to use 'fish' as its primary shell." + echo " You may want to run 'chsh' and set your shell to $(grep fish /etc/shells | head -n1)'." + echo " You may also temporarily use fish by simply running 'fish'." + echo " If you're in bash for intentionally for some reason, then ignore this message." +} diff --git a/common/bin/arch-in-docker b/common/bin/arch-in-docker new file mode 100755 index 0000000..54edeec --- /dev/null +++ b/common/bin/arch-in-docker @@ -0,0 +1,7 @@ +#!/usr/bin/env fish + +if test (count $argv) -lt 2 + docker run -it --rm archlinux bash +else + docker run -it --rm $argv[1..-2] archlinux $argv[-1] +end diff --git a/common/bin/dotfiles-clone-and-setup b/common/bin/dotfiles-clone-and-setup new file mode 100644 index 0000000..5d90580 --- /dev/null +++ b/common/bin/dotfiles-clone-and-setup @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +command -v git >/dev/null 2>&1 || { echo "git not installed"; exit 1; } +command -v fish >/dev/null 2>&1 || { echo "fish not installed"; exit 2; } + +mkdir -p "$HOME/.config" +git clone https://git.lyte.dev/lytedev/dotfiles.git "$HOME/.config/lytedev-dotfiles" +exec "$HOME/.config/lytedev-dotfiles/common/bin/dotfiles-setup" diff --git a/common/bin/dotfiles-setup b/common/bin/dotfiles-setup index 4a29504..b8cd790 100755 --- a/common/bin/dotfiles-setup +++ b/common/bin/dotfiles-setup @@ -7,8 +7,8 @@ set dfp (realpath (dirname (status -f))/../..) set lock_file $HOME/.using-lytedev-dotfiles.lock if not test -f $lock_file - echo This will delete existing files. Make sure you know what you\'re doing. - printf 'Are you sure you want to continue? [y/N] ' + echo "This will delete existing files. Make sure you know what you're doing." + echo 'Are you sure you want to continue? [y/N]' read response set response (string lower $response) if string match $response y @@ -38,6 +38,7 @@ end pushd $dfp l common/tmux/conf $h/.tmux.conf l common/fish $c/fish +l common/bash/rc $h/.bashrc l common/neovim $c/nvim l common/wezterm $c/wezterm l common/colors/vim $c/nvim/colors/base16-donokai.vim @@ -59,6 +60,6 @@ for s in $c/lytedev-env/*/dotfiles-setup.d.fish end # execute the user's shell -set ush (getent passwd $LOGNAME | cut -d: -f7) +set ush (getent passwd (whoami) | cut -d: -f7) echo "Dotfiles Installed! Don't forget to setup environments!" exec $ush diff --git a/common/bin/editscrot b/common/bin/editscrot index b4bfe63..1fe6f6c 100755 --- a/common/bin/editscrot +++ b/common/bin/editscrot @@ -1,2 +1,3 @@ -#!/usr/bin/env bash -krita "$(ltl "$NICE_HOME/img/scrots/")" +#!/usr/bin/env sh +opener="$(command -v xdg-open 2>&1 >/dev/null && echo "xdg-open" || echo "open")" +exec nohup "$opener" "$NICE_HOME/img/scrots/$(ls -t "$NICE_HOME/img/scrots/" | head -n1)" >/dev/null 2>&1 & diff --git a/common/bin/ltl b/common/bin/ltl deleted file mode 100755 index 4f3414f..0000000 --- a/common/bin/ltl +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env fish - -# Echoes the newest file in the specified directory (or current directory if none is given) - -set d $argv[1] . -set -l l "" -for f in $d[1]/* - if test -z $l; set l $f; continue; end - if command test $f -nt $l; and test ! -d $f - set l $f - end -end -echo $l diff --git a/common/bin/ltld b/common/bin/ltld deleted file mode 100755 index 35bd118..0000000 --- a/common/bin/ltld +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env fish - -# Echoes the newest subdirectory in the specified directory (or current directory if none is given) - -set d $argv[1] . -set -l l "" -for f in $d[1]/* - if test -z $l; set l $f; continue; end - if command test $f -nt $l; and test -d $f - set l $f - end -end -echo $l diff --git a/common/bin/scount b/common/bin/scount deleted file mode 100755 index 9454c83..0000000 --- a/common/bin/scount +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env fish - -# Silent count - -count $argv > /dev/null - diff --git a/common/fish/aliases.fish b/common/fish/aliases.fish deleted file mode 100755 index 34336ab..0000000 --- a/common/fish/aliases.fish +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/env fish - -alias ls 'exa --group-directories-first' -alias tree 'ls --tree --level=3' -alias lA 'ls -a' -alias ll 'ls -l' -alias la 'll -a' -alias lt 'll -s modified' -alias lT 'lt -r' -alias lc 'lt -s accessed' -alias lC 'lc -r' - -set -gx CDPATH $CDPATH . $NICE_HOME - -function d -w cd --description "Quickly jump to NICE_HOME (or given relative or absolute path) and list files." - if scount $argv - cd $argv - else - cd $NICE_HOME - end - la -end - -function c -w cd --description "Quickly jump to a subdirectory of NICE_HOME (or just to NICE_HOME if none given)" - if scount $argv - cd $NICE_HOME && d $argv - else - d $NICE_HOME - end -end - -alias cd.. "d .." -alias cdd "d $DOTFILES_PATH" -alias cde "d $XDG_CONFIG_HOME/lytedev-env" -alias cdc "d $XDG_CONFIG_HOME" -alias cdn "d $NOTES_PATH" -alias cdl "d $XDG_DOWNLOAD_DIR" -alias cdg "d $XDG_GAMES_DIR" -alias .. "d .." -alias ... "d ../.." -alias .... "d ../../.." -alias ..... "d ../../../.." -alias ...... "d ../../../../.." -alias ....... "d ../../../../../.." -alias ........ "d ../../../../../../.." -alias ......... "d ../../../../../../../.." - -function r --wraps nnn --description 'Run nnn with support for jump-to-directory-on-exit via ^G' - # TODO: this would break with multiple nnn instances, right? - # probably need to mktemp instead - set NNN_TMPFILE "$XDG_CONFIG_HOME/nnn/.lastd" - nnn -P p $argv - test -e $NNN_TMPFILE && source $NNN_TMPFILE && rm $NNN_TMPFILE -end -alias l r - -alias t "tmux" -alias rcp 'rsync -r -ah --progress' -alias cat bat - -function g -w git - if scount $argv; git $argv - else; git status; end -end - -alias dlf "docker logs --tail=500 -f" -alias dclf "docker-compose logs --tail=500 -f" -alias ctop "docker run --rm -ti -v /var/run/docker.sock:/var/run/docker.sock quay.io/vektorlab/ctop:latest" - -function chat - set -l pass (pass config/weechat-passphrase | head -n 1) - env WEECHAT_PASSPHRASE=$pass weechat -end - -function rgl; rg --color always $argv | less -r; end - -alias k "kubectl" -alias kg "k get" - -alias rg "rg --text" -alias grep "rg" -alias gr "rg" - -alias vim "$EDITOR" -alias vi "$EDITOR" -alias v "$EDITOR" -alias e "$EDITOR" -alias se "sudo -E $EDITOR" -alias sv "sudo -E $EDITOR" -alias svim "se" - -alias vltl "$EDITOR (ltl)" -alias cdltl "cd (ltld)" - -function pp; while not ping -n 1 -t 5 8.8.8.8; sleep 1; end; end -alias p "ping 8.8.8.8" -alias C "clear; set -q TMUX && tmux clear-history || true" -alias sctl "sudo systemctl" -alias sctlu "systemctl --user" -alias bt "sctl start bluetooth && sudo bluetoothctl" -alias btctl "bt" -alias resrc "source $XDG_CONFIG_HOME/fish/config.fish; fish_user_key_bindings" -alias scs "sc $NOTES_PATH/_scratch.sc" -alias disks "lsblk && df -h" -alias dd "dd status=progress" -alias wifi "sudo iwctl" -alias year 'cal (date +%Y)' -alias mount 'sudo -E mount' -alias umount 'sudo -E umount' -alias pa pulsemixer -alias mail neomutt -alias wje work-journal-entry -alias miex 'iex -S mix' diff --git a/common/fish/colors.fish b/common/fish/colors.fish old mode 100755 new mode 100644 index 88164b7..453b05a --- a/common/fish/colors.fish +++ b/common/fish/colors.fish @@ -1,13 +1,3 @@ -#!/usr/bin/env fish - -# TODO: once, I could set backgrounds - -# unused since we handle it ourselves in fish_prompt -set -U fish_color_cwd magenta -set -U fish_color_cwd_root red -set -U fish_color_host normal -set -U fish_color_user blue - set -U fish_color_normal normal # default color set -U fish_color_command white # base command being run (>ls< -la) set -U fish_color_param white # command's parameters @@ -25,7 +15,6 @@ set -U fish_color_selection blue # vi mode visual selection (only fg) set -U fish_color_valid_path yellow # if an argument is a valid path (only -u?) set -U fish_color_comment 666 brblack # comments like this one! -# pager shown when completing set -U fish_pager_color_completion white # main color for pager set -U fish_pager_color_description magenta # color for meta description set -U fish_pager_color_prefix blue # the string being completed diff --git a/common/fish/config.fish b/common/fish/config.fish index afe4a79..38304c8 100755 --- a/common/fish/config.fish +++ b/common/fish/config.fish @@ -1,11 +1,4 @@ -#!/usr/bin/env fish - -set -Ux XDG_CONFIG_HOME $HOME/.config -set -Ux DOTFILES_PATH $XDG_CONFIG_HOME/lytedev-dotfiles -set -Ux ENV_PATH $XDG_CONFIG_HOME/lytedev-env -set -Ux FISH_PATH $XDG_CONFIG_HOME/fish - -source $FISH_PATH/paths.fish +source (dirname (status --current-filename))/paths.fish for s in $ENV_PATH/*/config.d.fish source $s (dirname $s) @@ -13,32 +6,10 @@ end status --is-interactive || exit -for f in key-bindings colors prompt aliases +for f in vars colors prompt functions key-bindings source $FISH_PATH/$f.fish end -has_command nnn && source $DOTFILES_PATH/common/nnn/config.fish - -set -Ux _JAVA_AWT_WM_NONREPARENTING 1 -set -Ux TERMINAL kitty -set -Ux BROWSER firefox-nightly -set -Ux ERL_AFLAGS "-kernel shell_history enabled -kernel shell_history_file_bytes 1024000" # iex history -set -Ux LESS "-r" -set -Ux LS_COLORS 'ow=01;36;40' # more sane ls colors -set -Ux EXA_COLORS '*=0' -set -Ux EDITOR nvim -set -Ux VISUAL nvim -set -Ux PAGER less -set -Ux MANPAGER 'env MANWIDTH="" nvim --cmd "let g:prosession_on_startup=0" +Man!' - -function fish_greeting; - set_color -b black brblack - printf "%s@%s %s\n" $USER (hostname) (date) - printf "%6d processes running\n" (ps -aux | wc -l) - has_command free && printf "%6sGB memory available\n" (free -g | grep '^Mem:' | tr -s ' ' | cut -d ' ' -f7) - test -f /proc/sys/kernel/pty/nr && printf "%6d PTYs open\n" (cat /proc/sys/kernel/pty/nr) -end - if has_command brew && test -f (brew --prefix asdf)/lib/asdf.fish set -Ux ASDF_DIR (brew --prefix asdf) source (brew --prefix asdf)/lib/asdf.fish @@ -48,12 +19,4 @@ else if test -f /opt/asdf-vm/asdf.fish source /opt/asdf-vm/asdf.fish end -# assume the user uses "$HOME" to just store their mess of dotfiles and other -# nonsense that clutters it up and that they have a preferred starting -# directory where they keep the stuff they actually care about -# we only do this if the user is opening a shell at $HOME -if test $PWD = $HOME; or test $PWD = $NICE_HOME; - cd $NICE_HOME || cd -end - -# test -f '/home/daniel/.home/.config/netlify/helper/path.fish.inc' && source '/home/daniel/.home/.config/netlify/helper/path.fish.inc' +test $PWD = $HOME && begin; cd $NICE_HOME || cd; end diff --git a/common/fish/functions.fish b/common/fish/functions.fish new file mode 100644 index 0000000..838532e --- /dev/null +++ b/common/fish/functions.fish @@ -0,0 +1,164 @@ +function has_command --wraps=command --description "Exits non-zero if the given command cannot be found" + command --quiet --search $argv[1] +end + +if has_command exa + alias ls 'exa --group-directories-first' + alias tree 'ls --tree --level=3' + alias lt 'll --sort=modified' + alias lc 'lt --sort=accessed' + alias lT 'lt --reverse' + alias lC 'lc --reverse' +end + +alias lA 'ls --all' +alias ll 'ls -l' +alias la 'll --all' + +function scount --wraps=count --description "Silent count exits with a non-zero status if no arguments given to count" + count $argv > /dev/null +end + +function d --wraps=cd --description "Quickly jump to NICE_HOME (or given relative or absolute path) and list files." + if scount $argv + cd $argv + else + cd $NICE_HOME + end + la +end + +function c --wraps=cd --description "Quickly jump to a subdirectory of NICE_HOME (or just to NICE_HOME if none given)" + if scount $argv + cd $NICE_HOME && d $argv + else + d $NICE_HOME + end +end + +alias cd.. "d .." +alias cdd "d $DOTFILES_PATH" +alias cde "d $XDG_CONFIG_HOME/lytedev-env" +alias cdc "d $XDG_CONFIG_HOME" +alias cdn "d $NOTES_PATH" +alias cdl "d $XDG_DOWNLOAD_DIR" +alias cdg "d $XDG_GAMES_DIR" +alias .. "d .." +alias ... "d ../.." +alias .... "d ../../.." +alias ..... "d ../../../.." +alias ...... "d ../../../../.." +alias ....... "d ../../../../../.." +alias ........ "d ../../../../../../.." +alias ......... "d ../../../../../../../.." + +if has_command nnn + function r --wraps nnn --description 'Run nnn with support for jump-to-directory-on-exit via ^G' + # TODO: this would break with multiple nnn instances, right? + # probably need to mktemp instead + set NNN_TMPFILE "$XDG_CONFIG_HOME/nnn/.lastd" + nnn -P p $argv + test -e $NNN_TMPFILE && source $NNN_TMPFILE && rm $NNN_TMPFILE + end + alias l r +end + +has_command tmux && alias t "tmux" +has_command rsync && alias rcp 'rsync -r -ah --progress' +has_command bat && alias cat bat + +if has_command git + function g -w git + if scount $argv; git $argv + else; git status; end + end +end + +if has_command docker + alias dlf "docker logs --tail=500 -f" + alias ctop "docker run --rm -ti -v /var/run/docker.sock:/var/run/docker.sock quay.io/vektorlab/ctop:latest" +end + +if has_command docker-compose + alias dclf "docker-compose logs --tail=500 -f" +end + +if has_command weechat + function chat + set -l pass (pass config/weechat-passphrase | head -n 1) + env WEECHAT_PASSPHRASE=$pass weechat + end +end + +if has_command rg + function rgl; rg --color always $argv | less -r; end + alias rg "rg --text" + alias grep "rg" + alias gr "rg" +end + +if has_command kubectl + alias k "kubectl" + alias kg "k get" +end + +alias vim $EDITOR +alias vi $EDITOR +alias v $EDITOR +alias e $EDITOR +alias sv "sudo -E $EDITOR" +alias se sv +alias svim sv + +function ltl --wraps=ls --description "Echoes the name of the file most recently modified either in the current directory or in the given path" + set d $argv[1] . + set -l l "" + for f in $d[1]/* + if test -z $l; set l $f; continue; end + if command test $f -nt $l; and test ! -d $f + set l $f + end + end + echo $l +end + +function ltld --wraps=ls --description "Echoes the name of the directory most recently modified either in the current directory or in the given path" + set d $argv[1] . + set -l l "" + for f in $d[1]/* + if test -z $l; set l $f; continue; end + if command test $f -nt $l; and test -d $f + set l $f + end + end + echo $l +end + +alias vltl "$EDITOR (ltl)" +alias cdltl "cd (ltld)" + +alias p "ping 8.8.8.8" +function pp --description "Keeps trying to ping 8.8.8.8 forever" + while not ping -n 1 -t 5 8.8.8.8 + sleep 1 + end +end + +alias C "clear; set -q TMUX && begin; has_command tmux && tmux clear-history; end || true" + +if has_command systemctl + alias sctl "sudo systemctl" + alias sctlu "systemctl --user" + alias bt "sctl start bluetooth && sudo bluetoothctl" + alias btctl "bt" +end + +alias resrc "source $XDG_CONFIG_HOME/fish/config.fish; fish_user_key_bindings" +has_command sc && alias scs "sc $NOTES_PATH/_scratch.sc" + +alias dd "dd status=progress" +alias year 'cal (date +%Y)' +alias mount 'sudo -E mount' +alias umount 'sudo -E umount' + +has_command xdg-open && alias open xdg-open diff --git a/common/fish/key-bindings.fish b/common/fish/key-bindings.fish old mode 100755 new mode 100644 index b9d39ff..50bcdc9 --- a/common/fish/key-bindings.fish +++ b/common/fish/key-bindings.fish @@ -1,11 +1,7 @@ -#!/usr/bin/env fish - function fish_user_key_bindings - # has_command fd && set -Ux FZF_DEFAULT_COMMAND 'fd --type f --hidden --follow --exclude .git' - test -f $HOME/.fzf/shell/key-bindings.fish && source $HOME/.fzf/shell/key-bindings.fish - fzf_key_bindings + type -q fzf_key_bindings && fzf_key_bindings fish_vi_key_bindings insert --no-erase set vi_esc "if commandline -P; commandline -f cancel; else; set fish_bind_mode default; commandline -f backward-char force-repaint; end" @@ -23,36 +19,7 @@ function fish_user_key_bindings bind -M insert \cn down-or-search bind -M insert \ce end-of-line bind -M insert \ca beginning-of-line - bind -M insert \cw forward-word bind -M insert \cv edit_command_buffer bind -M default \cv edit_command_buffer - - bind -M insert \ee false - bind -M insert \ev false - bind -M default \ee false - bind -M default \ev false - - bind -M insert --erase \ct - bind -M default --erase \ct - bind --erase \c\t - bind --erase \cs - bind --erase btab - bind --erase --preset -M visual -k btab - bind --erase --preset -M insert -k btab - bind --erase --preset -M default -k btab - bind --erase --preset -k btab - bind --erase -M visual -k btab - bind --erase -M insert -k btab - bind --erase -M default -k btab - bind --erase -k btab - - bind --erase \cs - bind --erase -M insert \cs - bind --erase -M default \cs - - bind -M insert \cs 'tmux info && tmux attach -t default || tmux new-session -s default' - bind -M default \cs 'tmux info && tmux attach -t default || tmux new-session -s default' - bind -M insert \ct 'tmux info && tmux new-window -t default || tmux new-session -s default' - bind -M default \ct 'tmux info && tmux new-window -t default || tmux new-session -s default' end diff --git a/common/fish/paths.fish b/common/fish/paths.fish old mode 100755 new mode 100644 index df4bcbb..4c7fa5a --- a/common/fish/paths.fish +++ b/common/fish/paths.fish @@ -1,61 +1,70 @@ -#!/usr/bin/env fish +set --export --universal XDG_CONFIG_HOME $HOME/.config +set --export --universal DOTFILES_PATH $XDG_CONFIG_HOME/lytedev-dotfiles +set --export --universal ENV_PATH $XDG_CONFIG_HOME/lytedev-env +set --export --universal FISH_PATH $XDG_CONFIG_HOME/fish -set -Ux GOPATH $HOME/.go +if not set --query NICE_HOME + # default NICE_HOME to HOME + set --export --universal NICE_HOME $HOME + + # if HOME ends with a dir called .home, assume that NICE_HOME is HOME's parent dir + test (basename $HOME) = .home && set --export --universal NICE_HOME (realpath $HOME/..) +end + +# reset paths on shell start +set --erase --global fish_user_paths + +# add NICE_HOME to CDPATH (see `man 1 cd`) +set --erase CDPATH +set --export --global CDPATH . $NICE_HOME + +set --export --universal GOPATH $HOME/.go set paths_candidates \ - $HOME/.go \ - $GOPATH/bin \ $DOTFILES_PATH/common/bin \ $HOME/.bin \ - $HOME/.cargo/bin \ + $HOME/.local/bin \ $HOME/.deno/bin \ - $HOME/.nimble/bin \ $HOME/.yarn/bin \ + $HOME/.nimble/bin \ + $HOME/.cargo/bin \ + $HOME/.go \ + $GOPATH/bin \ $HOME/.netlify/helper/bin -set -ge fish_user_paths +# add candidate paths to PATH if they exist for d in $paths_candidates $ENV_PATH/*/bin - test -d $d && set -gxa fish_user_paths $d + test -d $d && set --append --export --global fish_user_paths $d end -test -d $HOME/.local/bin && set -gxa fish_user_paths $HOME/.local/bin -test -d $HOME/.bin && set -gxa fish_user_paths $HOME/.local/bin +command --search --quiet python && \ + set --append --export --global fish_user_paths (python -m site --user-base)/bin -has_command python && set -gxa fish_user_paths (python -m site --user-base)/bin -has_command ruby && set -gxa fish_user_paths (ruby -e 'print Gem.user_dir')/bin +command --search --quiet ruby && \ + set --append --export --global fish_user_paths (ruby -e 'print Gem.user_dir')/bin -if set -q NICE_HOME -else - set -Ux NICE_HOME $HOME - test (basename $HOME) = .home && set -Ux NICE_HOME (realpath $HOME/..) - test -f $HOME/.nice_home && set -Ux NICE_HOME (cat $HOME/.nice_home) - test -f $ENV_PATH/.nice_home && set -Ux NICE_HOME (cat $ENV_PATH/.nice_home) -end -for p in $NICE_HOME $HOME $ENV_PATH - test -f $p/.nice_home && set -Ux NICE_HOME (cat $p/.nice_home) -end +set --export --universal NOTES_PATH $NICE_HOME/doc/notes +set --export --universal SCROTS_PATH $NICE_HOME/img/scrots +set --export --universal USER_LOGS_PATH $NICE_HOME/doc/logs -set -Ux NOTES_PATH $NICE_HOME/doc/notes -set -Ux SCROTS_PATH $NICE_HOME/img/scrots -set -Ux USER_LOGS_PATH $NICE_HOME/doc/logs +set --export --universal XDG_DESKTOP_DIR $HOME/desktop +set --export --universal XDG_PUBLICSHARE_DIR $HOME/public +set --export --universal XDG_TEMPLATES_DIR $HOME/templates -set -Ux XDG_DESKTOP_DIR $HOME/desktop -set -Ux XDG_PUBLICSHARE_DIR $HOME/public -set -Ux XDG_TEMPLATES_DIR $HOME/templates +set --export --universal XDG_DOCUMENTS_DIR $NICE_HOME/doc +set --export --universal XDG_DOWNLOAD_DIR $NICE_HOME/dl +set --export --universal XDG_MUSIC_DIR $NICE_HOME/music +set --export --universal XDG_PICTURES_DIR $NICE_HOME/img +set --export --universal XDG_VIDEOS_DIR $NICE_HOME/video +set --export --universal XDG_GAMES_DIR $NICE_HOME/games -set -Ux XDG_DOCUMENTS_DIR $NICE_HOME/doc -set -Ux XDG_DOWNLOAD_DIR $NICE_HOME/dl -set -Ux XDG_MUSIC_DIR $NICE_HOME/music -set -Ux XDG_PICTURES_DIR $NICE_HOME/img -set -Ux XDG_VIDEOS_DIR $NICE_HOME/video -set -Ux XDG_GAMES_DIR $NICE_HOME/games - -set -Ux TMUX_PLUGIN_MANAGER_PATH $XDG_CONFIG_HOME/tmux/plugins/ -set -Ux NOTES_PATH $XDG_DOCUMENTS_DIR/notes -set -Ux USER_LOGS_PATH $XDG_DOCUMENTS_DIR/logs -set -Ux SCROTS_PATH $XDG_PICTURES_DIR/scrots +set --export --universal TMUX_PLUGIN_MANAGER_PATH $XDG_CONFIG_HOME/tmux/plugins/ +set --export --universal NOTES_PATH $XDG_DOCUMENTS_DIR/notes +set --export --universal USER_LOGS_PATH $XDG_DOCUMENTS_DIR/logs +set --export --universal SCROTS_PATH $XDG_PICTURES_DIR/scrots if test -n "$NIX_PATH" set NIX_PATH : end -set -Ux NIX_PATH $HOME/.nix-defexpr/channels:$NIX_PATH +test -d $HOME/.nix-defexpr/channels && \ + set --export --universal NIX_PATH $HOME/.nix-defexpr/channels:$NIX_PATH diff --git a/common/fish/prompt.fish b/common/fish/prompt.fish old mode 100755 new mode 100644 index 1c410d9..902841f --- a/common/fish/prompt.fish +++ b/common/fish/prompt.fish @@ -1,17 +1,18 @@ -#!/usr/bin/env fish +set MAX_PATH_PIECE_CHARS 3 -# TODO: if root, background instead? +function get_hostname + has_command hostname && hostname || cat /etc/hostname +end -set MAX_PATH_PIECE_CHARS $BASH_PROMPT_MAX_PATH_PIECE_CHARS 3 +function fish_greeting + set_color -b black brblack + printf "%s@%s %s\n" $USER (get_hostname) (date) +end -# prompt rendering functions function preprocess_pwd test (pwd) = / && echo "/" && return 1 test (pwd) = $NICE_HOME && echo "~" && return 0 - # with ellipsis - # echo "$(<<< "$p" cut -c2- | awk '{split($0,p,"/");for(k in p){if(k==length(p)){printf "/%s",p[k]}else{if(length(p[k])>'" - # $((MAX_PATH_PIECE_CHARS+1))"'){printf "/%.'"$((MAX_PATH_PIECE_CHARS))"'sā€¦",p[k]}else{printf "/%s",p[k]}}}}')" - # without ellipsis + # TODO: fix for macOS echo (pwd) | cut -c2- | \ awk '{split($0,p,"/");for(k in p){if(k==length(p)){printf "/%s",p[k]}else{printf "/%.'$MAX_PATH_PIECE_CHARS[1]'s",p[k]}}}' end diff --git a/common/fish/vars.fish b/common/fish/vars.fish new file mode 100644 index 0000000..b98c79e --- /dev/null +++ b/common/fish/vars.fish @@ -0,0 +1,24 @@ +# sane ls colors +set --export --universal LS_COLORS 'ow=01;36;40' +set --export --universal EXA_COLORS '*=0' + +# iex history +set --export --universal ERL_AFLAGS "-kernel shell_history enabled -kernel shell_history_file_bytes 1024000" + +set --export --universal TERMINAL kitty +set --export --universal BROWSER firefox-nightly + +set --export --universal PAGER less +set --export --universal LESS "-r" + +set --export --universal MANPAGER 'env MANWIDTH="" nvim --cmd "let g:prosession_on_startup=0" +Man!' + +if command --search --quiet nvim + set --export --universal EDITOR nvim + set --export --universal VISUAL nvim +else + set --export --universal EDITOR vi + set --export --universal VISUAL vi +end + +# has_command fd && set -Ux FZF_DEFAULT_COMMAND 'fd --type f --hidden --follow --exclude .git' diff --git a/common/htop/rc b/common/htop/rc index 0914ef8..4790124 100644 --- a/common/htop/rc +++ b/common/htop/rc @@ -1,9 +1,9 @@ # Beware! This file is rewritten by htop when settings are changed in the interface. # The parser is also very primitive, and not human-friendly. -htop_version=3.1.0 +htop_version=3.1.1 config_reader_min_version=2 fields=0 48 17 18 38 39 40 2 46 47 49 1 -sort_key=46 +sort_key=47 sort_direction=-1 tree_sort_key=0 tree_sort_direction=1 diff --git a/common/neovim/colors/base16-donokai.vim b/common/neovim/colors/base16-donokai.vim index 3af3c64..3397d0b 120000 --- a/common/neovim/colors/base16-donokai.vim +++ b/common/neovim/colors/base16-donokai.vim @@ -1 +1 @@ -/home/daniel/.home/.config/lytedev-dotfiles/common/colors/vim \ No newline at end of file +/root/.config/lytedev-dotfiles/common/colors/vim \ No newline at end of file diff --git a/os/linux/config.d.fish b/os/linux/config.d.fish new file mode 100644 index 0000000..8e08863 --- /dev/null +++ b/os/linux/config.d.fish @@ -0,0 +1,5 @@ +alias disks "lsblk && df -h" +has_command nmtui && alias wifi "sudo -E nmtui" +has_command pulsemixer && alias pa pulsemixer +has_command neomutt && alias mail neomutt +has_command iex && alias miex 'iex -S mix' diff --git a/os/linux/sway/init b/os/linux/sway/init index c540974..97f9b27 100755 --- a/os/linux/sway/init +++ b/os/linux/sway/init @@ -1,29 +1,37 @@ #!/usr/bin/env fish -set -q XDG_CONFIG_HOME || begin +set --query XDG_CONFIG_HOME || begin echo XDG_CONFIG_HOME not set exit 1 end -set -q DOTFILES_PATH || begin +set --query DOTFILES_PATH || begin echo DOTFILES_PATH not set exit 1 end -# set -Ux QT_QPA_PLATFORM xcb -# set -Ux QT_QPA_PLATFORM_PLUGIN_PATH /usr/lib/qt/plugins -set -Ux CLUTTER_BACKEND wayland -set -Ux SDL_VIDEODRIVER wayland -set -Ux MOZ_ENABLE_WAYLAND 1 -set -Ux XDG_CURRENT_DESKTOP sway +# set --export --universal QT_QPA_PLATFORM xcb +# set --export --universal QT_QPA_PLATFORM_PLUGIN_PATH /usr/lib/qt/plugins + +set --export --universal CLUTTER_BACKEND wayland +set --export --universal SDL_VIDEODRIVER wayland +set --export --universal MOZ_ENABLE_WAYLAND 1 +set --export --universal XDG_CURRENT_DESKTOP sway +set --export --universal _JAVA_AWT_WM_NONREPARENTING 1 for s in $ENV_PATH/*/sway-init.d.fish source $s (dirname $s) end -set initstr "\n(date): Initializsing Sway WM" -set elogfile ~/.sway.error.log -set logfile ~/.sway.log +set --query SWAY_LOGGING || set SWAY_LOGGING 0 -echo $initstr >> $logfile; echo $initstr >> $elogfile -exec sway >> $logfile 2>> $elogfile +if test $SWAY_LOGGING = 1 + set initstr "\n(date): Starting Sway" + set elogfile ~/.sway.error.log + set logfile ~/.sway.log + + echo $initstr >> $logfile; echo $initstr >> $elogfile + exec sway >> $logfile 2>> $elogfile +else + exec sway +end diff --git a/readme.md b/readme.md index 1be64d2..ded9c94 100644 --- a/readme.md +++ b/readme.md @@ -1,72 +1,77 @@ # lytedev's dotfiles -My various configuration files. Don't use them directly, just take what you -like. +My various configuration files. I can't recommend using them directly, just +take what you like. [šŸ–„ļø Upstream][upstream] ā€¢ [šŸ™ GitHub Mirror][github] ![Battlestation][battlestation-photo] ![Desktop Screenshot][desktop-screenshot] -# Dependencies +# Basic Setup -- `fish` -- `bat` -- `fd` -- `sd` -- `fzf` -- `tmux` -- `rsync` -- `exa` -- `nnn` -- `nvim` + curl -LsSf https://lyte.dev/df.sh | sh -# Setup +## I don't like `curl ... | sh` -``` -set dfp ~/.config/lytedev-dotfiles -git clone https://git.lyte.dev/lytedev/dotfiles.git $dfp && cd $dfp -./common/bin/dotfiles-setup -# symlink host/os-specific directories -ezln ./os/linux $ENV_PATH/linux -# setup again once env has all the layers you want -dotfiles-setup -``` +Clone the repo: -# Basic Usage + git clone https://git.lyte.dev/lytedev/dotfiles.git "$HOME/.config/lytedev-dotfiles" + +Inspect and run the common (no macOS- or Linux-specific configuration) setup +`fish` script: + + $EDITOR "$HOME/.config/lytedev-dotfiles/common/bin/dotfiles-setup" + "$HOME/.config/lytedev-dotfiles/common/bin/dotfiles-setup" + +## Advanced Setup + +You will want to symlink relevant environment layers into the `$ENV_PATH` in +order to have your OS-specific applications be configured and common +applications configured for the host OS. + +There's a handy `fzf`-based script that makes this super easy: + + dotfiles-link-environments # note that you can select multiple with TAB + +You can also list the possible environments: + + cat $DOTFILES_PATH/common/envs + +And then link them yourself (note the replacing of slashes with dashes): + + ln -s (pwd)/os/linux $ENV_PATH/os-linux + ln -s (pwd)/os/linux/arch $ENV_PATH/os-linux-arch + ln -s (pwd)/host/laptop $ENV_PATH/host-laptop + ln -s (pwd)/host/laptop/third $ENV_PATH/os-laptop-third + +And run setup again once you've finished linking all related environments: + + dotfiles-setup # To Do -- Wifi + Home DNS -- Rotate/switch gpg keys and password-store, setup properly on phone - - - Maybe something age/sops-based? - +- Home DNS/Wireguard VPN? - Layered gitconfig? - Get out of Google! - `calcurse` for Calendar management? - `aerc` or `neomutt` for email? - My home-grown backup network for Drive? - Photos? -- Hibernation and proper power management for laptop? - **Learn to use `journalctl`** -- Fix sway workspaces on desktop? - Neovim LSP -- Move to NixOS (WIP) or Guix? Declarative is the future! -- Better/more secure remote management configuration in dotfiles? [1][1] -- Setup network file share? -- Home VPN +- Move to NixOS or Guix? Declarative may be the future...? +- Better/more secure remote management configuration? + - Why can't I hold all these SSH keys/configs/target hosts? +- Setup network file share that's easily accessible from Windows and macOS hosts? + - Samba? - Add vim in the terminal as the handler for many MIME types (xdg-open and such) for the rare time I'm in a file manager or for opening easily from the browser. - This goes for navigating "into" a file in `nnn` -- Unify all the common variables... somehow? (and use templates and `envsubst`?) -- [Vimux](https://github.com/benmills/vimux)? - Investigate systemd services that may help with various tasks (homed, etc.) -- Be more macOS friendly, since work may require that [upstream]: https://git.faceless.lytedev.io/lytedev/dotfiles [github]: https://github.com/lytedev/dotfiles [desktop-screenshot]: https://files.lyte.dev/unix/desktop-screenshot.png [battlestation-photo]: https://files.lyte.dev/unix/battlestation.jpg -[1]: https://smallstep.com/blog/ssh-tricks-and-tips/