diff --git a/modules/modules.nix b/modules/modules.nix index 30e645e0a..c1025ba78 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -295,6 +295,7 @@ let ./programs/vinegar.nix ./programs/vscode.nix ./programs/vscode/haskell.nix + ./programs/visidata.nix ./programs/pywal.nix ./programs/rbenv.nix ./programs/wallust.nix diff --git a/modules/programs/visidata.nix b/modules/programs/visidata.nix new file mode 100644 index 000000000..195458337 --- /dev/null +++ b/modules/programs/visidata.nix @@ -0,0 +1,50 @@ +{ + lib, + pkgs, + config, + ... +}: +let + inherit (lib) + types + mkIf + mkEnableOption + mkPackageOption + mkOption + ; + + cfg = config.programs.visidata; +in +{ + meta.maintainers = with lib.hm.maintainers; [ aguirre-matteo ]; + + options.programs.visidata = { + enable = mkEnableOption "Visidata"; + package = mkPackageOption pkgs "visidata" { nullable = true; }; + visidatarc = mkOption { + type = types.lines; + default = ""; + example = '' + options.min_memory_mb=100 # stop processing without 100MB free + + bindkey('0', 'go-leftmost') # alias '0' to go to first column, like vim + + def median(values): + L = sorted(values) + return L[len(L)//2] + + vd.aggregator('median', median) + ''; + description = '' + Configuration settings and Python function declarations + to be written to ~/.visidatarc. All available options + can be found here: . + ''; + }; + }; + + config = mkIf cfg.enable { + home.packages = mkIf (cfg.package != null) [ cfg.package ]; + home.file.".visidatarc" = mkIf (cfg.visidatarc != "") { text = cfg.visidatarc; }; + }; +} diff --git a/tests/default.nix b/tests/default.nix index 77a3dac52..8901ec45d 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -309,6 +309,7 @@ import nmtSrc { ./modules/programs/uv ./modules/programs/vifm ./modules/programs/vim-vint + ./modules/programs/visidata ./modules/programs/vscode ./modules/programs/wallust ./modules/programs/watson diff --git a/tests/modules/programs/visidata/config b/tests/modules/programs/visidata/config new file mode 100644 index 000000000..13a50d0f9 --- /dev/null +++ b/tests/modules/programs/visidata/config @@ -0,0 +1,9 @@ +options.min_memory_mb=100 + +bindkey('0', 'go-leftmost') + +def median(values): + L = sorted(values) + return L[len(L)//2] + +vd.aggregator('median', median) diff --git a/tests/modules/programs/visidata/default.nix b/tests/modules/programs/visidata/default.nix new file mode 100644 index 000000000..e5b4afc34 --- /dev/null +++ b/tests/modules/programs/visidata/default.nix @@ -0,0 +1 @@ +{ visidata-example-config = ./example-config.nix; } diff --git a/tests/modules/programs/visidata/example-config.nix b/tests/modules/programs/visidata/example-config.nix new file mode 100644 index 000000000..fb80ead03 --- /dev/null +++ b/tests/modules/programs/visidata/example-config.nix @@ -0,0 +1,22 @@ +{ + programs.visidata = { + enable = true; + visidatarc = '' + options.min_memory_mb=100 + + bindkey('0', 'go-leftmost') + + def median(values): + L = sorted(values) + return L[len(L)//2] + + vd.aggregator('median', median) + ''; + }; + + nmt.script = '' + assertFileExists home-files/.visidatarc + assertFileContent home-files/.visidatarc \ + ${./config} + ''; +}