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 }:
let
inherit (lib) mkOption types;
inherit (lib) mkOption types flatten;
in
{
rec {
mkOpt = type: default:
mkOption { inherit type default; };
@ -20,4 +20,12 @@ in
type = types.bool;
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 = {
packages = mkOpt (listOf package) [ ];
packages = packageListOpt;
shellAliases = mkOpt (attrsOf str) { };
variables = mkOpt (attrsOf (oneOf [ (listOf str) str path ])) { };
};

View file

@ -1,114 +1,157 @@
{ pkgs, lib, ... }:
{ config, pkgs, lib, ... }:
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
{
home.packages = with pkgs; flatten [
editorconfig-core-c
editorconfig-checker
options.universe.programming = (addPackageLists {
base.enable = programmingOpt' "Base packages" true;
# C
gcc
gdb
clang-tools
binutils
c.enable = programmingOpt' "C" true;
csharp.enable = programmingOpt "C#";
haskell.enable = programmingOpt "Haskell";
java.enable = programmingOpt "Java";
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
dotnetCorePackages.sdk_6_0
omnisharp-roslyn
# Haskell
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"
config = {
universe.programming = with pkgs; {
base.packages = [
editorconfig-core-c
editorconfig-checker
];
}))
gcc
# Zig
zig
zls
c.packages = [
gcc
gdb
clang-tools
binutils
];
# LaTeX
(texlive.combine {
inherit (texlive)
scheme-medium
csharp.packages = [
dotnetCorePackages.sdk_6_0
omnisharp-roslyn
];
apa7
apacite
biblatex
biblatex-apa
biblatex-chicago
capt-of
minted
catchfile
endfloat
framed
fvextra
hanging
lipsum
mleftright
scalerel
threeparttable
upquote
wrapfig
xstring
;
})
biber
haskell.packages = with haskellPackages; [
ghc
cabal-install
ormolu
# html
html-tidy
nodePackages.prettier
];
hoogle
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;
}