From a1a72d18ee75ce4559b5f59296a7b2d37f608c1c Mon Sep 17 00:00:00 2001 From: Nick DeGroot Date: Thu, 15 May 2025 20:50:09 -0700 Subject: [PATCH] pgcli: init (#7072) --- modules/lib/maintainers.nix | 6 ++ .../misc/news/2025/05/2025-05-15_14-37-58.nix | 9 +++ modules/modules.nix | 1 + modules/programs/pgcli.nix | 58 +++++++++++++++++++ tests/default.nix | 1 + tests/modules/programs/pgcli/default.nix | 4 ++ .../modules/programs/pgcli/empty-settings.nix | 7 +++ .../programs/pgcli/example-settings.nix | 23 ++++++++ 8 files changed, 109 insertions(+) create mode 100644 modules/misc/news/2025/05/2025-05-15_14-37-58.nix create mode 100644 modules/programs/pgcli.nix create mode 100644 tests/modules/programs/pgcli/default.nix create mode 100644 tests/modules/programs/pgcli/empty-settings.nix create mode 100644 tests/modules/programs/pgcli/example-settings.nix diff --git a/modules/lib/maintainers.nix b/modules/lib/maintainers.nix index b168e8c5c..679b1590f 100644 --- a/modules/lib/maintainers.nix +++ b/modules/lib/maintainers.nix @@ -333,6 +333,12 @@ github = "msyds"; githubId = 65362461; }; + nickthegroot = { + name = "Nick DeGroot"; + email = "nick@nickthegroot.com"; + github = "nickthegroot"; + githubId = 1966472; + }; nikp123 = { name = "nikp123"; email = "nikp123@users.noreply.github.com"; diff --git a/modules/misc/news/2025/05/2025-05-15_14-37-58.nix b/modules/misc/news/2025/05/2025-05-15_14-37-58.nix new file mode 100644 index 000000000..4f4c6c540 --- /dev/null +++ b/modules/misc/news/2025/05/2025-05-15_14-37-58.nix @@ -0,0 +1,9 @@ +{ + time = "2025-05-15T21:37:58+00:00"; + condition = true; + message = '' + A new module is available: `programs.pgcli` + + pgcli is a Python CLI that lets you connect to Postgres databases and run queries with syntax highlighting and auto-completion. + ''; +} diff --git a/modules/modules.nix b/modules/modules.nix index 345dfac98..b2de3899e 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -226,6 +226,7 @@ let ./programs/pay-respects.nix ./programs/pazi.nix ./programs/pet.nix + ./programs/pgcli.nix ./programs/pidgin.nix ./programs/pistol.nix ./programs/piston-cli.nix diff --git a/modules/programs/pgcli.nix b/modules/programs/pgcli.nix new file mode 100644 index 000000000..98eb2fd12 --- /dev/null +++ b/modules/programs/pgcli.nix @@ -0,0 +1,58 @@ +{ + pkgs, + config, + lib, + ... +}: + +let + + inherit (lib) + mkEnableOption + mkPackageOption + mkOption + literalExpression + ; + + iniFormat = pkgs.formats.ini { }; + cfg = config.programs.pgcli; + +in +{ + meta.maintainers = [ lib.hm.maintainers.nickthegroot ]; + + options.programs.pgcli = { + enable = mkEnableOption "pgcli"; + + package = mkPackageOption pkgs "pgcli" { nullable = true; }; + + settings = mkOption { + type = iniFormat.type; + default = { }; + example = literalExpression '' + { + main = { + smart_completion = true; + vi = true; + }; + + "named queries".simple = "select * from abc where a is not Null"; + } + ''; + description = '' + Configuration written to + {file}`$XDG_CONFIG_HOME/pgcli/config`. + See + for more information. + ''; + }; + }; + + config = lib.mkIf cfg.enable { + home.packages = lib.mkIf (cfg.package != null) [ cfg.package ]; + + xdg.configFile."pgcli/config" = lib.mkIf (cfg.settings != { }) { + source = iniFormat.generate "pgcli-config" cfg.settings; + }; + }; +} diff --git a/tests/default.nix b/tests/default.nix index 1d329392e..52dde31f2 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -266,6 +266,7 @@ import nmtSrc { ./modules/programs/papis ./modules/programs/pay-respects ./modules/programs/pet + ./modules/programs/pgcli ./modules/programs/pistol ./modules/programs/pls ./modules/programs/poetry diff --git a/tests/modules/programs/pgcli/default.nix b/tests/modules/programs/pgcli/default.nix new file mode 100644 index 000000000..29e8680de --- /dev/null +++ b/tests/modules/programs/pgcli/default.nix @@ -0,0 +1,4 @@ +{ + pgcli-example-settings = ./example-settings.nix; + pgcli-empty-settings = ./empty-settings.nix; +} diff --git a/tests/modules/programs/pgcli/empty-settings.nix b/tests/modules/programs/pgcli/empty-settings.nix new file mode 100644 index 000000000..0a4a1d871 --- /dev/null +++ b/tests/modules/programs/pgcli/empty-settings.nix @@ -0,0 +1,7 @@ +{ + programs.pgcli.enable = true; + + nmt.script = '' + assertPathNotExists home-files/.config/pgcli/config + ''; +} diff --git a/tests/modules/programs/pgcli/example-settings.nix b/tests/modules/programs/pgcli/example-settings.nix new file mode 100644 index 000000000..620a7367f --- /dev/null +++ b/tests/modules/programs/pgcli/example-settings.nix @@ -0,0 +1,23 @@ +{ config, ... }: + +let + expected = builtins.toFile "config" '' + [main] + vi=true + ''; +in +{ + programs.pgcli = { + enable = true; + package = config.lib.test.mkStubPackage { }; + + settings = { + main.vi = true; + }; + }; + + nmt.script = '' + assertFileExists home-files/.config/pgcli/config + assertFileContent home-files/.config/pgcli/config '${expected}' + ''; +}