From f0875092504d400ade1423ece7ce0385a4f91686 Mon Sep 17 00:00:00 2001 From: Martin Berg Alstad Date: Fri, 27 Dec 2024 21:31:18 +0100 Subject: [PATCH] nixvim configuration using flakes --- configuration.nix | 33 +++-- flake.lock | 286 ++++++++++++++++++++++++++++++++++++- flake.nix | 47 +++--- hardware-configuration.nix | 47 ++++-- home.nix | 66 ++++++++- 5 files changed, 425 insertions(+), 54 deletions(-) diff --git a/configuration.nix b/configuration.nix index 4139630..f689cf2 100644 --- a/configuration.nix +++ b/configuration.nix @@ -2,13 +2,16 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ config, pkgs, ... }: +{ + pkgs, + ... +}: { - imports = - [ # Include the results of the hardware scan. - ./hardware-configuration.nix - ]; + imports = [ + # Include the results of the hardware scan. + ./hardware-configuration.nix + ]; # Bootloader. boot.loader.systemd-boot.enable = true; @@ -49,14 +52,17 @@ users.users.martin = { isNormalUser = true; description = "martin"; - extraGroups = [ "networkmanager" "wheel" ]; - packages = with pkgs; []; + extraGroups = [ + "networkmanager" + "wheel" + ]; + packages = with pkgs; [ ]; }; # Allow unfree packages nixpkgs.config.allowUnfree = true; - environment.variables = { + environment.variables = { EDITOR = "nvim"; }; @@ -100,7 +106,10 @@ ]; nix = { - settings.experimental-features = [ "nix-command" "flakes" ]; + settings.experimental-features = [ + "nix-command" + "flakes" + ]; }; # Some programs need SUID wrappers, can be configured further or are @@ -131,14 +140,14 @@ enable = true; xwayland.enable = true; }; - + kdeconnect = { enable = true; }; # Required for nvim with flakes # nix.nixPath = [ "nixpkgs=${inputs.nixpkgs}" ]; - + steam = { enable = true; remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play @@ -184,7 +193,7 @@ xserver = { enable = true; # Load Nvidia driver for Xorg and Wayland - videoDrivers = ["nvidia"]; + videoDrivers = [ "nvidia" ]; # Configure keymap in X11 xkb = { layout = "gb"; diff --git a/flake.lock b/flake.lock index a9bbd1d..2a198e7 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,131 @@ { "nodes": { + "devshell": { + "inputs": { + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1728330715, + "narHash": "sha256-xRJ2nPOXb//u1jaBnDP56M7v5ldavjbtR6lfGqSvcKg=", + "owner": "numtide", + "repo": "devshell", + "rev": "dd6b80932022cea34a019e2bb32f6fa9e494dfef", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "flake-compat": { + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "revCount": 57, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733312601, + "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "git-hooks": { + "inputs": { + "flake-compat": [ + "nixvim", + "flake-compat" + ], + "gitignore": "gitignore", + "nixpkgs": [ + "nixvim", + "nixpkgs" + ], + "nixpkgs-stable": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1734797603, + "narHash": "sha256-ulZN7ps8nBV31SE+dwkDvKIzvN6hroRY8sYOT0w+E28=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "f0f0dc4920a903c3e08f5bdb9246bb572fcae498", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "nixvim", + "git-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -20,6 +146,76 @@ "type": "github" } }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1734862405, + "narHash": "sha256-bXZJvUMJ2A6sIpYcCUAGjYCD5UDzmpmQCdmJSkPhleU=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "cb27edb5221d2f2920a03155f8becc502cf60e35", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "ixx": { + "inputs": { + "flake-utils": [ + "nixvim", + "nuschtosSearch", + "flake-utils" + ], + "nixpkgs": [ + "nixvim", + "nuschtosSearch", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1729958008, + "narHash": "sha256-EiOq8jF4Z/zQe0QYVc3+qSKxRK//CFHMB84aYrYGwEs=", + "owner": "NuschtOS", + "repo": "ixx", + "rev": "9fd01aad037f345350eab2cd45e1946cc66da4eb", + "type": "github" + }, + "original": { + "owner": "NuschtOS", + "ref": "v0.0.6", + "repo": "ixx", + "type": "github" + } + }, + "nix-darwin": { + "inputs": { + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733570843, + "narHash": "sha256-sQJAxY1TYWD1UyibN/FnN97paTFuwBw3Vp3DNCyKsMk=", + "owner": "lnl7", + "repo": "nix-darwin", + "rev": "a35b08d09efda83625bef267eb24347b446c80b8", + "type": "github" + }, + "original": { + "owner": "lnl7", + "repo": "nix-darwin", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1734649271, @@ -36,10 +232,98 @@ "type": "github" } }, + "nixvim": { + "inputs": { + "devshell": "devshell", + "flake-compat": "flake-compat", + "flake-parts": "flake-parts", + "git-hooks": "git-hooks", + "home-manager": "home-manager_2", + "nix-darwin": "nix-darwin", + "nixpkgs": [ + "nixpkgs" + ], + "nuschtosSearch": "nuschtosSearch", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1735254735, + "narHash": "sha256-byFeQzjeTLgWkk2xEhTYqYvUsID7H2QAkzuFKIL2Stc=", + "owner": "nix-community", + "repo": "nixvim", + "rev": "1671f8618fa347d8a0cd62506df386d58d7608f3", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixvim", + "type": "github" + } + }, + "nuschtosSearch": { + "inputs": { + "flake-utils": "flake-utils", + "ixx": "ixx", + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733773348, + "narHash": "sha256-Y47y+LesOCkJaLvj+dI/Oa6FAKj/T9sKVKDXLNsViPw=", + "owner": "NuschtOS", + "repo": "search", + "rev": "3051be7f403bff1d1d380e4612f0c70675b44fc9", + "type": "github" + }, + "original": { + "owner": "NuschtOS", + "repo": "search", + "type": "github" + } + }, "root": { "inputs": { "home-manager": "home-manager", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs", + "nixvim": "nixvim" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1734704479, + "narHash": "sha256-MMi74+WckoyEWBRcg/oaGRvXC9BVVxDZNRMpL+72wBI=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "65712f5af67234dad91a5a4baee986a8b62dbf8f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" } } }, diff --git a/flake.nix b/flake.nix index 0b7ca6a..9db060f 100644 --- a/flake.nix +++ b/flake.nix @@ -7,26 +7,33 @@ url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; - }; - - outputs = inputs@{ nixpkgs, home-manager, ... }: - let - system = "x86_64-linux"; - in - { - nixosConfigurations = { - nixos = nixpkgs.lib.nixosSystem { - system = system; - modules = [ - ./configuration.nix - home-manager.nixosModules.home-manager - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.users.martin = import ./home.nix; - } - ]; - }; + nixvim = { + url = "github:nix-community/nixvim"; + inputs.nixpkgs.follows = "nixpkgs"; }; }; + + outputs = + inputs@{ nixpkgs, home-manager, ... }: + let + system = "x86_64-linux"; + in + { + # Adds the nix fmt command to format nix files + formatter."${system}" = nixpkgs.legacyPackages."${system}".nixfmt-rfc-style; + nixosConfigurations.nixos = nixpkgs.lib.nixosSystem { + system = system; + modules = [ + ./configuration.nix + home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + # Passes inputs as an argument to home-manager + home-manager.extraSpecialArgs = { inherit inputs; }; + home-manager.users.martin = import ./home.nix; + } + ]; + }; + }; } diff --git a/hardware-configuration.nix b/hardware-configuration.nix index 1e7bf80..53f0e81 100644 --- a/hardware-configuration.nix +++ b/hardware-configuration.nix @@ -1,29 +1,46 @@ # Do not modify this file! It was generated by ‘nixos-generate-config’ # and may be overwritten by future invocations. Please make changes # to /etc/nixos/configuration.nix instead. -{ config, lib, pkgs, modulesPath, ... }: +{ + config, + lib, + pkgs, + modulesPath, + ... +}: { - imports = - [ (modulesPath + "/installer/scan/not-detected.nix") - ]; + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; - boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usb_storage" "usbhid" "sd_mod" "sr_mod" ]; + boot.initrd.availableKernelModules = [ + "xhci_pci" + "ahci" + "nvme" + "usb_storage" + "usbhid" + "sd_mod" + "sr_mod" + ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ "kvm-intel" ]; boot.extraModulePackages = [ ]; - fileSystems."/" = - { device = "/dev/disk/by-uuid/5e3f0f97-4bb4-4a53-ace2-9ed19ff9e8ea"; - fsType = "btrfs"; - options = [ "subvol=@" ]; - }; + fileSystems."/" = { + device = "/dev/disk/by-uuid/5e3f0f97-4bb4-4a53-ace2-9ed19ff9e8ea"; + fsType = "btrfs"; + options = [ "subvol=@" ]; + }; - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/D188-48A9"; - fsType = "vfat"; - options = [ "fmask=0077" "dmask=0077" ]; - }; + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/D188-48A9"; + fsType = "vfat"; + options = [ + "fmask=0077" + "dmask=0077" + ]; + }; swapDevices = [ ]; diff --git a/home.nix b/home.nix index ff5d412..fc51522 100644 --- a/home.nix +++ b/home.nix @@ -1,19 +1,22 @@ -{ config, pkgs, ... }: +{ pkgs, inputs, ... }: { + imports = [ + inputs.nixvim.homeManagerModules.nixvim + ]; + # Home Manager needs a bit of information about you and the # paths it should manage. home = { username = "martin"; homeDirectory = "/home/martin"; - + # You can update Home Manager without changing this value. See # the Home Manager release notes for a list of state version # changes in each release. stateVersion = "24.11"; }; - # Let Home Manager install and manage itself. programs = { git = { enable = true; @@ -21,14 +24,65 @@ userEmail = "git@martials.no"; }; + # Let Home Manager install and manage itself. home-manager.enable = true; kitty.enable = true; - neovim = { + nixvim = { enable = true; - vimAlias = true; - viAlias = true; + + clipboard.providers.wl-copy.enable = true; + + colorschemes.catppuccin = { + enable = true; + settings.flavour = "mocha"; + }; + + opts = { + number = true; # Show line numbers + relativenumber = true; # Show relative line numbers + + shiftwidth = 2; # Tab width should be 2 + }; + + plugins = { + bufferline.enable = true; + + conform-nvim = { + enable = true; + # TODO use nix fmt on save + settings = {}; + }; + + lsp = { + enable = true; + servers = { + nixd.enable = true; + }; + }; + + lualine.enable = true; + luasnip.enable = true; + + cmp = { + enable = true; + + autoEnableSources = true; + + settings = { + sources = [ + { name = "nvim-lsp"; } + { name = "path"; } + { name = "buffer"; } + ]; + }; + }; + + treesitter.enable = true; + + web-devicons.enable = true; + }; }; };