rix101/modules/home-manager/reo101-shell/default.nix
reo101 bc81e59950
feat(flake)!: common home-manager settings
Automatically add the flake's overlays to `home-manager`'s `nixpkgs.overlays`
Split up `reo101-shell`
Upgdate `cheetah` to `23.05`
Some formatting
2023-07-26 08:44:02 +03:00

198 lines
5.5 KiB
Nix

{ lib, pkgs, config, ... }:
let
cfg = config.reo101.shell;
inherit (lib)
mkEnableOption mkOption types
mkIf optionals optionalString;
in
{
imports =
[
];
options =
{
reo101.shell = {
enable = mkEnableOption "reo101 zsh setup";
username = mkOption {
description = "Username to be used in prompt";
type = types.str;
default = "${config.home.username}";
};
atuin = mkOption {
description = "Integrate with atuin";
type = types.bool;
default = true;
};
direnv = mkOption {
description = "Integrate with direnv";
type = types.bool;
default = true;
};
zoxide = mkOption {
description = "Integrate with zoxide";
type = types.bool;
default = true;
};
flakePath = mkOption {
description = "Flake path (used for `rebuild` command)";
type = types.str;
default = "${config.xdg.configHome}/rix101";
};
extraConfig = mkOption {
description = "Extra zsh config";
type = types.str;
default = ''
'';
};
};
};
config =
mkIf cfg.enable {
home.packages = with pkgs;
builtins.concatLists [
[
zsh
starship
]
(optionals cfg.atuin [
atuin
])
(optionals cfg.direnv [
direnv
])
(optionals cfg.zoxide [
zoxide
])
];
# Atuin
home.file."${config.xdg.configHome}/config.toml" = mkIf cfg.atuin {
text = import ./atuin.nix {
keyPath = "${config.xdg.dataHome}/atuin/key";
};
};
# Direnv
programs.direnv = mkIf cfg.direnv {
enable = true;
nix-direnv = {
enable = true;
};
};
# Starship
programs.starship = {
enable = true;
settings = import ./starship.nix { username = cfg.username; };
};
# Zsh
programs.zsh = {
enable = true;
enableCompletion = true;
dotDir = ".config/zsh";
shellAliases = {
ls = "${pkgs.lsd}/bin/lsd";
cp = "${pkgs.advcpmv}/bin/advcp -rvi";
mv = "${pkgs.advcpmv}/bin/advmv -vi";
mkdir = "mkdir -vp";
};
history = {
size = 10000;
path = "${config.xdg.dataHome}/zsh/history";
};
initExtra =
builtins.concatStringsSep "\n"
[
''
rebuild () {
${
let
inherit (lib.strings) hasInfix;
in
if hasInfix "nixos" pkgs.system then
"sudo --validate && sudo nixos-rebuild"
else if hasInfix "darwin" pkgs.system then
"darwin-rebuild"
else if "aarch64-linux" == pkgs.system then
"nix-on-droid"
else
"home-manager"
} --flake ${cfg.flakePath} ''$''\{1:-switch''\} |& nix run nixpkgs#nix-output-monitor
}
''
(optionalString cfg.atuin ''
export ATUIN_NOBIND="true"
eval "$(${pkgs.atuin}/bin/atuin init zsh)"
function zvm_after_init() {
# bindkey "^r" _atuin_search_widget
zvm_bindkey viins "^R" _atuin_search_widget
}
'')
# NOTE: done by `programs.direnv`
# (optionalString cfg.direnv ''
# eval "$(${pkgs.direnv}/bin/direnv hook zsh)"
# '')
(optionalString cfg.zoxide ''
eval "$(${pkgs.zoxide}/bin/zoxide init zsh)"
'')
cfg.extraConfig
];
plugins = [
{
name = "zsh-nix-shell";
file = "nix-shell.plugin.zsh";
src = pkgs.fetchFromGitHub {
owner = "chisui";
repo = "zsh-nix-shell";
rev = "v0.7.0";
sha256 = "sha256-oQpYKBt0gmOSBgay2HgbXiDoZo5FoUKwyHSlUrOAP5E=";
};
}
{
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=";
};
}
{
name = "zsh-autosuggestions";
file = "zsh-autosuggestions.plugin.zsh";
src = pkgs.fetchFromGitHub {
owner = "zsh-users";
repo = "zsh-autosuggestions";
rev = "a411ef3e0992d4839f0732ebeb9823024afaaaa8";
sha256 = "sha256-KLUYpUu4DHRumQZ3w59m9aTW6TBKMCXl2UcKi4uMd7w=";
};
}
{
name = "zsh-vi-mode";
file = "zsh-vi-mode.plugin.zsh";
src = pkgs.fetchFromGitHub {
owner = "jeffreytse";
repo = "zsh-vi-mode";
rev = "1bda23100e8d140a19be0eed67395c64f6a6074c";
sha256 = "sha256-3arAa5EBG+U9cCauChX9K0KF3hkd+t04/trlWKk/gOw=";
};
}
];
};
};
meta = {
maintainers = with lib.maintainers; [ reo101 ];
};
}