commit 0d2f7516e5f61fb338e0555385259a30452cbe81 Author: Ivan Golikov Date: Fri Sep 11 22:33:46 2026 +0200 feature: Finally putting it under source control diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..f11c95a --- /dev/null +++ b/flake.lock @@ -0,0 +1,87 @@ +{ + "nodes": { + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1784725727, + "narHash": "sha256-J5+C9wsO0lhDyUalQzfplDbRjyHDYeEH5+9sdyXtwa8=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "041a999e8c1c5b731913855909e68d30ca69b8e0", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "nix4nvchad": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "nvchad-starter": "nvchad-starter" + }, + "locked": { + "lastModified": 1788867904, + "narHash": "sha256-aKp6ldvm8HWJ+X0AZjiY4dHbcpI9Ir8RvCOyLoXoMrs=", + "owner": "nix-community", + "repo": "nix4nvchad", + "rev": "7c24477da13e2b14a4732c768c390dcde4ad21d5", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix4nvchad", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1785542685, + "narHash": "sha256-sjfvXMbG5pCFgpvw2OZAFcZiTvrppCWvnB6cuGrSY08=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "f8e81fc7eb063db454f563cdd596fb96a5ad1497", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nvchad-starter": { + "flake": false, + "locked": { + "lastModified": 1753939018, + "narHash": "sha256-xdLr6tlU9uA+wu0pqha2br0fdVm+1MjgjbB5awz9ICU=", + "owner": "NvChad", + "repo": "starter", + "rev": "e3572e1f5e1c297212c3deeb17b7863139ce663e", + "type": "github" + }, + "original": { + "owner": "NvChad", + "ref": "main", + "repo": "starter", + "type": "github" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "nix4nvchad": "nix4nvchad", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..a2f6d85 --- /dev/null +++ b/flake.nix @@ -0,0 +1,36 @@ +{ + description = "Home Manager configuration of ivan"; + + inputs = { +# Specify the source of Home Manager and Nixpkgs. + nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nix4nvchad = { + url = "github:nix-community/nix4nvchad"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = + { self, nixpkgs, home-manager, nix4nvchad, ... }@inputs: + let + system = "x86_64-linux"; + pkgs = import nixpkgs { system = "x86_64-linux"; config = { allowUnfree = true; }; }; + in + { + homeConfigurations."ivan" = home-manager.lib.homeManagerConfiguration { + inherit pkgs; + +# Specify your home configuration modules here, for example, +# the path to your home.nix. + modules = [ ./home.nix ]; + + extraSpecialArgs = { + inherit inputs; + }; + }; + }; +} diff --git a/home.nix b/home.nix new file mode 100644 index 0000000..f3cee3b --- /dev/null +++ b/home.nix @@ -0,0 +1,117 @@ +{ config, pkgs, lib, inputs, ... }: + +{ + # Home Manager needs a bit of information about you and the paths it should + # manage. + home.username = "ivan"; + home.homeDirectory = "/home/ivan"; + + # This value determines the Home Manager release that your configuration is + # compatible with. This helps avoid breakage when a new Home Manager release + # introduces backwards incompatible changes. + # + # You should not change this value, even if you update Home Manager. If you do + # want to update the value, then make sure to first check the Home Manager + # release notes. + home.stateVersion = "26.05"; # Please read the comment before changing. + + # The home.packages option allows you to install Nix packages into your + # environment. + home.packages = [ + pkgs.obsidian + pkgs.kitty + pkgs.git + pkgs.darktable + pkgs.gparted + pkgs.telegram-desktop + pkgs.keepassxc + pkgs.libreoffice + pkgs.ungoogled-chromium + pkgs.difftastic + pkgs.uv + pkgs.lazygit + pkgs.zoxide + pkgs.qmk + pkgs.dos2unix + pkgs.gnumake + pkgs.ripgrep + pkgs.github-copilot-cli + pkgs.nerd-fonts.iosevka-term + pkgs.fzf + # # Adds the 'hello' command to your environment. It prints a friendly + # # "Hello, world!" when run. + # pkgs.hello + + # # It is sometimes useful to fine-tune packages, for example, by applying + # # overrides. You can do that directly here, just don't forget the + # # parentheses. Maybe you want to install Nerd Fonts with a limited number of + # # fonts? + # (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; }) + + # # You can also create simple shell scripts directly inside your + # # configuration. For example, this adds a command 'my-hello' to your + # # environment: + # (pkgs.writeShellScriptBin "my-hello" '' + # echo "Hello, ${config.home.username}!" + # '') + ]; + + # Home Manager is pretty good at managing dotfiles. The primary way to manage + # plain files is through 'home.file'. + home.file = { + # # Building this configuration will create a copy of 'dotfiles/screenrc' in + # # the Nix store. Activating the configuration will then make '~/.screenrc' a + # # symlink to the Nix store copy. + # ".screenrc".source = dotfiles/screenrc; + + # # You can also set the file content immediately. + # ".gradle/gradle.properties".text = '' + # org.gradle.console=verbose + # org.gradle.daemon.idletimeout=3600000 + # ''; + }; + + # Home Manager can also manage your environment variables through + # 'home.sessionVariables'. These will be explicitly sourced when using a + # shell provided by Home Manager. If you don't want to manage your shell + # through Home Manager then you have to manually source 'hm-session-vars.sh' + # located at either + # + # ~/.nix-profile/etc/profile.d/hm-session-vars.sh + # + # or + # + # ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh + # + # or + # + # /etc/profiles/per-user/ivan/etc/profile.d/hm-session-vars.sh + # + home.sessionVariables = { + EDITOR = "nvim"; + }; + + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; + programs.fish = { + enable = true; + shellInitLast = '' + zoxide init fish | source + ''; + }; + + fonts.fontconfig.enable = true; + + imports = [ inputs.nix4nvchad.homeManagerModules.default ]; + programs.nvchad = { + enable = true; + extraPackages = with pkgs; [ + ripgrep + lua-language-server + nil + ]; + extraPlugins = builtins.readFile ./nvim/plugins.lua; + extraConfig = builtins.readFile ./nvim/config.lua; + # You can configure extra options here (see the Configuration section) + }; +} diff --git a/nvim/config.lua b/nvim/config.lua new file mode 100644 index 0000000..93efdac --- /dev/null +++ b/nvim/config.lua @@ -0,0 +1,38 @@ +vim.opt.exrc = true + +vim.opt.relativenumber = true + +require'nvim-treesitter.configs'.setup { + -- A directory to install the parsers into. + -- If this is excluded or nil parsers are installed + -- to either the package dir, or the "site" dir. + -- If a custom path is used (not nil) it must be added to the runtimepath. + parser_install_dir = vim.fn.stdpath "data" .. "site", + + -- A list of parser names, or "all" + ensure_installed = { "c", "lua", "vim", "vimdoc", "query", "markdown", "markdown_inline", "python", "nix" }, + + -- Install parsers synchronously (only applied to `ensure_installed`) + sync_install = false, + + -- Automatically install missing parsers when entering buffer + auto_install = true, + + -- List of parsers to ignore installing (for "all") + -- ignore_install = { "javascript" }, + + highlight = { + -- `false` will disable the whole extension + enable = true, + + -- list of language that will be disabled + -- disable = { "c", "rust" }, + + -- Setting this to true will run `:h syntax` and tree-sitter at the same time. + -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation). + -- Using this option may slow down your editor, and you may see some duplicate highlights. + -- Instead of true it can also be a list of languages + additional_vim_regex_highlighting = false, + }, +} +vim.opt.runtimepath:append(vim.fn.stdpath "data" .. "site") diff --git a/nvim/plugins.lua b/nvim/plugins.lua new file mode 100644 index 0000000..6b3ed69 --- /dev/null +++ b/nvim/plugins.lua @@ -0,0 +1,56 @@ +return { + { + "stevearc/conform.nvim", + -- event = 'BufWritePre', -- uncomment for format on save + opts = require "configs.conform", + }, + + -- These are some examples, uncomment them if you want to see them work! + { + "neovim/nvim-lspconfig", + config = function() + require "configs.lspconfig" + end, + }, + + { + 'cameron-wags/rainbow_csv.nvim', + config = true, + ft = { + 'csv', + 'tsv', + 'csv_semicolon', + 'csv_whitespace', + 'csv_pipe', + 'rfc_csv', + 'rfc_semicolon', + }, + cmd = { + 'RainbowDelim', + 'RainbowDelimSimple', + 'RainbowDelimQuoted', + 'RainbowMultiDelim', + }, + }, + + { + "kylechui/nvim-surround", + event = "VeryLazy", + config = function() + require("nvim-surround").setup() + end + }, + + { + 'echasnovski/mini.trailspace', + version = '*' + }, + + { + "folke/persistence.nvim", + event = "BufReadPre", -- this will only start session saving when an actual file was opened + opts = { + -- add any custom options here + } + }, +}