216 lines
		
	
	
	
		
			6.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			216 lines
		
	
	
	
		
			6.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{pkgs, ...}: let
 | 
						|
  yazi =
 | 
						|
    pkgs.writeText "open_in_helix_from_yazi.zsh"
 | 
						|
    ''
 | 
						|
      #! ~/.nix-profile/bin/zsh
 | 
						|
      files=(''${(fqq)"$( yazi --chooser-file=/dev/stdout | cat )"})
 | 
						|
      zellij action toggle-floating-panes
 | 
						|
      zellij action write 27 # send escape-key
 | 
						|
      zellij action write-chars ":open $files"
 | 
						|
      zellij action write 13 # send enter-key
 | 
						|
      zellij action toggle-floating-panes
 | 
						|
      zellij action close-pane
 | 
						|
    '';
 | 
						|
  jupyter =
 | 
						|
    pkgs.writeText "run_jupyter_from_helix.zsh"
 | 
						|
    ''
 | 
						|
      #! ~/.nix-profile/bin/zsh
 | 
						|
      is_new() {
 | 
						|
        new=0;
 | 
						|
        mkdir -p /tmp/rjh;
 | 
						|
        if [[ -a "/tmp/rjh/$(pwd | tr \"/\" -).json" ]]; then
 | 
						|
          new=1
 | 
						|
        fi
 | 
						|
        return $new
 | 
						|
      }
 | 
						|
 | 
						|
      is_new && zellij run -f -n "jupyter console" -- direnv exec . jupyter console --kernel="$1" -f="/tmp/rjh/$(pwd | tr \"/\" -).json" --ZMQTerminalInteractiveShell.include_other_output=True --ZMQTerminalInteractiveShell.other_output_prefix=''' && sleep 3
 | 
						|
      rm -f /tmp/pipe-rjh
 | 
						|
      mkfifo /tmp/pipe-rjh
 | 
						|
      cat > /tmp/pipe-rjh
 | 
						|
      zellij run -f -n "REPL" -- direnv exec . just send < /tmp/pipe-rjh
 | 
						|
      rm /tmp/pipe-rjh
 | 
						|
 | 
						|
    '';
 | 
						|
in {
 | 
						|
  programs.helix = {
 | 
						|
    enable = true;
 | 
						|
    defaultEditor = true;
 | 
						|
 | 
						|
    settings = {
 | 
						|
      # theme = "catppuccin_macchiato"; # Don't need this because the module themes it for us
 | 
						|
      keys.normal.backspace = {
 | 
						|
        b = ":sh zellij run -f -n 'build code' -- direnv exec . just build";
 | 
						|
        r = ":sh zellij run -f -n 'run code' -- direnv exec . just run";
 | 
						|
        t = ":sh zellij run -f -n 'test code' -- direnv exec . just test";
 | 
						|
        g = ":sh zellij run -fc -n 'lazygit' -- lazygit";
 | 
						|
        f = ":sh zellij run --floating -n 'yazi picker' -- zsh ~/.config/helix/open_in_helix_from_yazi.zsh ";
 | 
						|
        j = ":pipe-to just jupyter";
 | 
						|
      };
 | 
						|
      editor = {
 | 
						|
        auto-save = {
 | 
						|
          focus-lost = true;
 | 
						|
          after-delay.enable = true;
 | 
						|
          after-delay.timeout = 3000;
 | 
						|
        };
 | 
						|
        line-number = "relative";
 | 
						|
        lsp.display-messages = true;
 | 
						|
        lsp.display-inlay-hints = true;
 | 
						|
        cursor-shape = {
 | 
						|
          insert = "bar";
 | 
						|
          normal = "block";
 | 
						|
          select = "underline";
 | 
						|
        };
 | 
						|
        cursorline = true;
 | 
						|
        bufferline = "always";
 | 
						|
        color-modes = true;
 | 
						|
        soft-wrap = {
 | 
						|
          enable = true;
 | 
						|
          max-wrap = 25;
 | 
						|
          wrap-indicator = "";
 | 
						|
        };
 | 
						|
      };
 | 
						|
    };
 | 
						|
    languages = {
 | 
						|
      language = [
 | 
						|
        {
 | 
						|
          name = "python";
 | 
						|
          language-id = "python";
 | 
						|
          auto-format = true;
 | 
						|
          file-types = ["py"];
 | 
						|
          language-servers = ["ruff" "scls" "pylsp"];
 | 
						|
        }
 | 
						|
        {
 | 
						|
          name = "typst";
 | 
						|
          language-id = "typst";
 | 
						|
          auto-format = false;
 | 
						|
          file-types = ["typ"];
 | 
						|
          language-servers = ["typst-lsp" "scls"];
 | 
						|
        }
 | 
						|
        {
 | 
						|
          name = "rust";
 | 
						|
          language-id = "rust";
 | 
						|
          auto-format = true;
 | 
						|
          file-types = ["rs"];
 | 
						|
          roots = ["Cargo.lock"];
 | 
						|
          language-servers = ["rust-analyzer" "scls"];
 | 
						|
        }
 | 
						|
        {
 | 
						|
          name = "stub";
 | 
						|
          scope = "text.stub";
 | 
						|
          file-types = [];
 | 
						|
          shebangs = [];
 | 
						|
          roots = [];
 | 
						|
          auto-format = false;
 | 
						|
          language-servers = ["scls"];
 | 
						|
        }
 | 
						|
        {
 | 
						|
          name = "nix";
 | 
						|
          language-id = "nix";
 | 
						|
          auto-format = true;
 | 
						|
          file-types = ["nix"];
 | 
						|
          roots = ["flake.lock" "flake.nix"];
 | 
						|
          language-servers = ["nil" "scls"];
 | 
						|
          formatter = {
 | 
						|
            command = "alejandra";
 | 
						|
            args = ["-q"];
 | 
						|
          };
 | 
						|
        }
 | 
						|
        {
 | 
						|
          name = "html";
 | 
						|
          language-id = "html";
 | 
						|
          auto-format = true;
 | 
						|
          file-types = ["htm" "html"];
 | 
						|
          language-servers = ["vscode-html-language-server" "vscode-eslint-language-server"];
 | 
						|
        }
 | 
						|
        {
 | 
						|
          name = "css";
 | 
						|
          language-id = "css";
 | 
						|
          auto-format = true;
 | 
						|
          file-types = ["css"];
 | 
						|
          language-servers = ["vscode-css-language-server" "vscode-eslint-language-server"];
 | 
						|
        }
 | 
						|
        {
 | 
						|
          name = "json";
 | 
						|
          language-id = "json";
 | 
						|
          auto-format = true;
 | 
						|
          file-types = ["json"];
 | 
						|
          language-servers = ["vscode-json-language-server" "vscode-eslint-language-server"];
 | 
						|
        }
 | 
						|
      ];
 | 
						|
      language-server = {
 | 
						|
        vscode-html-language-server = {
 | 
						|
          command = "vscode-html-language-server";
 | 
						|
        };
 | 
						|
        vscode-css-language-server = {
 | 
						|
          command = "vscode-css-language-server";
 | 
						|
        };
 | 
						|
        vscode-eslint-language-server = {
 | 
						|
          command = "vscode-eslint-language-server";
 | 
						|
        };
 | 
						|
        vscode-json-language-server = {
 | 
						|
          command = "vscode-json-language-server";
 | 
						|
        };
 | 
						|
        pylsp = {
 | 
						|
          config.pylsp.plugins = {
 | 
						|
            flake8 = {enabled = false;};
 | 
						|
            autopep8 = {enabled = false;};
 | 
						|
            mccabe = {enabled = false;};
 | 
						|
            pycodestyle = {enabled = false;};
 | 
						|
            pyflakes = {enabled = false;};
 | 
						|
            pylint = {enabled = false;};
 | 
						|
            yapf = {enabled = false;};
 | 
						|
            ruff = {
 | 
						|
              enabled = true;
 | 
						|
              select = ["E" "F" "UP" "B" "SIM" "I" "PD" "NPY" "PERF" "FURB" "DOC" "TRY" "W" "R" "PL" "TCH" "Q" "PT" "ICN" "C4" "COM" "FBT" "S" "N"];
 | 
						|
              ignore = ["F401"];
 | 
						|
              lineLength = 120;
 | 
						|
            };
 | 
						|
          };
 | 
						|
        };
 | 
						|
        ruff = {
 | 
						|
          command = "ruff-lsp";
 | 
						|
        };
 | 
						|
        typst-lsp = {
 | 
						|
          command = "typst-lsp";
 | 
						|
        };
 | 
						|
        rust-analyzer = {
 | 
						|
          command = "rust-analyzer";
 | 
						|
        };
 | 
						|
        nil = {
 | 
						|
          command = "nil";
 | 
						|
        };
 | 
						|
        scls = {
 | 
						|
          command = "simple-completion-language-server";
 | 
						|
          config = {
 | 
						|
            max_completion_items = 20;
 | 
						|
            snippets_first = true;
 | 
						|
            feature_words = true;
 | 
						|
            feature_snippets = true;
 | 
						|
            feature_unicode_input = true;
 | 
						|
            feature_paths = true;
 | 
						|
          };
 | 
						|
        };
 | 
						|
      };
 | 
						|
    };
 | 
						|
  };
 | 
						|
  home.file = {
 | 
						|
    "helix" = {
 | 
						|
      source = ./snippets.toml;
 | 
						|
      target = ".config/helix/external-snippets.toml";
 | 
						|
    };
 | 
						|
  };
 | 
						|
 | 
						|
  home.file = {
 | 
						|
    "yazi" = {
 | 
						|
      source = "${yazi}";
 | 
						|
      target = ".config/helix/open_in_helix_from_yazi.zsh";
 | 
						|
    };
 | 
						|
  };
 | 
						|
  home.file = {
 | 
						|
    "jupyter" = {
 | 
						|
      source = "${jupyter}";
 | 
						|
      target = ".config/helix/run_jupyter_from_helix.zsh";
 | 
						|
    };
 | 
						|
  };
 | 
						|
}
 |