feat: lazygit theme

This commit is contained in:
Harivansh Rathi 2026-04-08 13:54:00 -04:00
parent a7acd0fb2d
commit 36f0e7d863
5 changed files with 84 additions and 23 deletions

View file

@ -10,23 +10,3 @@ gui:
showRandomTip: false
splitDiff: auto
border: rounded
theme:
activeBorderColor:
- "#b8bb26"
- bold
inactiveBorderColor:
- "#504945"
selectedLineBgColor:
- "#3c3836"
optionsTextColor:
- "#fabd2f"
selectedRangeBgColor:
- "#504945"
cherryPickedCommitBgColor:
- "#689d6a"
cherryPickedCommitFgColor:
- "#282828"
unstagedChangesColor:
- "#fb4934"
defaultFgColor:
- "#ebdbb2"

View file

@ -1,12 +1,19 @@
{
lib,
hostConfig,
theme,
...
}:
let
baseConfig = builtins.readFile ../config/lazygit/config.yml;
mkFullConfig = mode: baseConfig + theme.renderLazygit mode;
in
{
xdg.configFile."lazygit/config.yml".source = ../config/lazygit/config.yml;
xdg.configFile."lazygit/config-dark.yml".text = mkFullConfig "dark";
xdg.configFile."lazygit/config-light.yml".text = mkFullConfig "light";
home.file = lib.mkIf hostConfig.isDarwin {
"Library/Application Support/lazygit/config.yml".source = ../config/lazygit/config.yml;
"Library/Application Support/lazygit/config-dark.yml".text = mkFullConfig "dark";
"Library/Application Support/lazygit/config-light.yml".text = mkFullConfig "light";
};
}

View file

@ -26,6 +26,8 @@ let
ghosttyCurrentFile = "${config.xdg.configHome}/ghostty/themes/cozybox-current";
tmuxDir = "${config.xdg.configHome}/tmux/theme";
tmuxCurrentFile = "${config.xdg.configHome}/tmux/theme/current.conf";
lazygitDir = "${config.xdg.configHome}/lazygit";
lazygitCurrentFile = "${config.xdg.configHome}/lazygit/config.yml";
};
themes = {
@ -191,6 +193,59 @@ let
zstyle ':prompt:pure:user:root' color '${c.error}'
'';
renderLazygit =
mode:
let
c =
if mode == "light" then
{
activeBorder = "#427b58";
inactiveBorder = "#c3c7c9";
selectedLineBg = "#e1e1e1";
optionsText = "#b57614";
selectedRangeBg = "#c3c7c9";
cherryPickedBg = "#427b58";
cherryPickedFg = "#e7e7e7";
unstaged = "#c5524a";
defaultFg = "#3c3836";
}
else
{
activeBorder = "#b8bb26";
inactiveBorder = "#504945";
selectedLineBg = "#3c3836";
optionsText = "#fabd2f";
selectedRangeBg = "#504945";
cherryPickedBg = "#689d6a";
cherryPickedFg = "#282828";
unstaged = "#fb4934";
defaultFg = "#ebdbb2";
};
in
''
gui:
theme:
activeBorderColor:
- "${c.activeBorder}"
- bold
inactiveBorderColor:
- "${c.inactiveBorder}"
selectedLineBgColor:
- "${c.selectedLineBg}"
optionsTextColor:
- "${c.optionsText}"
selectedRangeBgColor:
- "${c.selectedRangeBg}"
cherryPickedCommitBgColor:
- "${c.cherryPickedBg}"
cherryPickedCommitFgColor:
- "${c.cherryPickedFg}"
unstagedChangesColor:
- "${c.unstaged}"
defaultFgColor:
- "${c.defaultFg}"
'';
batTheme = mode: if mode == "light" then "gruvbox-light" else "gruvbox-dark";
deltaTheme = mode: if mode == "light" then "gruvbox-light" else "gruvbox-dark";
@ -263,6 +318,7 @@ in
paths
renderFzf
renderGhostty
renderLazygit
renderPurePrompt
renderTmux
renderZshHighlights

View file

@ -102,6 +102,14 @@ let
"@TMUX_DARK_FILE@" = "${tmuxConfigs.dark}";
"@TMUX_LIGHT_FILE@" = "${tmuxConfigs.light}";
"@TMUX_CONFIG@" = "${config.xdg.configHome}/tmux/tmux.conf";
"@LAZYGIT_DIR@" = theme.paths.lazygitDir;
"@LAZYGIT_CURRENT_FILE@" = theme.paths.lazygitCurrentFile;
"@LAZYGIT_DARK_FILE@" = "${theme.paths.lazygitDir}/config-dark.yml";
"@LAZYGIT_LIGHT_FILE@" = "${theme.paths.lazygitDir}/config-light.yml";
"@LAZYGIT_DARWIN_DIR@" = "${config.home.homeDirectory}/Library/Application Support/lazygit";
"@LAZYGIT_DARWIN_FILE@" = "${config.home.homeDirectory}/Library/Application Support/lazygit/config.yml";
"@LAZYGIT_DARWIN_DARK_FILE@" = "${config.home.homeDirectory}/Library/Application Support/lazygit/config-dark.yml";
"@LAZYGIT_DARWIN_LIGHT_FILE@" = "${config.home.homeDirectory}/Library/Application Support/lazygit/config-light.yml";
"@WALLPAPER_DARK_FILE@" = "${theme.wallpapers.dark}";
"@WALLPAPER_LIGHT_FILE@" = "${theme.wallpapers.light}";
};

View file

@ -26,6 +26,7 @@ link_mode_assets() {
fzf_target="@FZF_DARK_FILE@"
ghostty_target="@GHOSTTY_DARK_FILE@"
tmux_target="@TMUX_DARK_FILE@"
lazygit_target="@LAZYGIT_DARK_FILE@"
wallpaper="@WALLPAPER_DARK_FILE@"
apple_dark_mode=true
;;
@ -33,6 +34,7 @@ link_mode_assets() {
fzf_target="@FZF_LIGHT_FILE@"
ghostty_target="@GHOSTTY_LIGHT_FILE@"
tmux_target="@TMUX_LIGHT_FILE@"
lazygit_target="@LAZYGIT_LIGHT_FILE@"
wallpaper="@WALLPAPER_LIGHT_FILE@"
apple_dark_mode=false
;;
@ -42,17 +44,25 @@ link_mode_assets() {
;;
esac
mkdir -p "@STATE_DIR@" "@FZF_DIR@" "@GHOSTTY_DIR@" "@TMUX_DIR@"
mkdir -p "@STATE_DIR@" "@FZF_DIR@" "@GHOSTTY_DIR@" "@TMUX_DIR@" "@LAZYGIT_DIR@"
printf '%s\n' "$mode" > "@STATE_FILE@"
ln -sfn "$fzf_target" "@FZF_CURRENT_FILE@"
ln -sfn "$ghostty_target" "@GHOSTTY_CURRENT_FILE@"
ln -sfn "$tmux_target" "@TMUX_CURRENT_FILE@"
ln -sfn "$lazygit_target" "@LAZYGIT_CURRENT_FILE@"
if command -v tmux >/dev/null 2>&1 && tmux start-server >/dev/null 2>&1; then
tmux source-file "@TMUX_CONFIG@" >/dev/null 2>&1 || true
fi
if [[ "$(uname -s)" == "Darwin" ]] && command -v osascript >/dev/null 2>&1; then
mkdir -p "@LAZYGIT_DARWIN_DIR@"
if [[ "$mode" == "dark" ]]; then
ln -sfn "@LAZYGIT_DARWIN_DARK_FILE@" "@LAZYGIT_DARWIN_FILE@"
else
ln -sfn "@LAZYGIT_DARWIN_LIGHT_FILE@" "@LAZYGIT_DARWIN_FILE@"
fi
osascript -e "tell application \"System Events\" to tell appearance preferences to set dark mode to ${apple_dark_mode}" >/dev/null 2>&1 || true
osascript -e "tell application \"System Events\" to tell every desktop to set picture to \"${wallpaper}\"" >/dev/null 2>&1 || true