Compare changes

Choose any two refs to compare.

Changed files
+4342 -204
.aider.tags.cache.v3
apps
home
hosts
modules
secrets
+30
.aider.chat.history.md
··· 1 + 2 + # aider chat started at 2025-02-07 16:38:26 3 + 4 + > Newer aider version v0.74.1 is available. 5 + > python3.11 -m pip install --upgrade --upgrade-strategy only-if-needed aider-chat 6 + > Run pip install? (Y)es/(N)o [Yes]: y 7 + > /nix/store/8hkpwrgr7h06di861vhx612xfkrjzpak-python3-3.11.11/bin/python3.11: No module named pip 8 + > Add .aider*, .env to .gitignore (recommended)? (Y)es/(N)o [Yes]: n 9 + > /nix/store/cyihi1p1d92g2zg1frmppbm97h893adk-aider-chat-0.62.0/bin/aider 10 + > Warning: gpt-4o-2024-08-06 expects these environment variables 11 + > - OPENAI_API_KEY: Not set 12 + > If you just set these environment variables using `setx` you may need to restart your terminal or command prompt for the changes to take effect. 13 + > Warning: gpt-4o-mini expects these environment variables 14 + > - OPENAI_API_KEY: Not set 15 + > If you just set these environment variables using `setx` you may need to restart your terminal or command prompt for the changes to take effect. 16 + > You can skip this check with --no-show-model-warnings 17 + > https://aider.chat/docs/llms/warnings.html 18 + > Open documentation url for more info? (Y)es/(N)o [Yes]: n 19 + > Aider v0.62.0 20 + > Main model: gpt-4o-2024-08-06 with diff edit format 21 + > Weak model: gpt-4o-mini 22 + > Git repo: .git with 293 files 23 + > Repo-map: using 1024 tokens, auto refresh 24 + > Use /help <question> for help, run "aider --help" to see cmd line args 25 + > 26 + > 27 + > ^C again to exit 28 + > 29 + > 30 + > ^C KeyboardInterrupt
+6
.aider.input.history
··· 1 + 2 + # 2025-02-10 16:27:55.065630 3 + +y 4 + 5 + # 2025-02-10 16:28:04.851326 6 + +n
.aider.tags.cache.v3/cache.db

This is a binary file and will not be displayed.

+1
.gitignore
··· 1 + .worktrees/* 1 2 .direnv/
+221
apps/aarch64-darwin/apply
··· 1 + #!/usr/bin/env bash 2 + 3 + RED='\033[0;31m' 4 + GREEN='\033[0;32m' 5 + YELLOW='\033[1;33m' 6 + NC='\033[0m' # No Color 7 + 8 + # Determine the operating system 9 + export OS=$(uname) 10 + 11 + # Primary network interface 12 + if [[ "$OS" != "Darwin" ]]; then 13 + export PRIMARY_IFACE=$(ip -o -4 route show to default | awk '{print $5}') 14 + echo -e "${GREEN}Found primary network interface $PRIMARY_IFACE${NC}" 15 + fi 16 + 17 + # Custom print function 18 + _print() { 19 + if [[ "$OS" == "Darwin" ]]; then 20 + echo -e "$1" 21 + else 22 + echo "$1" 23 + fi 24 + } 25 + 26 + # Custom prompt function 27 + _prompt() { 28 + local message="$1" 29 + local variable="$2" 30 + 31 + _print "$message" 32 + read -r $variable 33 + } 34 + 35 + insert_secrets_output() { 36 + local pattern="outputs = { self, darwin, nix-homebrew, homebrew-bundle, homebrew-core, homebrew-cask, home-manager, nixpkgs, disko, agenix } @inputs:" 37 + local insert_text="secrets " 38 + 39 + awk -v pat="$pattern" -v insert="$insert_text" ' 40 + $0 ~ pat { 41 + sub(/} @inputs:/, ", " insert "} @inputs:"); # Replace the closing brace with the insert text followed by the brace 42 + gsub(/ ,/, ","); # Correct any spaces before commas 43 + print 44 + next 45 + } 46 + { print } 47 + ' flake.nix > flake.nix.tmp 48 + 49 + mv flake.nix.tmp flake.nix 50 + } 51 + 52 + insert_secrets_input() { 53 + # Define file path 54 + FILE_PATH="flake.nix" 55 + 56 + # Backup the original file 57 + cp "$FILE_PATH" "${FILE_PATH}.bak" 58 + 59 + # Temporary file for the text to insert 60 + TEMP_FILE="temp_insert.txt" 61 + 62 + # Write the formatted text to the temporary file 63 + cat > "$TEMP_FILE" << 'EOF' 64 + secrets = { 65 + url = "git+ssh://git@github.com/%GITHUB_USER%/%GITHUB_SECRETS_REPO%.git"; 66 + flake = false; 67 + }; 68 + EOF 69 + 70 + # Check if the 'secrets' block already exists 71 + if grep -q 'url = "git+ssh://git@github.com/%GITHUB_USER%/%GITHUB_SECRETS_REPO%.git"' "$FILE_PATH"; then 72 + echo "The 'secrets' block already exists in the file." 73 + rm "$TEMP_FILE" 74 + rm "${FILE_PATH}.bak" 75 + exit 0 76 + fi 77 + 78 + # Find the start and end line numbers of the 'disko' block 79 + START_LINE=$(grep -n 'disko = {' "$FILE_PATH" | head -n 1 | cut -d: -f1) 80 + END_LINE=$(tail -n +$START_LINE "$FILE_PATH" | grep -n '};' | head -n 1 | cut -d: -f1) 81 + END_LINE=$((START_LINE + END_LINE - 1)) 82 + 83 + # Create a new file with the insertion 84 + { 85 + sed -n "1,${END_LINE}p" "$FILE_PATH" 86 + cat "$TEMP_FILE" 87 + sed -n "$((END_LINE + 1)),\$p" "$FILE_PATH" 88 + } > "${FILE_PATH}.new" 89 + 90 + # Replace the original file with the new file 91 + mv "${FILE_PATH}.new" "$FILE_PATH" 92 + 93 + # Clean up the temporary files 94 + rm "$TEMP_FILE" 95 + rm "${FILE_PATH}.bak" 96 + } 97 + 98 + # Fetch username from the system 99 + export USERNAME=$(whoami) 100 + 101 + # If the username is 'nixos' or 'root', ask the user for their username 102 + if [[ "$USERNAME" == "nixos" ]] || [[ "$USERNAME" == "root" ]]; then 103 + _prompt "${YELLOW}You're running as $USERNAME. Please enter your desired username: ${NC}" USERNAME 104 + fi 105 + 106 + # Check if git is available 107 + if command -v git >/dev/null 2>&1; then 108 + # Fetch email and name from git config 109 + export GIT_EMAIL=$(git config --get user.email) 110 + export GIT_NAME=$(git config --get user.name) 111 + else 112 + _print "${RED}Git is not available on this system.${NC}" 113 + fi 114 + 115 + # If git email is not found or git is not available, ask the user 116 + if [[ -z "$GIT_EMAIL" ]]; then 117 + _prompt "${YELLOW}Please enter your email: ${NC}" GIT_EMAIL 118 + fi 119 + 120 + # If git name is not found or git is not available, ask the user 121 + if [[ -z "$GIT_NAME" ]]; then 122 + _prompt "${YELLOW}Please enter your name: ${NC}" GIT_NAME 123 + fi 124 + 125 + _prompt "${YELLOW}Please enter your Github username: ${NC}" GITHUB_USER 126 + _prompt "${YELLOW}Please enter your Github secrets repository name: ${NC}" GITHUB_SECRETS_REPO 127 + 128 + export GITHUB_USER 129 + export GITHUB_SECRETS_REPO 130 + 131 + select_boot_disk() { 132 + local disks 133 + local _boot_disk 134 + 135 + _print "${YELLOW}Available disks:${NC}" 136 + disks=$(lsblk -nd --output NAME,SIZE | grep -v loop) 137 + echo "$disks" 138 + 139 + # Warning message for data deletion 140 + _print "${RED}WARNING: All data on the chosen disk will be erased during the installation!${NC}" 141 + _prompt "${YELLOW}Please choose your boot disk (e.g., nvme0n1, sda): ${NC}" _boot_disk 142 + 143 + # Confirmation for disk selection to prevent accidental data loss 144 + _print "${YELLOW}You have selected $_boot_disk as the boot disk. This will delete everything on this disk. Are you sure? (Y/N): ${NC}" 145 + read -r confirmation 146 + if [[ "$confirmation" =~ ^[Yy]$ ]]; then 147 + export BOOT_DISK=$_boot_disk 148 + else 149 + _print "${RED}Disk selection cancelled by the user. Please run the script again to select the correct disk.${NC}" 150 + exit 1 151 + fi 152 + } 153 + 154 + # Set hostname and find primary disk if this is NixOS 155 + if [[ "$OS" != "Darwin" ]]; then 156 + _prompt "${YELLOW}Please enter a hostname for the system: ${NC}" HOST_NAME 157 + export HOST_NAME 158 + select_boot_disk 159 + fi 160 + 161 + # Confirmation step 162 + confirm_details() { 163 + _print "${GREEN}Username: $USERNAME" 164 + _print "Email: $GIT_EMAIL" 165 + _print "Name: $GIT_NAME${NC}" 166 + 167 + if([[ "$OS" != "Darwin" ]]); then 168 + _print "${GREEN}Primary interface: $PRIMARY_IFACE" 169 + _print "Boot disk: $BOOT_DISK" 170 + _print "Hostname: $HOST_NAME${NC}" 171 + fi 172 + 173 + _print "${GREEN}Secrets repository: $GITHUB_USER/$GITHUB_SECRETS_REPO${NC}" 174 + 175 + _prompt "${YELLOW}Is this correct? (Y/N): ${NC}" choice 176 + 177 + case "$choice" in 178 + [Nn] ) _print "${RED}Exiting script.${NC}" && exit 1;; 179 + [Yy] ) _print "${GREEN}Continuing...${NC}";; 180 + * ) _print "${RED}Invalid option. Exiting script.${NC}" && exit 1;; 181 + esac 182 + } 183 + 184 + # Call the confirmation function 185 + confirm_details 186 + 187 + # Function to replace tokens in each file 188 + replace_tokens() { 189 + local file="$1" 190 + if [[ $(basename $1) != "apply" ]]; then 191 + if [[ "$OS" == "Darwin" ]]; then 192 + # macOS 193 + LC_ALL=C LANG=C sed -i '' -e "s/%USER%/$USERNAME/g" "$file" 194 + LC_ALL=C LANG=C sed -i '' -e "s/%EMAIL%/$GIT_EMAIL/g" "$file" 195 + LC_ALL=C LANG=C sed -i '' -e "s/%NAME%/$GIT_NAME/g" "$file" 196 + LC_ALL=C LANG=C sed -i '' -e "s/%GITHUB_USER%/$GITHUB_USER/g" "$file" 197 + LC_ALL=C LANG=C sed -i '' -e "s/%GITHUB_SECRETS_REPO%/$GITHUB_SECRETS_REPO/g" "$file" 198 + else 199 + # Linux or other 200 + sed -i -e "s/%USER%/$USERNAME/g" "$file" 201 + sed -i -e "s/%EMAIL%/$GIT_EMAIL/g" "$file" 202 + sed -i -e "s/%NAME%/$GIT_NAME/g" "$file" 203 + sed -i -e "s/%INTERFACE%/$PRIMARY_IFACE/g" "$file" 204 + sed -i -e "s/%DISK%/$BOOT_DISK/g" "$file" 205 + sed -i -e "s/%HOST%/$HOST_NAME/g" "$file" 206 + sed -i -e "s/%GITHUB_USER%/$GITHUB_USER/g" "$file" 207 + sed -i -e "s/%GITHUB_SECRETS_REPO%/$GITHUB_SECRETS_REPO/g" "$file" 208 + fi 209 + fi 210 + } 211 + 212 + # Insert secrets repo into flake 213 + insert_secrets_input 214 + insert_secrets_output 215 + 216 + # Traverse directories and call replace_tokens on each Nix file 217 + export -f replace_tokens 218 + find . -type f -exec bash -c 'replace_tokens "$0"' {} \; 219 + 220 + echo "$USERNAME" > /tmp/username.txt 221 + _print "${GREEN}User $USERNAME information applied.${NC}"
+19
apps/aarch64-darwin/build
··· 1 + #!/bin/sh -e 2 + 3 + GREEN='\033[1;32m' 4 + YELLOW='\033[1;33m' 5 + RED='\033[1;31m' 6 + NC='\033[0m' 7 + 8 + SYSTEM_TYPE="aarch64-darwin" 9 + FLAKE_SYSTEM="darwinConfigurations.${SYSTEM_TYPE}.system" 10 + 11 + export NIXPKGS_ALLOW_UNFREE=1 12 + 13 + echo "${YELLOW}Starting build...${NC}" 14 + nix --extra-experimental-features 'nix-command flakes' build .#$FLAKE_SYSTEM $@ 15 + 16 + echo "${YELLOW}Cleaning up...${NC}" 17 + unlink ./result 18 + 19 + echo "${GREEN}Switch to new generation complete!${NC}"
+22
apps/aarch64-darwin/build-switch
··· 1 + #!/bin/sh -e 2 + 3 + GREEN='\033[1;32m' 4 + YELLOW='\033[1;33m' 5 + RED='\033[1;31m' 6 + NC='\033[0m' 7 + 8 + SYSTEM_TYPE="aarch64-darwin" 9 + FLAKE_SYSTEM="darwinConfigurations.${SYSTEM_TYPE}.system" 10 + 11 + export NIXPKGS_ALLOW_UNFREE=1 12 + 13 + echo "${YELLOW}Starting build...${NC}" 14 + nix --extra-experimental-features 'nix-command flakes' build .#$FLAKE_SYSTEM $@ 15 + 16 + echo "${YELLOW}Switching to new generation...${NC}" 17 + ./result/sw/bin/darwin-rebuild switch --flake .#${SYSTEM_TYPE} $@ 18 + 19 + echo "${YELLOW}Cleaning up...${NC}" 20 + unlink ./result 21 + 22 + echo "${GREEN}Switch to new generation complete!${NC}"
+33
apps/aarch64-darwin/check-keys
··· 1 + #!/usr/bin/env bash 2 + set -e 3 + 4 + RED='\033[0;31m' 5 + GREEN='\033[0;32m' 6 + NC='\033[0m' 7 + 8 + username=${USER} 9 + export SSH_DIR=/Users/${username}/.ssh 10 + 11 + lint_keys() { 12 + 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 13 + echo -e "${GREEN}All SSH keys are present.${NC}" 14 + else 15 + echo -e "${RED}Some SSH keys are missing.${NC}" 16 + if [[ ! -f "${SSH_DIR}/id_ed25519" ]]; then 17 + echo -e "${RED}Missing: id_ed25519${NC}" 18 + fi 19 + if [[ ! -f "${SSH_DIR}/id_ed25519.pub" ]]; then 20 + echo -e "${RED}Missing: id_ed25519.pub${NC}" 21 + fi 22 + if [[ ! -f "${SSH_DIR}/id_ed25519_agenix" ]]; then 23 + echo -e "${RED}Missing: id_ed25519_agenix${NC}" 24 + fi 25 + if [[ ! -f "${SSH_DIR}/id_ed25519_agenix.pub" ]]; then 26 + echo -e "${RED}Missing: id_ed25519_agenix.pub${NC}" 27 + fi 28 + echo -e "${GREEN}Run the createKeys command to generate the missing keys.${NC}" 29 + exit 1 30 + fi 31 + } 32 + 33 + lint_keys
+68
apps/aarch64-darwin/copy-keys
··· 1 + #!/usr/bin/env bash 2 + set -e 3 + 4 + RED='\033[0;31m' 5 + GREEN='\033[0;32m' 6 + NC='\033[0m' 7 + 8 + username=${USER} 9 + export SSH_DIR=/Users/${username}/.ssh 10 + 11 + handle_no_usb() { 12 + echo -e ${RED}No USB drive found or mounted.${NC}" 13 + echo -e ${GREEN}If you have not yet set up your keys, run the script to generate new SSH keys.${NC}" 14 + exit 1 15 + } 16 + 17 + mount_usb() { 18 + MOUNT_PATH="" 19 + for dev in $(diskutil list | grep -o 'disk[0-9]'); do 20 + MOUNT_PATH="$(diskutil info /dev/${dev} | grep \"Mount Point\" | awk -F: '{print $2}' | xargs)" 21 + if [ -n "${MOUNT_PATH}" ]; then 22 + echo -e "${GREEN}USB drive found at ${MOUNT_PATH}.${NC}" 23 + break 24 + fi 25 + done 26 + 27 + if [ -z "${MOUNT_PATH}" ]; then 28 + echo -e "${RED}No USB drive found.${NC}" 29 + fi 30 + } 31 + 32 + copy_keys() { 33 + if [ -n "${MOUNT_PATH}" ]; then 34 + cp "${MOUNT_PATH}/id_ed25519_agenix.pub" ${SSH_DIR} 35 + cp "${MOUNT_PATH}/id_ed25519_agenix" ${SSH_DIR} 36 + chmod 600 ${SSH_DIR}/id_ed25519_{agenix,agenix.pub} 37 + else 38 + echo -e "${RED}No USB drive found. Aborting.${NC}" 39 + exit 1 40 + fi 41 + } 42 + 43 + setup_ssh_directory() { 44 + mkdir -p ${SSH_DIR} 45 + } 46 + 47 + set_keys() { 48 + cp ${MOUNT_PATH}/id_ed25519_github.pub ${SSH_DIR}/id_ed25519.pub 49 + cp ${MOUNT_PATH}/id_ed25519_github ${SSH_DIR}/id_ed25519 50 + chmod 600 ${SSH_DIR}/id_ed25519 51 + chmod 644 ${SSH_DIR}/id_ed25519.pub 52 + } 53 + 54 + change_ownership() { 55 + chown ${username}:staff ${SSH_DIR}/id_ed25519{,.pub} 56 + chown ${username}:staff ${SSH_DIR}/id_ed25519_{agenix,agenix.pub} 57 + } 58 + 59 + setup_ssh_directory 60 + mount_usb 61 + 62 + if [ -z "${MOUNT_PATH}" ]; then 63 + handle_no_usb 64 + else 65 + copy_keys 66 + set_keys 67 + change_ownership 68 + fi
+46
apps/aarch64-darwin/create-keys
··· 1 + #!/usr/bin/env bash 2 + set -e 3 + 4 + RED='\033[0;31m' 5 + GREEN='\033[0;32m' 6 + NC='\033[0m' 7 + 8 + username=${USER} 9 + export SSH_DIR=/Users/${username}/.ssh 10 + 11 + setup_ssh_directory() { 12 + mkdir -p ${SSH_DIR} 13 + } 14 + 15 + prompt_for_key_generation() { 16 + local key_name=$1 17 + if [[ -f "${SSH_DIR}/${key_name}" ]]; then 18 + echo -e "${RED}Existing SSH key found for ${key_name}.${NC}" 19 + cat "${SSH_DIR}/${key_name}.pub" 20 + read -p "Do you want to replace it? (y/n) " -n 1 -r 21 + echo 22 + if [[ $REPLY =~ ^[Yy]$ ]]; then 23 + return 0 # Indicate key should be replaced 24 + else 25 + return 1 # Indicate key should be kept 26 + fi 27 + fi 28 + return 0 # Indicate no key exists, so it should be created 29 + } 30 + 31 + generate_key() { 32 + local key_name=$1 33 + if prompt_for_key_generation "$key_name"; then 34 + ssh-keygen -t ed25519 -f "${SSH_DIR}/${key_name}" -N "" 35 + chown ${username}:staff "${SSH_DIR}/${key_name}"{,.pub} 36 + else 37 + echo -e "${GREEN}Kept existing ${key_name}.${NC}" 38 + fi 39 + } 40 + 41 + setup_ssh_directory 42 + generate_key "id_ed25519" 43 + generate_key "id_ed25519_agenix" 44 + 45 + echo -e "${GREEN}SSH key setup complete.${NC}" 46 + echo -e "${GREEN}Remember to add the necessary keys to Github or other services as required.${NC}"
+24
apps/aarch64-darwin/rollback
··· 1 + #!/bin/sh -e 2 + 3 + GREEN='\033[1;32m' 4 + YELLOW='\033[1;33m' 5 + RED='\033[1;31m' 6 + NC='\033[0m' 7 + 8 + FLAKE="Dustins-MBP" 9 + 10 + echo "${YELLOW}Available generations:${NC}" 11 + /run/current-system/sw/bin/darwin-rebuild --list-generations 12 + 13 + echo "${YELLOW}Enter the generation number for rollback:${NC}" 14 + read GEN_NUM 15 + 16 + if [ -z "$GEN_NUM" ]; then 17 + echo "${RED}No generation number entered. Aborting rollback.${NC}" 18 + exit 1 19 + fi 20 + 21 + echo "${YELLOW}Rolling back to generation $GEN_NUM...${NC}" 22 + /run/current-system/sw/bin/darwin-rebuild switch --flake .#$FLAKE --switch-generation $GEN_NUM 23 + 24 + echo "${GREEN}Rollback to generation $GEN_NUM complete!${NC}"
+1
apps/aarch64-linux
··· 1 + x86_64-linux
+142
apps/x86_64-linux/apply
··· 1 + #!/usr/bin/env bash 2 + 3 + RED='\033[0;31m' 4 + GREEN='\033[0;32m' 5 + YELLOW='\033[1;33m' 6 + NC='\033[0m' # No Color 7 + 8 + # Determine the operating system 9 + export OS=$(uname) 10 + 11 + # Primary network interface 12 + if [[ "$OS" != "Darwin" ]]; then 13 + export PRIMARY_IFACE=$(ip -o -4 route show to default | awk '{print $5}') 14 + echo -e "${GREEN}Found primary network interface $PRIMARY_IFACE${NC}" 15 + fi 16 + 17 + # Custom print function 18 + _print() { 19 + if [[ "$OS" == "Darwin" ]]; then 20 + echo -e "$1" 21 + else 22 + echo "$1" 23 + fi 24 + } 25 + 26 + # Custom prompt function 27 + _prompt() { 28 + local message="$1" 29 + local variable="$2" 30 + 31 + _print "$message" 32 + read -r $variable 33 + } 34 + 35 + # Fetch username from the system 36 + export USERNAME=$(whoami) 37 + 38 + # If the username is 'nixos' or 'root', ask the user for their username 39 + if [[ "$USERNAME" == "nixos" ]] || [[ "$USERNAME" == "root" ]]; then 40 + _prompt "${YELLOW}You're running as $USERNAME. Please enter your desired username: ${NC}" USERNAME 41 + fi 42 + 43 + # Check if git is available 44 + if command -v git >/dev/null 2>&1; then 45 + # Fetch email and name from git config 46 + export GIT_EMAIL=$(git config --get user.email) 47 + export GIT_NAME=$(git config --get user.name) 48 + else 49 + _print "${RED}Git is not available on this system.${NC}" 50 + fi 51 + 52 + # If git email is not found or git is not available, ask the user 53 + if [[ -z "$GIT_EMAIL" ]]; then 54 + _prompt "${YELLOW}Please enter your email: ${NC}" GIT_EMAIL 55 + fi 56 + 57 + # If git name is not found or git is not available, ask the user 58 + if [[ -z "$GIT_NAME" ]]; then 59 + _prompt "${YELLOW}Please enter your name: ${NC}" GIT_NAME 60 + fi 61 + 62 + select_boot_disk() { 63 + local disks 64 + local _boot_disk 65 + 66 + _print "${YELLOW}Available disks:${NC}" 67 + disks=$(lsblk -nd --output NAME,SIZE | grep -v loop) 68 + echo "$disks" 69 + 70 + # Warning message for data deletion 71 + _print "${RED}WARNING: All data on the chosen disk will be erased during the installation!${NC}" 72 + _prompt "${YELLOW}Please choose your boot disk (e.g., nvme0n1, sda): ${NC}" _boot_disk 73 + 74 + # Confirmation for disk selection to prevent accidental data loss 75 + _print "${YELLOW}You have selected $_boot_disk as the boot disk. This will delete everything on this disk. Are you sure? (Y/N): ${NC}" 76 + read -r confirmation 77 + if [[ "$confirmation" =~ ^[Yy]$ ]]; then 78 + export BOOT_DISK=$_boot_disk 79 + else 80 + _print "${RED}Disk selection cancelled by the user. Please run the script again to select the correct disk.${NC}" 81 + exit 1 82 + fi 83 + } 84 + 85 + # Set hostname and find primary disk if this is NixOS 86 + if [[ "$OS" != "Darwin" ]]; then 87 + _prompt "${YELLOW}Please enter a hostname for the system: ${NC}" HOST_NAME 88 + export HOST_NAME 89 + select_boot_disk 90 + fi 91 + 92 + # Confirmation step 93 + confirm_details() { 94 + _print "${GREEN}Username: $USERNAME" 95 + _print "Email: $GIT_EMAIL" 96 + _print "Name: $GIT_NAME${NC}" 97 + 98 + if([[ "$OS" != "Darwin" ]]); then 99 + _print "${GREEN}Primary interface: $PRIMARY_IFACE" 100 + _print "Boot disk: $BOOT_DISK" 101 + _print "Hostname: $HOST_NAME${NC}" 102 + fi 103 + 104 + _prompt "${YELLOW}Is this correct? (Y/N): ${NC}" choice 105 + 106 + case "$choice" in 107 + [Nn] ) _print "${RED}Exiting script.${NC}" && exit 1;; 108 + [Yy] ) _print "${GREEN}Continuing...${NC}";; 109 + * ) _print "${RED}Invalid option. Exiting script.${NC}" && exit 1;; 110 + esac 111 + } 112 + 113 + # Call the confirmation function 114 + confirm_details 115 + 116 + # Function to replace tokens in each file 117 + replace_tokens() { 118 + local file="$1" 119 + if [[ $(basename $1) != "apply" ]]; then 120 + if [[ "$OS" == "Darwin" ]]; then 121 + # macOS 122 + LC_ALL=C LANG=C sed -i '' -e "s/%USER%/$USERNAME/g" "$file" 123 + LC_ALL=C LANG=C sed -i '' -e "s/%EMAIL%/$GIT_EMAIL/g" "$file" 124 + LC_ALL=C LANG=C sed -i '' -e "s/%NAME%/$GIT_NAME/g" "$file" 125 + else 126 + # Linux or other 127 + sed -i -e "s/%USER%/$USERNAME/g" "$file" 128 + sed -i -e "s/%EMAIL%/$GIT_EMAIL/g" "$file" 129 + sed -i -e "s/%NAME%/$GIT_NAME/g" "$file" 130 + sed -i -e "s/%INTERFACE%/$PRIMARY_IFACE/g" "$file" 131 + sed -i -e "s/%DISK%/$BOOT_DISK/g" "$file" 132 + sed -i -e "s/%HOST%/$HOST_NAME/g" "$file" 133 + fi 134 + fi 135 + } 136 + 137 + # Traverse directories and call replace_tokens on each Nix file 138 + export -f replace_tokens 139 + find . -type f -exec bash -c 'replace_tokens "$0"' {} \; 140 + 141 + echo "$USERNAME" > /tmp/username.txt 142 + _print "${GREEN}User $USERNAME information applied.${NC}"
+28
apps/x86_64-linux/build-switch
··· 1 + #!/bin/sh -e 2 + 3 + RED='\033[1;31m' 4 + GREEN='\033[1;32m' 5 + YELLOW='\033[1;33m' 6 + NC='\033[0m' 7 + 8 + SYSTEM=$(uname -m) 9 + 10 + case "$SYSTEM" in 11 + x86_64) 12 + FLAKE_TARGET="x86_64-linux" 13 + ;; 14 + aarch64) 15 + FLAKE_TARGET="aarch64-linux" 16 + ;; 17 + *) 18 + echo -e "${RED}Unsupported architecture: $SYSTEM${NC}" 19 + exit 1 20 + ;; 21 + esac 22 + 23 + echo -e "${YELLOW}Starting...${NC}" 24 + 25 + # We pass SSH from user to root so root can download secrets from our private Github 26 + sudo SSH_AUTH_SOCK=$SSH_AUTH_SOCK /run/current-system/sw/bin/nixos-rebuild switch --flake .#$FLAKE_TARGET $@ 27 + 28 + echo -e "${GREEN}Switch to new generation complete!${NC}"
+33
apps/x86_64-linux/check-keys
··· 1 + #!/usr/bin/env bash 2 + set -e 3 + 4 + RED='\033[0;31m' 5 + GREEN='\033[0;32m' 6 + NC='\033[0m' 7 + 8 + # We're assuming this is being run as root in the NixOS installer 9 + export SSH_DIR=/root/.ssh 10 + 11 + check_keys() { 12 + 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 13 + echo -e "${GREEN}All SSH keys are present.${NC}" 14 + else 15 + echo -e "${RED}Some SSH keys are missing.${NC}" 16 + if [[ ! -f "${SSH_DIR}/id_ed25519" ]]; then 17 + echo -e "${RED}Missing: id_ed25519${NC}" 18 + fi 19 + if [[ ! -f "${SSH_DIR}/id_ed25519.pub" ]]; then 20 + echo -e "${RED}Missing: id_ed25519.pub${NC}" 21 + fi 22 + if [[ ! -f "${SSH_DIR}/id_ed25519_agenix" ]]; then 23 + echo -e "${RED}Missing: id_ed25519_agenix${NC}" 24 + fi 25 + if [[ ! -f "${SSH_DIR}/id_ed25519_agenix.pub" ]]; then 26 + echo -e "${RED}Missing: id_ed25519_agenix.pub${NC}" 27 + fi 28 + echo -e "${GREEN}Run the createKeys script to generate the missing keys.${NC}" 29 + exit 1 30 + fi 31 + } 32 + 33 + check_keys
+71
apps/x86_64-linux/copy-keys
··· 1 + #!/usr/bin/env bash 2 + set -e 3 + 4 + unmount_usb() { 5 + if mountpoint -q /mnt/usb; then 6 + sudo umount /mnt/usb 7 + echo -e "\e[0;32mUSB drive unmounted.\e[0m" 8 + fi 9 + } 10 + 11 + mount_usb() { 12 + if mountpoint -q /mnt/usb; then 13 + echo -e "\e[0;32mUSB drive already mounted.\e[0m" 14 + else 15 + device_found=false 16 + for dev in sda sdb sdc sdd sde sdf sdg sdh sdi sdj sdk sdl; do 17 + if sudo blkid /dev/$dev | grep -iq 'TYPE="vfat"'; then 18 + device_found=true 19 + mkdir -p /mnt/usb 20 + 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" 21 + fi 22 + done 23 + if [ "$device_found" = false ]; then 24 + echo -e "\e[0;31mNo USB devices found.\e[0m" 25 + fi 26 + fi 27 + } 28 + 29 + setup_ssh_directory() { 30 + export SSH_DIR=/root/.ssh 31 + mkdir -p $SSH_DIR 32 + } 33 + 34 + check_file_exists() { 35 + if [[ ! -f $1 ]]; then 36 + echo -e "\e[0;31mError: File $1 does not exist.\e[0m" 37 + exit 1 38 + fi 39 + } 40 + 41 + copy_keys() { 42 + check_file_exists "/mnt/usb/id_ed25519_agenix.pub" 43 + check_file_exists "/mnt/usb/id_ed25519_agenix" 44 + cp /mnt/usb/id_ed25519_agenix.pub $SSH_DIR 45 + cp /mnt/usb/id_ed25519_agenix $SSH_DIR 46 + chmod 600 $SSH_DIR/id_ed25519_{agenix,agenix.pub} 47 + echo -e "\e[0;32mKeys copied successfully.\e[0m" 48 + } 49 + 50 + set_keys() { 51 + check_file_exists "/mnt/usb/id_ed25519_github.pub" 52 + check_file_exists "/mnt/usb/id_ed25519_github" 53 + cp /mnt/usb/id_ed25519_github.pub $SSH_DIR/id_ed25519.pub 54 + cp /mnt/usb/id_ed25519_github $SSH_DIR/id_ed25519 55 + chmod 600 $SSH_DIR/id_ed25519 56 + chmod 644 $SSH_DIR/id_ed25519.pub 57 + } 58 + 59 + change_ownership() { 60 + chown nixos:wheel $SSH_DIR/id_ed25519{,.pub} 61 + chown nixos:wheel $SSH_DIR/id_ed25519_{agenix,agenix.pub} 62 + } 63 + 64 + trap unmount_usb EXIT 65 + 66 + setup_ssh_directory 67 + mount_usb 68 + copy_keys 69 + set_keys 70 + change_ownership 71 + unmount_usb
+27
apps/x86_64-linux/create-keys
··· 1 + #!/usr/bin/env bash 2 + set -e 3 + 4 + RED='\033[0;31m' 5 + GREEN='\033[0;32m' 6 + NC='\033[0m' 7 + 8 + # We're assuming this is being run as root in the NixOS installer 9 + export SSH_DIR=/root/.ssh 10 + 11 + setup_ssh_directory() { 12 + mkdir -p ${SSH_DIR} 13 + } 14 + 15 + generate_keys() { 16 + ssh-keygen -t ed25519 -f "${SSH_DIR}/id_ed25519" -N "" 17 + ssh-keygen -t ed25519 -f "${SSH_DIR}/id_ed25519_agenix" -N "" 18 + chmod 600 ${SSH_DIR}/id_ed25519{,_agenix}{,.pub} 19 + } 20 + 21 + setup_ssh_directory 22 + generate_keys 23 + 24 + echo -e "${GREEN}New SSH keys have been generated.${NC}" 25 + echo -e "${GREEN}1) Add the id_ed25519 key to Github.${NC}" 26 + cat "${SSH_DIR}/id_ed25519.pub" 27 + echo -e "${GREEN}2) Create a private nix-secrets repo in Github, even if it's empty.${NC}"
+80
apps/x86_64-linux/install
··· 1 + #!/usr/bin/env bash 2 + set -exu 3 + 4 + check_installer() { 5 + if [ -e /etc/NIXOS ]; then 6 + echo -e "\e[1;32mRunning in the NixOS installer environment.\e[0m" 7 + else 8 + echo -e "\e[1;31mNot running in the NixOS installer environment.\e[0m" 9 + exit 1 10 + fi 11 + } 12 + 13 + cleanup() { 14 + rm -rf nixos-config-main.zip nixos-config-main nixos-config 15 + } 16 + 17 + download_config() { 18 + curl -LJ0 https://github.com/dustinlyons/nixos-config/archive/main.zip -o nixos-config-main.zip 19 + unzip nixos-config-main.zip 20 + mv nixos-config-main/templates/starter nixos-config 21 + cd nixos-config 22 + } 23 + 24 + run_apply() { 25 + ./apps/x86_64-linux/apply 26 + if [ ! -f /tmp/username.txt ]; then 27 + echo -e "\e[1;31mError: /tmp/username.txt does not exist.\e[0m" 28 + exit 1 29 + fi 30 + export USERNAME=$(cat /tmp/username.txt) 31 + } 32 + 33 + run_disko() { 34 + sudo nix run --extra-experimental-features nix-command --extra-experimental-features flakes \ 35 + github:nix-community/disko -- --mode zap_create_mount ./modules/nixos/disk-config.nix 36 + } 37 + 38 + setup_files() { 39 + sudo mkdir -p /mnt/etc/nixos 40 + sudo cp -r * /mnt/etc/nixos 41 + cd /mnt/etc/nixos 42 + } 43 + 44 + install_nixos() { 45 + ARCH=$(uname -m) 46 + 47 + case "$ARCH" in 48 + x86_64) 49 + FLAKE_TARGET="x86_64-linux" 50 + ;; 51 + aarch64) 52 + FLAKE_TARGET="aarch64-linux" 53 + ;; 54 + *) 55 + echo -e "${RED}Unsupported architecture: $ARCH${CLEAR}" 56 + exit 1 57 + ;; 58 + esac 59 + 60 + sudo nixos-install --flake .#$FLAKE_TARGET $@ 61 + sudo chmod -R 775 /mnt/etc/nixos 62 + } 63 + 64 + prompt_reboot() { 65 + read -p "Do you want to reboot now? (y/yes) " choice 66 + case "$choice" in 67 + y|Y|yes|YES ) echo -e "\e[1;32mRebooting...\e[0m" && sudo reboot;; 68 + * ) echo -e "\e[1;33mReboot skipped.\e[0m";; 69 + esac 70 + } 71 + 72 + cleanup 73 + check_installer 74 + download_config 75 + run_apply 76 + run_disko 77 + setup_files 78 + install_nixos 79 + cleanup 80 + prompt_reboot
+104
apps/x86_64-linux/install-with-secrets
··· 1 + #!/usr/bin/env bash 2 + set -exu 3 + 4 + check_installer() { 5 + if [ -e /etc/NIXOS ]; then 6 + echo -e "\e[1;32mRunning in the NixOS installer environment.\e[0m" 7 + else 8 + echo -e "\e[1;31mNot running in the NixOS installer environment.\e[0m" 9 + exit 1 10 + fi 11 + } 12 + 13 + cleanup() { 14 + rm -rf nixos-config-main.zip nixos-config-main nixos-config 15 + } 16 + 17 + download_config() { 18 + curl -LJ0 https://github.com/dustinlyons/nixos-config/archive/main.zip -o nixos-config-main.zip 19 + unzip nixos-config-main.zip 20 + mv nixos-config-main/templates/starterWithSecrets nixos-config 21 + cd nixos-config 22 + } 23 + 24 + run_apply() { 25 + ./apps/x86_64-linux/apply 26 + if [ ! -f /tmp/username.txt ]; then 27 + echo -e "\e[1;31mError: /tmp/username.txt does not exist.\e[0m" 28 + exit 1 29 + fi 30 + export USERNAME=$(cat /tmp/username.txt) 31 + } 32 + 33 + run_disko() { 34 + sudo nix run --extra-experimental-features nix-command --extra-experimental-features flakes \ 35 + github:nix-community/disko -- --mode zap_create_mount ./modules/nixos/disk-config.nix 36 + } 37 + 38 + setup_files() { 39 + sudo mkdir -p /mnt/etc/nixos 40 + sudo cp -r * /mnt/etc/nixos 41 + cd /mnt/etc/nixos 42 + 43 + mkdir -p /root/.ssh 44 + touch /root/.ssh/known_hosts 45 + ssh-keyscan -t ed25519 github.com >> /root/.ssh/known_hosts 46 + } 47 + 48 + setup_ssh_keys() { 49 + mkdir -p /mnt/home/${USERNAME}/.ssh 50 + chown nixos /mnt/home/${USERNAME}/.ssh 51 + 52 + chown nixos /root/.ssh/id_ed25519_agenix{,.pub} 53 + cp --preserve=all /root/.ssh/id_ed25519_agenix /mnt/home/${USERNAME}/.ssh/id_ed25519 54 + cp --preserve=all /root/.ssh/id_ed25519_agenix.pub /mnt/home/${USERNAME}/.ssh/id_ed25519.pub 55 + cp --preserve=all /root/.ssh/id_ed25519 /mnt/home/${USERNAME}/.ssh/id_github 56 + cp --preserve=all /root/.ssh/id_ed25519.pub /mnt/home/${USERNAME}/.ssh/id_github.pub 57 + 58 + chmod 600 /mnt/home/${USERNAME}/.ssh/id_ed25519{,.pub} 59 + chmod 600 /mnt/home/${USERNAME}/.ssh/id_github{,.pub} 60 + } 61 + 62 + link_home_dir() { 63 + ln -s /mnt/home/${USERNAME} /home/${USERNAME} # Used to grab initial secrets 64 + } 65 + 66 + install_nixos() { 67 + ARCH=$(uname -m) 68 + 69 + case "$ARCH" in 70 + x86_64) 71 + FLAKE_TARGET="x86_64-linux" 72 + ;; 73 + aarch64) 74 + FLAKE_TARGET="aarch64-linux" 75 + ;; 76 + *) 77 + echo -e "${RED}Unsupported architecture: $ARCH${CLEAR}" 78 + exit 1 79 + ;; 80 + esac 81 + 82 + sudo nixos-install --flake .#$FLAKE_TARGET $@ 83 + sudo chmod -R 775 /mnt/etc/nixos 84 + } 85 + 86 + prompt_reboot() { 87 + read -p "Do you want to reboot now? (y/yes) " choice 88 + case "$choice" in 89 + y|Y|yes|YES ) echo -e "\e[1;32mRebooting...\e[0m" && sudo reboot;; 90 + * ) echo -e "\e[1;33mReboot skipped.\e[0m";; 91 + esac 92 + } 93 + 94 + cleanup 95 + check_installer 96 + download_config 97 + run_apply 98 + run_disko 99 + setup_files 100 + setup_ssh_keys 101 + link_home_dir 102 + install_nixos 103 + cleanup 104 + prompt_reboot
+897 -53
flake.lock
··· 10 10 "systems": "systems" 11 11 }, 12 12 "locked": { 13 - "lastModified": 1723293904, 14 - "narHash": "sha256-b+uqzj+Wa6xgMS9aNbX4I+sXeb5biPDi39VgvSFqFvU=", 13 + "lastModified": 1747575206, 14 + "narHash": "sha256-NwmAFuDUO/PFcgaGGr4j3ozG9Pe5hZ/ogitWhY+D81k=", 15 15 "owner": "ryantm", 16 16 "repo": "agenix", 17 - "rev": "f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41", 17 + "rev": "4835b1dc898959d8547a871ef484930675cb47f1", 18 18 "type": "github" 19 19 }, 20 20 "original": { ··· 48 48 "url": "ssh://gitea@git.sealight.xyz/aynish/basant" 49 49 } 50 50 }, 51 + "breezy": { 52 + "inputs": { 53 + "flake-compat": "flake-compat", 54 + "flake-utils": "flake-utils_2", 55 + "nixpkgs": [ 56 + "unstable" 57 + ] 58 + }, 59 + "locked": { 60 + "lastModified": 1746128594, 61 + "narHash": "sha256-yynk80vxbBk3zhcGj/FT8lz2DBrjxb/1OoRy8JEbqtQ=", 62 + "owner": "shymega", 63 + "repo": "breezy-desktop", 64 + "rev": "77b9d4ef8dbf6a26427be6f3edae49d3c36fd5bc", 65 + "type": "github" 66 + }, 67 + "original": { 68 + "owner": "shymega", 69 + "ref": "shymega/add-nix-flake-support", 70 + "repo": "breezy-desktop", 71 + "type": "github" 72 + } 73 + }, 74 + "brew-src": { 75 + "flake": false, 76 + "locked": { 77 + "lastModified": 1746795192, 78 + "narHash": "sha256-Cv+RXuzmn2iGBY2Ny/nXBTH+LFKDWIvMxf9a+btKI6M=", 79 + "owner": "Homebrew", 80 + "repo": "brew", 81 + "rev": "6f39076b3c2251994419215279d0525ef667fc31", 82 + "type": "github" 83 + }, 84 + "original": { 85 + "owner": "Homebrew", 86 + "ref": "4.5.2", 87 + "repo": "brew", 88 + "type": "github" 89 + } 90 + }, 91 + "crane": { 92 + "flake": false, 93 + "locked": { 94 + "lastModified": 1699217310, 95 + "narHash": "sha256-xpW3VFUG7yE6UE6Wl0dhqencuENSkV7qpnpe9I8VbPw=", 96 + "owner": "ipetkov", 97 + "repo": "crane", 98 + "rev": "d535642bbe6f377077f7c23f0febb78b1463f449", 99 + "type": "github" 100 + }, 101 + "original": { 102 + "owner": "ipetkov", 103 + "ref": "v0.15.0", 104 + "repo": "crane", 105 + "type": "github" 106 + } 107 + }, 51 108 "darwin": { 52 109 "inputs": { 53 110 "nixpkgs": [ ··· 56 113 ] 57 114 }, 58 115 "locked": { 59 - "lastModified": 1700795494, 60 - "narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=", 116 + "lastModified": 1744478979, 117 + "narHash": "sha256-dyN+teG9G82G+m+PX/aSAagkC+vUv0SgUw3XkPhQodQ=", 61 118 "owner": "lnl7", 62 119 "repo": "nix-darwin", 63 - "rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d", 120 + "rev": "43975d782b418ebf4969e9ccba82466728c2851b", 64 121 "type": "github" 65 122 }, 66 123 "original": { 67 124 "owner": "lnl7", 125 + "ref": "master", 126 + "repo": "nix-darwin", 127 + "type": "github" 128 + } 129 + }, 130 + "darwin_2": { 131 + "inputs": { 132 + "nixpkgs": [ 133 + "nixpkgs" 134 + ] 135 + }, 136 + "locked": { 137 + "lastModified": 1748065210, 138 + "narHash": "sha256-dFqlLNW6UW19m0vg5FHWLH2G2LGkqYyPs/4YqfoZMoM=", 139 + "owner": "LnL7", 140 + "repo": "nix-darwin", 141 + "rev": "acd6aa5a9065c6695212be313e06f08f7184cb25", 142 + "type": "github" 143 + }, 144 + "original": { 145 + "owner": "LnL7", 68 146 "ref": "master", 69 147 "repo": "nix-darwin", 70 148 "type": "github" ··· 72 150 }, 73 151 "deploy-rs": { 74 152 "inputs": { 75 - "flake-compat": "flake-compat", 153 + "flake-compat": "flake-compat_2", 76 154 "nixpkgs": [ 77 155 "nixpkgs" 78 156 ], 79 157 "utils": "utils" 80 158 }, 81 159 "locked": { 82 - "lastModified": 1718194053, 83 - "narHash": "sha256-FaGrf7qwZ99ehPJCAwgvNY5sLCqQ3GDiE/6uLhxxwSY=", 160 + "lastModified": 1727447169, 161 + "narHash": "sha256-3KyjMPUKHkiWhwR91J1YchF6zb6gvckCAY1jOE+ne0U=", 84 162 "owner": "serokell", 85 163 "repo": "deploy-rs", 86 - "rev": "3867348fa92bc892eba5d9ddb2d7a97b9e127a8a", 164 + "rev": "aa07eb05537d4cd025e2310397a6adcedfe72c76", 87 165 "type": "github" 88 166 }, 89 167 "original": { ··· 130 208 ] 131 209 }, 132 210 "locked": { 133 - "lastModified": 1724031427, 134 - "narHash": "sha256-o1HdAf+7IGv9M13R3c+zc/sJ0QgeEnhsvHBcodI4UpM=", 211 + "lastModified": 1747742835, 212 + "narHash": "sha256-kYL4GCwwznsypvsnA20oyvW8zB/Dvn6K5G/tgMjVMT4=", 135 213 "owner": "nix-community", 136 214 "repo": "disko", 137 - "rev": "4e719b38fa7c85f4f65d0308ca7084c91e7bdd6d", 215 + "rev": "df522e787fdffc4f32ed3e1fca9ed0968a384d62", 138 216 "type": "github" 139 217 }, 140 218 "original": { ··· 143 221 "type": "github" 144 222 } 145 223 }, 224 + "dream2nix": { 225 + "inputs": { 226 + "nixpkgs": [ 227 + "sg-nvim", 228 + "nci", 229 + "nixpkgs" 230 + ], 231 + "purescript-overlay": "purescript-overlay", 232 + "pyproject-nix": "pyproject-nix" 233 + }, 234 + "locked": { 235 + "lastModified": 1722526955, 236 + "narHash": "sha256-fFS8aDnfK9Qfm2FLnQ8pqWk8FzvFEv5LvTuZTZLREnc=", 237 + "owner": "nix-community", 238 + "repo": "dream2nix", 239 + "rev": "3fd4c14d3683baac8d1f94286ae14fe160888b51", 240 + "type": "github" 241 + }, 242 + "original": { 243 + "owner": "nix-community", 244 + "repo": "dream2nix", 245 + "type": "github" 246 + } 247 + }, 146 248 "flake-compat": { 147 249 "flake": false, 148 250 "locked": { ··· 162 264 "flake-compat_2": { 163 265 "flake": false, 164 266 "locked": { 267 + "lastModified": 1696426674, 268 + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", 269 + "owner": "edolstra", 270 + "repo": "flake-compat", 271 + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", 272 + "type": "github" 273 + }, 274 + "original": { 275 + "owner": "edolstra", 276 + "repo": "flake-compat", 277 + "type": "github" 278 + } 279 + }, 280 + "flake-compat_3": { 281 + "flake": false, 282 + "locked": { 165 283 "lastModified": 1641205782, 166 284 "narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=", 167 285 "owner": "edolstra", ··· 175 293 "type": "github" 176 294 } 177 295 }, 296 + "flake-compat_4": { 297 + "flake": false, 298 + "locked": { 299 + "lastModified": 1696426674, 300 + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", 301 + "owner": "edolstra", 302 + "repo": "flake-compat", 303 + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", 304 + "type": "github" 305 + }, 306 + "original": { 307 + "owner": "edolstra", 308 + "repo": "flake-compat", 309 + "type": "github" 310 + } 311 + }, 312 + "flake-compat_5": { 313 + "flake": false, 314 + "locked": { 315 + "lastModified": 1733328505, 316 + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", 317 + "owner": "edolstra", 318 + "repo": "flake-compat", 319 + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", 320 + "type": "github" 321 + }, 322 + "original": { 323 + "owner": "edolstra", 324 + "repo": "flake-compat", 325 + "type": "github" 326 + } 327 + }, 328 + "flake-parts": { 329 + "inputs": { 330 + "nixpkgs-lib": [ 331 + "nur", 332 + "nixpkgs" 333 + ] 334 + }, 335 + "locked": { 336 + "lastModified": 1733312601, 337 + "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", 338 + "owner": "hercules-ci", 339 + "repo": "flake-parts", 340 + "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", 341 + "type": "github" 342 + }, 343 + "original": { 344 + "owner": "hercules-ci", 345 + "repo": "flake-parts", 346 + "type": "github" 347 + } 348 + }, 349 + "flake-parts_2": { 350 + "inputs": { 351 + "nixpkgs-lib": "nixpkgs-lib" 352 + }, 353 + "locked": { 354 + "lastModified": 1725234343, 355 + "narHash": "sha256-+ebgonl3NbiKD2UD0x4BszCZQ6sTfL4xioaM49o5B3Y=", 356 + "owner": "hercules-ci", 357 + "repo": "flake-parts", 358 + "rev": "567b938d64d4b4112ee253b9274472dc3a346eb6", 359 + "type": "github" 360 + }, 361 + "original": { 362 + "owner": "hercules-ci", 363 + "repo": "flake-parts", 364 + "type": "github" 365 + } 366 + }, 178 367 "flake-utils": { 179 368 "locked": { 180 369 "lastModified": 1638122382, ··· 191 380 } 192 381 }, 193 382 "flake-utils_2": { 383 + "inputs": { 384 + "systems": "systems_2" 385 + }, 386 + "locked": { 387 + "lastModified": 1726560853, 388 + "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", 389 + "owner": "numtide", 390 + "repo": "flake-utils", 391 + "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", 392 + "type": "github" 393 + }, 394 + "original": { 395 + "owner": "numtide", 396 + "repo": "flake-utils", 397 + "type": "github" 398 + } 399 + }, 400 + "flake-utils_3": { 194 401 "locked": { 195 402 "lastModified": 1667395993, 196 403 "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", ··· 205 412 "type": "github" 206 413 } 207 414 }, 415 + "flake-utils_4": { 416 + "inputs": { 417 + "systems": "systems_4" 418 + }, 419 + "locked": { 420 + "lastModified": 1731533236, 421 + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", 422 + "owner": "numtide", 423 + "repo": "flake-utils", 424 + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", 425 + "type": "github" 426 + }, 427 + "original": { 428 + "owner": "numtide", 429 + "repo": "flake-utils", 430 + "type": "github" 431 + } 432 + }, 433 + "gitignore": { 434 + "inputs": { 435 + "nixpkgs": [ 436 + "sg-nvim", 437 + "pre-commit-nix", 438 + "nixpkgs" 439 + ] 440 + }, 441 + "locked": { 442 + "lastModified": 1709087332, 443 + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", 444 + "owner": "hercules-ci", 445 + "repo": "gitignore.nix", 446 + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", 447 + "type": "github" 448 + }, 449 + "original": { 450 + "owner": "hercules-ci", 451 + "repo": "gitignore.nix", 452 + "type": "github" 453 + } 454 + }, 208 455 "grasp": { 209 456 "inputs": { 210 - "flake-utils": "flake-utils_2", 457 + "flake-utils": "flake-utils_3", 211 458 "nixpkgs": [ 212 459 "nixpkgs" 213 460 ] ··· 229 476 }, 230 477 "hardware": { 231 478 "locked": { 232 - "lastModified": 1723310128, 233 - "narHash": "sha256-IiH8jG6PpR4h9TxSGMYh+2/gQiJW9MwehFvheSb5rPc=", 479 + "lastModified": 1747900541, 480 + "narHash": "sha256-dn64Pg9xLETjblwZs9Euu/SsjW80pd6lr5qSiyLY1pg=", 234 481 "owner": "nixos", 235 482 "repo": "nixos-hardware", 236 - "rev": "c54cf53e022b0b3c1d3b8207aa0f9b194c24f0cf", 483 + "rev": "11f2d9ea49c3e964315215d6baa73a8d42672f06", 237 484 "type": "github" 238 485 }, 239 486 "original": { ··· 250 497 ] 251 498 }, 252 499 "locked": { 253 - "lastModified": 1703113217, 254 - "narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=", 500 + "lastModified": 1745494811, 501 + "narHash": "sha256-YZCh2o9Ua1n9uCvrvi5pRxtuVNml8X2a03qIFfRKpFs=", 255 502 "owner": "nix-community", 256 503 "repo": "home-manager", 257 - "rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1", 504 + "rev": "abfad3d2958c9e6300a883bd443512c55dfeb1be", 258 505 "type": "github" 259 506 }, 260 507 "original": { ··· 270 517 ] 271 518 }, 272 519 "locked": { 273 - "lastModified": 1720042825, 274 - "narHash": "sha256-A0vrUB6x82/jvf17qPCpxaM+ulJnD8YZwH9Ci0BsAzE=", 520 + "lastModified": 1747556831, 521 + "narHash": "sha256-Qb84nbYFFk0DzFeqVoHltS2RodAYY5/HZQKE8WnBDsc=", 275 522 "owner": "nix-community", 276 523 "repo": "home-manager", 277 - "rev": "e1391fb22e18a36f57e6999c7a9f966dc80ac073", 524 + "rev": "d0bbd221482c2713cccb80220f3c9d16a6e20a33", 278 525 "type": "github" 279 526 }, 280 527 "original": { 281 528 "owner": "nix-community", 282 - "ref": "release-24.05", 529 + "ref": "release-25.05", 283 530 "repo": "home-manager", 284 531 "type": "github" 285 532 } 286 533 }, 534 + "homebrew-bundle": { 535 + "flake": false, 536 + "locked": { 537 + "lastModified": 1745335228, 538 + "narHash": "sha256-TIKR2UgtyUmHLNZp255/vLs+1I10hXe+sciMEbAGFwE=", 539 + "owner": "homebrew", 540 + "repo": "homebrew-bundle", 541 + "rev": "a3265c84b232e13048ecbf6fc18a2eedfadbeb08", 542 + "type": "github" 543 + }, 544 + "original": { 545 + "owner": "homebrew", 546 + "repo": "homebrew-bundle", 547 + "type": "github" 548 + } 549 + }, 550 + "homebrew-cask": { 551 + "flake": false, 552 + "locked": { 553 + "lastModified": 1748113418, 554 + "narHash": "sha256-lX4WosoMtusSD4GRDRvzwQwzLJUetg5HEWlMcJ4IQmI=", 555 + "owner": "homebrew", 556 + "repo": "homebrew-cask", 557 + "rev": "ed1a02852e1c4a5fab4aef776082ca89cd70f09a", 558 + "type": "github" 559 + }, 560 + "original": { 561 + "owner": "homebrew", 562 + "repo": "homebrew-cask", 563 + "type": "github" 564 + } 565 + }, 566 + "homebrew-core": { 567 + "flake": false, 568 + "locked": { 569 + "lastModified": 1748120562, 570 + "narHash": "sha256-b4Qd9nAVW8yMqZ5T9B7HfSrDLCrtsw07D98/NWz2xsE=", 571 + "owner": "homebrew", 572 + "repo": "homebrew-core", 573 + "rev": "b26cd07a06b15767688137a68461cb34fe985efa", 574 + "type": "github" 575 + }, 576 + "original": { 577 + "owner": "homebrew", 578 + "repo": "homebrew-core", 579 + "type": "github" 580 + } 581 + }, 582 + "jovian": { 583 + "inputs": { 584 + "nix-github-actions": "nix-github-actions", 585 + "nixpkgs": [ 586 + "unstable" 587 + ] 588 + }, 589 + "locked": { 590 + "lastModified": 1747990026, 591 + "narHash": "sha256-sG5VbID+x5+xUC+jjgHibnzg8IllVcH+K2TLmYHLPME=", 592 + "owner": "jovian-experiments", 593 + "repo": "jovian-nixos", 594 + "rev": "e2f4ced874406541a7957f7e2b8f05a0d59a0f00", 595 + "type": "github" 596 + }, 597 + "original": { 598 + "owner": "jovian-experiments", 599 + "repo": "jovian-nixos", 600 + "type": "github" 601 + } 602 + }, 603 + "mk-naked-shell": { 604 + "flake": false, 605 + "locked": { 606 + "lastModified": 1681286841, 607 + "narHash": "sha256-3XlJrwlR0nBiREnuogoa5i1b4+w/XPe0z8bbrJASw0g=", 608 + "owner": "yusdacra", 609 + "repo": "mk-naked-shell", 610 + "rev": "7612f828dd6f22b7fb332cc69440e839d7ffe6bd", 611 + "type": "github" 612 + }, 613 + "original": { 614 + "owner": "yusdacra", 615 + "repo": "mk-naked-shell", 616 + "type": "github" 617 + } 618 + }, 619 + "nci": { 620 + "inputs": { 621 + "crane": "crane", 622 + "dream2nix": "dream2nix", 623 + "mk-naked-shell": "mk-naked-shell", 624 + "nixpkgs": "nixpkgs_6", 625 + "parts": "parts", 626 + "rust-overlay": "rust-overlay_2", 627 + "treefmt": "treefmt" 628 + }, 629 + "locked": { 630 + "lastModified": 1725862543, 631 + "narHash": "sha256-tq5GovIMh1CaC4wtf7qdnzyab+tlpIspuR13FHAVibA=", 632 + "owner": "yusdacra", 633 + "repo": "nix-cargo-integration", 634 + "rev": "b60e6590f9d54041660d5dc86242721eb568371d", 635 + "type": "github" 636 + }, 637 + "original": { 638 + "owner": "yusdacra", 639 + "repo": "nix-cargo-integration", 640 + "type": "github" 641 + } 642 + }, 643 + "nix-darwin": { 644 + "inputs": { 645 + "nixpkgs": "nixpkgs" 646 + }, 647 + "locked": { 648 + "lastModified": 1716329735, 649 + "narHash": "sha256-ap51w+VqG21vuzyQ04WrhI2YbWHd3UGz0e7dc/QQmoA=", 650 + "owner": "LnL7", 651 + "repo": "nix-darwin", 652 + "rev": "eac4f25028c1975a939c8f8fba95c12f8a25e01c", 653 + "type": "github" 654 + }, 655 + "original": { 656 + "owner": "LnL7", 657 + "repo": "nix-darwin", 658 + "type": "github" 659 + } 660 + }, 661 + "nix-github-actions": { 662 + "inputs": { 663 + "nixpkgs": [ 664 + "jovian", 665 + "nixpkgs" 666 + ] 667 + }, 668 + "locked": { 669 + "lastModified": 1729697500, 670 + "narHash": "sha256-VFTWrbzDlZyFHHb1AlKRiD/qqCJIripXKiCSFS8fAOY=", 671 + "owner": "zhaofengli", 672 + "repo": "nix-github-actions", 673 + "rev": "e418aeb728b6aa5ca8c5c71974e7159c2df1d8cf", 674 + "type": "github" 675 + }, 676 + "original": { 677 + "owner": "zhaofengli", 678 + "ref": "matrix-name", 679 + "repo": "nix-github-actions", 680 + "type": "github" 681 + } 682 + }, 683 + "nix-homebrew": { 684 + "inputs": { 685 + "brew-src": "brew-src", 686 + "nix-darwin": "nix-darwin", 687 + "nixpkgs": "nixpkgs_2" 688 + }, 689 + "locked": { 690 + "lastModified": 1747444109, 691 + "narHash": "sha256-fSufrKr8NdhLMuGZGwjGUfH+TIWrjFTRIBhgCRIyxno=", 692 + "owner": "zhaofengli-wip", 693 + "repo": "nix-homebrew", 694 + "rev": "159f21ae77da757bbaeb98c0b16ff2e7b2738350", 695 + "type": "github" 696 + }, 697 + "original": { 698 + "owner": "zhaofengli-wip", 699 + "repo": "nix-homebrew", 700 + "type": "github" 701 + } 702 + }, 287 703 "nix-matrix-appservices": { 288 704 "inputs": { 289 705 "devshell": "devshell", 290 - "flake-compat": "flake-compat_2", 706 + "flake-compat": "flake-compat_3", 291 707 "nixlib": "nixlib", 292 - "nixpkgs": "nixpkgs" 708 + "nixpkgs": "nixpkgs_3" 293 709 }, 294 710 "locked": { 295 711 "lastModified": 1683490239, ··· 322 738 }, 323 739 "nixos-hardware": { 324 740 "locked": { 325 - "lastModified": 1723310128, 326 - "narHash": "sha256-IiH8jG6PpR4h9TxSGMYh+2/gQiJW9MwehFvheSb5rPc=", 741 + "lastModified": 1747900541, 742 + "narHash": "sha256-dn64Pg9xLETjblwZs9Euu/SsjW80pd6lr5qSiyLY1pg=", 327 743 "owner": "NixOS", 328 744 "repo": "nixos-hardware", 329 - "rev": "c54cf53e022b0b3c1d3b8207aa0f9b194c24f0cf", 745 + "rev": "11f2d9ea49c3e964315215d6baa73a8d42672f06", 330 746 "type": "github" 331 747 }, 332 748 "original": { ··· 338 754 }, 339 755 "nixpkgs": { 340 756 "locked": { 757 + "lastModified": 1687274257, 758 + "narHash": "sha256-TutzPriQcZ8FghDhEolnHcYU2oHIG5XWF+/SUBNnAOE=", 759 + "path": "/nix/store/22qgs3skscd9bmrxv9xv4q5d4wwm5ppx-source", 760 + "rev": "2c9ecd1f0400076a4d6b2193ad468ff0a7e7fdc5", 761 + "type": "path" 762 + }, 763 + "original": { 764 + "id": "nixpkgs", 765 + "type": "indirect" 766 + } 767 + }, 768 + "nixpkgs-lib": { 769 + "locked": { 770 + "lastModified": 1725233747, 771 + "narHash": "sha256-Ss8QWLXdr2JCBPcYChJhz4xJm+h/xjl4G0c0XlP6a74=", 772 + "type": "tarball", 773 + "url": "https://github.com/NixOS/nixpkgs/archive/356624c12086a18f2ea2825fed34523d60ccc4e3.tar.gz" 774 + }, 775 + "original": { 776 + "type": "tarball", 777 + "url": "https://github.com/NixOS/nixpkgs/archive/356624c12086a18f2ea2825fed34523d60ccc4e3.tar.gz" 778 + } 779 + }, 780 + "nixpkgs-stable": { 781 + "locked": { 782 + "lastModified": 1720386169, 783 + "narHash": "sha256-NGKVY4PjzwAa4upkGtAMz1npHGoRzWotlSnVlqI40mo=", 784 + "owner": "NixOS", 785 + "repo": "nixpkgs", 786 + "rev": "194846768975b7ad2c4988bdb82572c00222c0d7", 787 + "type": "github" 788 + }, 789 + "original": { 790 + "owner": "NixOS", 791 + "ref": "nixos-24.05", 792 + "repo": "nixpkgs", 793 + "type": "github" 794 + } 795 + }, 796 + "nixpkgs_2": { 797 + "locked": { 798 + "lastModified": 1746328495, 799 + "narHash": "sha256-uKCfuDs7ZM3QpCE/jnfubTg459CnKnJG/LwqEVEdEiw=", 800 + "owner": "NixOS", 801 + "repo": "nixpkgs", 802 + "rev": "979daf34c8cacebcd917d540070b52a3c2b9b16e", 803 + "type": "github" 804 + }, 805 + "original": { 806 + "owner": "NixOS", 807 + "ref": "nixos-unstable", 808 + "repo": "nixpkgs", 809 + "type": "github" 810 + } 811 + }, 812 + "nixpkgs_3": { 813 + "locked": { 341 814 "lastModified": 1662099760, 342 815 "narHash": "sha256-MdZLCTJPeHi/9fg6R9fiunyDwP3XHJqDd51zWWz9px0=", 343 816 "owner": "NixOS", ··· 352 825 "type": "github" 353 826 } 354 827 }, 355 - "nixpkgs_2": { 828 + "nixpkgs_4": { 829 + "locked": { 830 + "lastModified": 1747862697, 831 + "narHash": "sha256-U4HaNZ1W26cbOVm0Eb5OdGSnfQVWQKbLSPrSSa78KC0=", 832 + "owner": "nixos", 833 + "repo": "nixpkgs", 834 + "rev": "2baa12ff69913392faf0ace833bc54bba297ea95", 835 + "type": "github" 836 + }, 837 + "original": { 838 + "owner": "nixos", 839 + "ref": "nixos-24.11", 840 + "repo": "nixpkgs", 841 + "type": "github" 842 + } 843 + }, 844 + "nixpkgs_5": { 845 + "locked": { 846 + "lastModified": 1748026106, 847 + "narHash": "sha256-6m1Y3/4pVw1RWTsrkAK2VMYSzG4MMIj7sqUy7o8th1o=", 848 + "owner": "nixos", 849 + "repo": "nixpkgs", 850 + "rev": "063f43f2dbdef86376cc29ad646c45c46e93234c", 851 + "type": "github" 852 + }, 853 + "original": { 854 + "owner": "nixos", 855 + "ref": "nixos-unstable", 856 + "repo": "nixpkgs", 857 + "type": "github" 858 + } 859 + }, 860 + "nixpkgs_6": { 861 + "locked": { 862 + "lastModified": 1725634671, 863 + "narHash": "sha256-v3rIhsJBOMLR8e/RNWxr828tB+WywYIoajrZKFM+0Gg=", 864 + "owner": "NixOS", 865 + "repo": "nixpkgs", 866 + "rev": "574d1eac1c200690e27b8eb4e24887f8df7ac27c", 867 + "type": "github" 868 + }, 869 + "original": { 870 + "owner": "NixOS", 871 + "ref": "nixos-unstable", 872 + "repo": "nixpkgs", 873 + "type": "github" 874 + } 875 + }, 876 + "nixpkgs_7": { 356 877 "locked": { 357 - "lastModified": 1723938990, 358 - "narHash": "sha256-9tUadhnZQbWIiYVXH8ncfGXGvkNq3Hag4RCBEMUk7MI=", 878 + "lastModified": 1725816686, 879 + "narHash": "sha256-0Kq2MkQ/sQX1rhWJ/ySBBQlBJBUK8mPMDcuDhhdBkSU=", 359 880 "owner": "nixos", 360 881 "repo": "nixpkgs", 361 - "rev": "c42fcfbdfeae23e68fc520f9182dde9f38ad1890", 882 + "rev": "add0443ee587a0c44f22793b8c8649a0dbc3bb00", 362 883 "type": "github" 363 884 }, 364 885 "original": { 365 886 "owner": "nixos", 366 - "ref": "nixos-24.05", 887 + "ref": "nixpkgs-unstable", 888 + "repo": "nixpkgs", 889 + "type": "github" 890 + } 891 + }, 892 + "nixpkgs_8": { 893 + "locked": { 894 + "lastModified": 1719082008, 895 + "narHash": "sha256-jHJSUH619zBQ6WdC21fFAlDxHErKVDJ5fpN0Hgx4sjs=", 896 + "owner": "NixOS", 897 + "repo": "nixpkgs", 898 + "rev": "9693852a2070b398ee123a329e68f0dab5526681", 899 + "type": "github" 900 + }, 901 + "original": { 902 + "owner": "NixOS", 903 + "ref": "nixpkgs-unstable", 904 + "repo": "nixpkgs", 905 + "type": "github" 906 + } 907 + }, 908 + "nixpkgs_9": { 909 + "locked": { 910 + "lastModified": 1718428119, 911 + "narHash": "sha256-WdWDpNaq6u1IPtxtYHHWpl5BmabtpmLnMAx0RdJ/vo8=", 912 + "owner": "NixOS", 913 + "repo": "nixpkgs", 914 + "rev": "e6cea36f83499eb4e9cd184c8a8e823296b50ad5", 915 + "type": "github" 916 + }, 917 + "original": { 918 + "owner": "NixOS", 919 + "ref": "nixpkgs-unstable", 367 920 "repo": "nixpkgs", 368 921 "type": "github" 369 922 } 370 923 }, 371 924 "nur": { 925 + "inputs": { 926 + "flake-parts": "flake-parts", 927 + "nixpkgs": "nixpkgs_5", 928 + "treefmt-nix": "treefmt-nix" 929 + }, 372 930 "locked": { 373 - "lastModified": 1724040334, 374 - "narHash": "sha256-Ia4gRRmhFn4oJ4SJKJPDNPomsRRFWU+bqCK7yuiLW4E=", 931 + "lastModified": 1748119613, 932 + "narHash": "sha256-BvOMqlTgRbz8ldRcaf7OTKIRsGlOw4AssphiZGLd0fo=", 375 933 "owner": "nix-community", 376 934 "repo": "NUR", 377 - "rev": "24471a48600e18669d13d24c9640b9859357d2cf", 935 + "rev": "48380b491e6415284292516fe919d78207969e30", 378 936 "type": "github" 379 937 }, 380 938 "original": { 381 939 "owner": "nix-community", 382 940 "repo": "NUR", 941 + "type": "github" 942 + } 943 + }, 944 + "parts": { 945 + "inputs": { 946 + "nixpkgs-lib": [ 947 + "sg-nvim", 948 + "nci", 949 + "nixpkgs" 950 + ] 951 + }, 952 + "locked": { 953 + "lastModified": 1725234343, 954 + "narHash": "sha256-+ebgonl3NbiKD2UD0x4BszCZQ6sTfL4xioaM49o5B3Y=", 955 + "owner": "hercules-ci", 956 + "repo": "flake-parts", 957 + "rev": "567b938d64d4b4112ee253b9274472dc3a346eb6", 958 + "type": "github" 959 + }, 960 + "original": { 961 + "owner": "hercules-ci", 962 + "repo": "flake-parts", 383 963 "type": "github" 384 964 } 385 965 }, ··· 390 970 ] 391 971 }, 392 972 "locked": { 393 - "lastModified": 1724050814, 394 - "narHash": "sha256-THf50ZcBPY6r7/cyvE8bxYDvrctHrWbYaMx4udr4OUM=", 973 + "lastModified": 1738465265, 974 + "narHash": "sha256-v8nD/2gq8/mILEJqvWgx1q7Fc1purQvV3/WZLQ/t/wc=", 395 975 "ref": "main", 396 - "rev": "7628c26fd92f684ab5c7572c63de4af8b4b3a7b4", 397 - "revCount": 1464, 976 + "rev": "115f8af750c0d4b6a8c6f97119b12d7e3eb20c6a", 977 + "revCount": 1552, 398 978 "type": "git", 399 979 "url": "ssh://gitea@git.sealight.xyz/aynish/kitaab" 400 980 }, ··· 404 984 "url": "ssh://gitea@git.sealight.xyz/aynish/kitaab" 405 985 } 406 986 }, 987 + "pre-commit-nix": { 988 + "inputs": { 989 + "flake-compat": "flake-compat_4", 990 + "gitignore": "gitignore", 991 + "nixpkgs": "nixpkgs_8", 992 + "nixpkgs-stable": "nixpkgs-stable" 993 + }, 994 + "locked": { 995 + "lastModified": 1725513492, 996 + "narHash": "sha256-tyMUA6NgJSvvQuzB7A1Sf8+0XCHyfSPRx/b00o6K0uo=", 997 + "owner": "cachix", 998 + "repo": "pre-commit-hooks.nix", 999 + "rev": "7570de7b9b504cfe92025dd1be797bf546f66528", 1000 + "type": "github" 1001 + }, 1002 + "original": { 1003 + "owner": "cachix", 1004 + "repo": "pre-commit-hooks.nix", 1005 + "type": "github" 1006 + } 1007 + }, 1008 + "purescript-overlay": { 1009 + "inputs": { 1010 + "nixpkgs": [ 1011 + "sg-nvim", 1012 + "nci", 1013 + "dream2nix", 1014 + "nixpkgs" 1015 + ], 1016 + "slimlock": "slimlock" 1017 + }, 1018 + "locked": { 1019 + "lastModified": 1696022621, 1020 + "narHash": "sha256-eMjFmsj2G1E0Q5XiibUNgFjTiSz0GxIeSSzzVdoN730=", 1021 + "owner": "thomashoneyman", 1022 + "repo": "purescript-overlay", 1023 + "rev": "047c7933abd6da8aa239904422e22d190ce55ead", 1024 + "type": "github" 1025 + }, 1026 + "original": { 1027 + "owner": "thomashoneyman", 1028 + "repo": "purescript-overlay", 1029 + "type": "github" 1030 + } 1031 + }, 1032 + "pyproject-nix": { 1033 + "flake": false, 1034 + "locked": { 1035 + "lastModified": 1702448246, 1036 + "narHash": "sha256-hFg5s/hoJFv7tDpiGvEvXP0UfFvFEDgTdyHIjDVHu1I=", 1037 + "owner": "davhau", 1038 + "repo": "pyproject.nix", 1039 + "rev": "5a06a2697b228c04dd2f35659b4b659ca74f7aeb", 1040 + "type": "github" 1041 + }, 1042 + "original": { 1043 + "owner": "davhau", 1044 + "ref": "dream2nix", 1045 + "repo": "pyproject.nix", 1046 + "type": "github" 1047 + } 1048 + }, 407 1049 "root": { 408 1050 "inputs": { 409 1051 "agenix": "agenix", 410 1052 "basant": "basant", 1053 + "breezy": "breezy", 1054 + "darwin": "darwin_2", 411 1055 "deploy-rs": "deploy-rs", 412 1056 "disko": "disko", 413 1057 "grasp": "grasp", 414 1058 "hardware": "hardware", 415 1059 "home-manager": "home-manager_2", 1060 + "homebrew-bundle": "homebrew-bundle", 1061 + "homebrew-cask": "homebrew-cask", 1062 + "homebrew-core": "homebrew-core", 1063 + "jovian": "jovian", 1064 + "nix-homebrew": "nix-homebrew", 416 1065 "nix-matrix-appservices": "nix-matrix-appservices", 417 1066 "nixos-hardware": "nixos-hardware", 418 - "nixpkgs": "nixpkgs_2", 1067 + "nixpkgs": "nixpkgs_4", 419 1068 "nur": "nur", 420 1069 "poonam": "poonam", 421 1070 "rust-overlay": "rust-overlay", 1071 + "sg-nvim": "sg-nvim", 1072 + "sourcegraph-src-cli-cask": "sourcegraph-src-cli-cask", 422 1073 "tidalcycles": "tidalcycles", 423 1074 "unstable": "unstable", 424 - "vimwikicli": "vimwikicli" 1075 + "vimwikicli": "vimwikicli", 1076 + "xr-linux": "xr-linux" 425 1077 } 426 1078 }, 427 1079 "rust-overlay": { ··· 431 1083 ] 432 1084 }, 433 1085 "locked": { 434 - "lastModified": 1724034091, 435 - "narHash": "sha256-b1g7w0sw+MDAhUAeCoX1vlTghsqcDZkxr+k9OZmxPa8=", 1086 + "lastModified": 1748054080, 1087 + "narHash": "sha256-rwFiLLNCwkj9bqePtH1sMqzs1xmohE0Ojq249piMzF4=", 1088 + "owner": "oxalica", 1089 + "repo": "rust-overlay", 1090 + "rev": "2221d8d53c128beb69346fa3ab36da3f19bb1691", 1091 + "type": "github" 1092 + }, 1093 + "original": { 1094 + "owner": "oxalica", 1095 + "repo": "rust-overlay", 1096 + "type": "github" 1097 + } 1098 + }, 1099 + "rust-overlay_2": { 1100 + "flake": false, 1101 + "locked": { 1102 + "lastModified": 1725848835, 1103 + "narHash": "sha256-u4lCr+tOEWhsFiww5G04U5jUNzaQJi0/ZMIDGiLeT14=", 1104 + "owner": "oxalica", 1105 + "repo": "rust-overlay", 1106 + "rev": "2ef910a6276a2f34513d18f2f826a8dea72c3b3f", 1107 + "type": "github" 1108 + }, 1109 + "original": { 1110 + "owner": "oxalica", 1111 + "repo": "rust-overlay", 1112 + "type": "github" 1113 + } 1114 + }, 1115 + "rust-overlay_3": { 1116 + "inputs": { 1117 + "nixpkgs": "nixpkgs_9" 1118 + }, 1119 + "locked": { 1120 + "lastModified": 1725848835, 1121 + "narHash": "sha256-u4lCr+tOEWhsFiww5G04U5jUNzaQJi0/ZMIDGiLeT14=", 436 1122 "owner": "oxalica", 437 1123 "repo": "rust-overlay", 438 - "rev": "c7d36e0947826e0751a5214ffe82533fbc909bc0", 1124 + "rev": "2ef910a6276a2f34513d18f2f826a8dea72c3b3f", 439 1125 "type": "github" 440 1126 }, 441 1127 "original": { ··· 444 1130 "type": "github" 445 1131 } 446 1132 }, 1133 + "sg-nvim": { 1134 + "inputs": { 1135 + "flake-parts": "flake-parts_2", 1136 + "nci": "nci", 1137 + "nixpkgs": "nixpkgs_7", 1138 + "pre-commit-nix": "pre-commit-nix", 1139 + "rust-overlay": "rust-overlay_3" 1140 + }, 1141 + "locked": { 1142 + "lastModified": 1737448478, 1143 + "narHash": "sha256-i5g+pzxB8pAORLbr1wlYWUTsrJJmVj9UwlCg8pU3Suw=", 1144 + "owner": "sourcegraph", 1145 + "repo": "sg.nvim", 1146 + "rev": "775f22b75a9826eabf69b0094dd1d51d619fe552", 1147 + "type": "github" 1148 + }, 1149 + "original": { 1150 + "owner": "sourcegraph", 1151 + "repo": "sg.nvim", 1152 + "type": "github" 1153 + } 1154 + }, 1155 + "slimlock": { 1156 + "inputs": { 1157 + "nixpkgs": [ 1158 + "sg-nvim", 1159 + "nci", 1160 + "dream2nix", 1161 + "purescript-overlay", 1162 + "nixpkgs" 1163 + ] 1164 + }, 1165 + "locked": { 1166 + "lastModified": 1688610262, 1167 + "narHash": "sha256-Wg0ViDotFWGWqKIQzyYCgayeH8s4U1OZcTiWTQYdAp4=", 1168 + "owner": "thomashoneyman", 1169 + "repo": "slimlock", 1170 + "rev": "b5c6cdcaf636ebbebd0a1f32520929394493f1a6", 1171 + "type": "github" 1172 + }, 1173 + "original": { 1174 + "owner": "thomashoneyman", 1175 + "repo": "slimlock", 1176 + "type": "github" 1177 + } 1178 + }, 1179 + "sourcegraph-src-cli-cask": { 1180 + "flake": false, 1181 + "locked": { 1182 + "lastModified": 1747940755, 1183 + "narHash": "sha256-rS+LEcZKOoRN3bH+aZIV1Y4AlPR8dWosiRAA8Q1itBs=", 1184 + "owner": "sourcegraph", 1185 + "repo": "homebrew-src-cli", 1186 + "rev": "34bb40706f3f9641958db65c5c77a1db51140b3d", 1187 + "type": "github" 1188 + }, 1189 + "original": { 1190 + "owner": "sourcegraph", 1191 + "repo": "homebrew-src-cli", 1192 + "type": "github" 1193 + } 1194 + }, 447 1195 "superdirt-src": { 448 1196 "flake": false, 449 1197 "locked": { ··· 490 1238 "type": "github" 491 1239 } 492 1240 }, 1241 + "systems_3": { 1242 + "locked": { 1243 + "lastModified": 1681028828, 1244 + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 1245 + "owner": "nix-systems", 1246 + "repo": "default", 1247 + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 1248 + "type": "github" 1249 + }, 1250 + "original": { 1251 + "owner": "nix-systems", 1252 + "repo": "default", 1253 + "type": "github" 1254 + } 1255 + }, 1256 + "systems_4": { 1257 + "locked": { 1258 + "lastModified": 1681028828, 1259 + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 1260 + "owner": "nix-systems", 1261 + "repo": "default", 1262 + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 1263 + "type": "github" 1264 + }, 1265 + "original": { 1266 + "owner": "nix-systems", 1267 + "repo": "default", 1268 + "type": "github" 1269 + } 1270 + }, 493 1271 "tidal-src": { 494 1272 "flake": false, 495 1273 "locked": { ··· 519 1297 "vowel-src": "vowel-src" 520 1298 }, 521 1299 "locked": { 522 - "lastModified": 1723223284, 523 - "narHash": "sha256-NAT+g5nsaJZkpR0sCZjerd1xx233ZUdRH3ZWwZhzq/c=", 1300 + "lastModified": 1730626669, 1301 + "narHash": "sha256-nFyZrvTPn9OM9UZmuAwy3e1Ba0ZuYc2FaDCOOhGtqg4=", 524 1302 "owner": "mitchmindtree", 525 1303 "repo": "tidalcycles.nix", 526 - "rev": "82f3e8e8d02eb9f0c9dfe9ab3773b825c6bc1982", 1304 + "rev": "0db0918e7a3d3c30ed7a6e81dc9d4e3832870ac4", 527 1305 "type": "github" 528 1306 }, 529 1307 "original": { ··· 532 1310 "type": "github" 533 1311 } 534 1312 }, 1313 + "treefmt": { 1314 + "inputs": { 1315 + "nixpkgs": [ 1316 + "sg-nvim", 1317 + "nci", 1318 + "nixpkgs" 1319 + ] 1320 + }, 1321 + "locked": { 1322 + "lastModified": 1725271838, 1323 + "narHash": "sha256-VcqxWT0O/gMaeWTTjf1r4MOyG49NaNxW4GHTO3xuThE=", 1324 + "owner": "numtide", 1325 + "repo": "treefmt-nix", 1326 + "rev": "9fb342d14b69aefdf46187f6bb80a4a0d97007cd", 1327 + "type": "github" 1328 + }, 1329 + "original": { 1330 + "owner": "numtide", 1331 + "repo": "treefmt-nix", 1332 + "type": "github" 1333 + } 1334 + }, 1335 + "treefmt-nix": { 1336 + "inputs": { 1337 + "nixpkgs": [ 1338 + "nur", 1339 + "nixpkgs" 1340 + ] 1341 + }, 1342 + "locked": { 1343 + "lastModified": 1733222881, 1344 + "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=", 1345 + "owner": "numtide", 1346 + "repo": "treefmt-nix", 1347 + "rev": "49717b5af6f80172275d47a418c9719a31a78b53", 1348 + "type": "github" 1349 + }, 1350 + "original": { 1351 + "owner": "numtide", 1352 + "repo": "treefmt-nix", 1353 + "type": "github" 1354 + } 1355 + }, 535 1356 "unstable": { 536 1357 "locked": { 537 - "lastModified": 1723637854, 538 - "narHash": "sha256-med8+5DSWa2UnOqtdICndjDAEjxr5D7zaIiK4pn0Q7c=", 1358 + "lastModified": 1748026106, 1359 + "narHash": "sha256-6m1Y3/4pVw1RWTsrkAK2VMYSzG4MMIj7sqUy7o8th1o=", 539 1360 "owner": "nixos", 540 1361 "repo": "nixpkgs", 541 - "rev": "c3aa7b8938b17aebd2deecf7be0636000d62a2b9", 1362 + "rev": "063f43f2dbdef86376cc29ad646c45c46e93234c", 542 1363 "type": "github" 543 1364 }, 544 1365 "original": { ··· 550 1371 }, 551 1372 "utils": { 552 1373 "inputs": { 553 - "systems": "systems_2" 1374 + "systems": "systems_3" 554 1375 }, 555 1376 "locked": { 556 1377 "lastModified": 1701680307, ··· 616 1437 "original": { 617 1438 "owner": "supercollider-quarks", 618 1439 "repo": "vowel", 1440 + "type": "github" 1441 + } 1442 + }, 1443 + "xr-linux": { 1444 + "inputs": { 1445 + "flake-compat": "flake-compat_5", 1446 + "flake-utils": "flake-utils_4", 1447 + "nixpkgs": [ 1448 + "unstable" 1449 + ] 1450 + }, 1451 + "locked": { 1452 + "lastModified": 1746033220, 1453 + "narHash": "sha256-l4pISN7GDSL2o0BddkWtdCX4k4BjAaW0xwo5DbhfO8A=", 1454 + "owner": "shymega", 1455 + "repo": "XRLinuxDriver", 1456 + "rev": "c6cd02d547f87a156538c131e09ee4d41eb79325", 1457 + "type": "github" 1458 + }, 1459 + "original": { 1460 + "owner": "shymega", 1461 + "ref": "shymega/nix-flake-support", 1462 + "repo": "XRLinuxDriver", 619 1463 "type": "github" 620 1464 } 621 1465 }
+143 -11
flake.nix
··· 3 3 4 4 inputs = { 5 5 # Nixpkgs 6 - nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05"; 6 + nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11"; 7 7 unstable.url = "github:nixos/nixpkgs/nixos-unstable"; 8 8 nixos-hardware.url = "github:NixOS/nixos-hardware/master"; 9 9 ··· 11 11 # ngipkgs-local.url = "path:/home/anish/usr/ngipkgs"; 12 12 13 13 # Home manager 14 - home-manager.url = "github:nix-community/home-manager/release-24.05"; 14 + home-manager.url = "github:nix-community/home-manager/release-25.05"; 15 15 home-manager.inputs.nixpkgs.follows = "nixpkgs"; 16 16 hardware.url = "github:nixos/nixos-hardware"; 17 17 ··· 37 37 # Matrix 38 38 nix-matrix-appservices.url = "gitlab:coffeetables/nix-matrix-appservices"; 39 39 40 + # Jovian 41 + jovian = { 42 + url = "github:jovian-experiments/jovian-nixos"; 43 + inputs.nixpkgs.follows = "unstable"; 44 + }; 45 + # Breezy XR for Jovian 46 + xr-linux = { 47 + url = "github:shymega/XRLinuxDriver?ref=shymega/nix-flake-support"; 48 + inputs.nixpkgs.follows = "unstable"; 49 + }; 50 + breezy = { 51 + url = "github:shymega/breezy-desktop?ref=shymega/add-nix-flake-support"; 52 + inputs.nixpkgs.follows = "unstable"; 53 + }; 54 + # OSX 55 + darwin = { 56 + url = "github:LnL7/nix-darwin/master"; 57 + inputs.nixpkgs.follows = "nixpkgs"; 58 + }; 59 + nix-homebrew = { 60 + url = "github:zhaofengli-wip/nix-homebrew"; 61 + }; 62 + homebrew-bundle = { 63 + url = "github:homebrew/homebrew-bundle"; 64 + flake = false; 65 + }; 66 + homebrew-core = { 67 + url = "github:homebrew/homebrew-core"; 68 + flake = false; 69 + }; 70 + homebrew-cask = { 71 + url = "github:homebrew/homebrew-cask"; 72 + flake = false; 73 + }; 74 + 75 + # Sourcegraph 76 + sourcegraph-src-cli-cask = { 77 + url = "github:sourcegraph/homebrew-src-cli"; 78 + flake = false; 79 + }; 80 + sg-nvim.url = "github:sourcegraph/sg.nvim"; 81 + 40 82 # Others 41 83 nur.url = "github:nix-community/NUR"; 42 84 rust-overlay = { ··· 70 112 , tidalcycles 71 113 , rust-overlay 72 114 , vimwikicli 115 + , darwin 116 + , nix-homebrew 117 + , homebrew-bundle 118 + , homebrew-core 119 + , homebrew-cask 120 + , sourcegraph-src-cli-cask 121 + , sg-nvim 122 + , jovian 123 + , breezy 124 + , xr-linux 73 125 , ... 74 126 }@inputs: 75 127 let ··· 84 136 # We already have these in scope 85 137 unstable = unstable.legacyPackages.${prev.system}; 86 138 deploy = deploy-rs.packages.${prev.system}.deploy-rs; 139 + sg-nvim = sg-nvim.packages.${prev.system}.default; 87 140 }; 88 141 vimwikiOverlay = final: prev: { 89 142 vimwiki-cli = vimwikicli.packages.${prev.system}.vimwiki-cli; ··· 91 144 92 145 nixpkgsFor = forAllSystems (system: import nixpkgs { 93 146 inherit system; 94 - config.allowUnfreePredicate = pkg: builtins.elem (nixpkgs.lib.getName pkg) [ 95 - "ripcord" 96 - "vcv-rack" 97 - "SunVox" 98 - "renoise" 99 - ]; 147 + # This doesn't work... 148 + # on darwin, I need to export ALLOW_NIXPKGS_UNFREE=1 149 + # and pass --impure (have to manually copy the `nrd` command, it gets passed to the cd) 150 + config = { 151 + allowUnfree = true; 152 + allowUnfreePredicate = _: true; 153 + }; 154 + # config.allowUnfree = true; 155 + #config.allowUnfreePredicate = pkg: builtins.elem (nixpkgs.lib.getName pkg) [ 156 + # "ripcord" 157 + # "VCV-Rack" 158 + # "SunVox" 159 + # "renoise" 160 + # "graphite-cli" 161 + # "claude-code" 162 + #]; 100 163 # config.permittedInsecurePackages = [ 101 164 # "python3.10-django-3.1.14" # Needed for archivebox deployments on curve 102 165 # # Check when archive box updates it's dependeny ··· 108 171 nur.overlay 109 172 nix-matrix-appservices.overlay 110 173 unstableOverlay 111 - vimwikiOverlay 174 + # TODO Not available publically 175 + # vimwikiOverlay 112 176 self.overlays.additions 113 177 self.overlays.modifications 114 178 ]; ··· 128 192 tidalcycles.overlays.default # needed for nvim which comes pre-installed lol 129 193 ]; 130 194 }); 195 + 196 + # for deck 197 + deckPkgsFor = forAllSystems (system: import unstable { 198 + inherit system; 199 + config = { 200 + allowUnfree = true; 201 + }; 202 + overlays = [ 203 + breezy.overlays.default 204 + xr-linux.overlays.default 205 + nur.overlay 206 + ]; 207 + }); 208 + 209 + darwinSystems = [ "aarch64-darwin" "x86_64-darwin" ]; 131 210 in 132 211 { 133 - # Your custom packages 134 - # Acessible through 'nix build', 'nix shell', etc 135 212 packages = forAllSystems (system: 136 213 let pkgs = nixpkgsFor.${system}; 137 214 in import ./pkgs { pkgs = pkgs; } 138 215 ); 216 + 139 217 # Devshell for bootstrapping 140 218 # Acessible through 'nix develop' or 'nix-shell' (legacy) 141 219 devShells = forAllSystems (system: ··· 152 230 # These are usually stuff you would upstream into home-manager 153 231 homeManagerModules = import ./modules/home-manager; 154 232 233 + darwinConfigurations = { 234 + "Anishs-MacBook-Pro" = darwin.lib.darwinSystem rec { 235 + system = "aarch64-darwin"; 236 + pkgs = nixpkgsFor.${system}; 237 + specialArgs = { inherit inputs self; }; 238 + modules = [ 239 + ./hosts/darwin 240 + home-manager.darwinModules.home-manager 241 + agenix.darwinModules.default 242 + # nix-homebrew.darwinModules.nix-homebrew 243 + { 244 + users.users.anishlakhwara.home = "/Users/anishlakhwara"; 245 + home-manager = { 246 + users.anishlakhwara = import ./home/darwin; 247 + useGlobalPkgs = true; 248 + useUserPackages = true; 249 + }; 250 + # nix-homebrew = { 251 + # user = "anishlakhwara"; 252 + # enable = true; 253 + # # taps = { 254 + # # "homebrew/homebrew-core" = homebrew-core; 255 + # # "homebrew/homebrew-cask" = homebrew-cask; 256 + # # "homebrew/homebrew-bundle" = homebrew-bundle; 257 + # # "sourcegraph/homebrew-src-cli" = sourcegraph-src-cli-cask; 258 + # # }; 259 + # mutableTaps = true; 260 + # autoMigrate = true; 261 + # }; 262 + } 263 + ]; 264 + }; 265 + }; 266 + 155 267 # NixOS configuration entrypoint 156 268 nixosConfigurations = { 157 269 curve = nixpkgs.lib.nixosSystem rec { ··· 234 346 home-manager.useGlobalPkgs = true; 235 347 home-manager.useUserPackages = true; 236 348 home-manager.users.anish = import ./home/core; 349 + } 350 + ]; 351 + }; 352 + 353 + deck = unstable.lib.nixosSystem rec { 354 + specialArgs = { inherit inputs self; }; 355 + system = "x86_64-linux"; 356 + pkgs = deckPkgsFor.${system}; 357 + modules = [ 358 + ./hosts/deck 359 + jovian.nixosModules.default 360 + self.nixosModules.wireguard 361 + agenix.nixosModules.age 362 + self.nixosModules.backup 363 + home-manager.nixosModules.home-manager 364 + { 365 + nix.registry.nixpkgs.flake = unstable; 366 + home-manager.useGlobalPkgs = true; 367 + home-manager.useUserPackages = true; 368 + home-manager.users.anish = import ./home/gui; 237 369 } 238 370 ]; 239 371 };
+1
home/core/default.nix
··· 1 1 { self, pkgs, ... }: 2 2 { 3 3 imports = [ 4 + ../profiles/nvim 4 5 ../profiles/cli 5 6 ../profiles/direnv 6 7 ../profiles/git
+156
home/darwin/aerospace/config.toml
··· 1 + # You can use it to add commands that run after login to macOS user session. 2 + # 'start-at-login' needs to be 'true' for 'after-login-command' to work 3 + # Available commands: https://nikitabobko.github.io/AeroSpace/commands 4 + after-login-command = [] 5 + 6 + # You can use it to add commands that run after AeroSpace startup. 7 + # 'after-startup-command' is run after 'after-login-command' 8 + # Available commands : https://nikitabobko.github.io/AeroSpace/commands 9 + after-startup-command = [] 10 + 11 + # Start AeroSpace at login 12 + start-at-login = true 13 + 14 + # Normalizations. See: https://nikitabobko.github.io/AeroSpace/guide#normalization 15 + enable-normalization-flatten-containers = true 16 + enable-normalization-opposite-orientation-for-nested-containers = true 17 + 18 + # See: https://nikitabobko.github.io/AeroSpace/guide#layouts 19 + # The 'accordion-padding' specifies the size of accordion padding 20 + # You can set 0 to disable the padding feature 21 + accordion-padding = 10 22 + 23 + # Possible values: tiles|accordion 24 + default-root-container-layout = 'tiles' 25 + 26 + # Possible values: horizontal|vertical|auto 27 + # 'auto' means: wide monitor (anything wider than high) gets horizontal orientation, 28 + # tall monitor (anything higher than wide) gets vertical orientation 29 + default-root-container-orientation = 'auto' 30 + 31 + # Mouse follows focus when focused monitor changes 32 + # Drop it from your config, if you don't like this behavior 33 + # See https://nikitabobko.github.io/AeroSpace/guide#on-focus-changed-callbacks 34 + # See https://nikitabobko.github.io/AeroSpace/commands#move-mouse 35 + # Fallback value (if you omit the key): on-focused-monitor-changed = [] 36 + on-focused-monitor-changed = ['move-mouse monitor-lazy-center'] 37 + 38 + # You can effectively turn off macOS "Hide application" (cmd-h) feature by toggling this flag 39 + # Useful if you don't use this macOS feature, but accidentally hit cmd-h or cmd-alt-h key 40 + # Also see: https://nikitabobko.github.io/AeroSpace/goodies#disable-hide-app 41 + automatically-unhide-macos-hidden-apps = true 42 + 43 + # Possible values: (qwerty|dvorak) 44 + # See https://nikitabobko.github.io/AeroSpace/guide#key-mapping 45 + [key-mapping] 46 + preset = 'dvorak' 47 + 48 + # Gaps between windows (inner-*) and between monitor edges (outer-*). 49 + # Possible values: 50 + # - Constant: gaps.outer.top = 8 51 + # - Per monitor: gaps.outer.top = [{ monitor.main = 16 }, { monitor."some-pattern" = 32 }, 24] 52 + # In this example, 24 is a default value when there is no match. 53 + # Monitor pattern is the same as for 'workspace-to-monitor-force-assignment'. 54 + # See: https://nikitabobko.github.io/AeroSpace/guide#assign-workspaces-to-monitors 55 + [gaps] 56 + inner.horizontal = 0 57 + inner.vertical = 0 58 + outer.left = 0 59 + outer.bottom = 0 60 + outer.top = 0 61 + outer.right = 0 62 + 63 + # 'main' binding mode declaration 64 + # See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes 65 + # 'main' binding mode must be always presented 66 + # Fallback value (if you omit the key): mode.main.binding = {} 67 + [mode.main.binding] 68 + 69 + # All possible keys: 70 + # - Letters. a, b, c, ..., z 71 + # - Numbers. 0, 1, 2, ..., 9 72 + # - Keypad numbers. keypad0, keypad1, keypad2, ..., keypad9 73 + # - F-keys. f1, f2, ..., f20 74 + # - Special keys. minus, equal, period, comma, slash, backslash, quote, semicolon, backtick, 75 + # leftSquareBracket, rightSquareBracket, space, enter, esc, backspace, tab 76 + # - Keypad special. keypadClear, keypadDecimalMark, keypadDivide, keypadEnter, keypadEqual, 77 + # keypadMinus, keypadMultiply, keypadPlus 78 + # - Arrows. left, down, up, right 79 + 80 + # All possible modifiers: cmd, alt, ctrl, shift 81 + 82 + # All possible commands: https://nikitabobko.github.io/AeroSpace/commands 83 + 84 + # See: https://nikitabobko.github.io/AeroSpace/commands#exec-and-forget 85 + # You can uncomment the following lines to open up terminal with alt + enter shortcut (like in i3) 86 + alt-enter = 'exec-and-forget open -n /System/Applications/Utilities/Kitty.app' 87 + 88 + # See: https://nikitabobko.github.io/AeroSpace/commands#layout 89 + alt-slash = 'layout tiles horizontal vertical' 90 + alt-comma = 'layout accordion horizontal vertical' 91 + 92 + # See: https://nikitabobko.github.io/AeroSpace/commands#focus 93 + alt-h = 'focus left' 94 + alt-j = 'focus down' 95 + alt-k = 'focus up' 96 + alt-l = 'focus right' 97 + 98 + # See: https://nikitabobko.github.io/AeroSpace/commands#move 99 + alt-shift-h = 'move left' 100 + alt-shift-j = 'move down' 101 + alt-shift-k = 'move up' 102 + alt-shift-l = 'move right' 103 + 104 + # See: https://nikitabobko.github.io/AeroSpace/commands#resize 105 + alt-shift-minus = 'resize smart -50' 106 + alt-shift-equal = 'resize smart +50' 107 + 108 + # See: https://nikitabobko.github.io/AeroSpace/commands#workspace 109 + alt-1 = 'workspace 1' 110 + alt-2 = 'workspace 2' 111 + alt-3 = 'workspace 3' 112 + alt-4 = 'workspace 4' 113 + alt-5 = 'workspace 5' 114 + alt-6 = 'workspace 6' 115 + alt-7 = 'workspace 7' 116 + alt-8 = 'workspace 8' 117 + alt-9 = 'workspace 9' 118 + 119 + # See: https://nikitabobko.github.io/AeroSpace/commands#move-node-to-workspace 120 + alt-shift-1 = 'move-node-to-workspace 1' 121 + alt-shift-2 = 'move-node-to-workspace 2' 122 + alt-shift-3 = 'move-node-to-workspace 3' 123 + alt-shift-4 = 'move-node-to-workspace 4' 124 + alt-shift-5 = 'move-node-to-workspace 5' 125 + alt-shift-6 = 'move-node-to-workspace 6' 126 + alt-shift-7 = 'move-node-to-workspace 7' 127 + alt-shift-8 = 'move-node-to-workspace 8' 128 + alt-shift-9 = 'move-node-to-workspace 9' 129 + 130 + # See: https://nikitabobko.github.io/AeroSpace/commands#workspace-back-and-forth 131 + alt-tab = 'workspace-back-and-forth' 132 + # See: https://nikitabobko.github.io/AeroSpace/commands#move-workspace-to-monitor 133 + alt-shift-tab = 'move-workspace-to-monitor --wrap-around next' 134 + 135 + # See: https://nikitabobko.github.io/AeroSpace/commands#mode 136 + alt-shift-semicolon = 'mode service' 137 + 138 + # 'service' binding mode declaration. 139 + # See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes 140 + [mode.service.binding] 141 + esc = ['reload-config', 'mode main'] 142 + r = ['flatten-workspace-tree', 'mode main'] # reset layout 143 + f = ['layout floating tiling', 'mode main'] # Toggle between floating and tiling layout 144 + backspace = ['close-all-windows-but-current', 'mode main'] 145 + 146 + # sticky is not yet supported https://github.com/nikitabobko/AeroSpace/issues/2 147 + #s = ['layout sticky tiling', 'mode main'] 148 + 149 + alt-shift-h = ['join-with left', 'mode main'] 150 + alt-shift-j = ['join-with down', 'mode main'] 151 + alt-shift-k = ['join-with up', 'mode main'] 152 + alt-shift-l = ['join-with right', 'mode main'] 153 + 154 + down = 'volume down' 155 + up = 'volume up' 156 + shift-down = ['volume set 0', 'mode main']
+34
home/darwin/default.nix
··· 1 + { self, pkgs, ... }: 2 + { 3 + imports = [ 4 + ../profiles/nvim 5 + ../profiles/cli 6 + ../profiles/direnv 7 + ../profiles/git 8 + ../profiles/task 9 + ../profiles/kitty 10 + # ../profiles/firefox 11 + ]; 12 + 13 + home.username = "anishlakhwara"; 14 + home.homeDirectory = "/Users/anishlakhwara"; 15 + home.stateVersion = "22.05"; 16 + 17 + programs.zsh.initExtra = '' 18 + PATH=/Users/anishlakhwara/.sourcegraph/bin:/Users/anishlakhwara/.sourcegraph/sg.zsh_autocomplete:/Users/anishlakhwara/google-cloud-sdk/bin:/Users/anishlakhwara/google-cloud-sdk/completion.zsh.inc:/Users/anishlakhwara/google-cloud-sdk/path.zsh.inc:/Users/anishlakhwara/.sg:/opt/homebrew/bin:$PATH 19 + ''; 20 + 21 + # Managing sketchybar plugins from home-manager 22 + home.file = { 23 + ".config/sketchybar" = { 24 + source = ./sketchybar; 25 + recursive = true; 26 + }; 27 + ".config/aerospace" = { 28 + source = ./aerospace; 29 + }; 30 + ".tmux.conf" = { 31 + source = ./tmux/tmuxrc; 32 + }; 33 + }; 34 + }
+20
home/darwin/sketchybar/items/battery.sh
··· 1 + #!/usr/bin/env bash 2 + 3 + COLOR="$CYAN" 4 + 5 + sketchybar --add item battery right \ 6 + --set battery \ 7 + update_freq=60 \ 8 + icon.color="$COLOR" \ 9 + icon.padding_left=10 \ 10 + label.padding_right=10 \ 11 + label.color="$COLOR" \ 12 + background.height=26 \ 13 + background.corner_radius="$CORNER_RADIUS" \ 14 + background.padding_right=5 \ 15 + background.border_width="$BORDER_WIDTH" \ 16 + background.border_color="$COLOR" \ 17 + background.color="$BAR_COLOR" \ 18 + background.drawing=on \ 19 + script="$PLUGIN_DIR/power.sh" \ 20 + --subscribe battery power_source_change
+18
home/darwin/sketchybar/items/calendar.sh
··· 1 + #!/usr/bin/env bash 2 + 3 + COLOR="$BLUE" 4 + 5 + sketchybar --add item calendar right \ 6 + --set calendar update_freq=15 \ 7 + icon.color="$COLOR" \ 8 + icon.padding_left=10 \ 9 + label.color="$COLOR" \ 10 + label.padding_right=10 \ 11 + background.height=26 \ 12 + background.corner_radius="$CORNER_RADIUS" \ 13 + background.padding_right=5 \ 14 + background.border_width="$BORDER_WIDTH" \ 15 + background.border_color="$COLOR" \ 16 + background.color="$BAR_COLOR" \ 17 + background.drawing=on \ 18 + script="$PLUGIN_DIR/calendar.sh"
+21
home/darwin/sketchybar/items/clock.sh
··· 1 + #!/usr/bin/env bash 2 + 3 + COLOR="$MAGENTA" 4 + 5 + sketchybar --add item clock right \ 6 + --set clock update_freq=60 \ 7 + icon.padding_left=10 \ 8 + icon.color="$COLOR" \ 9 + icon="๏€— " \ 10 + label.color="$COLOR" \ 11 + label.padding_right=5 \ 12 + label.width=43 \ 13 + align=center \ 14 + background.height=26 \ 15 + background.corner_radius="$CORNER_RADIUS" \ 16 + background.padding_right=2 \ 17 + background.border_width="$BORDER_WIDTH" \ 18 + background.border_color="$COLOR" \ 19 + background.color="$BAR_COLOR" \ 20 + background.drawing=on \ 21 + script="$PLUGIN_DIR/clock.sh"
+19
home/darwin/sketchybar/items/cpu.sh
··· 1 + #!/usr/bin/env bash 2 + 3 + COLOR="$YELLOW" 4 + 5 + sketchybar --add item cpu right \ 6 + --set cpu \ 7 + update_freq=3 \ 8 + icon.color="$COLOR" \ 9 + icon.padding_left=10 \ 10 + label.color="$COLOR" \ 11 + label.padding_right=10 \ 12 + background.height=26 \ 13 + background.corner_radius="$CORNER_RADIUS" \ 14 + background.padding_right=5 \ 15 + background.border_width="$BORDER_WIDTH" \ 16 + background.border_color="$COLOR" \ 17 + background.color="$BAR_COLOR" \ 18 + background.drawing=on \ 19 + script="$PLUGIN_DIR/cpu.sh"
+20
home/darwin/sketchybar/items/front_app.sh
··· 1 + #!/usr/bin/env bash 2 + 3 + COLOR="$WHITE" 4 + 5 + sketchybar \ 6 + --add item front_app left \ 7 + --set front_app script="$PLUGIN_DIR/front_app.sh" \ 8 + icon.drawing=off \ 9 + background.height=26 \ 10 + background.padding_left=0 \ 11 + background.padding_right=10 \ 12 + background.border_width="$BORDER_WIDTH" \ 13 + background.border_color="$COLOR" \ 14 + background.corner_radius="$CORNER_RADIUS" \ 15 + background.color="$BAR_COLOR" \ 16 + label.color="$COLOR" \ 17 + label.padding_left=10 \ 18 + label.padding_right=10 \ 19 + associated_display=active \ 20 + --subscribe front_app front_app_switched
+44
home/darwin/sketchybar/items/spaces.sh
··· 1 + #!/usr/bin/env bash 2 + 3 + SPACE_ICONS=("1" "2" "3" "4" "5" "6" "7" "8" "9" "10") 4 + 5 + sketchybar --add item spacer.1 left \ 6 + --set spacer.1 background.drawing=off \ 7 + label.drawing=off \ 8 + icon.drawing=off \ 9 + width=10 10 + 11 + for i in {0..9}; do 12 + sid=$((i + 1)) 13 + sketchybar --add space space.$sid left \ 14 + --set space.$sid associated_space=$sid \ 15 + label.drawing=off \ 16 + icon.padding_left=10 \ 17 + icon.padding_right=10 \ 18 + background.padding_left=-5 \ 19 + background.padding_right=-5 \ 20 + script="$PLUGIN_DIR/space.sh" 21 + done 22 + 23 + sketchybar --add item spacer.2 left \ 24 + --set spacer.2 background.drawing=off \ 25 + label.drawing=off \ 26 + icon.drawing=off \ 27 + width=5 28 + 29 + sketchybar --add bracket spaces '/space.*/' \ 30 + --set spaces background.border_width="$BORDER_WIDTH" \ 31 + background.border_color="$RED" \ 32 + background.corner_radius="$CORNER_RADIUS" \ 33 + background.color="$BAR_COLOR" \ 34 + background.height=26 \ 35 + background.drawing=on 36 + 37 + sketchybar --add item separator left \ 38 + --set separator icon=๏” \ 39 + icon.font="$FONT:Regular:16.0" \ 40 + background.padding_left=26 \ 41 + background.padding_right=15 \ 42 + label.drawing=off \ 43 + associated_display=active \ 44 + icon.color="$YELLOW"
+23
home/darwin/sketchybar/items/spotify.sh
··· 1 + #!/usr/bin/env bash 2 + 3 + COLOR="$ORANGE" 4 + 5 + sketchybar --add item spotify q \ 6 + --set spotify \ 7 + scroll_texts=on \ 8 + icon=๓ฐކ \ 9 + icon.color="$COLOR" \ 10 + icon.padding_left=10 \ 11 + background.color="$BAR_COLOR" \ 12 + background.height=26 \ 13 + background.corner_radius="$CORNER_RADIUS" \ 14 + background.border_width="$BORDER_WIDTH" \ 15 + background.border_color="$COLOR" \ 16 + background.padding_right=-5 \ 17 + background.drawing=on \ 18 + label.padding_right=10 \ 19 + label.max_chars=20 \ 20 + associated_display=active \ 21 + updates=on \ 22 + script="$PLUGIN_DIR/spotify.sh" \ 23 + --subscribe spotify media_change
+20
home/darwin/sketchybar/items/volume.sh
··· 1 + #!/usr/bin/env bash 2 + 3 + COLOR="$GREEN" 4 + 5 + sketchybar \ 6 + --add item sound right \ 7 + --set sound \ 8 + icon.color="$COLOR" \ 9 + icon.padding_left=10 \ 10 + label.color="$COLOR" \ 11 + label.padding_right=10 \ 12 + background.height=26 \ 13 + background.corner_radius="$CORNER_RADIUS" \ 14 + background.padding_right=5 \ 15 + background.border_width="$BORDER_WIDTH" \ 16 + background.border_color="$COLOR" \ 17 + background.color="$BAR_COLOR" \ 18 + background.drawing=on \ 19 + script="$PLUGIN_DIR/sound.sh" \ 20 + --subscribe sound volume_change
+4
home/darwin/sketchybar/items/vpn.sh
··· 1 + sketchybar -m --add item vpn right \ 2 + --set vpn icon=๏’œ \ 3 + update_freq=5 \ 4 + script="~/.config/sketchybar/plugins/vpn.sh"
+3
home/darwin/sketchybar/plugins/calendar.sh
··· 1 + #!/usr/bin/env bash 2 + 3 + sketchybar --set "$NAME" icon="๓ฐธ— " label="$(date '+%a %d. %b')"
+4
home/darwin/sketchybar/plugins/clock.sh
··· 1 + #!/usr/bin/env bash 2 + 3 + LABEL=$(date '+%H:%M') 4 + sketchybar --set "$NAME" icon="๏€— " label="$LABEL"
+3
home/darwin/sketchybar/plugins/cpu.sh
··· 1 + #!/usr/bin/env bash 2 + 3 + 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
··· 1 + #!/usr/bin/env bash 2 + 3 + case "$SENDER" in 4 + "front_app_switched") 5 + sketchybar --set "$NAME" label="$INFO" 6 + ;; 7 + esac
+30
home/darwin/sketchybar/plugins/power.sh
··· 1 + #!/usr/bin/env bash 2 + 3 + PERCENTAGE=$(pmset -g batt | grep -Eo "\d+%" | cut -d% -f1) 4 + CHARGING=$(pmset -g batt | grep 'AC Power') 5 + 6 + if [ "$PERCENTAGE" = "" ]; then 7 + exit 0 8 + fi 9 + 10 + case ${PERCENTAGE} in 11 + 9[0-9] | 100) 12 + ICON="๏‰€ " 13 + ;; 14 + [6-8][0-9]) 15 + ICON="๏‰ " 16 + ;; 17 + [3-5][0-9]) 18 + ICON="๏‰‚ " 19 + ;; 20 + [1-2][0-9]) 21 + ICON="๏‰ƒ " 22 + ;; 23 + *) ICON="๏‰„ " ;; 24 + esac 25 + 26 + if [ "$CHARGING" != "" ]; then 27 + ICON="๏ƒง" 28 + fi 29 + 30 + sketchybar --set "$NAME" icon="$ICON" label="${PERCENTAGE}% "
+20
home/darwin/sketchybar/plugins/sound.sh
··· 1 + #!/usr/bin/env bash 2 + 3 + VOLUME=$(osascript -e "output volume of (get volume settings)") 4 + MUTED=$(osascript -e "output muted of (get volume settings)") 5 + 6 + if [ "$MUTED" != "false" ]; then 7 + ICON="๓ฐ– " 8 + VOLUME=0 9 + else 10 + case ${VOLUME} in 11 + 100) ICON="๏€จ " ;; 12 + [5-9]*) ICON="๏€จ " ;; 13 + [0-9]*) ICON="๏€ง " ;; 14 + *) ICON="๏€ง " ;; 15 + esac 16 + fi 17 + 18 + sketchybar -m \ 19 + --set "$NAME" icon=$ICON \ 20 + --set "$NAME" label="$VOLUME%"
+19
home/darwin/sketchybar/plugins/space.sh
··· 1 + #!/usr/bin/env bash 2 + 3 + source "$HOME/.config/sketchybar/variables.sh" # Loads all defined colors 4 + 5 + SPACE_ICONS=("๏‰ฉ " "๏ƒ  " "๓ฐบป " "๏Œ“ " "๎™‚ " "6" "7" "8" "9" "10") 6 + 7 + SPACE_CLICK_SCRIPT="yabai -m space --focus $SID 2>/dev/null" 8 + 9 + if [ "$SELECTED" = "true" ]; then 10 + sketchybar --animate tanh 5 --set "$NAME" \ 11 + icon.color="$RED" \ 12 + icon="${SPACE_ICONS[$SID - 1]}" \ 13 + click_script="$SPACE_CLICK_SCRIPT" 14 + else 15 + sketchybar --animate tanh 5 --set "$NAME" \ 16 + icon.color="$COMMENT" \ 17 + icon="${SPACE_ICONS[$SID - 1]}" \ 18 + click_script="$SPACE_CLICK_SCRIPT" 19 + fi
+11
home/darwin/sketchybar/plugins/spotify.sh
··· 1 + #!/usr/bin/env bash 2 + 3 + STATE="$(echo "$INFO" | jq -r '.state')" 4 + APP="$(echo "$INFO" | jq -r '.app')" 5 + 6 + if [ "$STATE" = "playing" ] && [ "$APP" == "Spotify" ]; then 7 + MEDIA="$(echo "$INFO" | jq -r '.title + " - " + .artist')" 8 + sketchybar --set "$NAME" label="$MEDIA" drawing=on 9 + else 10 + sketchybar --set "$NAME" drawing=off 11 + fi
+16
home/darwin/sketchybar/plugins/vpn.sh
··· 1 + #!/bin/bash 2 + 3 + ### You need to edit sudoers file to run wg-quick without password 4 + 5 + # %admin ALL = (ALL) NOPASSWD: /nix/store/s2qw0sxax8pckbzmyw6wrarahmx65bq9-wireguard-tools-1.0.20210914/bin/wg-quick 6 + 7 + WG_PIDFILE="/var/run/wireguard/wg0.name" 8 + 9 + if [ -f $WG_PIDFILE ]; then 10 + sketchybar -m --set vpn icon=๏’œ \ 11 + label="$VPN" \ 12 + drawing=on \ 13 + click_script="~/.config/sketchybar/plugins/wg_off.sh" 14 + else 15 + sketchybar -m --set vpn drawing=off click_script="~/.config/sketchybar/plugins/wg_on.sh" 16 + fi
+5
home/darwin/sketchybar/plugins/wg_off.sh
··· 1 + ### You need to edit sudoers file to run wg-quick without password 2 + 3 + # %admin ALL = (ALL) NOPASSWD: /nix/store/s2qw0sxax8pckbzmyw6wrarahmx65bq9-wireguard-tools-1.0.20210914/bin/wg-quick 4 + 5 + sudo wg-quick down wg0
+5
home/darwin/sketchybar/plugins/wg_on.sh
··· 1 + ### You need to edit sudoers file to run wg-quick without password 2 + 3 + # %admin ALL = (ALL) NOPASSWD: /nix/store/s2qw0sxax8pckbzmyw6wrarahmx65bq9-wireguard-tools-1.0.20210914/bin/wg-quick 4 + 5 + sudo wg-quick up wg0
+50
home/darwin/sketchybar/variables.sh
··· 1 + #!/usr/bin/env sh 2 + 3 + # Color Palette 4 + # Tokyonight Night 5 + BLACK=0xff24283b 6 + WHITE=0xffa9b1d6 7 + MAGENTA=0xffbb9af7 8 + BLUE=0xff7aa2f7 9 + CYAN=0xff7dcfff 10 + GREEN=0xff9ece6a 11 + YELLOW=0xffe0af68 12 + ORANGE=0xffff9e64 13 + RED=0xfff7768e 14 + BAR_COLOR=0xff1a1b26 15 + COMMENT=0xff565f89 16 + 17 + # Tokyonight Day 18 + # BLACK=0xffe9e9ed 19 + # WHITE=0xff3760bf 20 + # MAGENTA=0xff9854f1 21 + # BLUE=0xff2e7de9 22 + # CYAN=0xff007197 23 + # GREEN=0xff587539 24 + # YELLOW=0xff8c6c3e 25 + # ORANGE=0xffb15c00 26 + # RED=0xfff52a65 27 + # BAR_COLOR=0xffe1e2e7 28 + 29 + TRANSPARENT=0x00000000 30 + 31 + # General bar colors 32 + ICON_COLOR=$WHITE # Color of all icons 33 + LABEL_COLOR=$WHITE # Color of all labels 34 + 35 + ITEM_DIR="$HOME/.config/sketchybar/items" 36 + PLUGIN_DIR="$HOME/.config/sketchybar/plugins" 37 + 38 + FONT="Iosevka Nerd Font" 39 + 40 + PADDINGS=3 41 + 42 + POPUP_BORDER_WIDTH=2 43 + POPUP_CORNER_RADIUS=11 44 + POPUP_BACKGROUND_COLOR=$BLACK 45 + POPUP_BORDER_COLOR=$COMMENT 46 + 47 + CORNER_RADIUS=15 48 + BORDER_WIDTH=2 49 + 50 + SHADOW=on
+63
home/darwin/tmux/tmuxrc
··· 1 + set -g base-index 1 2 + setw -g pane-base-index 1 3 + 4 + # https://old.reddit.com/r/tmux/comments/mesrci/tmux_2_doesnt_seem_to_use_256_colors/ 5 + set -g default-terminal "xterm-256color" 6 + set -ga terminal-overrides ",*256col*:Tc" 7 + set -ga terminal-overrides '*:Ss=\E[%p1%d q:Se=\E[ q' 8 + set-environment -g COLORTERM "truecolor" 9 + 10 + # Mouse works as expected 11 + set-option -g mouse on 12 + # easy-to-remember split pane commands 13 + bind | split-window -h -c "#{pane_current_path}" 14 + bind - split-window -v -c "#{pane_current_path}" 15 + 16 + # move between tabs using vim commands 17 + bind-key -n C-h previous-window 18 + bind-key -n C-l next-window 19 + 20 + # hide and restore panes 21 + bind-key ! break-pane -d -n _hidden_pane 22 + bind-key @ join-pane -s $.0 23 + 24 + # don't rename windows automatically 25 + set-option -g allow-rename off 26 + 27 + # DESIGN TWEAKS 28 + 29 + # don't do anything when a 'bell' rings 30 + set -g visual-activity off 31 + set -g visual-bell off 32 + set -g visual-silence off 33 + setw -g monitor-activity off 34 + set -g bell-action none 35 + 36 + # copy mode 37 + setw -g mode-style 'fg=black bg=blue bold' 38 + 39 + # panes 40 + set -g pane-border-style 'fg=blue' 41 + set -g pane-active-border-style 'fg=black' 42 + 43 + # statusbar 44 + set -g status-position bottom 45 + set -g status-justify left 46 + set -g status-style 'fg=blue' 47 + 48 + set -g status-left '' 49 + set -g status-left-length 10 50 + 51 + set -g status-right-style 'fg=black bg=blue' 52 + set -g status-right '' 53 + 54 + setw -g window-status-current-style 'fg=black bg=blue' 55 + setw -g window-status-current-format ' #I #W #F ' 56 + 57 + setw -g window-status-style 'fg=blue bg=black' 58 + setw -g window-status-format ' #I #[fg=white]#W #[fg=yellow]#F ' 59 + 60 + setw -g window-status-bell-style 'fg=black bg=blue bold' 61 + 62 + # messages 63 + set -g message-style 'fg=black bg=blue bold'
+1 -1
home/gui/default.nix
··· 9 9 ../profiles/cal 10 10 ../profiles/sync/kitaab 11 11 ../profiles/ssh 12 - ../profiles/task 12 + ../profiles/kitty 13 13 ]; 14 14 }
+28 -16
home/profiles/cli/default.nix
··· 1 1 { lib, pkgs, config, ... }: 2 2 { 3 3 home.packages = with pkgs; [ 4 + # unstable.claude-code 4 5 binutils 5 - coreutils 6 + # coreutils 6 7 dnsutils 7 8 dasht 8 9 dosfstools 9 - #git 10 + # git 10 11 git-machete 12 + git-spice 13 + # jujitsu 14 + asciinema 11 15 bottom 12 16 gptfdisk 13 17 starship 14 - iputils 15 - jq 18 + # TODO Not available on Darwin 19 + # iputils 20 + # usbutils 21 + # cached-nix-shell 22 + # utillinux 23 + # strace 24 + # mtr 25 + # gdb 26 + # fontconfig 27 + # whois 28 + 29 + # jq 16 30 manix 17 31 moreutils 18 32 nix-index 19 - cached-nix-shell 20 33 nmap 21 34 ripgrep 22 35 skim 23 36 tealdeer 24 - usbutils 25 - utillinux 26 - whois 27 37 iftop 28 38 wget 29 39 curl ··· 38 48 nix-index 39 49 silver-searcher 40 50 tcpdump 41 - mtr 42 51 file 43 52 lsof 44 53 atool 45 - strace 46 54 zip 47 55 unzip 48 56 rsync ··· 51 59 glow 52 60 pass 53 61 less 54 - gdb 55 62 xxd 56 63 taskwarrior 57 64 gnupg 58 65 syncthing 59 66 dijo 60 - #ssb-patchwork 61 - fontconfig 67 + # ssb-patchwork 62 68 pandoc 63 69 taskwarrior-tui 64 - python3Packages.howdoi 65 - vimwiki-cli 70 + zk 71 + diffnav 72 + 73 + # llms (needs 24.11) 74 + aider-chat 66 75 67 76 (pkgs.writeScriptBin "jq-repl" '' 68 77 #!/usr/bin/env bash ··· 204 213 enableZshIntegration = true; 205 214 }; 206 215 207 - services.kdeconnect.enable = true; 216 + # Only available on Linux 217 + # services.kdeconnect.enable = true; 208 218 209 219 home.shellAliases = { 210 220 # quick cd ··· 257 267 258 268 # git 259 269 g = "git"; 270 + gl = "git log --pretty=oneline --abbrev-commit"; 260 271 261 272 # grep 262 273 grep = "rg"; ··· 277 288 srch = "ns nixpkgs"; 278 289 orch = "ns override"; 279 290 nrb = "cd /tmp; sudo nixos-rebuild switch --flake '/home/anish/usr/helm#curve'; cd $OLDPWD"; 291 + nrd = "cd /tmp; NIXPKGS_ALLOW_UNFREE=1 darwin-rebuild switch --flake /Users/anishlakhwara/usr/helm#Anishs-MacBook-Pro --impure; cd $OLDPWD"; 280 292 nrt = "cd /tmp; sudo nixos-rebuild test --flake '/home/anish/usr/helm#curve'; cd $OLDPWD"; 281 293 ned = "cd /home/anish/usr/helm; vim; cd $OLDPWD"; 282 294 ncd = "cd /home/anish/usr/helm";
-23
home/profiles/desktop/ayu-dark-kitty.conf
··· 1 - 2 - background #0A0E14 3 - foreground #B3B1AD 4 - cursor #E6B450 5 - selection_background #273747 6 - color0 #000000 7 - color8 #4D5566 8 - color1 #FF3333 9 - color9 #D96C75 10 - color2 #C2D94C 11 - color10 #91B362 12 - color3 #FF8F40 13 - color11 #F29668 14 - color4 #59C2FF 15 - color12 #6994BF 16 - color5 #D4BFFF 17 - color13 #A37ACC 18 - color6 #95E6CB 19 - color14 #4CBF99 20 - color7 #ffffff 21 - color15 #F0F0F0 22 - selection_foreground #B3B1AD 23 -
-25
home/profiles/desktop/ayu-kitty.conf
··· 1 - #: This is a port of ayu Mirage color scheme 2 - #: based on : 3 - #: https://github.com/ayu-theme/ayu-colors 4 - 5 - background #1F2430 6 - foreground #CBCCC6 7 - cursor #FFCC66 8 - selection_background #33415E 9 - color0 #000000 10 - color8 #4D5566 11 - color1 #FF3333 12 - color9 #F27983 13 - color2 #BAE67E 14 - color10 #A6CC70 15 - color3 #FFA759 16 - color11 #F29E74 17 - color4 #73D0FF 18 - color12 #77A8D9 19 - color5 #D4BFFF 20 - color13 #A37ACC 21 - color6 #95E6CB 22 - color14 #4CBF99 23 - color7 #ffffff 24 - color15 #F0F0F0 25 - selection_foreground #CBCCC6
+2 -2
home/profiles/desktop/bspwmrc
··· 6 6 # esac 7 7 8 8 export MONITOR=$(xrandr -q | grep primary | cut -d' ' -f1) 9 - export MONITORS=( $(xrandr -q | grep ' connected' | cut -d' ' -f1) ) 9 + export MONITORS=($(xrandr -q | grep ' connected' | cut -d' ' -f1)) 10 10 MONITOR=${MONITOR:-${MONITORS[0]}} 11 11 12 12 # Only have workspaces for primary monitor ··· 26 26 bspc config focused_border_color "#bd93f9" 27 27 bspc config presel_feedback_color "#bd93f9" 28 28 29 - bspc config split_ratio 0.71 29 + bspc config split_ratio 0.71 30 30 31 31 # Extra padding for polybar 32 32 bspc config -m primary top_padding 34
+3 -6
home/profiles/desktop/default.nix
··· 22 22 paper-icon-theme 23 23 papirus-icon-theme 24 24 libsForQt5.qtstyleplugin-kvantum 25 - qt5ct 25 + # qt5ct 26 26 gtk-engine-murrine 27 27 gtk_engines 28 28 maim 29 - kitty 30 29 libreoffice 31 30 inotify-tools 32 31 offpunk 33 32 termpdfpy 34 - libsForQt5.kontact 35 - thunderbird 33 + # libsForQt5.kontact 34 + # thunderbird 36 35 ]; 37 36 38 37 # GTK4 color scheme? ··· 66 65 recursive = true; 67 66 }; 68 67 ".config/dunst/dunstrc".source = ./dunstrc; 69 - ".config/kitty/kitty.conf".source = ./kitty.conf; 70 - ".config/kitty/ayu.conf".source = ./ayu-kitty.conf; 71 68 ".config/zathura/zathurarc".source = ./zathurarc; 72 69 ".background-image".source = ./background.jpg; 73 70 #gtk4 theme
-13
home/profiles/desktop/kitty.conf
··· 1 - include ayu.conf 2 - font_family Hermit 3 - font_size 13 4 - bold_font auto 5 - italic_font auto 6 - bold_italic_font auto 7 - open_url_with default 8 - mouse_map left click ungrabbed mouse_click_url_or_select 9 - confirm_os_window_close 0 10 - enable_audio_bell no 11 - -- Allows zen-mode.nvim to increase font size 12 - -- allow_remote_control socket-only 13 - -- listen_on unix:/tmp/kitty
+7
home/profiles/git/config
··· 15 15 default = current 16 16 [pull] 17 17 rebase = true 18 + [merge] 19 + mergetool = nvim -d 20 + conflictstyle = diff3 18 21 [alias] 19 22 unadd = reset HEAD 20 23 # data analysis ··· 23 26 email-domains = !git log --format="%aE" | awk -F'@' '{print $2}' | sort -u 24 27 # pretty log 25 28 ls = !git log --graph --abbrev-commit --decorate --color=always --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) - %C(dim red)%an%C(reset)%C(bold yellow)%d%C(reset)' --all 29 + undo = !git reset HEAD~1 --mixed 30 + blm = blame -w -C -C -C 26 31 [filter "lfs"] 27 32 required = true 28 33 smudge = git-lfs smudge -- %f 29 34 process = git-lfs filter-process 30 35 clean = git-lfs clean -- %f 36 + [url "git@github.com:"] 37 + insteadOf = https://github.com/ 31 38 [url "https://github.com/"] 32 39 insteadOf = gh: 33 40 [url "git@github.com:"]
+3
home/profiles/git/default.nix
··· 56 56 pull.rebase = false; 57 57 push.autoSetupRemote = true; 58 58 init.defaultBranch = "main"; 59 + "url \"git@github.com:\"" = { insteadOf = "https://github.com/"; }; 59 60 }; 60 61 61 62 aliases = { ··· 94 95 95 96 # delete merged branches 96 97 bdm = "!git branch --merged | grep -v '*' | xargs -n 1 git branch -d"; 98 + undo = "!git reset HEAD~1 --mixed"; 99 + blm = "blame -w -C -C -C"; 97 100 }; 98 101 }; 99 102 }
+23
home/profiles/kitty/ayu-dark-kitty.conf
··· 1 + 2 + background #0A0E14 3 + foreground #B3B1AD 4 + cursor #E6B450 5 + selection_background #273747 6 + color0 #000000 7 + color8 #4D5566 8 + color1 #FF3333 9 + color9 #D96C75 10 + color2 #C2D94C 11 + color10 #91B362 12 + color3 #FF8F40 13 + color11 #F29668 14 + color4 #59C2FF 15 + color12 #6994BF 16 + color5 #D4BFFF 17 + color13 #A37ACC 18 + color6 #95E6CB 19 + color14 #4CBF99 20 + color7 #ffffff 21 + color15 #F0F0F0 22 + selection_foreground #B3B1AD 23 +
+25
home/profiles/kitty/ayu-kitty.conf
··· 1 + #: This is a port of ayu Mirage color scheme 2 + #: based on : 3 + #: https://github.com/ayu-theme/ayu-colors 4 + 5 + background #1F2430 6 + foreground #CBCCC6 7 + cursor #FFCC66 8 + selection_background #33415E 9 + color0 #000000 10 + color8 #4D5566 11 + color1 #FF3333 12 + color9 #F27983 13 + color2 #BAE67E 14 + color10 #A6CC70 15 + color3 #FFA759 16 + color11 #F29E74 17 + color4 #73D0FF 18 + color12 #77A8D9 19 + color5 #D4BFFF 20 + color13 #A37ACC 21 + color6 #95E6CB 22 + color14 #4CBF99 23 + color7 #ffffff 24 + color15 #F0F0F0 25 + selection_foreground #CBCCC6
+11
home/profiles/kitty/default.nix
··· 1 + { pkgs, config, lib, ... }: 2 + 3 + { 4 + home.packages = with pkgs; [ 5 + kitty 6 + ]; 7 + home.file = { 8 + ".config/kitty/kitty.conf".source = ./kitty.conf; 9 + ".config/kitty/ayu.conf".source = ./ayu-kitty.conf; 10 + }; 11 + }
+14
home/profiles/kitty/kitty.conf
··· 1 + include ayu.conf 2 + font_family Hermit 3 + font_size 13 4 + bold_font auto 5 + italic_font auto 6 + bold_italic_font auto 7 + open_url_with default 8 + mouse_map left click ungrabbed mouse_click_url_or_select 9 + confirm_os_window_close 0 10 + enable_audio_bell no 11 + hide_window_decorations titlebar-only 12 + -- Allows zen-mode.nvim to increase font size 13 + -- allow_remote_control socket-only 14 + -- listen_on unix:/tmp/kitty
+4
home/profiles/nvim/config/fnl/conf/init.fnl
··· 45 45 (vim.api.nvim_create_autocmd ["FileType"] 46 46 {:pattern ["mail"] 47 47 :command "setlocal spell"}) 48 + 49 + ; Svelte 50 + (vim.api.nvim_create_autocmd ["BufNewFile" "BufRead"] {:pattern ["*.svelte"] 51 + :command "setf svelte"})
+6 -1
home/profiles/nvim/config/fnl/conf/mappings.fnl
··· 18 18 (nvim.keymap [:n] "Y" "y$") 19 19 ; Unmap Q 20 20 (nvim.keymap [] "Q" "<Nop>") 21 + ; TODO 22 + ; ESC clears search 23 + ; (nvim.keymap [:n] "<ESC>" "") 21 24 22 25 ; FTerm 23 26 (vim.api.nvim_create_user_command "FTermToggle" (fn [_] ··· 105 108 :t ["<cmd>TodoTelescope<CR>" 106 109 "Search TODOs in project"] 107 110 :c ["<cmd>let @/ = \"\"<CR>:echo 'Search highlight cleared'<CR>" 108 - "Clear search"]} 111 + "Clear search"] 112 + :g ["<cmd>Telescope live_grep<cr>" 113 + "Find Grep (in Telescope)"]} 109 114 ; Code 110 115 "c" {:name "Code" 111 116 :d [":lua vim.lsp.buf.definition()<CR>"
+3
home/profiles/nvim/config/fnl/conf/plugins/kitaab.fnl
··· 29 29 (if (and (= index 4) (not written)) 30 30 (vim.api.nvim_buf_set_lines 0 3 index false [message]))))) 31 31 32 + ; Custom function for inserting links through telescope grep_search 33 + ; Visual mode too! 34 + 32 35 (vim.api.nvim_create_autocmd "BufWritePre" {:pattern ["*.wiki"] 33 36 :callback update_date}) 34 37
+3 -1
home/profiles/nvim/config/fnl/conf/plugins.fnl
··· 37 37 38 38 (do-req :auto-session :setup {:log_level "info" 39 39 :auto_session_suppress_dirs ["~/"]}) 40 - (nvim.opt :sessionoptions "blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal") 40 + (nvim.opt :sessionoptions "blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions") 41 41 42 42 (do-req :aerial :setup {}) ;{:on_attach (fn [bufnr] 43 43 ; (do 44 44 ; (vim.keymap.set "n" "{" "<cmd>AerialPrev<CR>" { :buffer bufnr}) 45 45 ; (vim.keymap.set "n" "}" "<cmd>AerialNext<CR>" { :buffer bufnr})) 46 + 47 + (do-req :zk :setup)
+2
home/profiles/nvim/config/fnl/lib/macros.fnl
··· 1 + ;; fennel-ls: macro-file 2 + 1 3 (fn do-req [mod key ...] 2 4 `(let [name# (require ,mod) 3 5 fun# (. name# ,key)]
+8 -6
home/profiles/nvim/default.nix
··· 15 15 16 16 home.file.".config/nvim".source = ./config; 17 17 18 - #environment.systemPackages = with customPlugins; [ tidal ]; 19 18 programs.neovim = { 20 19 enable = true; 21 - 22 20 extraPackages = with pkgs; [ 23 21 # used to compile tree-sitter grammar 24 22 # python-with-my-packages ··· 39 37 # nodePackages.typescript-language-server 40 38 # luajitPackages.lua-lsp 41 39 fennel-ls 42 - unstable.starpls-bin 43 40 ]; 44 41 45 - plugins = with pkgs.unstable.vimPlugins; 42 + plugins = with pkgs.vimPlugins; 46 43 [ 47 44 #hotpot 48 45 hotpot-nvim ··· 85 82 p.dockerfile 86 83 p.json 87 84 p.go 85 + p.svelte 86 + p.javascript 87 + p.janet-simple 88 88 p.starlark 89 89 ])) 90 90 nvim-treesitter-context ··· 99 99 emmet-vim 100 100 csv-vim 101 101 direnv-vim 102 + vim-svelte 102 103 # conjure 103 104 104 105 # kitaab stuff 105 106 vimwiki 106 107 vim-zettel 107 108 hologram-nvim 109 + zk-nvim 108 110 109 111 # lsp stuff 110 112 nvim-lspconfig ··· 133 135 fennel-vim 134 136 135 137 # nvim-luapad 136 - scnvim 138 + # scnvim 137 139 flash-nvim 138 140 vim-beancount 139 - ] ++ [ pkgs.vimPlugins.vim-tidal ]; 141 + ]; # ++ [ pkgs.vimPlugins.vim-tidal ]; 140 142 # withPython3 = true; 141 143 # extraPython3Packages = pkgs: with pkgs; [ tasklib six ]; 142 144 # vimAlias = true;
+8
home/profiles/nvim/lazynvim/.config/nvim/.gitignore
··· 1 + tt.* 2 + .tests 3 + doc/tags 4 + debug 5 + .repro 6 + foo.* 7 + *.log 8 + data
+15
home/profiles/nvim/lazynvim/.config/nvim/.neoconf.json
··· 1 + { 2 + "neodev": { 3 + "library": { 4 + "enabled": true, 5 + "plugins": true 6 + } 7 + }, 8 + "neoconf": { 9 + "plugins": { 10 + "lua_ls": { 11 + "enabled": true 12 + } 13 + } 14 + } 15 + }
+201
home/profiles/nvim/lazynvim/.config/nvim/LICENSE
··· 1 + Apache License 2 + Version 2.0, January 2004 3 + http://www.apache.org/licenses/ 4 + 5 + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 + 7 + 1. Definitions. 8 + 9 + "License" shall mean the terms and conditions for use, reproduction, 10 + and distribution as defined by Sections 1 through 9 of this document. 11 + 12 + "Licensor" shall mean the copyright owner or entity authorized by 13 + the copyright owner that is granting the License. 14 + 15 + "Legal Entity" shall mean the union of the acting entity and all 16 + other entities that control, are controlled by, or are under common 17 + control with that entity. For the purposes of this definition, 18 + "control" means (i) the power, direct or indirect, to cause the 19 + direction or management of such entity, whether by contract or 20 + otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 + outstanding shares, or (iii) beneficial ownership of such entity. 22 + 23 + "You" (or "Your") shall mean an individual or Legal Entity 24 + exercising permissions granted by this License. 25 + 26 + "Source" form shall mean the preferred form for making modifications, 27 + including but not limited to software source code, documentation 28 + source, and configuration files. 29 + 30 + "Object" form shall mean any form resulting from mechanical 31 + transformation or translation of a Source form, including but 32 + not limited to compiled object code, generated documentation, 33 + and conversions to other media types. 34 + 35 + "Work" shall mean the work of authorship, whether in Source or 36 + Object form, made available under the License, as indicated by a 37 + copyright notice that is included in or attached to the work 38 + (an example is provided in the Appendix below). 39 + 40 + "Derivative Works" shall mean any work, whether in Source or Object 41 + form, that is based on (or derived from) the Work and for which the 42 + editorial revisions, annotations, elaborations, or other modifications 43 + represent, as a whole, an original work of authorship. For the purposes 44 + of this License, Derivative Works shall not include works that remain 45 + separable from, or merely link (or bind by name) to the interfaces of, 46 + the Work and Derivative Works thereof. 47 + 48 + "Contribution" shall mean any work of authorship, including 49 + the original version of the Work and any modifications or additions 50 + to that Work or Derivative Works thereof, that is intentionally 51 + submitted to Licensor for inclusion in the Work by the copyright owner 52 + or by an individual or Legal Entity authorized to submit on behalf of 53 + the copyright owner. For the purposes of this definition, "submitted" 54 + means any form of electronic, verbal, or written communication sent 55 + to the Licensor or its representatives, including but not limited to 56 + communication on electronic mailing lists, source code control systems, 57 + and issue tracking systems that are managed by, or on behalf of, the 58 + Licensor for the purpose of discussing and improving the Work, but 59 + excluding communication that is conspicuously marked or otherwise 60 + designated in writing by the copyright owner as "Not a Contribution." 61 + 62 + "Contributor" shall mean Licensor and any individual or Legal Entity 63 + on behalf of whom a Contribution has been received by Licensor and 64 + subsequently incorporated within the Work. 65 + 66 + 2. Grant of Copyright License. Subject to the terms and conditions of 67 + this License, each Contributor hereby grants to You a perpetual, 68 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 + copyright license to reproduce, prepare Derivative Works of, 70 + publicly display, publicly perform, sublicense, and distribute the 71 + Work and such Derivative Works in Source or Object form. 72 + 73 + 3. Grant of Patent License. Subject to the terms and conditions of 74 + this License, each Contributor hereby grants to You a perpetual, 75 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 + (except as stated in this section) patent license to make, have made, 77 + use, offer to sell, sell, import, and otherwise transfer the Work, 78 + where such license applies only to those patent claims licensable 79 + by such Contributor that are necessarily infringed by their 80 + Contribution(s) alone or by combination of their Contribution(s) 81 + with the Work to which such Contribution(s) was submitted. If You 82 + institute patent litigation against any entity (including a 83 + cross-claim or counterclaim in a lawsuit) alleging that the Work 84 + or a Contribution incorporated within the Work constitutes direct 85 + or contributory patent infringement, then any patent licenses 86 + granted to You under this License for that Work shall terminate 87 + as of the date such litigation is filed. 88 + 89 + 4. Redistribution. You may reproduce and distribute copies of the 90 + Work or Derivative Works thereof in any medium, with or without 91 + modifications, and in Source or Object form, provided that You 92 + meet the following conditions: 93 + 94 + (a) You must give any other recipients of the Work or 95 + Derivative Works a copy of this License; and 96 + 97 + (b) You must cause any modified files to carry prominent notices 98 + stating that You changed the files; and 99 + 100 + (c) You must retain, in the Source form of any Derivative Works 101 + that You distribute, all copyright, patent, trademark, and 102 + attribution notices from the Source form of the Work, 103 + excluding those notices that do not pertain to any part of 104 + the Derivative Works; and 105 + 106 + (d) If the Work includes a "NOTICE" text file as part of its 107 + distribution, then any Derivative Works that You distribute must 108 + include a readable copy of the attribution notices contained 109 + within such NOTICE file, excluding those notices that do not 110 + pertain to any part of the Derivative Works, in at least one 111 + of the following places: within a NOTICE text file distributed 112 + as part of the Derivative Works; within the Source form or 113 + documentation, if provided along with the Derivative Works; or, 114 + within a display generated by the Derivative Works, if and 115 + wherever such third-party notices normally appear. The contents 116 + of the NOTICE file are for informational purposes only and 117 + do not modify the License. You may add Your own attribution 118 + notices within Derivative Works that You distribute, alongside 119 + or as an addendum to the NOTICE text from the Work, provided 120 + that such additional attribution notices cannot be construed 121 + as modifying the License. 122 + 123 + You may add Your own copyright statement to Your modifications and 124 + may provide additional or different license terms and conditions 125 + for use, reproduction, or distribution of Your modifications, or 126 + for any such Derivative Works as a whole, provided Your use, 127 + reproduction, and distribution of the Work otherwise complies with 128 + the conditions stated in this License. 129 + 130 + 5. Submission of Contributions. Unless You explicitly state otherwise, 131 + any Contribution intentionally submitted for inclusion in the Work 132 + by You to the Licensor shall be under the terms and conditions of 133 + this License, without any additional terms or conditions. 134 + Notwithstanding the above, nothing herein shall supersede or modify 135 + the terms of any separate license agreement you may have executed 136 + with Licensor regarding such Contributions. 137 + 138 + 6. Trademarks. This License does not grant permission to use the trade 139 + names, trademarks, service marks, or product names of the Licensor, 140 + except as required for reasonable and customary use in describing the 141 + origin of the Work and reproducing the content of the NOTICE file. 142 + 143 + 7. Disclaimer of Warranty. Unless required by applicable law or 144 + agreed to in writing, Licensor provides the Work (and each 145 + Contributor provides its Contributions) on an "AS IS" BASIS, 146 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 + implied, including, without limitation, any warranties or conditions 148 + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 + PARTICULAR PURPOSE. You are solely responsible for determining the 150 + appropriateness of using or redistributing the Work and assume any 151 + risks associated with Your exercise of permissions under this License. 152 + 153 + 8. Limitation of Liability. In no event and under no legal theory, 154 + whether in tort (including negligence), contract, or otherwise, 155 + unless required by applicable law (such as deliberate and grossly 156 + negligent acts) or agreed to in writing, shall any Contributor be 157 + liable to You for damages, including any direct, indirect, special, 158 + incidental, or consequential damages of any character arising as a 159 + result of this License or out of the use or inability to use the 160 + Work (including but not limited to damages for loss of goodwill, 161 + work stoppage, computer failure or malfunction, or any and all 162 + other commercial damages or losses), even if such Contributor 163 + has been advised of the possibility of such damages. 164 + 165 + 9. Accepting Warranty or Additional Liability. While redistributing 166 + the Work or Derivative Works thereof, You may choose to offer, 167 + and charge a fee for, acceptance of support, warranty, indemnity, 168 + or other liability obligations and/or rights consistent with this 169 + License. However, in accepting such obligations, You may act only 170 + on Your own behalf and on Your sole responsibility, not on behalf 171 + of any other Contributor, and only if You agree to indemnify, 172 + defend, and hold each Contributor harmless for any liability 173 + incurred by, or claims asserted against, such Contributor by reason 174 + of your accepting any such warranty or additional liability. 175 + 176 + END OF TERMS AND CONDITIONS 177 + 178 + APPENDIX: How to apply the Apache License to your work. 179 + 180 + To apply the Apache License to your work, attach the following 181 + boilerplate notice, with the fields enclosed by brackets "[]" 182 + replaced with your own identifying information. (Don't include 183 + the brackets!) The text should be enclosed in the appropriate 184 + comment syntax for the file format. We also recommend that a 185 + file or class name and description of purpose be included on the 186 + same "printed page" as the copyright notice for easier 187 + identification within third-party archives. 188 + 189 + Copyright [yyyy] [name of copyright owner] 190 + 191 + Licensed under the Apache License, Version 2.0 (the "License"); 192 + you may not use this file except in compliance with the License. 193 + You may obtain a copy of the License at 194 + 195 + http://www.apache.org/licenses/LICENSE-2.0 196 + 197 + Unless required by applicable law or agreed to in writing, software 198 + distributed under the License is distributed on an "AS IS" BASIS, 199 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 + See the License for the specific language governing permissions and 201 + limitations under the License.
+4
home/profiles/nvim/lazynvim/.config/nvim/README.md
··· 1 + # ๐Ÿ’ค LazyVim 2 + 3 + A starter template for [LazyVim](https://github.com/LazyVim/LazyVim). 4 + Refer to the [documentation](https://lazyvim.github.io/installation) to get started.
+2
home/profiles/nvim/lazynvim/.config/nvim/init.lua
··· 1 + -- bootstrap lazy.nvim, LazyVim and your plugins 2 + require("config.lazy")
+60
home/profiles/nvim/lazynvim/.config/nvim/lazy-lock.json
··· 1 + { 2 + "LazyVim": { "branch": "main", "commit": "12818a6cb499456f4903c5d8e68af43753ebc869" }, 3 + "SchemaStore.nvim": { "branch": "main", "commit": "54a2cf0105166d5a48172e81f12a2bf10cfc8b2c" }, 4 + "aerial.nvim": { "branch": "master", "commit": "e585934fef8d253dbc5655cff3deb3444e064e6c" }, 5 + "bufferline.nvim": { "branch": "main", "commit": "0b2fd861eee7595015b6561dade52fb060be10c4" }, 6 + "catppuccin": { "branch": "main", "commit": "4fd72a9ab64b393c2c22b168508fd244877fec96" }, 7 + "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, 8 + "cmp-emoji": { "branch": "main", "commit": "e8398e2adf512a03bb4e1728ca017ffeac670a9f" }, 9 + "cmp-nvim-lsp": { "branch": "main", "commit": "39e2eda76828d88b773cc27a3f61d2ad782c922d" }, 10 + "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, 11 + "conform.nvim": { "branch": "master", "commit": "62eba813b7501b39612146cbf29cd07f1d4ac29c" }, 12 + "dashboard-nvim": { "branch": "master", "commit": "fabf5feec96185817c732d47d363f34034212685" }, 13 + "dressing.nvim": { "branch": "master", "commit": "c5775a888adbc50652cb370073fcfec963eca93e" }, 14 + "flash.nvim": { "branch": "main", "commit": "34c7be146a91fec3555c33fe89c7d643f6ef5cf1" }, 15 + "friendly-snippets": { "branch": "main", "commit": "00ebcaa159e817150bd83bfe2d51fa3b3377d5c4" }, 16 + "gitsigns.nvim": { "branch": "main", "commit": "562dc47189ad3c8696dbf460d38603a74d544849" }, 17 + "grug-far.nvim": { "branch": "main", "commit": "ebab68b2150079732ae8074eefb261a124824139" }, 18 + "indent-blankline.nvim": { "branch": "master", "commit": "db926997af951da38e5004ec7b9fbdc480b48f5d" }, 19 + "lazy.nvim": { "branch": "main", "commit": "077102c5bfc578693f12377846d427f49bc50076" }, 20 + "lazydev.nvim": { "branch": "main", "commit": "491452cf1ca6f029e90ad0d0368848fac717c6d2" }, 21 + "lualine.nvim": { "branch": "master", "commit": "b431d228b7bbcdaea818bdc3e25b8cdbe861f056" }, 22 + "luvit-meta": { "branch": "main", "commit": "ce76f6f6cdc9201523a5875a4471dcfe0186eb60" }, 23 + "mason-lspconfig.nvim": { "branch": "main", "commit": "482350b050bd413931c2cdd4857443c3da7d57cb" }, 24 + "mason.nvim": { "branch": "main", "commit": "e2f7f9044ec30067bc11800a9e266664b88cda22" }, 25 + "mini.ai": { "branch": "main", "commit": "a9b992b13d22a8db8df6beac25afa59a10b5584d" }, 26 + "mini.icons": { "branch": "main", "commit": "12e7b5d47bfc1b4c5ba4278fb49ec9100138df14" }, 27 + "mini.pairs": { "branch": "main", "commit": "927d19cbdd0e752ab1c7eed87072e71d2cd6ff51" }, 28 + "mini.surround": { "branch": "main", "commit": "d8913ed23be0a1a4585ae34414821cc343a46174" }, 29 + "neo-tree.nvim": { "branch": "main", "commit": "206241e451c12f78969ff5ae53af45616ffc9b72" }, 30 + "neovim-ayu": { "branch": "master", "commit": "6993189dd0ee38299879a1a0064718a8392e8713" }, 31 + "noice.nvim": { "branch": "main", "commit": "448bb9c524a7601035449210838e374a30153172" }, 32 + "nui.nvim": { "branch": "main", "commit": "61574ce6e60c815b0a0c4b5655b8486ba58089a1" }, 33 + "nvim-cmp": { "branch": "main", "commit": "ae644feb7b67bf1ce4260c231d1d4300b19c6f30" }, 34 + "nvim-lint": { "branch": "master", "commit": "debabca63c0905b59ce596a55a8e33eafdf66342" }, 35 + "nvim-lspconfig": { "branch": "master", "commit": "911167921d49cd5c1c9b2436031d0da3945e787f" }, 36 + "nvim-notify": { "branch": "master", "commit": "d333b6f167900f6d9d42a59005d82919830626bf" }, 37 + "nvim-snippets": { "branch": "main", "commit": "56b4052f71220144689caaa2e5b66222ba5661eb" }, 38 + "nvim-treesitter": { "branch": "master", "commit": "04401b5dd17c3419dae5141677bd256f52d54733" }, 39 + "nvim-treesitter-textobjects": { "branch": "master", "commit": "41e3abf6bfd9a9a681eb1f788bdeba91c9004b2b" }, 40 + "nvim-ts-autotag": { "branch": "main", "commit": "0cb76eea80e9c73b88880f0ca78fbd04c5bdcac7" }, 41 + "outline.nvim": { "branch": "main", "commit": "02a18194b3d2adfb537dd1a9f21d1fc29dd31382" }, 42 + "persistence.nvim": { "branch": "main", "commit": "f6aad7dde7fcf54148ccfc5f622c6d5badd0cc3d" }, 43 + "plenary.nvim": { "branch": "master", "commit": "ec289423a1693aeae6cd0d503bac2856af74edaa" }, 44 + "sg.nvim": { "branch": "master", "commit": "8bdd4d19da2268072708d5fe18fda9c23e16509d" }, 45 + "tailwindcss-colorizer-cmp.nvim": { "branch": "main", "commit": "3d3cd95e4a4135c250faf83dd5ed61b8e5502b86" }, 46 + "telescope-fzf-native.nvim": { "branch": "main", "commit": "cf48d4dfce44e0b9a2e19a008d6ec6ea6f01a83b" }, 47 + "telescope-terraform-doc.nvim": { "branch": "main", "commit": "7ac642765615e6ff164ecfc82eb278aa68d06840" }, 48 + "telescope-terraform.nvim": { "branch": "main", "commit": "072c97023797ca1a874668aaa6ae0b74425335df" }, 49 + "telescope.nvim": { "branch": "master", "commit": "5972437de807c3bc101565175da66a1aa4f8707a" }, 50 + "todo-comments.nvim": { "branch": "main", "commit": "8f45f353dc3649cb9b44cecda96827ea88128584" }, 51 + "tokyonight.nvim": { "branch": "main", "commit": "b0e7c7382a7e8f6456f2a95655983993ffda745e" }, 52 + "trouble.nvim": { "branch": "main", "commit": "6efc446226679fda0547c0fd6a7892fd5f5b15d8" }, 53 + "ts-comments.nvim": { "branch": "main", "commit": "98d7d4dec0af1312d38e288f800bbf6ff562b6ab" }, 54 + "vim-dadbod": { "branch": "master", "commit": "7888cb7164d69783d3dce4e0283decd26b82538b" }, 55 + "vim-dadbod-completion": { "branch": "master", "commit": "880f7e9f2959e567c718d52550f9fae1aa07aa81" }, 56 + "vim-dadbod-ui": { "branch": "master", "commit": "0f51d8de368c8c6220973e8acd156d17da746f4c" }, 57 + "vim-fugitive": { "branch": "master", "commit": "0444df68cd1cdabc7453d6bd84099458327e5513" }, 58 + "vim-helm": { "branch": "master", "commit": "ae1ebc160d2b9b90108477ab10df7a4fc501e358" }, 59 + "which-key.nvim": { "branch": "main", "commit": "6c1584eb76b55629702716995cca4ae2798a9cca" } 60 + }
+19
home/profiles/nvim/lazynvim/.config/nvim/lazyvim.json
··· 1 + { 2 + "extras": [ 3 + "lazyvim.plugins.extras.editor.aerial", 4 + "lazyvim.plugins.extras.editor.outline", 5 + "lazyvim.plugins.extras.lang.go", 6 + "lazyvim.plugins.extras.lang.helm", 7 + "lazyvim.plugins.extras.lang.json", 8 + "lazyvim.plugins.extras.lang.nix", 9 + "lazyvim.plugins.extras.lang.sql", 10 + "lazyvim.plugins.extras.lang.svelte", 11 + "lazyvim.plugins.extras.lang.tailwind", 12 + "lazyvim.plugins.extras.lang.terraform", 13 + "lazyvim.plugins.extras.lang.typescript" 14 + ], 15 + "news": { 16 + "NEWS.md": "6520" 17 + }, 18 + "version": 6 19 + }
+3
home/profiles/nvim/lazynvim/.config/nvim/lua/config/autocmds.lua
··· 1 + -- Autocmds are automatically loaded on the VeryLazy event 2 + -- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua 3 + -- Add any additional autocmds here
+21
home/profiles/nvim/lazynvim/.config/nvim/lua/config/keymaps.lua
··· 1 + -- Keymaps are automatically loaded on the VeryLazy event 2 + -- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua 3 + -- Add any additional keymaps here 4 + local map = vim.keymap.set 5 + 6 + -- Navigation 7 + map("n", "gt", "<cmd>bnext<cr>", { desc = "Next Buffer" }) 8 + map("n", "gT", "<cmd>bprevious<cr>", { desc = "Prev Buffer" }) 9 + map("n", "gq", "<cmd>bdelete<cr>", { desc = "Prev Buffer" }) 10 + map("n", "<leader>q", "<cmd>q<cr>", { desc = "Quit" }) 11 + 12 + -- Git 13 + map("n", "<leader>gs", "<cmd>:G<cr>", { desc = "Git Status" }) 14 + map("n", "<leader>gb", "<cmd>Telescope git_branches<cr>", { desc = "Git Status" }) 15 + map("n", "<leader>gp", "<cmd>:G! push<cr>", { desc = "Git Status" }) 16 + 17 + -- Telescope 18 + map("n", "<leader>fs", "<cmd>Telescope live_grep<cr>", { desc = "Telescop Live Grep" }) 19 + 20 + -- Cody 21 + map("n", "<leader>co", "<cmd>CodyChat<cr>", { desc = "Cody Chat" })
+57
home/profiles/nvim/lazynvim/.config/nvim/lua/config/lazy.lua
··· 1 + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" 2 + if not (vim.uv or vim.loop).fs_stat(lazypath) then 3 + local lazyrepo = "https://github.com/folke/lazy.nvim.git" 4 + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) 5 + if vim.v.shell_error ~= 0 then 6 + vim.api.nvim_echo({ 7 + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, 8 + { out, "WarningMsg" }, 9 + { "\nPress any key to exit..." }, 10 + }, true, {}) 11 + vim.fn.getchar() 12 + os.exit(1) 13 + end 14 + end 15 + vim.opt.rtp:prepend(lazypath) 16 + 17 + require("lazy").setup({ 18 + spec = { 19 + -- add LazyVim and import its plugins 20 + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, 21 + -- import/override with your plugins 22 + { import = "plugins" }, 23 + }, 24 + defaults = { 25 + -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup. 26 + -- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default. 27 + lazy = false, 28 + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, 29 + -- have outdated releases, which may break your Neovim install. 30 + version = false, -- always use the latest git commit 31 + -- version = "*", -- try installing the latest stable version for plugins that support semver 32 + }, 33 + install = { colorscheme = { "tokyonight", "habamax" } }, 34 + checker = { 35 + enabled = true, -- check for plugin updates periodically 36 + notify = false, -- notify on update 37 + }, -- automatically check for plugin updates 38 + performance = { 39 + rtp = { 40 + -- disable some rtp plugins 41 + disabled_plugins = { 42 + "gzip", 43 + -- "matchit", 44 + -- "matchparen", 45 + -- "netrwPlugin", 46 + "tarPlugin", 47 + "tohtml", 48 + "tutor", 49 + "zipPlugin", 50 + }, 51 + }, 52 + }, 53 + }) 54 + 55 + require("sg").setup({}) 56 + -- require("ayu").setup({ mirage = true }) 57 + -- require("ayu").colorscheme()
+3
home/profiles/nvim/lazynvim/.config/nvim/lua/config/options.lua
··· 1 + -- Options are automatically loaded before lazy.nvim startup 2 + -- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua 3 + -- Add any additional options here
+13
home/profiles/nvim/lazynvim/.config/nvim/lua/plugins/cody.lua
··· 1 + return { 2 + { 3 + "sourcegraph/sg.nvim", 4 + dependencies = { "nvim-lua/plenary.nvim" }, 5 + }, 6 + { 7 + "hrsh7th/nvim-cmp", 8 + ---@param opts cmp.ConfigSchema 9 + opts = function(_, opts) 10 + table.insert(opts.sources, { name = "cody" }) 11 + end, 12 + }, 13 + }
+50
home/profiles/nvim/lazynvim/.config/nvim/lua/plugins/colorscheme.lua
··· 1 + return { 2 + { 3 + "catppuccin/nvim", 4 + lazy = true, 5 + name = "catppuccin", 6 + opts = { 7 + integrations = { 8 + aerial = true, 9 + alpha = true, 10 + cmp = true, 11 + dashboard = true, 12 + flash = true, 13 + gitsigns = true, 14 + headlines = true, 15 + illuminate = true, 16 + indent_blankline = { enabled = true }, 17 + leap = true, 18 + lsp_trouble = true, 19 + mason = true, 20 + markdown = true, 21 + mini = true, 22 + native_lsp = { 23 + enabled = true, 24 + underlines = { 25 + errors = { "undercurl" }, 26 + hints = { "undercurl" }, 27 + warnings = { "undercurl" }, 28 + information = { "undercurl" }, 29 + }, 30 + }, 31 + navic = { enabled = true, custom_bg = "lualine" }, 32 + neotest = true, 33 + neotree = true, 34 + noice = true, 35 + semantic_tokens = true, 36 + telescope = true, 37 + treesitter = true, 38 + treesitter_context = true, 39 + which_key = true, 40 + }, 41 + }, 42 + }, 43 + { "Shatur/neovim-ayu", lazy = false }, 44 + { 45 + "LazyVim/LazyVim", 46 + opts = { 47 + colorscheme = "catppuccin-macchiato", 48 + }, 49 + }, 50 + }
+193
home/profiles/nvim/lazynvim/.config/nvim/lua/plugins/example.lua
··· 1 + -- since this is just an example spec, don't actually load anything here and return an empty spec 2 + -- stylua: ignore 3 + if true then return {} end 4 + 5 + -- every spec file under the "plugins" directory will be loaded automatically by lazy.nvim 6 + -- 7 + -- In your plugin files, you can: 8 + -- * add extra plugins 9 + -- * disable/enabled LazyVim plugins 10 + -- * override the configuration of LazyVim plugins 11 + return { 12 + -- add gruvbox 13 + { "ellisonleao/gruvbox.nvim" }, 14 + 15 + -- Configure LazyVim to load gruvbox 16 + { 17 + "LazyVim/LazyVim", 18 + opts = { 19 + colorscheme = "gruvbox", 20 + }, 21 + }, 22 + 23 + -- change trouble config 24 + { 25 + "folke/trouble.nvim", 26 + -- opts will be merged with the parent spec 27 + opts = { use_diagnostic_signs = true }, 28 + }, 29 + 30 + -- disable trouble 31 + { "folke/trouble.nvim", enabled = false }, 32 + 33 + -- override nvim-cmp and add cmp-emoji 34 + { 35 + "hrsh7th/nvim-cmp", 36 + dependencies = { "hrsh7th/cmp-emoji" }, 37 + ---@param opts cmp.ConfigSchema 38 + opts = function(_, opts) 39 + table.insert(opts.sources, { name = "emoji" }) 40 + end, 41 + }, 42 + 43 + -- change some telescope options and a keymap to browse plugin files 44 + { 45 + "nvim-telescope/telescope.nvim", 46 + keys = { 47 + -- add a keymap to browse plugin files 48 + -- stylua: ignore 49 + { 50 + "<leader>fp", 51 + function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end, 52 + desc = "Find Plugin File", 53 + }, 54 + }, 55 + -- change some options 56 + opts = { 57 + defaults = { 58 + layout_strategy = "horizontal", 59 + layout_config = { prompt_position = "top" }, 60 + sorting_strategy = "ascending", 61 + winblend = 0, 62 + }, 63 + }, 64 + }, 65 + 66 + -- add pyright to lspconfig 67 + { 68 + "neovim/nvim-lspconfig", 69 + ---@class PluginLspOpts 70 + opts = { 71 + ---@type lspconfig.options 72 + servers = { 73 + -- pyright will be automatically installed with mason and loaded with lspconfig 74 + pyright = {}, 75 + }, 76 + }, 77 + }, 78 + 79 + -- add tsserver and setup with typescript.nvim instead of lspconfig 80 + { 81 + "neovim/nvim-lspconfig", 82 + dependencies = { 83 + "jose-elias-alvarez/typescript.nvim", 84 + init = function() 85 + require("lazyvim.util").lsp.on_attach(function(_, buffer) 86 + -- stylua: ignore 87 + vim.keymap.set( "n", "<leader>co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" }) 88 + vim.keymap.set("n", "<leader>cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer }) 89 + end) 90 + end, 91 + }, 92 + ---@class PluginLspOpts 93 + opts = { 94 + ---@type lspconfig.options 95 + servers = { 96 + -- tsserver will be automatically installed with mason and loaded with lspconfig 97 + tsserver = {}, 98 + }, 99 + -- you can do any additional lsp server setup here 100 + -- return true if you don't want this server to be setup with lspconfig 101 + ---@type table<string, fun(server:string, opts:_.lspconfig.options):boolean?> 102 + setup = { 103 + -- example to setup with typescript.nvim 104 + tsserver = function(_, opts) 105 + require("typescript").setup({ server = opts }) 106 + return true 107 + end, 108 + -- Specify * to use this function as a fallback for any server 109 + -- ["*"] = function(server, opts) end, 110 + }, 111 + }, 112 + }, 113 + 114 + -- for typescript, LazyVim also includes extra specs to properly setup lspconfig, 115 + -- treesitter, mason and typescript.nvim. So instead of the above, you can use: 116 + { import = "lazyvim.plugins.extras.lang.typescript" }, 117 + 118 + -- add more treesitter parsers 119 + { 120 + "nvim-treesitter/nvim-treesitter", 121 + opts = { 122 + ensure_installed = { 123 + "bash", 124 + "html", 125 + "javascript", 126 + "json", 127 + "lua", 128 + "markdown", 129 + "markdown_inline", 130 + "python", 131 + "query", 132 + "regex", 133 + "tsx", 134 + "typescript", 135 + "vim", 136 + "yaml", 137 + }, 138 + }, 139 + }, 140 + 141 + -- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above 142 + -- would overwrite `ensure_installed` with the new value. 143 + -- If you'd rather extend the default config, use the code below instead: 144 + { 145 + "nvim-treesitter/nvim-treesitter", 146 + opts = function(_, opts) 147 + -- add tsx and treesitter 148 + vim.list_extend(opts.ensure_installed, { 149 + "tsx", 150 + "typescript", 151 + }) 152 + end, 153 + }, 154 + 155 + -- the opts function can also be used to change the default opts: 156 + { 157 + "nvim-lualine/lualine.nvim", 158 + event = "VeryLazy", 159 + opts = function(_, opts) 160 + table.insert(opts.sections.lualine_x, "๐Ÿ˜„") 161 + end, 162 + }, 163 + 164 + -- or you can return new options to override all the defaults 165 + { 166 + "nvim-lualine/lualine.nvim", 167 + event = "VeryLazy", 168 + opts = function() 169 + return { 170 + --[[add your custom lualine config here]] 171 + } 172 + end, 173 + }, 174 + 175 + -- use mini.starter instead of alpha 176 + { import = "lazyvim.plugins.extras.ui.mini-starter" }, 177 + 178 + -- add jsonls and schemastore packages, and setup treesitter for json, json5 and jsonc 179 + { import = "lazyvim.plugins.extras.lang.json" }, 180 + 181 + -- add any tools you want to have installed below 182 + { 183 + "williamboman/mason.nvim", 184 + opts = { 185 + ensure_installed = { 186 + "stylua", 187 + "shellcheck", 188 + "shfmt", 189 + "flake8", 190 + }, 191 + }, 192 + }, 193 + }
+6
home/profiles/nvim/lazynvim/.config/nvim/lua/plugins/git.lua
··· 1 + return { 2 + { 3 + "tpope/vim-fugitive", 4 + lazy = false, 5 + }, 6 + }
+15
home/profiles/nvim/lazynvim/.config/nvim/lua/plugins/surround.lua
··· 1 + return { 2 + "echasnovski/mini.surround", 3 + opts = { 4 + mappings = { 5 + add = "ys", 6 + delete = "ds", 7 + find = "gsf", 8 + find_left = "gsF", 9 + highlight = "gsh", 10 + replace = "cs", 11 + update_n_lines = "gsn", 12 + }, 13 + }, 14 + } 15 +
+3
home/profiles/nvim/lazynvim/.config/nvim/stylua.toml
··· 1 + indent_type = "Spaces" 2 + indent_width = 2 3 + column_width = 120
-9
home/profiles/nvim/package.json
··· 1 - { 2 - "console.log": { 3 - "prefix": "clog", 4 - "body": [ 5 - "console.log('$1')" 6 - ], 7 - "description": "Log output to console" 8 - } 9 - }
+25 -14
hosts/curve/default.nix
··· 1 - { self, pkgs, ... }: 2 - { 1 + { self, pkgs, ... }: { 3 2 imports = [ 4 3 ./configuration.nix 5 4 ../users/anish ··· 16 15 # ../profiles/kuberenetes 17 16 # ../profiles/mount-mossnet 18 17 ]; 18 + 19 + # temporarily allow ssh access for work, to be able to do deploy new services 20 + services.openssh = { 21 + enable = true; 22 + settings.PasswordAuthentication = false; 23 + settings.PermitRootLogin = "no"; 24 + }; 19 25 20 26 # import profiling tools 21 27 programs.systemtap.enable = true; 22 28 23 29 virtualisation.docker.enable = true; 24 30 virtualisation.docker.storageDriver = "btrfs"; 25 - environment.systemPackages = with pkgs; [ 26 - docker-compose 27 - ]; 31 + environment.systemPackages = with pkgs; [ docker-compose ]; 28 32 29 33 # Speed up boot by removing dependency on network 30 34 systemd = { 31 - targets.network-online.wantedBy = pkgs.lib.mkForce [ ]; # Normally ["multi-user.target"] 32 - services.NetworkManager-wait-online.wantedBy = pkgs.lib.mkForce [ ]; # Normally ["network-online.target"] 35 + targets.network-online.wantedBy = 36 + pkgs.lib.mkForce [ ]; # Normally ["multi-user.target"] 37 + services.NetworkManager-wait-online.wantedBy = 38 + pkgs.lib.mkForce [ ]; # Normally ["network-online.target"] 33 39 }; 34 40 35 41 programs.gnupg.agent.enable = true; ··· 64 70 65 71 # lazy enable of ports necessary for KDE connect which is installed via cli home profile (for some reason?) 66 72 networking.firewall = { 67 - allowedTCPPortRanges = [{ from = 1714; to = 1764; }]; 68 - allowedUDPPortRanges = [{ from = 1714; to = 1764; }]; 73 + allowedTCPPorts = [ 22 ]; # allow ssh 74 + allowedTCPPortRanges = [{ 75 + from = 1714; 76 + to = 1764; 77 + }]; 78 + allowedUDPPortRanges = [{ 79 + from = 1714; 80 + to = 1764; 81 + }]; 69 82 }; 70 83 71 84 age.secrets.curve-wg.file = "${self}/secrets/curve-wg.age"; ··· 81 94 mossnet.backup = { 82 95 enable = true; 83 96 name = "curve"; 84 - paths = [ 85 - "/home/anish/usr" 86 - "/home/anish/.ssh" 87 - ]; 97 + paths = [ "/home/anish/usr" "/home/anish/.ssh" ]; 88 98 }; 89 99 90 100 # enable adb ··· 93 103 #virtualisation.docker.enable = true; 94 104 boot.blacklistedKernelModules = [ "qcserial" ]; 95 105 # Used for packer Capsul 96 - users.users.anish.extraGroups = [ "adbusers" "wheel" "plugdev" "libvertd" "docker" ]; 106 + users.users.anish.extraGroups = 107 + [ "adbusers" "wheel" "plugdev" "libvertd" "docker" ]; 97 108 virtualisation.libvirtd.enable = true; 98 109 hardware.keyboard.zsa.enable = true; 99 110 services.udev.extraRules = ''
+44
hosts/darwin/casks/default.nix
··· 1 + { ... }: 2 + 3 + { 4 + homebrew.enable = true; 5 + homebrew.brews = [ 6 + "kind" 7 + "kubectl" 8 + "bazelisk" 9 + "sourcegraph/src-cli/src-cli" 10 + "gh" 11 + # "postgresql@15" 12 + # "redis" 13 + ]; 14 + homebrew.casks = [ 15 + # Development Tools 16 + "homebrew/cask/docker" 17 + # "syncthing" 18 + # "insomnia" 19 + # "tableplus" 20 + # "ngrok" 21 + "postico" 22 + "wireshark" 23 + "1password" 24 + "orbstack" 25 + # "aerospace" 26 + 27 + # Communication Tools 28 + # Already installed manually 29 + # "loom" 30 + # "slack" 31 + # "zoom" 32 + # "firefox" 33 + # "1password-cli" 34 + 35 + # Utility Tools 36 + # "syncthing" 37 + 38 + # Productivity Tools 39 + "raycast" 40 + 41 + # AI 42 + # "diffusionbee" 43 + ]; 44 + }
+154
hosts/darwin/default.nix
··· 1 + { self, pkgs, config, ... }: 2 + 3 + { 4 + imports = [ 5 + ./sketchybar 6 + # ./yabai # Now using aerospace 7 + # ./casks 8 + # ../../modules/darwin/home-manager.nix 9 + # ../../modules/shared 10 + # ../../modules/shared/cachix 11 + ]; 12 + 13 + environment.systemPackages = [ 14 + pkgs.go 15 + pkgs.python3 16 + pkgs.cargo 17 + pkgs.k9s 18 + pkgs.kubernetes-helm 19 + pkgs.shellcheck 20 + ]; 21 + 22 + age.identityPaths = [ "/Users/anishlakhwara/.ssh/id_ed25519" ]; 23 + age.secrets.work-wg.file = "${self}/secrets/work-wg.age"; 24 + age.secrets.work-wg.owner = "anishlakhwara"; 25 + networking.wg-quick.interfaces = { 26 + wg0 = { 27 + address = [ "10.0.69.7/24" ]; 28 + listenPort = 60990; # to match firewall allowedUDPPorts (without this wg uses random port numbers) 29 + privateKeyFile = config.age.secrets.work-wg.path; 30 + dns = [ "10.0.69.4" ]; 31 + postDown = '' 32 + sudo /usr/sbin/networksetup -setdnsservers Wi-Fi "Empty" 33 + ''; 34 + peers = [ 35 + # For a client configuration, one peer entry for the server will suffice. 36 + { 37 + publicKey = "c1J4p63rD3IlszugMZiki7UBV3YmDdqa3DU4UejXzAI="; 38 + allowedIPs = [ "10.0.69.0/24" ]; 39 + # Set this to the server IP and port. 40 + endpoint = "sealight.xyz:60990"; # ToDo: route to endpoint not automatically configured https://wiki.archlinux.org/index.php/WireGuard#Loop_routing https://discourse.nixos.org/t/solved-minimal-firewall-setup-for-wireguard-client/7577 41 + persistentKeepalive = 25; 42 + } 43 + ]; 44 + }; 45 + }; 46 + 47 + # Auto upgrade nix package and the daemon service. 48 + services.nix-daemon.enable = true; 49 + nixpkgs.hostPlatform = "aarch64-darwin"; 50 + programs.zsh.enable = true; 51 + 52 + # Setup user, packages, programs 53 + nix = { 54 + # package = pkgs.nixUnstable; 55 + settings.trusted-users = [ "@admin" "anishlakhwara" ]; 56 + 57 + gc = { 58 + user = "root"; 59 + automatic = true; 60 + interval = { Weekday = 0; Hour = 2; Minute = 0; }; 61 + options = "--delete-older-than 30d"; 62 + }; 63 + 64 + # Turn this on to make command line easier 65 + extraOptions = '' 66 + experimental-features = nix-command flakes 67 + ''; 68 + }; 69 + 70 + # Turn off NIX_PATH warnings now that we're using flakes 71 + system.checks.verifyNixPath = false; 72 + 73 + # Load configuration that is shared across systems 74 + # environment.systemPackages = with pkgs; [ 75 + # 76 + # ] ++ (import ../../modules/shared/packages.nix { inherit pkgs; }); 77 + 78 + # Enable fonts dir 79 + # fonts.fontDir.enable = true; 80 + fonts.packages = with pkgs; [ 81 + fira-code 82 + fira-code-symbols 83 + hermit 84 + #hack 85 + siji 86 + font-awesome 87 + proggyfonts 88 + (nerdfonts.override { fonts = [ "FiraCode" "DroidSansMono" "Iosevka" ]; }) 89 + ]; 90 + 91 + system = { 92 + stateVersion = 4; 93 + 94 + keyboard = { 95 + enableKeyMapping = true; 96 + }; 97 + 98 + defaults = { 99 + LaunchServices = { 100 + LSQuarantine = false; 101 + }; 102 + 103 + NSGlobalDomain = { 104 + AppleShowAllExtensions = true; 105 + ApplePressAndHoldEnabled = false; 106 + 107 + # 120, 90, 60, 30, 12, 6, 2 108 + KeyRepeat = 2; 109 + 110 + # 120, 94, 68, 35, 25, 15 111 + InitialKeyRepeat = 15; 112 + 113 + "com.apple.mouse.tapBehavior" = 1; 114 + "com.apple.sound.beep.volume" = 0.0; 115 + "com.apple.sound.beep.feedback" = 0; 116 + }; 117 + 118 + loginwindow = { 119 + # disable guest account 120 + GuestEnabled = false; 121 + # show name instead of username 122 + SHOWFULLNAME = false; 123 + }; 124 + 125 + dock = { 126 + autohide = true; 127 + autohide-delay = 0.0; 128 + autohide-time-modifier = 1.0; 129 + static-only = false; 130 + showhidden = false; 131 + show-recents = false; 132 + launchanim = true; 133 + mouse-over-hilite-stack = true; 134 + orientation = "bottom"; 135 + tilesize = 48; 136 + mru-spaces = false; 137 + }; 138 + 139 + finder = { 140 + _FXShowPosixPathInTitle = false; 141 + }; 142 + 143 + trackpad = { 144 + Clicking = false; 145 + TrackpadThreeFingerDrag = true; 146 + }; 147 + }; 148 + 149 + # keyboard = { 150 + # enableKeyMapping = true; 151 + # remapCapsLockToControl = true; 152 + # }; 153 + }; 154 + }
+10
hosts/darwin/sketchybar/default.nix
··· 1 + { pkgs, ... }: 2 + 3 + { 4 + services.sketchybar = { 5 + enable = true; 6 + config = (builtins.readFile ./sketchybarrc); 7 + extraPackages = [ pkgs.jq ]; 8 + }; 9 + 10 + }
+59
hosts/darwin/sketchybar/sketchybarrc
··· 1 + #!/usr/bin/env bash 2 + 3 + source "$HOME/.config/sketchybar/variables.sh" # Loads all defined colors 4 + 5 + # General bar and defaults 6 + # parts I didn't want 7 + # y_offset=5 \ 8 + # margin=5 \ 9 + 10 + sketchybar --bar height=35 \ 11 + color="$BAR_COLOR" \ 12 + shadow="$SHADOW" \ 13 + position=top \ 14 + sticky=on \ 15 + padding_right=0 \ 16 + padding_left=3 \ 17 + corner_radius="$CORNER_RADIUS" \ 18 + blur_radius=20 \ 19 + notch_width=200 \ 20 + --default updates=when_shown \ 21 + icon.font="$FONT:Bold:13.5" \ 22 + icon.color="$ICON_COLOR" \ 23 + icon.padding_left="$PADDINGS" \ 24 + icon.padding_right="$PADDINGS" \ 25 + label.font="$FONT:Bold:13.0" \ 26 + label.color="$LABEL_COLOR" \ 27 + label.padding_left="$PADDINGS" \ 28 + label.padding_right="$PADDINGS" \ 29 + background.padding_right="$PADDINGS" \ 30 + background.padding_left="$PADDINGS" \ 31 + popup.background.border_width=1 \ 32 + popup.background.corner_radius=11 \ 33 + popup.background.border_color="$POPUP_BORDER_COLOR" \ 34 + popup.background.color="$POPUP_BACKGROUND_COLOR" \ 35 + popup.background.shadow.drawing="$SHADOW" 36 + 37 + # Left 38 + # source "$ITEM_DIR/apple.sh" 39 + source "$ITEM_DIR/spaces.sh" 40 + 41 + # Center (of notch) 42 + # source "$ITEM_DIR/spotify.sh" 43 + source "$ITEM_DIR/front_app.sh" 44 + 45 + # Right 46 + source "$ITEM_DIR/clock.sh" 47 + source "$ITEM_DIR/calendar.sh" 48 + source "$ITEM_DIR/battery.sh" 49 + source "$ITEM_DIR/volume.sh" 50 + source "$ITEM_DIR/cpu.sh" 51 + source "$ITEM_DIR/vpn.sh" 52 + 53 + #################### Finalizing Setup #################### 54 + 55 + # sketchybar --hotload true 56 + 57 + sketchybar --update 58 + 59 + echo "sketchybar configuration loaded.."
+102
hosts/darwin/yabai/default.nix
··· 1 + {pkgs, ... }: 2 + 3 + { 4 + services.yabai = { 5 + enable = true; 6 + config = { 7 + mouse_follows_focus = "off"; 8 + focus_follows_mouse = "off"; 9 + window_placement = "second_child"; 10 + window_topmost = "off"; 11 + window_opacity = "off"; 12 + window_opacity_duration = 0.0; 13 + window_shadow = "on"; 14 + window_border = "off"; 15 + window_border_placement = "inset"; 16 + window_border_width = 4; 17 + window_border_radius = -1.0; 18 + active_window_border_topmost = "off"; 19 + active_window_border_color = "0xff775759"; 20 + normal_window_border_color = "0xff505050"; 21 + insert_window_border_color = "0xffd75f5f"; 22 + active_window_opacity = 1.0; 23 + normal_window_opacity = 0.9; 24 + split_ratio = 0.73; 25 + auto_balance = "on"; 26 + mouse_modifier = "fn"; 27 + mouse_action1 = "move"; 28 + mouse_action2 = "resize"; 29 + layout = "bsp"; 30 + top_padding = 5; 31 + bottom_padding = 5; 32 + left_padding = 5; 33 + right_padding = 5; 34 + window_gap = 5; 35 + }; 36 + extraConfig = '' 37 + # Do not manage windows with certain titles eg. Copying files or moving to bin 38 + yabai -m rule --add title="(Copy|Bin|About This Mac|Info)" manage=off 39 + # Do not manage some apps which are not resizable 40 + yabai -m rule --add app="^(Calculator|System Preferences|[sS]tats|[Jj]et[Bb]rains [Tt]ool[Bb]ox|kftray)$" manage=off 41 + ''; 42 + }; 43 + 44 + system.activationScripts.yabai = { 45 + enable = true; 46 + text = '' 47 + yabai --install-service && yabai --start-service 48 + ''; 49 + }; 50 + 51 + services.skhd = { 52 + enable = true; 53 + skhdConfig = '' 54 + # Open iTerm2 55 + cmd - enter : kitty --single-instance -d ~ 56 + 57 + ################## 58 + # Window Motions # 59 + ################## 60 + # Rotate 61 + lalt - r : yabai -m space --rotate 90 62 + # Mirror verticaly 63 + lalt - x : yabai -m space --mirror y-axis 64 + # Mirror horizontaly 65 + lalt - y : yabai -m space --mirror x-axis 66 + # yes, i know i swapped x and y, but I mainly use y-axis and y is further... 67 + # Fullscreen 68 + cmd - f : yabai -m window --toggle zoom-fullscreen 69 + # Swap 70 + lalt - q : yabai -m window --swap west 71 + lalt - s : yabai -m window --swap south 72 + lalt - z : yabai -m window --swap north 73 + lalt - d : yabai -m window --swap east 74 + # Warp 75 + shift + lalt - q : yabai -m window --warp west 76 + shift + lalt - s : yabai -m window --warp south 77 + shift + lalt - z : yabai -m window --warp north 78 + shift + lalt - d : yabai -m window --warp east 79 + 80 + ######### 81 + # Focus # 82 + ######### 83 + # Clockwise 84 + # 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)")" 85 + # Counter-clockwise 86 + # 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)")" 87 + 88 + ########## 89 + # Spaces # 90 + ########## 91 + ctrl - left : yabai -m space --focus prev 92 + ctrl - right : yabai -m space --focus next 93 + ctrl + shift - right : yabai -m window --space next; yabai -m space --focus next 94 + ctrl + shift - left : yabai -m window --space prev; yabai -m space --focus prev 95 + cmd - 1 : yabai -m window --space 1; yabai -m space --focus 1 96 + cmd - 2 : yabai -m window --space 2; yabai -m space --focus 2 97 + cmd - 3 : yabai -m window --space 3; yabai -m space --focus 3 98 + cmd - 4 : yabai -m window --space 4; yabai -m space --focus 4 99 + cmd - 5 : yabai -m window --space 5; yabai -m space --focus 5 100 + ''; 101 + }; 102 + }
+120
hosts/deck/configuration.nix
··· 1 + # Edit this configuration file to define what should be installed on 2 + # your system. Help is available in the configuration.nix(5) man page 3 + # and in the NixOS manual (accessible by running โ€˜nixos-helpโ€™). 4 + 5 + { config, pkgs, ... }: 6 + 7 + { 8 + imports = 9 + [ # Include the results of the hardware scan. 10 + ./hardware-configuration.nix 11 + ]; 12 + 13 + # Bootloader. 14 + boot.loader.systemd-boot.enable = true; 15 + boot.loader.efi.canTouchEfiVariables = true; 16 + 17 + networking.hostName = "deck"; # Define your hostname. 18 + # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. 19 + 20 + # Configure network proxy if necessary 21 + # networking.proxy.default = "http://user:password@proxy:port/"; 22 + # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; 23 + 24 + # Enable networking 25 + networking.networkmanager.enable = true; 26 + 27 + # Set your time zone. 28 + # time.timeZone = "America/Los_Angeles"; 29 + 30 + # Select internationalisation properties. 31 + i18n.defaultLocale = "en_US.UTF-8"; 32 + 33 + # i18n.extraLocaleSettings = { 34 + # LC_ADDRESS = "en_US.UTF-8"; 35 + # LC_IDENTIFICATION = "en_US.UTF-8"; 36 + # LC_MEASUREMENT = "en_US.UTF-8"; 37 + # LC_MONETARY = "en_US.UTF-8"; 38 + # LC_NAME = "en_US.UTF-8"; 39 + # LC_NUMERIC = "en_US.UTF-8"; 40 + # LC_PAPER = "en_US.UTF-8"; 41 + # LC_TELEPHONE = "en_US.UTF-8"; 42 + # LC_TIME = "en_US.UTF-8"; 43 + # }; 44 + 45 + # Enable the X11 windowing system. 46 + # services.xserver.enable = true; 47 + 48 + # Enable the GNOME Desktop Environment. 49 + # services.xserver.displayManager.gdm.enable = true; 50 + # services.xserver.desktopManager.gnome.enable = true; 51 + 52 + # Configure keymap in X11 53 + # services.xserver.xkb = { 54 + # layout = "us"; 55 + # variant = ""; 56 + # }; 57 + 58 + 59 + # use the example session manager (no others are packaged yet so this is enabled by default, 60 + # no need to redefine it in your config for now) 61 + #media-session.enable = true; 62 + 63 + # Enable touchpad support (enabled default in most desktopManager). 64 + # services.xserver.libinput.enable = true; 65 + 66 + # Define a user account. Don't forget to set a password with โ€˜passwdโ€™. 67 + # users.users.anish = { 68 + # isNormalUser = true; 69 + # extraGroups = [ "networkmanager" "wheel" ]; 70 + # packages = with pkgs; [ 71 + # # thunderbird 72 + # ]; 73 + # }; 74 + 75 + # Enable automatic login for the user. 76 + services.xserver.displayManager.autoLogin.enable = true; 77 + services.xserver.displayManager.autoLogin.user = "anish"; 78 + 79 + # Workaround for GNOME autologin: https://github.com/NixOS/nixpkgs/issues/103746#issuecomment-945091229 80 + systemd.services."getty@tty1".enable = false; 81 + systemd.services."autovt@tty1".enable = false; 82 + 83 + # Install firefox. 84 + # programs.firefox.enable = true; 85 + 86 + # List packages installed in system profile. To search, run: 87 + # $ nix search wget 88 + environment.systemPackages = with pkgs; [ 89 + # vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. 90 + # wget 91 + ]; 92 + 93 + # Some programs need SUID wrappers, can be configured further or are 94 + # started in user sessions. 95 + # programs.mtr.enable = true; 96 + # programs.gnupg.agent = { 97 + # enable = true; 98 + # enableSSHSupport = true; 99 + # }; 100 + 101 + # List services that you want to enable: 102 + 103 + # Enable the OpenSSH daemon. 104 + # services.openssh.enable = true; 105 + 106 + # Open ports in the firewall. 107 + # networking.firewall.allowedTCPPorts = [ ... ]; 108 + # networking.firewall.allowedUDPPorts = [ ... ]; 109 + # Or disable the firewall altogether. 110 + # networking.firewall.enable = false; 111 + 112 + # This value determines the NixOS release from which the default 113 + # settings for stateful data, like file locations and database versions 114 + # on your system were taken. Itโ€˜s perfectly fine and recommended to leave 115 + # this value at the release version of the first install of this system. 116 + # Before changing this value read the documentation for this option 117 + # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). 118 + system.stateVersion = "24.11"; # Did you read the comment? 119 + 120 + }
+54
hosts/deck/default.nix
··· 1 + { self, pkgs, config, ... }: { 2 + imports = [ 3 + ./configuration.nix 4 + ../users/anish 5 + ../profiles/core 6 + # ../profiles/bluetooth 7 + # ../profiles/music 8 + ../profiles/sync/cal 9 + ../profiles/wifi 10 + ../profiles/desktop 11 + ../profiles/mimetypes 12 + ../profiles/syncthing 13 + ../profiles/mossnet-hosts 14 + # ../profiles/fly-wg 15 + # ../profiles/mount-mossnet 16 + ]; 17 + 18 + # age.secrets.deck-wg.file = "${self}/secrets/deck-wg.age"; 19 + # age.secrets.deck-wg.owner = "deck"; 20 + # mossnet.wg = { 21 + # enable = true; 22 + # ips = [ "10.0.69.6/24" ]; 23 + # privateKeyFile = "/run/agenix/deck-wg"; 24 + # }; 25 + 26 + users.users.anish.extraGroups = [ "adbusers" "wheel" "plugdev" "libvertd" ]; 27 + # boot.plymouth = { 28 + # enable = true; 29 + # themePackages = [ pkgs.plymouth-themes ]; 30 + # theme = "motion"; 31 + # }; 32 + 33 + jovian.steam.enable = true; 34 + jovian.devices.steamdeck.enable = true; 35 + jovian.steam.user = "anish"; 36 + jovian.steam.autoStart = true; 37 + jovian.steam.desktopSession = "gnome"; 38 + # jovian.steam.desktopSession = "none+bspwm"; 39 + 40 + # Install XR drivers 41 + environment.systemPackages = with pkgs; [ 42 + xrlinuxdriver 43 + stardust-xr-server 44 + # breezy-gnome 45 + ]; 46 + 47 + services.udev.packages = with pkgs; [ xrlinuxdriver ]; 48 + 49 + services.monado = { 50 + enable = true; 51 + defaultRuntime = true; 52 + }; 53 + 54 + }
+40
hosts/deck/hardware-configuration.nix
··· 1 + # Do not modify this file! It was generated by โ€˜nixos-generate-configโ€™ 2 + # and may be overwritten by future invocations. Please make changes 3 + # to /etc/nixos/configuration.nix instead. 4 + { config, lib, pkgs, modulesPath, ... }: 5 + 6 + { 7 + imports = 8 + [ (modulesPath + "/installer/scan/not-detected.nix") 9 + ]; 10 + 11 + boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "usbhid" "sdhci_pci" ]; 12 + boot.initrd.kernelModules = [ ]; 13 + boot.kernelModules = [ "kvm-amd" ]; 14 + boot.extraModulePackages = [ ]; 15 + 16 + fileSystems."/" = 17 + { device = "/dev/disk/by-uuid/d432dae0-3512-4891-9582-56d7ecd8524c"; 18 + fsType = "ext4"; 19 + }; 20 + 21 + fileSystems."/boot" = 22 + { device = "/dev/disk/by-uuid/5B4C-7406"; 23 + fsType = "vfat"; 24 + options = [ "fmask=0077" "dmask=0077" ]; 25 + }; 26 + 27 + swapDevices = 28 + [ { device = "/dev/disk/by-uuid/f75a730e-c849-4edd-a17f-52492d4260dc"; } 29 + ]; 30 + 31 + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 32 + # (the default) this is the recommended approach. When using systemd-networkd it's 33 + # still possible to use this option, but it's recommended to use it in conjunction 34 + # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`. 35 + networking.useDHCP = lib.mkDefault true; 36 + # networking.interfaces.wlo1.useDHCP = lib.mkDefault true; 37 + 38 + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; 39 + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 40 + }
+20 -20
hosts/profiles/desktop/default.nix
··· 62 62 }; 63 63 64 64 environment.systemPackages = with pkgs; [ 65 - #unstable.sublime-music 66 - unstable.nheko 67 - unstable.signal-desktop 68 - unstable.tuba 69 - unstable.newsflash 70 - unstable.liferea 71 - unstable.gh 72 - unstable.flyctl 65 + sublime-music 66 + # nheko 67 + signal-desktop 68 + tuba 69 + newsflash 70 + liferea 71 + gh 72 + flyctl 73 73 74 74 kooha 75 75 light ··· 102 102 yt-dlp 103 103 ]; 104 104 105 - xdg.portal = { 105 + # xdg.portal = { 106 106 # Breaks link clicking in nheko 107 107 # Portal doesn't seem to find Firefox as an acceptable app to open links? 108 - enable = false; 109 - extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; 110 - xdgOpenUsePortal = false; 111 - }; 108 + # enable = false; 109 + # extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; 110 + #xdgOpenUsePortal = false; 111 + # }; 112 112 113 113 location.provider = "geoclue2"; 114 114 services = { ··· 121 121 }; 122 122 displayManager.defaultSession = "none+bspwm"; 123 123 xserver = { 124 - enable = true; 125 - # TODO should be xkb.layout 126 - xkb.layout = "us"; 127 - # xkb.variant = "dvorak"; 124 + enable = false; 125 + xkb.layout = "us,dvorak"; 128 126 desktopManager.wallpaper.mode = "fill"; 127 + desktopManager.gnome.enable = true; 129 128 displayManager = { 130 - # startx.enable = true; 129 + # gdm.enable = true; 130 + # defaultSession = "none+bspwm"; 131 131 sessionCommands = '' 132 132 ${pkgs.xorg.xrdb}/bin/xrdb -merge <<EOF 133 133 #define blk #1F2430 ··· 194 194 EOF 195 195 ''; 196 196 lightdm = { 197 - enable = true; 197 + enable = false; 198 198 background = "/etc/nixos/users/profiles/desktop/background.jpg"; 199 199 greeters.mini = { 200 200 enable = true; ··· 222 222 siji 223 223 font-awesome 224 224 proggyfonts 225 - (nerdfonts.override { fonts = [ "FiraCode" "DroidSansMono" "Iosevka" ]; }) 225 + # (nerdfonts.override { fonts = [ "FiraCode" "DroidSansMono" "Iosevka" ]; }) 226 226 ]; 227 227 }
+2 -2
hosts/users/anish/default.nix
··· 12 12 openssh.authorizedKeys.keys = [ 13 13 # Curve 14 14 "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDM0Zvei46x/yZl/IeBCq6+IYQQ0avulzVyBysF9cPigZMCybWRV7IEU+E3k9t6JrbdbdGfJkcZIWmsWDdKS8W8mBnZpVoT0ffLynu8JQ/TKdGm4Qv6bgUeKNrGsNv0ZPs2CDaGSLj0oJfRF7Ko10tcLP0vW+yujrh+y6TH/vVzJioaV4TGvtCUpn+wEQah9ROwPQLUUofsSWdnRsDJ/gp37zXWs4l5wyjSKtP3O9RZUP7kBekbSqEgSXiTk0oUQSVqIWl9NDiP6onk/gSOjXsR/JPqsSN/XI/c/yj6gyY0f51Ru2D7iBxuMJIJcWV+rU6coIj+ULcQWLzt/7TI8jq5AOOzI/ll4zbL24Eo84Rz+TP9tvMMhDZ0VaMN22AJ8qQEjc5P09tWKsX7Jg39XelyV1jHXncE4yvIE9F4RSCHzWCeKeXakizQNuzSaxTxIExRFYHjNW5bR6+3MTGwVrEIXU+qML+0yFTR86MT+tdY5AreAJQLwbog79O1NupeXJE= anish@curve" 15 - # Line 16 - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDtU2GMYjXj6RGO1+mwM4TDGOo0qrKLTL4Di8+QgDX0p5vUEsnE1PS9wnuqCmSu75U8g0XIAMtvtdYyGk1N+Bx01erAZpT8DLYtIXFCyaiN28PVu5T1D0T+TQ7xgIH1qenXZR2DOQdf6kpvKEfm7+7bWhCo0N/KFMpmReubyzHDQcq/1qQasxTL+YALQFOjwKqsOTBXbHwZ103AEAcQX4ftBFEOfVli4/1aKIK4dNSZYB7J9Htq707YnsEqo9RLAMh0aOTTYgTx9AoSUDeqGuh/AGkcB7NcS7EEtI6d5YUGylwZh/gF6hqE0jl8kn2m5jMKXL3CRohZvjifue8x/GIjpu5WRabUuhBEbrfTQQaC7taHnt5rvYCGzKZx09TexUzhuz2CL480DRoxSG+P+lCNm1dIg/EZrnGEzXCSr36PlOqS5t5gm8tPkzCmZf2wU15A3ZIYUPmnYLqsn4WmIV7rKmdqt2ctWELUXow3PPiZXBucP9P3xpsYEfF1SB2SGNc= u0_a139@localhost" 17 15 # Box 18 16 "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKN8/SH55DBiwVoSnTU8k2Pen+wmovL9QaMyehxGEsJJv/8fzwsswGalD4C/4O51LOvdu4UKkZW5hG02uVSK+58p3UV3pOPyoqsu/aDeIsWsqmTeTzUrBIWOlNzcDKnohLz2oGC5YO+wyTJ9Iteq6aGJDjErsW7sG3h5lXCs551EmJNNGhtBQaaoytMNnWqSdlVjDNCijurH7WUpp40U/RjEp532l4rX6eIIj3jBKEFbhZkFSSjqbj4xM4SyFt+Jmigb1RMjsQjmpfY1vDtM84RcYfpTUte/T5w2dkD5H6kccmWnwKSJpm9wXfx4E7lR9APdUGnau2U1+XxiD3ytGl anish@box" 17 + # Nix-on-droid line 18 + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJOiXBPVvZAp1fY0a0Tupxj0Ml6MoA51lvqt/jAQq249 nix-on-droid@localhost" 19 19 # Work 20 20 "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC/vvh0i6+uAN0GWlK6ZfyTlc/AW54xe2CroUDsDSoGnFKeIUiSsWexobODlVakNhqwCKfsvUh6g+RdA8ZVcamATcYqxysP4X5fRksmAzRm5281O7ZBDHMB2BdcfHSTgiz7JvMRIQYWDlU8Ck6IL4wlN0b2GMUj9t/GeG37us8280rxpRNoIY7M27AJEZ7XNQhctBIVujxctVBgIMYmZiTwziU7ywJv4rNT5OAWvjRXSo1rkxdvx3VESv4y/mp8m7dEupZpIjIFsLs52+UG5LtadulUqtTWg05sCw8LEcmRhflgZSAvjw60RrKFCuWxc8+/Pmaw+zExeBMenqi0NzuTc3S3k2wCKVIZDh/0tlXzIwZ6WRqxDevUtEKfvbEFMXd8akhTfYs0dyszcFRevBxOBPbcKku+FK/HkdPLmEANvxYty3cv+Eipkz3c8JPJPvXNTXrjepXMm0LUKodO3c15hGogCOxUO38kykkyYnn+MxxHparoMfEr2+oHNpQoS5wA1G43ppqjVoRDgnhleu6ixwRkLZzphY3cnOd5jL9Ie5xIGbFWH1qSlQRdHBkHjuf85z7+QK8nFYAhmG1K3Vt3GNtF8LN1tYQkfwBJ/vsroMNzGPoq4PjVbqb80Eq+96cP89XKfU2/xw1g+p2lJDm/zC1WCjXVzf8NRwC7gqPavQ== anishlakhwara@anishs-mbp.lan" 21 21 ];
+12
modules/darwin/README.md
··· 1 + 2 + ## Layout 3 + ``` 4 + . 5 + โ”œโ”€โ”€ dock # MacOS dock configuration 6 + โ”œโ”€โ”€ casks.nix # List of homebrew casks 7 + โ”œโ”€โ”€ default.nix # Defines module, system-level config 8 + โ”œโ”€โ”€ files.nix # Non-Nix, static configuration files (now immutable!) 9 + โ”œโ”€โ”€ home-manager.nix # Defines user programs 10 + โ”œโ”€โ”€ packages.nix # List of packages to install for MacOS 11 + โ”œโ”€โ”€ secrets.nix # Age-encrypted secrets with agenix 12 + ```
+67
modules/darwin/dock/default.nix
··· 1 + { config, pkgs, lib, ... }: 2 + with lib; 3 + let 4 + cfg = config.local.dock; 5 + inherit (pkgs) stdenv dockutil; 6 + in 7 + { 8 + options = { 9 + local.dock.enable = mkOption { 10 + description = "Enable dock"; 11 + default = stdenv.isDarwin; 12 + example = false; 13 + }; 14 + 15 + local.dock.entries = mkOption 16 + { 17 + description = "Entries on the Dock"; 18 + type = with types; listOf (submodule { 19 + options = { 20 + path = lib.mkOption { type = str; }; 21 + section = lib.mkOption { 22 + type = str; 23 + default = "apps"; 24 + }; 25 + options = lib.mkOption { 26 + type = str; 27 + default = ""; 28 + }; 29 + }; 30 + }); 31 + readOnly = true; 32 + }; 33 + }; 34 + 35 + config = 36 + mkIf cfg.enable 37 + ( 38 + let 39 + normalize = path: if hasSuffix ".app" path then path + "/" else path; 40 + entryURI = path: "file://" + (builtins.replaceStrings 41 + [" " "!" "\"" "#" "$" "%" "&" "'" "(" ")"] 42 + ["%20" "%21" "%22" "%23" "%24" "%25" "%26" "%27" "%28" "%29"] 43 + (normalize path) 44 + ); 45 + wantURIs = concatMapStrings 46 + (entry: "${entryURI entry.path}\n") 47 + cfg.entries; 48 + createEntries = concatMapStrings 49 + (entry: "${dockutil}/bin/dockutil --no-restart --add '${entry.path}' --section ${entry.section} ${entry.options}\n") 50 + cfg.entries; 51 + in 52 + { 53 + system.activationScripts.postUserActivation.text = '' 54 + echo >&2 "Setting up the Dock..." 55 + haveURIs="$(${dockutil}/bin/dockutil --list | ${pkgs.coreutils}/bin/cut -f2)" 56 + if ! diff -wu <(echo -n "$haveURIs") <(echo -n '${wantURIs}') >&2 ; then 57 + echo >&2 "Resetting Dock." 58 + ${dockutil}/bin/dockutil --no-restart --remove all 59 + ${createEntries} 60 + killall Dock 61 + else 62 + echo >&2 "Dock setup complete." 63 + fi 64 + ''; 65 + } 66 + ); 67 + }
+54
modules/darwin/files.nix
··· 1 + { user, config, pkgs, ... }: 2 + 3 + let 4 + xdg_configHome = "${config.users.users.${user}.home}/.config"; 5 + xdg_dataHome = "${config.users.users.${user}.home}/.local/share"; 6 + xdg_stateHome = "${config.users.users.${user}.home}/.local/state"; in 7 + { 8 + 9 + # Raycast script so that "Run Emacs" is available and uses Emacs daemon 10 + "${xdg_dataHome}/bin/emacsclient" = { 11 + executable = true; 12 + text = '' 13 + #!/bin/zsh 14 + # 15 + # Required parameters: 16 + # @raycast.schemaVersion 1 17 + # @raycast.title Run Emacs 18 + # @raycast.mode silent 19 + # 20 + # Optional parameters: 21 + # @raycast.packageName Emacs 22 + # @raycast.icon ${xdg_dataHome}/img/icons/Emacs.icns 23 + # @raycast.iconDark ${xdg_dataHome}/img/icons/Emacs.icns 24 + 25 + if [[ $1 = "-t" ]]; then 26 + # Terminal mode 27 + ${pkgs.emacs}/bin/emacsclient -t $@ 28 + else 29 + # GUI mode 30 + ${pkgs.emacs}/bin/emacsclient -c -n $@ 31 + fi 32 + ''; 33 + }; 34 + 35 + # Script to import Drafts into Emacs org-roam 36 + "${xdg_dataHome}/bin/import-drafts" = { 37 + executable = true; 38 + text = '' 39 + #!/bin/sh 40 + 41 + for f in ${xdg_stateHome}/drafts/* 42 + do 43 + if [[ ! "$f" =~ "done" ]]; then 44 + echo "Importing $f" 45 + filename="$(head -c 10 $f)" 46 + output="${xdg_dataHome}/org-roam/daily/$filename.org" 47 + echo '\n' >> "$output" 48 + tail -n +3 $f >> "$output" 49 + mv $f done 50 + fi 51 + done 52 + ''; 53 + }; 54 + }
+85
modules/darwin/home-manager.nix
··· 1 + { config, pkgs, lib, home-manager, ... }: 2 + 3 + let 4 + user = "anishlakhwara"; 5 + # Define the content of your file as a derivation 6 + myEmacsLauncher = pkgs.writeScript "emacs-launcher.command" '' 7 + #!/bin/sh 8 + emacsclient -c -n & 9 + ''; 10 + sharedFiles = import ../shared/files.nix { inherit config pkgs; }; 11 + additionalFiles = import ./files.nix { inherit user config pkgs; }; 12 + in 13 + { 14 + imports = [ 15 + ./dock 16 + ]; 17 + 18 + # It me 19 + users.users.${user} = { 20 + name = "${user}"; 21 + home = "/Users/${user}"; 22 + isHidden = false; 23 + shell = pkgs.zsh; 24 + }; 25 + 26 + # Enable home-manager 27 + home-manager = { 28 + useGlobalPkgs = true; 29 + users.${user} = { pkgs, config, lib, ... }:{ 30 + home = { 31 + enableNixpkgsReleaseCheck = false; 32 + packages = pkgs.callPackage ./packages.nix {}; 33 + file = lib.mkMerge [ 34 + sharedFiles 35 + additionalFiles 36 + { "emacs-launcher.command".source = myEmacsLauncher; } 37 + ]; 38 + 39 + stateVersion = "23.11"; 40 + }; 41 + 42 + programs = {} // import ../shared/home-manager.nix { inherit config pkgs lib; }; 43 + 44 + # Marked broken Oct 20, 2022 check later to remove this 45 + # https://github.com/nix-community/home-manager/issues/3344 46 + manual.manpages.enable = false; 47 + }; 48 + }; 49 + 50 + # Fully declarative dock using the latest from Nix Store 51 + local = { 52 + dock.enable = true; 53 + dock.entries = [ 54 + { path = "/Applications/Slack.app/"; } 55 + { path = "/System/Applications/Messages.app/"; } 56 + { path = "/System/Applications/Facetime.app/"; } 57 + { path = "/Applications/Telegram.app/"; } 58 + { path = "${pkgs.alacritty}/Applications/Alacritty.app/"; } 59 + { path = "/System/Applications/Music.app/"; } 60 + { path = "/System/Applications/News.app/"; } 61 + { path = "/System/Applications/Photos.app/"; } 62 + { path = "/System/Applications/Photo Booth.app/"; } 63 + { path = "/System/Applications/TV.app/"; } 64 + { path = "${pkgs.jetbrains.phpstorm}/Applications/PhpStorm.app/"; } 65 + { path = "/Applications/TablePlus.app/"; } 66 + { path = "/Applications/Asana.app/"; } 67 + { path = "/Applications/Drafts.app/"; } 68 + { path = "/System/Applications/Home.app/"; } 69 + { 70 + path = toString myEmacsLauncher; 71 + section = "others"; 72 + } 73 + { 74 + path = "${config.users.users.${user}.home}/.local/share/"; 75 + section = "others"; 76 + options = "--sort name --view grid --display folder"; 77 + } 78 + { 79 + path = "${config.users.users.${user}.home}/.local/share/downloads"; 80 + section = "others"; 81 + options = "--sort name --view grid --display stack"; 82 + } 83 + ]; 84 + }; 85 + }
+7
modules/darwin/packages.nix
··· 1 + { pkgs }: 2 + 3 + with pkgs; 4 + let shared-packages = import ../shared/packages.nix { inherit pkgs; }; in 5 + shared-packages ++ [ 6 + dockutil 7 + ]
+47
modules/darwin/secrets.nix
··· 1 + { config, pkgs, agenix, secrets, ... }: 2 + 3 + let user = "dustin"; in 4 + { 5 + age = { 6 + identityPaths = [ 7 + "/Users/${user}/.ssh/id_ed25519" 8 + ]; 9 + 10 + secrets = { 11 + "syncthing-cert" = { 12 + symlink = true; 13 + path = "/Users/${user}/Library/Application Support/Syncthing/cert.pem"; 14 + file = "${secrets}/darwin-syncthing-cert.age"; 15 + mode = "644"; 16 + owner = "${user}"; 17 + group = "staff"; 18 + }; 19 + 20 + "syncthing-key" = { 21 + symlink = true; 22 + path = "/Users/${user}/Library/Application Support/Syncthing/key.pem"; 23 + file = "${secrets}/darwin-syncthing-key.age"; 24 + mode = "600"; 25 + owner = "${user}"; 26 + group = "staff"; 27 + }; 28 + 29 + "github-ssh-key" = { 30 + symlink = true; 31 + path = "/Users/${user}/.ssh/id_github"; 32 + file = "${secrets}/github-ssh-key.age"; 33 + mode = "600"; 34 + owner = "${user}"; 35 + group = "staff"; 36 + }; 37 + 38 + "github-signing-key" = { 39 + symlink = false; 40 + path = "/Users/${user}/.ssh/pgp_github.key"; 41 + file = "${secrets}/github-signing-key.age"; 42 + mode = "600"; 43 + owner = "${user}"; 44 + }; 45 + }; 46 + }; 47 + }
+3
secrets/secrets.nix
··· 6 6 lituus = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH2lAb33LH3JNuOfBXt971u0tHe+NURFecQdfjwEj+C+ root@lituus"; 7 7 helix = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAKrL6IDHNnHmxi0q9nzu87NOyidPm3HpE7klU368lEf root@helix"; 8 8 helix2 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK2G81z1E51ioJQGLHnTJEjgSdBqLM6mb72Z+0atE6Bf root@helix"; 9 + work = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHOnfDvR2D2nGnC+DZYDUXiokzz+eLfZwkp+O8WjWutp anishlakhwara@Anishs-MacBook-Pro.local"; 9 10 curve = [ system user ]; 10 11 allUserKeys = [ system user mossnet ]; 11 12 systemOnly = [ system mossnet lituus helix ]; ··· 34 35 "box-wg.age".publicKeys = [ mossnet ]; 35 36 "wallabag-password.age".publicKeys = [ mossnet ]; 36 37 "wallabag-secret.age".publicKeys = [ mossnet ]; 38 + 39 + "work-wg.age".publicKeys = [ work user system ]; 37 40 }
secrets/work-wg.age

This is a binary file and will not be displayed.

+9 -1
shell.nix
··· 5 5 default = pkgs.mkShell { 6 6 # Enable experimental features without having to specify the argument 7 7 NIX_CONFIG = "experimental-features = nix-command flakes"; 8 - nativeBuildInputs = with pkgs; [ nix home-manager git agenix deploy-rs dnscontrol ]; 8 + nativeBuildInputs = with pkgs; [ 9 + nix 10 + home-manager 11 + git 12 + agenix 13 + deploy-rs 14 + dnscontrol 15 + git-bug 16 + ]; 9 17 }; 10 18 }