summaryrefslogtreecommitdiff
path: root/shared/nixos-and-darwin
diff options
context:
space:
mode:
authorLinnnus <[email protected]>2024-12-22 10:58:36 +0000
committerLinnnus <[email protected]>2024-12-27 09:07:52 +0100
commit3bf29c686274e19576aeb4f19510fa0702d2cb0c (patch)
treef14ab6d1983ac09514abf1ebe1a34ddd17ca6472 /shared/nixos-and-darwin
parenta323c5058b31de63c2e88716b01bd41a38faa5ef (diff)
Move shared nix{os,-darwin} config to shared/nixos-and-darwin
Diffstat (limited to 'shared/nixos-and-darwin')
-rw-r--r--shared/nixos-and-darwin/common-hm-settings/default.nix27
-rw-r--r--shared/nixos-and-darwin/common-nix-settings/default.nix59
-rw-r--r--shared/nixos-and-darwin/common-shell-settings/default.nix44
3 files changed, 130 insertions, 0 deletions
diff --git a/shared/nixos-and-darwin/common-hm-settings/default.nix b/shared/nixos-and-darwin/common-hm-settings/default.nix
new file mode 100644
index 0000000..4c02005
--- /dev/null
+++ b/shared/nixos-and-darwin/common-hm-settings/default.nix
@@ -0,0 +1,27 @@
+# This module sets common settings related to home-manager (HM). All hosts that
+# I directly interact with should include this module.
+#
+# NOTE: This lives under `shared/nixos-and-darwin`. The configuration in here
+# should be compatible with both nixos and nix-darwin!!
+{
+ flakeInputs,
+ flakeOutputs,
+ metadata,
+ ...
+}: {
+ # FIXME: Ideally this module would import flakeInputs.home-manager but that causes an infinite recursion for some reason.
+
+ # Use the flake input pkgs so Home Manager configuration can share overlays
+ # etc. with the rest of the configuration.
+ home-manager.useGlobalPkgs = true;
+
+ # Pass special arguments from flake.nix further down the chain. I really hate
+ # this split module system.
+ home-manager.extraSpecialArgs = {inherit flakeInputs flakeOutputs metadata;};
+
+ # All interactive systems (i.e. the ones that would use HM) have a 'linus' user.
+ home-manager.users.linus = {
+ imports = builtins.attrValues flakeOutputs.homeModules;
+ xdg.enable = true;
+ };
+}
diff --git a/shared/nixos-and-darwin/common-nix-settings/default.nix b/shared/nixos-and-darwin/common-nix-settings/default.nix
new file mode 100644
index 0000000..92e14f3
--- /dev/null
+++ b/shared/nixos-and-darwin/common-nix-settings/default.nix
@@ -0,0 +1,59 @@
+# This module sets common settings related to Nix such as enabling flakes and
+# using overlays everywhere..
+#
+# NOTE: This lives under `shared/nixos-and-darwin`. The configuration in here
+# should be compatible with both nixos and nix-darwin!!
+{
+ pkgs,
+ lib,
+ config,
+ flakeInputs,
+ flakeOutputs,
+ ...
+}:
+lib.mkMerge [
+ {
+ # Enable de facto stable features.
+ nix.settings.experimental-features = ["nix-command" "flakes"];
+
+ nixpkgs.overlays = [
+ # Use local overlays.
+ flakeOutputs.overlays.additions
+ flakeOutputs.overlays.modifications
+
+ # Add unstable nixpkgs.
+ (final: prev: {unstable = flakeInputs.nixpkgs-unstable.legacyPackages.${pkgs.system};})
+ ];
+
+ # I'm not *that* vegan.
+ nixpkgs.config.allowUnfree = true;
+
+ # This will add each flake input as a registry
+ # To make nix3 commands consistent with your flake
+ nix.registry = lib.mapAttrs (_: value: {flake = value;}) flakeInputs;
+
+ nix.nixPath =
+ [
+ # Use overlays from this repo for building system configuration as well as system-wide.
+ # See: https://nixos.wiki/wiki/Overlays#Using_nixpkgs.overlays_from_configuration.nix_as_.3Cnixpkgs-overlays.3E_in_your_NIX_PATH
+ "nixpkgs-overlays=${flakeInputs.self}/overlays/compat.nix"
+ ]
+ # This will additionally add out inputs to the system's legacy channels
+ # Making legacy nix commands consistent as well, awesome!
+ ++ lib.mapAttrsToList (key: value: "${key}=${value.to.path}") config.nix.registry;
+
+ # Add shell-utilities which are only relevant if Nix is enabled.
+ environment.systemPackages = with pkgs; [
+ # For running programs easily.
+ nix-index # Also includes nix-locate
+ flakeInputs.comma.packages.${system}.default
+
+ # For editing secrets.
+ flakeInputs.agenix.packages.${system}.default
+ ];
+ }
+ (lib.mkIf pkgs.stdenv.isLinux {
+ # There is not nix-darwin equivalent to this NixOS option.
+ nix.enable = true;
+ })
+]
diff --git a/shared/nixos-and-darwin/common-shell-settings/default.nix b/shared/nixos-and-darwin/common-shell-settings/default.nix
new file mode 100644
index 0000000..982296d
--- /dev/null
+++ b/shared/nixos-and-darwin/common-shell-settings/default.nix
@@ -0,0 +1,44 @@
+# This module sets options to ensure a consistent Baseline Shell Experince™
+# across the entire fleet. This includes e.g. common utilities and aliases.
+#
+# NOTE: This lives under `shared/nixos-and-darwin`. The configuration in here
+# should be compatible with both nixos and nix-darwin!!
+{pkgs, ...}: {
+ # Set ZSH as the shell.
+ # https://nixos.wiki/wiki/Command_Shell#Changing_default_shelltrue
+ programs.zsh.enable = true;
+ environment.shells = [pkgs.zsh];
+
+ # Very basic system administration tools.
+ environment.systemPackages = with pkgs; [
+ curl
+ jq
+ moreutils
+ neovim
+ tree
+ ];
+
+ # Aliases that are burned into my muscle memory.
+ environment.shellAliases = {
+ "mv" = "mv -i";
+ "rm" = "rm -i";
+ "cp" = "cp -i";
+ "ls" = "ls -F -G -A --color=auto";
+ "grep" = "grep --color=auto";
+ "file" = "file --no-dereference";
+ "tree" = "tree --dirsfirst --gitignore";
+
+ # See: https://github.com/NixOS/nix/issues/5858
+ "nix" = "nix --print-build-logs";
+
+ ".." = "cd ../";
+ "..." = "cd ../../";
+ "...." = "cd ../../../";
+ "....." = "cd ../../../../";
+ "......" = "cd ../../../../../";
+ "......." = "cd ../../../../../../";
+ "........" = "cd ../../../../../../../";
+ "........." = "cd ../../../../../../../../";
+ ".........." = "cd ../../../../../../../../../";
+ };
+}