global/programming: refactor into options

This commit is contained in:
Infinidoge 2024-12-03 14:39:26 -05:00
parent 60707813d7
commit e2c9ed9d25
Signed by: Infinidoge
SSH key fingerprint: SHA256:oAMyvotlNFraMmZmr+p6AxnNfW/GioTs1pOn3V4tQ7A
3 changed files with 156 additions and 105 deletions

View file

@ -1,8 +1,8 @@
{ lib }: { lib }:
let let
inherit (lib) mkOption types; inherit (lib) mkOption types flatten;
in in
{ rec {
mkOpt = type: default: mkOpt = type: default:
mkOption { inherit type default; }; mkOption { inherit type default; };
@ -20,4 +20,12 @@ in
type = types.bool; type = types.bool;
example = true; example = true;
}; };
coercedPackageList = with types;
let
packageListType = listOf (either package packageListType);
in
coercedTo packageListType flatten (listOf package);
packageListOpt = mkOpt coercedPackageList [ ];
} }

View file

@ -38,7 +38,7 @@ in
}; };
universe = { universe = {
packages = mkOpt (listOf package) [ ]; packages = packageListOpt;
shellAliases = mkOpt (attrsOf str) { }; shellAliases = mkOpt (attrsOf str) { };
variables = mkOpt (attrsOf (oneOf [ (listOf str) str path ])) { }; variables = mkOpt (attrsOf (oneOf [ (listOf str) str path ])) { };
}; };

View file

@ -1,114 +1,157 @@
{ pkgs, lib, ... }: { config, pkgs, lib, ... }:
let let
inherit (lib) flatten; inherit (lib) flip;
inherit (lib.our) mkBoolOpt' packageListOpt;
cfg = config.universe.programming;
programmingOpt' = kind: flip mkBoolOpt' "Programming: ${kind}";
programmingOpt = flip programmingOpt' cfg.all.enable;
addPackageLists = lib.mapAttrs (name: value: value // {
packages = packageListOpt;
});
in in
{ {
home.packages = with pkgs; flatten [ options.universe.programming = (addPackageLists {
editorconfig-core-c base.enable = programmingOpt' "Base packages" true;
editorconfig-checker
# C c.enable = programmingOpt' "C" true;
gcc csharp.enable = programmingOpt "C#";
gdb haskell.enable = programmingOpt "Haskell";
clang-tools java.enable = programmingOpt "Java";
binutils lua.enable = programmingOpt "Lua";
nim.enable = programmingOpt "Nim";
python.enable = programmingOpt' "Python" true;
racket.enable = programmingOpt "Racket";
rust.enable = programmingOpt "Rust";
zig.enable = programmingOpt "Zig";
latex.enable = programmingOpt "LaTeX";
html.enable = programmingOpt "HTML";
}) // {
all.enable = programmingOpt' "All languages" false;
};
# C Sharp config = {
dotnetCorePackages.sdk_6_0 universe.programming = with pkgs; {
omnisharp-roslyn base.packages = [
editorconfig-core-c
# Haskell editorconfig-checker
haskell-language-server
ghc
cabal-install
ormolu
(with haskellPackages; [
hoogle
])
stack
# stack2nix
cabal2nix
# Java
openjdk
clang-tools
gradle
# Lua
lua-language-server
# Nim
nim
nimlsp
# Python
(python312.withPackages (p: with p; [
black
isort
jupyter
mypy
pip
pyflakes
pytest
python-lsp-server
python-lsp-ruff
pylsp-rope
pyls-isort
]))
pipenv
ruff
# Racket
racket
# Rust
(rust-bin.selectLatestNightlyWith (toolchain: toolchain.default.override {
extensions = [
"rust-src"
"rust-analyzer"
]; ];
}))
gcc
# Zig c.packages = [
zig gcc
zls gdb
clang-tools
binutils
];
# LaTeX csharp.packages = [
(texlive.combine { dotnetCorePackages.sdk_6_0
inherit (texlive) omnisharp-roslyn
scheme-medium ];
apa7 haskell.packages = with haskellPackages; [
apacite ghc
biblatex cabal-install
biblatex-apa ormolu
biblatex-chicago
capt-of
minted
catchfile
endfloat
framed
fvextra
hanging
lipsum
mleftright
scalerel
threeparttable
upquote
wrapfig
xstring
;
})
biber
# html hoogle
html-tidy
nodePackages.prettier stack
]; # stack2nix
cabal2nix
];
java.packages = [
openjdk
clang-tools
gradle
];
lua.packages = [
];
nim.packages = [
nim
];
python.packages = [
(python312.withPackages (p: with p; [
black
isort
jupyter
mypy
pip
pyflakes
pytest
]))
pipenv
ruff
];
racket.packages = [
racket
];
rust.packages = [
(rust-bin.selectLatestNightlyWith (toolchain: toolchain.default.override {
extensions = [
"rust-src"
"rust-analyzer"
];
}))
gcc
];
zig.packages = [
zig
zls
];
latex.packages = [
(texlive.combine {
inherit (texlive)
scheme-medium
apa7
apacite
biblatex
biblatex-apa
biblatex-chicago
capt-of
minted
catchfile
endfloat
framed
fvextra
hanging
lipsum
mleftright
scalerel
threeparttable
upquote
wrapfig
xstring
;
})
biber
];
html.packages = [
html-tidy
nodePackages.prettier
];
};
home.packages = lib.concatMap
(v: lib.optionals (v ? packages && v.enable) v.packages)
(lib.attrValues cfg);
programs.java.enable = cfg.java.enable;
};
programs.java.enable = true;
} }