{ config, lib, pkgs, ... }: let zshrc = pkgs.writeTextFile { name = ".zshrc"; text = '' # Lines configured by zsh-newuser-install HISTFILE=~/.zhistory HISTSIZE=100000 SAVEHIST=100000 setopt appendhistory notify unsetopt beep bindkey -e # End of lines configured by zsh-newuser-install # The following lines were added by compinstall # # Use menu complete immediately instead of after the first tab setopt MENU_COMPLETE zstyle :compinstall filename "$HOME/.zshrc" autoload -Uz compinit compinit # End of lines added by compinstall # Enable the 2d menu for tab completion zstyle ':completion:*' menu select autoload colors zsh/terminfo if [[ "$terminfo[colors]" -ge 8 ]]; then colors fi for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE; do eval PR_$color='%{$terminfo[bold]$fg[''${(L)color}]%}' eval PR_LIGHT_$color='%{$fg[''${(L)color}]%}' (( count = $count + 1 )) done PR_NO_COLOR="%{$terminfo[sgr0]%}" PS1="[$PR_BLUE%n$PR_WHITE@$PR_GREEN%U%m%u$PR_NO_COLOR:$PR_RED%2c$PR_NO_COLOR]%(!.#.$) " source ${pkgs.zsh-histdb}/share/zsh/plugins/zsh-histdb/sqlite-history.zsh autoload -Uz add-zsh-hook source ${pkgs.zsh-histdb}/share/zsh/plugins/zsh-histdb/histdb-interactive.zsh bindkey '^r' _histdb-isearch ${lib.concatMapStringsSep "\n" (item: "source ${item}") config.me.zsh.includes} ''; }; in { imports = [ ]; options.me = { zsh.enable = lib.mkOption { type = lib.types.bool; default = false; example = true; description = "Whether we want to install zsh."; }; zsh.includes = lib.mkOption { type = lib.types.listOf lib.types.package; default = [ ]; example = lib.literalExpression '' [ (pkgs.writeTextFile { name = "launch-kanshi.conf"; text = "exec kanshi"; }) ]''; description = "List of zshrc files to import."; }; }; config = lib.mkIf config.me.zsh.enable ( lib.mkMerge [ { environment.systemPackages = with pkgs; [ zsh ]; users.users.talexander.shell = pkgs.zsh; environment.shells = with pkgs; [ zsh ]; programs.zsh = { enable = true; }; me.install.user.talexander.file = { ".zshrc" = { source = "${zshrc}"; }; }; environment.persistence."/persist" = lib.mkIf (!config.me.buildingIso) { hideMounts = true; users.talexander = { directories = [ { directory = ".histdb"; user = "talexander"; group = "talexander"; mode = "0700"; } ]; }; }; } ] ); }