feat(09-01): add work-cli home-manager module
- enable option, jira/vault sub-enables - all config options matching config.py schema - generates ~/.config/work/config.toml via home.file - wires bash completion via programs.bash.initExtra - package installed from inputs.work-cli.packages
This commit is contained in:
44
dots/.config/nvim/lua/mr.lua
Normal file
44
dots/.config/nvim/lua/mr.lua
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
local M = {}
|
||||||
|
|
||||||
|
local function merge_base()
|
||||||
|
return vim.fn.system("git merge-base origin/main HEAD"):gsub("%s+", "")
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.files()
|
||||||
|
local base = merge_base()
|
||||||
|
require("fzf-lua").fzf_exec("git diff --name-only " .. base .. "...HEAD", {
|
||||||
|
prompt = "MR files> ",
|
||||||
|
actions = {
|
||||||
|
["default"] = function(selected)
|
||||||
|
vim.cmd("edit " .. selected[1])
|
||||||
|
require("gitsigns").diffthis(base)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.commits()
|
||||||
|
local base = merge_base()
|
||||||
|
require("fzf-lua").fzf_exec("git log --oneline " .. base .. "..HEAD", {
|
||||||
|
prompt = "MR commits> ",
|
||||||
|
actions = {
|
||||||
|
["default"] = function(selected)
|
||||||
|
local sha = selected[1]:match("^(%S+)")
|
||||||
|
require("fzf-lua").fzf_exec("git diff --name-only " .. sha .. "~1.." .. sha, {
|
||||||
|
prompt = sha:sub(1, 7) .. " files> ",
|
||||||
|
actions = {
|
||||||
|
["default"] = function(files)
|
||||||
|
vim.cmd("edit " .. files[1])
|
||||||
|
require("gitsigns").diffthis(sha .. "~1")
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_create_user_command("MRFiles", M.files, {})
|
||||||
|
vim.api.nvim_create_user_command("MRCommits", M.commits, {})
|
||||||
|
|
||||||
|
return M
|
||||||
43
home/hosts/work/packages.local.nix
Normal file
43
home/hosts/work/packages.local.nix
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
with pkgs;
|
||||||
|
let
|
||||||
|
nodejs = [
|
||||||
|
biome
|
||||||
|
tsx
|
||||||
|
];
|
||||||
|
oasdiff = buildGoModule rec {
|
||||||
|
pname = "oasdiff";
|
||||||
|
version = "1.11.10";
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "oasdiff";
|
||||||
|
repo = "oasdiff";
|
||||||
|
rev = "v${version}";
|
||||||
|
hash = "sha256-/Pk2mKzdYKl51RvEkm5yRDMHz2vISgoHlnel+llDJus=";
|
||||||
|
};
|
||||||
|
vendorHash = "sha256-ZKs9Ai8Q9Yj4V9GIufYRh9cl3ZUKnSehwpaodyGXtfg=";
|
||||||
|
};
|
||||||
|
misc = [
|
||||||
|
curl
|
||||||
|
flameshot
|
||||||
|
fzf-git-sh
|
||||||
|
git-machete
|
||||||
|
gitlab-ci-local
|
||||||
|
go
|
||||||
|
lua
|
||||||
|
ngrok
|
||||||
|
oasdiff
|
||||||
|
responder
|
||||||
|
rustlings
|
||||||
|
sleuthkit
|
||||||
|
vault-bin
|
||||||
|
xclip
|
||||||
|
xmage
|
||||||
|
# xwayland-satellite
|
||||||
|
# (python314.withPackages (ppkgs: [
|
||||||
|
# ppkgs.plyer
|
||||||
|
# ppkgs.dbus-python
|
||||||
|
# ]))
|
||||||
|
];
|
||||||
|
in
|
||||||
|
misc ++ nodejs
|
||||||
9
home/modules/networking/default.nix
Normal file
9
home/modules/networking/default.nix
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
wireshark
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
110
home/modules/work-cli/default.nix
Normal file
110
home/modules/work-cli/default.nix
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
cfg = config.programs.work-cli;
|
||||||
|
workCliPkg = inputs.work-cli.packages.${pkgs.system}.default;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.programs.work-cli = {
|
||||||
|
enable = lib.mkEnableOption "work-cli unified developer workflow CLI";
|
||||||
|
|
||||||
|
general = {
|
||||||
|
defaultBranch = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "main";
|
||||||
|
description = "Default git branch name";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
gitlab = {
|
||||||
|
url = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "https://gitlab.com";
|
||||||
|
description = "GitLab instance URL";
|
||||||
|
};
|
||||||
|
|
||||||
|
project = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "";
|
||||||
|
description = "GitLab project path (namespace/repo)";
|
||||||
|
};
|
||||||
|
|
||||||
|
group = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "";
|
||||||
|
description = "GitLab group path";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
jira = {
|
||||||
|
enable = lib.mkEnableOption "jira integration";
|
||||||
|
|
||||||
|
url = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "";
|
||||||
|
description = "Jira instance URL";
|
||||||
|
};
|
||||||
|
|
||||||
|
projectKey = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "";
|
||||||
|
description = "Jira project key";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
vault = {
|
||||||
|
enable = lib.mkEnableOption "vault integration";
|
||||||
|
|
||||||
|
url = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "";
|
||||||
|
description = "Vault instance URL";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
repos = {
|
||||||
|
path = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "~/work";
|
||||||
|
description = "Local path where repos are cloned";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
home.packages = [ workCliPkg ];
|
||||||
|
|
||||||
|
home.file.".config/work/config.toml".text = ''
|
||||||
|
[general]
|
||||||
|
default_branch = "${cfg.general.defaultBranch}"
|
||||||
|
|
||||||
|
[gitlab]
|
||||||
|
url = "${cfg.gitlab.url}"
|
||||||
|
project = "${cfg.gitlab.project}"
|
||||||
|
group = "${cfg.gitlab.group}"
|
||||||
|
|
||||||
|
[repos]
|
||||||
|
path = "${cfg.repos.path}"
|
||||||
|
''
|
||||||
|
+ lib.optionalString cfg.jira.enable ''
|
||||||
|
|
||||||
|
[jira]
|
||||||
|
url = "${cfg.jira.url}"
|
||||||
|
project_key = "${cfg.jira.projectKey}"
|
||||||
|
''
|
||||||
|
+ lib.optionalString cfg.vault.enable ''
|
||||||
|
|
||||||
|
[vault]
|
||||||
|
url = "${cfg.vault.url}"
|
||||||
|
'';
|
||||||
|
|
||||||
|
programs.bash.initExtra = ''
|
||||||
|
eval "$(${workCliPkg}/bin/work --show-completion bash 2>/dev/null)"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user