Files
home-config/modules/coding/default.nix

94 lines
1.9 KiB
Nix
Raw Normal View History

2025-08-24 17:09:45 +02:00
{
config,
lib,
pkgs,
...
}:
with lib;
let
goCfg = config.features.coding.go;
nixCfg = config.features.coding.nix;
pythonCfg = config.features.coding.python;
in
{
options.features.coding = {
go = {
enable = mkEnableOption "enable Go development environment";
packageSet = mkOption {
type = types.str;
default = "default";
description = "Which nixpkgs variant to use for Golang";
};
additionalPackages = mkOption {
type = types.listOf types.str;
example = [
delve
go-outline
];
};
};
python = {
enable = mkEnableOption "enable Python development environment";
additionalPackages = mkOption {
type = types.listOf types.str;
example = [
"requests"
"pandas"
];
};
};
nix = {
enable = mkEnableOption "enable Nix development environment";
};
};
config =
let
selectPkgs = packageSet: if packageSet == "default" then pkgs else pkgs.${packageSet};
in
mkMerge [
(mkIf goCfg.enable (
let
goPkgs = selectPkgs goCfg.packageSet;
in
{
home.packages =
with goPkgs;
[
go
gopls
]
++ (map (name: goPkgs.${name}) goCfg.additionalPackages);
}
))
(mkIf pythonCfg.enable {
home.packages = with pkgs; [
(python3.withPackages (
ps:
with ps;
[
uv
pip
pipx
virtualenv
]
++ (map (name: ps.${name}) pythonCfg.additionalPackages)
))
pyrefly
black
];
})
(mkIf nixCfg.enable {
home.packages = with pkgs; [
alejandra
nil
nixd
statix
deadnix
nix-tree
];
})
];
}