Init
This commit is contained in:
94
README.md
Normal file
94
README.md
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
# Nix macOS Starter
|
||||||
|
|
||||||
|
A beginner-friendly Nix configuration for macOS using flakes, nix-darwin, Home Manager, and Mise.
|
||||||
|
|
||||||
|
## About
|
||||||
|
|
||||||
|
A clean, well-documented starting point for managing your macOS system declaratively with Nix. Includes sensible defaults for development tools, shell configuration, and system settings.
|
||||||
|
|
||||||
|
**Author:** Ben Gubler
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
1. **Install Nix** using the [Determinate Systems installer](https://docs.determinate.systems/#products) (download the graphical installer for macOS). After installation, restart your terminal.
|
||||||
|
|
||||||
|
**Note:** Homebrew is managed declaratively via nix-homebrew - if you already have it installed, it will auto-migrate. Otherwise, it's installed automatically.
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
### 1. Clone and Configure
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Clone the repository
|
||||||
|
git clone https://github.com/nebrelbug/nix-macos-starter ~/.config/nix
|
||||||
|
cd ~/.config/nix
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Customize Your Configuration
|
||||||
|
|
||||||
|
**For Intel Mac Users:** Change the system architecture in `flake.nix` from `"aarch64-darwin"` to `"x86_64-darwin"` on line 28.
|
||||||
|
|
||||||
|
**Replace all placeholders:**
|
||||||
|
|
||||||
|
- `flake.nix`: `YOUR_USERNAME` (this sets the username for the entire system)
|
||||||
|
- `home/git.nix`: `YOUR_NAME`, `YOUR_EMAIL`
|
||||||
|
|
||||||
|
### 3. Apply the Configuration
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build and switch to the configuration
|
||||||
|
darwin-rebuild switch --flake .#my-macbook
|
||||||
|
|
||||||
|
# Or use the alias after initial setup
|
||||||
|
nix-switch
|
||||||
|
```
|
||||||
|
|
||||||
|
## What's Included
|
||||||
|
|
||||||
|
**Development Tools**: [mise](https://mise.jdx.dev/) for Node.js/Python/Rust/etc., Zsh with Starship prompt, essential CLI tools (curl, vim, tmux, htop, tree, ripgrep, gh, zoxide), code quality tools (nil, biome, nixfmt-rfc-style)
|
||||||
|
|
||||||
|
**GUI Applications**: Cursor, Ghostty, VS Code, Zed, Raycast, CleanShot, HiddenBar, BetterDisplay, Discord, Slack, 1Password, Brave Browser, Obsidian, Spotify
|
||||||
|
|
||||||
|
**System Configuration**: Git setup, macOS optimizations (Finder, Touch ID sudo), Nix settings (flakes, garbage collection), declarative Homebrew management
|
||||||
|
|
||||||
|
## Project Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
nix-macos-starter/
|
||||||
|
├── flake.nix # Main flake configuration and inputs
|
||||||
|
├── darwin/
|
||||||
|
│ ├── default.nix # Core macOS system configuration
|
||||||
|
│ ├── settings.nix # macOS UI/UX preferences and defaults
|
||||||
|
│ └── homebrew.nix # GUI applications via Homebrew
|
||||||
|
├── home/
|
||||||
|
│ ├── default.nix # Home Manager configuration entry point
|
||||||
|
│ ├── packages.nix # Package declarations and mise setup
|
||||||
|
│ ├── git.nix # Git configuration
|
||||||
|
│ ├── shell.nix # Shell configuration
|
||||||
|
│ └── mise.nix # Development runtime management
|
||||||
|
└── hosts/
|
||||||
|
└── my-macbook/
|
||||||
|
├── configuration.nix # Host-specific packages and settings
|
||||||
|
└── shell-functions.sh # Custom shell scripts
|
||||||
|
```
|
||||||
|
|
||||||
|
## Customization
|
||||||
|
|
||||||
|
**Add CLI Tools**: Edit `home/packages.nix` packages array
|
||||||
|
**Add GUI Apps**: Edit `darwin/homebrew.nix` casks array
|
||||||
|
**Add Development Tools**: Add `${pkgs.mise}/bin/mise use --global tool@version` to `home/mise.nix` activation script
|
||||||
|
**Host-Specific Config**: Use `hosts/my-macbook/configuration.nix` for machine-specific packages/apps and `custom-scripts.sh` for shell scripts
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
**"Command not found"**: Restart terminal
|
||||||
|
**Permission denied**: Use `sudo darwin-rebuild switch --flake .#my-macbook`
|
||||||
|
**Homebrew apps not installing**: nix-homebrew handles this automatically; ensure `/opt/homebrew/bin` in PATH
|
||||||
|
**Git config not applying**: Replace all `YOUR_*` placeholders, re-run darwin-rebuild
|
||||||
|
|
||||||
|
**Need help?** Check [Nix manual](https://nixos.org/manual/nix/stable/), [nix-darwin docs](https://github.com/LnL7/nix-darwin), [Home Manager options](https://nix-community.github.io/home-manager/options.html)
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
- [Ethan Niser](https://github.com/ethanniser) for his [config repo](https://github.com/ethanniser/config) which I used as a reference for this project.
|
||||||
|
- David Haupt's excellent [tutorial series](https://davi.sh/blog/2024/01/nix-darwin/) which (although slightly outdated) helped me understand the basics of Nix.
|
||||||
63
darwin/default.nix
Normal file
63
darwin/default.nix
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
self,
|
||||||
|
primaryUser,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
# ./homebrew.nix
|
||||||
|
./settings.nix
|
||||||
|
inputs.home-manager.darwinModules.home-manager
|
||||||
|
inputs.nix-homebrew.darwinModules.nix-homebrew
|
||||||
|
];
|
||||||
|
|
||||||
|
# nix config
|
||||||
|
nix = {
|
||||||
|
settings = {
|
||||||
|
experimental-features = [
|
||||||
|
"nix-command"
|
||||||
|
"flakes"
|
||||||
|
];
|
||||||
|
# disabled due to https://github.com/NixOS/nix/issues/7273
|
||||||
|
# auto-optimise-store = true;
|
||||||
|
};
|
||||||
|
enable = false; # using determinate installer
|
||||||
|
};
|
||||||
|
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
# homebrew installation manager
|
||||||
|
nix-homebrew = {
|
||||||
|
user = primaryUser;
|
||||||
|
enable = true;
|
||||||
|
autoMigrate = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# home-manager config
|
||||||
|
home-manager = {
|
||||||
|
useGlobalPkgs = true;
|
||||||
|
useUserPackages = true;
|
||||||
|
users.${primaryUser} = {
|
||||||
|
imports = [
|
||||||
|
../home
|
||||||
|
];
|
||||||
|
};
|
||||||
|
extraSpecialArgs = {
|
||||||
|
inherit inputs self primaryUser;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# macOS-specific settings
|
||||||
|
system.primaryUser = primaryUser;
|
||||||
|
users.users.${primaryUser} = {
|
||||||
|
home = "/Users/${primaryUser}";
|
||||||
|
shell = pkgs.zsh;
|
||||||
|
};
|
||||||
|
environment = {
|
||||||
|
systemPath = [
|
||||||
|
"/opt/homebrew/bin"
|
||||||
|
];
|
||||||
|
pathsToLink = [ "/Applications" ];
|
||||||
|
};
|
||||||
|
}
|
||||||
54
darwin/homebrew.nix
Normal file
54
darwin/homebrew.nix
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
homebrew = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
onActivation = {
|
||||||
|
autoUpdate = false;
|
||||||
|
upgrade = true;
|
||||||
|
cleanup = "zap";
|
||||||
|
};
|
||||||
|
|
||||||
|
caskArgs.no_quarantine = true;
|
||||||
|
global.brewfile = true;
|
||||||
|
|
||||||
|
# homebrew is best for GUI apps
|
||||||
|
# nixpkgs is best for CLI tools
|
||||||
|
casks = [
|
||||||
|
# OS enhancements
|
||||||
|
"aerospace"
|
||||||
|
"cleanshot"
|
||||||
|
"hiddenbar"
|
||||||
|
"raycast"
|
||||||
|
"betterdisplay"
|
||||||
|
|
||||||
|
# dev
|
||||||
|
"cursor"
|
||||||
|
"ghostty"
|
||||||
|
"visual-studio-code"
|
||||||
|
"zed"
|
||||||
|
|
||||||
|
# messaging
|
||||||
|
"discord"
|
||||||
|
"slack"
|
||||||
|
"signal"
|
||||||
|
|
||||||
|
# other
|
||||||
|
"1password"
|
||||||
|
"anki"
|
||||||
|
"brave-browser"
|
||||||
|
"obsidian"
|
||||||
|
"protonvpn"
|
||||||
|
"spotify"
|
||||||
|
"thebrowsercompany-dia"
|
||||||
|
"zen"
|
||||||
|
];
|
||||||
|
brews = [
|
||||||
|
"docker"
|
||||||
|
"colima"
|
||||||
|
];
|
||||||
|
taps = [
|
||||||
|
"nikitabobko/tap"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
35
darwin/settings.nix
Normal file
35
darwin/settings.nix
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{ self, ... }:
|
||||||
|
{
|
||||||
|
# touch ID for sudo
|
||||||
|
security.pam.services.sudo_local.touchIdAuth = true;
|
||||||
|
|
||||||
|
# system defaults and preferences
|
||||||
|
system = {
|
||||||
|
stateVersion = 6;
|
||||||
|
configurationRevision = self.rev or self.dirtyRev or null;
|
||||||
|
|
||||||
|
startup.chime = false;
|
||||||
|
|
||||||
|
defaults = {
|
||||||
|
loginwindow = {
|
||||||
|
GuestEnabled = false;
|
||||||
|
DisableConsoleAccess = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
finder = {
|
||||||
|
AppleShowAllFiles = true; # hidden files
|
||||||
|
AppleShowAllExtensions = true; # file extensions
|
||||||
|
_FXShowPosixPathInTitle = true; # title bar full path
|
||||||
|
ShowPathbar = true; # breadcrumb nav at bottom
|
||||||
|
ShowStatusBar = true; # file count & disk space
|
||||||
|
};
|
||||||
|
|
||||||
|
NSGlobalDomain = {
|
||||||
|
NSAutomaticSpellingCorrectionEnabled = false;
|
||||||
|
NSAutomaticCapitalizationEnabled = false;
|
||||||
|
NSAutomaticPeriodSubstitutionEnabled = false;
|
||||||
|
NSAutomaticWindowAnimationsEnabled = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
179
flake.lock
generated
Normal file
179
flake.lock
generated
Normal file
@@ -0,0 +1,179 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"brew-src": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1749511373,
|
||||||
|
"narHash": "sha256-7u1TdHQaUCzzgf/n8T3bQosuYXyNBEPU/3WQQqozE5o=",
|
||||||
|
"owner": "Homebrew",
|
||||||
|
"repo": "brew",
|
||||||
|
"rev": "7b4ef99fed96966269ee35994407fa4c06097a4d",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "Homebrew",
|
||||||
|
"ref": "4.5.6",
|
||||||
|
"repo": "brew",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"darwin": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1751313918,
|
||||||
|
"narHash": "sha256-HsJM3XLa43WpG+665aGEh8iS8AfEwOIQWk3Mke3e7nk=",
|
||||||
|
"owner": "lnl7",
|
||||||
|
"repo": "nix-darwin",
|
||||||
|
"rev": "e04a388232d9a6ba56967ce5b53a8a6f713cdfcf",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "lnl7",
|
||||||
|
"repo": "nix-darwin",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-parts": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs-lib": [
|
||||||
|
"nixvim",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1765835352,
|
||||||
|
"narHash": "sha256-XswHlK/Qtjasvhd1nOa1e8MgZ8GS//jBoTqWtrS1Giw=",
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"rev": "a34fae9c08a15ad73f295041fec82323541400a9",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"home-manager": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1752093218,
|
||||||
|
"narHash": "sha256-+3rXu8ewcNDi65/2mKkdSGrivQs5zEZVp5aYszXC0d0=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"rev": "206ed3c71418b52e176f16f58805c96e84555320",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"ref": "master",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nix-homebrew": {
|
||||||
|
"inputs": {
|
||||||
|
"brew-src": "brew-src"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1749952250,
|
||||||
|
"narHash": "sha256-V2ix0knpdJXirQ+4pjbnggjdSALTsFWGIP/NDpaQkdU=",
|
||||||
|
"owner": "zhaofengli",
|
||||||
|
"repo": "nix-homebrew",
|
||||||
|
"rev": "37126f06f4890f019af3d7606ce5d30a457afcd0",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "zhaofengli",
|
||||||
|
"repo": "nix-homebrew",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1751949589,
|
||||||
|
"narHash": "sha256-mgFxAPLWw0Kq+C8P3dRrZrOYEQXOtKuYVlo9xvPntt8=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "9b008d60392981ad674e04016d25619281550a9d",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1766653575,
|
||||||
|
"narHash": "sha256-TPgxCS7+hWc4kPhzkU5dD2M5UuPhLuuaMNZ/IpwKQvI=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "3c1016e6acd16ad96053116d0d3043029c9e2649",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixvim": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-parts": "flake-parts",
|
||||||
|
"nixpkgs": "nixpkgs_2",
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1766604046,
|
||||||
|
"narHash": "sha256-9Wvp2G/z0YYMn7oeN/E90pRtXJxQCo7EZrKKkNpwru4=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "nixvim",
|
||||||
|
"rev": "48b23bdae0770d86e1d0cb8ed830a0cb58810333",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "nixvim",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"darwin": "darwin",
|
||||||
|
"home-manager": "home-manager",
|
||||||
|
"nix-homebrew": "nix-homebrew",
|
||||||
|
"nixpkgs": "nixpkgs",
|
||||||
|
"nixvim": "nixvim"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
||||||
49
flake.nix
Normal file
49
flake.nix
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
{
|
||||||
|
description = "Nix Darwin Configuration";
|
||||||
|
inputs = {
|
||||||
|
# monorepo w/ recipes ("derivations")
|
||||||
|
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
||||||
|
|
||||||
|
# manages configs
|
||||||
|
home-manager.url = "github:nix-community/home-manager/master";
|
||||||
|
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
|
# system-level software and settings (macOS)
|
||||||
|
darwin.url = "github:lnl7/nix-darwin";
|
||||||
|
darwin.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
|
# declarative homebrew management
|
||||||
|
nix-homebrew.url = "github:zhaofengli/nix-homebrew";
|
||||||
|
|
||||||
|
# declarative Neovim
|
||||||
|
nixvim.url = "github:nix-community/nixvim";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs =
|
||||||
|
{
|
||||||
|
self,
|
||||||
|
darwin,
|
||||||
|
nixpkgs,
|
||||||
|
home-manager,
|
||||||
|
nix-homebrew,
|
||||||
|
nixvim,
|
||||||
|
...
|
||||||
|
}@inputs:
|
||||||
|
let
|
||||||
|
# TODO: replace with your username
|
||||||
|
primaryUser = "phil";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
# build darwin flake using:
|
||||||
|
# $ darwin-rebuild build --flake .#<name>
|
||||||
|
darwinConfigurations."cyper-mac" = darwin.lib.darwinSystem {
|
||||||
|
system = "x86_64-darwin"; # aarch64-darwin
|
||||||
|
modules = [
|
||||||
|
./darwin
|
||||||
|
./hosts/cyper-mac/configuration.nix
|
||||||
|
];
|
||||||
|
specialArgs = { inherit inputs self primaryUser; };
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
21
home/default.nix
Normal file
21
home/default.nix
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{ primaryUser, inputs, ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
inputs.nixvim.homeManagerModules.nixvim
|
||||||
|
./neovim
|
||||||
|
./packages.nix
|
||||||
|
./git.nix
|
||||||
|
./shell.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
home = {
|
||||||
|
username = primaryUser;
|
||||||
|
stateVersion = "25.11";
|
||||||
|
sessionVariables = {
|
||||||
|
# shared environment variables
|
||||||
|
};
|
||||||
|
|
||||||
|
# create .hushlogin file to suppress login messages
|
||||||
|
file.".hushlogin".text = "";
|
||||||
|
};
|
||||||
|
}
|
||||||
176
home/fastfetch.jsonc
Normal file
176
home/fastfetch.jsonc
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
|
||||||
|
"logo": {
|
||||||
|
"type": "kitty-icat",
|
||||||
|
"source": "~/Pictures/Avatar/avatar_no_bg.png",
|
||||||
|
//"height": 15,
|
||||||
|
"width": 40,
|
||||||
|
"padding": {
|
||||||
|
"top": 0,
|
||||||
|
"left": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"modules": [
|
||||||
|
"break",
|
||||||
|
{
|
||||||
|
"type": "custom",
|
||||||
|
"format": "\u001b[90m┌──────────────────────Hardware──────────────────────┐"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "host",
|
||||||
|
"key": " PC",
|
||||||
|
"keyColor": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "cpu",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "gpu",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "memory",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "disk",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "memory",
|
||||||
|
"key": "└ └",
|
||||||
|
"keyColor": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "custom",
|
||||||
|
"format": "\u001b[90m└────────────────────────────────────────────────────┘"
|
||||||
|
},
|
||||||
|
"break",
|
||||||
|
{
|
||||||
|
"type": "custom",
|
||||||
|
"format": "\u001b[90m┌──────────────────────Software──────────────────────┐"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "os",
|
||||||
|
"key": " OS",
|
||||||
|
"keyColor": "yellow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "kernel",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "yellow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "bios",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "yellow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "packages",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "yellow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "shell",
|
||||||
|
"key": "└ └",
|
||||||
|
"keyColor": "yellow"
|
||||||
|
},
|
||||||
|
"break",
|
||||||
|
{
|
||||||
|
"type": "de",
|
||||||
|
"key": " DE",
|
||||||
|
"keyColor": "blue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "lm",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "blue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "wm",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "blue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "wmtheme",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "blue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "terminal",
|
||||||
|
"key": "└ └",
|
||||||
|
"keyColor": "blue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "custom",
|
||||||
|
"format": "\u001b[90m└────────────────────────────────────────────────────┘"
|
||||||
|
},
|
||||||
|
"break",
|
||||||
|
{
|
||||||
|
"type": "custom",
|
||||||
|
"format": "\u001b[90m┌─────────────────Uptime / Age / DT──────────────────┐"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "command",
|
||||||
|
"key": " OS Age ",
|
||||||
|
"keyColor": "magenta",
|
||||||
|
"text": "birth_install=$(stat -c %W /); current=$(date +%s); time_progression=$((current - birth_install)); days_difference=$((time_progression / 86400)); echo $days_difference days"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "uptime",
|
||||||
|
"key": " Uptime ",
|
||||||
|
"keyColor": "magenta"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "datetime",
|
||||||
|
"key": " DateTime ",
|
||||||
|
"keyColor": "magenta"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "custom",
|
||||||
|
"format": "\u001b[90m└────────────────────────────────────────────────────┘"
|
||||||
|
},
|
||||||
|
"break",
|
||||||
|
{
|
||||||
|
"type": "custom",
|
||||||
|
"format": "\u001b[90m┌─────────────────────Networking─────────────────────┐"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "publicip",
|
||||||
|
"key": " Public ",
|
||||||
|
"keyColor": "magenta"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "localip",
|
||||||
|
"key": " Local ",
|
||||||
|
"keyColor": "magenta"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "dns",
|
||||||
|
"key": " DNS ",
|
||||||
|
"keyColor": "magenta"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "netio",
|
||||||
|
"key": " Net I/O ",
|
||||||
|
"keyColor": "magenta"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "custom",
|
||||||
|
"format": "\u001b[90m└────────────────────────────────────────────────────┘"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "colors",
|
||||||
|
"paddingLeft": 2,
|
||||||
|
"symbol": "circle"
|
||||||
|
},
|
||||||
|
"break",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
21
home/git.nix
Normal file
21
home/git.nix
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{ primaryUser, ... }:
|
||||||
|
{
|
||||||
|
programs.git = {
|
||||||
|
enable = true;
|
||||||
|
userName = "DerGrumpf"; # TODO replace
|
||||||
|
userEmail = "p.keier@beyerstedt-it.de"; # TODO replace
|
||||||
|
|
||||||
|
lfs.enable = true;
|
||||||
|
|
||||||
|
ignores = [ "**/.DS_STORE" ];
|
||||||
|
|
||||||
|
extraConfig = {
|
||||||
|
github = {
|
||||||
|
user = primaryUser;
|
||||||
|
};
|
||||||
|
init = {
|
||||||
|
defaultBranch = "main";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
13
home/neovim/default.nix
Normal file
13
home/neovim/default.nix
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{...}:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./treesitter.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
programs.nixvim = {
|
||||||
|
enable = true;
|
||||||
|
defaultEditor = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
5
home/neovim/tresitter.nix
Normal file
5
home/neovim/tresitter.nix
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
programs.nixvim.plugins.treesitter = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
31
home/packages.nix
Normal file
31
home/packages.nix
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home = {
|
||||||
|
packages = with pkgs; [
|
||||||
|
# dev tools
|
||||||
|
curl
|
||||||
|
wget
|
||||||
|
vim
|
||||||
|
htop
|
||||||
|
tree
|
||||||
|
ripgrep
|
||||||
|
gh # Move to git
|
||||||
|
zoxide # Move to fish
|
||||||
|
|
||||||
|
# programming languages
|
||||||
|
#mise # node, deno, bun, rust, python, etc.
|
||||||
|
|
||||||
|
# misc
|
||||||
|
nil # move to nixvim
|
||||||
|
biome # move to nixvim
|
||||||
|
nixfmt-rfc-style # move to nixvim
|
||||||
|
yt-dlp
|
||||||
|
ffmpeg
|
||||||
|
ollama # move to nixvim
|
||||||
|
|
||||||
|
# fonts
|
||||||
|
nerd-fonts.fira-code
|
||||||
|
nerd-fonts.fira-mono
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
139
home/shell.nix
Normal file
139
home/shell.nix
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
_: {
|
||||||
|
programs.kitty = {
|
||||||
|
enable = true;
|
||||||
|
themeFile = "Catppuccin-Mocha";
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
confirm_os_window_close = 0;
|
||||||
|
dynamic_background_opacity = true; # ctrl+shift+a>m/l
|
||||||
|
enable_audio_bell = false;
|
||||||
|
mouse_hide_wait = 3.0;
|
||||||
|
window_padding_width = 10;
|
||||||
|
|
||||||
|
background_opacity = 0.8;
|
||||||
|
background_blur = 5;
|
||||||
|
|
||||||
|
tab_bar_min_tabs = 1;
|
||||||
|
tab_bar_edge = "bottom";
|
||||||
|
tab_bar_style = "powerline"; # Should be changed to custom
|
||||||
|
tab_powerline_style = "slanted";
|
||||||
|
tab_title_template = "{title}{' :{}:'.format(num_windows) if num_windows > 1 else ''}";
|
||||||
|
|
||||||
|
symbol_map = let
|
||||||
|
mappings = [
|
||||||
|
"U+23FB-U+23FE"
|
||||||
|
"U+2B58"
|
||||||
|
"U+E200-U+E2A9"
|
||||||
|
"U+E0A0-U+E0A3"
|
||||||
|
"U+E0B0-U+E0BF"
|
||||||
|
"U+E0C0-U+E0C8"
|
||||||
|
"U+E0CC-U+E0CF"
|
||||||
|
"U+E0D0-U+E0D2"
|
||||||
|
"U+E0D4"
|
||||||
|
"U+E700-U+E7C5"
|
||||||
|
"U+F000-U+F2E0"
|
||||||
|
"U+2665"
|
||||||
|
"U+26A1"
|
||||||
|
"U+F400-U+F4A8"
|
||||||
|
"U+F67C"
|
||||||
|
"U+E000-U+E00A"
|
||||||
|
"U+F300-U+F313"
|
||||||
|
"U+E5FA-U+E62B"
|
||||||
|
];
|
||||||
|
in
|
||||||
|
(builtins.concatStringsSep "," mappings) + " Symbols Nerd Font";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.zsh = {
|
||||||
|
enable = true;
|
||||||
|
enableCompletion = true;
|
||||||
|
autosuggestion.enable = true;
|
||||||
|
syntaxHighlighting.enable = true;
|
||||||
|
|
||||||
|
shellAliases = {
|
||||||
|
la = "ls -la";
|
||||||
|
".." = "cd ..";
|
||||||
|
"nix-switch" = "sudo darwin-rebuild switch --flake ~/.config/nix";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.fish = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
shellAliases = {
|
||||||
|
la = "ls -la";
|
||||||
|
".." = "cd ..";
|
||||||
|
"nix-switch" = "sudo darwin-rebuild switch --flake ~/.config/nix";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.starship = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
add_newline = true;
|
||||||
|
command_timeout = 500;
|
||||||
|
|
||||||
|
format = "$username$hostname $directory $git_branch$git_status\n$character ";
|
||||||
|
right_format = "$cmd_duration";
|
||||||
|
|
||||||
|
username = {
|
||||||
|
style_user = "bold #cba6f7";
|
||||||
|
style_root = "bold #f38ba8";
|
||||||
|
format = "[┌](bold #a6e3a1)[$user]($style)";
|
||||||
|
show_always = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
hostname = {
|
||||||
|
style = "bold #74c7ec";
|
||||||
|
format = "[@](bold #fab387)[$hostname]($style)";
|
||||||
|
ssh_only = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
directory = {
|
||||||
|
style = "bold #a6e3a1";
|
||||||
|
truncation_length = 0;
|
||||||
|
truncation_symbol = "";
|
||||||
|
format = "[⤇ ](bold #f38ba8)[《$path 》]($style)";
|
||||||
|
};
|
||||||
|
|
||||||
|
git_branch = {
|
||||||
|
format = "[⟦$branch⟧]($style)";
|
||||||
|
style = "bold #f9e2af";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Git status module settings
|
||||||
|
git_status = {
|
||||||
|
format = "[[(*$conflicted$untracked$modified$staged$renamed$deleted)](red) ($ahead_behind$stashed)]($style)";
|
||||||
|
style = "bold #a6e3a1";
|
||||||
|
conflicted = "";
|
||||||
|
untracked = "";
|
||||||
|
modified = "";
|
||||||
|
staged = "";
|
||||||
|
renamed = "";
|
||||||
|
deleted = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Command duration module
|
||||||
|
cmd_duration = {
|
||||||
|
format = "[$duration]($style)";
|
||||||
|
style = "bold #cdd6f4";
|
||||||
|
min_time = 5000; # Only show if command takes longer than 5 seconds
|
||||||
|
};
|
||||||
|
|
||||||
|
# Character module (prompt symbol)
|
||||||
|
character = {
|
||||||
|
success_symbol = "[└──────⇴ ](bold #a6e3a1)";
|
||||||
|
error_symbol = "[└──────⇴ ](bold #f38ba8)";
|
||||||
|
};
|
||||||
|
|
||||||
|
nix_shell = {
|
||||||
|
format = "[$symbol$state( \($name\))]($style)";
|
||||||
|
symbol = "U+02744";
|
||||||
|
style = "bold #89dceb";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
home.file.".config/fastfetch/config.jsonc".source = ./fastfetch.jsonc;
|
||||||
|
}
|
||||||
29
hosts/cyper-mac/configuration.nix
Normal file
29
hosts/cyper-mac/configuration.nix
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
primaryUser,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
networking.hostName = "cyper-mac";
|
||||||
|
|
||||||
|
# host-specific homebrew casks
|
||||||
|
#homebrew.casks = [
|
||||||
|
# "slack"
|
||||||
|
#];
|
||||||
|
|
||||||
|
# host-specific home-manager configuration
|
||||||
|
home-manager.users.${primaryUser} = {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
graphite-cli
|
||||||
|
];
|
||||||
|
|
||||||
|
programs = {
|
||||||
|
zsh = {
|
||||||
|
initContent = ''
|
||||||
|
# Source shell functions
|
||||||
|
source ${./shell-functions.sh}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
13
hosts/cyper-mac/shell-functions.sh
Normal file
13
hosts/cyper-mac/shell-functions.sh
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# convenient shell functions
|
||||||
|
|
||||||
|
# quick navigation to git repo root
|
||||||
|
function cdroot() {
|
||||||
|
local root
|
||||||
|
root=$(git rev-parse --show-toplevel 2>/dev/null)
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
cd "$root"
|
||||||
|
else
|
||||||
|
echo "Not in a git repository"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user