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,49 +1,84 @@
{ 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 {
base.enable = programmingOpt' "Base packages" true;
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;
};
config = {
universe.programming = with pkgs; {
base.packages = [
editorconfig-core-c editorconfig-core-c
editorconfig-checker editorconfig-checker
];
# C c.packages = [
gcc gcc
gdb gdb
clang-tools clang-tools
binutils binutils
];
# C Sharp csharp.packages = [
dotnetCorePackages.sdk_6_0 dotnetCorePackages.sdk_6_0
omnisharp-roslyn omnisharp-roslyn
];
# Haskell haskell.packages = with haskellPackages; [
haskell-language-server
ghc ghc
cabal-install cabal-install
ormolu ormolu
(with haskellPackages; [
hoogle hoogle
])
stack stack
# stack2nix # stack2nix
cabal2nix cabal2nix
];
# Java
java.packages = [
openjdk openjdk
clang-tools clang-tools
gradle gradle
];
# Lua lua.packages = [
lua-language-server ];
# Nim nim.packages = [
nim nim
nimlsp ];
# Python python.packages = [
(python312.withPackages (p: with p; [ (python312.withPackages (p: with p; [
black black
isort isort
@ -52,19 +87,16 @@ in
pip pip
pyflakes pyflakes
pytest pytest
python-lsp-server
python-lsp-ruff
pylsp-rope
pyls-isort
])) ]))
pipenv pipenv
ruff ruff
];
# Racket racket.packages = [
racket racket
];
# Rust rust.packages = [
(rust-bin.selectLatestNightlyWith (toolchain: toolchain.default.override { (rust-bin.selectLatestNightlyWith (toolchain: toolchain.default.override {
extensions = [ extensions = [
"rust-src" "rust-src"
@ -72,12 +104,14 @@ in
]; ];
})) }))
gcc gcc
];
# Zig zig.packages = [
zig zig
zls zls
];
# LaTeX latex.packages = [
(texlive.combine { (texlive.combine {
inherit (texlive) inherit (texlive)
scheme-medium scheme-medium
@ -104,11 +138,20 @@ in
; ;
}) })
biber biber
];
# html html.packages = [
html-tidy html-tidy
nodePackages.prettier 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;
} }