diff --git a/flake-modules/checks.nix b/flake-modules/checks.nix deleted file mode 100644 index 206d2e0..0000000 --- a/flake-modules/checks.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ lib, ... }: -{ - perSystem = - { pkgs, self', ... }: - { - checks = - let - src = builtins.path { - path = ../.; - name = "configuration.nix"; - }; - runCmdInSrc = - name: cmd: - pkgs.runCommandNoCC name { } '' - cd ${src} - ${cmd} - mkdir $out - ''; - in - { - fmt = runCmdInSrc "fmt-src" "${lib.getExe self'.formatter} --check ."; - lint = runCmdInSrc "lint-src" "${lib.getExe pkgs.statix} check ."; - typos = runCmdInSrc "typos-src" "${lib.getExe pkgs.typos} ."; - }; - }; -} diff --git a/flake-modules/default.nix b/flake-modules/default.nix deleted file mode 100644 index f028f92..0000000 --- a/flake-modules/default.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ inputs, ... }: -let - overlays = builtins.attrValues inputs.self.overlays; -in -{ - imports = [ - ./checks.nix - ./devshells.nix - ./docs.nix - ./example-vm.nix - ./nixos-modules.nix - ./nvim.nix - ./overlays.nix - ./scripts.nix - ]; - - perSystem = - { system, pkgs, ... }: - { - _module.args.pkgs = import inputs.nixpkgs { inherit system overlays; }; - - # Nix files formatter (run `nix fmt`) - formatter = pkgs.nixfmt-rfc-style; - }; -} diff --git a/flake-modules/devshells.nix b/flake-modules/devshells.nix deleted file mode 100644 index 677ecdc..0000000 --- a/flake-modules/devshells.nix +++ /dev/null @@ -1,13 +0,0 @@ -_: { - perSystem = - { pkgs, self', ... }: - { - devShells.default = pkgs.mkShellNoCC { - buildInputs = [ - pkgs.just - self'.packages.nvim - ]; - QEMU_OPTS_WL = "--enable-kvm -smp 4 -device virtio-gpu-rutabaga,gfxstream-vulkan=on,cross-domain=on,hostmem=2G,wsi=headless"; - }; - }; -} diff --git a/flake-modules/docs.nix b/flake-modules/docs.nix deleted file mode 100644 index bcd9fbe..0000000 --- a/flake-modules/docs.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ lib, ... }: -{ - perSystem = - { pkgs, ... }: - { - packages = { - # Documentation - inherit (import ../docs { inherit pkgs lib; }) - docs - nixos-markdown - nvim-markdown - home-markdown - ; - }; - }; -} diff --git a/flake-modules/example-vm.nix b/flake-modules/example-vm.nix deleted file mode 100644 index 0e04439..0000000 --- a/flake-modules/example-vm.nix +++ /dev/null @@ -1,46 +0,0 @@ -{ inputs, lib, ... }: -{ - # Example vm configuration - flake.nixosConfigurations.vm = - let - system = "x86_64-linux"; - overlays = builtins.attrValues inputs.self.overlays; - config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "steam-original" ]; - pkgs = import inputs.nixpkgs { inherit system overlays config; }; - in - lib.nixosSystem { - inherit system pkgs; - modules = [ - inputs.self.nixosModules.vm # import vm module - { - time.timeZone = "Europe/Berlin"; - i18n.defaultLocale = "en_US.UTF-8"; - users.users.jdoe = { - password = "example"; - isNormalUser = true; - extraGroups = [ - "wheel" - "video" - "networkmanager" - ]; - }; - home-manager.users.jdoe = { - home = { - username = "jdoe"; - homeDirectory = "/home/jdoe"; - }; - jhome = { - enable = true; - gui.enable = true; - dev.rust.enable = true; - }; - }; - nix.registry.nixpkgs.flake = inputs.nixpkgs; - jconfig = { - enable = true; - gui.enable = true; - }; - } - ]; - }; -} diff --git a/flake-modules/nixos-modules.nix b/flake-modules/nixos-modules.nix deleted file mode 100644 index f390328..0000000 --- a/flake-modules/nixos-modules.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ inputs, lib, ... }: -{ - flake.nixosModules = - let - nvim-config.imports = [ - inputs.nixvim.homeManagerModules.nixvim - ../nvim - ]; - homeManagerModuleSandalone = import ../home { - inherit nvim-config; - inherit (inputs) stylix; - }; - homeManagerModuleNixOS = import ../home { inherit nvim-config; }; - nixosModule = { - imports = [ - (import ../system { inherit (inputs) stylix; }) - inputs.home-manager.nixosModules.home-manager - ] ++ lib.optional (inputs.lix-module != null) inputs.lix-module.nixosModules.default; - home-manager = { - useGlobalPkgs = true; - useUserPackages = true; - sharedModules = [ homeManagerModuleNixOS ]; - }; - # Pin nixpkgs - nix.registry.nixpkgs.flake = inputs.nixpkgs; - }; - - machines = [ "vm" ]; - mkMachine = hostname: { - imports = [ - nixosModule - (import (../machines + "/${hostname}")) - ]; - home-manager.sharedModules = [ { jhome.hostName = hostname; } ]; - }; - machineModules = lib.genAttrs machines mkMachine; - in - { - default = nixosModule; - inherit nixosModule homeManagerModuleNixOS homeManagerModuleSandalone; - } - // machineModules; -} diff --git a/flake-modules/nvim.nix b/flake-modules/nvim.nix deleted file mode 100644 index 95280ef..0000000 --- a/flake-modules/nvim.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ inputs, ... }: -let - standalone = ../nvim/standalone.nix; -in -{ - flake.overlays.nixvim = inputs.nixvim.overlays.default; - - perSystem = - { pkgs, system, ... }: - { - # Check standalone nvim build - checks.nvim = inputs.nixvim.lib.${system}.check.mkTestDerivationFromNixvimModule { - inherit pkgs; - module = ../nvim/standalone.nix; - }; - - # Nvim standalone module - packages.nvim = inputs.nixvim.legacyPackages.${system}.makeNixvimWithModule { - inherit pkgs; - module = standalone; - }; - - }; -} diff --git a/flake-modules/overlays.nix b/flake-modules/overlays.nix deleted file mode 100644 index 62e46dd..0000000 --- a/flake-modules/overlays.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ inputs, ... }: -{ - # Add unstable packages to overlay - flake.overlays.unstable = - final: prev: - let - unstablePkgs = inputs.unstable.legacyPackages.${prev.stdenv.hostPlatform.system}; - in - { - # Get unstable packages - unstable = unstablePkgs; - - # Update vim plugins with the versions from unstable - vimPlugins = prev.vimPlugins // unstablePkgs.vimPlugins; - - # Get specific packages from unstable - inherit (unstablePkgs) - gitoxide - jujutsu - neovim-unwrapped - ruff # nixpkgs stable version is improperly configured by nixvim - # wezterm - ; - }; - -} diff --git a/flake-modules/scripts.nix b/flake-modules/scripts.nix deleted file mode 100644 index 590f6a1..0000000 --- a/flake-modules/scripts.nix +++ /dev/null @@ -1,14 +0,0 @@ -let - scripts = import ../scripts; -in -{ - # Add scripts to overlay - flake.overlays.scripts = final: prev: scripts final; - - # Add scripts to packages - perSystem = - { pkgs, ... }: - { - packages = scripts pkgs; - }; -} diff --git a/flake.lock b/flake.lock index 974dc05..9daecd1 100644 --- a/flake.lock +++ b/flake.lock @@ -117,6 +117,7 @@ "flake-parts": { "inputs": { "nixpkgs-lib": [ + "nixvim", "nixpkgs" ] }, @@ -277,9 +278,7 @@ "inputs": { "devshell": [], "flake-compat": [], - "flake-parts": [ - "flake-parts" - ], + "flake-parts": "flake-parts", "git-hooks": [], "home-manager": [ "home-manager" @@ -307,7 +306,6 @@ }, "root": { "inputs": { - "flake-parts": "flake-parts", "home-manager": "home-manager", "lix-module": "lix-module", "nixpkgs": "nixpkgs", diff --git a/flake.nix b/flake.nix index 31cb5e1..e82ed27 100644 --- a/flake.nix +++ b/flake.nix @@ -2,7 +2,6 @@ { # A helpful description of your flake description = "My NixOS configuration"; - # Flake inputs inputs = { nixpkgs.url = "nixpkgs/nixos-24.05"; @@ -34,7 +33,6 @@ inputs = { nixpkgs.follows = "unstable"; home-manager.follows = "home-manager"; - flake-parts.follows = "flake-parts"; # disable optional inputs flake-compat.follows = ""; nix-darwin.follows = ""; @@ -43,20 +41,205 @@ git-hooks.follows = ""; }; }; - flake-parts = { - url = "github:hercules-ci/flake-parts"; - inputs.nixpkgs-lib.follows = "nixpkgs"; - }; # For deduplication systems.url = "github:nix-systems/default"; }; # Flake outputs that other flakes can use outputs = - inputs: - inputs.flake-parts.lib.mkFlake { inherit inputs; } { - systems = import inputs.systems; + { + self, + nixpkgs, + unstable, + stylix, + home-manager, + nixvim, + lix-module, + systems, + }: + let + inherit (nixpkgs) lib; + # Helpers for producing system-specific outputs + supportedSystems = import systems; + forEachSupportedSystem = + f: + nixpkgs.lib.genAttrs supportedSystems ( + system: + f { + inherit system; + pkgs = nixpkgs.legacyPackages.${system}; + } + ); + overlays = builtins.attrValues self.overlays; + scripts_pkgs = import ./scripts; + scripts = final: prev: scripts_pkgs final; + in + { + checks = forEachSupportedSystem ( + { pkgs, system }: + let + src = builtins.path { + path = ./.; + name = "configuration.nix"; + }; + runCmdInSrc = + name: cmd: + pkgs.runCommandNoCC name { } '' + cd ${src} + ${cmd} + mkdir $out + ''; + in + { + nvim = nixvim.lib.${system}.check.mkTestDerivationFromNixvimModule { + pkgs = import nixpkgs { inherit system overlays; }; + module = ./nvim/standalone.nix; + }; + fmt = runCmdInSrc "fmt-src" "${lib.getExe self.formatter.${system}} --check ."; + lint = runCmdInSrc "lint-src" "${lib.getExe pkgs.statix} check ."; + typos = runCmdInSrc "typos-src" "${lib.getExe pkgs.typos} ."; + } + ); - imports = [ ./flake-modules ]; + packages = forEachSupportedSystem ( + { pkgs, system }: + scripts_pkgs pkgs + // { + inherit (import ./docs { inherit pkgs lib; }) + docs + nixos-markdown + nvim-markdown + home-markdown + ; + # Nvim standalone module + nvim = nixvim.legacyPackages.${system}.makeNixvimWithModule { + pkgs = import nixpkgs { inherit system overlays; }; + module = ./nvim/standalone.nix; + }; + } + ); + + # Provide necessary overlays + overlays = { + inherit scripts; + nixvim = nixvim.overlays.default; + unstable = + final: prev: + let + unstablePkgs = unstable.legacyPackages.${prev.system}; + in + { + # Get unstable packages + unstable = unstablePkgs; + + # Update vim plugins with the versions from unstable + vimPlugins = prev.vimPlugins // unstablePkgs.vimPlugins; + # Get specific packages from unstable + inherit (unstablePkgs) + gitoxide + jujutsu + neovim-unwrapped + ruff # nixpkgs stable version is improperly configured by nixvim + # wezterm + ; + }; + }; + + # Nix files formatter (run `nix fmt`) + formatter = forEachSupportedSystem ({ pkgs, ... }: pkgs.nixfmt-rfc-style); + + # Example vm configuration + nixosConfigurations.vm = + let + system = "x86_64-linux"; + config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "steam-original" ]; + pkgs = import nixpkgs { inherit system overlays config; }; + in + lib.nixosSystem { + inherit system pkgs; + modules = [ + self.nixosModules.vm # import vm module + { + time.timeZone = "Europe/Berlin"; + i18n.defaultLocale = "en_US.UTF-8"; + users.users.jdoe = { + password = "example"; + isNormalUser = true; + extraGroups = [ + "wheel" + "video" + "networkmanager" + ]; + }; + home-manager.users.jdoe = { + home = { + username = "jdoe"; + homeDirectory = "/home/jdoe"; + }; + jhome = { + enable = true; + gui.enable = true; + dev.rust.enable = true; + }; + }; + nix.registry.nixpkgs.flake = nixpkgs; + jconfig = { + enable = true; + gui.enable = true; + }; + } + ]; + }; + + nixosModules = + let + nvim-config.imports = [ + nixvim.homeManagerModules.nixvim + ./nvim + ]; + homeManagerModuleSandalone = import ./home { inherit nvim-config stylix; }; + homeManagerModuleNixOS = import ./home { inherit nvim-config; }; + nixosModule = { + imports = [ + (import ./system { inherit stylix; }) + home-manager.nixosModules.home-manager + ] ++ nixpkgs.lib.optional (lix-module != null) lix-module.nixosModules.default; + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + sharedModules = [ homeManagerModuleNixOS ]; + }; + # Pin nixpkgs + nix.registry.nixpkgs.flake = nixpkgs; + }; + + machines = [ "vm" ]; + mkMachine = hostname: { + imports = [ + nixosModule + (import (./machines + "/${hostname}")) + ]; + home-manager.sharedModules = [ { jhome.hostName = hostname; } ]; + }; + machineModules = lib.genAttrs machines mkMachine; + in + { + default = nixosModule; + inherit nixosModule homeManagerModuleNixOS homeManagerModuleSandalone; + } + // machineModules; + + devShells = forEachSupportedSystem ( + { pkgs, system }: + { + default = pkgs.mkShellNoCC { + buildInputs = [ + pkgs.just + self.packages.${system}.nvim + ]; + QEMU_OPTS_WL = "--enable-kvm -smp 4 -device virtio-gpu-rutabaga,gfxstream-vulkan=on,cross-domain=on,hostmem=2G,wsi=headless"; + }; + } + ); }; } diff --git a/home/options.nix b/home/options.nix index e758c65..18f6f4c 100644 --- a/home/options.nix +++ b/home/options.nix @@ -193,7 +193,6 @@ in }; neovimAsManPager = lib.mkEnableOption "neovim as the man pager"; extraPackages = mkExtraPackagesOption "dev" [ - [ "devenv" ] # a devshell alternative [ "jq" ] # json parser [ "just" ] # just a command runner [ "typos" ] # low false positive rate typo checker @@ -209,7 +208,10 @@ in options.enable = lib.mkEnableOption "rust development settings"; options.extraPackages = mkExtraPackagesOption "Rust" [ [ "cargo-insta" ] # snapshot testing + [ "cargo-llvm-cov" ] # code coverage + [ "cargo-msrv" ] # minimum supported version [ "cargo-nextest" ] # better testing harness + [ "cargo-sort" ] # sort deps and imports [ "cargo-udeps" ] # check for unused dependencies (requires nightly) [ "cargo-watch" ] # watch for file changes and run commands ];