diff --git a/flake.lock b/flake.lock index 0f1eb63..1ddbaec 100644 --- a/flake.lock +++ b/flake.lock @@ -133,10 +133,7 @@ }, "crane_4": { "inputs": { - "nixpkgs": [ - "lanzaboote", - "nixpkgs" - ] + "nixpkgs": "nixpkgs_8" }, "locked": { "lastModified": 1717535930, @@ -214,11 +211,11 @@ "nixpkgs": "nixpkgs_7" }, "locked": { - "lastModified": 1731494335, - "narHash": "sha256-G1G2WRGgIOFNmlJglfqEupSg0VWHgODbBJzp5xo+cYY=", + "lastModified": 1739632357, + "narHash": "sha256-aqLiDoLaqYdZIEgR7NGavo4KPbOYOhU7vuCDXe1uL5Y=", "ref": "dtth-fork", - "rev": "c414bb78f27b20df4463c36a5851c94cfe9c79b0", - "revCount": 3367, + "rev": "30979814a9dbbf590d4d954e559811e6a7504459", + "revCount": 3476, "type": "git", "url": "ssh://gitea@git.dtth.ch/nki-dtth/phanpy" }, @@ -416,11 +413,11 @@ "nixpkgs-lib": "nixpkgs-lib_2" }, "locked": { - "lastModified": 1722555600, - "narHash": "sha256-XOQkdLafnb/p9ij77byFQjDf5m5QYl9b2REiVClC+x4=", + "lastModified": 1736143030, + "narHash": "sha256-+hu54pAoLDEZT9pjHlqL9DNzWz0NbUn8NEAHP7PQPzU=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "8471fe90ad337a8074e957b69ca4d0089218391d", + "rev": "b905f6fc23a9051a6e1b741e1438dbfc0634c6de", "type": "github" }, "original": { @@ -503,11 +500,11 @@ "systems": "systems_5" }, "locked": { - "lastModified": 1710146030, - "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", - "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { @@ -724,11 +721,11 @@ ] }, "locked": { - "lastModified": 1736785676, - "narHash": "sha256-TY0jUwR3EW0fnS0X5wXMAVy6h4Z7Y6a3m+Yq++C9AyE=", + "lastModified": 1739571712, + "narHash": "sha256-0UdSDV/TBY+GuxXLbrLq3l2Fq02ciyKCIMy4qmnfJXQ=", "owner": "nix-community", "repo": "home-manager", - "rev": "fc52a210b60f2f52c74eac41a8647c1573d2071d", + "rev": "6d3163aea47fdb1fe19744e91306a2ea4f602292", "type": "github" }, "original": { @@ -740,15 +737,16 @@ "kak-lsp": { "flake": false, "locked": { - "lastModified": 1723206901, - "narHash": "sha256-wPCu/VxAMIB+zI0+eDq7lJ/rHJZfe0whYzdoiwrixCc=", + "lastModified": 1737458684, + "narHash": "sha256-wIKAChmD6gVfrRguywiAnpT3kbCbRk2k2u4ckd1CNOw=", "owner": "kakoune-lsp", "repo": "kakoune-lsp", - "rev": "ebd370f43cb6e7af634e5f8cadb99cc8c16e1efe", + "rev": "d5db3de3b88a8a158e1bfa43f13d8766a6c6d522", "type": "github" }, "original": { "owner": "kakoune-lsp", + "ref": "v18.1.2", "repo": "kakoune-lsp", "type": "github" } @@ -774,7 +772,6 @@ "crane": "crane_4", "flake-compat": "flake-compat_4", "flake-parts": "flake-parts_4", - "flake-utils": "flake-utils_5", "nixpkgs": [ "nixpkgs" ], @@ -782,16 +779,16 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1718178907, - "narHash": "sha256-eSZyrQ9uoPB9iPQ8Y5H7gAmAgAvCw3InStmU3oEjqsE=", + "lastModified": 1737639419, + "narHash": "sha256-AEEDktApTEZ5PZXNDkry2YV2k6t0dTgLPEmAZbnigXU=", "owner": "nix-community", "repo": "lanzaboote", - "rev": "b627ccd97d0159214cee5c7db1412b75e4be6086", + "rev": "a65905a09e2c43ff63be8c0e86a93712361f871e", "type": "github" }, "original": { "owner": "nix-community", - "ref": "v0.4.1", + "ref": "v0.4.2", "repo": "lanzaboote", "type": "github" } @@ -799,15 +796,15 @@ "lix": { "flake": false, "locked": { - "lastModified": 1729298361, - "narHash": "sha256-hiGtfzxFkDc9TSYsb96Whg0vnqBVV7CUxyscZNhed0U=", - "rev": "ad9d06f7838a25beec425ff406fe68721fef73be", + "lastModified": 1737234286, + "narHash": "sha256-CCKIAE84dzkrnlxJCKFyffAxP3yfsOAbdvydUGqq24g=", + "rev": "2837da71ec1588c1187d2e554719b15904a46c8b", "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/ad9d06f7838a25beec425ff406fe68721fef73be.tar.gz?rev=ad9d06f7838a25beec425ff406fe68721fef73be" + "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/2837da71ec1588c1187d2e554719b15904a46c8b.tar.gz?rev=2837da71ec1588c1187d2e554719b15904a46c8b" }, "original": { "type": "tarball", - "url": "https://git.lix.systems/lix-project/lix/archive/2.91.1.tar.gz" + "url": "https://git.lix.systems/lix-project/lix/archive/2.92.0.tar.gz" } }, "lix-module": { @@ -820,15 +817,15 @@ ] }, "locked": { - "lastModified": 1729360442, - "narHash": "sha256-6U0CyPycIBc04hbYy2hBINnVso58n/ZyywY2BD3hu+s=", - "rev": "9098ac95768f7006d7e070b88bae76939f6034e6", + "lastModified": 1737237494, + "narHash": "sha256-YMLrcBpf0TR5r/eaqm8lxzFPap2TxCor0ZGcK3a7+b8=", + "rev": "b90bf629bbd835e61f1317b99e12f8c831017006", "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/9098ac95768f7006d7e070b88bae76939f6034e6.tar.gz?rev=9098ac95768f7006d7e070b88bae76939f6034e6" + "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/b90bf629bbd835e61f1317b99e12f8c831017006.tar.gz?rev=b90bf629bbd835e61f1317b99e12f8c831017006" }, "original": { "type": "tarball", - "url": "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-1.tar.gz" + "url": "https://git.lix.systems/lix-project/nixos-module/archive/2.92.0.tar.gz" } }, "mpd-mpris": { @@ -856,7 +853,7 @@ "inputs": { "niri-stable": "niri-stable", "niri-unstable": "niri-unstable", - "nixpkgs": "nixpkgs_8", + "nixpkgs": "nixpkgs_9", "nixpkgs-stable": "nixpkgs-stable_3", "xwayland-satellite-stable": "xwayland-satellite-stable", "xwayland-satellite-unstable": "xwayland-satellite-unstable" @@ -926,15 +923,15 @@ "nix-gaming": { "inputs": { "flake-parts": "flake-parts_5", - "nixpkgs": "nixpkgs_9", + "nixpkgs": "nixpkgs_10", "umu": "umu" }, "locked": { - "lastModified": 1723945279, - "narHash": "sha256-3W+/u3v/e0dTOxht6wW6pL+kr44e8Amb8A1Z3Bx8BUE=", + "lastModified": 1737337163, + "narHash": "sha256-Z9hc25iV+jhH0AlvsrG65KqLEd726/HVvalSiqNQLqA=", "owner": "fufexan", "repo": "nix-gaming", - "rev": "bcf8116981cc332c2734d4c82a034f115780853d", + "rev": "e5559b3a91433c21eb64792b78134582b3bd77f2", "type": "github" }, "original": { @@ -1016,14 +1013,14 @@ }, "nixpkgs-lib_2": { "locked": { - "lastModified": 1722555339, - "narHash": "sha256-uFf2QeW7eAHlYXuDktm9c25OxOyCoUOQmh5SZ9amE5Q=", + "lastModified": 1735774519, + "narHash": "sha256-CewEm1o2eVAnoqb6Ml+Qi9Gg/EfNAxbRx1lANGVyoLI=", "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs/archive/a5d394176e64ab29c852d03346c1fc9b0b7d33eb.tar.gz" + "url": "https://github.com/NixOS/nixpkgs/archive/e9b51731911566bbf7e4895475a87fe06961de0b.tar.gz" }, "original": { "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs/archive/a5d394176e64ab29c852d03346c1fc9b0b7d33eb.tar.gz" + "url": "https://github.com/NixOS/nixpkgs/archive/e9b51731911566bbf7e4895475a87fe06961de0b.tar.gz" } }, "nixpkgs-stable": { @@ -1076,11 +1073,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1736755442, - "narHash": "sha256-a3MMEY7i/wdF0gb7WFNTn6onzaiMOvwj7OerRVenA8o=", + "lastModified": 1739451785, + "narHash": "sha256-3ebRdThRic9bHMuNi2IAA/ek9b32bsy8F5R4SvGTIog=", "owner": "nixos", "repo": "nixpkgs", - "rev": "ef56e777fedaa4da8c66a150081523c5de1e0171", + "rev": "1128e89fd5e11bb25aedbfc287733c6502202ea9", "type": "github" }, "original": { @@ -1091,6 +1088,22 @@ } }, "nixpkgs_10": { + "locked": { + "lastModified": 1737003892, + "narHash": "sha256-RCzJE9wKByLCXmRBp+z8LK9EgdW+K+W/DXnJS4S/NVo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ae06b9c2d83cb5c8b12d7d0e32692e93d1379713", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_11": { "locked": { "lastModified": 1736916166, "narHash": "sha256-puPDoVKxkuNmYIGMpMQiK8bEjaACcCksolsG36gdaNQ=", @@ -1106,7 +1119,7 @@ "type": "github" } }, - "nixpkgs_11": { + "nixpkgs_12": { "locked": { "lastModified": 1734424634, "narHash": "sha256-cHar1vqHOOyC7f1+tVycPoWTfKIaqkoe1Q6TnKzuti4=", @@ -1122,13 +1135,13 @@ "type": "github" } }, - "nixpkgs_12": { + "nixpkgs_13": { "locked": { - "lastModified": 1734424634, - "narHash": "sha256-cHar1vqHOOyC7f1+tVycPoWTfKIaqkoe1Q6TnKzuti4=", + "lastModified": 1738410390, + "narHash": "sha256-xvTo0Aw0+veek7hvEVLzErmJyQkEcRk6PSR4zsRQFEc=", "owner": "nixos", "repo": "nixpkgs", - "rev": "d3c42f187194c26d9f0309a8ecc469d6c878ce33", + "rev": "3a228057f5b619feb3186e986dbe76278d707b6e", "type": "github" }, "original": { @@ -1235,6 +1248,22 @@ } }, "nixpkgs_8": { + "locked": { + "lastModified": 1738452225, + "narHash": "sha256-Qmwx3FXM0x0pdjibwTk/uRbayqDrs3EwmRJe7tQWu48=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "6c4e0724e0a785a20679b1bca3a46bfce60f05b6", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_9": { "locked": { "lastModified": 1736798957, "narHash": "sha256-qwpCtZhSsSNQtK4xYGzMiyEDhkNzOCz/Vfu4oL2ETsQ=", @@ -1250,22 +1279,6 @@ "type": "github" } }, - "nixpkgs_9": { - "locked": { - "lastModified": 1736549401, - "narHash": "sha256-ibkQrMHxF/7TqAYcQE+tOnIsSEzXmMegzyBWza6uHKM=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "1dab772dd4a68a7bba5d9460685547ff8e17d899", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-24.11", - "repo": "nixpkgs", - "type": "github" - } - }, "pre-commit-hooks-nix": { "inputs": { "flake-compat": [ @@ -1313,7 +1326,7 @@ "nix-gaming": "nix-gaming", "nixos-hardware": "nixos-hardware", "nixos-m1": "nixos-m1", - "nixpkgs": "nixpkgs_10", + "nixpkgs": "nixpkgs_11", "nixpkgs-unstable": "nixpkgs-unstable", "rust-overlay": "rust-overlay_3", "secrets": "secrets", @@ -1341,10 +1354,7 @@ }, "rust-overlay": { "inputs": { - "flake-utils": [ - "lanzaboote", - "flake-utils" - ], + "flake-utils": "flake-utils_5", "nixpkgs": [ "lanzaboote", "nixpkgs" @@ -1591,11 +1601,11 @@ }, "locked": { "dir": "packaging/nix", - "lastModified": 1723697867, - "narHash": "sha256-LTfbJXR8x35oZ8Mo3R0WTVEp9toWpVfzD21xCSr64IM=", + "lastModified": 1737484151, + "narHash": "sha256-pONHsVIyIHbjyv51JQW3Nv9JeuqiVEuINyH+HnN4f8Q=", "ref": "refs/heads/main", - "rev": "c71a45ad53036f4c668bcbe1be7a49f9d3460151", - "revCount": 699, + "rev": "0cac244cc89ee69bf33ad60a3953cfde188ee8a6", + "revCount": 907, "submodules": true, "type": "git", "url": "https://github.com/Open-Wine-Components/umu-launcher/" @@ -1662,37 +1672,33 @@ "inputs": { "crane": "crane_5", "flake-utils": "flake-utils_9", - "nixpkgs": "nixpkgs_11", + "nixpkgs": "nixpkgs_12", "rust-overlay": "rust-overlay_4" }, "locked": { - "lastModified": 1735912896, - "narHash": "sha256-jJQfnP7XhTGlCvUIgxIKDipIkif/AmOk6SgSuD5qils=", + "lastModified": 1740088478, + "narHash": "sha256-olqbNvJ5Uk1LseAC1zYDSL0BPLhPxkQG8EhO/3zhKRw=", "owner": "natsukagami", "repo": "youmubot", - "rev": "dde4a722a07ba6ad814b3792ae1361139be1e973", + "rev": "a35563801dbf74c6f221aac3e70146572e3fe14e", "type": "github" }, "original": { "owner": "natsukagami", - "ref": "osu-commands", "repo": "youmubot", "type": "github" } }, "zen-browser": { "inputs": { - "nixpkgs": "nixpkgs_12", - "zen-browser-aarch64": "zen-browser-aarch64", - "zen-browser-generic": "zen-browser-generic", - "zen-browser-specific": "zen-browser-specific" + "nixpkgs": "nixpkgs_13" }, "locked": { - "lastModified": 1734667644, - "narHash": "sha256-vluyzRt6RikEn78Yk0t7Qd96iZZfyRBt4+ESI0mtlhk=", + "lastModified": 1738469108, + "narHash": "sha256-AS4akOUGZP2ELHQKj1IiXuuzU9bpK20ks4dGaCrwOEk=", "owner": "youwen5", "repo": "zen-browser-flake", - "rev": "8c8af380bf45b42ae14b2f6d5252be3627332f23", + "rev": "f95fa7b1560b0f2ed8989e6f12f2c7e7e7ee9433", "type": "github" }, "original": { @@ -1700,45 +1706,6 @@ "repo": "zen-browser-flake", "type": "github" } - }, - "zen-browser-aarch64": { - "flake": false, - "locked": { - "lastModified": 1734641206, - "narHash": "sha256-F5FwGqAgL4kfEy5rNWvofRQl8SH0udQvEIMhysRMDgs=", - "type": "tarball", - "url": "https://github.com/zen-browser/desktop/releases/download/1.0.2-b.3/zen.linux-aarch64.tar.bz2" - }, - "original": { - "type": "tarball", - "url": "https://github.com/zen-browser/desktop/releases/download/1.0.2-b.3/zen.linux-aarch64.tar.bz2" - } - }, - "zen-browser-generic": { - "flake": false, - "locked": { - "lastModified": 1734646830, - "narHash": "sha256-slIWuEWSV9PK1JTr6UKKC+VP4oLNaczwkxkYiqcjZM8=", - "type": "tarball", - "url": "https://github.com/zen-browser/desktop/releases/download/1.0.2-b.3/zen.linux-generic.tar.bz2" - }, - "original": { - "type": "tarball", - "url": "https://github.com/zen-browser/desktop/releases/download/1.0.2-b.3/zen.linux-generic.tar.bz2" - } - }, - "zen-browser-specific": { - "flake": false, - "locked": { - "lastModified": 1734645803, - "narHash": "sha256-zAo93sHeB8cTW2JBAqxx0wo3CANcxCgjEcTQgbDeWT4=", - "type": "tarball", - "url": "https://github.com/zen-browser/desktop/releases/download/1.0.2-b.3/zen.linux-specific.tar.bz2" - }, - "original": { - "type": "tarball", - "url": "https://github.com/zen-browser/desktop/releases/download/1.0.2-b.3/zen.linux-specific.tar.bz2" - } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 19e21d2..448036a 100644 --- a/flake.nix +++ b/flake.nix @@ -18,46 +18,46 @@ # --- Secure boot lanzaboote = { - url = github:nix-community/lanzaboote/v0.4.1; + url = "github:nix-community/lanzaboote/v0.4.2"; inputs.nixpkgs.follows = "nixpkgs"; }; # --- Build tools - flake-utils.url = github:numtide/flake-utils; - crane.url = github:ipetkov/crane; + flake-utils.url = "github:numtide/flake-utils"; + crane.url = "github:ipetkov/crane"; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; - arion.url = github:hercules-ci/arion; + arion.url = "github:hercules-ci/arion"; lix-module = { - url = "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-1.tar.gz"; + url = "https://git.lix.systems/lix-project/nixos-module/archive/2.92.0.tar.gz"; inputs.nixpkgs.follows = "nixpkgs"; }; # --- # Imported apps - youmubot.url = "github:natsukagami/youmubot/osu-commands"; + youmubot.url = "github:natsukagami/youmubot"; # swayfx = { # url = github:WillPower3309/swayfx; # inputs.nixpkgs.follows = "nixpkgs"; # }; mpd-mpris = { - url = github:natsukagami/mpd-mpris; + url = "github:natsukagami/mpd-mpris"; inputs.nixpkgs.follows = "nixpkgs"; }; dtth-phanpy.url = "git+ssh://gitea@git.dtth.ch/nki-dtth/phanpy?ref=dtth-fork"; conduit.url = "gitlab:famedly/conduit/v0.9.0"; - nix-gaming.url = github:fufexan/nix-gaming; + nix-gaming.url = "github:fufexan/nix-gaming"; zen-browser.url = "github:youwen5/zen-browser-flake"; niri.url = "github:sodiboo/niri-flake"; # --- Sources - kakoune.url = github:mawww/kakoune; + kakoune.url = "github:mawww/kakoune"; kakoune.flake = false; - kak-lsp.url = github:kakoune-lsp/kakoune-lsp; + kak-lsp.url = "github:kakoune-lsp/kakoune-lsp/v18.1.2"; kak-lsp.flake = false; - nixos-m1.url = github:tpwrules/nixos-apple-silicon; + nixos-m1.url = "github:tpwrules/nixos-apple-silicon"; nixos-m1.inputs.nixpkgs.follows = "nixpkgs"; # --- @@ -114,6 +114,7 @@ sops-nix.nixosModules.sops inputs.lix-module.nixosModules.default ]; + config.nix.settings.extra-deprecated-features = [ "url-literals" ]; # So lix won't complain }; common-nixos = stable: { ... }: { imports = [ diff --git a/home/common-linux.nix b/home/common-linux.nix index 61302be..89d6699 100644 --- a/home/common-linux.nix +++ b/home/common-linux.nix @@ -49,6 +49,7 @@ in services.owncloud-client.package = pkgs.owncloud-client.overrideAttrs (attrs: { buildInputs = attrs.buildInputs ++ [ pkgs.qt6.qtwayland ]; }); + systemd.user.services.owncloud-client.Unit.After = [ "graphical-session.target" ]; # UDisks automounter services.udiskie.enable = true; diff --git a/home/common.nix b/home/common.nix index a8d6035..fcfc69d 100644 --- a/home/common.nix +++ b/home/common.nix @@ -2,7 +2,7 @@ { imports = [ - ./kakoune/kak.nix + ./kakoune.nix ./fish/fish.nix ./modules/programs/my-broot.nix ./modules/programs/my-waybar.nix diff --git a/home/kakoune.nix b/home/kakoune.nix new file mode 100644 index 0000000..09898c3 --- /dev/null +++ b/home/kakoune.nix @@ -0,0 +1,142 @@ +{ pkgs, lib, ... }: +let + +in +{ + imports = [ ./modules/programs/my-kakoune ]; + + home.packages = with pkgs; [ + # ctags for peneira + universal-ctags + # tree-sitter for kak + kak-tree-sitter + ]; + + # xdg.configFile."kak-tree-sitter/config.toml".source = ./kak-tree-sitter.toml; + + # Enable the kakoune package. + programs.my-kakoune.enable = true; + programs.my-kakoune.enable-fish-session = true; + programs.my-kakoune.tree-sitter.extraAliases = { + # Scala stuff + method = "function"; + module = "namespace"; + function_call = "function"; + method_call = "method"; + + boolean = "constant_builtin_boolean"; + number = "constant_numeric"; + float = "constant_numeric_float"; + + type_qualifier = "keyword_special"; + storageclass = "keyword_storage_modifier"; + conditional = "keyword_conditional"; + include = "keyword_control_import"; + }; + programs.my-kakoune.tree-sitter.languages = + let + tree-sitter-go = pkgs.fetchFromGitHub { + owner = "tree-sitter"; + repo = "tree-sitter-go"; + rev = "v0.20.0"; + hash = "sha256-G7d8CHCyKDAb9j6ijRfHk/HlgPqSI+uvkuRIRRvjkHI="; + }; + in + { + scala = + let + src = pkgs.fetchFromGitHub { + owner = "tree-sitter"; + repo = "tree-sitter-scala"; + rev = "70afdd5632d57dd63a960972ab25945e353a52f6"; + hash = "sha256-bi0Lqo/Zs2Uaz1efuKAARpEDg5Hm59oUe7eSXgL1Wow="; + }; + in + { + grammar.src = src; + queries.src = src; + queries.path = "queries/scala"; + }; + haskell = + let + src = pkgs.fetchFromGitHub { + owner = "tree-sitter"; + repo = "tree-sitter-haskell"; + rev = "ba0bfb0e5d8e9e31c160d287878c6f26add3ec08"; + hash = "sha256-ZSOF0CLOn82GwU3xgvFefmh/AD2j5zz8I0t5YPwfan0="; + }; + in + { + grammar.src = src; + grammar.compile.args = [ "-c" "-fpic" "../parser.c" "../scanner.c" "../unicode.h" "-I" ".." ]; + queries.src = src; + queries.path = "queries"; + }; + yaml = { + grammar.src = pkgs.fetchFromGitHub { + owner = "ikatyang"; + repo = "tree-sitter-yaml"; + rev = "0e36bed171768908f331ff7dff9d956bae016efb"; + hash = "sha256-bpiT3FraOZhJaoiFWAoVJX1O+plnIi8aXOW2LwyU23M="; + }; + grammar.compile.args = [ "-c" "-fpic" "../scanner.cc" "../parser.c" "-I" ".." ]; + grammar.link.args = [ "-shared" "-fpic" "scanner.o" "parser.o" ]; + grammar.link.flags = [ "-O3" "-lstdc++" ]; + + queries.src = pkgs.fetchFromGitHub { + owner = "helix-editor"; + repo = "helix"; + rev = "dbd248fdfa680373d94fbc10094a160aafa0f7a7"; + hash = "sha256-wk8qVUDFXhAOi1Ibc6iBMzDCXb6t+YiWZcTd0IJybqc="; + }; + queries.path = "runtime/queries/yaml"; + }; + + templ = + let + src = pkgs.fetchFromGitHub { + owner = "vrischmann"; + repo = "tree-sitter-templ"; + rev = "4519e3ec9ca92754ca25659bb1fd410d5e0f8d88"; + hash = "sha256-ic5SlqDEZoYakrJFe0H9GdzravqovlL5sTaHjyhe74M="; + }; + in + { + grammar.src = src; + queries.src = pkgs.runCommandLocal "templ-tree-sitter-queries" { } '' + mkdir -p $out/queries + # 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"; + }; + + go = { + grammar.src = tree-sitter-go; + grammar.compile.args = [ "-c" "-fpic" "../parser.c" "-I" ".." ]; + grammar.link.args = [ "-shared" "-fpic" "parser.o" ]; + queries.src = tree-sitter-go; + queries.path = "queries"; + }; + + hylo = + let + src = pkgs.fetchFromGitHub { + owner = "natsukagami"; + repo = "tree-sitter-hylo"; + rev = "494cbdff0d13cbc67348316af2efa0286dbddf6f"; + hash = "sha256-R5UeoglCTl0do3VDJ/liCTeqbxU9slvmVKNRA/el2VY="; + }; + in + { + grammar.src = src; + grammar.compile.args = [ "-c" "-fpic" "../parser.c" "-I" ".." ]; + grammar.link.args = [ "-shared" "-fpic" "parser.o" ]; + queries.src = src; + queries.path = "queries"; + }; + }; +} + diff --git a/home/kakoune/kak.nix b/home/kakoune/kak.nix deleted file mode 100644 index ef7963e..0000000 --- a/home/kakoune/kak.nix +++ /dev/null @@ -1,516 +0,0 @@ -{ pkgs, lib, ... }: - -let - kak-lsp-frontend = { pkgs, lib, ... }: - let - langserver = name: { - name = "vscode-${name}-language-server"; - value = { - args = [ "--stdio" ]; - command = "vscode-${name}-language-server"; - filetypes = [ name ]; - roots = [ "package.json" ".git" ]; - }; - package = pkgs.nodePackages.vscode-langservers-extracted; - }; - - tailwind = { - command = "tailwindcss-language-server"; - args = [ "--stdio" ]; - filetypes = [ "html" "css" "javascript" "typescript" "templ" ]; - roots = [ "tailwind.config.{js,cjs,mjs,ts}" "package.json" ".git" ]; - settings_section = "tailwindCSS"; - settings.tailwindCSS = { - validate = "warning"; - userLanguages.templ = "html"; - }; - package = pkgs.tailwindcss-language-server; - }; - - templModule = { pkgs, lib, ... }: { - programs.kak-lsp.languageServers."vscode-html-language-server".filetypes = [ "templ" ]; - programs.kak-lsp.languageServers."tailwindcss-language-server".filetypes = [ "templ" ]; - programs.kak-lsp.languageServers.templ = { - command = "templ"; - args = [ "lsp" ]; - filetypes = [ "templ" ]; - roots = [ "go.mod" ".git" ]; - package = pkgs.unstable.templ; - }; - - }; - - in - { - imports = [ templModule ]; - - programs.kak-lsp.languageServers = (builtins.listToAttrs (map langserver [ "html" "css" "json" ])) // { - tailwindcss-language-server = tailwind; - }; - }; - - ltexLsp = { pkgs, lib, ... }: { - programs.kak-lsp.languageServers.ltex-ls = { - command = "ltex-ls"; - args = [ "--log-file=/tmp" ]; - filetypes = [ "latex" "typst" ]; - roots = [ "main.tex" "main.typ" ".git" ]; - package = pkgs.ltex-ls; - }; - }; - -in -{ - imports = [ ../modules/programs/my-kakoune ./kaktex.nix kak-lsp-frontend ltexLsp ]; - - home.packages = with pkgs; [ - # ctags for peneira - universal-ctags - # tree-sitter for kak - kak-tree-sitter - ]; - - # xdg.configFile."kak-tree-sitter/config.toml".source = ./kak-tree-sitter.toml; - - # Enable the kakoune package. - programs.my-kakoune.enable = true; - programs.my-kakoune.enable-fish-session = true; - programs.kak-lsp.enable = true; - programs.kak-lsp.semanticTokens.additionalFaces = [ - # Typst - { face = "header"; token = "heading"; } - { face = "ts_markup_link_url"; token = "link"; } - { face = "ts_markup_link_uri"; token = "ref"; } - { face = "ts_markup_link_label"; token = "label"; } - { face = "ts_property"; token = "pol"; } - { face = "ts_markup_list_checked"; token = "marker"; } - { face = "ts_constant_builtin_boolean"; token = "bool"; } - { face = "ts_keyword_control"; token = "delim"; } - { face = "ts_number"; token = "text"; modifiers = [ "math" ]; } - { face = "ts_markup_bold"; token = "text"; modifiers = [ "strong" ]; } - { face = "ts_markup_italic"; token = "text"; modifiers = [ "emph" ]; } - ]; - - programs.kak-lsp.languageServers.elixir-ls = { - args = [ ]; - command = "elixir-ls"; - filetypes = [ "elixir" ]; - roots = [ "mix.exs" ]; - }; - programs.kak-lsp.languageServers.typescript-language-server = { - args = [ "--stdio" ]; - command = "typescript-language-server"; - filetypes = [ "typescript" "javascript" ]; - roots = [ "package.json" ]; - package = pkgs.nodePackages.typescript-language-server; - }; - programs.kak-lsp.languageServers.fsautocomplete = { - args = [ "--adaptive-lsp-server-enabled" "--project-graph-enabled" "--source-text-factory" "RoslynSourceText" ]; - command = "fsautocomplete"; - filetypes = [ "fsharp" ]; - roots = [ "*.fsproj" ]; - settings_section = "FSharp"; - settings.FSharp = { - AutomaticWorkspaceInit = true; - }; - }; - programs.kak-lsp.languageServers.metals = { - command = "metals"; - filetypes = [ "scala" ]; - roots = [ "build.sbt" "build.sc" "build.mill" ]; - settings_section = "metals"; - settings.metals = { - enableSemanticHighlighting = true; - showInferredType = true; - decorationProvider = true; - inlineDecorationProvider = true; - # From kakoune-lsp's own options - icons = "unicode"; - isHttpEnabled = true; - statusBarProvider = "log-message"; - compilerOptions = { overrideDefFormat = "unicode"; }; - }; - package = pkgs.metals; - }; - programs.kak-lsp.languageServers.texlab = { - command = "texlab"; - filetypes = [ "latex" ]; - roots = [ "main.tex" "all.tex" ".git" ]; - settings_section = "texlab"; - settings.texlab = { - build.executable = "latexmk"; - build.args = [ "-pdf" "-shell-escape" "-interaction=nonstopmode" "-synctex=1" "%f" ]; - - build.forwardSearchAfter = true; - build.onSave = true; - - forwardSearch = - (if pkgs.stdenv.isDarwin then { - executable = "/Applications/Skim.app/Contents/SharedSupport/displayline"; - args = [ "-r" "-g" "%l" "%p" "%f" ]; - } else - { - executable = "${pkgs.zathura}/bin/zathura"; - args = [ "--synctex-forward" "%l:1:%f" "%p" "-x" "${./kaktex} jump %%{input} %%{line} %%{column}" ]; - }); - }; - package = pkgs.texlab; - }; - programs.kak-lsp.languageServers.tinymist = { - command = "tinymist"; - filetypes = [ "typst" ]; - roots = [ "main.typ" ".git" ]; - settings_section = "tinymist"; - settings.tinymist = { - exportPdf = "onSave"; - formatterMode = "typstfmt"; - }; - }; - programs.kak-lsp.languageServers.marksman = { - command = "marksman"; - filetypes = [ "markdown" ]; - roots = [ ".marksman.toml" ".git" ]; - package = pkgs.marksman; - }; - programs.kak-lsp.languageServers.rust-analyzer = { - args = [ ]; - command = "rust-analyzer"; - filetypes = [ "rust" ]; - roots = [ "Cargo.toml" ]; - package = pkgs.rust-analyzer; - }; - - programs.my-kakoune.tree-sitter.extraAliases = { - # Scala stuff - method = "function"; - module = "namespace"; - function_call = "function"; - method_call = "method"; - - boolean = "constant_builtin_boolean"; - number = "constant_numeric"; - float = "constant_numeric_float"; - - type_qualifier = "keyword_special"; - storageclass = "keyword_storage_modifier"; - conditional = "keyword_conditional"; - include = "keyword_control_import"; - }; - programs.my-kakoune.tree-sitter.languages = - let - tree-sitter-go = pkgs.fetchFromGitHub { - owner = "tree-sitter"; - repo = "tree-sitter-go"; - rev = "v0.20.0"; - hash = "sha256-G7d8CHCyKDAb9j6ijRfHk/HlgPqSI+uvkuRIRRvjkHI="; - }; - in - { - scala = - let - src = pkgs.fetchFromGitHub { - owner = "tree-sitter"; - repo = "tree-sitter-scala"; - rev = "70afdd5632d57dd63a960972ab25945e353a52f6"; - hash = "sha256-bi0Lqo/Zs2Uaz1efuKAARpEDg5Hm59oUe7eSXgL1Wow="; - }; - in - { - grammar.src = src; - queries.src = src; - queries.path = "queries/scala"; - }; - haskell = - let - src = pkgs.fetchFromGitHub { - owner = "tree-sitter"; - repo = "tree-sitter-haskell"; - rev = "ba0bfb0e5d8e9e31c160d287878c6f26add3ec08"; - hash = "sha256-ZSOF0CLOn82GwU3xgvFefmh/AD2j5zz8I0t5YPwfan0="; - }; - in - { - grammar.src = src; - grammar.compile.args = [ "-c" "-fpic" "../parser.c" "../scanner.c" "../unicode.h" "-I" ".." ]; - queries.src = src; - queries.path = "queries"; - }; - yaml = { - grammar.src = pkgs.fetchFromGitHub { - owner = "ikatyang"; - repo = "tree-sitter-yaml"; - rev = "0e36bed171768908f331ff7dff9d956bae016efb"; - hash = "sha256-bpiT3FraOZhJaoiFWAoVJX1O+plnIi8aXOW2LwyU23M="; - }; - grammar.compile.args = [ "-c" "-fpic" "../scanner.cc" "../parser.c" "-I" ".." ]; - grammar.link.args = [ "-shared" "-fpic" "scanner.o" "parser.o" ]; - grammar.link.flags = [ "-O3" "-lstdc++" ]; - - queries.src = pkgs.fetchFromGitHub { - owner = "helix-editor"; - repo = "helix"; - rev = "dbd248fdfa680373d94fbc10094a160aafa0f7a7"; - hash = "sha256-wk8qVUDFXhAOi1Ibc6iBMzDCXb6t+YiWZcTd0IJybqc="; - }; - queries.path = "runtime/queries/yaml"; - }; - - templ = - let - src = pkgs.fetchFromGitHub { - owner = "vrischmann"; - repo = "tree-sitter-templ"; - rev = "044ad200092170727650fa6d368df66a8da98f9d"; - hash = "sha256-hJuB3h5pp+LLfP0/7bAYH0uLVo+OQk5jpzJb3J9BNkY="; - }; - in - { - grammar.src = src; - queries.src = pkgs.runCommandLocal "templ-tree-sitter-queries" { } '' - mkdir -p $out/queries - # 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"; - }; - - go = { - grammar.src = tree-sitter-go; - grammar.compile.args = [ "-c" "-fpic" "../parser.c" "-I" ".." ]; - grammar.link.args = [ "-shared" "-fpic" "parser.o" ]; - queries.src = tree-sitter-go; - queries.path = "queries"; - }; - - hylo = - let - src = pkgs.fetchFromGitHub { - owner = "natsukagami"; - repo = "tree-sitter-hylo"; - rev = "494cbdff0d13cbc67348316af2efa0286dbddf6f"; - hash = "sha256-R5UeoglCTl0do3VDJ/liCTeqbxU9slvmVKNRA/el2VY="; - }; - in - { - grammar.src = src; - grammar.compile.args = [ "-c" "-fpic" "../parser.c" "-I" ".." ]; - grammar.link.args = [ "-shared" "-fpic" "parser.o" ]; - queries.src = src; - queries.path = "queries"; - }; - }; - - programs.my-kakoune.package = pkgs.kakoune; - programs.my-kakoune.rc = - builtins.readFile ./kakrc + '' - - # Source any settings in the current working directory, - # recursive upwards - evaluate-commands %sh{ - ${pkgs.writeScript "source-pwd" (builtins.readFile ./source-pwd)} - } - ''; - - programs.my-kakoune.extraFaces = { - 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"; - InfoBlockQuote = "+i@block"; - InfoBullet = "@bullet"; - InfoHeader = "@header"; - InfoLink = "@link"; - InfoLinkMono = "+b@mono"; - InfoMono = "@mono"; - InfoRule = "+b@Information"; - InfoDiagnosticError = "@DiagnosticError"; - InfoDiagnosticHint = "@DiagnosticHint"; - InfoDiagnosticInformation = "@Information"; - InfoDiagnosticWarning = "@DiagnosticWarning"; - # Extra faces - macro = "+u@function"; - method = "@function"; - format_specifier = "+i@string"; - mutable_variable = "+i@variable"; - class = "+b@variable"; - }; - programs.my-kakoune.autoload = [ - # My own scripts - { - name = "latex.kak"; - src = ./autoload/latex.kak; - } - { - name = "markdown.kak"; - src = ./autoload/markdown.kak; - } - - # Plugins - { - name = "luar"; - src = pkgs.fetchFromGitHub { - owner = "gustavo-hms"; - repo = "luar"; - rev = "2f430316f8fc4d35db6c93165e2e77dc9f3d0450"; - sha256 = "sha256-vHn/V3sfzaxaxF8OpA5jPEuPstOVwOiQrogdSGtT6X4="; - }; - activationScript = '' - # Enable luar - require-module luar - # Use luajit - set-option global luar_interpreter ${pkgs.luajit}/bin/luajit - ''; - } - { - name = "peneira"; - src = pkgs.fetchFromGitHub { - owner = "natsukagami"; - repo = "peneira"; - rev = "743b9971472853a752475e7c070ce99089c6840c"; - sha256 = "sha256-E4ndbF9YC1p0KrvSuGgwmG1Y2IGTuGKJo/AuMixhzlM="; - }; - activationScript = '' - require-module peneira - - # Change selection color - set-face global PeneiraSelected @PrimarySelection - - # Buffers list - define-command -hidden peneira-buffers %{ - peneira 'buffers: ' %{ printf '%s\n' $kak_quoted_buflist } %{ - buffer %arg{1} - } - } - - # Grep in the current location - define-command peneira-grep %{ - peneira 'line: ' "rg -n ." %{ - lua %arg{1} %{ - local file, line = arg[1]:match("([^:]+):(%d+):") - kak.edit(file, line) - } - } - } - - # A peneira menu - declare-user-mode fuzzy-match-menu - - map -docstring "Switch to buffer" global fuzzy-match-menu b ": peneira-buffers" - map -docstring "Symbols" global fuzzy-match-menu s ": peneira-symbols" - map -docstring "Lines" global fuzzy-match-menu l ": peneira-lines" - map -docstring "Lines in the current directory" global fuzzy-match-menu g ": peneira-grep" - map -docstring "Files in project" global fuzzy-match-menu f ": peneira-files" - map -docstring "Files in currently opening file's directory" global fuzzy-match-menu F ": peneira-local-files" - - # Bind menu to user mode - map -docstring "Fuzzy matching" global user f ": enter-user-mode fuzzy-match-menu" - ''; - } - { - name = "kakoune-focus"; - src = pkgs.fetchFromGitHub { - owner = "caksoylar"; - repo = "kakoune-focus"; - rev = "949c0557cd4c476822acfa026ca3c50f3d38a3c0"; - sha256 = "sha256-ZV7jlLJQyL420YG++iC9rq1SMjo3WO5hR9KVvJNUiCs="; - }; - activationScript = '' - map global user ': focus-toggle' -docstring "toggle selections focus" - ''; - } - { - name = "kakoune-inc-dec"; - src = pkgs.fetchFromGitLab { - owner = "Screwtapello"; - repo = "kakoune-inc-dec"; - rev = "7bfe9c51"; - sha256 = "0f33wqxqbfygxypf348jf1fiscac161wf2xvnh8zwdd3rq5yybl0"; - }; - } - { - name = "racket.kak"; - src = (builtins.fetchTree { - type = "git"; - url = "https://bitbucket.org/KJ_Duncan/kakoune-racket.kak.git"; - rev = "e397042009b46916ff089d79166ec0e8ca813a18"; - narHash = "sha256-IcxFmvG0jqpMCG/dT9crVRgPgMGKkic6xwrnW5z4+bc="; - }) + "/rc"; - } - # { - # name = "kakoune-discord"; - # src = (builtins.getFlake "github:natsukagami/kakoune-discord/03f95e40d6efd8fd3de7bca31653d43de2dcfc5f").packages.${pkgs.system}.kakoune-discord-rc + "/rc"; - # } - rec { - name = "kakoune-mirror"; - src = pkgs.fetchFromGitHub - { - owner = "Delapouite"; - repo = "kakoune-mirror"; - rev = "5710635f440bcca914d55ff2ec1bfcba9efe0f15"; - sha256 = "sha256-uslx4zZhvjUylrPWvTOugsKYKKpF0EEz1drc1Ckrpjk="; - } + "/mirror.kak"; - wrapAsModule = true; - activationScript = '' - require-module ${name} - - # Bind to ${name} - map global normal ': enter-user-mode -lock mirror' - ''; - } - { - name = "unicode-math"; - src = pkgs.fetchFromGitHub { - owner = "natsukagami"; - repo = "kakoune-unicode-math"; - rev = "08dff25da2b86ee0b0777091992bc7fb28c3cb1d"; - # sha256 = lib.fakeSha256; - sha256 = "sha256-j0L1ARex1i2ma8sGLYwgkfAbh0jWKh/6QGHFaxPXIKc="; - fetchSubmodules = true; - }; - activationScript = '' - require-module unicode-math - - # Bind to the menu - map global insert ': insert-unicode ' - ''; - } - { - name = "kakoune-buffers"; - src = pkgs.fetchFromGitHub { - owner = "Delapouite"; - repo = "kakoune-buffers"; - rev = "6b2081f5b7d58c72de319a5cba7bf628b6802881"; - sha256 = "sha256-jOSrzGcLJjLK1GiTSsl2jLmQMPbPxjycR0pwF5t/eV0="; - }; - activationScript = '' - # Suggested hook - - hook global WinDisplay .* info-buffers - - # Suggested mappings - - map global user b ':enter-buffers-mode' -docstring 'buffers…' - map global normal ^ ':enter-buffers-mode' -docstring 'buffers…' - map global user B ':enter-user-mode -lock buffers' -docstring 'buffers (lock)…' - - # Suggested aliases - - alias global bd delete-buffer - alias global bf buffer-first - alias global bl buffer-last - alias global bo buffer-only - alias global bo! buffer-only-force - ''; - } - ]; - programs.my-kakoune.themes = { - catppuccin-latte = ./catppuccin-latte.kak; - }; -} - diff --git a/home/kakoune/kaktex.nix b/home/kakoune/kaktex.nix deleted file mode 100644 index 1256c79..0000000 --- a/home/kakoune/kaktex.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - # Source kaktex whenever we have a tex file - programs.my-kakoune.rc = '' - hook global WinSetOption filetype=(tex|latex) %{ - hook window WinDisplay '.*' %{ - eval %sh{ - ${./kaktex} set $kak_client $kak_session - } - } - } - ''; -} diff --git a/home/modules/linux/graphical/wayland.nix b/home/modules/linux/graphical/wayland.nix index d44d534..26776b8 100644 --- a/home/modules/linux/graphical/wayland.nix +++ b/home/modules/linux/graphical/wayland.nix @@ -10,8 +10,6 @@ let settings.widgets = [ "inhibitors" "title" "dnd" "mpris" "notifications" ]; style = ./swaync.css; }; - systemd.user.services.swaync.Install.WantedBy = lib.mkForce [ "sway-session.target" ]; - systemd.user.services.swaync.Unit.PartOf = lib.mkForce [ "graphical-session.target" ]; programs.my-waybar = { extraSettings = [{ @@ -109,6 +107,7 @@ with lib; latitude = "46.31"; longitude = "6.38"; }; + systemd.user.services.wlsunset.Unit.After = "graphical-session.target"; # Notification system diff --git a/home/modules/programs/my-kakoune/default.nix b/home/modules/programs/my-kakoune/default.nix index 125484a..62a9cb1 100644 --- a/home/modules/programs/my-kakoune/default.nix +++ b/home/modules/programs/my-kakoune/default.nix @@ -1,40 +1,17 @@ -{ config, pkgs, lib, ... }: +{ config, options, pkgs, lib, ... }: with lib; let cfg = config.programs.my-kakoune; - - autoloadModule = types.submodule { - options = { - name = mkOption { - type = types.str; - description = "Name of the autoload script/folder. It might affect kakoune's load order."; - }; - src = mkOption { - type = types.path; - description = "Path to the autoload script/folder."; - }; - wrapAsModule = mkOption { - type = types.bool; - default = false; - description = "Wrap the given source file in a `provide-module` command. Fails if the `src` is not a single file."; - }; - activationScript = mkOption { - type = types.nullOr types.lines; - default = null; - description = "Add an activation script to the module. It will be wrapped in a `hook global KakBegin .*` wrapper."; - }; - }; - }; in { - imports = [ ./kak-lsp.nix ./fish-session.nix ./tree-sitter.nix ]; + imports = [ ./fish-session.nix ./tree-sitter.nix ]; options.programs.my-kakoune = { enable = mkEnableOption "My version of the kakoune configuration"; package = mkOption { type = types.package; - default = pkgs.kakoune; + default = pkgs.nki-kakoune; description = "The kakoune package to be installed"; }; rc = mkOption { @@ -42,22 +19,16 @@ in default = ""; description = "Content of the kakrc file. A line-concatenated string"; }; - autoload = mkOption { - type = types.listOf autoloadModule; - default = [ ]; - description = "Sources to autoload"; - }; - themes = mkOption { - type = types.attrsOf types.path; - default = { }; - description = "Themes to load"; - }; - extraFaces = mkOption { type = types.attrsOf types.str; default = { }; description = "Extra faces to include"; }; + autoloadFile = mkOption { + type = options.xdg.configFile.type; + default = { }; + description = "Extra autoload files"; + }; }; config = mkIf cfg.enable { @@ -65,37 +36,6 @@ in xdg.configFile = let - kakouneAutoload = { name, src, wrapAsModule ? false, activationScript ? null }: - [ - (if !wrapAsModule then { - name = "kak/autoload/${name}"; - value.source = src; - } else { - name = "kak/autoload/${name}/module.kak"; - value.text = '' - provide-module ${name} %◍ - ${readFile src} - ◍ - ''; - }) - ] ++ (if activationScript == null then [ ] else [{ - name = "kak/autoload/on-load/${name}.kak"; - value.text = '' - hook global KakBegin .* %{ - ${activationScript} - } - ''; - }]); - - kakouneThemes = builtins.listToAttrs (builtins.attrValues ( - builtins.mapAttrs - (name: src: { - name = "kak/colors/${name}.kak"; - value.source = src; - }) - cfg.themes - )); - kakouneFaces = let txt = strings.concatStringsSep "\n" (builtins.attrValues (builtins.mapAttrs (name: face: "face global ${name} \"${face}\"") cfg.extraFaces)); @@ -103,6 +43,7 @@ in pkgs.writeText "faces.kak" txt; in { + "kak/autoload/builtin".source = "${cfg.package}/share/kak/autoload"; # kakrc "kak/kakrc".text = '' ${cfg.rc} @@ -110,15 +51,14 @@ in # Load faces source ${kakouneFaces} ''; - } // - (builtins.listToAttrs (lib.lists.flatten (map kakouneAutoload ([ - # include the original autoload files - { - name = "rc"; - src = "${cfg.package}/share/kak/autoload/rc"; - } - ] ++ cfg.autoload)))) - // kakouneThemes; + } // lib.mapAttrs' + (name: attrs: { + name = "kak/autoload/${name}"; + value = attrs // { + target = "kak/autoload/${name}"; + }; + }) + cfg.autoloadFile; }; } diff --git a/home/modules/programs/my-kakoune/kak-lsp.nix b/home/modules/programs/my-kakoune/kak-lsp.nix deleted file mode 100644 index eaf3b6b..0000000 --- a/home/modules/programs/my-kakoune/kak-lsp.nix +++ /dev/null @@ -1,213 +0,0 @@ -{ config, pkgs, lib, ... }: - -with lib; -let - lspConfig = - { - language_ids = { - c = "c_cpp"; - cpp = "c_cpp"; - javascript = "javascriptreact"; - typescript = "typescriptreact"; - protobuf = "proto"; - sh = "shellscript"; - }; - - language_servers = { - ccls = { - args = [ "-v=2" "-log-file=/tmp/ccls.log" ]; - command = "ccls"; - filetypes = [ "c" "cpp" ]; - roots = [ "compile_commands.json" ".cquery" ".git" ]; - }; - gopls = { - command = "gopls"; - filetypes = [ "go" ]; - offset_encoding = "utf-8"; - roots = [ "Gopkg.toml" "go.mod" ".git" ".hg" ]; - settings = { gopls = { hoverKind = "SynopsisDocumentation"; semanticTokens = true; }; }; - settings_section = "gopls"; - }; - haskell-language-server = { - args = [ "--lsp" ]; - command = "haskell-language-server-wrapper"; - filetypes = [ "haskell" ]; - roots = [ "Setup.hs" "stack.yaml" "*.cabal" "package.yaml" ]; - settings_section = "haskell"; - }; - nil = { - command = "${pkgs.nil}/bin/nil"; - filetypes = [ "nix" ]; - roots = [ "flake.nix" "shell.nix" ".git" ]; - settings.nil = { - formatting.command = [ "${getExe pkgs.nixpkgs-fmt}" ]; - }; - }; - pyls = { - command = "pyls"; - filetypes = [ "python" ]; - offset_encoding = "utf-8"; - roots = [ "requirements.txt" "setup.py" ".git" ".hg" ]; - }; - }; - semantic_tokens.faces = [ - ## Items - # (Rust) Macros - { face = "attribute"; token = "attribute"; } - { face = "attribute"; token = "derive"; } - { face = "macro"; token = "macro"; } # Function-like Macro - # Keyword and Fixed Tokens - { face = "keyword"; token = "keyword"; } - { face = "operator"; token = "operator"; } - # Functions and Methods - { face = "function"; token = "function"; } - { face = "method"; token = "method"; } - # Constants - { face = "string"; token = "string"; } - { face = "format_specifier"; token = "formatSpecifier"; } - # Variables - { face = "variable"; token = "variable"; modifiers = [ "readonly" ]; } - { face = "mutable_variable"; token = "variable"; } - { face = "module"; token = "namespace"; } - { face = "variable"; token = "type_parameter"; } - { face = "class"; token = "enum"; } - { face = "class"; token = "struct"; } - { face = "class"; token = "trait"; } - { face = "class"; token = "union"; } - { face = "class"; token = "class"; } - - ## Comments - { face = "documentation"; token = "comment"; modifiers = [ "documentation" ]; } - { face = "comment"; token = "comment"; } - ]; - server = { timeout = 1800; }; - snippet_support = false; - verbosity = 255; - }; - - languageServerOption = types.submodule { - options = { - filetypes = mkOption { - type = types.listOf types.str; - description = "The list of filetypes to assign the language to"; - }; - roots = mkOption { - type = types.listOf types.str; - description = "The list of root filenames that are used to determine the project root"; - }; - command = mkOption { - type = types.str; - description = "The LSP server command to be called."; - }; - args = mkOption { - type = types.listOf types.str; - default = [ ]; - description = "The arguments passed onto the LSP server."; - }; - offset_encoding = mkOption { - type = types.nullOr (types.enum [ "utf-8" ]); - default = null; - description = "The offset encoding used by the LSP server."; - }; - settings_section = mkOption { - type = types.nullOr types.str; - default = null; - description = "The settings section to be sent to LSP server."; - }; - settings = mkOption { - type = types.nullOr (types.attrsOf types.anything); - default = null; - description = "Additional settings to be passed to the LSP server."; - }; - package = mkOption { - type = types.nullOr types.package; - default = null; - description = "The default package of the language server. Will be appended as the ending segments of the PATH to kak-lsp"; - }; - }; - }; - - cfg = config.programs.kak-lsp; - - serverPackages = - filter (v: v != null) - (lib.mapAttrsToList (_: serv: serv.package) cfg.languageServers); - - wrappedPackage = pkgs.symlinkJoin { - name = "kak-lsp-wrapped"; - nativeBuildInputs = [ pkgs.makeWrapper ]; - paths = [ cfg.package ]; - postBuild = '' - wrapProgram $out/bin/kak-lsp --suffix PATH ":" ${lib.makeBinPath serverPackages} - ''; - }; -in -{ - options.programs.kak-lsp = { - enable = mkEnableOption "Enable kak-lsp support"; - - package = mkOption { - type = types.package; - default = pkgs.kak-lsp; - }; - - enableSnippets = mkOption { - type = types.bool; - default = false; - description = "Enable snippet support"; - }; - - semanticTokens.faces = mkOption { - type = types.listOf types.anything; - default = lspConfig.semantic_tokens.faces; - description = "The semantic tokens faces mapping given to kak"; - }; - semanticTokens.additionalFaces = mkOption { - type = types.listOf types.anything; - default = [ ]; - description = "The semantic tokens faces mapping given to kak"; - }; - - serverTimeout = mkOption { - type = types.int; - default = 1000; - description = "Server timeout"; - }; - - languageServers = mkOption { - type = types.attrsOf languageServerOption; - default = { }; - description = "The language options"; - }; - - languageIds = mkOption { - type = types.attrsOf types.str; - default = { }; - description = "Language IDs to be sent to the LSP"; - }; - }; - - config = mkIf cfg.enable - { - home.packages = [ wrappedPackage ]; - - # Configurations - xdg.configFile."kak-lsp/kak-lsp.toml" = - let - toml = pkgs.formats.toml { }; - toLspConfig = lib.filterAttrsRecursive (n: v: n != "package" && v != null); - in - { - source = toml.generate "config.toml" - { - semantic_tokens.faces = cfg.semanticTokens.faces ++ cfg.semanticTokens.additionalFaces; - server.timeout = cfg.serverTimeout; - snippet_support = cfg.enableSnippets; - verbosity = 255; - language_server = toLspConfig (lspConfig.language_servers // cfg.languageServers); - language_ids = lspConfig.language_ids // cfg.languageIds; - }; - }; - }; -} - diff --git a/home/modules/programs/my-kakoune/tree-sitter.nix b/home/modules/programs/my-kakoune/tree-sitter.nix index 4304ca5..07f12cf 100644 --- a/home/modules/programs/my-kakoune/tree-sitter.nix +++ b/home/modules/programs/my-kakoune/tree-sitter.nix @@ -33,6 +33,27 @@ let }; }; }; + mkGrammarPackage = + { name + , src + , grammarPath ? "src" + , grammarCompileArgs ? [ "-O3" "-c" "-fpic" "../parser.c" "../scanner.c" "-I" ".." ] + , grammarLinkArgs ? [ "-shared" "-fpic" "parser.o" "scanner.o" ] + }: pkgs.stdenv.mkDerivation { + inherit src; + name = "kak-tree-sitter-grammar-${name}.so"; + version = "latest"; + buildPhase = '' + mkdir ${grammarPath}/build + cd ${grammarPath}/build + $CC ${lib.concatStringsSep " " grammarCompileArgs} + $CC ${lib.concatStringsSep " " grammarLinkArgs} -o ${name}.so + ''; + installPhase = '' + cp ${name}.so $out + ''; + }; + in { options.programs.my-kakoune.tree-sitter = { @@ -200,24 +221,15 @@ 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; - source.git.url = "${mkGitRepo grammar.src}"; - source.git.pin = "${srcName grammar.src}"; + source.local.path = mkGrammarPackage { + inherit name; + src = grammar.src; + grammarPath = grammar.path; + grammarCompileArgs = grammar.compile.flags ++ grammar.compile.args; + grammarLinkArgs = grammar.link.flags ++ grammar.link.args; + }; compile = grammar.compile.command; compile_args = grammar.compile.args; compile_flags = grammar.compile.flags; @@ -225,10 +237,9 @@ in link_args = grammar.link.args ++ [ "-o" "${name}.so" ]; link_flags = grammar.link.flags; }; - queries = { - source.git.url = "${mkGitRepo queries.src}"; - source.git.pin = "${srcName queries.src}"; + queries = rec { path = if queries.path == null then "runtime/queries/${name}" else queries.path; + source.local.path = "${queries.src}/${path}"; }; }; in @@ -249,14 +260,14 @@ in features = cfg.features; language = builtins.mapAttrs toLanguageConf cfg.languages; }; - - onChange = '' - export PATH=$PATH:${lib.getBin pkgs.gcc} - ${cfg.package}/bin/ktsctl sync -a - ''; }; programs.my-kakoune.extraFaces = faces; + programs.my-kakoune.autoloadFile."kak-tree-sitter.kak".text = '' + # Enable kak-tree-sitter + eval %sh{kak-tree-sitter --kakoune -d --server --init $kak_session} + map global normal ": enter-user-mode tree-sitter" + ''; }; } diff --git a/home/modules/programs/my-niri.nix b/home/modules/programs/my-niri.nix index d62a175..d8efd36 100644 --- a/home/modules/programs/my-niri.nix +++ b/home/modules/programs/my-niri.nix @@ -82,10 +82,13 @@ in Before = [ "xwayland.target" "xdg-desktop-autostart.target" ]; After = [ "niri.service" ]; }; + Install.WantedBy = [ "niri.service" ]; Install.UpheldBy = [ "niri.service" ]; Service.Slice = "session.slice"; Service.Type = "notify"; Service.ExecStart = "${lib.getExe pkgs.xwayland-satellite} ${xwayland-display}"; + Service.ExecStartPost = [ "systemctl --user set-environment DISPLAY=${xwayland-display}" ]; + Service.ExecStopPost = [ "systemctl --user unset-environment" ]; }; programs.niri.settings = { @@ -93,7 +96,6 @@ in QT_QPA_PLATFORM = "wayland"; QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; QT_IM_MODULE = "fcitx"; - GTK_IM_MODULE = "fcitx"; # Til text-input is merged # export NIXOS_OZONE_WL=1 # Until text-input is merged DISPLAY = xwayland-display; } // lib.optionalAttrs osConfig.services.desktopManager.plasma6.enable { @@ -331,26 +333,26 @@ in # # For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on # will all refer to the 3rd workspace. - "Mod+1".action = focus-workspace (cfg.workspaces."01".name); - "Mod+2".action = focus-workspace (cfg.workspaces."02".name); - "Mod+3".action = focus-workspace (cfg.workspaces."03".name); - "Mod+4".action = focus-workspace (cfg.workspaces."04".name); - "Mod+5".action = focus-workspace (cfg.workspaces."05".name); - "Mod+6".action = focus-workspace (cfg.workspaces."06".name); - "Mod+7".action = focus-workspace (cfg.workspaces."07".name); - "Mod+8".action = focus-workspace (cfg.workspaces."08".name); - "Mod+9".action = focus-workspace (cfg.workspaces."09".name); - "Mod+0".action = focus-workspace (cfg.workspaces."10".name); - "Mod+Shift+1".action = move-column-to-workspace (cfg.workspaces."01".name); - "Mod+Shift+2".action = move-column-to-workspace (cfg.workspaces."02".name); - "Mod+Shift+3".action = move-column-to-workspace (cfg.workspaces."03".name); - "Mod+Shift+4".action = move-column-to-workspace (cfg.workspaces."04".name); - "Mod+Shift+5".action = move-column-to-workspace (cfg.workspaces."05".name); - "Mod+Shift+6".action = move-column-to-workspace (cfg.workspaces."06".name); - "Mod+Shift+7".action = move-column-to-workspace (cfg.workspaces."07".name); - "Mod+Shift+8".action = move-column-to-workspace (cfg.workspaces."08".name); - "Mod+Shift+9".action = move-column-to-workspace (cfg.workspaces."09".name); - "Mod+Shift+0".action = move-column-to-workspace (cfg.workspaces."10".name); + "Mod+1" = lib.mkIf cfg.workspaces."01".fixed { action = focus-workspace (cfg.workspaces."01".name); }; + "Mod+2" = lib.mkIf cfg.workspaces."02".fixed { action = focus-workspace (cfg.workspaces."02".name); }; + "Mod+3" = lib.mkIf cfg.workspaces."03".fixed { action = focus-workspace (cfg.workspaces."03".name); }; + "Mod+4" = lib.mkIf cfg.workspaces."04".fixed { action = focus-workspace (cfg.workspaces."04".name); }; + "Mod+5" = lib.mkIf cfg.workspaces."05".fixed { action = focus-workspace (cfg.workspaces."05".name); }; + "Mod+6" = lib.mkIf cfg.workspaces."06".fixed { action = focus-workspace (cfg.workspaces."06".name); }; + "Mod+7" = lib.mkIf cfg.workspaces."07".fixed { action = focus-workspace (cfg.workspaces."07".name); }; + "Mod+8" = lib.mkIf cfg.workspaces."08".fixed { action = focus-workspace (cfg.workspaces."08".name); }; + "Mod+9" = lib.mkIf cfg.workspaces."09".fixed { action = focus-workspace (cfg.workspaces."09".name); }; + "Mod+0" = lib.mkIf cfg.workspaces."10".fixed { action = focus-workspace (cfg.workspaces."10".name); }; + "Mod+Shift+1" = lib.mkIf cfg.workspaces."01".fixed { action = move-column-to-workspace (cfg.workspaces."01".name); }; + "Mod+Shift+2" = lib.mkIf cfg.workspaces."02".fixed { action = move-column-to-workspace (cfg.workspaces."02".name); }; + "Mod+Shift+3" = lib.mkIf cfg.workspaces."03".fixed { action = move-column-to-workspace (cfg.workspaces."03".name); }; + "Mod+Shift+4" = lib.mkIf cfg.workspaces."04".fixed { action = move-column-to-workspace (cfg.workspaces."04".name); }; + "Mod+Shift+5" = lib.mkIf cfg.workspaces."05".fixed { action = move-column-to-workspace (cfg.workspaces."05".name); }; + "Mod+Shift+6" = lib.mkIf cfg.workspaces."06".fixed { action = move-column-to-workspace (cfg.workspaces."06".name); }; + "Mod+Shift+7" = lib.mkIf cfg.workspaces."07".fixed { action = move-column-to-workspace (cfg.workspaces."07".name); }; + "Mod+Shift+8" = lib.mkIf cfg.workspaces."08".fixed { action = move-column-to-workspace (cfg.workspaces."08".name); }; + "Mod+Shift+9" = lib.mkIf cfg.workspaces."09".fixed { action = move-column-to-workspace (cfg.workspaces."09".name); }; + "Mod+Shift+0" = lib.mkIf cfg.workspaces."10".fixed { action = move-column-to-workspace (cfg.workspaces."10".name); }; "Mod+asciicircum".action = focus-workspace (cfg.workspaces."99".name); "Mod+Shift+asciicircum".action = move-column-to-workspace (cfg.workspaces."99".name); diff --git a/home/modules/programs/my-sway/default.nix b/home/modules/programs/my-sway/default.nix index e073abf..1bf6ed3 100644 --- a/home/modules/programs/my-sway/default.nix +++ b/home/modules/programs/my-sway/default.nix @@ -104,6 +104,7 @@ in enableLaptopBars = mkDefault cfg.enableLaptop; terminal = mkDefault cfg.terminal; }; + config.systemd.user.services.swaync.Install.WantedBy = mkIf cfg.enable [ "sway-session.target" ]; config.wayland.windowManager.sway = mkIf cfg.enable { enable = true; diff --git a/home/nki-framework.nix b/home/nki-framework.nix index 3c995eb..699512d 100644 --- a/home/nki-framework.nix +++ b/home/nki-framework.nix @@ -29,7 +29,8 @@ # Graphical set up linux.graphical.type = "wayland"; linux.graphical.wallpaper = ./images/wallpaper_0.png; - linux.graphical.defaults.webBrowser.package = pkgs.librewolf; + linux.graphical.defaults.webBrowser.package = pkgs.zen-browser-bin; + linux.graphical.defaults.webBrowser.desktopFile = "zen.desktop"; # Enable sway programs.my-sway.enable = true; programs.my-sway.fontSize = 14.0; @@ -47,6 +48,9 @@ }; }; programs.my-niri.enable = true; + programs.my-niri.workspaces = lib.genAttrs [ "04" "05" "06" "07" "08" "09" ] (_: { + fixed = false; + }); programs.niri.settings = { input.keyboard.xkb.options = "ctrl:swapcaps"; }; diff --git a/home/osu.nix b/home/osu.nix index 07f4cf1..705f271 100644 --- a/home/osu.nix +++ b/home/osu.nix @@ -5,10 +5,10 @@ let osu-pkg = with pkgs; with lib; appimageTools.wrapType2 rec { pname = "osu-lazer-bin"; - version = "2025.101.0"; + version = "2025.221.0"; src = fetchurl { url = "https://github.com/ppy/osu/releases/download/${version}/osu.AppImage"; - hash = "sha256-GsnTxVpNk2RXHLET6Ugv0/ZOlq8RUkw2ZXqRjkU+dzw="; + hash = "sha256-V6JJShVGE4GXGI8FvDhyWuHUnlI+p3JLW/NN+u+Vikc="; }; extraPkgs = pkgs: with pkgs; [ icu ]; diff --git a/modules/cloud/authentik/default.nix b/modules/cloud/authentik/default.nix index 74d7f61..9c51f39 100644 --- a/modules/cloud/authentik/default.nix +++ b/modules/cloud/authentik/default.nix @@ -52,6 +52,7 @@ in serviceConfig.EnvironmentFile = cfg.envFile; serviceConfig.Type = "notify"; serviceConfig.NotifyAccess = "all"; + serviceConfig.TimeoutSec = 300; script = lib.mkBefore '' ${lib.getExe pkgs.wait4x} http http://127.0.0.1:${toString cfg.port} --expect-status-code 200 -t 0 -q -- systemd-notify --ready & ''; diff --git a/modules/common/linux/default.nix b/modules/common/linux/default.nix index 36bef19..2c2186b 100644 --- a/modules/common/linux/default.nix +++ b/modules/common/linux/default.nix @@ -76,6 +76,7 @@ let virtualisation = { pkgs, ... }: mkIf cfg.enable { virtualisation.podman = { enable = true; + extraPackages = [ pkgs.slirp4netns ]; dockerCompat = true; defaultNetwork.settings.dns_enabled = true; }; @@ -330,7 +331,12 @@ in # DConf for GNOME configurations programs.dconf.enable = true; # Gaming! (not for ARM64) - programs.steam.enable = !pkgs.stdenv.isAarch64; + programs.steam.enable = true; + programs.gamescope = { + enable = true; + # capSysNice = true; # https://github.com/NixOS/nixpkgs/issues/351516 + args = [ "--adaptive-sync" "--rt" ]; + }; ## Services # OpenSSH so you can SSH to me diff --git a/nki-home/hardware-configuration.nix b/nki-home/hardware-configuration.nix index 7b695ed..35a97ec 100644 --- a/nki-home/hardware-configuration.nix +++ b/nki-home/hardware-configuration.nix @@ -33,6 +33,18 @@ fsType = "vfat"; }; + fileSystems."/mnt/steam" = { + device = "/dev/disk/by-uuid/d1db9f65-6add-4714-b9d7-16e16f687396"; + fsType = "btrfs"; + options = [ "compress=zstd" "subvol=steam" ]; + encrypted = { + enable = true; + label = "encdata"; + blkDev = "/dev/disk/by-uuid/6544f506-9a22-479c-8bfc-aee1b9e0deda"; + keyFile = "/sysroot/var/crypto/key_data"; + }; + }; + swapDevices = [{ device = "/dev/disk/by-uuid/561f6441-1915-4059-a5e1-76a449b0c9bf"; }]; diff --git a/overlay.nix b/overlay.nix index 1e60c41..81bb8f4 100644 --- a/overlay.nix +++ b/overlay.nix @@ -22,7 +22,7 @@ let overlay-versioning = final: prev: { gotosocial = prev.gotosocial.overrideAttrs (attrs: rec { - version = "0.17.1"; + version = "0.18.0-rc3"; ldflags = [ "-s" "-w" @@ -32,13 +32,13 @@ let web-assets = final.fetchurl { url = "https://github.com/superseriousbusiness/gotosocial/releases/download/v${version}/gotosocial_${version}_web-assets.tar.gz"; - hash = "sha256-rGntLlIbgfCtdqpD7tnvAY8qwF+BpYbQWfAGMhdOTgY="; + hash = "sha256-qbhUsH9F7xteRVg9c9y/iVrtir1vhCOL3v6CsDsMblg="; }; src = final.fetchFromGitHub { owner = "superseriousbusiness"; repo = "gotosocial"; rev = "v${version}"; - hash = "sha256-oWWsCs9jgd244yzWhgLkuHp7kY0BQ8+Ay6KpuBVG+U8="; + hash = "sha256-BYGkuLYwJtV2FSfr0MQKMpwCddTWMfbYUXqP7SZCv1A="; }; postInstall = '' tar xf ${web-assets} @@ -72,9 +72,9 @@ let }); vikunja = - builtins.seq - (final.lib.assertMsg (prev.vikunja.version == "0.24.5") "Vikunja probably doesn't need custom versions anymore") - (final.callPackage ./packages/common/vikunja.nix { }); + # builtins.seq + # (final.lib.assertMsg (prev.vikunja.version == "0.24.5") "Vikunja probably doesn't need custom versions anymore") + (final.callPackage ./packages/common/vikunja.nix { }); luminance = prev.luminance.overrideAttrs (attrs: { nativeBuildInputs = attrs.nativeBuildInputs ++ [ final.wrapGAppsHook ]; @@ -83,6 +83,14 @@ let glib-compile-schemas $out/share/glib-2.0/schemas ''; }); + + vesktop = prev.vesktop.overrideAttrs (attrs: { + postFixup = + let + flagToReplace = if final.lib.hasInfix "--enable-wayland-ime=true" attrs.postFixup then "--enable-wayland-ime=true" else "--enable-wayland-ime"; + in + builtins.replaceStrings [ "NIXOS_OZONE_WL" flagToReplace ] [ "WAYLAND_DISPLAY" "${flagToReplace} --wayland-text-input-version=3" ] attrs.postFixup; + }); }; overlay-libs = final: prev: { @@ -90,27 +98,35 @@ let }; overlay-packages = final: prev: { - kak-tree-sitter = final.callPackage ./packages/common/kak-tree-sitter.nix { rustPlatform = final.unstable.rustPlatform; }; + kak-tree-sitter = final.callPackage ./packages/common/kak-tree-sitter { rustPlatform = final.unstable.rustPlatform; }; - kak-lsp = - let - src = inputs.kak-lsp; - cargoArtifacts = final.libs.crane.buildDepsOnly { inherit src; }; - in - final.libs.crane.buildPackage { - inherit src cargoArtifacts; - buildInputs = (with final; - lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ Security SystemConfiguration CoreServices ]) - ) ++ (with final; [ libiconv ]); - }; + kak-lsp = final.rustPlatform.buildRustPackage { + name = "kak-lsp"; + src = inputs.kak-lsp; + cargoHash = "sha256-U9KxTHzIDtdJ3A62rcdvWlxJfnhbFnS6KDRaV0HJOHE="; + buildInputs = [ final.libiconv ]; - zen-browser-bin = final.callPackage inputs.zen-browser.packages.${final.stdenv.system}.zen-browser.override { - wrap-firefox = opts: final.wrapFirefox (opts // { + meta.mainProgram = "kak-lsp"; + }; + # cargoArtifacts = final.libs.crane.buildDepsOnly { inherit src; }; + # in + # final.libs.crane.buildPackage { + # inherit src cargoArtifacts; + # buildInputs = (with final; + # lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ Security SystemConfiguration CoreServices ]) + # ) ++ (with final; [ libiconv ]); + + # meta.mainProgram = "kak-lsp"; + # }; + + zen-browser-bin = inputs.zen-browser.packages.${final.stdenv.system}.zen-browser.override { + inherit (inputs.zen-browser.packages.${final.stdenv.system}) zen-browser-unwrapped; + wrapFirefox = opts: final.wrapFirefox (opts // { nativeMessagingHosts = with final; [ kdePackages.plasma-browser-integration ]; }); - zen-browser-unwrapped = final.callPackage inputs.zen-browser.packages.${final.stdenv.system}.zen-browser-unwrapped.override { - sources = inputs.zen-browser.inputs; - }; + # zen-browser-unwrapped = final.callPackage inputs.zen-browser.packages.${final.stdenv.system}.zen-browser-unwrapped.override { + # sources = inputs.zen-browser.inputs; + # }; }; }; in @@ -133,6 +149,3 @@ in # Bug fixes ] # we assign the overlay created before to the overlays of nixpkgs. - - - diff --git a/packages/common/default.nix b/packages/common/default.nix index be4ba2a..fadb679 100644 --- a/packages/common/default.nix +++ b/packages/common/default.nix @@ -2,4 +2,5 @@ final: prev: { epfl-cups-drivers = final.callPackage ./epfl-cups-drivers { }; ttaenc = final.callPackage ./ttaenc.nix { }; suwako-cursors = final.callPackage ./suwako-cursors { }; + nki-kakoune = final.callPackage ./nki-kakoune { }; } diff --git a/packages/common/kak-tree-sitter.nix b/packages/common/kak-tree-sitter/default.nix similarity index 82% rename from packages/common/kak-tree-sitter.nix rename to packages/common/kak-tree-sitter/default.nix index 3e0c6a9..ff395ff 100644 --- a/packages/common/kak-tree-sitter.nix +++ b/packages/common/kak-tree-sitter/default.nix @@ -3,15 +3,15 @@ let src = fetchFromSourcehut { owner = "~hadronized"; repo = "kak-tree-sitter"; - rev = "kak-tree-sitter-v1.1.2"; - hash = "sha256-wBWfSyR8LGtug/mCD0bJ4lbdN3trIA/03AnCxZoEOSA="; + rev = "kak-tree-sitter-v1.1.3"; + hash = "sha256-vQZ+zQgwIw5ZBdIuMDD37rIdhe+WpNBmq0TciXBNiSU="; }; kak-tree-sitter = rustPlatform.buildRustPackage { inherit src; pname = "kak-tree-sitter"; - version = "1.1.2"; - cargoHash = "sha256-OQPUWqJAts8DbFNSsC/CmMCbuZ9TVxRTR05O7oiodKI="; + version = "1.1.3"; + cargoHash = "sha256-1OwPfl1446SYt1556jwR9mvWOWEv+ab+wH7GZQeS4/E="; cargoBuildOptions = [ "--package" "kak-tree-sitter" "--package" "ktsctl" ]; nativeBuildInputs = [ clang git ]; @@ -35,6 +35,8 @@ let self.runtime_dir.join("sources").join(url_dir) '') ]; + + meta.mainProgram = "kak-tree-sitter"; }; in kak-tree-sitter diff --git a/home/kakoune/autoload/latex.kak b/packages/common/nki-kakoune/autoload/latex.kak similarity index 100% rename from home/kakoune/autoload/latex.kak rename to packages/common/nki-kakoune/autoload/latex.kak diff --git a/home/kakoune/autoload/markdown.kak b/packages/common/nki-kakoune/autoload/markdown.kak similarity index 100% rename from home/kakoune/autoload/markdown.kak rename to packages/common/nki-kakoune/autoload/markdown.kak diff --git a/packages/common/nki-kakoune/default.nix b/packages/common/nki-kakoune/default.nix new file mode 100644 index 0000000..f4851af --- /dev/null +++ b/packages/common/nki-kakoune/default.nix @@ -0,0 +1,25 @@ +{ callPackage, kakoune, kakoune-unwrapped, ... }: +let + lsp = callPackage ./lsp.nix { }; + rc = (callPackage ./rc.nix { }); +in +(kakoune.override { + plugins = callPackage ./plugins.nix { } + ++ callPackage ./themes.nix { } + ++ [ + (callPackage ./kaktex { }) + (callPackage ./faces.nix { }) + rc + lsp.plugin + ]; +}).overrideAttrs (attrs: { + buildCommand = '' + ${attrs.buildCommand or ""} + # location of kak binary is used to find ../share/kak/autoload, + # unless explicitly overriden with KAKOUNE_RUNTIME + rm "$out/bin/kak" + makeWrapper "${kakoune-unwrapped}/bin/kak" "$out/bin/kak" \ + --set KAKOUNE_RUNTIME "$out/share/kak" \ + --suffix PATH ":" "${lsp.extraPaths}" + ''; +}) diff --git a/packages/common/nki-kakoune/faces.nix b/packages/common/nki-kakoune/faces.nix new file mode 100644 index 0000000..367472c --- /dev/null +++ b/packages/common/nki-kakoune/faces.nix @@ -0,0 +1,31 @@ +{ callPackage, ... } : +let +utils = callPackage ./utils.nix { }; +faces = { + 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"; + InfoBlockQuote = "+i@block"; + InfoBullet = "@bullet"; + InfoHeader = "@header"; + InfoLink = "@link"; + InfoLinkMono = "+b@mono"; + InfoMono = "@mono"; + InfoRule = "+b@Information"; + InfoDiagnosticError = "@DiagnosticError"; + InfoDiagnosticHint = "@DiagnosticHint"; + InfoDiagnosticInformation = "@Information"; + InfoDiagnosticWarning = "@DiagnosticWarning"; + # Extra faces + macro = "+u@function"; + method = "@function"; + format_specifier = "+i@string"; + mutable_variable = "+i@variable"; + class = "+b@variable"; +}; +in utils.mkFacesScript "default-faces" faces diff --git a/home/kakoune/kakrc b/packages/common/nki-kakoune/kakrc similarity index 69% rename from home/kakoune/kakrc rename to packages/common/nki-kakoune/kakrc index 7502c2a..878869c 100644 --- a/home/kakoune/kakrc +++ b/packages/common/nki-kakoune/kakrc @@ -1,6 +1,3 @@ -# Enable kak-tree-sitter -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" @@ -8,6 +5,7 @@ map global normal ": enter-user-mode tree-sitter" # set global kts_sky "rgb:6aa622" # Color scheme colorscheme catppuccin-latte +set-face global module "%opt{sapphire}" set global base "default" # Set indentation guides @@ -90,47 +88,6 @@ hook global InsertCompletionHide .* %{ unmap window insert } -# Enable LSP -try %{ - eval %sh{test -z "$WE_STARTED_KAK" && kak-lsp --kakoune -s $kak_session} - set-option global lsp_cmd "kak-lsp -s %val{session}" -} -hook global WinSetOption filetype=(racket|rust|python|go|javascript|typescript|c|cpp|tex|latex|fsharp|ocaml|haskell|nix|scala|typst|html|css|json|markdown|templ|elixir) %{ - lsp-enable-window - map window lsp N -docstring "Display the next message request" ": lsp-show-message-request-next" - map window normal ": enter-user-mode lsp" - map window normal ": lsp-hover" - map window normal ": lsp-hover-buffer" - # lsp-auto-hover-insert-mode-enable - set window lsp_hover_anchor true - map global insert ':try lsp-snippets-select-next-placeholders catch %{ execute-keys -with-hooks tab> }' -docstring 'Select next snippet placeholder' - map global object a 'lsp-object' -docstring 'LSP any symbol' - map global object 'lsp-object' -docstring 'LSP any symbol' - map global object f 'lsp-object Function Method' -docstring 'LSP function or method' - map global object t 'lsp-object Class Interface Struct' -docstring 'LSP class interface or struct' - map global object d 'lsp-diagnostic-object --include-warnings' -docstring 'LSP errors and warnings' - map global object D 'lsp-diagnostic-object' -docstring 'LSP errors' -} - -hook global WinSetOption filetype=(racket|rust|python|go|javascript|typescript|c|cpp|tex|latex|haskell|nix|fsharp|templ) %{ - # Format the document if possible - hook window BufWritePre .* %{ lsp-formatting-sync } -} - -hook global WinSetOption filetype=(rust|scala|fsharp) %{ - # Enable inlay hints - lsp-inlay-hints-enable window -} - -hook global WinSetOption filetype=(rust|go|fsharp|typst|scala) %{ - hook window -group semantic-tokens BufReload .* lsp-semantic-tokens - hook window -group semantic-tokens NormalIdle .* lsp-semantic-tokens - hook window -group semantic-tokens InsertIdle .* lsp-semantic-tokens - hook -once -always window WinSetOption filetype=.* %{ - remove-hooks window semantic-tokens - } -} - # in Insert mode moves to end of line. map global insert 'A' @@ -174,7 +131,6 @@ hook global WinSetOption filetype=(typst) %{ hook -once -always window WinSetOption filetype=.* %{ remove-hooks window markdown-.+ } } - define-command -params 0 -docstring "Set up build" scala-build-connect %{ lsp-execute-command 'build-connect' '"[]"' } diff --git a/packages/common/nki-kakoune/kaktex/default.nix b/packages/common/nki-kakoune/kaktex/default.nix new file mode 100644 index 0000000..a8005d5 --- /dev/null +++ b/packages/common/nki-kakoune/kaktex/default.nix @@ -0,0 +1,22 @@ +{ fish, lib, writeScript, writeTextDir, kakouneUtils, ... }: +let + kaktex-script = writeScript "kaktex" '' + #!/usr/bin/env ${lib.getExe fish} + + ${builtins.readFile ./kaktex.fish} + ''; + kaktex = writeTextDir "kaktex.kak" '' + hook global WinSetOption filetype=(tex|latex) %{ + hook window WinDisplay '.*' %{ + eval %sh{ + ${kaktex-script} set $kak_client $kak_session + } + } + } + ''; +in +kakouneUtils.buildKakounePluginFrom2Nix { + pname = "kaktex"; + version = "latest"; + src = kaktex; +} diff --git a/home/kakoune/kaktex b/packages/common/nki-kakoune/kaktex/kaktex.fish similarity index 96% rename from home/kakoune/kaktex rename to packages/common/nki-kakoune/kaktex/kaktex.fish index bdcf722..bb6690b 100755 --- a/home/kakoune/kaktex +++ b/packages/common/nki-kakoune/kaktex/kaktex.fish @@ -1,5 +1,3 @@ -#!/usr/bin/env fish - function usage echo "Usage: " echo " kaktex set [client] [session]" diff --git a/packages/common/nki-kakoune/lsp.nix b/packages/common/nki-kakoune/lsp.nix new file mode 100644 index 0000000..297a449 --- /dev/null +++ b/packages/common/nki-kakoune/lsp.nix @@ -0,0 +1,322 @@ +{ lib +, writeTextDir +, formats +, kak-lsp +, # LSP packages + ccls +, gopls +, nil +, nixpkgs-fmt +, python311Packages +, ltex-ls +, nodePackages +, tailwindcss-language-server +, fsautocomplete +, metals +, texlab +, tinymist +, marksman +, templ +, rust-analyzer +, ... +}: +let + # Configuration for kak-lsp + config = { + languageIDs = { + c = "c_cpp"; + cpp = "c_cpp"; + javascript = "javascriptreact"; + typescript = "typescriptreact"; + protobuf = "proto"; + sh = "shellscript"; + }; + + languageServers = + let + vscodeServerWith = { name, extraFileTypes ? [ ] }: { + name = "vscode-${name}-language-server"; + value = { + args = [ "--stdio" ]; + command = "vscode-${name}-language-server"; + filetypes = [ name ] ++ extraFileTypes; + roots = [ "package.json" ".git" ]; + package = nodePackages.vscode-langservers-extracted; + }; + }; + in + { + ccls = { + args = [ "-v=2" "-log-file=/tmp/ccls.log" ]; + package = ccls; + command = "ccls"; + filetypes = [ "c" "cpp" ]; + roots = [ "compile_commands.json" ".cquery" ".git" ]; + }; + gopls = { + command = "gopls"; + package = gopls; + filetypes = [ "go" ]; + offset_encoding = "utf-8"; + roots = [ "Gopkg.toml" "go.mod" ".git" ".hg" ]; + settings = { gopls = { hoverKind = "SynopsisDocumentation"; semanticTokens = true; }; }; + settings_section = "gopls"; + }; + haskell-language-server = { + args = [ "--lsp" ]; + command = "haskell-language-server-wrapper"; + filetypes = [ "haskell" ]; + roots = [ "Setup.hs" "stack.yaml" "*.cabal" "package.yaml" ]; + settings_section = "haskell"; + }; + nil = { + command = "nil"; + package = nil; + filetypes = [ "nix" ]; + roots = [ "flake.nix" "shell.nix" ".git" ]; + settings.nil = { + formatting.command = [ "${lib.getExe nixpkgs-fmt}" ]; + }; + }; + pylsp = { + command = "pylsp"; + package = python311Packages.python-lsp-server; + filetypes = [ "python" ]; + offset_encoding = "utf-8"; + roots = [ "requirements.txt" "setup.py" ".git" ".hg" ]; + }; + # Spellchecking server + ltex-ls = { + command = "ltex-ls"; + args = [ "--log-file=/tmp" ]; + filetypes = [ "latex" "typst" ]; + roots = [ "main.tex" "main.typ" ".git" ]; + package = ltex-ls; + }; + tailwind = { + command = "tailwindcss-language-server"; + args = [ "--stdio" ]; + filetypes = [ "html" "css" "javascript" "typescript" "templ" ]; + roots = [ "tailwind.config.{js,cjs,mjs,ts}" "package.json" ".git" ]; + settings_section = "tailwindCSS"; + settings.tailwindCSS = { + validate = "warning"; + userLanguages.templ = "html"; + }; + package = tailwindcss-language-server; + }; + elixir-ls = { + args = [ ]; + command = "elixir-ls"; + filetypes = [ "elixir" ]; + roots = [ "mix.exs" ]; + }; + typescript-language-server = { + args = [ "--stdio" ]; + command = "typescript-language-server"; + filetypes = [ "typescript" "javascript" ]; + roots = [ "package.json" ]; + package = nodePackages.typescript-language-server; + }; + fsautocomplete = { + args = [ "--adaptive-lsp-server-enabled" "--project-graph-enabled" "--source-text-factory" "RoslynSourceText" ]; + command = "fsautocomplete"; + filetypes = [ "fsharp" ]; + roots = [ "*.fsproj" ]; + settings_section = "FSharp"; + settings.FSharp = { + AutomaticWorkspaceInit = true; + }; + package = fsautocomplete; + }; + metals = { + command = "metals"; + filetypes = [ "scala" ]; + roots = [ "build.sbt" "build.sc" "build.mill" ]; + settings_section = "metals"; + settings.metals = { + enableSemanticHighlighting = true; + showInferredType = true; + decorationProvider = true; + inlineDecorationProvider = true; + # From kakoune-lsp's own options + icons = "unicode"; + isHttpEnabled = true; + statusBarProvider = "log-message"; + compilerOptions = { overrideDefFormat = "unicode"; }; + }; + package = metals; + }; + texlab = { + command = "texlab"; + filetypes = [ "latex" ]; + roots = [ "main.tex" "all.tex" ".git" ]; + settings_section = "texlab"; + settings.texlab = { + build.executable = "latexmk"; + build.args = [ "-pdf" "-shell-escape" "-interaction=nonstopmode" "-synctex=1" "%f" ]; + + build.forwardSearchAfter = true; + build.onSave = true; + + # forwardSearch = + # (if pkgs.stdenv.isDarwin then { + # executable = "/Applications/Skim.app/Contents/SharedSupport/displayline"; + # args = [ "-r" "-g" "%l" "%p" "%f" ]; + # } else + # { + # executable = "${pkgs.zathura}/bin/zathura"; + # args = [ "--synctex-forward" "%l:1:%f" "%p" "-x" "${./kaktex} jump %%{input} %%{line} %%{column}" ]; + # }); + }; + package = texlab; + }; + tinymist = { + command = "tinymist"; + filetypes = [ "typst" ]; + roots = [ "main.typ" ".git" ]; + settings_section = "tinymist"; + settings.tinymist = { + exportPdf = "onSave"; + formatterMode = "typstfmt"; + }; + package = tinymist; + }; + marksman = { + command = "marksman"; + filetypes = [ "markdown" ]; + roots = [ ".marksman.toml" ".git" ]; + package = marksman; + }; + templ = { + command = "templ"; + args = [ "lsp" ]; + filetypes = [ "templ" ]; + roots = [ "go.mod" ".git" ]; + package = templ; + }; + rust-analyzer = { + args = [ ]; + command = "rust-analyzer"; + filetypes = [ "rust" ]; + roots = [ "Cargo.toml" ]; + package = rust-analyzer; + }; + + } // (builtins.listToAttrs (builtins.map + (ft: vscodeServerWith { + name = ft; + extraFileTypes = if ft == "json" then [ ] else [ "templ" ]; + }) [ "html" "css" "json" ])); + + faces = [ + ## Items + # (Rust) Macros + { face = "attribute"; token = "attribute"; } + { face = "attribute"; token = "derive"; } + { face = "macro"; token = "macro"; } # Function-like Macro + # Keyword and Fixed Tokens + { face = "keyword"; token = "keyword"; } + { face = "operator"; token = "operator"; } + # Functions and Methods + { face = "function"; token = "function"; } + { face = "method"; token = "method"; } + # Constants + { face = "string"; token = "string"; } + { face = "format_specifier"; token = "formatSpecifier"; } + # Variables + { face = "variable"; token = "variable"; modifiers = [ "readonly" ]; } + { face = "mutable_variable"; token = "variable"; } + { face = "module"; token = "namespace"; } + { face = "variable"; token = "type_parameter"; } + { face = "class"; token = "enum"; } + { face = "class"; token = "struct"; } + { face = "class"; token = "trait"; } + { face = "class"; token = "union"; } + { face = "class"; token = "class"; } + + ## Comments + { face = "documentation"; token = "comment"; modifiers = [ "documentation" ]; } + { face = "comment"; token = "comment"; } + + # Typst + { face = "header"; token = "heading"; } + { face = "ts_markup_link_url"; token = "link"; } + { face = "ts_markup_link_uri"; token = "ref"; } + { face = "ts_markup_link_label"; token = "label"; } + { face = "ts_property"; token = "pol"; } + { face = "ts_markup_list_checked"; token = "marker"; } + { face = "ts_constant_builtin_boolean"; token = "bool"; } + { face = "ts_keyword_control"; token = "delim"; } + { face = "ts_number"; token = "text"; modifiers = [ "math" ]; } + { face = "ts_markup_bold"; token = "text"; modifiers = [ "strong" ]; } + { face = "ts_markup_italic"; token = "text"; modifiers = [ "emph" ]; } + ]; + + raw = { + server = { timeout = 1800; }; + snippet_support = false; + verbosity = 255; + }; + }; + + kak-lsp-config = + let + toml = formats.toml { }; + toLspConfig = builtins.mapAttrs (_: attrs: builtins.removeAttrs attrs [ "package" ]); + in + toml.generate "kak-lsp.toml" ({ + semantic_tokens.faces = config.faces; + language_server = toLspConfig config.languageServers; + language_ids = config.languageIDs; + } // config.raw); + + serverPackages = + builtins.filter (v: v != null) + (lib.mapAttrsToList (_: serv: serv.package or null) config.languageServers); +in +{ + extraPaths = lib.makeBinPath (serverPackages ++ [ kak-lsp ]); + plugin = writeTextDir "share/kak/autoload/kak-lsp.kak" '' + hook global KakBegin .* %{ + try %{ + eval %sh{kak-lsp --kakoune --config ${kak-lsp-config} -s $kak_session} + } + + lsp-enable + map global lsp N -docstring "Display the next message request" ": lsp-show-message-request-next" + map global normal ": enter-user-mode lsp" + map global normal ": lsp-hover" + map global normal ": lsp-hover-buffer" + # lsp-auto-hover-insert-mode-enable + set global lsp_hover_anchor true + map global insert ':try lsp-snippets-select-next-placeholders catch %{ execute-keys -with-hooks tab> }' -docstring 'Select next snippet placeholder' + map global object a 'lsp-object' -docstring 'LSP any symbol' + map global object 'lsp-object' -docstring 'LSP any symbol' + map global object f 'lsp-object Function Method' -docstring 'LSP function or method' + map global object t 'lsp-object Class Interface Struct' -docstring 'LSP class interface or struct' + map global object d 'lsp-diagnostic-object --include-warnings' -docstring 'LSP errors and warnings' + map global object D 'lsp-diagnostic-object' -docstring 'LSP errors' + + hook global WinSetOption filetype=(racket|rust|python|go|javascript|typescript|c|cpp|tex|latex|haskell|nix|fsharp|templ) %{ + # Format the document if possible + hook window BufWritePre .* %{ lsp-formatting-sync } + } + + hook global WinSetOption filetype=(rust|scala|fsharp) %{ + # Enable inlay hints + lsp-inlay-hints-enable window + } + + hook global WinSetOption filetype=(rust|go|fsharp|typst|scala) %{ + hook window -group semantic-tokens BufReload .* lsp-semantic-tokens + hook window -group semantic-tokens NormalIdle .* lsp-semantic-tokens + hook window -group semantic-tokens InsertIdle .* lsp-semantic-tokens + hook -once -always window WinSetOption filetype=.* %{ + remove-hooks window semantic-tokens + } + } + } + ''; +} + diff --git a/packages/common/nki-kakoune/plugins.nix b/packages/common/nki-kakoune/plugins.nix new file mode 100644 index 0000000..b524a14 --- /dev/null +++ b/packages/common/nki-kakoune/plugins.nix @@ -0,0 +1,205 @@ +{ pkgs, symlinkJoin, writeTextDir, kakouneUtils, ... }: +with { + inherit (kakouneUtils) buildKakounePluginFrom2Nix; +}; +let + toDir = name: file: writeTextDir name (builtins.readFile file); + + writeActivationScript = script: writeTextDir "on-load.kak" '' + hook global KakBegin .* %{ + ${script} + } + ''; + + writeModuleWrapper = name: script: writeTextDir "module.kak" '' + provide-module ${name} %◍ + ${script} + ◍ + ''; + + kakounePlugin = { name, src, wrapAsModule ? false, activationScript ? null, ... }@attrs: + let + module = if wrapAsModule then writeModuleWrapper name (builtins.readFile src) else src; + in + buildKakounePluginFrom2Nix { + pname = name; + version = attrs.version or "latest"; + src = if activationScript == null then module else + symlinkJoin { + name = "${name}-src"; + paths = [ + module + (writeActivationScript activationScript) + ]; + }; + }; +in +builtins.map kakounePlugin [ + # My own scripts + { + name = "latex.kak"; + src = toDir "latex.kak" ./autoload/latex.kak; + } + { + name = "markdown.kak"; + src = toDir "markdown.kak" ./autoload/markdown.kak; + } + + # Plugins + { + name = "luar"; + src = pkgs.fetchFromGitHub { + owner = "gustavo-hms"; + repo = "luar"; + rev = "2f430316f8fc4d35db6c93165e2e77dc9f3d0450"; + sha256 = "sha256-vHn/V3sfzaxaxF8OpA5jPEuPstOVwOiQrogdSGtT6X4="; + }; + activationScript = '' + # Enable luar + require-module luar + # Use luajit + set-option global luar_interpreter ${pkgs.luajit}/bin/luajit + ''; + } + { + name = "peneira"; + src = pkgs.fetchFromGitHub { + owner = "natsukagami"; + repo = "peneira"; + rev = "743b9971472853a752475e7c070ce99089c6840c"; + sha256 = "sha256-E4ndbF9YC1p0KrvSuGgwmG1Y2IGTuGKJo/AuMixhzlM="; + }; + activationScript = '' + require-module peneira + + # Change selection color + set-face global PeneiraSelected @PrimarySelection + + # Buffers list + define-command -hidden peneira-buffers %{ + peneira 'buffers: ' %{ printf '%s\n' $kak_quoted_buflist } %{ + buffer %arg{1} + } + } + + # Grep in the current location + define-command peneira-grep %{ + peneira 'line: ' "rg -n ." %{ + lua %arg{1} %{ + local file, line = arg[1]:match("([^:]+):(%d+):") + kak.edit(file, line) + } + } + } + + # A peneira menu + declare-user-mode fuzzy-match-menu + + map -docstring "Switch to buffer" global fuzzy-match-menu b ": peneira-buffers" + map -docstring "Symbols" global fuzzy-match-menu s ": peneira-symbols" + map -docstring "Lines" global fuzzy-match-menu l ": peneira-lines" + map -docstring "Lines in the current directory" global fuzzy-match-menu g ": peneira-grep" + map -docstring "Files in project" global fuzzy-match-menu f ": peneira-files" + map -docstring "Files in currently opening file's directory" global fuzzy-match-menu F ": peneira-local-files" + + # Bind menu to user mode + map -docstring "Fuzzy matching" global user f ": enter-user-mode fuzzy-match-menu" + ''; + } + { + name = "kakoune-focus"; + src = pkgs.fetchFromGitHub { + owner = "caksoylar"; + repo = "kakoune-focus"; + rev = "949c0557cd4c476822acfa026ca3c50f3d38a3c0"; + sha256 = "sha256-ZV7jlLJQyL420YG++iC9rq1SMjo3WO5hR9KVvJNUiCs="; + }; + activationScript = '' + map global user ': focus-toggle' -docstring "toggle selections focus" + ''; + } + { + name = "kakoune-inc-dec"; + src = pkgs.fetchFromGitLab { + owner = "Screwtapello"; + repo = "kakoune-inc-dec"; + rev = "7bfe9c51"; + sha256 = "0f33wqxqbfygxypf348jf1fiscac161wf2xvnh8zwdd3rq5yybl0"; + }; + } + { + name = "racket.kak"; + src = (builtins.fetchTree { + type = "git"; + url = "https://bitbucket.org/KJ_Duncan/kakoune-racket.kak.git"; + rev = "e397042009b46916ff089d79166ec0e8ca813a18"; + narHash = "sha256-IcxFmvG0jqpMCG/dT9crVRgPgMGKkic6xwrnW5z4+bc="; + }) + "/rc"; + } + # { + # name = "kakoune-discord"; + # src = (builtins.getFlake "github:natsukagami/kakoune-discord/03f95e40d6efd8fd3de7bca31653d43de2dcfc5f").packages.${pkgs.system}.kakoune-discord-rc + "/rc"; + # } + rec { + name = "kakoune-mirror"; + src = pkgs.fetchFromGitHub + { + owner = "Delapouite"; + repo = "kakoune-mirror"; + rev = "5710635f440bcca914d55ff2ec1bfcba9efe0f15"; + sha256 = "sha256-uslx4zZhvjUylrPWvTOugsKYKKpF0EEz1drc1Ckrpjk="; + } + "/mirror.kak"; + wrapAsModule = true; + activationScript = '' + require-module ${name} + + # Bind to ${name} + map global normal ': enter-user-mode -lock mirror' + ''; + } + { + name = "unicode-math"; + src = pkgs.fetchFromGitHub { + owner = "natsukagami"; + repo = "kakoune-unicode-math"; + rev = "08dff25da2b86ee0b0777091992bc7fb28c3cb1d"; + # sha256 = lib.fakeSha256; + sha256 = "sha256-j0L1ARex1i2ma8sGLYwgkfAbh0jWKh/6QGHFaxPXIKc="; + fetchSubmodules = true; + }; + activationScript = '' + require-module unicode-math + + # Bind to the menu + map global insert ': insert-unicode ' + ''; + } + { + name = "kakoune-buffers"; + src = pkgs.fetchFromGitHub { + owner = "Delapouite"; + repo = "kakoune-buffers"; + rev = "6b2081f5b7d58c72de319a5cba7bf628b6802881"; + sha256 = "sha256-jOSrzGcLJjLK1GiTSsl2jLmQMPbPxjycR0pwF5t/eV0="; + }; + activationScript = '' + # Suggested hook + + hook global WinDisplay .* info-buffers + + # Suggested mappings + + map global user b ':enter-buffers-mode' -docstring 'buffers…' + map global normal ^ ':enter-buffers-mode' -docstring 'buffers…' + map global user B ':enter-user-mode -lock buffers' -docstring 'buffers (lock)…' + + # Suggested aliases + + alias global bd delete-buffer + alias global bf buffer-first + alias global bl buffer-last + alias global bo buffer-only + alias global bo! buffer-only-force + ''; + } +] diff --git a/packages/common/nki-kakoune/rc.nix b/packages/common/nki-kakoune/rc.nix new file mode 100644 index 0000000..ac579c9 --- /dev/null +++ b/packages/common/nki-kakoune/rc.nix @@ -0,0 +1,27 @@ +{ lib +, fish +, writeScript +, writeTextDir +, prependRc ? "" +, appendRc ? "" +, ... +}: + +let + source-pwd = writeScript "source-pwd" '' + #!/usr/bin/env ${lib.getExe fish} + + ${builtins.readFile ./source-pwd.fish} + ''; +in +writeTextDir "share/kak/kakrc.local" '' + ${prependRc} + ${builtins.readFile ./kakrc} + ${appendRc} + + # Source any settings in the current working directory, + # recursive upwards + evaluate-commands %sh{ + ${source-pwd} + } +'' diff --git a/home/kakoune/source-pwd b/packages/common/nki-kakoune/source-pwd.fish similarity index 91% rename from home/kakoune/source-pwd rename to packages/common/nki-kakoune/source-pwd.fish index 35e5b0f..aa9aa37 100755 --- a/home/kakoune/source-pwd +++ b/packages/common/nki-kakoune/source-pwd.fish @@ -1,5 +1,3 @@ -#!/usr/bin/env fish - if test (pwd) = "/home/natsukagami/.config/kak" exit 0 end diff --git a/packages/common/nki-kakoune/themes.nix b/packages/common/nki-kakoune/themes.nix new file mode 100644 index 0000000..5c24299 --- /dev/null +++ b/packages/common/nki-kakoune/themes.nix @@ -0,0 +1,9 @@ +{ writeTextDir, ... }: +let + themes = [ + { name = "catppuccin-latte"; src = ./themes/catppuccin-latte.kak; } + ]; + + themeToColorscheme = { name, src }: writeTextDir "share/kak/colors/${name}.kak" (builtins.readFile src); +in +builtins.map themeToColorscheme themes diff --git a/home/kakoune/catppuccin-latte.kak b/packages/common/nki-kakoune/themes/catppuccin-latte.kak similarity index 100% rename from home/kakoune/catppuccin-latte.kak rename to packages/common/nki-kakoune/themes/catppuccin-latte.kak diff --git a/packages/common/nki-kakoune/utils.nix b/packages/common/nki-kakoune/utils.nix new file mode 100644 index 0000000..0307bc6 --- /dev/null +++ b/packages/common/nki-kakoune/utils.nix @@ -0,0 +1,7 @@ +{ lib, writeTextDir, ... }: { + mkFacesScript = name: faces: writeTextDir "share/kak/autoload/${name}/faces.kak" '' + hook global KakBegin .* %{ + ${lib.concatStringsSep "\n" (builtins.attrValues (builtins.mapAttrs (name: face: " face global ${name} \"${face}\"") faces))} + } + ''; +}