refactor(devkit): simplify devkit wrapper packages

This commit is contained in:
Guz
2026-03-16 14:30:39 -03:00
parent 43257a7ff7
commit 4288ffbba2
15 changed files with 204 additions and 355 deletions

View File

@@ -1,18 +0,0 @@
{
pkgs,
pkgs-unstable,
inputs,
}: rec {
ghostty = pkgs.callPackage ./ghostty {};
git = pkgs.callPackage ./git {};
lazygit = pkgs.callPackage ./lazygit {};
starship = pkgs.callPackage ./starship {};
tmux = pkgs.callPackage ./tmux {shell = zsh;};
yazi = pkgs.callPackage ./yazi {};
# CURRENTLY BORKED https://github.com/zellij-org/zellij/issues/3970
zellij = pkgs.callPackage ./zellij {
shell = zsh;
zellij = pkgs-unstable.zellij;
};
zsh = pkgs.callPackage ./zsh {};
}

View File

@@ -6,7 +6,7 @@
ghostty ? pkgs.ghostty,
command ? null,
}: let
colors = import ../colors.nix;
colors = import ./colors.nix;
theme = pkgs.writeText "theme" ''
palette = 0=${colors.base00}
palette = 1=${colors.base08}
@@ -31,7 +31,8 @@
selection-background = ${colors.base02}
selection-foreground = ${colors.base07}
'';
drv = symlinkJoin ({
in
symlinkJoin ({
paths = [ghostty];
nativeBuildInputs = [makeWrapper];
@@ -45,24 +46,4 @@
}
'';
}
// {inherit (ghostty) name pname meta shell_integration terminfo;});
in
pkgs.stdenv.mkDerivation (rec {
name = drv.name;
pname = drv.pname;
buildCommand = let
desktopEntry = pkgs.makeDesktopItem {
name = pname;
desktopName = name;
exec = "${lib.getExe drv}";
};
in ''
mkdir -p $out/bin
cp ${lib.getExe drv} $out/bin
mkdir -p $out/share/applications
cp ${desktopEntry}/share/applications/${pname}.desktop $out/share/applications/${pname}.desktop
'';
}
// {inherit (ghostty) meta shell_integration terminfo;})
// {inherit (ghostty) name pname meta shell_integration terminfo;})

30
packages/devkit/git.nix Normal file
View File

@@ -0,0 +1,30 @@
{
symlinkJoin,
makeWrapper,
pkgs,
lib,
git ? pkgs.git,
}:
symlinkJoin ({
paths = [git];
nativeBuildInputs = [makeWrapper];
postBuild = ''
wrapProgram $out/bin/git \
--set-default 'GIT_CONFIG_COUNT' 7 \
--set-default 'GIT_CONFIG_KEY_0' 'core.pager' \
--set-default 'GIT_CONFIG_VALUE_0' '${lib.getExe pkgs.delta}' \
--set-default 'GIT_CONFIG_KEY_1' 'credentials.helper' \
--set-default 'GIT_CONFIG_VALUE_1' 'store' \
--set-default 'GIT_CONFIG_KEY_2' 'interactive.diffFilter' \
--set-default 'GIT_CONFIG_VALUE_2' '${lib.getExe pkgs.delta} --color-only' \
--set-default 'GIT_CONFIG_KEY_3' 'signing.signByDefault' \
--set-default 'GIT_CONFIG_VALUE_3' 'true' \
--set-default 'GIT_CONFIG_KEY_4' 'user.email' \
--set-default 'GIT_CONFIG_VALUE_4' 'contact@guz.one' \
--set-default 'GIT_CONFIG_KEY_5' 'user.name' \
--set-default 'GIT_CONFIG_VALUE_5' 'Gustavo "Guz" L de Mello' \
--set-default 'GIT_CONFIG_KEY_6' 'commit.gpgsign' \
--set-default 'GIT_CONFIG_VALUE_6' 'true'
'';
}
// {inherit (git) name pname meta;})

View File

@@ -1,53 +0,0 @@
{
symlinkJoin,
makeWrapper,
pkgs,
lib,
git ? pkgs.git,
}: let
drv = symlinkJoin ({
paths = [git];
nativeBuildInputs = [makeWrapper];
postBuild = ''
wrapProgram $out/bin/git \
--set-default 'GIT_CONFIG_COUNT' 7 \
--set-default 'GIT_CONFIG_KEY_0' 'core.pager' \
--set-default 'GIT_CONFIG_VALUE_0' '${lib.getExe pkgs.delta}' \
--set-default 'GIT_CONFIG_KEY_1' 'credentials.helper' \
--set-default 'GIT_CONFIG_VALUE_1' 'store' \
--set-default 'GIT_CONFIG_KEY_2' 'interactive.diffFilter' \
--set-default 'GIT_CONFIG_VALUE_2' '${lib.getExe pkgs.delta} --color-only' \
--set-default 'GIT_CONFIG_KEY_3' 'signing.signByDefault' \
--set-default 'GIT_CONFIG_VALUE_3' 'true' \
--set-default 'GIT_CONFIG_KEY_4' 'user.email' \
--set-default 'GIT_CONFIG_VALUE_4' 'contact@guz.one' \
--set-default 'GIT_CONFIG_KEY_5' 'user.name' \
--set-default 'GIT_CONFIG_VALUE_5' 'Gustavo "Guz" L de Mello' \
--set-default 'GIT_CONFIG_KEY_6' 'commit.gpgsign' \
--set-default 'GIT_CONFIG_VALUE_6' 'true'
'';
}
// {inherit (git) name pname meta;});
in
pkgs.stdenv.mkDerivation (rec {
name = drv.name;
pname = drv.pname;
buildCommand = let
desktopEntry = pkgs.makeDesktopItem {
name = pname;
desktopName = name;
exec = "${lib.getExe drv}";
terminal = true;
};
in ''
mkdir -p $out/bin
cp ${lib.getExe drv} $out/bin
mkdir -p $out/share/applications
cp ${desktopEntry}/share/applications/${pname}.desktop $out/share/applications/${pname}.desktop
'';
}
// {inherit (git) meta;})

View File

@@ -0,0 +1,39 @@
{
symlinkJoin,
makeWrapper,
pkgs,
lib,
lazygit ? pkgs.lazygit,
settings ? {},
}:
symlinkJoin ({
paths = [lazygit];
nativeBuildInputs = [makeWrapper];
postBuild = ''
wrapProgram $out/bin/lazygit \
--add-flags '--use-config-file' \
--add-flags '${pkgs.writeText "config.yml" (builtins.toJSON ({
git.pagers = [
{
colorArg = "always";
pager = "${lib.getExe pkgs.delta} --dark --paging=never";
}
];
gui.theme = let
colors = import ./colors.nix;
in {
activeBorderColor = [colors.base07 "bold"];
inactiveBorderColor = [colors.base04];
searchingActiveBorderColor = [colors.base02 "bold"];
optionsTextColor = [colors.base06];
selectedLineBgColor = [colors.base03];
cherryPickedCommitBgColor = [colors.base02];
cherryPickedCommitFgColor = [colors.base03];
unstagedChangesColor = [colors.base08];
defaultFgColor = [colors.base05];
};
}
// settings))}'
'';
}
// {inherit (lazygit) name pname meta;})

View File

@@ -1,64 +0,0 @@
{
symlinkJoin,
makeWrapper,
pkgs,
lib,
lazygit ? pkgs.lazygit,
settings ? {},
}: let
# YAML is a superset of JSON, so any JSON is valid YAML.
colors = import ../colors.nix;
cfg = pkgs.writeText "config.yml" (builtins.toJSON ({
git.pagers = [
{
colorArg = "always";
pager = "${lib.getExe pkgs.delta} --dark --paging=never";
}
];
gui.theme = {
activeBorderColor = [colors.base07 "bold"];
inactiveBorderColor = [colors.base04];
searchingActiveBorderColor = [colors.base02 "bold"];
optionsTextColor = [colors.base06];
selectedLineBgColor = [colors.base03];
cherryPickedCommitBgColor = [colors.base02];
cherryPickedCommitFgColor = [colors.base03];
unstagedChangesColor = [colors.base08];
defaultFgColor = [colors.base05];
};
}
// settings));
drv = symlinkJoin ({
paths = [lazygit];
nativeBuildInputs = [makeWrapper];
postBuild = ''
wrapProgram $out/bin/lazygit \
--add-flags '--use-config-file' --add-flags '${cfg}'
'';
}
// {inherit (lazygit) name pname meta;});
in
pkgs.stdenv.mkDerivation (rec {
name = drv.name;
pname = drv.pname;
buildCommand = let
desktopEntry = pkgs.makeDesktopItem {
name = pname;
desktopName = name;
exec = "${lib.getExe drv}";
terminal = true;
};
in ''
mkdir -p $out/bin
cp ${lib.getExe drv} $out/bin
mkdir -p $out/share/applications
cp ${desktopEntry}/share/applications/${pname}.desktop $out/share/applications/${pname}.desktop
'';
}
// {inherit (lazygit) meta;})

View File

@@ -4,36 +4,13 @@
pkgs,
lib,
starship ? pkgs.starship,
}: let
drv = symlinkJoin ({
paths = [starship];
nativeBuildInputs = [makeWrapper];
postBuild = ''
wrapProgram $out/bin/starship \
--set-default 'STARSHIP_CONFIG' '${./config.toml}'
'';
}
// {inherit (starship) name pname meta;});
in
pkgs.stdenv.mkDerivation (rec {
name = drv.name;
pname = drv.pname;
buildCommand = let
desktopEntry = pkgs.makeDesktopItem {
name = pname;
desktopName = name;
exec = "${lib.getExe drv}";
terminal = true;
};
in ''
mkdir -p $out/bin
cp ${lib.getExe drv} $out/bin
mkdir -p $out/share/applications
cp ${desktopEntry}/share/applications/${pname}.desktop $out/share/applications/${pname}.desktop
'';
}
// {inherit (starship) meta;})
}:
symlinkJoin ({
paths = [starship];
nativeBuildInputs = [makeWrapper];
postBuild = ''
wrapProgram $out/bin/starship \
--set-default 'STARSHIP_CONFIG' '${./config.toml}'
'';
}
// {inherit (starship) name pname meta;})

View File

@@ -45,36 +45,13 @@
bind -T prefix g run-shell "tmux neww ${lib.getExe sessionizer}"
'';
drv = symlinkJoin ({
in
symlinkJoin ({
paths = [tmux];
nativeBuildInputs = [makeWrapper];
postBuild = ''
wrapProgram $out/bin/tmux \
--add-flags '-f' --add-flags '${cfg}'
'';
}
// {inherit (tmux) name pname man meta;});
in
pkgs.stdenv.mkDerivation (rec {
name = drv.name;
pname = drv.pname;
buildCommand = let
desktopEntry = pkgs.makeDesktopItem {
name = pname;
desktopName = name;
exec = "${lib.getExe drv}";
terminal = true;
};
in ''
mkdir -p $out/bin
cp ${lib.getExe drv} $out/bin
mkdir -p $out/share/applications
cp ${desktopEntry}/share/applications/${pname}.desktop $out/share/applications/${pname}.desktop
'';
}
// {inherit (tmux) man meta;})
// {inherit (tmux) name pname man meta;})

View File

@@ -1,39 +1,74 @@
{
symlinkJoin,
formats,
lib,
makeWrapper,
pkgs,
lib,
stdenv,
symlinkJoin,
yazi ? pkgs.yazi,
}: let
drv = symlinkJoin ({
}:
with lib; let
toml = formats.toml {};
init = pkgs.writeText "init.lua" ''
${builtins.readFile ./init.lua}
'';
keymapsToml = toml.generate "keymaps.toml" {
mgr.prepend_keymap = map (v: {
on = [(toString v)];
run = "plugin relative-motions ${(toString v)}";
}) (range 1 9);
manager.keymap = [
{
on = "<C-n>";
run = "shell -- dragon -x -i -T %s1";
}
];
};
themeToml = toml.generate "theme.toml" {};
yaziToml = toml.generate "yazi.toml" {
manager = {
linemode = "size";
show_hidden = true;
show_symlink = true;
sort_by = "natural";
sort_dir_first = true;
sort_sensitive = false;
sort_translit = true;
};
};
plugins = {};
in
symlinkJoin ({
paths = [yazi];
nativeBuildInputs = [makeWrapper];
postBuild = ''
wrapProgram $out/bin/yazi \
--set-default YAZI_CONFIG_HOME ${./.}
--set YAZI_CONFIG_HOME ${stdenv.mkDerivation {
name = "config-home";
src = ./.;
installPhase = ''
mkdir -p $out
cp ${init} $out/init.lua
cp ${keymapsToml} $out/keymaps.toml
cp ${themeToml} $out/theme.toml
cp ${yaziToml} $out/yazi.toml
${join "\n" (mapAttrsToList (n: v: ''
mkdir -p $out/plugins/${n}
cp -r ${v}/* $out/plugins/${n}
'')
plugins)}
'';
}} \
--set PATH ${with pkgs;
makeBinPath [
dragon-drop
jq
poppler
]}
'';
}
// {inherit (yazi) name pname meta;});
in
pkgs.stdenv.mkDerivation (rec {
name = drv.name;
pname = drv.pname;
buildCommand = let
desktopEntry = pkgs.makeDesktopItem {
name = pname;
desktopName = name;
exec = "${lib.getExe drv}";
terminal = true;
};
in ''
mkdir -p $out/bin
cp ${lib.getExe drv} $out/bin
mkdir -p $out/share/applications
cp ${desktopEntry}/share/applications/${pname}.desktop $out/share/applications/${pname}.desktop
'';
}
// {inherit (yazi) meta;})
// {inherit (yazi) name pname meta;})

View File

@@ -1,10 +0,0 @@
[manager]
show_hidden = true
show_symlink = true
sort_by = "natural"
sort_dir_first = true
sort_sensitive = false
sort_translit = true
linemode = "size"

View File

@@ -5,78 +5,51 @@
lib,
zellij ? pkgs.zellij,
shell ? pkgs.zsh,
}: let
colors = import ../colors.nix;
}:
symlinkJoin ({
paths = [zellij];
nativeBuildInputs = [makeWrapper];
postBuild = ''
wrapProgram $out/bin/zellij \
--set-default ZELLIJ_CONFIG_FILE ${
let
colors = import ../colors.nix;
in
pkgs.writeText "config.kdl" ''
plugins {
zellij-sessionizer location="file:${builtins.fetchurl {
url = "https://github.com/laperlej/zellij-sessionizer/releases/download/v0.4.3/zellij-sessionizer.wasm";
sha256 = "0d43jhlhm7p8pvd8kcylfbfy3dahr8q4yngpnjyqivapwip9csq0";
}}"
config = let
plugins = {
sessionizer = builtins.fetchurl {
url = "https://github.com/laperlej/zellij-sessionizer/releases/download/v0.4.3/zellij-sessionizer.wasm";
sha256 = "0d43jhlhm7p8pvd8kcylfbfy3dahr8q4yngpnjyqivapwip9csq0";
};
};
in
pkgs.writeText "config.kdl" ''
plugins {
zellij-sessionizer location="file:${plugins.sessionizer}"
tab-bar location="zellij:tab-bar"
status-bar location="zellij:status-bar"
compact-bar location="zellij:compact-bar"
session-manager location="zellij:session-manager"
}
tab-bar location="zellij:tab-bar"
status-bar location="zellij:status-bar"
compact-bar location="zellij:compact-bar"
session-manager location="zellij:session-manager"
default_shell "${lib.getExe shell}"
themes {
defautl {
bg "${colors.base03}";
fg "${colors.base05}";
red "${colors.base01}";
green "${colors.base0B}";
blue "${colors.base0D}";
yellow "${colors.base0A}";
magenta "${colors.base0E}";
orange "${colors.base09}";
cyan "${colors.base0C}";
black "${colors.base00}";
white "${colors.base07}";
}
}
theme "default"
${builtins.readFile ./config.kdl}
''
}
default_shell "${lib.getExe shell}"
themes {
defautl {
bg "${colors.base03}";
fg "${colors.base05}";
red "${colors.base01}";
green "${colors.base0B}";
blue "${colors.base0D}";
yellow "${colors.base0A}";
magenta "${colors.base0E}";
orange "${colors.base09}";
cyan "${colors.base0C}";
black "${colors.base00}";
white "${colors.base07}";
}
}
theme "default"
${builtins.readFile ./config.kdl}
'';
drv = symlinkJoin ({
paths = [zellij];
nativeBuildInputs = [makeWrapper];
postBuild = ''
wrapProgram $out/bin/zellij \
--set-default ZELLIJ_CONFIG_FILE ${config}
'';
}
// {inherit (zellij) name pname meta;});
in
pkgs.stdenv.mkDerivation (rec {
name = drv.name;
pname = drv.pname;
buildCommand = let
desktopEntry = pkgs.makeDesktopItem {
name = pname;
desktopName = name;
exec = "${lib.getExe drv}";
terminal = true;
};
in ''
mkdir -p $out/bin
cp ${lib.getExe drv} $out/bin
mkdir -p $out/share/applications
cp ${desktopEntry}/share/applications/${pname}.desktop $out/share/applications/${pname}.desktop
'';
}
// {inherit (zellij) meta version;})
}
// {inherit (zellij) name pname meta;})

View File

@@ -82,3 +82,10 @@ alias -- yy='yazi'
if [ -f "$ZSHRC_APPEND" ]; then
source "$ZSHRC_APPEND"
fi
# Fetch intro
if command -v "fastfetch" >/dev/null 2>&1; then
if [[ "$TERM" != "dump" ]]; then
fastfetch
fi
fi

View File

@@ -2,7 +2,6 @@
symlinkJoin,
makeWrapper,
pkgs,
lib,
zsh ? pkgs.zsh,
# .zshrc
zshrc-prepend ? "",
@@ -10,15 +9,12 @@
}: let
zsh-syntax-highlighting = "${pkgs.zsh-syntax-highlighting}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh";
zsh-autosuggestions = "${pkgs.zsh-autosuggestions}/share/zsh-autosuggestions/zsh-autosuggestions.zsh";
zshrc-prepend-file = pkgs.writeText ".zshrc_prepend" zshrc-prepend;
zshrc-append-file = pkgs.writeText ".zshrc_append" zshrc-append;
drv = symlinkJoin ({
in
symlinkJoin ({
paths = [zsh];
nativeBuildInputs = [makeWrapper];
postBuild = ''
wrapProgram $out/bin/zsh \
--set-default 'ZSH_PLUGIN_SYNTAXHIGHLIGHING' '${zsh-syntax-highlighting}' \
@@ -28,25 +24,4 @@
--set-default 'ZDOTDIR' '${./.}'
'';
}
// {inherit (zsh) name pname meta man;});
in
pkgs.stdenv.mkDerivation (rec {
name = drv.name;
pname = drv.pname;
buildCommand = let
desktopEntry = pkgs.makeDesktopItem {
name = pname;
desktopName = name;
exec = "${lib.getExe drv}";
terminal = true;
};
in ''
mkdir -p $out/bin
cp ${lib.getExe drv} $out/bin
mkdir -p $out/share/applications
cp ${desktopEntry}/share/applications/${pname}.desktop $out/share/applications/${pname}.desktop
'';
}
// {inherit (zsh) meta man;})
// {inherit (zsh) man meta name passthru pname version;})