1
0
Fork 0
mirror of https://github.com/nix-community/home-manager.git synced 2025-11-08 19:46:05 +01:00
home-manager/modules/programs/lsd.nix
Hoang Nguyen 17a1004948
lsd: allow specifying a path type value for icons and colors options (#7733)
This allows users to use an icons or colors theme file taken from GitHub
directly without the YAML -> Nix translation in the configuration.
2025-09-13 19:32:33 -05:00

149 lines
4.1 KiB
Nix

{
config,
lib,
pkgs,
...
}:
let
cfg = config.programs.lsd;
yamlFormat = pkgs.formats.yaml { };
in
{
imports =
let
msg = ''
'programs.lsd.enableAliases' has been deprecated and replaced with integration
options per shell, for example, 'programs.lsd.enableBashIntegration'.
Note, the default for these options is 'true' so if you want to enable the
aliases you can simply remove 'programs.lsd.enableAliases' from your
configuration.'';
in
[ (lib.mkRemovedOptionModule [ "programs" "lsd" "enableAliases" ] msg) ];
meta.maintainers = [ ];
options.programs.lsd = {
enable = lib.mkEnableOption "lsd";
package = lib.mkPackageOption pkgs "lsd" { nullable = true; };
enableBashIntegration = lib.hm.shell.mkBashIntegrationOption { inherit config; };
enableFishIntegration = lib.hm.shell.mkFishIntegrationOption { inherit config; };
enableZshIntegration = lib.hm.shell.mkZshIntegrationOption { inherit config; };
settings = lib.mkOption {
type = yamlFormat.type;
default = { };
example = {
date = "relative";
ignore-globs = [
".git"
".hg"
];
};
description = ''
Configuration written to
{file}`$XDG_CONFIG_HOME/lsd/config.yaml`. See
<https://github.com/Peltoche/lsd#config-file-content>
for supported values.
'';
};
colors = lib.mkOption {
type = lib.types.either yamlFormat.type lib.types.path;
default = { };
example = {
size = {
none = "grey";
small = "yellow";
large = "dark_yellow";
};
};
description = ''
Configuration written to {file}`$XDG_CONFIG_HOME/lsd/colors.yaml`. See
<https://github.com/lsd-rs/lsd/tree/v1.0.0#color-theme-file-content> for
supported colors.
If this option is non-empty then the `color.theme` option is
automatically set to `"custom"`.
'';
};
icons = lib.mkOption {
type = lib.types.either yamlFormat.type lib.types.path;
default = { };
example = {
name = {
".trash" = "";
".cargo" = "";
};
extension = {
"go" = "";
"hs" = "";
};
filetype = {
"dir" = "📂";
"file" = "📄";
};
};
description = ''
Configuration written to {file}`$XDG_CONFIG_HOME/lsd/icons.yaml`. See
<https://github.com/lsd-rs/lsd?tab=readme-ov-file#icon-theme-file-content> for
details.
'';
};
};
config = lib.mkIf cfg.enable {
home.packages = lib.mkIf (cfg.package != null) [ cfg.package ];
programs =
let
aliases = {
ls = "${pkgs.lsd}/bin/lsd";
ll = "${pkgs.lsd}/bin/lsd -l";
la = "${pkgs.lsd}/bin/lsd -A";
lt = "${pkgs.lsd}/bin/lsd --tree";
lla = "${pkgs.lsd}/bin/lsd -lA";
llt = "${pkgs.lsd}/bin/lsd -l --tree";
};
in
{
bash.shellAliases = lib.mkIf cfg.enableBashIntegration aliases;
fish = lib.mkMerge [
(lib.mkIf (!config.programs.fish.preferAbbrs) {
shellAliases = lib.mkIf cfg.enableFishIntegration aliases;
})
(lib.mkIf config.programs.fish.preferAbbrs {
shellAbbrs = lib.mkIf cfg.enableFishIntegration aliases;
})
];
lsd = lib.mkIf (cfg.colors != { }) { settings.color.theme = "custom"; };
zsh.shellAliases = lib.mkIf cfg.enableZshIntegration aliases;
};
xdg.configFile = {
"lsd/colors.yaml" = lib.mkIf (cfg.colors != { }) {
source =
if lib.types.path.check cfg.colors then cfg.colors else yamlFormat.generate "lsd-colors" cfg.colors;
};
"lsd/config.yaml" = lib.mkIf (cfg.settings != { }) {
source = yamlFormat.generate "lsd-config" cfg.settings;
};
"lsd/icons.yaml" = lib.mkIf (cfg.icons != { }) {
source =
if lib.types.path.check cfg.icons then cfg.icons else yamlFormat.generate "lsd-icons" cfg.icons;
};
};
};
}