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.
- 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";
};
};
}
];
};
};
}
- 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.
-
Install NixKraken with Flakes
The recommended method for users with a modern, Flake-based configuration. -
Install NixKraken without Flakes
For users with a traditional, channel-based Home Manager setup.
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
Recommended method: using fetchFromGitHub
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
byrefs/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
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:
- a slow internet connection
- GitKraken's archive being 200MB+
fetchUrl
not outputting its download progress
âš¡ 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
- GitKraken v11.1.0:
36dcda8c3ea1c6bd23770b711326625712460ba3
- GitKraken v11.1.1:
5017262d69299951c156042e7f64ba63760204c2
- GitKraken v11.2.0:
6df4842b4ef6d95082e749da0dd1c20cc980aab8
- GitKraken v11.2.1:
5476f457e69e71dd998b611c50fdfdaa60d61025
- GitKraken v11.3.0:
a8df292411e748f3e9855c6f929a7d46b5fa52ca
- GitKraken v11.4.0:
fe7d341cfc40398f60a15cbf3d07459b4e3f3fde
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 loggedVERBOSE
: 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 secFile
s, 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 secFile
s 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 loggedVERBOSE
: if set, logs are enabled
The script itself is extensively documented through comments in the source file itself.