From bbaeb9f1c29e79bb1653b32c3d73244cdf4bd888 Mon Sep 17 00:00:00 2001 From: "Benedikt M. Rips" Date: Mon, 27 Oct 2025 02:59:05 +0100 Subject: [PATCH] glab: init module (#8066) --- .../misc/news/2025/10/2025-10-27_00-33-43.nix | 9 ++++ modules/programs/glab.nix | 52 +++++++++++++++++++ tests/modules/programs/glab/aliases.nix | 16 ++++++ tests/modules/programs/glab/default.nix | 3 ++ 4 files changed, 80 insertions(+) create mode 100644 modules/misc/news/2025/10/2025-10-27_00-33-43.nix create mode 100644 modules/programs/glab.nix create mode 100644 tests/modules/programs/glab/aliases.nix create mode 100644 tests/modules/programs/glab/default.nix diff --git a/modules/misc/news/2025/10/2025-10-27_00-33-43.nix b/modules/misc/news/2025/10/2025-10-27_00-33-43.nix new file mode 100644 index 000000000..45b526437 --- /dev/null +++ b/modules/misc/news/2025/10/2025-10-27_00-33-43.nix @@ -0,0 +1,9 @@ +{ + time = "2025-10-26T23:33:43+00:00"; + condition = true; + message = '' + A new module is available: 'programs.glab'. + + `glab` is an open source GitLab CLI tool that brings GitLab to your terminal. + ''; +} diff --git a/modules/programs/glab.nix b/modules/programs/glab.nix new file mode 100644 index 000000000..525456dc4 --- /dev/null +++ b/modules/programs/glab.nix @@ -0,0 +1,52 @@ +{ + config, + lib, + pkgs, + ... +}: + +let + cfg = config.programs.glab; + + yaml = pkgs.formats.yaml { }; + +in +{ + meta.maintainers = [ lib.maintainers.bmrips ]; + + options.programs.glab = { + enable = lib.mkEnableOption "{command}`glab`."; + package = lib.mkPackageOption pkgs "glab" { nullable = true; }; + aliases = lib.mkOption { + type = with lib.types; attrsOf str; + default = { }; + description = "Aliases written to {file}`$XDG_CONFIG_HOME/glab-cli/aliases.yml`."; + example.co = "mr checkout"; + }; + settings = lib.mkOption { + inherit (yaml) type; + default = { }; + description = "Configuration written to {file}`$XDG_CONFIG_HOME/glab-cli/config.yml`."; + example.check_update = false; + }; + }; + + config = lib.mkIf cfg.enable { + home.packages = lib.mkIf (cfg.package != null) [ cfg.package ]; + + # Use `systemd-tmpfiles` since glab requires its configuration file to have + # mode 0600. + systemd.user.tmpfiles.rules = + let + target = "${config.xdg.configHome}/glab-cli/config.yml"; + in + lib.mkIf (cfg.settings != { }) [ + "C+ ${target} - - - - ${yaml.generate "glab-config" cfg.settings}" + "z ${target} 0600" + ]; + + xdg.configFile."glab-cli/aliases.yml" = lib.mkIf (cfg.aliases != { }) { + source = yaml.generate "glab-aliases" cfg.aliases; + }; + }; +} diff --git a/tests/modules/programs/glab/aliases.nix b/tests/modules/programs/glab/aliases.nix new file mode 100644 index 000000000..3bb451189 --- /dev/null +++ b/tests/modules/programs/glab/aliases.nix @@ -0,0 +1,16 @@ +{ pkgs, ... }: + +{ + programs.glab = { + enable = true; + aliases.co = "mr checkout"; + }; + + nmt.script = '' + aliasesFile=home-files/.config/glab-cli/aliases.yml + assertFileExists $aliasesFile + assertFileContent $aliasesFile ${pkgs.writeText "glab-aliases.expected" '' + co: mr checkout + ''} + ''; +} diff --git a/tests/modules/programs/glab/default.nix b/tests/modules/programs/glab/default.nix new file mode 100644 index 000000000..b89488ef9 --- /dev/null +++ b/tests/modules/programs/glab/default.nix @@ -0,0 +1,3 @@ +{ + glab-aliases = ./aliases.nix; +}