{ programs.zoxide = { enable = true; enableZshIntegration = true; }; programs.zsh = { enable = true; sessionVariables = { SOUNDS_ENABLED = "1"; EDITOR = "/nixbin/nvim"; SUDO_EDITOR = "/nixbin/nvim"; VISUAL = "/nixbin/nvim"; LANG = "en_US.UTF-8"; BROWSER = "/nixbin/firefox"; STARSHIP_CONFIG = /home/pagedmov/.config/starship/starship.toml; FZF_DEFAULT_COMMAND = "find $HOME \( -path \"$HOME/.steam\" -o -path \"$HOME/.mozilla\" -o -path \"$HOME/go\" \) -prune -o -type f -print"; GIT_TOKEN = "$(cat supersecret/git-token)"; PROMPT_COMMAND = "if [[ $? != 0 ]]; then s_check && (aplay ~/sound/sys/error.wav 2> /dev/null &); fi"; }; oh-my-zsh = { enable = true; plugins = [ "git" "fzf" ]; }; enableCompletion = true; history = { path = ".zsh_history"; save = 10000; size = 10000; share = true; }; autosuggestion = { enable = true; highlight = "fg=#4C566A,underline"; }; shellAliases = { enterwifi = "nmtui-connect"; grep = "grep --color=auto"; v = "nvim"; mv = "mv -v"; cp = "cp -vr"; rm = "safe_rm"; grub-update = "sudo grub-mkconfig -o /boot/grub/grub.cfg"; mtar = "tar -zcvf"; # mtar ; utar = "tar -zxvf"; # utar ; z = "zip -r"; # z ; uz = "unzip"; # uz -d ; sr = "source ~/.zshrc"; ".." = "cd .."; psg = "ps aux | grep -v grep | grep -i -e VSZ -e" ; mkdir = "mkdir -p"; fm = "ranger"; killjob = "kill -9 \$(jobs -l | awk '{print \$3}')"; rmf = "fzf -m | xargs -ro rm"; nwt = "ping google.com"; wiki = "vimwiki"; uwiki = "wiki_update"; beep = "paplay $BEEP"; pk = "pkill -9 -f"; zrc = "nvim $HOME/sysflakes/glasshouse-desktop/modules/zshell.nix"; vfind = "nvim_find"; theme = "change_kitty_theme"; navhelp = "navhelp | less"; svc = "systemctl --user"; hmswitch = "home-manager switch"; hyprconf = "nvim $HOME/sysflakes/glasshouse-desktop/dotfiles/packages/hyprland/hyprland.conf"; hmconf = "nvim $HOME/sysflakes/glasshouse-desktop/home.nix"; nixconf = "nvim $HOME/sysflakes/glasshouse-desktop/configuration.nix"; viflake = "nvim flake.nix"; nvimcfg = "ranger $HOME/sysflakes/glasshouse-desktop/dotfiles/packages/nixvim/"; }; initExtraFirst = '' export PATH="$HOME/.local/bin:$HOME/.cargo/bin:$PATH" export PATH="$HOME/.nix-profile/bin:$PATH" export UPDATE_ZSH_DAYS=7 unalias ls # Uncomment the following line to enable command auto-correction. ENABLE_CORRECTION="true" if [[ $- != *i* ]]; then return fi typeset -g comppath="$HOME/.cache" typeset -g compfile="$comppath/.zcompdump" if [[ -d "$comppath" ]]; then [[ -w "$compfile" ]] || rm -rf "$compfile" >/dev/null 2>&1 else mkdir -p "$comppath" fi preexec() { cmdcounter="/tmp/cmdcounter_$(whoami)" if [[ ! -f "$cmdcounter" ]]; then echo 0 > "$cmdcounter" fi cmd_count="$(cat "$cmdcounter")" cmd_count=$((cmd_count + 1)) echo "$cmd_count" > "$cmdcounter" } s_check() { [ $SOUNDS_ENABLED -eq 1 ] } snd_restart() { echo -n "Restarting wireplumber service... " systemctl --user restart wireplumber; code1=$? && echo "SUCCESS" || echo "FAILED" [ $code1 -ne 0 ] && exit 1 echo -n "Restarting pipewire service... " systemctl --user restart pipewire; code2=$? && echo "SUCCESS" || echo "FAILED" [ $code2 -ne 0 ] && exit 1 echo "Audio services successfully restarted" } vid_restart() { echo -n "Restarting wireplumber service... " systemctl --user restart wireplumber; code1=$? && echo "SUCCESS" || echo "FAILED" [ $code1 -ne 0 ] && exit 1 echo -n "Restarting pipewire service... " systemctl --user restart pipewire; code2=$? && echo "SUCCESS" || echo "FAILED" [ $code2 -ne 0 ] && exit 1 echo -n "Restarting xdg-desktop-portal service... " systemctl --user restart xdg-desktop-portal; code3=$? && echo "SUCCESS" || echo "FAILED" [ $code3 -ne 0 ] && exit 1 echo -n "Restarting xdg-desktop-portal-hyprland service... " systemctl --user restart xdg-desktop-portal-hyprland; code4=$? && echo "SUCCESS" || echo "FAILED" [ $code4 -ne 0 ] && exit 1 echo "Video services successfully restarted" } wiki_update() { old_pwd=$(pwd) cd ~/vimwiki > /dev/null git pull cd $old_pwd > /dev/null } # Functions ls() { command ls --group-directories-first --color=always -F1 "$@" | sort -f -k1 s_check && (aplay ~/sound/sys/ls.wav > /dev/null 2>&1 &) } # cd and ls after cd() { export SOUNDS_ENABLED=0 ls "$@" builtin cd "$@" export SOUNDS_ENABLED=1 s_check && (aplay ~/sound/sys/cd.wav > /dev/null 2>&1 &) } src() { autoload -U zrecompile rm -rf "$compfile"* compinit -u -d "$compfile" zrecompile -p "$compfile" exec zsh } mcd () { mkdir -p $1 cd $1 } rc(){ g++ "$1" -o run ./run } safe_rm() { played_sound=false for dir in "$@"; do # Check if it's a file or directory if [ -d "$dir" ] || [ -f "$dir" ]; then # Get size of the directory or file size=$(du -s "$dir" 2>/dev/null | awk '{print $1/1024}' | awk '{printf("%d\n", $1 + 0.5)}') # Count files (recursively if it's a directory) files=$(find "$dir" | wc -l) check=false is_file_or_dir=$([ -f "$dir" ] && echo 'file' || echo 'directory') # If there are many files, or the size is big, warn the user if [ "$files" -gt 20 ]; then echo "There's a lot of stuff in '$dir' ($files files) ." check=true fi if [ "$size" -gt 1024 ]; then size_in_gb=$(echo "scale=2; $size / 1024" | bc -l) echo "This $is_file_or_dir ('$dir') is kind of big ($size_in_gb GB)." check=true fi # Ask for confirmation only if necessary if [ "$check" = true ]; then echo "Are you sure you want to remove this $is_file_or_dir '$dir'? (y/n)" read -r confirm [ "$confirm" = "y" ] && (aplay ~/sound/sys/rm.wav > /dev/null 2>&1 &) [ "$confirm" != "y" ] && (aplay ~/sound/sys/cd.wav > /dev/null 2>&1 &) fi # Perform the removal if no checks or confirmation is "y" if [ "$check" = false ] || [ "$confirm" = "y" ]; then /run/current-system/sw/bin/rm -rfv "$dir" [[ "$played_sound" -eq "0" ]] && (aplay ~/sound/sys/rm.wav > /dev/null 2>&1 &) played_sound=1 else echo "Operation cancelled for '$dir'." fi else echo "'$dir' does not exist or is not accessible." fi done } nixswitch() { s_check && (aplay ~/sound/sys/nixswitch-start.wav > /dev/null 2>&1 &) builtin cd "$HOME/sysflakes" nix flake update gen=$(readlink /nix/var/nix/profiles/system | sed 's/.*system-\([0-9]*\)-link/\1/') gen=$((gen + 1)) git diff --quiet if [ $? -eq 1 ]; then git add . git commit -m "Commit for generation $gen" git push fi sudo nixos-rebuild switch --flake "$HOME/sysflakes#glasshouse" if [ $? -eq 0 ]; then s_check && (aplay ~/sound/sys/update.wav > /dev/null 2>&1 &) else s_check && (aplay ~/sound/sys/error.wav > /dev/null 2>&1 &) fi builtin cd $OLDPWD } journal() { # journal for keeping track of stuff I do that isn't declared in my nix config [ ! -f "$HOME/loose_ends" ] && touch "$HOME/loose_ends" echo "$(date) - $1" >> "$HOME/loose_ends" } invoke() { nix run nixpkgs#"$@" } ''; initExtraBeforeCompInit = '' source ~/sysflakes/glasshouse-desktop/home/zsh/zsh-style ''; initExtra = '' if [ ! -e $HOME/.zsh_history ]; then touch $HOME/.zsh_history chmod 600 $HOME/.zsh_history fi HISTFILE=~/.zsh_history # The file where your history will be saved HISTSIZE=10000 # The number of lines kept in memory SAVEHIST=10000 # The number of lines kept in the history file setopt APPEND_HISTORY # Append history to the history file (don't overwrite) setopt INC_APPEND_HISTORY # Append to the history file incrementally setopt SHARE_HISTORY # Share history between all zsh sessions setopt CORRECT setopt NO_NOMATCH setopt LIST_PACKED setopt ALWAYS_TO_END setopt GLOB_COMPLETE setopt COMPLETE_ALIASES setopt COMPLETE_IN_WORD setopt AUTO_CD setopt AUTO_CONTINUE setopt LONG_LIST_JOBS setopt HIST_VERIFY setopt SHARE_HISTORY setopt HIST_IGNORE_SPACE setopt HIST_SAVE_NO_DUPS setopt HIST_IGNORE_ALL_DUPS setopt EXTENDED_GLOB setopt TRANSIENT_RPROMPT setopt INTERACTIVE_COMMENTS autoload -U compinit # completion autoload -U terminfo # terminfo keys zmodload -i zsh/complist # menu completion autoload -U promptinit # prompt autoload -U up-line-or-beginning-search; zle -N up-line-or-beginning-search autoload -U down-line-or-beginning-search; zle -N down-line-or-beginning-search if [ "$TERM" = "linux" ] ; then echo -en "\e]P0232323" fi clear source ~/sysflakes/glasshouse-desktop/home/zsh/zkbd ~/coding/scripts/splash.sh type starship_zle-keymap-select >/dev/null || \ { eval "$(/usr/local/bin/starship init zsh)" } s_check && (aplay ~/sound/sys/sh-source.wav > /dev/null 2>&1 &) ''; # Options }; }