feat(reo101-shell): add more options

This commit is contained in:
reo101 2023-02-17 02:47:22 +02:00
parent 0532f7e843
commit b51df48e6e
Signed by: reo101
GPG key ID: 675AA7EF13964ACB
2 changed files with 309 additions and 248 deletions

View file

@ -1,7 +1,7 @@
{ inputs, outputs, lib, pkgs, config, ... }: { inputs, outputs, lib, pkgs, config, ... }:
{ {
imports = builtins.attrValues outputs.homeManagerModules ++ [ imports = [
inputs.wired.homeManagerModules.default inputs.wired.homeManagerModules.default
]; ];
@ -47,9 +47,9 @@
vifm vifm
## Shell ## Shell
zsh # zsh
starship # starship
zoxide # zoxide
ripgrep ripgrep
## Dhall ## Dhall
@ -89,6 +89,8 @@
reo101.shell = { reo101.shell = {
enable = true; enable = true;
direnv = true;
zoxide = true;
}; };
systemd.user.services."swww" = { systemd.user.services."swww" = {

View file

@ -5,258 +5,317 @@ let
cfg = config.reo101.shell; cfg = config.reo101.shell;
in in
{ {
imports = [ imports =
]; [
options = {
reo101.shell = {
enable = mkEnableOption "reo101 zsh config";
# ...
};
};
config = mkIf cfg.enable {
home.packages = with pkgs; [
zsh
starship
zoxide
direnv
]; ];
programs.zsh = { options =
enable = true; {
enableCompletion = true; reo101.shell = {
# defaultKeymap = "viins"; enable = mkEnableOption "reo101 zsh setup";
username = mkOption {
shellAliases = { description = "Username to be used in prompt";
# ll = "ls -l"; type = types.str;
# update = "sudo nixos-rebuild switch"; default = "${config.home.username}";
}; };
direnv = mkOption {
history = { description = "Integrate with direnv";
size = 10000; type = types.bool;
path = "${config.xdg.dataHome}/zsh/history"; default = true;
}; };
zoxide = mkOption {
initExtra = '' description = "Integrate with zoxide";
eval "$(zoxide init zsh)" type = types.bool;
eval "$(direnv hook zsh)" default = true;
''; };
extraConfig = mkOption {
plugins = [ type = types.str;
{ description = "Extra zsh config";
name = "zsh-nix-shell"; default = ''
file = "nix-shell.plugin.zsh";
src = pkgs.fetchFromGitHub {
owner = "chisui";
repo = "zsh-nix-shell";
rev = "v0.5.0";
sha256 = "0za4aiwwrlawnia4f29msk822rj9bgcygw6a8a6iikiwzjjz0g91";
};
}
{
name = "fast-syntax-highlighting";
file = "F-Sy-H.plugin.zsh";
src = pkgs.fetchFromGitHub {
owner = "zdharma";
repo = "fast-syntax-highlighting";
rev = "285d6ce8e1d9c7a70b427c46a4030d43e7a6406b";
sha256 = "4kma7Sx2RGWa9J4gr+U89ArxpM2/b8H9ytQ2pNCv6is=";
};
}
];
};
programs.starship = {
enable = true;
settings = {
# Get editor completions based on the config schema
"$schema" = "https://starship.rs/config-schema.json";
# Use custom format
format = ''
[](bold green)[reo101](bright-white)[@](bold yellow)$hostname[>](bold green)$status$cmd_duration$git_branch$git_status$git_state$git_commit
[](bold green)$time$jobs: $directory$package
[](bold green)$character
''; '';
# ${custom.local}\
# ${custom.local_root}\
# ${custom.ssh}\
# ${custom.ssh_root}\
add_newline = true;
character = {
success_symbol = "[](bold green)";
error_symbol = "[](red)";
};
git_branch = {
symbol = "🌱 ";
truncation_length = 15;
truncation_symbol = ""; # …
};
git_commit = {
commit_hash_length = 6;
tag_symbol = "🔖 ";
};
git_state = {
format = "[\($state( $progress_current of $progress_total)\)]($style) ";
cherry_pick = "[🍒 PICKING](bold red)";
};
git_status = {
# conflicted = "🏳";
# ahead = "🏎💨";
# behind = "😰";
# diverged = "😵";
# untracked = "🤷‍";
# stashed = "📦";
# modified = "📝";
# staged = '[++\($count\)](green)';
# renamed = "👅";
# deleted = "🗑";
format = "[\\[$all_status$ahead_behind\\]]($style) ";
conflicted = "=[\($count\)](green) ";
ahead = "[\($count\)](green) ";
behind = "[\($count\)](green) ";
diverged = "[\($count\)](green) ";
untracked = "?[\($count\)](green) ";
stashed = "$[\($count\)](green) ";
modified = "![\($count\)](green) ";
staged = "+[\($count\)](green) ";
renamed = "»[\($count\)](green) ";
deleted = "[\($count\)](green) ";
};
status = {
style = "bg:blue fg:red";
symbol = "🔴";
format = "[\[$symbol $common_meaning$signal_name$maybe_int\]]($style) ";
map_symbol = true;
disabled = false;
};
time = {
disabled = false;
format = "🕙[$time]($style) ";
# format = '🕙[\[ $time \]]($style) ';
time_format = "%T";
utc_time_offset = "+3";
# time_range = "10:00:00-14:00:00";
};
cmd_duration = {
min_time = 2000; # miliseconds
# show_notifications = true;
min_time_to_notify = 45000; # miliseconds
format = "took [$duration](bold yellow) ";
};
hostname = {
ssh_only = false;
format = "[$hostname](bold fg:#CC59B0)";
disabled = false;
};
username = {
disabled = false;
style_user = "white bold";
style_root = "red bold";
format = "[$user]($style)[@](bold yellow)";
show_always = true;
};
directory = {
read_only = "🔒";
read_only_style = "bold white";
style = "fg:#A7F3E4";
truncate_to_repo = false;
truncation_length = 5;
truncation_symbol = "/";
home_symbol = "🏡";
format = "[$read_only]($read_only_style)[$path]($style) ";
};
directory.substitutions = {
".config" = " ";
"nvim" = "";
"emacs" = "𝓔";
"doom" = "𝓔";
"Projects" = "💻";
"FMI" = "🏫";
"Home" = "🏠";
"CPP" = "";
"Java" = "";
"Python" = "";
};
# Language Environments
package = {
style = "bold fg:#5E5E5E";
};
python = {
style = "bold fg:#5E5E5E";
symbol = "[](bold yellow) ";
};
nodejs = {
style = "bold fg:#5E5E5E";
symbol = "[](bold green) ";
};
# Custom
jobs = {
format = "[ $symbol$number ]($style)";
style = "bg:#587744 fg:bright-white";
symbol = "";
};
custom.local = {
shell = [ "zsh" "-d" "-f" ];
when = ''[[ -z "$SSH_CLIENT" ]] && [[ `whoami` != "root" ]]'';
format = "[$symbol$output]($style)[@](bold yellow)";
command = "whoami";
style = "fg:bright-white";
symbol = "";
};
custom.local_root = {
shell = [ "zsh" "-d" "-f" ];
when = ''[[ -z "$SSH_CLIENT" ]] && [[ `whoami` == "root" ]]'';
format = "[ $output ]($style)[@](bold yellow)";
command = "whoami";
style = "bg:red fg:bright-white";
};
custom.ssh = {
shell = [ "zsh" "-d" "-f" ];
when = ''[[ -n "$SSH_CLIENT" ]] && [[ `whoami` != "root" ]]'';
format = "[ $symbol$output ]($style)[@](bold yellow)";
command = "whoami";
style = "bg:blue fg:bright-white";
# style = "bg:#FD7208 fg:bright-white";
symbol = "";
};
custom.ssh_root = {
shell = [ "zsh" "-d" "-f" ];
when = ''[[ -n "$SSH_CLIENT" ]] && [[ `whoami` == "root" ]]'';
format = "[ $symbol$output ]($style)[@](bold yellow)";
command = "whoami";
style = "bg:red fg:bright-white";
symbol = "";
}; };
}; };
}; };
};
config =
mkIf cfg.enable {
home.packages = with pkgs;
builtins.concatLists [
[
zsh
starship
]
(optionals cfg.direnv [
zoxide
])
(optionals cfg.zoxide [
direnv
])
];
programs.direnv = mkIf cfg.direnv {
enable = true;
nix-direnv = {
enable = true;
};
};
programs.zsh = {
enable = true;
enableCompletion = true;
shellAliases = {
# ll = "ls -l";
# update = "sudo nixos-rebuild switch";
};
history = {
size = 10000;
path = "${config.xdg.dataHome}/zsh/history";
};
initExtra =
builtins.concatStringsSep "\n"
[
(optionalString cfg.direnv ''
eval "$(${pkgs.zoxide}/bin/zoxide init zsh)"
'')
(optionalString cfg.zoxide ''
eval "$(${pkgs.direnv}/bin/direnv hook zsh)"
'')
cfg.extraConfig
];
plugins = [
{
name = "zsh-nix-shell";
file = "nix-shell.plugin.zsh";
src = pkgs.fetchFromGitHub {
owner = "chisui";
repo = "zsh-nix-shell";
rev = "v0.5.0";
sha256 = "0za4aiwwrlawnia4f29msk822rj9bgcygw6a8a6iikiwzjjz0g91";
};
}
{
name = "fast-syntax-highlighting";
file = "F-Sy-H.plugin.zsh";
src = pkgs.fetchFromGitHub {
owner = "zdharma";
repo = "fast-syntax-highlighting";
rev = "285d6ce8e1d9c7a70b427c46a4030d43e7a6406b";
sha256 = "4kma7Sx2RGWa9J4gr+U89ArxpM2/b8H9ytQ2pNCv6is=";
};
}
{
name = "zsh-vi-mode";
file = "zsh-vi-mode.plugin.zsh";
src = pkgs.fetchFromGitHub {
owner = "jeffreytse";
repo = "zsh-vi-mode";
rev = "v0.9.0";
sha256 = "sha256-KQ7UKudrpqUwI6gMluDTVN0qKpB15PI5P1YHHCBIlpg=";
};
}
];
};
programs.starship = {
enable = true;
settings = {
# Get editor completions based on the config schema
"$schema" = "https://starship.rs/config-schema.json";
# Use custom format
format = ''
[](bold green)[reo101](bright-white)[@](bold yellow)$hostname[>](bold green)$status$cmd_duration$git_branch$git_status$git_state$git_commit
[](bold green)$time$jobs: $directory$package
[](bold green)$character
'';
# ${custom.local}\
# ${custom.local_root}\
# ${custom.ssh}\
# ${custom.ssh_root}\
add_newline = true;
character = {
success_symbol = "[](bold green)";
error_symbol = "[](red)";
};
git_branch = {
symbol = "🌱 ";
truncation_length = 15;
truncation_symbol = ""; # …
};
git_commit = {
commit_hash_length = 6;
tag_symbol = "🔖 ";
};
git_state = {
format = "[\($state( $progress_current of $progress_total)\)]($style) ";
cherry_pick = "[🍒 PICKING](bold red)";
};
git_status = {
# conflicted = "🏳";
# ahead = "🏎💨";
# behind = "😰";
# diverged = "😵";
# untracked = "🤷‍";
# stashed = "📦";
# modified = "📝";
# staged = '[++\($count\)](green)';
# renamed = "👅";
# deleted = "🗑";
format = "[\\[$all_status$ahead_behind\\]]($style) ";
conflicted = "=[\($count\)](green) ";
ahead = "[\($count\)](green) ";
behind = "[\($count\)](green) ";
diverged = "[\($count\)](green) ";
untracked = "?[\($count\)](green) ";
stashed = "$[\($count\)](green) ";
modified = "![\($count\)](green) ";
staged = "+[\($count\)](green) ";
renamed = "»[\($count\)](green) ";
deleted = "[\($count\)](green) ";
};
status = {
style = "bg:blue fg:red";
symbol = "🔴";
format = "[\[$symbol $common_meaning$signal_name$maybe_int\]]($style) ";
map_symbol = true;
disabled = false;
};
time = {
disabled = false;
format = "🕙[$time]($style) ";
# format = '🕙[\[ $time \]]($style) ';
time_format = "%T";
utc_time_offset = "+3";
# time_range = "10:00:00-14:00:00";
};
cmd_duration = {
min_time = 2000; # miliseconds
# show_notifications = true;
min_time_to_notify = 45000; # miliseconds
format = "took [$duration](bold yellow) ";
};
hostname = {
ssh_only = false;
format = "[$hostname](bold fg:#CC59B0)";
disabled = false;
};
username = {
disabled = false;
style_user = "white bold";
style_root = "red bold";
format = "[$user]($style)[@](bold yellow)";
show_always = true;
};
directory = {
read_only = "🔒";
read_only_style = "bold white";
style = "fg:#A7F3E4";
truncate_to_repo = false;
truncation_length = 5;
truncation_symbol = "/";
home_symbol = "🏡";
format = "[$read_only]($read_only_style)[$path]($style) ";
};
directory.substitutions = {
".config" = " ";
"nvim" = "";
"emacs" = "𝓔";
"doom" = "𝓔";
"Projects" = "💻";
"FMI" = "🏫";
"Home" = "🏠";
"CPP" = "";
"Java" = "";
"Python" = "";
};
# Language Environments
package = {
style = "bold fg:#5E5E5E";
};
python = {
style = "bold fg:#5E5E5E";
symbol = "[](bold yellow) ";
};
nodejs = {
style = "bold fg:#5E5E5E";
symbol = "[](bold green) ";
};
# Custom
jobs = {
format = "[ $symbol$number ]($style)";
style = "bg:#587744 fg:bright-white";
symbol = "";
};
custom.local = {
shell = [ "zsh" "-d" "-f" ];
when = '' [ [ -z "$SSH_CLIENT" ] ] && [ [ `whoami` != "root" ] ] '';
format = "[$symbol$output]($style)[@](bold yellow)";
command = "whoami";
style = "fg:bright-white";
symbol = "";
};
custom.local_root = {
shell = [ "zsh" "-d" "-f" ];
when = '' [ [ -z "$SSH_CLIENT" ] ] && [ [ `whoami` == "root" ] ] '';
format = "[ $output ]($style)[@](bold yellow)";
command = "whoami";
style = "bg:red fg:bright-white";
};
custom.ssh = {
shell = [ "zsh" "-d" "-f" ];
when = '' [ [ -n "$SSH_CLIENT" ] ] && [ [ `whoami` != "root" ] ] '';
format = "[ $symbol$output ]($style)[@](bold yellow)";
command = "whoami";
style = "bg:blue fg:bright-white";
# style = "bg:#FD7208 fg:bright-white";
symbol = "";
};
custom.ssh_root = {
shell = [ "zsh" "-d" "-f" ];
when = '' [ [ -n "$SSH_CLIENT" ] ] && [ [ `whoami` == "root" ] ] '';
format = "[ $symbol$output ]($style)[@](bold yellow)";
command = "whoami";
style = "bg:red fg:bright-white";
symbol = "";
};
};
};
};
meta = { meta = {
maintainers = with lib.maintainers; [ reo101 ]; maintainers = with lib.maintainers; [ reo101 ];
}; };
} }