Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5bd7647f48 |
@@ -161,7 +161,6 @@ Every module in m3ta-home has an `enable` option. Base modules default to `true`
|
|||||||
### Available Flags
|
### Available Flags
|
||||||
|
|
||||||
```
|
```
|
||||||
base.cliTools.ansible.enable # Ansible (config rollout to servers)
|
|
||||||
base.shell.fish.enable # Fish shell
|
base.shell.fish.enable # Fish shell
|
||||||
base.shell.nushell.enable # Nushell
|
base.shell.nushell.enable # Nushell
|
||||||
base.shell.starship.enable # Starship prompt
|
base.shell.starship.enable # Starship prompt
|
||||||
@@ -178,7 +177,6 @@ base.secrets.enable # pass-wayland, pinentry
|
|||||||
desktop.wm.hyprland.enable # Hyprland window manager
|
desktop.wm.hyprland.enable # Hyprland window manager
|
||||||
desktop.wm.rofi.enable # Rofi launcher
|
desktop.wm.rofi.enable # Rofi launcher
|
||||||
desktop.wm.wayland.enable # Wayland tools (grim, slurp, etc.)
|
desktop.wm.wayland.enable # Wayland tools (grim, slurp, etc.)
|
||||||
desktop.wm.dms.enable # DankMaterialShell desktop shell
|
|
||||||
desktop.apps.obsidian.enable # Obsidian
|
desktop.apps.obsidian.enable # Obsidian
|
||||||
desktop.apps.office.enable # LibreOffice
|
desktop.apps.office.enable # LibreOffice
|
||||||
desktop.apps.crypto.enable # Bisq2, Monero, Trezor
|
desktop.apps.crypto.enable # Bisq2, Monero, Trezor
|
||||||
@@ -246,11 +244,9 @@ source = "${config."m3ta-home".paths.srcRoot}/assets/wallpapers";
|
|||||||
| `nixpkgs` | Package set (follows nixos-config's nixpkgs) |
|
| `nixpkgs` | Package set (follows nixos-config's nixpkgs) |
|
||||||
| `home-manager` | Home-Manager modules |
|
| `home-manager` | Home-Manager modules |
|
||||||
| `nix-colors` | Dracula theme palette (used everywhere) |
|
| `nix-colors` | Dracula theme palette (used everywhere) |
|
||||||
| `m3ta-nixpkgs` | Custom packages (zellij-ps, rofi-project-opener) and HM modules |
|
| `m3ta-nixpkgs` | Custom packages (zellij-ps, rofi-project-opener) and HM modules |
|
||||||
| `dms` | DankMaterialShell Home-Manager module and package |
|
| `agenix` | Secret management |
|
||||||
| `dms-plugin-registry` | DankMaterialShell plugin sources |
|
| `NUR` | Additional packages |
|
||||||
| `agenix` | Secret management |
|
|
||||||
| `NUR` | Additional packages |
|
|
||||||
|
|
||||||
## Important Notes
|
## Important Notes
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
Before Width: | Height: | Size: 3.3 MiB |
Binary file not shown.
|
Before Width: | Height: | Size: 5.7 MiB |
Generated
+46
-427
@@ -21,52 +21,14 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"agent-lib": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1781348569,
|
|
||||||
"narHash": "sha256-1BJtmKSqtD0CD753ZE37RgxvCJK6Iw3iKLDDaS8trY4=",
|
|
||||||
"ref": "refs/heads/master",
|
|
||||||
"rev": "75a2ed2533b4d6d8e4a34acd37e83d98d81a5fb0",
|
|
||||||
"revCount": 30,
|
|
||||||
"type": "git",
|
|
||||||
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/agent-lib-legacy"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/agent-lib-legacy"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"agents": {
|
"agents": {
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": "nixpkgs_2"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1783016143,
|
|
||||||
"narHash": "sha256-3qejDAo4g2XfzTyWCaX8RVKH17JXnw/fujsbXQA+Mzc=",
|
|
||||||
"ref": "refs/heads/master",
|
|
||||||
"rev": "83284d752d2ac325d4bf3ab7b38acad1c2fffe3a",
|
|
||||||
"revCount": 98,
|
|
||||||
"type": "git",
|
|
||||||
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/AGENTS"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/AGENTS"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"agents_2": {
|
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1783016143,
|
"lastModified": 1777399938,
|
||||||
"narHash": "sha256-3qejDAo4g2XfzTyWCaX8RVKH17JXnw/fujsbXQA+Mzc=",
|
"narHash": "sha256-xXPqUQezDdDtF8MbpZnwD1HkybOYwF92evx8rJ6OXCU=",
|
||||||
"ref": "refs/heads/master",
|
"ref": "refs/heads/master",
|
||||||
"rev": "83284d752d2ac325d4bf3ab7b38acad1c2fffe3a",
|
"rev": "9a91f1ee0cf011a7eaf1f16a9e17610b0457e055",
|
||||||
"revCount": 98,
|
"revCount": 85,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://code.m3ta.dev/m3tam3re/AGENTS"
|
"url": "https://code.m3ta.dev/m3tam3re/AGENTS"
|
||||||
},
|
},
|
||||||
@@ -99,59 +61,20 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1785979955,
|
"lastModified": 1774505501,
|
||||||
"narHash": "sha256-OP96Ak4OBydR98keoNYKdGY8j+wrIys0LafSZgwS20g=",
|
"narHash": "sha256-7UiRrDptj7yuEFwToOfdunUMz/i3jRLR7CmMoYQjq6k=",
|
||||||
"owner": "basecamp",
|
"owner": "basecamp",
|
||||||
"repo": "basecamp-cli",
|
"repo": "basecamp-cli",
|
||||||
"rev": "61a5591de1da9bc99c56b8072a4d6bad2c9b9e47",
|
"rev": "f087e6ef84002503d0dbc75ea1c8c928a8928d9e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "basecamp",
|
"owner": "basecamp",
|
||||||
"ref": "v0.9.0",
|
"ref": "v0.7.2",
|
||||||
"repo": "basecamp-cli",
|
"repo": "basecamp-cli",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"buzz": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"m3ta-nixpkgs",
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"rust-overlay": "rust-overlay",
|
|
||||||
"treefmt-nix": "treefmt-nix"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1788856318,
|
|
||||||
"narHash": "sha256-bOLED82KPrzIXTWELw30y3PVI6MBmlY4Y2F2lwrdOnM=",
|
|
||||||
"owner": "mulatta",
|
|
||||||
"repo": "buzz.nix",
|
|
||||||
"rev": "fdd0152c12c6be339fe01d91887122bb10823aaf",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "mulatta",
|
|
||||||
"repo": "buzz.nix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"dank-qml-common": {
|
|
||||||
"flake": false,
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1788376015,
|
|
||||||
"narHash": "sha256-/tT8rTznLADndTwLBzdgzzgfJH1ZhYQibYo5v/F8U+U=",
|
|
||||||
"owner": "AvengeMedia",
|
|
||||||
"repo": "dank-qml-common",
|
|
||||||
"rev": "26396ce432d6c71c3f5367438f96f4a8d667e160",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "AvengeMedia",
|
|
||||||
"repo": "dank-qml-common",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"darwin": {
|
"darwin": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
@@ -174,87 +97,7 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dms": {
|
|
||||||
"inputs": {
|
|
||||||
"dank-qml-common": "dank-qml-common",
|
|
||||||
"flake-compat": "flake-compat",
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1788959433,
|
|
||||||
"narHash": "sha256-MAbxGEomcpGomFfw+WYurNkSKBIh7PKEc1U5OV0X6oU=",
|
|
||||||
"owner": "AvengeMedia",
|
|
||||||
"repo": "DankMaterialShell",
|
|
||||||
"rev": "fe293b7379a51f62a4db7043fc09df71f78e72ef",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "AvengeMedia",
|
|
||||||
"ref": "stable",
|
|
||||||
"repo": "DankMaterialShell",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"dms-plugin-registry": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1789138529,
|
|
||||||
"narHash": "sha256-46RwWSOzklur59Plvo8N0YBZYun4M4cwK04+8owhJeo=",
|
|
||||||
"owner": "AvengeMedia",
|
|
||||||
"repo": "dms-plugin-registry",
|
|
||||||
"rev": "5e5d72f980f5f16503b8fd0b8b66c4a3441eecdc",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "AvengeMedia",
|
|
||||||
"repo": "dms-plugin-registry",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-compat": {
|
|
||||||
"flake": false,
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1767039857,
|
|
||||||
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "flake-compat",
|
|
||||||
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "flake-compat",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-parts": {
|
"flake-parts": {
|
||||||
"inputs": {
|
|
||||||
"nixpkgs-lib": [
|
|
||||||
"hermes-agent",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1782949081,
|
|
||||||
"narHash": "sha256-vp6Y/Grm98ESt6ceOkWiHWyZRDV3J1RID4w+6NWK9yA=",
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "flake-parts",
|
|
||||||
"rev": "17c9d6cdfc60c64f4ee8d306f9bc0b4ccb51481e",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "flake-parts",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-parts_2": {
|
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs-lib": [
|
"nixpkgs-lib": [
|
||||||
"nur",
|
"nur",
|
||||||
@@ -275,33 +118,6 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"hermes-agent": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-parts": "flake-parts",
|
|
||||||
"home-manager": "home-manager_2",
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"npm-lockfile-fix": "npm-lockfile-fix",
|
|
||||||
"pyproject-build-systems": "pyproject-build-systems",
|
|
||||||
"pyproject-nix": "pyproject-nix",
|
|
||||||
"uv2nix": "uv2nix"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1788204567,
|
|
||||||
"narHash": "sha256-Ii9xP2fKUpvCcwWZuxJ0g3CZ+IL2UZH14pUNvBfdclc=",
|
|
||||||
"owner": "NousResearch",
|
|
||||||
"repo": "hermes-agent",
|
|
||||||
"rev": "29112bef099274229cadff79cdff7bf7b99c4b77",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "NousResearch",
|
|
||||||
"ref": "v2026.8.31",
|
|
||||||
"repo": "hermes-agent",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"home-manager": {
|
"home-manager": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
@@ -326,36 +142,15 @@
|
|||||||
"home-manager_2": {
|
"home-manager_2": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"hermes-agent",
|
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1786487128,
|
"lastModified": 1779113444,
|
||||||
"narHash": "sha256-ad60hrRVhH/bo3Jl1YLzO+QcS3mUNZr9LNJdzhMO2P4=",
|
"narHash": "sha256-/L61sT1PIKmGWIQpIh0uJGH/ANvcsf6y4alxtb9kelg=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "f404edbfa4117810c96b97048299242fc50e5362",
|
"rev": "74f170c62d57f90e656841f1f699e6bdf40f0a24",
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "home-manager",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"home-manager_3": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1789136855,
|
|
||||||
"narHash": "sha256-82D7ADWE8erhfALj3dqxAOeQaoa+Bwlsdcp9v2m/ExM=",
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "home-manager",
|
|
||||||
"rev": "d0fd95e15e0c3baf565a9fd4bc352321e2564ea3",
|
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -366,21 +161,20 @@
|
|||||||
},
|
},
|
||||||
"m3ta-nixpkgs": {
|
"m3ta-nixpkgs": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"agents": "agents_2",
|
"agents": "agents",
|
||||||
"basecamp": "basecamp",
|
"basecamp": "basecamp",
|
||||||
"buzz": "buzz",
|
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
],
|
],
|
||||||
"nixpkgs-master": "nixpkgs-master",
|
"nixpkgs-master": "nixpkgs-master",
|
||||||
"opencode": "opencode"
|
"openspec": "openspec"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1789141095,
|
"lastModified": 1778508052,
|
||||||
"narHash": "sha256-f5NLbwOwSQL+tDDelxps1VFh84obOMyw+ox9gcvE7TU=",
|
"narHash": "sha256-kxzZvJv757TGfHReR21aX6N/jkGMWzGSy9GQEclYD4Y=",
|
||||||
"ref": "refs/heads/master",
|
"ref": "refs/heads/master",
|
||||||
"rev": "1e0db37c579935b9916c1fcb3d3ed733b4cb3114",
|
"rev": "8113723a48c4afa016881ccd5bc4be3fad2c7d5f",
|
||||||
"revCount": 389,
|
"revCount": 294,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/nixpkgs"
|
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/nixpkgs"
|
||||||
},
|
},
|
||||||
@@ -441,11 +235,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs-master": {
|
"nixpkgs-master": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1789139724,
|
"lastModified": 1778507606,
|
||||||
"narHash": "sha256-QEoQ8xoSO3H2tmwHNBYFL/5Y8Gt10U+bg5ETMsWXiIM=",
|
"narHash": "sha256-6Yc2dIhijc8G+dbMNocyclxF19dUrjaT+EeXGrXmXlg=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "e27e37949736566430ed2f6157bebcdade8860c5",
|
"rev": "39a7b8d815fcc8b689d56fc4a3fa8de4ef93d169",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -457,59 +251,27 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs_2": {
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1772479524,
|
"lastModified": 1777954456,
|
||||||
"narHash": "sha256-u7nCaNiMjqvKpE+uZz9hE7pgXXTmm5yvdtFaqzSzUQI=",
|
"narHash": "sha256-hGdgeU2Nk87RAuZyYjyDjFL6LK7dAZN5RE9+hrDTkDU=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "4215e62dc2cd3bc705b0a423b9719ff6be378a43",
|
"rev": "549bd84d6279f9852cae6225e372cc67fb91a4c1",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"ref": "nixpkgs-unstable",
|
"ref": "nixos-unstable",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs_3": {
|
"nixpkgs_3": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1776683584,
|
"lastModified": 1777954456,
|
||||||
"narHash": "sha256-NuTLMrr10Tng72hurYG8jYQ4XKK8wnpJmOGcPiis96g=",
|
"narHash": "sha256-hGdgeU2Nk87RAuZyYjyDjFL6LK7dAZN5RE9+hrDTkDU=",
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "9dd5558b06dbdacbf635a3dd36dce1b1a7ee3a89",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "NixOS",
|
|
||||||
"ref": "nixpkgs-unstable",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs_4": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1789006805,
|
|
||||||
"narHash": "sha256-xB8mKMOx1IA9vTDNLmJZ6n4wCMq/cuWBBOzGCRnqxrU=",
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "8ce4ef6cb6f871616146b9fe26d2a5ae594e94fe",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "NixOS",
|
|
||||||
"ref": "nixos-unstable",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs_5": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1789006805,
|
|
||||||
"narHash": "sha256-xB8mKMOx1IA9vTDNLmJZ6n4wCMq/cuWBBOzGCRnqxrU=",
|
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "8ce4ef6cb6f871616146b9fe26d2a5ae594e94fe",
|
"rev": "549bd84d6279f9852cae6225e372cc67fb91a4c1",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -519,152 +281,56 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"npm-lockfile-fix": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"hermes-agent",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1775903712,
|
|
||||||
"narHash": "sha256-2GV79U6iVH4gKAPWYrxUReB0S41ty/Y3dBLquU8AlaA=",
|
|
||||||
"owner": "jeslie0",
|
|
||||||
"repo": "npm-lockfile-fix",
|
|
||||||
"rev": "c6093acb0c0548e0f9b8b3d82918823721930fe8",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "jeslie0",
|
|
||||||
"repo": "npm-lockfile-fix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nur": {
|
"nur": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-parts": "flake-parts_2",
|
"flake-parts": "flake-parts",
|
||||||
"nixpkgs": "nixpkgs_5"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1789141061,
|
|
||||||
"narHash": "sha256-T2+uq8rR7zvUFh7/R8DQgsf2AGrUO3EPpr1iv7Jby8Y=",
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "NUR",
|
|
||||||
"rev": "4250406d791dcb1db2b1ce7bd223ac3ee120cfe3",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "NUR",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"opencode": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": "nixpkgs_3"
|
"nixpkgs": "nixpkgs_3"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1789132601,
|
"lastModified": 1778506944,
|
||||||
"narHash": "sha256-2+j5RuHoqrsnjssZ4VfIfSKzGdrPNFT4nazJ2QxNdu0=",
|
"narHash": "sha256-lU0Bleh0reE+WU7j8Uiqsu6ekPav50L8sXsgOvEQS+0=",
|
||||||
"owner": "anomalyco",
|
"owner": "nix-community",
|
||||||
"repo": "opencode",
|
"repo": "NUR",
|
||||||
"rev": "95daf90670b7c039c436c85537da5fbfe2205b41",
|
"rev": "0166493cfe4e0e9927435c1cfbf5505cfb0d10d1",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "anomalyco",
|
"owner": "nix-community",
|
||||||
"ref": "dev",
|
"repo": "NUR",
|
||||||
"repo": "opencode",
|
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pyproject-build-systems": {
|
"openspec": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"hermes-agent",
|
"m3ta-nixpkgs",
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"pyproject-nix": [
|
|
||||||
"hermes-agent",
|
|
||||||
"pyproject-nix"
|
|
||||||
],
|
|
||||||
"uv2nix": [
|
|
||||||
"hermes-agent",
|
|
||||||
"uv2nix"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1785115949,
|
|
||||||
"narHash": "sha256-8AM37BfyGaL2v/SZyg4PupRxJ01Y4htvM+WrTjWrPpo=",
|
|
||||||
"owner": "pyproject-nix",
|
|
||||||
"repo": "build-system-pkgs",
|
|
||||||
"rev": "62c0d86027edb1c4f39a5facc09876348144f7c9",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "pyproject-nix",
|
|
||||||
"repo": "build-system-pkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"pyproject-nix": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"hermes-agent",
|
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1784591072,
|
"lastModified": 1778120451,
|
||||||
"narHash": "sha256-zP/WaDxrRu8GANZM61+V2LT/7ycEEdoyLWn7M6WzU7M=",
|
"narHash": "sha256-MUSPD16+hoFBfQWYahtNLN2BIFEAlFFo2KNofrc947g=",
|
||||||
"owner": "pyproject-nix",
|
"owner": "Fission-AI",
|
||||||
"repo": "pyproject.nix",
|
"repo": "OpenSpec",
|
||||||
"rev": "e3b599ca2e7fcf93d4edf65d7f19bbf6491724f3",
|
"rev": "053d8a59d587f3c027a06ad80503a6b43d4f2a92",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "pyproject-nix",
|
"owner": "Fission-AI",
|
||||||
"repo": "pyproject.nix",
|
"repo": "OpenSpec",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"agenix": "agenix",
|
"agenix": "agenix",
|
||||||
"agent-lib": "agent-lib",
|
"home-manager": "home-manager_2",
|
||||||
"agents": "agents",
|
|
||||||
"dms": "dms",
|
|
||||||
"dms-plugin-registry": "dms-plugin-registry",
|
|
||||||
"hermes-agent": "hermes-agent",
|
|
||||||
"home-manager": "home-manager_3",
|
|
||||||
"m3ta-nixpkgs": "m3ta-nixpkgs",
|
"m3ta-nixpkgs": "m3ta-nixpkgs",
|
||||||
"nix-colors": "nix-colors",
|
"nix-colors": "nix-colors",
|
||||||
"nixpkgs": "nixpkgs_4",
|
"nixpkgs": "nixpkgs_2",
|
||||||
"nur": "nur"
|
"nur": "nur"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rust-overlay": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"m3ta-nixpkgs",
|
|
||||||
"buzz",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1788591095,
|
|
||||||
"narHash": "sha256-Vh+BeLWfbTT9AecazIsQ/Tkg/RzJeX3lEduANf256WA=",
|
|
||||||
"owner": "oxalica",
|
|
||||||
"repo": "rust-overlay",
|
|
||||||
"rev": "c361047d3a538f547f1617bb6b410411929ac9cc",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "oxalica",
|
|
||||||
"repo": "rust-overlay",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"systems": {
|
"systems": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1681028828,
|
"lastModified": 1681028828,
|
||||||
@@ -679,53 +345,6 @@
|
|||||||
"repo": "default",
|
"repo": "default",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"treefmt-nix": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"m3ta-nixpkgs",
|
|
||||||
"buzz",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1786901030,
|
|
||||||
"narHash": "sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE=",
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "treefmt-nix",
|
|
||||||
"rev": "27b3b12a8e6375f28ebe122f07d230ca5459bbfa",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "treefmt-nix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"uv2nix": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"hermes-agent",
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"pyproject-nix": [
|
|
||||||
"hermes-agent",
|
|
||||||
"pyproject-nix"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1785277507,
|
|
||||||
"narHash": "sha256-9Tq3UDX2hD/aveW/HvkBlAmEwJTOlY5HQXJM+L5BGmE=",
|
|
||||||
"owner": "pyproject-nix",
|
|
||||||
"repo": "uv2nix",
|
|
||||||
"rev": "5a836d395cbf5fc22670eb98dd4aa4fc4d406977",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "pyproject-nix",
|
|
||||||
"repo": "uv2nix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": "root",
|
"root": "root",
|
||||||
|
|||||||
@@ -13,33 +13,6 @@
|
|||||||
|
|
||||||
m3ta-nixpkgs = {
|
m3ta-nixpkgs = {
|
||||||
url = "git+ssh://gitea@code.m3ta.dev/m3tam3re/nixpkgs";
|
url = "git+ssh://gitea@code.m3ta.dev/m3tam3re/nixpkgs";
|
||||||
# url = "path:/home/m3tam3re/p/NIX/nixpkgs";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
agents = {
|
|
||||||
# url = "path:/home/m3tam3re/p/AI/AGENTS";
|
|
||||||
url = "git+ssh://gitea@code.m3ta.dev/m3tam3re/AGENTS";
|
|
||||||
};
|
|
||||||
|
|
||||||
agent-lib = {
|
|
||||||
# url = "path:/home/m3tam3re/p/agent-lib-legacy";
|
|
||||||
url = "git+ssh://gitea@code.m3ta.dev/m3tam3re/agent-lib-legacy";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
hermes-agent = {
|
|
||||||
url = "github:NousResearch/hermes-agent/v2026.8.31";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
dms = {
|
|
||||||
url = "github:AvengeMedia/DankMaterialShell/stable";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
dms-plugin-registry = {
|
|
||||||
url = "github:AvengeMedia/dms-plugin-registry";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -48,21 +21,21 @@
|
|||||||
nur.url = "github:nix-community/NUR";
|
nur.url = "github:nix-community/NUR";
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = {self, ...} @ inputs: {
|
outputs = {
|
||||||
|
self,
|
||||||
|
nixpkgs,
|
||||||
|
...
|
||||||
|
} @ inputs: let
|
||||||
|
lib = nixpkgs.lib;
|
||||||
|
in {
|
||||||
# Home-Manager modules — import in nixos-config via:
|
# Home-Manager modules — import in nixos-config via:
|
||||||
# imports = [ inputs.m3ta-home.homeManagerModules.default ];
|
# imports = [ inputs.m3ta-home.homeManagerModules.default ];
|
||||||
homeManagerModules = import ./modules {
|
homeManagerModules = import ./modules { inherit inputs; selfPath = self.outPath; };
|
||||||
inherit inputs;
|
|
||||||
selfPath = self.outPath;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Library functions — use in nixos-config via:
|
# Library functions — use in nixos-config via:
|
||||||
# m3ta-lib = inputs.m3ta-home.lib;
|
# m3ta-lib = inputs.m3ta-home.lib;
|
||||||
# imports = [ (m3ta-lib.mkHome { ... }) ];
|
# imports = [ (m3ta-lib.mkHome { ... }) ];
|
||||||
lib = import ./lib {
|
lib = import ./lib {inherit inputs; selfPath = self.outPath;};
|
||||||
inherit inputs;
|
|
||||||
selfPath = self.outPath;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Overlays (re-exports from m3ta-nixpkgs)
|
# Overlays (re-exports from m3ta-nixpkgs)
|
||||||
overlays = inputs.m3ta-nixpkgs.overlays;
|
overlays = inputs.m3ta-nixpkgs.overlays;
|
||||||
|
|||||||
+2
-13
@@ -1,16 +1,5 @@
|
|||||||
# lib/default.nix — Entry point for m3ta-home library functions.
|
# lib/default.nix — Entry point for m3ta-home library functions.
|
||||||
#
|
#
|
||||||
# Called by flake.nix: import ./lib { inherit inputs; selfPath = self.outPath; }
|
# Called by flake.nix: import ./lib { inherit inputs; selfPath = self.outPath; }
|
||||||
# Re-exports mkHome and focused helpers for consumers that should not depend on
|
# Re-exports mkHome and future library functions.
|
||||||
# m3ta-home's implementation inputs directly.
|
{inputs, selfPath}: import ./mkHome.nix {inherit inputs selfPath;}
|
||||||
{
|
|
||||||
inputs,
|
|
||||||
selfPath,
|
|
||||||
}: let
|
|
||||||
mkHomeLib = import ./mkHome.nix {inherit inputs selfPath;};
|
|
||||||
in
|
|
||||||
mkHomeLib
|
|
||||||
// {
|
|
||||||
mkHermesSkillsDir = {system, ...} @ args:
|
|
||||||
inputs.agent-lib.lib.${system}.mkHermesSkillsDir (builtins.removeAttrs args ["system"]);
|
|
||||||
}
|
|
||||||
|
|||||||
+1
-13
@@ -19,10 +19,7 @@
|
|||||||
# m3ta.home.sets.coding.languages.python.extra = true;
|
# m3ta.home.sets.coding.languages.python.extra = true;
|
||||||
# wayland.windowManager.hyprland.settings.monitor = [ ... ];
|
# wayland.windowManager.hyprland.settings.monitor = [ ... ];
|
||||||
#
|
#
|
||||||
{
|
{inputs, selfPath}: let
|
||||||
inputs,
|
|
||||||
selfPath,
|
|
||||||
}: let
|
|
||||||
lib = inputs.nixpkgs.lib;
|
lib = inputs.nixpkgs.lib;
|
||||||
in {
|
in {
|
||||||
mkHome = {
|
mkHome = {
|
||||||
@@ -83,13 +80,6 @@ in {
|
|||||||
in {
|
in {
|
||||||
imports =
|
imports =
|
||||||
[
|
[
|
||||||
# External Home Manager modules required by selectable profiles
|
|
||||||
inputs.agent-lib.homeManagerModules.default
|
|
||||||
inputs.dms.homeModules.default
|
|
||||||
inputs.dms-plugin-registry.homeModules.default
|
|
||||||
inputs.nix-colors.homeManagerModules.default
|
|
||||||
inputs.m3ta-nixpkgs.homeManagerModules.default
|
|
||||||
|
|
||||||
# Paths module — must be first, provides m3taHome.paths.srcRoot
|
# Paths module — must be first, provides m3taHome.paths.srcRoot
|
||||||
../modules/paths.nix
|
../modules/paths.nix
|
||||||
baseModule
|
baseModule
|
||||||
@@ -99,8 +89,6 @@ in {
|
|||||||
++ contextImport
|
++ contextImport
|
||||||
++ setImports;
|
++ setImports;
|
||||||
|
|
||||||
_module.args.m3taHomeInputs = inputs;
|
|
||||||
|
|
||||||
# Set the flake source root for asset path resolution
|
# Set the flake source root for asset path resolution
|
||||||
"m3ta-home".paths.srcRoot = selfPath;
|
"m3ta-home".paths.srcRoot = selfPath;
|
||||||
|
|
||||||
|
|||||||
+3
-9
@@ -8,15 +8,11 @@
|
|||||||
{
|
{
|
||||||
inputs,
|
inputs,
|
||||||
selfPath,
|
selfPath,
|
||||||
}: {
|
}: let
|
||||||
|
lib = inputs.nixpkgs.lib;
|
||||||
|
in {
|
||||||
default = {
|
default = {
|
||||||
imports = [
|
imports = [
|
||||||
# External modules
|
|
||||||
inputs.agent-lib.homeManagerModules.default
|
|
||||||
inputs.dms.homeModules.default
|
|
||||||
inputs.dms-plugin-registry.homeModules.default
|
|
||||||
inputs.nix-colors.homeManagerModules.default
|
|
||||||
inputs.m3ta-nixpkgs.homeManagerModules.default
|
|
||||||
# Paths — must be first, provides "m3ta-home".paths.srcRoot
|
# Paths — must be first, provides "m3ta-home".paths.srcRoot
|
||||||
./paths.nix
|
./paths.nix
|
||||||
|
|
||||||
@@ -34,8 +30,6 @@
|
|||||||
./../users/m3tam3re/identities/work.nix
|
./../users/m3tam3re/identities/work.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
_module.args.m3taHomeInputs = inputs;
|
|
||||||
|
|
||||||
# Set the source root for asset path resolution
|
# Set the source root for asset path resolution
|
||||||
"m3ta-home".paths.srcRoot = selfPath;
|
"m3ta-home".paths.srcRoot = selfPath;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
# Ansible — configuration management for rolling out configurations to servers.
|
|
||||||
# Lives in base so it is available in every identity (private/work) and context.
|
|
||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib; let
|
|
||||||
cfg = config.base.cliTools.ansible;
|
|
||||||
in {
|
|
||||||
# Enabled by default — base modules are always-on.
|
|
||||||
options.base.cliTools.ansible.enable = (mkEnableOption "enable Ansible configuration management") // {default = true;};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
ansible
|
|
||||||
ansible-lint
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
# CLI tools aggregator — imports all base command-line utilities.
|
# CLI tools aggregator — imports all base command-line utilities.
|
||||||
{...}: {
|
{...}: {
|
||||||
imports = [
|
imports = [
|
||||||
./ansible.nix
|
|
||||||
./bat.nix
|
./bat.nix
|
||||||
./carapace.nix
|
./carapace.nix
|
||||||
./direnv.nix
|
./direnv.nix
|
||||||
@@ -14,6 +13,7 @@
|
|||||||
./packages.nix
|
./packages.nix
|
||||||
./television.nix
|
./television.nix
|
||||||
./zellij.nix
|
./zellij.nix
|
||||||
|
./zellij-ps.nix
|
||||||
./zoxide.nix
|
./zoxide.nix
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,47 +2,40 @@
|
|||||||
{
|
{
|
||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
options,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
with lib; let
|
with lib; let
|
||||||
cfg = config.base.cliTools.fzf;
|
cfg = config.base.cliTools.fzf;
|
||||||
changeDirWidgetCommand = "fd --type d --exclude .git --follow --hidden";
|
|
||||||
in {
|
in {
|
||||||
# Enabled by default — base modules are always-on.
|
# Enabled by default — base modules are always-on.
|
||||||
options.base.cliTools.fzf.enable = (mkEnableOption "enable fuzzy finder") // {default = true;};
|
options.base.cliTools.fzf.enable = (mkEnableOption "enable fuzzy finder") // {default = true;};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
programs.fzf =
|
programs.fzf = {
|
||||||
{
|
enable = true;
|
||||||
enable = true;
|
enableFishIntegration = true;
|
||||||
enableFishIntegration = true;
|
colors = {
|
||||||
colors = {
|
"fg" = "#${config.colorScheme.palette.base05}";
|
||||||
"fg" = "#${config.colorScheme.palette.base05}";
|
"bg" = "#${config.colorScheme.palette.base00}";
|
||||||
"bg" = "#${config.colorScheme.palette.base00}";
|
"hl" = "#${config.colorScheme.palette.base0E}";
|
||||||
"hl" = "#${config.colorScheme.palette.base0E}";
|
"fg+" = "#${config.colorScheme.palette.base05}";
|
||||||
"fg+" = "#${config.colorScheme.palette.base05}";
|
"bg+" = "#${config.colorScheme.palette.base02}";
|
||||||
"bg+" = "#${config.colorScheme.palette.base02}";
|
"hl+" = "#${config.colorScheme.palette.base0E}";
|
||||||
"hl+" = "#${config.colorScheme.palette.base0E}";
|
"info" = "#${config.colorScheme.palette.base09}";
|
||||||
"info" = "#${config.colorScheme.palette.base09}";
|
"prompt" = "#${config.colorScheme.palette.base0B}";
|
||||||
"prompt" = "#${config.colorScheme.palette.base0B}";
|
"pointer" = "#${config.colorScheme.palette.base08}";
|
||||||
"pointer" = "#${config.colorScheme.palette.base08}";
|
"marker" = "#${config.colorScheme.palette.base08}";
|
||||||
"marker" = "#${config.colorScheme.palette.base08}";
|
"spinner" = "#${config.colorScheme.palette.base09}";
|
||||||
"spinner" = "#${config.colorScheme.palette.base09}";
|
"header" = "#${config.colorScheme.palette.base03}";
|
||||||
"header" = "#${config.colorScheme.palette.base03}";
|
};
|
||||||
};
|
defaultOptions = [
|
||||||
defaultOptions = [
|
"--preview='bat --color=always -n {}'"
|
||||||
"--preview='bat --color=always -n {}'"
|
"--bind 'ctrl-/:toggle-preview'"
|
||||||
"--bind 'ctrl-/:toggle-preview'"
|
"--header 'Press CTRL-Y to copy command into clipboard'"
|
||||||
"--header 'Press CTRL-Y to copy command into clipboard'"
|
"--bind 'ctrl-y:execute-silent(echo -n {2..} | wl-copy)+abort'"
|
||||||
"--bind 'ctrl-y:execute-silent(echo -n {2..} | wl-copy)+abort'"
|
];
|
||||||
];
|
defaultCommand = "fd --type f --exclude .git --follow --hidden";
|
||||||
defaultCommand = "fd --type f --exclude .git --follow --hidden";
|
changeDirWidgetCommand = "fd --type d --exclude .git --follow --hidden";
|
||||||
}
|
};
|
||||||
// (
|
|
||||||
if options.programs.fzf ? changeDirWidget
|
|
||||||
then {changeDirWidget.command = changeDirWidgetCommand;}
|
|
||||||
else {inherit changeDirWidgetCommand;}
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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. Requires m3ta-nixpkgs overlays to be applied to pkgs
|
||||||
|
# (via home-manager.useGlobalPkgs = true in NixOS, or overlays in standalone).
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
# profiles/base/default.nix — Always loaded on every host.
|
# profiles/base/default.nix — Always loaded on every host.
|
||||||
#
|
#
|
||||||
# Provides:
|
# Provides:
|
||||||
|
# - nix-colors and m3ta-nixpkgs HM module imports
|
||||||
# - Shell (nushell, fish, starship) with enable options
|
# - Shell (nushell, fish, starship) with enable options
|
||||||
# - CLI tools (bat, carapace, direnv, eza, fzf, lf, nitch, television, zellij, zoxide)
|
# - CLI tools (bat, carapace, direnv, eza, fzf, lf, nitch, television, zellij, zoxide)
|
||||||
# - Secrets management (pass-wayland)
|
# - Secrets management (pass-wayland)
|
||||||
@@ -8,19 +9,21 @@
|
|||||||
# - Base packages
|
# - Base packages
|
||||||
#
|
#
|
||||||
# NOTE: Overlays are NOT set here. The consuming flake (nixos-config) handles
|
# NOTE: Overlays are NOT set here. The consuming flake (nixos-config) handles
|
||||||
# overlays at the NixOS level via nixpkgs.overlays. External HM modules are
|
# overlays at the NixOS level via nixpkgs.overlays. This module only imports
|
||||||
# imported by mkHome/modules/default.nix. This module only imports base profile
|
# HM modules and sets user-level preferences.
|
||||||
# submodules and sets user-level preferences.
|
|
||||||
#
|
#
|
||||||
# When used standalone (not through NixOS), overlays should be set by the
|
# When used standalone (not through NixOS), overlays should be set by the
|
||||||
# standalone HM configuration or by the consuming flake.
|
# standalone HM configuration or by the consuming flake.
|
||||||
{
|
{
|
||||||
|
inputs,
|
||||||
lib,
|
lib,
|
||||||
m3taHomeInputs,
|
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
imports = [
|
imports = [
|
||||||
|
inputs.nix-colors.homeManagerModules.default
|
||||||
|
inputs.m3ta-nixpkgs.homeManagerModules.default
|
||||||
|
|
||||||
./shell
|
./shell
|
||||||
./cli-tools
|
./cli-tools
|
||||||
./secrets
|
./secrets
|
||||||
@@ -41,7 +44,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
# ── Color scheme ──
|
# ── Color scheme ──
|
||||||
colorScheme = m3taHomeInputs.nix-colors.colorSchemes.dracula;
|
colorScheme = inputs.nix-colors.colorSchemes.dracula;
|
||||||
|
|
||||||
# ── Base packages ──
|
# ── Base packages ──
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
|
|||||||
@@ -6,8 +6,6 @@
|
|||||||
}:
|
}:
|
||||||
with lib; let
|
with lib; let
|
||||||
cfg = config.base.shell.nushell;
|
cfg = config.base.shell.nushell;
|
||||||
# User-specific secrets file from agenix, resolved at build time.
|
|
||||||
secretsFile = "/run/agenix/${config.home.username}-secrets";
|
|
||||||
in {
|
in {
|
||||||
# Enabled by default — base modules are always-on.
|
# Enabled by default — base modules are always-on.
|
||||||
options.base.shell.nushell.enable = (mkEnableOption "enable nushell") // {default = true;};
|
options.base.shell.nushell.enable = (mkEnableOption "enable nushell") // {default = true;};
|
||||||
@@ -43,17 +41,6 @@ in {
|
|||||||
| transpose -r -d
|
| transpose -r -d
|
||||||
| load-env
|
| load-env
|
||||||
}
|
}
|
||||||
|
|
||||||
# Load user-specific secrets from agenix. The secret file is Nushell code
|
|
||||||
# containing a `load-env { ... }` block, not KEY=VALUE lines.
|
|
||||||
# `source` resolves literal paths at parse time, so use `null` when absent.
|
|
||||||
# Path is resolved at Nix build time via config.home.username.
|
|
||||||
const user_secrets_file = if ("${secretsFile}" | path exists) {
|
|
||||||
"${secretsFile}"
|
|
||||||
} else {
|
|
||||||
null
|
|
||||||
}
|
|
||||||
source $user_secrets_file
|
|
||||||
'';
|
'';
|
||||||
|
|
||||||
configFile.text = ''
|
configFile.text = ''
|
||||||
|
|||||||
@@ -11,8 +11,6 @@ in {
|
|||||||
options.desktop.apps.office.enable = mkEnableOption "install office and paperwork apps";
|
options.desktop.apps.office.enable = mkEnableOption "install office and paperwork apps";
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
# libreoffice-fresh warns: upstream changed versioning; -stable is the
|
home.packages = [pkgs.libreoffice-fresh];
|
||||||
# supported attr now.
|
|
||||||
home.packages = [pkgs.libreoffice-stable];
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,23 +1,10 @@
|
|||||||
# Desktop environment aggregator — only loaded when context=desktop.
|
# Desktop environment aggregator — only loaded when context=desktop.
|
||||||
# Includes window manager, applications, theming, and desktop session config.
|
# Includes window manager, applications, theming, and desktop session config.
|
||||||
{
|
{
|
||||||
m3taHomeInputs,
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: let
|
}: {
|
||||||
# WORKAROUND (2026-09-12): hermes-agent v2026.8.31 pins a stale hash for
|
|
||||||
# the Electron 43.6.0 headers artifact (the CDN swapped the file). Build
|
|
||||||
# the desktop app from a local copy of upstream's nix/desktop.nix with
|
|
||||||
# the verified hash. Remove when upstream fixes it and the input is bumped.
|
|
||||||
hermesDesktopFixed = let
|
|
||||||
hermesAgent = m3taHomeInputs.hermes-agent.packages.${pkgs.stdenv.hostPlatform.system}.default;
|
|
||||||
in
|
|
||||||
pkgs.callPackage ./hermes-desktop.nix {
|
|
||||||
inherit hermesAgent;
|
|
||||||
hermesNpmLib = hermesAgent.hermesNpmLib;
|
|
||||||
hermesSrc = m3taHomeInputs.hermes-agent.outPath;
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
imports = [
|
imports = [
|
||||||
./wm
|
./wm
|
||||||
./apps
|
./apps
|
||||||
@@ -51,58 +38,23 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
home = {
|
home.sessionVariables = {
|
||||||
sessionVariables = {
|
WEBKIT_DISABLE_COMPOSITING_MODE = "1";
|
||||||
WEBKIT_DISABLE_COMPOSITING_MODE = "1";
|
NIXOS_OZONE_WL = "1";
|
||||||
NIXOS_OZONE_WL = "1";
|
TERMINAL = "ghostty";
|
||||||
TERMINAL = "ghostty";
|
QT_QPA_PLATFORM = "wayland";
|
||||||
QT_QPA_PLATFORM = "wayland";
|
XDG_CURRENT_DESKTOP = "Hyprland";
|
||||||
XDG_CURRENT_DESKTOP = "Hyprland";
|
XDG_SESSION_TYPE = "wayland";
|
||||||
XDG_SESSION_TYPE = "wayland";
|
XDG_SESSION_DESKTOP = "Hyprland";
|
||||||
XDG_SESSION_DESKTOP = "Hyprland";
|
|
||||||
};
|
|
||||||
|
|
||||||
sessionPath = [
|
|
||||||
"\${XDG_BIN_HOME}"
|
|
||||||
"\${HOME}/.cargo/bin"
|
|
||||||
"$HOME/.npm-global/bin"
|
|
||||||
"$HOME/.cache/.bun/bin"
|
|
||||||
];
|
|
||||||
|
|
||||||
pointerCursor = {
|
|
||||||
enable = true;
|
|
||||||
gtk.enable = true;
|
|
||||||
package = pkgs.bibata-cursors;
|
|
||||||
name = "Bibata-Modern-Ice";
|
|
||||||
size = 20;
|
|
||||||
};
|
|
||||||
|
|
||||||
packages = with pkgs; [
|
|
||||||
appimage-run
|
|
||||||
bemoji
|
|
||||||
google-chrome
|
|
||||||
dconf
|
|
||||||
(element-desktop.override {
|
|
||||||
commandLineArgs = "--password-store=gnome-libsecret";
|
|
||||||
})
|
|
||||||
hermesDesktopFixed
|
|
||||||
launch-webapp
|
|
||||||
file-roller
|
|
||||||
gsettings-desktop-schemas
|
|
||||||
seahorse
|
|
||||||
sushi
|
|
||||||
ksnip
|
|
||||||
nwg-look
|
|
||||||
qt6Packages.qt6ct
|
|
||||||
rose-pine-hyprcursor
|
|
||||||
remmina
|
|
||||||
slack
|
|
||||||
vivaldi
|
|
||||||
vivaldi-ffmpeg-codecs
|
|
||||||
vibetyper
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
home.sessionPath = [
|
||||||
|
"\${XDG_BIN_HOME}"
|
||||||
|
"\${HOME}/.cargo/bin"
|
||||||
|
"$HOME/.npm-global/bin"
|
||||||
|
"$HOME/.cache/.bun/bin"
|
||||||
|
];
|
||||||
|
|
||||||
fonts.fontconfig.enable = true;
|
fonts.fontconfig.enable = true;
|
||||||
|
|
||||||
programs.ghostty = {
|
programs.ghostty = {
|
||||||
@@ -112,30 +64,59 @@ in {
|
|||||||
settings = {
|
settings = {
|
||||||
font-family = "Fira Code";
|
font-family = "Fira Code";
|
||||||
copy-on-select = "clipboard";
|
copy-on-select = "clipboard";
|
||||||
theme = "dankcolors";
|
foreground = "#${config.colorScheme.palette.base05}";
|
||||||
# foreground = "#${config.colorScheme.palette.base05}";
|
background = "#${config.colorScheme.palette.base00}";
|
||||||
# background = "#${config.colorScheme.palette.base00}";
|
selection-foreground = "#${config.colorScheme.palette.base07}";
|
||||||
# selection-foreground = "#${config.colorScheme.palette.base07}";
|
selection-background = "#${config.colorScheme.palette.base02}";
|
||||||
# selection-background = "#${config.colorScheme.palette.base02}";
|
cursor-color = "#${config.colorScheme.palette.base05}";
|
||||||
# cursor-color = "#${config.colorScheme.palette.base05}";
|
palette = [
|
||||||
# palette = [
|
"0=#${config.colorScheme.palette.base01}"
|
||||||
# "0=#${config.colorScheme.palette.base01}"
|
"1=#${config.colorScheme.palette.base08}"
|
||||||
# "1=#${config.colorScheme.palette.base08}"
|
"2=#${config.colorScheme.palette.base0B}"
|
||||||
# "2=#${config.colorScheme.palette.base0B}"
|
"3=#${config.colorScheme.palette.base0A}"
|
||||||
# "3=#${config.colorScheme.palette.base0A}"
|
"4=#${config.colorScheme.palette.base0D}"
|
||||||
# "4=#${config.colorScheme.palette.base0D}"
|
"5=#${config.colorScheme.palette.base0E}"
|
||||||
# "5=#${config.colorScheme.palette.base0E}"
|
"6=#${config.colorScheme.palette.base0C}"
|
||||||
# "6=#${config.colorScheme.palette.base0C}"
|
"7=#${config.colorScheme.palette.base05}"
|
||||||
# "7=#${config.colorScheme.palette.base05}"
|
"8=#${config.colorScheme.palette.base03}"
|
||||||
# "8=#${config.colorScheme.palette.base03}"
|
"9=#${config.colorScheme.palette.base08}"
|
||||||
# "9=#${config.colorScheme.palette.base08}"
|
"10=#${config.colorScheme.palette.base0B}"
|
||||||
# "10=#${config.colorScheme.palette.base0B}"
|
"11=#${config.colorScheme.palette.base0A}"
|
||||||
# "11=#${config.colorScheme.palette.base0A}"
|
"12=#${config.colorScheme.palette.base0D}"
|
||||||
# "12=#${config.colorScheme.palette.base0D}"
|
"13=#${config.colorScheme.palette.base0E}"
|
||||||
# "13=#${config.colorScheme.palette.base0E}"
|
"14=#${config.colorScheme.palette.base0C}"
|
||||||
# "14=#${config.colorScheme.palette.base0C}"
|
"15=#${config.colorScheme.palette.base07}"
|
||||||
# "15=#${config.colorScheme.palette.base07}"
|
];
|
||||||
# ];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
home.pointerCursor = {
|
||||||
|
gtk.enable = true;
|
||||||
|
package = pkgs.bibata-cursors;
|
||||||
|
name = "Bibata-Modern-Ice";
|
||||||
|
size = 20;
|
||||||
|
};
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
appimage-run
|
||||||
|
bemoji
|
||||||
|
eigent
|
||||||
|
(element-desktop.override {
|
||||||
|
commandLineArgs = "--password-store=gnome-libsecret";
|
||||||
|
})
|
||||||
|
launch-webapp
|
||||||
|
file-roller
|
||||||
|
hyprpanel
|
||||||
|
hyprpaper-random
|
||||||
|
seahorse
|
||||||
|
sushi
|
||||||
|
ksnip
|
||||||
|
nwg-look
|
||||||
|
rose-pine-hyprcursor
|
||||||
|
remmina
|
||||||
|
slack
|
||||||
|
vivaldi
|
||||||
|
vivaldi-ffmpeg-codecs
|
||||||
|
vibetyper
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,244 +0,0 @@
|
|||||||
# hermes-desktop.nix — local copy of hermes-agent's nix/desktop.nix
|
|
||||||
#
|
|
||||||
# WORKAROUND for an upstream build failure (hermes-agent v2026.8.31):
|
|
||||||
#
|
|
||||||
# Upstream pins sha256-f8bSbLRmtbP93CJAvEBs+sHWDZ1xP2bcpLhC1EnOmZU=
|
|
||||||
# for https://artifacts.electronjs.org/headers/dist/v43.6.0/node-v43.6.0-headers.tar.gz
|
|
||||||
# The Electron CDN swapped that artifact, so the pinned hash no longer
|
|
||||||
# matches what the server serves today (verified 2026-09-12 via
|
|
||||||
# `nix store prefetch-file`). Upstream has fixed this class of breakage
|
|
||||||
# repeatedly ("fix electron headers sha" commits); main is not fixed yet.
|
|
||||||
#
|
|
||||||
# Differences from upstream nix/desktop.nix:
|
|
||||||
# 1. electron headers sha256 per electron version, with a clear throw
|
|
||||||
# for unknown versions (upstream hardcodes one hash).
|
|
||||||
# 2. icon.png / linux_desktop_entry.py resolve against `hermesSrc`
|
|
||||||
# (the flake input checkout) instead of relative repo paths.
|
|
||||||
#
|
|
||||||
# REMOVE THIS FILE and the hermesDesktopFixed let-binding in default.nix
|
|
||||||
# once upstream ships the corrected hash and the hermes-agent input is
|
|
||||||
# bumped past that release.
|
|
||||||
{
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
stdenv,
|
|
||||||
makeWrapper,
|
|
||||||
hermesNpmLib,
|
|
||||||
electron,
|
|
||||||
hermesAgent,
|
|
||||||
python3,
|
|
||||||
# Checkout of the hermes-agent flake input (outPath), used for files
|
|
||||||
# that upstream references with relative paths inside its own repo.
|
|
||||||
hermesSrc,
|
|
||||||
# Environment to bake into the launcher. A GUI launcher reads none of the
|
|
||||||
# shell profile, so a variable that an interactive shell exports does not
|
|
||||||
# reach an app that the desktop menu starts. The Home Manager module passes
|
|
||||||
# HERMES_HOME and HERMES_MANAGED here, which gives the app the same state
|
|
||||||
# directory as the services.
|
|
||||||
extraEnv ? {},
|
|
||||||
# Shell lines to run before the app starts. A secret belongs here and never
|
|
||||||
# in extraEnv: makeWrapper writes a --set value into the Nix store, which
|
|
||||||
# all users can read. A --run line reads the value from a runtime path at
|
|
||||||
# each start instead.
|
|
||||||
extraRun ? [],
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
# Each flag goes on its own continued line, and the leading backslash is
|
|
||||||
# inside the generated string. An empty attribute set then adds no text
|
|
||||||
# at all, and cannot leave a backslash above a blank line. That fault ends the
|
|
||||||
# makeWrapper command early, and the next flag runs as a shell command.
|
|
||||||
extraEnvFlags = lib.concatMapStrings (
|
|
||||||
name: " \\\n --set ${name} ${lib.escapeShellArg (toString extraEnv.${name})}"
|
|
||||||
) (lib.attrNames extraEnv);
|
|
||||||
|
|
||||||
extraRunFlags = lib.concatMapStrings (line: " \\\n --run ${lib.escapeShellArg line}") extraRun;
|
|
||||||
|
|
||||||
# Electron's CDN has re-uploaded header artifacts for the same version
|
|
||||||
# before, which silently changes their hash. Keep one verified hash per
|
|
||||||
# electron version and fail loudly (instead of with a cryptic FOD
|
|
||||||
# mismatch) whenever a bump needs a new one.
|
|
||||||
electronHeaderHashes = {
|
|
||||||
"43.6.0" = "sha256-xDgc5PpkcLpWHnlqVcjBD3SxJKtkUoSGLnJaSSrxJtI=";
|
|
||||||
};
|
|
||||||
|
|
||||||
electronHeaders = pkgs.fetchurl {
|
|
||||||
url = "https://artifacts.electronjs.org/headers/dist/v${electron.version}/node-v${electron.version}-headers.tar.gz";
|
|
||||||
sha256 =
|
|
||||||
electronHeaderHashes.${
|
|
||||||
electron.version
|
|
||||||
}
|
|
||||||
or (throw ''
|
|
||||||
hermes-desktop workaround: no verified Electron headers hash for version ${electron.version}.
|
|
||||||
Run: nix store prefetch-file https://artifacts.electronjs.org/headers/dist/v${electron.version}/node-v${electron.version}-headers.tar.gz
|
|
||||||
and add it to electronHeaderHashes in profiles/contexts/desktop/hermes-desktop.nix (m3ta-home).
|
|
||||||
'');
|
|
||||||
};
|
|
||||||
|
|
||||||
# node-pty ships no Electron-tagged prebuild we can trust to match this
|
|
||||||
# exact nixpkgs electron version, so it's always compiled from source
|
|
||||||
# against Electron's own headers (not whatever Node ran `npm`).
|
|
||||||
targetPlatform =
|
|
||||||
if stdenv.hostPlatform.isDarwin
|
|
||||||
then "darwin"
|
|
||||||
else if stdenv.hostPlatform.isLinux
|
|
||||||
then "linux"
|
|
||||||
else throw "hermes-desktop: unsupported host platform for node-pty staging";
|
|
||||||
|
|
||||||
targetArch =
|
|
||||||
if stdenv.hostPlatform.isAarch64
|
|
||||||
then "arm64"
|
|
||||||
else if stdenv.hostPlatform.isx86_64
|
|
||||||
then "x64"
|
|
||||||
else throw "hermes-desktop: unsupported host arch for node-pty staging";
|
|
||||||
|
|
||||||
# Build the renderer (dist/ + electron/ + package.json).
|
|
||||||
renderer = hermesNpmLib.buildNpmPackage {
|
|
||||||
dirs = [
|
|
||||||
"apps/desktop"
|
|
||||||
"apps/shared"
|
|
||||||
];
|
|
||||||
pname = "hermes-desktop-renderer";
|
|
||||||
|
|
||||||
doCheck = true;
|
|
||||||
|
|
||||||
buildPhase = ''
|
|
||||||
runHook preBuild
|
|
||||||
|
|
||||||
mkdir -p apps/desktop/build
|
|
||||||
|
|
||||||
patchShebangs .
|
|
||||||
|
|
||||||
pushd apps/desktop
|
|
||||||
# typecheck :3
|
|
||||||
npm exec -- tsc -b
|
|
||||||
|
|
||||||
# build the renderer bundle
|
|
||||||
# vite's emptyOutDir wipes dist/ on every run
|
|
||||||
# so it has to be first
|
|
||||||
npm exec -- vite build
|
|
||||||
|
|
||||||
# build the electron bundle
|
|
||||||
node scripts/bundle-electron-main.mjs
|
|
||||||
|
|
||||||
# Compile node-pty against Electron's actual ABI (the nixpkgs
|
|
||||||
# `electron` we ship). Headers come from a pinned fetchurl input
|
|
||||||
# since the sandbox has no network here, so node-gyp's
|
|
||||||
# normal --disturl download path can't run.
|
|
||||||
mkdir -p "$TMPDIR/electron-headers"
|
|
||||||
tar -xzf ${electronHeaders} -C "$TMPDIR/electron-headers" --strip-components=1
|
|
||||||
|
|
||||||
${lib.getExe hermesNpmLib.node-gyp} rebuild \
|
|
||||||
--directory=../../node_modules/node-pty \
|
|
||||||
--build-from-source \
|
|
||||||
--runtime=electron \
|
|
||||||
--target=${electron.version} \
|
|
||||||
--nodedir="$TMPDIR/electron-headers" \
|
|
||||||
--disturl="" \
|
|
||||||
--offline
|
|
||||||
|
|
||||||
# Target platform/arch come from stdenv.hostPlatform, not the
|
|
||||||
# build host's own process.platform/arch.
|
|
||||||
node scripts/stage-native-deps.mjs ${targetPlatform} ${targetArch}
|
|
||||||
popd
|
|
||||||
|
|
||||||
runHook postBuild
|
|
||||||
'';
|
|
||||||
|
|
||||||
checkPhase = ''
|
|
||||||
runHook preCheck
|
|
||||||
|
|
||||||
pushd apps/desktop
|
|
||||||
|
|
||||||
npm run postbuild
|
|
||||||
|
|
||||||
# validate staged node-pty native binary is present.
|
|
||||||
STAGED_PTY_NODE="./dist/node_modules/node-pty/build/Release/pty.node"
|
|
||||||
|
|
||||||
if [ ! -f "$STAGED_PTY_NODE" ]; then
|
|
||||||
echo "FATAL: Missing staged node-pty native binary at $STAGED_PTY_NODE"
|
|
||||||
echo "node-pty must be compiled natively"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
popd
|
|
||||||
|
|
||||||
runHook postCheck
|
|
||||||
'';
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
runHook preInstall
|
|
||||||
mkdir -p $out
|
|
||||||
# vite writes to apps/desktop/dist/ (we cd'd there in buildPhase).
|
|
||||||
# stage-native-deps.mjs stages node-pty into dist/node_modules/node-pty,
|
|
||||||
# so copying dist/ wholesale carries the native dep along with the
|
|
||||||
# esbuild bundle that require()s it. apps/desktop/build was created
|
|
||||||
# before the cd.
|
|
||||||
cp -rn apps/desktop/dist $out/
|
|
||||||
|
|
||||||
echo '{"schemaVersion":1,"commit":"nix-dummy-commit","branch":"nix","dirty":false,"source":"nix"}' > $out/install-stamp.json
|
|
||||||
|
|
||||||
cp -n apps/desktop/package.json $out/
|
|
||||||
runHook postInstall
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
in
|
|
||||||
# Electron wrapper: nixpkgs' electron binary pointed at the renderer dir.
|
|
||||||
stdenv.mkDerivation {
|
|
||||||
pname = "hermes-desktop";
|
|
||||||
inherit (renderer) version;
|
|
||||||
|
|
||||||
dontUnpack = true;
|
|
||||||
dontBuild = true;
|
|
||||||
|
|
||||||
nativeBuildInputs = [
|
|
||||||
makeWrapper
|
|
||||||
python3
|
|
||||||
];
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
runHook preInstall
|
|
||||||
|
|
||||||
mkdir -p $out/share/hermes-desktop $out/bin
|
|
||||||
cp -r ${renderer}/* $out/share/hermes-desktop/
|
|
||||||
|
|
||||||
# Standard nixpkgs pattern for electron-builder apps: patch process.resourcesPath
|
|
||||||
# to point to the app's directory. In Nix, unpackaged electron defaults this
|
|
||||||
# to the electron distribution's resources path, breaking extraResources lookups.
|
|
||||||
substituteInPlace $out/share/hermes-desktop/dist/electron-main.mjs \
|
|
||||||
--replace-fail "process.resourcesPath" "'$out/share/hermes-desktop'"
|
|
||||||
|
|
||||||
# Wrap the nixpkgs electron binary to launch our app. Set
|
|
||||||
# HERMES_DESKTOP_HERMES to the absolute path of the nix-built `hermes`
|
|
||||||
# binary so the desktop's resolver step 4 ("existing Hermes CLI on
|
|
||||||
# PATH") uses our fully wrapped binary — venv with all deps,
|
|
||||||
# bundled skills/plugins, runtime PATH (ripgrep/git/ffmpeg/etc).
|
|
||||||
# No reimplementation of the agent resolver in the wrapper.
|
|
||||||
makeWrapper ${lib.getExe electron} $out/bin/hermes-desktop \
|
|
||||||
--add-flags "$out/share/hermes-desktop" \
|
|
||||||
--set HERMES_DESKTOP_HERMES "${lib.getExe hermesAgent}" \
|
|
||||||
--set ELECTRON_IS_DEV 0${extraEnvFlags}${extraRunFlags}
|
|
||||||
|
|
||||||
# XDG launcher entry
|
|
||||||
mkdir -p $out/share/applications $out/share/icons/hicolor/1024x1024/apps
|
|
||||||
install -m 0644 ${hermesSrc}/apps/desktop/assets/icon.png \
|
|
||||||
$out/share/icons/hicolor/1024x1024/apps/hermes.png
|
|
||||||
export PYTHONPATH=$(mktemp -d)
|
|
||||||
cp ${hermesSrc}/hermes_cli/linux_desktop_entry.py "$PYTHONPATH/linux_desktop_entry.py"
|
|
||||||
export DESKTOP_EXEC="$out/bin/hermes-desktop"
|
|
||||||
export DESKTOP_ICON="$out/share/icons/hicolor/1024x1024/apps/hermes.png"
|
|
||||||
python3 -c 'import os; from linux_desktop_entry import render_desktop_entry; print(render_desktop_entry(os.environ["DESKTOP_EXEC"], os.environ["DESKTOP_ICON"]))' > $out/share/applications/hermes.desktop
|
|
||||||
runHook postInstall
|
|
||||||
'';
|
|
||||||
|
|
||||||
passthru = {
|
|
||||||
inherit (renderer.passthru) packageJsonPath;
|
|
||||||
};
|
|
||||||
|
|
||||||
meta = with lib; {
|
|
||||||
description = "Native Electron desktop shell for Hermes Agent";
|
|
||||||
homepage = "https://github.com/NousResearch/hermes-agent";
|
|
||||||
license = licenses.mit;
|
|
||||||
platforms = platforms.unix;
|
|
||||||
mainProgram = "hermes-desktop";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# GTK and Qt theming — system-wide dark Adwaita/libadwaita-compatible theme.
|
# GTK and Qt theming — Dracula theme with matching icons and cursor.
|
||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
config,
|
config,
|
||||||
@@ -6,19 +6,18 @@
|
|||||||
}: {
|
}: {
|
||||||
qt = {
|
qt = {
|
||||||
enable = true;
|
enable = true;
|
||||||
platformTheme.name = "gtk3";
|
platformTheme.name = "gtk";
|
||||||
};
|
};
|
||||||
|
|
||||||
gtk = {
|
gtk = {
|
||||||
enable = true;
|
enable = true;
|
||||||
colorScheme = "dark";
|
|
||||||
theme = {
|
theme = {
|
||||||
name = "adw-gtk3-dark";
|
name = "Dracula";
|
||||||
package = pkgs.adw-gtk3;
|
package = pkgs.dracula-theme;
|
||||||
};
|
};
|
||||||
iconTheme = {
|
iconTheme = {
|
||||||
name = "Papirus-Dark";
|
name = "Dracula";
|
||||||
package = pkgs.papirus-icon-theme;
|
package = pkgs.dracula-icon-theme;
|
||||||
};
|
};
|
||||||
gtk4.theme = config.gtk.theme;
|
gtk4.theme = config.gtk.theme;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -4,6 +4,5 @@
|
|||||||
./hyprland.nix
|
./hyprland.nix
|
||||||
./wayland.nix
|
./wayland.nix
|
||||||
./rofi.nix
|
./rofi.nix
|
||||||
./dms.nix
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,29 +0,0 @@
|
|||||||
# DankMaterialShell user-session configuration.
|
|
||||||
# External DMS Home-Manager modules are imported by mkHome/modules/default.nix
|
|
||||||
# so this file only owns the m3ta-home feature flag and desired defaults.
|
|
||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib; let
|
|
||||||
cfg = config.desktop.wm.dms;
|
|
||||||
in {
|
|
||||||
options.desktop.wm.dms.enable = mkEnableOption "DankMaterialShell desktop shell";
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
programs.dank-material-shell = {
|
|
||||||
enable = true;
|
|
||||||
systemd.enable = true;
|
|
||||||
enableDynamicTheming = true;
|
|
||||||
enableClipboardPaste = true;
|
|
||||||
|
|
||||||
plugins = {
|
|
||||||
dankBatteryAlerts.enable = true;
|
|
||||||
emojiLauncher.enable = true;
|
|
||||||
dankPomodoroTimer.enable = true;
|
|
||||||
dankVault.enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
# Hyprland window manager with keybindings, window rules, idle/lock, and hyprpaper.
|
# Hyprland window manager — Lua config for Hyprland 0.55+
|
||||||
|
# Home-Manager configType = "lua" generates hyprland.lua using hl.* API.
|
||||||
|
# API reference: https://wiki.hypr.land/Configuring/Start/
|
||||||
{
|
{
|
||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
@@ -6,109 +8,49 @@
|
|||||||
}:
|
}:
|
||||||
with lib; let
|
with lib; let
|
||||||
cfg = config.desktop.wm.hyprland;
|
cfg = config.desktop.wm.hyprland;
|
||||||
lua = lib.generators.mkLuaInline;
|
p = config.colorScheme.palette;
|
||||||
luaString = builtins.toJSON;
|
|
||||||
|
|
||||||
mkEnvVar = name: value: {
|
|
||||||
_args = [
|
|
||||||
name
|
|
||||||
value
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
modKey = key: lua ''mainMod .. " + ${key}"'';
|
|
||||||
mkDispatcher = expression: lua expression;
|
|
||||||
execCmd = command: "hl.dsp.exec_cmd(${luaString command})";
|
|
||||||
execExpr = expression: "hl.dsp.exec_cmd(${expression})";
|
|
||||||
|
|
||||||
mkBinding = keys: dispatcher: {
|
|
||||||
_args = [
|
|
||||||
keys
|
|
||||||
(mkDispatcher dispatcher)
|
|
||||||
];
|
|
||||||
};
|
|
||||||
mkBindingWithOptions = keys: dispatcher: options: {
|
|
||||||
_args = [
|
|
||||||
keys
|
|
||||||
(mkDispatcher dispatcher)
|
|
||||||
options
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
startupCommand = command: {
|
|
||||||
_args = [
|
|
||||||
"hyprland.start"
|
|
||||||
(lua ''
|
|
||||||
function()
|
|
||||||
hl.exec_cmd(${luaString command})
|
|
||||||
end
|
|
||||||
'')
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
focusWorkspace = workspace: "hl.dsp.focus({ workspace = ${luaString workspace} })";
|
|
||||||
moveToWorkspace = workspace: "hl.dsp.window.move({ workspace = ${luaString workspace} })";
|
|
||||||
in {
|
in {
|
||||||
options.desktop.wm.hyprland.enable = mkEnableOption "Hyprland window manager";
|
options.desktop.wm.hyprland.enable = mkEnableOption "Hyprland window manager";
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
wayland.windowManager.hyprland = {
|
wayland.windowManager.hyprland = {
|
||||||
configType = "lua";
|
configType = "lua";
|
||||||
extraLuaFiles."00-dms" = {
|
|
||||||
autoLoad = true;
|
|
||||||
content = ''
|
|
||||||
-- DMS setup/runtime owns these modules. Load only the Lua equivalents
|
|
||||||
-- of the pre-migration active sources, before local Home Manager
|
|
||||||
-- settings, preserving the old source-first order without enabling new
|
|
||||||
-- DMS default binds or rules.
|
|
||||||
--
|
|
||||||
-- Keep fresh Home Manager generations usable before DMS has written
|
|
||||||
-- ~/.config/hypr/dms/*.lua.
|
|
||||||
local function require_if_present(module)
|
|
||||||
if package.searchpath(module, package.path) ~= nil then
|
|
||||||
require(module)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
require_if_present("dms.colors")
|
|
||||||
require_if_present("dms.layout")
|
|
||||||
require_if_present("dms.outputs")
|
|
||||||
require_if_present("dms.binds-user")
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
settings = {
|
settings = {
|
||||||
mainMod = {
|
# ── Lua local variables (rendered as: local mainMod = "SUPER") ──
|
||||||
_var = "SUPER";
|
mainMod = {_var = "SUPER";};
|
||||||
};
|
terminal = {_var = "ghostty";};
|
||||||
terminal = {
|
|
||||||
_var = "ghostty";
|
|
||||||
};
|
|
||||||
|
|
||||||
|
# ── Config sections (rendered as: hl.config({...})) ──
|
||||||
config = {
|
config = {
|
||||||
xwayland = {
|
xwayland = {force_zero_scaling = true;};
|
||||||
force_zero_scaling = true;
|
|
||||||
};
|
|
||||||
input = {
|
input = {
|
||||||
kb_layout = "us,de";
|
kb_layout = "de,us";
|
||||||
kb_variant = "";
|
kb_variant = "";
|
||||||
kb_model = "";
|
kb_model = "";
|
||||||
kb_rules = "";
|
kb_rules = "";
|
||||||
kb_options = "ctrl:nocaps";
|
kb_options = "ctrl:nocaps";
|
||||||
follow_mouse = 1;
|
follow_mouse = 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
general = {
|
general = {
|
||||||
gaps_in = 5;
|
gaps_in = 5;
|
||||||
gaps_out = 5;
|
gaps_out = 5;
|
||||||
border_size = 1;
|
border_size = 1;
|
||||||
|
col = {
|
||||||
|
active_border = {colors = ["rgba(9742b5ee)" "rgba(9742b5ee)"]; angle = 45;};
|
||||||
|
inactive_border = "rgba(${p.base03}aa)";
|
||||||
|
};
|
||||||
layout = "dwindle";
|
layout = "dwindle";
|
||||||
};
|
};
|
||||||
|
|
||||||
decoration = {
|
decoration = {
|
||||||
shadow = {
|
shadow = {
|
||||||
enabled = true;
|
enabled = true;
|
||||||
range = 60;
|
range = 60;
|
||||||
render_power = 3;
|
render_power = 3;
|
||||||
# color = "rgba(${config.colorScheme.palette.base00}66)";
|
color = "rgba(${p.base00}66)";
|
||||||
offset = "1 2";
|
|
||||||
scale = 0.97;
|
scale = 0.97;
|
||||||
};
|
};
|
||||||
rounding = 8;
|
rounding = 8;
|
||||||
@@ -120,480 +62,258 @@ in {
|
|||||||
active_opacity = 0.9;
|
active_opacity = 0.9;
|
||||||
inactive_opacity = 0.5;
|
inactive_opacity = 0.5;
|
||||||
};
|
};
|
||||||
animations = {
|
|
||||||
enabled = true;
|
animations = {enabled = true;};
|
||||||
};
|
|
||||||
dwindle = {
|
dwindle = {
|
||||||
# pseudotile = true; # TODO
|
pseudotile = true;
|
||||||
preserve_split = true;
|
preserve_split = true;
|
||||||
};
|
};
|
||||||
master = {
|
|
||||||
new_status = "master";
|
master = {new_status = "master";};
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
on = [
|
# ── Environment variables (rendered as: hl.env("KEY", "VALUE")) ──
|
||||||
(startupCommand "vibetyper")
|
env = [
|
||||||
];
|
{ _args = ["XCURSOR_SIZE" "32"]; }
|
||||||
|
{ _args = ["HYPRCURSOR_THEME" "Bibata-Modern-Ice"]; }
|
||||||
"env" = [
|
{ _args = ["WLR_NO_HARDWARE_CURSORS" "1"]; }
|
||||||
(mkEnvVar "XCURSOR_SIZE" "32")
|
{ _args = ["GTK_THEME" "Dracula"]; }
|
||||||
(mkEnvVar "HYPRCURSOR_THEME" "Bibata-Modern-Ice")
|
{ _args = ["XDG_CURRENT_DESKTOP" "Hyprland"]; }
|
||||||
(mkEnvVar "WLR_NO_HARDWARE_CURSORS" "1")
|
{ _args = ["XDG_SESSION_TYPE" "wayland"]; }
|
||||||
(mkEnvVar "XDG_CURRENT_DESKTOP" "Hyprland")
|
{ _args = ["XDG_SESSION_DESKTOP" "Hyprland"]; }
|
||||||
(mkEnvVar "XDG_SESSION_TYPE" "wayland")
|
{ _args = ["XKB_DEFAULT_LAYOUT" "de"]; }
|
||||||
(mkEnvVar "XDG_SESSION_DESKTOP" "Hyprland")
|
{ _args = ["NIXOS_OZONE_WL" "1"]; }
|
||||||
(mkEnvVar "XKB_DEFAULT_LAYOUT" "de")
|
|
||||||
(mkEnvVar "NIXOS_OZONE_WL" "1")
|
|
||||||
(mkEnvVar "QT_QPA_PLATFORM" "wayland;xcb")
|
|
||||||
(mkEnvVar "QT_QPA_PLATFORMTHEME" "gtk3")
|
|
||||||
(mkEnvVar "QT_QPA_PLATFORMTHEME_QT6" "gtk3")
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
# ── Per-device config (rendered as: hl.device({...})) ──
|
||||||
device = [
|
device = [
|
||||||
{
|
{name = "epic-mouse-v1"; sensitivity = -0.5;}
|
||||||
name = "video-bus";
|
{name = "zsa-technology-labs-moonlander-mark-i"; kb_layout = "us";}
|
||||||
kb_layout = "de,us";
|
{name = "keychron-keychron-k7"; kb_layout = "us";}
|
||||||
kb_options = "ctrl:nocaps";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "razer-razer-pro-click-v2-vertical-edition-keyboard";
|
|
||||||
kb_layout = "de,us";
|
|
||||||
kb_options = "ctrl:nocaps";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "razer-razer-pro-click-v2-vertical-edition-1";
|
|
||||||
kb_layout = "de,us";
|
|
||||||
kb_options = "ctrl:nocaps";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "vibe-typer-virtual-keyboard";
|
|
||||||
kb_layout = "de";
|
|
||||||
kb_options = "ctrl:nocaps";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "keychron-keychron-k7";
|
|
||||||
kb_layout = "us,de";
|
|
||||||
kb_options = "ctrl:nocaps";
|
|
||||||
}
|
|
||||||
# Moonlander Sub-Devices bleiben us zuerst (de als zweites Layout):
|
|
||||||
{
|
|
||||||
name = "zsa-technology-labs-moonlander-mark-i-consumer-control";
|
|
||||||
kb_layout = "us,de";
|
|
||||||
kb_options = "ctrl:nocaps";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "zsa-technology-labs-moonlander-mark-i-keyboard";
|
|
||||||
kb_layout = "us,de";
|
|
||||||
kb_options = "ctrl:nocaps";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "zsa-technology-labs-moonlander-mark-i-system-control";
|
|
||||||
kb_layout = "us,de";
|
|
||||||
kb_options = "ctrl:nocaps";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "asustek-computer-inc.-gz302ea-keyboard";
|
|
||||||
kb_layout = "de,us";
|
|
||||||
kb_options = "ctrl:nocaps";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "asustek-computer-inc.-gz302ea-keyboard-2";
|
|
||||||
kb_layout = "de,us";
|
|
||||||
kb_options = "ctrl:nocaps";
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
|
};
|
||||||
|
|
||||||
curve = {
|
# ── Complex Lua: curves, animations, binds, window rules, startup ──
|
||||||
_args = [
|
extraConfig = ''
|
||||||
"myBezier"
|
-- Bezier curves
|
||||||
(lua ''{ type = "bezier", points = { { 0.05, 0.9 }, { 0.1, 1.05 } } }'')
|
hl.curve("myBezier", { type = "bezier", points = { {0.05, 0.9}, {0.1, 1.05} } })
|
||||||
];
|
|
||||||
|
-- Animations
|
||||||
|
hl.animation({ leaf = "windows", enabled = true, speed = 7, bezier = "myBezier" })
|
||||||
|
hl.animation({ leaf = "windowsOut", enabled = true, speed = 7, bezier = "default", style = "popin 80%" })
|
||||||
|
hl.animation({ leaf = "border", enabled = true, speed = 10, bezier = "default" })
|
||||||
|
hl.animation({ leaf = "borderangle", enabled = true, speed = 8, bezier = "default" })
|
||||||
|
hl.animation({ leaf = "fade", enabled = true, speed = 7, bezier = "default" })
|
||||||
|
hl.animation({ leaf = "workspaces", enabled = true, speed = 6, bezier = "default" })
|
||||||
|
|
||||||
|
-- Keybinds: terminals & editors
|
||||||
|
hl.bind(mainMod .. " + Return", hl.dsp.exec_cmd(terminal .. " nu -c zellij-ps"))
|
||||||
|
hl.bind(mainMod .. " + T", hl.dsp.exec_cmd(terminal .. " -e nu -c 'nitch; exec nu'"))
|
||||||
|
hl.bind(mainMod .. " + Shift + T", hl.dsp.exec_cmd("launch-timer"))
|
||||||
|
hl.bind(mainMod .. " + N", hl.dsp.exec_cmd(terminal .. " -e nvim"))
|
||||||
|
hl.bind(mainMod .. " + Z", hl.dsp.exec_cmd("uwsm app -- zeditor"))
|
||||||
|
|
||||||
|
-- Keybinds: misc
|
||||||
|
hl.bind(mainMod .. " + O", hl.dsp.exec_cmd("hyprctl dispatch setprop activewindow opaque toggle"))
|
||||||
|
hl.bind(mainMod .. " + B", hl.dsp.exec_cmd("uwsm app -- thunar"))
|
||||||
|
hl.bind(mainMod .. " + Shift + B", hl.dsp.exec_cmd("uwsm app -- vivaldi"))
|
||||||
|
hl.bind(mainMod .. " + Escape", hl.dsp.exec_cmd("uwsm app -- wlogout -p layer-shell"))
|
||||||
|
|
||||||
|
-- Keybinds: window management
|
||||||
|
hl.bind(mainMod .. " + Space", hl.dsp.window.float({ action = "toggle" }))
|
||||||
|
hl.bind(mainMod .. " + Q", hl.dsp.window.close())
|
||||||
|
hl.bind(mainMod .. " + M", hl.dsp.exit())
|
||||||
|
hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen())
|
||||||
|
hl.bind(mainMod .. " + Shift + V", hl.dsp.window.float({ action = "toggle" }))
|
||||||
|
|
||||||
|
-- Keybinds: launchers
|
||||||
|
hl.bind(mainMod .. " + D", hl.dsp.exec_cmd('uwsm app -- rofi -show drun -run-command "uwsm app -- {cmd}"'))
|
||||||
|
hl.bind(mainMod .. " + V", hl.dsp.exec_cmd("uwsm app -- cliphist list | rofi -dmenu | cliphist decode | wl-copy"))
|
||||||
|
hl.bind(mainMod .. " + C", hl.dsp.exec_cmd("bash -c 'FILE=/tmp/screenshot_$(date +%s).png; grim -g \"$(slurp)\" \"$FILE\" && ksnip \"$FILE\"'"))
|
||||||
|
hl.bind(mainMod .. " + Shift + S", hl.dsp.exec_cmd("uwsm app -- rofi -show emoji"))
|
||||||
|
hl.bind(mainMod .. " + P", hl.dsp.exec_cmd("uwsm app -- rofi-pass"))
|
||||||
|
hl.bind(mainMod .. " + Shift + P", hl.dsp.window.pseudo())
|
||||||
|
|
||||||
|
-- Keybinds: STT push-to-talk
|
||||||
|
hl.bind(mainMod .. " + R", hl.dsp.exec_cmd("stt-ptt start"))
|
||||||
|
hl.bind(mainMod .. " + R", hl.dsp.exec_cmd("stt-ptt stop"), { release = true })
|
||||||
|
hl.bind(mainMod .. " + S", hl.dsp.exec_cmd("stt-ptt start"))
|
||||||
|
hl.bind(mainMod .. " + S", hl.dsp.exec_cmd("stt-ptt format-stop"), { release = true })
|
||||||
|
|
||||||
|
-- Keybinds: focus
|
||||||
|
hl.bind(mainMod .. " + H", hl.dsp.focus({ direction = "left" }))
|
||||||
|
hl.bind(mainMod .. " + L", hl.dsp.focus({ direction = "right" }))
|
||||||
|
hl.bind(mainMod .. " + K", hl.dsp.focus({ direction = "up" }))
|
||||||
|
hl.bind(mainMod .. " + J", hl.dsp.focus({ direction = "down" }))
|
||||||
|
|
||||||
|
-- Keybinds: workspaces (1-10)
|
||||||
|
for i = 1, 10 do
|
||||||
|
local key = i % 10
|
||||||
|
hl.bind(mainMod .. " + " .. key, hl.dsp.focus({ workspace = i }))
|
||||||
|
hl.bind(mainMod .. " + Shift + " .. key, hl.dsp.window.move({ workspace = i }))
|
||||||
|
end
|
||||||
|
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
|
||||||
|
hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
|
||||||
|
|
||||||
|
-- Keybinds: mouse (drag & resize)
|
||||||
|
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||||
|
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
|
||||||
|
|
||||||
|
-- Window rules: floating dialogs
|
||||||
|
for _, cls in ipairs({
|
||||||
|
"file_progress", "confirm", "dialog", "download",
|
||||||
|
"notification", "error", "splash", "confirmreset",
|
||||||
|
}) do
|
||||||
|
hl.window_rule({ match = { class = cls }, float = true })
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Window rules: title-based floating
|
||||||
|
hl.window_rule({ match = { title = "Open File" }, float = true })
|
||||||
|
hl.window_rule({ match = { title = "branchdialog" }, float = true })
|
||||||
|
|
||||||
|
-- Window rules: audio/video
|
||||||
|
hl.window_rule({ match = { class = "pavucontrol-qt" }, float = true })
|
||||||
|
hl.window_rule({ match = { class = "pavucontrol" }, float = true })
|
||||||
|
hl.window_rule({ match = { class = "^espanso$" }, float = true })
|
||||||
|
|
||||||
|
-- Window rules: wlogout
|
||||||
|
hl.window_rule({ match = { class = "wlogout" }, fullscreen = true })
|
||||||
|
hl.window_rule({ match = { title = "wlogout" }, float = true, fullscreen = true })
|
||||||
|
|
||||||
|
-- Window rules: mpv
|
||||||
|
hl.window_rule({ match = { class = "mpv" }, float = true, idle_inhibit = "focus", opacity = 1.0 })
|
||||||
|
|
||||||
|
-- Window rules: misc floating
|
||||||
|
hl.window_rule({ match = { title = "^Media viewer$" }, float = true })
|
||||||
|
hl.window_rule({ match = { title = "^Volume Control$" }, float = true })
|
||||||
|
hl.window_rule({ match = { title = "^Picture-in-Picture$" }, float = true })
|
||||||
|
|
||||||
|
-- Window rules: pomodoro (consolidated)
|
||||||
|
hl.window_rule({
|
||||||
|
match = { title = "^floating-pomodoro$" },
|
||||||
|
float = true, size = { 250, 50 }, move = { 12, "monitor_h-150" }, pin = true,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Window rules: streamlabs (consolidated)
|
||||||
|
hl.window_rule({
|
||||||
|
match = { initial_title = ".*streamlabs.com.*" },
|
||||||
|
float = true, pin = true, size = { 800, 400 }, opacity = 0.5,
|
||||||
|
idle_inhibit = "focus", no_anim = true, decorate = false, no_shadow = true, no_blur = true,
|
||||||
|
})
|
||||||
|
hl.window_rule({ match = { initial_title = ".*alert-box.*" }, move = { "100%-820", 102 } })
|
||||||
|
hl.window_rule({ match = { initial_title = ".*chat-box.*" }, move = { "100%-820", 512 } })
|
||||||
|
|
||||||
|
-- Window rules: vibe-typer
|
||||||
|
hl.window_rule({ match = { class = "^vibe-typer$", title = "^Recording Indicator$" }, no_blur = true })
|
||||||
|
|
||||||
|
-- Window rules: xwayland border
|
||||||
|
hl.window_rule({ match = { xwayland = true }, border_color = "rgb(ffffff)" })
|
||||||
|
|
||||||
|
-- Startup commands
|
||||||
|
hl.on("hyprland.start", function()
|
||||||
|
hl.exec_cmd("hyprpanel")
|
||||||
|
hl.exec_cmd("while ! hyprpaper-random; do sleep 0.5; done")
|
||||||
|
hl.exec_cmd("wl-paste --type text --watch cliphist store")
|
||||||
|
hl.exec_cmd("wl-paste --type image --watch cliphist store")
|
||||||
|
hl.exec_cmd("vibetyper")
|
||||||
|
end)
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
services.hypridle = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
general = {
|
||||||
|
before_sleep_cmd = "hyprlock";
|
||||||
|
after_sleep_cmd = "hyprctl dispatch dpms on";
|
||||||
|
inhibit_sleep = 3;
|
||||||
};
|
};
|
||||||
|
listener = [
|
||||||
animation = [
|
|
||||||
{
|
{
|
||||||
leaf = "windows";
|
timeout = 300;
|
||||||
enabled = true;
|
on-timeout = "hyprlock";
|
||||||
speed = 7;
|
|
||||||
bezier = "myBezier";
|
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
leaf = "windowsOut";
|
timeout = 420;
|
||||||
enabled = true;
|
on-timeout = "hyprctl dispatch dpms off";
|
||||||
speed = 7;
|
on-resume = "hyprctl dispatch dpms on";
|
||||||
bezier = "default";
|
|
||||||
style = "popin 80%";
|
|
||||||
}
|
}
|
||||||
{
|
|
||||||
leaf = "border";
|
|
||||||
enabled = true;
|
|
||||||
speed = 10;
|
|
||||||
bezier = "default";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
leaf = "borderangle";
|
|
||||||
enabled = true;
|
|
||||||
speed = 8;
|
|
||||||
bezier = "default";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
leaf = "fade";
|
|
||||||
enabled = true;
|
|
||||||
speed = 7;
|
|
||||||
bezier = "default";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
leaf = "workspaces";
|
|
||||||
enabled = true;
|
|
||||||
speed = 6;
|
|
||||||
bezier = "default";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
window_rule = [
|
|
||||||
{
|
|
||||||
match.class = "file_progress";
|
|
||||||
float = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.class = "confirm";
|
|
||||||
float = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.class = "dialog";
|
|
||||||
float = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.class = "download";
|
|
||||||
float = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.class = "notification";
|
|
||||||
float = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.class = "error";
|
|
||||||
float = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.class = "splash";
|
|
||||||
float = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.class = "confirmreset";
|
|
||||||
float = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.title = "Open File";
|
|
||||||
float = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.title = "branchdialog";
|
|
||||||
float = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.class = "pavucontrol-qt";
|
|
||||||
float = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.class = "pavucontrol";
|
|
||||||
float = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.class = "class:^(espanso)$";
|
|
||||||
float = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.class = "wlogout";
|
|
||||||
fullscreen = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.title = "wlogout";
|
|
||||||
float = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.title = "wlogout";
|
|
||||||
fullscreen = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.class = "mpv";
|
|
||||||
float = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.class = "mpv";
|
|
||||||
idle_inhibit = "focus";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.class = "mpv";
|
|
||||||
opacity = "1.0 override";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.title = "^(Media viewer)$";
|
|
||||||
float = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.title = "^(Volume Control)$";
|
|
||||||
float = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.title = "^(Picture-in-Picture)$";
|
|
||||||
float = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.title = "^(floating-pomodoro)$";
|
|
||||||
float = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.title = "^(floating-pomodoro)$";
|
|
||||||
size = "250 50";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.title = "^(floating-pomodoro)$";
|
|
||||||
move = "12 (monitor_h-150)";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.title = "^(floating-pomodoro)$";
|
|
||||||
pin = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.initial_title = ".*streamlabs.com.*";
|
|
||||||
float = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.initial_title = ".*streamlabs.com.*";
|
|
||||||
pin = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.initial_title = ".*streamlabs.com.*";
|
|
||||||
size = "800 400";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.initial_title = ".*alert-box.*";
|
|
||||||
move = "100%-820 102";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.initial_title = ".*chat-box.*";
|
|
||||||
move = "100%-820 512";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.initial_title = ".*streamlabs.com.*";
|
|
||||||
opacity = "0.5 override";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.initial_title = ".*streamlabs.com.*";
|
|
||||||
idle_inhibit = "focus";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.initial_title = ".*streamlabs.com.*";
|
|
||||||
no_anim = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.initial_title = ".*streamlabs.com.*";
|
|
||||||
decorate = false;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.initial_title = ".*streamlabs.com.*";
|
|
||||||
no_shadow = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.initial_title = ".*streamlabs.com.*";
|
|
||||||
no_blur = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match = {
|
|
||||||
class = "^vibe-typer$";
|
|
||||||
title = "^Recording Indicator$";
|
|
||||||
};
|
|
||||||
no_blur = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match = {
|
|
||||||
class = "^vibe-typer$";
|
|
||||||
title = "^Recording Indicator$";
|
|
||||||
};
|
|
||||||
no_shadow = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match = {
|
|
||||||
class = "^vibe-typer$";
|
|
||||||
title = "^Recording Indicator$";
|
|
||||||
};
|
|
||||||
no_anim = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match = {
|
|
||||||
class = "^vibe-typer$";
|
|
||||||
title = "^Recording Indicator$";
|
|
||||||
};
|
|
||||||
border_size = 0;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match = {
|
|
||||||
class = "^vibe-typer$";
|
|
||||||
title = "^Recording Indicator$";
|
|
||||||
};
|
|
||||||
no_focus = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
match.xwayland = true;
|
|
||||||
border_color = "rgb(ffffff)";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
"bind" = [
|
|
||||||
# mainMod + return intentionally remains disabled from the previous config.
|
|
||||||
(mkBinding (modKey "t") (execExpr ''terminal .. " -e nu -c 'nitch; exec nu'"''))
|
|
||||||
(mkBinding (modKey "SHIFT + t") (execCmd "launch-timer"))
|
|
||||||
(mkBinding (modKey "n") (execExpr ''terminal .. " -e nvim"''))
|
|
||||||
(mkBinding (modKey "z") (execCmd "uwsm app -- zeditor"))
|
|
||||||
(mkBinding (modKey "o") ''hl.dsp.window.set_prop({ prop = "opaque", value = "toggle" })'')
|
|
||||||
(mkBinding (modKey "r") (
|
|
||||||
execCmd ''hyprctl dispatch focuswindow "initialtitle:.*alert-box.*" && hyprctl dispatch moveactive exact 4300 102 && hyprctl dispatch focuswindow "initialtitle:.*chat-box.*" && hyprctl dispatch moveactive exact 4300 512''
|
|
||||||
))
|
|
||||||
(mkBinding (modKey "b") (execCmd "uwsm app -- thunar"))
|
|
||||||
(mkBinding (modKey "SHIFT + B") (execCmd "uwsm app -- vivaldi"))
|
|
||||||
(mkBinding (modKey "Escape") (execCmd "uwsm app -- dms ipc call powermenu toggle"))
|
|
||||||
(mkBinding (modKey "q") "hl.dsp.window.close()")
|
|
||||||
(mkBinding (modKey "M") "hl.dsp.exit()")
|
|
||||||
(mkBinding (modKey "F") "hl.dsp.window.fullscreen({})")
|
|
||||||
(mkBinding (modKey "SHIFT + V") ''hl.dsp.window.float({ action = "toggle" })'')
|
|
||||||
(mkBinding (modKey "D") (execCmd "uwsm app -- dms ipc call spotlight toggle"))
|
|
||||||
(mkBinding (modKey "V") (execCmd "uwsm app -- dms ipc call clipboard toggle"))
|
|
||||||
(mkBinding (modKey "C") (
|
|
||||||
execCmd "bash -c 'FILE=/tmp/screenshot_$(date +%s).png; grim -g \"$(slurp)\" \"$FILE\" && ksnip \"$FILE\"'"
|
|
||||||
))
|
|
||||||
(mkBinding (modKey "SHIFT + S") (execCmd "uwsm app -- rofi -show emoji"))
|
|
||||||
(mkBinding (modKey "P") (execCmd "uwsm app -- rofi-pass"))
|
|
||||||
(mkBinding (modKey "SHIFT + P") "hl.dsp.window.pseudo({})")
|
|
||||||
(mkBinding (modKey "R") (execCmd "stt-ptt start"))
|
|
||||||
(mkBinding (modKey "S") (execCmd "stt-ptt start"))
|
|
||||||
(mkBinding (modKey "h") ''hl.dsp.focus({ direction = "l" })'')
|
|
||||||
(mkBinding (modKey "l") ''hl.dsp.focus({ direction = "r" })'')
|
|
||||||
(mkBinding (modKey "k") ''hl.dsp.focus({ direction = "u" })'')
|
|
||||||
(mkBinding (modKey "j") ''hl.dsp.focus({ direction = "d" })'')
|
|
||||||
(mkBinding (modKey "1") (focusWorkspace "1"))
|
|
||||||
(mkBinding (modKey "2") (focusWorkspace "2"))
|
|
||||||
(mkBinding (modKey "3") (focusWorkspace "3"))
|
|
||||||
(mkBinding (modKey "4") (focusWorkspace "4"))
|
|
||||||
(mkBinding (modKey "5") (focusWorkspace "5"))
|
|
||||||
(mkBinding (modKey "6") (focusWorkspace "6"))
|
|
||||||
(mkBinding (modKey "7") (focusWorkspace "7"))
|
|
||||||
(mkBinding (modKey "8") (focusWorkspace "8"))
|
|
||||||
(mkBinding (modKey "9") (focusWorkspace "9"))
|
|
||||||
(mkBinding (modKey "0") (focusWorkspace "10"))
|
|
||||||
(mkBinding (modKey "SHIFT + 1") (moveToWorkspace "1"))
|
|
||||||
(mkBinding (modKey "SHIFT + 2") (moveToWorkspace "2"))
|
|
||||||
(mkBinding (modKey "SHIFT + 3") (moveToWorkspace "3"))
|
|
||||||
(mkBinding (modKey "SHIFT + 4") (moveToWorkspace "4"))
|
|
||||||
(mkBinding (modKey "SHIFT + 5") (moveToWorkspace "5"))
|
|
||||||
(mkBinding (modKey "SHIFT + 6") (moveToWorkspace "6"))
|
|
||||||
(mkBinding (modKey "SHIFT + 7") (moveToWorkspace "7"))
|
|
||||||
(mkBinding (modKey "SHIFT + 8") (moveToWorkspace "8"))
|
|
||||||
(mkBinding (modKey "SHIFT + 9") (moveToWorkspace "9"))
|
|
||||||
(mkBinding (modKey "SHIFT + 0") (moveToWorkspace "10"))
|
|
||||||
(mkBinding (modKey "mouse_down") (focusWorkspace "e+1"))
|
|
||||||
(mkBinding (modKey "mouse_up") (focusWorkspace "e-1"))
|
|
||||||
(mkBindingWithOptions (modKey "mouse:272") "hl.dsp.window.drag()" {mouse = true;})
|
|
||||||
(mkBindingWithOptions (modKey "mouse:273") "hl.dsp.window.resize()" {mouse = true;})
|
|
||||||
(mkBinding (modKey "SPACE") (execCmd "hyprctl switchxkblayout current next"))
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# services.hypridle = {
|
services.hyprpaper.enable = true;
|
||||||
# enable = true;
|
|
||||||
# settings = {
|
|
||||||
# general = {
|
|
||||||
# before_sleep_cmd = "hyprlock";
|
|
||||||
# after_sleep_cmd = "hyprctl dispatch dpms on";
|
|
||||||
# inhibit_sleep = 3;
|
|
||||||
# };
|
|
||||||
# listener = [
|
|
||||||
# {
|
|
||||||
# timeout = 300;
|
|
||||||
# on-timeout = "hyprlock";
|
|
||||||
# }
|
|
||||||
# {
|
|
||||||
# timeout = 420;
|
|
||||||
# on-timeout = "hyprctl dispatch dpms off";
|
|
||||||
# on-resume = "hyprctl dispatch dpms on";
|
|
||||||
# }
|
|
||||||
# ];
|
|
||||||
# };
|
|
||||||
# };
|
|
||||||
|
|
||||||
# services.hyprpaper.enable = true;
|
programs.hyprlock = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
"$font" = "JetBrainsMono Nerd Font";
|
||||||
|
"$base" = "rgb(${p.base00})";
|
||||||
|
"$text" = "rgb(${p.base05})";
|
||||||
|
"$textAlpha" = "${p.base05}";
|
||||||
|
"$accentAlpha" = "${p.base0D}";
|
||||||
|
"$red" = "rgb(${p.base08})";
|
||||||
|
"$yellow" = "rgb(${p.base0A})";
|
||||||
|
|
||||||
# programs.hyprlock = {
|
general = {
|
||||||
# enable = true;
|
hide_cursor = true;
|
||||||
# settings = {
|
};
|
||||||
# "$font" = "JetBrainsMono Nerd Font";
|
|
||||||
# "$base" = "rgb(${config.colorScheme.palette.base00})";
|
|
||||||
# "$text" = "rgb(${config.colorScheme.palette.base05})";
|
|
||||||
# "$textAlpha" = "${config.colorScheme.palette.base05}";
|
|
||||||
# "$accentAlpha" = "${config.colorScheme.palette.base0D}";
|
|
||||||
# "$red" = "rgb(${config.colorScheme.palette.base08})";
|
|
||||||
# "$yellow" = "rgb(${config.colorScheme.palette.base0A})";
|
|
||||||
|
|
||||||
# general = {
|
background = {
|
||||||
# hide_cursor = true;
|
monitor = "";
|
||||||
# };
|
path = "${config.home.homeDirectory}/.config/hypr/wallpapers/wallhaven-lmmo8r.jpg";
|
||||||
|
blur_passes = 0;
|
||||||
|
color = "rgb(${p.base00})";
|
||||||
|
};
|
||||||
|
|
||||||
# background = {
|
label = [
|
||||||
# monitor = "";
|
{
|
||||||
# path = "${config.home.homeDirectory}/.config/hypr/wallpapers/wallhaven-lmmo8r.jpg";
|
monitor = "";
|
||||||
# blur_passes = 0;
|
text = "$TIME";
|
||||||
# color = "rgb(${config.colorScheme.palette.base00})";
|
color = "$text";
|
||||||
# };
|
font_size = 90;
|
||||||
|
font_family = "$font";
|
||||||
|
position = "30, 0";
|
||||||
|
halign = "left";
|
||||||
|
valign = "top";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
monitor = "";
|
||||||
|
text = ''cmd[update:43200000] echo "$(date +"%A, %d %B %Y")"'';
|
||||||
|
color = "$text";
|
||||||
|
font_size = 25;
|
||||||
|
font_family = "$font";
|
||||||
|
position = "30, -150";
|
||||||
|
halign = "left";
|
||||||
|
valign = "top";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
# label = [
|
input-field = [
|
||||||
# {
|
{
|
||||||
# monitor = "";
|
monitor = "";
|
||||||
# text = "$TIME";
|
size = "300, 60";
|
||||||
# color = "$text";
|
outline_thickness = 4;
|
||||||
# font_size = 90;
|
dots_size = 0.2;
|
||||||
# font_family = "$font";
|
dots_spacing = 0.2;
|
||||||
# position = "30, 0";
|
dots_center = true;
|
||||||
# halign = "left";
|
outer_color = "rgb(${p.base0D})";
|
||||||
# valign = "top";
|
inner_color = "rgb(${p.base00})";
|
||||||
# }
|
font_color = "rgb(${p.base05})";
|
||||||
# {
|
fade_on_empty = false;
|
||||||
# monitor = "";
|
placeholder_text = ''<span foreground="##${p.base05}"> Logged in as <span foreground="##${p.base0D}">$USER</span></span>'';
|
||||||
# text = ''cmd[update:43200000] echo "$(date +"%A, %d %B %Y")"'';
|
hide_input = false;
|
||||||
# color = "$text";
|
check_color = "rgb(${p.base0D})";
|
||||||
# font_size = 25;
|
fail_color = "rgb(${p.base08})";
|
||||||
# font_family = "$font";
|
fail_text = ''<i>$FAIL <b>($ATTEMPTS)</b></i>'';
|
||||||
# position = "30, -150";
|
capslock_color = "rgb(${p.base0A})";
|
||||||
# halign = "left";
|
position = "0, -35";
|
||||||
# valign = "top";
|
halign = "center";
|
||||||
# }
|
valign = "center";
|
||||||
# ];
|
}
|
||||||
|
];
|
||||||
# input-field = [
|
};
|
||||||
# {
|
};
|
||||||
# monitor = "";
|
|
||||||
# size = "300, 60";
|
|
||||||
# outline_thickness = 4;
|
|
||||||
# dots_size = 0.2;
|
|
||||||
# dots_spacing = 0.2;
|
|
||||||
# dots_center = true;
|
|
||||||
# outer_color = "rgb(${config.colorScheme.palette.base0D})";
|
|
||||||
# inner_color = "rgb(${config.colorScheme.palette.base00})";
|
|
||||||
# font_color = "rgb(${config.colorScheme.palette.base05})";
|
|
||||||
# fade_on_empty = false;
|
|
||||||
# placeholder_text = ''<span foreground="##${config.colorScheme.palette.base05}"> Logged in as <span foreground="##${config.colorScheme.palette.base0D}">$USER</span></span>'';
|
|
||||||
# hide_input = false;
|
|
||||||
# check_color = "rgb(${config.colorScheme.palette.base0D})";
|
|
||||||
# fail_color = "rgb(${config.colorScheme.palette.base08})";
|
|
||||||
# fail_text = ''<i>$FAIL <b>($ATTEMPTS)</b></i>'';
|
|
||||||
# capslock_color = "rgb(${config.colorScheme.palette.base0A})";
|
|
||||||
# position = "0, -35";
|
|
||||||
# halign = "center";
|
|
||||||
# valign = "center";
|
|
||||||
# }
|
|
||||||
# ];
|
|
||||||
# };
|
|
||||||
# };
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,39 +0,0 @@
|
|||||||
{config, ...}: {
|
|
||||||
programs.agent-lib = {
|
|
||||||
enable = true;
|
|
||||||
lockFile = config."m3ta-home".paths.srcRoot + "/agent-sources.lock.json";
|
|
||||||
|
|
||||||
targets.pi.enable = true;
|
|
||||||
targets.opencode.enable = true;
|
|
||||||
|
|
||||||
profiles.default = {
|
|
||||||
sources = {
|
|
||||||
m3ta-agents = {
|
|
||||||
agents = {
|
|
||||||
all = true;
|
|
||||||
};
|
|
||||||
skills = {
|
|
||||||
all = true;
|
|
||||||
exclude = ["brainstorming" "pdf" "systematic-debugging" "xlsx"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
anthropic.skills = {
|
|
||||||
all = true;
|
|
||||||
exclude = ["skill-creator"];
|
|
||||||
};
|
|
||||||
basecamp.skills.all = true;
|
|
||||||
kestra.skills.all = true;
|
|
||||||
mattpocock.skills = {
|
|
||||||
all = true;
|
|
||||||
};
|
|
||||||
okf.skills = {
|
|
||||||
all = true;
|
|
||||||
};
|
|
||||||
superpowers.skills = {
|
|
||||||
all = true;
|
|
||||||
};
|
|
||||||
vercel.skills.all = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,8 +1,10 @@
|
|||||||
# AI agent system — OpenCode, Pi, and MCP server configuration.
|
# AI agent system — OpenCode, Pi, and MCP server configuration.
|
||||||
# Relies on coding.agents options provided by home/common/default.nix
|
# Relies on coding.agents options provided by home/common/default.nix
|
||||||
# (m3taHomeInputs.m3ta-nixpkgs.homeManagerModules.default).
|
# (inputs.m3ta-nixpkgs.homeManagerModules.default).
|
||||||
{
|
{
|
||||||
m3taHomeInputs,
|
config,
|
||||||
|
inputs,
|
||||||
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
videoDrivers ? [],
|
videoDrivers ? [],
|
||||||
...
|
...
|
||||||
@@ -17,73 +19,67 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
# OpenCode, Pi, and Babysitter agent configurations
|
# OpenCode and Pi agent configurations
|
||||||
./agents-lib.nix
|
|
||||||
./babysitter.nix
|
|
||||||
./opencode.nix
|
./opencode.nix
|
||||||
./pi.nix
|
./pi.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
coding.agents.babysitter.enable = true;
|
coding.agents.skills = {
|
||||||
|
agentsInput = inputs.agents;
|
||||||
|
externalSkills = [
|
||||||
|
{
|
||||||
|
src = inputs.skills-anthropic;
|
||||||
|
selectSkills = ["pdf" "docx" "frontend-design"];
|
||||||
|
}
|
||||||
|
{src = inputs.skills-superpowers;}
|
||||||
|
{src = inputs.skills-vercel;}
|
||||||
|
{src = inputs.skills-basecamp;}
|
||||||
|
{src = inputs.skills-kestra;}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
programs.mcp = {
|
programs.mcp = {
|
||||||
enable = true;
|
enable = true;
|
||||||
servers = {
|
servers = {
|
||||||
ContextMode = {
|
|
||||||
command = "bash";
|
|
||||||
args = ["-c" "exec bunx context-mode@latest"];
|
|
||||||
};
|
|
||||||
DeepWiki = {
|
DeepWiki = {
|
||||||
url = "https://mcp.deepwiki.com/mcp";
|
url = "https://mcp.deepwiki.com/mcp";
|
||||||
};
|
};
|
||||||
Exa = {
|
|
||||||
command = "bash";
|
|
||||||
args = ["-c" "EXA_API_KEY=$(cat /run/agenix/exa-key) exec bunx exa-mcp-server@latest tools=web_search_exa"];
|
|
||||||
};
|
|
||||||
SallyAI = {
|
|
||||||
url = "https://app.sally.io/api/v1/McpExternal";
|
|
||||||
};
|
|
||||||
Outline = {
|
|
||||||
url = "https://wiki.az-gruppe.com/mcp";
|
|
||||||
};
|
|
||||||
Playwright = {
|
|
||||||
command = "bash";
|
|
||||||
args = ["-c" "exec bunx @playwright/mcp@latest"];
|
|
||||||
};
|
|
||||||
Ref = {
|
Ref = {
|
||||||
command = "bash";
|
command = "bash";
|
||||||
args = ["-c" "REF_API_KEY=$(cat /run/agenix/ref-key) exec bunx ref-tools-mcp@latest"];
|
args = ["-c" "REF_API_KEY=$(cat /run/agenix/ref-key) exec bunx ref-tools-mcp@latest"];
|
||||||
};
|
};
|
||||||
Teams = {
|
Exa = {
|
||||||
command = "bunx";
|
command = "bash";
|
||||||
args = ["-y" "@floriscornel/teams-mcp@latest"];
|
args = ["-c" "EXA_API_KEY=$(cat /run/agenix/exa-key) exec bunx exa-mcp-server@latest tools=web_search_exa"];
|
||||||
|
};
|
||||||
|
Outline = {
|
||||||
|
url = "https://wiki.az-gruppe.com/mcp";
|
||||||
|
};
|
||||||
|
ContextMode = {
|
||||||
|
command = "bash";
|
||||||
|
args = ["-c" "exec bunx context-mode@latest"];
|
||||||
|
};
|
||||||
|
Honcho = {
|
||||||
|
command = "bash";
|
||||||
|
args = [
|
||||||
|
"-c"
|
||||||
|
''exec bunx mcp-remote@latest https://mcp.honcho.dev --header "Authorization:Bearer $(cat /run/agenix/honcho-key)" --header "X-Honcho-User-Name:m3tam3re"''
|
||||||
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# NOTE: llm-agent packages are consumed via the `llm-agents` namespace
|
|
||||||
# (pkgs.llm-agents.*), provided by numtide/llm-agents.nix's
|
|
||||||
# `overlays.shared-nixpkgs`. The consumer's nixos-config MUST apply that
|
|
||||||
# overlay — namespaced refs fail loudly if it is missing, instead of
|
|
||||||
# silently falling back to (outdated) nixpkgs attributes.
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
agenix-cli
|
agenix-cli
|
||||||
llm-agents.agent-browser
|
agent-browser
|
||||||
m3taHomeInputs.agent-lib.packages.${pkgs.stdenv.hostPlatform.system}.agent-lib-cli
|
beads
|
||||||
llm-agents.beads
|
|
||||||
buzz
|
|
||||||
crunch
|
|
||||||
docker-sbx
|
|
||||||
llm-agents.herdr
|
|
||||||
pi-coding-agent
|
pi-coding-agent
|
||||||
(llm-agents.qmd.override {
|
(qmd.override {
|
||||||
vulkanSupport = videoDrivers == ["amdgpu"];
|
vulkanSupport = videoDrivers == ["amdgpu"];
|
||||||
cudaSupport = videoDrivers == ["nvidia"];
|
cudaSupport = videoDrivers == ["nvidia"];
|
||||||
})
|
})
|
||||||
opencode-desktop
|
# opencode-desktop
|
||||||
openshell
|
openshell
|
||||||
llm-agents.openspec
|
openspec
|
||||||
openwork
|
|
||||||
talk
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,142 +0,0 @@
|
|||||||
# Babysitter user profile for Pi/agent workflows.
|
|
||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
cfg = config.coding.agents.babysitter;
|
|
||||||
defaultTimestamp = "2026-05-29T00:00:00.000Z";
|
|
||||||
|
|
||||||
defaultUserProfile = {
|
|
||||||
name = config.home.username;
|
|
||||||
specialties = [
|
|
||||||
{
|
|
||||||
domain = "declarative-system-configuration";
|
|
||||||
subdomains = ["nix" "home-manager" "agents"];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
expertiseLevels = {};
|
|
||||||
goals = [
|
|
||||||
{
|
|
||||||
id = "goal-agents-declarative-profile";
|
|
||||||
description = "Keep Babysitter user preferences declarative and reproducible across systems.";
|
|
||||||
category = "agents";
|
|
||||||
priority = "medium";
|
|
||||||
status = "active";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
preferences = {
|
|
||||||
verbosity = "concise";
|
|
||||||
autonomyLevel = "semi-autonomous";
|
|
||||||
riskTolerance = "conservative";
|
|
||||||
};
|
|
||||||
toolPreferences = {
|
|
||||||
packageManagers = ["nix"];
|
|
||||||
languages = ["nix"];
|
|
||||||
operatingSystem = "nixos";
|
|
||||||
};
|
|
||||||
breakpointTolerance = {
|
|
||||||
global = "moderate";
|
|
||||||
skipBreakpointsForKnownPatterns = false;
|
|
||||||
alwaysBreakOn = ["destructive-operations" "secrets" "external-publication"];
|
|
||||||
};
|
|
||||||
communicationStyle = {
|
|
||||||
tone = "technical";
|
|
||||||
language = "en";
|
|
||||||
useEmojis = false;
|
|
||||||
explanationDepth = "brief";
|
|
||||||
preferredResponseFormat = "markdown";
|
|
||||||
};
|
|
||||||
experience = {};
|
|
||||||
installedPlugins = ["babysitter-pi"];
|
|
||||||
installedSkills = ["babysit" "call" "plan" "resume" "doctor" "yolo"];
|
|
||||||
installedAgents = [];
|
|
||||||
createdAt = defaultTimestamp;
|
|
||||||
updatedAt = defaultTimestamp;
|
|
||||||
version = 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
effectiveProfile = lib.recursiveUpdate cfg.profile cfg.profileOverrides;
|
|
||||||
profileJsonTarget = "${cfg.profileDirectory}/user-profile.json";
|
|
||||||
profileMarkdownTarget = "${cfg.profileDirectory}/user-profile.md";
|
|
||||||
profilePreferences = effectiveProfile.preferences or {};
|
|
||||||
profileBreakpointTolerance = effectiveProfile.breakpointTolerance or {};
|
|
||||||
|
|
||||||
listMarkdown = values:
|
|
||||||
lib.concatMapStringsSep "\n" (value: "- ${toString value}") values;
|
|
||||||
|
|
||||||
specialtyDomains = map (specialty: specialty.domain or "unspecified") (effectiveProfile.specialties or []);
|
|
||||||
|
|
||||||
profileMarkdown = ''
|
|
||||||
# Babysitter User Profile
|
|
||||||
|
|
||||||
This file is generated by Home Manager from `coding.agents.babysitter`.
|
|
||||||
|
|
||||||
- Name: ${effectiveProfile.name or "unspecified"}
|
|
||||||
- Breakpoint tolerance: ${profileBreakpointTolerance.global or "unspecified"}
|
|
||||||
- Autonomy level: ${profilePreferences.autonomyLevel or "unspecified"}
|
|
||||||
- Risk tolerance: ${profilePreferences.riskTolerance or "unspecified"}
|
|
||||||
|
|
||||||
## Specialties
|
|
||||||
|
|
||||||
${listMarkdown specialtyDomains}
|
|
||||||
|
|
||||||
## Installed Babysitter Pi Skills
|
|
||||||
|
|
||||||
${listMarkdown (effectiveProfile.installedSkills or [])}
|
|
||||||
'';
|
|
||||||
in {
|
|
||||||
options.coding.agents.babysitter = {
|
|
||||||
enable = lib.mkEnableOption "Babysitter user profile for Pi/agent workflows";
|
|
||||||
|
|
||||||
profileDirectory = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
default = ".a5c";
|
|
||||||
description = ''
|
|
||||||
Home-relative directory where Babysitter reads the user profile.
|
|
||||||
Babysitter Pi documents the user profile at ~/.a5c/user-profile.json.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
profile = lib.mkOption {
|
|
||||||
type = lib.types.attrsOf lib.types.anything;
|
|
||||||
default = defaultUserProfile;
|
|
||||||
description = "Complete non-secret Babysitter user profile JSON.";
|
|
||||||
};
|
|
||||||
|
|
||||||
profileOverrides = lib.mkOption {
|
|
||||||
type = lib.types.attrsOf lib.types.anything;
|
|
||||||
default = {};
|
|
||||||
description = ''
|
|
||||||
Recursive overrides merged into the default Babysitter user profile.
|
|
||||||
Keep this non-secret; the result is written into the Nix store.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
|
||||||
assertions = [
|
|
||||||
{
|
|
||||||
assertion = cfg.profileDirectory != "" && !lib.hasPrefix "/" cfg.profileDirectory;
|
|
||||||
message = "coding.agents.babysitter.profileDirectory must be a non-empty home-relative path.";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
assertion = effectiveProfile ? name && builtins.isString effectiveProfile.name;
|
|
||||||
message = "coding.agents.babysitter profile must include a string name.";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
assertion = effectiveProfile ? specialties && builtins.isList effectiveProfile.specialties;
|
|
||||||
message = "coding.agents.babysitter profile must include a specialties list.";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
assertion = effectiveProfile ? breakpointTolerance && effectiveProfile.breakpointTolerance ? global;
|
|
||||||
message = "coding.agents.babysitter profile must include breakpointTolerance.global.";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
home.file = {
|
|
||||||
"${profileJsonTarget}".text = builtins.toJSON effectiveProfile + "\n";
|
|
||||||
"${profileMarkdownTarget}".text = profileMarkdown;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,37 +1,37 @@
|
|||||||
{lib, ...}: {
|
{
|
||||||
|
inputs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
coding.agents.opencode = {
|
||||||
|
enable = true;
|
||||||
|
agentsInput = inputs.agents;
|
||||||
|
};
|
||||||
|
|
||||||
coding.opencode = {
|
coding.opencode = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
ohMyOpencodeSettings = {
|
ohMyOpencodeSettings = {
|
||||||
agents = {
|
agents = {
|
||||||
# Primary worker: GLM-5.3 (1M ctx, beats Opus 4.8 on token efficiency).
|
sisyphus.model = "litellm/claude-opus-4-6";
|
||||||
sisyphus.model = "zai-coding-plan/glm-5.3";
|
oracle.model = "litellm/claude-sonnet-4-6";
|
||||||
# Planning + deep analysis: strongest reasoning tier.
|
librarian.model = "litellm/claude-sonnet-4-6";
|
||||||
prometheus.model = "litellm/claude-opus-4-8";
|
explore.model = "litellm/claude-haiku-4-5";
|
||||||
metis.model = "litellm/claude-opus-4-8";
|
multimodal-looker.model = "litellm/gpt-5.3-codex";
|
||||||
# Verification + docs research: best tool-use quality.
|
prometheus.model = "litellm/claude-opus-4-6";
|
||||||
oracle.model = "litellm/claude-sonnet-5";
|
metis.model = "litellm/claude-opus-4-6";
|
||||||
librarian.model = "litellm/claude-sonnet-5";
|
momus.model = "litellm/claude-opus-4-6";
|
||||||
# High-volume parallel codebase scans: speed-tuned GLM on flat rate.
|
atlas.model = "litellm/claude-sonnet-4-6";
|
||||||
explore.model = "zai-coding-plan/glm-5-turbo";
|
|
||||||
# Vision: GLM-5.3 is text-only -> cheap capable Claude Haiku.
|
|
||||||
multimodal-looker.model = "litellm/claude-haiku-4-5";
|
|
||||||
# Critic + navigator: flagship GLM on flat rate.
|
|
||||||
momus.model = "zai-coding-plan/glm-5.3";
|
|
||||||
atlas.model = "zai-coding-plan/glm-5.3";
|
|
||||||
};
|
};
|
||||||
categories = {
|
categories = {
|
||||||
# Volume categories -> flat-rate GLM-5.3 (1M ctx).
|
visual-engineering.model = "zai-coding-plan/glm-5.1";
|
||||||
visual-engineering.model = "zai-coding-plan/glm-5.3";
|
ultrabrain.model = "litellm/claude-opus-4-6";
|
||||||
artistry.model = "zai-coding-plan/glm-5.3";
|
deep.model = "litellm/claude-sonnet-4-6";
|
||||||
writing.model = "zai-coding-plan/glm-5.3";
|
artistry.model = "zai-coding-plan/glm-5.1";
|
||||||
# Long deep-work sessions -> GLM-5.3 1M ctx beats Sonnet 200k.
|
|
||||||
deep.model = "zai-coding-plan/glm-5.3";
|
|
||||||
# Deliberately pay-per-token for top quality:
|
|
||||||
ultrabrain.model = "litellm/claude-opus-4-8";
|
|
||||||
unspecified-high.model = "litellm/claude-opus-4-8";
|
|
||||||
unspecified-low.model = "litellm/claude-sonnet-5";
|
|
||||||
quick.model = "litellm/claude-haiku-4-5";
|
quick.model = "litellm/claude-haiku-4-5";
|
||||||
|
unspecified-low.model = "litellm/claude-sonnet-4-6";
|
||||||
|
unspecified-high.model = "litellm/claude-opus-4-6";
|
||||||
|
writing.model = "zai-coding-plan/glm-5.1";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -203,13 +203,6 @@
|
|||||||
output = 128000;
|
output = 128000;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
"gpt-5.6-sol" = {
|
|
||||||
name = "GPT-5.6 Sol";
|
|
||||||
limit = {
|
|
||||||
context = 400000;
|
|
||||||
output = 128000;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
"gpt-5.3-codex" = {
|
"gpt-5.3-codex" = {
|
||||||
name = "GPT-5.3 Codex";
|
name = "GPT-5.3 Codex";
|
||||||
limit = {
|
limit = {
|
||||||
@@ -230,11 +223,12 @@
|
|||||||
output = 64000;
|
output = 64000;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
"claude-sonnet-5" = {
|
"claude-sonnet-4-6" = {
|
||||||
name = "Claude Sonnet 5";
|
name = "Claude Sonnet 4.6";
|
||||||
options = {
|
options = {
|
||||||
thinking = {
|
thinking = {
|
||||||
type = "adaptive";
|
type = "enabled";
|
||||||
|
budget_tokens = 16000;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
limit = {
|
limit = {
|
||||||
@@ -242,11 +236,12 @@
|
|||||||
output = 64000;
|
output = 64000;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
"claude-opus-4-8" = {
|
"claude-opus-4-6" = {
|
||||||
name = "Claude Opus 4.8";
|
name = "Claude Opus 4.6";
|
||||||
options = {
|
options = {
|
||||||
thinking = {
|
thinking = {
|
||||||
type = "adaptive";
|
type = "enabled";
|
||||||
|
budget_tokens = 16000;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
limit = {
|
limit = {
|
||||||
|
|||||||
@@ -1,12 +1,41 @@
|
|||||||
{...}: {
|
{inputs, ...}: {
|
||||||
coding.agents.pi = {
|
coding.agents.pi = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
agentsInput = inputs.agents;
|
||||||
|
|
||||||
|
modelOverrides = {
|
||||||
|
chiron = "minimax/MiniMax-M2.7";
|
||||||
|
chiron-forge = "minimax/MiniMax-M2.7";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Coding rules for Pi agent
|
||||||
|
# Rules sourced from AGENTS repo
|
||||||
|
codingRules = {
|
||||||
|
# Language-specific rules
|
||||||
|
languages = [
|
||||||
|
"nix" # Nix language conventions
|
||||||
|
];
|
||||||
|
|
||||||
|
# Standard concerns from AGENTS repo
|
||||||
|
concerns = [
|
||||||
|
"coding-style" # General coding principles
|
||||||
|
"naming" # Naming conventions (camelCase, snake_case, etc.)
|
||||||
|
"documentation" # Documentation standards
|
||||||
|
"testing" # Testing guidelines (Arrange-Act-Assert)
|
||||||
|
"git-workflow" # Conventional commits, branch naming
|
||||||
|
"git-identity" # Git identity configuration for agents
|
||||||
|
"project-structure" # Project layout conventions
|
||||||
|
];
|
||||||
|
|
||||||
|
# No framework-specific rules for NixOS config
|
||||||
|
frameworks = [];
|
||||||
|
};
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
packages = [
|
packages = [
|
||||||
"npm:@dreadedzombie/pi-init"
|
"npm:@dreadedzombie/pi-init"
|
||||||
"git:github.com/a5c-ai/babysitter-pi"
|
|
||||||
"npm:@plannotator/pi-extension"
|
"npm:@plannotator/pi-extension"
|
||||||
|
"npm:@thesethrose/pi-zai-provider"
|
||||||
"npm:pi-agent-browser-native"
|
"npm:pi-agent-browser-native"
|
||||||
"npm:pi-beads-extension"
|
"npm:pi-beads-extension"
|
||||||
"npm:pi-lens"
|
"npm:pi-lens"
|
||||||
@@ -17,10 +46,11 @@
|
|||||||
"npm:pi-subagents"
|
"npm:pi-subagents"
|
||||||
"npm:pi-tool-display"
|
"npm:pi-tool-display"
|
||||||
"npm:pi-web-access"
|
"npm:pi-web-access"
|
||||||
|
"git:github.com/hk-vk/pi-connect"
|
||||||
];
|
];
|
||||||
|
|
||||||
defaultProvider = "openai-codex";
|
defaultProvider = "minimax";
|
||||||
defaultModel = "gpt-5.5";
|
defaultModel = "MiniMax-M2.7";
|
||||||
defaultThinkingLevel = "high";
|
defaultThinkingLevel = "high";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -29,7 +59,7 @@
|
|||||||
# NOTE: Local project .pi/extensions/guardrails.json can override same rule IDs.
|
# NOTE: Local project .pi/extensions/guardrails.json can override same rule IDs.
|
||||||
# For immutable global policies, consider a wrapper or upstream patch.
|
# For immutable global policies, consider a wrapper or upstream patch.
|
||||||
guardrails = {
|
guardrails = {
|
||||||
enable = false;
|
enable = true;
|
||||||
config = {
|
config = {
|
||||||
enabled = true;
|
enabled = true;
|
||||||
applyBuiltinDefaults = true;
|
applyBuiltinDefaults = true;
|
||||||
|
|||||||
@@ -9,6 +9,5 @@
|
|||||||
jq
|
jq
|
||||||
ripgrep
|
ripgrep
|
||||||
tree
|
tree
|
||||||
worktrunk
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,9 @@ in {
|
|||||||
bun
|
bun
|
||||||
];
|
];
|
||||||
|
|
||||||
|
home.file.".npmrc".text = ''
|
||||||
|
prefix=${npmGlobalPrefix}
|
||||||
|
'';
|
||||||
home.sessionVariables.NPM_CONFIG_PREFIX = npmGlobalPrefix;
|
home.sessionVariables.NPM_CONFIG_PREFIX = npmGlobalPrefix;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
# Gaming profile aggregator — Steam platform, Gamescope session, and AMD GPU tools.
|
# Gaming profile aggregator — Steam platform, Gamescope session, and AMD GPU tools.
|
||||||
{...}: {
|
{...}: {
|
||||||
imports = [
|
imports = [
|
||||||
./emulators.nix
|
|
||||||
./steam.nix
|
./steam.nix
|
||||||
./gamescope.nix
|
./gamescope.nix
|
||||||
./gpu.nix
|
./gpu.nix
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib; let
|
|
||||||
cfg = config.profiles.gaming.emulators;
|
|
||||||
in {
|
|
||||||
options.profiles.gaming.emulators.enable = mkEnableOption "Emulators";
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
shadps4
|
|
||||||
shadps4-qtlauncher
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -15,7 +15,7 @@ in {
|
|||||||
amf
|
amf
|
||||||
ffmpeg_6-full
|
ffmpeg_6-full
|
||||||
gst_all_1.gstreamer
|
gst_all_1.gstreamer
|
||||||
gst_all_1.gst-plugins-bad
|
gst_all_1.gst-vaapi
|
||||||
pamixer
|
pamixer
|
||||||
pavucontrol
|
pavucontrol
|
||||||
qpwgraph
|
qpwgraph
|
||||||
|
|||||||
@@ -44,107 +44,107 @@
|
|||||||
programs.ssh = {
|
programs.ssh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableDefaultConfig = false;
|
enableDefaultConfig = false;
|
||||||
settings = {
|
matchBlocks = {
|
||||||
"github.com" = {
|
"github.com" = {
|
||||||
HostName = "github.com";
|
hostname = "github.com";
|
||||||
User = "m3tam3re";
|
user = "m3tam3re";
|
||||||
Port = 22;
|
port = 22;
|
||||||
IdentityFile = "~/.ssh/github";
|
identityFile = "~/.ssh/github";
|
||||||
};
|
};
|
||||||
"code.m3ta.dev" = {
|
"code.m3ta.dev" = {
|
||||||
HostName = "code.m3ta.dev";
|
hostname = "code.m3ta.dev";
|
||||||
User = "m3tam3re";
|
user = "m3tam3re";
|
||||||
IdentityFile = "~/.ssh/gitea";
|
identityFile = "~/.ssh/gitea";
|
||||||
};
|
};
|
||||||
"lkk-nix-1" = {
|
"lkk-nix-1" = {
|
||||||
HostName = "89.58.10.189";
|
hostname = "89.58.10.189";
|
||||||
User = "lkk-admin";
|
user = "lkk-admin";
|
||||||
IdentityFile = "~/.ssh/lkk-admin";
|
identityFile = "~/.ssh/lkk-admin";
|
||||||
};
|
};
|
||||||
"m3-r1" = {
|
"m3-r1" = {
|
||||||
HostName = "202.61.226.110";
|
hostname = "202.61.226.110";
|
||||||
User = "m3tam3re";
|
user = "m3tam3re";
|
||||||
IdentityFile = "~/.ssh/m3tam3re";
|
identityFile = "~/.ssh/m3tam3re";
|
||||||
};
|
};
|
||||||
"m3-deck" = {
|
"m3-deck" = {
|
||||||
HostName = "192.168.178.193";
|
hostname = "192.168.178.193";
|
||||||
User = "m3tam3re";
|
user = "m3tam3re";
|
||||||
IdentityFile = "~/.ssh/m3tam3re";
|
identityFile = "~/.ssh/m3tam3re";
|
||||||
};
|
};
|
||||||
"m3-kratos-vm" = {
|
"m3-kratos-vm" = {
|
||||||
HostName = "192.168.122.43";
|
hostname = "192.168.122.43";
|
||||||
User = "m3tam3re";
|
user = "m3tam3re";
|
||||||
IdentityFile = "~/.ssh/m3tam3re";
|
identityFile = "~/.ssh/m3tam3re";
|
||||||
};
|
};
|
||||||
"m3-helios" = {
|
"m3-helios" = {
|
||||||
HostName = "192.168.178.210";
|
hostname = "192.168.178.210";
|
||||||
User = "m3tam3re";
|
user = "m3tam3re";
|
||||||
IdentityFile = "~/.ssh/m3tam3re";
|
identityFile = "~/.ssh/m3tam3re";
|
||||||
};
|
};
|
||||||
"m3-ares" = {
|
"m3-ares" = {
|
||||||
HostName = "192.168.1.30";
|
hostname = "192.168.1.30";
|
||||||
User = "m3tam3re";
|
user = "m3tam3re";
|
||||||
IdentityFile = "~/.ssh/m3tam3re";
|
identityFile = "~/.ssh/m3tam3re";
|
||||||
};
|
};
|
||||||
"m3-atlas" = {
|
"m3-atlas" = {
|
||||||
HostName = "152.53.85.162";
|
hostname = "152.53.85.162";
|
||||||
User = "m3tam3re";
|
user = "m3tam3re";
|
||||||
IdentityFile = "~/.ssh/m3ta-adm";
|
identityFile = "~/.ssh/m3tam3re";
|
||||||
};
|
};
|
||||||
"m3-hermes" = {
|
"m3-hermes" = {
|
||||||
HostName = "204.168.229.93";
|
hostname = "204.168.229.93";
|
||||||
User = "m3tam3re";
|
user = "m3tam3re";
|
||||||
IdentityFile = "~/.ssh/m3ta-adm";
|
identityFile = "~/.ssh/m3tam3re";
|
||||||
};
|
};
|
||||||
"hermes-agent" = {
|
"hermes" = {
|
||||||
HostName = "204.168.229.93";
|
hostname = "46.224.0.92";
|
||||||
User = "hermes";
|
user = "admin";
|
||||||
IdentityFile = "~/.ssh/hermes";
|
identityFile = "~/.ssh/m3tam3re";
|
||||||
};
|
};
|
||||||
"m3-zelda" = {
|
"m3-zelda" = {
|
||||||
HostName = "95.217.189.186";
|
hostname = "95.217.189.186";
|
||||||
User = "m3tam3re";
|
user = "m3tam3re";
|
||||||
IdentityFile = "~/.ssh/m3tam3re";
|
identityFile = "~/.ssh/m3tam3re";
|
||||||
};
|
};
|
||||||
"m3-skynet" = {
|
"m3-skynet" = {
|
||||||
HostName = "m3-skynet";
|
hostname = "m3-skynet";
|
||||||
User = "admin";
|
user = "admin";
|
||||||
IdentityFile = "~/.ssh/m3tam3re";
|
identityFile = "~/.ssh/m3tam3re";
|
||||||
};
|
};
|
||||||
"m3-prox-1" = {
|
"m3-prox-1" = {
|
||||||
HostName = "192.168.1.110";
|
hostname = "192.168.1.110";
|
||||||
User = "root";
|
user = "root";
|
||||||
IdentityFile = "~/.ssh/m3tam3re";
|
identityFile = "~/.ssh/m3tam3re";
|
||||||
};
|
};
|
||||||
"shp-old" = {
|
"shp-old" = {
|
||||||
HostName = "95.217.3.250";
|
hostname = "95.217.3.250";
|
||||||
Port = 2222;
|
port = 2222;
|
||||||
User = "m3tam3re";
|
user = "m3tam3re";
|
||||||
IdentityFile = "~/.ssh/self-host-playbook";
|
identityFile = "~/.ssh/self-host-playbook";
|
||||||
};
|
};
|
||||||
"shp-1" = {
|
"shp-1" = {
|
||||||
HostName = "95.217.189.186";
|
hostname = "95.217.189.186";
|
||||||
Port = 2222;
|
port = 2222;
|
||||||
User = "m3tam3re";
|
user = "m3tam3re";
|
||||||
IdentityFile = "~/.ssh/self-host-playbook";
|
identityFile = "~/.ssh/self-host-playbook";
|
||||||
};
|
};
|
||||||
"AZ-CLD-1" = {
|
"AZ-CLD-1" = {
|
||||||
HostName = "152.53.186.119";
|
hostname = "152.53.186.119";
|
||||||
User = "sascha.koenig";
|
user = "sascha.koenig";
|
||||||
Port = 2022;
|
port = 2022;
|
||||||
IdentityFile = "~/.ssh/sascha.koenig";
|
identityFile = "~/.ssh/sascha.koenig";
|
||||||
};
|
};
|
||||||
"AZ-PRM-1" = {
|
"AZ-PRM-1" = {
|
||||||
HostName = "192.168.152.76";
|
hostname = "192.168.152.76";
|
||||||
User = "sascha.koenig";
|
user = "sascha.koenig";
|
||||||
Port = 2022;
|
port = 2022;
|
||||||
IdentityFile = "~/.ssh/sascha.koenig";
|
identityFile = "~/.ssh/sascha.koenig";
|
||||||
};
|
};
|
||||||
"git.az-gruppe.com" = {
|
"git.az-gruppe.com" = {
|
||||||
HostName = "git.az-gruppe.com";
|
hostname = "git.az-gruppe.com";
|
||||||
Port = 2022;
|
port = 2022;
|
||||||
User = "sascha.koenig";
|
user = "sascha.koenig";
|
||||||
IdentityFile = "~/.ssh/sascha.koenig";
|
identityFile = "~/.ssh/sascha.koenig";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -44,40 +44,29 @@
|
|||||||
programs.ssh = {
|
programs.ssh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableDefaultConfig = false;
|
enableDefaultConfig = false;
|
||||||
settings = {
|
matchBlocks = {
|
||||||
"AZ-CLD-1" = {
|
"AZ-CLD-1" = {
|
||||||
HostName = "152.53.186.119";
|
hostname = "152.53.186.119";
|
||||||
User = "sascha.koenig";
|
user = "sascha.koenig";
|
||||||
Port = 2022;
|
port = 2022;
|
||||||
IdentityFile = "~/.ssh/sascha.koenig";
|
identityFile = "~/.ssh/sascha.koenig";
|
||||||
};
|
};
|
||||||
"AZ-PRM-1" = {
|
"AZ-PRM-1" = {
|
||||||
HostName = "192.168.152.76";
|
hostname = "192.168.152.76";
|
||||||
User = "sascha.koenig";
|
user = "sascha.koenig";
|
||||||
Port = 2022;
|
port = 2022;
|
||||||
IdentityFile = "~/.ssh/sascha.koenig";
|
identityFile = "~/.ssh/sascha.koenig";
|
||||||
};
|
|
||||||
"AZ-TC-01" = {
|
|
||||||
HostName = "192.168.153.172";
|
|
||||||
User = "sascha.koenig";
|
|
||||||
Port = 22;
|
|
||||||
IdentityFile = "~/.ssh/sascha.koenig";
|
|
||||||
};
|
};
|
||||||
"git.az-gruppe.com" = {
|
"git.az-gruppe.com" = {
|
||||||
HostName = "git.az-gruppe.com";
|
hostname = "git.az-gruppe.com";
|
||||||
Port = 2022;
|
port = 2022;
|
||||||
User = "sascha.koenig";
|
user = "sascha.koenig";
|
||||||
IdentityFile = "~/.ssh/sascha.koenig";
|
identityFile = "~/.ssh/sascha.koenig";
|
||||||
};
|
};
|
||||||
"code.m3ta.dev" = {
|
"code.m3ta.dev" = {
|
||||||
HostName = "code.m3ta.dev";
|
hostname = "code.m3ta.dev";
|
||||||
User = "m3tam3re";
|
user = "m3tam3re";
|
||||||
IdentityFile = "~/.ssh/sascha.koenig";
|
identityFile = "~/.ssh/sascha.koenig";
|
||||||
};
|
|
||||||
"hermes-agent" = {
|
|
||||||
HostName = "204.168.229.93";
|
|
||||||
User = "hermes";
|
|
||||||
IdentityFile = "~/.ssh/hermes";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -11,9 +11,7 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}: {
|
||||||
npmGlobalPrefix = "${config.home.homeDirectory}/.npm-global";
|
|
||||||
in {
|
|
||||||
# ── Clipboard ──
|
# ── Clipboard ──
|
||||||
services.cliphist = {
|
services.cliphist = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -27,10 +25,4 @@ in {
|
|||||||
# These are overridden by the identity module, but provide safe defaults.
|
# These are overridden by the identity module, but provide safe defaults.
|
||||||
home.username = lib.mkDefault "m3tam3re";
|
home.username = lib.mkDefault "m3tam3re";
|
||||||
home.homeDirectory = lib.mkDefault "/home/${config.home.username}";
|
home.homeDirectory = lib.mkDefault "/home/${config.home.username}";
|
||||||
|
|
||||||
home.file.".npmrc".text = ''
|
|
||||||
prefix=${npmGlobalPrefix}
|
|
||||||
@m3ta:registry=https://code.m3ta.dev/api/packages/m3tam3re/npm/
|
|
||||||
//code.m3ta.dev/api/packages/m3tam3re/npm/:_authToken=''${GITEA_TOKEN}
|
|
||||||
'';
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user