Lazar Nikolov
Lazar Nikolov
  • 41
  • 183 087
Implement Clean Architecture in Next.js
This is the definitive guide on how to implement Clean Architecture in Next.js. We'll start with a short Clean Architecture 101, check out the demo app I created for you, and then get into the layers. If you have any questions, don't hesitate to reach out to me in the comments, or in my Discord server: creatures.sh. I hope you like this video!
🔗 Links:
👉 GitHub Repo: github.com/nikolovlazar/nextjs-clean-architecture
👉 Demo: next-clean-arch.vercel.app/
👉 Clean Architecture article: blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html
👉 My interpretation diagram: app.eraser.io/workspace/fAyjQlkBiC7AoAoYoPnw?origin=share
👉 Configure Inversify in Next.js video: ua-cam.com/video/2NVYG5VDmwQ/v-deo.html
👉 Test case naming guide: www.epicweb.dev/talks/how-to-write-better-test-names
--
🤝 Become a friend of the channel! Start your membership today and get extra benefits: youtube.com/@nikolovlazar/join
💬 A bunch of us are hanging out at discord.creatures.sh/. Join us!
🐦 Find me on the bird app: NikolovLazar
🎥 What I use for coding and making videos: nikolovlazar.com/uses
--
Chapters:
00:00 - Intro
00:26 - Clean Architecture 101
07:22 - App Demo
08:04 - Project Structure
11:17 - Frameworks & Drivers Layer (server actions)
13:56 - Interface Adapters Layer (controller)
24:24 - Application Layer (use case)
26:58 - Infrastructure Layer (repository & service)
31:39 - Dependency Injection
35:40 - Unit Tests
42:21 - Sentry and Codecov
43:14 - Tracing
48:21 - Performance Modules
50:03 - Errors
51:15 - Codecov
52:13 - Outro
Переглядів: 20 430

Відео

My Neovim Dev Workflow
Переглядів 27 тис.Місяць тому
See how my neovim development workflow looks like as a full stack engineer. I'm going through some of my tmux / neovim configurations and then showing how I navigate between files, between code, references, implementations, how I do testing, debugging, and even how I make custom IDE layouts when I need to look at multiple files at the same time. 🔗 Links: 👉 My Dotfiles repo: github.com/nikolovla...
How to mock an npm package with Vitest/Jest
Переглядів 8202 місяці тому
Mocking an npm package / module in Vitest can be a tricky thing. The mock function works in such a way that it can easily confuse you and get you stuck, especially when you want part of your test cases to use the mocked version of it, but the other part the original. In this video I'll show you how you can achieve that. 🤝 Become a friend of the channel! Start your membership today and get extra...
This will make everyone understand Clean Architecture
Переглядів 3 тис.2 місяці тому
Explaining Clean Architecture through a different point of view, which helped me understand it better than the original dartboard diagram. This is a cutout of my "Clean Architecture in Next.js" live streaming series: bife.sh/WAUw11Gu 🔗 Links: 👉 Original Clean Architecture: bife.sh/1IilWI1k 👉 My interpretation: bife.sh/M1uT4Qu1 🤝 Become a friend of the channel! Start your membership today and ge...
Easy dependency injection in Next.js
Переглядів 2,8 тис.2 місяці тому
A guide on how to configure and use inversify in Next.js. This is a cutout of my "Clean Architecture in Next.js" live streaming series: bife.sh/WAUw11Gu 🤝 Become a friend of the channel! Start your membership today and get extra benefits: youtube.com/@nikolovlazar/join 💬 A bunch of us are hanging out at discord.creatures.sh/. Join us! 🐦 Find me on the bird app: NikolovLazar 🎥 What I...
CLEANEST Way to write Next.js Server Actions ✨
Переглядів 5 тис.2 місяці тому
CLEANEST Way to write Next.js Server Actions ✨
Fixing the weird gray line in Neovim with Custom Colorcolumn
Переглядів 1,5 тис.2 місяці тому
Fixing the weird gray line in Neovim with Custom Colorcolumn
Showing a Toast after Server Action in Next.js!
Переглядів 2,2 тис.3 місяці тому
Showing a Toast after Server Action in Next.js!
🐱 Kitty Terminal - change profiles and transparency
Переглядів 6 тис.4 місяці тому
🐱 Kitty Terminal - change profiles and transparency
Setup VSCode Like Neovim
Переглядів 8 тис.4 місяці тому
Setup VSCode Like Neovim
Validate ENV Variables in TypeScript with Zod
Переглядів 1,1 тис.5 місяців тому
Validate ENV Variables in TypeScript with Zod
A must-have VSCode feature for Next.js developers
Переглядів 4,3 тис.5 місяців тому
A must-have VSCode feature for Next.js developers
Auto Sort TypeScript Imports with Prettier ✨
Переглядів 2,2 тис.5 місяців тому
Auto Sort TypeScript Imports with Prettier ✨
Write content in Astro like it's 2054
Переглядів 1,9 тис.8 місяців тому
Write content in Astro like it's 2054
Simple way to integrate Astro with Obsidian
Переглядів 5 тис.8 місяців тому
Simple way to integrate Astro with Obsidian
How I configured nvim-dap to Debug Node.js Apps
Переглядів 14 тис.9 місяців тому
How I configured nvim-dap to Debug Node.js Apps
Neovim Plugin: Best way to update npm packages
Переглядів 1,7 тис.9 місяців тому
Neovim Plugin: Best way to update npm packages
CSS Container Queries in 5 minutes
Переглядів 2,2 тис.Рік тому
CSS Container Queries in 5 minutes
CSS Nesting in 5 minutes
Переглядів 1,9 тис.Рік тому
CSS Nesting in 5 minutes

КОМЕНТАРІ

  • @smeadkraftz
    @smeadkraftz 59 хвилин тому

    Bro, you saved my life! I'm struggled importing the reflect-metadata on NextJS all the time to implement dependency injection!

  • @Deus-lo-Vuilt
    @Deus-lo-Vuilt 8 годин тому

    Clean arquitecture un Next ❤

  • @houstonbova3136
    @houstonbova3136 17 годин тому

    You can get most of this (and a bit snappier feeling) with the VSCode Neovim plugin and the install LazyVim with the VSCode extra. Then all you have to worry about (mostly) is the workspace nav stuff.

    • @nikolovlazar
      @nikolovlazar Годину тому

      Hmm, I couldn't make that work for some reason. I do use Neovim with LazyVim and the VSCode extra, but the Neovim plugin didn't work for me. Might give it another try!

    • @houstonbova3136
      @houstonbova3136 Годину тому

      Interesting! It took a minor amount of tweaking (Two settings and doing an apt install instead of snap) for windows + WSL. It worked immediately on my pure Linux install the last time tried. I would think it would be the same for macOS. Either way there is a few binds you have in here that aren’t covered by that and I will definitely be stealing them!!

  • @KirilGerovski
    @KirilGerovski 20 годин тому

    Изключително добре направено! Браво!

  • @labdo_
    @labdo_ 20 годин тому

    A video explaination of each term and it's responsibility, would be really great to understand the architecture video.

    • @nikolovlazar
      @nikolovlazar 19 годин тому

      Which terms are you referring to? I’d love to help you with that.

    • @labdo_
      @labdo_ 17 годин тому

      @@nikolovlazar like controllers, repositories, entities, infrastructure, and other names used in the repo and video, I don't quite get the responsibility of all of them, and that makes it hard to understand the architecture.

    • @nikolovlazar
      @nikolovlazar 13 годин тому

      @@labdo_ooh right! Check out this video. It covers all the terms and their responsibilities - Implement Clean Architecture in Next.js ua-cam.com/video/jJVAla0dWJo/v-deo.html

  • @KirilGerovski
    @KirilGerovski День тому

    So true!

  • @rastaray6401
    @rastaray6401 День тому

    Do you consider Zod in your entities or application layer to be a library dependency?

    • @nikolovlazar
      @nikolovlazar День тому

      By the book it is a library dependency, but we can make a conscious exception about it due to the fact that it doesn’t depend on a specific runtime or depends on a framework. In this case the chances of refactoring and replacing Zod with something else are much smaller than some of the bigger dependencies. If you want to be super safe, you could refactor the schemas into classes and wrap the validation method with a class method.

  • @omerfarukkara4138
    @omerfarukkara4138 День тому

    The only problem I have with this configuration is the following: 1. Open the explorer 2. Focus on the editor 3. Try to use / or ? to search something. Space now acts like a leader key. I could not figure out what mode vim is in when searching for a word. So I need to close the explorer and search something like that. Not very good. :( Is there a solution for this?

    • @omerfarukkara4138
      @omerfarukkara4138 День тому

      vim.mode != SearchInProgressMode works if anyone needs. :)

    • @nikolovlazar
      @nikolovlazar День тому

      Nice! Thanks for sharing this!

  • @BibhuBal
    @BibhuBal 2 дні тому

    Your are just Professor Dumbledor form Harry Porter . Deep , Clean and Clear

  • @oscamart
    @oscamart 2 дні тому

    Very nicely said !!

  • @wingy3181
    @wingy3181 3 дні тому

    just curious, how does the inversify DI container get initialised in the nextjs app? I noticed the initializeContainer method within the `container.ts` file that exports getInjection and ApplicationContainer..but i didn't find any usage of ApplicationContainer...so i'm assuming it's when getInjection gets called which means it get's loaded by the first import usage of getInjection? and then any subsequent getInjection may also repeat tthe ApplicationContainer.load methods of inversify? (I'm looking at the source code from your clean code architecture) btw great videos!!

    • @nikolovlazar
      @nikolovlazar 3 дні тому

      Thanks! Yeah the initialize method gets executed when the getInjection gets called. For serverless node environment you’d want to initialize the container every time because it’s serverless. If you’re on a long-running node server you can conditionally initialize based on the container value.

    • @wingy3181
      @wingy3181 2 дні тому

      @@nikolovlazar good point regarding difference between hosting options.. keep up the great work

  • @NaniwaRocky
    @NaniwaRocky 3 дні тому

    Great content, thank you! I have a question regarding the sentry config included in your project. I have never used sentry, suppose i would like to do a code along with your tutorial, will a free sentry account be sufficient to apply the sentry features or is a paid subscription with them required ? Thanks!

    • @nikolovlazar
      @nikolovlazar 3 дні тому

      Glad you like the content! Yep, the free Sentry account supports all SDK features, except the Insights modules (business+) and Dashboards (team+), but you'll be able to get alerts, capture exceptions, measure performance and use traces for debugging without issues on the free plan.

  • @tvit3381
    @tvit3381 3 дні тому

    Bravo Laze !👏

  • @kareemmahlees3597
    @kareemmahlees3597 3 дні тому

    For the future, zod has this "z.nativeEnum" thing.

  • @khanra17
    @khanra17 3 дні тому

    Nobody should suffer like this in 2024 man. Get an actual IDE like Jetbrains and use vim motions. Stick to these toy text editors for you 500 LOC projects. But if you do actual work then gift yourself a life. __somebody had to say the truth! 🙏

  • @martinnorberg7940
    @martinnorberg7940 4 дні тому

    never

  • @kiransilwal
    @kiransilwal 6 днів тому

    I am having hard time debugging without using mouse in this set up. Would appreciate if there is any guidance related to that.

    • @nikolovlazar
      @nikolovlazar 6 днів тому

      Honestly me too, that's why I'm staying with Neovim 😁 VSCode does have keybindings for debugging actions like "step over" and "add breakpoint". You can extend this configuration with those keybindings if you want to cover debugging as well.

    • @kiransilwal
      @kiransilwal 6 днів тому

      @@nikolovlazar Thanks for the response. I would love to switch to Neovim. But I do flutter too and there is a whole new areas with emulators and AVDs. I haven't tried it yet so having doubt about that too.

    • @nikolovlazar
      @nikolovlazar 2 дні тому

      yeah that could be tricky. everything is a command and can be triggered via the command line, but in some cases IDEs put that command behind a button (eg. Play button in Xcode).

  • @gajjarkevin765
    @gajjarkevin765 7 днів тому

    Sup

  • @NaniwaRocky
    @NaniwaRocky 7 днів тому

    I really like the fact that your shorts are done outside, it's nice to see a developer out in the sun rather than in an rgb room 🎉 keep it up!

    • @nikolovlazar
      @nikolovlazar 7 днів тому

      Thanks! It started with me realizing I have more inspiration when I'm outside taking walks with my wife than when I'm in the rgb room 😁 so I thought I'll seize the opportunity and record some videos outside.

  • @user-lt4tr2rm8q
    @user-lt4tr2rm8q 7 днів тому

    Hey, this is super interesting... however what I'm struggling with, is that in this approach frontend and backend is completely separated, which I get is the idea of this paradigm, however in practice the lines are not always clear. For example lets say I build a tax return form: I might want all the business logic structured as presented to nicely handle a submitted form on the server side but still show the user an estimated value while they are filling the form which doesn't need (and I think shouldn't) be calculated in the backend for every changed value. Same with validation: If I'm already using zod and frontend libraries, I don't have to deal with validation and displaying errors... this is taken care of in the frontend. I still need to perform the same checks on the backend but ideally a non-malicious user only submits validated data once everything is in order. A model might be fine to import from the frontend and use as my validation scheme but the calculator example its not quite clear to me how I would deal with such a scenario and where I would put the code/helper methods which perform the calculations in the end in order to maintain separation and allow reusability without risking to import code that is only meant for the server side (which might e.g. leak secrets) on the client side. Any help/ideas would be greatly apreciated!

    • @nikolovlazar
      @nikolovlazar 7 днів тому

      Is the calculator logic plain javascript that can be used both on the frontend and backend? If it's something that you don't expect to change a lot, it's fine if there are two implementations of it (comments should note that as well). If not, see if you can isolate it in a shared function and how that would look like. You need to maintain testability, so try to follow the operation flow (contoller > use case(s) / service(s) > repository(ies)). You can have a use case that invokes the shared calculate function and use its output. That should be perfectly fine.

  • @alanalvarenga9765
    @alanalvarenga9765 8 днів тому

    This is amazing! Thank you for the bottom of my heart!

  • @TienDungSHBK
    @TienDungSHBK 8 днів тому

    Hi bro, I have a great appreciation for this series of yours. Could you please include a video in this series that covers Redis cache?

    • @nikolovlazar
      @nikolovlazar 8 днів тому

      Thank you! I do want to cover caching as well, but I'm not sure when that would be. Definitely stick around!

  • @saveriomazza7781
    @saveriomazza7781 8 днів тому

    Top!

  • @jiachen1078
    @jiachen1078 9 днів тому

    thank you!

  • @PeterStJ
    @PeterStJ 9 днів тому

    Okay, nice explanation, looks great, only one thing bothers me, and it is a big big thing for me.. an __all__ layers you have the sentry calls.. on ALL layers. How does this fit into the clean architecture, clean maintainable code etc. I don't see it, sorry. Otherwise great explanation.

    • @nikolovlazar
      @nikolovlazar 9 днів тому

      Thanks! I had to take a shortcut there. It's not CA-approved 😁 We should put that away in its own service and call the service instead.

  • @nwsome
    @nwsome 9 днів тому

    I'd go further. It's likely counterproductive if you don't plan to unit test a lot

    • @nikolovlazar
      @nikolovlazar 9 днів тому

      It's definitely an overkill if testing or modularity is not important in your project. But it's not dependent only on testing. If the project's complexity extends to more than just 1 database or has a number of different data sources, or even different teams working on one project, then CA is a good discipline to keep things in order.

    • @nwsome
      @nwsome 9 днів тому

      @@nikolovlazar I mostly agree, but I'd argue it's architecture in general, not necessarily CA

    • @nikolovlazar
      @nikolovlazar 9 днів тому

      @@nwsome definitely! I'm not singling out CA as a superior architecture or anything like that.

  • @kiransilwal
    @kiransilwal 9 днів тому

    1:35:48 Effect looks good. Is it just like Promise<Either<Failure,Success>> from fp-ts? I found that way of error handling easy and light weight.

    • @nikolovlazar
      @nikolovlazar 9 днів тому

      It does look like it has a bit of learning curve, but I do think it's a really cool library!

  • @kiransilwal
    @kiransilwal 9 днів тому

    My only question is on generating nanoid. In the repository layer we are tightly coupling our persistence/data layers with a package. Please correct me if I am wrong, wouldn’t it be better if we pass that package through the constructor as a service so that it is not tightly coupled to the library?

    • @nikolovlazar
      @nikolovlazar 9 днів тому

      It’s perfectly fine that the repository implements specific libraries. Nanoid could additionally be isolated in its own service, but I deemed it might be an overkill for this scenario.

  • @loic299
    @loic299 10 днів тому

    Hey Lazar, thanks a lot! Would you recommend using clean architecture infrastructure over the Server actions/ZSA approach? Or would using both be overkill? ZSA procedures already doing the controller job right? (Not to mention the fact that the framework is not decoupled from the interface layer) I need to expose my HTTP API, so I dlike to share the controllers functions/ZSA actions with both the HTTP API route handler and client components. Is it considered good practice to call ZSA actions from the API route handler? I also looked into IRPC, but I'm a bit lost. Is IRPC obsolete with server actions + ZSA/next-safe-action? Thank you so much for your help!

    • @nikolovlazar
      @nikolovlazar 9 днів тому

      Glad you liked it! Treat the controllers as part of your core app’s logic, and everything framework-related as a “consumer”. You want all crucial logic like input validation and auth checks to be in your core app logic, so all consumers will function the same. Instead of calling a server function inside of an api handler, just call the controller in both places and handle the errors accordingly. That would be the smartest way to go about this.

  • @diegosk8bt
    @diegosk8bt 10 днів тому

    Awesome bro, we absolutely need more of this excellent content. subscribed for more of this! thank you!

  • @wrivera626
    @wrivera626 10 днів тому

    Thank you Lazar for your big efforts in this topic, your are using Lucia in this example, I'm struggling to do something similar with Next Auth, is there a good article/video about this approach?

    • @nikolovlazar
      @nikolovlazar 10 днів тому

      Thank you! Not sure if I’ve seen anything like that. Hop into creatures.sh and we can figure it out!

  • @BladesGamings
    @BladesGamings 11 днів тому

    this is what quality content look like. thanks!

    • @nikolovlazar
      @nikolovlazar 11 днів тому

      Thank you! And thank you for becoming a member! 💖

  • @matyascsoti4400
    @matyascsoti4400 11 днів тому

    QQ about input validation: Architecture wise ( looking good on a graph ), validation looks better in the controllers so both incoming ( from server ) and outgoing ( to server ) data is validated in the same place. But implementation wise validating your input data makes much more sense in the context of the form. Is the validation and form linked only by the form libraries, so its just getting used to it, or the proximity of the input to the form warrants its. Like you can validate the data without ever leaving the context of the form and calling a controller, vs calling the controller and returning the validation error in your onSubmit function and setting the errors explicitly from there ( as most form libs handle this explicitly ) ?

    • @nikolovlazar
      @nikolovlazar 11 днів тому

      Good question! In my other project, I reuse the same Zod schema on the client-side to validate the form as well. Validating input is a *must* on the server-side, because it's easy to jump around the frontend and send data directly to the server without passing the validation mechanism. Validation on the frontend is good UX, validation on the backend is good security practice.

    • @matyascsoti4400
      @matyascsoti4400 11 днів тому

      @@nikolovlazar Thank you for your time to response, I think I wasn't explicit enough with my question, the question was not 'to validate or not' but 'where to validate'. You validate your outgoing data inside your repository and sending back the validation error to the UI to handle it, most form libraries handle the validation in the context of the form and if the data is not valid it will never reach the repository ( repository call will never be reached in the onSubmit since the validation does not pass ). So my question is which one should be preferred as doing the latter feels good because of the proximity of the input to the form, the former makes sense in an 'architectural way' as the controller is the "gateguard" of the data 'correctness' of your application.

    • @nikolovlazar
      @nikolovlazar 11 днів тому

      No I think I understood you. You should validate on both sides. As I mentioned, form validation is good UX, but you have to validate in the controller as well for security reasons. Validating in both places is a good practice. With Zod, you can even share the same validation schema. Here's how I do that in my other project: - Form: github.com/nikolovlazar/bife/blob/main/app/app/collections/create-collection.tsx#L38 - Controller: github.com/nikolovlazar/bife/blob/main/src/interface-adapters/controllers/create-collection.controller.ts#L6

    • @matyascsoti4400
      @matyascsoti4400 10 днів тому

      @@nikolovlazar lookin at the code indeed you are double validating your outgoing data, thanks for sharing, but now then I have to ask isn't double validating redundant? ( or it is in this case but there might be a situation when something can actually happen between your action and the controller, the current example is very straightforward you pass the validated data directly into your controller, where you validate it again, i am interpreting correctly )

    • @nikolovlazar
      @nikolovlazar 10 днів тому

      Double validation is not redundant. The backend and the frontend are two separate things that can live independently from each other, so each part handles validation for separate reasons. You could refactor it down the line and split it, or build a new client (ex. mobile app, AI client, whatever that uses the backend you already have) so you’ll have to refactor the server actions into api handlers. Even now, you can’t risk not validating the data on the backend, let alone in a scenario like that. Consider the backend and the frontend as two separate parts and validate data at both places. There won’t be any significant performance overheads as well.

  • @pinocodex
    @pinocodex 11 днів тому

    That is not a good answer: in javascript we use typescript and we can use OOP as well the same way we use it in Java.

    • @nikolovlazar
      @nikolovlazar 11 днів тому

      It’s in regard to my Clean Architecture video. It’s not that it’s not possible, but the general consensus is that people prefer functions because they’re easier to work with. I do use classes for my services and repositories (because they’re injected with DI), but controllers and use cases don’t need to be, so it’s easier to write them as functions. There are no tradeoffs as well. Everything works the same, and controllers and use cases are still testable. There’s no reason to write them as classes.

    • @pinocodex
      @pinocodex 11 днів тому

      @@nikolovlazar I have used boths in my life, but I think this is opinionated and there is any rule for it. You can easily use class or functions there is not difference. I consider that there are tradeoffs by using functions into indeviduals files, and that is that you increase the effor by adding and adding more files into your tree wich in medium and big projects this is really messy.

    • @nikolovlazar
      @nikolovlazar 11 днів тому

      That's true, and a really good point about keeping individual functions in files. Classes are much tidier in that regard. There is no rule, just a preference. I did notice more JavaScript devs prefer functions over classes so I that's why I went with a functions-first approach. It's a good start and it can work for you for a long time, but if it starts to become painful you can always refactor into classes. Definitely a good idea to have that in mind when you start a new project.

    • @pinocodex
      @pinocodex 11 днів тому

      @@nikolovlazar Yeap! Thanks for sharing your amazing knowladge niko!

    • @nikolovlazar
      @nikolovlazar 10 днів тому

      @@pinocodexof course! Thanks for asking in the first place!

  • @foxwell_1108
    @foxwell_1108 11 днів тому

    Thank you for the incredible amount of high quality information that you have packed into a hour long video! Very much appreciated 🙏 One question I would really like your opinion on and that is the choice for a DI library in TypeScript. You chose InversifyJS but there are others like TypeDI and tsyringe. All of them are not actively maintained for the past couple of years. Do you see any risks of implementing DI with these libraries, as is it part of the core of your codebase?

    • @nikolovlazar
      @nikolovlazar 11 днів тому

      Glad you liked it! And that's a good question! I think the only thing forcing the libraries to push updates (once they achieved what they want to achieve) is the language itself. As TypeScript / JavaScript evolves and introduces breaking changes, they most likely would need to push an update. That doesn't happen as often, so that's why you don't see any activity on these repositories for an extended period of time. On the other hand, just like any other library dependency, there is always a risk of deprecation and refactoring.

  • @aashishkathait4994
    @aashishkathait4994 11 днів тому

    i use vim bindings in vs code buy for file explorer part i have to use mouse mostly , this video helps me in exactly that. Thanks bro

  • @BlackCide1
    @BlackCide1 11 днів тому

    amazing, new subscriber

  • @muizzyranking
    @muizzyranking 11 днів тому

    No but why is your neovim so clean? 🥹 Please share your dots.

    • @nikolovlazar
      @nikolovlazar 11 днів тому

      I made some changes since then, but still check it out! 😁 Video on my latest setup: ua-cam.com/video/G7-qUMKSH_Y/v-deo.html Dotfiles: github.com/nikolovlazar/dotfiles

  • @sasquatch_devs
    @sasquatch_devs 11 днів тому

    Would love to see this applied for a React + Vite SPA application!

    • @nikolovlazar
      @nikolovlazar 11 днів тому

      That would be an interesting topic. CA on the client side!

  • @r2-p2
    @r2-p2 11 днів тому

    I hade to fix my repo using revlog three times after using lazyvim. Sure I did something wrong but i did what I thought was right being presented what lazyvim showed me. Threw it out of the window and happily rebasing, fixupping, and all the other stiff using plain git and a bit of tig for visualization. Never had any issues.

    • @nikolovlazar
      @nikolovlazar 11 днів тому

      Yep, lazygit has given me a few headaches as well, but so far it's good. I also didn't know about tig, thanks for sharing it! I've gotten so used to lazygit it's fully a muscle memory at this point.

  • @Sina-sd4zi
    @Sina-sd4zi 11 днів тому

    hi Nikolav. thanks for great content! i am kinda new to nvim i have a question and i dont know where to ask so here i am, how to accept lsp autocomplete suggestion like i want to auto import a variable from another file.

    • @nikolovlazar
      @nikolovlazar 11 днів тому

      Hey! Depending on what your keybinding is set to. I open my autocomplete with Ctrl-Space, and pick the selected option with Ctrl-Y (for Yes). Auto-imports should show up as options in the autocomplete menu.

    • @Sina-sd4zi
      @Sina-sd4zi 10 днів тому

      @@nikolovlazar thanks i am currently using your dotfile for nvim config and i love it

  • @zomars
    @zomars 11 днів тому

    Can we hire you?

  • @harshitsahu8704
    @harshitsahu8704 12 днів тому

    Thanks for creating it. It blows my mind. Need such content more on your channel.

  • @issiagaconde
    @issiagaconde 12 днів тому

    Thank you very much for the enormous effort you put into making this tutorial. I really like how you configure vscode. Can you share it with us? THANKS

    • @nikolovlazar
      @nikolovlazar 12 днів тому

      Thank you! This is not vscode, but neovim. Here’s my config video: ua-cam.com/video/G7-qUMKSH_Y/v-deo.htmlsi=kq2lTPyJaQqa9JTl

  • @rafalk0
    @rafalk0 12 днів тому

    Cool stuff! How did you make the transparency work in neovim? Also, are those kitty tabs on the bottom, or are you something else?