From 30a9a23de288cfde54a153759a00121175eaa65d Mon Sep 17 00:00:00 2001
From: m3tm3re
Date: Sun, 26 Apr 2026 13:20:22 +0200
Subject: [PATCH] refactor: add language runtimes module and cleanup agent
config
- Add home/coding/languages/ with Python, JavaScript, Rust, Go, TypeScript
- Move bun/nodejs from agents.nix to languages/javascript.nix
- Move python3 with packages to languages/python.nix
- Move npm config to javascript.nix (broader context)
- Add language options to m3-ares and m3-kratos host configs
- Move pyrefly from agents.nix to lsp/servers.nix
- Remove duplicate python3 reference (build conflict fix)
- Remove unused base/secrets/cli-tools/ duplicates
---
home/base/cli-tools/packages.nix | 14 +-
home/base/secrets/cli-tools/bat.nix | 145 ---------------------
home/base/secrets/cli-tools/carapace.nix | 21 ---
home/base/secrets/cli-tools/default.nix | 17 ---
home/base/secrets/cli-tools/direnv.nix | 20 ---
home/base/secrets/cli-tools/eza.nix | 21 ---
home/base/secrets/cli-tools/fzf.nix | 41 ------
home/base/secrets/cli-tools/lf.nix | 28 ----
home/base/secrets/cli-tools/nitch.nix | 17 ---
home/base/secrets/cli-tools/packages.nix | 54 --------
home/base/secrets/cli-tools/television.nix | 60 ---------
home/base/secrets/cli-tools/zellij-ps.nix | 30 -----
home/base/secrets/cli-tools/zellij.nix | 34 -----
home/base/secrets/cli-tools/zoxide.nix | 20 ---
home/coding/agents/agents.nix | 33 +----
home/coding/agents/pi.nix | 1 -
home/coding/default.nix | 3 +-
home/coding/languages/default.nix | 10 ++
home/coding/languages/go.nix | 19 +++
home/coding/languages/javascript.nix | 25 ++++
home/coding/languages/python.nix | 30 +++++
home/coding/languages/rust-toolchain.nix | 20 +++
home/coding/languages/typescript.nix | 19 +++
home/coding/lsp/servers.nix | 1 +
home/m3tam3re/m3-ares.nix | 7 +
home/m3tam3re/m3-kratos.nix | 7 +
26 files changed, 152 insertions(+), 545 deletions(-)
delete mode 100644 home/base/secrets/cli-tools/bat.nix
delete mode 100644 home/base/secrets/cli-tools/carapace.nix
delete mode 100644 home/base/secrets/cli-tools/default.nix
delete mode 100644 home/base/secrets/cli-tools/direnv.nix
delete mode 100644 home/base/secrets/cli-tools/eza.nix
delete mode 100644 home/base/secrets/cli-tools/fzf.nix
delete mode 100644 home/base/secrets/cli-tools/lf.nix
delete mode 100644 home/base/secrets/cli-tools/nitch.nix
delete mode 100644 home/base/secrets/cli-tools/packages.nix
delete mode 100644 home/base/secrets/cli-tools/television.nix
delete mode 100644 home/base/secrets/cli-tools/zellij-ps.nix
delete mode 100644 home/base/secrets/cli-tools/zellij.nix
delete mode 100644 home/base/secrets/cli-tools/zoxide.nix
create mode 100644 home/coding/languages/default.nix
create mode 100644 home/coding/languages/go.nix
create mode 100644 home/coding/languages/javascript.nix
create mode 100644 home/coding/languages/python.nix
create mode 100644 home/coding/languages/rust-toolchain.nix
create mode 100644 home/coding/languages/typescript.nix
diff --git a/home/base/cli-tools/packages.nix b/home/base/cli-tools/packages.nix
index fa226f4..aee3c41 100644
--- a/home/base/cli-tools/packages.nix
+++ b/home/base/cli-tools/packages.nix
@@ -22,22 +22,30 @@ in {
jq
ripgrep
+ # Nix
+ alejandra
+ comma
+ nixd
+ nix-diff
+ nix-index
+ nix-update
+
# Dev tools
+ bc
+ cmake
devenv
gcc
+ gnumake
go
httpie
just
lazygit
- nix-index
- nix-update
progress
sqlite
sqlite-vec
tldr
# AI tools
- comma
fabric-ai
llm
diff --git a/home/base/secrets/cli-tools/bat.nix b/home/base/secrets/cli-tools/bat.nix
deleted file mode 100644
index 9a0e213..0000000
--- a/home/base/secrets/cli-tools/bat.nix
+++ /dev/null
@@ -1,145 +0,0 @@
-# Bat — cat replacement with nix-colors syntax highlighting theme.
-{
- config,
- lib,
- pkgs,
- ...
-}:
-with lib; let
- cfg = config.base.cliTools.bat;
- palette = config.colorScheme.palette;
-in {
- # Enabled by default — base modules are always-on.
- options.base.cliTools.bat.enable = (mkEnableOption "enable bat with nix-colors theme") // {default = true;};
-
- config = mkIf cfg.enable {
- programs.bat = {
- enable = true;
- config = {theme = "universal";};
- themes = {
- universal = {
- src = pkgs.writeText "universal.tmTheme" ''
-
-
-
-
- name
- Universal (nix-colors)
- settings
-
-
- settings
-
- background
- #${palette.base00}
- foreground
- #${palette.base05}
- caret
- #${palette.base05}
- selection
- #${palette.base02}
- selectionForeground
- #${palette.base05}
- lineHighlight
- #${palette.base01}
-
-
-
- name
- Comment
- scope
- comment
- settings
-
- foreground
- #${palette.base03}
- fontStyle
- italic
-
-
-
- name
- String
- scope
- string
- settings
-
- foreground
- #${palette.base0A}
-
-
-
- name
- Number
- scope
- constant.numeric
- settings
-
- foreground
- #${palette.base0E}
-
-
-
- name
- Keyword
- scope
- keyword
- settings
-
- foreground
- #${palette.base08}
-
-
-
- name
- Function
- scope
- entity.name.function
- settings
-
- foreground
- #${palette.base0B}
-
-
-
- name
- Type
- scope
- entity.name.type, storage.type
- settings
-
- foreground
- #${palette.base0D}
-
-
-
- name
- Variable
- scope
- variable
- settings
-
- foreground
- #${palette.base05}
-
-
-
- name
- Constant
- scope
- constant
- settings
-
- foreground
- #${palette.base0E}
-
-
-
-
-
- '';
- };
- };
- };
- };
-}
diff --git a/home/base/secrets/cli-tools/carapace.nix b/home/base/secrets/cli-tools/carapace.nix
deleted file mode 100644
index ea9194e..0000000
--- a/home/base/secrets/cli-tools/carapace.nix
+++ /dev/null
@@ -1,21 +0,0 @@
-# Carapace — multi-shell completion engine with Fish, Nushell, and Bash integration.
-{
- config,
- lib,
- ...
-}:
-with lib; let
- cfg = config.base.cliTools.carapace;
-in {
- # Enabled by default — base modules are always-on.
- options.base.cliTools.carapace.enable = (mkEnableOption "enable carapace completion engine") // {default = true;};
-
- config = mkIf cfg.enable {
- programs.carapace = {
- enable = true;
- enableFishIntegration = true;
- enableNushellIntegration = true;
- enableBashIntegration = true;
- };
- };
-}
diff --git a/home/base/secrets/cli-tools/default.nix b/home/base/secrets/cli-tools/default.nix
deleted file mode 100644
index 3125597..0000000
--- a/home/base/secrets/cli-tools/default.nix
+++ /dev/null
@@ -1,17 +0,0 @@
-# CLI tools aggregator — imports all base command-line utilities.
-{...}: {
- imports = [
- ./bat.nix
- ./carapace.nix
- ./direnv.nix
- ./eza.nix
- ./fzf.nix
- ./lf.nix
- ./nitch.nix
- ./packages.nix
- ./television.nix
- ./zellij.nix
- ./zellij-ps.nix
- ./zoxide.nix
- ];
-}
diff --git a/home/base/secrets/cli-tools/direnv.nix b/home/base/secrets/cli-tools/direnv.nix
deleted file mode 100644
index 4ca206a..0000000
--- a/home/base/secrets/cli-tools/direnv.nix
+++ /dev/null
@@ -1,20 +0,0 @@
-# Direnv — automatic environment loading with nix-direnv integration.
-{
- config,
- lib,
- ...
-}:
-with lib; let
- cfg = config.base.cliTools.direnv;
-in {
- # Enabled by default — base modules are always-on.
- options.base.cliTools.direnv.enable = (mkEnableOption "enable direnv with nix-direnv") // {default = true;};
-
- config = mkIf cfg.enable {
- programs.direnv = {
- enable = true;
- enableNushellIntegration = true;
- nix-direnv.enable = true;
- };
- };
-}
diff --git a/home/base/secrets/cli-tools/eza.nix b/home/base/secrets/cli-tools/eza.nix
deleted file mode 100644
index 2e432a8..0000000
--- a/home/base/secrets/cli-tools/eza.nix
+++ /dev/null
@@ -1,21 +0,0 @@
-# Eza — modern ls replacement with icons, git status, and long format by default.
-{
- config,
- lib,
- ...
-}:
-with lib; let
- cfg = config.base.cliTools.eza;
-in {
- # Enabled by default — base modules are always-on.
- options.base.cliTools.eza.enable = (mkEnableOption "enable eza modern ls replacement") // {default = true;};
-
- config = mkIf cfg.enable {
- programs.eza = {
- enable = true;
- enableFishIntegration = true;
- enableBashIntegration = true;
- extraOptions = ["-l" "--icons" "--git" "-a"];
- };
- };
-}
diff --git a/home/base/secrets/cli-tools/fzf.nix b/home/base/secrets/cli-tools/fzf.nix
deleted file mode 100644
index 4093298..0000000
--- a/home/base/secrets/cli-tools/fzf.nix
+++ /dev/null
@@ -1,41 +0,0 @@
-# Fuzzy finder with nix-colors palette and Wayland clipboard integration.
-{
- config,
- lib,
- ...
-}:
-with lib; let
- cfg = config.base.cliTools.fzf;
-in {
- # Enabled by default — base modules are always-on.
- options.base.cliTools.fzf.enable = (mkEnableOption "enable fuzzy finder") // {default = true;};
-
- config = mkIf cfg.enable {
- programs.fzf = {
- enable = true;
- enableFishIntegration = true;
- colors = {
- "fg" = "#${config.colorScheme.palette.base05}";
- "bg" = "#${config.colorScheme.palette.base00}";
- "hl" = "#${config.colorScheme.palette.base0E}";
- "fg+" = "#${config.colorScheme.palette.base05}";
- "bg+" = "#${config.colorScheme.palette.base02}";
- "hl+" = "#${config.colorScheme.palette.base0E}";
- "info" = "#${config.colorScheme.palette.base09}";
- "prompt" = "#${config.colorScheme.palette.base0B}";
- "pointer" = "#${config.colorScheme.palette.base08}";
- "marker" = "#${config.colorScheme.palette.base08}";
- "spinner" = "#${config.colorScheme.palette.base09}";
- "header" = "#${config.colorScheme.palette.base03}";
- };
- defaultOptions = [
- "--preview='bat --color=always -n {}'"
- "--bind 'ctrl-/:toggle-preview'"
- "--header 'Press CTRL-Y to copy command into clipboard'"
- "--bind 'ctrl-y:execute-silent(echo -n {2..} | wl-copy)+abort'"
- ];
- defaultCommand = "fd --type f --exclude .git --follow --hidden";
- changeDirWidgetCommand = "fd --type d --exclude .git --follow --hidden";
- };
- };
-}
diff --git a/home/base/secrets/cli-tools/lf.nix b/home/base/secrets/cli-tools/lf.nix
deleted file mode 100644
index 50ff740..0000000
--- a/home/base/secrets/cli-tools/lf.nix
+++ /dev/null
@@ -1,28 +0,0 @@
-# Lf — terminal file manager with bat preview and Dracula theme.
-{
- config,
- lib,
- pkgs,
- ...
-}:
-with lib; let
- cfg = config.base.cliTools.lf;
-in {
- # Enabled by default — base modules are always-on.
- options.base.cliTools.lf.enable = (mkEnableOption "enable lf terminal file manager") // {default = true;};
-
- config = mkIf cfg.enable {
- home.packages = [pkgs.lf];
-
- programs.lf = {
- enable = true;
- settings = {
- preview = true;
- drawbox = true;
- hidden = true;
- icons = true;
- previewer = "bat";
- };
- };
- };
-}
diff --git a/home/base/secrets/cli-tools/nitch.nix b/home/base/secrets/cli-tools/nitch.nix
deleted file mode 100644
index eac4d62..0000000
--- a/home/base/secrets/cli-tools/nitch.nix
+++ /dev/null
@@ -1,17 +0,0 @@
-# Nitch — minimal system information display tool.
-{
- config,
- lib,
- pkgs,
- ...
-}:
-with lib; let
- cfg = config.base.cliTools.nitch;
-in {
- # Enabled by default — base modules are always-on.
- options.base.cliTools.nitch.enable = (mkEnableOption "enable nitch") // {default = true;};
-
- config = mkIf cfg.enable {
- home.packages = [pkgs.nitch];
- };
-}
diff --git a/home/base/secrets/cli-tools/packages.nix b/home/base/secrets/cli-tools/packages.nix
deleted file mode 100644
index fa226f4..0000000
--- a/home/base/secrets/cli-tools/packages.nix
+++ /dev/null
@@ -1,54 +0,0 @@
-# Essential CLI packages — core utilities always available on every host.
-# NOTE: `lazylib` does not exist in nixpkgs. `lazygit` is the correct package
-# (Git TUI) and is intentionally used here instead.
-{
- config,
- lib,
- pkgs,
- ...
-}:
-with lib; let
- cfg = config.base.cliTools.essentials;
-in {
- # Enabled by default — base modules are always-on.
- options.base.cliTools.essentials.enable = (mkEnableOption "enable essential CLI packages") // {default = true;};
-
- config = mkIf cfg.enable {
- home.packages = with pkgs; [
- # Core utilities
- coreutils
- fd
- htop
- jq
- ripgrep
-
- # Dev tools
- devenv
- gcc
- go
- httpie
- just
- lazygit
- nix-index
- nix-update
- progress
- sqlite
- sqlite-vec
- tldr
-
- # AI tools
- comma
- fabric-ai
- llm
-
- # Misc
- basecamp
- hyprpaper-random
- libnotify
- trash-cli
- unzip
- yazi
- zip
- ];
- };
-}
diff --git a/home/base/secrets/cli-tools/television.nix b/home/base/secrets/cli-tools/television.nix
deleted file mode 100644
index 3a74203..0000000
--- a/home/base/secrets/cli-tools/television.nix
+++ /dev/null
@@ -1,60 +0,0 @@
-# Television — fuzzy finder with custom channels for tldr, git-diff, and git-log.
-{
- config,
- lib,
- ...
-}:
-with lib; let
- cfg = config.base.cliTools.television;
-in {
- # Enabled by default — base modules are always-on.
- options.base.cliTools.television.enable = (mkEnableOption "enable television") // {default = true;};
-
- config = mkIf cfg.enable {
- programs.television = {
- enable = true;
- channels = {
- tldr = {
- metadata = {
- description = "Browse TLDR pages";
- name = "tldr";
- requirements = ["tldr"];
- };
- preview = {
- command = "tldr '{}'";
- };
- source = {
- command = "tldr --list";
- };
- };
- git-diff = {
- metadata = {
- description = "A channel to select files from git diff commands";
- name = "git-diff";
- requirements = ["git"];
- };
- preview = {
- command = "git diff HEAD --color=always -- '{}'";
- };
- source = {
- command = "git diff --name-only HEAD";
- };
- };
- git-log = {
- metadata = {
- description = "A channel to select from git log entries";
- name = "git-log";
- requirements = ["git"];
- };
- preview = {
- command = "git show -p --stat --pretty=fuller --color=always '{0}'";
- };
- source = {
- command = "git log --oneline --date=short --pretty=\"format:%h %s %an %cd\" \"$@\"";
- output = "{split: :0}";
- };
- };
- };
- };
- };
-}
diff --git a/home/base/secrets/cli-tools/zellij-ps.nix b/home/base/secrets/cli-tools/zellij-ps.nix
deleted file mode 100644
index 8dac702..0000000
--- a/home/base/secrets/cli-tools/zellij-ps.nix
+++ /dev/null
@@ -1,30 +0,0 @@
-# Zellij-ps — project-aware Zellij session manager from m3ta-nixpkgs.
-# Delegates to `cli.zellij-ps` — the home-manager module namespace provided by
-# m3ta-nixpkgs (inputs.m3ta-nixpkgs.nixosModules.default). This is intentional;
-# `cli.*` is the convention used by m3ta-nixpkgs home-manager modules.
-{
- config,
- lib,
- ...
-}:
-with lib; let
- cfg = config.base.cliTools.zellijPs;
-in {
- options.base.cliTools.zellijPs = {
- # Enabled by default — base modules are always-on.
- enable = (mkEnableOption "enable zellij-ps project session manager") // {default = true;};
-
- projectFolders = mkOption {
- type = types.listOf types.path;
- description = "Project root folders scanned by zellij-ps.";
- default = ["${config.home.homeDirectory}/p"];
- };
- };
-
- config = mkIf cfg.enable {
- cli.zellij-ps = {
- enable = true;
- projectFolders = cfg.projectFolders;
- };
- };
-}
diff --git a/home/base/secrets/cli-tools/zellij.nix b/home/base/secrets/cli-tools/zellij.nix
deleted file mode 100644
index efe2c6c..0000000
--- a/home/base/secrets/cli-tools/zellij.nix
+++ /dev/null
@@ -1,34 +0,0 @@
-# Zellij terminal multiplexer with nix-colors theming.
-{
- config,
- lib,
- ...
-}:
-with lib; let
- cfg = config.base.cliTools.zellij;
-in {
- # Enabled by default — base modules are always-on.
- options.base.cliTools.zellij.enable = (mkEnableOption "enable zellij multiplexer") // {default = true;};
-
- config = mkIf cfg.enable {
- programs.zellij = {
- enable = true;
- settings = {
- theme = "universal";
- themes.universal = {
- bg = "#${config.colorScheme.palette.base00}";
- fg = "#${config.colorScheme.palette.base05}";
- black = "#${config.colorScheme.palette.base01}";
- red = "#${config.colorScheme.palette.base08}";
- green = "#${config.colorScheme.palette.base0B}";
- yellow = "#${config.colorScheme.palette.base0A}";
- blue = "#${config.colorScheme.palette.base0D}";
- magenta = "#${config.colorScheme.palette.base0E}";
- cyan = "#${config.colorScheme.palette.base0C}";
- white = "#${config.colorScheme.palette.base07}";
- orange = "#${config.colorScheme.palette.base09}";
- };
- };
- };
- };
-}
diff --git a/home/base/secrets/cli-tools/zoxide.nix b/home/base/secrets/cli-tools/zoxide.nix
deleted file mode 100644
index bc3e80e..0000000
--- a/home/base/secrets/cli-tools/zoxide.nix
+++ /dev/null
@@ -1,20 +0,0 @@
-# Zoxide — smarter cd with Fish and Nushell integration.
-{
- config,
- lib,
- ...
-}:
-with lib; let
- cfg = config.base.cliTools.zoxide;
-in {
- # Enabled by default — base modules are always-on.
- options.base.cliTools.zoxide.enable = (mkEnableOption "enable zoxide smarter cd") // {default = true;};
-
- config = mkIf cfg.enable {
- programs.zoxide = {
- enable = true;
- enableFishIntegration = true;
- enableNushellIntegration = true;
- };
- };
-}
diff --git a/home/coding/agents/agents.nix b/home/coding/agents/agents.nix
index acd840f..8bb37f0 100644
--- a/home/coding/agents/agents.nix
+++ b/home/coding/agents/agents.nix
@@ -8,15 +8,7 @@
pkgs,
videoDrivers ? [],
...
-}:
-with lib; let
- npmGlobalPrefix = "${config.home.homeDirectory}/.npm-global";
-in {
- home.file.".npmrc".text = ''
- prefix=${npmGlobalPrefix}
- '';
- home.sessionVariables.NPM_CONFIG_PREFIX = npmGlobalPrefix;
-
+}: {
imports = [
# OpenCode and Pi agent configurations
./opencode.nix
@@ -70,35 +62,12 @@ in {
home.packages = with pkgs; [
agenix-cli
agent-browser
- alejandra
- bc
- bun
- devpod
- gnumake
- cmake
- (python3.withPackages (ps:
- with ps; [
- pip
- uv
- numba
- numpy
- torch
- srt
- ]))
pyrefly
- nixd
- nix-update
- nodejs
(qmd.override {
vulkanSupport = videoDrivers == ["amdgpu"];
cudaSupport = videoDrivers == ["nvidia"];
})
openshell
openspec
- pi-coding-agent
- sidecar
- tailwindcss
- tailwindcss-language-server
- td
];
}
diff --git a/home/coding/agents/pi.nix b/home/coding/agents/pi.nix
index 9de9b26..2f431ea 100644
--- a/home/coding/agents/pi.nix
+++ b/home/coding/agents/pi.nix
@@ -41,7 +41,6 @@
"npm:@plannotator/pi-extension"
"npm:pi-powerline-footer"
"npm:pi-markdown-preview"
- "npm:pi-gsd"
"npm:pi-tool-display"
"npm:pi-agent-browser-native"
"git:github.com/hk-vk/pi-connect"
diff --git a/home/coding/default.nix b/home/coding/default.nix
index 04c836d..7420578 100644
--- a/home/coding/default.nix
+++ b/home/coding/default.nix
@@ -1,11 +1,12 @@
# Coding environment aggregator — profile-independent development tooling.
-# Imports editors, LSP servers, git configuration, the agent system, and optional packages.
+# Imports editors, LSP servers, git configuration, the agent system, language runtimes, and optional packages.
{...}: {
imports = [
./editor
./lsp
./git/git.nix
./agents/agents.nix
+ ./languages
./packages.nix
];
}
diff --git a/home/coding/languages/default.nix b/home/coding/languages/default.nix
new file mode 100644
index 0000000..586848d
--- /dev/null
+++ b/home/coding/languages/default.nix
@@ -0,0 +1,10 @@
+# Language runtimes — Python, JavaScript, Rust, Go, TypeScript.
+{...}: {
+ imports = [
+ ./python.nix
+ ./javascript.nix
+ ./rust-toolchain.nix
+ ./go.nix
+ ./typescript.nix
+ ];
+}
diff --git a/home/coding/languages/go.nix b/home/coding/languages/go.nix
new file mode 100644
index 0000000..c373f59
--- /dev/null
+++ b/home/coding/languages/go.nix
@@ -0,0 +1,19 @@
+# Go toolchain — compiler and language server.
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+with lib; let
+ cfg = config.coding.languages.go;
+in {
+ options.coding.languages.go.enable = mkEnableOption "Go toolchain";
+
+ config = mkIf cfg.enable {
+ home.packages = with pkgs; [
+ go
+ gopls
+ ];
+ };
+}
diff --git a/home/coding/languages/javascript.nix b/home/coding/languages/javascript.nix
new file mode 100644
index 0000000..86ccf2e
--- /dev/null
+++ b/home/coding/languages/javascript.nix
@@ -0,0 +1,25 @@
+# JavaScript/TypeScript runtime — Node.js and Bun.
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+with lib; let
+ cfg = config.coding.languages.javascript;
+ npmGlobalPrefix = "${config.home.homeDirectory}/.npm-global";
+in {
+ options.coding.languages.javascript.enable = mkEnableOption "JavaScript runtime (Node.js + Bun)";
+
+ config = mkIf cfg.enable {
+ home.packages = with pkgs; [
+ nodejs
+ bun
+ ];
+
+ home.file.".npmrc".text = ''
+ prefix=${npmGlobalPrefix}
+ '';
+ home.sessionVariables.NPM_CONFIG_PREFIX = npmGlobalPrefix;
+ };
+}
diff --git a/home/coding/languages/python.nix b/home/coding/languages/python.nix
new file mode 100644
index 0000000..11bb67f
--- /dev/null
+++ b/home/coding/languages/python.nix
@@ -0,0 +1,30 @@
+# Python runtime with pip and uv.
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+with lib; let
+ cfg = config.coding.languages.python;
+in {
+ options.coding.languages.python = {
+ enable = mkEnableOption "Python runtime with pip and uv";
+ extraPackages = mkOption {
+ type = types.listOf types.package;
+ default = [];
+ example = literalExpression "[ pkgs.python3Packages.numpy ]";
+ description = "Additional Python packages to include";
+ };
+ };
+
+ config = mkIf cfg.enable {
+ home.packages = [
+ (pkgs.python3.withPackages (ps:
+ with ps; [
+ pip
+ uv
+ ] ++ cfg.extraPackages))
+ ];
+ };
+}
diff --git a/home/coding/languages/rust-toolchain.nix b/home/coding/languages/rust-toolchain.nix
new file mode 100644
index 0000000..823a28c
--- /dev/null
+++ b/home/coding/languages/rust-toolchain.nix
@@ -0,0 +1,20 @@
+# Rust toolchain — compiler, package manager, and language server.
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+with lib; let
+ cfg = config.coding.languages.rustToolchain;
+in {
+ options.coding.languages.rustToolchain.enable = mkEnableOption "Rust toolchain";
+
+ config = mkIf cfg.enable {
+ home.packages = with pkgs; [
+ rustc
+ cargo
+ rust-analyzer
+ ];
+ };
+}
diff --git a/home/coding/languages/typescript.nix b/home/coding/languages/typescript.nix
new file mode 100644
index 0000000..58a791e
--- /dev/null
+++ b/home/coding/languages/typescript.nix
@@ -0,0 +1,19 @@
+# TypeScript support — language server and type checking tools.
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+with lib; let
+ cfg = config.coding.languages.typescript;
+in {
+ options.coding.languages.typescript.enable = mkEnableOption "TypeScript support";
+
+ config = mkIf cfg.enable {
+ home.packages = with pkgs; [
+ typescript
+ typescript-language-server
+ ];
+ };
+}
diff --git a/home/coding/lsp/servers.nix b/home/coding/lsp/servers.nix
index 0e01947..77bc732 100644
--- a/home/coding/lsp/servers.nix
+++ b/home/coding/lsp/servers.nix
@@ -17,6 +17,7 @@ in {
# General
typescript-language-server
tailwindcss-language-server
+ pyrefly
];
};
}
diff --git a/home/m3tam3re/m3-ares.nix b/home/m3tam3re/m3-ares.nix
index e336286..a1d1cfe 100644
--- a/home/m3tam3re/m3-ares.nix
+++ b/home/m3tam3re/m3-ares.nix
@@ -59,6 +59,13 @@ in
};
lsp.enable = true;
packages.enable = true;
+ languages = {
+ python.enable = true;
+ javascript.enable = true;
+ rustToolchain.enable = true;
+ go.enable = true;
+ typescript.enable = true;
+ };
};
# Gaming profile features
diff --git a/home/m3tam3re/m3-kratos.nix b/home/m3tam3re/m3-kratos.nix
index 333bbbd..5f01fbf 100644
--- a/home/m3tam3re/m3-kratos.nix
+++ b/home/m3tam3re/m3-kratos.nix
@@ -57,6 +57,13 @@ in
zed.enable = true;
};
lsp.enable = true;
+ languages = {
+ python.enable = true;
+ javascript.enable = true;
+ rustToolchain.enable = true;
+ go.enable = true;
+ typescript.enable = true;
+ };
};
# Gaming profile features