fixed config for darwin
This commit is contained in:
		
							parent
							
								
									417b58e7b9
								
							
						
					
					
						commit
						57afd743b7
					
				
							
								
								
									
										221
									
								
								apps/aarch64-darwin/apply
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										221
									
								
								apps/aarch64-darwin/apply
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,221 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| RED='\033[0;31m' | ||||
| GREEN='\033[0;32m' | ||||
| YELLOW='\033[1;33m' | ||||
| NC='\033[0m' # No Color | ||||
| 
 | ||||
| # Determine the operating system | ||||
| export OS=$(uname) | ||||
| 
 | ||||
| # Primary network interface | ||||
| if [[ "$OS" != "Darwin" ]]; then | ||||
|   export PRIMARY_IFACE=$(ip -o -4 route show to default | awk '{print $5}') | ||||
|   echo -e "${GREEN}Found primary network interface $PRIMARY_IFACE${NC}" | ||||
| fi | ||||
| 
 | ||||
| # Custom print function | ||||
| _print() { | ||||
|   if [[ "$OS" == "Darwin" ]]; then | ||||
|     echo -e "$1" | ||||
|   else | ||||
|     echo "$1" | ||||
|   fi | ||||
| } | ||||
| 
 | ||||
| # Custom prompt function | ||||
| _prompt() { | ||||
|   local message="$1" | ||||
|   local variable="$2" | ||||
| 
 | ||||
|   _print "$message" | ||||
|   read -r $variable | ||||
| } | ||||
| 
 | ||||
| insert_secrets_output() { | ||||
|   local pattern="outputs = { self, darwin, nix-homebrew, homebrew-bundle, homebrew-core, homebrew-cask, home-manager, nixpkgs, disko, agenix } @inputs:" | ||||
|   local insert_text="secrets " | ||||
| 
 | ||||
|   awk -v pat="$pattern" -v insert="$insert_text" ' | ||||
|     $0 ~ pat { | ||||
|       sub(/} @inputs:/, ", " insert "} @inputs:"); # Replace the closing brace with the insert text followed by the brace | ||||
|       gsub(/ ,/, ","); # Correct any spaces before commas | ||||
|       print | ||||
|       next | ||||
|     } | ||||
|     { print } | ||||
|   ' flake.nix > flake.nix.tmp | ||||
| 
 | ||||
|   mv flake.nix.tmp flake.nix | ||||
| } | ||||
| 
 | ||||
| insert_secrets_input() { | ||||
|   # Define file path | ||||
|   FILE_PATH="flake.nix" | ||||
| 
 | ||||
|   # Backup the original file | ||||
|   cp "$FILE_PATH" "${FILE_PATH}.bak" | ||||
| 
 | ||||
|   # Temporary file for the text to insert | ||||
|   TEMP_FILE="temp_insert.txt" | ||||
| 
 | ||||
|   # Write the formatted text to the temporary file | ||||
| cat > "$TEMP_FILE" << 'EOF' | ||||
|     secrets = { | ||||
|       url = "git+ssh://git@github.com/%GITHUB_USER%/%GITHUB_SECRETS_REPO%.git"; | ||||
|       flake = false; | ||||
|     }; | ||||
| EOF | ||||
| 
 | ||||
|   # Check if the 'secrets' block already exists | ||||
|   if grep -q 'url = "git+ssh://git@github.com/%GITHUB_USER%/%GITHUB_SECRETS_REPO%.git"' "$FILE_PATH"; then | ||||
|       echo "The 'secrets' block already exists in the file." | ||||
|       rm "$TEMP_FILE" | ||||
|       rm "${FILE_PATH}.bak" | ||||
|       exit 0 | ||||
|   fi | ||||
| 
 | ||||
|   # Find the start and end line numbers of the 'disko' block | ||||
|   START_LINE=$(grep -n 'disko = {' "$FILE_PATH" | head -n 1 | cut -d: -f1) | ||||
|   END_LINE=$(tail -n +$START_LINE "$FILE_PATH" | grep -n '};' | head -n 1 | cut -d: -f1) | ||||
|   END_LINE=$((START_LINE + END_LINE - 1)) | ||||
| 
 | ||||
|   # Create a new file with the insertion | ||||
|   { | ||||
|       sed -n "1,${END_LINE}p" "$FILE_PATH" | ||||
|       cat "$TEMP_FILE" | ||||
|       sed -n "$((END_LINE + 1)),\$p" "$FILE_PATH" | ||||
|   } > "${FILE_PATH}.new" | ||||
| 
 | ||||
|   # Replace the original file with the new file | ||||
|   mv "${FILE_PATH}.new" "$FILE_PATH" | ||||
| 
 | ||||
|   # Clean up the temporary files | ||||
|   rm "$TEMP_FILE" | ||||
|   rm "${FILE_PATH}.bak" | ||||
| } | ||||
| 
 | ||||
| # Fetch username from the system | ||||
| export USERNAME=$(whoami) | ||||
| 
 | ||||
| # If the username is 'nixos' or 'root', ask the user for their username | ||||
| if [[ "$USERNAME" == "nixos" ]] || [[ "$USERNAME" == "root" ]]; then | ||||
|   _prompt "${YELLOW}You're running as $USERNAME. Please enter your desired username: ${NC}" USERNAME | ||||
| fi | ||||
| 
 | ||||
| # Check if git is available | ||||
| if command -v git >/dev/null 2>&1; then | ||||
|   # Fetch email and name from git config | ||||
|   export GIT_EMAIL=$(git config --get user.email) | ||||
|   export GIT_NAME=$(git config --get user.name) | ||||
| else | ||||
|   _print "${RED}Git is not available on this system.${NC}" | ||||
| fi | ||||
| 
 | ||||
| # If git email is not found or git is not available, ask the user | ||||
| if [[ -z "$GIT_EMAIL" ]]; then | ||||
|   _prompt "${YELLOW}Please enter your email: ${NC}" GIT_EMAIL | ||||
| fi | ||||
| 
 | ||||
| # If git name is not found or git is not available, ask the user | ||||
| if [[ -z "$GIT_NAME" ]]; then | ||||
|   _prompt "${YELLOW}Please enter your name: ${NC}" GIT_NAME | ||||
| fi | ||||
| 
 | ||||
| _prompt "${YELLOW}Please enter your Github username: ${NC}" GITHUB_USER | ||||
| _prompt "${YELLOW}Please enter your Github secrets repository name: ${NC}" GITHUB_SECRETS_REPO | ||||
| 
 | ||||
| export GITHUB_USER | ||||
| export GITHUB_SECRETS_REPO | ||||
| 
 | ||||
| select_boot_disk() { | ||||
|   local disks | ||||
|   local _boot_disk | ||||
| 
 | ||||
|   _print "${YELLOW}Available disks:${NC}" | ||||
|   disks=$(lsblk -nd --output NAME,SIZE | grep -v loop) | ||||
|   echo "$disks" | ||||
| 
 | ||||
|   # Warning message for data deletion | ||||
|   _print "${RED}WARNING: All data on the chosen disk will be erased during the installation!${NC}" | ||||
|   _prompt "${YELLOW}Please choose your boot disk (e.g., nvme0n1, sda): ${NC}" _boot_disk | ||||
| 
 | ||||
|   # Confirmation for disk selection to prevent accidental data loss | ||||
|   _print "${YELLOW}You have selected $_boot_disk as the boot disk. This will delete everything on this disk. Are you sure? (Y/N): ${NC}" | ||||
|   read -r confirmation | ||||
|   if [[ "$confirmation" =~ ^[Yy]$ ]]; then | ||||
|     export BOOT_DISK=$_boot_disk | ||||
|   else | ||||
|     _print "${RED}Disk selection cancelled by the user. Please run the script again to select the correct disk.${NC}" | ||||
|     exit 1 | ||||
|   fi | ||||
| } | ||||
| 
 | ||||
| # Set hostname and find primary disk if this is NixOS | ||||
| if [[ "$OS" != "Darwin" ]]; then | ||||
|   _prompt "${YELLOW}Please enter a hostname for the system: ${NC}" HOST_NAME | ||||
|   export HOST_NAME | ||||
|   select_boot_disk | ||||
| fi | ||||
| 
 | ||||
| # Confirmation step | ||||
| confirm_details() { | ||||
|   _print "${GREEN}Username: $USERNAME" | ||||
|   _print "Email: $GIT_EMAIL" | ||||
|   _print "Name: $GIT_NAME${NC}" | ||||
| 
 | ||||
|   if([[ "$OS" != "Darwin" ]]); then | ||||
|     _print "${GREEN}Primary interface: $PRIMARY_IFACE" | ||||
|     _print "Boot disk: $BOOT_DISK" | ||||
|     _print "Hostname: $HOST_NAME${NC}" | ||||
|   fi | ||||
| 
 | ||||
|   _print "${GREEN}Secrets repository: $GITHUB_USER/$GITHUB_SECRETS_REPO${NC}" | ||||
| 
 | ||||
|   _prompt "${YELLOW}Is this correct? (Y/N): ${NC}" choice | ||||
| 
 | ||||
|   case "$choice" in | ||||
|   [Nn] ) _print "${RED}Exiting script.${NC}" && exit 1;; | ||||
|   [Yy] ) _print "${GREEN}Continuing...${NC}";; | ||||
|   * ) _print "${RED}Invalid option. Exiting script.${NC}" && exit 1;; | ||||
|   esac | ||||
| } | ||||
| 
 | ||||
| # Call the confirmation function | ||||
| confirm_details | ||||
| 
 | ||||
| # Function to replace tokens in each file | ||||
| replace_tokens() { | ||||
|   local file="$1" | ||||
|   if [[ $(basename $1) != "apply" ]]; then | ||||
|     if [[ "$OS" == "Darwin" ]]; then | ||||
|       # macOS | ||||
|       LC_ALL=C LANG=C sed -i '' -e "s/%USER%/$USERNAME/g" "$file" | ||||
|       LC_ALL=C LANG=C sed -i '' -e "s/%EMAIL%/$GIT_EMAIL/g" "$file" | ||||
|       LC_ALL=C LANG=C sed -i '' -e "s/%NAME%/$GIT_NAME/g" "$file" | ||||
|       LC_ALL=C LANG=C sed -i '' -e "s/%GITHUB_USER%/$GITHUB_USER/g" "$file" | ||||
|       LC_ALL=C LANG=C sed -i '' -e "s/%GITHUB_SECRETS_REPO%/$GITHUB_SECRETS_REPO/g" "$file" | ||||
|     else | ||||
|       # Linux or other | ||||
|       sed -i -e "s/%USER%/$USERNAME/g" "$file" | ||||
|       sed -i -e "s/%EMAIL%/$GIT_EMAIL/g" "$file" | ||||
|       sed -i -e "s/%NAME%/$GIT_NAME/g" "$file" | ||||
|       sed -i -e "s/%INTERFACE%/$PRIMARY_IFACE/g" "$file" | ||||
|       sed -i -e "s/%DISK%/$BOOT_DISK/g" "$file" | ||||
|       sed -i -e "s/%HOST%/$HOST_NAME/g" "$file" | ||||
|       sed -i -e "s/%GITHUB_USER%/$GITHUB_USER/g" "$file" | ||||
|       sed -i -e "s/%GITHUB_SECRETS_REPO%/$GITHUB_SECRETS_REPO/g" "$file" | ||||
|     fi | ||||
|   fi | ||||
| } | ||||
| 
 | ||||
| # Insert secrets repo into flake | ||||
| insert_secrets_input | ||||
| insert_secrets_output | ||||
| 
 | ||||
| # Traverse directories and call replace_tokens on each Nix file | ||||
| export -f replace_tokens | ||||
| find . -type f -exec bash -c 'replace_tokens "$0"' {} \; | ||||
| 
 | ||||
| echo "$USERNAME" > /tmp/username.txt | ||||
| _print "${GREEN}User $USERNAME information applied.${NC}" | ||||
							
								
								
									
										19
									
								
								apps/aarch64-darwin/build
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										19
									
								
								apps/aarch64-darwin/build
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| #!/bin/sh -e | ||||
| 
 | ||||
| GREEN='\033[1;32m' | ||||
| YELLOW='\033[1;33m' | ||||
| RED='\033[1;31m' | ||||
| NC='\033[0m' | ||||
| 
 | ||||
| SYSTEM_TYPE="aarch64-darwin" | ||||
| FLAKE_SYSTEM="darwinConfigurations.${SYSTEM_TYPE}.system" | ||||
| 
 | ||||
| export NIXPKGS_ALLOW_UNFREE=1 | ||||
| 
 | ||||
| echo "${YELLOW}Starting build...${NC}" | ||||
| nix --extra-experimental-features 'nix-command flakes' build .#$FLAKE_SYSTEM $@ | ||||
| 
 | ||||
| echo "${YELLOW}Cleaning up...${NC}" | ||||
| unlink ./result | ||||
| 
 | ||||
| echo "${GREEN}Switch to new generation complete!${NC}" | ||||
							
								
								
									
										22
									
								
								apps/aarch64-darwin/build-switch
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										22
									
								
								apps/aarch64-darwin/build-switch
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,22 @@ | |||
| #!/bin/sh -e | ||||
| 
 | ||||
| GREEN='\033[1;32m' | ||||
| YELLOW='\033[1;33m' | ||||
| RED='\033[1;31m' | ||||
| NC='\033[0m' | ||||
| 
 | ||||
| SYSTEM_TYPE="aarch64-darwin" | ||||
| FLAKE_SYSTEM="darwinConfigurations.${SYSTEM_TYPE}.system" | ||||
| 
 | ||||
| export NIXPKGS_ALLOW_UNFREE=1 | ||||
| 
 | ||||
| echo "${YELLOW}Starting build...${NC}" | ||||
| nix --extra-experimental-features 'nix-command flakes' build .#$FLAKE_SYSTEM $@ | ||||
| 
 | ||||
| echo "${YELLOW}Switching to new generation...${NC}" | ||||
| ./result/sw/bin/darwin-rebuild switch --flake .#${SYSTEM_TYPE} $@ | ||||
| 
 | ||||
| echo "${YELLOW}Cleaning up...${NC}" | ||||
| unlink ./result | ||||
| 
 | ||||
| echo "${GREEN}Switch to new generation complete!${NC}" | ||||
							
								
								
									
										33
									
								
								apps/aarch64-darwin/check-keys
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										33
									
								
								apps/aarch64-darwin/check-keys
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,33 @@ | |||
| #!/usr/bin/env bash | ||||
| set -e | ||||
| 
 | ||||
| RED='\033[0;31m' | ||||
| GREEN='\033[0;32m' | ||||
| NC='\033[0m' | ||||
| 
 | ||||
| username=${USER} | ||||
| export SSH_DIR=/Users/${username}/.ssh | ||||
| 
 | ||||
| lint_keys() { | ||||
|   if [[ -f "${SSH_DIR}/id_ed25519" && -f "${SSH_DIR}/id_ed25519.pub" && -f "${SSH_DIR}/id_ed25519_agenix" && -f "${SSH_DIR}/id_ed25519_agenix.pub" ]]; then | ||||
|     echo -e "${GREEN}All SSH keys are present.${NC}" | ||||
|   else | ||||
|     echo -e "${RED}Some SSH keys are missing.${NC}" | ||||
|     if [[ ! -f "${SSH_DIR}/id_ed25519" ]]; then | ||||
|       echo -e "${RED}Missing: id_ed25519${NC}" | ||||
|     fi | ||||
|     if [[ ! -f "${SSH_DIR}/id_ed25519.pub" ]]; then | ||||
|       echo -e "${RED}Missing: id_ed25519.pub${NC}" | ||||
|     fi | ||||
|     if [[ ! -f "${SSH_DIR}/id_ed25519_agenix" ]]; then | ||||
|       echo -e "${RED}Missing: id_ed25519_agenix${NC}" | ||||
|     fi | ||||
|     if [[ ! -f "${SSH_DIR}/id_ed25519_agenix.pub" ]]; then | ||||
|       echo -e "${RED}Missing: id_ed25519_agenix.pub${NC}" | ||||
|     fi | ||||
|     echo -e "${GREEN}Run the createKeys command to generate the missing keys.${NC}" | ||||
|     exit 1 | ||||
|   fi | ||||
| } | ||||
| 
 | ||||
| lint_keys | ||||
							
								
								
									
										68
									
								
								apps/aarch64-darwin/copy-keys
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										68
									
								
								apps/aarch64-darwin/copy-keys
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,68 @@ | |||
| #!/usr/bin/env bash | ||||
| set -e | ||||
| 
 | ||||
| RED='\033[0;31m' | ||||
| GREEN='\033[0;32m' | ||||
| NC='\033[0m' | ||||
| 
 | ||||
| username=${USER} | ||||
| export SSH_DIR=/Users/${username}/.ssh | ||||
| 
 | ||||
| handle_no_usb() { | ||||
|   echo -e ${RED}No USB drive found or mounted.${NC}" | ||||
|   echo -e ${GREEN}If you have not yet set up your keys, run the script to generate new SSH keys.${NC}" | ||||
|   exit 1 | ||||
| } | ||||
| 
 | ||||
| mount_usb() { | ||||
|   MOUNT_PATH="" | ||||
|   for dev in $(diskutil list | grep -o 'disk[0-9]'); do | ||||
|     MOUNT_PATH="$(diskutil info /dev/${dev} | grep \"Mount Point\" | awk -F: '{print $2}' | xargs)" | ||||
|     if [ -n "${MOUNT_PATH}" ]; then | ||||
|       echo -e "${GREEN}USB drive found at ${MOUNT_PATH}.${NC}" | ||||
|       break | ||||
|     fi | ||||
|   done | ||||
| 
 | ||||
|   if [ -z "${MOUNT_PATH}" ]; then | ||||
|     echo -e "${RED}No USB drive found.${NC}" | ||||
|   fi | ||||
| } | ||||
| 
 | ||||
| copy_keys() { | ||||
|   if [ -n "${MOUNT_PATH}" ]; then | ||||
|     cp "${MOUNT_PATH}/id_ed25519_agenix.pub" ${SSH_DIR} | ||||
|     cp "${MOUNT_PATH}/id_ed25519_agenix" ${SSH_DIR} | ||||
|     chmod 600 ${SSH_DIR}/id_ed25519_{agenix,agenix.pub} | ||||
|   else | ||||
|     echo -e "${RED}No USB drive found. Aborting.${NC}" | ||||
|     exit 1 | ||||
|   fi | ||||
| } | ||||
| 
 | ||||
| setup_ssh_directory() { | ||||
|   mkdir -p ${SSH_DIR} | ||||
| } | ||||
| 
 | ||||
| set_keys() { | ||||
|   cp ${MOUNT_PATH}/id_ed25519_github.pub ${SSH_DIR}/id_ed25519.pub | ||||
|   cp ${MOUNT_PATH}/id_ed25519_github ${SSH_DIR}/id_ed25519 | ||||
|   chmod 600 ${SSH_DIR}/id_ed25519 | ||||
|   chmod 644 ${SSH_DIR}/id_ed25519.pub | ||||
| } | ||||
| 
 | ||||
| change_ownership() { | ||||
|   chown ${username}:staff ${SSH_DIR}/id_ed25519{,.pub} | ||||
|   chown ${username}:staff ${SSH_DIR}/id_ed25519_{agenix,agenix.pub} | ||||
| } | ||||
| 
 | ||||
| setup_ssh_directory | ||||
| mount_usb | ||||
| 
 | ||||
| if [ -z "${MOUNT_PATH}" ]; then | ||||
|   handle_no_usb | ||||
| else | ||||
|   copy_keys | ||||
|   set_keys | ||||
|   change_ownership | ||||
| fi | ||||
							
								
								
									
										46
									
								
								apps/aarch64-darwin/create-keys
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										46
									
								
								apps/aarch64-darwin/create-keys
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,46 @@ | |||
| #!/usr/bin/env bash | ||||
| set -e | ||||
| 
 | ||||
| RED='\033[0;31m' | ||||
| GREEN='\033[0;32m' | ||||
| NC='\033[0m' | ||||
| 
 | ||||
| username=${USER} | ||||
| export SSH_DIR=/Users/${username}/.ssh | ||||
| 
 | ||||
| setup_ssh_directory() { | ||||
|   mkdir -p ${SSH_DIR} | ||||
| } | ||||
| 
 | ||||
| prompt_for_key_generation() { | ||||
|   local key_name=$1 | ||||
|   if [[ -f "${SSH_DIR}/${key_name}" ]]; then | ||||
|     echo -e "${RED}Existing SSH key found for ${key_name}.${NC}" | ||||
|     cat "${SSH_DIR}/${key_name}.pub" | ||||
|     read -p "Do you want to replace it? (y/n) " -n 1 -r | ||||
|     echo | ||||
|     if [[ $REPLY =~ ^[Yy]$ ]]; then | ||||
|       return 0 # Indicate key should be replaced | ||||
|     else | ||||
|       return 1 # Indicate key should be kept | ||||
|     fi | ||||
|   fi | ||||
|   return 0 # Indicate no key exists, so it should be created | ||||
| } | ||||
| 
 | ||||
| generate_key() { | ||||
|   local key_name=$1 | ||||
|   if prompt_for_key_generation "$key_name"; then | ||||
|     ssh-keygen -t ed25519 -f "${SSH_DIR}/${key_name}" -N "" | ||||
|     chown ${username}:staff "${SSH_DIR}/${key_name}"{,.pub} | ||||
|   else | ||||
|     echo -e "${GREEN}Kept existing ${key_name}.${NC}" | ||||
|   fi | ||||
| } | ||||
| 
 | ||||
| setup_ssh_directory | ||||
| generate_key "id_ed25519" | ||||
| generate_key "id_ed25519_agenix" | ||||
| 
 | ||||
| echo -e "${GREEN}SSH key setup complete.${NC}" | ||||
| echo -e "${GREEN}Remember to add the necessary keys to Github or other services as required.${NC}" | ||||
							
								
								
									
										24
									
								
								apps/aarch64-darwin/rollback
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										24
									
								
								apps/aarch64-darwin/rollback
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,24 @@ | |||
| #!/bin/sh -e | ||||
| 
 | ||||
| GREEN='\033[1;32m' | ||||
| YELLOW='\033[1;33m' | ||||
| RED='\033[1;31m' | ||||
| NC='\033[0m' | ||||
| 
 | ||||
| FLAKE="Dustins-MBP" | ||||
| 
 | ||||
| echo "${YELLOW}Available generations:${NC}" | ||||
| /run/current-system/sw/bin/darwin-rebuild --list-generations | ||||
| 
 | ||||
| echo "${YELLOW}Enter the generation number for rollback:${NC}" | ||||
| read GEN_NUM | ||||
| 
 | ||||
| if [ -z "$GEN_NUM" ]; then | ||||
|   echo "${RED}No generation number entered. Aborting rollback.${NC}" | ||||
|   exit 1 | ||||
| fi | ||||
| 
 | ||||
| echo "${YELLOW}Rolling back to generation $GEN_NUM...${NC}" | ||||
| /run/current-system/sw/bin/darwin-rebuild switch --flake .#$FLAKE --switch-generation $GEN_NUM | ||||
| 
 | ||||
| echo "${GREEN}Rollback to generation $GEN_NUM complete!${NC}" | ||||
							
								
								
									
										1
									
								
								apps/aarch64-linux
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								apps/aarch64-linux
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | |||
| x86_64-linux | ||||
							
								
								
									
										142
									
								
								apps/x86_64-linux/apply
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										142
									
								
								apps/x86_64-linux/apply
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,142 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| RED='\033[0;31m' | ||||
| GREEN='\033[0;32m' | ||||
| YELLOW='\033[1;33m' | ||||
| NC='\033[0m' # No Color | ||||
| 
 | ||||
| # Determine the operating system | ||||
| export OS=$(uname) | ||||
| 
 | ||||
| # Primary network interface | ||||
| if [[ "$OS" != "Darwin" ]]; then | ||||
|   export PRIMARY_IFACE=$(ip -o -4 route show to default | awk '{print $5}') | ||||
|   echo -e "${GREEN}Found primary network interface $PRIMARY_IFACE${NC}" | ||||
| fi | ||||
| 
 | ||||
| # Custom print function | ||||
| _print() { | ||||
|   if [[ "$OS" == "Darwin" ]]; then | ||||
|     echo -e "$1" | ||||
|   else | ||||
|     echo "$1" | ||||
|   fi | ||||
| } | ||||
| 
 | ||||
| # Custom prompt function | ||||
| _prompt() { | ||||
|   local message="$1" | ||||
|   local variable="$2" | ||||
| 
 | ||||
|   _print "$message" | ||||
|   read -r $variable | ||||
| } | ||||
| 
 | ||||
| # Fetch username from the system | ||||
| export USERNAME=$(whoami) | ||||
| 
 | ||||
| # If the username is 'nixos' or 'root', ask the user for their username | ||||
| if [[ "$USERNAME" == "nixos" ]] || [[ "$USERNAME" == "root" ]]; then | ||||
|   _prompt "${YELLOW}You're running as $USERNAME. Please enter your desired username: ${NC}" USERNAME | ||||
| fi | ||||
| 
 | ||||
| # Check if git is available | ||||
| if command -v git >/dev/null 2>&1; then | ||||
|   # Fetch email and name from git config | ||||
|   export GIT_EMAIL=$(git config --get user.email) | ||||
|   export GIT_NAME=$(git config --get user.name) | ||||
| else | ||||
|   _print "${RED}Git is not available on this system.${NC}" | ||||
| fi | ||||
| 
 | ||||
| # If git email is not found or git is not available, ask the user | ||||
| if [[ -z "$GIT_EMAIL" ]]; then | ||||
|   _prompt "${YELLOW}Please enter your email: ${NC}" GIT_EMAIL | ||||
| fi | ||||
| 
 | ||||
| # If git name is not found or git is not available, ask the user | ||||
| if [[ -z "$GIT_NAME" ]]; then | ||||
|   _prompt "${YELLOW}Please enter your name: ${NC}" GIT_NAME | ||||
| fi | ||||
| 
 | ||||
| select_boot_disk() { | ||||
|   local disks | ||||
|   local _boot_disk | ||||
| 
 | ||||
|   _print "${YELLOW}Available disks:${NC}" | ||||
|   disks=$(lsblk -nd --output NAME,SIZE | grep -v loop) | ||||
|   echo "$disks" | ||||
| 
 | ||||
|   # Warning message for data deletion | ||||
|   _print "${RED}WARNING: All data on the chosen disk will be erased during the installation!${NC}" | ||||
|   _prompt "${YELLOW}Please choose your boot disk (e.g., nvme0n1, sda): ${NC}" _boot_disk | ||||
| 
 | ||||
|   # Confirmation for disk selection to prevent accidental data loss | ||||
|   _print "${YELLOW}You have selected $_boot_disk as the boot disk. This will delete everything on this disk. Are you sure? (Y/N): ${NC}" | ||||
|   read -r confirmation | ||||
|   if [[ "$confirmation" =~ ^[Yy]$ ]]; then | ||||
|     export BOOT_DISK=$_boot_disk | ||||
|   else | ||||
|     _print "${RED}Disk selection cancelled by the user. Please run the script again to select the correct disk.${NC}" | ||||
|     exit 1 | ||||
|   fi | ||||
| } | ||||
| 
 | ||||
| # Set hostname and find primary disk if this is NixOS | ||||
| if [[ "$OS" != "Darwin" ]]; then | ||||
|   _prompt "${YELLOW}Please enter a hostname for the system: ${NC}" HOST_NAME | ||||
|   export HOST_NAME | ||||
|   select_boot_disk | ||||
| fi | ||||
| 
 | ||||
| # Confirmation step | ||||
| confirm_details() { | ||||
|   _print "${GREEN}Username: $USERNAME" | ||||
|   _print "Email: $GIT_EMAIL" | ||||
|   _print "Name: $GIT_NAME${NC}" | ||||
| 
 | ||||
|   if([[ "$OS" != "Darwin" ]]); then | ||||
|     _print "${GREEN}Primary interface: $PRIMARY_IFACE" | ||||
|     _print "Boot disk: $BOOT_DISK" | ||||
|     _print "Hostname: $HOST_NAME${NC}" | ||||
|   fi | ||||
| 
 | ||||
|   _prompt "${YELLOW}Is this correct? (Y/N): ${NC}" choice | ||||
| 
 | ||||
|   case "$choice" in | ||||
|   [Nn] ) _print "${RED}Exiting script.${NC}" && exit 1;; | ||||
|   [Yy] ) _print "${GREEN}Continuing...${NC}";; | ||||
|   * ) _print "${RED}Invalid option. Exiting script.${NC}" && exit 1;; | ||||
|   esac | ||||
| } | ||||
| 
 | ||||
| # Call the confirmation function | ||||
| confirm_details | ||||
| 
 | ||||
| # Function to replace tokens in each file | ||||
| replace_tokens() { | ||||
|   local file="$1" | ||||
|   if [[ $(basename $1) != "apply" ]]; then | ||||
|     if [[ "$OS" == "Darwin" ]]; then | ||||
|       # macOS | ||||
|       LC_ALL=C LANG=C sed -i '' -e "s/%USER%/$USERNAME/g" "$file" | ||||
|       LC_ALL=C LANG=C sed -i '' -e "s/%EMAIL%/$GIT_EMAIL/g" "$file" | ||||
|       LC_ALL=C LANG=C sed -i '' -e "s/%NAME%/$GIT_NAME/g" "$file" | ||||
|     else | ||||
|       # Linux or other | ||||
|       sed -i -e "s/%USER%/$USERNAME/g" "$file" | ||||
|       sed -i -e "s/%EMAIL%/$GIT_EMAIL/g" "$file" | ||||
|       sed -i -e "s/%NAME%/$GIT_NAME/g" "$file" | ||||
|       sed -i -e "s/%INTERFACE%/$PRIMARY_IFACE/g" "$file" | ||||
|       sed -i -e "s/%DISK%/$BOOT_DISK/g" "$file" | ||||
|       sed -i -e "s/%HOST%/$HOST_NAME/g" "$file" | ||||
|     fi | ||||
|   fi | ||||
| } | ||||
| 
 | ||||
| # Traverse directories and call replace_tokens on each Nix file | ||||
| export -f replace_tokens | ||||
| find . -type f -exec bash -c 'replace_tokens "$0"' {} \; | ||||
| 
 | ||||
| echo "$USERNAME" > /tmp/username.txt | ||||
| _print "${GREEN}User $USERNAME information applied.${NC}" | ||||
							
								
								
									
										28
									
								
								apps/x86_64-linux/build-switch
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										28
									
								
								apps/x86_64-linux/build-switch
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,28 @@ | |||
| #!/bin/sh -e | ||||
| 
 | ||||
| RED='\033[1;31m' | ||||
| GREEN='\033[1;32m' | ||||
| YELLOW='\033[1;33m' | ||||
| NC='\033[0m' | ||||
| 
 | ||||
| SYSTEM=$(uname -m) | ||||
| 
 | ||||
| case "$SYSTEM" in | ||||
|   x86_64) | ||||
|     FLAKE_TARGET="x86_64-linux" | ||||
|     ;; | ||||
|   aarch64) | ||||
|     FLAKE_TARGET="aarch64-linux" | ||||
|     ;; | ||||
|   *) | ||||
|     echo -e "${RED}Unsupported architecture: $SYSTEM${NC}" | ||||
|     exit 1 | ||||
|     ;; | ||||
| esac | ||||
| 
 | ||||
| echo -e "${YELLOW}Starting...${NC}" | ||||
| 
 | ||||
| # We pass SSH from user to root so root can download secrets from our private Github | ||||
| sudo SSH_AUTH_SOCK=$SSH_AUTH_SOCK /run/current-system/sw/bin/nixos-rebuild switch --flake .#$FLAKE_TARGET $@ | ||||
| 
 | ||||
| echo -e "${GREEN}Switch to new generation complete!${NC}" | ||||
							
								
								
									
										33
									
								
								apps/x86_64-linux/check-keys
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										33
									
								
								apps/x86_64-linux/check-keys
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,33 @@ | |||
| #!/usr/bin/env bash | ||||
| set -e | ||||
| 
 | ||||
| RED='\033[0;31m' | ||||
| GREEN='\033[0;32m' | ||||
| NC='\033[0m' | ||||
| 
 | ||||
| # We're assuming this is being run as root in the NixOS installer | ||||
| export SSH_DIR=/root/.ssh | ||||
| 
 | ||||
| check_keys() { | ||||
|   if [[ -f "${SSH_DIR}/id_ed25519" && -f "${SSH_DIR}/id_ed25519.pub" && -f "${SSH_DIR}/id_ed25519_agenix" && -f "${SSH_DIR}/id_ed25519_agenix.pub" ]]; then | ||||
|     echo -e "${GREEN}All SSH keys are present.${NC}" | ||||
|   else | ||||
|     echo -e "${RED}Some SSH keys are missing.${NC}" | ||||
|     if [[ ! -f "${SSH_DIR}/id_ed25519" ]]; then | ||||
|       echo -e "${RED}Missing: id_ed25519${NC}" | ||||
|     fi | ||||
|     if [[ ! -f "${SSH_DIR}/id_ed25519.pub" ]]; then | ||||
|       echo -e "${RED}Missing: id_ed25519.pub${NC}" | ||||
|     fi | ||||
|     if [[ ! -f "${SSH_DIR}/id_ed25519_agenix" ]]; then | ||||
|       echo -e "${RED}Missing: id_ed25519_agenix${NC}" | ||||
|     fi | ||||
|     if [[ ! -f "${SSH_DIR}/id_ed25519_agenix.pub" ]]; then | ||||
|       echo -e "${RED}Missing: id_ed25519_agenix.pub${NC}" | ||||
|     fi | ||||
|     echo -e "${GREEN}Run the createKeys script to generate the missing keys.${NC}" | ||||
|     exit 1 | ||||
|   fi | ||||
| } | ||||
| 
 | ||||
| check_keys | ||||
							
								
								
									
										71
									
								
								apps/x86_64-linux/copy-keys
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										71
									
								
								apps/x86_64-linux/copy-keys
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,71 @@ | |||
| #!/usr/bin/env bash | ||||
| set -e | ||||
| 
 | ||||
| unmount_usb() { | ||||
|   if mountpoint -q /mnt/usb; then | ||||
|     sudo umount /mnt/usb | ||||
|     echo -e "\e[0;32mUSB drive unmounted.\e[0m" | ||||
|   fi | ||||
| } | ||||
| 
 | ||||
| mount_usb() { | ||||
|   if mountpoint -q /mnt/usb; then | ||||
|     echo -e "\e[0;32mUSB drive already mounted.\e[0m" | ||||
|   else | ||||
|     device_found=false | ||||
|     for dev in sda sdb sdc sdd sde sdf sdg sdh sdi sdj sdk sdl; do | ||||
|       if sudo blkid /dev/$dev | grep -iq 'TYPE="vfat"'; then | ||||
|         device_found=true | ||||
|         mkdir -p /mnt/usb | ||||
|         sudo mount /dev/$dev /mnt/usb && { echo -e "\e[0;32mUSB drive mounted successfully on /dev/$dev.\e[0m"; break; } || echo -e "\e[0;31mFailed to mount /dev/$dev.\e[0m" | ||||
|       fi | ||||
|     done | ||||
|     if [ "$device_found" = false ]; then | ||||
|       echo -e "\e[0;31mNo USB devices found.\e[0m" | ||||
|     fi | ||||
|   fi | ||||
| } | ||||
| 
 | ||||
| setup_ssh_directory() { | ||||
|   export SSH_DIR=/root/.ssh | ||||
|   mkdir -p $SSH_DIR | ||||
| } | ||||
| 
 | ||||
| check_file_exists() { | ||||
|   if [[ ! -f $1 ]]; then | ||||
|     echo -e "\e[0;31mError: File $1 does not exist.\e[0m" | ||||
|     exit 1 | ||||
|   fi | ||||
| } | ||||
| 
 | ||||
| copy_keys() { | ||||
|   check_file_exists "/mnt/usb/id_ed25519_agenix.pub" | ||||
|   check_file_exists "/mnt/usb/id_ed25519_agenix" | ||||
|   cp /mnt/usb/id_ed25519_agenix.pub $SSH_DIR | ||||
|   cp /mnt/usb/id_ed25519_agenix $SSH_DIR | ||||
|   chmod 600 $SSH_DIR/id_ed25519_{agenix,agenix.pub} | ||||
|   echo -e "\e[0;32mKeys copied successfully.\e[0m" | ||||
| } | ||||
| 
 | ||||
| set_keys() { | ||||
|   check_file_exists "/mnt/usb/id_ed25519_github.pub" | ||||
|   check_file_exists "/mnt/usb/id_ed25519_github" | ||||
|   cp /mnt/usb/id_ed25519_github.pub $SSH_DIR/id_ed25519.pub | ||||
|   cp /mnt/usb/id_ed25519_github $SSH_DIR/id_ed25519 | ||||
|   chmod 600 $SSH_DIR/id_ed25519 | ||||
|   chmod 644 $SSH_DIR/id_ed25519.pub | ||||
| } | ||||
| 
 | ||||
| change_ownership() { | ||||
|   chown nixos:wheel $SSH_DIR/id_ed25519{,.pub} | ||||
|   chown nixos:wheel $SSH_DIR/id_ed25519_{agenix,agenix.pub} | ||||
| } | ||||
| 
 | ||||
| trap unmount_usb EXIT | ||||
| 
 | ||||
| setup_ssh_directory | ||||
| mount_usb | ||||
| copy_keys | ||||
| set_keys | ||||
| change_ownership | ||||
| unmount_usb | ||||
							
								
								
									
										27
									
								
								apps/x86_64-linux/create-keys
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										27
									
								
								apps/x86_64-linux/create-keys
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,27 @@ | |||
| #!/usr/bin/env bash | ||||
| set -e | ||||
| 
 | ||||
| RED='\033[0;31m' | ||||
| GREEN='\033[0;32m' | ||||
| NC='\033[0m' | ||||
| 
 | ||||
| # We're assuming this is being run as root in the NixOS installer | ||||
| export SSH_DIR=/root/.ssh | ||||
| 
 | ||||
| setup_ssh_directory() { | ||||
|   mkdir -p ${SSH_DIR} | ||||
| } | ||||
| 
 | ||||
| generate_keys() { | ||||
|   ssh-keygen -t ed25519 -f "${SSH_DIR}/id_ed25519" -N "" | ||||
|   ssh-keygen -t ed25519 -f "${SSH_DIR}/id_ed25519_agenix" -N "" | ||||
|   chmod 600 ${SSH_DIR}/id_ed25519{,_agenix}{,.pub} | ||||
| } | ||||
| 
 | ||||
| setup_ssh_directory | ||||
| generate_keys | ||||
| 
 | ||||
| echo -e "${GREEN}New SSH keys have been generated.${NC}" | ||||
| echo -e "${GREEN}1) Add the id_ed25519 key to Github.${NC}" | ||||
| cat "${SSH_DIR}/id_ed25519.pub" | ||||
| echo -e "${GREEN}2) Create a private nix-secrets repo in Github, even if it's empty.${NC}" | ||||
							
								
								
									
										80
									
								
								apps/x86_64-linux/install
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										80
									
								
								apps/x86_64-linux/install
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,80 @@ | |||
| #!/usr/bin/env bash | ||||
| set -exu | ||||
| 
 | ||||
| check_installer() { | ||||
|   if [ -e /etc/NIXOS ]; then | ||||
|     echo -e "\e[1;32mRunning in the NixOS installer environment.\e[0m" | ||||
|   else | ||||
|     echo -e "\e[1;31mNot running in the NixOS installer environment.\e[0m" | ||||
|     exit 1 | ||||
|   fi | ||||
| } | ||||
| 
 | ||||
| cleanup() { | ||||
|   rm -rf nixos-config-main.zip nixos-config-main nixos-config | ||||
| } | ||||
| 
 | ||||
| download_config() { | ||||
|   curl -LJ0 https://github.com/dustinlyons/nixos-config/archive/main.zip -o nixos-config-main.zip | ||||
|   unzip nixos-config-main.zip | ||||
|   mv nixos-config-main/templates/starter nixos-config | ||||
|   cd nixos-config | ||||
| } | ||||
| 
 | ||||
| run_apply() { | ||||
|   ./apps/x86_64-linux/apply | ||||
|   if [ ! -f /tmp/username.txt ]; then | ||||
|     echo -e "\e[1;31mError: /tmp/username.txt does not exist.\e[0m" | ||||
|     exit 1 | ||||
|   fi | ||||
|   export USERNAME=$(cat /tmp/username.txt) | ||||
| } | ||||
| 
 | ||||
| run_disko() { | ||||
|   sudo nix run --extra-experimental-features nix-command --extra-experimental-features flakes \ | ||||
|     github:nix-community/disko -- --mode zap_create_mount ./modules/nixos/disk-config.nix | ||||
| } | ||||
| 
 | ||||
| setup_files() { | ||||
|   sudo mkdir -p /mnt/etc/nixos | ||||
|   sudo cp -r * /mnt/etc/nixos | ||||
|   cd /mnt/etc/nixos | ||||
| } | ||||
| 
 | ||||
| install_nixos() { | ||||
|   ARCH=$(uname -m) | ||||
| 
 | ||||
|   case "$ARCH" in | ||||
|     x86_64) | ||||
|       FLAKE_TARGET="x86_64-linux" | ||||
|       ;; | ||||
|     aarch64) | ||||
|       FLAKE_TARGET="aarch64-linux" | ||||
|       ;; | ||||
|     *) | ||||
|       echo -e "${RED}Unsupported architecture: $ARCH${CLEAR}" | ||||
|       exit 1 | ||||
|       ;; | ||||
|   esac | ||||
| 
 | ||||
|   sudo nixos-install --flake .#$FLAKE_TARGET $@ | ||||
|   sudo chmod -R 775 /mnt/etc/nixos | ||||
| } | ||||
| 
 | ||||
| prompt_reboot() { | ||||
|   read -p "Do you want to reboot now? (y/yes) " choice | ||||
|   case "$choice" in | ||||
|   y|Y|yes|YES ) echo -e "\e[1;32mRebooting...\e[0m" && sudo reboot;; | ||||
|   * ) echo -e "\e[1;33mReboot skipped.\e[0m";; | ||||
|   esac | ||||
| } | ||||
| 
 | ||||
| cleanup | ||||
| check_installer | ||||
| download_config | ||||
| run_apply | ||||
| run_disko | ||||
| setup_files | ||||
| install_nixos | ||||
| cleanup | ||||
| prompt_reboot | ||||
							
								
								
									
										104
									
								
								apps/x86_64-linux/install-with-secrets
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										104
									
								
								apps/x86_64-linux/install-with-secrets
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,104 @@ | |||
| #!/usr/bin/env bash | ||||
| set -exu | ||||
| 
 | ||||
| check_installer() { | ||||
|   if [ -e /etc/NIXOS ]; then | ||||
|     echo -e "\e[1;32mRunning in the NixOS installer environment.\e[0m" | ||||
|   else | ||||
|     echo -e "\e[1;31mNot running in the NixOS installer environment.\e[0m" | ||||
|     exit 1 | ||||
|   fi | ||||
| } | ||||
| 
 | ||||
| cleanup() { | ||||
|   rm -rf nixos-config-main.zip nixos-config-main nixos-config | ||||
| } | ||||
| 
 | ||||
| download_config() { | ||||
|   curl -LJ0 https://github.com/dustinlyons/nixos-config/archive/main.zip -o nixos-config-main.zip | ||||
|   unzip nixos-config-main.zip | ||||
|   mv nixos-config-main/templates/starterWithSecrets nixos-config | ||||
|   cd nixos-config | ||||
| } | ||||
| 
 | ||||
| run_apply() { | ||||
|   ./apps/x86_64-linux/apply | ||||
|   if [ ! -f /tmp/username.txt ]; then | ||||
|     echo -e "\e[1;31mError: /tmp/username.txt does not exist.\e[0m" | ||||
|     exit 1 | ||||
|   fi | ||||
|   export USERNAME=$(cat /tmp/username.txt) | ||||
| } | ||||
| 
 | ||||
| run_disko() { | ||||
|   sudo nix run --extra-experimental-features nix-command --extra-experimental-features flakes \ | ||||
|     github:nix-community/disko -- --mode zap_create_mount ./modules/nixos/disk-config.nix | ||||
| } | ||||
| 
 | ||||
| setup_files() { | ||||
|   sudo mkdir -p /mnt/etc/nixos | ||||
|   sudo cp -r * /mnt/etc/nixos | ||||
|   cd /mnt/etc/nixos | ||||
| 
 | ||||
|   mkdir -p /root/.ssh | ||||
|   touch /root/.ssh/known_hosts | ||||
|   ssh-keyscan -t ed25519 github.com >> /root/.ssh/known_hosts | ||||
| } | ||||
| 
 | ||||
| setup_ssh_keys() { | ||||
|   mkdir -p /mnt/home/${USERNAME}/.ssh | ||||
|   chown nixos /mnt/home/${USERNAME}/.ssh | ||||
| 
 | ||||
|   chown nixos /root/.ssh/id_ed25519_agenix{,.pub} | ||||
|   cp --preserve=all /root/.ssh/id_ed25519_agenix /mnt/home/${USERNAME}/.ssh/id_ed25519 | ||||
|   cp --preserve=all /root/.ssh/id_ed25519_agenix.pub /mnt/home/${USERNAME}/.ssh/id_ed25519.pub | ||||
|   cp --preserve=all /root/.ssh/id_ed25519 /mnt/home/${USERNAME}/.ssh/id_github | ||||
|   cp --preserve=all /root/.ssh/id_ed25519.pub /mnt/home/${USERNAME}/.ssh/id_github.pub | ||||
| 
 | ||||
|   chmod 600 /mnt/home/${USERNAME}/.ssh/id_ed25519{,.pub} | ||||
|   chmod 600 /mnt/home/${USERNAME}/.ssh/id_github{,.pub} | ||||
| } | ||||
| 
 | ||||
| link_home_dir() { | ||||
|   ln -s /mnt/home/${USERNAME} /home/${USERNAME} # Used to grab initial secrets | ||||
| } | ||||
| 
 | ||||
| install_nixos() { | ||||
|   ARCH=$(uname -m) | ||||
| 
 | ||||
|   case "$ARCH" in | ||||
|     x86_64) | ||||
|       FLAKE_TARGET="x86_64-linux" | ||||
|       ;; | ||||
|     aarch64) | ||||
|       FLAKE_TARGET="aarch64-linux" | ||||
|       ;; | ||||
|     *) | ||||
|       echo -e "${RED}Unsupported architecture: $ARCH${CLEAR}" | ||||
|       exit 1 | ||||
|       ;; | ||||
|   esac | ||||
| 
 | ||||
|   sudo nixos-install --flake .#$FLAKE_TARGET $@ | ||||
|   sudo chmod -R 775 /mnt/etc/nixos | ||||
| } | ||||
| 
 | ||||
| prompt_reboot() { | ||||
|   read -p "Do you want to reboot now? (y/yes) " choice | ||||
|   case "$choice" in | ||||
|   y|Y|yes|YES ) echo -e "\e[1;32mRebooting...\e[0m" && sudo reboot;; | ||||
|   * ) echo -e "\e[1;33mReboot skipped.\e[0m";; | ||||
|   esac | ||||
| } | ||||
| 
 | ||||
| cleanup | ||||
| check_installer | ||||
| download_config | ||||
| run_apply | ||||
| run_disko | ||||
| setup_files | ||||
| setup_ssh_keys | ||||
| link_home_dir | ||||
| install_nixos | ||||
| cleanup | ||||
| prompt_reboot | ||||
							
								
								
									
										200
									
								
								flake.lock
									
									
									
									
									
								
							
							
						
						
									
										200
									
								
								flake.lock
									
									
									
									
									
								
							|  | @ -47,6 +47,23 @@ | |||
|         "url": "ssh://gitea@git.sealight.xyz/aynish/basant" | ||||
|       } | ||||
|     }, | ||||
|     "brew-src": { | ||||
|       "flake": false, | ||||
|       "locked": { | ||||
|         "lastModified": 1705326576, | ||||
|         "narHash": "sha256-9PvMgHgdbpb5vBO8fHCRufodR731ynzGMF9+68vKWck=", | ||||
|         "owner": "Homebrew", | ||||
|         "repo": "brew", | ||||
|         "rev": "1c612baa096c69f2fcb221c74e6f5b9979efdcee", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "Homebrew", | ||||
|         "ref": "4.2.4", | ||||
|         "repo": "brew", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "darwin": { | ||||
|       "inputs": { | ||||
|         "nixpkgs": [ | ||||
|  | @ -69,6 +86,27 @@ | |||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "darwin_2": { | ||||
|       "inputs": { | ||||
|         "nixpkgs": [ | ||||
|           "nixpkgs" | ||||
|         ] | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1709771483, | ||||
|         "narHash": "sha256-Hjzu9nCknHLQvhdaRFfCEprH0o15KcaNu1QDr3J88DI=", | ||||
|         "owner": "LnL7", | ||||
|         "repo": "nix-darwin", | ||||
|         "rev": "550340062c16d7ef8c2cc20a3d2b97bcd3c6b6f6", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "LnL7", | ||||
|         "ref": "master", | ||||
|         "repo": "nix-darwin", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "deploy-rs": { | ||||
|       "inputs": { | ||||
|         "flake-compat": "flake-compat", | ||||
|  | @ -267,6 +305,24 @@ | |||
|       "inputs": { | ||||
|         "systems": "systems_3" | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1687709756, | ||||
|         "narHash": "sha256-Y5wKlQSkgEK2weWdOu4J3riRd+kV/VCgHsqLNTTWQ/0=", | ||||
|         "owner": "numtide", | ||||
|         "repo": "flake-utils", | ||||
|         "rev": "dbabf0ca0c0c4bce6ea5eaf65af5cb694d2082c7", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "numtide", | ||||
|         "repo": "flake-utils", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "flake-utils_5": { | ||||
|       "inputs": { | ||||
|         "systems": "systems_4" | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1681202837, | ||||
|         "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", | ||||
|  | @ -360,6 +416,54 @@ | |||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "homebrew-bundle": { | ||||
|       "flake": false, | ||||
|       "locked": { | ||||
|         "lastModified": 1709834002, | ||||
|         "narHash": "sha256-KNRwMnyo6ZLphIh2bn02KNOtRf2X3NHqUbS7y4Vmn+M=", | ||||
|         "owner": "homebrew", | ||||
|         "repo": "homebrew-bundle", | ||||
|         "rev": "bb1c80baa7fac67bbffe81a2862c75a5dc7ea4a7", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "homebrew", | ||||
|         "repo": "homebrew-bundle", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "homebrew-cask": { | ||||
|       "flake": false, | ||||
|       "locked": { | ||||
|         "lastModified": 1709955474, | ||||
|         "narHash": "sha256-pE5x579FqCieeeEmrUtNKoBsMG41WSOfGWtXCTI9FP4=", | ||||
|         "owner": "homebrew", | ||||
|         "repo": "homebrew-cask", | ||||
|         "rev": "43b9db57368e350c116398c7da6cb5401cd37ebe", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "homebrew", | ||||
|         "repo": "homebrew-cask", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "homebrew-core": { | ||||
|       "flake": false, | ||||
|       "locked": { | ||||
|         "lastModified": 1709956143, | ||||
|         "narHash": "sha256-5eyfpnVhxVv3+n53vp4j9DNx7O+mqtQqUn90JKS1PMM=", | ||||
|         "owner": "homebrew", | ||||
|         "repo": "homebrew-core", | ||||
|         "rev": "a38d7e99bc103e9564208f2d155701d70001c8cc", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "homebrew", | ||||
|         "repo": "homebrew-core", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "llamacpp": { | ||||
|       "inputs": { | ||||
|         "flake-utils": "flake-utils_3", | ||||
|  | @ -381,12 +485,51 @@ | |||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "nix-darwin": { | ||||
|       "inputs": { | ||||
|         "nixpkgs": "nixpkgs" | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1688307440, | ||||
|         "narHash": "sha256-7PTjbN+/+b799YN7Tk2SS5Vh8A0L3gBo8hmB7Y0VXug=", | ||||
|         "owner": "LnL7", | ||||
|         "repo": "nix-darwin", | ||||
|         "rev": "b06bab83bdf285ea0ae3c8e145a081eb95959047", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "LnL7", | ||||
|         "repo": "nix-darwin", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "nix-homebrew": { | ||||
|       "inputs": { | ||||
|         "brew-src": "brew-src", | ||||
|         "flake-utils": "flake-utils_4", | ||||
|         "nix-darwin": "nix-darwin", | ||||
|         "nixpkgs": "nixpkgs_2" | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1705952034, | ||||
|         "narHash": "sha256-H0nk8Gk8kPw4yi2WwOTsSHgPrzSwyNgWEYHk10IJwfc=", | ||||
|         "owner": "zhaofengli-wip", | ||||
|         "repo": "nix-homebrew", | ||||
|         "rev": "40f5ee46b58e7c5f1927e2c5a583dc3d7e571ed9", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "zhaofengli-wip", | ||||
|         "repo": "nix-homebrew", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "nix-matrix-appservices": { | ||||
|       "inputs": { | ||||
|         "devshell": "devshell", | ||||
|         "flake-compat": "flake-compat_3", | ||||
|         "nixlib": "nixlib", | ||||
|         "nixpkgs": "nixpkgs" | ||||
|         "nixpkgs": "nixpkgs_3" | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1683490239, | ||||
|  | @ -434,6 +577,35 @@ | |||
|       } | ||||
|     }, | ||||
|     "nixpkgs": { | ||||
|       "locked": { | ||||
|         "lastModified": 1687274257, | ||||
|         "narHash": "sha256-TutzPriQcZ8FghDhEolnHcYU2oHIG5XWF+/SUBNnAOE=", | ||||
|         "path": "/nix/store/22qgs3skscd9bmrxv9xv4q5d4wwm5ppx-source", | ||||
|         "rev": "2c9ecd1f0400076a4d6b2193ad468ff0a7e7fdc5", | ||||
|         "type": "path" | ||||
|       }, | ||||
|       "original": { | ||||
|         "id": "nixpkgs", | ||||
|         "type": "indirect" | ||||
|       } | ||||
|     }, | ||||
|     "nixpkgs_2": { | ||||
|       "locked": { | ||||
|         "lastModified": 1688049487, | ||||
|         "narHash": "sha256-100g4iaKC9MalDjUW9iN6Jl/OocTDtXdeAj7pEGIRh4=", | ||||
|         "owner": "NixOS", | ||||
|         "repo": "nixpkgs", | ||||
|         "rev": "4bc72cae107788bf3f24f30db2e2f685c9298dc9", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "NixOS", | ||||
|         "ref": "nixos-unstable", | ||||
|         "repo": "nixpkgs", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "nixpkgs_3": { | ||||
|       "locked": { | ||||
|         "lastModified": 1662099760, | ||||
|         "narHash": "sha256-MdZLCTJPeHi/9fg6R9fiunyDwP3XHJqDd51zWWz9px0=", | ||||
|  | @ -449,7 +621,7 @@ | |||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "nixpkgs_2": { | ||||
|     "nixpkgs_4": { | ||||
|       "locked": { | ||||
|         "lastModified": 1704874635, | ||||
|         "narHash": "sha256-YWuCrtsty5vVZvu+7BchAxmcYzTMfolSPP5io8+WYCg=", | ||||
|  | @ -505,16 +677,21 @@ | |||
|       "inputs": { | ||||
|         "agenix": "agenix", | ||||
|         "basant": "basant", | ||||
|         "darwin": "darwin_2", | ||||
|         "deploy-rs": "deploy-rs", | ||||
|         "disko": "disko", | ||||
|         "eww": "eww", | ||||
|         "grasp": "grasp", | ||||
|         "hardware": "hardware", | ||||
|         "home-manager": "home-manager_2", | ||||
|         "homebrew-bundle": "homebrew-bundle", | ||||
|         "homebrew-cask": "homebrew-cask", | ||||
|         "homebrew-core": "homebrew-core", | ||||
|         "llamacpp": "llamacpp", | ||||
|         "nix-homebrew": "nix-homebrew", | ||||
|         "nix-matrix-appservices": "nix-matrix-appservices", | ||||
|         "nixos-hardware": "nixos-hardware", | ||||
|         "nixpkgs": "nixpkgs_2", | ||||
|         "nixpkgs": "nixpkgs_4", | ||||
|         "nur": "nur", | ||||
|         "poonam": "poonam", | ||||
|         "rust-overlay": "rust-overlay", | ||||
|  | @ -525,7 +702,7 @@ | |||
|     }, | ||||
|     "rust-overlay": { | ||||
|       "inputs": { | ||||
|         "flake-utils": "flake-utils_4", | ||||
|         "flake-utils": "flake-utils_5", | ||||
|         "nixpkgs": [ | ||||
|           "nixpkgs" | ||||
|         ] | ||||
|  | @ -606,6 +783,21 @@ | |||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "systems_4": { | ||||
|       "locked": { | ||||
|         "lastModified": 1681028828, | ||||
|         "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", | ||||
|         "owner": "nix-systems", | ||||
|         "repo": "default", | ||||
|         "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "nix-systems", | ||||
|         "repo": "default", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "tidal-src": { | ||||
|       "flake": false, | ||||
|       "locked": { | ||||
|  |  | |||
							
								
								
									
										67
									
								
								flake.nix
									
									
									
									
									
								
							
							
						
						
									
										67
									
								
								flake.nix
									
									
									
									
									
								
							|  | @ -34,6 +34,27 @@ | |||
|     # Matrix | ||||
|     nix-matrix-appservices.url = "gitlab:coffeetables/nix-matrix-appservices"; | ||||
| 
 | ||||
|     # OSX | ||||
|     darwin = { | ||||
|       url = "github:LnL7/nix-darwin/master"; | ||||
|       inputs.nixpkgs.follows = "nixpkgs"; | ||||
|     }; | ||||
|     nix-homebrew = { | ||||
|       url = "github:zhaofengli-wip/nix-homebrew"; | ||||
|     }; | ||||
|     homebrew-bundle = { | ||||
|       url = "github:homebrew/homebrew-bundle"; | ||||
|       flake = false; | ||||
|     }; | ||||
|     homebrew-core = { | ||||
|       url = "github:homebrew/homebrew-core"; | ||||
|       flake = false; | ||||
|     }; | ||||
|     homebrew-cask = { | ||||
|       url = "github:homebrew/homebrew-cask"; | ||||
|       flake = false; | ||||
|     }; | ||||
| 
 | ||||
|     # Others | ||||
|     nur.url = "github:nix-community/NUR"; | ||||
|     rust-overlay = { | ||||
|  | @ -76,6 +97,11 @@ | |||
|     , eww | ||||
|     , llamacpp | ||||
|     , vimwikicli | ||||
|     , darwin | ||||
|     , nix-homebrew | ||||
|     , homebrew-bundle | ||||
|     , homebrew-core | ||||
|     , homebrew-cask | ||||
|     , ... | ||||
|     }@inputs: | ||||
|     let | ||||
|  | @ -118,7 +144,8 @@ | |||
|           nix-matrix-appservices.overlay | ||||
|           unstableOverlay | ||||
|           llamaOverlay | ||||
|           vimwikiOverlay | ||||
|           # TODO Not available publically | ||||
|           # vimwikiOverlay | ||||
|           self.overlays.additions | ||||
|           self.overlays.modifications | ||||
|         ]; | ||||
|  | @ -136,14 +163,15 @@ | |||
|           tidalcycles.overlays.default # needed for nvim which comes pre-installed lol | ||||
|         ]; | ||||
|       }); | ||||
| 
 | ||||
|       darwinSystems = [ "aarch64-darwin" "x86_64-darwin" ]; | ||||
|     in | ||||
|     { | ||||
|       # Your custom packages | ||||
|       # Acessible through 'nix build', 'nix shell', etc | ||||
|       packages = forAllSystems (system: | ||||
|         let pkgs = nixpkgsFor.${system}; | ||||
|         in import ./pkgs { pkgs = pkgs; } | ||||
|       ); | ||||
| 
 | ||||
|       # Devshell for bootstrapping | ||||
|       # Acessible through 'nix develop' or 'nix-shell' (legacy) | ||||
|       devShells = forAllSystems (system: | ||||
|  | @ -160,6 +188,39 @@ | |||
|       # These are usually stuff you would upstream into home-manager | ||||
|       homeManagerModules = import ./modules/home-manager; | ||||
| 
 | ||||
|       darwinConfigurations = { | ||||
|         "Anishs-MacBook-Pro" = darwin.lib.darwinSystem rec { | ||||
|           system = "aarch64-darwin"; | ||||
|           pkgs = nixpkgsFor.${system}; | ||||
|           specialArgs = { inherit inputs self; }; | ||||
|           modules = [ | ||||
|             ./hosts/darwin | ||||
|             # agenix.darwinModule.age | ||||
|             home-manager.darwinModules.home-manager | ||||
|             nix-homebrew.darwinModules.nix-homebrew | ||||
|             { | ||||
|               users.users.anishlakhwara.home = "/Users/anishlakhwara"; | ||||
|               home-manager = { | ||||
|                 users.anishlakhwara = import ./home/darwin; | ||||
|                 useGlobalPkgs = true; | ||||
|                 useUserPackages = true; | ||||
|               }; | ||||
|               nix-homebrew = { | ||||
|                 user = "anishlakhwara"; | ||||
|                 enable = true; | ||||
|                 taps = { | ||||
|                   "homebrew/homebrew-core" = homebrew-core; | ||||
|                   "homebrew/homebrew-cask" = homebrew-cask; | ||||
|                   "homebrew/homebrew-bundle" = homebrew-bundle; | ||||
|                 }; | ||||
|                 mutableTaps = false; | ||||
|                 autoMigrate = true; | ||||
|               }; | ||||
|             } | ||||
|           ]; | ||||
|         }; | ||||
|       }; | ||||
| 
 | ||||
|       # NixOS configuration entrypoint | ||||
|       nixosConfigurations = { | ||||
|         curve = nixpkgs.lib.nixosSystem rec { | ||||
|  |  | |||
							
								
								
									
										26
									
								
								home/darwin/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								home/darwin/default.nix
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,26 @@ | |||
| { self, pkgs, ... }: | ||||
| { | ||||
|   imports = [ | ||||
|     ../profiles/nvim | ||||
|     ../profiles/cli | ||||
|     ../profiles/direnv | ||||
|     ../profiles/git | ||||
|     ../profiles/task | ||||
|     ../profiles/kitty | ||||
|     # ../profiles/firefox | ||||
|   ]; | ||||
| 
 | ||||
|   home.username = "anishlakhwara"; | ||||
|   home.homeDirectory = "/Users/anishlakhwara"; | ||||
|   home.stateVersion = "22.05"; | ||||
| 
 | ||||
|   programs.zsh.initExtra = "PATH=/Users/anishlakhwara/.sg:/opt/homebrew/bin:$PATH"; | ||||
| 
 | ||||
|   # Managing sketchybar plugins from home-manager | ||||
|   home.file = { | ||||
|     ".config/sketchybar" = { | ||||
|         source = ./sketchybar; | ||||
|         recursive = true; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										20
									
								
								home/darwin/sketchybar/items/battery.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								home/darwin/sketchybar/items/battery.sh
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| COLOR="$CYAN" | ||||
| 
 | ||||
| sketchybar --add item battery right \ | ||||
| 	--set battery \ | ||||
| 	update_freq=60 \ | ||||
| 	icon.color="$COLOR" \ | ||||
| 	icon.padding_left=10 \ | ||||
| 	label.padding_right=10 \ | ||||
| 	label.color="$COLOR" \ | ||||
| 	background.height=26 \ | ||||
| 	background.corner_radius="$CORNER_RADIUS" \ | ||||
| 	background.padding_right=5 \ | ||||
| 	background.border_width="$BORDER_WIDTH" \ | ||||
| 	background.border_color="$COLOR" \ | ||||
| 	background.color="$BAR_COLOR" \ | ||||
| 	background.drawing=on \ | ||||
| 	script="$PLUGIN_DIR/power.sh" \ | ||||
| 	--subscribe battery power_source_change | ||||
							
								
								
									
										18
									
								
								home/darwin/sketchybar/items/calendar.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								home/darwin/sketchybar/items/calendar.sh
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,18 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| COLOR="$BLUE" | ||||
| 
 | ||||
| sketchybar --add item calendar right \ | ||||
| 	--set calendar update_freq=15 \ | ||||
| 	icon.color="$COLOR" \ | ||||
| 	icon.padding_left=10 \ | ||||
| 	label.color="$COLOR" \ | ||||
| 	label.padding_right=10 \ | ||||
| 	background.height=26 \ | ||||
| 	background.corner_radius="$CORNER_RADIUS" \ | ||||
| 	background.padding_right=5 \ | ||||
| 	background.border_width="$BORDER_WIDTH" \ | ||||
| 	background.border_color="$COLOR" \ | ||||
| 	background.color="$BAR_COLOR" \ | ||||
| 	background.drawing=on \ | ||||
| 	script="$PLUGIN_DIR/calendar.sh" | ||||
							
								
								
									
										21
									
								
								home/darwin/sketchybar/items/clock.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								home/darwin/sketchybar/items/clock.sh
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,21 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| COLOR="$MAGENTA" | ||||
| 
 | ||||
| sketchybar --add item clock right \ | ||||
| 	--set clock update_freq=60 \ | ||||
| 	icon.padding_left=10 \ | ||||
| 	icon.color="$COLOR" \ | ||||
| 	icon=" " \ | ||||
| 	label.color="$COLOR" \ | ||||
| 	label.padding_right=5 \ | ||||
| 	label.width=43 \ | ||||
| 	align=center \ | ||||
| 	background.height=26 \ | ||||
| 	background.corner_radius="$CORNER_RADIUS" \ | ||||
| 	background.padding_right=2 \ | ||||
| 	background.border_width="$BORDER_WIDTH" \ | ||||
| 	background.border_color="$COLOR" \ | ||||
| 	background.color="$BAR_COLOR" \ | ||||
| 	background.drawing=on \ | ||||
| 	script="$PLUGIN_DIR/clock.sh" | ||||
							
								
								
									
										19
									
								
								home/darwin/sketchybar/items/cpu.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								home/darwin/sketchybar/items/cpu.sh
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| COLOR="$YELLOW" | ||||
| 
 | ||||
| sketchybar --add item cpu right \ | ||||
| 	--set cpu \ | ||||
| 	update_freq=3 \ | ||||
| 	icon.color="$COLOR" \ | ||||
| 	icon.padding_left=10 \ | ||||
| 	label.color="$COLOR" \ | ||||
| 	label.padding_right=10 \ | ||||
| 	background.height=26 \ | ||||
| 	background.corner_radius="$CORNER_RADIUS" \ | ||||
| 	background.padding_right=5 \ | ||||
| 	background.border_width="$BORDER_WIDTH" \ | ||||
| 	background.border_color="$COLOR" \ | ||||
| 	background.color="$BAR_COLOR" \ | ||||
| 	background.drawing=on \ | ||||
| 	script="$PLUGIN_DIR/cpu.sh" | ||||
							
								
								
									
										20
									
								
								home/darwin/sketchybar/items/front_app.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								home/darwin/sketchybar/items/front_app.sh
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| COLOR="$WHITE" | ||||
| 
 | ||||
| sketchybar \ | ||||
| 	--add item front_app left \ | ||||
| 	--set front_app script="$PLUGIN_DIR/front_app.sh" \ | ||||
| 	icon.drawing=off \ | ||||
| 	background.height=26 \ | ||||
| 	background.padding_left=0 \ | ||||
| 	background.padding_right=10 \ | ||||
| 	background.border_width="$BORDER_WIDTH" \ | ||||
| 	background.border_color="$COLOR" \ | ||||
| 	background.corner_radius="$CORNER_RADIUS" \ | ||||
| 	background.color="$BAR_COLOR" \ | ||||
| 	label.color="$COLOR" \ | ||||
| 	label.padding_left=10 \ | ||||
| 	label.padding_right=10 \ | ||||
| 	associated_display=active \ | ||||
| 	--subscribe front_app front_app_switched | ||||
							
								
								
									
										44
									
								
								home/darwin/sketchybar/items/spaces.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								home/darwin/sketchybar/items/spaces.sh
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,44 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| SPACE_ICONS=("1" "2" "3" "4" "5" "6" "7" "8" "9" "10") | ||||
| 
 | ||||
| sketchybar --add item spacer.1 left \ | ||||
| 	--set spacer.1 background.drawing=off \ | ||||
| 	label.drawing=off \ | ||||
| 	icon.drawing=off \ | ||||
| 	width=10 | ||||
| 
 | ||||
| for i in {0..9}; do | ||||
| 	sid=$((i + 1)) | ||||
| 	sketchybar --add space space.$sid left \ | ||||
| 		--set space.$sid associated_space=$sid \ | ||||
| 		label.drawing=off \ | ||||
| 		icon.padding_left=10 \ | ||||
| 		icon.padding_right=10 \ | ||||
| 		background.padding_left=-5 \ | ||||
| 		background.padding_right=-5 \ | ||||
| 		script="$PLUGIN_DIR/space.sh" | ||||
| done | ||||
| 
 | ||||
| sketchybar --add item spacer.2 left \ | ||||
| 	--set spacer.2 background.drawing=off \ | ||||
| 	label.drawing=off \ | ||||
| 	icon.drawing=off \ | ||||
| 	width=5 | ||||
| 
 | ||||
| sketchybar --add bracket spaces '/space.*/' \ | ||||
| 	--set spaces background.border_width="$BORDER_WIDTH" \ | ||||
| 	background.border_color="$RED" \ | ||||
| 	background.corner_radius="$CORNER_RADIUS" \ | ||||
| 	background.color="$BAR_COLOR" \ | ||||
| 	background.height=26 \ | ||||
| 	background.drawing=on | ||||
| 
 | ||||
| sketchybar --add item separator left \ | ||||
| 	--set separator icon= \ | ||||
| 	icon.font="$FONT:Regular:16.0" \ | ||||
| 	background.padding_left=26 \ | ||||
| 	background.padding_right=15 \ | ||||
| 	label.drawing=off \ | ||||
| 	associated_display=active \ | ||||
| 	icon.color="$YELLOW" | ||||
							
								
								
									
										23
									
								
								home/darwin/sketchybar/items/spotify.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								home/darwin/sketchybar/items/spotify.sh
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,23 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| COLOR="$ORANGE" | ||||
| 
 | ||||
| sketchybar --add item spotify q \ | ||||
| 	--set spotify \ | ||||
| 	scroll_texts=on \ | ||||
| 	icon= \ | ||||
| 	icon.color="$COLOR" \ | ||||
| 	icon.padding_left=10 \ | ||||
| 	background.color="$BAR_COLOR" \ | ||||
| 	background.height=26 \ | ||||
| 	background.corner_radius="$CORNER_RADIUS" \ | ||||
| 	background.border_width="$BORDER_WIDTH" \ | ||||
| 	background.border_color="$COLOR" \ | ||||
| 	background.padding_right=-5 \ | ||||
| 	background.drawing=on \ | ||||
| 	label.padding_right=10 \ | ||||
| 	label.max_chars=20 \ | ||||
| 	associated_display=active \ | ||||
| 	updates=on \ | ||||
| 	script="$PLUGIN_DIR/spotify.sh" \ | ||||
| 	--subscribe spotify media_change | ||||
							
								
								
									
										20
									
								
								home/darwin/sketchybar/items/volume.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								home/darwin/sketchybar/items/volume.sh
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| COLOR="$GREEN" | ||||
| 
 | ||||
| sketchybar \ | ||||
| 	--add item sound right \ | ||||
| 	--set sound \ | ||||
| 	icon.color="$COLOR" \ | ||||
| 	icon.padding_left=10 \ | ||||
| 	label.color="$COLOR" \ | ||||
| 	label.padding_right=10 \ | ||||
| 	background.height=26 \ | ||||
| 	background.corner_radius="$CORNER_RADIUS" \ | ||||
| 	background.padding_right=5 \ | ||||
| 	background.border_width="$BORDER_WIDTH" \ | ||||
| 	background.border_color="$COLOR" \ | ||||
| 	background.color="$BAR_COLOR" \ | ||||
| 	background.drawing=on \ | ||||
| 	script="$PLUGIN_DIR/sound.sh" \ | ||||
| 	--subscribe sound volume_change | ||||
							
								
								
									
										3
									
								
								home/darwin/sketchybar/plugins/calendar.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								home/darwin/sketchybar/plugins/calendar.sh
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,3 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| sketchybar --set "$NAME" icon=" " label="$(date '+%a %d. %b')" | ||||
							
								
								
									
										4
									
								
								home/darwin/sketchybar/plugins/clock.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										4
									
								
								home/darwin/sketchybar/plugins/clock.sh
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| LABEL=$(date '+%H:%M') | ||||
| sketchybar --set "$NAME" icon=" " label="$LABEL" | ||||
							
								
								
									
										3
									
								
								home/darwin/sketchybar/plugins/cpu.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								home/darwin/sketchybar/plugins/cpu.sh
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,3 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| sketchybar --set "$NAME" icon="" label="$(ps -A -o %cpu | awk '{s+=$1} END {s /= 8} END {printf "%.1f%%\n", s}')" | ||||
							
								
								
									
										7
									
								
								home/darwin/sketchybar/plugins/front_app.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								home/darwin/sketchybar/plugins/front_app.sh
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| case "$SENDER" in | ||||
| "front_app_switched") | ||||
| 	sketchybar --set "$NAME" label="$INFO" | ||||
| 	;; | ||||
| esac | ||||
							
								
								
									
										30
									
								
								home/darwin/sketchybar/plugins/power.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										30
									
								
								home/darwin/sketchybar/plugins/power.sh
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,30 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| PERCENTAGE=$(pmset -g batt | grep -Eo "\d+%" | cut -d% -f1) | ||||
| CHARGING=$(pmset -g batt | grep 'AC Power') | ||||
| 
 | ||||
| if [ "$PERCENTAGE" = "" ]; then | ||||
| 	exit 0 | ||||
| fi | ||||
| 
 | ||||
| case ${PERCENTAGE} in | ||||
| 9[0-9] | 100) | ||||
| 	ICON=" " | ||||
| 	;; | ||||
| [6-8][0-9]) | ||||
| 	ICON=" " | ||||
| 	;; | ||||
| [3-5][0-9]) | ||||
| 	ICON=" " | ||||
| 	;; | ||||
| [1-2][0-9]) | ||||
| 	ICON=" " | ||||
| 	;; | ||||
| *) ICON=" " ;; | ||||
| esac | ||||
| 
 | ||||
| if [ "$CHARGING" != "" ]; then | ||||
| 	ICON="" | ||||
| fi | ||||
| 
 | ||||
| sketchybar --set "$NAME" icon="$ICON" label="${PERCENTAGE}% " | ||||
							
								
								
									
										20
									
								
								home/darwin/sketchybar/plugins/sound.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										20
									
								
								home/darwin/sketchybar/plugins/sound.sh
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,20 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| VOLUME=$(osascript -e "output volume of (get volume settings)") | ||||
| MUTED=$(osascript -e "output muted of (get volume settings)") | ||||
| 
 | ||||
| if [ "$MUTED" != "false" ]; then | ||||
| 	ICON=" " | ||||
| 	VOLUME=0 | ||||
| else | ||||
| 	case ${VOLUME} in | ||||
| 	100) ICON=" " ;; | ||||
| 	[5-9]*) ICON=" " ;; | ||||
| 	[0-9]*) ICON=" " ;; | ||||
| 	*) ICON=" " ;; | ||||
| 	esac | ||||
| fi | ||||
| 
 | ||||
| sketchybar -m \ | ||||
| 	--set "$NAME" icon=$ICON \ | ||||
| 	--set "$NAME" label="$VOLUME%" | ||||
							
								
								
									
										19
									
								
								home/darwin/sketchybar/plugins/space.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										19
									
								
								home/darwin/sketchybar/plugins/space.sh
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| source "$HOME/.config/sketchybar/variables.sh" # Loads all defined colors | ||||
| 
 | ||||
| SPACE_ICONS=(" " " " " " " " " " "6" "7" "8" "9" "10") | ||||
| 
 | ||||
| SPACE_CLICK_SCRIPT="yabai -m space --focus $SID 2>/dev/null" | ||||
| 
 | ||||
| if [ "$SELECTED" = "true" ]; then | ||||
| 	sketchybar --animate tanh 5 --set "$NAME" \ | ||||
| 		icon.color="$RED" \ | ||||
| 		icon="${SPACE_ICONS[$SID - 1]}" \ | ||||
| 		click_script="$SPACE_CLICK_SCRIPT" | ||||
| else | ||||
| 	sketchybar --animate tanh 5 --set "$NAME" \ | ||||
| 		icon.color="$COMMENT" \ | ||||
| 		icon="${SPACE_ICONS[$SID - 1]}" \ | ||||
| 		click_script="$SPACE_CLICK_SCRIPT" | ||||
| fi | ||||
							
								
								
									
										11
									
								
								home/darwin/sketchybar/plugins/spotify.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										11
									
								
								home/darwin/sketchybar/plugins/spotify.sh
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,11 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| STATE="$(echo "$INFO" | jq -r '.state')" | ||||
| APP="$(echo "$INFO" | jq -r '.app')" | ||||
| 
 | ||||
| if [ "$STATE" = "playing" ] && [ "$APP" == "Spotify" ]; then | ||||
| 	MEDIA="$(echo "$INFO" | jq -r '.title + " - " + .artist')" | ||||
| 	sketchybar --set "$NAME" label="$MEDIA" drawing=on | ||||
| else | ||||
| 	sketchybar --set "$NAME" drawing=off | ||||
| fi | ||||
							
								
								
									
										50
									
								
								home/darwin/sketchybar/variables.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								home/darwin/sketchybar/variables.sh
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,50 @@ | |||
| #!/usr/bin/env sh | ||||
| 
 | ||||
| # Color Palette | ||||
| # Tokyonight Night | ||||
| BLACK=0xff24283b | ||||
| WHITE=0xffa9b1d6 | ||||
| MAGENTA=0xffbb9af7 | ||||
| BLUE=0xff7aa2f7 | ||||
| CYAN=0xff7dcfff | ||||
| GREEN=0xff9ece6a | ||||
| YELLOW=0xffe0af68 | ||||
| ORANGE=0xffff9e64 | ||||
| RED=0xfff7768e | ||||
| BAR_COLOR=0xff1a1b26 | ||||
| COMMENT=0xff565f89 | ||||
| 
 | ||||
| # Tokyonight Day | ||||
| # BLACK=0xffe9e9ed | ||||
| # WHITE=0xff3760bf | ||||
| # MAGENTA=0xff9854f1 | ||||
| # BLUE=0xff2e7de9 | ||||
| # CYAN=0xff007197 | ||||
| # GREEN=0xff587539 | ||||
| # YELLOW=0xff8c6c3e | ||||
| # ORANGE=0xffb15c00 | ||||
| # RED=0xfff52a65 | ||||
| # BAR_COLOR=0xffe1e2e7 | ||||
| 
 | ||||
| TRANSPARENT=0x00000000 | ||||
| 
 | ||||
| # General bar colors | ||||
| ICON_COLOR=$WHITE  # Color of all icons | ||||
| LABEL_COLOR=$WHITE # Color of all labels | ||||
| 
 | ||||
| ITEM_DIR="$HOME/.config/sketchybar/items" | ||||
| PLUGIN_DIR="$HOME/.config/sketchybar/plugins" | ||||
| 
 | ||||
| FONT="Iosevka Nerd Font" | ||||
| 
 | ||||
| PADDINGS=3 | ||||
| 
 | ||||
| POPUP_BORDER_WIDTH=2 | ||||
| POPUP_CORNER_RADIUS=11 | ||||
| POPUP_BACKGROUND_COLOR=$BLACK | ||||
| POPUP_BORDER_COLOR=$COMMENT | ||||
| 
 | ||||
| CORNER_RADIUS=15 | ||||
| BORDER_WIDTH=2 | ||||
| 
 | ||||
| SHADOW=on | ||||
|  | @ -8,5 +8,6 @@ | |||
|     ../profiles/cal | ||||
|     ../profiles/sync/kitaab | ||||
|     ../profiles/ssh | ||||
|     ../profiles/kitty | ||||
|   ]; | ||||
| } | ||||
|  |  | |||
|  | @ -2,31 +2,37 @@ | |||
| { | ||||
|   home.packages = with pkgs; [ | ||||
|     binutils | ||||
|     coreutils | ||||
|     # coreutils | ||||
|     dnsutils | ||||
|     dasht | ||||
|     dosfstools | ||||
|     #git | ||||
|     # git | ||||
|     bottom | ||||
|     gptfdisk | ||||
|     starship | ||||
|     iputils | ||||
|     jq | ||||
|     # TODO Not available on Darwin | ||||
|     # iputils | ||||
|     # usbutils | ||||
|     # cached-nix-shell | ||||
|     # utillinux | ||||
|     # strace | ||||
|     # mtr | ||||
|     # gdb | ||||
|     # fontconfig | ||||
|     # whois | ||||
|      | ||||
|     # jq | ||||
|     manix | ||||
|     moreutils | ||||
|     nix-index | ||||
|     cached-nix-shell | ||||
|     nmap | ||||
|     ripgrep | ||||
|     skim | ||||
|     tealdeer | ||||
|     usbutils | ||||
|     utillinux | ||||
|     whois | ||||
|     iftop | ||||
|     wget | ||||
|     curl | ||||
|     exa | ||||
|     eza | ||||
|     bat | ||||
|     fd | ||||
|     ncdu | ||||
|  | @ -35,11 +41,9 @@ | |||
|     nix-index | ||||
|     silver-searcher | ||||
|     tcpdump | ||||
|     mtr | ||||
|     file | ||||
|     lsof | ||||
|     atool | ||||
|     strace | ||||
|     zip | ||||
|     unzip | ||||
|     rsync | ||||
|  | @ -48,18 +52,16 @@ | |||
|     glow | ||||
|     pass | ||||
|     less | ||||
|     gdb | ||||
|     xxd | ||||
|     taskwarrior | ||||
|     gnupg | ||||
|     syncthing | ||||
|     dijo | ||||
|     #ssb-patchwork | ||||
|     fontconfig | ||||
|     # ssb-patchwork | ||||
|     pandoc | ||||
|     taskwarrior-tui | ||||
|     python3Packages.howdoi | ||||
|     vimwiki-cli | ||||
|     # TODO marked broken | ||||
|     # python3Packages.howdoi | ||||
| 
 | ||||
|     (pkgs.writeScriptBin "jq-repl" '' | ||||
|       #!/usr/bin/env bash | ||||
|  | @ -202,7 +204,8 @@ | |||
|     enableZshIntegration = true; | ||||
|   }; | ||||
| 
 | ||||
|   services.kdeconnect.enable = true; | ||||
|   # Only available on Linux | ||||
|   # services.kdeconnect.enable = true; | ||||
| 
 | ||||
|   home.shellAliases = { | ||||
|     # quick cd | ||||
|  | @ -216,9 +219,9 @@ | |||
|     gen-secret = "< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c\${1:-32};echo;"; | ||||
| 
 | ||||
|     # modern cli tools  | ||||
|     ls = "exa --icons"; | ||||
|     l = "exa -l --icons"; | ||||
|     la = "exa -la --icons"; | ||||
|     ls = "eza --icons"; | ||||
|     l = "eza -l --icons"; | ||||
|     la = "eza -la --icons"; | ||||
|     tree = "ls --tree --icons"; | ||||
|     cat = "bat"; | ||||
|     unzip = "aunpack"; | ||||
|  | @ -272,6 +275,7 @@ | |||
|     srch = "ns nixpkgs"; | ||||
|     orch = "ns override"; | ||||
|     nrb = "cd /tmp; sudo nixos-rebuild switch --flake '/home/anish/usr/helm#curve'; cd $OLDPWD"; | ||||
|     nrd = "cd /tmp; darwin-rebuild switch --flake /Users/anishlakhwara/usr/helm#Anishs-MacBook-Pro; cd $OLDPWD"; | ||||
|     nrt = "cd /tmp; sudo nixos-rebuild test --flake '/home/anish/usr/helm#curve'; cd $OLDPWD"; | ||||
|     ned = "cd /home/anish/usr/helm; vim; cd $OLDPWD"; | ||||
|     ncd = "cd /home/anish/usr/helm"; | ||||
|  |  | |||
|  | @ -26,7 +26,6 @@ in | |||
|     gtk-engine-murrine | ||||
|     gtk_engines | ||||
|     maim | ||||
|     kitty | ||||
|     libreoffice | ||||
|     inotify-tools | ||||
|     offpunk | ||||
|  | @ -66,8 +65,6 @@ in | |||
|       recursive = true; | ||||
|     }; | ||||
|     ".config/dunst/dunstrc".source = ./dunstrc; | ||||
|     ".config/kitty/kitty.conf".source = ./kitty.conf; | ||||
|     ".config/kitty/ayu.conf".source = ./ayu-kitty.conf; | ||||
|     ".config/zathura/zathurarc".source = ./zathurarc; | ||||
|     ".background-image".source = ./background.jpg; | ||||
|     #gtk4 theme | ||||
|  |  | |||
							
								
								
									
										11
									
								
								home/profiles/kitty/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								home/profiles/kitty/default.nix
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | |||
| { pkgs, config, lib, ... }: | ||||
| 
 | ||||
| { | ||||
|   home.packages = with pkgs; [ | ||||
|     kitty | ||||
|   ]; | ||||
|   home.file = { | ||||
|     ".config/kitty/kitty.conf".source = ./kitty.conf; | ||||
|     ".config/kitty/ayu.conf".source = ./ayu-kitty.conf; | ||||
|   }; | ||||
| } | ||||
|  | @ -8,6 +8,7 @@ open_url_with default | |||
| mouse_map left click ungrabbed mouse_click_url_or_select | ||||
| confirm_os_window_close 0 | ||||
| enable_audio_bell no | ||||
| hide_window_decorations titlebar-only | ||||
| -- Allows zen-mode.nvim to increase font size | ||||
| -- allow_remote_control socket-only | ||||
| -- listen_on unix:/tmp/kitty | ||||
|  | @ -624,16 +624,16 @@ in | |||
| 
 | ||||
|       capabilities = require('cmp_nvim_lsp').default_capabilities() | ||||
| 
 | ||||
|       -- fennel-ls is bleeding edge | ||||
|       local lspconfig = require('lspconfig') | ||||
|       require("lspconfig.configs")["fennel-ls"] = { | ||||
|         default_config = { | ||||
|           cmd = {"fennel-ls"}, | ||||
|           filetypes = {"fennel"}, | ||||
|           root_dir = function(dir) return lspconfig.util.find_git_ancestor(dir) end, | ||||
|           settings = {} | ||||
|         } | ||||
|       } | ||||
|       -- fennel-ls is bleeding edge | ||||
|       -- require("lspconfig.configs")["fennel-ls"] = { | ||||
|       --   default_config = { | ||||
|       --     cmd = {"fennel-ls"}, | ||||
|       --     filetypes = {"fennel"}, | ||||
|       --     root_dir = function(dir) return lspconfig.util.find_git_ancestor(dir) end, | ||||
|       --     settings = {} | ||||
|       --   } | ||||
|       -- } | ||||
| 
 | ||||
|       local servers = { 'clojure_lsp', 'terraform_lsp', 'zls', 'pyright', 'rust_analyzer', 'tsserver', 'lua_ls'} | ||||
|       for _, lsp in ipairs(servers) do | ||||
|  | @ -653,12 +653,12 @@ in | |||
|         capabilities = capabilities, | ||||
|       } | ||||
|       -- fennel-ls doesn't support gps | ||||
|       lspconfig['fennel-ls'].setup { | ||||
|         on_attach = function(client, bufnr) | ||||
|           format.on_attach(client) | ||||
|         end, | ||||
|         capabilities = capabilities, | ||||
|       } | ||||
|       -- lspconfig['fennel-ls'].setup { | ||||
|       --   on_attach = function(client, bufnr) | ||||
|       --     format.on_attach(client) | ||||
|       --   end, | ||||
|       --   capabilities = capabilities, | ||||
|       -- } | ||||
| 
 | ||||
|       -- deprecated pylsp | ||||
|       -- require('lspconfig').pylsp.setup { | ||||
|  | @ -781,30 +781,30 @@ in | |||
|       require('leap').set_default_keymaps() | ||||
|        | ||||
|       -- supercollider | ||||
|       local scnvim = require 'scnvim' | ||||
|       local map = scnvim.map | ||||
|       local map_expr = scnvim.map_expr | ||||
|       scnvim.setup { | ||||
|         keymaps = { | ||||
|           ['<localleader>e'] = map('editor.send_line', {'i', 'n'}), | ||||
|           ['<localleader>s'] = map_expr('CmdPeriod.run', {'i', 'n'}), | ||||
|           ['<localleader>t'] = { | ||||
|             map('editor.send_block', {'i', 'n'}), | ||||
|             map('editor.send_selection', 'x'), | ||||
|           }, | ||||
|           ['<CR>'] = map('postwin.toggle'), | ||||
|           ['<M-CR>'] = map('postwin.toggle', 'i'), | ||||
|           ['<M-L>'] = map('postwin.clear', {'n', 'i'}), | ||||
|           ['<C-k>'] = map('signature.show', {'n', 'i'}), | ||||
|           ['<F12>'] = map('sclang.hard_stop', {'n', 'x', 'i'}), | ||||
|           ['<leader>st'] = map('sclang.start'), | ||||
|           ['<leader>sk'] = map('sclang.recompile'), | ||||
|           ['<F1>'] = map_expr('s.boot'), | ||||
|           ['<F2>'] = map_expr('s.meter'), | ||||
|         } | ||||
|       }  | ||||
|       -- local scnvim = require 'scnvim' | ||||
|       -- local map = scnvim.map | ||||
|       -- local map_expr = scnvim.map_expr | ||||
|       -- scnvim.setup { | ||||
|       --   keymaps = { | ||||
|       --     ['<localleader>e'] = map('editor.send_line', {'i', 'n'}), | ||||
|       --     ['<localleader>s'] = map_expr('CmdPeriod.run', {'i', 'n'}), | ||||
|       --     ['<localleader>t'] = { | ||||
|       --       map('editor.send_block', {'i', 'n'}), | ||||
|       --       map('editor.send_selection', 'x'), | ||||
|       --     }, | ||||
|       --     ['<CR>'] = map('postwin.toggle'), | ||||
|       --     ['<M-CR>'] = map('postwin.toggle', 'i'), | ||||
|       --     ['<M-L>'] = map('postwin.clear', {'n', 'i'}), | ||||
|       --     ['<C-k>'] = map('signature.show', {'n', 'i'}), | ||||
|       --     ['<F12>'] = map('sclang.hard_stop', {'n', 'x', 'i'}), | ||||
|       --     ['<leader>st'] = map('sclang.start'), | ||||
|       --     ['<leader>sk'] = map('sclang.recompile'), | ||||
|       --     ['<F1>'] = map_expr('s.boot'), | ||||
|       --     ['<F2>'] = map_expr('s.meter'), | ||||
|       --   } | ||||
|       -- }  | ||||
|       -- You gotta run :SCNvimGenerateAssets for this first | ||||
|       require("luasnip").add_snippets("supercollider", require("scnvim/utils").get_snippets()) | ||||
|       -- require("luasnip").add_snippets("supercollider", require("scnvim/utils").get_snippets()) | ||||
| 
 | ||||
|       -- zen mode | ||||
|       require('zen-mode').setup{ | ||||
|  | @ -863,12 +863,12 @@ in | |||
|       # used to compile tree-sitter grammar | ||||
|       python-with-my-packages | ||||
|       nodejs | ||||
|       clojure-lsp | ||||
|       # clojure-lsp | ||||
|       clojure | ||||
|       rnix-lsp | ||||
|       terraform-lsp | ||||
|       rust-analyzer | ||||
|       clj-kondo | ||||
|       # clj-kondo | ||||
|       zls | ||||
|       gcc | ||||
|       nodePackages_latest.pyright | ||||
|  | @ -878,7 +878,7 @@ in | |||
|       nodePackages.typescript | ||||
|       nodePackages.typescript-language-server | ||||
|       luajitPackages.lua-lsp | ||||
|       fennel-ls | ||||
|       # fennel-ls | ||||
|     ]; | ||||
| 
 | ||||
|     plugins = with pkgs.vimPlugins // customPlugins; [ | ||||
|  | @ -895,7 +895,7 @@ in | |||
|       telescope-nvim | ||||
|       plenary-nvim | ||||
|       nvim-navic | ||||
|       (nvim-treesitter.withPlugins (p: [ p.nix p.clojure p.python p.fennel p.lua p.html p.css p.regex p.supercollider p.beancount p.markdown p.glsl p.yaml p.toml p.dockerfile p.json ])) | ||||
|       (nvim-treesitter.withPlugins (p: [ p.nix p.clojure p.python p.fennel p.lua p.html p.css p.regex p.beancount p.markdown p.glsl p.yaml p.toml p.dockerfile p.json ])) | ||||
|       nvim-treesitter-context | ||||
|       my-fterm | ||||
|       barbar-nvim | ||||
|  | @ -953,10 +953,10 @@ in | |||
|       vim-sexp-mappings-for-regular-people | ||||
|       fennel-vim | ||||
| 
 | ||||
|       vim-tidal | ||||
|       # vim-tidal | ||||
|       # experimental  | ||||
|       nvim-luapad | ||||
|       scnvim | ||||
|       # scnvim | ||||
|       leap | ||||
|       vim-beancount | ||||
|       # vimtex | ||||
|  |  | |||
|  | @ -8,8 +8,8 @@ | |||
|     # taskwarrior needs write access to this file for centexts | ||||
|     # this way, we get a copy of the file, and we make sure it's writable | ||||
|     ".taskrc".source = ./taskrc; | ||||
|     ".taskrc".executable = true; | ||||
|     ".taskrc".onChange = "cp ~/.taskrc ~/.taskrc2;rm ~/.taskrc;mv ~/.taskrc2 ~/.taskrc;chmod +w ~/.taskrc"; | ||||
|     # ".taskrc".executable = true; | ||||
|     # ".taskrc".onChange = "cp ~/.taskrc ~/.taskrc2;rm ~/.taskrc;mv ~/.taskrc2 ~/.taskrc;chmod +w ~/.taskrc"; | ||||
|     ".task/keys/ca.cert".source = ./ca.cert; | ||||
|     ".task/keys/public.cert".source = ./public.cert; | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										34
									
								
								hosts/darwin/casks/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								hosts/darwin/casks/default.nix
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,34 @@ | |||
| { pkgs, ... }: | ||||
| 
 | ||||
| { | ||||
|   homebrew.enable = true; | ||||
|   homebrew.brews = [ | ||||
|     "kind" | ||||
|     "kubectl" | ||||
|   ]; | ||||
|   homebrew.casks = [ | ||||
|     # Development Tools | ||||
|     "homebrew/cask/docker" | ||||
|     # "insomnia" | ||||
|     # "tableplus" | ||||
|     # "ngrok" | ||||
|     "postico" | ||||
|     "wireshark" | ||||
| 
 | ||||
|     # Communication Tools | ||||
|     # Already installed manually | ||||
|     # "loom" | ||||
|     # "slack"  | ||||
|     # "zoom" | ||||
|     # "firefox" | ||||
| 
 | ||||
|     # Utility Tools | ||||
|     # "syncthing" | ||||
| 
 | ||||
|     # Productivity Tools | ||||
|     "raycast" | ||||
| 
 | ||||
|     # AI | ||||
|     # "diffusionbee" | ||||
|   ]; | ||||
| } | ||||
							
								
								
									
										125
									
								
								hosts/darwin/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								hosts/darwin/default.nix
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,125 @@ | |||
| { agenix, config, pkgs, ... }: | ||||
| 
 | ||||
| { | ||||
|   imports = [ | ||||
|     ./sketchybar | ||||
|     ./yabai | ||||
|     ./casks | ||||
|     # ../../modules/darwin/secrets.nix | ||||
|     # ../../modules/darwin/home-manager.nix | ||||
|     # ../../modules/shared | ||||
|     # ../../modules/shared/cachix | ||||
|     # agenix.darwinModules.default | ||||
|   ]; | ||||
| 
 | ||||
|   environment.systemPackages = [  | ||||
|     pkgs.go | ||||
|   ]; | ||||
| 
 | ||||
|   # Auto upgrade nix package and the daemon service. | ||||
|   services.nix-daemon.enable = true; | ||||
|   nixpkgs.hostPlatform = "aarch64-darwin"; | ||||
|   programs.zsh.enable = true; | ||||
| 
 | ||||
|   # Setup user, packages, programs | ||||
|   nix = { | ||||
|     # package = pkgs.nixUnstable; | ||||
|     settings.trusted-users = [ "@admin" "anishlakhwara" ]; | ||||
| 
 | ||||
|     gc = { | ||||
|       user = "root"; | ||||
|       automatic = true; | ||||
|       interval = { Weekday = 0; Hour = 2; Minute = 0; }; | ||||
|       options = "--delete-older-than 30d"; | ||||
|     }; | ||||
| 
 | ||||
|     # Turn this on to make command line easier | ||||
|     extraOptions = '' | ||||
|       experimental-features = nix-command flakes | ||||
|     ''; | ||||
|   }; | ||||
| 
 | ||||
|   # Turn off NIX_PATH warnings now that we're using flakes | ||||
|   system.checks.verifyNixPath = false; | ||||
| 
 | ||||
|   # Load configuration that is shared across systems | ||||
|   # environment.systemPackages = with pkgs; [ | ||||
|   #  | ||||
|   # ] ++ (import ../../modules/shared/packages.nix { inherit pkgs; }); | ||||
| 
 | ||||
|   # Enable fonts dir | ||||
|   fonts.fontDir.enable = true; | ||||
|   fonts.fonts = with pkgs; [ | ||||
|     fira-code | ||||
|     fira-code-symbols | ||||
|     hermit | ||||
|     #hack | ||||
|     siji | ||||
|     font-awesome | ||||
|     proggyfonts | ||||
|     (nerdfonts.override { fonts = [ "FiraCode" "DroidSansMono" "Iosevka" ]; }) | ||||
|   ]; | ||||
| 
 | ||||
|   system = { | ||||
|     stateVersion = 4; | ||||
| 
 | ||||
|     keyboard = { | ||||
|       enableKeyMapping = true; | ||||
|     }; | ||||
| 
 | ||||
|     defaults = { | ||||
|       LaunchServices = { | ||||
|         LSQuarantine = false; | ||||
|       }; | ||||
| 
 | ||||
|       NSGlobalDomain = { | ||||
|         AppleShowAllExtensions = true; | ||||
|         ApplePressAndHoldEnabled = false; | ||||
| 
 | ||||
|         # 120, 90, 60, 30, 12, 6, 2 | ||||
|         KeyRepeat = 2; | ||||
| 
 | ||||
|         # 120, 94, 68, 35, 25, 15 | ||||
|         InitialKeyRepeat = 15; | ||||
| 
 | ||||
|         "com.apple.mouse.tapBehavior" = 1; | ||||
|         "com.apple.sound.beep.volume" = 0.0; | ||||
|         "com.apple.sound.beep.feedback" = 0; | ||||
|       }; | ||||
| 
 | ||||
|       loginwindow = { | ||||
|         # disable guest account | ||||
|         GuestEnabled = false; | ||||
|         # show name instead of username | ||||
|         SHOWFULLNAME = false; | ||||
|       }; | ||||
| 
 | ||||
|       dock = { | ||||
|         autohide = true; | ||||
|         autohide-delay = 0.0; | ||||
|         autohide-time-modifier = 1.0; | ||||
|         static-only = false; | ||||
|         showhidden = false; | ||||
|         show-recents = false; | ||||
|         launchanim = true; | ||||
|         mouse-over-hilite-stack = true; | ||||
|         orientation = "bottom"; | ||||
|         tilesize = 48; | ||||
|       }; | ||||
| 
 | ||||
|       finder = { | ||||
|         _FXShowPosixPathInTitle = false; | ||||
|       }; | ||||
| 
 | ||||
|       trackpad = { | ||||
|         Clicking = false; | ||||
|         TrackpadThreeFingerDrag = true; | ||||
|       }; | ||||
|     }; | ||||
| 
 | ||||
|     # keyboard = { | ||||
|     #   enableKeyMapping = true; | ||||
|     #   remapCapsLockToControl = true; | ||||
|     # }; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										10
									
								
								hosts/darwin/sketchybar/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								hosts/darwin/sketchybar/default.nix
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,10 @@ | |||
| { pkgs, ... }: | ||||
| 
 | ||||
| { | ||||
|   services.sketchybar = { | ||||
|     enable = true; | ||||
|     config = (builtins.readFile ./sketchybarrc); | ||||
|     extraPackages = [ pkgs.jq ]; | ||||
|   }; | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										58
									
								
								hosts/darwin/sketchybar/sketchybarrc
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										58
									
								
								hosts/darwin/sketchybar/sketchybarrc
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,58 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| source "$HOME/.config/sketchybar/variables.sh" # Loads all defined colors | ||||
| 
 | ||||
| # General bar and defaults | ||||
| # parts I didn't want | ||||
| 	# y_offset=5 \ | ||||
| 	# margin=5 \ | ||||
| 
 | ||||
| sketchybar --bar height=35 \ | ||||
| 	color="$BAR_COLOR" \ | ||||
| 	shadow="$SHADOW" \ | ||||
| 	position=top \ | ||||
| 	sticky=on \ | ||||
| 	padding_right=0 \ | ||||
| 	padding_left=3 \ | ||||
| 	corner_radius="$CORNER_RADIUS" \ | ||||
| 	blur_radius=20 \ | ||||
| 	notch_width=200 \ | ||||
| 	--default updates=when_shown \ | ||||
| 	icon.font="$FONT:Bold:13.5" \ | ||||
| 	icon.color="$ICON_COLOR" \ | ||||
| 	icon.padding_left="$PADDINGS" \ | ||||
| 	icon.padding_right="$PADDINGS" \ | ||||
| 	label.font="$FONT:Bold:13.0" \ | ||||
| 	label.color="$LABEL_COLOR" \ | ||||
| 	label.padding_left="$PADDINGS" \ | ||||
| 	label.padding_right="$PADDINGS" \ | ||||
| 	background.padding_right="$PADDINGS" \ | ||||
| 	background.padding_left="$PADDINGS" \ | ||||
| 	popup.background.border_width=1 \ | ||||
| 	popup.background.corner_radius=11 \ | ||||
| 	popup.background.border_color="$POPUP_BORDER_COLOR" \ | ||||
| 	popup.background.color="$POPUP_BACKGROUND_COLOR" \ | ||||
| 	popup.background.shadow.drawing="$SHADOW" | ||||
| 
 | ||||
| # Left | ||||
| # source "$ITEM_DIR/apple.sh" | ||||
| source "$ITEM_DIR/spaces.sh" | ||||
| 
 | ||||
| # Center (of notch) | ||||
| # source "$ITEM_DIR/spotify.sh" | ||||
| source "$ITEM_DIR/front_app.sh" | ||||
| 
 | ||||
| # Right | ||||
| source "$ITEM_DIR/clock.sh" | ||||
| source "$ITEM_DIR/calendar.sh" | ||||
| source "$ITEM_DIR/battery.sh" | ||||
| source "$ITEM_DIR/volume.sh" | ||||
| source "$ITEM_DIR/cpu.sh" | ||||
| 
 | ||||
| #################### Finalizing Setup #################### | ||||
| 
 | ||||
| # sketchybar --hotload true | ||||
| 
 | ||||
| sketchybar --update | ||||
| 
 | ||||
| echo "sketchybar configuration loaded.." | ||||
							
								
								
									
										102
									
								
								hosts/darwin/yabai/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								hosts/darwin/yabai/default.nix
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,102 @@ | |||
| {pkgs, ... }: | ||||
| 
 | ||||
| { | ||||
|   services.yabai = { | ||||
|     enable = true; | ||||
|     config = { | ||||
|       mouse_follows_focus = "off"; | ||||
|       focus_follows_mouse = "off"; | ||||
|       window_placement = "second_child"; | ||||
|       window_topmost = "off"; | ||||
|       window_opacity = "off"; | ||||
|       window_opacity_duration = 0.0; | ||||
|       window_shadow = "on"; | ||||
|       window_border = "off"; | ||||
|       window_border_placement = "inset"; | ||||
|       window_border_width = 4; | ||||
|       window_border_radius = -1.0; | ||||
|       active_window_border_topmost = "off"; | ||||
|       active_window_border_color = "0xff775759"; | ||||
|       normal_window_border_color = "0xff505050"; | ||||
|       insert_window_border_color = "0xffd75f5f"; | ||||
|       active_window_opacity = 1.0; | ||||
|       normal_window_opacity = 0.9; | ||||
|       split_ratio = 0.73; | ||||
|       auto_balance = "on"; | ||||
|       mouse_modifier = "fn"; | ||||
|       mouse_action1 = "move"; | ||||
|       mouse_action2 = "resize"; | ||||
|       layout = "bsp"; | ||||
|       top_padding = 5; | ||||
|       bottom_padding = 5; | ||||
|       left_padding = 5; | ||||
|       right_padding = 5; | ||||
|       window_gap = 5; | ||||
|     }; | ||||
|     extraConfig = '' | ||||
|       # Do not manage windows with certain titles eg. Copying files or moving to bin | ||||
|       yabai -m rule --add title="(Copy|Bin|About This Mac|Info)" manage=off | ||||
|       # Do not manage some apps which are not resizable | ||||
|       yabai -m rule --add app="^(Calculator|System Preferences|[sS]tats|[Jj]et[Bb]rains [Tt]ool[Bb]ox|kftray)$" manage=off | ||||
|     ''; | ||||
|   }; | ||||
| 
 | ||||
|   system.activationScripts.yabai = { | ||||
|     enable = true; | ||||
|     text = '' | ||||
|       yabai --install-service && yabai --start-service | ||||
|     ''; | ||||
|   }; | ||||
| 
 | ||||
|   services.skhd = { | ||||
|     enable = true; | ||||
|     skhdConfig = '' | ||||
| # Open iTerm2 | ||||
| cmd - enter : kitty --single-instance -d ~ | ||||
| 
 | ||||
| ################## | ||||
| # Window Motions # | ||||
| ################## | ||||
| # Rotate | ||||
| lalt - r : yabai -m space --rotate 90 | ||||
| # Mirror verticaly | ||||
| lalt - x : yabai -m space --mirror y-axis | ||||
| # Mirror horizontaly | ||||
| lalt - y : yabai -m space --mirror x-axis | ||||
| # yes, i know i swapped x and y, but I mainly use y-axis and y is further... | ||||
| # Fullscreen | ||||
| cmd - f : yabai -m window --toggle zoom-fullscreen | ||||
| # Swap | ||||
| lalt - q : yabai -m window --swap west | ||||
| lalt - s : yabai -m window --swap south | ||||
| lalt - z : yabai -m window --swap north | ||||
| lalt - d : yabai -m window --swap east | ||||
| # Warp | ||||
| shift + lalt - q : yabai -m window --warp west | ||||
| shift + lalt - s : yabai -m window --warp south | ||||
| shift + lalt - z : yabai -m window --warp north | ||||
| shift + lalt - d : yabai -m window --warp east | ||||
| 
 | ||||
| ######### | ||||
| # Focus # | ||||
| ######### | ||||
| # Clockwise | ||||
| # alt - tab : yabai -m window --focus "$(yabai -m query --windows --space | jq -re "[sort_by(.id, .frame) | .[] | select(.role == \"AXWindow\" and .subrole == \"AXStandardWindow\") | .id] | nth(index($(yabai -m query --windows --window | jq -re ".id")) - 1)")" | ||||
| # Counter-clockwise | ||||
| # shift - tab : yabai -m window --focus "$(yabai -m query --windows --space | jq -re "[sort_by(.id, .frame) | reverse | .[] | select(.role == \"AXWindow\" and .subrole == \"AXStandardWindow\") | .id] | nth(index($(yabai -m query --windows --window | jq -re ".id")) - 1)")" | ||||
| 
 | ||||
| ########## | ||||
| # Spaces # | ||||
| ########## | ||||
| ctrl - left : yabai -m space --focus prev | ||||
| ctrl - right : yabai -m space --focus next | ||||
| ctrl + shift - right : yabai -m window --space next; yabai -m space --focus next | ||||
| ctrl + shift - left : yabai -m window --space prev; yabai -m space --focus prev | ||||
| cmd - 1 : yabai -m window --space  1; yabai -m space --focus 1 | ||||
| cmd - 2 : yabai -m window --space  2; yabai -m space --focus 2 | ||||
| cmd - 3 : yabai -m window --space  3; yabai -m space --focus 3 | ||||
| cmd - 4 : yabai -m window --space  4; yabai -m space --focus 4 | ||||
| cmd - 5 : yabai -m window --space  5; yabai -m space --focus 5 | ||||
|   ''; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										12
									
								
								modules/darwin/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								modules/darwin/README.md
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | |||
| 
 | ||||
| ## Layout | ||||
| ``` | ||||
| . | ||||
| ├── dock               # MacOS dock configuration | ||||
| ├── casks.nix          # List of homebrew casks | ||||
| ├── default.nix        # Defines module, system-level config | ||||
| ├── files.nix          # Non-Nix, static configuration files (now immutable!) | ||||
| ├── home-manager.nix   # Defines user programs | ||||
| ├── packages.nix       # List of packages to install for MacOS | ||||
| ├── secrets.nix        # Age-encrypted secrets with agenix | ||||
| ``` | ||||
							
								
								
									
										26
									
								
								modules/darwin/casks.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								modules/darwin/casks.nix
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,26 @@ | |||
| _: | ||||
| 
 | ||||
| [ | ||||
|   # Development Tools | ||||
|   "homebrew/cask/docker" | ||||
|   # "insomnia" | ||||
|   # "tableplus" | ||||
|   # "ngrok" | ||||
|   "postico" | ||||
|   "wireshark" | ||||
| 
 | ||||
|   # Communication Tools | ||||
|   "loom" | ||||
|   # Already installed manually | ||||
|   # "slack"  | ||||
|   # "zoom" | ||||
| 
 | ||||
|   # Utility Tools | ||||
|   "syncthing" | ||||
| 
 | ||||
|   # Productivity Tools | ||||
|   "raycast" | ||||
| 
 | ||||
|   # AI | ||||
|   # "diffusionbee" | ||||
| ] | ||||
							
								
								
									
										67
									
								
								modules/darwin/dock/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								modules/darwin/dock/default.nix
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,67 @@ | |||
| { config, pkgs, lib, ... }: | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.local.dock; | ||||
|   inherit (pkgs) stdenv dockutil; | ||||
| in | ||||
| { | ||||
|   options = { | ||||
|     local.dock.enable = mkOption { | ||||
|       description = "Enable dock"; | ||||
|       default = stdenv.isDarwin; | ||||
|       example = false; | ||||
|     }; | ||||
| 
 | ||||
|     local.dock.entries = mkOption | ||||
|       { | ||||
|         description = "Entries on the Dock"; | ||||
|         type = with types; listOf (submodule { | ||||
|           options = { | ||||
|             path = lib.mkOption { type = str; }; | ||||
|             section = lib.mkOption { | ||||
|               type = str; | ||||
|               default = "apps"; | ||||
|             }; | ||||
|             options = lib.mkOption { | ||||
|               type = str; | ||||
|               default = ""; | ||||
|             }; | ||||
|           }; | ||||
|         }); | ||||
|         readOnly = true; | ||||
|       }; | ||||
|   }; | ||||
| 
 | ||||
|   config = | ||||
|     mkIf cfg.enable | ||||
|       ( | ||||
|         let | ||||
|           normalize = path: if hasSuffix ".app" path then path + "/" else path; | ||||
|           entryURI = path: "file://" + (builtins.replaceStrings | ||||
|             [" "   "!"   "\""  "#"   "$"   "%"   "&"   "'"   "("   ")"] | ||||
|             ["%20" "%21" "%22" "%23" "%24" "%25" "%26" "%27" "%28" "%29"] | ||||
|             (normalize path) | ||||
|           ); | ||||
|           wantURIs = concatMapStrings | ||||
|             (entry: "${entryURI entry.path}\n") | ||||
|             cfg.entries; | ||||
|           createEntries = concatMapStrings | ||||
|             (entry: "${dockutil}/bin/dockutil --no-restart --add '${entry.path}' --section ${entry.section} ${entry.options}\n") | ||||
|             cfg.entries; | ||||
|         in | ||||
|         { | ||||
|           system.activationScripts.postUserActivation.text = '' | ||||
|             echo >&2 "Setting up the Dock..." | ||||
|             haveURIs="$(${dockutil}/bin/dockutil --list | ${pkgs.coreutils}/bin/cut -f2)" | ||||
|             if ! diff -wu <(echo -n "$haveURIs") <(echo -n '${wantURIs}') >&2 ; then | ||||
|               echo >&2 "Resetting Dock." | ||||
|               ${dockutil}/bin/dockutil --no-restart --remove all | ||||
|               ${createEntries} | ||||
|               killall Dock | ||||
|             else | ||||
|               echo >&2 "Dock setup complete." | ||||
|             fi | ||||
|           ''; | ||||
|         } | ||||
|       ); | ||||
| } | ||||
							
								
								
									
										54
									
								
								modules/darwin/files.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								modules/darwin/files.nix
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,54 @@ | |||
| { user, config, pkgs, ... }: | ||||
| 
 | ||||
| let | ||||
|   xdg_configHome = "${config.users.users.${user}.home}/.config"; | ||||
|   xdg_dataHome   = "${config.users.users.${user}.home}/.local/share"; | ||||
|   xdg_stateHome  = "${config.users.users.${user}.home}/.local/state"; in | ||||
| { | ||||
| 
 | ||||
|   # Raycast script so that "Run Emacs" is available and uses Emacs daemon | ||||
|   "${xdg_dataHome}/bin/emacsclient" = { | ||||
|     executable = true; | ||||
|     text = '' | ||||
|       #!/bin/zsh | ||||
|       # | ||||
|       # Required parameters: | ||||
|       # @raycast.schemaVersion 1 | ||||
|       # @raycast.title Run Emacs | ||||
|       # @raycast.mode silent | ||||
|       # | ||||
|       # Optional parameters: | ||||
|       # @raycast.packageName Emacs | ||||
|       # @raycast.icon ${xdg_dataHome}/img/icons/Emacs.icns | ||||
|       # @raycast.iconDark ${xdg_dataHome}/img/icons/Emacs.icns | ||||
| 
 | ||||
|       if [[ $1 = "-t" ]]; then | ||||
|         # Terminal mode | ||||
|         ${pkgs.emacs}/bin/emacsclient -t $@ | ||||
|       else | ||||
|         # GUI mode | ||||
|         ${pkgs.emacs}/bin/emacsclient -c -n $@ | ||||
|       fi | ||||
|     ''; | ||||
|   }; | ||||
| 
 | ||||
|   # Script to import Drafts into Emacs org-roam | ||||
|   "${xdg_dataHome}/bin/import-drafts" = { | ||||
|     executable = true; | ||||
|     text = '' | ||||
|       #!/bin/sh | ||||
| 
 | ||||
|       for f in ${xdg_stateHome}/drafts/* | ||||
|       do | ||||
|         if [[ ! "$f" =~ "done" ]]; then | ||||
|           echo "Importing $f" | ||||
|           filename="$(head -c 10 $f)" | ||||
|           output="${xdg_dataHome}/org-roam/daily/$filename.org" | ||||
|           echo '\n' >> "$output" | ||||
|           tail -n +3 $f >> "$output" | ||||
|           mv $f done | ||||
|         fi | ||||
|       done | ||||
|     ''; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										85
									
								
								modules/darwin/home-manager.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								modules/darwin/home-manager.nix
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,85 @@ | |||
| { config, pkgs, lib, home-manager, ... }: | ||||
| 
 | ||||
| let | ||||
|   user = "anishlakhwara"; | ||||
|   # Define the content of your file as a derivation | ||||
|   myEmacsLauncher = pkgs.writeScript "emacs-launcher.command" '' | ||||
|     #!/bin/sh | ||||
|       emacsclient -c -n & | ||||
|   ''; | ||||
|   sharedFiles = import ../shared/files.nix { inherit config pkgs; }; | ||||
|   additionalFiles = import ./files.nix { inherit user config pkgs; }; | ||||
| in | ||||
| { | ||||
|   imports = [ | ||||
|    ./dock | ||||
|   ]; | ||||
| 
 | ||||
|   # It me | ||||
|   users.users.${user} = { | ||||
|     name = "${user}"; | ||||
|     home = "/Users/${user}"; | ||||
|     isHidden = false; | ||||
|     shell = pkgs.zsh; | ||||
|   }; | ||||
| 
 | ||||
|   # Enable home-manager | ||||
|   home-manager = { | ||||
|     useGlobalPkgs = true; | ||||
|     users.${user} = { pkgs, config, lib, ... }:{ | ||||
|       home = { | ||||
|         enableNixpkgsReleaseCheck = false; | ||||
|         packages = pkgs.callPackage ./packages.nix {}; | ||||
|         file = lib.mkMerge [ | ||||
|           sharedFiles | ||||
|           additionalFiles | ||||
|           { "emacs-launcher.command".source = myEmacsLauncher; } | ||||
|         ]; | ||||
| 
 | ||||
|         stateVersion = "23.11"; | ||||
|       }; | ||||
| 
 | ||||
|       programs = {} // import ../shared/home-manager.nix { inherit config pkgs lib; }; | ||||
| 
 | ||||
|       # Marked broken Oct 20, 2022 check later to remove this | ||||
|       # https://github.com/nix-community/home-manager/issues/3344 | ||||
|       manual.manpages.enable = false; | ||||
|     }; | ||||
|   }; | ||||
| 
 | ||||
|   # Fully declarative dock using the latest from Nix Store | ||||
|   local = { | ||||
|     dock.enable = true; | ||||
|     dock.entries = [ | ||||
|       { path = "/Applications/Slack.app/"; } | ||||
|       { path = "/System/Applications/Messages.app/"; } | ||||
|       { path = "/System/Applications/Facetime.app/"; } | ||||
|       { path = "/Applications/Telegram.app/"; } | ||||
|       { path = "${pkgs.alacritty}/Applications/Alacritty.app/"; } | ||||
|       { path = "/System/Applications/Music.app/"; } | ||||
|       { path = "/System/Applications/News.app/"; } | ||||
|       { path = "/System/Applications/Photos.app/"; } | ||||
|       { path = "/System/Applications/Photo Booth.app/"; } | ||||
|       { path = "/System/Applications/TV.app/"; } | ||||
|       { path = "${pkgs.jetbrains.phpstorm}/Applications/PhpStorm.app/"; } | ||||
|       { path = "/Applications/TablePlus.app/"; } | ||||
|       { path = "/Applications/Asana.app/"; } | ||||
|       { path = "/Applications/Drafts.app/"; } | ||||
|       { path = "/System/Applications/Home.app/"; } | ||||
|       { | ||||
|         path = toString myEmacsLauncher; | ||||
|         section = "others"; | ||||
|       } | ||||
|       { | ||||
|         path = "${config.users.users.${user}.home}/.local/share/"; | ||||
|         section = "others"; | ||||
|         options = "--sort name --view grid --display folder"; | ||||
|       } | ||||
|       { | ||||
|         path = "${config.users.users.${user}.home}/.local/share/downloads"; | ||||
|         section = "others"; | ||||
|         options = "--sort name --view grid --display stack"; | ||||
|       } | ||||
|     ]; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										7
									
								
								modules/darwin/packages.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								modules/darwin/packages.nix
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| { pkgs }: | ||||
| 
 | ||||
| with pkgs; | ||||
| let shared-packages = import ../shared/packages.nix { inherit pkgs; }; in | ||||
| shared-packages ++ [ | ||||
|   dockutil | ||||
| ] | ||||
							
								
								
									
										47
									
								
								modules/darwin/secrets.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								modules/darwin/secrets.nix
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,47 @@ | |||
| { config, pkgs, agenix, secrets, ... }: | ||||
| 
 | ||||
| let user = "dustin"; in | ||||
| { | ||||
|   age = {  | ||||
|     identityPaths = [  | ||||
|       "/Users/${user}/.ssh/id_ed25519" | ||||
|     ]; | ||||
| 
 | ||||
|     secrets = {  | ||||
|       "syncthing-cert" = { | ||||
|         symlink = true; | ||||
|         path = "/Users/${user}/Library/Application Support/Syncthing/cert.pem"; | ||||
|         file =  "${secrets}/darwin-syncthing-cert.age"; | ||||
|         mode = "644"; | ||||
|         owner = "${user}"; | ||||
|         group = "staff"; | ||||
|       }; | ||||
| 
 | ||||
|       "syncthing-key" = { | ||||
|         symlink = true; | ||||
|         path = "/Users/${user}/Library/Application Support/Syncthing/key.pem"; | ||||
|         file =  "${secrets}/darwin-syncthing-key.age"; | ||||
|         mode = "600"; | ||||
|         owner = "${user}"; | ||||
|         group = "staff"; | ||||
|       }; | ||||
| 
 | ||||
|       "github-ssh-key" = { | ||||
|         symlink = true; | ||||
|         path = "/Users/${user}/.ssh/id_github"; | ||||
|         file =  "${secrets}/github-ssh-key.age"; | ||||
|         mode = "600"; | ||||
|         owner = "${user}"; | ||||
|         group = "staff"; | ||||
|       }; | ||||
| 
 | ||||
|       "github-signing-key" = { | ||||
|         symlink = false; | ||||
|         path = "/Users/${user}/.ssh/pgp_github.key"; | ||||
|         file =  "${secrets}/github-signing-key.age"; | ||||
|         mode = "600"; | ||||
|         owner = "${user}"; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
		Loading…
	
		Reference in a new issue