aboutsummaryrefslogtreecommitdiff
path: root/home/shell/zsh/default.nix
diff options
context:
space:
mode:
authorFranck Cuny <franck@fcuny.net>2022-06-19 15:57:45 -0700
committerFranck Cuny <franck@fcuny.net>2022-06-20 14:39:35 -0700
commitb5c428822468b9a2dfb00a673c39e809f4ac0651 (patch)
tree54e2190f9b20ce11827d0d5b10da2a96c135437a /home/shell/zsh/default.nix
parentfeat(tools/seqstat): add a tool to report stats about a sequence (diff)
downloadinfra-b5c428822468b9a2dfb00a673c39e809f4ac0651.tar.gz
ref(home/shell): make it easier to share common things between shells
I'm considering trying again fish, and there are a number of things that should be common between zsh and fish (aliases, environment variables, ...). Instead of duplicating these settings multiple time, I'm consolidating the shell configurations under `home/shell`, and I can set the shell I want to use with `my.home.shell.name`. The first step is to move the modules for fish and zsh under `home/shell`, add an interface to pick which one I want to use, and modify the `host/home.nix` configuration to keep using zsh with the new interface. Change-Id: Idb66b1a6fcc11a6eeaf5fd2d32dd3698d2d85bdf Reviewed-on: https://cl.fcuny.net/c/world/+/455 Tested-by: CI Reviewed-by: Franck Cuny <franck@fcuny.net>
Diffstat (limited to 'home/shell/zsh/default.nix')
-rw-r--r--home/shell/zsh/default.nix54
1 files changed, 54 insertions, 0 deletions
diff --git a/home/shell/zsh/default.nix b/home/shell/zsh/default.nix
new file mode 100644
index 0000000..14ddd6c
--- /dev/null
+++ b/home/shell/zsh/default.nix
@@ -0,0 +1,54 @@
+{ config, pkgs, lib, ... }:
+let cfg = config.my.home.shell;
+in
+{
+ config = lib.mkIf (cfg.name == "zsh") {
+ 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;
+ # see
+ # https://github.com/nix-community/home-manager/blob/32a7da69dc53c9eb5ad0675eb7fdc58f7fe35272/modules/programs/zsh.nix#L537
+ path = ".local/share/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";
+ };
+
+ defaultKeymap = "emacs";
+
+ # the order matters for sway.zsh: I want to load it first
+ # to start the session if I log on a machine where it's
+ # available.
+ # it can't be loaded with `initExtraFirst` because the session
+ # variables from home-manager are not set yet otherwise (and I
+ # need them for things like firefox or emacs).
+ initExtra = lib.concatMapStrings builtins.readFile [
+ ./sway.zsh
+ ./completion-style.zsh
+ ./gerrit.zsh
+ ./options.zsh
+ ./prompt.zsh
+ ./tmux.zsh
+ ];
+ };
+ };
+}