1
0
mirror of https://github.com/nix-community/home-manager synced 2024-07-04 20:33:27 +02:00
home-manager/modules/programs/eza.nix
Norbert Melzer 0906e8dfe7
eza: use mkDefault for aliases
Using `mkDefault` for the individual aliases makes it easier to
override or replace individual entries by the user, without having to
use `mkForce` which is often confusing for new users.
2024-03-13 13:46:29 +01:00

104 lines
2.8 KiB
Nix

{ config, lib, pkgs, ... }:
with lib;
{
imports = let
msg = ''
'programs.eza.enableAliases' has been deprecated and replaced with integration
options per shell, for example, 'programs.eza.enableBashIntegration'.
Note, the default for these options is 'true' so if you want to enable the
aliases you can simply remove 'rograms.eza.enableAliases' from your
configuration.'';
mkRenamed = opt:
mkRenamedOptionModule [ "programs" "exa" opt ] [ "programs" "eza" opt ];
in (map mkRenamed [ "enable" "extraOptions" "icons" "git" ])
++ [ (mkRemovedOptionModule [ "programs" "eza" "enableAliases" ] msg) ];
meta.maintainers = [ maintainers.cafkafk ];
options.programs.eza = {
enable = mkEnableOption "eza, a modern replacement for {command}`ls`";
enableBashIntegration = mkEnableOption "Bash integration" // {
default = true;
};
enableZshIntegration = mkEnableOption "Zsh integration" // {
default = true;
};
enableFishIntegration = mkEnableOption "Fish integration" // {
default = true;
};
enableIonIntegration = mkEnableOption "Ion integration" // {
default = true;
};
enableNushellIntegration = mkEnableOption "Nushell integration";
extraOptions = mkOption {
type = types.listOf types.str;
default = [ ];
example = [ "--group-directories-first" "--header" ];
description = ''
Extra command line options passed to eza.
'';
};
icons = mkOption {
type = types.bool;
default = false;
description = ''
Display icons next to file names ({option}`--icons` argument).
'';
};
git = mkOption {
type = types.bool;
default = false;
description = ''
List each file's Git status if tracked or ignored ({option}`--git` argument).
'';
};
package = mkPackageOption pkgs "eza" { };
};
config = let
cfg = config.programs.eza;
args = escapeShellArgs (optional cfg.icons "--icons"
++ optional cfg.git "--git" ++ cfg.extraOptions);
optionsAlias = { eza = "eza ${args}"; };
aliases = builtins.mapAttrs (_name: value: lib.mkDefault value) {
ls = "eza";
ll = "eza -l";
la = "eza -a";
lt = "eza --tree";
lla = "eza -la";
};
in mkIf cfg.enable {
home.packages = [ cfg.package ];
programs.bash.shellAliases = optionsAlias
// optionalAttrs cfg.enableBashIntegration aliases;
programs.zsh.shellAliases = optionsAlias
// optionalAttrs cfg.enableZshIntegration aliases;
programs.fish.shellAliases = optionsAlias
// optionalAttrs cfg.enableFishIntegration aliases;
programs.ion.shellAliases = optionsAlias
// optionalAttrs cfg.enableIonIntegration aliases;
programs.nushell.shellAliases = optionsAlias
// optionalAttrs cfg.enableNushellIntegration aliases;
};
}