mirror of
				https://github.com/NotAShelf/nvf.git
				synced 2025-10-31 11:02:37 +00:00 
			
		
		
		
	Merge pull request #252 from NotAShelf/docs-refactor
docs: restructure; describe DAGs for end-user usage
This commit is contained in:
		
				commit
				
					
						20d1d20ed6
					
				
			
		
					 34 changed files with 1802 additions and 116 deletions
				
			
		|  | @ -2,11 +2,17 @@ | |||
|   inputs, | ||||
|   pkgs, | ||||
|   lib ? import ../lib/stdlib-extended.nix pkgs.lib inputs, | ||||
|   manpageUrls ? pkgs.path + "/doc/manpage-urls.json", | ||||
|   ... | ||||
| }: let | ||||
|   inherit (lib.modules) mkForce evalModules; | ||||
|   inherit (lib.strings) hasPrefix removePrefix; | ||||
|   inherit (lib.attrsets) isAttrs mapAttrs optionalAttrs recursiveUpdate isDerivation; | ||||
|   inherit (builtins) fromJSON readFile; | ||||
| 
 | ||||
|   # release data | ||||
|   release-config = fromJSON (readFile ../release.json); | ||||
|   revision = release-config.release; | ||||
| 
 | ||||
|   # From home-manager: | ||||
|   # | ||||
|  | @ -54,11 +60,14 @@ | |||
|   buildOptionsDocs = args @ { | ||||
|     modules, | ||||
|     includeModuleSystemOptions ? true, | ||||
|     warningsAreErrors ? true, | ||||
|     ... | ||||
|   }: let | ||||
|     inherit ((evalModules {inherit modules;})) options; | ||||
| 
 | ||||
|     # Declaration of the Github site URL. | ||||
|     # Takes a user, repo, and subpath, and returns a declaration site | ||||
|     # as a string. | ||||
|     githubDeclaration = user: repo: subpath: let | ||||
|       urlRef = "github.com"; | ||||
|       branch = "main"; | ||||
|  | @ -68,10 +77,13 @@ | |||
|     }; | ||||
|   in | ||||
|     pkgs.buildPackages.nixosOptionsDoc ({ | ||||
|         inherit warningsAreErrors; | ||||
| 
 | ||||
|         options = | ||||
|           if includeModuleSystemOptions | ||||
|           then options | ||||
|           else builtins.removeAttrs options ["_module"]; | ||||
| 
 | ||||
|         transformOptions = opt: | ||||
|           recursiveUpdate opt { | ||||
|             # Clean up declaration sites to not refer to the neovim-flakee | ||||
|  | @ -93,18 +105,16 @@ | |||
|       // builtins.removeAttrs args ["modules" "includeModuleSystemOptions"]); | ||||
| 
 | ||||
|   nvimModuleDocs = buildOptionsDocs { | ||||
|     variablelistId = "neovim-flake-options"; | ||||
| 
 | ||||
|     modules = | ||||
|       import ../modules/modules.nix { | ||||
|         inherit lib pkgs; | ||||
|         check = false; | ||||
|       } | ||||
|       ++ [scrubbedPkgsModule]; | ||||
|     variablelistId = "neovim-flake-options"; | ||||
|   }; | ||||
| 
 | ||||
|   release-config = builtins.fromJSON (builtins.readFile ../release.json); | ||||
|   revision = "release-${release-config.release}"; | ||||
| 
 | ||||
|   # Generate the `man home-configuration.nix` package | ||||
|   nvf-configuration-manual = | ||||
|     pkgs.runCommand "neovim-flake-reference-manpage" { | ||||
|  | @ -125,8 +135,7 @@ | |||
| 
 | ||||
|   # Generate the HTML manual pages | ||||
|   neovim-flake-manual = pkgs.callPackage ./manual.nix { | ||||
|     inherit (inputs) nmd; | ||||
|     inherit revision; | ||||
|     inherit revision manpageUrls; | ||||
|     outputPath = "share/doc/neovim-flake"; | ||||
|     options = { | ||||
|       neovim-flake = nvimModuleDocs.optionsJSON; | ||||
|  |  | |||
|  | @ -1,8 +0,0 @@ | |||
| pre { | ||||
| 	padding: 0; | ||||
| } | ||||
| 
 | ||||
| pre code.hljs { | ||||
| 	border: none; | ||||
| 	margin: 0; | ||||
| } | ||||
|  | @ -1,54 +1,57 @@ | |||
| { | ||||
|   stdenv, | ||||
|   lib, | ||||
|   documentation-highlighter, | ||||
|   nmd, | ||||
|   revision, | ||||
|   outputPath ? "share/doc/neovim-flake", | ||||
|   options, | ||||
|   stdenvNoCC, | ||||
|   # build inputs | ||||
|   nixos-render-docs, | ||||
|   documentation-highlighter, | ||||
|   # nrd configuration | ||||
|   manpageUrls, | ||||
|   revision, | ||||
|   options, | ||||
|   outputPath ? "share/doc/neovim-flake", | ||||
| }: | ||||
| stdenv.mkDerivation { | ||||
| stdenvNoCC.mkDerivation { | ||||
|   name = "neovim-flake-manual"; | ||||
|   src = ./manual; | ||||
|   src = builtins.path { | ||||
|     path = lib.sourceFilesBySuffices ./manual [".md"]; | ||||
|     name = "neovim-flake-manual"; | ||||
|   }; | ||||
| 
 | ||||
|   nativeBuildInputs = [nixos-render-docs]; | ||||
| 
 | ||||
|   buildPhase = '' | ||||
|     mkdir -p out/media | ||||
|     mkdir -p out/{highlightjs,media} | ||||
| 
 | ||||
|     mkdir -p out/highlightjs | ||||
|     cp -t out/highlightjs \ | ||||
|     cp -vt out/highlightjs \ | ||||
|       ${documentation-highlighter}/highlight.pack.js \ | ||||
|       ${documentation-highlighter}/LICENSE \ | ||||
|       ${documentation-highlighter}/mono-blue.css \ | ||||
|       ${documentation-highlighter}/loader.js | ||||
| 
 | ||||
|     substituteInPlace ./options.md \ | ||||
|       --replace \ | ||||
|         '@OPTIONS_JSON@' \ | ||||
|       --subst-var-by \ | ||||
|         OPTIONS_JSON \ | ||||
|         ${options.neovim-flake}/share/doc/nixos/options.json | ||||
| 
 | ||||
|     substituteInPlace ./manual.md \ | ||||
|       --replace \ | ||||
|         '@VERSION@' \ | ||||
|       --subst-var-by \ | ||||
|         NVF_VERSION \ | ||||
|         ${revision} | ||||
| 
 | ||||
|     cp -v ${nmd}/static/style.css out/style.css | ||||
|     cp -vt out/highlightjs ${nmd}/static/highlightjs/tomorrow-night.min.css | ||||
|     cp -v ${./highlight-style.css} out/highlightjs/highlight-style.css | ||||
|     # copy stylesheet | ||||
|     cp ${./static/style.css} out/style.css | ||||
| 
 | ||||
|     # copy release notes | ||||
|     cp -vr ${./release-notes} release-notes | ||||
| 
 | ||||
|     # generate manual from | ||||
|     nixos-render-docs manual html \ | ||||
|       --manpage-urls ./manpage-urls.json \ | ||||
|       --manpage-urls ${manpageUrls} \ | ||||
|       --revision ${lib.trivial.revisionWithDefault revision} \ | ||||
|       --stylesheet style.css \ | ||||
|       --stylesheet highlightjs/tomorrow-night.min.css \ | ||||
|       --stylesheet highlightjs/highlight-style.css \ | ||||
|       --script highlightjs/highlight.pack.js \ | ||||
|       --script highlightjs/loader.js \ | ||||
|       --toc-depth 1 \ | ||||
|       --toc-depth 2 \ | ||||
|       --section-toc-depth 1 \ | ||||
|       manual.md \ | ||||
|       out/index.xhtml | ||||
|  |  | |||
							
								
								
									
										8
									
								
								docs/manual/configuring.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								docs/manual/configuring.md
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | |||
| # Configuring neovim-flake {#ch-configuring} | ||||
| 
 | ||||
| ```{=include=} chapters | ||||
| configuring/custom-package.md | ||||
| configuring/custom-plugins.md | ||||
| configuring/languages.md | ||||
| configuring/dags.md | ||||
| ``` | ||||
							
								
								
									
										20
									
								
								docs/manual/configuring/custom-package.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								docs/manual/configuring/custom-package.md
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | |||
| # Custom Neovim Package {#ch-custom-package} | ||||
| 
 | ||||
| As of v0.5, you may now specify the neovim package that will be wrapped with your configuration. This is done with the `vim.package` option. | ||||
| 
 | ||||
| ```nix | ||||
| {inputs, pkgs, ...}: { | ||||
|   # using the neovim-nightly overlay | ||||
|   vim.package = inputs.neovim-overlay.packages.${pkgs.system}.neovim; | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| The neovim-nightly-overlay always exposes an unwrapped package. If using a different source, you are highly | ||||
| recommended to get an "unwrapped" version of the neovim package, similar to `neovim-unwrapped` in nixpkgs. | ||||
| 
 | ||||
| ```nix | ||||
| { pkgs, ...}: { | ||||
|   # using the neovim-nightly overlay | ||||
|   vim.package = pkgs.neovim-unwrapped; | ||||
| } | ||||
| ``` | ||||
							
								
								
									
										25
									
								
								docs/manual/configuring/custom-plugins.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								docs/manual/configuring/custom-plugins.md
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | |||
| # Custom Plugins {#ch-custom-plugins} | ||||
| 
 | ||||
| Neovim-flake, by default, exposes a wide variety of plugins as module options | ||||
| for your convience and bundles necessary dependencies into neovim-flake's | ||||
| runtime. In case a plugin is not available in neovim-flake, you may consider | ||||
| making a pull request to neovim-flake to include it as a module or you may add | ||||
| it to your configuration locally. | ||||
| 
 | ||||
| ## Adding Plugins {#ch-adding-plugins} | ||||
| 
 | ||||
| There are multiple ways of adding custom plugins to your neovim-flake | ||||
| configuration. | ||||
| 
 | ||||
| You can use custom plugins, before they are implemented in the flake. To add a | ||||
| plugin, you need to add it to your config's `vim.startPlugins` array. | ||||
| 
 | ||||
| Adding a plugin to `startPlugins` will not allow you to configure the plugin | ||||
| that you have addeed, but neovim-flake provides multiple way of configuring any | ||||
| custom plugins that you might have added to your configuration. | ||||
| 
 | ||||
| ```{=include=} sections | ||||
| custom-plugins/configuring.md | ||||
| custom-plugins/new-method.md | ||||
| custom-plugins/old-method.md | ||||
| ``` | ||||
|  | @ -1,4 +1,4 @@ | |||
| # Configuring {#configuring-plugins} | ||||
| # Configuring {#sec-configuring-plugins} | ||||
| 
 | ||||
| Just making the plugin to your neovim configuration available might not always be enough. | ||||
| In that case, you can write custom vimscript or lua config, using `config.vim.configRC` or `config.vim.luaConfigRC` | ||||
|  | @ -1,6 +1,6 @@ | |||
| # New Method {#sec-new-method} | ||||
| 
 | ||||
| As of version 0.5, we have a more extensive API for configuring plugins, under `vim.extraPlugins`. | ||||
| As of version **0.5**, we have a more extensive API for configuring plugins, under `vim.extraPlugins`. | ||||
| 
 | ||||
| Instead of using DAGs exposed by the library, you may use the extra plugin module as follows: | ||||
| 
 | ||||
							
								
								
									
										33
									
								
								docs/manual/configuring/custom-plugins/old-method.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								docs/manual/configuring/custom-plugins/old-method.md
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,33 @@ | |||
| # Old Method {#sec-old-method} | ||||
| 
 | ||||
| Prior to version 0.5, the method of adding new plugins was adding the plugin package to `vim.startPlugins` and add | ||||
| its configuration as a DAG under `vim.configRC` or `vim.luaConfigRC`. Users who have not yet updated to 0.5, or prefer | ||||
| a more hands-on approach may use the old method where the load order of the plugins is determined by DAGs. | ||||
| 
 | ||||
| ## Adding plugins {#sec-adding-plugins} | ||||
| 
 | ||||
| To add a plugin to neovim-flake's runtime, you may add it | ||||
| 
 | ||||
| ```nix | ||||
| {pkgs, ...}: { | ||||
|   # add a package from nixpkgs to startPlugins | ||||
|   vim.startPlugins = [ | ||||
|     pkgs.vimPlugins.aerial-nvim  ]; | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| And to configure the added plugin, you can use the `luaConfigRC` option to provide configuration | ||||
| as a DAG using the neovim-flake extended library. | ||||
| 
 | ||||
| ```nix | ||||
| {inputs, ...}: let | ||||
|   # assuming you have an input called neovim-flake pointing at the neovim-flake repo | ||||
|   inherit (inputs.neovim-flake.lib.nvim.dag) entryAnywhere; | ||||
| in { | ||||
|   vim.luaConfigRC.aerial-nvim= entryAnywhere '' | ||||
|     require('aerial').setup { | ||||
|       -- your configuration here | ||||
|     } | ||||
|   ''; | ||||
| } | ||||
| ``` | ||||
							
								
								
									
										181
									
								
								docs/manual/configuring/dags.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										181
									
								
								docs/manual/configuring/dags.md
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,181 @@ | |||
| # Using DAGs {#ch-using-dags} | ||||
| 
 | ||||
| We conform to the NixOS options types for the most part, however, a noteworthy addition | ||||
| for certain options is the [**DAG (Directed acyclic graph)**](https://en.wikipedia.org/wiki/Directed_acyclic_graph) | ||||
| type which is borrowed from home-manager's extended library. This type is most used for | ||||
| topologically sorting strings. The DAG type allows the attribute set entries to express dependency | ||||
| relations among themselves. This can, for example, be used to control the order of configuration | ||||
| sections in your `configRC` or `luaConfigRC`. | ||||
| 
 | ||||
| The below section, mostly taken from the [home-manager manual](https://raw.githubusercontent.com/nix-community/home-manager/master/docs/manual/writing-modules/types.md) explains the overal usage logic of the DAG typee | ||||
| 
 | ||||
| ## entryAnywhere {#sec-types-dag-entryAnywhere} | ||||
| 
 | ||||
| > `lib.dag.entryAnywhere (value: T) : DagEntry<T>` | ||||
| 
 | ||||
| Indicates that `value` can be placed anywhere within the DAG. | ||||
| This is also the default for plain attribute set entries, that | ||||
| is | ||||
| 
 | ||||
| ```nix | ||||
| foo.bar = { | ||||
|   a = lib.dag.entryAnywhere 0; | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| and | ||||
| 
 | ||||
| ```nix | ||||
| foo.bar = { | ||||
|   a = 0; | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| are equivalent. | ||||
| 
 | ||||
| ## entryAfter {#ch-types-dag-entryAfter} | ||||
| 
 | ||||
| > `lib.dag.entryAfter (afters: list string) (value: T) : DagEntry<T>` | ||||
| 
 | ||||
| Indicates that `value` must be placed _after_ each of the | ||||
| attribute names in the given list. For example | ||||
| 
 | ||||
| ```nix | ||||
| foo.bar = { | ||||
|   a = 0; | ||||
|   b = lib.dag.entryAfter [ "a" ] 1; | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| would place `b` after `a` in the graph. | ||||
| 
 | ||||
| ## entryBefore {#ch-types-dag-entryBefore} | ||||
| 
 | ||||
| > `lib.dag.entryBefore (befores: list string) (value: T) : DagEntry<T>` | ||||
| 
 | ||||
| Indicates that `value` must be placed _before_ each of the | ||||
| attribute names in the given list. For example | ||||
| 
 | ||||
| ```nix | ||||
| foo.bar = { | ||||
|   b = lib.dag.entryBefore [ "a" ] 1; | ||||
|   a = 0; | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| would place `b` before `a` in the graph. | ||||
| 
 | ||||
| ## entryBetween {#sec-types-dag-entryBetween} | ||||
| 
 | ||||
| > `lib.dag.entryBetween (befores: list string) (afters: list string) (value: T) : DagEntry<T>` | ||||
| 
 | ||||
| Indicates that `value` must be placed _before_ the attribute | ||||
| names in the first list and _after_ the attribute names in the | ||||
| second list. For example | ||||
| 
 | ||||
| ```nix | ||||
| foo.bar = { | ||||
|   a = 0; | ||||
|   c = lib.dag.entryBetween [ "b" ] [ "a" ] 2; | ||||
|   b = 1; | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| would place `c` before `b` and after `a` in the graph. | ||||
| 
 | ||||
| There are also a set of functions that generate a DAG from a list. | ||||
| These are convenient when you just want to have a linear list of DAG | ||||
| entries, without having to manually enter the relationship between | ||||
| each entry. Each of these functions take a `tag` as argument and the | ||||
| DAG entries will be named `${tag}-${index}`. | ||||
| 
 | ||||
| ## entriesAnywhere {#sec-types-dag-entriesAnywhere} | ||||
| 
 | ||||
| > `lib.dag.entriesAnywhere (tag: string) (values: [T]) : Dag<T>` | ||||
| 
 | ||||
| Creates a DAG with the given values with each entry labeled | ||||
| using the given tag. For example | ||||
| 
 | ||||
| ```nix | ||||
| foo.bar = lib.dag.entriesAnywhere "a" [ 0 1 ]; | ||||
| ``` | ||||
| 
 | ||||
| is equivalent to | ||||
| 
 | ||||
| ```nix | ||||
| foo.bar = { | ||||
|   a-0 = 0; | ||||
|   a-1 = lib.dag.entryAfter [ "a-0" ] 1; | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| ## entriesAfter {#sec-types-dag-entriesAfter} | ||||
| 
 | ||||
| > `lib.dag.entriesAfter (tag: string) (afters: list string) (values: [T]) : Dag<T>` | ||||
| 
 | ||||
| Creates a DAG with the given values with each entry labeled | ||||
| using the given tag. The list of values are placed are placed | ||||
| _after_ each of the attribute names in `afters`. For example | ||||
| 
 | ||||
| ```nix | ||||
| foo.bar = | ||||
|   { b = 0; } // lib.dag.entriesAfter "a" [ "b" ] [ 1 2 ]; | ||||
| ``` | ||||
| 
 | ||||
| is equivalent to | ||||
| 
 | ||||
| ```nix | ||||
| foo.bar = { | ||||
|   b = 0; | ||||
|   a-0 = lib.dag.entryAfter [ "b" ] 1; | ||||
|   a-1 = lib.dag.entryAfter [ "a-0" ] 2; | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| ## entriesBefore {#sec-types-dag-entriesBefore} | ||||
| 
 | ||||
| > `lib.dag.entriesBefore (tag: string) (befores: list string) (values: [T]) : Dag<T>` | ||||
| 
 | ||||
| Creates a DAG with the given values with each entry labeled | ||||
| using the given tag. The list of values are placed _before_ each | ||||
| of the attribute names in `befores`. For example | ||||
| 
 | ||||
| ```nix | ||||
|   foo.bar = | ||||
|     { b = 0; } // lib.dag.entriesBefore "a" [ "b" ] [ 1 2 ]; | ||||
| ``` | ||||
| 
 | ||||
| is equivalent to | ||||
| 
 | ||||
| ```nix | ||||
| foo.bar = { | ||||
|   b = 0; | ||||
|   a-0 = 1; | ||||
|   a-1 = lib.dag.entryBetween [ "b" ] [ "a-0" ] 2; | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| ## entriesBetween {#sec-types-dag-entriesBetween} | ||||
| 
 | ||||
| > `lib.dag.entriesBetween (tag: string) (befores: list string) (afters: list string) (values: [T]) : Dag<T>` | ||||
| 
 | ||||
| Creates a DAG with the given values with each entry labeled | ||||
| using the given tag. The list of values are placed _before_ each | ||||
| of the attribute names in `befores` and _after_ each of the | ||||
| attribute names in `afters`. For example | ||||
| 
 | ||||
| ```nix | ||||
| foo.bar = | ||||
|   { b = 0; c = 3; } // lib.dag.entriesBetween "a" [ "b" ] [ "c" ] [ 1 2 ]; | ||||
| ``` | ||||
| 
 | ||||
| is equivalent to | ||||
| 
 | ||||
| ```nix | ||||
| foo.bar = { | ||||
|   b = 0; | ||||
|   c = 3; | ||||
|   a-0 = lib.dag.entryAfter [ "c" ] 1; | ||||
|   a-1 = lib.dag.entryBetween [ "b" ] [ "a-0" ] 2; | ||||
| } | ||||
| ``` | ||||
|  | @ -1,6 +1,8 @@ | |||
| # Language Support {#ch-languages} | ||||
| 
 | ||||
| Language specific support means there is a combination of language specific plugins, `treesitter` support, `nvim-lspconfig` language servers, and `null-ls` integration. This gets you capabilities ranging from autocompletion to formatting to diagnostics. The following languages have sections under the `vim.languages` attribute. See the configuration docs for details. | ||||
| Language specific support means there is a combination of language specific plugins, `treesitter` support, `nvim-lspconfig` language servers, and `null-ls` | ||||
| integration. This gets you capabilities ranging from autocompletion to formatting to diagnostics. The following languages have sections under the `vim.languages` | ||||
| attribute. | ||||
| 
 | ||||
| - Rust: [vim.languages.rust.enable](#opt-vim.languages.rust.enable) | ||||
| - Nix: [vim.languages.nix.enable](#opt-vim.languages.nix.enable) | ||||
|  | @ -1,12 +0,0 @@ | |||
| # Custom Neovim Package {#ch-custom-package} | ||||
| 
 | ||||
| As of v0.5, you may now specify the neovim package that will be wrapped with your configuration. This is done with the `vim.package` option. | ||||
| 
 | ||||
| ```nix | ||||
| {inputs, pkgs, ...}: { | ||||
|   # using the neovim-nightly overlay | ||||
|   config.vim.package = inputs.neovim-overlay.packages.${pkgs.system}.neovim; | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| The neovim-nightly-overlay always exposes an unwrapped package. If using a different source, you are highly recommended to get an "unwrapped" version of the neovim package,similar to `neovim-unwrapped` in nixpkgs. | ||||
|  | @ -1,10 +0,0 @@ | |||
| # Custom Plugins {#ch-custom-plugins} | ||||
| 
 | ||||
| You can use custom plugins, before they are implemented in the flake. | ||||
| To add a plugin, you need to add it to your config's `config.vim.startPlugins` array. | ||||
| 
 | ||||
| ```{=include=} sections | ||||
| custom-plugins/new-method.md | ||||
| custom-plugins/old-method.md | ||||
| custom-plugins/configuring.md | ||||
| ``` | ||||
|  | @ -1,18 +0,0 @@ | |||
| # Old Method {#sec-old-method} | ||||
| 
 | ||||
| Users who have not yet updated to 0.5, or prefer a more hands-on approach may use the old method where the load order | ||||
| of the plugins is determined by DAGs. | ||||
| 
 | ||||
| ```nix | ||||
| { | ||||
|   # fetch plugin source from GitHub and add it to startPlugins | ||||
|   config.vim.startPlugins = [ | ||||
|     (pkgs.fetchFromGitHub { | ||||
|       owner = "FrenzyExists"; | ||||
|       repo = "aquarium-vim"; | ||||
|       rev = "d09b1feda1148797aa5ff0dbca8d8e3256d028d5"; | ||||
|       sha256 = "CtyEhCcGxxok6xFQ09feWpdEBIYHH+GIFVOaNZx10Bs="; | ||||
|     }) | ||||
|   ]; | ||||
| } | ||||
| ``` | ||||
|  | @ -3,7 +3,7 @@ | |||
| While you can configure neovim-flake yourself using the builder, you can also use the pre-built configs that are available. | ||||
| Here are a few default configurations you can use. | ||||
| 
 | ||||
| ```{=include=} sections | ||||
| ```{=include=} chapters | ||||
| default-configs/maximal.md | ||||
| default-configs/nix.md | ||||
| default-configs/tidal.md | ||||
|  |  | |||
|  | @ -64,20 +64,28 @@ See [example commit message](#sec-guidelines-ex-commit-message) for a commit mes | |||
| 
 | ||||
| ## Example Commit {#sec-guidelines-ex-commit-message} | ||||
| 
 | ||||
| The commit [69f8e47e9e74c8d3d060ca22e18246b7f7d988ef](https://github.com/nix-community/home-manager/commit/69f8e47e9e74c8d3d060ca22e18246b7f7d988ef) contains the commit message | ||||
| The commit [69f8e47e9e74c8d3d060ca22e18246b7f7d988ef](https://github.com/nix-community/home-manager/commit/69f8e47e9e74c8d3d060ca22e18246b7f7d988ef) | ||||
| in home-manager contains the commit message | ||||
| 
 | ||||
| ``` | ||||
| 
 | ||||
| starship: allow running in Emacs if vterm is used | ||||
| 
 | ||||
| The vterm buffer is backed by libvterm and can handle Starship prompts | ||||
| without issues. | ||||
| ``` | ||||
| 
 | ||||
| Similarly, if you are contributing to neovim-flake, you would include the scope of the commit followed by | ||||
| the description | ||||
| 
 | ||||
| ``` | ||||
| languages/ruby: init module | ||||
| 
 | ||||
| Adds a language module for Ruby, and adds appropriate formatters and TS grammers | ||||
| ``` | ||||
| 
 | ||||
| Long description can be ommitted if the change is too simple to warrant it. A minor fix in spelling or a formatting | ||||
| change does not warrant long description, however, a module addition or removal does as you would like to provide the | ||||
| relevant context for your changes. | ||||
| relevant context, e.g. the reasoning behind it, for your commit. | ||||
| 
 | ||||
| Finally, when adding a new module, say `modules/foo.nix`, we use the fixed commit format `foo: add module`. | ||||
| You can, of course, still include a long description if you wish. | ||||
|  |  | |||
							
								
								
									
										11
									
								
								docs/manual/installation.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								docs/manual/installation.md
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | |||
| # Installing neovim-flake {#ch-installation} | ||||
| 
 | ||||
| There are multiple ways of installing neovim-flake on your system. You may either choose | ||||
| the standalone installation method, which does not depend on a module system and may | ||||
| be done on any system that has the Nix package manager or the appropriate modules | ||||
| for NixOS and home-manager as described in the [module installation section](#ch-module-installation) | ||||
| 
 | ||||
| ```{=include=} chapters | ||||
| installation/custom-configuration.md | ||||
| installation/modules.md | ||||
| ``` | ||||
							
								
								
									
										19
									
								
								docs/manual/installation/custom-configuration.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								docs/manual/installation/custom-configuration.md
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| # Standalone Installation {#ch-standalone-installation} | ||||
| 
 | ||||
| It is possible to install neovim-flake without depending on NixOS or home-manager as the parent | ||||
| module system, using the `neovimConfiguration` function exposed by neovim-flake extended library. | ||||
| It takes in the configuration as a module, and returns an attribute set as a result. | ||||
| 
 | ||||
| ```nix | ||||
| { | ||||
|   options = "The options that were available to configure"; | ||||
|   config = "The outputted configuration"; | ||||
|   pkgs = "The package set used to evaluate the module"; | ||||
|   neovim = "The built neovim package"; | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| ```{=include=} chapters | ||||
| standalone/nixos.md | ||||
| standalone/home-manager.md | ||||
| ``` | ||||
							
								
								
									
										6
									
								
								docs/manual/installation/modules.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								docs/manual/installation/modules.md
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| # Module Installation {#ch-module-installation} | ||||
| 
 | ||||
| ```{=include=} chapters | ||||
| modules/nixos.md | ||||
| modules/home-manager.md | ||||
| ``` | ||||
|  | @ -1,4 +1,4 @@ | |||
| # Home Manager {#ch-hm-module} | ||||
| # Home Manager Module {#ch-hm-module} | ||||
| 
 | ||||
| The Home Manager module allows us to customize the different `vim` options from inside the home-manager configuration | ||||
| and it is the preferred way of configuring neovim-flake, both on NixOS and non-NixOS systems. | ||||
							
								
								
									
										3
									
								
								docs/manual/installation/modules/nixos.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								docs/manual/installation/modules/nixos.md
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | |||
| # NixOS Module {#ch-nixos-module} | ||||
| 
 | ||||
| This artice is a stub. It will be written as the NixOS module is finalized. | ||||
							
								
								
									
										37
									
								
								docs/manual/installation/standalone/home-manager.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								docs/manual/installation/standalone/home-manager.md
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,37 @@ | |||
| # Standalone Installation (home-manager) {#ch-standalone-home-manager} | ||||
| 
 | ||||
| The following is an example of a barebones vim configuration with the default theme enabled. | ||||
| 
 | ||||
| ```nix | ||||
| { | ||||
|   inputs.neovim-flake = { | ||||
|     url = "github:notashelf/neovim-flake"; | ||||
|     inputs.nixpkgs.follows = "nixpkgs"; | ||||
|   }; | ||||
| 
 | ||||
|   outputs = {nixpkgs, neovim-flake, ...}: let | ||||
|     system = "x86_64-linux"; | ||||
|     pkgs = nixpkgs.legacyPackages.${system}; | ||||
|     configModule = { | ||||
|       # Add any custom options (and feel free to upstream them!) | ||||
|       # options = ... | ||||
| 
 | ||||
|       config.vim = { | ||||
|         theme.enable = true; | ||||
|       }; | ||||
|     }; | ||||
| 
 | ||||
|     customNeovim = neovim-flake.lib.neovimConfiguration { | ||||
|       modules = [configModule]; | ||||
|       inherit pkgs; | ||||
|     }; | ||||
|   in { | ||||
|     # this is an example nixosConfiguration using the built neovim package | ||||
|     homeConfigurations = { | ||||
|       yourHostName = home-manager.lib.nixosSystem { | ||||
|         # TODO | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| ``` | ||||
|  | @ -1,16 +1,4 @@ | |||
| # Custom Configuration {#ch-custom-configuration} | ||||
| 
 | ||||
| Custom configuration is done with the `neovimConfiguration` while using the flake as a standalone package. | ||||
| It takes in the configuration as a module. The output of the configuration function is an attrset. | ||||
| 
 | ||||
| ```nix | ||||
| { | ||||
|   options = "The options that were available to configure"; | ||||
|   config = "The outputted configuration"; | ||||
|   pkgs = "The package set used to evaluate the module"; | ||||
|   neovim = "The built neovim package"; | ||||
| } | ||||
| ``` | ||||
| # Standalone Installation (NixOS) {#ch-standalone-nixos} | ||||
| 
 | ||||
| The following is an example of a barebones vim configuration with the default theme enabled. | ||||
| 
 | ||||
|  | @ -60,4 +48,4 @@ The following is an example of a barebones vim configuration with the default th | |||
| 
 | ||||
| Your built neovim configuration can be exposed as a flake output, or be added to your system packages to make | ||||
| it available across your system. You may also consider passing the flake output to home-manager to make it available | ||||
| to a specific user _without_ using the home-manager module. | ||||
| to a specific user. | ||||
|  | @ -1,3 +0,0 @@ | |||
| { | ||||
| 	"nix.conf(5)": "https://nixos.org/manual/nix/stable/command-ref/conf-file.html" | ||||
| } | ||||
|  | @ -1,6 +1,6 @@ | |||
| # neovim-flake-manual {#neovim-flake-manual} | ||||
| 
 | ||||
| ## Version @VERSION@ | ||||
| ## Version @NVF_VERSION@ | ||||
| 
 | ||||
| ```{=include=} preface | ||||
| preface.md | ||||
|  | @ -8,12 +8,12 @@ try-it-out.md | |||
| ``` | ||||
| 
 | ||||
| ```{=include=} parts | ||||
| custom-configs.md | ||||
| custom-package.md | ||||
| custom-plugins.md | ||||
| default-configs.md | ||||
| home-manager.md | ||||
| languages.md | ||||
| installation.md | ||||
| configuring.md | ||||
| ``` | ||||
| 
 | ||||
| ```{=include=} chapters | ||||
| hacking.md | ||||
| ``` | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,5 +1,9 @@ | |||
| # Neovim Flake Configuration Options {#ch-options} | ||||
| 
 | ||||
| Below are the options provided by neovim-flake provided in no particular order. | ||||
| They may include useful comments and warnings, or examples on how a module option | ||||
| is meant to be used. | ||||
| 
 | ||||
| ```{=include=} options | ||||
| id-prefix: opt- | ||||
| list-id: neovim-flake-options | ||||
|  |  | |||
|  | @ -1,6 +1,7 @@ | |||
| # Preface {#sec-preface} | ||||
| # Preface {#ch-preface} | ||||
| 
 | ||||
| If you noticed a bug caused by neovim-flake then please consider reporting it over | ||||
| [the neovim-flake issue tracker](https://github.com/notashelf/neovim-flake/issues). | ||||
| Bugfixes, feature additions and upstreamed changes are welcome over | ||||
| [the neovim-flake pull requests tab](https://github.com/notashelf/neovim-flake/pulls). | ||||
| 
 | ||||
| Bugfixes, feature additions and upstreamed changes from your local configurations | ||||
| are always welcome in the [the neovim-flake pull requests tab](https://github.com/notashelf/neovim-flake/pulls). | ||||
|  |  | |||
|  | @ -16,9 +16,7 @@ $ nix run github:notashelf/neovim-flake#nix # will run the default minimal confi | |||
| ``` | ||||
| 
 | ||||
| Do keep in mind that this is **susceptible to garbage collection** meaning it will be removed from your Nix store | ||||
| once you garbage collect. If you wish to install neovim-flake, please take a look at | ||||
| [custom-configuration](#ch-custom-configuration) or [home-manager](#ch-hm-module) sections for installation | ||||
| instructions. | ||||
| once you garbage collect. | ||||
| 
 | ||||
| ## Using Prebuilt Configs {#sec-using-prebuild-configs} | ||||
| 
 | ||||
|  | @ -33,7 +31,7 @@ $ nix run github:notashelf/neovim-flake#maximal | |||
| #### Nix {#sec-configs-nix} | ||||
| 
 | ||||
| `Nix` configuration by default provides LSP/diagnostic support for Nix alongisde a set of visual and functional plugins. | ||||
| By running `nix run .`, which is the default package, you will build Neovim with this config. | ||||
| By running `nix run .#`, which is the default package, you will build Neovim with this config. | ||||
| 
 | ||||
| #### Tidal {#sec-configs-tidal} | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										830
									
								
								docs/static/style.css
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										830
									
								
								docs/static/style.css
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,830 @@ | |||
| :root { | ||||
| 	--nmd-color0: #0a3e68; | ||||
| 	--nmd-color1: #268598; | ||||
| 	--nmd-color2: #b8d09e; | ||||
| 	--nmd-color3: #f6cf5e; | ||||
| 	--nmd-color4: #ec733b; | ||||
| 	--nmd-color-info: #167cb9; | ||||
| 	--nmd-color-warn: #ff6700; | ||||
| } | ||||
| html { | ||||
| 	-webkit-text-size-adjust: 100%; | ||||
| } | ||||
| html:focus-within { | ||||
| 	scroll-behavior: smooth; | ||||
| } | ||||
| body { | ||||
| 	-webkit-text-size-adjust: 100%; | ||||
| 	-moz-text-size-adjust: 100%; | ||||
| 	text-size-adjust: 100%; | ||||
| 	-moz-osx-font-smoothing: grayscale; | ||||
| 	-webkit-font-smoothing: antialiased; | ||||
| 	min-height: 100vh; | ||||
| 	position: relative; | ||||
| 	text-rendering: optimizeSpeed; | ||||
| 	width: 100%; | ||||
| } | ||||
| *, | ||||
| :after, | ||||
| :before { | ||||
| 	box-sizing: border-box; | ||||
| } | ||||
| a:not([class]) { | ||||
| 	-webkit-text-decoration-skip: ink; | ||||
| 	text-decoration-skip-ink: auto; | ||||
| } | ||||
| a, | ||||
| abbr, | ||||
| acronym, | ||||
| address, | ||||
| applet, | ||||
| article, | ||||
| aside, | ||||
| audio, | ||||
| b, | ||||
| big, | ||||
| blockquote, | ||||
| body, | ||||
| canvas, | ||||
| caption, | ||||
| center, | ||||
| cite, | ||||
| code, | ||||
| dd, | ||||
| del, | ||||
| details, | ||||
| dfn, | ||||
| div, | ||||
| dl, | ||||
| dt, | ||||
| em, | ||||
| embed, | ||||
| fieldset, | ||||
| figcaption, | ||||
| figure, | ||||
| footer, | ||||
| form, | ||||
| h1, | ||||
| h2, | ||||
| h3, | ||||
| h4, | ||||
| h5, | ||||
| h6, | ||||
| header, | ||||
| hgroup, | ||||
| html, | ||||
| i, | ||||
| iframe, | ||||
| img, | ||||
| ins, | ||||
| kbd, | ||||
| label, | ||||
| legend, | ||||
| li, | ||||
| mark, | ||||
| menu, | ||||
| nav, | ||||
| object, | ||||
| ol, | ||||
| output, | ||||
| p, | ||||
| pre, | ||||
| q, | ||||
| ruby, | ||||
| s, | ||||
| samp, | ||||
| section, | ||||
| small, | ||||
| span, | ||||
| strike, | ||||
| strong, | ||||
| sub, | ||||
| summary, | ||||
| sup, | ||||
| table, | ||||
| tbody, | ||||
| td, | ||||
| tfoot, | ||||
| th, | ||||
| thead, | ||||
| time, | ||||
| tr, | ||||
| tt, | ||||
| u, | ||||
| ul, | ||||
| var, | ||||
| video { | ||||
| 	border: 0; | ||||
| 	font-size: 100%; | ||||
| 	font: inherit; | ||||
| 	margin: 0; | ||||
| 	padding: 0; | ||||
| 	vertical-align: baseline; | ||||
| } | ||||
| :focus { | ||||
| 	outline: 0; | ||||
| } | ||||
| article, | ||||
| aside, | ||||
| details, | ||||
| figcaption, | ||||
| figure, | ||||
| footer, | ||||
| header, | ||||
| hgroup, | ||||
| main, | ||||
| menu, | ||||
| nav, | ||||
| section { | ||||
| 	display: block; | ||||
| } | ||||
| ol, | ||||
| ul { | ||||
| 	list-style: none; | ||||
| } | ||||
| blockquote, | ||||
| q { | ||||
| 	quotes: none; | ||||
| } | ||||
| blockquote:after, | ||||
| blockquote:before, | ||||
| q:after, | ||||
| q:before { | ||||
| 	content: ""; | ||||
| 	content: none; | ||||
| } | ||||
| input, | ||||
| input:required { | ||||
| 	box-shadow: none; | ||||
| } | ||||
| input:-webkit-autofill, | ||||
| input:-webkit-autofill:active, | ||||
| input:-webkit-autofill:focus, | ||||
| input:-webkit-autofill:hover { | ||||
| 	-webkit-box-shadow: inset 0 0 0 30px #fff; | ||||
| } | ||||
| input[type="search"]::-webkit-search-cancel-button, | ||||
| input[type="search"]::-webkit-search-decoration, | ||||
| input[type="search"]::-webkit-search-results-button, | ||||
| input[type="search"]::-webkit-search-results-decoration { | ||||
| 	-webkit-appearance: none; | ||||
| 	-moz-appearance: none; | ||||
| } | ||||
| input[type="search"] { | ||||
| 	-webkit-appearance: none; | ||||
| 	-moz-appearance: none; | ||||
| } | ||||
| input:focus { | ||||
| 	outline: 0; | ||||
| } | ||||
| audio, | ||||
| canvas, | ||||
| video { | ||||
| 	display: inline-block; | ||||
| 	max-width: 100%; | ||||
| } | ||||
| audio:not([controls]) { | ||||
| 	display: none; | ||||
| 	height: 0; | ||||
| } | ||||
| [hidden] { | ||||
| 	display: none; | ||||
| } | ||||
| a:active, | ||||
| a:hover { | ||||
| 	outline: 0; | ||||
| } | ||||
| img { | ||||
| 	height: auto; | ||||
| 	max-width: 100%; | ||||
| 	vertical-align: middle; | ||||
| } | ||||
| img, | ||||
| picture { | ||||
| 	display: inline-block; | ||||
| } | ||||
| button, | ||||
| input { | ||||
| 	line-height: normal; | ||||
| } | ||||
| button, | ||||
| html input[type="button"], | ||||
| input[type="reset"], | ||||
| input[type="submit"] { | ||||
| 	-webkit-appearance: button; | ||||
| 	background: 0 0; | ||||
| 	border: 0; | ||||
| 	cursor: pointer; | ||||
| } | ||||
| button[disabled], | ||||
| html input[disabled] { | ||||
| 	cursor: default; | ||||
| } | ||||
| [disabled] { | ||||
| 	pointer-events: none; | ||||
| } | ||||
| input[type="checkbox"], | ||||
| input[type="radio"] { | ||||
| 	padding: 0; | ||||
| } | ||||
| input[type="search"] { | ||||
| 	-webkit-appearance: textfield; | ||||
| 	box-sizing: content-box; | ||||
| } | ||||
| input[type="search"]::-webkit-search-cancel-button, | ||||
| input[type="search"]::-webkit-search-decoration { | ||||
| 	-webkit-appearance: none; | ||||
| } | ||||
| button::-moz-focus-inner, | ||||
| input::-moz-focus-inner { | ||||
| 	border: 0; | ||||
| 	padding: 0; | ||||
| } | ||||
| button { | ||||
| 	background: 0 0; | ||||
| 	border: 0; | ||||
| } | ||||
| textarea { | ||||
| 	overflow: auto; | ||||
| 	resize: vertical; | ||||
| 	vertical-align: top; | ||||
| } | ||||
| table { | ||||
| 	border-collapse: collapse; | ||||
| 	border-spacing: 0; | ||||
| 	text-indent: 0; | ||||
| } | ||||
| hr { | ||||
| 	background: #000; | ||||
| 	border: 0; | ||||
| 	box-sizing: content-box; | ||||
| 	height: 1px; | ||||
| 	line-height: 0; | ||||
| 	margin: 0; | ||||
| 	overflow: visible; | ||||
| 	padding: 0; | ||||
| 	page-break-after: always; | ||||
| 	width: 100%; | ||||
| } | ||||
| pre { | ||||
| 	font-family: monospace, monospace; | ||||
| 	font-size: 100%; | ||||
| } | ||||
| a { | ||||
| 	background-color: transparent; | ||||
| } | ||||
| abbr[title] { | ||||
| 	border-bottom: none; | ||||
| 	text-decoration: none; | ||||
| } | ||||
| code, | ||||
| kbd, | ||||
| pre, | ||||
| samp { | ||||
| 	font-family: monospace, monospace; | ||||
| } | ||||
| small, | ||||
| sub, | ||||
| sup { | ||||
| 	font-size: 75%; | ||||
| } | ||||
| sub, | ||||
| sup { | ||||
| 	line-height: 0; | ||||
| 	position: relative; | ||||
| 	vertical-align: baseline; | ||||
| } | ||||
| sub { | ||||
| 	bottom: -5px; | ||||
| } | ||||
| sup { | ||||
| 	top: -5px; | ||||
| } | ||||
| button, | ||||
| input, | ||||
| optgroup, | ||||
| select, | ||||
| textarea { | ||||
| 	font-family: inherit; | ||||
| 	font-size: 100%; | ||||
| 	line-height: 1; | ||||
| 	margin: 0; | ||||
| 	padding: 0; | ||||
| } | ||||
| button, | ||||
| input { | ||||
| 	overflow: visible; | ||||
| } | ||||
| button, | ||||
| select { | ||||
| 	text-transform: none; | ||||
| } | ||||
| [type="button"], | ||||
| [type="reset"], | ||||
| [type="submit"], | ||||
| button { | ||||
| 	-webkit-appearance: button; | ||||
| } | ||||
| [type="button"]::-moz-focus-inner, | ||||
| [type="reset"]::-moz-focus-inner, | ||||
| [type="submit"]::-moz-focus-inner, | ||||
| button::-moz-focus-inner { | ||||
| 	border-style: none; | ||||
| 	outline: 0; | ||||
| 	padding: 0; | ||||
| } | ||||
| legend { | ||||
| 	border: 0; | ||||
| 	color: inherit; | ||||
| 	display: block; | ||||
| 	max-width: 100%; | ||||
| 	white-space: normal; | ||||
| 	width: 100%; | ||||
| } | ||||
| fieldset { | ||||
| 	min-width: 0; | ||||
| } | ||||
| body:not(:-moz-handler-blocked) fieldset { | ||||
| 	display: block; | ||||
| } | ||||
| progress { | ||||
| 	vertical-align: baseline; | ||||
| } | ||||
| [type="number"]::-webkit-inner-spin-button, | ||||
| [type="number"]::-webkit-outer-spin-button { | ||||
| 	height: auto; | ||||
| } | ||||
| [type="search"] { | ||||
| 	-webkit-appearance: textfield; | ||||
| 	outline-offset: -2px; | ||||
| } | ||||
| [type="search"]::-webkit-search-decoration { | ||||
| 	-webkit-appearance: none; | ||||
| } | ||||
| ::-webkit-file-upload-button { | ||||
| 	-webkit-appearance: button; | ||||
| 	font: inherit; | ||||
| } | ||||
| summary { | ||||
| 	display: list-item; | ||||
| } | ||||
| template { | ||||
| 	display: none; | ||||
| } | ||||
| body { | ||||
| 	background: white; | ||||
| 	color: #111827; | ||||
| 	max-width: min(100ch, 1024px); | ||||
| 	margin: 0 auto; | ||||
| 	padding: 10px; | ||||
| 	font-family: "Lucida Sans", Arial, sans-serif; | ||||
| 	font-size: 16px; | ||||
| 	line-height: 1.4em; | ||||
| } | ||||
| @media (prefers-color-scheme: dark) { | ||||
| 	body { | ||||
| 		background: #111827; | ||||
| 		color: #f9fafb; | ||||
| 	} | ||||
| } | ||||
| h1, | ||||
| h2, | ||||
| h3 { | ||||
| 	color: var(--nmd-color0); | ||||
| 	font-family: "Lato", sans-serif; | ||||
| 	font-weight: 300; | ||||
| 	line-height: 1.125; | ||||
| } | ||||
| @media (prefers-color-scheme: dark) { | ||||
| 	h1, | ||||
| 	h2, | ||||
| 	h3 { | ||||
| 		color: var(--nmd-color4); | ||||
| 	} | ||||
| } | ||||
| h1 { | ||||
| 	font-size: 48px; | ||||
| 	font-weight: 300; | ||||
| 	margin: 4rem 0 1.5rem; | ||||
| } | ||||
| h2 { | ||||
| 	font-size: 32px; | ||||
| 	font-weight: 300; | ||||
| 	margin: 2rem 0 1rem; | ||||
| } | ||||
| h3 { | ||||
| 	font-size: 20px; | ||||
| 	font-weight: 400; | ||||
| 	margin: 0.5rem 0.25rem; | ||||
| } | ||||
| p { | ||||
| 	margin: 0.9rem 0; | ||||
| } | ||||
| p:first-child { | ||||
| 	margin-top: 0; | ||||
| } | ||||
| p:last-child { | ||||
| 	margin-bottom: 0; | ||||
| } | ||||
| a { | ||||
| 	color: var(--nmd-color0); | ||||
| 	text-decoration: underline; | ||||
| 	text-underline-offset: 3px; | ||||
| } | ||||
| a:visited { | ||||
| 	color: var(--nmd-color1); | ||||
| } | ||||
| a:hover { | ||||
| 	color: var(--nmd-color1); | ||||
| } | ||||
| @media (prefers-color-scheme: dark) { | ||||
| 	a { | ||||
| 		color: var(--nmd-color3); | ||||
| 	} | ||||
| 	a:visited { | ||||
| 		color: var(--nmd-color2); | ||||
| 	} | ||||
| 	a:hover { | ||||
| 		color: var(--nmd-color4); | ||||
| 	} | ||||
| } | ||||
| code { | ||||
| 	font-size: 90%; | ||||
| } | ||||
| span.command { | ||||
| 	font-size: 90%; | ||||
| 	font-family: monospace; | ||||
| } | ||||
| em { | ||||
| 	font-style: italic; | ||||
| } | ||||
| strong { | ||||
| 	font-weight: bold; | ||||
| } | ||||
| pre { | ||||
| 	background: #f9fafb; | ||||
| 	margin: 2rem 16px; | ||||
| 	padding: 10px; | ||||
| 	border: 1px solid #e5e7eb; | ||||
| 	border-radius: 4px; | ||||
| 	box-shadow: 4px 4px 8px #e5e7eb; | ||||
| 	font-size: 90%; | ||||
| 	margin-bottom: 1.5rem; | ||||
| 	padding: 6px; | ||||
| 	overflow: auto; | ||||
| } | ||||
| @media (prefers-color-scheme: dark) { | ||||
| 	pre { | ||||
| 		background: #1f2937; | ||||
| 		border-color: black; | ||||
| 		box-shadow: 4px 4px 8px black; | ||||
| 	} | ||||
| } | ||||
| pre span img { | ||||
| 	user-select: none; | ||||
| } | ||||
| pre:has(code) { | ||||
| 	padding: 0; | ||||
| } | ||||
| td, | ||||
| th { | ||||
| 	padding: 2px 5px; | ||||
| } | ||||
| td:first-child, | ||||
| th:first-child { | ||||
| 	padding-left: 0; | ||||
| } | ||||
| td:last-child, | ||||
| th:last-child { | ||||
| 	padding-right: 0; | ||||
| } | ||||
| dt { | ||||
| 	margin: 1.2rem 0 0.8rem; | ||||
| } | ||||
| dd { | ||||
| 	margin-left: 2rem; | ||||
| } | ||||
| ul { | ||||
| 	margin: 0.9rem 0; | ||||
| 	padding-left: 30px; | ||||
| 	list-style: disc; | ||||
| } | ||||
| ul:first-child { | ||||
| 	margin-top: 0; | ||||
| } | ||||
| ul:last-child { | ||||
| 	margin-bottom: 0; | ||||
| } | ||||
| ol { | ||||
| 	margin: 0.9rem 0; | ||||
| 	padding-left: 30px; | ||||
| 	list-style: decimal; | ||||
| } | ||||
| ol:first-child { | ||||
| 	margin-top: 0; | ||||
| } | ||||
| ol:last-child { | ||||
| 	margin-bottom: 0; | ||||
| } | ||||
| li { | ||||
| 	margin: 0.9rem 0; | ||||
| 	padding-left: 5px; | ||||
| } | ||||
| li:first-child { | ||||
| 	margin-top: 0; | ||||
| } | ||||
| li:last-child { | ||||
| 	margin-bottom: 0; | ||||
| } | ||||
| .navheader hr, | ||||
| .navfooter hr { | ||||
| 	margin: 1rem 0; | ||||
| 	background: #e5e7eb; | ||||
| } | ||||
| @media (prefers-color-scheme: dark) { | ||||
| 	.navheader hr, | ||||
| 	.navfooter hr { | ||||
| 		background: #4b5563; | ||||
| 	} | ||||
| } | ||||
| .navheader a, | ||||
| .navfooter a { | ||||
| 	text-decoration: none; | ||||
| } | ||||
| div.titlepage { | ||||
| 	margin: 40px 0; | ||||
| } | ||||
| div.titlepage hr { | ||||
| 	display: none; | ||||
| } | ||||
| div.toc { | ||||
| 	background: #f9fafb; | ||||
| 	margin: 2rem 16px; | ||||
| 	padding: 10px; | ||||
| 	border: 1px solid #e5e7eb; | ||||
| 	border-radius: 4px; | ||||
| 	box-shadow: 4px 4px 8px #e5e7eb; | ||||
| } | ||||
| @media (prefers-color-scheme: dark) { | ||||
| 	div.toc { | ||||
| 		background: #1f2937; | ||||
| 		border-color: black; | ||||
| 		box-shadow: 4px 4px 8px black; | ||||
| 	} | ||||
| } | ||||
| div.toc a { | ||||
| 	text-decoration: none; | ||||
| } | ||||
| div.note, | ||||
| div.warning { | ||||
| 	background: #f9fafb; | ||||
| 	margin: 2rem 16px; | ||||
| 	padding: 10px; | ||||
| 	border: 1px solid #e5e7eb; | ||||
| 	border-radius: 4px; | ||||
| 	box-shadow: 4px 4px 8px #e5e7eb; | ||||
| 	font-style: italic; | ||||
| } | ||||
| @media (prefers-color-scheme: dark) { | ||||
| 	div.note, | ||||
| 	div.warning { | ||||
| 		background: #1f2937; | ||||
| 		border-color: black; | ||||
| 		box-shadow: 4px 4px 8px black; | ||||
| 	} | ||||
| } | ||||
| div.note h3, | ||||
| div.warning h3 { | ||||
| 	float: right; | ||||
| 	margin: 0 0 1rem 1rem; | ||||
| 	width: 42px; | ||||
| 	height: 42px; | ||||
| 	content: url(); | ||||
| } | ||||
| div.note h3 + p, | ||||
| div.warning h3 + p { | ||||
| 	margin-top: 0; | ||||
| } | ||||
| div.note h3 { | ||||
| 	background-color: var(--nmd-color-info); | ||||
| 	mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='42' height='42' viewBox='0 0 24 24' stroke-width='2' stroke='black' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpath d='M12 8h.01'%3E%3C/path%3E%3Cpath d='M11 12h1v4h1'%3E%3C/path%3E%3Cpath d='M12 3c7.2 0 9 1.8 9 9s-1.8 9 -9 9s-9 -1.8 -9 -9s1.8 -9 9 -9z'%3E%3C/path%3E%3C/svg%3E"); | ||||
| 	-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='42' height='42' viewBox='0 0 24 24' stroke-width='2' stroke='black' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpath d='M12 8h.01'%3E%3C/path%3E%3Cpath d='M11 12h1v4h1'%3E%3C/path%3E%3Cpath d='M12 3c7.2 0 9 1.8 9 9s-1.8 9 -9 9s-9 -1.8 -9 -9s1.8 -9 9 -9z'%3E%3C/path%3E%3C/svg%3E"); | ||||
| } | ||||
| div.warning h3 { | ||||
| 	background-color: var(--nmd-color-warn); | ||||
| 	mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='42' height='42' viewBox='0 0 24 24' stroke-width='2' stroke='black' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpath d='M12 9v2m0 4v.01'%3E%3C/path%3E%3Cpath d='M5 19h14a2 2 0 0 0 1.84 -2.75l-7.1 -12.25a2 2 0 0 0 -3.5 0l-7.1 12.25a2 2 0 0 0 1.75 2.75'%3E%3C/path%3E%3C/svg%3E"); | ||||
| 	-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='42' height='42' viewBox='0 0 24 24' stroke-width='2' stroke='black' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpath d='M12 9v2m0 4v.01'%3E%3C/path%3E%3Cpath d='M5 19h14a2 2 0 0 0 1.84 -2.75l-7.1 -12.25a2 2 0 0 0 -3.5 0l-7.1 12.25a2 2 0 0 0 1.75 2.75'%3E%3C/path%3E%3C/svg%3E"); | ||||
| } | ||||
| .term { | ||||
| 	font-weight: 300; | ||||
| } | ||||
| .docbook .xref img[src^="images\/callouts\/"], | ||||
| .screen img, | ||||
| .programlisting img { | ||||
| 	width: 1em; | ||||
| } | ||||
| .calloutlist img { | ||||
| 	width: 1.3em; | ||||
| } | ||||
| .programlisting.language-shell .hljs-meta.prompt_ { | ||||
| 	user-select: none; | ||||
| } /*! | ||||
|   Theme: Tomorrow | ||||
|   Author: Chris Kempson (http://chriskempson.com) | ||||
|   License: ~ MIT (or more permissive) [via base16-schemes-source] | ||||
|   Maintainer: @highlightjs/core-team | ||||
|   Version: 2021.09.0 | ||||
| */ | ||||
| pre code.hljs { | ||||
| 	display: block; | ||||
| 	overflow-x: auto; | ||||
| 	padding: 1em; | ||||
| } | ||||
| code.hljs { | ||||
| 	padding: 3px 5px; | ||||
| } | ||||
| .hljs { | ||||
| 	color: #4d4d4c; | ||||
| 	background: #fff; | ||||
| } | ||||
| .hljs ::selection, | ||||
| .hljs::selection { | ||||
| 	background-color: #d6d6d6; | ||||
| 	color: #4d4d4c; | ||||
| } | ||||
| .hljs-comment { | ||||
| 	color: #8e908c; | ||||
| } | ||||
| .hljs-tag { | ||||
| 	color: #969896; | ||||
| } | ||||
| .hljs-operator, | ||||
| .hljs-punctuation, | ||||
| .hljs-subst { | ||||
| 	color: #4d4d4c; | ||||
| } | ||||
| .hljs-operator { | ||||
| 	opacity: 0.7; | ||||
| } | ||||
| .hljs-bullet, | ||||
| .hljs-deletion, | ||||
| .hljs-name, | ||||
| .hljs-selector-tag, | ||||
| .hljs-template-variable, | ||||
| .hljs-variable { | ||||
| 	color: #c82829; | ||||
| } | ||||
| .hljs-attr, | ||||
| .hljs-link, | ||||
| .hljs-literal, | ||||
| .hljs-number, | ||||
| .hljs-symbol, | ||||
| .hljs-variable.constant_ { | ||||
| 	color: #f5871f; | ||||
| } | ||||
| .hljs-class .hljs-title, | ||||
| .hljs-title, | ||||
| .hljs-title.class_ { | ||||
| 	color: #eab700; | ||||
| } | ||||
| .hljs-strong { | ||||
| 	font-weight: 700; | ||||
| 	color: #eab700; | ||||
| } | ||||
| .hljs-addition, | ||||
| .hljs-code, | ||||
| .hljs-string, | ||||
| .hljs-title.class_.inherited__ { | ||||
| 	color: #718c00; | ||||
| } | ||||
| .hljs-built_in, | ||||
| .hljs-doctag, | ||||
| .hljs-keyword.hljs-atrule, | ||||
| .hljs-quote, | ||||
| .hljs-regexp { | ||||
| 	color: #3e999f; | ||||
| } | ||||
| .hljs-attribute, | ||||
| .hljs-function .hljs-title, | ||||
| .hljs-section, | ||||
| .hljs-title.function_, | ||||
| .ruby .hljs-property { | ||||
| 	color: #4271ae; | ||||
| } | ||||
| .diff .hljs-meta, | ||||
| .hljs-keyword, | ||||
| .hljs-template-tag, | ||||
| .hljs-type { | ||||
| 	color: #8959a8; | ||||
| } | ||||
| .hljs-emphasis { | ||||
| 	color: #8959a8; | ||||
| 	font-style: italic; | ||||
| } | ||||
| .hljs-meta, | ||||
| .hljs-meta .hljs-keyword, | ||||
| .hljs-meta .hljs-string { | ||||
| 	color: #a3685a; | ||||
| } | ||||
| .hljs-meta .hljs-keyword, | ||||
| .hljs-meta-keyword { | ||||
| 	font-weight: 700; | ||||
| } | ||||
| @media (prefers-color-scheme: dark) { | ||||
| 	/*!  Theme: Tomorrow Night  Author: Chris Kempson (http://chriskempson.com)  License: ~ MIT (or more permissive) [via base16-schemes-source]  Maintainer: @highlightjs/core-team  Version: 2021.09.0*/ | ||||
| 	pre code.hljs { | ||||
| 		display: block; | ||||
| 		overflow-x: auto; | ||||
| 		padding: 1em; | ||||
| 	} | ||||
| 	code.hljs { | ||||
| 		padding: 3px 5px; | ||||
| 	} | ||||
| 	.hljs { | ||||
| 		color: #ccc; | ||||
| 		background: #2d2d2d; | ||||
| 	} | ||||
| 	.hljs ::selection, | ||||
| 	.hljs::selection { | ||||
| 		background-color: #515151; | ||||
| 		color: #ccc; | ||||
| 	} | ||||
| 	.hljs-comment { | ||||
| 		color: #999; | ||||
| 	} | ||||
| 	.hljs-tag { | ||||
| 		color: #b4b7b4; | ||||
| 	} | ||||
| 	.hljs-operator, | ||||
| 	.hljs-punctuation, | ||||
| 	.hljs-subst { | ||||
| 		color: #ccc; | ||||
| 	} | ||||
| 	.hljs-operator { | ||||
| 		opacity: 0.7; | ||||
| 	} | ||||
| 	.hljs-bullet, | ||||
| 	.hljs-deletion, | ||||
| 	.hljs-name, | ||||
| 	.hljs-selector-tag, | ||||
| 	.hljs-template-variable, | ||||
| 	.hljs-variable { | ||||
| 		color: #f2777a; | ||||
| 	} | ||||
| 	.hljs-attr, | ||||
| 	.hljs-link, | ||||
| 	.hljs-literal, | ||||
| 	.hljs-number, | ||||
| 	.hljs-symbol, | ||||
| 	.hljs-variable.constant_ { | ||||
| 		color: #f99157; | ||||
| 	} | ||||
| 	.hljs-class .hljs-title, | ||||
| 	.hljs-title, | ||||
| 	.hljs-title.class_ { | ||||
| 		color: #fc6; | ||||
| 	} | ||||
| 	.hljs-strong { | ||||
| 		font-weight: 700; | ||||
| 		color: #fc6; | ||||
| 	} | ||||
| 	.hljs-addition, | ||||
| 	.hljs-code, | ||||
| 	.hljs-string, | ||||
| 	.hljs-title.class_.inherited__ { | ||||
| 		color: #9c9; | ||||
| 	} | ||||
| 	.hljs-built_in, | ||||
| 	.hljs-doctag, | ||||
| 	.hljs-keyword.hljs-atrule, | ||||
| 	.hljs-quote, | ||||
| 	.hljs-regexp { | ||||
| 		color: #6cc; | ||||
| 	} | ||||
| 	.hljs-attribute, | ||||
| 	.hljs-function .hljs-title, | ||||
| 	.hljs-section, | ||||
| 	.hljs-title.function_, | ||||
| 	.ruby .hljs-property { | ||||
| 		color: #69c; | ||||
| 	} | ||||
| 	.diff .hljs-meta, | ||||
| 	.hljs-keyword, | ||||
| 	.hljs-template-tag, | ||||
| 	.hljs-type { | ||||
| 		color: #c9c; | ||||
| 	} | ||||
| 	.hljs-emphasis { | ||||
| 		color: #c9c; | ||||
| 		font-style: italic; | ||||
| 	} | ||||
| 	.hljs-meta, | ||||
| 	.hljs-meta .hljs-keyword, | ||||
| 	.hljs-meta .hljs-string { | ||||
| 		color: #a3685a; | ||||
| 	} | ||||
| 	.hljs-meta .hljs-keyword, | ||||
| 	.hljs-meta-keyword { | ||||
| 		font-weight: 700; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										312
									
								
								docs/static/style.scss
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										312
									
								
								docs/static/style.scss
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,312 @@ | |||
| :root { | ||||
| 	--nmd-color0: #0a3e68; | ||||
| 	--nmd-color1: #268598; | ||||
| 	--nmd-color2: #b8d09e; | ||||
| 	--nmd-color3: #f6cf5e; | ||||
| 	--nmd-color4: #ec733b; | ||||
| 
 | ||||
| 	--nmd-color-info: #167cb9; | ||||
| 	--nmd-color-warn: #ff6700; | ||||
| } | ||||
| 
 | ||||
| // Copied from Tailwind CSS. | ||||
| $color-gray-50: #f9fafb; | ||||
| $color-gray-100: #f3f4f6; | ||||
| $color-gray-200: #e5e7eb; | ||||
| $color-gray-300: #d1d5db; | ||||
| $color-gray-400: #9ca3af; | ||||
| $color-gray-500: #6b7280; | ||||
| $color-gray-600: #4b5563; | ||||
| $color-gray-700: #374151; | ||||
| $color-gray-800: #1f2937; | ||||
| $color-gray-900: #111827; | ||||
| 
 | ||||
| $color-blue-50: #eff6ff; | ||||
| $color-blue-100: #dbeafe; | ||||
| $color-blue-200: #bfdbfe; | ||||
| $color-blue-300: #93c5fd; | ||||
| $color-blue-400: #60a5fa; | ||||
| $color-blue-500: #3b82f6; | ||||
| $color-blue-600: #2563eb; | ||||
| $color-blue-700: #1d4ed8; | ||||
| $color-blue-800: #1e40af; | ||||
| $color-blue-900: #1e3a8a; | ||||
| 
 | ||||
| @use "scss-reset/reset"; | ||||
| 
 | ||||
| @mixin boxed { | ||||
| 	background: $color-gray-50; | ||||
| 	margin: 2rem 16px; | ||||
| 	padding: 10px; | ||||
| 	border: 1px solid $color-gray-200; | ||||
| 	border-radius: 4px; | ||||
| 	box-shadow: 4px 4px 8px $color-gray-200; | ||||
| 
 | ||||
| 	@media (prefers-color-scheme: dark) { | ||||
| 		background: $color-gray-800; | ||||
| 		border-color: black; | ||||
| 		box-shadow: 4px 4px 8px black; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| @mixin margined { | ||||
| 	margin: 0.9rem 0; | ||||
| 
 | ||||
| 	&:first-child { | ||||
| 		margin-top: 0; | ||||
| 	} | ||||
| 
 | ||||
| 	&:last-child { | ||||
| 		margin-bottom: 0; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| body { | ||||
| 	background: white; | ||||
| 	color: $color-gray-900; | ||||
| 	max-width: min(100ch, 1024px); | ||||
| 	margin: 0 auto; | ||||
| 	padding: 10px; | ||||
| 
 | ||||
| 	font-family: "Lucida Sans", Arial, sans-serif; | ||||
| 	font-size: 16px; | ||||
| 	line-height: 1.4em; | ||||
| 
 | ||||
| 	@media (prefers-color-scheme: dark) { | ||||
| 		background: $color-gray-900; | ||||
| 		color: $color-gray-50; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| h1, | ||||
| h2, | ||||
| h3 { | ||||
| 	color: var(--nmd-color0); | ||||
| 	font-family: "Lato", sans-serif; | ||||
| 	font-weight: 300; | ||||
| 	line-height: 1.125; | ||||
| 
 | ||||
| 	@media (prefers-color-scheme: dark) { | ||||
| 		color: var(--nmd-color4); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| h1 { | ||||
| 	font-size: 48px; | ||||
| 	font-weight: 300; | ||||
| 	margin: 4rem 0 1.5rem; | ||||
| } | ||||
| 
 | ||||
| h2 { | ||||
| 	font-size: 32px; | ||||
| 	font-weight: 300; | ||||
| 	margin: 2rem 0 1rem; | ||||
| } | ||||
| 
 | ||||
| h3 { | ||||
| 	font-size: 20px; | ||||
| 	font-weight: 400; | ||||
| 	margin: 0.5rem 0.25rem; | ||||
| } | ||||
| 
 | ||||
| p { | ||||
| 	@include margined; | ||||
| } | ||||
| 
 | ||||
| a { | ||||
| 	color: var(--nmd-color0); //$color-secondary-1-3; | ||||
| 	text-decoration: underline; | ||||
| 	text-underline-offset: 3px; | ||||
| 
 | ||||
| 	&:visited { | ||||
| 		color: var(--nmd-color1); | ||||
| 	} | ||||
| 
 | ||||
| 	&:hover { | ||||
| 		color: var(--nmd-color1); | ||||
| 	} | ||||
| 
 | ||||
| 	@media (prefers-color-scheme: dark) { | ||||
| 		color: var(--nmd-color3); | ||||
| 
 | ||||
| 		&:visited { | ||||
| 			color: var(--nmd-color2); | ||||
| 		} | ||||
| 
 | ||||
| 		&:hover { | ||||
| 			color: var(--nmd-color4); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| code { | ||||
| 	font-size: 90%; | ||||
| } | ||||
| 
 | ||||
| span.command { | ||||
| 	font-size: 90%; | ||||
| 	font-family: monospace; | ||||
| } | ||||
| 
 | ||||
| em { | ||||
| 	font-style: italic; | ||||
| } | ||||
| 
 | ||||
| strong { | ||||
| 	font-weight: bold; | ||||
| } | ||||
| 
 | ||||
| pre { | ||||
| 	@include boxed; | ||||
| 
 | ||||
| 	font-size: 90%; | ||||
| 	margin-bottom: 1.5rem; | ||||
| 	padding: 6px; | ||||
| 	overflow: auto; | ||||
| 
 | ||||
| 	// The callout markers should not be selectable. | ||||
| 	span img { | ||||
| 		user-select: none; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| pre:has(code) { | ||||
| 	padding: 0; | ||||
| } | ||||
| 
 | ||||
| td, | ||||
| th { | ||||
| 	padding: 2px 5px; | ||||
| 
 | ||||
| 	&:first-child { | ||||
| 		padding-left: 0; | ||||
| 	} | ||||
| 
 | ||||
| 	&:last-child { | ||||
| 		padding-right: 0; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| dt { | ||||
| 	margin: 1.2rem 0 0.8rem; | ||||
| } | ||||
| 
 | ||||
| dd { | ||||
| 	margin-left: 2rem; | ||||
| } | ||||
| 
 | ||||
| div.book { | ||||
| } | ||||
| 
 | ||||
| ul { | ||||
| 	@include margined; | ||||
| 
 | ||||
| 	padding-left: 30px; | ||||
| 	list-style: disc; | ||||
| } | ||||
| 
 | ||||
| ol { | ||||
| 	@include margined; | ||||
| 
 | ||||
| 	padding-left: 30px; | ||||
| 	list-style: decimal; | ||||
| } | ||||
| 
 | ||||
| li { | ||||
| 	@include margined; | ||||
| 
 | ||||
| 	padding-left: 5px; | ||||
| } | ||||
| 
 | ||||
| .navheader, | ||||
| .navfooter { | ||||
| 	hr { | ||||
| 		margin: 1rem 0; | ||||
| 		background: $color-gray-200; | ||||
| 		@media (prefers-color-scheme: dark) { | ||||
| 			background: $color-gray-600; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	a { | ||||
| 		text-decoration: none; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| div.titlepage { | ||||
| 	margin: 40px 0; | ||||
| 
 | ||||
| 	hr { | ||||
| 		display: none; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| div.toc { | ||||
| 	@include boxed; | ||||
| 
 | ||||
| 	a { | ||||
| 		text-decoration: none; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| div.note, | ||||
| div.warning { | ||||
| 	@include boxed; | ||||
| 
 | ||||
| 	font-style: italic; | ||||
| 
 | ||||
| 	h3 { | ||||
| 		float: right; | ||||
| 		margin: 0 0 1rem 1rem; | ||||
| 		width: 42px; | ||||
| 		height: 42px; | ||||
| 		content: url(); | ||||
| 	} | ||||
| 
 | ||||
| 	h3 + p { | ||||
| 		margin-top: 0; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| div.note { | ||||
| 	h3 { | ||||
| 		background-color: var(--nmd-color-info); | ||||
| 		// From https://tabler-icons.io/i/info-square-rounded | ||||
| 		mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='42' height='42' viewBox='0 0 24 24' stroke-width='2' stroke='black' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpath d='M12 8h.01'%3E%3C/path%3E%3Cpath d='M11 12h1v4h1'%3E%3C/path%3E%3Cpath d='M12 3c7.2 0 9 1.8 9 9s-1.8 9 -9 9s-9 -1.8 -9 -9s1.8 -9 9 -9z'%3E%3C/path%3E%3C/svg%3E"); | ||||
| 		-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='42' height='42' viewBox='0 0 24 24' stroke-width='2' stroke='black' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpath d='M12 8h.01'%3E%3C/path%3E%3Cpath d='M11 12h1v4h1'%3E%3C/path%3E%3Cpath d='M12 3c7.2 0 9 1.8 9 9s-1.8 9 -9 9s-9 -1.8 -9 -9s1.8 -9 9 -9z'%3E%3C/path%3E%3C/svg%3E"); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| div.warning { | ||||
| 	h3 { | ||||
| 		background-color: var(--nmd-color-warn); | ||||
| 		// From https://tabler-icons.io/i/alert-triangle | ||||
| 		mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='42' height='42' viewBox='0 0 24 24' stroke-width='2' stroke='black' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpath d='M12 9v2m0 4v.01'%3E%3C/path%3E%3Cpath d='M5 19h14a2 2 0 0 0 1.84 -2.75l-7.1 -12.25a2 2 0 0 0 -3.5 0l-7.1 12.25a2 2 0 0 0 1.75 2.75'%3E%3C/path%3E%3C/svg%3E"); | ||||
| 		-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='42' height='42' viewBox='0 0 24 24' stroke-width='2' stroke='black' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpath d='M12 9v2m0 4v.01'%3E%3C/path%3E%3Cpath d='M5 19h14a2 2 0 0 0 1.84 -2.75l-7.1 -12.25a2 2 0 0 0 -3.5 0l-7.1 12.25a2 2 0 0 0 1.75 2.75'%3E%3C/path%3E%3C/svg%3E"); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| .term { | ||||
| 	font-weight: 300; | ||||
| } | ||||
| 
 | ||||
| .docbook .xref img[src^="images\/callouts\/"], | ||||
| .screen img, | ||||
| .programlisting img { | ||||
| 	width: 1em; | ||||
| } | ||||
| 
 | ||||
| .calloutlist img { | ||||
| 	width: 1.3em; | ||||
| } | ||||
| 
 | ||||
| /** The console prompt, e.g., `$` and `#` should not be selectable. */ | ||||
| .programlisting.language-shell .hljs-meta.prompt_ { | ||||
| 	user-select: none; | ||||
| } | ||||
| 
 | ||||
| @import "tomorrow.min.css"; | ||||
| 
 | ||||
| @media (prefers-color-scheme: dark) { | ||||
| 	@import "tomorrow-night.min.css"; | ||||
| } | ||||
							
								
								
									
										102
									
								
								docs/static/tomorrow-night.min.css
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								docs/static/tomorrow-night.min.css
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,102 @@ | |||
| /*! | ||||
|   Theme: Tomorrow Night | ||||
|   Author: Chris Kempson (http://chriskempson.com) | ||||
|   License: ~ MIT (or more permissive) [via base16-schemes-source] | ||||
|   Maintainer: @highlightjs/core-team | ||||
|   Version: 2021.09.0 | ||||
| */ | ||||
| pre code.hljs { | ||||
| 	display: block; | ||||
| 	overflow-x: auto; | ||||
| 	padding: 1em; | ||||
| } | ||||
| code.hljs { | ||||
| 	padding: 3px 5px; | ||||
| } | ||||
| .hljs { | ||||
| 	color: #ccc; | ||||
| 	background: #2d2d2d; | ||||
| } | ||||
| .hljs ::selection, | ||||
| .hljs::selection { | ||||
| 	background-color: #515151; | ||||
| 	color: #ccc; | ||||
| } | ||||
| .hljs-comment { | ||||
| 	color: #999; | ||||
| } | ||||
| .hljs-tag { | ||||
| 	color: #b4b7b4; | ||||
| } | ||||
| .hljs-operator, | ||||
| .hljs-punctuation, | ||||
| .hljs-subst { | ||||
| 	color: #ccc; | ||||
| } | ||||
| .hljs-operator { | ||||
| 	opacity: 0.7; | ||||
| } | ||||
| .hljs-bullet, | ||||
| .hljs-deletion, | ||||
| .hljs-name, | ||||
| .hljs-selector-tag, | ||||
| .hljs-template-variable, | ||||
| .hljs-variable { | ||||
| 	color: #f2777a; | ||||
| } | ||||
| .hljs-attr, | ||||
| .hljs-link, | ||||
| .hljs-literal, | ||||
| .hljs-number, | ||||
| .hljs-symbol, | ||||
| .hljs-variable.constant_ { | ||||
| 	color: #f99157; | ||||
| } | ||||
| .hljs-class .hljs-title, | ||||
| .hljs-title, | ||||
| .hljs-title.class_ { | ||||
| 	color: #fc6; | ||||
| } | ||||
| .hljs-strong { | ||||
| 	font-weight: 700; | ||||
| 	color: #fc6; | ||||
| } | ||||
| .hljs-addition, | ||||
| .hljs-code, | ||||
| .hljs-string, | ||||
| .hljs-title.class_.inherited__ { | ||||
| 	color: #9c9; | ||||
| } | ||||
| .hljs-built_in, | ||||
| .hljs-doctag, | ||||
| .hljs-keyword.hljs-atrule, | ||||
| .hljs-quote, | ||||
| .hljs-regexp { | ||||
| 	color: #6cc; | ||||
| } | ||||
| .hljs-attribute, | ||||
| .hljs-function .hljs-title, | ||||
| .hljs-section, | ||||
| .hljs-title.function_, | ||||
| .ruby .hljs-property { | ||||
| 	color: #69c; | ||||
| } | ||||
| .diff .hljs-meta, | ||||
| .hljs-keyword, | ||||
| .hljs-template-tag, | ||||
| .hljs-type { | ||||
| 	color: #c9c; | ||||
| } | ||||
| .hljs-emphasis { | ||||
| 	color: #c9c; | ||||
| 	font-style: italic; | ||||
| } | ||||
| .hljs-meta, | ||||
| .hljs-meta .hljs-keyword, | ||||
| .hljs-meta .hljs-string { | ||||
| 	color: #a3685a; | ||||
| } | ||||
| .hljs-meta .hljs-keyword, | ||||
| .hljs-meta-keyword { | ||||
| 	font-weight: 700; | ||||
| } | ||||
							
								
								
									
										102
									
								
								docs/static/tomorrow.min.css
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								docs/static/tomorrow.min.css
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,102 @@ | |||
| /*! | ||||
|   Theme: Tomorrow | ||||
|   Author: Chris Kempson (http://chriskempson.com) | ||||
|   License: ~ MIT (or more permissive) [via base16-schemes-source] | ||||
|   Maintainer: @highlightjs/core-team | ||||
|   Version: 2021.09.0 | ||||
| */ | ||||
| pre code.hljs { | ||||
| 	display: block; | ||||
| 	overflow-x: auto; | ||||
| 	padding: 1em; | ||||
| } | ||||
| code.hljs { | ||||
| 	padding: 3px 5px; | ||||
| } | ||||
| .hljs { | ||||
| 	color: #4d4d4c; | ||||
| 	background: #fff; | ||||
| } | ||||
| .hljs ::selection, | ||||
| .hljs::selection { | ||||
| 	background-color: #d6d6d6; | ||||
| 	color: #4d4d4c; | ||||
| } | ||||
| .hljs-comment { | ||||
| 	color: #8e908c; | ||||
| } | ||||
| .hljs-tag { | ||||
| 	color: #969896; | ||||
| } | ||||
| .hljs-operator, | ||||
| .hljs-punctuation, | ||||
| .hljs-subst { | ||||
| 	color: #4d4d4c; | ||||
| } | ||||
| .hljs-operator { | ||||
| 	opacity: 0.7; | ||||
| } | ||||
| .hljs-bullet, | ||||
| .hljs-deletion, | ||||
| .hljs-name, | ||||
| .hljs-selector-tag, | ||||
| .hljs-template-variable, | ||||
| .hljs-variable { | ||||
| 	color: #c82829; | ||||
| } | ||||
| .hljs-attr, | ||||
| .hljs-link, | ||||
| .hljs-literal, | ||||
| .hljs-number, | ||||
| .hljs-symbol, | ||||
| .hljs-variable.constant_ { | ||||
| 	color: #f5871f; | ||||
| } | ||||
| .hljs-class .hljs-title, | ||||
| .hljs-title, | ||||
| .hljs-title.class_ { | ||||
| 	color: #eab700; | ||||
| } | ||||
| .hljs-strong { | ||||
| 	font-weight: 700; | ||||
| 	color: #eab700; | ||||
| } | ||||
| .hljs-addition, | ||||
| .hljs-code, | ||||
| .hljs-string, | ||||
| .hljs-title.class_.inherited__ { | ||||
| 	color: #718c00; | ||||
| } | ||||
| .hljs-built_in, | ||||
| .hljs-doctag, | ||||
| .hljs-keyword.hljs-atrule, | ||||
| .hljs-quote, | ||||
| .hljs-regexp { | ||||
| 	color: #3e999f; | ||||
| } | ||||
| .hljs-attribute, | ||||
| .hljs-function .hljs-title, | ||||
| .hljs-section, | ||||
| .hljs-title.function_, | ||||
| .ruby .hljs-property { | ||||
| 	color: #4271ae; | ||||
| } | ||||
| .diff .hljs-meta, | ||||
| .hljs-keyword, | ||||
| .hljs-template-tag, | ||||
| .hljs-type { | ||||
| 	color: #8959a8; | ||||
| } | ||||
| .hljs-emphasis { | ||||
| 	color: #8959a8; | ||||
| 	font-style: italic; | ||||
| } | ||||
| .hljs-meta, | ||||
| .hljs-meta .hljs-keyword, | ||||
| .hljs-meta .hljs-string { | ||||
| 	color: #a3685a; | ||||
| } | ||||
| .hljs-meta .hljs-keyword, | ||||
| .hljs-meta-keyword { | ||||
| 	font-weight: 700; | ||||
| } | ||||
							
								
								
									
										39
									
								
								lib/dag.nix
									
										
									
									
									
								
							
							
						
						
									
										39
									
								
								lib/dag.nix
									
										
									
									
									
								
							|  | @ -8,10 +8,10 @@ | |||
| #  - the addition of the function `entryBefore` indicating a "wanted | ||||
| #    by" relationship. | ||||
| {lib}: let | ||||
|   inherit (builtins) isAttrs attrValues attrNames elem all; | ||||
|   inherit (builtins) isAttrs attrValues attrNames elem all head tail length; | ||||
|   inherit (lib.attrsets) filterAttrs mapAttrs; | ||||
|   inherit (lib.lists) toposort; | ||||
|   inherit (lib.nvim.dag) isEntry entryBetween; | ||||
|   inherit (lib.nvim.dag) empty isEntry entryBetween entryAfter entriesBetween; | ||||
| in { | ||||
|   empty = {}; | ||||
| 
 | ||||
|  | @ -108,6 +108,41 @@ in { | |||
|   entryAfter = entryBetween []; | ||||
|   entryBefore = before: entryBetween before []; | ||||
| 
 | ||||
|   # Given a list of entries, this function places them in order within the DAG. | ||||
|   # Each entry is labeled "${tag}-${entry index}" and other DAG entries can be | ||||
|   # added with 'before' or 'after' referring these indexed entries. | ||||
|   # | ||||
|   # The entries as a whole can be given a relation to other DAG nodes. All | ||||
|   # generated nodes are then placed before or after those dependencies. | ||||
|   entriesBetween = tag: let | ||||
|     go = i: before: after: entries: let | ||||
|       name = "${tag}-${toString i}"; | ||||
|       i' = i + 1; | ||||
|     in | ||||
|       if entries == [] | ||||
|       then empty | ||||
|       else if length entries == 1 | ||||
|       then { | ||||
|         "${name}" = entryBetween before after (head entries); | ||||
|       } | ||||
|       else | ||||
|         { | ||||
|           "${name}" = entryAfter after (head entries); | ||||
|         } | ||||
|         // go (i + 1) before [name] (tail entries); | ||||
|   in | ||||
|     go 0; | ||||
| 
 | ||||
|   entriesAnywhere = tag: entriesBetween tag [] []; | ||||
|   entriesAfter = tag: entriesBetween tag []; | ||||
|   entriesBefore = tag: before: entriesBetween tag before []; | ||||
| 
 | ||||
|   # mkLuarcSection and mkVimrcSection take a section DAG | ||||
|   # and return a string containing a comment to identify | ||||
|   # the section, and the data contained within the section | ||||
|   # | ||||
|   # all operations are done without any modifications | ||||
|   # to the inputted section data | ||||
|   mkLuarcSection = section: '' | ||||
|     -- SECTION: ${section.name} | ||||
|     ${section.data} | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 GitHub
					GitHub