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 typst = mkLangOpt "Typst";
24 mc = lib.mkEnableOption "Minecraft modpack stuff";
25 };
26
27 config = let
28 conf = config.cow.dev;
29 in
30 lib.mkIf conf.enable {
31 nixpkgs.overlays = lib.optional conf.rust inputs.fenix.overlays.default;
32
33 xdg.configFile = {
34 "astro/config.json" = lib.mkIf conf.web {
35 text = builtins.toJSON {
36 telemetry = {
37 enabled = false;
38 anonymousId = "";
39 notifiedAt = "0";
40 };
41 };
42 };
43 "ghc/ghci.conf" = lib.mkIf conf.haskell {
44 text = ''
45 :set prompt "\ESC[1;35m\x03BB> \ESC[m"
46 :set prompt-cont "\ESC[1;35m > \ESC[m"
47 '';
48 };
49 };
50
51 cow.imperm.keepCache =
52 [
53 ".config/gh"
54 ]
55 ++ (lib.optional conf.rust ".cargo")
56 ++ (lib.optionals conf.web [
57 ".npm"
58 ".pnpm"
59 ]);
60
61 programs.git = {
62 enable = true;
63 settings = {
64 init.defaultBranch = "main";
65 advice.addIgnoredFiles = false;
66 };
67 };
68
69 programs.npm = lib.mkIf conf.web {
70 enable = true;
71 # package = pkgs.nodejs_latest; TODO: Building node from source :(
72 settings = {
73 fund = false;
74 };
75 };
76
77 home.packages = with pkgs;
78 [gh]
79 ++ (lib.optionals (conf.rust or conf.c) [
80 pkg-config
81 gnumake
82 gcc
83 gdb
84 ])
85 ++ (lib.optionals conf.mc [
86 outputs.packages.${pkgs.system}.packwiz
87 jre
88 ])
89 ++ (lib.optionals conf.rust [
90 (pkgs.fenix.complete.withComponents [
91 "cargo"
92 "clippy"
93 "rust-src"
94 "rustc"
95 "rustfmt"
96 ])
97 rust-analyzer-nightly
98 cargo-tauri
99 mprocs
100 evcxr
101 ])
102 ++ (lib.optionals conf.web [
103 nodePackages.pnpm
104 yarn
105 deno
106 ])
107 ++ (lib.optionals conf.haskell [
108 haskell.compiler.ghc912
109 ])
110 ++ (lib.optionals conf.python [
111 python3
112 pipenv
113 uv
114 ruff
115 ])
116 ++ (lib.optionals conf.dotnet [
117 dotnet-sdk_10
118 dotnet-runtime_10
119 mono
120 dotnetPackages.Nuget
121 ])
122 ++ (lib.optionals conf.typst [
123 typst
124 typstyle
125 ])
126 ++ (lib.optional conf.cutter (cutter.withPlugins (p: with p; [rz-ghidra])));
127 };
128}