{ config, pkgs, options, lib, inputs, ... }: let libDir = "${config.dotfiles-directory}/dotfiles/lib"; in with lib; { options = { dotfiles-directory = mkOption { type = types.path; default = ../.; }; }; config = { # Shell configuration programs.zsh = { enable = true; syntaxHighlighting = { enable = true; }; ohMyZsh = { enable = true; plugins = [ "git" "sudo" "pip" ]; }; shellInit = '' fpath+="${libDir}/functions" for file in "${libDir}/functions/"* do autoload "''${file##*/}" done fpath+="${pkgs.python-with-my-packages}/lib/python3.11/site-packages/argcomplete/bash_completion.d" ''; interactiveShellInit = '' eval "$(register-python-argcomplete prb)" eval "$(register-python-argcomplete prod-prb)" eval "$(register-python-argcomplete railbird)" [ -n "$EAT_SHELL_INTEGRATION_DIR" ] && source "$EAT_SHELL_INTEGRATION_DIR/zsh" # Enable bracketed paste autoload -Uz bracketed-paste-magic zle -N bracketed-paste bracketed-paste-magic ''; }; programs.bash = { interactiveShellInit = '' eval "$(register-python-argcomplete prb)" eval "$(register-python-argcomplete prod-prb)" eval "$(register-python-argcomplete railbird)" [ -n "$EAT_SHELL_INTEGRATION_DIR" ] && source "$EAT_SHELL_INTEGRATION_DIR/bash" ''; }; programs.starship = { enable = true; interactiveOnly = true; settings = { add_newline = false; character = { success_symbol = "[➜](bold green)"; error_symbol = "[➜](bold red)"; }; }; }; environment = { homeBinInPath = true; localBinInPath = true; shellAliases = { df_ssh = "TERM='xterm-256color ssh -o StrictHostKeyChecking=no'"; fix_nix = "LD_LIBRARY_PATH='' nix"; }; variables = { ROFI_SYSTEMD_TERM = "alacritty -e"; NIXPKGS_GIT_REV = "${inputs.nixpkgs.rev}"; NIXPKGS_SOURCE = "${inputs.nixpkgs.outPath}"; EDITOR = "emacsclient --alternate-editor emacs"; }; interactiveShellInit = '' vterm_printf(){ if [ -n "$TMUX" ] && ([ "''${TERM%%-*}" = "tmux" ] || [ "''${TERM%%-*}" = "screen" ] ); then # Tell tmux to pass the escape sequences through printf "\ePtmux;\e\e]%s\007\e\\" "$1" elif [ "''${TERM%%-*}" = "screen" ]; then # GNU screen (screen, screen-256color, screen-256color-bce) printf "\eP\e]%s\007\e\\" "$1" else printf "\e]%s\e\\" "$1" fi } if [[ "$INSIDE_EMACS" = 'vterm' ]] \ && [[ -n ''${EMACS_VTERM_PATH} ]] \ && [[ -f ''${EMACS_VTERM_PATH}/etc/emacs-vterm-bash.sh ]]; then source ''${EMACS_VTERM_PATH}/etc/emacs-vterm-bash.sh fi export STARSHIP_INSIDE_EMACS="yes" ''; extraInit = '' export PATH="$HOME/.cargo/bin:${libDir}/bin:${libDir}/functions:$PATH"; ''; }; }; }