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 .direnv/
··· 1 + .worktrees/* 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 "systems": "systems" 11 }, 12 "locked": { 13 - "lastModified": 1723293904, 14 - "narHash": "sha256-b+uqzj+Wa6xgMS9aNbX4I+sXeb5biPDi39VgvSFqFvU=", 15 "owner": "ryantm", 16 "repo": "agenix", 17 - "rev": "f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41", 18 "type": "github" 19 }, 20 "original": { ··· 48 "url": "ssh://gitea@git.sealight.xyz/aynish/basant" 49 } 50 }, 51 "darwin": { 52 "inputs": { 53 "nixpkgs": [ ··· 56 ] 57 }, 58 "locked": { 59 - "lastModified": 1700795494, 60 - "narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=", 61 "owner": "lnl7", 62 "repo": "nix-darwin", 63 - "rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d", 64 "type": "github" 65 }, 66 "original": { 67 "owner": "lnl7", 68 "ref": "master", 69 "repo": "nix-darwin", 70 "type": "github" ··· 72 }, 73 "deploy-rs": { 74 "inputs": { 75 - "flake-compat": "flake-compat", 76 "nixpkgs": [ 77 "nixpkgs" 78 ], 79 "utils": "utils" 80 }, 81 "locked": { 82 - "lastModified": 1718194053, 83 - "narHash": "sha256-FaGrf7qwZ99ehPJCAwgvNY5sLCqQ3GDiE/6uLhxxwSY=", 84 "owner": "serokell", 85 "repo": "deploy-rs", 86 - "rev": "3867348fa92bc892eba5d9ddb2d7a97b9e127a8a", 87 "type": "github" 88 }, 89 "original": { ··· 130 ] 131 }, 132 "locked": { 133 - "lastModified": 1724031427, 134 - "narHash": "sha256-o1HdAf+7IGv9M13R3c+zc/sJ0QgeEnhsvHBcodI4UpM=", 135 "owner": "nix-community", 136 "repo": "disko", 137 - "rev": "4e719b38fa7c85f4f65d0308ca7084c91e7bdd6d", 138 "type": "github" 139 }, 140 "original": { ··· 143 "type": "github" 144 } 145 }, 146 "flake-compat": { 147 "flake": false, 148 "locked": { ··· 162 "flake-compat_2": { 163 "flake": false, 164 "locked": { 165 "lastModified": 1641205782, 166 "narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=", 167 "owner": "edolstra", ··· 175 "type": "github" 176 } 177 }, 178 "flake-utils": { 179 "locked": { 180 "lastModified": 1638122382, ··· 191 } 192 }, 193 "flake-utils_2": { 194 "locked": { 195 "lastModified": 1667395993, 196 "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", ··· 205 "type": "github" 206 } 207 }, 208 "grasp": { 209 "inputs": { 210 - "flake-utils": "flake-utils_2", 211 "nixpkgs": [ 212 "nixpkgs" 213 ] ··· 229 }, 230 "hardware": { 231 "locked": { 232 - "lastModified": 1723310128, 233 - "narHash": "sha256-IiH8jG6PpR4h9TxSGMYh+2/gQiJW9MwehFvheSb5rPc=", 234 "owner": "nixos", 235 "repo": "nixos-hardware", 236 - "rev": "c54cf53e022b0b3c1d3b8207aa0f9b194c24f0cf", 237 "type": "github" 238 }, 239 "original": { ··· 250 ] 251 }, 252 "locked": { 253 - "lastModified": 1703113217, 254 - "narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=", 255 "owner": "nix-community", 256 "repo": "home-manager", 257 - "rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1", 258 "type": "github" 259 }, 260 "original": { ··· 270 ] 271 }, 272 "locked": { 273 - "lastModified": 1720042825, 274 - "narHash": "sha256-A0vrUB6x82/jvf17qPCpxaM+ulJnD8YZwH9Ci0BsAzE=", 275 "owner": "nix-community", 276 "repo": "home-manager", 277 - "rev": "e1391fb22e18a36f57e6999c7a9f966dc80ac073", 278 "type": "github" 279 }, 280 "original": { 281 "owner": "nix-community", 282 - "ref": "release-24.05", 283 "repo": "home-manager", 284 "type": "github" 285 } 286 }, 287 "nix-matrix-appservices": { 288 "inputs": { 289 "devshell": "devshell", 290 - "flake-compat": "flake-compat_2", 291 "nixlib": "nixlib", 292 - "nixpkgs": "nixpkgs" 293 }, 294 "locked": { 295 "lastModified": 1683490239, ··· 322 }, 323 "nixos-hardware": { 324 "locked": { 325 - "lastModified": 1723310128, 326 - "narHash": "sha256-IiH8jG6PpR4h9TxSGMYh+2/gQiJW9MwehFvheSb5rPc=", 327 "owner": "NixOS", 328 "repo": "nixos-hardware", 329 - "rev": "c54cf53e022b0b3c1d3b8207aa0f9b194c24f0cf", 330 "type": "github" 331 }, 332 "original": { ··· 338 }, 339 "nixpkgs": { 340 "locked": { 341 "lastModified": 1662099760, 342 "narHash": "sha256-MdZLCTJPeHi/9fg6R9fiunyDwP3XHJqDd51zWWz9px0=", 343 "owner": "NixOS", ··· 352 "type": "github" 353 } 354 }, 355 - "nixpkgs_2": { 356 "locked": { 357 - "lastModified": 1723938990, 358 - "narHash": "sha256-9tUadhnZQbWIiYVXH8ncfGXGvkNq3Hag4RCBEMUk7MI=", 359 "owner": "nixos", 360 "repo": "nixpkgs", 361 - "rev": "c42fcfbdfeae23e68fc520f9182dde9f38ad1890", 362 "type": "github" 363 }, 364 "original": { 365 "owner": "nixos", 366 - "ref": "nixos-24.05", 367 "repo": "nixpkgs", 368 "type": "github" 369 } 370 }, 371 "nur": { 372 "locked": { 373 - "lastModified": 1724040334, 374 - "narHash": "sha256-Ia4gRRmhFn4oJ4SJKJPDNPomsRRFWU+bqCK7yuiLW4E=", 375 "owner": "nix-community", 376 "repo": "NUR", 377 - "rev": "24471a48600e18669d13d24c9640b9859357d2cf", 378 "type": "github" 379 }, 380 "original": { 381 "owner": "nix-community", 382 "repo": "NUR", 383 "type": "github" 384 } 385 }, ··· 390 ] 391 }, 392 "locked": { 393 - "lastModified": 1724050814, 394 - "narHash": "sha256-THf50ZcBPY6r7/cyvE8bxYDvrctHrWbYaMx4udr4OUM=", 395 "ref": "main", 396 - "rev": "7628c26fd92f684ab5c7572c63de4af8b4b3a7b4", 397 - "revCount": 1464, 398 "type": "git", 399 "url": "ssh://gitea@git.sealight.xyz/aynish/kitaab" 400 }, ··· 404 "url": "ssh://gitea@git.sealight.xyz/aynish/kitaab" 405 } 406 }, 407 "root": { 408 "inputs": { 409 "agenix": "agenix", 410 "basant": "basant", 411 "deploy-rs": "deploy-rs", 412 "disko": "disko", 413 "grasp": "grasp", 414 "hardware": "hardware", 415 "home-manager": "home-manager_2", 416 "nix-matrix-appservices": "nix-matrix-appservices", 417 "nixos-hardware": "nixos-hardware", 418 - "nixpkgs": "nixpkgs_2", 419 "nur": "nur", 420 "poonam": "poonam", 421 "rust-overlay": "rust-overlay", 422 "tidalcycles": "tidalcycles", 423 "unstable": "unstable", 424 - "vimwikicli": "vimwikicli" 425 } 426 }, 427 "rust-overlay": { ··· 431 ] 432 }, 433 "locked": { 434 - "lastModified": 1724034091, 435 - "narHash": "sha256-b1g7w0sw+MDAhUAeCoX1vlTghsqcDZkxr+k9OZmxPa8=", 436 "owner": "oxalica", 437 "repo": "rust-overlay", 438 - "rev": "c7d36e0947826e0751a5214ffe82533fbc909bc0", 439 "type": "github" 440 }, 441 "original": { ··· 444 "type": "github" 445 } 446 }, 447 "superdirt-src": { 448 "flake": false, 449 "locked": { ··· 490 "type": "github" 491 } 492 }, 493 "tidal-src": { 494 "flake": false, 495 "locked": { ··· 519 "vowel-src": "vowel-src" 520 }, 521 "locked": { 522 - "lastModified": 1723223284, 523 - "narHash": "sha256-NAT+g5nsaJZkpR0sCZjerd1xx233ZUdRH3ZWwZhzq/c=", 524 "owner": "mitchmindtree", 525 "repo": "tidalcycles.nix", 526 - "rev": "82f3e8e8d02eb9f0c9dfe9ab3773b825c6bc1982", 527 "type": "github" 528 }, 529 "original": { ··· 532 "type": "github" 533 } 534 }, 535 "unstable": { 536 "locked": { 537 - "lastModified": 1723637854, 538 - "narHash": "sha256-med8+5DSWa2UnOqtdICndjDAEjxr5D7zaIiK4pn0Q7c=", 539 "owner": "nixos", 540 "repo": "nixpkgs", 541 - "rev": "c3aa7b8938b17aebd2deecf7be0636000d62a2b9", 542 "type": "github" 543 }, 544 "original": { ··· 550 }, 551 "utils": { 552 "inputs": { 553 - "systems": "systems_2" 554 }, 555 "locked": { 556 "lastModified": 1701680307, ··· 616 "original": { 617 "owner": "supercollider-quarks", 618 "repo": "vowel", 619 "type": "github" 620 } 621 }
··· 10 "systems": "systems" 11 }, 12 "locked": { 13 + "lastModified": 1747575206, 14 + "narHash": "sha256-NwmAFuDUO/PFcgaGGr4j3ozG9Pe5hZ/ogitWhY+D81k=", 15 "owner": "ryantm", 16 "repo": "agenix", 17 + "rev": "4835b1dc898959d8547a871ef484930675cb47f1", 18 "type": "github" 19 }, 20 "original": { ··· 48 "url": "ssh://gitea@git.sealight.xyz/aynish/basant" 49 } 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 + }, 108 "darwin": { 109 "inputs": { 110 "nixpkgs": [ ··· 113 ] 114 }, 115 "locked": { 116 + "lastModified": 1744478979, 117 + "narHash": "sha256-dyN+teG9G82G+m+PX/aSAagkC+vUv0SgUw3XkPhQodQ=", 118 "owner": "lnl7", 119 "repo": "nix-darwin", 120 + "rev": "43975d782b418ebf4969e9ccba82466728c2851b", 121 "type": "github" 122 }, 123 "original": { 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", 146 "ref": "master", 147 "repo": "nix-darwin", 148 "type": "github" ··· 150 }, 151 "deploy-rs": { 152 "inputs": { 153 + "flake-compat": "flake-compat_2", 154 "nixpkgs": [ 155 "nixpkgs" 156 ], 157 "utils": "utils" 158 }, 159 "locked": { 160 + "lastModified": 1727447169, 161 + "narHash": "sha256-3KyjMPUKHkiWhwR91J1YchF6zb6gvckCAY1jOE+ne0U=", 162 "owner": "serokell", 163 "repo": "deploy-rs", 164 + "rev": "aa07eb05537d4cd025e2310397a6adcedfe72c76", 165 "type": "github" 166 }, 167 "original": { ··· 208 ] 209 }, 210 "locked": { 211 + "lastModified": 1747742835, 212 + "narHash": "sha256-kYL4GCwwznsypvsnA20oyvW8zB/Dvn6K5G/tgMjVMT4=", 213 "owner": "nix-community", 214 "repo": "disko", 215 + "rev": "df522e787fdffc4f32ed3e1fca9ed0968a384d62", 216 "type": "github" 217 }, 218 "original": { ··· 221 "type": "github" 222 } 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 + }, 248 "flake-compat": { 249 "flake": false, 250 "locked": { ··· 264 "flake-compat_2": { 265 "flake": false, 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": { 283 "lastModified": 1641205782, 284 "narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=", 285 "owner": "edolstra", ··· 293 "type": "github" 294 } 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 + }, 367 "flake-utils": { 368 "locked": { 369 "lastModified": 1638122382, ··· 380 } 381 }, 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": { 401 "locked": { 402 "lastModified": 1667395993, 403 "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", ··· 412 "type": "github" 413 } 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 + }, 455 "grasp": { 456 "inputs": { 457 + "flake-utils": "flake-utils_3", 458 "nixpkgs": [ 459 "nixpkgs" 460 ] ··· 476 }, 477 "hardware": { 478 "locked": { 479 + "lastModified": 1747900541, 480 + "narHash": "sha256-dn64Pg9xLETjblwZs9Euu/SsjW80pd6lr5qSiyLY1pg=", 481 "owner": "nixos", 482 "repo": "nixos-hardware", 483 + "rev": "11f2d9ea49c3e964315215d6baa73a8d42672f06", 484 "type": "github" 485 }, 486 "original": { ··· 497 ] 498 }, 499 "locked": { 500 + "lastModified": 1745494811, 501 + "narHash": "sha256-YZCh2o9Ua1n9uCvrvi5pRxtuVNml8X2a03qIFfRKpFs=", 502 "owner": "nix-community", 503 "repo": "home-manager", 504 + "rev": "abfad3d2958c9e6300a883bd443512c55dfeb1be", 505 "type": "github" 506 }, 507 "original": { ··· 517 ] 518 }, 519 "locked": { 520 + "lastModified": 1747556831, 521 + "narHash": "sha256-Qb84nbYFFk0DzFeqVoHltS2RodAYY5/HZQKE8WnBDsc=", 522 "owner": "nix-community", 523 "repo": "home-manager", 524 + "rev": "d0bbd221482c2713cccb80220f3c9d16a6e20a33", 525 "type": "github" 526 }, 527 "original": { 528 "owner": "nix-community", 529 + "ref": "release-25.05", 530 "repo": "home-manager", 531 "type": "github" 532 } 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 + }, 703 "nix-matrix-appservices": { 704 "inputs": { 705 "devshell": "devshell", 706 + "flake-compat": "flake-compat_3", 707 "nixlib": "nixlib", 708 + "nixpkgs": "nixpkgs_3" 709 }, 710 "locked": { 711 "lastModified": 1683490239, ··· 738 }, 739 "nixos-hardware": { 740 "locked": { 741 + "lastModified": 1747900541, 742 + "narHash": "sha256-dn64Pg9xLETjblwZs9Euu/SsjW80pd6lr5qSiyLY1pg=", 743 "owner": "NixOS", 744 "repo": "nixos-hardware", 745 + "rev": "11f2d9ea49c3e964315215d6baa73a8d42672f06", 746 "type": "github" 747 }, 748 "original": { ··· 754 }, 755 "nixpkgs": { 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": { 814 "lastModified": 1662099760, 815 "narHash": "sha256-MdZLCTJPeHi/9fg6R9fiunyDwP3XHJqDd51zWWz9px0=", 816 "owner": "NixOS", ··· 825 "type": "github" 826 } 827 }, 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": { 877 "locked": { 878 + "lastModified": 1725816686, 879 + "narHash": "sha256-0Kq2MkQ/sQX1rhWJ/ySBBQlBJBUK8mPMDcuDhhdBkSU=", 880 "owner": "nixos", 881 "repo": "nixpkgs", 882 + "rev": "add0443ee587a0c44f22793b8c8649a0dbc3bb00", 883 "type": "github" 884 }, 885 "original": { 886 "owner": "nixos", 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", 920 "repo": "nixpkgs", 921 "type": "github" 922 } 923 }, 924 "nur": { 925 + "inputs": { 926 + "flake-parts": "flake-parts", 927 + "nixpkgs": "nixpkgs_5", 928 + "treefmt-nix": "treefmt-nix" 929 + }, 930 "locked": { 931 + "lastModified": 1748119613, 932 + "narHash": "sha256-BvOMqlTgRbz8ldRcaf7OTKIRsGlOw4AssphiZGLd0fo=", 933 "owner": "nix-community", 934 "repo": "NUR", 935 + "rev": "48380b491e6415284292516fe919d78207969e30", 936 "type": "github" 937 }, 938 "original": { 939 "owner": "nix-community", 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", 963 "type": "github" 964 } 965 }, ··· 970 ] 971 }, 972 "locked": { 973 + "lastModified": 1738465265, 974 + "narHash": "sha256-v8nD/2gq8/mILEJqvWgx1q7Fc1purQvV3/WZLQ/t/wc=", 975 "ref": "main", 976 + "rev": "115f8af750c0d4b6a8c6f97119b12d7e3eb20c6a", 977 + "revCount": 1552, 978 "type": "git", 979 "url": "ssh://gitea@git.sealight.xyz/aynish/kitaab" 980 }, ··· 984 "url": "ssh://gitea@git.sealight.xyz/aynish/kitaab" 985 } 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 + }, 1049 "root": { 1050 "inputs": { 1051 "agenix": "agenix", 1052 "basant": "basant", 1053 + "breezy": "breezy", 1054 + "darwin": "darwin_2", 1055 "deploy-rs": "deploy-rs", 1056 "disko": "disko", 1057 "grasp": "grasp", 1058 "hardware": "hardware", 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", 1065 "nix-matrix-appservices": "nix-matrix-appservices", 1066 "nixos-hardware": "nixos-hardware", 1067 + "nixpkgs": "nixpkgs_4", 1068 "nur": "nur", 1069 "poonam": "poonam", 1070 "rust-overlay": "rust-overlay", 1071 + "sg-nvim": "sg-nvim", 1072 + "sourcegraph-src-cli-cask": "sourcegraph-src-cli-cask", 1073 "tidalcycles": "tidalcycles", 1074 "unstable": "unstable", 1075 + "vimwikicli": "vimwikicli", 1076 + "xr-linux": "xr-linux" 1077 } 1078 }, 1079 "rust-overlay": { ··· 1083 ] 1084 }, 1085 "locked": { 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=", 1122 "owner": "oxalica", 1123 "repo": "rust-overlay", 1124 + "rev": "2ef910a6276a2f34513d18f2f826a8dea72c3b3f", 1125 "type": "github" 1126 }, 1127 "original": { ··· 1130 "type": "github" 1131 } 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 + }, 1195 "superdirt-src": { 1196 "flake": false, 1197 "locked": { ··· 1238 "type": "github" 1239 } 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 + }, 1271 "tidal-src": { 1272 "flake": false, 1273 "locked": { ··· 1297 "vowel-src": "vowel-src" 1298 }, 1299 "locked": { 1300 + "lastModified": 1730626669, 1301 + "narHash": "sha256-nFyZrvTPn9OM9UZmuAwy3e1Ba0ZuYc2FaDCOOhGtqg4=", 1302 "owner": "mitchmindtree", 1303 "repo": "tidalcycles.nix", 1304 + "rev": "0db0918e7a3d3c30ed7a6e81dc9d4e3832870ac4", 1305 "type": "github" 1306 }, 1307 "original": { ··· 1310 "type": "github" 1311 } 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 + }, 1356 "unstable": { 1357 "locked": { 1358 + "lastModified": 1748026106, 1359 + "narHash": "sha256-6m1Y3/4pVw1RWTsrkAK2VMYSzG4MMIj7sqUy7o8th1o=", 1360 "owner": "nixos", 1361 "repo": "nixpkgs", 1362 + "rev": "063f43f2dbdef86376cc29ad646c45c46e93234c", 1363 "type": "github" 1364 }, 1365 "original": { ··· 1371 }, 1372 "utils": { 1373 "inputs": { 1374 + "systems": "systems_3" 1375 }, 1376 "locked": { 1377 "lastModified": 1701680307, ··· 1437 "original": { 1438 "owner": "supercollider-quarks", 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", 1463 "type": "github" 1464 } 1465 }
+143 -11
flake.nix
··· 3 4 inputs = { 5 # Nixpkgs 6 - nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05"; 7 unstable.url = "github:nixos/nixpkgs/nixos-unstable"; 8 nixos-hardware.url = "github:NixOS/nixos-hardware/master"; 9 ··· 11 # ngipkgs-local.url = "path:/home/anish/usr/ngipkgs"; 12 13 # Home manager 14 - home-manager.url = "github:nix-community/home-manager/release-24.05"; 15 home-manager.inputs.nixpkgs.follows = "nixpkgs"; 16 hardware.url = "github:nixos/nixos-hardware"; 17 ··· 37 # Matrix 38 nix-matrix-appservices.url = "gitlab:coffeetables/nix-matrix-appservices"; 39 40 # Others 41 nur.url = "github:nix-community/NUR"; 42 rust-overlay = { ··· 70 , tidalcycles 71 , rust-overlay 72 , vimwikicli 73 , ... 74 }@inputs: 75 let ··· 84 # We already have these in scope 85 unstable = unstable.legacyPackages.${prev.system}; 86 deploy = deploy-rs.packages.${prev.system}.deploy-rs; 87 }; 88 vimwikiOverlay = final: prev: { 89 vimwiki-cli = vimwikicli.packages.${prev.system}.vimwiki-cli; ··· 91 92 nixpkgsFor = forAllSystems (system: import nixpkgs { 93 inherit system; 94 - config.allowUnfreePredicate = pkg: builtins.elem (nixpkgs.lib.getName pkg) [ 95 - "ripcord" 96 - "vcv-rack" 97 - "SunVox" 98 - "renoise" 99 - ]; 100 # config.permittedInsecurePackages = [ 101 # "python3.10-django-3.1.14" # Needed for archivebox deployments on curve 102 # # Check when archive box updates it's dependeny ··· 108 nur.overlay 109 nix-matrix-appservices.overlay 110 unstableOverlay 111 - vimwikiOverlay 112 self.overlays.additions 113 self.overlays.modifications 114 ]; ··· 128 tidalcycles.overlays.default # needed for nvim which comes pre-installed lol 129 ]; 130 }); 131 in 132 { 133 - # Your custom packages 134 - # Acessible through 'nix build', 'nix shell', etc 135 packages = forAllSystems (system: 136 let pkgs = nixpkgsFor.${system}; 137 in import ./pkgs { pkgs = pkgs; } 138 ); 139 # Devshell for bootstrapping 140 # Acessible through 'nix develop' or 'nix-shell' (legacy) 141 devShells = forAllSystems (system: ··· 152 # These are usually stuff you would upstream into home-manager 153 homeManagerModules = import ./modules/home-manager; 154 155 # NixOS configuration entrypoint 156 nixosConfigurations = { 157 curve = nixpkgs.lib.nixosSystem rec { ··· 234 home-manager.useGlobalPkgs = true; 235 home-manager.useUserPackages = true; 236 home-manager.users.anish = import ./home/core; 237 } 238 ]; 239 };
··· 3 4 inputs = { 5 # Nixpkgs 6 + nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11"; 7 unstable.url = "github:nixos/nixpkgs/nixos-unstable"; 8 nixos-hardware.url = "github:NixOS/nixos-hardware/master"; 9 ··· 11 # ngipkgs-local.url = "path:/home/anish/usr/ngipkgs"; 12 13 # Home manager 14 + home-manager.url = "github:nix-community/home-manager/release-25.05"; 15 home-manager.inputs.nixpkgs.follows = "nixpkgs"; 16 hardware.url = "github:nixos/nixos-hardware"; 17 ··· 37 # Matrix 38 nix-matrix-appservices.url = "gitlab:coffeetables/nix-matrix-appservices"; 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 + 82 # Others 83 nur.url = "github:nix-community/NUR"; 84 rust-overlay = { ··· 112 , tidalcycles 113 , rust-overlay 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 125 , ... 126 }@inputs: 127 let ··· 136 # We already have these in scope 137 unstable = unstable.legacyPackages.${prev.system}; 138 deploy = deploy-rs.packages.${prev.system}.deploy-rs; 139 + sg-nvim = sg-nvim.packages.${prev.system}.default; 140 }; 141 vimwikiOverlay = final: prev: { 142 vimwiki-cli = vimwikicli.packages.${prev.system}.vimwiki-cli; ··· 144 145 nixpkgsFor = forAllSystems (system: import nixpkgs { 146 inherit system; 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 + #]; 163 # config.permittedInsecurePackages = [ 164 # "python3.10-django-3.1.14" # Needed for archivebox deployments on curve 165 # # Check when archive box updates it's dependeny ··· 171 nur.overlay 172 nix-matrix-appservices.overlay 173 unstableOverlay 174 + # TODO Not available publically 175 + # vimwikiOverlay 176 self.overlays.additions 177 self.overlays.modifications 178 ]; ··· 192 tidalcycles.overlays.default # needed for nvim which comes pre-installed lol 193 ]; 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" ]; 210 in 211 { 212 packages = forAllSystems (system: 213 let pkgs = nixpkgsFor.${system}; 214 in import ./pkgs { pkgs = pkgs; } 215 ); 216 + 217 # Devshell for bootstrapping 218 # Acessible through 'nix develop' or 'nix-shell' (legacy) 219 devShells = forAllSystems (system: ··· 230 # These are usually stuff you would upstream into home-manager 231 homeManagerModules = import ./modules/home-manager; 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 + 267 # NixOS configuration entrypoint 268 nixosConfigurations = { 269 curve = nixpkgs.lib.nixosSystem rec { ··· 346 home-manager.useGlobalPkgs = true; 347 home-manager.useUserPackages = true; 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; 369 } 370 ]; 371 };
+1
home/core/default.nix
··· 1 { self, pkgs, ... }: 2 { 3 imports = [ 4 ../profiles/cli 5 ../profiles/direnv 6 ../profiles/git
··· 1 { self, pkgs, ... }: 2 { 3 imports = [ 4 + ../profiles/nvim 5 ../profiles/cli 6 ../profiles/direnv 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 ../profiles/cal 10 ../profiles/sync/kitaab 11 ../profiles/ssh 12 - ../profiles/task 13 ]; 14 }
··· 9 ../profiles/cal 10 ../profiles/sync/kitaab 11 ../profiles/ssh 12 + ../profiles/kitty 13 ]; 14 }
+28 -16
home/profiles/cli/default.nix
··· 1 { lib, pkgs, config, ... }: 2 { 3 home.packages = with pkgs; [ 4 binutils 5 - coreutils 6 dnsutils 7 dasht 8 dosfstools 9 - #git 10 git-machete 11 bottom 12 gptfdisk 13 starship 14 - iputils 15 - jq 16 manix 17 moreutils 18 nix-index 19 - cached-nix-shell 20 nmap 21 ripgrep 22 skim 23 tealdeer 24 - usbutils 25 - utillinux 26 - whois 27 iftop 28 wget 29 curl ··· 38 nix-index 39 silver-searcher 40 tcpdump 41 - mtr 42 file 43 lsof 44 atool 45 - strace 46 zip 47 unzip 48 rsync ··· 51 glow 52 pass 53 less 54 - gdb 55 xxd 56 taskwarrior 57 gnupg 58 syncthing 59 dijo 60 - #ssb-patchwork 61 - fontconfig 62 pandoc 63 taskwarrior-tui 64 - python3Packages.howdoi 65 - vimwiki-cli 66 67 (pkgs.writeScriptBin "jq-repl" '' 68 #!/usr/bin/env bash ··· 204 enableZshIntegration = true; 205 }; 206 207 - services.kdeconnect.enable = true; 208 209 home.shellAliases = { 210 # quick cd ··· 257 258 # git 259 g = "git"; 260 261 # grep 262 grep = "rg"; ··· 277 srch = "ns nixpkgs"; 278 orch = "ns override"; 279 nrb = "cd /tmp; sudo nixos-rebuild switch --flake '/home/anish/usr/helm#curve'; cd $OLDPWD"; 280 nrt = "cd /tmp; sudo nixos-rebuild test --flake '/home/anish/usr/helm#curve'; cd $OLDPWD"; 281 ned = "cd /home/anish/usr/helm; vim; cd $OLDPWD"; 282 ncd = "cd /home/anish/usr/helm";
··· 1 { lib, pkgs, config, ... }: 2 { 3 home.packages = with pkgs; [ 4 + # unstable.claude-code 5 binutils 6 + # coreutils 7 dnsutils 8 dasht 9 dosfstools 10 + # git 11 git-machete 12 + git-spice 13 + # jujitsu 14 + asciinema 15 bottom 16 gptfdisk 17 starship 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 30 manix 31 moreutils 32 nix-index 33 nmap 34 ripgrep 35 skim 36 tealdeer 37 iftop 38 wget 39 curl ··· 48 nix-index 49 silver-searcher 50 tcpdump 51 file 52 lsof 53 atool 54 zip 55 unzip 56 rsync ··· 59 glow 60 pass 61 less 62 xxd 63 taskwarrior 64 gnupg 65 syncthing 66 dijo 67 + # ssb-patchwork 68 pandoc 69 taskwarrior-tui 70 + zk 71 + diffnav 72 + 73 + # llms (needs 24.11) 74 + aider-chat 75 76 (pkgs.writeScriptBin "jq-repl" '' 77 #!/usr/bin/env bash ··· 213 enableZshIntegration = true; 214 }; 215 216 + # Only available on Linux 217 + # services.kdeconnect.enable = true; 218 219 home.shellAliases = { 220 # quick cd ··· 267 268 # git 269 g = "git"; 270 + gl = "git log --pretty=oneline --abbrev-commit"; 271 272 # grep 273 grep = "rg"; ··· 288 srch = "ns nixpkgs"; 289 orch = "ns override"; 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"; 292 nrt = "cd /tmp; sudo nixos-rebuild test --flake '/home/anish/usr/helm#curve'; cd $OLDPWD"; 293 ned = "cd /home/anish/usr/helm; vim; cd $OLDPWD"; 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 # esac 7 8 export MONITOR=$(xrandr -q | grep primary | cut -d' ' -f1) 9 - export MONITORS=( $(xrandr -q | grep ' connected' | cut -d' ' -f1) ) 10 MONITOR=${MONITOR:-${MONITORS[0]}} 11 12 # Only have workspaces for primary monitor ··· 26 bspc config focused_border_color "#bd93f9" 27 bspc config presel_feedback_color "#bd93f9" 28 29 - bspc config split_ratio 0.71 30 31 # Extra padding for polybar 32 bspc config -m primary top_padding 34
··· 6 # esac 7 8 export MONITOR=$(xrandr -q | grep primary | cut -d' ' -f1) 9 + export MONITORS=($(xrandr -q | grep ' connected' | cut -d' ' -f1)) 10 MONITOR=${MONITOR:-${MONITORS[0]}} 11 12 # Only have workspaces for primary monitor ··· 26 bspc config focused_border_color "#bd93f9" 27 bspc config presel_feedback_color "#bd93f9" 28 29 + bspc config split_ratio 0.71 30 31 # Extra padding for polybar 32 bspc config -m primary top_padding 34
+3 -6
home/profiles/desktop/default.nix
··· 22 paper-icon-theme 23 papirus-icon-theme 24 libsForQt5.qtstyleplugin-kvantum 25 - qt5ct 26 gtk-engine-murrine 27 gtk_engines 28 maim 29 - kitty 30 libreoffice 31 inotify-tools 32 offpunk 33 termpdfpy 34 - libsForQt5.kontact 35 - thunderbird 36 ]; 37 38 # GTK4 color scheme? ··· 66 recursive = true; 67 }; 68 ".config/dunst/dunstrc".source = ./dunstrc; 69 - ".config/kitty/kitty.conf".source = ./kitty.conf; 70 - ".config/kitty/ayu.conf".source = ./ayu-kitty.conf; 71 ".config/zathura/zathurarc".source = ./zathurarc; 72 ".background-image".source = ./background.jpg; 73 #gtk4 theme
··· 22 paper-icon-theme 23 papirus-icon-theme 24 libsForQt5.qtstyleplugin-kvantum 25 + # qt5ct 26 gtk-engine-murrine 27 gtk_engines 28 maim 29 libreoffice 30 inotify-tools 31 offpunk 32 termpdfpy 33 + # libsForQt5.kontact 34 + # thunderbird 35 ]; 36 37 # GTK4 color scheme? ··· 65 recursive = true; 66 }; 67 ".config/dunst/dunstrc".source = ./dunstrc; 68 ".config/zathura/zathurarc".source = ./zathurarc; 69 ".background-image".source = ./background.jpg; 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 default = current 16 [pull] 17 rebase = true 18 [alias] 19 unadd = reset HEAD 20 # data analysis ··· 23 email-domains = !git log --format="%aE" | awk -F'@' '{print $2}' | sort -u 24 # pretty log 25 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 26 [filter "lfs"] 27 required = true 28 smudge = git-lfs smudge -- %f 29 process = git-lfs filter-process 30 clean = git-lfs clean -- %f 31 [url "https://github.com/"] 32 insteadOf = gh: 33 [url "git@github.com:"]
··· 15 default = current 16 [pull] 17 rebase = true 18 + [merge] 19 + mergetool = nvim -d 20 + conflictstyle = diff3 21 [alias] 22 unadd = reset HEAD 23 # data analysis ··· 26 email-domains = !git log --format="%aE" | awk -F'@' '{print $2}' | sort -u 27 # pretty log 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 31 [filter "lfs"] 32 required = true 33 smudge = git-lfs smudge -- %f 34 process = git-lfs filter-process 35 clean = git-lfs clean -- %f 36 + [url "git@github.com:"] 37 + insteadOf = https://github.com/ 38 [url "https://github.com/"] 39 insteadOf = gh: 40 [url "git@github.com:"]
+3
home/profiles/git/default.nix
··· 56 pull.rebase = false; 57 push.autoSetupRemote = true; 58 init.defaultBranch = "main"; 59 }; 60 61 aliases = { ··· 94 95 # delete merged branches 96 bdm = "!git branch --merged | grep -v '*' | xargs -n 1 git branch -d"; 97 }; 98 }; 99 }
··· 56 pull.rebase = false; 57 push.autoSetupRemote = true; 58 init.defaultBranch = "main"; 59 + "url \"git@github.com:\"" = { insteadOf = "https://github.com/"; }; 60 }; 61 62 aliases = { ··· 95 96 # delete merged branches 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"; 100 }; 101 }; 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 (vim.api.nvim_create_autocmd ["FileType"] 46 {:pattern ["mail"] 47 :command "setlocal spell"})
··· 45 (vim.api.nvim_create_autocmd ["FileType"] 46 {:pattern ["mail"] 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 (nvim.keymap [:n] "Y" "y$") 19 ; Unmap Q 20 (nvim.keymap [] "Q" "<Nop>") 21 22 ; FTerm 23 (vim.api.nvim_create_user_command "FTermToggle" (fn [_] ··· 105 :t ["<cmd>TodoTelescope<CR>" 106 "Search TODOs in project"] 107 :c ["<cmd>let @/ = \"\"<CR>:echo 'Search highlight cleared'<CR>" 108 - "Clear search"]} 109 ; Code 110 "c" {:name "Code" 111 :d [":lua vim.lsp.buf.definition()<CR>"
··· 18 (nvim.keymap [:n] "Y" "y$") 19 ; Unmap Q 20 (nvim.keymap [] "Q" "<Nop>") 21 + ; TODO 22 + ; ESC clears search 23 + ; (nvim.keymap [:n] "<ESC>" "") 24 25 ; FTerm 26 (vim.api.nvim_create_user_command "FTermToggle" (fn [_] ··· 108 :t ["<cmd>TodoTelescope<CR>" 109 "Search TODOs in project"] 110 :c ["<cmd>let @/ = \"\"<CR>:echo 'Search highlight cleared'<CR>" 111 + "Clear search"] 112 + :g ["<cmd>Telescope live_grep<cr>" 113 + "Find Grep (in Telescope)"]} 114 ; Code 115 "c" {:name "Code" 116 :d [":lua vim.lsp.buf.definition()<CR>"
+3
home/profiles/nvim/config/fnl/conf/plugins/kitaab.fnl
··· 29 (if (and (= index 4) (not written)) 30 (vim.api.nvim_buf_set_lines 0 3 index false [message]))))) 31 32 (vim.api.nvim_create_autocmd "BufWritePre" {:pattern ["*.wiki"] 33 :callback update_date}) 34
··· 29 (if (and (= index 4) (not written)) 30 (vim.api.nvim_buf_set_lines 0 3 index false [message]))))) 31 32 + ; Custom function for inserting links through telescope grep_search 33 + ; Visual mode too! 34 + 35 (vim.api.nvim_create_autocmd "BufWritePre" {:pattern ["*.wiki"] 36 :callback update_date}) 37
+3 -1
home/profiles/nvim/config/fnl/conf/plugins.fnl
··· 37 38 (do-req :auto-session :setup {:log_level "info" 39 :auto_session_suppress_dirs ["~/"]}) 40 - (nvim.opt :sessionoptions "blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal") 41 42 (do-req :aerial :setup {}) ;{:on_attach (fn [bufnr] 43 ; (do 44 ; (vim.keymap.set "n" "{" "<cmd>AerialPrev<CR>" { :buffer bufnr}) 45 ; (vim.keymap.set "n" "}" "<cmd>AerialNext<CR>" { :buffer bufnr}))
··· 37 38 (do-req :auto-session :setup {:log_level "info" 39 :auto_session_suppress_dirs ["~/"]}) 40 + (nvim.opt :sessionoptions "blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions") 41 42 (do-req :aerial :setup {}) ;{:on_attach (fn [bufnr] 43 ; (do 44 ; (vim.keymap.set "n" "{" "<cmd>AerialPrev<CR>" { :buffer bufnr}) 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 (fn do-req [mod key ...] 2 `(let [name# (require ,mod) 3 fun# (. name# ,key)]
··· 1 + ;; fennel-ls: macro-file 2 + 3 (fn do-req [mod key ...] 4 `(let [name# (require ,mod) 5 fun# (. name# ,key)]
+8 -6
home/profiles/nvim/default.nix
··· 15 16 home.file.".config/nvim".source = ./config; 17 18 - #environment.systemPackages = with customPlugins; [ tidal ]; 19 programs.neovim = { 20 enable = true; 21 - 22 extraPackages = with pkgs; [ 23 # used to compile tree-sitter grammar 24 # python-with-my-packages ··· 39 # nodePackages.typescript-language-server 40 # luajitPackages.lua-lsp 41 fennel-ls 42 - unstable.starpls-bin 43 ]; 44 45 - plugins = with pkgs.unstable.vimPlugins; 46 [ 47 #hotpot 48 hotpot-nvim ··· 85 p.dockerfile 86 p.json 87 p.go 88 p.starlark 89 ])) 90 nvim-treesitter-context ··· 99 emmet-vim 100 csv-vim 101 direnv-vim 102 # conjure 103 104 # kitaab stuff 105 vimwiki 106 vim-zettel 107 hologram-nvim 108 109 # lsp stuff 110 nvim-lspconfig ··· 133 fennel-vim 134 135 # nvim-luapad 136 - scnvim 137 flash-nvim 138 vim-beancount 139 - ] ++ [ pkgs.vimPlugins.vim-tidal ]; 140 # withPython3 = true; 141 # extraPython3Packages = pkgs: with pkgs; [ tasklib six ]; 142 # vimAlias = true;
··· 15 16 home.file.".config/nvim".source = ./config; 17 18 programs.neovim = { 19 enable = true; 20 extraPackages = with pkgs; [ 21 # used to compile tree-sitter grammar 22 # python-with-my-packages ··· 37 # nodePackages.typescript-language-server 38 # luajitPackages.lua-lsp 39 fennel-ls 40 ]; 41 42 + plugins = with pkgs.vimPlugins; 43 [ 44 #hotpot 45 hotpot-nvim ··· 82 p.dockerfile 83 p.json 84 p.go 85 + p.svelte 86 + p.javascript 87 + p.janet-simple 88 p.starlark 89 ])) 90 nvim-treesitter-context ··· 99 emmet-vim 100 csv-vim 101 direnv-vim 102 + vim-svelte 103 # conjure 104 105 # kitaab stuff 106 vimwiki 107 vim-zettel 108 hologram-nvim 109 + zk-nvim 110 111 # lsp stuff 112 nvim-lspconfig ··· 135 fennel-vim 136 137 # nvim-luapad 138 + # scnvim 139 flash-nvim 140 vim-beancount 141 + ]; # ++ [ pkgs.vimPlugins.vim-tidal ]; 142 # withPython3 = true; 143 # extraPython3Packages = pkgs: with pkgs; [ tasklib six ]; 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 - { 3 imports = [ 4 ./configuration.nix 5 ../users/anish ··· 16 # ../profiles/kuberenetes 17 # ../profiles/mount-mossnet 18 ]; 19 20 # import profiling tools 21 programs.systemtap.enable = true; 22 23 virtualisation.docker.enable = true; 24 virtualisation.docker.storageDriver = "btrfs"; 25 - environment.systemPackages = with pkgs; [ 26 - docker-compose 27 - ]; 28 29 # Speed up boot by removing dependency on network 30 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"] 33 }; 34 35 programs.gnupg.agent.enable = true; ··· 64 65 # lazy enable of ports necessary for KDE connect which is installed via cli home profile (for some reason?) 66 networking.firewall = { 67 - allowedTCPPortRanges = [{ from = 1714; to = 1764; }]; 68 - allowedUDPPortRanges = [{ from = 1714; to = 1764; }]; 69 }; 70 71 age.secrets.curve-wg.file = "${self}/secrets/curve-wg.age"; ··· 81 mossnet.backup = { 82 enable = true; 83 name = "curve"; 84 - paths = [ 85 - "/home/anish/usr" 86 - "/home/anish/.ssh" 87 - ]; 88 }; 89 90 # enable adb ··· 93 #virtualisation.docker.enable = true; 94 boot.blacklistedKernelModules = [ "qcserial" ]; 95 # Used for packer Capsul 96 - users.users.anish.extraGroups = [ "adbusers" "wheel" "plugdev" "libvertd" "docker" ]; 97 virtualisation.libvirtd.enable = true; 98 hardware.keyboard.zsa.enable = true; 99 services.udev.extraRules = ''
··· 1 + { self, pkgs, ... }: { 2 imports = [ 3 ./configuration.nix 4 ../users/anish ··· 15 # ../profiles/kuberenetes 16 # ../profiles/mount-mossnet 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 + }; 25 26 # import profiling tools 27 programs.systemtap.enable = true; 28 29 virtualisation.docker.enable = true; 30 virtualisation.docker.storageDriver = "btrfs"; 31 + environment.systemPackages = with pkgs; [ docker-compose ]; 32 33 # Speed up boot by removing dependency on network 34 systemd = { 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"] 39 }; 40 41 programs.gnupg.agent.enable = true; ··· 70 71 # lazy enable of ports necessary for KDE connect which is installed via cli home profile (for some reason?) 72 networking.firewall = { 73 + allowedTCPPorts = [ 22 ]; # allow ssh 74 + allowedTCPPortRanges = [{ 75 + from = 1714; 76 + to = 1764; 77 + }]; 78 + allowedUDPPortRanges = [{ 79 + from = 1714; 80 + to = 1764; 81 + }]; 82 }; 83 84 age.secrets.curve-wg.file = "${self}/secrets/curve-wg.age"; ··· 94 mossnet.backup = { 95 enable = true; 96 name = "curve"; 97 + paths = [ "/home/anish/usr" "/home/anish/.ssh" ]; 98 }; 99 100 # enable adb ··· 103 #virtualisation.docker.enable = true; 104 boot.blacklistedKernelModules = [ "qcserial" ]; 105 # Used for packer Capsul 106 + users.users.anish.extraGroups = 107 + [ "adbusers" "wheel" "plugdev" "libvertd" "docker" ]; 108 virtualisation.libvirtd.enable = true; 109 hardware.keyboard.zsa.enable = true; 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 }; 63 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 73 74 kooha 75 light ··· 102 yt-dlp 103 ]; 104 105 - xdg.portal = { 106 # Breaks link clicking in nheko 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 - }; 112 113 location.provider = "geoclue2"; 114 services = { ··· 121 }; 122 displayManager.defaultSession = "none+bspwm"; 123 xserver = { 124 - enable = true; 125 - # TODO should be xkb.layout 126 - xkb.layout = "us"; 127 - # xkb.variant = "dvorak"; 128 desktopManager.wallpaper.mode = "fill"; 129 displayManager = { 130 - # startx.enable = true; 131 sessionCommands = '' 132 ${pkgs.xorg.xrdb}/bin/xrdb -merge <<EOF 133 #define blk #1F2430 ··· 194 EOF 195 ''; 196 lightdm = { 197 - enable = true; 198 background = "/etc/nixos/users/profiles/desktop/background.jpg"; 199 greeters.mini = { 200 enable = true; ··· 222 siji 223 font-awesome 224 proggyfonts 225 - (nerdfonts.override { fonts = [ "FiraCode" "DroidSansMono" "Iosevka" ]; }) 226 ]; 227 }
··· 62 }; 63 64 environment.systemPackages = with pkgs; [ 65 + sublime-music 66 + # nheko 67 + signal-desktop 68 + tuba 69 + newsflash 70 + liferea 71 + gh 72 + flyctl 73 74 kooha 75 light ··· 102 yt-dlp 103 ]; 104 105 + # xdg.portal = { 106 # Breaks link clicking in nheko 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 + # }; 112 113 location.provider = "geoclue2"; 114 services = { ··· 121 }; 122 displayManager.defaultSession = "none+bspwm"; 123 xserver = { 124 + enable = false; 125 + xkb.layout = "us,dvorak"; 126 desktopManager.wallpaper.mode = "fill"; 127 + desktopManager.gnome.enable = true; 128 displayManager = { 129 + # gdm.enable = true; 130 + # defaultSession = "none+bspwm"; 131 sessionCommands = '' 132 ${pkgs.xorg.xrdb}/bin/xrdb -merge <<EOF 133 #define blk #1F2430 ··· 194 EOF 195 ''; 196 lightdm = { 197 + enable = false; 198 background = "/etc/nixos/users/profiles/desktop/background.jpg"; 199 greeters.mini = { 200 enable = true; ··· 222 siji 223 font-awesome 224 proggyfonts 225 + # (nerdfonts.override { fonts = [ "FiraCode" "DroidSansMono" "Iosevka" ]; }) 226 ]; 227 }
+2 -2
hosts/users/anish/default.nix
··· 12 openssh.authorizedKeys.keys = [ 13 # Curve 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 # Box 18 "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKN8/SH55DBiwVoSnTU8k2Pen+wmovL9QaMyehxGEsJJv/8fzwsswGalD4C/4O51LOvdu4UKkZW5hG02uVSK+58p3UV3pOPyoqsu/aDeIsWsqmTeTzUrBIWOlNzcDKnohLz2oGC5YO+wyTJ9Iteq6aGJDjErsW7sG3h5lXCs551EmJNNGhtBQaaoytMNnWqSdlVjDNCijurH7WUpp40U/RjEp532l4rX6eIIj3jBKEFbhZkFSSjqbj4xM4SyFt+Jmigb1RMjsQjmpfY1vDtM84RcYfpTUte/T5w2dkD5H6kccmWnwKSJpm9wXfx4E7lR9APdUGnau2U1+XxiD3ytGl anish@box" 19 # Work 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 ];
··· 12 openssh.authorizedKeys.keys = [ 13 # Curve 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 # Box 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 # Work 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 ];
+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 lituus = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH2lAb33LH3JNuOfBXt971u0tHe+NURFecQdfjwEj+C+ root@lituus"; 7 helix = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAKrL6IDHNnHmxi0q9nzu87NOyidPm3HpE7klU368lEf root@helix"; 8 helix2 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK2G81z1E51ioJQGLHnTJEjgSdBqLM6mb72Z+0atE6Bf root@helix"; 9 curve = [ system user ]; 10 allUserKeys = [ system user mossnet ]; 11 systemOnly = [ system mossnet lituus helix ]; ··· 34 "box-wg.age".publicKeys = [ mossnet ]; 35 "wallabag-password.age".publicKeys = [ mossnet ]; 36 "wallabag-secret.age".publicKeys = [ mossnet ]; 37 }
··· 6 lituus = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH2lAb33LH3JNuOfBXt971u0tHe+NURFecQdfjwEj+C+ root@lituus"; 7 helix = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAKrL6IDHNnHmxi0q9nzu87NOyidPm3HpE7klU368lEf root@helix"; 8 helix2 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK2G81z1E51ioJQGLHnTJEjgSdBqLM6mb72Z+0atE6Bf root@helix"; 9 + work = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHOnfDvR2D2nGnC+DZYDUXiokzz+eLfZwkp+O8WjWutp anishlakhwara@Anishs-MacBook-Pro.local"; 10 curve = [ system user ]; 11 allUserKeys = [ system user mossnet ]; 12 systemOnly = [ system mossnet lituus helix ]; ··· 35 "box-wg.age".publicKeys = [ mossnet ]; 36 "wallabag-password.age".publicKeys = [ mossnet ]; 37 "wallabag-secret.age".publicKeys = [ mossnet ]; 38 + 39 + "work-wg.age".publicKeys = [ work user system ]; 40 }
secrets/work-wg.age

This is a binary file and will not be displayed.

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