{ pkgs, lib, config, ... }: let # wgsl_analyzer = pkgs.rustPlatform.buildRustPackage rec { # pname = "wgsl_analyzer"; # version = "main"; # src = pkgs.fetchFromGitHub { # owner = "wgsl-analyzer"; # repo = "wgsl-analyzer"; # rev = version; # sha256 = "bhosTihbW89vkqp1ua0C1HGLJJdCNfRde98z4+IjkOc="; # }; # cargoLock.lockFile = ./WGSL.lock; # cargoLock.outputHashes = { # "naga-0.14.0" = "Wo5WJzi1xdmqx23W1nuIUXkfKEzXVwL+dZu5hBOhHW8="; # "la-arena-0.3.1" = "7/bfvV5kS13zLSR8VCsmsgoWa7PHidFZTWE06zzVK5s="; # "paths-0.0.0" = "7/bfvV5kS13zLSR8VCsmsgoWa7PHidFZTWE06zzVK5s="; # "stdx-0.0.0" = "7/bfvV5kS13zLSR8VCsmsgoWa7PHidFZTWE06zzVK5s="; # "text-edit-0.0.0" = "7/bfvV5kS13zLSR8VCsmsgoWa7PHidFZTWE06zzVK5s="; # "vfs-0.0.0" = "7/bfvV5kS13zLSR8VCsmsgoWa7PHidFZTWE06zzVK5s="; # }; # }; wgsl_analyzer = with pkgs; stdenv.mkDerivation rec { pname = "wgsl_analyzer"; version = "0.8.1"; src = fetchurl { url = "https://github.com/wgsl-analyzer/wgsl-analyzer/releases/download/v${version}/${pname}-linux-x64"; hash = "sha256-WRc9fHUw9/KHD5BzUX3nd+0sRkc7i8axsXhHUZFOUeY="; }; nativeBuildInputs = [ autoPatchelfHook ]; buildInputs = [ openssl zlib ]; sourceRoot = "."; phases = [ "installPhase" "patchPhase" ]; installPhase = '' mkdir -p $out/bin cp $src $out/bin/${pname} chmod +x $out/bin/${pname} ''; # installPhase = '' # runHook preInstall # install -m755 -D wgsl-analyzer-linux-x64 $out/bin/${pname} # runHook postInstall # ''; }; in { options.mods.terminal.development.enable = lib.mkEnableOption "enables cli editor"; config = lib.mkIf config.mods.terminal.development.enable { home.packages = with pkgs; [ # Nix nil # Rust rust-analyzer lldb_18 # Shaders glsl_analyzer # wgsl_analyzer ]; programs.direnv = { enable = true; nix-direnv.enable = true; enableZshIntegration = lib.mkIf config.mods.terminal.zsh.enable true; }; home.sessionVariables.EDITOR = "hx"; programs.zsh.sessionVariables.EDITOR = "hx"; programs.helix = { enable = true; settings = { keys.normal = { "esc" = [ "collapse_selection" "keep_primary_selection" ]; }; editor = { line-number = "relative"; completion-replace = true; bufferline = "always"; rulers = [ 80 ]; soft-wrap.enable = true; indent-guides.render = true; cursor-shape = { normal = "block"; insert = "bar"; select = "underline"; }; }; }; languages.language-server = { glsl.command = "${pkgs.glsl_analyzer}/bin/glsl_analyzer"; wgsl.command = "${wgsl_analyzer}/bin/wgsl_analyzer"; }; languages.language = [ { name = "nix"; auto-format = true; formatter.command = "${pkgs.nixfmt}/bin/nixfmt"; } { name = "rust"; auto-format = true; formatter.command = "rustfmt"; } { name = "glsl"; language-servers = [ "glsl" ]; } { name = "wgsl"; language-servers = [ "wgsl" ]; } ]; }; }; }