{ 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 ''; }; in { imports = [ ]; options.me = { zsh.enable = lib.mkOption { type = lib.types.bool; default = false; example = true; description = "Whether we want to install zsh."; }; }; 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; }; home-manager.users.talexander = { pkgs, ... }: { home.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"; } ]; }; }; } ] ); }