From 1073297f5a424b0fa17c5132dcbf58208f10f5ba Mon Sep 17 00:00:00 2001 From: Christoph Hollizeck Date: Thu, 10 Oct 2024 21:33:30 +0200 Subject: [PATCH] helix: added flake input added initial configuration and enable it on main machine --- flake.nix | 5 + modules/nixos/apps/cli-apps/helix/default.nix | 148 ++++++++++++++---- systems/x86_64-linux/yggdrasil/default.nix | 1 + 3 files changed, 125 insertions(+), 29 deletions(-) diff --git a/flake.nix b/flake.nix index c25291d..9fcaf3d 100644 --- a/flake.nix +++ b/flake.nix @@ -55,6 +55,11 @@ inputs.nixpkgs.follows = "nixpkgs"; }; + helix = { + url = "github:helix-editor/helix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + # GPG default configuration gpg-base-conf = { url = "github:drduh/config"; diff --git a/modules/nixos/apps/cli-apps/helix/default.nix b/modules/nixos/apps/cli-apps/helix/default.nix index 2dfe93a..7d80f3c 100644 --- a/modules/nixos/apps/cli-apps/helix/default.nix +++ b/modules/nixos/apps/cli-apps/helix/default.nix @@ -1,55 +1,145 @@ { config, + inputs, lib, pkgs, + system, ... }: let inherit (lib) mkIf mkEnableOption; cfg = config.wyrdgard.apps.cli-apps.helix; + + cachix-url = "https://helix.cachix.org"; + cachix-key = "helix.cachix.org-1:ejp9KQpR1FBI2onstMQ34yogDm4OgU2ru6lIwPvuCVs="; + + helix-pkg = inputs.helix.packages.${system}.default; in { options.wyrdgard.apps.cli-apps.helix = { - enable = mkEnableOption "Whether to enable nixvim or not (Default true)"; + enable = mkEnableOption "Whether to enable nixvim or not"; }; config = mkIf cfg.enable { environment = { - systemPackages = with pkgs; [ helix ]; + systemPackages = [ helix-pkg ]; }; - wyrdgard.home = { - extraOptions = { - programs.helix = { - enable = true; - settings = { - theme = "autumn_night_transparent"; - editor.cursor-shape = { - normal = "block"; - insert = "bar"; - select = "underline"; + wyrdgard = { + home = { + extraOptions = { + programs.helix = { + enable = true; + package = helix-pkg; + defaultEditor = true; + settings = { + theme = "tokyonight"; + editor = { + line-number = "relative"; + + lsp = { + display-inlay-hints = true; + display-messages = true; + }; + + cursor-shape = { + normal = "block"; + insert = "bar"; + select = "underline"; + }; + + indent-guides = { + render = true; + character = "|"; + }; + + statusline = { + left = [ + "mode" + "spinner" + ]; + center = [ "file-name" ]; + right = [ + "workspace-diagnostics" + "diagnostics" + "selections" + "position" + "total-line-numbers" + "spacer" + "file-encoding" + "file-line-ending" + "file-type" + ]; + separator = "│"; + }; + }; + + keys = { + normal = { + space = { + space = "file_picker"; + }; + + C-j = [ + "move_line_down" + "move_line_down" + "move_line_down" + "move_line_down" + "move_line_down" + ]; + C-k = [ + "move_line_up" + "move_line_up" + "move_line_up" + "move_line_up" + "move_line_up" + ]; + }; + }; }; - }; - languages.language = [ - { - name = "nix"; - auto-format = true; - formatter.command = "${pkgs.nixfmt}/bin/nixfmt"; - } - { - name = "rust"; - auto-format = true; - formatter.command = "cargo fmt"; - } - ]; - themes = { - autumn_night_transparent = { - "inherits" = "autumn_night"; - "ui.background" = { }; + + languages = { + language = [ + { + name = "nix"; + auto-format = true; + formatter.command = "${pkgs.nixfmt-rfc-style}/bin/nixfmt"; + language-servers = [ + "nixd" + "nil" + ]; + } + { + # provided by the dev environment in the rust shell + name = "rust"; + auto-format = true; + formatter.command = "cargo fmt"; + language-servers = [ "rust-analyzer" ]; + } + ]; + + language-server = { + nil = { + command = "${pkgs.nil}/bin/nil"; + }; + nixd = { + command = "${pkgs.nixd}/bin/nixd"; + }; + marksman = { + command = "${pkgs.marksman}/bin/marksman"; + }; + omnisharp = { + command = "${pkgs.omnisharp-roslyn}/bin/OmniSharp"; + }; + }; }; }; }; }; + + nix.extra-substituters.${cachix-url} = { + key = cachix-key; + }; }; }; } diff --git a/systems/x86_64-linux/yggdrasil/default.nix b/systems/x86_64-linux/yggdrasil/default.nix index fc678a6..a2024be 100644 --- a/systems/x86_64-linux/yggdrasil/default.nix +++ b/systems/x86_64-linux/yggdrasil/default.nix @@ -27,6 +27,7 @@ in apps = { _1password = enabled; obs-studio = enabled; + cli-apps.helix = enabled; }; desktop.hyprland = {