From 9b8c091120077909c2de66727e0dd46309ee658d Mon Sep 17 00:00:00 2001 From: kat witch Date: Tue, 16 Mar 2021 23:10:13 +0000 Subject: [PATCH] fish -> zsh (with a zed :3!) --- config/profiles/kat/home/default.nix | 2 +- config/profiles/kat/home/shell.nix | 33 ------ config/profiles/kat/home/tmux.nix | 2 +- config/profiles/kat/home/zsh/default.nix | 36 ++++++ config/profiles/kat/home/zsh/zshrc-title | 142 +++++++++++++++++++++++ config/profiles/kat/nixos.nix | 2 +- 6 files changed, 181 insertions(+), 36 deletions(-) delete mode 100644 config/profiles/kat/home/shell.nix create mode 100644 config/profiles/kat/home/zsh/default.nix create mode 100644 config/profiles/kat/home/zsh/zshrc-title diff --git a/config/profiles/kat/home/default.nix b/config/profiles/kat/home/default.nix index 07355fe3..3437347b 100644 --- a/config/profiles/kat/home/default.nix +++ b/config/profiles/kat/home/default.nix @@ -2,7 +2,7 @@ { imports = [ - ./shell.nix + ./zsh ./vim ./git.nix ./tmux.nix diff --git a/config/profiles/kat/home/shell.nix b/config/profiles/kat/home/shell.nix deleted file mode 100644 index 6b858331..00000000 --- a/config/profiles/kat/home/shell.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ config, lib, pkgs, ... }: - -{ - config = lib.mkIf config.deploy.profile.kat { - programs.fish = { - enable = true; - interactiveShellInit = '' - fish_vi_key_bindings - set -g fish_greeting "" - ''; - shellAliases = { nixdirfmt = "fd --color=never .nix | xargs nixfmt"; }; - plugins = [{ - name = "bass"; - src = pkgs.fetchFromGitHub { - owner = "edc"; - repo = "bass"; - rev = "d63054b24c2f63aaa3a08fb9ec9d0da4c70ab922"; - sha256 = "0pwci5xxm8308nrb52s5nyxijk0svar8nqrdfvkk2y34z1cg319b"; - }; - }]; - }; - programs.starship = { - enable = true; - enableFishIntegration = true; - }; - programs.direnv = { - enable = true; - enableFishIntegration = true; - enableNixDirenvIntegration = true; - }; - programs.bat.enable = true; - }; -} diff --git a/config/profiles/kat/home/tmux.nix b/config/profiles/kat/home/tmux.nix index e8cd3a80..50dcd69f 100644 --- a/config/profiles/kat/home/tmux.nix +++ b/config/profiles/kat/home/tmux.nix @@ -2,7 +2,7 @@ { config = lib.mkIf config.deploy.profile.kat { - programs.fish.shellAliases = { + programs.zsh.shellAliases = { tne = "tmux new -s"; tat = "tmux attach -t"; tren = "tmux new -AD -s"; diff --git a/config/profiles/kat/home/zsh/default.nix b/config/profiles/kat/home/zsh/default.nix new file mode 100644 index 00000000..b6cef038 --- /dev/null +++ b/config/profiles/kat/home/zsh/default.nix @@ -0,0 +1,36 @@ +{ config, lib, pkgs, ... }: + +{ + config = lib.mkIf config.deploy.profile.kat { + programs.zsh = { + enable = true; + shellAliases = { nixdirfmt = "fd --color=never .nix | xargs nixfmt"; }; + initExtra = '' + ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=3,bold" + source ${./zshrc-title} + ''; + plugins = [{ + name = "zsh-autosuggestions"; + src = pkgs.fetchFromGitHub { + owner = "zsh-users"; + repo = "zsh-autosuggestions"; + rev = "v0.6.4"; + sha256 = "0h52p2waggzfshvy1wvhj4hf06fmzd44bv6j18k3l9rcx6aixzn6"; + }; + }]; + oh-my-zsh = { + enable = true; + plugins = [ "git" "sudo" "adb" "cargo" "emoji" ]; + }; + }; + programs.starship = { + enable = true; + enableZshIntegration = true; + }; + programs.direnv = { + enable = true; + enableZshIntegration = true; + enableNixDirenvIntegration = true; + }; + }; +} diff --git a/config/profiles/kat/home/zsh/zshrc-title b/config/profiles/kat/home/zsh/zshrc-title new file mode 100644 index 00000000..eeb03e9d --- /dev/null +++ b/config/profiles/kat/home/zsh/zshrc-title @@ -0,0 +1,142 @@ +function term_title { + emulate -L zsh + unsetopt prompt_subst + + [[ -t 1 ]] || return + + local TITLE="$1" + local TAB="${2-$1}" + + case "$TERM" in + cygwin|xterm*|putty*|rxvt*|ansi) + print -Pn "\e]2;$TITLE:q\a" + print -Pn "\e]1;$TAB:q\a" + ;; + screen*) + print -Pn "\ek$TITLE:q\e\\" + ;; + *) + if [[ "$TERM_PROGRAM" == "iTerm.app" ]]; then + print -Pn "\e]2;$TITLE:q\a" + print -Pn "\e]1;$TAB:q\a" + else + if [[ -n "$terminfo[fsl]" ]] && [[ -n "$terminfo[tsl]" ]]; then + echoti tsl + print -Pn "$TITLE" + echoti fsl + fi + fi + ;; + esac +} + +function term_dir { + emulate -L zsh + + [[ -t 1 ]] || return + + local DIR="${1-$PWD}" + + if [[ "${TERM_PROGRAM-}" == "Apple_Terminal" ]]; then + local URL_PATH="$(__omz_urlencode -P "$DIR")" + [[ $? != 0 ]] && return 1 + + printf '\e]7;%s\a' "file://$HOST$URL_PATH" + fi +} + +function __arc_update_precmd { + local TERM_TITLE="%~" + local TERM_TAB="%~" + + if [[ "${TERM_PROGRAM-}" == "Apple_Terminal" ]]; then + TERM_TAB="$USER@%m" + TERM_TITLE="$TERM_TAB" + elif [[ "$USER" != "$DEFAULT_USER" || -n "${SSH_CLIENT-}" ]]; then + TERM_TAB="$USER@%m" + TERM_TITLE="$TERM_TAB - $TERM_TITLE" + fi + + term_title "$TERM_TITLE" "$TERM_TAB" +} + +function __arc_update_preexec { + emulate -L zsh + setopt extended_glob + + local TERM_TAB=${1[(wr)^(*=*|sudo|ssh|mosh|rake|-*)]:gs/%/%%} + local TERM_TITLE="${2:gs/%/%%}" + + if [[ "$USER" != "$DEFAULT_USER" || -n "${SSH_CLIENT-}" ]]; then + TERM_TAB="$USER@%m - $TERM_TAB" + TERM_TITLE="$USER@%m - $TERM_TITLE" + fi + + term_title "$TERM_TITLE" "$TERM_TAB" +} + +zmodload zsh/langinfo + +function __omz_urlencode() { + emulate -L zsh + zparseopts -D -E -a opts r m P + + local in_str=$1 + local url_str="" + local spaces_as_plus + if [[ -z $opts[(r)-P] ]]; then spaces_as_plus=1; fi + local str="$in_str" + + # URLs must use UTF-8 encoding; convert str to UTF-8 if required + local encoding=$langinfo[CODESET] + local safe_encodings + safe_encodings=(UTF-8 utf8 US-ASCII) + if [[ -z ${safe_encodings[(r)$encoding]} ]]; then + str=$(echo -E "$str" | iconv -f $encoding -t UTF-8) + if [[ $? != 0 ]]; then + echo "Error converting string from $encoding to UTF-8" >&2 + return 1 + fi + fi + + # Use LC_CTYPE=C to process text byte-by-byte + local i byte ord LC_ALL=C + export LC_ALL + local reserved=';/?:@&=+$,' + local mark='_.!~*''()-' + local dont_escape="[A-Za-z0-9" + if [[ -z $opts[(r)-r] ]]; then + dont_escape+=$reserved + fi + # $mark must be last because of the "-" + if [[ -z $opts[(r)-m] ]]; then + dont_escape+=$mark + fi + dont_escape+="]" + + # Implemented to use a single printf call and avoid subshells in the loop, + # for performance (primarily on Windows). + local url_str="" + for (( i = 1; i <= ${#str}; ++i )); do + byte="$str[i]" + if [[ "$byte" =~ "$dont_escape" ]]; then + url_str+="$byte" + else + if [[ "$byte" == " " && -n $spaces_as_plus ]]; then + url_str+="+" + else + ord=$(( [##16] #byte )) + url_str+="%$ord" + fi + fi + done + echo -E "$url_str" +} + +if [[ -z "${ARC_PROMPT_RUN-}" ]]; then + chpwd_functions+=(term_dir) + precmd_functions+=(__arc_update_precmd) + preexec_functions+=(__arc_update_preexec) + + term_dir +fi diff --git a/config/profiles/kat/nixos.nix b/config/profiles/kat/nixos.nix index 212c8be0..26391cf5 100644 --- a/config/profiles/kat/nixos.nix +++ b/config/profiles/kat/nixos.nix @@ -8,7 +8,7 @@ openssh.authorizedKeys.keys = [ "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCocjQqiDIvzq+Qu3jkf7FXw5piwtvZ1Mihw9cVjdVcsra3U2c9WYtYrA3rS50N3p00oUqQm9z1KUrvHzdE+03ZCrvaGdrtYVsaeoCuuvw7qxTQRbItTAEsfRcZLQ5c1v/57HNYNEsjVrt8VukMPRXWgl+lmzh37dd9w45cCY1QPi+JXQQ/4i9Vc3aWSe4X6PHOEMSBHxepnxm5VNHm4PObGcVbjBf0OkunMeztd1YYA9sEPyEK3b8IHxDl34e5t6NDLCIDz0N/UgzCxSxoz+YJ0feQuZtud/YLkuQcMxW2dSGvnJ0nYy7SA5DkW1oqcy6CGDndHl5StOlJ1IF9aGh0gGkx5SRrV7HOGvapR60RphKrR5zQbFFka99kvSQgOZqSB3CGDEQGHv8dXKXIFlzX78jjWDOBT67vA/M9BK9FS2iNnBF5x6shJ9SU5IK4ySxq8qvN7Us8emkN3pyO8yqgsSOzzJT1JmWUAx0tZWG/BwKcFBHfceAPQl6pwxx28TM3BTBRYdzPJLTkAy48y6iXW6UYdfAPlShy79IYjQtEThTuIiEzdzgYdros0x3PDniuAP0KOKMgbikr0gRa6zahPjf0qqBnHeLB6nHAfaVzI0aNbhOg2bdOueE1FX0x48sjKqjOpjlIfq4WeZp9REr2YHEsoLFOBfgId5P3BPtpBQ== cardno:000612078454" ]; - shell = pkgs.fish; + shell = pkgs.zsh; extraGroups = [ "wheel" "video" ]; }; };