2024-04-10 17:39:26 +02:00
|
|
|
{ config, lib, pkgs, ... }:
|
|
|
|
with lib; let
|
2024-04-12 22:03:29 +02:00
|
|
|
cfg = config.modules.programs.zsh;
|
|
|
|
username = config.modules.other.system.username;
|
|
|
|
hostname = config.modules.other.system.hostname;
|
|
|
|
gitPath = config.modules.other.system.gitPath;
|
2024-04-10 17:39:26 +02:00
|
|
|
in {
|
2024-04-12 22:03:29 +02:00
|
|
|
options.modules.programs.zsh = {
|
2024-04-10 17:39:26 +02:00
|
|
|
enable = mkEnableOption "zsh";
|
|
|
|
extraAliases = mkOption {
|
|
|
|
type = types.attrs;
|
|
|
|
description = "extra shell aliases";
|
|
|
|
default = {};
|
|
|
|
};
|
|
|
|
profiling = mkOption {
|
|
|
|
type = types.bool;
|
|
|
|
description = "enable zsh profiling";
|
|
|
|
default = false;
|
|
|
|
};
|
2024-04-12 15:22:33 +02:00
|
|
|
ohmyzsh = {
|
|
|
|
enable = mkEnableOption "ohmyzsh";
|
|
|
|
theme = mkOption {
|
|
|
|
type = types.str;
|
|
|
|
description = "oh-my-zsh theme";
|
|
|
|
default = "alanpeabody";
|
|
|
|
};
|
|
|
|
plugins = mkOption {
|
|
|
|
type = types.listOf(types.str);
|
|
|
|
description = "oh-my-zsh plugins (like git)";
|
2024-04-12 15:57:39 +02:00
|
|
|
default = [ "git" ];
|
2024-04-12 15:22:33 +02:00
|
|
|
};
|
|
|
|
};
|
2024-04-10 17:39:26 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
config = mkIf cfg.enable {
|
|
|
|
programs.zsh.enable = true;
|
2024-04-28 22:41:27 +02:00
|
|
|
# users.users.${username}.shell = pkgs.zsh;
|
2024-04-10 17:39:26 +02:00
|
|
|
environment = {
|
|
|
|
shells = [ pkgs.zsh ];
|
|
|
|
pathsToLink = [ "/share/zsh" ];
|
|
|
|
};
|
|
|
|
home-manager.users.${username} = {
|
2024-04-10 21:15:15 +02:00
|
|
|
home.packages = with pkgs; [ nix-output-monitor ];
|
|
|
|
programs.zoxide.enable = true;
|
|
|
|
programs.zoxide.enableZshIntegration = true;
|
2024-04-10 17:39:26 +02:00
|
|
|
programs.zsh = {
|
|
|
|
enable = true;
|
|
|
|
shellAliases = {
|
|
|
|
c = "clear";
|
2024-04-10 21:15:15 +02:00
|
|
|
cc = "cd ~ && clear";
|
2024-04-10 17:39:26 +02:00
|
|
|
mv = "mv -iv";
|
2024-04-21 20:08:57 +02:00
|
|
|
# rm = "trash -v";
|
|
|
|
ls = "eza";
|
2024-04-10 17:39:26 +02:00
|
|
|
l = "eza -a --icons";
|
|
|
|
la = "eza -lha --icons --git";
|
2024-04-21 20:08:57 +02:00
|
|
|
ll = "eza -l";
|
2024-04-11 09:00:29 +02:00
|
|
|
kys = "shutdown now";
|
2024-04-10 21:15:15 +02:00
|
|
|
cd = "z";
|
2024-04-10 21:37:26 +02:00
|
|
|
nv = "nvim";
|
2024-04-10 21:15:15 +02:00
|
|
|
#TODO fix hardcoding of git repo path and profile name
|
2024-04-12 16:12:02 +02:00
|
|
|
update = "sudo -p 'password: ' echo 'Your daughter is just a fork of your wife.' && sudo nixos-rebuild switch --flake \"${gitPath}#${hostname}\" --log-format internal-json |& nom --json";
|
2024-04-14 18:56:41 +02:00
|
|
|
flake = "cd '${gitPath}'";
|
2024-04-10 21:15:15 +02:00
|
|
|
|
2024-04-10 17:39:26 +02:00
|
|
|
} // cfg.extraAliases;
|
|
|
|
initExtraFirst = mkIf cfg.profiling "zmodload zsh/zprof";
|
|
|
|
initExtra = mkIf cfg.profiling "zprof";
|
2024-04-10 19:21:46 +02:00
|
|
|
history = {
|
2024-04-10 17:39:26 +02:00
|
|
|
path = "${config.home-manager.users.${username}.xdg.dataHome}/zsh/zsh_history";
|
|
|
|
size = 99999;
|
|
|
|
save = 99999;
|
|
|
|
extended = true;
|
|
|
|
ignoreSpace = true;
|
|
|
|
};
|
|
|
|
autosuggestion.enable = true;
|
|
|
|
enableCompletion = true;
|
|
|
|
autocd = false;
|
|
|
|
dotDir = ".config/zsh";
|
|
|
|
plugins = [
|
|
|
|
{
|
|
|
|
name = "fast-syntax-highlighting";
|
|
|
|
file = "fast-syntax-highlighting.plugin.zsh";
|
|
|
|
src = pkgs.fetchFromGitHub {
|
|
|
|
owner = "zdharma-continuum";
|
|
|
|
repo = "fast-syntax-highlighting";
|
|
|
|
rev = "cf318e06a9b7c9f2219d78f41b46fa6e06011fd9";
|
|
|
|
sha256 = "sha256-RVX9ZSzjBW3LpFs2W86lKI6vtcvDWP6EPxzeTcRZua4=";
|
|
|
|
};
|
|
|
|
}
|
|
|
|
];
|
2024-04-12 15:24:35 +02:00
|
|
|
oh-my-zsh = mkIf cfg.ohmyzsh.enable {
|
2024-04-13 18:34:33 +02:00
|
|
|
enable = true;
|
|
|
|
theme = cfg.ohmyzsh.theme;
|
2024-04-12 16:20:03 +02:00
|
|
|
plugins = cfg.ohmyzsh.plugins;
|
2024-04-12 14:54:23 +02:00
|
|
|
};
|
2024-04-10 17:39:26 +02:00
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|