From bfd095224790a74aec0cd4b74289ab8d03efffb7 Mon Sep 17 00:00:00 2001 From: Daniel Flanagan Date: Tue, 5 Sep 2023 10:33:20 -0500 Subject: [PATCH] Move big fish scripts to their own files --- daniel.nix | 255 ++------------------------------- fish/interactiveShellInit.fish | 153 ++++++++++++++++++++ fish/shellInit.fish | 85 +++++++++++ readme.md | 8 ++ 4 files changed, 255 insertions(+), 246 deletions(-) create mode 100644 fish/interactiveShellInit.fish create mode 100644 fish/shellInit.fish diff --git a/daniel.nix b/daniel.nix index 212ef73..a80f959 100644 --- a/daniel.nix +++ b/daniel.nix @@ -6,6 +6,9 @@ # }; # }; + # TODO: copy all by binaries/scripts from dotfiles into ~/.local/bin or + # something? + home.username = "daniel"; home.homeDirectory = lib.mkDefault "/home/daniel/.home"; home.stateVersion = "23.05"; @@ -34,6 +37,7 @@ settings = { modal = true; skin = { + # this is a crappy copy of broot's catppuccin mocha theme input = "rgb(205, 214, 244) none"; selected_line = "none rgb(88, 91, 112)"; default = "rgb(205, 214, 244) none"; @@ -138,96 +142,12 @@ programs.fish = { enable = true; - shellInit = '' - # paths - if not set --query NICE_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 - - set --export --universal XDG_CONFIG_HOME $HOME/.config - set --export --universal XDG_CACHE_HOME $HOME/.cache - set --export --universal XDG_DATA_HOME $HOME/.local/share - set --export --universal XDG_STATE_HOME $HOME/.local/state - 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 --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 --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 --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 --export --universal CDPATH $NICE_HOME - - for s in $ENV_PATH/*/config.d.fish - source $s (dirname $s) - end - - # vars - set --export --universal LS_COLORS 'ow=01;36;40' - set --export --universal EXA_COLORS '*=0' - - set --export --universal ERL_AFLAGS "-kernel shell_history enabled -kernel shell_history_file_bytes 1024000" - - set --export --universal BROWSER firefox - - set --export --universal EDITOR hx - set --export --universal VISUAL hx - - # TODO: helix ($EDITOR) as man/pager - set --export --universal PAGER "less" - set --export --universal MANPAGER "less" - - set --export --universal SOPS_AGE_KEY_FILE "$XDG_CONFIG_HOME/sops/age/keys.txt" - - set --export --universal SKIM_ALT_C_COMMAND "fd --hidden --type directory" - set --export --universal SKIM_CTRL_T_COMMAND "fd --hidden" - - # colors - 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 - set -U fish_color_end green # command delimiter/separators (; and &) - set -U fish_color_error red # color of errors - set -U fish_color_escape yellow # color of escape codes (\n, \x2d, etc.) - set -U fish_color_operator blue # expansion operators (~, *) - set -U fish_color_quote yellow - set -U fish_color_redirection blue # redirection operators (|, >, etc.) - set -U fish_color_cancel 333 brblack # sigint at prompt (^C) - set -U fish_color_autosuggestion 666 brblack # as-you-type suggestions - set -U fish_color_match blue # matching parens and the like - set -U fish_color_search_match white\x1e\x2d\x2dbackground\x3d333 # selected pager item - 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! - - 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 - set -U fish_pager_color_progress white\x1e\x2d\x2dbackground\x3d333 # status indicator at the bottom - # set -U fish_pager_color_secondary \x2d\x2dbackground\x3d181818 # alternating rows - - function has_command --wraps=command --description "Exits non-zero if the given command cannot be found" - command --quiet --search $argv[1] - end - ''; - # TODO: rtx? - # TODO: homebrew? - # TODO: asdf? + # I load long scripts from files for a better editing experience + shellInit = builtins.readFile ./fish/shellInit.fish; + interactiveShellInit = builtins.readFile ./fish/interactiveShellInit.fish; + loginShellInit = ""; functions = { + # I think these should be loaded from fish files too for better editor experience d = '' # --wraps=cd --description "Quickly jump to NICE_HOME (or given relative or absolute path) and list files." if count $argv > /dev/null @@ -268,163 +188,6 @@ has_command = "command --quiet --search $argv[1]"; }; - interactiveShellInit = '' - # prompt - function get_hostname - if test (uname) = Linux || test (uname) = Darwin - has_command hostname && hostname | cut -d. -f1 || cat /etc/hostname - else - # assume bsd - hostname | head -n 1 | cut -d. -f1 - end - end - - function fish_greeting - _prompt_prefix - printf "%s\n" (date) - end - - function preprocess_pwd - test (pwd) = / && echo "/" && return 1 - test (pwd) = $NICE_HOME && echo "~" && return 0 - pwd \ - | cut -c2- \ - | gawk '{n=split($0,p,"/");for(i=1;i<=n;i++){if(i==n){printf "/%s",p[i]}else{printf "/%.3s",p[i]}}}' - end - - function _maybe_sudo_prefix - if set -q SUDO_USER - set_color -b yellow black - printf " SUDO " - set_color -b normal normal - printf " " - end - end - - function _maybe_aws_profile - if set -q AWS_PROFILE && test $AWS_PROFILE = prd - printf " " - set_color -b yellow black - printf " AWS_PROFILE=prd " - set_color -b normal normal - end - end - - function _user_and_host - if test $argv[1] -eq 0 - set_color -b normal blue - else - set_color -b normal red - end - printf "%s@%s" $USER (get_hostname) - end - - function _cur_work_dir - set_color -b normal magenta - printf " %s" (preprocess_pwd) - end - - function _last_cmd_duration - set_color -b normal green - set -q CMD_DURATION && printf " %dms" $CMD_DURATION - end - - function _maybe_jobs_summary - if jobs -q - set_color -b normal cyan - printf " &%d" (jobs -p | wc -l) - end - end - - function _user_prompt - printf "\n" - set_color brblack - if test (id -u) -eq 0 - printf '# ' - else - printf '$ ' - end - set_color -b normal normal - end - - function _maybe_git_summary - set_color -b normal yellow - set cur_sha (git rev-parse --short HEAD 2>/dev/null) - if test $status = 0 - set num_changes (git status --porcelain | wc -l | string trim) - if test $num_changes = 0 - set num_changes "✔" - else - set num_changes "+$num_changes" - end - printf " %s %s %s" (git branch --show-current) $cur_sha $num_changes - end - end - - function _prompt_marker - printf "%b133;A%b" "\x1b\x5d" "\x1b\x5c" - end - - function _prompt_continuation_marker - printf "%b133;A;k=s%b" "\x1b\x5d" "\x1b\x5c" - end - - function cmd_marker --on-variable _ - printf "%b133;C%b" "\x1b\x5d" "\x1b\x5c" - end - - function _prompt_prefix - set_color -b normal brblack - printf "# " - end - - function fish_prompt - set last_cmd_status $status - _prompt_marker - _prompt_prefix - _maybe_sudo_prefix - _user_and_host $last_cmd_status - _cur_work_dir - _maybe_git_summary - _maybe_aws_profile - _last_cmd_duration - _maybe_jobs_summary - _user_prompt - end - - function fish_mode_prompt; end - function fish_right_prompt; end - - # key bindings - fish_vi_key_bindings - - set --universal fish_cursor_default block - set --universal fish_cursor_insert line - set --universal fish_cursor_block block - fish_vi_cursor - set --universal fish_vi_force_cursor 1 - - bind --mode insert --sets-mode default jk repaint - bind --mode insert --sets-mode default jK repaint - bind --mode insert --sets-mode default Jk repaint - bind --mode insert --sets-mode default JK repaint - bind --mode insert --sets-mode default jj repaint - bind --mode insert --sets-mode default jJ repaint - bind --mode insert --sets-mode default Jj repaint - bind --mode insert --sets-mode default JJ repaint - - bind -M insert \cg skim-cd-widget - - bind -M insert \cp up-or-search - bind -M insert \cn down-or-search - bind -M insert \ce end-of-line - bind -M insert \ca beginning-of-line - - bind -M insert \cv edit_command_buffer - bind -M default \cv edit_command_buffer - ''; - loginShellInit = '' - ''; shellAbbrs = { }; shellAliases = { l = "br"; diff --git a/fish/interactiveShellInit.fish b/fish/interactiveShellInit.fish new file mode 100644 index 0000000..70291d7 --- /dev/null +++ b/fish/interactiveShellInit.fish @@ -0,0 +1,153 @@ +# prompt +function get_hostname + if test (uname) = Linux || test (uname) = Darwin + has_command hostname && hostname | cut -d. -f1 || cat /etc/hostname + else + # assume bsd + hostname | head -n 1 | cut -d. -f1 + end +end + +function fish_greeting + _prompt_prefix + printf "%s\n" (date) +end + +function preprocess_pwd + test (pwd) = / && echo "/" && return 1 + test (pwd) = $NICE_HOME && echo "~" && return 0 + pwd \ + | cut -c2- \ + | gawk '{n=split($0,p,"/");for(i=1;i<=n;i++){if(i==n){printf "/%s",p[i]}else{printf "/%.3s",p[i]}}}' +end + +function _maybe_sudo_prefix + if set -q SUDO_USER + set_color -b yellow black + printf " SUDO " + set_color -b normal normal + printf " " + end +end + +function _maybe_aws_profile + if set -q AWS_PROFILE && test $AWS_PROFILE = prd + printf " " + set_color -b yellow black + printf " AWS_PROFILE=prd " + set_color -b normal normal + end +end + +function _user_and_host + if test $argv[1] -eq 0 + set_color -b normal blue + else + set_color -b normal red + end + printf "%s@%s" $USER (get_hostname) +end + +function _cur_work_dir + set_color -b normal magenta + printf " %s" (preprocess_pwd) +end + +function _last_cmd_duration + set_color -b normal green + set -q CMD_DURATION && printf " %dms" $CMD_DURATION +end + +function _maybe_jobs_summary + if jobs -q + set_color -b normal cyan + printf " &%d" (jobs -p | wc -l) + end +end + +function _user_prompt + printf "\n" + set_color brblack + if test (id -u) -eq 0 + printf '# ' + else + printf '$ ' + end + set_color -b normal normal +end + +function _maybe_git_summary + set_color -b normal yellow + set cur_sha (git rev-parse --short HEAD 2>/dev/null) + if test $status = 0 + set num_changes (git status --porcelain | wc -l | string trim) + if test $num_changes = 0 + set num_changes "✔" + else + set num_changes "+$num_changes" + end + printf " %s %s %s" (git branch --show-current) $cur_sha $num_changes + end +end + +function _prompt_marker + printf "%b133;A%b" "\x1b\x5d" "\x1b\x5c" +end + +function _prompt_continuation_marker + printf "%b133;A;k=s%b" "\x1b\x5d" "\x1b\x5c" +end + +function cmd_marker --on-variable _ + printf "%b133;C%b" "\x1b\x5d" "\x1b\x5c" +end + +function _prompt_prefix + set_color -b normal brblack + printf "# " +end + +function fish_prompt + set last_cmd_status $status + _prompt_marker + _prompt_prefix + _maybe_sudo_prefix + _user_and_host $last_cmd_status + _cur_work_dir + _maybe_git_summary + _maybe_aws_profile + _last_cmd_duration + _maybe_jobs_summary + _user_prompt +end + +function fish_mode_prompt; end +function fish_right_prompt; end + +# key bindings +fish_vi_key_bindings + +set --universal fish_cursor_default block +set --universal fish_cursor_insert line +set --universal fish_cursor_block block +fish_vi_cursor +set --universal fish_vi_force_cursor 1 + +bind --mode insert --sets-mode default jk repaint +bind --mode insert --sets-mode default jK repaint +bind --mode insert --sets-mode default Jk repaint +bind --mode insert --sets-mode default JK repaint +bind --mode insert --sets-mode default jj repaint +bind --mode insert --sets-mode default jJ repaint +bind --mode insert --sets-mode default Jj repaint +bind --mode insert --sets-mode default JJ repaint + +bind -M insert \cg skim-cd-widget + +bind -M insert \cp up-or-search +bind -M insert \cn down-or-search +bind -M insert \ce end-of-line +bind -M insert \ca beginning-of-line + +bind -M insert \cv edit_command_buffer +bind -M default \cv edit_command_buffer diff --git a/fish/shellInit.fish b/fish/shellInit.fish new file mode 100644 index 0000000..b43fffd --- /dev/null +++ b/fish/shellInit.fish @@ -0,0 +1,85 @@ +# paths +if not set --query NICE_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 + +set --export --universal XDG_CONFIG_HOME $HOME/.config +set --export --universal XDG_CACHE_HOME $HOME/.cache +set --export --universal XDG_DATA_HOME $HOME/.local/share +set --export --universal XDG_STATE_HOME $HOME/.local/state +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 --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 --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 --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 --export --universal CDPATH $NICE_HOME + +for s in $ENV_PATH/*/config.d.fish + source $s (dirname $s) +end + +# vars +set --export --universal LS_COLORS 'ow=01;36;40' +set --export --universal EXA_COLORS '*=0' + +set --export --universal ERL_AFLAGS "-kernel shell_history enabled -kernel shell_history_file_bytes 1024000" + +set --export --universal BROWSER firefox + +set --export --universal EDITOR hx +set --export --universal VISUAL hx + +# TODO: helix ($EDITOR) as man/pager +set --export --universal PAGER "less" +set --export --universal MANPAGER "less" + +set --export --universal SOPS_AGE_KEY_FILE "$XDG_CONFIG_HOME/sops/age/keys.txt" + +set --export --universal SKIM_ALT_C_COMMAND "fd --hidden --type directory" +set --export --universal SKIM_CTRL_T_COMMAND "fd --hidden" + +# colors +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 +set -U fish_color_end green # command delimiter/separators (; and &) +set -U fish_color_error red # color of errors +set -U fish_color_escape yellow # color of escape codes (\n, \x2d, etc.) +set -U fish_color_operator blue # expansion operators (~, *) +set -U fish_color_quote yellow +set -U fish_color_redirection blue # redirection operators (|, >, etc.) +set -U fish_color_cancel 333 brblack # sigint at prompt (^C) +set -U fish_color_autosuggestion 666 brblack # as-you-type suggestions +set -U fish_color_match blue # matching parens and the like +set -U fish_color_search_match white\x1e\x2d\x2dbackground\x3d333 # selected pager item +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! + +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 +set -U fish_pager_color_progress white\x1e\x2d\x2dbackground\x3d333 # status indicator at the bottom +# set -U fish_pager_color_secondary \x2d\x2dbackground\x3d181818 # alternating rows + +function has_command --wraps=command --description "Exits non-zero if the given command cannot be found" + command --quiet --search $argv[1] +end + diff --git a/readme.md b/readme.md index 7b30885..2810685 100644 --- a/readme.md +++ b/readme.md @@ -20,6 +20,14 @@ $ git push beefcake:~/.config/lytedev-dotfiles $ ssh -t beefcake 'cd ~/.config/lytedev-dotfiles/os/linux/nix && sudo nixos-rebuild switch --flake .# && echo DONE' ``` +# Install For Home Manager + + + +```bash +home-manager switch --flake .#daniel +``` + # Install From NixOS Bootable Media Documented below is my process for standing up a new NixOS node configured and