aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--home/default.nix1
-rw-r--r--home/zsh/completion-style.zsh34
-rw-r--r--home/zsh/default.nix42
-rw-r--r--home/zsh/options.zsh23
-rw-r--r--home/zsh/prompt.zsh4
-rw-r--r--hosts/aptos/home.nix2
-rw-r--r--hosts/carmel/home.nix2
-rw-r--r--hosts/tahoe/home.nix2
-rw-r--r--modules/system/users/default.nix2
9 files changed, 108 insertions, 4 deletions
diff --git a/home/default.nix b/home/default.nix
index 3cdce3c..435baed 100644
--- a/home/default.nix
+++ b/home/default.nix
@@ -36,5 +36,6 @@
./wm
./xdg
./yt-dlp
+ ./zsh
];
}
diff --git a/home/zsh/completion-style.zsh b/home/zsh/completion-style.zsh
new file mode 100644
index 0000000..32bd6f4
--- /dev/null
+++ b/home/zsh/completion-style.zsh
@@ -0,0 +1,34 @@
+# Style the completion a bit
+zstyle ':completion:*' 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
+
+# Add colors to processes for kill completion
+zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31'
+
+# 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/zsh/default.nix b/home/zsh/default.nix
new file mode 100644
index 0000000..cc19579
--- /dev/null
+++ b/home/zsh/default.nix
@@ -0,0 +1,42 @@
+{ config, pkgs, lib, ... }:
+let cfg = config.my.home.zsh;
+in {
+ options.my.home.zsh = with lib; {
+ enable = mkEnableOption "zsh configuration";
+ };
+
+ config = lib.mkIf cfg.enable {
+ home.packages = with pkgs; [ zsh-completions ];
+
+ programs.zsh = {
+ enable = true;
+ dotDir = ".config/zsh";
+ enableCompletion = true;
+
+ history = {
+ size = 500000;
+ save = 500000;
+ extended = false;
+ ignoreSpace = true;
+ ignoreDups = true;
+ share = false;
+ 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;
+ };
+
+ defaultKeymap = "emacs";
+ initExtra = lib.concatMapStrings builtins.readFile [
+ ./completion-style.zsh
+ ./options.zsh
+ ./prompt.zsh
+ ];
+
+ };
+ programs.dircolors = { enable = true; };
+ };
+}
diff --git a/home/zsh/options.zsh b/home/zsh/options.zsh
new file mode 100644
index 0000000..84ae8da
--- /dev/null
+++ b/home/zsh/options.zsh
@@ -0,0 +1,23 @@
+# 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
diff --git a/home/zsh/prompt.zsh b/home/zsh/prompt.zsh
new file mode 100644
index 0000000..1f92aa3
--- /dev/null
+++ b/home/zsh/prompt.zsh
@@ -0,0 +1,4 @@
+fg_green=$'%{\e[1;32m%}'
+fg_no_colour=$'%{\e[0m%}'
+
+PROMPT="%K{cyan}%F{black}%m%k%f ${fg_green}%~${fg_no_colour} %% "
diff --git a/hosts/aptos/home.nix b/hosts/aptos/home.nix
index 1bfd236..b3c226f 100644
--- a/hosts/aptos/home.nix
+++ b/hosts/aptos/home.nix
@@ -2,7 +2,7 @@
my.home = {
packages.enable = true;
element.enable = true;
- fish.enable = true;
+ zsh.enable = true;
git.enable = true;
go.enable = true;
python.enable = true;
diff --git a/hosts/carmel/home.nix b/hosts/carmel/home.nix
index eaf3185..231aebd 100644
--- a/hosts/carmel/home.nix
+++ b/hosts/carmel/home.nix
@@ -3,7 +3,7 @@
{
my.home = {
packages.enable = true;
- fish.enable = true;
+ zsh.enable = true;
git.enable = true;
go.enable = true;
python.enable = true;
diff --git a/hosts/tahoe/home.nix b/hosts/tahoe/home.nix
index 7ea3830..2e56275 100644
--- a/hosts/tahoe/home.nix
+++ b/hosts/tahoe/home.nix
@@ -6,7 +6,7 @@
tmux.enable = true;
git.enable = true;
ssh.enable = true;
- fish.enable = true;
+ zsh.enable = true;
beets = {
enable = true;
musicDirectory = "/data/fast/music";
diff --git a/modules/system/users/default.nix b/modules/system/users/default.nix
index fb8e1f1..3086f18 100644
--- a/modules/system/users/default.nix
+++ b/modules/system/users/default.nix
@@ -13,7 +13,7 @@ in {
uid = 1000;
group = "fcuny";
home = "/home/fcuny";
- shell = pkgs.fish;
+ shell = pkgs.zsh;
extraGroups = groupsIfExist [
"docker"
"users"