2023-01-28 03:39:13 +00:00
|
|
|
{ config, lib, pkgs, sane-lib, ... }:
|
2022-11-22 05:28:41 +00:00
|
|
|
|
2023-01-28 03:39:13 +00:00
|
|
|
let
|
|
|
|
# powerlevel10k prompt config
|
|
|
|
# p10k.zsh is the auto-generated config, and i overwrite those defaults here, below.
|
|
|
|
p10k-overrides = ''
|
|
|
|
# powerlevel10k launches a gitstatusd daemon to accelerate git prompt queries.
|
|
|
|
# this keeps open file handles for any git repo i touch for 60 minutes (by default).
|
|
|
|
# that prevents unmounting whatever device the git repo is on -- particularly problematic for ~/private.
|
|
|
|
# i can disable gitstatusd and get slower fallback git queries:
|
|
|
|
# - either universally
|
|
|
|
# - or selectively by path
|
|
|
|
# see: <https://github.com/romkatv/powerlevel10k/issues/246>
|
|
|
|
typeset -g POWERLEVEL9K_VCS_DISABLED_DIR_PATTERN='(/home/colin/private/*|/home/colin/knowledge/*)'
|
|
|
|
# typeset -g POWERLEVEL9K_DISABLE_GITSTATUS=true
|
|
|
|
|
|
|
|
# show user@host also when logged into the current machine.
|
|
|
|
# default behavior is to show it only over ssh.
|
|
|
|
typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_CONTENT_EXPANSION='$P9K_CONTENT'
|
|
|
|
'';
|
|
|
|
|
|
|
|
prezto-init = ''
|
|
|
|
source ${pkgs.zsh-autosuggestions}/share/zsh-autosuggestions/zsh-autosuggestions.zsh
|
|
|
|
source ${pkgs.zsh-syntax-highlighting}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
|
|
|
|
source ${pkgs.zsh-prezto}/share/zsh-prezto/init.zsh
|
|
|
|
'';
|
|
|
|
in
|
2022-11-22 05:28:41 +00:00
|
|
|
lib.mkIf config.sane.home-manager.enable
|
2022-10-21 15:20:30 +00:00
|
|
|
{
|
2023-01-06 11:29:13 +00:00
|
|
|
sane.persist.home.plaintext = [
|
2022-12-28 09:30:29 +00:00
|
|
|
# we don't need to full zsh dir -- just the history file --
|
|
|
|
# but zsh will sometimes backup the history file and we get fewer errors if we do proper mounts instead of symlinks.
|
|
|
|
# TODO: should be private?
|
|
|
|
".local/share/zsh"
|
|
|
|
# cache gitstatus otherwise p10k fetched it from the net EVERY BOOT
|
|
|
|
".cache/gitstatus"
|
|
|
|
];
|
2022-10-22 11:08:37 +00:00
|
|
|
|
2023-01-28 09:29:55 +00:00
|
|
|
|
2023-01-28 03:39:13 +00:00
|
|
|
programs.zsh = {
|
2022-10-21 15:20:30 +00:00
|
|
|
enable = true;
|
2023-01-28 03:39:13 +00:00
|
|
|
histFile = "$HOME/.local/share/zsh/history";
|
|
|
|
shellAliases = {
|
|
|
|
":q" = "exit";
|
|
|
|
# common typos
|
|
|
|
"cd.." = "cd ..";
|
|
|
|
"cd../" = "cd ../";
|
|
|
|
};
|
|
|
|
setOptions = [
|
|
|
|
# defaults:
|
|
|
|
"HIST_IGNORE_DUPS"
|
|
|
|
"SHARE_HISTORY"
|
|
|
|
"HIST_FCNTL_LOCK"
|
|
|
|
# disable `rm *` confirmations
|
|
|
|
"rmstarsilent"
|
|
|
|
];
|
2022-12-22 10:58:02 +00:00
|
|
|
|
2023-01-28 03:39:13 +00:00
|
|
|
# .zshenv config:
|
|
|
|
shellInit = ''
|
|
|
|
ZDOTDIR=$HOME/.config/zsh
|
2022-12-21 14:13:20 +00:00
|
|
|
'';
|
|
|
|
|
2023-01-28 03:39:13 +00:00
|
|
|
# .zshrc config:
|
|
|
|
interactiveShellInit =
|
|
|
|
(builtins.readFile ./p10k.zsh)
|
|
|
|
+ p10k-overrides
|
|
|
|
+ prezto-init
|
|
|
|
+ ''
|
2022-10-21 15:20:30 +00:00
|
|
|
# zmv is a way to do rich moves/renames, with pattern matching/substitution.
|
|
|
|
# see for an example: <https://filipe.kiss.ink/zmv-zsh-rename/>
|
|
|
|
autoload -Uz zmv
|
|
|
|
|
2023-01-28 03:39:13 +00:00
|
|
|
HISTORY_IGNORE='(sane-shutdown *|sane-reboot *|rm *)'
|
2022-10-25 08:42:46 +00:00
|
|
|
|
2023-01-28 03:39:13 +00:00
|
|
|
# extra aliases
|
|
|
|
# TODO: move to `shellAliases` config?
|
2022-10-21 15:20:30 +00:00
|
|
|
function nd() {
|
|
|
|
mkdir -p "$1";
|
|
|
|
pushd "$1";
|
|
|
|
}
|
|
|
|
|
2023-01-28 03:39:13 +00:00
|
|
|
# auto-cd into any of these dirs by typing them and pressing 'enter':
|
|
|
|
hash -d 3rd="/home/colin/dev/3rd"
|
|
|
|
hash -d dev="/home/colin/dev"
|
|
|
|
hash -d knowledge="/home/colin/knowledge"
|
|
|
|
hash -d nixos="/home/colin/nixos"
|
|
|
|
hash -d nixpkgs="/home/colin/dev/3rd/nixpkgs"
|
|
|
|
hash -d ref="/home/colin/ref"
|
|
|
|
hash -d secrets="/home/colin/knowledge/secrets"
|
|
|
|
hash -d tmp="/home/colin/tmp"
|
|
|
|
hash -d uninsane="/home/colin/dev/uninsane"
|
|
|
|
hash -d Videos="/home/colin/Videos"
|
|
|
|
'';
|
2022-12-21 13:53:22 +00:00
|
|
|
|
2023-01-28 03:39:13 +00:00
|
|
|
syntaxHighlighting.enable = true;
|
2023-01-28 09:29:55 +00:00
|
|
|
vteIntegration = true;
|
2022-10-21 15:20:30 +00:00
|
|
|
};
|
|
|
|
|
2023-01-28 03:39:13 +00:00
|
|
|
# prezto = oh-my-zsh fork; controls prompt, auto-completion, etc.
|
|
|
|
# see: https://github.com/sorin-ionescu/prezto
|
|
|
|
# i believe this file is auto-sourced by the prezto init.zsh script.
|
|
|
|
sane.fs."/home/colin/.config/zsh/.zpreztorc" = sane-lib.fs.wantedText ''
|
|
|
|
zstyle ':prezto:*:*' color 'yes'
|
|
|
|
|
|
|
|
# modules (they ship with prezto):
|
|
|
|
# ENVIRONMENT: configures jobs to persist after shell exit; other basic niceties
|
|
|
|
# TERMINAL: auto-titles terminal (e.g. based on cwd)
|
|
|
|
# EDITOR: configures shortcuts like Ctrl+U=undo, Ctrl+L=clear
|
|
|
|
# HISTORY: `history-stat` alias, setopts for good history defaults
|
|
|
|
# DIRECTORY: sets AUTO_CD, adds `d` alias to list directory stack, and `1`-`9` to cd that far back the stack
|
|
|
|
# SPECTRUM: helpers for term colors and styling. used by prompts? might be unnecessary
|
|
|
|
# UTILITY: configures aliases like `ll`, `la`, disables globbing for things like rsync
|
|
|
|
# adds aliases like `get` to fetch a file. also adds `http-serve` alias??
|
|
|
|
# COMPLETION: tab completion. requires `utility` module prior to loading
|
|
|
|
# TODO: enable AUTO_PARAM_SLASH
|
|
|
|
zstyle ':prezto:load' pmodule \
|
|
|
|
'environment' \
|
|
|
|
'terminal' \
|
|
|
|
'editor' \
|
|
|
|
'history' \
|
|
|
|
'directory' \
|
|
|
|
'spectrum' \
|
|
|
|
'utility' \
|
|
|
|
'completion' \
|
|
|
|
'prompt'
|
|
|
|
|
|
|
|
# default keymap. try also `vicmd` (vim normal mode, AKA "cmd mode") or `vi`.
|
|
|
|
zstyle ':prezto:module:editor' key-bindings 'emacs'
|
|
|
|
|
|
|
|
zstyle ':prezto:module:prompt' theme 'powerlevel10k'
|
|
|
|
|
|
|
|
# disable `mv` confirmation (and `rm`, too, unfortunately)
|
|
|
|
zstyle ':prezto:module:utility' safe-ops 'no'
|
|
|
|
'';
|
2022-10-21 15:20:30 +00:00
|
|
|
}
|