Flake for my NixOS devices
at musnix 119 lines 2.9 kB view raw
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}