diff --git a/nix-dendritic-example/.ignore b/nix-dendritic-example/.ignore new file mode 100644 index 0000000..6eca100 --- /dev/null +++ b/nix-dendritic-example/.ignore @@ -0,0 +1 @@ +/.git/ diff --git a/nix-dendritic-example/flake.lock b/nix-dendritic-example/flake.lock new file mode 100644 index 0000000..c156dce --- /dev/null +++ b/nix-dendritic-example/flake.lock @@ -0,0 +1,99 @@ +{ + "nodes": { + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1753121425, + "narHash": "sha256-TVcTNvOeWWk1DXljFxVRp+E0tzG1LhrVjOGGoMHuXio=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "644e0fc48951a860279da645ba77fe4a6e814c5e", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1753180535, + "narHash": "sha256-KEtlzMs2O7FDvciFtjk9W4hyau013Pj9qZNK9a0PxEc=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "847711c7ffa9944b0c5c39a8342ac8eb6a9f9abc", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "master", + "repo": "home-manager", + "type": "github" + } + }, + "import-tree": { + "locked": { + "lastModified": 1752730890, + "narHash": "sha256-GES8fapSLGz36MMPRVNkSUWXUTtqvGQNXHjRmRLfJUY=", + "owner": "vic", + "repo": "import-tree", + "rev": "6ebb8cb87987b20264c09296166543fd3761d274", + "type": "github" + }, + "original": { + "owner": "vic", + "repo": "import-tree", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1752950548, + "narHash": "sha256-NS6BLD0lxOrnCiEOcvQCDVPXafX1/ek1dfJHX1nUIzc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c87b95e25065c028d31a94f06a62927d18763fdf", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1751159883, + "narHash": "sha256-urW/Ylk9FIfvXfliA1ywh75yszAbiTEVgpPeinFyVZo=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "14a40a1d7fb9afa4739275ac642ed7301a9ba1ab", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-parts": "flake-parts", + "home-manager": "home-manager", + "import-tree": "import-tree", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/nix-dendritic-example/flake.nix b/nix-dendritic-example/flake.nix new file mode 100644 index 0000000..641916a --- /dev/null +++ b/nix-dendritic-example/flake.nix @@ -0,0 +1,21 @@ +{ + inputs = { + flake-parts.url = "github:hercules-ci/flake-parts"; + + home-manager = { + inputs.nixpkgs.follows = "nixpkgs"; + url = "github:nix-community/home-manager/master"; + }; + + import-tree.url = "github:vic/import-tree"; + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + }; + + outputs = + inputs: + inputs.flake-parts.lib.mkFlake { inherit inputs; } { + imports = [ + (inputs.import-tree ./modules) + ]; + }; +} diff --git a/nix-dendritic-example/modules/eric.nix b/nix-dendritic-example/modules/eric.nix new file mode 100644 index 0000000..581d121 --- /dev/null +++ b/nix-dendritic-example/modules/eric.nix @@ -0,0 +1,16 @@ +{ config, ... }: + +{ + flake = { + meta.eric.username = "eric"; + + modules = { + nixos.eric = { + users.users.${config.flake.meta.eric.username} = { + isNormalUser = true; + initialPassword = ""; + }; + }; + }; + }; +} diff --git a/nix-dendritic-example/modules/flake-parts.nix b/nix-dendritic-example/modules/flake-parts.nix new file mode 100644 index 0000000..1a92203 --- /dev/null +++ b/nix-dendritic-example/modules/flake-parts.nix @@ -0,0 +1,7 @@ +{ inputs, ... }: + +{ + imports = [ + inputs.flake-parts.flakeModules.modules + ]; +} diff --git a/nix-dendritic-example/modules/formatting.nix b/nix-dendritic-example/modules/formatting.nix new file mode 100644 index 0000000..3c962b1 --- /dev/null +++ b/nix-dendritic-example/modules/formatting.nix @@ -0,0 +1,7 @@ +{ + perSystem = + { pkgs, ... }: + { + formatter = pkgs.nixfmt-rfc-style; + }; +} diff --git a/nix-dendritic-example/modules/git.nix b/nix-dendritic-example/modules/git.nix new file mode 100644 index 0000000..25351d1 --- /dev/null +++ b/nix-dendritic-example/modules/git.nix @@ -0,0 +1,12 @@ +{ config, ... }: + +{ + flake.modules.homeManager.base = { + programs.git = { + enable = true; + + userEmail = config.flake.meta.owner.email; + userName = config.flake.meta.owner.name; + }; + }; +} diff --git a/nix-dendritic-example/modules/home-manager.nix b/nix-dendritic-example/modules/home-manager.nix new file mode 100644 index 0000000..2c63c08 --- /dev/null +++ b/nix-dendritic-example/modules/home-manager.nix @@ -0,0 +1,2 @@ +{ +} diff --git a/nix-dendritic-example/modules/home-manager/base.nix b/nix-dendritic-example/modules/home-manager/base.nix new file mode 100644 index 0000000..bbd936b --- /dev/null +++ b/nix-dendritic-example/modules/home-manager/base.nix @@ -0,0 +1,14 @@ +{ config, ... }: + +{ + flake.modules.homeManager.base = args: { + home = { + homeDirectory = "/home/${config.flake.meta.owner.username}"; + username = config.flake.meta.owner.username; + }; + + programs.home-manager.enable = true; + + systemd.user.startServices = "sd-switch"; + }; +} diff --git a/nix-dendritic-example/modules/home-manager/nixos.nix b/nix-dendritic-example/modules/home-manager/nixos.nix new file mode 100644 index 0000000..cdbfd45 --- /dev/null +++ b/nix-dendritic-example/modules/home-manager/nixos.nix @@ -0,0 +1,28 @@ +{ config, inputs, ... }: + +{ + flake.modules.nixos.pc = { + imports = [ inputs.home-manager.nixosModules.home-manager ]; + + home-manager = { + useGlobalPkgs = true; + extraSpecialArgs.hasGlobalPkgs = true; + + # https://github.com/nix-community/home-manager/issues/6770 + # useUserPackages = true; + + users.${config.flake.meta.owner.username}.imports = [ + ( + { osConfig, ... }: + + { + home.stateVersion = osConfig.system.stateVersion; + } + ) + + config.flake.modules.homeManager.base + # config.flake.modules.homeManager.gui + ]; + }; + }; +} diff --git a/nix-dendritic-example/modules/hosts/corgi/configuration.nix b/nix-dendritic-example/modules/hosts/corgi/configuration.nix new file mode 100644 index 0000000..8065ce9 --- /dev/null +++ b/nix-dendritic-example/modules/hosts/corgi/configuration.nix @@ -0,0 +1,66 @@ +{ + flake.modules.nixos."nixosConfigurations/corgi" = + { + config, + pkgs, + stateVersion, + ... + }: + { + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + networking.networkmanager.enable = true; + + time.timeZone = "Europe/London"; + + i18n.defaultLocale = "en_GB.UTF-8"; + + i18n.extraLocaleSettings = { + LC_ADDRESS = "en_GB.UTF-8"; + LC_IDENTIFICATION = "en_GB.UTF-8"; + LC_MEASUREMENT = "en_GB.UTF-8"; + LC_MONETARY = "en_GB.UTF-8"; + LC_NAME = "en_GB.UTF-8"; + LC_NUMERIC = "en_GB.UTF-8"; + LC_PAPER = "en_GB.UTF-8"; + LC_TELEPHONE = "en_GB.UTF-8"; + LC_TIME = "en_GB.UTF-8"; + }; + + services.xserver.enable = true; + + services.xserver.displayManager.lightdm.enable = true; + services.xserver.desktopManager.cinnamon.enable = true; + + services.xserver.xkb = { + layout = "gb"; + variant = ""; + }; + + console.keyMap = "uk"; + + services.printing.enable = true; + + services.pulseaudio.enable = false; + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + + }; + + programs.firefox.enable = true; + + nixpkgs.config.allowUnfree = true; + + environment.systemPackages = with pkgs; [ + ]; + + services.openssh.enable = true; + + system.stateVersion = stateVersion; + }; +} diff --git a/nix-dendritic-example/modules/hosts/corgi/hardware-configuration.nix b/nix-dendritic-example/modules/hosts/corgi/hardware-configuration.nix new file mode 100644 index 0000000..d83e187 --- /dev/null +++ b/nix-dendritic-example/modules/hosts/corgi/hardware-configuration.nix @@ -0,0 +1,57 @@ +{ + flake.modules.nixos."nixosConfigurations/corgi" = + { + config, + pkgs, + modulesPath, + lib, + ... + }: + { + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ + "xhci_pci" + "ahci" + "usbhid" + "usb_storage" + "sd_mod" + "sr_mod" + "rtsx_usb_sdmmc" + ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = { + device = "/dev/disk/by-uuid/076c5319-e9b6-4985-b86b-5b4287be17ba"; + fsType = "ext4"; + }; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/E090-18D3"; + fsType = "vfat"; + options = [ + "fmask=0077" + "dmask=0077" + ]; + }; + + swapDevices = [ + { device = "/dev/disk/by-uuid/b29480eb-56cf-4353-9b98-790e4e2512b3"; } + ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp1s0.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp2s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + }; +} diff --git a/nix-dendritic-example/modules/hosts/corgi/imports.nix b/nix-dendritic-example/modules/hosts/corgi/imports.nix new file mode 100644 index 0000000..57761ae --- /dev/null +++ b/nix-dendritic-example/modules/hosts/corgi/imports.nix @@ -0,0 +1,8 @@ +{ config, ... }: + +{ + flake.modules.nixos."nixosConfigurations/corgi".imports = with config.flake.modules.nixos; [ + eric + pc + ]; +} diff --git a/nix-dendritic-example/modules/meta-output.nix b/nix-dendritic-example/modules/meta-output.nix new file mode 100644 index 0000000..dbf69e5 --- /dev/null +++ b/nix-dendritic-example/modules/meta-output.nix @@ -0,0 +1,7 @@ +{ lib, ... }: + +{ + options.flake.meta = lib.mkOption { + type = lib.types.anything; + }; +} diff --git a/nix-dendritic-example/modules/nixos-configurations.nix b/nix-dendritic-example/modules/nixos-configurations.nix new file mode 100644 index 0000000..002a348 --- /dev/null +++ b/nix-dendritic-example/modules/nixos-configurations.nix @@ -0,0 +1,13 @@ +{ config, inputs, ... }: + +{ + flake.nixosConfigurations.corgi = inputs.nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + + modules = [ config.flake.modules.nixos."nixosConfigurations/corgi" ]; + + specialArgs = { + stateVersion = "25.05"; + }; + }; +} diff --git a/nix-dendritic-example/modules/owner.nix b/nix-dendritic-example/modules/owner.nix new file mode 100644 index 0000000..6ea731a --- /dev/null +++ b/nix-dendritic-example/modules/owner.nix @@ -0,0 +1,23 @@ +{ config, ... }: + +{ + flake = { + meta.owner = { + email = "oliver@oliverdavies.uk"; + name = "Oliver Davies"; + username = "opdavies"; + }; + + modules = { + nixos.pc = { + users.users.${config.flake.meta.owner.username} = { + isNormalUser = true; + initialPassword = ""; + extraGroups = [ "input" "wheel" ]; + }; + + nix.settings.trusted-users = [ config.flake.meta.owner.username ]; + }; + }; + }; +} diff --git a/nix-dendritic-example/modules/systems.nix b/nix-dendritic-example/modules/systems.nix new file mode 100644 index 0000000..8669711 --- /dev/null +++ b/nix-dendritic-example/modules/systems.nix @@ -0,0 +1,8 @@ +{ + systems = [ + "x86_64-linux" + "aarch64-linux" + "aarch64-darwin" + "x86_64-darwin" + ]; +} diff --git a/nix-dendritic-example/modules/tmux.nix b/nix-dendritic-example/modules/tmux.nix new file mode 100644 index 0000000..2a8cdd6 --- /dev/null +++ b/nix-dendritic-example/modules/tmux.nix @@ -0,0 +1,5 @@ +{ + flake.modules.homeManager.base = { + programs.tmux.enable = true; + }; +} diff --git a/nix-dendritic-example/todo.txt b/nix-dendritic-example/todo.txt new file mode 100644 index 0000000..56da98d --- /dev/null +++ b/nix-dendritic-example/todo.txt @@ -0,0 +1,2 @@ +add home manager +switch git to use home manager