219 lines
6.6 KiB
Nix
219 lines
6.6 KiB
Nix
# My shell configuration
|
|
{
|
|
pkgs,
|
|
lib,
|
|
config,
|
|
...
|
|
}:
|
|
let
|
|
fetch = config.theme.fetch; # neofetch, nerdfetch, pfetch
|
|
in
|
|
{
|
|
home.packages = with pkgs; [
|
|
bat
|
|
ripgrep
|
|
tldr
|
|
sesh
|
|
];
|
|
|
|
# Add go binaries to the PATH
|
|
home.sessionPath = [ "$HOME/go/bin" ];
|
|
|
|
programs.zsh = {
|
|
enable = true;
|
|
|
|
dotDir = "${config.xdg.configHome}/zsh";
|
|
|
|
enableCompletion = true;
|
|
autosuggestion.enable = true;
|
|
syntaxHighlighting = {
|
|
enable = true;
|
|
highlighters = [
|
|
"main"
|
|
"brackets"
|
|
"pattern"
|
|
"regexp"
|
|
"root"
|
|
"line"
|
|
];
|
|
};
|
|
historySubstringSearch.enable = true;
|
|
|
|
history = {
|
|
ignoreDups = true;
|
|
save = 10000;
|
|
size = 10000;
|
|
path = "${config.xdg.dataHome}/zsh_history";
|
|
};
|
|
|
|
profileExtra = lib.optionalString (config.home.sessionPath != [ ]) ''
|
|
export PATH="$PATH''${PATH:+:}${lib.concatStringsSep ":" config.home.sessionPath}"
|
|
'';
|
|
|
|
shellAliases = {
|
|
c = "clear";
|
|
clera = "clear";
|
|
celar = "clear";
|
|
e = "exit";
|
|
cd = "z";
|
|
ls = "eza --icons=always --no-quotes";
|
|
tree = "eza --icons=always --tree --no-quotes";
|
|
sl = "ls";
|
|
open = "${pkgs.xdg-utils}/bin/xdg-open";
|
|
cat = "bat --theme=base16 --color=always --paging=never --tabs=2 --wrap=never --plain";
|
|
mkdir = "mkdir -p";
|
|
|
|
obsidian-no-gpu = "env ELECTRON_OZONE_PLATFORM_HINT=auto obsidian --ozone-platform=x11";
|
|
wireguard-import = "nmcli connection import type wireguard file";
|
|
|
|
notes = "nvim ~/notes/index.md --cmd 'cd ~/notes' -c ':lua Snacks.picker.smart()'";
|
|
note = "notes";
|
|
tmp = "nvim /tmp/$(date | sed 's/ //g;s/\\.//g').md";
|
|
|
|
nix-shell = "nix-shell --command zsh";
|
|
|
|
# git
|
|
g = "lazygit";
|
|
ga = "git add";
|
|
gc = "git commit";
|
|
gcu = "git add . && git commit -m 'Update'";
|
|
gp = "git push";
|
|
gpl = "git pull";
|
|
gs = "git status";
|
|
gd = "git diff";
|
|
gco = "git checkout";
|
|
gcb = "git checkout -b";
|
|
gbr = "git branch";
|
|
grs = "git reset HEAD~1";
|
|
grh = "git reset --hard HEAD~1";
|
|
|
|
gaa = "git add .";
|
|
gcm = "git commit -m";
|
|
};
|
|
|
|
initContent =
|
|
# bash
|
|
''
|
|
bindkey -v
|
|
export KEYTIMEOUT=1
|
|
|
|
${
|
|
if fetch == "neofetch" then
|
|
pkgs.neofetch + "/bin/neofetch"
|
|
else if fetch == "nerdfetch" then
|
|
"nerdfetch"
|
|
else if fetch == "pfetch" then
|
|
"echo; ${pkgs.pfetch}/bin/pfetch"
|
|
else
|
|
""
|
|
}
|
|
|
|
function sesh-sessions() {
|
|
session=$(sesh list -t -c | fzf --height 70% --reverse)
|
|
[[ -z "$session" ]] && return
|
|
sesh connect $session
|
|
}
|
|
|
|
function chatgptfolder(){
|
|
echo "################################"
|
|
echo "### TREE ###"
|
|
echo "################################"
|
|
${pkgs.eza}/bin/eza --tree -aF --icons never
|
|
echo -e "\n\n"
|
|
echo "##############################"
|
|
echo "### CONTENT ###"
|
|
echo "##############################"
|
|
find . -type f -not -path '*/.git/*' -print0 | while IFS= read -r -d "" file; do
|
|
echo -e "\n--- DEBUT: $file ---\n"
|
|
cat "$file"
|
|
echo -e "\n--- FIN: $file ---\n"
|
|
done
|
|
}
|
|
|
|
|
|
function n4c() {
|
|
category=''${1:-all}
|
|
shift
|
|
args=''${*}
|
|
nix develop "github:nix4cyber/n4c#''${category}" ''${args} -c zsh
|
|
}
|
|
|
|
zle -N sesh-sessions
|
|
bindkey -M emacs '\es' sesh-sessions
|
|
bindkey -M vicmd '\es' sesh-sessions
|
|
bindkey -M viins '\es' sesh-sessions
|
|
|
|
# search history based on what's typed in the prompt
|
|
autoload -U history-search-end
|
|
zle -N history-beginning-search-backward-end history-search-end
|
|
zle -N history-beginning-search-forward-end history-search-end
|
|
bindkey "^[OA" history-beginning-search-backward-end
|
|
bindkey "^[OB" history-beginning-search-forward-end
|
|
|
|
# General completion behavior
|
|
zstyle ':completion:*' completer _extensions _complete _approximate
|
|
|
|
# Use cache
|
|
zstyle ':completion:*' use-cache on
|
|
zstyle ':completion:*' cache-path "$XDG_CACHE_HOME/zsh/.zcompcache"
|
|
|
|
# Complete the alias
|
|
zstyle ':completion:*' complete true
|
|
|
|
# Autocomplete options
|
|
zstyle ':completion:*' complete-options true
|
|
|
|
# Completion matching control
|
|
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
|
|
zstyle ':completion:*' keep-prefix true
|
|
|
|
# Group matches and describe
|
|
zstyle ':completion:*' menu select
|
|
zstyle ':completion:*' list-grouped false
|
|
zstyle ':completion:*' list-separator '''
|
|
zstyle ':completion:*' group-name '''
|
|
zstyle ':completion:*' verbose yes
|
|
zstyle ':completion:*:matches' group 'yes'
|
|
zstyle ':completion:*:warnings' format '%F{red}%B-- No match for: %d --%b%f'
|
|
zstyle ':completion:*:messages' format '%d'
|
|
zstyle ':completion:*:corrections' format '%B%d (errors: %e)%b'
|
|
zstyle ':completion:*:descriptions' format '[%d]'
|
|
|
|
# Colors
|
|
zstyle ':completion:*' list-colors ''${(s.:.)LS_COLORS}
|
|
|
|
# case insensitive tab completion
|
|
zstyle ':completion:*:*:cd:*' tag-order local-directories directory-stack path-directories
|
|
zstyle ':completion:*:*:cd:*:directory-stack' menu yes select
|
|
zstyle ':completion:*:-tilde-:*' group-order 'named-directories' 'path-directories' 'users' 'expand'
|
|
zstyle ':completion:*:*:-command-:*:*' group-order aliases builtins functions commands
|
|
zstyle ':completion:*' special-dirs true
|
|
zstyle ':completion:*' squeeze-slashes true
|
|
|
|
# Sort
|
|
zstyle ':completion:*' sort false
|
|
zstyle ":completion:*:git-checkout:*" sort false
|
|
zstyle ':completion:*' file-sort modification
|
|
zstyle ':completion:*:eza' sort false
|
|
zstyle ':completion:complete:*:options' sort false
|
|
zstyle ':completion:files' sort false
|
|
|
|
${lib.optionalString config.services.gpg-agent.enable ''
|
|
gnupg_path=$(ls $XDG_RUNTIME_DIR/gnupg)
|
|
export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/gnupg/$gnupg_path/S.gpg-agent.ssh"
|
|
''}
|
|
|
|
# Allow foot to pipe command output
|
|
function precmd {
|
|
if ! builtin zle; then
|
|
print -n "\e]133;D\e\\"
|
|
fi
|
|
}
|
|
function preexec {
|
|
print -n "\e]133;C\e\\"
|
|
}
|
|
|
|
'';
|
|
};
|
|
}
|