global/programming: refactor into options
This commit is contained in:
parent
60707813d7
commit
e2c9ed9d25
3 changed files with 156 additions and 105 deletions
|
@ -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 [ ];
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@ in
|
|||
};
|
||||
|
||||
universe = {
|
||||
packages = mkOpt (listOf package) [ ];
|
||||
packages = packageListOpt;
|
||||
shellAliases = mkOpt (attrsOf str) { };
|
||||
variables = mkOpt (attrsOf (oneOf [ (listOf str) str path ])) { };
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue