106 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{
 | 
						|
  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";
 | 
						|
              }
 | 
						|
            ];
 | 
						|
          };
 | 
						|
        };
 | 
						|
      }
 | 
						|
    ]
 | 
						|
  );
 | 
						|
}
 |