From d19b87f8cd19cd869ebd50af439e27fc337dfe72 Mon Sep 17 00:00:00 2001
From: m3tm3re
Date: Sun, 26 Apr 2026 12:29:14 +0200
Subject: [PATCH] feat: add coding packages module (bruno, insomnia)
---
docs/plans/2026-04-27-missing-packages.md | 259 +++++++++++++++++++++
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/default.nix | 3 +-
home/coding/packages.nix | 20 ++
home/m3tam3re/m3-ares.nix | 1 +
17 files changed, 790 insertions(+), 1 deletion(-)
create mode 100644 docs/plans/2026-04-27-missing-packages.md
create mode 100644 home/base/secrets/cli-tools/bat.nix
create mode 100644 home/base/secrets/cli-tools/carapace.nix
create mode 100644 home/base/secrets/cli-tools/default.nix
create mode 100644 home/base/secrets/cli-tools/direnv.nix
create mode 100644 home/base/secrets/cli-tools/eza.nix
create mode 100644 home/base/secrets/cli-tools/fzf.nix
create mode 100644 home/base/secrets/cli-tools/lf.nix
create mode 100644 home/base/secrets/cli-tools/nitch.nix
create mode 100644 home/base/secrets/cli-tools/packages.nix
create mode 100644 home/base/secrets/cli-tools/television.nix
create mode 100644 home/base/secrets/cli-tools/zellij-ps.nix
create mode 100644 home/base/secrets/cli-tools/zellij.nix
create mode 100644 home/base/secrets/cli-tools/zoxide.nix
create mode 100644 home/coding/packages.nix
diff --git a/docs/plans/2026-04-27-missing-packages.md b/docs/plans/2026-04-27-missing-packages.md
new file mode 100644
index 0000000..303aff9
--- /dev/null
+++ b/docs/plans/2026-04-27-missing-packages.md
@@ -0,0 +1,259 @@
+# Missing Packages Implementation Plan
+
+> **Goal:** Restore missing packages from old configuration to new profile-based structure
+
+**Context:** The home profile restructuring (Task 1-5) moved files but left many packages unaccounted for. This plan categorizes and assigns each package to the appropriate location.
+
+---
+
+## Package Categorization
+
+### Base Layer (`home/base/`) — Always Available
+
+These are CLI tools that work on any system (server or desktop):
+
+| Package | Source | Module | Option |
+|---------|--------|--------|--------|
+| `jq` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `ripgrep` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `fd` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `coreutils` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `htop` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `httpie` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `just` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `lazygit` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `lf` | old cli | `home/base/cli-tools/default.nix` | `home/packages` |
+| `tldr` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `trash-cli` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `unzip` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `zip` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `yazi` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `gcc` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `go` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `sqlite` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `sqlite-vec` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `nix-index` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `nix-update` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `progress` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `devenv` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `libnotify` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `basecamp` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `comma` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `fabric-ai` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `llm` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+| `hyprpaper-random` | old cli | `home/base/cli-tools/default.nix` | `home.packages` |
+
+**Note:** `hyprpaper-random` is in base despite being Hyprland-specific. Alternative: move to `desktop/wm/` if it causes issues on non-Hyprland systems.
+
+### Base Programs (CLI Integration)
+
+These are programs with shell integration, placed in `home/base/cli-tools/`:
+
+| Program | Source | Module | Option |
+|---------|--------|--------|--------|
+| `carapace` | old cli | `home/base/cli-tools/default.nix` | `programs.carapace` |
+| `zoxide` | old cli | `home/base/cli-tools/default.nix` | `programs.zoxide` |
+| `bat` | old cli | `home/base/cli-tools/default.nix` | `programs.bat` |
+| `direnv` | old cli | `home/base/cli-tools/default.nix` | `programs.direnv` |
+| `eza` | old cli | `home/base/cli-tools/default.nix` | `programs.eza` |
+| `lf` | old cli | `home/base/cli-tools/default.nix` | `programs.lf` |
+| `zellij-ps` | old cli | `home/base/cli-tools/default.nix` | `cli.zellij-ps` |
+
+### Coding Layer (`home/coding/`) — Developer Tools
+
+| Package | Source | Module | Option |
+|---------|--------|--------|--------|
+| `bruno` | old desktop/coding | `home/coding/packages.nix` | `home.packages` |
+| `insomnia` | old desktop/coding | `home/coding/packages.nix` | `home.packages` |
+| `vim` | - | `home/coding/packages.nix` | `home.packages` |
+
+**New module:** `home/coding/packages.nix` (or inline into `coding/default.nix`)
+
+### Desktop Layer (`home/desktop/`) — Desktop-Specific
+
+| Package | Source | Module | Option |
+|---------|--------|--------|--------|
+| `vibetyper` | old desktop | `home/desktop/apps/default.nix` | `home.packages` |
+| `pomodoro-timer` | old cli | `home/desktop/apps/default.nix` | `home.packages` |
+| `launch-timer` | - | `home/desktop/apps/default.nix` | `home.packages` |
+
+**Note:** `launch-timer` needs investigation - is it a custom script or nixpkgs package?
+
+### Gaming Profile (`home/profiles/gaming/`) — Gaming Only
+
+| Package | Source | Module | Option |
+|---------|--------|--------|--------|
+| `rocmPackages.rocm-smi` | old cli | `home/profiles/gaming/default.nix` | `home.packages` |
+| `rocmPackages.rocminfo` | old cli | `home/profiles/gaming/default.nix` | `home.packages` |
+| `rocmPackages.rocm-runtime` | old cli | `home/profiles/gaming/default.nix` | `home.packages` |
+| `vulkan-tools` | old cli | `home/profiles/gaming/default.nix` | `home.packages` |
+
+**Rationale:** ROCm is for AMD GPUs used in gaming (e.g., ROG Ally, gaming laptops with AMD dGPUs). This keeps server configs clean.
+
+### Media Profile (`home/profiles/media/`) — Media Creation
+
+| Package | Source | Module | Option |
+|---------|--------|--------|--------|
+| `plexamp` | old desktop/media | `home/profiles/media/default.nix` | `home.packages` |
+| `webcord` | old desktop/media | `home/profiles/media/default.nix` | `home.packages` |
+| `unimatrix` | old cli | `home/profiles/media/default.nix` | `home.packages` |
+| `mpv` (config) | old desktop/media | `home/profiles/media/default.nix` | `programs.mpv` |
+
+**Note:** `unimatrix` is a terminal screensaver - fits well with media profile.
+
+---
+
+## NOT Needed (Explicitly Removed)
+
+These packages should NOT be added:
+
+| Package | Reason |
+|---------|--------|
+| `wireguard-tools` | No longer needed |
+| `wttrbar` | No longer needed |
+| `nushellPlugins.skim` | No longer needed |
+
+---
+
+## Tasks
+
+### Task 1: Update `home/base/cli-tools/default.nix`
+
+Add missing packages to the CLI tools aggregator:
+
+```nix
+home.packages = with pkgs; [
+ # Core utilities
+ jq ripgrep fd coreutils htop
+ # Dev tools
+ just lazylib lf tldr devenv
+ gcc go sqlite sqlite-vec
+ nix-index nix-update progress
+ # AI tools
+ comma fabric-ai llm
+ # Misc
+ libnotify basecamp hyprpaper-random
+ trash-cli unzip zip yazi
+];
+```
+
+Also add programs: carapace, zoxide, bat, direnv, eza, lf, zellij-ps
+
+### Task 2: Create `home/coding/packages.nix`
+
+New module for coding-specific packages:
+
+```nix
+{ lib, pkgs, ... }:
+
+{
+ options.coding.packages = {
+ enable = mkEnableOption "additional coding packages";
+ };
+
+ config = mkIf config.coding.packages.enable {
+ home.packages = with pkgs; [
+ bruno
+ insomnia
+ ];
+ };
+}
+```
+
+### Task 3: Update `home/profiles/gaming/default.nix`
+
+Add GPU monitoring tools:
+
+```nix
+home.packages = with pkgs; [
+ # Gaming utilities
+ gamescope gamemode goverlay mangohud protonplus
+ # AMD GPU monitoring (ROCm)
+ rocmPackages.rocm-smi
+ rocmPackages.rocminfo
+ rocmPackages.rocm-runtime
+ vulkan-tools
+];
+```
+
+### Task 4: Update `home/profiles/media/default.nix`
+
+Add missing media packages:
+
+```nix
+home.packages = with pkgs; [
+ # Already present: ffmpeg_6-full, gimp, handbrake, etc.
+ # Add missing:
+ plexamp
+ webcord
+ unimatrix
+];
+
+programs.mpv = {
+ enable = true;
+ bindings = {
+ WHEEL_UP = "seek 10";
+ WHEEL_DOWN = "seek -10";
+ };
+ config = {
+ profile = "gpu-hq";
+ ytdl-format = "bestvideo+bestaudio";
+ };
+};
+```
+
+### Task 5: Update Desktop Apps
+
+Add desktop-specific packages to `home/desktop/apps/default.nix`:
+
+```nix
+home.packages = with pkgs; [
+ # Already present
+ # Add missing:
+ pomodoro-timer
+ # launch-timer - needs investigation
+];
+```
+
+### Task 6: Update Host Configs
+
+Ensure all desktop hosts import the new modules:
+
+- `home/m3tam3re/m3-ares.nix` - Should have `coding.packages.enable = true`
+- `home/m3tam3re/m3-kratos.nix` - Should have `coding.packages.enable = true`
+
+---
+
+## Implementation Order
+
+1. **Task 1** - Base CLI tools (largest impact, affects all hosts)
+2. **Task 2** - Coding packages (small, new module)
+3. **Task 3** - Gaming profile (ROCm)
+4. **Task 4** - Media profile (plexamp, webcord, unimatrix, mpv)
+5. **Task 5** - Desktop apps (vibetyper already present, add pomodoro-timer)
+6. **Task 6** - Host config updates (if needed)
+
+---
+
+## Verification
+
+```bash
+nix flake check
+# Should pass with no new errors
+```
+
+---
+
+## Summary
+
+| Layer | New Files | Modified Files |
+|-------|-----------|----------------|
+| base/cli-tools | - | `default.nix` |
+| coding | `packages.nix` | `default.nix` |
+| profiles/gaming | - | `default.nix` |
+| profiles/media | - | `default.nix` |
+| desktop/apps | - | `default.nix` |
+
+**Total packages to restore:** ~30
+**Programs to restore:** 7
+**Packages excluded:** 3 (wireguard, wttrbar, nushellPlugins.skim)
diff --git a/home/base/secrets/cli-tools/bat.nix b/home/base/secrets/cli-tools/bat.nix
new file mode 100644
index 0000000..9a0e213
--- /dev/null
+++ b/home/base/secrets/cli-tools/bat.nix
@@ -0,0 +1,145 @@
+# 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
new file mode 100644
index 0000000..ea9194e
--- /dev/null
+++ b/home/base/secrets/cli-tools/carapace.nix
@@ -0,0 +1,21 @@
+# 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
new file mode 100644
index 0000000..3125597
--- /dev/null
+++ b/home/base/secrets/cli-tools/default.nix
@@ -0,0 +1,17 @@
+# 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
new file mode 100644
index 0000000..4ca206a
--- /dev/null
+++ b/home/base/secrets/cli-tools/direnv.nix
@@ -0,0 +1,20 @@
+# 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
new file mode 100644
index 0000000..2e432a8
--- /dev/null
+++ b/home/base/secrets/cli-tools/eza.nix
@@ -0,0 +1,21 @@
+# 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
new file mode 100644
index 0000000..4093298
--- /dev/null
+++ b/home/base/secrets/cli-tools/fzf.nix
@@ -0,0 +1,41 @@
+# 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
new file mode 100644
index 0000000..50ff740
--- /dev/null
+++ b/home/base/secrets/cli-tools/lf.nix
@@ -0,0 +1,28 @@
+# 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
new file mode 100644
index 0000000..eac4d62
--- /dev/null
+++ b/home/base/secrets/cli-tools/nitch.nix
@@ -0,0 +1,17 @@
+# 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
new file mode 100644
index 0000000..fa226f4
--- /dev/null
+++ b/home/base/secrets/cli-tools/packages.nix
@@ -0,0 +1,54 @@
+# 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
new file mode 100644
index 0000000..3a74203
--- /dev/null
+++ b/home/base/secrets/cli-tools/television.nix
@@ -0,0 +1,60 @@
+# 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
new file mode 100644
index 0000000..8dac702
--- /dev/null
+++ b/home/base/secrets/cli-tools/zellij-ps.nix
@@ -0,0 +1,30 @@
+# 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
new file mode 100644
index 0000000..efe2c6c
--- /dev/null
+++ b/home/base/secrets/cli-tools/zellij.nix
@@ -0,0 +1,34 @@
+# 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
new file mode 100644
index 0000000..bc3e80e
--- /dev/null
+++ b/home/base/secrets/cli-tools/zoxide.nix
@@ -0,0 +1,20 @@
+# 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/default.nix b/home/coding/default.nix
index 11c433c..04c836d 100644
--- a/home/coding/default.nix
+++ b/home/coding/default.nix
@@ -1,10 +1,11 @@
# Coding environment aggregator — profile-independent development tooling.
-# Imports editors, LSP servers, git configuration, and the agent system.
+# Imports editors, LSP servers, git configuration, the agent system, and optional packages.
{...}: {
imports = [
./editor
./lsp
./git/git.nix
./agents/agents.nix
+ ./packages.nix
];
}
diff --git a/home/coding/packages.nix b/home/coding/packages.nix
new file mode 100644
index 0000000..2501cd6
--- /dev/null
+++ b/home/coding/packages.nix
@@ -0,0 +1,20 @@
+# Additional coding packages — API clients and GUI development tools.
+# Opt-in since not all coding hosts need these desktop-oriented tools.
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+with lib; let
+ cfg = config.coding.packages;
+in {
+ options.coding.packages.enable = mkEnableOption "additional coding packages (bruno, insomnia)";
+
+ config = mkIf cfg.enable {
+ home.packages = [
+ pkgs.bruno
+ pkgs.insomnia
+ ];
+ };
+}
diff --git a/home/m3tam3re/m3-ares.nix b/home/m3tam3re/m3-ares.nix
index 4cdfb3b..e336286 100644
--- a/home/m3tam3re/m3-ares.nix
+++ b/home/m3tam3re/m3-ares.nix
@@ -58,6 +58,7 @@ in
zed.enable = true;
};
lsp.enable = true;
+ packages.enable = true;
};
# Gaming profile features