mirror of
				https://github.com/materusPL/nixos-config
				synced 2025-10-31 12:40:26 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			190 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			190 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { config, pkgs, lib, materusArg, ... }:
 | |
| let
 | |
| 
 | |
|   relToDotDir = file: (lib.optionalString (config.programs.zsh.dotDir != null) (config.programs.zsh.dotDir + "/")) + file;
 | |
|   pluginsDir =
 | |
|     if config.programs.zsh.dotDir != null then
 | |
|       relToDotDir "plugins" else "${config.home.homeDirectory}/.zsh/plugins";
 | |
| 
 | |
| 
 | |
| 
 | |
|   p10kcfg = "${zshcfg}/p10kcfg";
 | |
|   zshcfg = "${materusArg.cfg.path}" + "/extraFiles/config/zsh";
 | |
|   cfg = config.materus.profile.zsh;
 | |
| 
 | |
|   makeEnv = name: val: ''${name}=''${${name}:-"${val}"}'';
 | |
|   makeIfVar = var: val: ret: ''
 | |
|     if [[ "''$${var}" = "${val}" ]]; then 
 | |
|       ${ret}
 | |
|     fi
 | |
|   '';
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
|   makePlugin = nameArg: fileArg: srcArg: rec {
 | |
|     name = nameArg;
 | |
|     src = srcArg;
 | |
|     path = pluginsDir + "/" + name;
 | |
|     file = fileArg;
 | |
|     fullPath = path + "/" + file;
 | |
|   };
 | |
| 
 | |
|   extraPlugins = {
 | |
|     powerlevel10k = makePlugin "powerlevel10k" "powerlevel10k.zsh-theme" (pkgs.fetchFromGitHub {
 | |
|       owner = "romkatv";
 | |
|       repo = "powerlevel10k";
 | |
|       rev = "v1.20.0";
 | |
|       sha256 = "sha256-ES5vJXHjAKw/VHjWs8Au/3R+/aotSbY7PWnWAMzCR8E=";
 | |
|     });
 | |
|     sudo = makePlugin "sudo" "sudo.plugin.zsh" "${pkgs.oh-my-zsh}/share/oh-my-zsh/plugins/sudo";
 | |
|     extract = makePlugin "extract" "extract.plugin.zsh" "${pkgs.oh-my-zsh}/share/oh-my-zsh/plugins/extract";
 | |
| 
 | |
| 
 | |
|   };
 | |
| in
 | |
| {
 | |
|   options.materus.profile.zsh.enable = materusArg.pkgs.lib.mkBoolOpt config.materus.profile.enableTerminalExtra "Enable materus zsh config";
 | |
|   options.materus.profile.zsh.prompt = lib.mkOption {
 | |
|     type = lib.types.enum [ "p10k" ];
 | |
|     example = "p10k";
 | |
|     default = "p10k";
 | |
|   };
 | |
|   options.materus.profile.zsh.endConfig = lib.mkOption {
 | |
|     default = "";
 | |
|     description = "Zsh config after all of config";
 | |
|     type = lib.types.lines;
 | |
|   };
 | |
| 
 | |
| 
 | |
|   config = lib.mkIf cfg.enable {
 | |
|     home.packages = [
 | |
|       pkgs.ripgrep
 | |
|     ];
 | |
| 
 | |
|     home.file = lib.mkMerge [
 | |
|       (builtins.foldl' (a: b: a // b) { } (builtins.map (plugin: { ${plugin.path}.source = plugin.src; }) (builtins.attrValues extraPlugins)))
 | |
|       { "${relToDotDir ".zshrc"}".text = lib.mkAfter cfg.endConfig; }
 | |
|     ];
 | |
| 
 | |
|     programs.zsh = {
 | |
|       enable = true;
 | |
|       enableAutosuggestions = true;
 | |
|       enableSyntaxHighlighting = true;
 | |
|       enableVteIntegration = true;
 | |
|       historySubstringSearch.enable = true;
 | |
|       historySubstringSearch.searchUpKey = "$key[Up]";
 | |
|       historySubstringSearch.searchDownKey = "$key[Down]";
 | |
| 
 | |
| 
 | |
|       envExtra = ''
 | |
|         ${makeEnv "__MATERUS_HM_ZSH" "1"}
 | |
|         ${makeEnv "__MATERUS_HM_ZSH_PROMPT" cfg.prompt}
 | |
|         ${makeEnv "__MATERUS_HM_ZSH_PRIVATE" "0"}
 | |
|       '';
 | |
|       initExtraFirst = ''
 | |
|         ${makeIfVar "__MATERUS_HM_ZSH_PROMPT" "p10k" ''
 | |
|               if [[ -r "''${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-''${(%):-%n}.zsh" ]]; then
 | |
|                 source "''${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-''${(%):-%n}.zsh"
 | |
|               fi
 | |
|               if [[ -f "${extraPlugins.powerlevel10k.fullPath}" ]]; then
 | |
|                 source "${extraPlugins.powerlevel10k.fullPath}"
 | |
|               fi
 | |
|               ''
 | |
|         }
 | |
|         if zmodload zsh/terminfo && (( "$terminfo[colors]" >= "256" )); then 
 | |
|           __MATERUS_HM_ZSH_256COLORS="''${__MATERUS_HM_ZSH_256COLORS:-1}"; else
 | |
|           __MATERUS_HM_ZSH_256COLORS="''${__MATERUS_HM_ZSH_256COLORS:-0}"; 
 | |
|         fi
 | |
| 
 | |
|         if [[ -f "${extraPlugins.sudo.fullPath}" ]]; then
 | |
|           source "${extraPlugins.sudo.fullPath}"
 | |
|         fi
 | |
|         if [[ -f "${extraPlugins.extract.fullPath}" ]]; then
 | |
|           source "${extraPlugins.extract.fullPath}"
 | |
|           path+="${extraPlugins.extract.path}"
 | |
|           fpath+="${extraPlugins.extract.path}"
 | |
|         fi
 | |
|         '';
 | |
| 
 | |
| 
 | |
| 
 | |
|       plugins = [
 | |
|       ];
 | |
| 
 | |
|       history = {
 | |
|         extended = true;
 | |
|         save = 100000;
 | |
|         size = 100000;
 | |
|         share = true;
 | |
|         ignoreDups = true;
 | |
|         ignoreAllDups = true;
 | |
|         ignoreSpace = true;
 | |
|       };
 | |
| 
 | |
|       completionInit = ''
 | |
|       ZSH_COMPDUMP="''${ZSH_COMPDUMP:-''${XDG_CACHE_HOME:-${config.home.homeDirectory}/.cache}/.zcompdump-''${HOST}-''${ZSH_VERSION}}"
 | |
|       autoload -U compinit && compinit -d $ZSH_COMPDUMP
 | |
|       '';
 | |
|       initExtra = ''
 | |
|         if [[ "$__ETC_ZSHRC_SOURCED" != "1" ]]; then
 | |
|           . ${zshcfg}/zinputrc
 | |
|         fi
 | |
|         source ${zshcfg}/zshcompletion.zsh
 | |
| 
 | |
|         history-substring-search-up-prefixed(){
 | |
|           HISTORY_SUBSTRING_SEARCH_PREFIXED=1 history-substring-search-up
 | |
|         }
 | |
|         history-substring-search-down-prefixed(){
 | |
|           HISTORY_SUBSTRING_SEARCH_PREFIXED=1 history-substring-search-down
 | |
|         }
 | |
| 
 | |
| 
 | |
|         zle -N history-substring-search-up-prefixed
 | |
|         zle -N history-substring-search-down-prefixed
 | |
| 
 | |
| 
 | |
|         bindkey -r "^["
 | |
|         bindkey "^[[1;5C" forward-word
 | |
|         bindkey "^[[1;5D" backward-word
 | |
|         bindkey "^[[1;5A" history-substring-search-up-prefixed
 | |
|         bindkey "^[[1;5B" history-substring-search-down-prefixed
 | |
| 
 | |
|         zsh-private() {
 | |
|           __MATERUS_HM_ZSH_PRIVATE=1 ${lib.getExe config.programs.zsh.package}
 | |
|         }
 | |
| 
 | |
|         myip() {
 | |
|           ${lib.getExe pkgs.wget} -qO- https://wtfismyip.com/text
 | |
|         }
 | |
| 
 | |
|         speedtest() {
 | |
|           ${lib.getExe pkgs.curl} -s https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | ${lib.getExe pkgs.python3} 
 | |
|         }
 | |
| 
 | |
| 
 | |
|       '' +
 | |
|       makeIfVar "__MATERUS_HM_ZSH_PROMPT" "p10k" ''
 | |
|         if [[ "$__MATERUS_HM_ZSH_256COLORS" = "1" ]] ; then
 | |
|           [[ ! -f ${p10kcfg}/fullcolor.zsh ]] || source ${p10kcfg}/fullcolor.zsh
 | |
|         else
 | |
|           [[ ! -f ${p10kcfg}/compatibility.zsh ]] || source ${p10kcfg}/compatibility.zsh
 | |
|         fi
 | |
|       '' + makeIfVar "__MATERUS_HM_ZSH_PRIVATE" "1" ''
 | |
|         unset HISTFILE
 | |
|         ${lib.optionalString config.programs.zsh.history.share "unsetopt SHARE_HISTORY"}
 | |
|         alias -- 'zsh'="__MATERUS_HM_ZSH_PRIVATE=0 zsh "
 | |
|       ''
 | |
| 
 | |
|       ;
 | |
| 
 | |
|     };
 | |
| 
 | |
|     programs.starship.enableZshIntegration = lib.mkDefault false;
 | |
|   };
 | |
| 
 | |
| 
 | |
| }
 |