add (home config): add home development configuration options
This commit is contained in:
parent
e8ecb6e16e
commit
57c8e8d0c9
1 changed files with 198 additions and 0 deletions
198
options/home/dev.nix
Normal file
198
options/home/dev.nix
Normal file
|
|
@ -0,0 +1,198 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.home.dev;
|
||||
in
|
||||
{
|
||||
options = {
|
||||
home.dev = {
|
||||
enable = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = "Development settings.";
|
||||
};
|
||||
additionalDevPackages = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.package;
|
||||
default = [ ];
|
||||
description = "Development additional packages: cli/tui/utils";
|
||||
};
|
||||
|
||||
git = {
|
||||
enable = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = "Git settings.";
|
||||
};
|
||||
userName = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = config.home.username;
|
||||
description = "Git user name.";
|
||||
};
|
||||
userEmail = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "";
|
||||
description = "Git user email.";
|
||||
};
|
||||
};
|
||||
|
||||
python = {
|
||||
enable = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = "Python base settings & packages.";
|
||||
};
|
||||
packages = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.package;
|
||||
default = [
|
||||
pkgs.python314
|
||||
pkgs.uv
|
||||
];
|
||||
description = "List of user python packages.";
|
||||
};
|
||||
};
|
||||
|
||||
rust = {
|
||||
enable = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = "Rust base settings & packages.";
|
||||
};
|
||||
packages = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.package;
|
||||
default = [
|
||||
pkgs.gcc
|
||||
pkgs.cargo
|
||||
pkgs.rustc
|
||||
];
|
||||
description = "List of user rust packages.";
|
||||
};
|
||||
};
|
||||
terminal = {
|
||||
enable = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = "Terminal settings & other stuff.";
|
||||
};
|
||||
shell = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = if cfg.terminal.zsh.enable then "zsh" else "bash";
|
||||
description = "Change standart shell for kitty";
|
||||
};
|
||||
aliases = lib.mkOption {
|
||||
type = lib.types.attrsOf lib.types.str;
|
||||
default = {
|
||||
gc = "sudo nix-collect-garbage -d";
|
||||
dev = "nix develop --command ${cfg.terminal.shell}";
|
||||
"..." = "cd ../..";
|
||||
};
|
||||
description = "Terminal aliases.";
|
||||
};
|
||||
kitty.enable = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = "Configure kitty - terminal emulator.";
|
||||
};
|
||||
zsh = {
|
||||
enable = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = "Configure zsh - terminal shell.";
|
||||
};
|
||||
oh-my-zsh = {
|
||||
enable = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = "Configure oh-my-zsh.";
|
||||
};
|
||||
plugins = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.str;
|
||||
default = [ ];
|
||||
description = "Plugins for oh-my-zsh";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
programs.git = lib.mkIf cfg.git.enable {
|
||||
enable = true;
|
||||
package = pkgs.gitAndTools.gitFull;
|
||||
userName = cfg.git.userName;
|
||||
userEmail = cfg.git.userEmail;
|
||||
lfs.enable = true;
|
||||
aliases = {
|
||||
aa = "add --all";
|
||||
c = "commit";
|
||||
cm = "commit -m";
|
||||
br = "branch";
|
||||
s = "status";
|
||||
uncommit = "reset --soft HEAD^";
|
||||
unadd = "reset";
|
||||
d = "diff";
|
||||
ds = "diff --staged";
|
||||
};
|
||||
extraConfig = {
|
||||
init = {
|
||||
defaultbranch = "main";
|
||||
};
|
||||
branch = {
|
||||
soft = "-committerdate";
|
||||
};
|
||||
pull.rebase = true;
|
||||
};
|
||||
};
|
||||
|
||||
programs.kitty = lib.mkIf cfg.terminal.kitty.enable {
|
||||
enable = true;
|
||||
package = pkgs.kitty;
|
||||
shellIntegration = lib.mkIf (cfg.terminal.shell == "zsh") {
|
||||
enableZshIntegration = true;
|
||||
};
|
||||
settings = {
|
||||
shell = cfg.terminal.shell;
|
||||
confirm_os_window_close = 0;
|
||||
enable_audio_bell = false;
|
||||
scrollback_lines = 10000;
|
||||
mouse_hide_wait = "-1.0";
|
||||
};
|
||||
keybindings = {
|
||||
"ctrl+=" = "increase_font_size";
|
||||
"ctrl+-" = "decrease_font_size";
|
||||
};
|
||||
};
|
||||
|
||||
programs.zsh = lib.mkIf cfg.terminal.zsh.enable {
|
||||
enable = true;
|
||||
package = pkgs.zsh;
|
||||
autocd = true;
|
||||
autosuggestion = {
|
||||
enable = true;
|
||||
strategy = [ "history" ];
|
||||
};
|
||||
history = {
|
||||
saveNoDups = true;
|
||||
size = 10000;
|
||||
save = 10000;
|
||||
};
|
||||
oh-my-zsh = lib.mkIf cfg.terminal.zsh.oh-my-zsh.enable {
|
||||
enable = true;
|
||||
plugins = cfg.terminal.zsh.oh-my-zsh.plugins;
|
||||
};
|
||||
syntaxHighlighting = {
|
||||
enable = true;
|
||||
};
|
||||
shellAliases = cfg.terminal.aliases;
|
||||
};
|
||||
|
||||
home.packages =
|
||||
cfg.additionalDevPackages
|
||||
++ lib.optionals cfg.python.enable cfg.python.packages
|
||||
++ lib.optionals cfg.rust.enable cfg.rust.packages;
|
||||
};
|
||||
}
|
||||
Reference in a new issue