diff --git a/darwin/default.nix b/darwin/default.nix
index 28e70de..f8a54f0 100644
--- a/darwin/default.nix
+++ b/darwin/default.nix
@@ -1,6 +1,6 @@
{ self, config, ... }: {
flake.darwinModules = {
- me = let inherit (config.people) me;
+ home = let inherit (config.users) me;
in {
home-manager.users.${me} = { imports = [ self.homeModules.darwin ]; };
users.users.${me} = {
@@ -10,8 +10,8 @@
};
default.imports = [
- self.darwinModules.home-manager
- self.darwinModules.me
+ self.darwinModules_.home-manager
+ self.darwinModules.home
self.nixosModules.common
./fish.nix
./fonts.nix
diff --git a/darwin/fish.nix b/darwin/fish.nix
index 435307b..f0e6cd0 100644
--- a/darwin/fish.nix
+++ b/darwin/fish.nix
@@ -1,16 +1,18 @@
{ config, pkgs, lib, ... }: {
environment.variables.SHELL = lib.getExe pkgs.fish;
environment.shells = [ pkgs.fish ];
- programs.fish.enable = true;
- programs.fish.useBabelfish = true;
- programs.fish.babelfishPackage = pkgs.babelfish;
- # needed to address bug where $PATH is not properly set for fish:
- # https://github.com/LnL7/nix-darwin/issues/122
- programs.fish.shellInit = ''
- for p in (string split : ${config.environment.systemPath})
- if not contains $p $fish_user_paths
- set -Ua fish_user_paths $p
+ programs.fish = {
+ enable = true;
+ useBabelfish = true;
+ babelfishPackage = pkgs.babelfish;
+ # needed to address bug where $PATH is not properly set for fish:
+ # https://github.com/LnL7/nix-darwin/issues/122
+ shellInit = ''
+ for p in (string split : ${config.environment.systemPath})
+ if not contains $p $fish_user_paths
+ set -Ua fish_user_paths $p
+ end
end
- end
- '';
+ '';
+ };
}
diff --git a/darwin/fonts.nix b/darwin/fonts.nix
index 13dd1cf..7bf68f4 100644
--- a/darwin/fonts.nix
+++ b/darwin/fonts.nix
@@ -1,10 +1,8 @@
{ pkgs, ... }: {
fonts.fontDir.enable = true;
- # TODO: go back to `with pkgs`?
fonts.fonts = builtins.attrValues {
inherit (pkgs)
- # TODO: patch recursive with nerd-font
- borg-sans-mono recursive
+ borg-sans-mono recursive recursive-patched
# code^
ia-writer-family ibm-plex
diff --git a/darwin/homebrew.nix b/darwin/homebrew.nix
index b8c5e31..ccd45b8 100644
--- a/darwin/homebrew.nix
+++ b/darwin/homebrew.nix
@@ -1,99 +1,84 @@
-{ flake, config, lib, ... }:
-let caskPresent = cask: builtins.elem cask config.homebrew.casks;
-in {
+{ flake, config, ... }: {
# https://docs.brew.sh/Shell-Completion#configuring-completions-in-fish
# for some reason if the Fish completions are added at the end of `fish_complete_path` they don't
# seem to work, but they do work if added at the start.
- programs.fish.interactiveShellInit = ''
- if test -d (brew --prefix)"/share/fish/completions"
- set -p fish_complete_path (brew --prefix)/share/fish/completions
- end
- if test -d (brew --prefix)"/share/fish/vendor_completions.d"
- set -p fish_complete_path (brew --prefix)/share/fish/vendor_completions.d
- end
- '';
-
- homebrew.enable = flake.inputs.homebrew-enabled.value;
- homebrew.onActivation.autoUpdate = true;
- homebrew.onActivation.upgrade = true;
- homebrew.onActivation.cleanup = "uninstall";
- homebrew.global.brewfile = true;
-
- homebrew.taps = [ "homebrew/cask-versions" "homebrew/services" ];
-
- homebrew.masApps = {
- Bitwarden = 1352778147;
- "Draw Things" = 6444050820;
- GrandPerspective = 1111570163;
- Reeder = 1529448980;
- Tailscale = 1475387142;
- Xcode = 497799835;
+ programs.fish = {
+ shellInit = ''
+ eval "$(${config.homebrew.brewPrefix}/brew shellenv fish)"
+ '';
+ interactiveShellInit = ''
+ if test -d (brew --prefix)"/share/fish/completions"
+ set -p fish_complete_path (brew --prefix)/share/fish/completions
+ end
+ if test -d (brew --prefix)"/share/fish/vendor_completions.d"
+ set -p fish_complete_path (brew --prefix)/share/fish/vendor_completions.d
+ end
+ '';
};
- homebrew.caskArgs.no_quarantine = true;
- homebrew.casks = [
- # system tools
- "alfred"
- # "bartender" -> dozer
- "dozer"
- "itsycal"
- "knockknock"
- "lulu"
- "protonvpn"
- # "rectangle" -> yabai
- "secretive"
- "shortcat"
- "stay"
- "utm"
- "yabai"
+ homebrew = {
+ enable = flake.inputs.homebrew-enabled.value;
+ onActivation.autoUpdate = true;
+ onActivation.upgrade = true;
+ onActivation.cleanup = "uninstall";
+ global.brewfile = true;
- # "tools for thought"
- "anytype"
+ taps = [ "homebrew/cask-versions" "homebrew/services" ];
- # design
- "krita"
- "macsvg"
+ masApps = {
+ Bitwarden = 1352778147;
+ "Draw Things" = 6444050820;
+ GrandPerspective = 1111570163;
+ Reeder = 1529448980;
+ Tailscale = 1475387142;
+ Xcode = 497799835;
+ };
- # browsers
- "arc"
- "firefox"
- "orion"
+ caskArgs.no_quarantine = true;
+ casks = [
+ # system tools
+ "alfred"
+ # "bartender" -> dozer
+ "dozer"
+ "knockknock"
+ "lulu"
+ "protonvpn"
+ "rectangle"
+ "secretive"
+ "shortcat"
+ "stay"
+ "utm"
- # messaging apps
- "signal"
+ # "tools for thought"
+ "anytype"
+ "obsidian"
- # editors and IDEs
- "lapce"
- "zed"
+ # design
+ "krita"
+ "macsvg"
- # terminal emulators
- "warp"
+ # browsers
+ "arc"
+ "firefox"
+ "orion"
- # peripheral tools
- "logi-options-plus"
- "qflipper"
- "remarkable"
- "via"
- ];
+ # messaging apps
+ "messenger"
+ "signal"
- # TODO: figure out `brew shellenv` settings
- # environment.variables = {
- # HOMEBREW_PREFIX = "";
- # HOMEBREW_CELLAR = "";
- # HOMEBREW_REPOSITORY = "";
- # };
- # environment.systemPath = [ ];
+ # editors and IDEs
+ "lapce"
+ "zed"
- # configure ssh to use secretive's agent
- # TODO: move to module?
- home-manager.users.${flake.config.people.me} =
- lib.mkIf (caskPresent "secretive" && config ? home-manager) (let
- socket =
- "${config.home.homeDirectory}/Library/Containers/com.maxgoedjen.Secretive.SecretAgent/Data/socket.ssh";
- in {
- home.sessionVariables.SSH_AUTH_SOCK = socket;
- programs.ssh.matchBlocks = {
- "*".extraOptions = { IdentityAgent = socket; };
- };
- });
+ # terminal emulators
+ "kitty"
+ "warp"
+
+ # peripheral tools
+ "logi-options-plus"
+ "qflipper"
+ "remarkable"
+ "via"
+ ];
+ };
}
diff --git a/darwin/system-defaults.nix b/darwin/system-defaults.nix
index 8ffd10e..59a85b2 100644
--- a/darwin/system-defaults.nix
+++ b/darwin/system-defaults.nix
@@ -1,50 +1,47 @@
{
- system.defaults.NSGlobalDomain = {
- AppleInterfaceStyleSwitchesAutomatically = true;
- NSAutomaticCapitalizationEnabled = false;
- _HIHideMenuBar = false;
- };
+ system.defaults = {
+ NSGlobalDomain = {
+ AppleInterfaceStyleSwitchesAutomatically = true;
+ NSAutomaticCapitalizationEnabled = false;
+ _HIHideMenuBar = false;
+ };
- # Firewall
- system.defaults.alf = {
- globalstate = 1;
- allowsignedenabled = 1;
- allowdownloadsignedenabled = 1;
- stealthenabled = 1;
- };
+ # firewall
+ alf = {
+ globalstate = 1;
+ allowsignedenabled = 1;
+ allowdownloadsignedenabled = 1;
+ stealthenabled = 1;
+ };
- # Dock and Mission Control
- system.defaults.dock = {
- autohide = true;
- expose-group-by-app = false;
- mru-spaces = false;
- tilesize = 80;
- # Disable all hot corners
- wvous-bl-corner = 1;
- wvous-br-corner = 1;
- wvous-tl-corner = 1;
- wvous-tr-corner = 1;
- };
+ dock = {
+ autohide = true;
+ expose-group-by-app = false;
+ mru-spaces = false;
+ tilesize = 80;
+ # disable all hot corners
+ wvous-bl-corner = 1;
+ wvous-br-corner = 1;
+ wvous-tl-corner = 1;
+ wvous-tr-corner = 1;
+ };
- # Finder
- system.defaults.finder = {
- AppleShowAllExtensions = true;
- FXEnableExtensionChangeWarning = true;
- };
+ finder = {
+ AppleShowAllExtensions = true;
+ FXEnableExtensionChangeWarning = true;
+ };
- # Login and lock screen
- system.defaults.loginwindow = {
- GuestEnabled = false;
- DisableConsoleAccess = true;
- };
+ loginwindow = {
+ GuestEnabled = false;
+ DisableConsoleAccess = true;
+ };
- # Spaces
- system.defaults.spaces.spans-displays = false;
+ spaces.spans-displays = false;
- # Trackpad
- system.defaults.trackpad = {
- Clicking = true;
- TrackpadRightClick = true;
- TrackpadThreeFingerDrag = true;
+ trackpad = {
+ Clicking = true;
+ TrackpadRightClick = true;
+ TrackpadThreeFingerDrag = true;
+ };
};
}
diff --git a/flake.lock b/flake.lock
index 579b408..dc2c0e6 100644
--- a/flake.lock
+++ b/flake.lock
@@ -53,11 +53,11 @@
]
},
"locked": {
- "lastModified": 1697995812,
- "narHash": "sha256-UDlK6p/6vAiVOQ92PR0ySDZBS3yiryrlJpSOw3b9Ito=",
+ "lastModified": 1698422527,
+ "narHash": "sha256-SDu3Xg263t3oXIyTaH0buOvFnKIDeZsvKDBtOz+jRbs=",
"owner": "nix-community",
"repo": "disko",
- "rev": "4122a18340094151d7911e838237ec7627f0d0c5",
+ "rev": "944d338d24a9d043a3f7461c30ee6cfe4f9cca30",
"type": "github"
},
"original": {
@@ -66,35 +66,99 @@
"type": "github"
}
},
- "fileicon-src": {
+ "fish-plugin-autopair": {
"flake": false,
"locked": {
- "lastModified": 1690207317,
- "narHash": "sha256-lkDivFJoeebFeA55kHHN9av5N7nz5zUiW+uAw74IM5U=",
- "owner": "mklement0",
- "repo": "fileicon",
- "rev": "9c41a44fac462f66a1194e223aa26e4c3b9b5ae3",
+ "lastModified": 1656950411,
+ "narHash": "sha256-qt3t1iKRRNuiLWiVoiAYOu+9E7jsyECyIqZJ/oRIT1A=",
+ "owner": "jorgebucaran",
+ "repo": "autopair.fish",
+ "rev": "4d1752ff5b39819ab58d7337c69220342e9de0e2",
"type": "github"
},
"original": {
- "owner": "mklement0",
- "repo": "fileicon",
+ "owner": "jorgebucaran",
+ "repo": "autopair.fish",
"type": "github"
}
},
- "fisher-src": {
+ "fish-plugin-colored-man-pages": {
"flake": false,
"locked": {
- "lastModified": 1692640630,
- "narHash": "sha256-e8gIaVbuUzTwKtuMPNXBT5STeddYqQegduWBtURLT3M=",
+ "lastModified": 1651274650,
+ "narHash": "sha256-ii9gdBPlC1/P1N9xJzqomrkyDqIdTg+iCg0mwNVq2EU=",
+ "owner": "PatrickF1",
+ "repo": "colored_man_pages.fish",
+ "rev": "f885c2507128b70d6c41b043070a8f399988bc7a",
+ "type": "github"
+ },
+ "original": {
+ "owner": "PatrickF1",
+ "repo": "colored_man_pages.fish",
+ "type": "github"
+ }
+ },
+ "fish-plugin-done": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1698312794,
+ "narHash": "sha256-7aeSE88tvLx64EWvHqLSikRjOjTrZRXj2fdK5vygsqA=",
+ "owner": "franciscolourenco",
+ "repo": "done",
+ "rev": "054347d2a4aa5e0e7920c850f5999651dc90219c",
+ "type": "github"
+ },
+ "original": {
+ "owner": "franciscolourenco",
+ "repo": "done",
+ "type": "github"
+ }
+ },
+ "fish-plugin-fish-abbr-tips": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1674487577,
+ "narHash": "sha256-F1t81VliD+v6WEWqj1c1ehFBXzqLyumx5vV46s/FZRU=",
+ "owner": "Gazorby",
+ "repo": "fish-abbreviation-tips",
+ "rev": "8ed76a62bb044ba4ad8e3e6832640178880df485",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Gazorby",
+ "repo": "fish-abbreviation-tips",
+ "type": "github"
+ }
+ },
+ "fish-plugin-fish-bang-bang": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1690139185,
+ "narHash": "sha256-oPPCtFN2DPuM//c48SXb4TrFRjJtccg0YPXcAo0Lxq0=",
+ "owner": "oh-my-fish",
+ "repo": "plugin-bang-bang",
+ "rev": "ec991b80ba7d4dda7a962167b036efc5c2d79419",
+ "type": "github"
+ },
+ "original": {
+ "owner": "oh-my-fish",
+ "repo": "plugin-bang-bang",
+ "type": "github"
+ }
+ },
+ "fish-plugin-replay": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1655689996,
+ "narHash": "sha256-bM6+oAd/HXaVgpJMut8bwqO54Le33hwO9qet9paK1kY=",
"owner": "jorgebucaran",
- "repo": "fisher",
- "rev": "2efd33ccd0777ece3f58895a093f32932bd377b6",
+ "repo": "replay.fish",
+ "rev": "bd8e5b89ec78313538e747f0292fcaf631e87bd2",
"type": "github"
},
"original": {
"owner": "jorgebucaran",
- "repo": "fisher",
+ "repo": "replay.fish",
"type": "github"
}
},
@@ -135,11 +199,11 @@
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
- "lastModified": 1696343447,
- "narHash": "sha256-B2xAZKLkkeRFG5XcHHSXXcP7To9Xzr59KXeZiRf4vdQ=",
+ "lastModified": 1698882062,
+ "narHash": "sha256-HkhafUayIqxXyHH1X8d9RDl1M2CkFgZLjKD3MzabiEo=",
"owner": "hercules-ci",
"repo": "flake-parts",
- "rev": "c9afaba3dfa4085dbd2ccb38dfade5141e33d9d4",
+ "rev": "8c9fa2545007b49a5db5f650ae91f227672c3877",
"type": "github"
},
"original": {
@@ -207,11 +271,11 @@
"systems": "systems_3"
},
"locked": {
- "lastModified": 1694529238,
- "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
+ "lastModified": 1685518550,
+ "narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=",
"owner": "numtide",
"repo": "flake-utils",
- "rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
+ "rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef",
"type": "github"
},
"original": {
@@ -220,6 +284,21 @@
"type": "github"
}
},
+ "ghostty": {
+ "locked": {
+ "lastModified": 1695482156,
+ "narHash": "sha256-PFyViLT7eCi/jN6fZ9kFUZF4mYye9Mplm/SEwhUvCDM=",
+ "owner": "clo4",
+ "repo": "ghostty-hm-module",
+ "rev": "3ccb4b02eb84316e7ccbf007a6e29495f7e6bee4",
+ "type": "github"
+ },
+ "original": {
+ "owner": "clo4",
+ "repo": "ghostty-hm-module",
+ "type": "github"
+ }
+ },
"gitignore": {
"inputs": {
"nixpkgs": [
@@ -251,11 +330,11 @@
"rust-overlay": "rust-overlay"
},
"locked": {
- "lastModified": 1697618705,
- "narHash": "sha256-BpAFX7mwV4/vpTlMLZtPICKeDPGLx1Q8s3zVZ8IEAkY=",
+ "lastModified": 1698790188,
+ "narHash": "sha256-sAp4RIto3fDjb/HJ4NR3HlHo3J8R7tK4/qSGYkhudUA=",
"owner": "helix-editor",
"repo": "helix",
- "rev": "e6d2835b0907102831a8979688a8464c064ff842",
+ "rev": "a069b928973aad99b85dffb9d5ade7dae4b58c43",
"type": "github"
},
"original": {
@@ -271,11 +350,11 @@
]
},
"locked": {
- "lastModified": 1697688028,
- "narHash": "sha256-d9CAOd9W2iTrgB31a8Dvyp6Vgn/gxASCNrD4Z9yzUOY=",
+ "lastModified": 1698873617,
+ "narHash": "sha256-FfGFcfbULwbK1vD+H0rslIOfmy4g8f2hXiPkQG3ZCTk=",
"owner": "nix-community",
"repo": "home-manager",
- "rev": "c5c1ea85181d2bb44e46e8a944a8a3f56ad88f19",
+ "rev": "48b0a30202516e25d9885525fbb200a045f23f26",
"type": "github"
},
"original": {
@@ -315,38 +394,6 @@
"type": "github"
}
},
- "kitty-icon": {
- "flake": false,
- "locked": {
- "lastModified": 1659349637,
- "narHash": "sha256-Vy+iLGnysrJMSLfkaYq15pb/wG4kIbfsXRrPgSc3OFs=",
- "owner": "DinkDonk",
- "repo": "kitty-icon",
- "rev": "269c0f0bd1c792cebc7821f299ce9250ed9bcd67",
- "type": "github"
- },
- "original": {
- "owner": "DinkDonk",
- "repo": "kitty-icon",
- "type": "github"
- }
- },
- "kitty-themes": {
- "flake": false,
- "locked": {
- "lastModified": 1696892900,
- "narHash": "sha256-W0K9fA+oTsdIgBwFlBZb2QqSvVSLh4/e5Xp/4rvDeXU=",
- "owner": "kovidgoyal",
- "repo": "kitty-themes",
- "rev": "2b4f8aa76ff07fde3648c666ed244c914bf0e155",
- "type": "github"
- },
- "original": {
- "owner": "kovidgoyal",
- "repo": "kitty-themes",
- "type": "github"
- }
- },
"nil": {
"inputs": {
"flake-utils": "flake-utils_2",
@@ -376,11 +423,11 @@
]
},
"locked": {
- "lastModified": 1697723594,
- "narHash": "sha256-W7lTC+kHGS1YCOutGpxUHF0cK66iY/GYr3INaTyVa/I=",
+ "lastModified": 1698429334,
+ "narHash": "sha256-Gq3+QabboczSu7RMpcy79RSLMSqnySO3wsnHQk4DfbE=",
"owner": "lnl7",
"repo": "nix-darwin",
- "rev": "19f75c2b45fbfc307ecfeb9dadc41a4c1e4fb980",
+ "rev": "afe83cbc2e673b1f08d32dd0f70df599678ff1e7",
"type": "github"
},
"original": {
@@ -413,26 +460,26 @@
},
"nixos-flake": {
"locked": {
- "lastModified": 1691408332,
- "narHash": "sha256-0IveIyIFaORG+SzMzXfl9A4IopQ4KDmThDeH34ryL0c=",
- "owner": "squirmy",
+ "lastModified": 1698598244,
+ "narHash": "sha256-YbvPFt+9CbCiqnuS0dTx+P+W1YRCqzhLXen94sef3Kk=",
+ "owner": "srid",
"repo": "nixos-flake",
- "rev": "531043e2c7825406fb271fb831abe656d0997706",
+ "rev": "f6b7757ad88483afca306c9f3bf387887fba7284",
"type": "github"
},
"original": {
- "owner": "squirmy",
+ "owner": "srid",
"repo": "nixos-flake",
"type": "github"
}
},
"nixpkgs": {
"locked": {
- "lastModified": 1697730408,
- "narHash": "sha256-Ww//zzukdTrwTrCUkaJA/NsaLEfUfQpWZXBdXBYfhak=",
+ "lastModified": 1698890957,
+ "narHash": "sha256-DJ+SppjpPBoJr0Aro9TAcP3sxApCSieY6BYBCoWGUX8=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "ff0a5a776b56e0ca32d47a4a47695452ec7f7d80",
+ "rev": "c082856b850ec60cda9f0a0db2bc7bd8900d708c",
"type": "github"
},
"original": {
@@ -445,11 +492,11 @@
"nixpkgs-lib": {
"locked": {
"dir": "lib",
- "lastModified": 1696019113,
- "narHash": "sha256-X3+DKYWJm93DRSdC5M6K5hLqzSya9BjibtBsuARoPco=",
+ "lastModified": 1698611440,
+ "narHash": "sha256-jPjHjrerhYDy3q9+s5EAsuhyhuknNfowY6yt6pjn9pc=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "f5892ddac112a1e9b3612c39af1b72987ee5783a",
+ "rev": "0cbe9f69c234a7700596e943bfae7ef27a31b735",
"type": "github"
},
"original": {
@@ -480,11 +527,11 @@
},
"nixpkgs-stable": {
"locked": {
- "lastModified": 1697851979,
- "narHash": "sha256-lJ8k4qkkwdvi+t/Xc6Fn74kUuobpu9ynPGxNZR6OwoA=",
+ "lastModified": 1685801374,
+ "narHash": "sha256-otaSUoFEMM+LjBI1XL/xGB5ao6IwnZOXc47qhIgJe8U=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "5550a85a087c04ddcace7f892b0bdc9d8bb080c8",
+ "rev": "c37ca420157f4abc31e26f436c1145f8951ff373",
"type": "github"
},
"original": {
@@ -505,11 +552,11 @@
"nixpkgs-stable": "nixpkgs-stable"
},
"locked": {
- "lastModified": 1697746376,
- "narHash": "sha256-gu77VkgdfaHgNCVufeb6WP9oqFLjwK4jHcoPZmBVF3E=",
+ "lastModified": 1698852633,
+ "narHash": "sha256-Hsc/cCHud8ZXLvmm8pxrXpuaPEeNaaUttaCvtdX/Wug=",
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
- "rev": "8cc349bfd082da8782b989cad2158c9ad5bd70fd",
+ "rev": "dec10399e5b56aa95fcd530e0338be72ad6462a0",
"type": "github"
},
"original": {
@@ -522,22 +569,26 @@
"inputs": {
"dark-mode-notify-src": "dark-mode-notify-src",
"disko": "disko",
- "fileicon-src": "fileicon-src",
- "fisher-src": "fisher-src",
+ "fish-plugin-autopair": "fish-plugin-autopair",
+ "fish-plugin-colored-man-pages": "fish-plugin-colored-man-pages",
+ "fish-plugin-done": "fish-plugin-done",
+ "fish-plugin-fish-abbr-tips": "fish-plugin-fish-abbr-tips",
+ "fish-plugin-fish-bang-bang": "fish-plugin-fish-bang-bang",
+ "fish-plugin-replay": "fish-plugin-replay",
"flake-parts": "flake-parts",
+ "ghostty": "ghostty",
"helix": "helix",
"home-manager": "home-manager",
"homebrew-enabled": "homebrew-enabled",
"ia-writer-family-src": "ia-writer-family-src",
- "kitty-icon": "kitty-icon",
- "kitty-themes": "kitty-themes",
"nil": "nil",
"nix-darwin": "nix-darwin",
"nixd": "nixd",
"nixos-flake": "nixos-flake",
"nixpkgs": "nixpkgs",
"pre-commit": "pre-commit",
- "starship-src": "starship-src"
+ "starship-src": "starship-src",
+ "terminal-themes": "terminal-themes"
}
},
"rust-overlay": {
@@ -593,11 +644,11 @@
"starship-src": {
"flake": false,
"locked": {
- "lastModified": 1697690660,
- "narHash": "sha256-c2BpZYIJ26xc6rq+rpSKtfyk1/L32PYnH31luK+7kAg=",
+ "lastModified": 1698919886,
+ "narHash": "sha256-rV1Sf5MbmHVn8sUEn07STsSdXoPZClTqGp3Tmkvp1+0=",
"owner": "starship",
"repo": "starship",
- "rev": "099539fd1aa2937e9507a318becffcbc685b83b8",
+ "rev": "6abc83decdf176842985b4daa5b09771c6b93415",
"type": "github"
},
"original": {
@@ -650,6 +701,22 @@
"repo": "default",
"type": "github"
}
+ },
+ "terminal-themes": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1697035060,
+ "narHash": "sha256-Qctds28CIMeyIc6VbWj1jEAlx/HZyBEZJj7u3aZeBog=",
+ "owner": "mbadolato",
+ "repo": "iTerm2-Color-Schemes",
+ "rev": "aed2a8f0565a51913e8ddc1731f25bc71978a1e0",
+ "type": "github"
+ },
+ "original": {
+ "owner": "mbadolato",
+ "repo": "iTerm2-Color-Schemes",
+ "type": "github"
+ }
}
},
"root": "root",
diff --git a/flake.nix b/flake.nix
index f1141a9..7bfce8a 100644
--- a/flake.nix
+++ b/flake.nix
@@ -9,12 +9,12 @@
nix-darwin.inputs.nixpkgs.follows = "nixpkgs";
home-manager.url = "github:nix-community/home-manager";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
- nixos-flake.url = "github:squirmy/nixos-flake";
- # nixos-flake.url = "github:srid/nixos-flake";
+ nixos-flake.url = "github:srid/nixos-flake";
pre-commit.url = "github:cachix/pre-commit-hooks.nix";
pre-commit.inputs.nixpkgs.follows = "nixpkgs";
disko.url = "github:nix-community/disko";
disko.inputs.nixpkgs.follows = "nixpkgs";
+ ghostty.url = "github:clo4/ghostty-hm-module";
# "flag" for toggling homebrew operations
# https://www.mat.services/posts/command-line-flake-arguments/
@@ -34,29 +34,32 @@
dark-mode-notify-src.url = "github:bouk/dark-mode-notify";
dark-mode-notify-src.flake = false;
- # modify custom macOS file icons
- fileicon-src.url = "github:mklement0/fileicon";
- fileicon-src.flake = false;
-
# iA writer fonts
ia-writer-family-src.url = "github:iaolo/iA-Fonts";
ia-writer-family-src.flake = false;
- # alternate kitty terminal icon
- kitty-icon.url = "github:DinkDonk/kitty-icon";
- kitty-icon.flake = false;
-
# standard kitty terminal themes
- kitty-themes.url = "github:kovidgoyal/kitty-themes";
- kitty-themes.flake = false;
-
- # fish shell package manager
- fisher-src.url = "github:jorgebucaran/fisher";
- fisher-src.flake = false;
+ terminal-themes.url = "github:mbadolato/iTerm2-Color-Schemes";
+ terminal-themes.flake = false;
# shell prompt
starship-src.url = "github:starship/starship";
starship-src.flake = false;
+
+ # extra fish shell plugins
+ fish-plugin-done.url = "github:franciscolourenco/done";
+ fish-plugin-done.flake = false;
+ fish-plugin-fish-abbr-tips.url = "github:Gazorby/fish-abbreviation-tips";
+ fish-plugin-fish-abbr-tips.flake = false;
+ fish-plugin-autopair.url = "github:jorgebucaran/autopair.fish";
+ fish-plugin-autopair.flake = false;
+ fish-plugin-replay.url = "github:jorgebucaran/replay.fish";
+ fish-plugin-replay.flake = false;
+ fish-plugin-fish-bang-bang.url = "github:oh-my-fish/plugin-bang-bang";
+ fish-plugin-fish-bang-bang.flake = false;
+ fish-plugin-colored-man-pages.url =
+ "github:PatrickF1/colored_man_pages.fish";
+ fish-plugin-colored-man-pages.flake = false;
};
outputs = { self, flake-parts, ... }@inputs:
@@ -68,16 +71,17 @@
./darwin
./home
./nixos
- ./people
./templates
+ ./users
];
flake = {
nixosConfigurations = {
- pihole = self.nixos-flake.lib.mkLinuxSystem {
- nixpkgs.hostPlatform = "aarch64-linux";
- imports = [ self.nixosModules.default ./systems/nixos/pihole.nix ];
- };
+ # pihole = self.nixos-flake.lib.mkLinuxSystem {
+ # nixpkgs.hostPlatform = "aarch64-linux";
+ # imports = [ self.nixosModules.default ./systems/nixos/pihole.nix ];
+ # };
};
+
darwinConfigurations = {
matbook = self.nixos-flake.lib.mkMacosSystem {
nixpkgs.hostPlatform = "aarch64-darwin";
@@ -90,7 +94,7 @@
yelpbook-m1 = self.nixos-flake.lib.mkMacosSystem {
nixpkgs.hostPlatform = "aarch64-darwin";
- people.me = "mess";
+ users.me = "mess";
imports = [
self.darwinModules.default
./systems/darwin/m1.nix
diff --git a/home/default.nix b/home/default.nix
index ab998c4..3cc2cdd 100644
--- a/home/default.nix
+++ b/home/default.nix
@@ -4,16 +4,18 @@
home.enableNixpkgsReleaseCheck = true;
home.stateVersion = "22.05";
imports = [
- ./extras/helix/auto-theme.nix
- ./extras/kitty/auto-theme.nix
- ./extras/kitty/fix-icon.nix
- ./extras/kitty/nerd-font.nix
+ # misc file configuration
./files.nix
+ # misc program configuration
+ ./programs.nix
+ # per-program configurations
./fish.nix
+ ./ghostty.nix
./git.nix
./helix.nix
./kitty.nix
- ./programs.nix
+ ./pijul.nix
+ ./ssh.nix
# ./starship-symbols.nix
./starship.nix
];
diff --git a/home/extras/helix/auto-theme.nix b/home/extras/helix/auto-theme.nix
index b9c6885..09cca9f 100644
--- a/home/extras/helix/auto-theme.nix
+++ b/home/extras/helix/auto-theme.nix
@@ -1,26 +1,24 @@
{ config, pkgs, lib, ... }:
-
let
cfg = config.programs.helix;
tomlFormat = pkgs.formats.toml { };
- inherit (lib) mkIf mkEnableOption mkOption types;
in {
options.programs.helix = {
autoTheme.enable =
- mkEnableOption "Automatically switch helix theme with night mode";
+ lib.mkEnableOption "Automatically switch helix theme with night mode";
- autoTheme.light = mkOption {
- type = types.str;
+ autoTheme.light = lib.mkOption {
+ type = lib.types.str;
description = "Light mode theme";
};
- autoTheme.dark = mkOption {
- type = types.str;
+ autoTheme.dark = lib.mkOption {
+ type = lib.types.str;
description = "Dark mode theme";
};
};
- config = mkIf (cfg.enable && cfg.autoTheme.enable) {
+ config = lib.mkIf (cfg.enable && cfg.autoTheme.enable) {
xdg.configFile = {
"helix/light.toml".source = tomlFormat.generate "helix-autotheme"
(cfg.settings // { theme = cfg.autoTheme.light; });
diff --git a/home/extras/kitty/auto-theme.nix b/home/extras/kitty/auto-theme.nix
index 5579bb0..c675e37 100644
--- a/home/extras/kitty/auto-theme.nix
+++ b/home/extras/kitty/auto-theme.nix
@@ -7,7 +7,7 @@ let
# If shell is running in a Kitty window set the colors.
if [ -n "$KITTY_WINDOW_ID" ]; then
kitty @ --to $KITTY_LISTEN_ON set-colors --all --configured \
- ${cfg.colors.color-pkg}/"$1".conf &
+ ${cfg.colors.colors-path}/"$1".conf &
fi
'';
term-light = pkgs.writeShellScriptBin "term-light" ''
@@ -16,12 +16,11 @@ let
term-dark = pkgs.writeShellScriptBin "term-dark" ''
${term-background}/bin/term-background ${cfg.colors.dark-name}
'';
- inherit (lib) mkIf mkOption types;
in {
options.programs.kitty = {
colors = {
- enable = mkOption {
- type = types.bool;
+ enable = lib.mkOption {
+ type = lib.types.bool;
default = false;
description = ''
When enabled, commands term-dark and term-light
@@ -35,20 +34,28 @@ in {
'';
};
- color-pkg = mkOption {
- type = types.package;
- default = pkgs.kitty-colors;
- description = "Package from which to load kitty colors.";
+ colors-path = lib.mkOption {
+ type = lib.types.path;
+ default = "${pkgs.terminal-colors}/kitty";
+ description = "Path from which to load kitty colors.";
};
- light-name = mkOption {
- type = types.str;
+ color-pkg-path = lib.mkOption {
+ type = lib.types.optional lib.types.path;
+ default = null;
+ description = ''
+ Path to kitty colors within color-pkgs.
+ '';
+ };
+
+ light-name = lib.mkOption {
+ type = lib.types.str;
default = "light";
description = "The name to use for the light colorscheme.";
};
- dark-name = mkOption {
- type = types.str;
+ dark-name = lib.mkOption {
+ type = lib.types.str;
default = "dark";
description = "The name to use for the dark colorscheme.";
};
@@ -56,18 +63,15 @@ in {
};
- config = mkIf cfg.enable {
- home.packages =
- mkIf cfg.colors.enable [ term-light term-dark term-background ];
+ config = lib.mkIf (cfg.enable && cfg.colors.enable) {
+ home.packages = [ term-light term-dark term-background ];
- programs.kitty.settings = mkIf cfg.colors.enable {
+ programs.kitty.settings = {
allow_remote_control = "yes";
listen_on = "unix:/tmp/mykitty";
};
- xdg.configFile."kitty/macos-launch-services-cmdline" =
- mkIf (pkgs.stdenv.isDarwin && cfg.colors.enable) {
- text = "--listen-on unix:/tmp/mykitty";
- };
+ xdg.configFile."kitty/macos-launch-services-cmdline".text =
+ lib.mkIf pkgs.stdenv.isDarwin "--listen-on unix:/tmp/mykitty";
};
}
diff --git a/home/extras/kitty/fix-icon.nix b/home/extras/kitty/fix-icon.nix
deleted file mode 100644
index 347eed7..0000000
--- a/home/extras/kitty/fix-icon.nix
+++ /dev/null
@@ -1,40 +0,0 @@
-{ config, pkgs, lib, ... }:
-let
- cfg = config.programs.kitty;
- inherit (lib) hm mkIf mkOption types;
-in {
- options.programs.kitty.fixIcon = {
- enable = mkOption {
- type = types.bool;
- default = false;
- description = ''
- When enabled, uses fileicon to fixup the icon.
- '';
- };
- appPath = mkOption {
- type = types.str;
- default = null;
- description = "Path to kitty.app";
- };
- iconPath = mkOption {
- type = types.str;
- default = null;
- description = "Path to kitty icns";
- };
- };
-
- config = mkIf cfg.enable {
- home.activation = mkIf (pkgs.stdenv.isDarwin && cfg.fixIcon.enable) {
- cleanupKittyIcon =
- hm.dag.entryBetween [ "darwinApps" ] [ "writeBoundary" ] ''
- if ${pkgs.fileicon} test ${cfg.fixIcon.appPath};
- then
- $DRY_RUN_CMD sudo ${pkgs.fileicon} rm ${cfg.fixIcon.appPath}
- fi
- '';
- fixKittyIcon = hm.dag.entryAfter [ "darwinApps" ] ''
- $DRY_RUN_CMD sudo ${pkgs.fileicon} set ${cfg.fixIcon.appPath} ${cfg.fixIcon.iconPath}
- '';
- };
- };
-}
diff --git a/home/extras/kitty/nerd-font.nix b/home/extras/kitty/nerd-font.nix
index eb9c3f5..20d495f 100644
--- a/home/extras/kitty/nerd-font.nix
+++ b/home/extras/kitty/nerd-font.nix
@@ -1,11 +1,9 @@
{ config, lib, ... }:
-let
- cfg = config.programs.kitty;
- inherit (lib) mkIf mkOption types;
+let cfg = config.programs.kitty;
in {
options.programs.kitty = {
- useSymbolsFromNerdFont = mkOption {
- type = types.str;
+ useSymbolsFromNerdFont = lib.mkOption {
+ type = lib.types.str;
default = "";
example = "JetBrainsMono Nerd Font";
description = ''
@@ -18,8 +16,8 @@ in {
};
};
- config = mkIf cfg.enable {
- programs.kitty.settings = mkIf (cfg.useSymbolsFromNerdFont != "") {
+ config = lib.mkIf (cfg.enable && cfg.useSymbolsFromNerdFont != "") {
+ programs.kitty.settings = {
# https://github.com/ryanoasis/nerd-fonts/wiki/Glyph-Sets-and-Code-Points
symbol_map =
"U+E5FA-U+E62B,U+E700-U+E7C5,U+F000-U+F2E0,U+E200-U+E2A9,U+F500-U+FD46,U+E300-U+E3EB,U+F400-U+F4A8,U+2665,U+26a1,U+F27C,U+E0A3,U+E0B4-U+E0C8,U+E0CA,U+E0CC-U+E0D2,U+E0D4,U+23FB-U+23FE,U+2B58,U+F300-U+F313,U+E000-U+E00D ${cfg.useSymbolsFromNerdFont}";
diff --git a/home/files.nix b/home/files.nix
index 326aca8..1f476f6 100644
--- a/home/files.nix
+++ b/home/files.nix
@@ -1,21 +1 @@
-{ flake, config, ... }: {
- xdg = { enable = true; };
-
- home.file = let inherit (flake.config.people) me users;
- in {
- ".pijulconfig".text = ''
- [author]
- name = "${me}"
- full_name = "${users.${me}.name}"
- email = "${users.${me}.email}"
- '';
- ".tarsnaprc".text = ''
- cachedir ${config.xdg.cacheHome}
- keyfile ${config.xdg.configHome}/tarsnap/read-write-delete.key
- nodump
- print-stats
- checkpoint-bytes 1G
- humanize-numbers
- '';
- };
-}
+{ xdg.enable = true; }
diff --git a/home/fish.nix b/home/fish.nix
index b13172e..bafd48a 100644
--- a/home/fish.nix
+++ b/home/fish.nix
@@ -1,169 +1,179 @@
-{ pkgs, lib, ... }: {
- programs.fish.enable = true;
+{ pkgs, lib, ... }:
+let nixConfigDirectory = "~/dotfiles.nix";
+in {
+ programs.fish = {
+ enable = true;
- programs.fish.plugins = [ pkgs.fishPlugins.fisher ];
- xdg.configFile."fish/fish_plugins".text = ''
- fishpkg/fish-humanize-duration
- franciscolourenco/done
- Gazorby/fish-abbreviation-tips
- jorgebucaran/autopair.fish
- jorgebucaran/replay.fish
- joseluisq/gitnow
- matthewess/fish-autovenv
- nbsmokee/fish-spin
- oh-my-fish/plugin-bang-bang
- PatrickF1/colored_man_pages.fish
- '';
+ # see flake.nix and pkgs/default.nix
+ plugins = pkgs.fishPlugins.flakePlugins;
- programs.fish.functions = {
- # user functions
- mkdcd = {
- argumentNames = [ "target" ];
- body = ''
- if test -z "$target"
- echo "mkdcd requires an argument" 1>&2
- return 1
- end
- mkdir -p $target
- cd $target
+ functions = {
+ # user functions
+ mkdcd = {
+ argumentNames = [ "target" ];
+ body = ''
+ if test -z "$target"
+ echo "mkdcd requires an argument" 1>&2
+ return 1
+ end
+ mkdir -p $target
+ cd $target
+ '';
+ };
+
+ from-dir = {
+ argumentNames = [ "dir" ];
+ body = ''
+ pushd $dir
+ set -e argv[1]
+ $argv
+ popd
+ '';
+ };
+
+ darwin-rebuild-edit-with = {
+ argumentNames = [ "editor" "file" ];
+ body = ''
+ if test -z "$file"
+ set file flake.nix
+ end
+ from-nix $editor $file
+ '';
+ };
+
+ # TODO: use these to implement !! and .. abbreviations
+ # blocked on additional support for abbr in home-manager
+ # https://github.com/nix-community/home-manager/issues/3706
+ #
+ # taken from
+ # https://fishshell.com/docs/current/relnotes.html#fish-3-6-0-released-january-7-2023
+ # last-history-item.body = ''
+ # echo $history[1]
+ # '';
+ # multi-cd.body = ''
+ # echo cd (string repeat -n (math (string length -- $argv[1]) - 1) ../)
+ # '';
+ } // lib.optionalAttrs pkgs.stdenv.isDarwin {
+ # light/dark mode helpers
+ # determine if dark mode is active
+ is-dark-mode.body = ''
+ defaults read -g AppleInterfaceStyle &>/dev/null
'';
- };
- from-dir = {
- argumentNames = [ "dir" ];
- body = ''
- pushd $dir
- set -e argv[1]
- $argv
- popd
- '';
- };
-
- darwin-rebuild-edit-with = {
- argumentNames = [ "editor" "file" ];
- body = ''
- if test -z "$file"
- set file flake.nix
- end
- from-nix $editor $file
- '';
- };
- } // lib.optionalAttrs pkgs.stdenv.isDarwin {
- # light/dark mode helpers
- # determine if dark mode is active
- is-dark-mode.body = ''
- defaults read -g AppleInterfaceStyle &>/dev/null
- '';
-
- # toggles `$term_background` between "light" and "dark". other Fish functions trigger when this
- # variable changes. we use a universal variable so that all instances of Fish have the same
- # value for the variable.
- toggle-background.body = ''
- if test "$term_background" = light
- set -U term_background dark
- else
- set -U term_background light
- end
- '';
-
- # set `$term_background` based on whether macOS is light or dark mode
- set-background-to-macOS.body = ''
- if is-dark-mode
- set -U term_background dark
- else
- set -U term_background light
- end
- '';
-
- # set `$term_background` based on an env var
- set-background-to-env = {
- argumentNames = [ "env_var" ];
- body = ''
- switch $$env_var
- case 1
- echo "Setting dark mode"
+ # toggles `$term_background` between "light" and "dark". other Fish functions trigger when this
+ # variable changes. we use a universal variable so that all instances of Fish have the same
+ # value for the variable.
+ toggle-background.body = ''
+ if test "$term_background" = light
set -U term_background dark
- case 0
- echo "Setting light mode"
+ else
set -U term_background light
end
'';
- };
- # sets shell utilities to light or dark colorscheme based on `$term_background`.
- set-shell-colors = {
- body = ''
- # Use correct theme for `btm` and `bat`
- if test "$term_background" = light
- alias btm "btm --color nord-light"
- set -xg BAT_THEME OneHalfLight
+ # set `$term_background` based on whether macOS is light or dark mode
+ set-background-to-macOS.body = ''
+ if is-dark-mode
+ set -U term_background dark
else
- alias btm "btm --color nord"
- set -xg BAT_THEME OneHalfDark
+ set -U term_background light
end
- # Set LS_COLORS
- set -xg LS_COLORS (${pkgs.vivid}/bin/vivid generate one-$term_background)
'';
- onVariable = "term_background";
+
+ # set `$term_background` based on an env var
+ set-background-to-env = {
+ argumentNames = [ "env_var" ];
+ body = ''
+ switch $$env_var
+ case 1
+ echo "Setting dark mode"
+ set -U term_background dark
+ case 0
+ echo "Setting light mode"
+ set -U term_background light
+ end
+ '';
+ };
+
+ # sets shell utilities to light or dark colorscheme based on `$term_background`.
+ set-shell-colors = {
+ body = ''
+ # Use correct theme for `btm` and `bat`
+ if test "$term_background" = light
+ alias btm "btm --color nord-light"
+ set -xg BAT_THEME OneHalfLight
+ else
+ alias btm "btm --color nord"
+ set -xg BAT_THEME OneHalfDark
+ end
+ # Set LS_COLORS
+ set -xg LS_COLORS (${pkgs.vivid}/bin/vivid generate one-$term_background)
+ '';
+ onVariable = "term_background";
+ };
};
+
+ shellAbbrs = {
+ ".." = "cd ..";
+
+ # darwin-rebuild build
+ drb = "from-nix darwin-rebuild build --flake .";
+ # darwin-rebuild switch full
+ drsf = "from-nix darwin-rebuild switch --flake .";
+ # darwin-rebuild switch (no homebrew)
+ drs =
+ "from-nix darwin-rebuild switch --flake . --override-input homebrew-enabled github:boolean-option/false";
+ # edit darwin-rebuild config in helix
+ drh = "darwin-rebuild-edit-with hx";
+ # edit darwin-rebuild config in zed
+ drz = "zed ${nixConfigDirectory}";
+
+ nb = "nix build";
+ nd = "nix develop";
+ nf = "nix flake";
+ nfc = "nix flake check";
+ nfi = "nix flake init";
+ nfs = "nix flake show";
+ nfu = "nix flake update";
+ nr = "nix run";
+ ns = "nix search nixpkgs";
+ nsh = "nix shell";
+ nrp = "nix repl --expr '{ pkgs = (import { }); }'";
+ g = "git";
+ stage = "git add .";
+ commit = "git commit";
+ push = "git push";
+ } // lib.optionalAttrs pkgs.stdenv.isDarwin {
+ tb = "toggle-background";
+ sb = "set-background-to-macOS";
+ };
+
+ shellAliases = {
+ # nix related
+ from-nix = "from-dir ${nixConfigDirectory}";
+
+ # other
+ ":q" = "exit";
+ cat = "bat --style=plain --paging=never";
+ du = "dust";
+ http = "xh";
+ https = "xhs";
+ top = "btm";
+ htop = "btm --basic";
+ colortest = "terminal-colors -o";
+ };
+
+ # configuration that should be above `loginShellInit` and `interactiveShellInit`.
+ shellInit = ''
+ set -U fish_term24bit 1
+ ${lib.optionalString pkgs.stdenv.isDarwin "set-background-to-macOS"}
+ '';
+
+ interactiveShellInit = ''
+ set -g fish_greeting (set_color red)"(づ ̄ ³ ̄)づ"(set_color yellow)" hello "(set_color blue)"(づ ̄ ³ ̄)づ"(set_color normal)
+ fish_vi_key_bindings
+ ${lib.optionalString pkgs.stdenv.isDarwin "set-shell-colors"}
+ '';
};
-
- # aliases
- # TODO: refactor into abbreviations
- programs.fish.shellAliases = let nixConfigDirectory = "~/dotfiles.nix";
- in {
- # Nix related
- from-nix = "from-dir ${nixConfigDirectory}";
- # darwin-rebuild build
- drb = "from-nix darwin-rebuild build --flake .";
- # darwin-rebuild switch full
- drsf = "from-nix darwin-rebuild switch --flake .";
- # darwin-rebuild switch (no homebrew)
- drs = "drsf --override-input homebrew-enabled github:boolean-option/false";
- # edit darwin-rebuild config in code/codium
- drc = "code ${nixConfigDirectory}";
- # edit darwin-rebuild config in (neo)vim
- drv = "vim ${nixConfigDirectory}";
- # edit darwin-rebuild config in helix
- drh = "darwin-rebuild-edit-with hx";
- flakeup = "nix flake update ${nixConfigDirectory}/";
- nb = "nix build";
- nd = "nix develop";
- nf = "nix flake";
- nr = "nix run";
- ns = "nix search nixpkgs";
- nsh = "nix shell";
- nrp = "nix repl --expr '{ pkgs = (import { }); }'";
-
- # Other
- ".." = "cd ..";
- ":q" = "exit";
- cat = "${pkgs.bat}/bin/bat --style=plain --paging=never";
- du = "${pkgs.du-dust}/bin/dust";
- g = "${pkgs.gitAndTools.git}/bin/git";
- ls = "${pkgs.eza}/bin/eza";
- ll = "ls -l --time-style long-iso --icons";
- la = "ll -a";
- http = "${pkgs.xh}/bin/xh";
- https = "${pkgs.xh}/bin/xhs";
- top = "${pkgs.bottom}/bin/btm";
- htop = "${pkgs.bottom}/bin/btm";
- colortest = "${pkgs.terminal-colors}/bin/terminal-colors -o";
- } // lib.optionalAttrs pkgs.stdenv.isDarwin {
- tb = "toggle-background";
- sb = "set-background-to-macOS";
- };
-
- # Configuration that should be above `loginShellInit` and `interactiveShellInit`.
- programs.fish.shellInit = ''
- set -U fish_term24bit 1
- ${lib.optionalString pkgs.stdenv.isDarwin "set-background-to-macOS"}
- '';
-
home.sessionVariables.VIRTUAL_ENV_DISABLE_PROMPT = "true";
- programs.fish.interactiveShellInit = ''
- set -g fish_greeting (set_color blue)"(づ ̄ ³ ̄)づ "(set_color cyan)"h"(set_color red)"e"(set_color yellow)"l"(set_color green)"l"(set_color magenta)"o "(set_color blue)"(づ ̄ ³ ̄)づ"(set_color normal)
- fish_vi_key_bindings
- ${lib.optionalString pkgs.stdenv.isDarwin "set-shell-colors"}
- '';
}
diff --git a/home/ghostty.nix b/home/ghostty.nix
new file mode 100644
index 0000000..6595858
--- /dev/null
+++ b/home/ghostty.nix
@@ -0,0 +1,32 @@
+{ flake, pkgs, lib, ... }:
+let font = "Rec Mono Duotone";
+in {
+ imports = [ flake.inputs.ghostty.homeModules.default ];
+
+ programs.ghostty = {
+ enable = true;
+ # ghostty is externally managed for now
+ package = null;
+ settings = {
+ # TODO: auto-theme
+ config-file = [ "${pkgs.terminal-themes}/ghostty/rose-pine" ];
+ # TODO: powerline replacements
+ font-family = font;
+ font-family-bold = "${font} Bold";
+ font-family-italic = "${font} Italic";
+ font-family-bold-italic = "${font} Bold Italic";
+ font-size = 15;
+ background-opacity = 0.95;
+ unfocused-split-opacity = 0.8;
+ window-decoration = true;
+ window-padding-x = 10;
+ window-padding-y = 10;
+ # use system clipboard on e.g. macOS
+ copy-on-select = "clipboard";
+ } // lib.optionalAttrs pkgs.stdenv.isDarwin {
+ background-blur-radius = 20;
+ macos-non-native-fullscreen = "visible-menu";
+ macos-option-as-alt = true;
+ };
+ };
+}
diff --git a/home/git.nix b/home/git.nix
index 3754893..615389b 100644
--- a/home/git.nix
+++ b/home/git.nix
@@ -1,20 +1,32 @@
{ flake, ... }:
-let inherit (flake.config.people) me users;
+let inherit (flake.config.users) me';
in {
- programs.git.enable = true;
+ programs.git = {
+ enable = true;
- programs.git.userEmail = users.${me}.email;
- programs.git.userName = users.${me}.name;
+ userEmail = me'.email;
+ userName = me'.name;
- programs.git.extraConfig = {
- diff.colorMoved = "default";
- pull.rebase = true;
- init.defaultBranch = "main";
- help.autocorrect = "prompt";
+ extraConfig = {
+ help.autocorrect = "prompt";
+ init.defaultBranch = "main";
+ pull.rebase = true;
+
+ # recommended by delta
+ diff.colorMoved = "default";
+ merge.conflictStyle = "diff3";
+ };
+
+ ignores = [ ".DS_Store" ".direnv" "result" ];
+
+ # enhanced diffs
+ delta = {
+ enable = true;
+ options = {
+ navigate = true;
+ line-numbers = true;
+ side-by-side = true;
+ };
+ };
};
-
- programs.git.ignores = [ ".DS_Store" ".direnv" "result" ];
-
- # Enhanced diffs
- programs.git.delta.enable = true;
}
diff --git a/home/helix.nix b/home/helix.nix
index 3d87c63..c5a777d 100644
--- a/home/helix.nix
+++ b/home/helix.nix
@@ -1,35 +1,39 @@
{ pkgs, lib, ... }: {
- programs.helix.enable = true;
+ imports = [ ./extras/helix/auto-theme.nix ];
+ programs.helix = {
+ enable = true;
+ defaultEditor = true;
- programs.helix.settings = {
- editor.bufferline = "multiple";
- editor.color-modes = true;
- editor.cursor-shape.insert = "bar";
- editor.cursorline = true;
- editor.indent-guides.render = true;
- editor.indent-guides.skip-levels = 1;
- editor.line-number = "relative";
- editor.soft-wrap.enable = true;
- editor.whitespace.render = {
- space = "none";
- tab = "all";
- newline = "all";
+ settings.editor = {
+ bufferline = "multiple";
+ color-modes = true;
+ cursor-shape.insert = "bar";
+ cursorline = true;
+ indent-guides = {
+ render = true;
+ skip-levels = 1;
+ };
+ line-number = "relative";
+ soft-wrap.enable = true;
+ whitespace.render = {
+ space = "none";
+ tab = "all";
+ newline = "all";
+ };
+ };
+
+ # grammars = [{
+ # name = "lalrpop";
+ # source = {
+ # git = "https://github.com/traxys/tree-sitter-lalrpop";
+ # rev = "7744b56f03ac1e5643fad23c9dd90837fe97291e";
+ # };
+ # }];
+
+ autoTheme = lib.mkIf pkgs.stdenv.isDarwin {
+ enable = true;
+ light = "rose_pine_dawn";
+ dark = "rose_pine";
};
};
-
- # programs.helix.grammars = [{
- # name = "lalrpop";
- # source = {
- # git = "https://github.com/traxys/tree-sitter-lalrpop";
- # rev = "7744b56f03ac1e5643fad23c9dd90837fe97291e";
- # };
- # }];
-
- programs.helix.autoTheme = lib.mkIf pkgs.stdenv.isDarwin {
- enable = true;
- light = "rose_pine_dawn";
- dark = "rose_pine";
- };
-
- home.sessionVariables.EDITOR = "hx";
}
diff --git a/home/kitty.nix b/home/kitty.nix
index d764250..d3b1475 100644
--- a/home/kitty.nix
+++ b/home/kitty.nix
@@ -1,7 +1,10 @@
{ pkgs, lib, ... }:
let font = "Rec Mono Duotone";
in {
+ imports = [ ./extras/kitty/auto-theme.nix ./extras/kitty/nerd-font.nix ];
programs.kitty.enable = true;
+ # using kitty from homebrew
+ programs.kitty.package = pkgs.emptyDirectory;
programs.kitty.settings = {
font_family = font;
@@ -44,9 +47,8 @@ in {
programs.kitty.useSymbolsFromNerdFont = "CaskaydiaCove Nerd Font";
programs.kitty.colors = {
enable = true;
- color-pkg = pkgs.kitty-themes;
- dark-name = "themes/rose-pine";
- light-name = "themes/rose-pine-dawn";
+ dark-name = "rose-pine";
+ light-name = "rose-pine-dawn";
};
programs.fish.functions.set-term-colors = {
body = ''
@@ -58,10 +60,4 @@ in {
'';
onVariable = "term_background";
};
- programs.kitty.fixIcon = lib.mkIf pkgs.stdenv.isDarwin {
- enable = true;
- # TODO: use path to kitty package?
- appPath = "~/Applications/Home\\ Manager\\ Apps/kitty.app";
- iconPath = "${pkgs.kitty-icon}/kitty-dark.icns";
- };
}
diff --git a/home/pijul.nix b/home/pijul.nix
new file mode 100644
index 0000000..03eb5c9
--- /dev/null
+++ b/home/pijul.nix
@@ -0,0 +1,19 @@
+{ flake, pkgs, ... }:
+let
+ inherit (flake.config.users) me me';
+ tomlFormat = pkgs.formats.toml { };
+in {
+ home = {
+ packages = [ pkgs.pijul ];
+ file = {
+ # hardcode .config because pijul doesn't support XDG (yet?)
+ ".config/pijul/config.toml".source = tomlFormat.generate "pijul-config" {
+ author = {
+ name = me;
+ full_name = me'.name;
+ inherit (me') email;
+ };
+ };
+ };
+ };
+}
diff --git a/home/programs.nix b/home/programs.nix
index 957748d..12ae558 100644
--- a/home/programs.nix
+++ b/home/programs.nix
@@ -1,64 +1,38 @@
{ pkgs, lib, ... }: {
- programs = {
- # a nicer cat
- bat = {
- enable = true;
- config = { style = "auto"; };
- };
- # load and unload environment variables depending on the current directory
- direnv = {
- enable = true;
- nix-direnv.enable = true;
- };
- nix-index = { enable = true; };
- nushell = { enable = true; };
- ssh = {
- enable = true;
- matchBlocks = {
- "*".extraOptions = lib.mkIf pkgs.stdenv.isDarwin {
- UseKeychain = "yes";
- AddKeysToAgent = "yes";
- };
- remarkable = {
- hostname = "10.11.99.1";
- user = "root";
- };
- };
- };
- vscode = {
- enable = false;
- # extensions = [ pijul-vscode ];
- };
- zoxide = { enable = true; };
- };
home.packages = builtins.attrValues ({
inherit (pkgs)
# GUI apps
- cinny discord-ptb lagrange obsidian slack zoom-us
+ discord-ptb obsidian slack zoom-us
# system tools
curl wget
- # lightweight session management
+ # `tmux` session alternative
abduco
# archive tool
atool
- # fancy version of `top` with ASCII graphs
+ # `top` alternative with ASCII graphs
bottom
- # fancy version of `du`
+ # `ncdu` alternative
+ diskonaut
+ # `dig` alternative. dogs _can_ look up
+ dogdns
+ # `du` alternative
du-dust
- # fancy version of `ls`, fork of now-unmaintained `exa`
- eza
- # fancy version of `find`
+ # `find` alternative
fd
- # wrapper for `ssh` that better at not dropping connections
- mosh
- # fancy version of `ps`
+ # `ping` with a graph
+ gping
+ # `ps` alternative
procs
# pipe progress viewer
pv
# command line file encryption
rage
+ # `sed` alternative for _batch file_ edits
+ sad
+ # `sed` alternative for _stream_ edits
+ sd
# backups for the truly paranoid
tarsnap
# terminal color support testing
@@ -67,31 +41,29 @@
unrar
# extract XZ archives
xz
+ # `tmux` multiplexing/layout alternative
+ zellij
- # dev tools
- # source code line counter
- cloc
- # command line tools for digitalocean
- doctl
+ # dev platforms
# command line tools for fly.io
flyctl
+ # command line tools for netlify
+ netlify-cli
+
+ # dev tools
+ # session recording
+ asciinema
# benchmarking tool
hyperfine
- # json processor
- jq
# task runner
just
- # alternative to `git`
- pijul
- # better version of `grep`
- ripgrep
- # rust implementation of `tldr`
- tealdeer
+ # source code line counter
+ tokei
# reimplementation of `httpie` in rust
xh
# useful nix related tools
- nixfmt nix-prefetch-git nix-tree
+ nix-prefetch-git nix-tree
# adding/managing alternative binary caches hosted by Cachix
cachix
# run software from nixpkgs without installing it
@@ -103,4 +75,45 @@
# useful macOS CLI commands
m-cli;
});
+
+ programs = {
+ # `cat` with wings
+ bat = {
+ enable = true;
+ config = { style = "auto"; };
+ };
+ # load and unload environment variables depending on the current directory
+ direnv = {
+ enable = true;
+ nix-direnv.enable = true;
+ };
+ # fork of `exa`, an `ls` alternative
+ eza = {
+ enable = true;
+ enableAliases = true;
+ icons = true;
+ git = true;
+ extraOptions = [ "--group-directories-first" ];
+ };
+ jq.enable = true;
+ man = {
+ enable = true;
+ generateCaches = true;
+ };
+ nix-index.enable = true;
+ nushell.enable = true;
+ # `grep` alternative
+ ripgrep.enable = true;
+ # cli help, `tldr` implementation
+ tealdeer = {
+ enable = true;
+ settings = {
+ display.use_pager = true;
+ updates.auto_update = true;
+ updates.auto_update_interval_hours = 24 * 7;
+ };
+ };
+ # `z` alternative
+ zoxide.enable = true;
+ };
}
diff --git a/home/services/dark-mode-notify.nix b/home/services/dark-mode-notify.nix
index 4a6453a..1413c5f 100644
--- a/home/services/dark-mode-notify.nix
+++ b/home/services/dark-mode-notify.nix
@@ -1,4 +1,4 @@
-{ config, pkgs, ... }: {
+{ config, pkgs, lib, ... }: {
# dark-mode-notify configuration
launchd.agents.dark-mode-notify =
let logPath = "${config.xdg.stateHome}/dark-mode-notify";
@@ -10,8 +10,8 @@
StandardErrorPath = "${logPath}/error.log";
StandardOutPath = "${logPath}/out.log";
ProgramArguments = [
- "${pkgs.dark-mode-notify}/bin/dark-mode-notify"
- "${pkgs.fish}/bin/fish"
+ "${lib.getExe pkgs.dark-mode-notify}"
+ "${lib.getExe pkgs.fish}"
"-c"
"set-background-to-env DARKMODE"
];
diff --git a/home/services/tarsnap.nix b/home/services/tarsnap.nix
index f095840..72a7e2a 100644
--- a/home/services/tarsnap.nix
+++ b/home/services/tarsnap.nix
@@ -1,4 +1,13 @@
{ config, pkgs, lib, ... }: {
+ # set configuration in ~ so tarsnap cli works interactively
+ home.file.".tarsnaprc".text = ''
+ cachedir ${config.xdg.cacheHome}
+ keyfile ${config.xdg.configHome}/tarsnap/read-write-delete.key
+ nodump
+ print-stats
+ checkpoint-bytes 1G
+ humanize-numbers
+ '';
# tarsnap periodic backup configuration
launchd.agents.tarsnap = let
logPath = "${config.xdg.stateHome}/tarsnap";
@@ -18,22 +27,13 @@
Label = "com.tarsnap.tarsnap";
StandardErrorPath = "${logPath}/error.log";
StandardOutPath = "${logPath}/out.log";
- StartCalendarInterval = [
- {
- # every sunday
- Weekday = 0;
- # at midnight
- Hour = 0;
- Minute = 0;
- }
- {
- # every wednesday
- Weekday = 3;
- # at noon
- Hour = 12;
- Minute = 0;
- }
- ];
+ StartCalendarInterval = [{
+ # every sunday
+ Weekday = 0;
+ # at midnight
+ Hour = 0;
+ Minute = 0;
+ }];
Program = lib.getExe tarsnapBackup;
};
};
diff --git a/home/ssh.nix b/home/ssh.nix
new file mode 100644
index 0000000..2e33fb2
--- /dev/null
+++ b/home/ssh.nix
@@ -0,0 +1,23 @@
+{ config, lib, pkgs, ... }:
+let
+ socket =
+ "${config.home.homeDirectory}/Library/Containers/com.maxgoedjen.Secretive.SecretAgent/Data/socket.ssh";
+in {
+ home.sessionVariables.SSH_AUTH_SOCK = socket;
+ programs.ssh = {
+ enable = true;
+ matchBlocks = {
+ # use the keychain on macOS
+ "*".extraOptions = lib.mkIf pkgs.stdenv.isDarwin {
+ UseKeychain = "yes";
+ AddKeysToAgent = "yes";
+ IdentityAgent = socket;
+ };
+ # entry for easy access to reMarkable tablet
+ remarkable = {
+ hostname = "10.11.99.1";
+ user = "root";
+ };
+ };
+ };
+}
diff --git a/home/starship.nix b/home/starship.nix
index 2e5647b..e278ad9 100644
--- a/home/starship.nix
+++ b/home/starship.nix
@@ -1,22 +1,29 @@
{
- # Starship Prompt
- # https://rycee.gitlab.io/home-manager/options.html#opt-programs.starship.enable
- programs.starship.enable = true;
-
- # Starship settings -------------------------------------------------------------------------- {{{
-
- programs.starship.settings = {
- # See docs here: https://starship.rs/config/
- # Symbols config configured in Flake.
-
- battery.display = [{
- threshold = 25;
- } # display battery information if charge is <= 25%
- ];
- directory.fish_style_pwd_dir_length = 1; # turn on fish directory truncation
- directory.truncation_length = 2; # number of directories not to truncate
- memory_usage.disabled =
- true; # because it includes cached memory it's reported as full a lot
+ programs.starship = {
+ enable = true;
+ settings = {
+ battery.display = [{
+ # display battery information if charge is <= 25%
+ threshold = 25;
+ }];
+ # turn on fish directory truncation
+ directory.fish_style_pwd_dir_length = 1;
+ # number of directories not to truncate
+ directory.truncation_length = 2;
+ # because it includes cached memory it's reported as full a lot
+ memory_usage.disabled = true;
+ };
};
- # }}}
+ # TODO: investigate how to get cmd_duration to show up in transient prompt
+ # transient prompt
+ # programs.starship.enableTransience = true;
+ # programs.fish.functions = {
+ # starship_transient_prompt_func.body = ''
+ # starship module directory
+ # starship module cmd_duration
+ # starship module line_break
+ # starship module character
+ # starship module line_break
+ # '';
+ # };
}
diff --git a/nixos/default.nix b/nixos/default.nix
index d64d4a7..0d500b5 100644
--- a/nixos/default.nix
+++ b/nixos/default.nix
@@ -2,7 +2,7 @@
flake.nixosModules = {
common.imports = [ ./nix.nix ./caches ];
- me = let inherit (config.people) me;
+ home = let inherit (config.users) me;
in {
home-manager.users.${me} = { imports = [ self.homeModules.linux ]; };
users.users.${me} = {
@@ -14,7 +14,7 @@
default.imports = [
self.nixosModules.home-manager
- self.nixosModules.me
+ self.nixosModules.home
self.nixosModules.common
./ssh-access.nix
];
diff --git a/nixos/nix.nix b/nixos/nix.nix
index 620a960..89f3a64 100644
--- a/nixos/nix.nix
+++ b/nixos/nix.nix
@@ -17,14 +17,15 @@
package = pkgs.nixUnstable;
nixPath = {
nixpkgs = "${flake.inputs.nixpkgs}";
- darwin = "${flake.inputs.darwin}";
+ } // lib.optionalAttrs pkgs.stdenv.isDarwin {
+ darwin = "${flake.inputs.nix-darwin}";
};
registry = {
nixpkgs.flake = flake.inputs.nixpkgs;
- self.flake = flake;
+ self.flake = flake.inputs.self;
};
settings = {
- max-jobs = "auto";
+ # TODO: automatic optimizing and gc
experimental-features = [ "nix-command" "flakes" "repl-flake" ];
extra-platforms = lib.mkIf (pkgs.system == "aarch64-darwin") [
"x86_64-darwin"
@@ -33,7 +34,7 @@
# wipe out the registry for purity, cf. https://github.com/MatthewCroughan/nixcfg/commit/ce86bee2755127a4fdaca91e5e037d3fe625cba9
flake-registry = builtins.toFile "empty-flake-registry.json"
''{"flakes":[],"version":2}'';
- trusted-users = [ flake.config.people.me "root" "@admin" "@wheel" ];
+ trusted-users = [ flake.config.users.me "root" "@admin" "@wheel" ];
};
};
}
diff --git a/nixos/ssh-access.nix b/nixos/ssh-access.nix
index 58dc654..61864f0 100644
--- a/nixos/ssh-access.nix
+++ b/nixos/ssh-access.nix
@@ -1,10 +1,10 @@
{ flake, ... }: {
# remote access
users.users = let
- inherit (flake.config) people;
- myKeys = people.users.${people.me}.sshKeys;
+ inherit (flake.config.users) me me';
+ myKeys = me'.sshKeys;
in {
root.openssh.authorizedKeys.keys = myKeys;
- ${people.me}.openssh.authorizedKeys.keys = myKeys;
+ ${me}.openssh.authorizedKeys.keys = myKeys;
};
}
diff --git a/pkgs/dark-mode-notify.nix b/pkgs/dark-mode-notify.nix
index 43143a1..052a51f 100644
--- a/pkgs/dark-mode-notify.nix
+++ b/pkgs/dark-mode-notify.nix
@@ -20,4 +20,5 @@ in stdenv.mkDerivation {
'';
meta.platforms = lib.platforms.darwin;
+ meta.mainProgram = "dark-mode-notify";
}
diff --git a/pkgs/default.nix b/pkgs/default.nix
index ed17f48..b0ea64e 100644
--- a/pkgs/default.nix
+++ b/pkgs/default.nix
@@ -1,17 +1,22 @@
inputs: self: super: {
- inherit (inputs) kitty-icon kitty-themes;
+ inherit (inputs) terminal-themes;
dark-mode-notify = self.callPackage ./dark-mode-notify.nix {
inherit (inputs) dark-mode-notify-src;
};
- fileicon = self.callPackage ./fileicon.nix { inherit (inputs) fileicon-src; };
+ # get flake inputs prefixed with fish-plugin- and inject them into fishPlugins as a single list
fishPlugins = super.fishPlugins // {
- fisher = {
- name = "fisher";
- src = inputs.fisher-src;
- };
+ flakePlugins = let
+ srcs =
+ self.lib.filterAttrs (input: _: self.lib.hasPrefix "fish-plugin-" input)
+ inputs;
+ in self.lib.mapAttrsToList (input: src: {
+ name = self.lib.removePrefix "fish-plugin-" input;
+ inherit src;
+ }) srcs;
};
ia-writer-family = self.callPackage ./ia-writer-family.nix {
inherit (inputs) ia-writer-family-src;
};
+ recursive-patched = self.callPackage ./recursive-patched.nix { };
yubiswitch = self.callPackage ./yubiswitch.nix { };
}
diff --git a/pkgs/fileicon.nix b/pkgs/fileicon.nix
deleted file mode 100644
index 8e3ff09..0000000
--- a/pkgs/fileicon.nix
+++ /dev/null
@@ -1,11 +0,0 @@
-{ buildNpmPackage, fileicon-src }:
-buildNpmPackage {
- pname = "fileicon";
- version = fileicon-src.shortRev;
-
- src = fileicon-src;
-
- npmDepsHash = "sha256-xQ/lTXomYARpawiMa8iccpq/7VUo/X/5Exovfjq3XHU=";
-
- meta = { };
-}
diff --git a/pkgs/recursive-patched.nix b/pkgs/recursive-patched.nix
new file mode 100644
index 0000000..8ff092c
--- /dev/null
+++ b/pkgs/recursive-patched.nix
@@ -0,0 +1,10 @@
+{ nerd-font-patcher, stdenv, recursive }:
+stdenv.mkDerivation {
+ name = "recursive-nerd-font-patched";
+ src = recursive;
+ nativeBuildInputs = [ nerd-font-patcher ];
+ buildPhase = ''
+ find -name RecMono\*.ttf -execdir nerd-font-patcher -c {} \;
+ '';
+ installPhase = "cp -a . $out";
+}
diff --git a/pkgs/yubiswitch.nix b/pkgs/yubiswitch.nix
index 508a2bc..110f633 100644
--- a/pkgs/yubiswitch.nix
+++ b/pkgs/yubiswitch.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, undmg, unzip }:
+{ lib, stdenv, fetchurl, undmg, unzip }:
let version = "0.16";
in stdenv.mkDerivation {
pname = "yubiswitch";
@@ -21,4 +21,6 @@ in stdenv.mkDerivation {
runHook postInstall
'';
+
+ meta.platforms = lib.platforms.darwin;
}
diff --git a/systems/darwin/m1.nix b/systems/darwin/m1.nix
index 6185ccf..e341257 100644
--- a/systems/darwin/m1.nix
+++ b/systems/darwin/m1.nix
@@ -1,6 +1,12 @@
{ pkgs, ... }: {
environment.systemPackages = [ pkgs.terminal-notifier ];
+ # networking settings
+ # TODO: do we need to add Tailscale, ProtonVPN, RNDIS (reMarkable), etc?
+ networking.knownNetworkServices =
+ [ "USB 10/100/1000 LAN" "Wi-Fi" "Thunderbolt Bridge" ];
+ # TODO: where / how to configure hostname etc?
+
# manage build users, package, and daemon
nix.configureBuildUsers = true;
services.nix-daemon.enable = true;
diff --git a/systems/darwin/work.nix b/systems/darwin/work.nix
index 466a649..5afef92 100644
--- a/systems/darwin/work.nix
+++ b/systems/darwin/work.nix
@@ -1,4 +1,5 @@
{ pkgs, lib, ... }: {
+ homebrew.casks = [ "itsycal" ];
home-manager.sharedModules = [{
launchd.agents.tarsnap.enable = lib.mkForce false;
home.packages = [ pkgs.yubiswitch ];
diff --git a/systems/nixos/pihole.nix b/systems/nixos/pihole.nix
index ffcd441..a4ac335 100644
--- a/systems/nixos/pihole.nix
+++ b/systems/nixos/pihole.nix
@@ -1 +1,9 @@
-{ }
+{ flake, ... }: {
+ imports = [ flake.inputs.disko.nixosModules.disko ];
+
+ disko.devices.disk = { };
+
+ # read why this matters:
+ # https://nixos.org/manual/nixos/stable/options.html#opt-system.stateVersion
+ system.stateVersion = "23.11";
+}
diff --git a/people/config.nix b/users/config.nix
similarity index 100%
rename from people/config.nix
rename to users/config.nix
diff --git a/people/default.nix b/users/default.nix
similarity index 65%
rename from people/default.nix
rename to users/default.nix
index c2c8ff1..140a38c 100644
--- a/people/default.nix
+++ b/users/default.nix
@@ -1,4 +1,4 @@
-{ lib, ... }:
+{ config, lib, ... }:
let
userSubmodule = lib.types.submodule {
options = {
@@ -17,7 +17,7 @@ let
};
};
};
- peopleSubmodule = lib.types.submodule {
+ usersSubmodule = lib.types.submodule {
options = {
users = lib.mkOption { type = lib.types.attrsOf userSubmodule; };
me = lib.mkOption {
@@ -30,10 +30,21 @@ let
Should be a key into the `users` attribute set.
'';
};
+ me' = lib.mkOption {
+ type = userSubmodule;
+ description = ''
+ The rest of the user data for `me`.
+ '';
+ readOnly = true;
+ };
};
};
in {
# TODO: can we hack in an assertion that `me` is a key in `users`?
- options = { people = lib.mkOption { type = peopleSubmodule; }; };
- config = { people = import ./config.nix; };
+ options = { users = lib.mkOption { type = usersSubmodule; }; };
+ config = {
+ users = (import ./config.nix) // {
+ me' = lib.mkDefault config.users.users.${config.users.me};
+ };
+ };
}