176 lines
4.6 KiB
Nix
176 lines
4.6 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}: let
|
|
cfg = config.devkit;
|
|
in {
|
|
options.devkit = with lib; {
|
|
enable = mkEnableOption "Enable devkit configuration and packages";
|
|
|
|
ghostty.enable = mkOption {
|
|
type = with types; bool;
|
|
default = cfg.enable;
|
|
};
|
|
git.enable = mkOption {
|
|
type = with types; bool;
|
|
default = cfg.enable;
|
|
};
|
|
git.wrapper = mkOption {
|
|
type = with types; nullOr package;
|
|
default = null;
|
|
};
|
|
lazygit.enable = mkOption {
|
|
type = with types; bool;
|
|
default = cfg.enable;
|
|
};
|
|
neovim.enable = mkOption {
|
|
type = with types; bool;
|
|
default = cfg.enable;
|
|
};
|
|
starship.enable = mkOption {
|
|
type = with types; bool;
|
|
default = cfg.enable;
|
|
};
|
|
tmux.enable = mkOption {
|
|
type = with types; bool;
|
|
default = cfg.enable;
|
|
};
|
|
yazi.enable = mkOption {
|
|
type = with types; bool;
|
|
default = cfg.enable;
|
|
};
|
|
zellij.enable = mkOption {
|
|
type = with types; bool;
|
|
default = cfg.enable;
|
|
};
|
|
zsh.enable = mkOption {
|
|
type = with types; bool;
|
|
default = cfg.enable;
|
|
};
|
|
};
|
|
config = lib.mkIf cfg.enable {
|
|
home.packages = with pkgs; [
|
|
ouch
|
|
# TODO: move this to neovim configuration/derivation
|
|
(pkgs.writeShellScriptBin "gvim" ''
|
|
${lib.getExe config.programs.neovide.package} -- "$@"
|
|
'')
|
|
git-lfs-transfer
|
|
];
|
|
|
|
home.sessionVariables = {
|
|
SHELL = lib.mkIf cfg.zsh.enable "${lib.getExe config.programs.zsh.package}";
|
|
TERM = lib.mkIf cfg.ghostty.enable "xterm-256color";
|
|
# Used to be ghostty, but it is borked
|
|
TERMINAL = lib.mkIf cfg.ghostty.enable "${lib.getExe config.programs.wezterm.package}";
|
|
EXPLORER = lib.mkIf cfg.yazi.enable "${lib.getExe config.programs.yazi.package}";
|
|
};
|
|
|
|
# Local development shells
|
|
programs.direnv.enable = true;
|
|
programs.direnv.nix-direnv.enable = true;
|
|
|
|
# SSH
|
|
programs.ssh.enable = true;
|
|
programs.ssh.matchBlocks = {
|
|
"battleship" = {
|
|
hostname = "battleship";
|
|
user = "${config.home.username}";
|
|
identitiesOnly = true;
|
|
identityFile = "${config.home.homeDirectory}/home/battleship";
|
|
extraOptions = {RequestTTY = "yes";};
|
|
};
|
|
"fithter" = {
|
|
hostname = "fighter";
|
|
user = "${config.home.username}";
|
|
identitiesOnly = true;
|
|
identityFile = "${config.home.homeDirectory}/home/fighter";
|
|
extraOptions = {RequestTTY = "yes";};
|
|
};
|
|
};
|
|
|
|
# GPG Keyring
|
|
programs.gpg.enable = true;
|
|
programs.gpg.mutableKeys = true;
|
|
programs.gpg.mutableTrust = true;
|
|
|
|
services.gpg-agent.enable = true;
|
|
services.gpg-agent.defaultCacheTtl = 3600 * 24;
|
|
services.gpg-agent.pinentry.package = pkgs.pinentry-gtk2;
|
|
|
|
# Devkit packages
|
|
|
|
## Ghostty (Terminal)
|
|
programs.ghostty = lib.mkIf cfg.ghostty.enable {
|
|
enable = true;
|
|
package = config._devkit.packages.ghostty;
|
|
};
|
|
|
|
programs.wezterm.enable = true;
|
|
|
|
## Git
|
|
programs.git = lib.mkIf cfg.git.enable {
|
|
enable = true;
|
|
userEmail = "contact@guz.one";
|
|
userName = "Gustavo \"Guz\" L de Mello";
|
|
package =
|
|
if isNull cfg.git.wrapper
|
|
then config._devkit.packages.git
|
|
else
|
|
pkgs.writeShellScriptBin "git" ''
|
|
${lib.getExe cfg.git.wrapper} ${lib.getExe config._devkit.packages.git} "$@"
|
|
'';
|
|
lfs.enable = true;
|
|
};
|
|
|
|
## Lazygit (Git TUI)
|
|
programs.lazygit = lib.mkIf cfg.lazygit.enable {
|
|
enable = true;
|
|
package = config._devkit.packages.lazygit;
|
|
# package = pkgs.lazygit;
|
|
};
|
|
|
|
## Neovim (Editor)
|
|
neovim.enable = cfg.neovim.enable;
|
|
programs.neovide.enable = true;
|
|
|
|
## Starship (Shell decoration)
|
|
programs.starship = lib.mkIf cfg.starship.enable {
|
|
enable = true;
|
|
package = config._devkit.packages.starship;
|
|
# package = pkgs.starship;
|
|
};
|
|
|
|
## Yazi (File manager)
|
|
programs.yazi = lib.mkIf cfg.yazi.enable {
|
|
enable = true;
|
|
package = config._devkit.packages.yazi;
|
|
# package = pkgs.yazi;
|
|
};
|
|
|
|
# Zellij (Terminal multiplexer)
|
|
programs.zellij = lib.mkIf cfg.zellij.enable {
|
|
enable = true;
|
|
package = config._devkit.packages.zellij;
|
|
};
|
|
|
|
## Tmux (Backup terminal multiplexer)
|
|
programs.tmux = lib.mkIf cfg.tmux.enable {
|
|
enable = true;
|
|
package = config._devkit.packages.tmux;
|
|
};
|
|
|
|
## ZSH (Default shell)
|
|
programs.zsh = lib.mkIf cfg.zsh.enable {
|
|
enable = true;
|
|
# package = config._devkit.packages.zsh;
|
|
package = pkgs.zsh;
|
|
autosuggestion.enable = true;
|
|
enableCompletion = true;
|
|
syntaxHighlighting.enable = true;
|
|
};
|
|
};
|
|
}
|