diff --git a/home/common-linux.nix b/home/common-linux.nix index 5f56253..947d612 100644 --- a/home/common-linux.nix +++ b/home/common-linux.nix @@ -36,11 +36,6 @@ in pinentry-gnome3 # until pinentry-qt introduces caching ]; - # Git "safe-directory" - programs.git.extraConfig.safe.directory = [ - "${config.home.homeDirectory}/.config/nixpkgs" - ]; - systemd.user.startServices = "sd-switch"; # Audio stuff! diff --git a/home/common.nix b/home/common.nix index c4d5b3d..bd4c977 100644 --- a/home/common.nix +++ b/home/common.nix @@ -109,6 +109,7 @@ .envrc .kakrc ''}"; + safe.directory = "*"; merge.conflictstyle = "diff3"; }; }; diff --git a/home/kakoune/catppuccin-latte.kak b/home/kakoune/catppuccin-latte.kak new file mode 100644 index 0000000..bd40ead --- /dev/null +++ b/home/kakoune/catppuccin-latte.kak @@ -0,0 +1,79 @@ +# Catppuccin theme for Kakoune + +declare-option str rosewater "rgb:dc8a78" +declare-option str flamingo "rgb:dd7878" +declare-option str pink "rgb:ea76cb" +declare-option str mauve "rgb:8839ef" +declare-option str red "rgb:d20f39" +declare-option str maroon "rgb:e64553" +declare-option str peach "rgb:fe640b" +declare-option str yellow "rgb:df8e1d" +declare-option str green "rgb:40a02b" +declare-option str teal "rgb:179299" +declare-option str sky "rgb:04a5e5" +declare-option str sapphire "rgb:209fb5" +declare-option str blue "rgb:1e66f5" +declare-option str lavender "rgb:7287fd" +declare-option str text "rgb:4c4f69" +declare-option str subtext1 "rgb:5c5f77" +declare-option str subtext0 "rgb:6c6f85" +declare-option str overlay2 "rgb:7c7f93" +declare-option str overlay1 "rgb:8c8fa1" +declare-option str overlay0 "rgb:9ca0b0" +declare-option str surface2 "rgb:acb0be" +declare-option str surface1 "rgb:bcc0cc" +declare-option str surface0 "rgb:ccd0da" +declare-option str base "rgb:eff1f5" +declare-option str mantle "rgb:e6e9ef" +declare-option str crust "rgb:dce0e8" + + +set-face global title "%opt{text}+b" +set-face global header "%opt{subtext0}+b" +set-face global bold "%opt{maroon}+b" +set-face global italic "%opt{maroon}+i" +set-face global mono "%opt{green}" +set-face global block "%opt{sapphire}" +set-face global link "%opt{blue}" +set-face global bullet "%opt{peach}" +set-face global list "%opt{peach}" + +set-face global Default "%opt{text},%opt{base}" +set-face global PrimarySelection "%opt{text},%opt{surface2}" +set-face global SecondarySelection "%opt{text},%opt{surface2}" +set-face global PrimaryCursor "%opt{crust},%opt{rosewater}" +set-face global SecondaryCursor "%opt{text},%opt{overlay0}" +set-face global PrimaryCursorEol "%opt{surface2},%opt{lavender}" +set-face global SecondaryCursorEol "%opt{surface2},%opt{overlay1}" +set-face global LineNumbers "%opt{overlay1},%opt{base}" +set-face global LineNumberCursor "%opt{rosewater},%opt{surface2}+b" +set-face global LineNumbersWrapped "%opt{rosewater},%opt{surface2}+i" +set-face global MenuForeground "%opt{text},%opt{surface1}+b" +set-face global MenuBackground "%opt{text},%opt{surface0}" +set-face global MenuInfo "%opt{crust},%opt{teal}" +set-face global Information "%opt{crust},%opt{teal}" +set-face global Error "%opt{crust},%opt{red}" +set-face global StatusLine "%opt{text},%opt{mantle}" +set-face global StatusLineMode "%opt{crust},%opt{yellow}" +set-face global StatusLineInfo "%opt{crust},%opt{teal}" +set-face global StatusLineValue "%opt{crust},%opt{yellow}" +set-face global StatusCursor "%opt{crust},%opt{rosewater}" +set-face global Prompt "%opt{teal},%opt{base}+b" +set-face global MatchingChar "%opt{maroon},%opt{base}" +set-face global Whitespace "%opt{overlay1},%opt{base}+f" +set-face global WrapMarker "Whitespace" +set-face global BufferPadding "%opt{base},%opt{base}" + +set-face global value "%opt{peach}" +set-face global type "%opt{blue}" +set-face global variable "%opt{text}" +set-face global module "%opt{maroon}" +set-face global function "%opt{blue}" +set-face global string "%opt{green}" +set-face global keyword "%opt{mauve}" +set-face global operator "%opt{sky}" +set-face global attribute "%opt{green}" +set-face global comment "%opt{overlay0}" +set-face global documentation "comment" +set-face global meta "%opt{yellow}" +set-face global builtin "%opt{red}" diff --git a/home/kakoune/kak.nix b/home/kakoune/kak.nix index 0043c8a..57aa5e6 100644 --- a/home/kakoune/kak.nix +++ b/home/kakoune/kak.nix @@ -201,8 +201,7 @@ in owner = "tree-sitter"; repo = "tree-sitter-go"; rev = "v0.20.0"; - hash = "sha256-XUSXOTqUySShJ7gebnhObwaFllfIxEYIHN70/wpiJdw="; - leaveDotGit = true; + hash = "sha256-G7d8CHCyKDAb9j6ijRfHk/HlgPqSI+uvkuRIRRvjkHI="; }; in { @@ -212,11 +211,7 @@ in owner = "tree-sitter"; repo = "tree-sitter-scala"; rev = "70afdd5632d57dd63a960972ab25945e353a52f6"; - hash = - if pkgs.stdenv.isDarwin - then lib.fakeHash - else "sha256-Q8KSI8H7+d/sUdSlcNAiOPn2THKk7SFqC3U7rLqSqtE="; - leaveDotGit = true; + hash = "sha256-bi0Lqo/Zs2Uaz1efuKAARpEDg5Hm59oUe7eSXgL1Wow="; }; in { @@ -230,11 +225,7 @@ in owner = "tree-sitter"; repo = "tree-sitter-haskell"; rev = "ba0bfb0e5d8e9e31c160d287878c6f26add3ec08"; - sha256 = - if pkgs.stdenv.isDarwin - then "sha256-lW3E4gSZV/m2RfofUqeiCu8KDz06YEvXbYKs8smXFi4=" - else "sha256-H5Z4vPTZCFxDCWguOB8oVSGPJyQonrD8FWAQZTYPG2U="; - leaveDotGit = true; + hash = "sha256-ZSOF0CLOn82GwU3xgvFefmh/AD2j5zz8I0t5YPwfan0="; }; in { @@ -248,8 +239,7 @@ in owner = "ikatyang"; repo = "tree-sitter-yaml"; rev = "0e36bed171768908f331ff7dff9d956bae016efb"; - hash = "sha256-rN/a8dYffDQNuvnhNp/nfu0AzhYrR1ESACQbQWb/n5w="; - leaveDotGit = true; + hash = "sha256-bpiT3FraOZhJaoiFWAoVJX1O+plnIi8aXOW2LwyU23M="; }; grammar.compile.args = [ "-c" "-fpic" "../scanner.cc" "../parser.c" "-I" ".." ]; grammar.link.args = [ "-shared" "-fpic" "scanner.o" "parser.o" ]; @@ -259,8 +249,7 @@ in owner = "helix-editor"; repo = "helix"; rev = "dbd248fdfa680373d94fbc10094a160aafa0f7a7"; - hash = "sha256-dv/T8ROXmwEdjM71gza1RzF2HoINA7Zl2jmz63kCZyQ="; - leaveDotGit = true; + hash = "sha256-wk8qVUDFXhAOi1Ibc6iBMzDCXb6t+YiWZcTd0IJybqc="; }; queries.path = "runtime/queries/yaml"; }; @@ -271,27 +260,17 @@ in owner = "vrischmann"; repo = "tree-sitter-templ"; rev = "044ad200092170727650fa6d368df66a8da98f9d"; - hash = "sha256-umhemFnz/nLzkJk75wMoMAHT+Zs9MYOqWPoYQwoFu74="; - leaveDotGit = true; + hash = "sha256-hJuB3h5pp+LLfP0/7bAYH0uLVo+OQk5jpzJb3J9BNkY="; }; in { grammar.src = src; queries.src = pkgs.runCommandLocal "templ-tree-sitter-queries" { } '' - mkdir -p queries - # copy most stuff from tree-sitter-templ - install -m644 ${src}/queries/templ/* queries - # override inherited files - cat ${tree-sitter-go}/queries/highlights.scm ${src}/queries/templ/highlights.scm > queries/highlights.scm - mkdir -p $out/queries - cp -r queries $out/queries/templ - cd $out - ${lib.getExe pkgs.git} init - ${lib.getExe pkgs.git} config user.email "a@b.com" - ${lib.getExe pkgs.git} config user.name "a" - ${lib.getExe pkgs.git} add . - ${lib.getExe pkgs.git} commit -m "Just making a git commit" + # copy most stuff from tree-sitter-templ + install -m644 ${src}/queries/templ/* $out/queries + # override inherited files + cat ${tree-sitter-go}/queries/highlights.scm ${src}/queries/templ/highlights.scm > $out/queries/highlights.scm ''; queries.path = "queries/templ"; }; @@ -317,11 +296,11 @@ in ''; programs.my-kakoune.extraFaces = { - Default = "%opt{white},%opt{background}"; - BufferPadding = "%opt{background},%opt{background}"; - MenuForeground = "blue,white+bF"; - MenuBackground = "bright-blue,white+F"; - Information = "bright-blue,white"; + Default = "%opt{text},%opt{base}"; + BufferPadding = "%opt{base},%opt{base}"; + MenuForeground = "%opt{blue},white+bF"; + MenuBackground = "%opt{sky},white+F"; + Information = "%opt{sky},white"; # Markdown help color scheme InfoDefault = "Information"; InfoBlock = "@block"; @@ -513,10 +492,7 @@ in } ]; programs.my-kakoune.themes = { - catppuccin-latte = builtins.fetchurl { - url = "https://raw.githubusercontent.com/catppuccin/kakoune/f6d43770609433c45046632f1bb68d1395305dbb/colors/catppuccin_latte.kak"; - sha256 = "sha256:0ycvxs8hmsvd0zrpxiby16wzmapvmz6p34b6j343pc1girw6fi4i"; - }; + catppuccin-latte = ./catppuccin-latte.kak; }; } diff --git a/home/kakoune/kakrc b/home/kakoune/kakrc index d59e3aa..e2ded7d 100644 --- a/home/kakoune/kakrc +++ b/home/kakoune/kakrc @@ -1,14 +1,14 @@ # Enable kak-tree-sitter -eval %sh{ kak-tree-sitter --kakoune -d --server --with-text-objects } +eval %sh{test -z "$WE_STARTED_KAK" && kak-tree-sitter --kakoune -d --server --init $kak_session} map global normal ": enter-user-mode tree-sitter" -## Set some color overrides -set global kts_yellow "rgb:e2b75e" -set global kts_teal "rgb:008080" -set global kts_mauve "rgb:c264ff" -set global kts_sky "rgb:6aa622" +# ## Set some color overrides +# set global kts_yellow "rgb:e2b75e" +# set global kts_teal "rgb:008080" +# set global kts_mauve "rgb:c264ff" +# set global kts_sky "rgb:6aa622" # Color scheme colorscheme catppuccin-latte -set global background default +set global base "default" # Set indentation guides add-highlighter global/indent-guides show-whitespaces -tab " " -spc " " -lf " " -nbsp " " diff --git a/home/modules/programs/my-kakoune/tree-sitter.nix b/home/modules/programs/my-kakoune/tree-sitter.nix index b6fcd64..4304ca5 100644 --- a/home/modules/programs/my-kakoune/tree-sitter.nix +++ b/home/modules/programs/my-kakoune/tree-sitter.nix @@ -43,83 +43,96 @@ in }; package = mkPackageOption pkgs "kak-tree-sitter" { }; + features = { + highlighting = mkOption { + type = types.bool; + description = "Enable highlighting"; + default = true; + }; + text_objects = mkOption { + type = types.bool; + description = "Enable text objects"; + default = true; + }; + }; + highlighterGroups = mkOption { type = types.attrsOf types.str; default = { attribute = "@attribute"; comment = "@comment"; - conceal = "%opt{kts_mauve}+i"; - constant = "%opt{kts_peach}"; - constant_builtin_boolean = "%opt{kts_sky}"; - constant_character = "%opt{kts_yellow}"; - constant_macro = "%opt{kts_mauve}"; - constant_numeric = "%opt{kts_peach}"; - constructor = "%opt{kts_sapphire}"; - diff_plus = "%opt{kts_green}"; - diff_minus = "%opt{kts_red}"; - diff_delta = "%opt{kts_blue}"; - diff_delta_moved = "%opt{kts_mauve}"; - error = "%opt{kts_red}+b"; + conceal = "%opt{mauve}+i"; + constant = "%opt{peach}"; + constant_builtin_boolean = "%opt{sky}"; + constant_character = "%opt{yellow}"; + constant_macro = "%opt{mauve}"; + constant_numeric = "%opt{peach}"; + constructor = "%opt{sapphire}"; + diff_plus = "%opt{green}"; + diff_minus = "%opt{red}"; + diff_delta = "%opt{blue}"; + diff_delta_moved = "%opt{mauve}"; + error = "%opt{red}+b"; function = "@function"; function_builtin = "@builtin"; function_macro = "+i@ts_function"; - hint = "%opt{kts_blue}+b"; - info = "%opt{kts_green}+b"; + hint = "%opt{blue}+b"; + info = "%opt{green}+b"; keyword = "keyword"; keyword_conditional = "+i@ts_keyword"; keyword_control_conditional = "+i@ts_keyword"; keyword_control_directive = "+i@ts_keyword"; keyword_control_import = "+i@ts_keyword"; keyword_directive = "+i@ts_keyword"; - label = "%opt{kts_sapphire}+i"; - markup_bold = "%opt{kts_peach}+b"; - markup_heading = "%opt{kts_red}"; - markup_heading_1 = "%opt{kts_red}"; - markup_heading_2 = "%opt{kts_mauve}"; - markup_heading_3 = "%opt{kts_green}"; - markup_heading_4 = "%opt{kts_yellow}"; - markup_heading_5 = "%opt{kts_pink}"; - markup_heading_6 = "%opt{kts_teal}"; - markup_heading_marker = "%opt{kts_peach}+b"; - markup_italic = "%opt{kts_pink}+i"; - markup_list_checked = "%opt{kts_green}"; - markup_list_numbered = "%opt{kts_blue}+i"; - markup_list_unchecked = "%opt{kts_teal}"; - markup_list_unnumbered = "%opt{kts_mauve}"; - markup_link_label = "%opt{kts_blue}"; - markup_link_url = "%opt{kts_teal}+u"; - markup_link_uri = "%opt{kts_teal}+u"; - markup_link_text = "%opt{kts_blue}"; - markup_quote = "%opt{kts_gray1}"; - markup_raw = "%opt{kts_sky}"; - markup_raw_block = "%opt{kts_sky}"; - markup_raw_inline = "%opt{kts_green}"; - markup_strikethrough = "%opt{kts_gray1}+s"; + label = "%opt{sapphire}+i"; + markup_bold = "%opt{peach}+b"; + markup_heading = "%opt{red}"; + markup_heading_1 = "%opt{red}"; + markup_heading_2 = "%opt{mauve}"; + markup_heading_3 = "%opt{green}"; + markup_heading_4 = "%opt{yellow}"; + markup_heading_5 = "%opt{pink}"; + markup_heading_6 = "%opt{teal}"; + markup_heading_marker = "%opt{peach}+b"; + markup_italic = "%opt{pink}+i"; + markup_list_checked = "%opt{green}"; + markup_list_numbered = "%opt{blue}+i"; + markup_list_unchecked = "%opt{teal}"; + markup_list_unnumbered = "%opt{mauve}"; + markup_link_label = "%opt{blue}"; + markup_link_url = "%opt{teal}+u"; + markup_link_uri = "%opt{teal}+u"; + markup_link_text = "%opt{blue}"; + markup_quote = "%opt{crust}"; + markup_raw = "%opt{sky}"; + markup_raw_block = "%opt{sky}"; + markup_raw_inline = "%opt{green}"; + markup_strikethrough = "%opt{crust}+s"; namespace = "@module"; operator = "@operator"; - property = "%opt{kts_sky}"; - punctuation = "%opt{kts_overlay2}"; - punctuation_special = "%opt{kts_sky}"; - special = "%opt{kts_blue}"; - spell = "%opt{kts_mauve}"; - string = "%opt{kts_green}"; - string_regex = "%opt{kts_peach}"; - string_regexp = "%opt{kts_peach}"; - string_escape = "%opt{kts_mauve}"; - string_special = "%opt{kts_blue}"; - string_special_path = "%opt{kts_green}"; - string_special_symbol = "%opt{kts_mauve}"; - string_symbol = "%opt{kts_red}"; - tag = "%opt{kts_teal}"; - tag_error = "%opt{kts_red}"; - text_title = "%opt{kts_mauve}"; - type = "%opt{kts_yellow}"; - type_enum_variant = "%opt{kts_flamingo}"; + property = "%opt{sky}"; + punctuation = "%opt{overlay2}"; + punctuation_special = "%opt{sky}"; + special = "%opt{blue}"; + spell = "%opt{mauve}"; + string = "%opt{green}"; + string_regex = "%opt{peach}"; + string_regexp = "%opt{peach}"; + string_escape = "%opt{mauve}"; + string_special = "%opt{blue}"; + string_special_path = "%opt{green}"; + string_special_symbol = "%opt{mauve}"; + string_symbol = "%opt{red}"; + tag = "%opt{teal}"; + tag_error = "%opt{red}"; + text_title = "%opt{mauve}"; + type = "@type"; + type_enum_variant = "+i@ts_type"; variable = "@variable"; variable_builtin = "@builtin"; - variable_other_member = "%opt{kts_teal}"; - variable_parameter = "%opt{kts_maroon}+i"; - warning = "%opt{kts_peach}+b"; + variable_other_member = "%opt{teal}"; + variable_parameter = "+i@variable"; + warning = "%opt{peach}+b"; }; }; @@ -174,8 +187,6 @@ in config = let - aliasedOnce = name: values: if asserts.assertMsg (builtins.length values 1) "face ${name} was aliased more than once: ${toString values}" then (builtins.head values) else [ ]; - allGroups = attrsets.recursiveUpdate cfg.highlighterGroups cfg.extraHighlighterGroups; aliases = attrsets.recursiveUpdate cfg.aliases cfg.extraAliases; @@ -189,10 +200,24 @@ in toml = pkgs.formats.toml { }; + srcName = src: lib.removePrefix "/nix/store/" src.outPath; + mkGitRepo = src: pkgs.runCommandLocal "${src.name}-git" { } '' + cp -r --no-preserve=all ${src} $out + cd $out + if ! test -d $out/.git; then + ${lib.getExe pkgs.git} init -b ${srcName src} + ${lib.getExe pkgs.git} config user.email "a@b.com" + ${lib.getExe pkgs.git} config user.name "a" + ${lib.getExe pkgs.git} add . + ${lib.getExe pkgs.git} commit -m "Just making a git commit" + fi + ''; + toLanguageConf = name: lang: with lang; { grammar = { inherit (grammar) path; - url = "${grammar.src}"; + source.git.url = "${mkGitRepo grammar.src}"; + source.git.pin = "${srcName grammar.src}"; compile = grammar.compile.command; compile_args = grammar.compile.args; compile_flags = grammar.compile.flags; @@ -201,7 +226,8 @@ in link_flags = grammar.link.flags; }; queries = { - url = "${queries.src}"; + source.git.url = "${mkGitRepo queries.src}"; + source.git.pin = "${srcName queries.src}"; path = if queries.path == null then "runtime/queries/${name}" else queries.path; }; }; @@ -220,19 +246,14 @@ in xdg.configFile."kak-tree-sitter/config.toml" = { source = toml.generate "config.toml" { highlight.groups = builtins.map toScm (builtins.attrNames allGroups ++ builtins.attrNames aliases); - + features = cfg.features; language = builtins.mapAttrs toLanguageConf cfg.languages; }; - onChange = - let - buildCmd = lang: "${cfg.package}/bin/ktsctl -fci ${lang}"; - buildAll = strings.concatMapStringsSep "\n" buildCmd (builtins.attrNames cfg.languages); - in - '' - # Rebuild languages - ${buildAll} - ''; + onChange = '' + export PATH=$PATH:${lib.getBin pkgs.gcc} + ${cfg.package}/bin/ktsctl sync -a + ''; }; programs.my-kakoune.extraFaces = faces; diff --git a/packages/common/kak-tree-sitter.nix b/packages/common/kak-tree-sitter.nix index 1d58e29..3e0c6a9 100644 --- a/packages/common/kak-tree-sitter.nix +++ b/packages/common/kak-tree-sitter.nix @@ -1,20 +1,41 @@ -{ lib, rustPlatform, fetchFromGitHub, symlinkJoin, clang, git, ... }: +{ lib, rustPlatform, fetchFromSourcehut, symlinkJoin, clang, git, writeText, ... }: let - src = fetchFromGitHub { - owner = "phaazon"; + src = fetchFromSourcehut { + owner = "~hadronized"; repo = "kak-tree-sitter"; - rev = "61cce127ca03e3c969df1ff46f41074a3c69be31"; - hash = "sha256-wcgc1L6Y6obLTIonWLJzNK72fWW8oJ0yMEfGotCg5b8="; + rev = "kak-tree-sitter-v1.1.2"; + hash = "sha256-wBWfSyR8LGtug/mCD0bJ4lbdN3trIA/03AnCxZoEOSA="; }; - kak-tree-sitter = rustPlatform.buildRustPackage rec { + kak-tree-sitter = rustPlatform.buildRustPackage { inherit src; pname = "kak-tree-sitter"; - version = "0.5.5-${lib.substring 0 6 src.rev}"; - cargoHash = "sha256-Ozzcn4k+1Q+50zxCy9Flvv8vZKNcAesrHT/izVAgn54="; + version = "1.1.2"; + cargoHash = "sha256-OQPUWqJAts8DbFNSsC/CmMCbuZ9TVxRTR05O7oiodKI="; cargoBuildOptions = [ "--package" "kak-tree-sitter" "--package" "ktsctl" ]; nativeBuildInputs = [ clang git ]; + + patches = [ + # Allow absolute-path style repos + (writeText "resources.patch" '' + diff --git a/ktsctl/src/resources.rs b/ktsctl/src/resources.rs + index f1da3ff..ac89345 100644 + --- a/ktsctl/src/resources.rs + +++ b/ktsctl/src/resources.rs + @@ -48,7 +48,8 @@ impl Resources { + url + .trim_start_matches("http") + .trim_start_matches('s') + - .trim_start_matches("://"), + + .trim_start_matches(":/") + + .trim_start_matches("/"), + ); + + self.runtime_dir.join("sources").join(url_dir) + '') + ]; }; in kak-tree-sitter +