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.
cli
  • Go 82.4%
  • Nix 12.2%
  • Shell 5.4%
Find a file
2026-02-18 12:53:51 +01:00
.forgejo/default_merge_message chore(forjego): add default squash message 2025-04-20 22:15:48 +02:00
cmd/murp feat: move main.go to root (#33) 2025-05-19 07:48:59 +02:00
internal fix(mr): fix error where draft didn't work (#49) 2026-02-18 12:16:17 +01:00
scripts chore(release): remove autoadding of versions to version.nix in script 2025-10-07 10:30:56 +02:00
.envrc Load .env if it exists 2025-04-19 21:13:07 +02:00
.gitignore Add version support to nix 2025-09-19 12:01:52 +02:00
.golangci.yml chore: add golangci-lint and pre-commit (#41) 2025-09-21 16:31:18 +02:00
.goreleaser.yaml release: 0.2.2 2025-09-21 15:12:29 +02:00
.pre-commit-config.yaml chore: add govulncheck to pre-commit-hook 2025-10-15 12:42:56 +02:00
AGENTS.md feature: add agents.md 2026-02-18 10:54:54 +01:00
default.nix Fix some small errors in home manager module 2025-09-19 15:50:28 +02:00
flake.lock chore: add govulncheck to pre-commit-hook 2025-10-15 12:42:56 +02:00
flake.nix nix: update snapshot vendor hash 2026-02-18 12:53:51 +01:00
go.mod chore: add govulncheck to pre-commit-hook 2025-10-15 12:42:56 +02:00
go.sum Add 0.2.5 to nix 2026-01-20 07:42:20 +01:00
home-manager-example.nix Add overlay and homemanager configuration 2025-09-19 11:34:51 +02:00
home-manager-module.nix Fix some small errors in home manager module 2025-09-19 15:50:28 +02:00
LICENSE docs(license): Add license 2025-04-20 19:44:18 +02:00
main.go feat: move main.go to root (#33) 2025-05-19 07:48:59 +02:00
murp.nix Add version support to nix 2025-09-19 12:01:52 +02:00
overlay-example.nix Add overlay and homemanager configuration 2025-09-19 11:34:51 +02:00
overlay.nix Fix some small errors in home manager module 2025-09-19 15:50:28 +02:00
README.md docs: Restructure documentation 2025-09-21 16:36:17 +02:00
VERSION release 0.2.5 2026-01-20 07:35:45 +01:00
versions.nix Add 0.2.5 to nix 2026-01-20 07:42:20 +01:00

murp - 🦄🌈😃 (Magical Unicorn Rainbow Pal)

release

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:

  1. 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
    
  2. Generate default config by runing:

    murp config init
    
  3. Edit the generated config file at ~/.config/murp/config.yml with 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 VERSION with 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]