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