this repo has no description

feat: init

+3
.envrc
··· 1 + if has nix_direnv_version; then 2 + use flake 3 + fi
+2
.gitignore
··· 1 + result 2 + .devenv/
+287
LICENSE
··· 1 + EUROPEAN UNION PUBLIC LICENCE v. 1.2 2 + EUPL © the European Union 2007, 2016 3 + 4 + This European Union Public Licence (the ‘EUPL’) applies to the Work (as defined 5 + below) which is provided under the terms of this Licence. Any use of the Work, 6 + other than as authorised under this Licence is prohibited (to the extent such 7 + use is covered by a right of the copyright holder of the Work). 8 + 9 + The Work is provided under the terms of this Licence when the Licensor (as 10 + defined below) has placed the following notice immediately following the 11 + copyright notice for the Work: 12 + 13 + Licensed under the EUPL 14 + 15 + or has expressed by any other means his willingness to license under the EUPL. 16 + 17 + 1. Definitions 18 + 19 + In this Licence, the following terms have the following meaning: 20 + 21 + - ‘The Licence’: this Licence. 22 + 23 + - ‘The Original Work’: the work or software distributed or communicated by the 24 + Licensor under this Licence, available as Source Code and also as Executable 25 + Code as the case may be. 26 + 27 + - ‘Derivative Works’: the works or software that could be created by the 28 + Licensee, based upon the Original Work or modifications thereof. This Licence 29 + does not define the extent of modification or dependence on the Original Work 30 + required in order to classify a work as a Derivative Work; this extent is 31 + determined by copyright law applicable in the country mentioned in Article 15. 32 + 33 + - ‘The Work’: the Original Work or its Derivative Works. 34 + 35 + - ‘The Source Code’: the human-readable form of the Work which is the most 36 + convenient for people to study and modify. 37 + 38 + - ‘The Executable Code’: any code which has generally been compiled and which is 39 + meant to be interpreted by a computer as a program. 40 + 41 + - ‘The Licensor’: the natural or legal person that distributes or communicates 42 + the Work under the Licence. 43 + 44 + - ‘Contributor(s)’: any natural or legal person who modifies the Work under the 45 + Licence, or otherwise contributes to the creation of a Derivative Work. 46 + 47 + - ‘The Licensee’ or ‘You’: any natural or legal person who makes any usage of 48 + the Work under the terms of the Licence. 49 + 50 + - ‘Distribution’ or ‘Communication’: any act of selling, giving, lending, 51 + renting, distributing, communicating, transmitting, or otherwise making 52 + available, online or offline, copies of the Work or providing access to its 53 + essential functionalities at the disposal of any other natural or legal 54 + person. 55 + 56 + 2. Scope of the rights granted by the Licence 57 + 58 + The Licensor hereby grants You a worldwide, royalty-free, non-exclusive, 59 + sublicensable licence to do the following, for the duration of copyright vested 60 + in the Original Work: 61 + 62 + - use the Work in any circumstance and for all usage, 63 + - reproduce the Work, 64 + - modify the Work, and make Derivative Works based upon the Work, 65 + - communicate to the public, including the right to make available or display 66 + the Work or copies thereof to the public and perform publicly, as the case may 67 + be, the Work, 68 + - distribute the Work or copies thereof, 69 + - lend and rent the Work or copies thereof, 70 + - sublicense rights in the Work or copies thereof. 71 + 72 + Those rights can be exercised on any media, supports and formats, whether now 73 + known or later invented, as far as the applicable law permits so. 74 + 75 + In the countries where moral rights apply, the Licensor waives his right to 76 + exercise his moral right to the extent allowed by law in order to make effective 77 + the licence of the economic rights here above listed. 78 + 79 + The Licensor grants to the Licensee royalty-free, non-exclusive usage rights to 80 + any patents held by the Licensor, to the extent necessary to make use of the 81 + rights granted on the Work under this Licence. 82 + 83 + 3. Communication of the Source Code 84 + 85 + The Licensor may provide the Work either in its Source Code form, or as 86 + Executable Code. If the Work is provided as Executable Code, the Licensor 87 + provides in addition a machine-readable copy of the Source Code of the Work 88 + along with each copy of the Work that the Licensor distributes or indicates, in 89 + a notice following the copyright notice attached to the Work, a repository where 90 + the Source Code is easily and freely accessible for as long as the Licensor 91 + continues to distribute or communicate the Work. 92 + 93 + 4. Limitations on copyright 94 + 95 + Nothing in this Licence is intended to deprive the Licensee of the benefits from 96 + any exception or limitation to the exclusive rights of the rights owners in the 97 + Work, of the exhaustion of those rights or of other applicable limitations 98 + thereto. 99 + 100 + 5. Obligations of the Licensee 101 + 102 + The grant of the rights mentioned above is subject to some restrictions and 103 + obligations imposed on the Licensee. Those obligations are the following: 104 + 105 + Attribution right: The Licensee shall keep intact all copyright, patent or 106 + trademarks notices and all notices that refer to the Licence and to the 107 + disclaimer of warranties. The Licensee must include a copy of such notices and a 108 + copy of the Licence with every copy of the Work he/she distributes or 109 + communicates. The Licensee must cause any Derivative Work to carry prominent 110 + notices stating that the Work has been modified and the date of modification. 111 + 112 + Copyleft clause: If the Licensee distributes or communicates copies of the 113 + Original Works or Derivative Works, this Distribution or Communication will be 114 + done under the terms of this Licence or of a later version of this Licence 115 + unless the Original Work is expressly distributed only under this version of the 116 + Licence — for example by communicating ‘EUPL v. 1.2 only’. The Licensee 117 + (becoming Licensor) cannot offer or impose any additional terms or conditions on 118 + the Work or Derivative Work that alter or restrict the terms of the Licence. 119 + 120 + Compatibility clause: If the Licensee Distributes or Communicates Derivative 121 + Works or copies thereof based upon both the Work and another work licensed under 122 + a Compatible Licence, this Distribution or Communication can be done under the 123 + terms of this Compatible Licence. For the sake of this clause, ‘Compatible 124 + Licence’ refers to the licences listed in the appendix attached to this Licence. 125 + Should the Licensee's obligations under the Compatible Licence conflict with 126 + his/her obligations under this Licence, the obligations of the Compatible 127 + Licence shall prevail. 128 + 129 + Provision of Source Code: When distributing or communicating copies of the Work, 130 + the Licensee will provide a machine-readable copy of the Source Code or indicate 131 + a repository where this Source will be easily and freely available for as long 132 + as the Licensee continues to distribute or communicate the Work. 133 + 134 + Legal Protection: This Licence does not grant permission to use the trade names, 135 + trademarks, service marks, or names of the Licensor, except as required for 136 + reasonable and customary use in describing the origin of the Work and 137 + reproducing the content of the copyright notice. 138 + 139 + 6. Chain of Authorship 140 + 141 + The original Licensor warrants that the copyright in the Original Work granted 142 + hereunder is owned by him/her or licensed to him/her and that he/she has the 143 + power and authority to grant the Licence. 144 + 145 + Each Contributor warrants that the copyright in the modifications he/she brings 146 + to the Work are owned by him/her or licensed to him/her and that he/she has the 147 + power and authority to grant the Licence. 148 + 149 + Each time You accept the Licence, the original Licensor and subsequent 150 + Contributors grant You a licence to their contributions to the Work, under the 151 + terms of this Licence. 152 + 153 + 7. Disclaimer of Warranty 154 + 155 + The Work is a work in progress, which is continuously improved by numerous 156 + Contributors. It is not a finished work and may therefore contain defects or 157 + ‘bugs’ inherent to this type of development. 158 + 159 + For the above reason, the Work is provided under the Licence on an ‘as is’ basis 160 + and without warranties of any kind concerning the Work, including without 161 + limitation merchantability, fitness for a particular purpose, absence of defects 162 + or errors, accuracy, non-infringement of intellectual property rights other than 163 + copyright as stated in Article 6 of this Licence. 164 + 165 + This disclaimer of warranty is an essential part of the Licence and a condition 166 + for the grant of any rights to the Work. 167 + 168 + 8. Disclaimer of Liability 169 + 170 + Except in the cases of wilful misconduct or damages directly caused to natural 171 + persons, the Licensor will in no event be liable for any direct or indirect, 172 + material or moral, damages of any kind, arising out of the Licence or of the use 173 + of the Work, including without limitation, damages for loss of goodwill, work 174 + stoppage, computer failure or malfunction, loss of data or any commercial 175 + damage, even if the Licensor has been advised of the possibility of such damage. 176 + However, the Licensor will be liable under statutory product liability laws as 177 + far such laws apply to the Work. 178 + 179 + 9. Additional agreements 180 + 181 + While distributing the Work, You may choose to conclude an additional agreement, 182 + defining obligations or services consistent with this Licence. However, if 183 + accepting obligations, You may act only on your own behalf and on your sole 184 + responsibility, not on behalf of the original Licensor or any other Contributor, 185 + and only if You agree to indemnify, defend, and hold each Contributor harmless 186 + for any liability incurred by, or claims asserted against such Contributor by 187 + the fact You have accepted any warranty or additional liability. 188 + 189 + 10. Acceptance of the Licence 190 + 191 + The provisions of this Licence can be accepted by clicking on an icon ‘I agree’ 192 + placed under the bottom of a window displaying the text of this Licence or by 193 + affirming consent in any other similar way, in accordance with the rules of 194 + applicable law. Clicking on that icon indicates your clear and irrevocable 195 + acceptance of this Licence and all of its terms and conditions. 196 + 197 + Similarly, you irrevocably accept this Licence and all of its terms and 198 + conditions by exercising any rights granted to You by Article 2 of this Licence, 199 + such as the use of the Work, the creation by You of a Derivative Work or the 200 + Distribution or Communication by You of the Work or copies thereof. 201 + 202 + 11. Information to the public 203 + 204 + In case of any Distribution or Communication of the Work by means of electronic 205 + communication by You (for example, by offering to download the Work from a 206 + remote location) the distribution channel or media (for example, a website) must 207 + at least provide to the public the information requested by the applicable law 208 + regarding the Licensor, the Licence and the way it may be accessible, concluded, 209 + stored and reproduced by the Licensee. 210 + 211 + 12. Termination of the Licence 212 + 213 + The Licence and the rights granted hereunder will terminate automatically upon 214 + any breach by the Licensee of the terms of the Licence. 215 + 216 + Such a termination will not terminate the licences of any person who has 217 + received the Work from the Licensee under the Licence, provided such persons 218 + remain in full compliance with the Licence. 219 + 220 + 13. Miscellaneous 221 + 222 + Without prejudice of Article 9 above, the Licence represents the complete 223 + agreement between the Parties as to the Work. 224 + 225 + If any provision of the Licence is invalid or unenforceable under applicable 226 + law, this will not affect the validity or enforceability of the Licence as a 227 + whole. Such provision will be construed or reformed so as necessary to make it 228 + valid and enforceable. 229 + 230 + The European Commission may publish other linguistic versions or new versions of 231 + this Licence or updated versions of the Appendix, so far this is required and 232 + reasonable, without reducing the scope of the rights granted by the Licence. New 233 + versions of the Licence will be published with a unique version number. 234 + 235 + All linguistic versions of this Licence, approved by the European Commission, 236 + have identical value. Parties can take advantage of the linguistic version of 237 + their choice. 238 + 239 + 14. Jurisdiction 240 + 241 + Without prejudice to specific agreement between parties, 242 + 243 + - any litigation resulting from the interpretation of this License, arising 244 + between the European Union institutions, bodies, offices or agencies, as a 245 + Licensor, and any Licensee, will be subject to the jurisdiction of the Court 246 + of Justice of the European Union, as laid down in article 272 of the Treaty on 247 + the Functioning of the European Union, 248 + 249 + - any litigation arising between other parties and resulting from the 250 + interpretation of this License, will be subject to the exclusive jurisdiction 251 + of the competent court where the Licensor resides or conducts its primary 252 + business. 253 + 254 + 15. Applicable Law 255 + 256 + Without prejudice to specific agreement between parties, 257 + 258 + - this Licence shall be governed by the law of the European Union Member State 259 + where the Licensor has his seat, resides or has his registered office, 260 + 261 + - this licence shall be governed by Belgian law if the Licensor has no seat, 262 + residence or registered office inside a European Union Member State. 263 + 264 + Appendix 265 + 266 + ‘Compatible Licences’ according to Article 5 EUPL are: 267 + 268 + - GNU General Public License (GPL) v. 2, v. 3 269 + - GNU Affero General Public License (AGPL) v. 3 270 + - Open Software License (OSL) v. 2.1, v. 3.0 271 + - Eclipse Public License (EPL) v. 1.0 272 + - CeCILL v. 2.0, v. 2.1 273 + - Mozilla Public Licence (MPL) v. 2 274 + - GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3 275 + - Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) for 276 + works other than software 277 + - European Union Public Licence (EUPL) v. 1.1, v. 1.2 278 + - Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) or Strong 279 + Reciprocity (LiLiQ-R+). 280 + 281 + The European Commission may update this Appendix to later versions of the above 282 + licences without producing a new version of the EUPL, as long as they provide 283 + the rights granted in Article 2 of this Licence and protect the covered Source 284 + Code from exclusive appropriation. 285 + 286 + All other changes or additions to this Appendix require the production of a new 287 + EUPL version.
+12
default.nix
··· 1 + { 2 + pkgs ? import <nixpkgs> { 3 + inherit system; 4 + overlays = [ ]; 5 + config.allowUnfree = true; 6 + }, 7 + lib ? pkgs.lib, 8 + system ? builtins.currentSystem, 9 + }: 10 + { 11 + wrapNeovim = pkgs.callPackage ./wrapper.nix { }; 12 + }
+24
flake.lock
··· 1 + { 2 + "nodes": { 3 + "nixpkgs": { 4 + "locked": { 5 + "lastModified": 315532800, 6 + "narHash": "sha256-X5WIcIkFxPhw7mS219TbEOgrugbMx/2cin09OlWobT8=", 7 + "rev": "dab3a6e781554f965bde3def0aa2fda4eb8f1708", 8 + "type": "tarball", 9 + "url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre830668.dab3a6e78155/nixexprs.tar.xz" 10 + }, 11 + "original": { 12 + "type": "tarball", 13 + "url": "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz" 14 + } 15 + }, 16 + "root": { 17 + "inputs": { 18 + "nixpkgs": "nixpkgs" 19 + } 20 + } 21 + }, 22 + "root": "root", 23 + "version": 7 24 + }
+83
flake.nix
··· 1 + { 2 + inputs = { 3 + nixpkgs.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz"; 4 + }; 5 + 6 + outputs = 7 + { 8 + self, 9 + nixpkgs, 10 + }: 11 + let 12 + inherit (nixpkgs) lib; 13 + 14 + forAllSystems = 15 + f: lib.genAttrs lib.systems.flakeExposed (system: f nixpkgs.legacyPackages.${system}); 16 + 17 + mkPkgs = pkgs: import ./default.nix { inherit pkgs; }; 18 + in 19 + { 20 + formatter = forAllSystems ( 21 + pkgs: 22 + pkgs.treefmt.withConfig { 23 + runtimeInputs = with pkgs; [ 24 + # keep-sorted start 25 + deadnix 26 + keep-sorted 27 + nixfmt-rfc-style 28 + statix 29 + stylua 30 + taplo 31 + # keep-sorted end 32 + 33 + (writeShellScriptBin "statix-fix" '' 34 + for file in "$@"; do 35 + ${lib.getExe statix} fix "$file" 36 + done 37 + '') 38 + ]; 39 + 40 + settings = { 41 + on-unmatched = "info"; 42 + tree-root-file = "flake.nix"; 43 + 44 + formatter = { 45 + # keep-sorted start block=yes newline_separated=yes 46 + deadnix = { 47 + command = "deadnix"; 48 + includes = [ "*.nix" ]; 49 + }; 50 + 51 + keep-sorted = { 52 + command = "keep-sorted"; 53 + includes = [ "*" ]; 54 + }; 55 + 56 + nixfmt = { 57 + command = "nixfmt"; 58 + includes = [ "*.nix" ]; 59 + }; 60 + 61 + statix = { 62 + command = "statix-fix"; 63 + includes = [ "*.nix" ]; 64 + }; 65 + # keep-sorted end 66 + }; 67 + }; 68 + } 69 + ); 70 + 71 + legacyPackages = forAllSystems mkPkgs; 72 + packages = forAllSystems mkPkgs; 73 + overlays.default = _: mkPkgs; 74 + 75 + devShells = forAllSystems (pkgs: { 76 + default = pkgs.mkShellNoCC { 77 + inputsFrom = [ 78 + self.formatter.${pkgs.stdenv.hostPlatform.system} 79 + ]; 80 + }; 81 + }); 82 + }; 83 + }
+207
wrapper.nix
··· 1 + { 2 + lib, 3 + lndir, 4 + stdenvNoCC, 5 + makeBinaryWrapper, 6 + neovim-unwrapped, 7 + }: 8 + 9 + let 10 + inherit (lib) 11 + getExe 12 + makeBinPath 13 + getVersion 14 + unique 15 + subtractLists 16 + concatLists 17 + optionalString 18 + concatMapStrings 19 + ; 20 + 21 + inherit (builtins) typeOf baseNameOf; 22 + in 23 + 24 + lib.extendMkDerivation { 25 + constructDrv = stdenvNoCC.mkDerivation; 26 + 27 + extendDrvArgs = 28 + _: 29 + { 30 + # neovim 31 + pname ? "neovim", 32 + versionSuffix ? "wrapped", 33 + 34 + # you can choose the base, i choose neovim-unwrapped 35 + basePackage ? neovim-unwrapped, 36 + 37 + # extra lua packages 38 + extraLuaPackages ? _: [ ], 39 + 40 + # path, see there explanation below 41 + extraPackages ? [ ], 42 + 43 + # plugins 44 + startPlugins ? [ ], 45 + optPlugins ? [ ], 46 + 47 + # our config 48 + userConfig, 49 + 50 + # other customisation 51 + aliases ? [ ], 52 + keepDesktopFiles ? false, 53 + }@args: 54 + let 55 + inherit (basePackage) lua; 56 + luaEnv = lua.withPackages extraLuaPackages; 57 + inherit (lua.pkgs) luaLib; 58 + 59 + # find deps 60 + # see https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/editors/vim/plugins/utils/vim-utils.nix#L159-L164 61 + transitiveClosure = 62 + plugin: [ plugin ] ++ (lib.unique (concatLists (map transitiveClosure plugin.dependencies or [ ]))); 63 + findDependenciesRecursively = plugins: lib.concatMap transitiveClosure plugins; 64 + 65 + depsOfOptionalPlugins = subtractLists optPlugins (findDependenciesRecursively optPlugins); 66 + startWithDeps = findDependenciesRecursively startPlugins; 67 + startPlugins' = unique (startWithDeps ++ depsOfOptionalPlugins); 68 + 69 + mkResultingPath = 70 + subdir: p: 71 + "pack/${pname}/${subdir}/${if typeOf p == "path" then baseNameOf p else (p.pname or p.name)}"; 72 + 73 + config = stdenvNoCC.mkDerivation { 74 + name = "neovim-config"; 75 + __structuredAttrs = true; 76 + 77 + plugins = startPlugins' ++ optPlugins; 78 + resultingPaths = 79 + map (mkResultingPath "start") startPlugins' ++ map (mkResultingPath "opt") optPlugins; 80 + 81 + # didn't know you could do this. thanks getchiee 82 + buildCommand = 83 + # bash 84 + '' 85 + mkdir -pv $out/parser 86 + mkdir -pv $out/pack/${pname}/{start,opt} 87 + 88 + echo "generating init.lua" 89 + cat > $out/init.lua <<EOF 90 + package.path = "${luaLib.genLuaPathAbsStr luaEnv};$LUA_PATH" .. package.path 91 + package.cpath = "${luaLib.genLuaCPathAbsStr luaEnv};$LUA_CPATH" .. package.cpath 92 + vim.env.PATH = vim.env.PATH .. ":${makeBinPath extraPackages}" 93 + vim.g.snippets_path = "$out/pack/${pname}/start/init-plugin/snippets" 94 + vim.opt.packpath:append('$out') 95 + vim.opt.runtimepath:append('$out') 96 + 97 + vim.loader.enable() 98 + vim.g.loaded_node_provider = 0 99 + vim.g.loaded_perl_provider = 0 100 + vim.g.loaded_python_provider = 0 101 + vim.g.loaded_python3_provider = 0 102 + vim.g.loaded_ruby_provider = 0 103 + EOF 104 + 105 + shopt -s extglob 106 + for (( i = 0; i < "''${#plugins[@]}"; i++ )); do 107 + source="''${plugins[$i]}" 108 + path="''${resultingPaths[$i]}" 109 + dest="$out/$path" 110 + 111 + mkdir -p "$dest" 112 + 113 + tolink=("$source/"!(parser)) 114 + if (( "''${#tolink[@]}" )); then 115 + ln -ns "''${tolink[@]}" -t "$dest" 116 + fi 117 + 118 + if [[ -d "$source/parser" && -n "$(ls -A "$source/parser")" ]]; then 119 + mkdir -p "$out/parser" 120 + ln -nsf "$source/parser/"* -t "$out/parser" 121 + fi 122 + done 123 + shopt -u extglob 124 + 125 + ${getExe basePackage} \ 126 + -n -u NONE -i NONE \ 127 + --headless \ 128 + -c "set packpath=$out" \ 129 + -c "packloadall" \ 130 + -c "helptags ALL" \ 131 + +"quit!" 132 + 133 + find "$out/pack/${pname}" -type d -empty -print -delete 134 + 135 + ln -sfT ${userConfig} $out/pack/${pname}/start/init-plugin 136 + 137 + mkdir "$out/nix-support" 138 + for i in $(find -L "$out" -name 'propagated-build-inputs'); do 139 + cat "$i" >> "$out/nix-support/propagated-build-inputs" 140 + done 141 + ''; 142 + }; 143 + in 144 + { 145 + inherit pname; 146 + version = "${args.version or (getVersion basePackage)}${ 147 + if versionSuffix != "" then "-${versionSuffix}" else "" 148 + }"; 149 + 150 + # don't allow for simple arugments here these **should** remain this way 151 + # so the wrapper works correctly 152 + __structuredAttrs = true; 153 + strictDeps = true; 154 + 155 + # this won't really remove anything since we still are running fixup on basePackage and the config 156 + # but it does speed up the build speed 157 + dontUnpack = true; 158 + dontFixup = true; 159 + dontConfigure = true; 160 + dontRewriteSymlinks = true; 161 + 162 + nativeBuildInputs = args.nativeBuildInputs or [ ] ++ [ 163 + makeBinaryWrapper 164 + lndir 165 + ]; 166 + 167 + wrapperArgs = [ 168 + "--set-default" 169 + "VIMINIT" 170 + "source ${config}/init.lua" 171 + 172 + "--set-default" 173 + "NVIM_APPNAME" 174 + pname 175 + ] 176 + ++ args.wrapperArgs or [ ]; 177 + 178 + installPhase = '' 179 + runHook preInstall 180 + 181 + mkdir -p $out 182 + lndir -silent ${basePackage} $out 183 + 184 + ${optionalString (!keepDesktopFiles) "rm -rf $out/share/applications"} 185 + 186 + wrapProgram $out/bin/nvim "''${wrapperArgs[@]}" 187 + 188 + ${concatMapStrings (alias: '' 189 + ln -s $out/bin/nvim $out/bin/${alias} 190 + '') aliases} 191 + 192 + runHook postInstall 193 + ''; 194 + 195 + passthru = { 196 + inherit config; 197 + } 198 + // args.passthru or { }; 199 + 200 + meta = 201 + basePackage.meta 202 + // { 203 + priority = (basePackage.meta.priority or lib.meta.defaultPriority) - 1; 204 + } 205 + // args.meta or { }; 206 + }; 207 + }