diff --git a/home/base/tui/editors/helix/default.nix b/home/base/tui/editors/helix/default.nix index 8319476d..d3405a4c 100644 --- a/home/base/tui/editors/helix/default.nix +++ b/home/base/tui/editors/helix/default.nix @@ -1,18 +1,27 @@ -{ pkgs, helix, ... }: +{ + config, + pkgs, + helix, + ... +}: let helixPackages = helix.packages.${pkgs.stdenv.hostPlatform.system}; in { + # to make steel work, we need to git clone this repo to your home directory. + home.sessionVariables.HELIX_STEEL_CONFIG = "${config.home.homeDirectory}/nix-config/home/base/tui/editors/helix/steel"; + home.packages = with pkgs; [ steel ]; programs.helix = { enable = true; + # enable steel as the plugin system # https://github.com/helix-editor/helix/pull/8675 + # https://github.com/mattwparas/helix/blob/steel-event-system/STEEL.md package = helixPackages.default.overrideAttrs (prevAttrs: { - # enable steel as the plugin system cargoBuildFeatures = prevAttrs.cargoBuildFeatures or [ ] ++ [ "steel" ]; }); settings = { diff --git a/home/base/tui/editors/helix/steel/helix.scm b/home/base/tui/editors/helix/steel/helix.scm new file mode 100644 index 00000000..0915c31a --- /dev/null +++ b/home/base/tui/editors/helix/steel/helix.scm @@ -0,0 +1,40 @@ +;; The helix.scm module will be loaded first before anything else, +;; the runtime will require this module, and any functions exported +;; will now be available to be used as typed commands, e.g. :git-add :open-helix-scm + +(require "helix/editor.scm") +(require (prefix-in helix. "helix/commands.scm")) +(require (prefix-in helix.static. "helix/static.scm")) + +(provide shell git-add open-helix-scm open-init-scm) + +(define (current-path) + (let* ([focus (editor-focus)] + [focus-doc-id (editor->doc-id focus)]) + (editor-document->path focus-doc-id))) + +;;@doc +;; Specialized shell implementation, where % is a wildcard for the current file +(define (shell . args) + (helix.run-shell-command + (string-join + ;; Replace the % with the current file + (map (lambda (x) (if (equal? x "%") (current-path) x)) args) + " "))) + +;;@doc +;; Adds the current file to git +(define (git-add) + (shell "git" "add" "%")) + +;;@doc +;; Open the helix.scm file +(define (open-helix-scm) + (helix.open (helix.static.get-helix-scm-path))) + +;;@doc +;; Opens the init.scm file +(define (open-init-scm) + (helix.open (helix.static.get-init-scm-path))) + + diff --git a/home/base/tui/editors/helix/steel/init.scm b/home/base/tui/editors/helix/steel/init.scm new file mode 100644 index 00000000..5485d805 --- /dev/null +++ b/home/base/tui/editors/helix/steel/init.scm @@ -0,0 +1,24 @@ +;; The init.scm file is run at the top level, immediately after the helix.scm module is required. +;; The helix context is available here, so you can interact with the editor. + +;; configure the LSP for steel +(require "helix/configuration.scm") +(define-lsp "steel-language-server" (command "steel-language-server") (args '())) +(define-language "scheme" + (language-servers '("steel-language-server"))) + +;; show splash screen - when you open with no argument +(require "mattwparas-helix-package/splash.scm") +(when (equal? (command-line) '("hx")) + (show-splash)) + +;; Terminal & shell +(require "steel-pty/term.scm") +(set-default-shell! "nu") + +;; File Watcher +(require "helix-file-watcher/file-watcher.scm") +(spawn-watcher) + +;; File Tree +(require "mattwparas-helix-package/cogs/file-tree.scm") diff --git a/hosts/idols-ai/preservation.nix b/hosts/idols-ai/preservation.nix index 746b8f0e..46e53fe4 100644 --- a/hosts/idols-ai/preservation.nix +++ b/hosts/idols-ai/preservation.nix @@ -149,6 +149,9 @@ in ".local/share/nvim" ".local/state/nvim" + # helix & steel + ".local/share/steel" + # doom-emacs # "org" # org files # ".config/emacs"