diff --git a/modules/default.nix b/modules/default.nix index c3be46f..eb9042c 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -7,5 +7,6 @@ ./firewall.nix ./git.nix ./kmscon.nix + ./mprocs.nix ]; } diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index 2841c31..9f12200 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -183,6 +183,9 @@ in oneko plover.dev + + mupdf + inotify-tools ]; xsession = { enable = true; diff --git a/modules/git.nix b/modules/git.nix index 693f2fc..87c068f 100644 --- a/modules/git.nix +++ b/modules/git.nix @@ -43,36 +43,16 @@ programs.gitui = { enable = true; keyConfig = '' - ( - open_help: Some(( code: F(1), modifiers: ( bits: 0,),)), + ( + move_left: Some(( code: Char('h'), modifiers: "")), + move_right: Some(( code: Char('l'), modifiers: "")), + move_up: Some(( code: Char('k'), modifiers: "")), + move_down: Some(( code: Char('j'), modifiers: "")), - move_left: Some(( code: Char('h'), modifiers: ( bits: 0,),)), - move_right: Some(( code: Char('l'), modifiers: ( bits: 0,),)), - move_up: Some(( code: Char('k'), modifiers: ( bits: 0,),)), - move_down: Some(( code: Char('j'), modifiers: ( bits: 0,),)), + stash_open: Some(( code: Char('l'), modifiers: "")), + open_help: Some(( code: F(1), modifiers: "")), - popup_up: Some(( code: Char('p'), modifiers: ( bits: 2,),)), - popup_down: Some(( code: Char('n'), modifiers: ( bits: 2,),)), - page_up: Some(( code: Char('b'), modifiers: ( bits: 2,),)), - page_down: Some(( code: Char('f'), modifiers: ( bits: 2,),)), - home: Some(( code: Char('g'), modifiers: ( bits: 0,),)), - end: Some(( code: Char('G'), modifiers: ( bits: 1,),)), - shift_up: Some(( code: Char('K'), modifiers: ( bits: 1,),)), - shift_down: Some(( code: Char('J'), modifiers: ( bits: 1,),)), - - edit_file: Some(( code: Char('I'), modifiers: ( bits: 1,),)), - - status_reset_item: Some(( code: Char('U'), modifiers: ( bits: 1,),)), - - diff_reset_lines: Some(( code: Char('u'), modifiers: ( bits: 0,),)), - diff_stage_lines: Some(( code: Char('s'), modifiers: ( bits: 0,),)), - - stashing_save: Some(( code: Char('w'), modifiers: ( bits: 0,),)), - stashing_toggle_index: Some(( code: Char('m'), modifiers: ( bits: 0,),)), - - stash_open: Some(( code: Char('l'), modifiers: ( bits: 0,),)), - - abort_merge: Some(( code: Char('M'), modifiers: ( bits: 1,),)), + status_reset_item: Some(( code: Char('U'), modifiers: "SHIFT")), ) ''; }; diff --git a/modules/mprocs.nix b/modules/mprocs.nix new file mode 100644 index 0000000..cbf7153 --- /dev/null +++ b/modules/mprocs.nix @@ -0,0 +1,16 @@ +{...}: { + home-manager.users.jade = { + pkgs, + lib, + ... + }: { + home = { + packages = [pkgs.mprocs]; + }; + xdg.configFile."mprocs/mprocs.yaml" = { + text = builtins.toJSON { + proc_list_width = 15; + }; + }; + }; +} diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index 2238418..14029d7 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -1,5 +1,12 @@ {config, ...}: { - home-manager.users.jade = {pkgs, ...}: { + home-manager.users.jade = {pkgs, ...}: let + typstGrammar = pkgs.fetchFromGitHub { + owner = "uben0"; + repo = "tree-sitter-typst"; + rev = "baddc325e858afff90501dbefa00ecfa28528931"; + sha256 = "sha256-XZAgnpb1B8EZ2WXPj/JYSZGsmpKsnDiBFCDF0XjunOM"; + }; + in { home = { sessionVariables.EDITOR = "hx"; packages = [ @@ -7,15 +14,28 @@ pkgs.vscode-langservers-extracted pkgs.nodePackages.typescript-language-server pkgs.emmet-language-server + pkgs.typst-lsp ]; }; + home.file = { + ".config/helix/runtime/queries" = { + source = "${typstGrammar}/queries"; + }; + }; programs.helix = { enable = true; settings = { theme = "gruvbox"; editor = { line-number = "relative"; - lsp.display-messages = true; + bufferline = "multiple"; + color-modes = true; + lsp = { + display-messages = true; + display-inlay-hints = true; + }; + shell = ["nu" "-c"]; + idle-timeout = 0; indent-guides = { render = true; character = "│"; @@ -38,32 +58,86 @@ }; }; languages = { - language-server."nu-builtin-lsp" = { - command = "${config.users.defaultUserShell}/bin/nu"; - args = ["--lsp"]; - }; - language-server."rust-analyzer" = { - config = { - check.command = "clippy"; + language-server = { + "nu-builtin-lsp" = { + command = "${config.users.defaultUserShell}/bin/nu"; + args = ["--lsp"]; + }; + "rust-analyzer" = { + config = { + check.command = "clippy"; + completion.snippets.custom = { + "pub fn" = { + prefix = ["pfn" "pubfn"]; + postfix = ["pfn"]; + body = [ + "pub fn $\{receiver\}() {" + "\\t$1" + "}" + ]; + scope = "type"; + }; + }; + }; + }; + "emmet-language-server" = { + command = "emmet-language-server"; + args = ["--stdio"]; + }; + # "php" = { + # name = "php"; + # file-types = [ "php" ]; + # language-server = { + # command = "psalm"; + # args = ["--language-server"]; + # }; + # }; + "typst-lsp" = { + command = "typst-lsp"; + config = { + exportPdf = "onType"; + }; }; }; - language-server."emmet-language-server" = { - command = "emmet-language-server"; - args = ["--stdio"]; - }; - # "php" = { - # name = "php"; - # file-types = [ "php" ]; - # language-server = { - # command = "psalm"; - # args = ["--language-server"]; - # }; - # }; + grammar = [ + { + name = "typst"; + source = { + git = "https://github.com/uben0/tree-sitter-typst"; + rev = "baddc325e858afff90501dbefa00ecfa28528931"; + # path = "${typstGrammar}"; + }; + } + ]; language = [ { name = "nu"; language-servers = ["nu-builtin-lsp"]; } + { + name = "typst"; + scope = "source.typst"; + file-types = ["typ" "typst"]; + injection-regex = "typ(st)?"; + comment-token = "//"; + indent = { + tab-width = 2; + unit = " "; + }; + roots = ["typst.toml"]; + formatter = { + command = "${pkgs.typstfmt}/bin/typstfmt"; + }; + auto-format = true; + language-servers = ["typst-lsp"]; + auto-pairs = { + "(" = ")"; + "{" = "}"; + "[" = "]"; + "$" = "$"; + "\"" = "\""; + }; + } { name = "nix"; formatter = { diff --git a/other/config.nu b/other/config.nu index 2903d1d..2f1a437 100644 --- a/other/config.nu +++ b/other/config.nu @@ -803,18 +803,15 @@ def glog [ ] { git log --pretty=%h»¦«%s»¦«%aN»¦«%aE»¦«%aD -n $amount | lines - | split column "»¦«" commit subject name email date + | split column "»¦«u commit subject name email date" } -def ed [ - file: path - ...cmdargs: string +def typed [ + name: string ] { - let ext = $file | path parse | get extension; - match $ext { - "typ" => {|| zellij run --direction down -- typst watch $file ($cmdargs | prepend '--open' | str join ' ') } - }; - hx $file + touch $"($name).typ" + typst compile $"($name).typ" + mprocs --names Editor,Viewer,Notify $"hx '($name).typ'" $"mupdf-x11 '($name).pdf'" $"while inotifywait -e modify '($name).pdf' ; do pkill -HUP mupdf; done" } alias gnix = cd ~/nix-configs;