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 }:
|
{ 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 [ ];
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 ])) { };
|
||||||
};
|
};
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue