commit ac881e7a4a7622d4b668f071eff869385d0807e5 Author: m3tam3re Date: Mon Apr 1 14:21:20 2024 +0200 first diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..fd1f6ec --- /dev/null +++ b/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1711703276, + "narHash": "sha256-iMUFArF0WCatKK6RzfUJknjem0H9m4KgorO/p3Dopkk=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "d8fe5e6c92d0d190646fb9f1056741a229980089", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..da6ec7d --- /dev/null +++ b/flake.nix @@ -0,0 +1,36 @@ +{ + description = '' + My personal NixOS Flake templates! + + For questions just DM me on X: https://twitter.com/@m3tam3re + There is also some NIXOS content on my YT channel: https://www.youtube.com/@m3tam3re + + One of the best ways to learn NIXOS is to read other peoples configurations. I have personally learned a lot from Gabriel Fontes configs: + https://github.com/Misterio77/nix-starter-configs + ''; + + inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; }; + + outputs = { nixpkgs, ... }: + let + systems = [ + "aarch64-linux" + "i686-linux" + "x86_64-linux" + "aarch64-darwin" + "x86_64-darwin" + ]; + forAllSystems = nixpkgs.lib.genAttrs systems; + in { + templates = { + nixos-standard = { + description = '' + NIXOS Standard - contains the basic flake structure I use to configure multiple machines and user environtments. + ''; + path = ./nixos/standard; + }; + }; + formatter = + forAllSystems (system: nixpkgs.legacyPackages.${system}.alejandra); + }; +} diff --git a/nixos/standard/flake.nix b/nixos/standard/flake.nix new file mode 100644 index 0000000..2d34ee5 --- /dev/null +++ b/nixos/standard/flake.nix @@ -0,0 +1,20 @@ +{ + description = "A very basic flake"; + + inputs = { + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + }; + + outputs = { self, home-manager, nixpkgs }@inputs: { + nixosConfigurations = { + your-host = nixpkgs.lib.nixosSystem { + specialArgs = { inherit inputs; }; + modules = [ ./hosts/your-host ]; + }; + }; + }; +} diff --git a/nixos/standard/home/common/default.nix b/nixos/standard/home/common/default.nix new file mode 100644 index 0000000..4a9768b --- /dev/null +++ b/nixos/standard/home/common/default.nix @@ -0,0 +1,36 @@ +{ config, lib, pkgs, ... }: { + nixpkgs = { + # You can add overlays here + overlays = [ + # Add overlays your own flake exports (from overlays and pkgs dir): + #outputs.overlays.additions + #outputs.overlays.modifications + #outputs.overlays.stable-packages + + # You can also add overlays exported from other flakes: + # neovim-nightly-overlay.overlays.default + + # Or define it inline, for example: + # (final: prev: { + # hi = final.hello.overrideAttrs (oldAttrs: { + # patches = [ ./change-hello-to-hi.patch ]; + # }); + # }) + ]; + # Configure your nixpkgs instance + config = { + # Disable if you don't want unfree packages + allowUnfree = true; + # Workaround for https://github.com/nix-community/home-manager/issues/2942 + allowUnfreePredicate = _: true; + }; + }; + + nix = { + package = lib.mkDefault pkgs.nix; + settings = { + experimental-features = [ "nix-command" "flakes" "repl-flake" ]; + warn-dirty = false; + }; + }; +} diff --git a/nixos/standard/home/your-name/home.nix b/nixos/standard/home/your-name/home.nix new file mode 100644 index 0000000..201bda7 --- /dev/null +++ b/nixos/standard/home/your-name/home.nix @@ -0,0 +1,79 @@ +# This is a default home.nix generated by the follwing hone-manager command +# +# home-manager init ./ + +{ config, lib, pkgs, ... }: + +{ + # Home Manager needs a bit of information about you and the paths it should + # manage. + home.username = lib.mkDefault "your-name"; + home.homeDirectory = lib.mkDefault "/home/${config.home.username}"; + + # 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 = "24.05"; # Please read the comment before changing. + + # The home.packages option allows you to install Nix packages into your + # environment. + home.packages = [ + # # 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'. 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/m3tam3re/etc/profile.d/hm-session-vars.sh + # + home.sessionVariables = { + # EDITOR = "emacs"; + }; + + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; +} diff --git a/nixos/standard/home/your-name/your-host.nix b/nixos/standard/home/your-name/your-host.nix new file mode 100644 index 0000000..7e288ee --- /dev/null +++ b/nixos/standard/home/your-name/your-host.nix @@ -0,0 +1 @@ +{ config, ... }: { imports = [ ./home.nix ../common ]; } diff --git a/nixos/standard/hosts/common/default.nix b/nixos/standard/hosts/common/default.nix new file mode 100644 index 0000000..d643f47 --- /dev/null +++ b/nixos/standard/hosts/common/default.nix @@ -0,0 +1,18 @@ +# Common configuration for all hosts + +{ config, lib, inputs, ... }: { + nix = { + settings = { + experimental-features = "nix-command flakes"; + trusted-users = [ "root" "m3tam3re" ]; + }; + gc = { + automatic = true; + options = "--delete-older-than 30d"; + }; + optimise.automatic = true; + registry = (lib.mapAttrs (_: flake: { inherit flake; })) + ((lib.filterAttrs (_: lib.isType "flake")) inputs); + nixPath = [ "/etc/nix/path" ]; + }; +} diff --git a/nixos/standard/hosts/your-host/default.nix b/nixos/standard/hosts/your-host/default.nix new file mode 100644 index 0000000..bda7aed --- /dev/null +++ b/nixos/standard/hosts/your-host/default.nix @@ -0,0 +1,35 @@ +# A staring point is the basic NIXOS configuration generated by the ISO installer. +# On an existing NIXOS install you can use the following command in your flakes basedir: +# sudo nixos-generate-config --dir ./hosts/your-host +# +# Please make sure to change the first couple of lines in your configuration.nix: + +# { config, inputs, lib, pkgs, ... }: +# +# { +# imports = [ # Include the results of the hardware scan. +# ./hardware-configuration.nix +# inputs.home-manager.nixosModules.home-manager +# ]; +# ... +# +# Moreover please update the packages option in your user configuration and add the home-manager options: + +# users.users = { +# your-name = { +# isNormalUser = true; +# initialPassword = "12345"; +# extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user. +# packages = [ inputs.home-manager.packages.${pkgs.system}.default ]; +# }; +# }; +# +# home-manager = { +# useUserPackages = true; +# users.your-name = +# import ../../home/your-name/${config.networking.hostName}.nix; +# }; + +{ + imports = [ ../common ./configuration.nix ]; +}