From 9d7f36dbae9ea45d141ddb07860273d5eb85f6a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20B=C3=B6hme?= Date: Fri, 8 Nov 2024 19:39:26 +0100 Subject: [PATCH] refactor(lazygit): move into own module --- modules/profiles/base.nix | 61 +---------------------- modules/programs/lazygit.nix | 95 ++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 60 deletions(-) create mode 100644 modules/programs/lazygit.nix diff --git a/modules/profiles/base.nix b/modules/profiles/base.nix index 9aa5607..41c4a1c 100644 --- a/modules/profiles/base.nix +++ b/modules/profiles/base.nix @@ -187,7 +187,6 @@ in rs = "sudo systemctl"; uj = "journalctl --user"; rj = "sudo journalctl"; - lg = "lazygit"; }; aliases = { ls = "${getExe pkgs.eza} -lh --icons --git"; @@ -198,6 +197,7 @@ in variables = { EDITOR = "vim"; }; }; programs = { + lazygit.enable = true; direnv.enable = true; fish.enable = true; git.enable = true; @@ -299,65 +299,6 @@ in ]; }; starship.enable = true; - lazygit.enable = true; - lazygit.settings = { - customCommands = [ - { - key = ""; - context = "global"; - description = "Create new conventional commit"; - prompts = [ - { - type = "menu"; - key = "Type"; - title = "Type of change"; - options = [ - { name = "build"; description = "Changes that affect the build system or external dependencies"; value = "build"; } - { name = "feat"; description = "A new feature"; value = "feat"; } - { name = "fix"; description = "A bug fix"; value = "fix"; } - { name = "chore"; description = "Other changes that don't modify src or test files"; value = "chore"; } - { name = "ci"; description = "Changes to CI configuration files and scripts"; value = "ci"; } - { name = "docs"; description = "Documentation only changes"; value = "docs"; } - { name = "perf"; description = "A code change that improves performance"; value = "perf"; } - { name = "refactor"; description = "A code change that neither fixes a bug nor adds a feature"; value = "refactor"; } - { name = "revert"; description = "Reverts a previous commit"; value = "revert"; } - { name = "style"; description = "Changes that do not affect the meaning of the code"; value = "style"; } - { name = "test"; description = "Adding missing tests or correcting existing tests"; value = "test"; } - ]; - } - { - type = "input"; - title = "Scope"; - key = "Scope"; - initialValue = ""; - } - { - type = "menu"; - key = "Breaking"; - title = "Breaking change"; - options = [ - { name = "no"; value = ""; } - { name = "yes"; value = "!"; } - ]; - } - { - type = "input"; - title = "message"; - key = "Message"; - initialValue = ""; - } - { - type = "confirm"; - key = "Confirm"; - title = "Commit"; - body = "Are you sure you want to commit?"; - } - ]; - command = "git commit --message '{{.Form.Type}}{{ if .Form.Scope }}({{ .Form.Scope }}){{ end }}{{.Form.Breaking}}: {{.Form.Message}}'"; - loadingText = "Creating conventional commit..."; - } - ]; - }; }; home = { username = "moritz"; diff --git a/modules/programs/lazygit.nix b/modules/programs/lazygit.nix new file mode 100644 index 0000000..e3a07ca --- /dev/null +++ b/modules/programs/lazygit.nix @@ -0,0 +1,95 @@ +{ config +, lib +, pkgs +, ... +}: + +with lib; +let + cfg = config.my.programs.lazygit; + + wrapper = pkgs.writeShellApplication { + name = "lg"; + text = '' + export LAZYGIT_NEW_DIR_FILE="$HOME/.lazygit/newdir" + + lazygit "$@" + + if [ -f "$LAZYGIT_NEW_DIR_FILE" ]; then + cd "$(cat "$LAZYGIT_NEW_DIR_FILE")" + rm -f "$LAZYGIT_NEW_DIR_FILE" > /dev/null + fi + ''; + runtimeInputs = [ pkgs.lazygit ]; + }; +in +{ + options.my.programs.lazygit.enable = mkEnableOption "lazygit"; + + config = mkIf cfg.enable { + home-manager.users.moritz.home.packages = [ + wrapper + ]; + home-manager.users.moritz.programs.lazygit = { + enable = true; + settings = { + customCommands = [ + { + key = ""; + context = "global"; + description = "Create new conventional commit"; + prompts = [ + { + type = "menu"; + key = "Type"; + title = "Type of change"; + options = [ + { name = "build"; description = "Changes that affect the build system or external dependencies"; value = "build"; } + { name = "feat"; description = "A new feature"; value = "feat"; } + { name = "fix"; description = "A bug fix"; value = "fix"; } + { name = "chore"; description = "Other changes that don't modify src or test files"; value = "chore"; } + { name = "ci"; description = "Changes to CI configuration files and scripts"; value = "ci"; } + { name = "docs"; description = "Documentation only changes"; value = "docs"; } + { name = "perf"; description = "A code change that improves performance"; value = "perf"; } + { name = "refactor"; description = "A code change that neither fixes a bug nor adds a feature"; value = "refactor"; } + { name = "revert"; description = "Reverts a previous commit"; value = "revert"; } + { name = "style"; description = "Changes that do not affect the meaning of the code"; value = "style"; } + { name = "test"; description = "Adding missing tests or correcting existing tests"; value = "test"; } + ]; + } + { + type = "input"; + title = "Scope"; + key = "Scope"; + initialValue = ""; + } + { + type = "menu"; + key = "Breaking"; + title = "Breaking change"; + options = [ + { name = "no"; value = ""; } + { name = "yes"; value = "!"; } + ]; + } + { + type = "input"; + title = "message"; + key = "Message"; + initialValue = ""; + } + { + type = "confirm"; + key = "Confirm"; + title = "Commit"; + body = "Are you sure you want to commit?"; + } + ]; + command = "git commit --message '{{.Form.Type}}{{ if .Form.Scope }}({{ .Form.Scope }}){{ end }}{{.Form.Breaking}}: {{.Form.Message}}'"; + loadingText = "Creating conventional commit..."; + } + ]; + }; + }; + }; +}