NixKraken logo

NixKraken provides a Home Manager module for managing GitKraken configuration files and profiles in a declarative and reproducible way.

important

This project is NOT affiliated with Axosoft (the makers of GitKraken) in any way.

NixKraken is only handling GitKraken's configuration, one still needs to purchase the product to benefit paid features. This is not a cracked GitKraken app.

Features

  • Declarative profiles: manage GitKraken profiles using Nix
  • Reproducible setup: ensure GitKraken is configured identically across several machines
  • Version control: keep GitKraken configuration in Git, tracking every change
  • Automated tooling: includes command-line tools to help manage authentication and themes

Contributing

Unlike GitKraken, NixKraken is free and open source: contributions are welcome!

The source code can be found on GitHub and issues and feature requests can be posted on the GitHub issue tracker.

To add new options, improve documentation, or fix bugs, please open a pull request.

License

The NixKraken source and documentation are released under the MIT License.

Quick Start

note

Not using Flakes? Follow our non-Flake installation guide instead.

This guide showcases a basic, working NixKraken configuration using Nix Flakes and Home Manager.

  1. Create a flake.nix file with the following content, which sets GitKraken username and email
{
  description = "A basic NixKraken setup";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
    home-manager.url = "github:nix-community/home-manager";
    home-manager.inputs.nixpkgs.follows = "nixpkgs";
    nixkraken.url = "github:nicolas-goudry/nixkraken";
  };

  outputs = { self, nixpkgs, home-manager, nixkraken }:
    let
      system = "x86_64-linux";
      pkgs = nixpkgs.legacyPackages.${system};
    in
    {
      homeConfigurations."your-username" = home-manager.lib.homeManagerConfiguration {
        inherit pkgs;

        modules = [
          # Import the NixKraken module
          nixkraken.homeManagerModules.nixkraken

          # Your configuration
          {
            programs.nixkraken = {
              enable = true;

              user = {
                name = "Your Name";
                email = "your.email@example.com";
              };
            };
          }
        ];
      };
    };
}
  1. Build and activate the configuration by running the command below in the same directory as flake.nix
home-manager switch --flake .#your-username

🎉 That's it! GitKraken will now be configured with the given name and email.

For more advanced options and non-Flake installation, see the installation section.

Installation

Before going further, please review the important information below.

  • Things to consider
    Important information about compatibility and setup you should read first.

Then, choose the right installation guide.

Considerations

important

The project is still in development. It's not early stage per se, but still is not stable enough to be considered "production ready".

Additionally, the branches and tags referenced inside this document may or may not exist at the time. This is expected.

Compatibility

Since GitKraken is a proprietary and unfree software, various aspects of this module's development rely on interacting with minified code that may change between releases. As a result, compatibility cannot be guaranteed, and the module is likely to break with each new GitKraken update.

When the module is confirmed to work with a specific GitKraken version, a tag matching that GitKraken version will be created. This process means that multiple tags may point to the same commit. For example, if a given commit works with version 11.0.0 and 11.1.0, both tags v11.0.0 and v11.1.0 will target this commit.

Stability

Development occurs on the main branch, which should be considered unstable and may not always be compatible with any particular GitKraken release.

Users seeking stability should use aforementioned versioned tags rather than the main branch. There's also the stable tag, which dynamically tracks the latest working release.

To use a specific version tag, modify the flake.nix inputs like this:

{
  # Use a specific version
  inputs.nixkraken.url = "github:nicolas-goudry/nixkraken/v11.1.0";

  # Or, to always get the latest stable version
  inputs.nixkraken.url = "github:nicolas-goudry/nixkraken/stable";
}

note

The examples above use Nix Flakes, please refer to the non-Flake installation guide to learn how to use a specific version of NixKraken.

Breakages may occur from time to time, potentially resulting in missing features, incomplete configuration, or general incompatibility between the module and the installed version of GitKraken.

Velocity

As the main GitKraken maintainer on nixpkgs and a daily GitKraken user, I strive to test the module with new versions and address issues as quickly as possible. Users are also encouraged to report any issues encountered - or even better: to contribute fixes! Pull requests are always welcome 🙂

Finally, updates to this module are provided on a best-effort basis, in my free time. While every attempt will be made to keep the module compatible with the latest GitKraken release, there is no strict update schedule. Users should be prepared for occasional delays in compatibility following new GitKraken releases.

Install with Flakes

There are two primary ways to use NixKraken with Flakes, depending on whether the home environment is managed as part of a NixOS system or as a standalone configuration.

Standalone Home Manager

Use this method if the user environment is managed with Home Manager on any OS (including NixOS, macOS, or other Linux distributions) through its own flake.nix.

Here is a complete, minimal flake.nix for a standalone setup:

{
  description = "Standalone Home Manager setup with NixKraken";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
    home-manager.url = "github:nix-community/home-manager";
    home-manager.inputs.nixpkgs.follows = "nixpkgs";
    nixkraken.url = "github:nicolas-goudry/nixkraken";
  };

  outputs = { self, nixpkgs, home-manager, nixkraken }:
    let
      system = "x86_64-linux";
      pkgs = nixpkgs.legacyPackages.${system};
    in
    {
      homeConfigurations."your-username" = home-manager.lib.homeManagerConfiguration {
        inherit pkgs;

        modules = [
          # 1. Import the NixKraken module
          nixkraken.homeManagerModules.nixkraken

          # 2. Add configuration
          {
            programs.nixkraken.enable = true;
            # ... add other options here
          }
        ];
      };
    };
}

Integrated with NixOS

Use this method if the user environment is managed directly within the NixOS system's flake.nix.

Here is a complete, minimal flake.nix for a NixOS setup:

{
  description = "NixOS system with NixKraken for a user";

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
    home-manager.url = "github:nix-community/home-manager";
    home-manager.inputs.nixpkgs.follows = "nixpkgs";
    nixkraken.url = "github:nicolas-goudry/nixkraken";
  };

  outputs = { self, nixpkgs, home-manager, nixkraken }: {
    nixosConfigurations."your-hostname" = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";

      modules = [
        # Import the main Home Manager module for NixOS
        home-manager.nixosModules.home-manager

        # System configuration
        {
          users.users."your-username" = {
            isNormalUser = true;
            extraGroups = [ "wheel" ];
          };

          # Configure Home Manager for this user
          home-manager.users."your-username" = {
            imports = [
              # 1. Import the NixKraken module
              nixkraken.homeManagerModules.nixkraken
            ];

            # 2. Add configuration
            programs.nixkraken.enable = true;
            # ... add other options here
          };
        }
      ];
    };
  };
}

Install without Flakes

The simplest way to use NixKraken without Flakes is to fetch it directly from GitHub inside home.nix.

{ lib, pkgs, ... }:

{
  imports = [
    # Import the NixKraken module from the fetched source (ie. "${fetcher}/module.nix")
    "${pkgs.fetchFromGitHub {
      owner = "nicolas-goudry";
      repo = "nixkraken";
      rev = "main";
      # rev = "<branch-name|commit-sha>";
      # tag = "<tag-name>"; # Use either `rev` or `tag`, not both!
      hash = lib.fakeHash; # Make sure to read the callout below
    }}/module.nix"
  ];
}

warning

About lib.fakeHash

A common pattern in Nix is to use a fake hash like lib.fakeHash or an empty string ("") as a placeholder.

When the configuration is built, the evaluation will fail. But the error message will output the expected hash, which can then be copied back into the configuration.

To get the hash without a failed evaluation, refer to the section on how to retrieve the release hash.

Alternative methods

If other fetchers or a dependency pinning tool should be used, see the options below.

Using other Nix fetchers

fetchzip
{ lib, pkgs, ... }:

{
  imports = [
    "${pkgs.fetchzip {
      url = "https://github.com/nicolas-goudry/nixkraken/archive/main.zip";
      # url = "https://github.com/nicolas-goudry/nixkraken/archive/<branch-name|commit-sha>.zip";
      # url = "https://github.com/nicolas-goudry/nixkraken/archive/refs/tags/<tag-name>.zip";
      hash = "<retrieved-hash>";
      # hash = lib.fakeHash;
    }}/module.nix"
  ];
}
fetchgit
{ lib, pkgs, ... }:

{
  imports = [
    "${pkgs.fetchgit {
      url = "https://github.com/nicolas-goudry/nixkraken.git";
      rev = "main";
      # rev = "<branch-name|commit-sha>";
      # tag = "<tag-name>"; # Use either `rev` or `tag`, not both!
      hash = "<retrieved-hash>";
      # hash = lib.fakeHash;
    }}/module.nix"
  ];
}
fetchTarball
{ lib, ... }:

{
  imports = [
    "${builtins.fetchTarball {
      url = "https://github.com/nicolas-goudry/nixkraken/archive/main.tar.gz";
      # url = "https://github.com/nicolas-goudry/nixkraken/archive/<branch-name|commit-sha>.tar.gz";
      # url = "https://github.com/nicolas-goudry/nixkraken/archive/refs/tags/<tag-name>.tar.gz";
      sha256 = "<retrieved-hash>";
      # sha256 = lib.fakeSha256;
    }}/module.nix"
  ];
}

Using pinning tools

niv

niv add nicolas-goudry/nixkraken
let
  sources = import ./nix/sources.nix;
in {
  imports = [
    sources.nixkraken + "/module.nix"
  ];
}

caution

These instructions are untested. Please report an issue if they are not working, or suggest a PR fixing them.

npins

npins add github nicolas-goudry nixkraken
let
  sources = import ./npins;
in {
  imports = [
    sources.nixkraken + "/module.nix"
  ];
}

caution

These instructions are untested. Please report an issue if they are not working, or suggest a PR fixing them.

Retrieve release hash

Users willing to avoid using lib.fakeHash can retrieve the release hash using either nix-prefetch-git or nix-prefetch-url, as shown below.

nix-prefetch-git

The command below outputs various information about NixKraken sources.

nix-prefetch-git --url git@github.com:nicolas-goudry/nixkraken.git --quiet
// Example response
{
  "url": "git@github.com:nicolas-goudry/nixkraken.git",
  "rev": "812365dfd82571d82751b192c90d3d6eca16d04c",
  "date": "2025-06-17T15:40:02+02:00",
  "path": "/nix/store/v42lgzcdygj8nyj193vrysi8il0aj8a5-nixkraken",
  "sha256": "1cpvfzdb7m16pj5ykj9dppyr1rm1gnzvhyb5qvvmg5ihbmqx6cgh",
  "hash": "sha256-8DHTcV0wllf3xmV5uL99oeaQ/b0tyemLvCbUs9p3+7I=",
  "fetchLFS": false,
  "fetchSubmodules": false,
  "deepClone": false,
  "leaveDotGit": false
}

Here, the relevant key is hash. Tools like jq can be used to extract it directly from the JSON output of the command:

nix-prefetch-git \
  --url git@github.com:nicolas-goudry/nixkraken.git \
  --quiet \
| jq -r '.hash'

💡 Tips

To retrieve the sources hash at a given point in history (tag or commit), use --rev <tag-name|commit-sha>.

To retrieve the sources hash for a given branch, use --rev refs/heads/<branch-name>.

nix-prefetch-url

The following commands use nix-prefetch-url to get the Nix base32 hash from the unpacked sources archive retrieved from GitHub. The hash is then handed to nix-hash (or nix hash convert, which requires the nix-command experimental feature to be enabled) to get the final hash expected by fetchers.

nix-hash \
  --to-sri \
  --type sha256 \
  "$(nix-prefetch-url \
       --unpack "https://github.com/nicolas-goudry/nixkraken/archive/main.tar.gz")"

# ...or using new nix commands
nix hash convert \
  --hash-algo sha256 \
  --from nix32 \
  "$(nix-prefetch-url \
       --unpack "https://github.com/nicolas-goudry/nixkraken/archive/main.tar.gz")"

💡 Tips

To retrieve the sources hash at a given tag, replace main.tar.gz by refs/tags/<tag-name>.tar.gz.

To retrieve the sources hash at a given point in history (branch or commit), replace main.tar.gz by <branch-name|commit-sha>.tar.gz.

Configuration examples

note

These examples cover some of the most common use cases. For a complete list of available settings, please see the module options reference.

Basic setup

{
  programs.nixkraken.enable = true;
}

Get rid of initial distractions

{
  programs.nixkraken = {
    enable = true;

    # Accept the End User License Agreement
    acceptEULA = true;

    # Don't show the introduction tutorial on first launch
    skipTutorial = true;

    # Disable promotional and non-essential notifications
    # WARNING: this will not work without a paid subscription
    notifications = {
      feature = false;
      help = false;
      marketing = false;
    };
  };
}

Manage multiple profiles

important

Only paid accounts can set profiles beyond the default one.

{
  programs.nixkraken = {
    enable = true;

    # Configure the default profile
    user = {
      name = "Personal Name";
      email = "personal@email.com"
    };

    # Configure a separate, named profile for work
    profiles = [
      {
        name = "Work";

        user = {
          name = "Work Name";
          email = "work@email.com";
        };

        ui.theme = "dark";
      }
    ];
  };
}

Inherit options from default profile

{
  # Notice the "rec" keyword? This is a recursive attribute set, allowing us to
  # reuse previously defined keys anywhere inside this attribute set.
  programs.nixkraken = rec {
    enable = true;

    # Configure graph columns
    graph = {
      compact = true;
      showAuthor = true;
      showDatetime = true;
      showMessage = true;
      showRefs = false;
      showSHA = false;
      showGraph = true;
    };

    profiles = [
      {
        # Use same graph settings as default profile
        inherit graph;

        name = "Other profile";
      }
    ];
  };
}

Custom terminal

{
  programs.nixkraken = {
    enable = true;

    # Define Ghostty as the default external terminal
    tools.terminal = {
      default = "custom";
      package = pkgs.ghostty;
    };
  };
}

Custom theme

{
  programs.nixkraken = {
    enable = true;

    ui = {
      # Add Mocha variant of Catppuccin theme for GitKraken
      extraThemes = [ "${pkgs.catppuccin-gitkraken}/catppuccin-mocha.jsonc" ];

      # Enable extra theme
      theme = "catppuccin-mocha.jsonc";
    };
  };
}

Caveats

Reverted paid features

There has been reports of paid features configuration being reverted by the app on the first launch due to the user being signed out of their account.

Although users can login to their GitKraken account from within the application, we recommend using the gk-login package — which comes with NixKraken — to sign in with GitKraken.

gk-login currently supports signing in to GitKraken through the following OAuth providers:

  • GitHub
  • GitLab
  • BitBucket
  • Azure
  • Google

The security implications of using gk-login are the same as using the application, since it is replicating the code used by GitKraken. Also, the code can easily be reviewed and is thoroughly documented.

âš¡ Key takeaway

To prevent paid features to be reverted on first launch, use gk-login.

Mutability

Although NixKraken allows to configure GitKraken using Nix language, the resulting configuration is not immutable.

Contrary to lots of other application modules provided by Home Manager, NixKraken does not use Nix capabilities to write the configuration file.

This is due to GitKraken using the configuration files to store application state alongside options. Therefore, if the configuration files were not writable, the application would fail to work as expected.

The module instead uses various Bash scripts to safely update the configuration files without overwriting application state.

This also means that there can be a configuration drift between the application and the Nix code. This is a known issue which will require users to refrain updating the configuration in-app and instead use NixKraken options.

âš¡ Key takeaway

To avoid configuration drift, always make changes to the Nix configuration, not in the GitKraken UI.

Let NixKraken be the single source of truth for GitKraken settings.

Long installation time

GitKraken being closed source, end users will always have to build the package. Although this process is usually not very long, since GitKraken is not built from sources, building the package is still longer than fetching a pre-built binary.

Plus, there has been reports of "stuck" builds in the past. This is most often due to a combination of several factors:

âš¡ Key takeaway

To dramatically speed up the installation process, we highly recommend to setup NixKraken's binary cache.

Binary cache

As explained in the caveats section, because GitKraken is an unfree package, its builds will not be cached in the default Nix cache (cache.nixos.org). This is expected and somewhat documented in nixpkgs manual.

For this reason, NixKraken is using Garnix' public free cache for GitKraken builds. The cache is populated using Garnix' GitHub integration and uses dedicated Flake outputs to build and push the evaluated builds to the cache.

By using this cache, installing GitKraken is faster than ever. A huge thanks to Garnix!

Find below several methods to enable this cache.

warning

Users who wish to use the programs.nixkraken.package option cannot benefit from the cache unless they use one of the nixpkgs commits listed below.

List of cached commits

Non-NixOS users

Declarative with Flakes

Users managing their configuration declaratively through a flake.nix can add the cache settings to the Flake's nixConfig attribute:

{
  description = "Declarative Nix configuration";

  nixConfig = {
    extra-substituters = "https://cache.garnix.io";
    extra-trusted-public-keys = "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=";
  };

  inputs = { /* ... */ };
  outputs = { /* ... */ };
}

Imperative with nix.conf

Alternatively, the nix.conf file (usually located at /etc/nix/nix.conf) can be imperatively edited to add the following configuration:

extra-substituters = https://cache.garnix.io
extra-trusted-public-keys = cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=

NixOS users

NixOS users can configure the Nix configuration file declaratively, using the following option in their system configuration:

{
  nix.extraOptions = ''
    extra-substituters = https://cache.garnix.io
    extra-trusted-public-keys = cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=
  '';
}

Module options

All NixKraken options are available under the programs.nixkraken attribute.

This chapter provides a complete reference for every available option. For practical, real-world examples, refer to the configuration examples.

Group options

Options are organized into logical groups exposed as children attributes to programs.nixkraken (ie. the graph options are available at programs.nixkraken.graph).

Find below the list of available groups:

Additionally, groups can be found in the left navigation menu.

Root options

The options below are available under programs.nixkraken.

acceptEULA

Accept the End User License Agreement.

Type: boolean

Default: false

defaultProfile.icon

Icon avatar for the default profile.

Type: constrained string

Valid values:

  • Albert Keifstein
  • AquaKeif
  • Architect Keif
  • Brainy Keif
  • Butler Keif
  • Captain FalKeif
  • Detective Keifachu
  • Developer Keif 1
  • Developer Keif 2
  • Dia de los Muertos
  • Dr. Keif Stanz
  • Flash Keif
  • Git Mage
  • Gitty Up
  • Gourmet Sh*t
  • Gravatar
  • Headphones Keif
  • Kaken Claus
  • Kefie the Riveter
  • Keif Snow
  • Keif the Kraken
  • Keifa Lovelace
  • Keifer Simpson
  • Keiferella
  • Keiflo Ren
  • Keiflock Holmes
  • Keifuto
  • Kraken Hook
  • Kraknos
  • Leprekraken
  • LinKeif
  • LumberKeif
  • Martian Kraken
  • Mother of Krakens
  • Neo Keif
  • OG
  • Power Gitter
  • Princess Keifia
  • Pro Keif
  • Rasta Keif
  • Rise of SkyKraken
  • Sir Keif
  • Snowkraken
  • Space Rocket Keif
  • Stranger Krakens
  • The Kraken Who Lived
  • Thunder Kraken
  • Top Git
  • Uma Kraken
  • Vanilla Keif
  • Velma Keif
  • Wonder Kraken
  • Yoda Keif

Default: Gravatar

defaultProfile.name

Name of the default profile.

Type: string

Default: Default Profile

enable

Whether to enable GitKraken.

Type: boolean

Default: false

Example: true

logLevel

Set log level in activity log.

Type: constrained string

Valid values:

  • standard
  • extended
  • silly

Default: standard

package

The GitKraken package to use.

important

This option:

  • requires to allow unfree packages
  • is mutually exclusive with version

We advise users to use the version option instead of this one, since we cannot guarantee compatibility when it is used.

Also be aware that the binary cache might not apply.

Type: null or package

Default: null

Example: pkgs.unstable.gitkraken

skipTutorial

Skip the introduction tutorial.

Type: boolean

Default: false

version

The GitKraken version to use.

important

When using this option, the GitKraken package will automatically be fetched from a commit of nixpkgs known to be available in the cache. To benefit from the cache, users should first configure it.

This option is mutually exclusive with package.

Type: null or constrained string

Valid values:

  • 11.1.0
  • 11.1.1
  • 11.2.0
  • 11.2.1
  • 11.3.0
  • 11.4.0

Default: 11.4.0


This documentation was automatically generated from the NixKraken configuration options.

Generated on: 2025-09-14

datetime

Date/time settings.

Type: attribute set of (submodule)

Default: { }

datetime.dateFormat

Date format as Moment.js format string.

Type: null or string

Default: null

datetime.dateVerboseFormat

Verbose date format as Moment.js format string.

Type: null or string

Default: null

datetime.dateWordFormat

Date word format as Moment.js format string.

Type: null or string

Default: null

datetime.format

Date and time format as Moment.js format string.

Type: null or string

Default: null

datetime.locale

Date/time locale.

note

Set to null to use default system locale.

Type: null or constrained string

Valid values:

  • af
  • sq
  • ar
  • ar-dz
  • ar-kw
  • ar-ly
  • ar-ma
  • ar-sa
  • ar-tn
  • hy-am
  • az
  • bm
  • eu
  • be
  • bn
  • bn-bd
  • bs
  • br
  • bg
  • my
  • km
  • ca
  • tzm
  • tzm-latn
  • zh-cn
  • zh-hk
  • zh-mo
  • zh-tw
  • cv
  • hr
  • cs
  • da
  • nl
  • nl-be
  • en
  • en-au
  • en-ca
  • en-in
  • en-ie
  • en-il
  • en-nz
  • en-sg
  • en-gb
  • en-us
  • eo
  • et
  • fo
  • fil
  • fi
  • fr
  • fr-ca
  • fr-ch
  • fy
  • gl
  • ka
  • de
  • de-at
  • de-ch
  • el
  • gu
  • he
  • hi
  • hu
  • is
  • id
  • ga
  • it
  • it-ch
  • ja
  • jv
  • kn
  • kk
  • tlh
  • gom-deva
  • gom-latn
  • ko
  • ku
  • ky
  • lo
  • lv
  • lt
  • lb
  • mk
  • ms-my
  • ms
  • ml
  • dv
  • mt
  • mi
  • mr
  • mn
  • me
  • ne
  • se
  • nb
  • nn
  • oc-lnc
  • fa
  • pl
  • pt
  • pt-br
  • pa-in
  • ro
  • ru
  • gd
  • sr
  • sr-cyrl
  • sd
  • si
  • ss
  • sk
  • sl
  • es
  • es-do
  • es-mx
  • es-us
  • sw
  • sv
  • tl-ph
  • tg
  • tzl
  • ta
  • te
  • tet
  • th
  • bo
  • tr
  • tk
  • uk
  • ur
  • ug-cn
  • uz
  • uz-latn
  • vi
  • cy
  • yo

Default: null


This documentation was automatically generated from the NixKraken configuration options.

Generated on: 2025-09-14

git

Git settings.

Type: attribute set of (submodule)

Default: { }

git.autoPrune

Automatically remove any remote-tracking references that no longer exist on the remote.

Type: boolean

Default: true

git.defaultBranch

Set the default name when initializing a new repo.

note

When not set, the app defaults to main.

Type: null or string

Default: null

git.deleteOrigAfterMerge

Automatically delete .orig files created by GitKraken client during a merge.

Type: boolean

Default: false

git.detectConflicts

Enable proactive detection of merge conflicts with target branch.

Type: boolean

Default: true

git.fetchInterval

Set the number of minutes between auto-fetches, or 0 to disable them.

note

All visible remotes for the repository will be fetched.

Type: integer between 0 and 60 (both inclusive)

Default: 1

git.package

The git package to use.

note

This is only used if git.useBundledGit is disabled.

Type: package

Default: pkgs.git

git.syncConfig

Automatically update the global Git configuration with the name and email address of the current profile.

note

If the global Git configuration is managed through Nix, this option will not have any effect.

Type: boolean

Default: false

git.updateSubmodules

Automatically keep submodules up to date when performing Git actions.

Type: boolean

Default: true

git.useBundledGit

When this option is enabled, GitKraken will use the bundled NodeGit library.

When this option is disabled, GitKraken will use the git package instead of the NodeGit library for certain Git actions including fetching and committing. This may provide increased performance and compatibility with certain projects and development environments.

If disabled, the git.package option is used to install Git and set it as the selected Git binary used by GitKraken.

Type: boolean

Default: false

git.useGitCredentialManager

Use the Git credential manager to access Git repositories.

Type: boolean

Default: false


This documentation was automatically generated from the NixKraken configuration options.

Generated on: 2025-09-14

gpg

GPG settings.

Type: attribute set of (submodule)

Default: { }

gpg.allowedSigners

File used for SSH signature verification.

warning

This option can only be defined if format is set to ssh.

note

When null, the global git configuration value is used.

Type: null or string or absolute path

Default: null

gpg.format

Format to use for commit signing.

Type: constrained string

Valid values:

  • openpgp
  • ssh

Default: openpgp

gpg.package

The gnupg package to use.

Used for commit signing.

warning

When using ssh format, this must be changed from the default.

Type: package

Default: pkgs.gnupg

gpg.program

Binary from the package to use.

Type: string

Default: bin/${pkgs.gnupg.mainProgram}

Example: ssh-keygen

gpg.signCommits

Enable commit signature.

Type: null or boolean

Default: config.programs.git.signing.signByDefault

gpg.signTags

Enable tag signature.

Type: null or boolean

Default: config.programs.git.signing.signByDefault

gpg.signingKey

Private key to use for commit signing.

When using openpgp format, this is the identifier of the GPG key used for signing.

When using ssh format, this is the path to the SSH private key used for signing.

Type: null or string or absolute path

Default: config.programs.git.signing.key

Example: EC6624FA72B9487E


This documentation was automatically generated from the NixKraken configuration options.

Generated on: 2025-09-14

graph

Commit graph settings.

Type: attribute set of (submodule)

Default: { }

graph.compact

Enable compact graph columns.

Type: boolean

Default: false

graph.highlightRows

Highlight associated rows when hovering over a branch.

Type: boolean

Default: true

graph.lazy

Enable commits lazy loading.

note

Additional commits will be loaded when reaching the earliest commit in the graph.

Type: boolean

Default: true

graph.maxCommits

Maximum number of commits to show in the commit graph. Minimum value is 500.

note

Lower counts may help improve performance.

Type: null or (positive integer, meaning >0)

Default: 2000

graph.showAll

Always show all commits in repository.

warning

This setting may cause performance issue with large repositories (like nixpkgs).

Type: boolean

Default: false

graph.showAuthor

Show commit author.

Type: boolean

Default: false

graph.showDatetime

Show commit date/time.

Type: boolean

Default: false

graph.showDesc

Show commit description.

Type: null or constrained string

Valid values:

  • always
  • hover
  • never

Default: always

graph.showGhostRefs

Show ghost branch/tag when hovering over or selecting a commit.

Type: boolean

Default: true

graph.showGraph

Show commit tree.

Type: boolean

Default: true

graph.showMessage

Show commit message.

Type: boolean

Default: true

graph.showRefs

Show branches and tags.

Type: boolean

Default: true

graph.showSHA

Show commit SHA.

Type: boolean

Default: false

graph.useAuthorInitials

Use author initials instead of avatars.

Type: boolean

Default: false

graph.useGenericRemoteIcon

Use generic remote icon instead of hosting service icon.

Type: boolean

Default: false


This documentation was automatically generated from the NixKraken configuration options.

Generated on: 2025-09-14

notifications

Notifications settings.

Type: attribute set of (submodule)

Default: { }

notifications.enable

Whether to enable desktop notifications.

Type: boolean

Default: false

Example: true

notifications.feature

Receive new features notifications.

Type: boolean

Default: true

notifications.help

Receive help notifications.

Type: boolean

Default: true

notifications.marketing

Receive marketing notifications.

warning

Disabling this option without a paid subscription will have no effect.

Type: boolean

Default: true

notifications.position

Notification location within window.

Type: constrained string

Valid values:

  • top-left
  • top-right
  • bottom-left
  • bottom-right

Default: bottom-left

notifications.system

Receive system notifications.

Type: boolean

Default: true


This documentation was automatically generated from the NixKraken configuration options.

Generated on: 2025-09-14

profiles

Additional profiles configuration.

warning

Only paid accounts can set multiple profiles beside the default one.

note

Additional profiles do not inherit the default profile options.

Refer to configuration example for details on how to implement inheritance from default profile.

Type: list of (submodule)

Default: [ ]

profiles.*.icon

Icon avatar for this profile.

Type: constrained string

Valid values:

  • Albert Keifstein
  • AquaKeif
  • Architect Keif
  • Brainy Keif
  • Butler Keif
  • Captain FalKeif
  • Detective Keifachu
  • Developer Keif 1
  • Developer Keif 2
  • Dia de los Muertos
  • Dr. Keif Stanz
  • Flash Keif
  • Git Mage
  • Gitty Up
  • Gourmet Sh*t
  • Gravatar
  • Headphones Keif
  • Kaken Claus
  • Kefie the Riveter
  • Keif Snow
  • Keif the Kraken
  • Keifa Lovelace
  • Keifer Simpson
  • Keiferella
  • Keiflo Ren
  • Keiflock Holmes
  • Keifuto
  • Kraken Hook
  • Kraknos
  • Leprekraken
  • LinKeif
  • LumberKeif
  • Martian Kraken
  • Mother of Krakens
  • Neo Keif
  • OG
  • Power Gitter
  • Princess Keifia
  • Pro Keif
  • Rasta Keif
  • Rise of SkyKraken
  • Sir Keif
  • Snowkraken
  • Space Rocket Keif
  • Stranger Krakens
  • The Kraken Who Lived
  • Thunder Kraken
  • Top Git
  • Uma Kraken
  • Vanilla Keif
  • Velma Keif
  • Wonder Kraken
  • Yoda Keif

Default: Gravatar

profiles.*.name

Name of this profile.

Type: string

Default: null


This documentation was automatically generated from the NixKraken configuration options.

Generated on: 2025-09-14

profiles.*.git

Git settings for this profile.

Type: attribute set of (submodule)

Default: { }

profiles.*.git.autoPrune

Automatically remove any remote-tracking references that no longer exist on the remote.

Type: boolean

Default: true

profiles.*.git.defaultBranch

Set the default name when initializing a new repo.

note

When not set, the app defaults to main.

Type: null or string

Default: null

profiles.*.git.deleteOrigAfterMerge

Automatically delete .orig files created by GitKraken client during a merge.

Type: boolean

Default: false

profiles.*.git.detectConflicts

Enable proactive detection of merge conflicts with target branch.

Type: boolean

Default: true

profiles.*.git.fetchInterval

Set the number of minutes between auto-fetches, or 0 to disable them.

note

All visible remotes for the repository will be fetched.

Type: integer between 0 and 60 (both inclusive)

Default: 1

profiles.*.git.updateSubmodules

Automatically keep submodules up to date when performing Git actions.

Type: boolean

Default: true

profiles.*.git.useGitCredentialManager

Use the Git credential manager to access Git repositories.

Type: boolean

Default: false


This documentation was automatically generated from the NixKraken configuration options.

Generated on: 2025-09-14

profiles.*.gpg

GPG settings for this profile.

Type: attribute set of (submodule)

Default: { }

profiles.*.gpg.allowedSigners

File used for SSH signature verification.

warning

This option can only be defined if format is set to ssh.

note

When null, the global git configuration value is used.

Type: null or string or absolute path

Default: null

profiles.*.gpg.format

Format to use for commit signing.

Type: constrained string

Valid values:

  • openpgp
  • ssh

Default: openpgp

profiles.*.gpg.signCommits

Enable commit signature.

Type: null or boolean

Default: config.programs.git.signing.signByDefault

profiles.*.gpg.signTags

Enable tag signature.

Type: null or boolean

Default: config.programs.git.signing.signByDefault

profiles.*.gpg.signingKey

Private key to use for commit signing.

When using openpgp format, this is the identifier of the GPG key used for signing.

When using ssh format, this is the path to the SSH private key used for signing.

Type: null or string or absolute path

Default: config.programs.git.signing.key

Example: EC6624FA72B9487E


This documentation was automatically generated from the NixKraken configuration options.

Generated on: 2025-09-14

profiles.*.graph

Commit graph settings for this profile.

Type: attribute set of (submodule)

Default: { }

profiles.*.graph.compact

Enable compact graph columns.

Type: boolean

Default: false

profiles.*.graph.highlightRows

Highlight associated rows when hovering over a branch.

Type: boolean

Default: true

profiles.*.graph.showAuthor

Show commit author.

Type: boolean

Default: false

profiles.*.graph.showDatetime

Show commit date/time.

Type: boolean

Default: false

profiles.*.graph.showDesc

Show commit description.

Type: null or constrained string

Valid values:

  • always
  • hover
  • never

Default: always

profiles.*.graph.showGhostRefs

Show ghost branch/tag when hovering over or selecting a commit.

Type: boolean

Default: true

profiles.*.graph.showGraph

Show commit tree.

Type: boolean

Default: true

profiles.*.graph.showMessage

Show commit message.

Type: boolean

Default: true

profiles.*.graph.showRefs

Show branches and tags.

Type: boolean

Default: true

profiles.*.graph.showSHA

Show commit SHA.

Type: boolean

Default: false

profiles.*.graph.useAuthorInitials

Use author initials instead of avatars.

Type: boolean

Default: false

profiles.*.graph.useGenericRemoteIcon

Use generic remote icon instead of hosting service icon.

Type: boolean

Default: false


This documentation was automatically generated from the NixKraken configuration options.

Generated on: 2025-09-14

profiles.*.ssh

SSH settings for this profile.

Type: attribute set of (submodule)

Default: { }

profiles.*.ssh.privateKey

Path to the SSH private key file to use.

Type: null or absolute path

Default: null

profiles.*.ssh.publicKey

Path to the SSH public key file to use.

Type: null or absolute path

Default: null

profiles.*.ssh.useLocalAgent

Use local SSH agent instead of defining SSH key to use.

Type: boolean

Default: config.programs.ssh.enable


This documentation was automatically generated from the NixKraken configuration options.

Generated on: 2025-09-14

profiles.*.tools

External tools settings for this profile.

Type: attribute set of (submodule)

Default: { }

profiles.*.tools.diff

Preferred diff tool.

Type: constrained string

Valid values:

  • none
  • use-configured-merge-tool
  • git-config

Default: use-configured-merge-tool

profiles.*.tools.editor.fileExtraOptions

Extra options passed to the editor when opening a file.

note

This option will not have any effect unless a custom external editor is set with tools.editor.package.

The following variables are available:

  • $REPO_PATH: path to the repository on filesystem
  • $FILE_PATH: path to the file on filesystem

Type: null or string

Default: null

profiles.*.tools.editor.repoExtraOptions

Extra options passed to the editor when opening a repository.

note

This option will not have any effect unless a custom external editor is set with tools.editor.package.

The following variable is available:

  • $REPO_PATH: path to the repository on filesystem

Type: null or string

Default: null

profiles.*.tools.merge

Preferred merge tool.

Type: constrained string

Valid values:

  • none
  • git-config

Default: git-config

profiles.*.tools.terminal.extraOptions

Extra options passed to the terminal.

note

This option will not have any effect unless a custom external terminal is set with tools.terminal.package.

The following variable is available:

  • %d: path to the repository on filesystem

Type: null or string

Default: null


This documentation was automatically generated from the NixKraken configuration options.

Generated on: 2025-09-14

profiles.*.ui

UI settings for this profile.

Type: attribute set of (submodule)

Default: { }

profiles.*.ui.cli.autocomplete.enable

Enable autocomplete suggestions.

Type: boolean

Default: true

profiles.*.ui.cli.autocomplete.tabBehavior

Behavior of the tab key in the integrated terminal when autocomplete is enabled.

When set to enter, the highlighted suggestion will be entered.

When set to navigation, the next suggestion will be selected.

When set to ignore, the tab key will be sent to the shell.

Type: null or constrained string

Valid values:

  • enter
  • ignore
  • navigation

Default: ignore

profiles.*.ui.cli.cursor

Style of the cursor in the integrated terminal.

Type: constrained string

Valid values:

  • bar
  • block
  • underline

Default: block

profiles.*.ui.cli.defaultPath

Default directory to open terminal tabs into.

Type: null or absolute path

Default: null

Example: ${config.home.homeDirectory}

profiles.*.ui.cli.fontFamily

Font family to use in the integrated terminal.

Type: null or string

Default: null

Example: Liberation Mono

profiles.*.ui.cli.fontSize

Font size to use in the integrated terminal.

Type: positive integer, meaning >0

Default: 12

profiles.*.ui.cli.graph.enable

Show graph panel by default.

note

This setting only affects terminal tabs when the current directory is a repository.

Type: boolean

Default: true

profiles.*.ui.cli.graph.position

Default graph panel position.

note

This setting only affects terminal tabs when the current directory is a repository.

Type: null or constrained string

Valid values:

  • bottom
  • left
  • right
  • top

Default: bottom

profiles.*.ui.cli.lineHeight

Line height in the integrated terminal.

Type: positive integer, meaning >0

Default: 1

profiles.*.ui.editor.eol

End of line character to use in the editor.

Type: constrained string

Valid values:

  • CRLF
  • LF

Default: LF

profiles.*.ui.editor.fontFamily

Font family to use in the editor.

Type: null or string

Default: null

Example: Liberation Mono

profiles.*.ui.editor.fontSize

Font size to use in the editor.

Type: positive integer, meaning >0

Default: 12

profiles.*.ui.editor.lineNumbers

Show line numbers in the editor.

Type: boolean

Default: true

profiles.*.ui.editor.syntaxHighlight

Enable syntax highlighting in the editor.

Type: boolean

Default: true

profiles.*.ui.editor.tabSize

Size of the indentation in the editor.

Type: positive integer, meaning >0

Default: 4

profiles.*.ui.editor.wrap

Enable word wrap in the editor.

Type: boolean

Default: false

profiles.*.ui.launchpad.collapsed

Collapse Launchpad tab.

Type: boolean

Default: false

profiles.*.ui.launchpad.compact

Enable compact Launchpad view.

Type: boolean

Default: false

profiles.*.ui.launchpad.showComments

Show comments.

This setting is relevant in the following Launchpad views: Personal Issues, Personal all, Personal snoozed, Team issues.

Type: boolean

Default: true

profiles.*.ui.launchpad.showFixVersions

Show fix versions.

This setting is relevant in the following Launchpad views: Personal Issues, Personal all, Personal snoozed, Team issues.

Type: boolean

Default: false

profiles.*.ui.launchpad.showLabels

Show labels.

This setting is relevant in the following Launchpad views: Personal PR, Personal Issues, Personal all, Personal snoozed, Team PR, Team issues.

Type: boolean

Default: true

profiles.*.ui.launchpad.showLikes

Show likes.

Type: boolean

Default: false

profiles.*.ui.launchpad.showLinesChanged

Show lines changed.

This setting is relevant in the following Launchpad views: Personal PR, Personal all, Personal snoozed, Team PR.

Type: boolean

Default: true

profiles.*.ui.launchpad.showMentions

Show mentions.

Type: boolean

Default: false

profiles.*.ui.launchpad.showMilestones

Show milestones.

This setting is relevant in the following Launchpad views: Personal PR, Personal Issues, Personal all, Personal snoozed, Team PR, Team issues.

Type: boolean

Default: true

profiles.*.ui.launchpad.showSprints

Show sprints.

This setting is relevant in the following Launchpad views: Personal Issues, Personal all, Personal snoozed, Team issues.

Type: boolean

Default: false

profiles.*.ui.launchpad.useAuthorInitials

Use author initials instead of avatars.

This setting is relevant in the following Launchpad views: Personal PR, Personal Issues, Personal all, Personal snoozed, Team PR, Team issues.

Type: boolean

Default: false

profiles.*.ui.rememberTabs

Remember open tabs when exiting.

Type: boolean

Default: true

profiles.*.ui.showLeftPanel

Show left panel showing remotes, worktrees, stashes, …

Type: boolean

Default: true

profiles.*.ui.showRepoSummary

Display WIP summary (for uncommitted changes on files like delete, add, edit, move) for repositories in Repository Management view.

Type: boolean

Default: true

profiles.*.ui.sortOrder

Sort files in right panel alphabetically.

Type: constrained string

Valid values:

  • ascending
  • descending

Default: ascending

profiles.*.ui.theme

UI theme.

note

Extra themes are referenced by their meta.name, ie. catppuccin-mocha.

Type: null or freeform string or constrained string

Valid values:

  • light
  • light-high-contrast
  • dark
  • dark-high-contrast
  • system

Default: system

Example: dark

profiles.*.ui.treeView

Display files in tree view mode in right panel.

Type: boolean

Default: false

profiles.*.ui.zoom

UI zoom percentage.

note

Zoom value is done in increment of 0.1 only. The value is truncated to a one decimal number.

This means that setting this option to 0.96 will result in 0.9 being applied.

Type: integer or floating point number between 0.8 and 1.3 (both inclusive)

Default: 1


This documentation was automatically generated from the NixKraken configuration options.

Generated on: 2025-09-14

profiles.*.user

User settings for this profile.

Type: attribute set of (submodule)

Default: { }

profiles.*.user.email

Email to use as commit author email.

important

This option is required when skipTutorial is enabled.

Type: null or string

Default: config.programs.git.userEmail

Example: email@example.com

profiles.*.user.name

Name to use as commit author name.

important

This option is required when skipTutorial is enabled.

Type: null or string

Default: config.programs.git.userName

Example: John Doe


This documentation was automatically generated from the NixKraken configuration options.

Generated on: 2025-09-14

ssh

SSH settings.

Type: attribute set of (submodule)

Default: { }

ssh.privateKey

Path to the SSH private key file to use.

Type: null or absolute path

Default: null

ssh.publicKey

Path to the SSH public key file to use.

Type: null or absolute path

Default: null

ssh.useLocalAgent

Use local SSH agent instead of defining SSH key to use.

Type: boolean

Default: config.programs.ssh.enable


This documentation was automatically generated from the NixKraken configuration options.

Generated on: 2025-09-14

tools

External tools settings.

Type: attribute set of (submodule)

Default: { }

tools.diff

Preferred diff tool.

Type: constrained string

Valid values:

  • none
  • use-configured-merge-tool
  • git-config

Default: use-configured-merge-tool

tools.editor.fileExtraOptions

Extra options passed to the editor when opening a file.

note

This option will not have any effect unless a custom external editor is set with tools.editor.package.

The following variables are available:

  • $REPO_PATH: path to the repository on filesystem
  • $FILE_PATH: path to the file on filesystem

Type: null or string

Default: null

tools.editor.package

External code/text editor.

Type: null or package

Default: null

tools.editor.repoExtraOptions

Extra options passed to the editor when opening a repository.

note

This option will not have any effect unless a custom external editor is set with tools.editor.package.

The following variable is available:

  • $REPO_PATH: path to the repository on filesystem

Type: null or string

Default: null

tools.merge

Preferred merge tool.

Type: constrained string

Valid values:

  • none
  • git-config

Default: git-config

tools.terminal.extraOptions

Extra options passed to the terminal.

note

This option will not have any effect unless a custom external terminal is set with tools.terminal.package.

The following variable is available:

  • %d: path to the repository on filesystem

Type: null or string

Default: null

tools.terminal.package

External terminal.

When set to null, the built-in terminal will be used.

Type: null or package

Default: null

Example: pkgs.alacritty


This documentation was automatically generated from the NixKraken configuration options.

Generated on: 2025-09-14

ui

UI settings.

Type: attribute set of (submodule)

Default: { }

ui.cli.autocomplete.enable

Enable autocomplete suggestions.

Type: boolean

Default: true

ui.cli.autocomplete.tabBehavior

Behavior of the tab key in the integrated terminal when autocomplete is enabled.

When set to enter, the highlighted suggestion will be entered.

When set to navigation, the next suggestion will be selected.

When set to ignore, the tab key will be sent to the shell.

Type: null or constrained string

Valid values:

  • enter
  • ignore
  • navigation

Default: ignore

ui.cli.cursor

Style of the cursor in the integrated terminal.

Type: constrained string

Valid values:

  • bar
  • block
  • underline

Default: block

ui.cli.defaultPath

Default directory to open terminal tabs into.

Type: null or absolute path

Default: null

Example: ${config.home.homeDirectory}

ui.cli.fontFamily

Font family to use in the integrated terminal.

Type: null or string

Default: null

Example: Liberation Mono

ui.cli.fontSize

Font size to use in the integrated terminal.

Type: positive integer, meaning >0

Default: 12

ui.cli.graph.enable

Show graph panel by default.

note

This setting only affects terminal tabs when the current directory is a repository.

Type: boolean

Default: true

ui.cli.graph.position

Default graph panel position.

note

This setting only affects terminal tabs when the current directory is a repository.

Type: null or constrained string

Valid values:

  • bottom
  • left
  • right
  • top

Default: bottom

ui.cli.lineHeight

Line height in the integrated terminal.

Type: positive integer, meaning >0

Default: 1

ui.editor.eol

End of line character to use in the editor.

Type: constrained string

Valid values:

  • CRLF
  • LF

Default: LF

ui.editor.fontFamily

Font family to use in the editor.

Type: null or string

Default: null

Example: Liberation Mono

ui.editor.fontSize

Font size to use in the editor.

Type: positive integer, meaning >0

Default: 12

ui.editor.lineNumbers

Show line numbers in the editor.

Type: boolean

Default: true

ui.editor.syntaxHighlight

Enable syntax highlighting in the editor.

Type: boolean

Default: true

ui.editor.tabSize

Size of the indentation in the editor.

Type: positive integer, meaning >0

Default: 4

ui.editor.wrap

Enable word wrap in the editor.

Type: boolean

Default: false

ui.extraThemes

Paths to extra themes to install.

warning

This option will not install the theme package.

Type: list of absolute path

Default: [ ]

Example: [ "${pkgs.catppuccin-gitkraken}/catppuccin-mocha.jsonc" ]

ui.hideFocusStatus

Hide Focus view related elements from status bar.

Type: boolean

Default: false

ui.launchpad.collapsed

Collapse Launchpad tab.

Type: boolean

Default: false

ui.launchpad.compact

Enable compact Launchpad view.

Type: boolean

Default: false

ui.launchpad.showComments

Show comments.

This setting is relevant in the following Launchpad views: Personal Issues, Personal all, Personal snoozed, Team issues.

Type: boolean

Default: true

ui.launchpad.showFixVersions

Show fix versions.

This setting is relevant in the following Launchpad views: Personal Issues, Personal all, Personal snoozed, Team issues.

Type: boolean

Default: false

ui.launchpad.showLabels

Show labels.

This setting is relevant in the following Launchpad views: Personal PR, Personal Issues, Personal all, Personal snoozed, Team PR, Team issues.

Type: boolean

Default: true

ui.launchpad.showLikes

Show likes.

Type: boolean

Default: false

ui.launchpad.showLinesChanged

Show lines changed.

This setting is relevant in the following Launchpad views: Personal PR, Personal all, Personal snoozed, Team PR.

Type: boolean

Default: true

ui.launchpad.showMentions

Show mentions.

Type: boolean

Default: false

ui.launchpad.showMilestones

Show milestones.

This setting is relevant in the following Launchpad views: Personal PR, Personal Issues, Personal all, Personal snoozed, Team PR, Team issues.

Type: boolean

Default: true

ui.launchpad.showSprints

Show sprints.

This setting is relevant in the following Launchpad views: Personal Issues, Personal all, Personal snoozed, Team issues.

Type: boolean

Default: false

ui.launchpad.useAuthorInitials

Use author initials instead of avatars.

This setting is relevant in the following Launchpad views: Personal PR, Personal Issues, Personal all, Personal snoozed, Team PR, Team issues.

Type: boolean

Default: false

ui.rememberTabs

Remember open tabs when exiting.

Type: boolean

Default: true

ui.showLeftPanel

Show left panel showing remotes, worktrees, stashes, …

Type: boolean

Default: true

ui.showRepoSummary

Display WIP summary (for uncommitted changes on files like delete, add, edit, move) for repositories in Repository Management view.

Type: boolean

Default: true

ui.sortOrder

Sort files in right panel alphabetically.

Type: constrained string

Valid values:

  • ascending
  • descending

Default: ascending

ui.spellCheck

Enable spell checking.

Type: boolean

Default: true

ui.theme

UI theme.

note

Extra themes are referenced by their meta.name, ie. catppuccin-mocha.

Type: null or freeform string or constrained string

Valid values:

  • light
  • light-high-contrast
  • dark
  • dark-high-contrast
  • system

Default: system

Example: dark

ui.toolbarLabels

Show toolbar icon labels.

Type: boolean

Default: true

ui.treeView

Display files in tree view mode in right panel.

Type: boolean

Default: false

ui.zoom

UI zoom percentage.

note

Zoom value is done in increment of 0.1 only. The value is truncated to a one decimal number.

This means that setting this option to 0.96 will result in 0.9 being applied.

Type: integer or floating point number between 0.8 and 1.3 (both inclusive)

Default: 1


This documentation was automatically generated from the NixKraken configuration options.

Generated on: 2025-09-14

user

User settings.

Type: attribute set of (submodule)

Default: { }

user.email

Email to use as commit author email.

important

This option is required when skipTutorial is enabled.

Type: null or string

Default: config.programs.git.userEmail

Example: email@example.com

user.name

Name to use as commit author name.

important

This option is required when skipTutorial is enabled.

Type: null or string

Default: config.programs.git.userName

Example: John Doe


This documentation was automatically generated from the NixKraken configuration options.

Generated on: 2025-09-14

Packages

NixKraken uses several packages to perform actions related to GitKraken configuration handling. Because GitKraken's configuration files also store mutable application state, they cannot be written directly by Nix. Instead, these packages are used to safely read, modify, and write to the JSON configuration files without destroying the state.

These packages are actually Bash scripts bundled using Nix's writeShellApplication, which allows to define their runtime dependencies. This approach enables the scripts to be used as Nix packages while also being executable directly, provided all their dependencies are available in the shell environment.

Packages are dynamically exported by using the packagesFromDirectoryRecursive function. Adding a directory under pkgs with a package.nix will automatically make a package (named after the directory) available for use.

note

When you enter a Nix development shell, the packages are available as their gk--prefixed counterparts:

nix develop
gk-configure # pkgs/configure/default.nix
gk-decrypt   # pkgs/decrypt/default.nix
gk-encrypt   # pkgs/encrypt/default.nix
gk-login     # pkgs/login/default.nix
gk-theme     # pkgs/theme/default.nix

Available packages

gk-configure

This package automates the creation and management of GitKraken's configuration files, especially in the context of a Home Manager installation.

While it's intended for use during Home Manager activation by the NixKraken module, it can also be used independently for testing.

important

WE ARE NOT RESPONSIBLE FOR NUKING YOUR CONFIGURATION.

The package will modify GitKraken's configuration files, and loss of configuration is a possible outcome, although we strive to make it as safe as possible.

Please back up your configuration before use.

Usage

All options are documented by the --help flag:

./configure/script.sh --help
gk-configure --help

Since the package is typically run during Home Manager activation, it respects the following environment variables:

  • DRY_RUN: if set, commands are not executed, only logged
  • VERBOSE: if set, logs are enabled

The script is extensively documented through comments in the source file itself.

gk-encrypt and gk-decrypt

These packages are used to encrypt and decrypt GitKraken's secFiles, which contain sensitive data such as access tokens.

They are primarily intended for use by the gk-login package, but can also be used independently.

Although their execution is considered safe (since they only read the secFiles and output results to stdout), they are provided as-is, with no warranty.

Usage

All options are documented by the --help flag:

./decrypt/script.sh --help
gk-decrypt --help

./encrypt/script.sh --help
gk-encrypt --help

The scripts are extensively documented through comments in the source files themselves:

Encryption / Decryption methods

The encryption and decryption methods are adapted from GitKraken's original code, reimplemented using Unix tools. The reference implementation below is prettified from main.bundle.js with comments manually added:

// Arguments:
// - I: path to secFile
// - re: appId
// - ne: input encoding
//
// External variables
// - le: path module
// - ae: crypto module
// - ce: logging library
// - se: seems to be a wrapper around fs module and fs-extra library
I.exports = (I, re, ne) => {
  const pe = re || "",
    Ee = ne || "aes256",
    ge = le.resolve(I),
    doCrypto = (I, re) => {
      ce("doing crypto: %s", re ? "decrypting" : "encrypting");
      const ne = re ? "binary" : "utf8",
        se = re ? ae.createDecipher(Ee, pe) : ae.createCipher(Ee, pe),
        le = [new Buffer(se.update(I, ne)), new Buffer(se.final())],
        ge = Buffer.concat(le);
      return ce("done doing crypto"), ge;
    };
  return {
    load: () => (
      ce("attempting to load"),
      Promise.resolve()
        .then(() => se.readFileAsync(ge))
        .then((I) => doCrypto(I, !0).toString())
        .then((I) => JSON.parse(I))
        .catch((I) => (ce("failed to load:"), ce(I), {}))
    ),
    save: (I) => (
      ce("attempting to save"),
      Promise.resolve()
        .then(() => se.ensureFileAsync(ge))
        .then(() => JSON.stringify(I, null, 2))
        .then((I) => doCrypto(I, !1))
        .then((I) => se.writeFileAsync(ge, I))
        .catch((I) => {
          throw (ce("failed to save:"), ce(I), I);
        })
    ),
  };
};

In summary, the secrets are JSON data encrypted with the appId as the passphrase.

gk-login

This package enables to sign in to a GitKraken account from the command line, supporting multiple providers and GitKraken profiles.

It securely handles OAuth tokens, updates the GitKraken configuration, and manages encrypted secrets for both global and profile-specific authentication.

important

WE ARE NOT RESPONSIBLE FOR NUKING YOUR CONFIGURATION.

The package will modify GitKraken's configuration file as well as secret files (global and profile-specific), and loss of configuration is a possible outcome, although we strive to make it as safe as possible.

Please back up your configuration before use.

Usage

All options are documented by the --help flag:

./login/script.sh --help
gk-login --help

The script itself is extensively documented through comments in the source file itself.

gk-theme

This package provides a command-line interface for a very basic management of GitKraken themes.

It allows to list available themes and install new ones by linking theme files into GitKraken's themes directory.

While it's intended for use during Home Manager activation by the NixKraken module, it can also be used independently for testing.

Although its execution is considered safe, it is possible that theme files are overwritten, resulting in theme data loss. Please back up your themes before use.

Usage

All options are documented by the --help flag:

./theme/script.sh --help
gk-theme --help

Since the package is typically run during Home Manager activation, it respects the following environment variables:

  • DRY_RUN: if set, commands are not executed, only logged
  • VERBOSE: if set, logs are enabled

The script itself is extensively documented through comments in the source file itself.