From b5c428822468b9a2dfb00a673c39e809f4ac0651 Mon Sep 17 00:00:00 2001 From: Franck Cuny Date: Sun, 19 Jun 2022 15:57:45 -0700 Subject: 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 --- home/shell/zsh/default.nix | 54 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 home/shell/zsh/default.nix (limited to 'home/shell/zsh/default.nix') 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 + ]; + }; + }; +} -- cgit 1.4.1