adding specific dev language tooling shell config
This commit is contained in:
parent
ac8cedebe4
commit
797c5769b2
5 changed files with 320 additions and 33 deletions
74
flake.lock
generated
74
flake.lock
generated
|
|
@ -113,6 +113,22 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"flake-compat_3": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1747046372,
|
||||||
|
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"flake-utils": {
|
"flake-utils": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"systems": "systems"
|
"systems": "systems"
|
||||||
|
|
@ -167,6 +183,24 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"flake-utils_4": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems_5"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1731533236,
|
||||||
|
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"ghostty": {
|
"ghostty": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": "flake-compat",
|
"flake-compat": "flake-compat",
|
||||||
|
|
@ -331,7 +365,8 @@
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
"nix-ai-tools": "nix-ai-tools",
|
"nix-ai-tools": "nix-ai-tools",
|
||||||
"nixpkgs": "nixpkgs_2",
|
"nixpkgs": "nixpkgs_2",
|
||||||
"nvim-bundle": "nvim-bundle"
|
"nvim-bundle": "nvim-bundle",
|
||||||
|
"zig-overlay": "zig-overlay"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rust-overlay": {
|
"rust-overlay": {
|
||||||
|
|
@ -416,6 +451,21 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"systems_5": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"treefmt-nix": {
|
"treefmt-nix": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
|
|
@ -466,6 +516,28 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"zig-overlay": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-compat": "flake-compat_3",
|
||||||
|
"flake-utils": "flake-utils_4",
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1748261582,
|
||||||
|
"narHash": "sha256-3i0IL3s18hdDlbsf0/E+5kyPRkZwGPbSFngq5eToiAA=",
|
||||||
|
"owner": "mitchellh",
|
||||||
|
"repo": "zig-overlay",
|
||||||
|
"rev": "aafb1b093fb838f7a02613b719e85ec912914221",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "mitchellh",
|
||||||
|
"repo": "zig-overlay",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"zon2nix": {
|
"zon2nix": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": "nixpkgs"
|
"nixpkgs": "nixpkgs"
|
||||||
|
|
|
||||||
127
flake.nix
127
flake.nix
|
|
@ -17,12 +17,16 @@
|
||||||
|
|
||||||
nix-ai-tools.url = "github:numtide/nix-ai-tools";
|
nix-ai-tools.url = "github:numtide/nix-ai-tools";
|
||||||
nix-ai-tools.inputs.nixpkgs.follows = "nixpkgs";
|
nix-ai-tools.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
|
zig-overlay.url = "github:mitchellh/zig-overlay";
|
||||||
|
zig-overlay.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs =
|
outputs =
|
||||||
inputs@{ self, nixpkgs, darwin, home-manager, ghostty, nix-ai-tools, ... }:
|
inputs@{ self, nixpkgs, darwin, home-manager, ghostty, nix-ai-tools, ... }:
|
||||||
let
|
let
|
||||||
inherit (nixpkgs.lib) genAttrs;
|
inherit (nixpkgs.lib) genAttrs;
|
||||||
|
lib = nixpkgs.lib;
|
||||||
|
|
||||||
systems = [ "aarch64-darwin" "x86_64-darwin" ];
|
systems = [ "aarch64-darwin" "x86_64-darwin" ];
|
||||||
|
|
||||||
|
|
@ -30,6 +34,11 @@
|
||||||
|
|
||||||
overlaysList = [ ghostty.overlays.default ];
|
overlaysList = [ ghostty.overlays.default ];
|
||||||
|
|
||||||
|
zigOverlay = if builtins.hasAttr "zig-overlay" inputs then
|
||||||
|
inputs."zig-overlay"
|
||||||
|
else
|
||||||
|
null;
|
||||||
|
|
||||||
mkPkgs = system:
|
mkPkgs = system:
|
||||||
import nixpkgs {
|
import nixpkgs {
|
||||||
inherit system;
|
inherit system;
|
||||||
|
|
@ -67,16 +76,116 @@
|
||||||
darwinConfigurations = { macbook-pro = mkDarwin { }; };
|
darwinConfigurations = { macbook-pro = mkDarwin { }; };
|
||||||
|
|
||||||
devShells = forEachSystem (system:
|
devShells = forEachSystem (system:
|
||||||
let pkgs = mkPkgs system;
|
let
|
||||||
in {
|
pkgs = mkPkgs system;
|
||||||
default = pkgs.mkShell {
|
python = if builtins.hasAttr "python312" pkgs then
|
||||||
packages = with pkgs; [ git nixfmt-classic ];
|
pkgs.python312
|
||||||
shellHook = ''
|
else
|
||||||
echo "Loaded default shell for ${system}"
|
pkgs.python3;
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
});
|
zigPackages =
|
||||||
|
if zigOverlay != null && builtins.hasAttr "packages" zigOverlay then
|
||||||
|
zigOverlay.packages
|
||||||
|
else
|
||||||
|
{ };
|
||||||
|
|
||||||
|
zigCandidate =
|
||||||
|
if zigOverlay != null && system == "aarch64-darwin" then
|
||||||
|
lib.attrByPath [ system "master" "zig" ] null zigPackages
|
||||||
|
else
|
||||||
|
null;
|
||||||
|
|
||||||
|
zigCandidateBroken = if zigCandidate != null then
|
||||||
|
if zigCandidate ? meta && zigCandidate.meta ? broken then
|
||||||
|
zigCandidate.meta.broken
|
||||||
|
else
|
||||||
|
false
|
||||||
|
else
|
||||||
|
true;
|
||||||
|
|
||||||
|
zigFallback = pkgs.zig;
|
||||||
|
zigFallbackBroken =
|
||||||
|
if zigFallback ? meta && zigFallback.meta ? broken then
|
||||||
|
zigFallback.meta.broken
|
||||||
|
else
|
||||||
|
false;
|
||||||
|
|
||||||
|
zigPackage =
|
||||||
|
if zigCandidate != null && zigCandidateBroken == false then
|
||||||
|
zigCandidate
|
||||||
|
else if zigFallbackBroken == false then
|
||||||
|
zigFallback
|
||||||
|
else
|
||||||
|
null;
|
||||||
|
|
||||||
|
zlsBroken = if pkgs.zls ? meta && pkgs.zls.meta ? broken then
|
||||||
|
pkgs.zls.meta.broken
|
||||||
|
else
|
||||||
|
false;
|
||||||
|
|
||||||
|
zigShell =
|
||||||
|
lib.optionalAttrs (zigPackage != null && zlsBroken == false) {
|
||||||
|
zig-nightly = pkgs.mkShell {
|
||||||
|
name = "zig-nightly";
|
||||||
|
packages =
|
||||||
|
[ zigPackage pkgs.zls pkgs.pkg-config pkgs.cmake pkgs.gdb ];
|
||||||
|
shellHook = ''
|
||||||
|
mkdir -p "$PWD/.cache/zig"
|
||||||
|
export ZIG_GLOBAL_CACHE_DIR="$PWD/.cache/zig"
|
||||||
|
echo "Zig shell using ${zigPackage.pname or "zig"} ${
|
||||||
|
zigPackage.version or ""
|
||||||
|
}"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
baseShells = {
|
||||||
|
default = pkgs.mkShell {
|
||||||
|
name = "default";
|
||||||
|
packages = with pkgs; [ git nixfmt-classic ];
|
||||||
|
shellHook = ''
|
||||||
|
echo "Loaded default shell for ${system}"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
python-uv = pkgs.mkShell {
|
||||||
|
name = "python-uv";
|
||||||
|
packages = [ python pkgs.uv pkgs.ruff pkgs.pyright ];
|
||||||
|
shellHook = ''
|
||||||
|
export UV_PYTHON="${python}/bin/python3"
|
||||||
|
export UV_LINK_MODE=copy
|
||||||
|
echo "Python (uv) shell ready"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
go = pkgs.mkShell {
|
||||||
|
name = "go";
|
||||||
|
packages = with pkgs; [ go gopls golangci-lint delve git ];
|
||||||
|
shellHook = ''
|
||||||
|
mkdir -p "$PWD/.cache/go" "$PWD/.cache/gomod"
|
||||||
|
export GOPATH="$PWD/.cache/go"
|
||||||
|
export GOMODCACHE="$PWD/.cache/gomod"
|
||||||
|
echo "Go toolchain shell ready"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
web-bun = pkgs.mkShell {
|
||||||
|
name = "web-bun";
|
||||||
|
packages = with pkgs; [
|
||||||
|
bun
|
||||||
|
nodejs_20
|
||||||
|
yarn
|
||||||
|
esbuild
|
||||||
|
vscode-langservers-extracted
|
||||||
|
];
|
||||||
|
shellHook = ''
|
||||||
|
mkdir -p "$PWD/.cache/bun"
|
||||||
|
export BUN_INSTALL_CACHE="$PWD/.cache/bun"
|
||||||
|
echo "Bun/Node web shell ready"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in baseShells // zigShell);
|
||||||
|
|
||||||
formatter = forEachSystem (system: (mkPkgs system).nixfmt-classic);
|
formatter = forEachSystem (system: (mkPkgs system).nixfmt-classic);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,28 +12,9 @@ in {
|
||||||
|
|
||||||
packages = mkOption {
|
packages = mkOption {
|
||||||
type = types.listOf types.package;
|
type = types.listOf types.package;
|
||||||
default = with pkgs; [
|
default = with pkgs; [ tailscale ];
|
||||||
ast-grep
|
description =
|
||||||
duckdb
|
"System packages that must be available globally across macOS.";
|
||||||
ffmpeg
|
|
||||||
fzf
|
|
||||||
htop
|
|
||||||
jetbrains-mono
|
|
||||||
jq
|
|
||||||
lazydocker
|
|
||||||
lazygit
|
|
||||||
lorri
|
|
||||||
neovim
|
|
||||||
pandoc
|
|
||||||
ripgrep
|
|
||||||
tree
|
|
||||||
vim
|
|
||||||
yq
|
|
||||||
tmux
|
|
||||||
tailscale
|
|
||||||
wget
|
|
||||||
];
|
|
||||||
description = "System packages to install for development tooling.";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@
|
||||||
./shell/nushell.nix
|
./shell/nushell.nix
|
||||||
./shell/tmux.nix
|
./shell/tmux.nix
|
||||||
./devtools/ai-tools.nix
|
./devtools/ai-tools.nix
|
||||||
|
./devtools/languages.nix
|
||||||
./devtools/default.nix
|
./devtools/default.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
@ -21,6 +22,27 @@
|
||||||
|
|
||||||
rsydn.devTools = {
|
rsydn.devTools = {
|
||||||
enable = lib.mkDefault true;
|
enable = lib.mkDefault true;
|
||||||
packages = with pkgs; [ bun cloudflared ];
|
packages = with pkgs; [
|
||||||
|
ast-grep
|
||||||
|
cloudflared
|
||||||
|
ffmpeg
|
||||||
|
fzf
|
||||||
|
htop
|
||||||
|
jetbrains-mono
|
||||||
|
jq
|
||||||
|
lazydocker
|
||||||
|
lazygit
|
||||||
|
lorri
|
||||||
|
neovim
|
||||||
|
pandoc
|
||||||
|
ripgrep
|
||||||
|
tmux
|
||||||
|
tree
|
||||||
|
vim
|
||||||
|
wget
|
||||||
|
yq
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
rsydn.languages.enable = lib.mkDefault true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
103
modules/home/rsydn/devtools/languages.nix
Normal file
103
modules/home/rsydn/devtools/languages.nix
Normal file
|
|
@ -0,0 +1,103 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
let
|
||||||
|
inherit (lib) mkEnableOption mkOption mkIf types warn unique;
|
||||||
|
cfg = config.rsydn.languages;
|
||||||
|
|
||||||
|
hasPkg = name: builtins.hasAttr name pkgs;
|
||||||
|
getPkg = name: if hasPkg name then pkgs.${name} else null;
|
||||||
|
|
||||||
|
mkToolOption = { name, defaultPackage, description }:
|
||||||
|
mkOption {
|
||||||
|
type = types.submodule {
|
||||||
|
options = {
|
||||||
|
enable = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = defaultPackage != null;
|
||||||
|
description = "Enable ${name} tooling globally.";
|
||||||
|
};
|
||||||
|
package = mkOption {
|
||||||
|
type = types.nullOr types.package;
|
||||||
|
default = defaultPackage;
|
||||||
|
description =
|
||||||
|
"Package derivation to install for ${name}. Set to null to skip.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
default = {
|
||||||
|
enable = defaultPackage != null;
|
||||||
|
package = defaultPackage;
|
||||||
|
};
|
||||||
|
description = description;
|
||||||
|
};
|
||||||
|
|
||||||
|
mkToolPackages = specs:
|
||||||
|
builtins.concatMap (tool:
|
||||||
|
let toolCfg = tool.cfg;
|
||||||
|
in if toolCfg.enable then
|
||||||
|
if toolCfg.package != null then
|
||||||
|
[ toolCfg.package ]
|
||||||
|
else
|
||||||
|
warn "rsydn.languages.${tool.name}: package is null, skipping" [ ]
|
||||||
|
else
|
||||||
|
[ ]) specs;
|
||||||
|
|
||||||
|
uvPackage = getPkg "uv";
|
||||||
|
goPackage = getPkg "go";
|
||||||
|
nodePackage = if builtins.hasAttr "nodejs_20" pkgs then
|
||||||
|
pkgs.nodejs_20
|
||||||
|
else
|
||||||
|
getPkg "nodejs";
|
||||||
|
|
||||||
|
toolSpecs = [
|
||||||
|
{
|
||||||
|
name = "uv";
|
||||||
|
cfg = cfg.uv;
|
||||||
|
defaultPackage = uvPackage;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "go";
|
||||||
|
cfg = cfg.go;
|
||||||
|
defaultPackage = goPackage;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "node";
|
||||||
|
cfg = cfg.node;
|
||||||
|
defaultPackage = nodePackage;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
languagePackages = mkToolPackages toolSpecs;
|
||||||
|
|
||||||
|
in {
|
||||||
|
options.rsydn.languages = {
|
||||||
|
enable = mkEnableOption "Language tooling packages for everyday workflows";
|
||||||
|
|
||||||
|
uv = mkToolOption {
|
||||||
|
name = "uv";
|
||||||
|
defaultPackage = uvPackage;
|
||||||
|
description = "Python package installer and virtualenv manager.";
|
||||||
|
};
|
||||||
|
|
||||||
|
go = mkToolOption {
|
||||||
|
name = "Go";
|
||||||
|
defaultPackage = goPackage;
|
||||||
|
description = "Go compiler and GOPATH toolchain.";
|
||||||
|
};
|
||||||
|
|
||||||
|
node = mkToolOption {
|
||||||
|
name = "Node.js";
|
||||||
|
defaultPackage = nodePackage;
|
||||||
|
description = "Node.js runtime for CLI tooling.";
|
||||||
|
};
|
||||||
|
|
||||||
|
extraPackages = mkOption {
|
||||||
|
type = types.listOf types.package;
|
||||||
|
default = [ ];
|
||||||
|
description = "Additional language tooling packages to install globally.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
home.packages = unique (languagePackages ++ cfg.extraPackages);
|
||||||
|
};
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue