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