- Go 82.4%
- Nix 12.2%
- Shell 5.4%
| .forgejo/default_merge_message | ||
| cmd/murp | ||
| internal | ||
| scripts | ||
| .envrc | ||
| .gitignore | ||
| .golangci.yml | ||
| .goreleaser.yaml | ||
| .pre-commit-config.yaml | ||
| AGENTS.md | ||
| default.nix | ||
| flake.lock | ||
| flake.nix | ||
| go.mod | ||
| go.sum | ||
| home-manager-example.nix | ||
| home-manager-module.nix | ||
| LICENSE | ||
| main.go | ||
| murp.nix | ||
| overlay-example.nix | ||
| overlay.nix | ||
| README.md | ||
| VERSION | ||
| versions.nix | ||
murp - ✨🦄🌈😃 (Magical Unicorn Rainbow Pal)
Murp is a command-line tool designed to streamline your Git workflow, particularly when working with GitLab and Jira. It helps you create branches, manage merge requests, and maintain a consistent workflow between your issue tracking and version control systems.
Features
- Branch Management: Create branches with standardized naming conventions based on Jira tickets
- Merge Request Creation: Generate merge requests with proper titles, descriptions, and labels
- Jira Integration: Pull ticket information directly from Jira to populate branch names and merge requests
- GitLab Integration: Interact with GitLab's API to manage merge requests and labels
Installation
Go
# Install directly using go install
go install 0xee.cc/smgt/murp@latest
This requires that you have the Go binary path in your $PATH.
Nix
# Install
nix profile install git+https://0xee.cc/smgt/murp
# Update
nix profile upgrade murp
Using in a Flake
You can use murp in your own Nix flake by adding it to your inputs:
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
murp.url = "git+ssh://git@0xee.cc/smgt/murp.git";
};
outputs = { self, nixpkgs, murp, ... }:
let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
in {
# Available packages:
# - murp.packages.${system}.murp (default release version)
# - murp.packages.${system}.murp-snapshot (build from source)
# - murp.packages.${system}."murp.X.Y.Z" (specific versions)
devShells.${system}.default = pkgs.mkShell {
packages = [
murp.packages.${system}.default
# Other packages...
];
};
# Or in a NixOS configuration
# nixosConfigurations.myhost = nixpkgs.lib.nixosSystem {
# inherit system;
# modules = [
# ({ pkgs, ... }: {
# environment.systemPackages = [ murp.packages.${system}.default ];
# })
# ];
# };
};
}
Using with Home Manager
The flake provides a Home Manager module for easy configuration:
{
imports = [ inputs.murp.homeManagerModules.default ];
programs.murp = {
enable = true;
jira.ticketQuery = "project = MYPROJECT AND assignee = currentUser()";
gitlab.reviewers = [ "alice" "bob" ];
};
}
Using with Overlays
Apply the overlay to add murp packages to nixpkgs:
{
nixpkgs.overlays = [ inputs.murp.overlays.default ];
# Now pkgs.murp and pkgs.murp-snapshot are available
}
Environment Variables
GITLAB_TOKEN: Your GitLab personal access token (required)JIRA_API_ENDPOINT: URL to the Jira instance (required)JIRA_API_USER: Username you log in to Jira with (required)JIRA_API_TOKEN: Token for the username (required)
Configuration
Murp requires configuration for GitLab and Jira access:
-
Set your GitLab and Jira as an environment variable:
export GITLAB_TOKEN=your_gitlab_token export JIRA_API_ENDPOINT=https://example.atlassian.com export JIRA_API_USER=user@example.com export JIRA_API_TOKEN=your_jira_token -
Generate default config by runing:
murp config init -
Edit the generated config file at
~/.config/murp/config.ymlwith your preferences.
Usage
Create a Branch
murp git branch
This interactive command will:
- Ask if the branch is based on a Jira ticket
- If yes, fetch and display your assigned tickets
- Create a branch with a standardized name format
Create a Merge Request
murp mr create
This interactive command will:
- Detect the current branch
- Check for Jira ticket information in the branch name
- Suggest a title and description based on the ticket
- Allow you to select labels
- Create the merge request in GitLab
View Configuration
murp config show
Version Management (For Maintainers)
Available Versions
List all available versions:
./scripts/list-versions.sh [--remote]
Adding New Versions
After a release is published (supports Linux x86_64/arm64 and Darwin x86_64/arm64):
# Add a new version (fetches hashes for all available platforms)
./scripts/add-version.sh 0.2.2
# Add and make it default
./scripts/release-nix.sh 0.2.2 --make-default
Building Specific Versions
# Default version (automatically selects correct platform)
nix build .#murp
# Build from source
nix build .#murp-snapshot
# Specific version (supports Linux x86_64/arm64 and Darwin x86_64/arm64)
nix build '.#"murp.0.2.0"'
nix build '.#"murp.0.2.1"'
Release new version
- Update
VERSIONwith the new release number:echo -n X.Y.Z > VERSION - Commit the change,
git add VERSION && git commit --msg "release: X.Y.Z" - Tag the release
git tag X.Y.Z - Push to remote
git push && git push --tags - Run
goreleaser
License
This project is licensed under the MIT License - see the LICENSE file for details.
Contributing
[Contribution guidelines]