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