Flake for my NixOS devices
at main 128 lines 3.1 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 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}