diff --git a/.envrc b/.envrc old mode 100644 new mode 100755 index 17083c93..674b16a1 --- a/.envrc +++ b/.envrc @@ -1,7 +1,7 @@ #!/usr/bin/env bash -if ! has nix_direnv_version || ! nix_direnv_version 3.0.4; then - source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/3.0.4/direnvrc" "sha256-DzlYZ33mWF/Gs8DDeyjr8mnVmQGx7ASYqA5WlxwvBG4=" +if ! has nix_direnv_version || ! nix_direnv_version 3.1.1; then + source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/3.1.1/direnvrc" "sha256-p+fzQdrms/hDa7g+soShAybJNo4bN4SIAeSfqNKgD5I=" fi watch_file flake.nix diff --git a/.gitignore b/.gitignore index c75ce8cf..c4dd8307 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,8 @@ +# LLM crap +CLAUDE.md +AGENTS.md +.claude +.agensts # --------- # Nix/NixOS # --------- diff --git a/LICENSE b/LICENSE index 139c424e..4153cd37 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,287 @@ -MIT License - -Copyright (c) 2023 Tomáš Sandrini - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. + EUROPEAN UNION PUBLIC LICENCE v. 1.2 + EUPL © the European Union 2007, 2016 + +This European Union Public Licence (the ‘EUPL’) applies to the Work (as defined +below) which is provided under the terms of this Licence. Any use of the Work, +other than as authorised under this Licence is prohibited (to the extent such +use is covered by a right of the copyright holder of the Work). + +The Work is provided under the terms of this Licence when the Licensor (as +defined below) has placed the following notice immediately following the +copyright notice for the Work: + + Licensed under the EUPL + +or has expressed by any other means his willingness to license under the EUPL. + +1. Definitions + +In this Licence, the following terms have the following meaning: + +- ‘The Licence’: this Licence. + +- ‘The Original Work’: the work or software distributed or communicated by the + Licensor under this Licence, available as Source Code and also as Executable + Code as the case may be. + +- ‘Derivative Works’: the works or software that could be created by the + Licensee, based upon the Original Work or modifications thereof. This Licence + does not define the extent of modification or dependence on the Original Work + required in order to classify a work as a Derivative Work; this extent is + determined by copyright law applicable in the country mentioned in Article 15. + +- ‘The Work’: the Original Work or its Derivative Works. + +- ‘The Source Code’: the human-readable form of the Work which is the most + convenient for people to study and modify. + +- ‘The Executable Code’: any code which has generally been compiled and which is + meant to be interpreted by a computer as a program. + +- ‘The Licensor’: the natural or legal person that distributes or communicates + the Work under the Licence. + +- ‘Contributor(s)’: any natural or legal person who modifies the Work under the + Licence, or otherwise contributes to the creation of a Derivative Work. + +- ‘The Licensee’ or ‘You’: any natural or legal person who makes any usage of + the Work under the terms of the Licence. + +- ‘Distribution’ or ‘Communication’: any act of selling, giving, lending, + renting, distributing, communicating, transmitting, or otherwise making + available, online or offline, copies of the Work or providing access to its + essential functionalities at the disposal of any other natural or legal + person. + +2. Scope of the rights granted by the Licence + +The Licensor hereby grants You a worldwide, royalty-free, non-exclusive, +sublicensable licence to do the following, for the duration of copyright vested +in the Original Work: + +- use the Work in any circumstance and for all usage, +- reproduce the Work, +- modify the Work, and make Derivative Works based upon the Work, +- communicate to the public, including the right to make available or display + the Work or copies thereof to the public and perform publicly, as the case may + be, the Work, +- distribute the Work or copies thereof, +- lend and rent the Work or copies thereof, +- sublicense rights in the Work or copies thereof. + +Those rights can be exercised on any media, supports and formats, whether now +known or later invented, as far as the applicable law permits so. + +In the countries where moral rights apply, the Licensor waives his right to +exercise his moral right to the extent allowed by law in order to make effective +the licence of the economic rights here above listed. + +The Licensor grants to the Licensee royalty-free, non-exclusive usage rights to +any patents held by the Licensor, to the extent necessary to make use of the +rights granted on the Work under this Licence. + +3. Communication of the Source Code + +The Licensor may provide the Work either in its Source Code form, or as +Executable Code. If the Work is provided as Executable Code, the Licensor +provides in addition a machine-readable copy of the Source Code of the Work +along with each copy of the Work that the Licensor distributes or indicates, in +a notice following the copyright notice attached to the Work, a repository where +the Source Code is easily and freely accessible for as long as the Licensor +continues to distribute or communicate the Work. + +4. Limitations on copyright + +Nothing in this Licence is intended to deprive the Licensee of the benefits from +any exception or limitation to the exclusive rights of the rights owners in the +Work, of the exhaustion of those rights or of other applicable limitations +thereto. + +5. Obligations of the Licensee + +The grant of the rights mentioned above is subject to some restrictions and +obligations imposed on the Licensee. Those obligations are the following: + +Attribution right: The Licensee shall keep intact all copyright, patent or +trademarks notices and all notices that refer to the Licence and to the +disclaimer of warranties. The Licensee must include a copy of such notices and a +copy of the Licence with every copy of the Work he/she distributes or +communicates. The Licensee must cause any Derivative Work to carry prominent +notices stating that the Work has been modified and the date of modification. + +Copyleft clause: If the Licensee distributes or communicates copies of the +Original Works or Derivative Works, this Distribution or Communication will be +done under the terms of this Licence or of a later version of this Licence +unless the Original Work is expressly distributed only under this version of the +Licence — for example by communicating ‘EUPL v. 1.2 only’. The Licensee +(becoming Licensor) cannot offer or impose any additional terms or conditions on +the Work or Derivative Work that alter or restrict the terms of the Licence. + +Compatibility clause: If the Licensee Distributes or Communicates Derivative +Works or copies thereof based upon both the Work and another work licensed under +a Compatible Licence, this Distribution or Communication can be done under the +terms of this Compatible Licence. For the sake of this clause, ‘Compatible +Licence’ refers to the licences listed in the appendix attached to this Licence. +Should the Licensee's obligations under the Compatible Licence conflict with +his/her obligations under this Licence, the obligations of the Compatible +Licence shall prevail. + +Provision of Source Code: When distributing or communicating copies of the Work, +the Licensee will provide a machine-readable copy of the Source Code or indicate +a repository where this Source will be easily and freely available for as long +as the Licensee continues to distribute or communicate the Work. + +Legal Protection: This Licence does not grant permission to use the trade names, +trademarks, service marks, or names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the copyright notice. + +6. Chain of Authorship + +The original Licensor warrants that the copyright in the Original Work granted +hereunder is owned by him/her or licensed to him/her and that he/she has the +power and authority to grant the Licence. + +Each Contributor warrants that the copyright in the modifications he/she brings +to the Work are owned by him/her or licensed to him/her and that he/she has the +power and authority to grant the Licence. + +Each time You accept the Licence, the original Licensor and subsequent +Contributors grant You a licence to their contributions to the Work, under the +terms of this Licence. + +7. Disclaimer of Warranty + +The Work is a work in progress, which is continuously improved by numerous +Contributors. It is not a finished work and may therefore contain defects or +‘bugs’ inherent to this type of development. + +For the above reason, the Work is provided under the Licence on an ‘as is’ basis +and without warranties of any kind concerning the Work, including without +limitation merchantability, fitness for a particular purpose, absence of defects +or errors, accuracy, non-infringement of intellectual property rights other than +copyright as stated in Article 6 of this Licence. + +This disclaimer of warranty is an essential part of the Licence and a condition +for the grant of any rights to the Work. + +8. Disclaimer of Liability + +Except in the cases of wilful misconduct or damages directly caused to natural +persons, the Licensor will in no event be liable for any direct or indirect, +material or moral, damages of any kind, arising out of the Licence or of the use +of the Work, including without limitation, damages for loss of goodwill, work +stoppage, computer failure or malfunction, loss of data or any commercial +damage, even if the Licensor has been advised of the possibility of such damage. +However, the Licensor will be liable under statutory product liability laws as +far such laws apply to the Work. + +9. Additional agreements + +While distributing the Work, You may choose to conclude an additional agreement, +defining obligations or services consistent with this Licence. However, if +accepting obligations, You may act only on your own behalf and on your sole +responsibility, not on behalf of the original Licensor or any other Contributor, +and only if You agree to indemnify, defend, and hold each Contributor harmless +for any liability incurred by, or claims asserted against such Contributor by +the fact You have accepted any warranty or additional liability. + +10. Acceptance of the Licence + +The provisions of this Licence can be accepted by clicking on an icon ‘I agree’ +placed under the bottom of a window displaying the text of this Licence or by +affirming consent in any other similar way, in accordance with the rules of +applicable law. Clicking on that icon indicates your clear and irrevocable +acceptance of this Licence and all of its terms and conditions. + +Similarly, you irrevocably accept this Licence and all of its terms and +conditions by exercising any rights granted to You by Article 2 of this Licence, +such as the use of the Work, the creation by You of a Derivative Work or the +Distribution or Communication by You of the Work or copies thereof. + +11. Information to the public + +In case of any Distribution or Communication of the Work by means of electronic +communication by You (for example, by offering to download the Work from a +remote location) the distribution channel or media (for example, a website) must +at least provide to the public the information requested by the applicable law +regarding the Licensor, the Licence and the way it may be accessible, concluded, +stored and reproduced by the Licensee. + +12. Termination of the Licence + +The Licence and the rights granted hereunder will terminate automatically upon +any breach by the Licensee of the terms of the Licence. + +Such a termination will not terminate the licences of any person who has +received the Work from the Licensee under the Licence, provided such persons +remain in full compliance with the Licence. + +13. Miscellaneous + +Without prejudice of Article 9 above, the Licence represents the complete +agreement between the Parties as to the Work. + +If any provision of the Licence is invalid or unenforceable under applicable +law, this will not affect the validity or enforceability of the Licence as a +whole. Such provision will be construed or reformed so as necessary to make it +valid and enforceable. + +The European Commission may publish other linguistic versions or new versions of +this Licence or updated versions of the Appendix, so far this is required and +reasonable, without reducing the scope of the rights granted by the Licence. New +versions of the Licence will be published with a unique version number. + +All linguistic versions of this Licence, approved by the European Commission, +have identical value. Parties can take advantage of the linguistic version of +their choice. + +14. Jurisdiction + +Without prejudice to specific agreement between parties, + +- any litigation resulting from the interpretation of this License, arising + between the European Union institutions, bodies, offices or agencies, as a + Licensor, and any Licensee, will be subject to the jurisdiction of the Court + of Justice of the European Union, as laid down in article 272 of the Treaty on + the Functioning of the European Union, + +- any litigation arising between other parties and resulting from the + interpretation of this License, will be subject to the exclusive jurisdiction + of the competent court where the Licensor resides or conducts its primary + business. + +15. Applicable Law + +Without prejudice to specific agreement between parties, + +- this Licence shall be governed by the law of the European Union Member State + where the Licensor has his seat, resides or has his registered office, + +- this licence shall be governed by Belgian law if the Licensor has no seat, + residence or registered office inside a European Union Member State. + +Appendix + +‘Compatible Licences’ according to Article 5 EUPL are: + +- GNU General Public License (GPL) v. 2, v. 3 +- GNU Affero General Public License (AGPL) v. 3 +- Open Software License (OSL) v. 2.1, v. 3.0 +- Eclipse Public License (EPL) v. 1.0 +- CeCILL v. 2.0, v. 2.1 +- Mozilla Public Licence (MPL) v. 2 +- GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3 +- Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) for + works other than software +- European Union Public Licence (EUPL) v. 1.1, v. 1.2 +- Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) or Strong + Reciprocity (LiLiQ-R+). + +The European Commission may update this Appendix to later versions of the above +licences without producing a new version of the EUPL, as long as they provide +the rights granted in Article 2 of this Licence and protect the covered Source +Code from exclusive appropriation. + +All other changes or additions to this Appendix require the production of a new +EUPL version. diff --git a/flake-parts/agenix/secrets/hosts/remotebundle/grafana-secret-key.age b/flake-parts/agenix/secrets/hosts/remotebundle/grafana-secret-key.age new file mode 100644 index 00000000..20f66ce7 Binary files /dev/null and b/flake-parts/agenix/secrets/hosts/remotebundle/grafana-secret-key.age differ diff --git a/flake-parts/agenix/secrets/hosts/remotebundle/wedos-acme-env.age b/flake-parts/agenix/secrets/hosts/remotebundle/wedos-acme-env.age new file mode 100644 index 00000000..699334cf --- /dev/null +++ b/flake-parts/agenix/secrets/hosts/remotebundle/wedos-acme-env.age @@ -0,0 +1,7 @@ +age-encryption.org/v1 +-> ssh-ed25519 VC7Vrg b1j5t/kF02qEMiifN6CI5Bi3Ikza2fWagk1KvfNTQTk +R/sb0t39/kMJ01qHmNvvwJhtSpE7j7j3WntvTuNTWvQ +-> ssh-ed25519 ot5CBw nGvI/x0L7Ipg9eAu6fVCmmg2QhHjuOic04yufSNY3zM +eUwsZAehU8LErtafs5dAv7PP8787QH3v7knPXBgYXcs +--- R074ex8UoC3UpvaYlZbiEetat2F1kzKct78HQhLOTIk +a:\u2l t ]y1230ڛZ Q H`Emѣf,thhF̬&k)c$Rk8j$;ƃ[d4<hG~ 6 \ No newline at end of file diff --git a/flake-parts/agenix/secrets/secrets.nix b/flake-parts/agenix/secrets/secrets.nix index 99747bb1..38d0fd4a 100644 --- a/flake-parts/agenix/secrets/secrets.nix +++ b/flake-parts/agenix/secrets/secrets.nix @@ -110,6 +110,10 @@ in remotebundle ] ++ [ tsandrini ]; + "hosts/remotebundle/grafana-secret-key.age".publicKeys = [ + remotebundle + ] + ++ [ tsandrini ]; "hosts/remotebundle/grafana-bot-mail-password.age".publicKeys = [ remotebundle ] diff --git a/flake-parts/homes/tsandrini@jetbundle/default.nix b/flake-parts/homes/tsandrini@jetbundle/default.nix index e4cd0f1a..24383729 100644 --- a/flake-parts/homes/tsandrini@jetbundle/default.nix +++ b/flake-parts/homes/tsandrini@jetbundle/default.nix @@ -55,7 +55,7 @@ zoom-us # Player for Z-Code, TADS and HUGO stories or games slack # Desktop client for Slack - signal-desktop-bin # Private, simple, and secure messenger + signal-desktop # Private, simple, and secure messenger # todoist # Todoist CLI Client # todoist-electron # The official Todoist electron app @@ -76,7 +76,8 @@ vim # The most popular clone of the VI editor calcurse # A calendar and scheduling application for the command line w3m # A text-mode web browser - neofetch # A fast, highly customizable system info script + # neofetch # A fast, highly customizable system info script # NOTE: DEPRECATED + fastfetch # Actively maintained, feature-rich and performance oriented, neofetch like system information tool # ARCHIVING UTILS -- atool # Archive command line helper diff --git a/flake-parts/hosts/default.nix b/flake-parts/hosts/default.nix index 56298663..20933949 100644 --- a/flake-parts/hosts/default.nix +++ b/flake-parts/hosts/default.nix @@ -98,6 +98,7 @@ in inputs.emacs-overlay.overlays.default inputs.nur.overlays.default inputs.niri.overlays.niri + inputs.llm-agents.overlays.default # neovim-nightly-overlay.overlays.default # (final: _prev: { nur = import inputs.nur { pkgs = final; }; }) ]; @@ -117,6 +118,7 @@ in inputs.emacs-overlay.overlays.default inputs.nur.overlays.default inputs.niri.overlays.niri + inputs.llm-agents.overlays.default # neovim-nightly-overlay.overlays.default # (final: _prev: { nur = import inputs.nur { pkgs = final; }; }) ]; diff --git a/flake-parts/hosts/flatbundle/default.nix b/flake-parts/hosts/flatbundle/default.nix index fdda2b10..c5d98716 100644 --- a/flake-parts/hosts/flatbundle/default.nix +++ b/flake-parts/hosts/flatbundle/default.nix @@ -19,6 +19,10 @@ let inherit system; config.allowUnfree = true; }; + # pkgs-claude-code = import inputs.nixpkgs-claude-code { + # inherit system; + # config.allowUnfree = true; + # }; in { # ----------------- @@ -45,11 +49,14 @@ in environment.systemPackages = [ pkgs.libva-utils # Collection of utilities and examples for VA-API pkgs.docker-compose # Docker CLI plugin to define and run multi-container applications with Docker - pkgs.wireguard-tools # Tools for the WireGuard secure network tunnel - pkgs.claude-code # Agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster - pkgs.codex # Lightweight coding agent that runs in your terminal - pkgs.bitwarden-desktop # Secure and free password manager for all of your devices - pkgs.bitwarden-cli # Secure and free password manager for all of your devices + # pkgs.python3Packages.playwright # Python version of the Playwright testing and automation library + # pkgs.playwright # Framework for Web Testing and Automation + # pkgs.playwright-mcp # Playwright MCP server + # pkgs.playwright-test # Framework for Web Testing and Automation + + # TODO: electron 39 brokey temporarily + # pkgs.bitwarden-desktop # Secure and free password manager for all of your devices + # pkgs.bitwarden-cli # Secure and free password manager for all of your devices ]; # --------------------- @@ -152,7 +159,13 @@ in ]; }; + services.keybase.enable = true; + home-manager.users."tsandrini" = { + imports = [ + inputs.mcp-servers-nix.homeManagerModules.default + ]; + tensorfiles.hm = { profiles.graphical-dms-niri.enable = true; programs.pywal.enable = true; @@ -175,10 +188,40 @@ in }; programs.git.signing.key = "3E83AD690FA4F657"; # pragma: allowlist secret + programs.mcp.enable = true; + + mcp-servers.programs = { + playwright.enable = true; + nixos.enable = true; + time.enable = true; + fetch.enable = true; + github.enable = true; + }; + + programs.claude-code = { + enable = true; + package = pkgs.llm-agents.claude-code; + enableMcpIntegration = true; + }; + home.packages = [ - inputs.self.packages.${system}.cc-switcher pkgs-osu-lazer-bin.osu-lazer-bin pkgs.olympus + pkgs.keybase-gui # Keybase official GUI + pkgs.kbfs # Keybase filesystem + + # --- LLM garbage --- + inputs.self.packages.${system}.cc-switcher + # pkgs.llm-agents.claude-code # Agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster + pkgs.llm-agents.codex # OpenAI Codex CLI - a coding agent that runs locally on your computer + pkgs.llm-agents.auto-claude # Autonomous multi-agent coding framework powered by Claude AI + # pkgs.llm-agents.cc-switch-cli # CLI version of CC Switch - All-in-One Assistant for Claude Code, Codex & Gemini CLI + pkgs.llm-agents.claude-plugins # CLI tool for managing Claude Code plugins + pkgs.llm-agents.claudebox # Sandboxed environment for Claude Code + pkgs.llm-agents.skills-installer # Install agent skills across multiple AI coding clients + pkgs.llm-agents.sandbox-runtime # Lightweight sandboxing tool for enforcing filesystem and network restrictions + pkgs.llm-agents.ccusage # Usage analysis tool for Claude Code + pkgs.llm-agents.agent-browser # Headless browser automation CLI for AI agents ]; }; } diff --git a/flake-parts/hosts/jetbundle/default.nix b/flake-parts/hosts/jetbundle/default.nix index cd7f87fc..377f79f3 100644 --- a/flake-parts/hosts/jetbundle/default.nix +++ b/flake-parts/hosts/jetbundle/default.nix @@ -51,10 +51,10 @@ in pkgs.libva-utils # Collection of utilities and examples for VA-API pkgs.docker-compose # Docker CLI plugin to define and run multi-container applications with Docker pkgs.wireguard-tools # Tools for the WireGuard secure network tunnel - pkgs.claude-code # Agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster - pkgs.codex # Lightweight coding agent that runs in your terminal - pkgs.bitwarden-desktop # Secure and free password manager for all of your devices - pkgs.bitwarden-cli # Secure and free password manager for all of your devices + + # TODO: electron 39 brokey temporarily + # pkgs.bitwarden-desktop # Secure and free password manager for all of your devices + # pkgs.bitwarden-cli # Secure and free password manager for all of your devices ]; # --------------------- @@ -180,6 +180,18 @@ in home.packages = [ pkgs-osu-lazer-bin.osu-lazer-bin + + # --- LLM garbage --- + pkgs.llm-agents.claude-code # Agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster + pkgs.llm-agents.codex # OpenAI Codex CLI - a coding agent that runs locally on your computer + pkgs.llm-agents.auto-claude # Autonomous multi-agent coding framework powered by Claude AI + pkgs.llm-agents.cc-switch-cli # CLI version of CC Switch - All-in-One Assistant for Claude Code, Codex & Gemini CLI + pkgs.llm-agents.claude-plugins # CLI tool for managing Claude Code plugins + pkgs.llm-agents.claudebox # Sandboxed environment for Claude Code + pkgs.llm-agents.skills-installer # Install agent skills across multiple AI coding clients + pkgs.llm-agents.sandbox-runtime # Lightweight sandboxing tool for enforcing filesystem and network restrictions + pkgs.llm-agents.ccusage # Usage analysis tool for Claude Code + pkgs.llm-agents.agent-browser # Headless browser automation CLI for AI agents ]; }; } diff --git a/flake-parts/hosts/pupibundle/hardware-configuration.nix b/flake-parts/hosts/pupibundle/hardware-configuration.nix index 99e97de8..59a47610 100644 --- a/flake-parts/hosts/pupibundle/hardware-configuration.nix +++ b/flake-parts/hosts/pupibundle/hardware-configuration.nix @@ -103,7 +103,7 @@ let in { hardware.enableRedistributableFirmware = true; - boot.loader.raspberryPi.bootloader = "kernel"; + boot.loader.raspberry-pi.bootloader = "kernel"; hardware.i2c.enable = true; boot.kernelModules = [ "i2c-dev" ]; diff --git a/flake-parts/hosts/remotebundle/default.nix b/flake-parts/hosts/remotebundle/default.nix index 700f7502..2335790c 100644 --- a/flake-parts/hosts/remotebundle/default.nix +++ b/flake-parts/hosts/remotebundle/default.nix @@ -52,37 +52,33 @@ let # --- prometheus exporters --- mailserverExporters = infraVars.hosts."remotebundle".services.prometheus.exporters; - certbotWedosHomeEnv = pkgs.python3.withPackages (ps: [ - inputs.self.packages.${system}.certbot-dns-wedos - ps.certbot - ]); - certbotWedosCertDir = "/var/lib/certbot-wedos-home/config/live"; - mkIntraVhost = attrs: - { - listen = [ - { - addr = selfVars.wgAddress; - port = 443; - ssl = true; - } - { - addr = selfVars.wgAddress; - port = 80; - } - ]; - forceSSL = true; - sslCertificate = "${certbotWedosCertDir}/${nginxVars.intranetDomain}/fullchain.pem"; - sslCertificateKey = "${certbotWedosCertDir}/${nginxVars.intranetDomain}/privkey.pem"; + ( + { + listen = [ + { + addr = selfVars.wgAddress; + port = 443; + ssl = true; + } + { + addr = selfVars.wgAddress; + port = 80; + } + ]; - extraConfig = '' - allow ${infraVars.common.networking.defaultSubnet}; - allow ${infraVars.common.networking.intranetSubnet}; - deny all; - ''; - } - // attrs; + forceSSL = true; + useACMEHost = nginxVars.intranetDomain; + + extraConfig = '' + allow ${infraVars.common.networking.defaultSubnet}; + allow ${infraVars.common.networking.intranetSubnet}; + deny all; + ''; + } + // attrs + ); in { # ----------------- @@ -209,6 +205,7 @@ in }; }; }; + networking.firewall = { allowedTCPPorts = [ 80 @@ -248,6 +245,25 @@ in config.users.groups.anubis.name ]; + security.acme = { + acceptTerms = true; + + defaults = { + email = infraVars.common.contacts.securityEmail; + dnsProvider = "wedos"; + dnsResolver = "ns.wedos.net:53"; + environmentFile = config.age.secrets."hosts/${hostName}/wedos-acme-env".path; + dnsPropagationCheck = true; + }; + + certs."${nginxVars.intranetDomain}" = { + inherit (config.services.nginx) group; + domain = nginxVars.intranetDomain; + extraDomainNames = [ "*.${nginxVars.intranetDomain}" ]; + reloadServices = [ "nginx.service" ]; + }; + }; + services.nginx = { enable = true; @@ -363,27 +379,36 @@ in # --- HOME intranet --- virtualHosts."intra-default-sink" = { serverName = "~^(.+)\\.home\\.tsandrini\\.sh$"; - forceSSL = true; - sslCertificate = "${certbotWedosCertDir}/${nginxVars.intranetDomain}/fullchain.pem"; - sslCertificateKey = "${certbotWedosCertDir}/${nginxVars.intranetDomain}/privkey.pem"; + useACMEHost = nginxVars.intranetDomain; + root = inputs.self.packages.${system}.intranet-unauthorized; - locations."= /unauthorized.html" = { - root = "/etc/nginx-static"; + locations."= /index.html" = { extraConfig = "internal;"; }; locations."/" = { extraConfig = '' - error_page 403 /unauthorized.html; + error_page 403 /index.html; return 403; ''; }; + locations."/assets/" = { + extraConfig = '' + expires -1; + ''; + }; + extraConfig = '' + etag off; + if_modified_since off; + add_header Last-Modified "" always; + add_header Cache-Control "no-store, no-cache, must-revalidate, max-age=0" always; add_header Pragma "no-cache" always; add_header Expires "0" always; + add_header Clear-Site-Data '"cache"' always; ''; }; @@ -395,8 +420,6 @@ in }; }; - environment.etc."nginx-static/unauthorized.html".source = ./unauthorized.html; - services.immich = { enable = true; inherit (immichVars) port; @@ -570,12 +593,13 @@ in name = postgresVars.instances."grafana".database; }; # NOTE enable again on init - security.disable_initial_admin_creation = true; + security = { + disable_initial_admin_creation = true; - security.admin_email = "t@tsandrini.sh"; - security.admin_password = "$__file{${ - config.age.secrets."hosts/${hostName}/grafana-admin-password".path - }}"; + admin_email = "t@tsandrini.sh"; + admin_password = "$__file{${config.age.secrets."hosts/${hostName}/grafana-admin-password".path}}"; + secret_key = "$__file{${config.age.secrets."hosts/${hostName}/grafana-secret-key".path}}"; + }; }; provision = { datasources.settings.datasources = [ @@ -950,58 +974,6 @@ in ]; }; - systemd.services.certbot-wedos-home = { - description = "Certbot DNS-01 (WEDOS) for ${nginxVars.intranetDomain} wildcard"; - wants = [ "network-online.target" ]; - after = [ "network-online.target" ]; - - serviceConfig = { - Type = "oneshot"; - - StateDirectory = "certbot-wedos-home"; - StateDirectoryMode = "0750"; - LogsDirectory = "certbot-wedos-home"; - LogsDirectoryMode = "0750"; - - User = "root"; - Group = config.services.nginx.group; - UMask = "0027"; - PrivateTmp = true; - NoNewPrivileges = true; - - ExecStart = '' - ${certbotWedosHomeEnv}/bin/certbot certonly \ - --non-interactive --agree-tos \ - --email ${infraVars.common.contacts.securityEmail} \ - --authenticator dns-wedos \ - --dns-wedos-credentials ${config.age.secrets."hosts/${hostName}/wedos-wapi-credentials".path} \ - --dns-wedos-propagation-seconds 450 \ - -d ${nginxVars.intranetDomain} \ - -d "*.${nginxVars.intranetDomain}" \ - --config-dir /var/lib/certbot-wedos-home/config \ - --work-dir /var/lib/certbot-wedos-home/work \ - --logs-dir /var/log/certbot-wedos-home - ''; - }; - }; - - systemd.timers.certbot-wedos-home = { - wantedBy = [ "timers.target" ]; - timerConfig = { - OnCalendar = "daily"; - RandomizedDelaySec = "1h"; - Persistent = true; - }; - }; - - systemd.tmpfiles.rules = [ - # allow group traversal down the tree - "d /var/lib/certbot-wedos-home 0750 root ${config.services.nginx.group} - -" - "d /var/lib/certbot-wedos-home/config 0750 root ${config.services.nginx.group} - -" - "d /var/lib/certbot-wedos-home/config/live 0750 root ${config.services.nginx.group} - -" - "d /var/lib/certbot-wedos-home/config/archive 0750 root ${config.services.nginx.group} - -" - ]; - services.prometheus.exporters = { postgres = { enable = true; @@ -1052,9 +1024,8 @@ in }; age.secrets = { - "hosts/${hostName}/wedos-wapi-credentials" = { - file = "${secretsPath}/hosts/${hostName}/wedos-wapi-credentials.age"; - owner = config.systemd.services.certbot-wedos-home.serviceConfig.User; + "hosts/${hostName}/wedos-acme-env" = { + file = "${secretsPath}/hosts/${hostName}/wedos-acme-env.age"; }; "hosts/${hostName}/grafana-bot-mail-password" = { @@ -1067,6 +1038,11 @@ in owner = "grafana"; }; + "hosts/${hostName}/grafana-secret-key" = { + file = "${secretsPath}/hosts/${hostName}/grafana-secret-key.age"; + owner = "grafana"; + }; + "hosts/${hostName}/pgadmin-admin-password" = { file = "${secretsPath}/hosts/${hostName}/pgadmin-admin-password.age"; }; diff --git a/flake-parts/hosts/remotebundle/emil.mp4 b/flake-parts/hosts/remotebundle/emil.mp4 new file mode 100644 index 00000000..7f02c1ed Binary files /dev/null and b/flake-parts/hosts/remotebundle/emil.mp4 differ diff --git a/flake-parts/infra-vars/variables.nix b/flake-parts/infra-vars/variables.nix index 82688f24..0a2c05f4 100644 --- a/flake-parts/infra-vars/variables.nix +++ b/flake-parts/infra-vars/variables.nix @@ -194,6 +194,9 @@ _: rec { toString hosts."remotebundle".services.immich.port }"; }; + "emil" = { + domain = "emil.${primaryDomain}"; + }; "intra-pihole" = { domain = "pihole.${intranetDomain}"; proxyEndpoint = "${hosts."pupibundle".address}"; diff --git a/flake-parts/lib/options.nix b/flake-parts/lib/options.nix index 2ca091c8..aa314b6a 100644 --- a/flake-parts/lib/options.nix +++ b/flake-parts/lib/options.nix @@ -66,6 +66,26 @@ with builtins; default = true; }; + /* + Creates an enableOption targeted for the integration with the dms + dank-material-shell ecosystem, colorscheme and bindigs + + *Type*: `Option` + */ + mkDankMaterialShellEnableOption = + mkEnableOption '' + Whether to enable the integration with the dms shell + + Note that the code will get execute only if + + 1. dank-material-shell.enable = true; + 2. tensorfiles.hm.programs.dank-material-shell module is loaded + 3. tensorfiles.hm.programs.dank-material-shell.enable = true; + '' + // { + default = true; + }; + /* Creates an enableOption targeted for the management of the agenix security system. diff --git a/flake-parts/modules/home-manager/default.nix b/flake-parts/modules/home-manager/default.nix index 7dc6c42b..ee0a4366 100644 --- a/flake-parts/modules/home-manager/default.nix +++ b/flake-parts/modules/home-manager/default.nix @@ -86,6 +86,7 @@ in inherit localFlake; }; programs_terminals_kitty = importApply ./programs/terminals/kitty.nix { inherit localFlake; }; + programs_terminals_ghostty = importApply ./programs/terminals/ghostty.nix { inherit localFlake; }; programs_terminals_wezterm = importApply ./programs/terminals/wezterm.nix { inherit localFlake; }; diff --git a/flake-parts/modules/home-manager/profiles/graphical-dms-niri.nix b/flake-parts/modules/home-manager/profiles/graphical-dms-niri.nix index ef3d253f..47a93a19 100644 --- a/flake-parts/modules/home-manager/profiles/graphical-dms-niri.nix +++ b/flake-parts/modules/home-manager/profiles/graphical-dms-niri.nix @@ -63,6 +63,7 @@ in programs = { newsboat.enable = _ true; terminals.wezterm.enable = _ true; + terminals.ghostty.enable = _ true; browsers.firefox.enable = _ true; browsers.firefox.userjs.betterfox.enable = _ true; @@ -164,7 +165,7 @@ in home.sessionVariables = { # Default programs BROWSER = _ "firefox"; - TERMINAL = _ "wezterm"; + TERMINAL = _ "ghostty"; IDE = _ "nvim"; EMAIL = _ "thunderbird"; QT_QPA_PLATFORMTHEME = _ "qt6ct"; diff --git a/flake-parts/modules/home-manager/programs/file-managers/yazi.nix b/flake-parts/modules/home-manager/programs/file-managers/yazi.nix index 8cc2b00a..efdc7086 100644 --- a/flake-parts/modules/home-manager/programs/file-managers/yazi.nix +++ b/flake-parts/modules/home-manager/programs/file-managers/yazi.nix @@ -39,6 +39,7 @@ in enableNushellIntegration = _ ( isModuleLoadedAndEnabled config "tensorfiles.hm.programs.shells.nushell" ); + shellWrapperName = _ "y"; settings = { mgr = { sort_by = _ "natural"; diff --git a/flake-parts/modules/home-manager/programs/git.nix b/flake-parts/modules/home-manager/programs/git.nix index aa5e859a..c2eb47d0 100644 --- a/flake-parts/modules/home-manager/programs/git.nix +++ b/flake-parts/modules/home-manager/programs/git.nix @@ -45,7 +45,7 @@ in _ config.home.sessionVariables.DEFAULT_MAIL ); }; - aliases = { + alias = { b = _ "branch"; bb = _ "!for k in `git branch -a | grep -v \"HEAD -> \" | sed s/^..//`;do echo -e `git log -1 --pretty=format:\"%Cgreen%ci %Cblue%cr%Creset\" \"$k\" --`\\\\t\"$k\";done | sort"; bl = _ "branch"; diff --git a/flake-parts/modules/home-manager/programs/shells/fish.nix b/flake-parts/modules/home-manager/programs/shells/fish.nix index a93f487f..0c5520c7 100644 --- a/flake-parts/modules/home-manager/programs/shells/fish.nix +++ b/flake-parts/modules/home-manager/programs/shells/fish.nix @@ -189,6 +189,12 @@ in (mkIf cfg.withFzf { programs.fzf = { enable = _ true; + changeDirWidgetCommand = _ "${getExe pkgs.fd} --type d --hidden --follow --exclude .git"; + changeDirWidgetOptions = _ [ + "--preview '${getExe pkgs.eza} --icons --group-directories-first -la {}'" + ]; + fileWidgetCommand = _ "${getExe pkgs.fd} --type f --hidden --follow --exclude .git"; + fileWidgetOptions = _ [ "--preview '${getExe pkgs.bat} -n --color=always --line-range :500 {}'" ]; }; }) # |----------------------------------------------------------------------| # diff --git a/flake-parts/modules/home-manager/programs/terminals/ghostty.nix b/flake-parts/modules/home-manager/programs/terminals/ghostty.nix new file mode 100644 index 00000000..912e9d14 --- /dev/null +++ b/flake-parts/modules/home-manager/programs/terminals/ghostty.nix @@ -0,0 +1,73 @@ +# --- flake-parts/modules/home-manager/programs/terminals/ghostty.nix +# +# Author: tsandrini +# URL: https://github.com/tsandrini/tensorfiles +# License: MIT +# +# 888 .d888 d8b 888 +# 888 d88P" Y8P 888 +# 888 888 888 +# 888888 .d88b. 88888b. .d8888b .d88b. 888d888 888888 888 888 .d88b. .d8888b +# 888 d8P Y8b 888 "88b 88K d88""88b 888P" 888 888 888 d8P Y8b 88K +# 888 88888888 888 888 "Y8888b. 888 888 888 888 888 888 88888888 "Y8888b. +# Y88b. Y8b. 888 888 X88 Y88..88P 888 888 888 888 Y8b. X88 +# "Y888 "Y8888 888 888 88888P' "Y88P" 888 888 888 888 "Y8888 88888P' +{ localFlake }: +{ + config, + lib, + ... +}: +let + inherit (lib) mkIf mkMerge mkEnableOption; + inherit (localFlake.lib.modules) mkOverrideAtHmModuleLevel isModuleLoadedAndEnabled; + inherit (localFlake.lib.options) mkDankMaterialShellEnableOption; + + cfg = config.tensorfiles.hm.programs.terminals.ghostty; + _ = mkOverrideAtHmModuleLevel; + + dmsCheck = + (isModuleLoadedAndEnabled config "tensorfiles.hm.programs.dank-material-shell") + && cfg.dank-material-shell.enable; +in +{ + options.tensorfiles.hm.programs.terminals.ghostty = { + enable = mkEnableOption '' + TODO + ''; + + dank-material-shell = { + enable = mkDankMaterialShellEnableOption; + }; + }; + + config = mkIf cfg.enable (mkMerge [ + # |----------------------------------------------------------------------| # + { + programs.ghostty = { + enable = _ true; + systemd.enable = _ true; + settings = { + font-size = _ 10; + cursor-style = _ "bar"; + cursor-style-blink = _ true; + + window-padding-x = _ 5; + window-padding-y = _ 5; + background-opacity = _ 0.8; + window-show-tab-bar = _ "never"; + clipboard-read = _ "allow"; + clipboard-write = _ "allow"; + window-decoration = _ "server"; + }; + }; + } + # |----------------------------------------------------------------------| # + (mkIf dmsCheck { + programs.ghostty.settings.theme = _ "dankcolors"; + }) + # |----------------------------------------------------------------------| # + ]); + + meta.maintainers = with localFlake.lib.maintainers; [ tsandrini ]; +} diff --git a/flake-parts/modules/home-manager/programs/terminals/wezterm.nix b/flake-parts/modules/home-manager/programs/terminals/wezterm.nix index a29acd88..67c82bf4 100644 --- a/flake-parts/modules/home-manager/programs/terminals/wezterm.nix +++ b/flake-parts/modules/home-manager/programs/terminals/wezterm.nix @@ -53,20 +53,29 @@ in local modal = wezterm.plugin.require("https://github.com/MLFlexer/modal.wezterm") ${ - if pywalCheck then # TODO + if pywalCheck then '' - local home = wezterm.home_dir - local wal_dir = home .. "/.cache/wal" - - -- wezterm.add_to_config_reload_watch_list(wal_dir) - -- config.color_scheme_dirs = { wal_dir } - local scheme_path = wezterm.config_dir .. "/colors/dank-theme.toml" local colors, _meta = wezterm.color.load_scheme(scheme_path) config.colors = colors - config.color_scheme = "dank-theme" - wezterm.add_to_config_reload_watch_list(scheme_path) + -- Poll for color changes instead of using file watchers to avoid + -- triggering a full config reload (which re-runs plugin.require + -- and causes multi-minute freezes with many open windows). + local last_content = "" + wezterm.on("update-status", function(window, pane) + local f = io.open(scheme_path, "r") + if not f then return end + local content = f:read("*a") + f:close() + if content ~= last_content then + last_content = content + local ok, new_colors = pcall(wezterm.color.load_scheme, scheme_path) + if ok then + window:set_config_overrides({ colors = new_colors }) + end + end + end) '' else "" diff --git a/flake-parts/modules/nixos/misc/nix.nix b/flake-parts/modules/nixos/misc/nix.nix index 8880f098..6b5d9068 100644 --- a/flake-parts/modules/nixos/misc/nix.nix +++ b/flake-parts/modules/nixos/misc/nix.nix @@ -42,6 +42,7 @@ let "https://cache.lix.systems" "https://nixos-raspberrypi.cachix.org" "https://niri.cachix.org" + "https://cache.numtide.com" # "https://hyprland.cachix.org" # "https://anyrun.cachix.org" ]; @@ -81,6 +82,7 @@ in "cache.lix.systems:aBnZUw8zA7H35Cz2RyKFVs3H4PlGTLawyY5KRbvJR8o=" "nixos-raspberrypi.cachix.org-1:4iMO9LXa8BqhU+Rpg6LQKiGa2lsNh/j2oiYLNOQ5sPI=" "niri.cachix.org-1:Wv0OmO7PsuocRKzfDoJ3mulSl7Z6oezYhGhR+3W2964=" + "niks3.numtide.com-1:DTx8wZduET09hRmMtKdQDxNNthLQETkc/yaX7M4qK0g=" # "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" # "anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s=" ]; diff --git a/flake-parts/modules/nixos/profiles/packages-extra.nix b/flake-parts/modules/nixos/profiles/packages-extra.nix index 1ae6b917..21543a87 100644 --- a/flake-parts/modules/nixos/profiles/packages-extra.nix +++ b/flake-parts/modules/nixos/profiles/packages-extra.nix @@ -44,7 +44,8 @@ in binutils # Tools for manipulating binaries (linker, assembler, etc.) (wrapper script) calcurse # A calendar and scheduling application for the command line w3m # A text-mode web browser - neofetch # A fast, highly customizable system info script + # neofetch # A fast, highly customizable system info script # NOTE: DEPRECATED + fastfetch # Actively maintained, feature-rich and performance oriented, neofetch like system information tool cmake # Cross-platform, open-source build system generator gnumake # A tool to control the generation of non-source files from sources diff --git a/flake-parts/modules/nixos/profiles/packages-graphical-extra.nix b/flake-parts/modules/nixos/profiles/packages-graphical-extra.nix index 1d61cdf4..dc227883 100644 --- a/flake-parts/modules/nixos/profiles/packages-graphical-extra.nix +++ b/flake-parts/modules/nixos/profiles/packages-graphical-extra.nix @@ -59,7 +59,7 @@ in # --- SOCIALS --- element-desktop # A feature-rich client for Matrix.org - signal-desktop-bin # Private, simple, and secure messenger + signal-desktop # Private, simple, and secure messenger slack # Desktop client for Slack zoom-us # Player for Z-Code, TADS and HUGO stories or games # beeper # Universal chat app. diff --git a/flake-parts/modules/nixvim/default.nix b/flake-parts/modules/nixvim/default.nix index 142bf1a2..ab64a305 100644 --- a/flake-parts/modules/nixvim/default.nix +++ b/flake-parts/modules/nixvim/default.nix @@ -58,6 +58,9 @@ in inherit localFlake; }; plugins_editor_image = importApply ./plugins/editor/image.nix { inherit localFlake; }; + plugins_editor_dms-base46 = importApply ./plugins/editor/dms-base46.nix { + inherit localFlake inputs; + }; plugins_editor_nvim-ufo = importApply ./plugins/editor/nvim-ufo.nix { inherit localFlake; }; plugins_editor_leetcode = importApply ./plugins/editor/leetcode.nix { inherit (inputs) leetcode-nvim; diff --git a/flake-parts/modules/nixvim/plugins/editor/dms-base46.nix b/flake-parts/modules/nixvim/plugins/editor/dms-base46.nix new file mode 100644 index 00000000..85c71cf8 --- /dev/null +++ b/flake-parts/modules/nixvim/plugins/editor/dms-base46.nix @@ -0,0 +1,81 @@ +# --- flake-parts/modules/nixvim/plugins/editor/dms-base46.nix +# +# Author: tsandrini +# URL: https://github.com/tsandrini/tensorfiles +# License: MIT +# +# 888 .d888 d8b 888 +# 888 d88P" Y8P 888 +# 888 888 888 +# 888888 .d88b. 88888b. .d8888b .d88b. 888d888 888888 888 888 .d88b. .d8888b +# 888 d8P Y8b 888 "88b 88K d88""88b 888P" 888 888 888 d8P Y8b 88K +# 888 88888888 888 888 "Y8888b. 888 888 888 888 888 888 88888888 "Y8888b. +# Y88b. Y8b. 888 888 X88 Y88..88P 888 888 888 888 Y8b. X88 +# "Y888 "Y8888 888 888 88888P' "Y88P" 888 888 888 888 "Y8888 88888P' +{ localFlake, inputs }: +{ + config, + lib, + pkgs, + ... +}: +let + inherit (lib) + mkIf + mkMerge + mkEnableOption + ; + # inherit (localFlake.lib.modules) mkOverrideAtNixvimModuleLevel; + + cfg = config.tensorfiles.nixvim.plugins.editor.dms-base46; + # _ = mkOverrideAtNixvimModuleLevel; +in +{ + options.tensorfiles.nixvim.plugins.editor.dms-base46 = { + enable = mkEnableOption '' + TODO + ''; + }; + + config = mkIf cfg.enable (mkMerge [ + # |----------------------------------------------------------------------| # + { + extraPlugins = [ + (pkgs.vimUtils.buildVimPlugin { + name = "AvengeMedia/base46"; + src = inputs.nvim-base46; + doCheck = false; + }) + ]; + + extraConfigLua = '' + require('base46').setup() + ''; + + extraConfigLuaPost = '' + vim.opt.runtimepath:append(vim.fn.stdpath("config")) + + local function try_dms() + local paths = vim.fn.globpath(vim.o.runtimepath, "colors/dms.lua", false, true) + if #paths > 0 then + return pcall(vim.cmd.colorscheme, "dms") + end + return false + end + + vim.api.nvim_create_autocmd("VimEnter", { + once = true, + callback = function() + vim.schedule(function() + try_dms() + end) + end, + }) + ''; + # colorscheme = _ "dms"; + } + # |----------------------------------------------------------------------| # + ]); + + meta.maintainers = with localFlake.lib.maintainers; [ tsandrini ]; +} diff --git a/flake-parts/modules/nixvim/plugins/editor/treesitter.nix b/flake-parts/modules/nixvim/plugins/editor/treesitter.nix index 8fae8df2..ef7847cd 100644 --- a/flake-parts/modules/nixvim/plugins/editor/treesitter.nix +++ b/flake-parts/modules/nixvim/plugins/editor/treesitter.nix @@ -38,7 +38,7 @@ in plugins.treesitter = { enable = _ true; indent.enable = _ true; - highlight.enable = _ false; + highlight.enable = _ true; folding.enable = _ true; nixvimInjections = _ true; nixGrammars = _ true; diff --git a/flake-parts/modules/nixvim/plugins/lsp/conform.nix b/flake-parts/modules/nixvim/plugins/lsp/conform.nix index 39d95dcb..13725bb7 100644 --- a/flake-parts/modules/nixvim/plugins/lsp/conform.nix +++ b/flake-parts/modules/nixvim/plugins/lsp/conform.nix @@ -108,7 +108,8 @@ in ]; python = [ "black" - "isort" + "ruff" + # "isort" ]; lua = [ "stylua" ]; nix = [ "nixfmt" ]; @@ -139,6 +140,9 @@ in black = { command = _ "${lib.getExe pkgs.black}"; }; + ruff = { + command = _ "${lib.getExe pkgs.ruff}"; + }; isort = { command = _ "${lib.getExe pkgs.isort}"; }; diff --git a/flake-parts/modules/nixvim/plugins/lsp/lsp.nix b/flake-parts/modules/nixvim/plugins/lsp/lsp.nix index 818be76a..ae9335b4 100644 --- a/flake-parts/modules/nixvim/plugins/lsp/lsp.nix +++ b/flake-parts/modules/nixvim/plugins/lsp/lsp.nix @@ -100,7 +100,9 @@ in ocamllsp.enable = _ true; # ocamllsp for OCaml ocamllsp.package = _ pkgs.ocamlPackages.ocaml-lsp; phpactor.enable = _ true; # phpactor for PHP - pyright.enable = _ true; + # pyright.enable = _ true; + basedpyright.enable = _ true; # Type checker for the Python language + ruff.enable = _ true; # Extremely fast Python linter and code formatter ruby_lsp.enable = _ true; # ruby-lsp for Ruby r_language_server.enable = _ true; # r-language-server for R r_language_server.package = _ pkgs.rPackages.languageserver; diff --git a/flake-parts/modules/nixvim/plugins/utils/project-nvim.nix b/flake-parts/modules/nixvim/plugins/utils/project-nvim.nix index 0c93488d..189fc6cb 100644 --- a/flake-parts/modules/nixvim/plugins/utils/project-nvim.nix +++ b/flake-parts/modules/nixvim/plugins/utils/project-nvim.nix @@ -41,15 +41,43 @@ in config = mkIf cfg.enable (mkMerge [ # |----------------------------------------------------------------------| # { + # NOTE: This fixes a check build time issue where project-nvim + # tries to search for history inside $HOME (which doesn't work inside a sandbox) plugins.project-nvim = { enable = _ true; enableTelescope = _ telescopeCheck; # NOTE DEFAULT produces too many false positives # settings.patterns = [ ".git" "_darcs" ".hg" ".bzr" ".svn" "Makefile" "package.json" ]; - settings.patterns = [ - ".git" - ".projectfile" - ]; + settings = { + disable_on = { + ft = [ + "NvimTree" + "TelescopePrompt" + "TelescopeResults" + "alpha" + "checkhealth" + "lazy" + "log" + "ministarter" + "neo-tree" + "notify" + "nvim-pack" + "packer" + "qf" + ]; + bt = [ + "help" + "nofile" + "nowrite" + "terminal" + ]; + }; + + patterns = [ + ".git" + ".projectfile" + ]; + }; }; } # |----------------------------------------------------------------------| # diff --git a/flake-parts/modules/nixvim/profiles/ide.nix b/flake-parts/modules/nixvim/profiles/ide.nix index 21419007..15d64b80 100644 --- a/flake-parts/modules/nixvim/profiles/ide.nix +++ b/flake-parts/modules/nixvim/profiles/ide.nix @@ -41,6 +41,7 @@ in plugins = { # TODO [Copilot] Could not find agent.js (bad install?) : nil # editor.copilot-lua.enable = _ true; + editor.dms-base46.enable = _ true; cmp.cmp.enable = _ true; cmp.lspkind.enable = _ true; @@ -61,32 +62,8 @@ in plugins.direnv.enable = _ true; plugins.crates.enable = _ true; - colorschemes.nightfox.enable = false; - colorschemes.base16.enable = _ true; - - # TODO - extraConfigLuaPost = '' - local path = vim.fn.stdpath("config") .. "/lua/plugins/dankcolors.lua" - - local function apply_dms_theme() - local ok, spec = pcall(dofile, path) - if not ok then return end - - -- DMS writes a Lazy-style spec table; we just want to run its config() - local entry = spec and spec[1] - if entry and type(entry.config) == "function" then - pcall(entry.config) - end - end - - -- Run once after startup to ensure plugins are available - vim.api.nvim_create_autocmd("VimEnter", { - once = true, - callback = function() - vim.schedule(apply_dms_theme) - end, - }) - ''; + # colorschemes.nightfox.enable = false; + # colorschemes.base16.enable = _ true; } # |----------------------------------------------------------------------| # ]); diff --git a/flake-parts/pkgs/cc-switcher.sh b/flake-parts/pkgs/cc-switcher.sh old mode 100644 new mode 100755 diff --git a/flake-parts/pkgs/default.nix b/flake-parts/pkgs/default.nix index 1100a579..b9c1d05e 100644 --- a/flake-parts/pkgs/default.nix +++ b/flake-parts/pkgs/default.nix @@ -29,6 +29,7 @@ my_cookies = pkgs.callPackage ./my_cookies.nix { }; polonium-nightly = pkgs.libsForQt5.callPackage ./polonium-nightly.nix { inherit lib; }; certbot-dns-wedos = pkgs.callPackage ./certbot-dns-wedos.nix { }; + intranet-unauthorized = pkgs.callPackage ./intranet-unauthorized { }; cc-switcher = pkgs.writeShellApplication { name = "cc-switcher"; runtimeInputs = [ diff --git a/flake-parts/pkgs/intranet-unauthorized/assets/emil.mp4 b/flake-parts/pkgs/intranet-unauthorized/assets/emil.mp4 new file mode 100644 index 00000000..7f02c1ed Binary files /dev/null and b/flake-parts/pkgs/intranet-unauthorized/assets/emil.mp4 differ diff --git a/flake-parts/pkgs/intranet-unauthorized/assets/style.css b/flake-parts/pkgs/intranet-unauthorized/assets/style.css new file mode 100644 index 00000000..871ff805 --- /dev/null +++ b/flake-parts/pkgs/intranet-unauthorized/assets/style.css @@ -0,0 +1,636 @@ +/* ============================================================ + intranet-unauthorized — paws & puppy edition + CSS-only, responsive, cutesy queer landing page + ============================================================ */ + +:root { + --bg0: #0a0810; + --bg1: #120e1a; + --card: rgba(255, 255, 255, 0.05); + --card-border: rgba(255, 255, 255, 0.09); + --text: rgba(255, 255, 255, 0.92); + --muted: rgba(255, 255, 255, 0.62); + --faint: rgba(255, 255, 255, 0.38); + --pink: #ff6b9d; + --pink-soft: #ff8ec4; + --lavender: #c4a1ff; + --cyan: #6eeaff; + --peach: #ffb088; + --mint: #7fffd4; + --red: #ff4d6a; + --shadow: 0 30px 80px rgba(0, 0, 0, 0.5); + --radius: 22px; + --radius-sm: 14px; + --font-sans: + ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, + Cantarell, "Noto Sans", "Helvetica Neue", Arial, "Apple Color Emoji", + "Segoe UI Emoji"; + --font-mono: + ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", + "Courier New", monospace; +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html, +body { + height: 100%; +} + +body { + margin: 0; + font-family: var(--font-sans); + color: var(--text); + background: + radial-gradient( + 900px 700px at 15% 20%, + rgba(196, 161, 255, 0.12), + transparent 55% + ), + radial-gradient( + 800px 600px at 85% 15%, + rgba(255, 107, 157, 0.13), + transparent 50% + ), + radial-gradient( + 700px 500px at 50% 90%, + rgba(110, 234, 255, 0.09), + transparent 50% + ), + radial-gradient( + 500px 400px at 70% 60%, + rgba(255, 176, 136, 0.07), + transparent 50% + ), + linear-gradient(180deg, var(--bg0), var(--bg1)); + background-attachment: fixed; + display: flex; + flex-direction: column; + align-items: center; + min-height: 100vh; + padding: 20px; + overflow-x: hidden; + position: relative; +} + +/* ---- floating paw prints (pure CSS) ---- */ +.paws { + position: fixed; + inset: 0; + pointer-events: none; + overflow: hidden; + z-index: 0; +} + +.paw { + position: absolute; + opacity: 0; + animation: paw-float linear infinite; + /* paw print via inline SVG data URI */ + width: 32px; + height: 32px; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Cellipse cx='32' cy='44' rx='14' ry='16' fill='rgba(255,107,157,0.22)'/%3E%3Ccircle cx='18' cy='22' r='7' fill='rgba(255,107,157,0.22)'/%3E%3Ccircle cx='46' cy='22' r='7' fill='rgba(255,107,157,0.22)'/%3E%3Ccircle cx='12' cy='36' r='6' fill='rgba(255,107,157,0.22)'/%3E%3Ccircle cx='52' cy='36' r='6' fill='rgba(255,107,157,0.22)'/%3E%3C/svg%3E"); + background-size: contain; + background-repeat: no-repeat; +} + +.paw:nth-child(1) { + left: 8%; + width: 28px; + height: 28px; + animation-duration: 18s; + animation-delay: 0s; +} +.paw:nth-child(2) { + left: 22%; + width: 22px; + height: 22px; + animation-duration: 22s; + animation-delay: 3s; +} +.paw:nth-child(3) { + left: 38%; + width: 36px; + height: 36px; + animation-duration: 20s; + animation-delay: 6s; +} +.paw:nth-child(4) { + left: 55%; + width: 26px; + height: 26px; + animation-duration: 24s; + animation-delay: 1s; +} +.paw:nth-child(5) { + left: 72%; + width: 30px; + height: 30px; + animation-duration: 19s; + animation-delay: 8s; +} +.paw:nth-child(6) { + left: 88%; + width: 24px; + height: 24px; + animation-duration: 21s; + animation-delay: 4s; +} +.paw:nth-child(7) { + left: 45%; + width: 20px; + height: 20px; + animation-duration: 25s; + animation-delay: 10s; +} +.paw:nth-child(8) { + left: 65%; + width: 34px; + height: 34px; + animation-duration: 17s; + animation-delay: 7s; +} + +@keyframes paw-float { + 0% { + transform: translateY(105vh) rotate(0deg); + opacity: 0; + } + 5% { + opacity: 0.6; + } + 90% { + opacity: 0.6; + } + 100% { + transform: translateY(-10vh) rotate(360deg); + opacity: 0; + } +} + +/* ---- layout ---- */ +.wrap { + width: min(1020px, 100%); + display: grid; + gap: 16px; + position: relative; + z-index: 1; +} + +/* ---- top bar ---- */ +.topbar { + display: flex; + justify-content: space-between; + align-items: center; + gap: 12px; + padding: 12px 16px; + border-radius: var(--radius-sm); + background: rgba(255, 255, 255, 0.04); + border: 1px solid var(--card-border); + backdrop-filter: blur(12px); + flex-wrap: wrap; +} + +.pill { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 8px 12px; + border-radius: 999px; + background: rgba(255, 255, 255, 0.06); + border: 1px solid rgba(255, 255, 255, 0.1); + color: var(--muted); + font-size: 13px; + line-height: 1; + white-space: nowrap; +} + +.dot { + width: 10px; + height: 10px; + border-radius: 99px; + background: var(--red); + box-shadow: 0 0 0 4px rgba(255, 77, 106, 0.15); + animation: pulse-dot 2s ease-in-out infinite; +} + +@keyframes pulse-dot { + 0%, + 100% { + box-shadow: 0 0 0 4px rgba(255, 77, 106, 0.15); + } + 50% { + box-shadow: 0 0 0 8px rgba(255, 77, 106, 0.08); + } +} + +/* ---- grid ---- */ +.grid { + display: grid; + grid-template-columns: 1.15fr 0.85fr; + gap: 16px; +} + +@media (max-width: 860px) { + .grid { + grid-template-columns: 1fr; + } +} + +/* ---- card ---- */ +.card { + border-radius: var(--radius); + background: linear-gradient( + 180deg, + rgba(255, 255, 255, 0.06), + rgba(255, 255, 255, 0.03) + ); + border: 1px solid var(--card-border); + box-shadow: var(--shadow); + overflow: hidden; +} + +.card-inner { + padding: 28px 26px 24px; +} + +/* ---- hero ---- */ +.hero { + display: flex; + gap: 22px; + align-items: center; +} + +.paw-icon { + flex-shrink: 0; + width: 110px; + height: 110px; + filter: drop-shadow(0 16px 30px rgba(255, 107, 157, 0.25)); + animation: wiggle 3s ease-in-out infinite; +} + +@keyframes wiggle { + 0%, + 100% { + transform: rotate(-5deg); + } + 50% { + transform: rotate(5deg); + } +} + +@media (max-width: 520px) { + .hero { + flex-direction: column; + text-align: center; + } + .paw-icon { + width: 90px; + height: 90px; + } +} + +.title { + font-size: clamp(26px, 4vw, 40px); + letter-spacing: -0.02em; + margin: 0; + line-height: 1.2; + background: linear-gradient( + 135deg, + var(--pink-soft), + var(--lavender), + var(--cyan) + ); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; +} + +.subtitle { + margin: 12px 0 0; + color: var(--muted); + font-size: 15px; + line-height: 1.6; +} + +/* ---- actions ---- */ +.actions { + margin-top: 20px; + display: flex; + flex-wrap: wrap; + gap: 10px; +} + +.btn { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 10px 14px; + border-radius: var(--radius-sm); + border: 1px solid rgba(255, 255, 255, 0.12); + background: rgba(255, 255, 255, 0.06); + color: var(--text); + text-decoration: none; + font-weight: 600; + font-size: 13.5px; + cursor: pointer; + transition: + transform 120ms ease, + background 120ms ease, + border-color 120ms ease; + user-select: none; +} + +.btn:hover { + transform: translateY(-1px); + background: rgba(255, 255, 255, 0.09); + border-color: rgba(255, 255, 255, 0.2); +} + +.btn:active { + transform: translateY(0); +} + +.btn.primary { + background: linear-gradient( + 180deg, + rgba(255, 107, 157, 0.2), + rgba(196, 161, 255, 0.1) + ); + border-color: rgba(255, 107, 157, 0.35); + box-shadow: + 0 0 0 1px rgba(255, 255, 255, 0.06), + 0 0 0 5px rgba(255, 107, 157, 0.08); +} + +.btn svg { + opacity: 0.85; + flex-shrink: 0; +} + +/* ---- bunny section ---- */ +.bunny-section { + margin-top: 4px; +} + +.bunny-section .card-inner { + padding: 20px; +} + +.bunny-header { + display: flex; + align-items: center; + gap: 10px; + margin-bottom: 14px; +} + +.bunny-header h2 { + margin: 0; + font-size: 16px; + font-weight: 700; + color: var(--peach); +} + +.bunny-badge { + font-size: 11px; + padding: 4px 10px; + border-radius: 999px; + background: rgba(255, 176, 136, 0.12); + border: 1px solid rgba(255, 176, 136, 0.25); + color: var(--peach); + font-weight: 600; + letter-spacing: 0.03em; +} + +.bunny-video { + width: 100%; + border-radius: 16px; + border: 1px solid rgba(255, 255, 255, 0.1); + background: rgba(0, 0, 0, 0.3); + display: block; +} + +.bunny-caption { + margin: 10px 0 0; + font-size: 13px; + color: var(--faint); + text-align: center; + font-style: italic; +} + +/* ---- sidebar ---- */ +.side { + display: grid; + gap: 14px; + align-content: start; +} + +.panel { + border-radius: 18px; + background: rgba(0, 0, 0, 0.2); + border: 1px solid rgba(255, 255, 255, 0.09); + padding: 16px; +} + +.panel h3 { + margin: 0 0 10px; + font-size: 14px; + letter-spacing: 0.01em; + color: rgba(255, 255, 255, 0.88); + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; +} + +.panel p, +.panel li { + margin: 0; + color: var(--muted); + font-size: 13.5px; + line-height: 1.6; +} + +.panel ul { + margin: 8px 0 0; + padding: 0 0 0 18px; +} + +.panel li + li { + margin-top: 4px; +} + +/* ---- accent colors for panel headers ---- */ +.panel-help h3 { + color: var(--pink-soft); +} +.panel-steps h3 { + color: var(--lavender); +} +.panel-debug h3 { + color: var(--cyan); +} +.panel-diag h3 { + color: var(--mint); +} + +/* ---- step list ---- */ +.steps { + list-style: none; + padding: 0; + margin: 10px 0 0; + counter-reset: step; +} + +.steps li { + counter-increment: step; + padding-left: 28px; + position: relative; +} + +.steps li + li { + margin-top: 8px; +} + +.steps li::before { + content: counter(step); + position: absolute; + left: 0; + top: 1px; + width: 20px; + height: 20px; + border-radius: 50%; + background: rgba(196, 161, 255, 0.15); + border: 1px solid rgba(196, 161, 255, 0.3); + color: var(--lavender); + font-size: 11px; + font-weight: 700; + display: grid; + place-items: center; + line-height: 1; +} + +/* ---- code / kbd ---- */ +code { + font-family: var(--font-mono); + font-size: 12.5px; + color: rgba(255, 255, 255, 0.88); + background: rgba(255, 255, 255, 0.06); + border: 1px solid rgba(255, 255, 255, 0.1); + padding: 2px 7px; + border-radius: 8px; + white-space: nowrap; +} + +.kbd { + font-family: var(--font-mono); + font-size: 12px; + padding: 4px 8px; + border-radius: 10px; + border: 1px solid rgba(255, 255, 255, 0.14); + background: rgba(0, 0, 0, 0.25); + color: rgba(255, 255, 255, 0.8); + white-space: nowrap; +} + +/* ---- diagnostic table ---- */ +.diag-table { + width: 100%; + border-collapse: collapse; + margin-top: 10px; +} + +.diag-table td { + padding: 5px 0; + font-size: 12.5px; + border-bottom: 1px solid rgba(255, 255, 255, 0.06); + vertical-align: top; +} + +.diag-table tr:last-child td { + border-bottom: none; +} + +.diag-table td:first-child { + color: var(--faint); + font-family: var(--font-mono); + font-size: 11.5px; + padding-right: 12px; + white-space: nowrap; + width: 1%; +} + +.diag-table td:last-child { + color: var(--muted); + font-family: var(--font-mono); + font-size: 12px; + word-break: break-all; +} + +/* ---- formula ---- */ +.formula { + font-family: var(--font-mono); + font-size: 13px; + padding: 12px 14px; + border-radius: var(--radius-sm); + background: linear-gradient( + 180deg, + rgba(110, 234, 255, 0.08), + rgba(255, 255, 255, 0.03) + ); + border: 1px solid rgba(110, 234, 255, 0.2); + color: rgba(255, 255, 255, 0.9); + text-align: center; + overflow-x: auto; +} + +/* ---- footer ---- */ +.foot { + text-align: center; + color: var(--faint); + font-size: 12px; + padding: 8px 0 4px; + line-height: 1.6; +} + +.foot .heart { + color: var(--pink); +} + +/* ---- responsive tweaks ---- */ +@media (max-width: 480px) { + body { + padding: 12px; + } + + .topbar { + justify-content: center; + } + + .card-inner { + padding: 20px 16px 18px; + } + + .actions { + justify-content: center; + } + + .panel { + padding: 14px; + } + + .btn { + font-size: 13px; + padding: 9px 12px; + } +} + +@media (min-width: 861px) and (max-width: 1024px) { + .grid { + grid-template-columns: 1fr 1fr; + } +} diff --git a/flake-parts/pkgs/intranet-unauthorized/default.nix b/flake-parts/pkgs/intranet-unauthorized/default.nix new file mode 100644 index 00000000..101820ae --- /dev/null +++ b/flake-parts/pkgs/intranet-unauthorized/default.nix @@ -0,0 +1,24 @@ +{ + lib, + stdenvNoCC, +}: +stdenvNoCC.mkDerivation { + name = "tensorfiles-intranet-unauthorized"; + + src = ./.; + + nativeBuildInputs = [ ]; + + installPhase = '' + mkdir -p $out + + cp -avr $src/assets $out/assets + cp -av $src/index.html $out/ + ''; + + meta = { + description = "Nginx root package for an unauthorized page for the wg intranet access."; + platforms = lib.platforms.unix; + maintainers = [ lib.maintainers.tsandrini ]; + }; +} diff --git a/flake-parts/pkgs/intranet-unauthorized/index-old.html b/flake-parts/pkgs/intranet-unauthorized/index-old.html new file mode 100644 index 00000000..2a784c63 --- /dev/null +++ b/flake-parts/pkgs/intranet-unauthorized/index-old.html @@ -0,0 +1,512 @@ + + + + + + + 403 — Intranet Only + + + + + +
+
+
+ + 403 — intranet only +
+
+ host: + +
+
+ +
+
+
+
+ + +
+

Not here. Are you lost, puppy? 🥺

+

+ This hostname lives on a private intranet. If you’re seeing + this, you’re on the wrong side of the tunnel. Connect to + WireGuard (or the local LAN) and try again. +

+ + +
+
+
+
+ + +
+ +
+ If you think you should have access, you probably do — you’re just not + on the right network. +
+
+ + + + diff --git a/flake-parts/pkgs/intranet-unauthorized/index.html b/flake-parts/pkgs/intranet-unauthorized/index.html new file mode 100644 index 00000000..ea302298 --- /dev/null +++ b/flake-parts/pkgs/intranet-unauthorized/index.html @@ -0,0 +1,242 @@ + + + + + + + + + 403 — Intranet Only + + + + + + + +
+ +
+
+ + 403 — intranet only +
+
+ host: + +
+
+ + +
+ +
+ +
+
+
+ + + +
+

Whoops! Wrong side of the fence, pup~

+

+ This domain lives on a private intranet behind WireGuard. + You're sniffing around from outside the tunnel! + Connect to the VPN (or the local LAN) and try again. +

+ + +
+
+
+
+ + +
+
+
+

meanwhile, have a bunny

+ emotional support +
+ +

bnuuy says: it's okay, you'll get in eventually~

+
+
+
+ + + +
+ + +
+ If you think you should have access, you probably do — you're just + not on the right network yet. +
+ made with and too many paw prints +
+
+ + + + + diff --git a/flake-parts/pre-commit-hooks.nix b/flake-parts/pre-commit-hooks.nix index b6229b73..6c7aeeca 100644 --- a/flake-parts/pre-commit-hooks.nix +++ b/flake-parts/pre-commit-hooks.nix @@ -14,7 +14,7 @@ # "Y888 "Y8888 888 888 88888P' "Y88P" 888 888 888 888 "Y8888 88888P' { inputs, ... }: { - imports = with inputs; [ pre-commit-hooks.flakeModule ]; + imports = [ inputs.pre-commit-hooks.flakeModule ]; perSystem = _: { pre-commit.settings = { @@ -22,6 +22,8 @@ "flake.lock" # NOTE: prettier thinks this is json >.< prettier baka!!! "p10k.zsh" "flake-parts/modules/home-manager/programs/file-managers/lf/icons" + "flake-parts/pkgs/intranet-unauthorized/index.html" + "flake-parts/pkgs/intranet-unauthorized/assets/emil.mp4" "etc/" ]; @@ -41,11 +43,15 @@ editorconfig-checker.enable = true; # .editorconfig file checker typos.enable = true; # Source code spell checker prettier.enable = true; # Prettier is an opinionated code formatter + # check-json.enable = true; + check-toml.enable = true; # jsonfmt.enable = true; # Formatter for JSON files # --- fs utils --- + check-symlinks.enable = true; # Check for broken symlinks check-added-large-files.enable = true; check-executables-have-shebangs.enable = true; + check-shebang-scripts-are-executable.enable = true; end-of-file-fixer.enable = true; mixed-line-endings.enable = true; trim-trailing-whitespace.enable = true; diff --git a/flake.lock b/flake.lock index f8aff6b5..1ddee10b 100644 --- a/flake.lock +++ b/flake.lock @@ -10,11 +10,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1762618334, - "narHash": "sha256-wyT7Pl6tMFbFrs8Lk/TlEs81N6L+VSybPfiIgzU8lbQ=", + "lastModified": 1770165109, + "narHash": "sha256-9VnK6Oqai65puVJ4WYtCTvlJeXxMzAp/69HhQuTdl/I=", "owner": "ryantm", "repo": "agenix", - "rev": "fcdea223397448d35d9b31f798479227e80183f6", + "rev": "b027ee29d959fda4b60b57566d64c98a202e0feb", "type": "github" }, "original": { @@ -58,11 +58,11 @@ "betterfox": { "flake": false, "locked": { - "lastModified": 1765663165, - "narHash": "sha256-zGpfQk2gY6ifxIk1fvCk5g5SIFo+o8RItmw3Yt3AeCg=", + "lastModified": 1772315048, + "narHash": "sha256-rUuEfbjIXox5x5ul/4VarIm7bii/SCcDJjocEbHA1kM=", "owner": "yokoffing", "repo": "Betterfox", - "rev": "eee6e58b2b0ee10a59efb6586a5db07ae181d8c7", + "rev": "f1c8e3809dbd23f4f9aa1e5e70805c61734b1f14", "type": "github" }, "original": { @@ -87,14 +87,39 @@ "type": "gitlab" } }, + "blueprint": { + "inputs": { + "nixpkgs": [ + "llm-agents", + "nixpkgs" + ], + "systems": [ + "llm-agents", + "systems" + ] + }, + "locked": { + "lastModified": 1771437256, + "narHash": "sha256-bLqwib+rtyBRRVBWhMuBXPCL/OThfokA+j6+uH7jDGU=", + "owner": "numtide", + "repo": "blueprint", + "rev": "06ee7190dc2620ea98af9eb225aa9627b68b0e33", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "blueprint", + "type": "github" + } + }, "buffer_manager-nvim": { "flake": false, "locked": { - "lastModified": 1760022556, - "narHash": "sha256-mYnuqTfJZXxoTt99b5rEB8HRKQ/El+cdoHsuSkZsnU4=", + "lastModified": 1770227189, + "narHash": "sha256-dTv5S2PbFEsyETpvf8urH9nHzgc48aMicX9+VH9DKQk=", "owner": "j-morano", "repo": "buffer_manager.nvim", - "rev": "a39ab3851a5487ac39cac4be43715b69349b8df7", + "rev": "a0ac2db39c8bd4a2b6ca897f38c88770f90d9323", "type": "github" }, "original": { @@ -103,6 +128,40 @@ "type": "github" } }, + "bun2nix": { + "inputs": { + "flake-parts": [ + "llm-agents", + "flake-parts" + ], + "import-tree": "import-tree", + "nixpkgs": [ + "llm-agents", + "nixpkgs" + ], + "systems": [ + "llm-agents", + "systems" + ], + "treefmt-nix": [ + "llm-agents", + "treefmt-nix" + ] + }, + "locked": { + "lastModified": 1770895533, + "narHash": "sha256-v3QaK9ugy9bN9RXDnjw0i2OifKmz2NnKM82agtqm/UY=", + "owner": "nix-community", + "repo": "bun2nix", + "rev": "c843f477b15f51151f8c6bcc886954699440a6e1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "bun2nix", + "type": "github" + } + }, "danksearch": { "inputs": { "nixpkgs": [ @@ -110,11 +169,11 @@ ] }, "locked": { - "lastModified": 1766814755, - "narHash": "sha256-iVZHhERnR07PMLSjVMW/72ah7ezyqaxdADmJQ8FdToU=", + "lastModified": 1771867960, + "narHash": "sha256-7VK/R3ZkrSlk8WQlQxjP2BJl5PGNkgbPnd9jh/7xbTw=", "owner": "AvengeMedia", "repo": "danksearch", - "rev": "2356124150c7a35a735d88a3d54a941b6cfe3a02", + "rev": "55c58870c666a45eeb2fe34180eb886c34e68d0c", "type": "github" }, "original": { @@ -152,11 +211,11 @@ "utils": "utils" }, "locked": { - "lastModified": 1766051518, - "narHash": "sha256-znKOwPXQnt3o7lDb3hdf19oDo0BLP4MfBOYiWkEHoik=", + "lastModified": 1770019181, + "narHash": "sha256-hwsYgDnby50JNVpTRYlF3UR/Rrpt01OrxVuryF40CFY=", "owner": "serokell", "repo": "deploy-rs", - "rev": "d5eff7f948535b9c723d60cd8239f8f11ddc90fa", + "rev": "77c906c0ba56aabdbc72041bf9111b565cdd6171", "type": "github" }, "original": { @@ -172,11 +231,11 @@ ] }, "locked": { - "lastModified": 1766150702, - "narHash": "sha256-P0kM+5o+DKnB6raXgFEk3azw8Wqg5FL6wyl9jD+G5a4=", + "lastModified": 1773506317, + "narHash": "sha256-qWKbLUJpavIpvOdX1fhHYm0WGerytFHRoh9lVck6Bh0=", "owner": "nix-community", "repo": "disko", - "rev": "916506443ecd0d0b4a0f4cf9d40a3c22ce39b378", + "rev": "878ec37d6a8f52c6c801d0e2a2ad554c75b9353c", "type": "github" }, "original": { @@ -193,11 +252,11 @@ "quickshell": "quickshell" }, "locked": { - "lastModified": 1769493135, - "narHash": "sha256-9h3lV7MpAHvugCCUyOEmwThpJp7aSA4qE9UTQR/8KOc=", + "lastModified": 1773716337, + "narHash": "sha256-Q4xU8miqJH2jmyL3evUVozNUSSlKEaF0Q52OqvXprYs=", "owner": "AvengeMedia", "repo": "DankMaterialShell", - "rev": "9553cb06d34a255486733e17c11f6874dd9d99a3", + "rev": "679a59ad76a887748df2aeae8a4955289a832cd0", "type": "github" }, "original": { @@ -212,11 +271,11 @@ "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1768209570, - "narHash": "sha256-AUtaJtR03W/Q4WMylHX/inc+D/mD2T2urHp0bV71mCE=", + "lastModified": 1773717064, + "narHash": "sha256-ryskiAiUPo6DXr9Rj2SpqMJ362VsR19pdQCAdZIFPoY=", "owner": "nix-community", "repo": "emacs-overlay", - "rev": "88184b97a23c30f265082fcdc416d0932958dfa8", + "rev": "4b38e67e60c0010dd4efb8ee5d88e08db14cb079", "type": "github" }, "original": { @@ -259,11 +318,11 @@ }, "flake-compat_3": { "locked": { - "lastModified": 1761588595, - "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", + "lastModified": 1767039857, + "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", "owner": "edolstra", "repo": "flake-compat", - "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", + "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", "type": "github" }, "original": { @@ -275,20 +334,36 @@ "flake-compat_4": { "flake": false, "locked": { - "lastModified": 1761588595, - "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", - "owner": "edolstra", + "lastModified": 1767039857, + "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", + "owner": "NixOS", "repo": "flake-compat", - "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", + "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", "type": "github" }, "original": { - "owner": "edolstra", + "owner": "NixOS", "repo": "flake-compat", "type": "github" } }, "flake-compat_5": { + "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-compat_6": { "locked": { "lastModified": 1767039857, "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", @@ -303,7 +378,7 @@ "type": "github" } }, - "flake-compat_6": { + "flake-compat_7": { "locked": { "lastModified": 1761640442, "narHash": "sha256-AtrEP6Jmdvrqiv4x2xa5mrtaIp3OEe8uBYCDZDS+hu8=", @@ -318,7 +393,7 @@ "type": "github" } }, - "flake-compat_7": { + "flake-compat_8": { "flake": false, "locked": { "lastModified": 1767039857, @@ -339,11 +414,11 @@ "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1768135262, - "narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=", + "lastModified": 1772408722, + "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac", + "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", "type": "github" }, "original": { @@ -448,14 +523,17 @@ }, "flake-parts_5": { "inputs": { - "nixpkgs-lib": "nixpkgs-lib_5" + "nixpkgs-lib": [ + "llm-agents", + "nixpkgs" + ] }, "locked": { - "lastModified": 1767609335, - "narHash": "sha256-feveD98mQpptwrAEggBQKJTYbvwwglSbOv53uCfH9PY=", + "lastModified": 1772408722, + "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "250481aafeb741edfe23d29195671c19b36b6dca", + "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", "type": "github" }, "original": { @@ -465,6 +543,24 @@ } }, "flake-parts_6": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_5" + }, + "locked": { + "lastModified": 1772408722, + "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_7": { "inputs": { "nixpkgs-lib": "nixpkgs-lib_6" }, @@ -482,7 +578,7 @@ "type": "github" } }, - "flake-parts_7": { + "flake-parts_8": { "inputs": { "nixpkgs-lib": [ "nixvim", @@ -490,11 +586,11 @@ ] }, "locked": { - "lastModified": 1765835352, - "narHash": "sha256-XswHlK/Qtjasvhd1nOa1e8MgZ8GS//jBoTqWtrS1Giw=", + "lastModified": 1769996383, + "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "a34fae9c08a15ad73f295041fec82323541400a9", + "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", "type": "github" }, "original": { @@ -503,7 +599,7 @@ "type": "github" } }, - "flake-parts_8": { + "flake-parts_9": { "inputs": { "nixpkgs-lib": [ "nur", @@ -544,7 +640,7 @@ }, "flake-utils_2": { "inputs": { - "systems": "systems_7" + "systems": "systems_8" }, "locked": { "lastModified": 1731533236, @@ -562,7 +658,7 @@ }, "flake-utils_3": { "inputs": { - "systems": "systems_8" + "systems": "systems_9" }, "locked": { "lastModified": 1731533236, @@ -594,23 +690,46 @@ } }, "git-hooks": { + "inputs": { + "flake-compat": "flake-compat_4", + "gitignore": "gitignore_2", + "nixpkgs": [ + "nix-gaming", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1772893680, + "narHash": "sha256-JDqZMgxUTCq85ObSaFw0HhE+lvdOre1lx9iI6vYyOEs=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "8baab586afc9c9b57645a734c820e4ac0a604af9", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "git-hooks_2": { "inputs": { "flake-compat": [ "nixos-mailserver", "flake-compat" ], - "gitignore": "gitignore_2", + "gitignore": "gitignore_3", "nixpkgs": [ "nixos-mailserver", "nixpkgs" ] }, "locked": { - "lastModified": 1763988335, - "narHash": "sha256-QlcnByMc8KBjpU37rbq5iP7Cp97HvjRP0ucfdh+M4Qc=", + "lastModified": 1772893680, + "narHash": "sha256-JDqZMgxUTCq85ObSaFw0HhE+lvdOre1lx9iI6vYyOEs=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "50b9238891e388c9fdc6a5c49e49c42533a1b5ce", + "rev": "8baab586afc9c9b57645a734c820e4ac0a604af9", "type": "github" }, "original": { @@ -662,7 +781,7 @@ "gitignore_2": { "inputs": { "nixpkgs": [ - "nixos-mailserver", + "nix-gaming", "git-hooks", "nixpkgs" ] @@ -682,6 +801,28 @@ } }, "gitignore_3": { + "inputs": { + "nixpkgs": [ + "nixos-mailserver", + "git-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_4": { "inputs": { "nixpkgs": [ "pre-commit-hooks", @@ -730,11 +871,11 @@ ] }, "locked": { - "lastModified": 1768068402, - "narHash": "sha256-bAXnnJZKJiF7Xr6eNW6+PhBf1lg2P1aFUO9+xgWkXfA=", + "lastModified": 1773681856, + "narHash": "sha256-+bRqxoFCJFO9ZTFhcCkzNXbDT3b8AEk88fyjB7Is6eo=", "owner": "nix-community", "repo": "home-manager", - "rev": "8bc5473b6bc2b6e1529a9c4040411e1199c43b4c", + "rev": "57d5560ee92a424fb71fde800acd6ed2c725dfce", "type": "github" }, "original": { @@ -751,11 +892,11 @@ ] }, "locked": { - "lastModified": 1747978958, - "narHash": "sha256-pQQnbxWpY3IiZqgelXHIe/OAE/Yv4NSQq7fch7M6nXQ=", + "lastModified": 1768598210, + "narHash": "sha256-kkgA32s/f4jaa4UG+2f8C225Qvclxnqs76mf8zvTVPg=", "owner": "nix-community", "repo": "home-manager", - "rev": "7419250703fd5eb50e99bdfb07a86671939103ea", + "rev": "c47b2cc64a629f8e075de52e4742de688f930dc6", "type": "github" }, "original": { @@ -774,11 +915,11 @@ "systems": "systems_5" }, "locked": { - "lastModified": 1759773747, - "narHash": "sha256-g4r72uPHa3ea14ZqzFhFAih3ykacQLw5sOdRmxDW0lM=", + "lastModified": 1771695284, + "narHash": "sha256-ZfLvviImDapoMWg3lRpVdRdFunUA6YxXzNup5lLXi5g=", "owner": "tsandrini", "repo": "immutable-insights", - "rev": "445b64a82f4059d40480daefaa146feabcf2653d", + "rev": "d0a9aa5afe39c180cacc4e274b3dcd6f8230d24a", "type": "github" }, "original": { @@ -793,11 +934,11 @@ "nixpkgs": "nixpkgs_8" }, "locked": { - "lastModified": 1767822991, - "narHash": "sha256-iyrn9AcPZCoyxX4OT8eMkBsjG7SRUQXXS/V1JzxS7rA=", + "lastModified": 1769548169, + "narHash": "sha256-03+JxvzmfwRu+5JafM0DLbxgHttOQZkUtDWBmeUkN8Y=", "owner": "nix-community", "repo": "impermanence", - "rev": "82e5bc4508cab9e8d5a136626276eb5bbce5e9c5", + "rev": "7b1d382faf603b6d264f58627330f9faa5cba149", "type": "github" }, "original": { @@ -806,6 +947,21 @@ "type": "github" } }, + "import-tree": { + "locked": { + "lastModified": 1763762820, + "narHash": "sha256-ZvYKbFib3AEwiNMLsejb/CWs/OL/srFQ8AogkebEPF0=", + "owner": "vic", + "repo": "import-tree", + "rev": "3c23749d8013ec6daa1d7255057590e9ca726646", + "type": "github" + }, + "original": { + "owner": "vic", + "repo": "import-tree", + "type": "github" + } + }, "leetcode-nvim": { "flake": false, "locked": { @@ -828,11 +984,11 @@ "nixpkgs-lib": "nixpkgs-lib_7" }, "locked": { - "lastModified": 1767530944, - "narHash": "sha256-DPczJq4hmhqG9i7wo+zARji+hUj1iKR3Qnz8BTuFgHU=", + "lastModified": 1773579712, + "narHash": "sha256-cvxFTYuOvvmpLJz5nB8iREmMGsDksY6gmZFf74UKD1Q=", "owner": "nix-community", "repo": "lib-aggregate", - "rev": "f32c12294f38b793121079bcf98fcb30d5440edc", + "rev": "c23c52797845b8e4f273ddb5ccdf8622b5d98284", "type": "github" }, "original": { @@ -876,6 +1032,47 @@ "url": "https://git.lix.systems/lix-project/nixos-module/archive/2.93.0.tar.gz" } }, + "llm-agents": { + "inputs": { + "blueprint": "blueprint", + "bun2nix": "bun2nix", + "flake-parts": "flake-parts_5", + "nixpkgs": "nixpkgs_9", + "systems": "systems_7", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1774333104, + "narHash": "sha256-acWWrX21golBLxEQ+RxEow2MZ7KxFi8iCH1LUXUL4eg=", + "owner": "numtide", + "repo": "llm-agents.nix", + "rev": "2935ee5defa6159e56cc31ee122f8caa3772c174", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "llm-agents.nix", + "type": "github" + } + }, + "mcp-servers-nix": { + "inputs": { + "nixpkgs": "nixpkgs_10" + }, + "locked": { + "lastModified": 1774335578, + "narHash": "sha256-SQr8Sn33FQY20ChlFJP+GDSC+VLq2T9lRlmkAKdYPsQ=", + "owner": "natsukium", + "repo": "mcp-servers-nix", + "rev": "52db71b8cb8b39bce3e12f1ba3ed009aaf97c15a", + "type": "github" + }, + "original": { + "owner": "natsukium", + "repo": "mcp-servers-nix", + "type": "github" + } + }, "niri": { "inputs": { "niri-stable": "niri-stable", @@ -888,11 +1085,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1769366931, - "narHash": "sha256-OMQ+aRJdx1x+u3JG/Zlj1YWeMPmJjKMyy6OMf3M7U78=", + "lastModified": 1773725889, + "narHash": "sha256-htkVJrtaWJS7wQSXg8d26RR6jF3Iab2bYTNfvTgv05Q=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "419d7b73430a1f3de344a85bed50e770227f0b77", + "rev": "9987baf8f935a1b3b2aa89a44c13b3239ecc640e", "type": "github" }, "original": { @@ -921,11 +1118,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1769363347, - "narHash": "sha256-fqaPwglujRdIXArV6a/0SG4otGPlvFGqFJo5EOAKnX0=", + "lastModified": 1773130184, + "narHash": "sha256-3bwx4WqCB06yfQIGB+OgIckOkEDyKxiTD5pOo4Xz2rI=", "owner": "YaLTeR", "repo": "niri", - "rev": "5ddcf195dd6cb24cf67c24d4622ef0a4dca9ed12", + "rev": "b07bde3ee82dd73115e6b949e4f3f63695da35ea", "type": "github" }, "original": { @@ -938,14 +1135,14 @@ "inputs": { "flake-compat": "flake-compat_3", "nix-index-database": "nix-index-database", - "nixpkgs": "nixpkgs_9" + "nixpkgs": "nixpkgs_11" }, "locked": { - "lastModified": 1765855559, - "narHash": "sha256-AUT31hDJliW0fK9G7tfTEDD2me4rIXbBXPu1lf0mVHs=", + "lastModified": 1771150922, + "narHash": "sha256-+oQJun4CFDlOQRocbZpqQDj7agoy56/4ZjT1oUR7NOs=", "owner": "thiagokokada", "repo": "nix-alien", - "rev": "0eb86c42d1e33e8dbcf771cb67446319517a0a57", + "rev": "96045e886ba0dd45b27590e7c0c6e77bbb54033d", "type": "github" }, "original": { @@ -956,15 +1153,16 @@ }, "nix-gaming": { "inputs": { - "flake-parts": "flake-parts_5", - "nixpkgs": "nixpkgs_10" + "flake-parts": "flake-parts_6", + "git-hooks": "git-hooks", + "nixpkgs": "nixpkgs_12" }, "locked": { - "lastModified": 1768143458, - "narHash": "sha256-UZN5E58XMsvKoJBPy4+beQjTkYJti58qPC+m9GDyePY=", + "lastModified": 1773715019, + "narHash": "sha256-bJ2f57E9rEMdNc6hFIVvtWFF/WpIRCGJvT7HTnls/rg=", "owner": "fufexan", "repo": "nix-gaming", - "rev": "9d30426090a8d274eb20dc36bd28c6e37dc3589c", + "rev": "25efde53dc1b554e912bda2be1dc2508850dbe68", "type": "github" }, "original": { @@ -981,11 +1179,11 @@ ] }, "locked": { - "lastModified": 1762660502, - "narHash": "sha256-C9F1C31ys0V7mnp4EcDy7L1cLZw/sCTEXqqTtGnvu08=", + "lastModified": 1771130777, + "narHash": "sha256-UIKOwG0D9XVIJfNWg6+gENAvQP+7LO46eO0Jpe+ItJ0=", "owner": "nix-community", "repo": "nix-index-database", - "rev": "15c5451c63f4c612874a43846bfe3fa828b03eee", + "rev": "efec7aaad8d43f8e5194df46a007456093c40f88", "type": "github" }, "original": { @@ -1001,11 +1199,11 @@ ] }, "locked": { - "lastModified": 1765267181, - "narHash": "sha256-d3NBA9zEtBu2JFMnTBqWj7Tmi7R5OikoU2ycrdhQEws=", + "lastModified": 1773552174, + "narHash": "sha256-mHSRNrT1rjeYBgkAlj07dW3+1nFEgAd8Gu6lgyfT9DU=", "owner": "nix-community", "repo": "nix-index-database", - "rev": "82befcf7dc77c909b0f2a09f5da910ec95c5b78f", + "rev": "8faeb68130df077450451b6734a221ba0d6cde42", "type": "github" }, "original": { @@ -1033,15 +1231,15 @@ }, "nix-topology": { "inputs": { - "flake-parts": "flake-parts_6", - "nixpkgs": "nixpkgs_11" + "flake-parts": "flake-parts_7", + "nixpkgs": "nixpkgs_13" }, "locked": { - "lastModified": 1768068512, - "narHash": "sha256-pH5wkcNOiXy4MBjDTe6A1gml+7m+ULC3lYMBPMqdS1w=", + "lastModified": 1773727286, + "narHash": "sha256-n7gZKq9pJb0IoRsAPxZqjYWbm8/v2UdrZxARlmlKzvk=", "owner": "oddlama", "repo": "nix-topology", - "rev": "4367a2093c5ff74fc478466aebf41d47ce0cacb4", + "rev": "49b439d8749703989a42f28a4bfe198b2b315894", "type": "github" }, "original": { @@ -1094,11 +1292,11 @@ ] }, "locked": { - "lastModified": 1764234087, - "narHash": "sha256-NHF7QWa0ZPT8hsJrvijREW3+nifmF2rTXgS2v0tpcEA=", + "lastModified": 1769813415, + "narHash": "sha256-nnVmNNKBi1YiBNPhKclNYDORoHkuKipoz7EtVnXO50A=", "owner": "nix-community", "repo": "nixos-generators", - "rev": "032a1878682fafe829edfcf5fdfad635a2efe748", + "rev": "8946737ff703382fda7623b9fab071d037e897d5", "type": "github" }, "original": { @@ -1109,11 +1307,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1767185284, - "narHash": "sha256-ljDBUDpD1Cg5n3mJI81Hz5qeZAwCGxon4kQW3Ho3+6Q=", + "lastModified": 1773533765, + "narHash": "sha256-qonGfS2lzCgCl59Zl63jF6dIRRpvW3AJooBGMaXjHiY=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "40b1a28dce561bea34858287fbb23052c3ee63fe", + "rev": "f8e82243fd601afb9f59ad230958bd073795cbfe", "type": "github" }, "original": { @@ -1152,16 +1350,16 @@ "nixos-mailserver": { "inputs": { "blobs": "blobs", - "flake-compat": "flake-compat_4", - "git-hooks": "git-hooks", - "nixpkgs": "nixpkgs_12" + "flake-compat": "flake-compat_5", + "git-hooks": "git-hooks_2", + "nixpkgs": "nixpkgs_14" }, "locked": { - "lastModified": 1766321686, - "narHash": "sha256-icOWbnD977HXhveirqA10zoqvErczVs3NKx8Bj+ikHY=", + "lastModified": 1773599089, + "narHash": "sha256-3R+2SlbvKyYprAwWafUk7ATVKcJRBKlNhbm6Bn6t0HU=", "owner": "simple-nixos-mailserver", "repo": "nixos-mailserver", - "rev": "7d433bf89882f61621f95082e90a4ab91eb0bdd3", + "rev": "7dfcb21d35a4e8de09b38d822a0e0b7d64d61192", "type": "gitlab" }, "original": { @@ -1173,16 +1371,16 @@ "nixos-raspberrypi": { "inputs": { "argononed": "argononed", - "flake-compat": "flake-compat_5", + "flake-compat": "flake-compat_6", "nixos-images": "nixos-images", - "nixpkgs": "nixpkgs_13" + "nixpkgs": "nixpkgs_15" }, "locked": { - "lastModified": 1767357537, - "narHash": "sha256-2asmdcI7HWEb3UYcoLDOBJtZYTSQ3keSaFdJL0VtJ58=", + "lastModified": 1771867771, + "narHash": "sha256-v4UIlzztrAll/NPjsi0xWa5+fWcI9A4p8MLonL9EUeg=", "owner": "nvmd", "repo": "nixos-raspberrypi", - "rev": "f517fc39419afb6fbec31f9a44de7d41e3a9ad76", + "rev": "6b30596bea9047a7cbb55cb58e6f8a3efa4012e2", "type": "github" }, "original": { @@ -1208,13 +1406,28 @@ "type": "github" } }, + "nixpkgs-claude-code": { + "locked": { + "lastModified": 1773734432, + "narHash": "sha256-IF5ppUWh6gHGHYDbtVUyhwy/i7D261P7fWD1bPefOsw=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "cda48547b432e8d3b18b4180ba07473762ec8558", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs-lib": { "locked": { - "lastModified": 1765674936, - "narHash": "sha256-k00uTP4JNfmejrCLJOwdObYC9jHRrr/5M/a/8L2EIdo=", + "lastModified": 1772328832, + "narHash": "sha256-e+/T/pmEkLP6BHhYjx6GmwP5ivonQQn0bJdH9YrRB+Q=", "owner": "nix-community", "repo": "nixpkgs.lib", - "rev": "2075416fcb47225d9b68ac469a5c4801a9c4dd85", + "rev": "c185c7a5e5dd8f9add5b2f8ebeff00888b070742", "type": "github" }, "original": { @@ -1270,11 +1483,11 @@ }, "nixpkgs-lib_5": { "locked": { - "lastModified": 1765674936, - "narHash": "sha256-k00uTP4JNfmejrCLJOwdObYC9jHRrr/5M/a/8L2EIdo=", + "lastModified": 1772328832, + "narHash": "sha256-e+/T/pmEkLP6BHhYjx6GmwP5ivonQQn0bJdH9YrRB+Q=", "owner": "nix-community", "repo": "nixpkgs.lib", - "rev": "2075416fcb47225d9b68ac469a5c4801a9c4dd85", + "rev": "c185c7a5e5dd8f9add5b2f8ebeff00888b070742", "type": "github" }, "original": { @@ -1300,11 +1513,11 @@ }, "nixpkgs-lib_7": { "locked": { - "lastModified": 1767489562, - "narHash": "sha256-vyCgu90Lv0poRd3Ne2rQDUj0Jfj+Oilgtj3M0CoL2SM=", + "lastModified": 1773538553, + "narHash": "sha256-hohiyWALn8cXqk3FPnE3UADy03lRMaTV5iRzKCU86zM=", "owner": "nix-community", "repo": "nixpkgs.lib", - "rev": "c0acf4617d3542ad4c6be461c1a9b9059c937060", + "rev": "a5ed666a3c206de0019b4c9dafc3a51f352bc7e3", "type": "github" }, "original": { @@ -1315,11 +1528,11 @@ }, "nixpkgs-osu-lazer-bin": { "locked": { - "lastModified": 1768215754, - "narHash": "sha256-A6Vy0LyOc++3Sn1hZ9KcWNnrjhCuPrSW+avSO21+C8c=", + "lastModified": 1773734432, + "narHash": "sha256-IF5ppUWh6gHGHYDbtVUyhwy/i7D261P7fWD1bPefOsw=", "owner": "nixos", "repo": "nixpkgs", - "rev": "0709fab3b95b3f08c49bca58d2bda7a77f56d702", + "rev": "cda48547b432e8d3b18b4180ba07473762ec8558", "type": "github" }, "original": { @@ -1330,27 +1543,27 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1767313136, - "narHash": "sha256-16KkgfdYqjaeRGBaYsNrhPRRENs0qzkQVUooNHtoy2w=", + "lastModified": 1773610124, + "narHash": "sha256-EpC7ELOKmb+xXaqpK5ZRpJ5g9fxxg6tWny7/rUBfrwk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ac62194c3917d5f474c1a844b6fd6da2db95077d", + "rev": "9fe1300f4360e13f39d6d1d006e54fd5093e9ad5", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-25.05", + "ref": "nixos-25.11", "repo": "nixpkgs", "type": "github" } }, "nixpkgs-stable_2": { "locked": { - "lastModified": 1769089682, - "narHash": "sha256-9yA/LIuAVQq0lXelrZPjLuLVuZdm03p8tfmHhnDIkms=", + "lastModified": 1773705440, + "narHash": "sha256-xB30bbAp0e7ogSEYyc126mAJMt4FRFh8wtm6ADE1xuM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "078d69f03934859a181e81ba987c2bb033eebfc5", + "rev": "48652e9d5aea46e555b3df87354280d4f29cd3a3", "type": "github" }, "original": { @@ -1362,16 +1575,16 @@ }, "nixpkgs-wayland": { "inputs": { - "flake-compat": "flake-compat_6", + "flake-compat": "flake-compat_7", "lib-aggregate": "lib-aggregate", - "nixpkgs": "nixpkgs_15" + "nixpkgs": "nixpkgs_17" }, "locked": { - "lastModified": 1767549040, - "narHash": "sha256-D9KfigGCqxux84Gtt9DN6sL3zsqhvwOZggOeBGnlnok=", + "lastModified": 1773717629, + "narHash": "sha256-mSotWpwS4W+Ilk8HghvstC2xogN6psD38ExVuojS7YA=", "owner": "nix-community", "repo": "nixpkgs-wayland", - "rev": "8f8a667d51a64b8535dc637c26e493a8aae2baff", + "rev": "2b00cf02c1b7054e3dbc4ef77126a2c14c62fc1d", "type": "github" }, "original": { @@ -1382,11 +1595,43 @@ }, "nixpkgs_10": { "locked": { - "lastModified": 1768032153, - "narHash": "sha256-6kD1MdY9fsE6FgSwdnx29hdH2UcBKs3/+JJleMShuJg=", + "lastModified": 1772736753, + "narHash": "sha256-au/m3+EuBLoSzWUCb64a/MZq6QUtOV8oC0D9tY2scPQ=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "917fec990948658ef1ccd07cef2a1ef060786846", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_11": { + "locked": { + "lastModified": 1771008912, + "narHash": "sha256-gf2AmWVTs8lEq7z/3ZAsgnZDhWIckkb+ZnAo5RzSxJg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3146c6aa9995e7351a398e17470e15305e6e18ff", + "rev": "a82ccc39b39b621151d6732718e3e250109076fa", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_12": { + "locked": { + "lastModified": 1773507054, + "narHash": "sha256-Q8U5VXgrcxmCxPtCCJCIZkcAX3FCZwGh1GNVIXxMND0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e80236013dc8b77aa49ca90e7a12d86f5d8d64c9", "type": "github" }, "original": { @@ -1396,7 +1641,7 @@ "type": "github" } }, - "nixpkgs_11": { + "nixpkgs_13": { "locked": { "lastModified": 1766651565, "narHash": "sha256-QEhk0eXgyIqTpJ/ehZKg9IKS7EtlWxF3N7DXy42zPfU=", @@ -1412,13 +1657,13 @@ "type": "github" } }, - "nixpkgs_12": { + "nixpkgs_14": { "locked": { - "lastModified": 1764374374, - "narHash": "sha256-naS7hg/D1yLKSZoENx9gvsPLFiNEOTcqamJSu0OEvCA=", + "lastModified": 1773046814, + "narHash": "sha256-3CEw64UyzEk5QjfbcXNIl4TfmIpa2oY+duuo6aiawcU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "6a49303095abc094ee77dc243a9e351b642e8e75", + "rev": "0c6c0dd2469abaa216599bb19bbf77a328af6564", "type": "github" }, "original": { @@ -1428,13 +1673,13 @@ "type": "github" } }, - "nixpkgs_13": { + "nixpkgs_15": { "locked": { - "lastModified": 1767323696, - "narHash": "sha256-6preRiqOYkAVsZmCIaVqiyAwEpbtfVUC5HYfN6sJsrc=", + "lastModified": 1771867432, + "narHash": "sha256-KOb/xJgNRoUDD7y42/lh2a1+akUQ7OYuBdwX/CZevFY=", "owner": "nvmd", "repo": "nixpkgs", - "rev": "31926ce9afb1c915fa4190b77ca9be389ccaf18e", + "rev": "2597cb7e564b9004c9d3182afb29b37ae842411a", "type": "github" }, "original": { @@ -1444,13 +1689,13 @@ "type": "github" } }, - "nixpkgs_14": { + "nixpkgs_16": { "locked": { - "lastModified": 1768127708, - "narHash": "sha256-1Sm77VfZh3mU0F5OqKABNLWxOuDeHIlcFjsXeeiPazs=", + "lastModified": 1773646010, + "narHash": "sha256-iYrs97hS7p5u4lQzuNWzuALGIOdkPXvjz7bviiBjUu8=", "owner": "nixos", "repo": "nixpkgs", - "rev": "ffbc9f8cbaacfb331b6017d5a5abb21a492c9a38", + "rev": "5b2c2d84341b2afb5647081c1386a80d7a8d8605", "type": "github" }, "original": { @@ -1460,13 +1705,13 @@ "type": "github" } }, - "nixpkgs_15": { + "nixpkgs_17": { "locked": { - "lastModified": 1767379071, - "narHash": "sha256-EgE0pxsrW9jp9YFMkHL9JMXxcqi/OoumPJYwf+Okucw=", + "lastModified": 1773646010, + "narHash": "sha256-iYrs97hS7p5u4lQzuNWzuALGIOdkPXvjz7bviiBjUu8=", "owner": "nixos", "repo": "nixpkgs", - "rev": "fb7944c166a3b630f177938e478f0378e64ce108", + "rev": "5b2c2d84341b2afb5647081c1386a80d7a8d8605", "type": "github" }, "original": { @@ -1476,13 +1721,13 @@ "type": "github" } }, - "nixpkgs_16": { + "nixpkgs_18": { "locked": { - "lastModified": 1767026758, - "narHash": "sha256-7fsac/f7nh/VaKJ/qm3I338+wAJa/3J57cOGpXi0Sbg=", + "lastModified": 1770380644, + "narHash": "sha256-P7dWMHRUWG5m4G+06jDyThXO7kwSk46C1kgjEWcybkE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "346dd96ad74dc4457a9db9de4f4f57dab2e5731d", + "rev": "ae67888ff7ef9dff69b3cf0cc0fbfbcd3a722abe", "type": "github" }, "original": { @@ -1492,13 +1737,13 @@ "type": "github" } }, - "nixpkgs_17": { + "nixpkgs_19": { "locked": { - "lastModified": 1768127708, - "narHash": "sha256-1Sm77VfZh3mU0F5OqKABNLWxOuDeHIlcFjsXeeiPazs=", + "lastModified": 1773646010, + "narHash": "sha256-iYrs97hS7p5u4lQzuNWzuALGIOdkPXvjz7bviiBjUu8=", "owner": "nixos", "repo": "nixpkgs", - "rev": "ffbc9f8cbaacfb331b6017d5a5abb21a492c9a38", + "rev": "5b2c2d84341b2afb5647081c1386a80d7a8d8605", "type": "github" }, "original": { @@ -1508,34 +1753,34 @@ "type": "github" } }, - "nixpkgs_18": { + "nixpkgs_2": { "locked": { - "lastModified": 1764947035, - "narHash": "sha256-EYHSjVM4Ox4lvCXUMiKKs2vETUSL5mx+J2FfutM7T9w=", + "lastModified": 1773646010, + "narHash": "sha256-iYrs97hS7p5u4lQzuNWzuALGIOdkPXvjz7bviiBjUu8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "a672be65651c80d3f592a89b3945466584a22069", + "rev": "5b2c2d84341b2afb5647081c1386a80d7a8d8605", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixpkgs-unstable", + "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } }, - "nixpkgs_2": { + "nixpkgs_20": { "locked": { - "lastModified": 1768127708, - "narHash": "sha256-1Sm77VfZh3mU0F5OqKABNLWxOuDeHIlcFjsXeeiPazs=", + "lastModified": 1770073757, + "narHash": "sha256-Vy+G+F+3E/Tl+GMNgiHl9Pah2DgShmIUBJXmbiQPHbI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ffbc9f8cbaacfb331b6017d5a5abb21a492c9a38", + "rev": "47472570b1e607482890801aeaf29bfb749884f6", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-unstable", + "ref": "nixpkgs-unstable", "repo": "nixpkgs", "type": "github" } @@ -1620,11 +1865,11 @@ }, "nixpkgs_8": { "locked": { - "lastModified": 1748026106, - "narHash": "sha256-6m1Y3/4pVw1RWTsrkAK2VMYSzG4MMIj7sqUy7o8th1o=", + "lastModified": 1768564909, + "narHash": "sha256-Kell/SpJYVkHWMvnhqJz/8DqQg2b6PguxVWOuadbHCc=", "owner": "nixos", "repo": "nixpkgs", - "rev": "063f43f2dbdef86376cc29ad646c45c46e93234c", + "rev": "e4bae1bd10c9c57b2cf517953ab70060a828ee6f", "type": "github" }, "original": { @@ -1636,32 +1881,32 @@ }, "nixpkgs_9": { "locked": { - "lastModified": 1762977756, - "narHash": "sha256-4PqRErxfe+2toFJFgcRKZ0UI9NSIOJa+7RXVtBhy4KE=", + "lastModified": 1773840656, + "narHash": "sha256-9tpvMGFteZnd3gRQZFlRCohVpqooygFuy9yjuyRL2C0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c5ae371f1a6a7fd27823bc500d9390b38c05fa55", + "rev": "9cf7092bdd603554bd8b63c216e8943cf9b12512", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-unstable", + "ref": "nixpkgs-unstable", "repo": "nixpkgs", "type": "github" } }, "nixvim": { "inputs": { - "flake-parts": "flake-parts_7", - "nixpkgs": "nixpkgs_16", - "systems": "systems_9" + "flake-parts": "flake-parts_8", + "nixpkgs": "nixpkgs_18", + "systems": "systems_10" }, "locked": { - "lastModified": 1767906546, - "narHash": "sha256-AoSWS8+P+7hQ/jIdv0wBjgH1MvnerdWBFXO4GV3JoQs=", + "lastModified": 1772402258, + "narHash": "sha256-3DmCFOdmbkFML1/G9gj8Wb+rCCZFPOQtNoMCpqOF8SA=", "owner": "nix-community", "repo": "nixvim", - "rev": "7eb8f36f085b85a2aeff929aff52d0f6aa14e000", + "rev": "21ae25e13b01d3b4cdc750b5f9e7bad68b150c10", "type": "github" }, "original": { @@ -1672,15 +1917,15 @@ }, "nur": { "inputs": { - "flake-parts": "flake-parts_8", - "nixpkgs": "nixpkgs_17" + "flake-parts": "flake-parts_9", + "nixpkgs": "nixpkgs_19" }, "locked": { - "lastModified": 1768215369, - "narHash": "sha256-XVSPU2VguCBaetUKU5Zalkv/AcV3lhbhKhuQSDQjxWI=", + "lastModified": 1773735046, + "narHash": "sha256-3Uaz0VwkveT9kjqUFtCCqx+Pw0kJ1u2UOiesLLJx7h8=", "owner": "nix-community", "repo": "NUR", - "rev": "40325625c5960a58126c62886c35dee28b84ef53", + "rev": "e00359b9aca77a8390493552c0d6eb89d5e43694", "type": "github" }, "original": { @@ -1689,6 +1934,22 @@ "type": "github" } }, + "nvim-base46": { + "flake": false, + "locked": { + "lastModified": 1773606507, + "narHash": "sha256-JfhmtphN4n9UHPV2gHuj8igaYNq8GUTO0SMxwYVGzwk=", + "owner": "AvengeMedia", + "repo": "base46", + "rev": "358dba7d0fb10af5671cf3427178e8057102bc6c", + "type": "github" + }, + "original": { + "owner": "AvengeMedia", + "repo": "base46", + "type": "github" + } + }, "plasma-manager": { "inputs": { "home-manager": [ @@ -1699,11 +1960,11 @@ ] }, "locked": { - "lastModified": 1767662275, - "narHash": "sha256-d5Q1GmQ+sW1Bt8cgDE0vOihzLaswsm8cSdg8124EqXE=", + "lastModified": 1772361940, + "narHash": "sha256-B1Cz+ydL1iaOnGlwOFld/C8lBECPtzhiy/pP93/CuyY=", "owner": "pjones", "repo": "plasma-manager", - "rev": "51816be33a1ff0d4b22427de83222d5bfa96d30e", + "rev": "a4b33606111c9c5dcd10009042bb710307174f51", "type": "github" }, "original": { @@ -1734,16 +1995,16 @@ }, "pre-commit-hooks_2": { "inputs": { - "flake-compat": "flake-compat_7", - "gitignore": "gitignore_3", - "nixpkgs": "nixpkgs_18" + "flake-compat": "flake-compat_8", + "gitignore": "gitignore_4", + "nixpkgs": "nixpkgs_20" }, "locked": { - "lastModified": 1767281941, - "narHash": "sha256-6MkqajPICgugsuZ92OMoQcgSHnD6sJHwk8AxvMcIgTE=", + "lastModified": 1772893680, + "narHash": "sha256-JDqZMgxUTCq85ObSaFw0HhE+lvdOre1lx9iI6vYyOEs=", "owner": "cachix", "repo": "pre-commit-hooks.nix", - "rev": "f0927703b7b1c8d97511c4116eb9b4ec6645a0fa", + "rev": "8baab586afc9c9b57645a734c820e4ac0a604af9", "type": "github" }, "original": { @@ -1792,6 +2053,8 @@ "impermanence": "impermanence", "leetcode-nvim": "leetcode-nvim", "lix-module": "lix-module", + "llm-agents": "llm-agents", + "mcp-servers-nix": "mcp-servers-nix", "niri": "niri", "nix-alien": "nix-alien", "nix-gaming": "nix-gaming", @@ -1803,15 +2066,17 @@ "nixos-hardware": "nixos-hardware", "nixos-mailserver": "nixos-mailserver", "nixos-raspberrypi": "nixos-raspberrypi", - "nixpkgs": "nixpkgs_14", + "nixpkgs": "nixpkgs_16", + "nixpkgs-claude-code": "nixpkgs-claude-code", "nixpkgs-osu-lazer-bin": "nixpkgs-osu-lazer-bin", "nixpkgs-wayland": "nixpkgs-wayland", "nixvim": "nixvim", "nur": "nur", + "nvim-base46": "nvim-base46", "plasma-manager": "plasma-manager", "pre-commit-hooks": "pre-commit-hooks_2", "shadow-nix": "shadow-nix", - "systems": "systems_10", + "systems": "systems_11", "vpsadminos": "vpsadminos" } }, @@ -1861,6 +2126,21 @@ "type": "github" } }, + "systems_11": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, "systems_2": { "locked": { "lastModified": 1681028828, @@ -1981,6 +2261,27 @@ "type": "github" } }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "llm-agents", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773297127, + "narHash": "sha256-6E/yhXP7Oy/NbXtf1ktzmU8SdVqJQ09HC/48ebEGBpk=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "71b125cd05fbfd78cab3e070b73544abe24c5016", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, "utils": { "inputs": { "systems": "systems_2" @@ -2002,11 +2303,11 @@ "vpsadminos": { "flake": false, "locked": { - "lastModified": 1767796149, - "narHash": "sha256-yGpWUuiHyCH18s8cYfLp8d98dqPy/BkAcw/KdtjclUs=", + "lastModified": 1773721770, + "narHash": "sha256-D4UZHzgYux/2F+67PDb1GsvJBfH0BxaR1V9WskkJp48=", "owner": "vpsfreecz", "repo": "vpsadminos", - "rev": "861043cfdbc47d41618d4fe496f0208f7cb4ab5d", + "rev": "13311d907a41ffcd1833f33a6329768c9a2c8535", "type": "github" }, "original": { @@ -2035,11 +2336,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1769356222, - "narHash": "sha256-Q0BVubV9ZnmLs506EhBSPglM+YJK56wsQNbeecvWPUo=", + "lastModified": 1773622265, + "narHash": "sha256-wToKwH7IgWdGLMSIWksEDs4eumR6UbbsuPQ42r0oTXQ=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "cf14278b92b0a91d01587f09b4b00ea655ae24e6", + "rev": "a879e5e0896a326adc79c474bf457b8b99011027", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index cd5c258a..5e2347b8 100644 --- a/flake.nix +++ b/flake.nix @@ -24,6 +24,7 @@ # --- YOUR DEPENDENCIES --- systems.url = "github:nix-systems/default"; nixpkgs-osu-lazer-bin.url = "github:nixos/nixpkgs"; + nixpkgs-claude-code.url = "github:nixos/nixpkgs"; pre-commit-hooks.url = "github:cachix/pre-commit-hooks.nix"; home-manager = { url = "github:nix-community/home-manager"; @@ -88,6 +89,10 @@ url = "github:kawre/leetcode.nvim"; flake = false; }; + nvim-base46 = { + url = "github:AvengeMedia/base46"; + flake = false; + }; nix-index-database = { url = "github:nix-community/nix-index-database"; inputs.nixpkgs.follows = "nixpkgs"; @@ -121,6 +126,8 @@ url = "github:AvengeMedia/danksearch"; inputs.nixpkgs.follows = "nixpkgs"; }; + llm-agents.url = "github:numtide/llm-agents.nix"; + mcp-servers-nix.url = "github:natsukium/mcp-servers-nix"; # neovim-nightly-overlay.url = "github:nix-community/neovim-nightly-overlay"; # kitty-scrollback-nvim = { @@ -166,6 +173,7 @@ "https://cache.lix.systems" "https://devenv.cachix.org" "https://niri.cachix.org" + "https://cache.numtide.com" # "https://hyprland.cachix.org" # "https://anyrun.cachix.org" ]; @@ -180,6 +188,7 @@ "cache.lix.systems:aBnZUw8zA7H35Cz2RyKFVs3H4PlGTLawyY5KRbvJR8o=" "devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw=" "niri.cachix.org-1:Wv0OmO7PsuocRKzfDoJ3mulSl7Z6oezYhGhR+3W2964=" + "niks3.numtide.com-1:DTx8wZduET09hRmMtKdQDxNNthLQETkc/yaX7M4qK0g=" # "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" # "anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s=" ];