mirror of
				https://github.com/NotAShelf/nvf.git
				synced 2025-10-31 19:12:38 +00:00 
			
		
		
		
	Merge pull request #224 from NotAShelf/image-nvim
utility/images: add image.nvim
This commit is contained in:
		
				commit
				
					
						dbbd7b2914
					
				
			
		
					 10 changed files with 200 additions and 4 deletions
				
			
		|  | @ -178,10 +178,14 @@ inputs: let | |||
|           hop.enable = true; | ||||
|           leap.enable = true; | ||||
|         }; | ||||
| 
 | ||||
|         images = { | ||||
|           image-nvim.enable = false; | ||||
|         }; | ||||
|       }; | ||||
| 
 | ||||
|       vim.notes = { | ||||
|         obsidian.enable = false; # FIXME neovim fails to build if obsidian is enabled | ||||
|         obsidian.enable = false; # FIXME: neovim fails to build if obsidian is enabled | ||||
|         orgmode.enable = false; | ||||
|         mind-nvim.enable = isMaximal; | ||||
|         todo-comments.enable = true; | ||||
|  |  | |||
							
								
								
									
										17
									
								
								flake.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										17
									
								
								flake.lock
									
										
									
										generated
									
									
									
								
							|  | @ -596,6 +596,22 @@ | |||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "image-nvim": { | ||||
|       "flake": false, | ||||
|       "locked": { | ||||
|         "lastModified": 1707861531, | ||||
|         "narHash": "sha256-mh3J3lW2Co2uA7YJzSGum0ZmpJBP0ZzBWUvJLAI9bHw=", | ||||
|         "owner": "3rd", | ||||
|         "repo": "image.nvim", | ||||
|         "rev": "4c6cb5ad93ee93d8d7b7c84e1eb291cee99f0a0e", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "3rd", | ||||
|         "repo": "image.nvim", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "indent-blankline": { | ||||
|       "flake": false, | ||||
|       "locked": { | ||||
|  | @ -1516,6 +1532,7 @@ | |||
|         "highlight-undo": "highlight-undo", | ||||
|         "hop-nvim": "hop-nvim", | ||||
|         "icon-picker-nvim": "icon-picker-nvim", | ||||
|         "image-nvim": "image-nvim", | ||||
|         "indent-blankline": "indent-blankline", | ||||
|         "kommentary": "kommentary", | ||||
|         "leap-nvim": "leap-nvim", | ||||
|  |  | |||
|  | @ -162,6 +162,11 @@ | |||
|       flake = false; | ||||
|     }; | ||||
| 
 | ||||
|     image-nvim = { | ||||
|       url = "github:3rd/image.nvim"; | ||||
|       flake = false; | ||||
|     }; | ||||
| 
 | ||||
|     # Tidal cycles | ||||
|     tidalcycles = { | ||||
|       url = "github:mitchmindtree/tidalcycles.nix"; | ||||
|  |  | |||
|  | @ -5,5 +5,5 @@ | |||
|   dag = import ./dag.nix {inherit lib;}; | ||||
|   languages = import ./languages.nix {inherit lib;}; | ||||
|   lua = import ./lua.nix {inherit lib;}; | ||||
|   vim = import ./vim.nix {inherit lib;}; | ||||
|   vim = import ./vim.nix; | ||||
| } | ||||
|  |  | |||
|  | @ -98,6 +98,7 @@ with lib; let | |||
|     "vim-dirtytalk" | ||||
|     "highlight-undo" | ||||
|     "nvim-docs-view" | ||||
|     "image-nvim" | ||||
|   ]; | ||||
|   # You can either use the name of the plugin or a package. | ||||
|   pluginType = with types; | ||||
|  | @ -116,11 +117,13 @@ with lib; let | |||
|           type = pluginType; | ||||
|           description = "Plugin Package."; | ||||
|         }; | ||||
| 
 | ||||
|         after = mkOption { | ||||
|           type = listOf str; | ||||
|           default = []; | ||||
|           description = "Setup this plugin after the following ones."; | ||||
|         }; | ||||
| 
 | ||||
|         setup = mkOption { | ||||
|           type = lines; | ||||
|           default = ""; | ||||
|  |  | |||
|  | @ -1,11 +1,12 @@ | |||
| _: { | ||||
| { | ||||
|   imports = [ | ||||
|     ./binds | ||||
|     ./ccc | ||||
|     ./gestures | ||||
|     ./motion | ||||
|     ./telescope | ||||
|     ./ccc | ||||
|     ./icon-picker | ||||
|     ./images | ||||
|     ./telescope | ||||
|     ./diffview | ||||
|     ./wakatime | ||||
|  |  | |||
							
								
								
									
										5
									
								
								modules/utility/images/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								modules/utility/images/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,5 @@ | |||
| { | ||||
|   imports = [ | ||||
|     ./image-nvim | ||||
|   ]; | ||||
| } | ||||
							
								
								
									
										37
									
								
								modules/utility/images/image-nvim/config.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								modules/utility/images/image-nvim/config.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,37 @@ | |||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: let | ||||
|   inherit (lib.modules) mkIf; | ||||
|   inherit (lib.nvim.dag) entryAnywhere; | ||||
|   inherit (lib.nvim.lua) toLuaObject; | ||||
| 
 | ||||
|   cfg = config.vim.utility.images.image-nvim; | ||||
| in { | ||||
|   config = mkIf cfg.enable { | ||||
|     assertions = [ | ||||
|       { | ||||
|         assertion = pkgs.stdenv.isDarwin && cfg.setupOpts.backend != "ueberzug"; | ||||
|         message = "image-nvim: ueberzug backend is broken on ${pkgs.stdenv.hostPlatform.system}. if you are using kitty, please set `vim.utility.images.image-nvim.setupOpts.backend` option to `kitty` in your configuration, otherwise disable this module."; | ||||
|       } | ||||
|     ]; | ||||
| 
 | ||||
|     vim = { | ||||
|       startPlugins = [ | ||||
|         "image-nvim" | ||||
|       ]; | ||||
| 
 | ||||
|       luaPackages = [ | ||||
|         "magick" | ||||
|       ]; | ||||
| 
 | ||||
|       luaConfigRC.image-nvim = entryAnywhere '' | ||||
|         require("image").setup( | ||||
|           ${toLuaObject cfg.setupOpts} | ||||
|         ) | ||||
|       ''; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										6
									
								
								modules/utility/images/image-nvim/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								modules/utility/images/image-nvim/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| { | ||||
|   imports = [ | ||||
|     ./config.nix | ||||
|     ./image-nvim.nix | ||||
|   ]; | ||||
| } | ||||
							
								
								
									
										118
									
								
								modules/utility/images/image-nvim/image-nvim.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								modules/utility/images/image-nvim/image-nvim.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,118 @@ | |||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   ... | ||||
| }: let | ||||
|   inherit (lib.options) mkEnableOption mkOption; | ||||
| 
 | ||||
|   inherit (lib.types) enum listOf str nullOr int; | ||||
|   inherit (lib.nvim.types) mkPluginSetupOption; | ||||
| in { | ||||
|   options.vim.utility.images.image-nvim = { | ||||
|     enable = mkEnableOption "image support in Neovim [image.nvim]"; | ||||
| 
 | ||||
|     setupOpts = mkPluginSetupOption "image.nvim" { | ||||
|       backend = mkOption { | ||||
|         type = enum ["kitty" "ueberzug"]; | ||||
|         default = "ueberzug"; | ||||
|         description = '' | ||||
|           The backend to use for rendering images. | ||||
| 
 | ||||
|           - kitty - best in class, works great and is very snappy | ||||
|           - ueberzug - backed by ueberzugpp, supports any terminal, | ||||
|             but has lower performance | ||||
|         ''; | ||||
|       }; | ||||
| 
 | ||||
|       integrations = { | ||||
|         markdown = { | ||||
|           enable = mkEnableOption " image.nvim in markdown files" // {default = true;}; | ||||
|           clearInInsertMode = mkEnableOption "clearing of images when entering insert mode"; | ||||
|           downloadRemoteImages = mkEnableOption "downloading remote images"; | ||||
|           onlyRenderAtCursor = mkEnableOption "only rendering images at cursor"; | ||||
|           filetypes = mkOption { | ||||
|             type = listOf str; | ||||
|             default = ["markdown" "vimwiki"]; | ||||
|             description = '' | ||||
|               Filetypes to enable image.nvim in. Markdown extensions | ||||
|               (i.e. quarto) can go here | ||||
|             ''; | ||||
|           }; | ||||
|         }; | ||||
| 
 | ||||
|         neorg = { | ||||
|           enable = mkEnableOption "image.nvim in Neorg files" // {default = true;}; | ||||
|           clearInInsertMode = mkEnableOption "clearing of images when entering insert mode"; | ||||
|           downloadRemoteImages = mkEnableOption "downloading remote images"; | ||||
|           onlyRenderAtCursor = mkEnableOption "only rendering images at cursor"; | ||||
|           filetypes = mkOption { | ||||
|             type = listOf str; | ||||
|             default = ["neorg"]; | ||||
|             description = '' | ||||
|               Filetypes to enable image.nvim in. | ||||
|             ''; | ||||
|           }; | ||||
|         }; | ||||
| 
 | ||||
|         maxWidth = mkOption { | ||||
|           type = nullOr int; | ||||
|           default = null; | ||||
|           description = '' | ||||
|             The maximum width of images to render. Images larger than | ||||
|             this will be scaled down to fit within this width. | ||||
|           ''; | ||||
|         }; | ||||
|       }; | ||||
| 
 | ||||
|       maxHeight = mkOption { | ||||
|         type = nullOr int; | ||||
|         default = null; | ||||
|         description = '' | ||||
|           The maximum height of images to render. Images larger than | ||||
|           this will be scaled down to fit within this height. | ||||
|         ''; | ||||
|       }; | ||||
| 
 | ||||
|       maxWidthWindowPercentage = mkOption { | ||||
|         type = nullOr int; | ||||
|         default = null; | ||||
|         description = '' | ||||
|           The maximum width of images to render as a percentage of the | ||||
|           window width. Images larger than this will be scaled down to | ||||
|           fit within this width. | ||||
|         ''; | ||||
|       }; | ||||
| 
 | ||||
|       maxHeightWindowPercentage = mkOption { | ||||
|         type = nullOr int; | ||||
|         default = 50; | ||||
|         description = '' | ||||
|           The maximum height of images to render as a percentage of the | ||||
|           window height. Images larger than this will be scaled down to | ||||
|           fit within this height. | ||||
|         ''; | ||||
|       }; | ||||
| 
 | ||||
|       windowOverlapClear = { | ||||
|         enable = mkEnableOption "clearing of images when they overlap with the window"; | ||||
|         ftIgnore = mkOption { | ||||
|           type = listOf str; | ||||
|           default = ["cmp_menu" "cmp_docs" ""]; | ||||
|           description = '' | ||||
|             Filetypes to ignore window overlap clearing in. | ||||
|           ''; | ||||
|         }; | ||||
|       }; | ||||
| 
 | ||||
|       editorOnlyRenderWhenFocused = mkEnableOption "only rendering images when the editor is focused"; | ||||
|       hijackFilePatterns = mkOption { | ||||
|         type = listOf str; | ||||
|         default = ["*.png" "*.jpg" "*.jpeg" "*.gif" "*.webp"]; | ||||
|         description = '' | ||||
|           File patterns to hijack for image.nvim. This is useful for | ||||
|           filetypes that don't have a dedicated integration. | ||||
|         ''; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Frothy
				Frothy