diff --git a/config/bash/bashrc b/config/bash/bashrc new file mode 100644 index 0000000..42deba2 --- /dev/null +++ b/config/bash/bashrc @@ -0,0 +1,39 @@ +for _hm in "/etc/profiles/per-user/$(id -un)" "$HOME/.nix-profile"; do + [ -f "$_hm/etc/profile.d/hm-session-vars.sh" ] && . "$_hm/etc/profile.d/hm-session-vars.sh" && break +done +unset _hm + +shopt -s autocd histappend + +HISTFILE="${XDG_STATE_HOME:-$HOME/.local/state}/bash_history" +HISTSIZE=2000 +HISTFILESIZE=2000 +HISTCONTROL=ignoreboth:erasedups + +alias ls='eza' +alias l='ls --color=auto --group-directories-first' +alias ll='l -alF' +alias la='ll -R' +alias g='git' +alias nv='nvim' + +export GPG_TTY=$(tty) +export THEME="${THEME:-midnight}" +export FZF_COMPLETION_TRIGGER=';' +export FZF_TMUX=1 + +eval "$(fzf --bash)" +eval "$(zoxide init bash)" +eval "$(direnv hook bash)" +eval "$(starship init bash)" + +fzf-config-widget() { + local file + file="$(FZF_CTRL_T_COMMAND="fd --type file --hidden . \"$XDG_CONFIG_HOME\"/nix | sed \"s|$HOME|~|g\"" fzf --reverse)" || return + file="${file/#\~/$HOME}" + READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}${file}${READLINE_LINE:$READLINE_POINT}" + READLINE_POINT=$(( READLINE_POINT + ${#file} )) +} +bind -x '"\C-e": fzf-config-widget' + +[ -r "$OPAMROOT/opam-init/init.sh" ] && . "$OPAMROOT/opam-init/init.sh" > /dev/null 2> /dev/null diff --git a/config/bash/inputrc b/config/bash/inputrc new file mode 100644 index 0000000..0a75ab8 --- /dev/null +++ b/config/bash/inputrc @@ -0,0 +1,24 @@ +set editing-mode vi +set show-mode-in-prompt on +set vi-cmd-mode-string "\1\e[2 q\2" +set vi-ins-mode-string "\1\e[6 q\2" + +set completion-ignore-case on +set colored-stats on +set show-all-if-ambiguous on + +$if mode=vi + set keymap vi-command + "\C-p": previous-history + "\C-n": next-history + "\C-j": backward-char + "\C-k": forward-char + "\e[3~": delete-char + + set keymap vi-insert + "\C-p": previous-history + "\C-n": next-history + "\C-j": backward-char + "\C-k": forward-char + "\e[3~": delete-char +$endif diff --git a/config/nvim/lua/plugins/guard.lua b/config/nvim/lua/plugins/guard.lua index efa5148..df1018b 100644 --- a/config/nvim/lua/plugins/guard.lua +++ b/config/nvim/lua/plugins/guard.lua @@ -37,6 +37,7 @@ return { args = { '-i', '2' }, stdin = true, }) + ft('sh,bash'):lint('shellcheck') ft('zsh'):lint('zsh') ft('proto'):fmt('buf'):lint('buf') diff --git a/config/zsh/zshrc b/config/zsh/zshrc deleted file mode 100644 index c06c9a8..0000000 --- a/config/zsh/zshrc +++ /dev/null @@ -1,57 +0,0 @@ -autoload -U compinit && compinit -d "$XDG_STATE_HOME/zcompdump" -u -zmodload zsh/complist -zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} -zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-za-z}' - -export GPG_TTY=$(tty) -export THEME="${THEME:-midnight}" - -setopt auto_cd -unsetopt beep notify -unset completealiases - -bindkey -v -bindkey '^[[3~' delete-char -bindkey '^P' up-line-or-history -bindkey '^N' down-line-or-history -bindkey '^J' backward-char -bindkey '^K' forward-char - -export PURE_PROMPT_SYMBOL=">" -export PURE_PROMPT_VICMD_SYMBOL="<" -export PURE_GIT_UP_ARROW="^" -export PURE_GIT_DOWN_ARROW="v" -export PURE_GIT_STASH_SYMBOL="=" -export PURE_CMD_MAX_EXEC_TIME=5 -export PURE_GIT_PULL=0 -export PURE_GIT_UNTRACKED_DIRTY=1 -zstyle ':prompt:pure:git:stash' show yes - -autoload -Uz promptinit && promptinit -prompt pure - -autoload -Uz add-zle-hook-widget -function _cursor_shape() { - case $KEYMAP in - vicmd) echo -ne '\e[2 q' ;; - viins|main) echo -ne '\e[6 q' ;; - esac -} -function _cursor_init() { echo -ne '\e[6 q'; } -add-zle-hook-widget zle-keymap-select _cursor_shape -add-zle-hook-widget zle-line-init _cursor_init - -export FZF_COMPLETION_TRIGGER=\; -export FZF_TMUX=1 - -fzf-config-widget() { - local file="$(FZF_CTRL_T_COMMAND="fd --type file --hidden . \"$XDG_CONFIG_HOME\"/nix | sed \"s|$HOME|~|g\"" __fzf_select)" - [ -n "$file" ] || { zle reset-prompt; return; } - file="${file/#\\~/~}" - LBUFFER+="$file" - zle reset-prompt -} -zle -N fzf-config-widget -bindkey '^E' fzf-config-widget - -[[ ! -r "$OPAMROOT/opam-init/init.zsh" ]] || source "$OPAMROOT/opam-init/init.zsh" > /dev/null 2> /dev/null diff --git a/home/modules/editor.nix b/home/modules/editor.nix index 19623c2..6a3cd74 100644 --- a/home/modules/editor.nix +++ b/home/modules/editor.nix @@ -38,6 +38,7 @@ in hadolint mypy selene + shellcheck # runtime/tools nodejs diff --git a/home/modules/shell.nix b/home/modules/shell.nix index 2369830..c701a0c 100644 --- a/home/modules/shell.nix +++ b/home/modules/shell.nix @@ -28,7 +28,6 @@ in with pkgs; [ awscli2 - pure-prompt tree jq curl @@ -193,58 +192,62 @@ in } ''; - programs.zsh = { + programs.bash = lib.mkIf (!hostConfig.isNixOS) { enable = true; - dotDir = "${config.xdg.configHome}/zsh"; - completionInit = ""; - - profileExtra = lib.mkIf hostConfig.isLinux '' - [ "$(tty)" = "/dev/tty1" ] && [ -z "$WAYLAND_DISPLAY" ] && start-hyprland - ''; - - history = { - path = "${config.xdg.stateHome}/zsh_history"; - size = 2000; - save = 2000; - ignoreDups = true; - ignoreAllDups = true; - ignoreSpace = true; - extended = true; - append = true; - }; - - shellAliases = { - ls = "eza"; - l = "ls --color=auto --group-directories-first"; - ll = "l -alF"; - la = "ll -R"; - g = "git"; - nv = "nvim"; - }; - - syntaxHighlighting.enable = true; - - autosuggestion = { - enable = true; - strategy = [ - "history" - "completion" - ]; - }; - - initContent = '' - fpath+=("${pkgs.pure-prompt}/share/zsh/site-functions") - source "$XDG_CONFIG_HOME/nix/config/zsh/zshrc" + initExtra = '' + source "${pkgs.blesh}/share/blesh/ble.sh" --noattach + export INPUTRC="$HOME/.config/nix/config/bash/inputrc" + export THEME="''${THEME:-midnight}" + [ -f "$HOME/.config/nix/config/bash/bashrc" ] && . "$HOME/.config/nix/config/bash/bashrc" + [[ ''${BLE_VERSION-} ]] && ble-attach ''; }; - home.activation.removeZshenvBridge = lib.hm.dag.entryAfter [ "writeBoundary" ] '' - [ -L "$HOME/.zshenv" ] && rm "$HOME/.zshenv" || true + programs.starship = { + enable = true; + enableBashIntegration = false; + settings = { + format = lib.concatStrings [ + "$directory" + "$git_branch" + "$git_status" + "$cmd_duration" + "$line_break" + "$character" + ]; + add_newline = true; + character = { + success_symbol = "[>](bold)"; + error_symbol = "[>](bold red)"; + vimcmd_symbol = "[<](bold)"; + }; + directory = { + truncation_length = 0; + truncate_to_repo = false; + }; + git_branch.format = "[$branch]($style) "; + git_status = { + format = "([$all_status$ahead_behind]($style) )"; + ahead = "^"; + behind = "v"; + stashed = "="; + }; + cmd_duration = { + min_time = 5000; + format = "[$duration]($style) "; + }; + }; + }; + + home.activation.removeZshFiles = lib.hm.dag.entryAfter [ "writeBoundary" ] '' + for f in "$HOME/.zshenv" "$HOME/.zshenv.bak"; do + [ -e "$f" ] && rm "$f" || true + done ''; programs.fzf = { enable = true; - enableZshIntegration = true; + enableBashIntegration = false; defaultCommand = "rg --files --hidden"; defaultOptions = [ "--bind=ctrl-a:select-all" @@ -260,18 +263,18 @@ in programs.eza = { enable = true; - enableZshIntegration = false; + enableBashIntegration = false; git = true; }; programs.zoxide = { enable = true; - enableZshIntegration = true; + enableBashIntegration = false; }; programs.direnv = { enable = true; - enableZshIntegration = true; + enableBashIntegration = false; nix-direnv.enable = true; config.global = { hide_env_diff = true; diff --git a/hosts/xps15/configuration.nix b/hosts/xps15/configuration.nix index 7c04bc0..1a7c702 100644 --- a/hosts/xps15/configuration.nix +++ b/hosts/xps15/configuration.nix @@ -82,15 +82,23 @@ in "storage" "power" ]; - shell = pkgs.zsh; + shell = pkgs.bash; }; - programs.zsh = { + programs.bash = { enable = true; shellInit = '' - export ZDOTDIR="$HOME/.config/zsh" + export INPUTRC="$HOME/.config/nix/config/bash/inputrc" export THEME="midnight" ''; + interactiveShellInit = '' + source "${pkgs.blesh}/share/blesh/ble.sh" --noattach + [ -f "$HOME/.config/nix/config/bash/bashrc" ] && . "$HOME/.config/nix/config/bash/bashrc" + [[ ''${BLE_VERSION-} ]] && ble-attach + ''; + loginShellInit = '' + [ "$(tty)" = "/dev/tty1" ] && [ -z "$WAYLAND_DISPLAY" ] && start-hyprland + ''; }; programs.hyprland = { enable = true;