this repo has no description
1{
2 config,
3 lib,
4 pkgs,
5 inputs,
6 ...
7}: {
8 options.cow.dev = let
9 mkLangOpt = d: ((lib.mkEnableOption d) // {default = config.cow.dev.enable;});
10 in {
11 enable = lib.mkEnableOption "Dev stuff (all on by default)";
12 c = mkLangOpt "C/C++ dev stuff";
13 rust = mkLangOpt "Rust dev stuff";
14 haskell = mkLangOpt "Haskell dev stuff";
15 web = mkLangOpt "Web dev stuff";
16 nix = mkLangOpt "Nix dev stuff";
17 python = mkLangOpt "Python dev stuff";
18 dotnet = lib.mkEnableOption ".NET dev stuff";
19 cutter = mkLangOpt "Cutter";
20 typst = mkLangOpt "Typst";
21 mc = lib.mkEnableOption "Minecraft modpack stuff";
22 };
23
24 config = let
25 conf = config.cow.dev;
26 in
27 lib.mkIf conf.enable {
28 nixpkgs.overlays = lib.optional conf.rust inputs.fenix.overlays.default;
29
30 xdg.configFile = {
31 "astro/config.json" = lib.mkIf conf.web {
32 text = builtins.toJSON {
33 telemetry = {
34 enabled = false;
35 anonymousId = "";
36 notifiedAt = "0";
37 };
38 };
39 };
40 "ghc/ghci.conf" = lib.mkIf conf.haskell {
41 text = ''
42 :set prompt "\ESC[1;35m\x03BB> \ESC[m"
43 :set prompt-cont "\ESC[1;35m > \ESC[m"
44 '';
45 };
46 };
47
48 cow.imperm.keepCache =
49 [
50 ".config/gh"
51 ]
52 ++ (lib.optional conf.rust ".cargo")
53 ++ (lib.optionals conf.web [
54 ".npm"
55 ".pnpm"
56 ]);
57
58 programs.git = {
59 enable = true;
60 settings = {
61 init.defaultBranch = "main";
62 advice.addIgnoredFiles = false;
63 };
64 };
65
66 programs.npm = lib.mkIf conf.web {
67 enable = true;
68 package = pkgs.nodejs_latest;
69 settings = {
70 fund = false;
71 };
72 };
73
74 home.packages = with pkgs;
75 [gh]
76 ++ (lib.optionals (conf.rust or conf.c) [
77 pkg-config
78 gnumake
79 gcc
80 gdb
81 ])
82 ++ (lib.optionals conf.mc [
83 jre
84 ])
85 ++ (lib.optionals conf.rust [
86 (pkgs.fenix.complete.withComponents [
87 "cargo"
88 "clippy"
89 "rust-src"
90 "rustc"
91 "rustfmt"
92 ])
93 rust-analyzer-nightly
94 cargo-tauri
95 mprocs
96 evcxr
97 ])
98 ++ (lib.optionals conf.web [
99 pnpm
100 yarn
101 # deno
102 ])
103 ++ (lib.optionals conf.haskell [
104 haskell.compiler.ghc912
105 ])
106 ++ (lib.optionals conf.python [
107 python3
108 pipenv
109 uv
110 ruff
111 ])
112 ++ (lib.optionals conf.dotnet [
113 dotnet-sdk_10
114 dotnet-runtime_10
115 mono
116 dotnetPackages.Nuget
117 ])
118 ++ (lib.optionals conf.typst [
119 typst
120 typstyle
121 ]);
122 # ++ (lib.optional conf.cutter (cutter.withPlugins (p: with p; [rz-ghidra]))); TODO: Cutter broken
123 };
124}