138 lines
4.4 KiB
Nix
138 lines
4.4 KiB
Nix
{
|
|
inputs,
|
|
cell,
|
|
namespace,
|
|
}: {
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}: let
|
|
cfg = config."${namespace}".shells;
|
|
in {
|
|
options."${namespace}".shells = {
|
|
enable = lib.mkOption {
|
|
type = lib.types.bool;
|
|
description = "Enable umbrella shell configuration";
|
|
default = true;
|
|
example = false;
|
|
};
|
|
shellInitExtra = lib.mkOption {
|
|
type = lib.types.str;
|
|
description = "Extra shell init. The syntax should be sh-compliant";
|
|
default = "";
|
|
example = ''
|
|
# X11 support for WSL
|
|
export DISPLAY=$(ip route list default | awk '{print $3}'):0
|
|
export LIBGL_ALWAYS_INDIRECT=1
|
|
'';
|
|
};
|
|
shellAliases = lib.mkOption {
|
|
type = lib.types.attrs;
|
|
description = "Shell command aliases";
|
|
default = {};
|
|
example = {
|
|
nixGL = "nixGLIntel";
|
|
};
|
|
};
|
|
};
|
|
config = lib.mkIf cfg.enable {
|
|
# nix: Propagates the environment with packages and vars when enter (children of)
|
|
# a directory with shell.nix-compatible and .envrc
|
|
programs.direnv = {
|
|
enable = true;
|
|
nix-direnv.enable = true;
|
|
# nix-direnv.enableFlakes = true; # must remove. this will always be supported.
|
|
};
|
|
# z <path> as smarter cd
|
|
programs.zoxide = {
|
|
enable = true;
|
|
enableZshIntegration = true;
|
|
};
|
|
programs.tmux = {
|
|
enable = true;
|
|
plugins = let inherit (pkgs.tmuxPlugins) cpu net-speed; in [cpu net-speed];
|
|
extraConfig = builtins.readFile "${inputs.self}/native_configs/tmux/tmux.conf";
|
|
};
|
|
xdg.configFile."tmux/tmux.conf".text = lib.mkOrder 600 ''
|
|
set -g status-right '#{cpu_bg_color} CPU: #{cpu_icon} #{cpu_percentage} | %a %h-%d %H:%M '
|
|
'';
|
|
# Colored ls
|
|
programs.eza = {
|
|
enable = true;
|
|
enableAliases = true;
|
|
};
|
|
# Make the shell look beautiful
|
|
programs.starship = {
|
|
enable = true;
|
|
enableZshIntegration = true;
|
|
settings = let
|
|
native = builtins.fromTOML (builtins.readFile "${inputs.self}/native_configs/starship/starship.toml");
|
|
patch-nix = pkgs.lib.recursiveUpdate native {
|
|
# WARNING: home-manager fails on here for some reason. Likely not at the
|
|
# validation phase (type-checking), but at evaluation phaase (stringify)
|
|
# I'm thinking when `settings` are evaluated, it has some sort of
|
|
# recursive processing before it gets turned into a toml
|
|
# c.commands = [
|
|
# ["nix" "run" "nixpkgs#clang" "--" "--version"]
|
|
# ["nix" "run" "nixpkgs#gcc" "--" "--version"]
|
|
# ];
|
|
c.disabled = true;
|
|
};
|
|
in
|
|
patch-nix;
|
|
};
|
|
# Fuzzy finder. `fzf` for TUI, `fzf -f '<fuzzy query>'` for UNIX piping
|
|
programs.fzf.enable = true;
|
|
programs.bash = {
|
|
enable = true;
|
|
enableCompletion = true;
|
|
initExtra = cfg.shellInitExtra or "";
|
|
};
|
|
programs.zsh = {
|
|
enable = true;
|
|
enableCompletion = true;
|
|
enableAutosuggestions = true;
|
|
shellAliases =
|
|
{
|
|
nix-rebuild = "sudo nixos-rebuild switch";
|
|
hm-switch = "home-manager switch --flake";
|
|
}
|
|
// (cfg.shellAliases or {});
|
|
history = {
|
|
size = 10000;
|
|
path = "${config.xdg.dataHome}/zsh/history";
|
|
};
|
|
oh-my-zsh = {
|
|
enable = true;
|
|
plugins = [
|
|
"git" # git command aliases: https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/git#aliases
|
|
# DEPRECATION: potentially smelly plugin with nix
|
|
# "command-not-found" # suggests which package to install; does not support nixos (we have solution already)
|
|
|
|
# DEPRECATION: 0 usage, mostly because I don't have a use for it
|
|
# "gitignore" # `gi list` -> `gi java >>.gitignore`
|
|
"ripgrep" # adds completion for `rg`
|
|
"rust" # compe for rustc/cargo
|
|
"poetry" # compe for poetry - Python's cargo
|
|
];
|
|
};
|
|
sessionVariables = {
|
|
# Vim mode on the terminal
|
|
# VI_MODE_RESET_PROMPT_ON_MODE_CHANGE = true;
|
|
# VI_MODE_SET_CURSOR = true;
|
|
# ZVM_VI_ESCAPE_BINDKEY = "";
|
|
ZVM_READKEY_ENGINE = "$ZVM_READKEY_ENGINE_NEX";
|
|
# lowest possible: 0.004s
|
|
ZVM_KEYTIMEOUT = 0.004; # 40ms, or subtly around 25 FPS. I'm a gamer :)
|
|
ZVM_ESCAPE_KEYTIMEOUT = 0.004; # 40ms, or subtly around 25 FPS. I'm a gamer :)
|
|
};
|
|
initExtra =
|
|
(cfg.shellInitExtra or "")
|
|
+ ''
|
|
source ${pkgs.zsh-vi-mode}/share/zsh-vi-mode/zsh-vi-mode.plugin.zsh
|
|
'';
|
|
};
|
|
};
|
|
}
|