diff options
author | Franck Cuny <franck@fcuny.net> | 2023-05-05 19:41:58 -0700 |
---|---|---|
committer | Franck Cuny <franck@fcuny.net> | 2023-05-05 19:41:58 -0700 |
commit | 43da9edb4598eef509c481ae0b305384418c45de (patch) | |
tree | a0ad614c90102757143e026e4fe1806431a3dbf4 /home/profiles/zsh | |
parent | profiles/default: users are immutable (diff) | |
download | world-43da9edb4598eef509c481ae0b305384418c45de.tar.gz |
home/profiles: move (almost) all modules to profiles
This is a major refactor, similar to what was done for the hosts, but in a single commit.
Diffstat (limited to 'home/profiles/zsh')
-rw-r--r-- | home/profiles/zsh/completion-style.zsh | 42 | ||||
-rw-r--r-- | home/profiles/zsh/default.nix | 51 | ||||
-rw-r--r-- | home/profiles/zsh/new-go-project.zsh | 19 | ||||
-rw-r--r-- | home/profiles/zsh/options.zsh | 27 | ||||
-rw-r--r-- | home/profiles/zsh/prompt.zsh | 17 | ||||
-rw-r--r-- | home/profiles/zsh/tmux.zsh | 9 |
6 files changed, 165 insertions, 0 deletions
diff --git a/home/profiles/zsh/completion-style.zsh b/home/profiles/zsh/completion-style.zsh new file mode 100644 index 0000000..79a4e68 --- /dev/null +++ b/home/profiles/zsh/completion-style.zsh @@ -0,0 +1,42 @@ +# 'ctrl-x r' will complete the 12 last modified (mtime) files/directories +zle -C newest-files menu-complete _generic +# Use "*newest-files" so that it matches both "newest-files" and +# "load-completion-and-newest-files". +zstyle ':completion:*newest-files:*' completer _files +zstyle ':completion:*newest-files:*' file-patterns '*(omN[1,12])' +zstyle ':completion:*newest-files:*' menu select yes +zstyle ':completion:*newest-files:*' sort false +zstyle ':completion:*newest-files:*' matcher-list 'b:=*' # important + +# colors for zsh file name completion +zmodload zsh/complist +zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS} + +# Show a prompt on selection +zstyle ':completion:*' select-prompt '%SScrolling active: current selection at %p%s' + +# Use arrow keys in completion list +zstyle ':completion:*' menu select + +# Group results by category +zstyle ':completion:*' group-name '' + +# Keep directories and files separated +zstyle ':completion:*' list-dirs-first true + +# match uppercase from lowercase +zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' + +# Filename suffixes to ignore during completion (except after rm command) +zstyle ':completion:*:*:(^rm):*:*files' ignored-patterns '*?.old' + +# command for process lists, the local web server details and host completion +# on processes completion complete all user processes +zstyle ':completion:*:processes' command 'ps -au$USER' + +# Completion formatting and messages +zstyle ':completion:*' verbose yes +zstyle ':completion:*:descriptions' format '%B%d%b' +zstyle ':completion:*:messages' format '%d' +zstyle ':completion:*:warnings' format 'No matches for: %d' +zstyle ':completion:*:corrections' format '%B%d (errors: %e)%b' diff --git a/home/profiles/zsh/default.nix b/home/profiles/zsh/default.nix new file mode 100644 index 0000000..38450ab --- /dev/null +++ b/home/profiles/zsh/default.nix @@ -0,0 +1,51 @@ +{ config, pkgs, lib, ... }: +{ + home.packages = with pkgs; [ zsh-completions ]; + + programs.zsh = { + enable = true; + dotDir = ".config/zsh"; + + enableCompletion = true; + enableAutosuggestions = true; + + history = { + size = 500000; + save = 500000; + extended = false; + ignoreSpace = true; + ignoreDups = true; + share = false; + # see + # https://github.com/nix-community/home-manager/blob/32a7da69dc53c9eb5ad0675eb7fdc58f7fe35272/modules/programs/zsh.nix#L537 + path = "${config.xdg.dataHome}/zsh/zsh_history"; + }; + + localVariables = { + # Print timing statistics for everything which takes longer than 5 seconds of + # user + system time. + REPORTTIME = 5; + }; + + shellAliases = { + ll = "ls -l --color=auto"; + lt = "ls -ltrh --color=auto"; + la = "ls -ltrha --color=auto"; + pkgsearch = "nix search nixpkgs"; + hms = "home-manager switch --flake ."; + nr = "sudo nixos-rebuild switch --flake ."; + flup = "nix flake update --commit-lock-file"; + dhcp-leasese = "xdg-open http://192.168.6.1:8067/"; + }; + + defaultKeymap = "emacs"; + + initExtra = lib.concatMapStrings builtins.readFile [ + ./completion-style.zsh + ./options.zsh + ./prompt.zsh + ./tmux.zsh + ./new-go-project.zsh + ]; + }; +} diff --git a/home/profiles/zsh/new-go-project.zsh b/home/profiles/zsh/new-go-project.zsh new file mode 100644 index 0000000..0b96a34 --- /dev/null +++ b/home/profiles/zsh/new-go-project.zsh @@ -0,0 +1,19 @@ +new-go-project() { + local project_name=$1 + + echo "> creating ${project_name}" + cd ~/workspace/ + mkdir $project_name + cd $project_name + + echo "> initializing the git repository" + git init . + + echo "> setting the default template for go projects" + nix flake init -t ~/workspace/world/templates#go + direnv allow + + echo "> creating initial commit, touch your yubikey" + git add . + git commit -m 'initial commit' +} diff --git a/home/profiles/zsh/options.zsh b/home/profiles/zsh/options.zsh new file mode 100644 index 0000000..6d39bc1 --- /dev/null +++ b/home/profiles/zsh/options.zsh @@ -0,0 +1,27 @@ +# Show an error when a globbing expansion doesn't find any match +setopt nomatch + +# List on ambiguous completion and Insert first match immediately +setopt autolist menucomplete + +# Use pushd when cd-ing around +setopt autopushd pushdminus pushdsilent + +# Use single quotes in string without the weird escape tricks +setopt rcquotes + +# Single word commands can resume an existing job +setopt autoresume + +# Append commands to history as they are exectuted +setopt inc_append_history_time + +# Remove useless whitespace from commands +setopt hist_reduce_blanks + +# Those options aren't wanted +unsetopt beep extendedglob notify + +# word select works like in bash +autoload -U select-word-style +select-word-style bash diff --git a/home/profiles/zsh/prompt.zsh b/home/profiles/zsh/prompt.zsh new file mode 100644 index 0000000..8a3efa9 --- /dev/null +++ b/home/profiles/zsh/prompt.zsh @@ -0,0 +1,17 @@ +setopt prompt_subst + +autoload -Uz vcs_info + +# display the name of the branch +zstyle ':vcs_info:git*' formats " [%b]" +zstyle ':vcs_info:*' enable git + +precmd () { vcs_info } +PROMPT='%m%f:%F{green}%~%f%F{yellow}$vcs_info_msg_0_ %F{reset}' + +# For tramp (emacs). +if [ "$TERM" = "dumb" ]; then + unset PROMPT + PS1='$ ' + unsetopt zle +fi diff --git a/home/profiles/zsh/tmux.zsh b/home/profiles/zsh/tmux.zsh new file mode 100644 index 0000000..97944f5 --- /dev/null +++ b/home/profiles/zsh/tmux.zsh @@ -0,0 +1,9 @@ +# If we're not in an ssh connection, and tmux is installed, and we're +# not already in a tmux session, attach to the session named +# 'default', and if the session does not exist, start one named +# 'default' +if [ -z "$SSH_CONNECTION" ]; then + if command -v tmux &> /dev/null && [ -z "$TMUX" ]; then + tmux attach -t default || tmux new -s default + fi +fi |