From 91341cde4143b10ee66e994a53c35d376ad6cdfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christina=20S=C3=B8rensen?= Date: Thu, 7 Sep 2023 08:55:00 +0200 Subject: [PATCH] eza: add module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This copies the exa configuration for eza, the official fork of the program. Signed-off-by: Christina Sørensen --- modules/misc/news.nix | 7 +++++ modules/modules.nix | 1 + modules/programs/eza.nix | 67 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 modules/programs/eza.nix diff --git a/modules/misc/news.nix b/modules/misc/news.nix index 2c08a156d..e2b29cde4 100644 --- a/modules/misc/news.nix +++ b/modules/misc/news.nix @@ -1214,6 +1214,13 @@ in A new module is available: 'programs.carapace'. ''; } + + { + time = "2023-09-07T14:52:19+00:00"; + message = '' + A new module is available: 'programs.eza'. + ''; + } ]; }; } diff --git a/modules/modules.nix b/modules/modules.nix index f00540c3f..e870191ea 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -78,6 +78,7 @@ let ./programs/eclipse.nix ./programs/emacs.nix ./programs/eww.nix + ./programs/eza.nix ./programs/exa.nix ./programs/feh.nix ./programs/firefox.nix diff --git a/modules/programs/eza.nix b/modules/programs/eza.nix new file mode 100644 index 000000000..0724b92b4 --- /dev/null +++ b/modules/programs/eza.nix @@ -0,0 +1,67 @@ +{ config, lib, pkgs, ... }: + +with lib; + +{ + meta.maintainers = [ maintainers.cafkafk ]; + + options.programs.eza = { + enable = mkEnableOption "eza, a modern replacement for {command}`ls`"; + + enableAliases = mkEnableOption "recommended eza aliases (ls, ll…)"; + + 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); + + aliases = { + eza = "eza ${args}"; + } // optionalAttrs cfg.enableAliases { + 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 = aliases; + + programs.zsh.shellAliases = aliases; + + programs.fish.shellAliases = aliases; + + programs.ion.shellAliases = aliases; + }; +}