Jalil David Salamé Messina
f1991245fe
This allows me to test the neovim configuration much easier and also adds neovim checks to the flake.
178 lines
6.1 KiB
Nix
178 lines
6.1 KiB
Nix
# This flake was initially generated by fh, the CLI for FlakeHub (version 0.1.9)
|
|
{
|
|
# A helpful description of your flake
|
|
description = "My NixOS configuration";
|
|
|
|
# Flake inputs
|
|
inputs.stylix.url = "github:jalil-salame/stylix/fallback-fonts-v2";
|
|
inputs.stylix.inputs.nixpkgs.follows = "nixpkgs";
|
|
inputs.stylix.inputs.home-manager.follows = "home-manager";
|
|
|
|
inputs.nixpkgs.url = "nixpkgs/nixos-unstable";
|
|
|
|
inputs.jpassmenu.url = "github:jalil-salame/jpassmenu";
|
|
inputs.jpassmenu.inputs.nixpkgs.follows = "nixpkgs";
|
|
|
|
inputs.audiomenu.url = "github:jalil-salame/audiomenu";
|
|
inputs.audiomenu.inputs.nixpkgs.follows = "nixpkgs";
|
|
|
|
inputs.nixvim.url = "github:nix-community/nixvim";
|
|
inputs.nixvim.inputs.nixpkgs.follows = "nixpkgs";
|
|
inputs.nixvim.inputs.home-manager.follows = "home-manager";
|
|
inputs.nixvim.inputs.pre-commit-hooks.follows = "pre-commit-hooks";
|
|
|
|
# WARN: Flakehub is outdated (39 days out of date)
|
|
# inputs.home-manager.url = "https://flakehub.com/f/nix-community/home-manager/0.1.*.tar.gz";
|
|
inputs.home-manager.url = "github:nix-community/home-manager";
|
|
inputs.home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
|
|
|
inputs.nixos-hardware.url = "github:NixOS/nixos-hardware";
|
|
|
|
inputs.neovim-nightly.url = "github:nix-community/neovim-nightly-overlay";
|
|
inputs.neovim-nightly.inputs.nixpkgs.follows = "nixpkgs";
|
|
|
|
inputs.pre-commit-hooks.url = "github:cachix/pre-commit-hooks.nix";
|
|
inputs.pre-commit-hooks.inputs.nixpkgs.follows = "nixpkgs";
|
|
|
|
# Flake outputs that other flakes can use
|
|
outputs =
|
|
{ self
|
|
, nixpkgs
|
|
, stylix
|
|
, home-manager
|
|
, nixos-hardware
|
|
, pre-commit-hooks
|
|
, jpassmenu
|
|
, audiomenu
|
|
, nixvim
|
|
, neovim-nightly
|
|
}:
|
|
let
|
|
inherit (nixpkgs) lib;
|
|
# Helpers for producing system-specific outputs
|
|
supportedSystems = [ "x86_64-linux" "aarch64-linux" ];
|
|
forEachSupportedSystem = f: nixpkgs.lib.genAttrs supportedSystems (system: f {
|
|
inherit system;
|
|
pkgs = import nixpkgs { inherit system; };
|
|
});
|
|
overlays = builtins.attrValues self.overlays;
|
|
in
|
|
{
|
|
checks = forEachSupportedSystem ({ pkgs, system }: {
|
|
nvim = nixvim.lib.${system}.check.mkTestDerivationFromNixvimModule {
|
|
pkgs = import nixpkgs { inherit system overlays; };
|
|
module = ./nvim/nixvim.nix;
|
|
};
|
|
pre-commit-check = pre-commit-hooks.lib.${system}.run {
|
|
src = builtins.path { path = ./.; name = "configuration.nix"; };
|
|
hooks.typos.enable = true;
|
|
hooks.nixpkgs-fmt.enable = true;
|
|
};
|
|
});
|
|
|
|
packages = forEachSupportedSystem ({ pkgs, system }: {
|
|
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/nixvim.nix;
|
|
};
|
|
});
|
|
|
|
# Provide necessary overlays
|
|
overlays = {
|
|
nixvim = nixvim.overlays.default;
|
|
neovim-nightly = neovim-nightly.overlays.default;
|
|
jpassmenu = jpassmenu.overlays.default;
|
|
audiomenu = audiomenu.overlays.default;
|
|
};
|
|
|
|
# Nix files formatter (run `nix fmt`)
|
|
formatter = forEachSupportedSystem ({ pkgs, ... }: pkgs.nixpkgs-fmt);
|
|
|
|
# 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";
|
|
users.users.jdoe.isNormalUser = true;
|
|
users.users.jdoe.extraGroups = [ "wheel" "video" "networkmanager" ];
|
|
|
|
home-manager.users.jdoe = {
|
|
home.username = "jdoe";
|
|
home.homeDirectory = "/home/jdoe";
|
|
|
|
jhome.enable = true;
|
|
jhome.gui.enable = true;
|
|
jhome.dev.rust.enable = true;
|
|
};
|
|
|
|
nix.registry.nixpkgs.flake = nixpkgs;
|
|
|
|
jconfig.enable = true;
|
|
jconfig.gui.enable = true;
|
|
}
|
|
];
|
|
};
|
|
|
|
|
|
nixosModules =
|
|
let
|
|
nvim-config.imports = [
|
|
nixvim.homeManagerModules.nixvim
|
|
./nvim
|
|
];
|
|
overlays = builtins.attrValues self.overlays;
|
|
homeManagerModuleSandalone = import ./home { inherit overlays nvim-config stylix; };
|
|
homeManagerModuleNixOS = import ./home { inherit overlays nvim-config; };
|
|
nixosModule = {
|
|
imports = [
|
|
(import ./system { inherit stylix; })
|
|
home-manager.nixosModules.home-manager
|
|
];
|
|
|
|
home-manager.useGlobalPkgs = true;
|
|
home-manager.useUserPackages = true;
|
|
home-manager.sharedModules = [ homeManagerModuleNixOS ];
|
|
|
|
# Pin nixpkgs
|
|
nix.registry.nixpkgs.flake = nixpkgs;
|
|
};
|
|
|
|
machines = [ "capricorn" "gemini" "libra" "vm" ];
|
|
mkMachine = hostname: {
|
|
imports = [
|
|
nixosModule
|
|
(import (./machines + "/${hostname}") { inherit nixos-hardware; })
|
|
];
|
|
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.mkShell {
|
|
inherit (self.checks.${system}.pre-commit-check) shellHook;
|
|
buildInputs = with pkgs; [ just self.packages.${system}.nvim ];
|
|
};
|
|
});
|
|
};
|
|
}
|