diff --git a/modules/default.nix b/modules/default.nix index 1bf5670..286f879 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -1,6 +1,7 @@ { ... }: { imports = [ + ./editors ./shell ./desktop ./desktop-legacy diff --git a/modules/editors/default.nix b/modules/editors/default.nix new file mode 100644 index 0000000..2c28619 --- /dev/null +++ b/modules/editors/default.nix @@ -0,0 +1,12 @@ +{ ... }: +{ + programs.niri.enable = true; + home-manager.users.jade = + { pkgs, ... }: + { + imports = [ + ./helix + ./zed + ]; + }; +} diff --git a/modules/editors/helix/binds.nix b/modules/editors/helix/binds.nix new file mode 100644 index 0000000..b7f6447 --- /dev/null +++ b/modules/editors/helix/binds.nix @@ -0,0 +1,41 @@ +{ ... }: +{ + programs.helix.settings.keys = { + normal = { + space."=" = ":fmt"; + space.ret = "@[]"; + space.space = "ms"; + + # smart tab++ + tab = "move_parent_node_end"; + S-tab = "move_parent_node_start"; + A-S = "@S[\\s]+"; + "'" = { + D = "@sgd"; + F = "@sgy"; + d = "@vgd"; + f = "@vgy"; + h = ":toggle-option lsp.display-inlay-hints"; + t = ":pipe flip-bool"; + }; + }; + insert = { + up = "no_op"; + down = "no_op"; + left = "no_op"; + right = "no_op"; + pageup = "no_op"; + pagedown = "no_op"; + home = "no_op"; + end = "no_op"; + + # smart tab ++ + S-tab = "move_parent_node_start"; + }; + select = { + # smart tab++ + tab = "extend_parent_node_end"; + S-tab = "extend_parent_node_start"; + }; + }; +} diff --git a/modules/editors/helix/default.nix b/modules/editors/helix/default.nix new file mode 100644 index 0000000..bd0b05a --- /dev/null +++ b/modules/editors/helix/default.nix @@ -0,0 +1,113 @@ +{ config, pkgs, ... }: +{ + imports = [ + ./binds.nix + ./settings.nix + ]; + home = { + sessionVariables.EDITOR = "hx"; + packages = [ + pkgs.wl-clipboard-rs + pkgs.nil + pkgs.vscode-langservers-extracted + pkgs.nodePackages.typescript-language-server + pkgs.emmet-language-server + pkgs.jdt-language-server + pkgs.tinymist + pkgs.typstyle + ]; + }; + programs.helix = { + enable = true; + defaultEditor = true; + languages = { + language-server = { + "nu-builtin-lsp" = { + command = "${pkgs.nushell}/bin/nu"; + args = [ "--lsp" ]; + }; + "rust-analyzer" = { + config = { + check.command = "check"; + completion.snippets.custom = { + "pub fn" = { + prefix = [ + "pfn" + "pubfn" + ]; + postfix = [ "pfn" ]; + body = [ + "pub fn $\{receiver\}() {" + "\\t$1" + "}" + ]; + scope = "type"; + }; + }; + completion.termSearch.enable = true; + diagnostics.enable = true; + inlayHints = { + bindingModeHints.enable = true; + closureCaptureHints.enable = true; + closureReturnTypeHints.enable = true; + discriminantHints.enable = true; + expressionAdjustmentHints = { + hideOutsideUnsafe = true; + }; + lifetimeElisionHints.enable = "skip_trivial"; + }; + interpret.tests = true; + lens = { + references = { + adt.enable = true; + trait.enable = true; + }; + }; + typing.autoClosingAngleBrackets.enable = true; + }; + }; + "emmet-language-server" = { + command = "emmet-language-server"; + args = [ "--stdio" ]; + }; + "psalm" = { + command = "psalm"; + args = [ "--language-server" ]; + }; + "tinymist" = { + config = { + exportPdf = "onType"; + formatterMode = "typstyle"; + }; + }; + }; + language = [ + { + name = "nu"; + language-servers = [ "nu-builtin-lsp" ]; + } + { + name = "php"; + language-servers = [ "psalm" ]; + } + { + name = "nix"; + formatter = { + command = "${pkgs.nixfmt-rfc-style}/bin/nixfmt"; + args = [ "--quiet" ]; + }; + auto-format = true; + } + { + name = "html"; + roots = [ ".git" ]; + language-servers = [ + "vscode-html-language-server" + "emmet-language-server" + ]; + auto-format = false; + } + ]; + }; + }; +} diff --git a/modules/editors/helix/settings.nix b/modules/editors/helix/settings.nix new file mode 100644 index 0000000..c6cc82c --- /dev/null +++ b/modules/editors/helix/settings.nix @@ -0,0 +1,74 @@ +{ ... }: +{ + programs.helix.settings = { + theme = "gruvbox_dark_hard"; + editor = { + line-number = "relative"; + bufferline = "multiple"; + color-modes = true; + cursorline = true; + auto-save = { + after-delay.enable = true; + after-delay.timeout = 10000; + }; + auto-format = true; + end-of-line-diagnostics = "hint"; + # slightly optimized based on my layout + jump-label-alphabet = "jfkdhaslgwenuiopbcmyzqrtvx"; + clipboard-provider = "wayland"; + inline-diagnostics = { + cursor-line = "hint"; + }; + lsp = { + display-messages = true; + display-inlay-hints = true; + }; + popup-border = "popup"; + shell = [ + "nu" + "-c" + ]; + statusline.left = [ + "mode" + "spinner" + "spacer" + "version-control" + "file-name" + "diagnostics" + "read-only-indicator" + "file-modification-indicator" + "spacer" + ]; + + statusline.right = [ + "workspace-diagnostics" + "register" + "position" + "selections" + "file-encoding" + "file-type" + ]; + idle-timeout = 50; + completion-timeout = 100; + indent-guides = { + render = true; + character = "│"; + skip-levels = 3; + }; + soft-wrap = { + enable = true; + }; + whitespace = { + render = { + space = "none"; + tab = "all"; + newline = "none"; + }; + characters = { + nbsp = "·"; + tab = "→"; + }; + }; + }; + }; +} diff --git a/modules/editors/zed/default.nix b/modules/editors/zed/default.nix new file mode 100644 index 0000000..243e61d --- /dev/null +++ b/modules/editors/zed/default.nix @@ -0,0 +1,42 @@ +{ ... }: +{ + programs.zed-editor = { + enable = true; + userSettings = { + features = { + edit_prediction_provider = null; + }; + show_edit_predictions = false; + middle_click_paste = false; + search = { + regex = true; + }; + inlay_hints = { + enabled = true; + }; + assistant = { + version = "2"; + enabled = false; + }; + diagnostics = { + include_warnings = false; + inline = { + enabled = true; + update_debounce_ms = 150; + padding = 4; + min_column = 0; + max_severity = null; + }; + }; + language_models = null; + vim_mode = true; + vim = { + default_mode = "helix_normal"; + }; + # ui_font_size = 16; + # WHY CAN I NOT OVERRIDE THIS + # habt'a lack gesoffen?! + # buffer_font_size = 16.; + }; + }; +} diff --git a/modules/shell/default.nix b/modules/shell/default.nix index 49f20b4..3410739 100644 --- a/modules/shell/default.nix +++ b/modules/shell/default.nix @@ -1,7 +1,6 @@ { pkgs, ... }: { imports = [ - ./helix.nix ./nu.nix ./starship.nix ./tty.nix diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix deleted file mode 100644 index dc04045..0000000 --- a/modules/shell/helix.nix +++ /dev/null @@ -1,225 +0,0 @@ -{ config, ... }: -{ - home-manager.users.jade = - { - pkgs, - pkgs-stable, - ... - }: - { - home = { - sessionVariables.EDITOR = "hx"; - packages = [ - pkgs.wl-clipboard-rs - pkgs.nil - pkgs.vscode-langservers-extracted - pkgs.nodePackages.typescript-language-server - pkgs.emmet-language-server - pkgs.jdt-language-server - pkgs.tinymist - pkgs.typstyle - ]; - }; - programs.helix = { - enable = true; - defaultEditor = true; - settings = { - theme = "gruvbox_dark_hard"; - editor = { - line-number = "relative"; - bufferline = "multiple"; - color-modes = true; - cursorline = true; - auto-save = { - after-delay.enable = true; - after-delay.timeout = 10000; - }; - auto-format = true; - end-of-line-diagnostics = "hint"; - # slightly optimized based on my layout - jump-label-alphabet = "jfkdhaslgwenuiopbcmyzqrtvx"; - clipboard-provider = "wayland"; - inline-diagnostics = { - cursor-line = "hint"; - }; - lsp = { - display-messages = true; - display-inlay-hints = true; - }; - popup-border = "popup"; - shell = [ - "nu" - "-c" - ]; - statusline.left = [ - "mode" - "spinner" - "spacer" - "version-control" - "file-name" - "diagnostics" - "read-only-indicator" - "file-modification-indicator" - "spacer" - ]; - - statusline.right = [ - "workspace-diagnostics" - "register" - "position" - "selections" - "file-encoding" - "file-type" - ]; - idle-timeout = 50; - completion-timeout = 100; - indent-guides = { - render = true; - character = "│"; - skip-levels = 3; - }; - soft-wrap = { - enable = true; - }; - whitespace = { - render = { - space = "none"; - tab = "all"; - newline = "none"; - }; - characters = { - nbsp = "·"; - tab = "→"; - }; - }; - }; - keys = { - normal = { - space."=" = ":fmt"; - space.space = "@[]"; - - # smart tab++ - tab = "move_parent_node_end"; - S-tab = "move_parent_node_start"; - A-S = "@S[\\s]+"; - "'" = { - D = "@sgd"; - F = "@sgy"; - d = "@vgd"; - f = "@vgy"; - h = ":toggle-option lsp.display-inlay-hints"; - t = ":pipe flip-bool"; - }; - }; - insert = { - up = "no_op"; - down = "no_op"; - left = "no_op"; - right = "no_op"; - pageup = "no_op"; - pagedown = "no_op"; - home = "no_op"; - end = "no_op"; - - # smart tab ++ - S-tab = "move_parent_node_start"; - }; - select = { - # smart tab++ - tab = "extend_parent_node_end"; - S-tab = "extend_parent_node_start"; - }; - }; - }; - languages = { - language-server = { - "nu-builtin-lsp" = { - command = "${config.users.defaultUserShell}/bin/nu"; - args = [ "--lsp" ]; - }; - "rust-analyzer" = { - config = { - check.command = "check"; - completion.snippets.custom = { - "pub fn" = { - prefix = [ - "pfn" - "pubfn" - ]; - postfix = [ "pfn" ]; - body = [ - "pub fn $\{receiver\}() {" - "\\t$1" - "}" - ]; - scope = "type"; - }; - }; - completion.termSearch.enable = true; - diagnostics.enable = true; - inlayHints = { - bindingModeHints.enable = true; - closureCaptureHints.enable = true; - closureReturnTypeHints.enable = true; - discriminantHints.enable = true; - expressionAdjustmentHints = { - hideOutsideUnsafe = true; - }; - lifetimeElisionHints.enable = "skip_trivial"; - }; - interpret.tests = true; - lens = { - references = { - adt.enable = true; - trait.enable = true; - }; - }; - typing.autoClosingAngleBrackets.enable = true; - }; - }; - "emmet-language-server" = { - command = "emmet-language-server"; - args = [ "--stdio" ]; - }; - "psalm" = { - command = "psalm"; - args = [ "--language-server" ]; - }; - "tinymist" = { - config = { - exportPdf = "onType"; - formatterMode = "typstyle"; - }; - }; - }; - language = [ - { - name = "nu"; - language-servers = [ "nu-builtin-lsp" ]; - } - { - name = "php"; - language-servers = [ "psalm" ]; - } - { - name = "nix"; - formatter = { - command = "${pkgs.nixfmt-rfc-style}/bin/nixfmt"; - args = [ "--quiet" ]; - }; - auto-format = true; - } - { - name = "html"; - roots = [ ".git" ]; - language-servers = [ - "vscode-html-language-server" - "emmet-language-server" - ]; - auto-format = false; - } - ]; - }; - }; - }; -}