Compare commits

..

2 Commits

Author SHA1 Message Date
685b4832c8 Small changes from here and there 2025-11-07 14:54:19 -06:00
ee1c3b096e Replace most install scripts with list in csv file 2025-11-07 14:43:33 -06:00
145 changed files with 839 additions and 1718 deletions

View File

@@ -1,19 +1,8 @@
# dotfiles, plus installation and related scripts # dotfiles, plus scripts for box setup
This repo contains a collection of scripts and files related to:
- configuration (i.e. this serves as my dotfiles repo)
- installation of programs
- scripts/executables for my local systems
- anything else related to getting my boxes (computers) set up as desired
This repo grew into more than I originally intended, but it turned into a fun little
excursion into the realm of shell scripting (and an intro to Lua for the neovim
portions).
## prereqs ## prereqs
- programs installed: git, sed, zsh - zsh and git installed
- git clone this repo - git clone this repo
### specific prereqs, linux distros ### specific prereqs, linux distros
@@ -24,22 +13,61 @@ portions).
- install the package manager, [homebrew](https://brew.sh/) - install the package manager, [homebrew](https://brew.sh/)
- for aerospace window manager, have only 1 workspace/desktop - for aerospace window manager, have only 1 workspace/desktop
- manual settings, refer to [docs/macos-system-settings](docs/macos-system-settings.md) - manual settings, refer to [ref/macos-system-settings](ref/macos-system-settings.md)
## script run ## script run
- to do the full setup, from the repo's root dir, run: `./box_setup.sh` - to do the full setup, from git root dir, run: `./box_setup.sh`
- to copy dotfiles only, from the repo's root dir, run: `./copy_dotfiles.sh` - to copy dotfiles only, from git root dir, run: `./copy_dotfiles.sh`
## after script run ## after script run
- complete manual actions specified in [docs/post-run](docs/post-run.md) - complete manual actions specified in [ref/post-run](ref/post-run.md)
## todo items ## todo items
see [docs/todo.md](docs/todo.md) see [ref/todo.md](ref/todo.md)
## attribution ## attribution
see [docs/attribution.md](docs/attribution.md) ### Original pattern/approach and some key config logic
The original pattern and approach for this project, the program-installation scripts and
logic, the copy-configs-and-scripts scripts and logic, the "tmux sessionizer" (tmux
session init logic), my initial neovim and tmux configs, and my general workflow/workspace
strategy, were derived from several of ThePrimeagen's projects and videos, including a
FrontEnd Masters course which he taught (each are listed below). I was unable to locate
any required licenses or copyrights for the code contained within these sources, but I
wanted to give attribution nonetheless.
- [dev/setup/config repo](https://github.com/ThePrimeagen/dev)
- [neovim config](https://github.com/ThePrimeagen/init.lua)
- [tmux sessionizer](https://github.com/ThePrimeagen/tmux-sessionizer)
- [YouTube video - neovim config video](https://www.youtube.com/watch?v=w7i4amO_zaE)
- [FrontEnd Masters course - dev productivity v2](https://frontendmasters.com/courses/developer-productivity-v2/)
Author: ThePrimeagen (Michael Paulson)
### Idea of using a list of programs in a file for build/install
The idea of using a file with a list of programs in it to build and/or install was inspired by Luke Smith's [LARBS project](https://github.com/LukeSmithxyz/LARBS/tree/master).
### Some themes and theme-swtiching/setting logic
The theme configuration files in this repository under
[src_files/imports/themes-omarchy-core](src_files/imports/themes-omarchy-core)
are copied from, and much of the "theme-switching" or "theme-setting" logic and scripts
are derived from, [Omarchy](https://github.com/basecamp/omarchy), which is licensed under
the [MIT License](https://github.com/basecamp/omarchy/blob/master/LICENSE).
Copyright (c) David Heinemeier Hansson
### Additional/extra themes (Omarchy extra themes)
Additional theme configuration files in this repository under
[src_files/imports/themes-omarchy-extra](src_files/imports/themes-omarchy-extra)
are copied or derived from projects of additional conrtibutors to the Omarchy
community/ecosystem. For information about authors/licenses/copyrights for each, refer
to any LICENSE and/or ATTRIBUTION.md files in each theme's respective directory under
[src_files/imports/themes-omarchy-extra](src_files/imports/themes-omarchy-extra).

View File

@@ -2,37 +2,34 @@
[[ $1 = "--help" ]] && { [[ $1 = "--help" ]] && {
echo "\nusage: ./box_setup.sh [system-type]" echo "\nusage: ./box_setup.sh [system-type]"
echo "\nsystem-type options: music_studio, programming" echo "\nsystem-type options: personal, studio-music, work-placeholder"
echo "\nexamples:\n ./box_setup.sh\n ./box_setup.sh music_studio\n" echo "\nexamples:\n ./box_setup.sh\n ./box_setup.sh studio-music\n"
exit 0 exit 0
} }
echo "---- settings vars for system type -----" echo "---- settings vars for system type -----"
# determine OS and distro # determine OS and, if linux, distro
case "$OSTYPE" in [[ "$OSTYPE" = *"darwin"* ]] && setup_os="macos" || {
(*linux*) [[ "$OSTYPE" = *"linux"* ]] && setup_os="linux" && {
setup_os="linux"
[[ -f /etc/os-release ]] && . /etc/os-release [[ -f /etc/os-release ]] && . /etc/os-release
setup_distro=$(echo "${NAME%% *}" | tr '[:upper:]' '[:lower:]') setup_distro=$(echo "${NAME%% *}" | tr '[:upper:]' '[:lower:]')
;; [[ -z "$setup_distro" ]] && echo "OS: linux; distro not detected" && exit 1
(*darwin*) }
setup_os="macos" }
setup_distro="macos" # just repeat macos, but maybe there is some better value [[ -z "$setup_os" ]] && echo "OS not detected" && exit 1
;;
esac
# ensure OS and distro are set before proceeding
[[ -z "$setup_os" ]] && echo "setup OS not detected" && exit 1
[[ -z "$setup_distro" ]] && echo "setup distro not detected" && exit 1
# set package manager commands for installs # set package manager commands for installs
case "$setup_os" in [[ "$setup_os" = "macos" ]] && {
(linux) install_cmd="brew install"
update_pkg_manager_and_defs_cmd='brew update'
update_pkgs_cmd='brew upgrade'
} || {
[[ "$setup_os" = "linux" ]] && {
case $setup_distro in case $setup_distro in
(arch | artix) (arch | artix)
install_cmd="sudo pacman -S --noconfirm" install_cmd="sudo pacman -S"
update_pkg_manager_and_defs_cmd='' # don't; update system instead update_pkg_manager_and_defs_cmd='' # don't; update system instead?
update_pkgs_cmd='sudo pacman -Syu' update_pkgs_cmd='sudo pacman -Syu'
;; ;;
(debian) (debian)
@@ -41,13 +38,8 @@ case "$setup_os" in
update_pkgs_cmd='sudo apt upgrade' update_pkgs_cmd='sudo apt upgrade'
;; ;;
esac esac
;; }
(macos) }
install_cmd="brew install"
update_pkg_manager_and_defs_cmd='brew update'
update_pkgs_cmd='brew upgrade'
;;
esac
# export vars for scripts # export vars for scripts
export BOX_SETUP_OS="$setup_os" export BOX_SETUP_OS="$setup_os"
@@ -57,13 +49,12 @@ export BOX_SETUP_UPDATE_PKG_MANAGER_AND_DEFS_CMD="$update_pkg_manager_and_defs_c
export BOX_SETUP_UPDATE_PKGS_CMD="$update_pkgs_cmd" export BOX_SETUP_UPDATE_PKGS_CMD="$update_pkgs_cmd"
# make dirs and copy configs/dotfiles # make dirs and copy configs/dotfiles
. ./src_files/shell/profile source ./src_files/.config/zsh/.zshenv
./make_dirs.sh ./make_dirs.sh
./copy_dotfiles.sh "--skip-theme-config" ./copy_dotfiles.sh $1
# install programs # install programs
. $ZDOTDIR/.zshrc source $ZDOTDIR/.zshenv
source $ZDOTDIR/.zshrc
./install_programs.sh $1 ./install_programs.sh $1
# configure themes
./theme_config.sh

View File

@@ -1,84 +1,61 @@
#!/bin/sh #!/bin/zsh
echo_and_execute() { echo_and_execute() { echo "executing: $@" && "$@" }
echo "executing: $@" && "$@"
}
copy_file() { copy_file() {
from=$1 local from=$1
to=$2 local to=$2
filename=$(basename "$from") local filename=$(basename $from)
[ "$3" = "--sudo" ] && [[ -e $to/$filename ]] && rm $to/$filename
echo_and_execute sudo cp -RPp "$from" "$to/$filename" || echo_and_execute cp -RPp $from $to/$filename
{
[ -e "$to/$filename" ] && rm "$to/$filename"
echo_and_execute cp -RPp "$from" "$to/$filename"
}
} }
copy_dir() { copy_dir() {
from=$1 local from=$1
to=$2 local to=$2
prev_dir=$(pwd) pushd $from > /dev/null
cd "$from" || return 1 local directories=(`find . -mindepth 1 -maxdepth 1 -type d`)
find . -mindepth 1 -maxdepth 1 -type d | while read -r dir; do for dir in $directories; do
[ -d "$to/$dir" ] && rm -rf "$to/$dir" [[ -d $to/$dir ]] && rm -rf $to/$dir
echo_and_execute cp -RPp "$dir" "$to/$dir" echo_and_execute cp -RPp $dir $to/$dir
done done
find . -mindepth 1 -maxdepth 1 -type f | while read -r file; do local files=(`find . -mindepth 1 -maxdepth 1 -type f`)
copy_file "$file" "$to" for file in $files; do
copy_file $file $to
done done
cd "$prev_dir" || return 1 popd > /dev/null
} }
sym_link() { sym_link() {
! [ -e "$1" ] && echo "skipping link, target does not exist: $1" && return [[ ! -e "$1" ]] && echo "skipping link, target does not exist: $1" && return
[ -h "$2" ] && rm "$2" [[ -h "$2" ]] && rm $2
test -f "$2" -o -d "$2" && rm -rf "$2" [[ -f "$2" || -d "$2" ]] && rm -rf $2
echo_and_execute ln -s "$1" "$2" echo_and_execute ln -s $1 $2
} }
echo "---- copying dotfiles ------------------" echo "---- copying dotfiles ------------------"
. ./src_files/shell/profile source src_files/.config/zsh/.zshenv
copy_file src_files/.config/zsh/.zshenv $HOME # copy first, ensure $ZDOTDIR set
# copy over env/profile files used by shell(s) # configs/executables/scripts from .config and .local
copy_file src_files/shell/.profile $HOME
copy_file src_files/shell/profile $XDG_CONFIG_HOME
copy_file src_files/shell/rc $XDG_CONFIG_HOME
copy_file src_files/.config/zsh/.zshenv $HOME
# TODO: move this into xdg type dir if possible
copy_file src_files/.config/X11/xinit/.xinitrc $HOME
# copy over configs, executables, and scripts
copy_dir src_files/.config $XDG_CONFIG_HOME copy_dir src_files/.config $XDG_CONFIG_HOME
copy_dir src_files/.local/bin $DIR_BIN copy_dir src_files/.local/bin $DIR_BIN
copy_dir src_files/.local/scripts $DIR_SCRIPTS copy_dir src_files/.local/scripts $DIR_SCRIPTS
# macOS overrides as needed # macOS overrides as needed
case "$OSTYPE" in *darwin*) copy_dir src_files/bin_overrides_macos $DIR_BIN;; esac [[ "$OSTYPE" = *"darwin"* ]] && copy_dir src_files/bin_overrides_macos $DIR_BIN
# obsidian uses a per-vault config model, so copy to all target vaults/dirs # obsidian uses a per-vault config model, so copy to all target vaults/dirs
IFS=","; for obs_dir in $OBSIDIAN_WORKSPACES_TO_CONFIGURE; do for obs_dir in "${OBSIDIAN_WORKSPACES_TO_CONFIGURE[@]}"; do
! [ -d "$obs_dir/.obsidian" ] && mkdir "$obs_dir/.obsidian" [[ ! -d "$obs_dir/.obsidian" ]] && mkdir "$obs_dir/.obsidian"
copy_dir "$XDG_CONFIG_HOME/obsidian" "$obs_dir/.obsidian" copy_dir $XDG_CONFIG_HOME/obsidian "$obs_dir/.obsidian"
done done
# TODO: get reaper config set up # TODO: get reaper config set up
# case "$OSTYPE" in # [[ $1 = "studio-music" ]] {
# (*darwin*) # [[ "$OSTYPE" = *"darwin"* ]] &&
# sym_link "$XDG_CONFIG_HOME/REAPER" "$HOME/Library/Application Support/REAPER" # sym_link "$XDG_CONFIG_HOME/REAPER" "$HOME/Library/Application Support/REAPER"
# ;; # }
# esac
# copy settings/configs to /etc locations
case "$OSTYPE" in
(*darwin*)
;;
(*)
copy_file src_files/etc/47-elogind.conf /etc/elogind/logind.conf.d --sudo
;;
esac
# set up themes and theme-switcher # set up themes and theme-switcher
! [ "$1" = "--skip-theme-config" ] && ./theme_config.sh ./theme_config.sh

View File

@@ -1,38 +0,0 @@
# Attribution
## Original pattern/approach and some core config logic
The original idea and approach for this project, including the original versions of my
program-installation script, the copy-configs-and-files script, the "tmux sessionizer"
(tmux session init logic), my initial neovim and tmux configs, and (though not code)
my general workflow/workspace strategy, were derived from several of ThePrimeagen's
(aka Michael Paulson's) projects and videos, including a FrontEnd Masters course which
he taught (each are listed below). I could not locate any required licenses or copyrights
for the code contained within these sources, but I wanted to give attribution nonetheless.
- [dev/setup/config repo](https://github.com/ThePrimeagen/dev)
- [neovim config](https://github.com/ThePrimeagen/init.lua)
- [tmux sessionizer](https://github.com/ThePrimeagen/tmux-sessionizer)
- [YouTube video - neovim config video](https://www.youtube.com/watch?v=w7i4amO_zaE)
- [FrontEnd Masters course - dev productivity v2](https://frontendmasters.com/courses/developer-productivity-v2/)
## Theme-swtiching/setting logic and some themes
Much of the "theme-switching" or "theme-setting" logic and scripts are derived from
[Omarchy](https://github.com/basecamp/omarchy), and some theme configuration files
in this repository under
[src_files/imports/themes-omarchy-core](../src_files/imports/themes-omarchy-core)
are copied from [Omarchy](https://github.com/basecamp/omarchy), which is licensed
under the [MIT License](https://github.com/basecamp/omarchy/blob/master/LICENSE).
Copyright (c) David Heinemeier Hansson
## Additional/extra themes (Omarchy extra themes)
Additional theme configuration files in this repository under
[src_files/imports/themes-omarchy-extra](../src_files/imports/themes-omarchy-extra)
are copied or derived from projects of additional conrtibutors to the Omarchy community.
For information about authors/licenses/copyrights for each, refer to any LICENSE and/or
ATTRIBUTION.md files in each theme's respective directory under
[src_files/imports/themes-omarchy-extra](../src_files/imports/themes-omarchy-extra).

View File

@@ -1,242 +0,0 @@
# Artix Linux - Install and System Config
**Attribution:**
Most or much of this was generated by or derived from Grok, or else from Artix docs, Arch docs/wiki, or else the docs for the particular programs or packages used. I'm not claiming any of this is mine, just putting it here in one file for future convenience/reference.
I used this approach in December of 2025 to install Artix Linux on a Framework 13in laptop from 2023 q4.
- OS and distro: Artix Linux
- init system: dinit
- partitioning, GUID Partition Table:
- unencrypted boot partition (size: 512M), UEFI
- LUKS-encrypted LVM:
- swap partition (size: amount of memory + 4G)
- root/default partition (size: remaining space)
For reference, doc page from Artix for installation:
https://wiki.artixlinux.org/Main/Installation
---
## install steps
- [ ] if not already done, download artix ISO (dinit version) and dd it onto a usb drive
- [ ] boot the live usb and select the install option (whatever it may look like)
- [ ] connect to the internet
```bash
connmanctl
//// within connmanctl
enable wifi
scan wifi
agent on
services
connect <wifi_XXXXXXXXXXXXXXXX_managed_psk>
quit
```
- [ ] verify connection using `ping`
- [ ] update live system keys/mirrors
```bash
pacman -Sy artix-keyring
```
- [ ] run lsblk and identify the storage drive on which to install
- note: when i ran this in 2025 dec on my framework laptop, it was `/dev/nvme0n1`
- [ ] partition the drive
```bash
cfdisk <target storage drive>
# use GPT (guid partition table)
# new partition, size 512M, type 'EFI System'
# new partition, size (remaining), type 'Linux LVM'
# write changes
# quit cfdisk
```
- [ ] set up LVM volumes
```bash
cryptsetup luksFormat --type luks2 /dev/<LVM partition>
cryptsetup open /dev/<LVM partition> artixlvm
pvcreate /dev/mapper/artixlvm
vgcreate artixvg /dev/mapper/artixlvm
lvcreate -L <size of memory + 4G, e.g. 36G> artixvg -n swap
lvcreate -l 100%FREE artixvg -n root
```
- [ ] set filesystems for partitions/volumes
```bash
mkfs.vfat -F32 /dev/<boot partition>
mkfs.ext4 /dev/artixvg/root
mkswap /dev/artixvg/swap
```
- [ ] mount the partitions/volumes
```bash
mount /dev/artixvg/root /mnt
mkdir /mnt/boot
mount /dev/<boot partition> /mnt/boot
swapon /dev/artixvg/swap
```
- [ ] install base system and needed packages
```bash
basestrap /mnt base base-devel linux \
linux-firmware \
dinit elogind-dinit \
lvm2 cryptsetup grub efibootmgr mkinitcpio \
connman connman-dinit wpa_supplicant \
git less neovim zsh
```
- [ ] generate fstab
```bash
fstabgen -U /mnt >> /mnt/etc/fstab
# verify (add noatime to ext4 line if desired)
vi /mnt/etc/fstab
```
- [ ] chroot into installed system
```bash
artix-chroot /mnt
```
- [ ] set timezone, hardware clock, locale
```bash
ln -sf /usr/share/zoneinfo/<path to target zone> /etc/localtime
hwclock --systohc
nvim /etc/locale.gen
# uncomment en_US.UTF-8 UTF-8; add others if desired
locale-gen
echo "LANG=en_US.UTF-8" > /etc/locale.conf
```
- [ ] set hostname and /etc/hosts
```bash
echo "<computer name>" > /etc/hostname
nvim /etc/hosts
# ensure /etc/hosts includes the following:
127.0.0.1 localhost
::1 localhost
127.0.1.1 <computer name>.localdomain <computer name>"
```
- [ ] mkinitcpio with hooks
```bash
nvim /etc/mkinitcpio.conf
# go to HOOKS and set it thus:
HOOKS=(base udev autodetect keyboard keymap consolefont modconf block encrypt lvm2 resume filesystems fsck)
mkinitcpio -P
```
- [ ] grub config and install
```bash
blkid
# note the UUID of the LVM/LUKS partition
nvim /etc/default/grub
# ensure the following is set:
GRUB_CMDLINE_LINUX="cryptdevice=UUID=<UUID from blkid above>:artixlvm root=/dev/mapper/artixvg-root resume=/dev/mapper/artixvg-swap quiet rw"
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=Artix
grub-mkconfig -o /boot/grub/grub.cfg
```
- [ ] set up connman for installed system
```bash
mkdir -p /etc/dinit.d/boot.d
ln -s ../connmand /etc/dinit.d/boot.d/connmand
```
- [ ] set root password, set up user
```bash
passwd
useradd -m -G wheel,audio,video,optical,storage <username>
passwd <username>
pacman -S sudo
EDITOR=nvim visudo
# uncomment the line in /etc/sudoers which looks something like the below:
echo "%wheel ALL=(ALL) ALL"
```
- [ ] close stuff out and reboot
```bash
exit
umount -R /mnt
swapoff -a
cryptsetup close cryptlvm # may not work, just ignore and reboot
reboot
```
---
## system config (post install)
_NOTE: don't put anything here which should be in my dotfiles-and-setup scripts instead_
- [ ] set up chrony (for syncing system time with ntp servers)
- _NOTE: edit defaults in `/etc/chrony/chrony.conf` if desired_
```bash
sudo pacman -S chrony chrony-dinit
# Fallback if dinitctl enable fails (symlink method)
sudo mkdir -p /etc/dinit.d/boot.d
sudo ln -s ../chronyd /etc/dinit.d/boot.d/chronyd
# alt: sudo dinitctl enable chronyd
/etc/dinit.d/chronyd start
# alt: sudo dinitctl start chronyd
```
---
## troubleshooting
if i need to try something again and reopen the LVM, the below should work:
```bash
cryptsetup open /dev/<target device> artixlvm
# enter existing password
vgchange -ay artixvg
# or, if only one VG exists:
vgchange -ay
```
if date/time get messed up (such as due to battery running out), fix with:
```bash
# can manually adjust to local time; grok said "date is UTC if hardware is set that way"
sudo date -s "2025-12-17 12:47:00"
# or, if chrony, ntp, or similar is set up, can trigger sync
chronyd -q
# can check after with `date` or `chronyc tracking`
sudo hwclock -w --utc
```

View File

@@ -1,18 +0,0 @@
# xlibre/x11 - adding xrandr modes
## 2026-01-16, artix linux, framework 13in laptop
### to add 1920x1280 resolution option:
```sh
dispmanage_modeline=$(cvt 1920 1280 60 | sed -n '2p' | sed -E "s/^Modeline //g")
dispmanage_mode_id=$(printf "%s" "$dispmanage_modeline" | sed -E "s/^([^ ]+)\s.*$/\1/g")
printf "%s" "$modeline" | xargs xrandr --newmode
printf "%s" "$mode_id" | xargs xrandr --addmode eDP
# NOTE: the lines above have been added to .xinitrc, just leaving here for reference
# then, add the $mode_id value to my display-manage script as the target mode:
DISPMANAGE_LAPTOP_MODE='"1920x1280_60.00"'
```

View File

@@ -1,21 +0,0 @@
# Manual steps needed after dotfile copy and/or installs
## all systems
- shell
- check user's shell using `echo $SHELL` or otherwise
- if not the desired shell:
- `cat /etc/shells` (or `chsh -l` if supported) to see options
- if target shell isn't listed, add it to `/etc/shells`
- then change the shell with `chsh -s <path to target shell>`
## macOS
- aerospace
- grant aerospace permission in accessibility settings
- likely need system reboot before aerospace works
- skhd
- run `skhd --start-service`
- grant skhd permission in accessibility settings
- run `skhd --restart-service`

View File

@@ -1,32 +0,0 @@
# TODO items
## pending to call setup work initially done
- finished dwm config and installation on linux
- add dmenu
- add st
- xresources working? use from/within theme-changing logic?
- finished artix/dinit setup
- remapped ctrl, alt, and super keys as needed
- adjusted keyrepeat speed, trackpad/mouse speed, etc
- did any normal/recommended stuff, refer to wiki
- include screen locking and sleep/hibernate
- figured out wiregaurd/vpn stuff
- finish xlibre setup, including installing any needed packages and doing config
- web browsers:
- primary, qutebrowser: config and install
- secondary, tor and either brave or librewolf: install only (no config)
## optional
- configured neomutt
- config for mpd, and client(s), (mpd clients to consider: mpc, ncmpcpp, ncmpc, inori)
- get find, xargs, and awk (use nawk) as unified as i can across system types
- seems mpv install (maybe others?) bring in wayland, see if i can remove it
- switched to macports (replace homebrew) before september 2026
- adjusted tmux so that n goes next/down and N goes prev/up in search results
- figured out nvim debug options for linux and macos, then update nvim's dap.lua
- picked and configured rss reader
- newsboat? others? option with inbox and separate queues?
- make all these scripts POSIX-compliant (or at least usable in ksh/oksh)

View File

@@ -1,53 +0,0 @@
# notes regarding my workflow and system use
## workspaces layout
idea from the ThePrimeagen: designated workspace/tags/desktop per app/purpose
### current layout
| key | app/focus
|-----|-----------
| 1. | ideas/drawing (gimp)
| 2. | music makeing - misc
| 3. | music making - daw
| 4. | listening/wathcing (any music, audio, or video)
| 5. | games
| 6. | comms (emails, chats, av/calls)
| 7. | web browser
| 8. | primary terminal (with tmux)
| 9. | general - misc (catch-all)
| 0. | system monitor (htop)
- note: programs which i'm likely to use with peripherals (i.e. trackpad, mouse, stylus,
etc) should be where i can navigate those screens with one hand
- for me, my left hand would still be on the keyboard, so: workspaces 1 through 5
### usage notes
- mental model for navigating windows:
- each window is in a stack
- keybinds: mod + j/k, to move down/up the stack
- each tab is in a circular list (imagine it is horizontal)
- keybinds: mod + h/l, to move left/right in this list
- note: in primary terminal, i'm running tmux, which has its own navigation approach,
refer to the tmux.conf and tmux-session-init scripts
- my default approach is to run windows in fullscreen
- note: on macOS, this is not mac's notion of fullscreen with windows essentially
moved to a new desktop; instead, i just want the windows taking up all of the
normal screen space (excluding any menu bar at the top of the screen)
- for the workspaces where i keep multiple apps, i try to maintain consistent order of
those apps within the stack of each respective workspace
## theme usage
| theme name | focus / use context
|-------------|--------------------
| gruvbox | admin/productivity work (default theme)
| tokyodark | music
| pina | programming/coding
| mars | night (within 2+ hours of sleep)
| lanterns | (tbd?)
| lighthouse | (tbd?)
| jade | (tbd?)

View File

@@ -1,26 +1,16 @@
#!/bin/zsh #!/bin/zsh
build_install() { apply_overrides() {
echo "-- installing $1" echo $3 |
sed -E 's/; */\n/g' |
target=$(echo "custom-$1-$BOX_SETUP_OS-$BOX_SETUP_DISTRO" | tr '-' '_') while IFS=$'\n ' read -r override_key override_values; do
[[ ! -e ./installs_and_builds/$target ]] && [[ -z $override_values ]] && continue
target=$(echo "custom-$1-$BOX_SETUP_OS-default" | tr '-' '_') override_key=$(echo $override_key | sed 's/[: ]//g')
[[ ! -e ./installs_and_builds/$target ]] && [[ $override_key = $BOX_SETUP_OS ]] && eval $override_values
target=$(echo "custom-$1-default" | tr '-' '_') [[ $override_key = $BOX_SETUP_DISTRO ]] && eval $override_values
[[ $4 =~ $override_key ]] && eval $override_values
[[ ! -e ./installs_and_builds/$target ]] && done
${=BOX_SETUP_INSTALL_COMMAND} "$1" && [[ -z $name || -z $kind ]] && echo "zz_skip,zz_skip" || echo "$name,$kind"
return
tmpdir=$(mktemp -d "${TMPDIR:-/tmp}/$1.XXXXXXXX") || {
echo "could not create temp dir for $1 build" && return
}
custom_script_path=$(pwd)/installs_and_builds/$target
pushd $tmpdir > /dev/null
$custom_script_path
popd > /dev/null
} }
echo "---- updating package manager / packages" echo "---- updating package manager / packages"
@@ -30,14 +20,22 @@ echo "---- updating package manager / packages"
echo "---- installing programs ---------------" echo "---- installing programs ---------------"
[[ -z $1 ]] && system_types_list="base" || system_types_list="base,$1" [[ -z $1 ]] && system_types_list="base" || system_types_list="base,$1"
echo "-------- for system types: $system_types_list"
echo "$system_types_list" | sed 1d "installs_and_builds/programs.csv" |
sed -E "s/,/\n/g" | while IFS=, read -r name kind os_overrides distro_overrides system_overrides notes; do
while IFS= read -r system_type; do apply_overrides $name $kind $os_overrides '' | IFS=, read -r name kind
echo "-------- install for system type: $system_type" apply_overrides $name $kind $distro_overrides '' | IFS=, read -r name kind
cat "installs_and_builds/programs_$system_type.txt" | apply_overrides $name $kind $system_overrides $system_types_list |
while IFS= read -r program_name; do IFS=, read -r name kind
build_install "$program_name"
done [[ $name = 'zz_skip' || $kind = 'zz_skip' ]] && continue
[[ $kind = 'package_manager' ]] && ${=BOX_SETUP_INSTALL_COMMAND} ${=name} || {
[[ $kind = 'build_custom' ]] && {
target=$(echo "custom_$BOX_SETUP_OS-$BOX_SETUP_DISTRO-$name" | tr '-' '_')
"./installs_and_builds/$target"
}
}
done done

View File

@@ -1,3 +0,0 @@
#!/bin/sh
echo "program not applicable for this OS or distro, skipping build/installation"

View File

@@ -1,4 +0,0 @@
#!/bin/zsh
# use normal package manager for macos install, since default is noop for other OSs
${=BOX_SETUP_INSTALL_COMMAND} --cask nikitabobko/tap/aerospace

View File

@@ -1,3 +0,0 @@
#!/bin/sh
echo "TODO: custom script for bitwig not yet implemented; may just want manual install"

View File

@@ -1,3 +0,0 @@
#!/bin/sh
echo "TODO: custom script for bitwig not yet implemented; may just want manual install"

View File

@@ -1,3 +0,0 @@
#!/bin/sh
echo "intentionally skipping build/installation for macos"

View File

@@ -1,3 +0,0 @@
#!/bin/sh
echo "program not applicable for this OS or distro, skipping build/installation"

View File

@@ -1,4 +0,0 @@
#!/bin/zsh
# use normal package manager for macos install, since default is noop for other OSs
${=BOX_SETUP_INSTALL_COMMAND} coreutils

View File

@@ -1,8 +0,0 @@
#!/bin/sh
# for now, use luke's build; i can make my own fork later if desired
git clone https://github.com/LukeSmithxyz/dmenu.git
pushd dmenu > /dev/null
sudo make clean install
popd > /dev/null

View File

@@ -1,3 +0,0 @@
#!/bin/sh
echo "intentionally skipping build/installation for macos"

View File

@@ -1,7 +0,0 @@
#!/bin/sh
git clone https://git.drinkingtea.net/david/dwm.git
pushd dwm > /dev/null
sudo make clean install
popd > /dev/null

View File

@@ -1,3 +0,0 @@
#!/bin/sh
echo "intentionally skipping build/installation for macos"

View File

@@ -1,3 +0,0 @@
#!/bin/sh
echo "program not applicable for this OS or distro, skipping build/installation"

View File

@@ -1,4 +0,0 @@
#!/bin/zsh
# use normal package manager for macos install, since default is noop for other OSs
${=BOX_SETUP_INSTALL_COMMAND} findutils

View File

@@ -1,3 +0,0 @@
#!/bin/sh
echo "intentionally skipping build/installation for macos"

View File

@@ -1,4 +0,0 @@
#!/bin/zsh
# adjust prefix for package manager before install
${=BOX_SETUP_INSTALL_COMMAND} --cask gimp

View File

@@ -1,4 +0,0 @@
#!/bin/zsh
# adjust prefix for package manager before install
${=BOX_SETUP_INSTALL_COMMAND} --cask kitty

View File

@@ -1,8 +0,0 @@
#!/bin/zsh
git clone https://github.com/ibara/oksh.git
pushd oksh > /dev/null
./configure
make && sudo make install
popd > /dev/null

View File

@@ -0,0 +1,2 @@
echo 'hello from bitwig custom build!'
echo 'custom script for bitwig is not yet implemented, these echos just here for testing'

View File

@@ -1,3 +0,0 @@
#!/bin/sh
echo 'TODO: custom script for mise is not yet implemented'

View File

@@ -1,3 +0,0 @@
#!/bin/sh
echo "intentionally skipping build/installation for macos"

View File

@@ -1,4 +0,0 @@
#!/bin/zsh
# for debian, use package name `openssh-server` instead of `openssh`
${=BOX_SETUP_INSTALL_COMMAND} openssh-server

View File

@@ -1,4 +0,0 @@
#!/bin/zsh
# change package name; on arch it is 'pandoc-cli'
${=BOX_SETUP_INSTALL_COMMAND} pandoc-cli

View File

@@ -1,4 +0,0 @@
#!/bin/zsh
# change package name; on artix it is 'pandoc-bin'
${=BOX_SETUP_INSTALL_COMMAND} pandoc-bin

View File

@@ -0,0 +1,25 @@
#!/bin/zsh
install_neovim_dir=$HOME/.local/build/neovim
install_neovim_version="v0.10.3"
[ ! -z $NVIM_VERSION ] && install_neovim_version="$NVIM_VERSION"
echo "install_neovim_version: \"$install_neovim_version\""
[ ! -d $install_neovim_dir ] && git clone https://github.com/neovim/neovim.git $install_neovim_dir
git -C $install_neovim_dir fetch --all
git -C $install_neovim_dir checkout $install_neovim_version
make -C $install_neovim_dir clean
make -C $install_neovim_dir CMAKE_BUILD_TYPE=RelWithDebInfo
sudo make -C $install_neovim_dir install
# from primeagen's dev repo, uncomment/edit as needed
# git clone https://github.com/ThePrimeagen/harpoon.git $HOME/personal/harpoon
# cd $HOME/personal/harpoon
# git fetch
# git checkout harpoon2
# git clone https://github.com/ThePrimeagen/vim-apm.git $HOME/personal/vim-apm
# git clone https://github.com/ThePrimeagen/caleb.git $HOME/personal/caleb
# git clone https://github.com/nvim-lua/plenary.nvim.git $HOME/personal/plenary

View File

@@ -1,3 +0,0 @@
#!/bin/sh
echo "intentionally skipping build/installation for macos"

View File

@@ -1,3 +0,0 @@
#!/bin/sh
echo "program not applicable for this OS or distro, skipping build/installation"

View File

@@ -1,4 +0,0 @@
#!/bin/zsh
# use normal package manager for macos install, since default is noop for other OSs
${=BOX_SETUP_INSTALL_COMMAND} koekeishiya/formulae/skhd

View File

@@ -1,9 +0,0 @@
#!/bin/sh
# git clone https://git.drinkingtea.net/david/st.git
# pushd st > /dev/null
# sudo make clean install
# popd > /dev/null
echo "TODO: st build not yet done, skipping this install for now"

View File

@@ -1,3 +0,0 @@
#!/bin/sh
echo "intentionally skipping build/installation for macos"

View File

@@ -1,4 +0,0 @@
#!/bin/zsh
# tenacity is not readily available on macos, so just use audacity for now
${=BOX_SETUP_INSTALL_COMMAND} --cask audacity

View File

@@ -1,17 +0,0 @@
#!/bin/zsh
# change package name; on artix it is 'pandoc-bin'
${=BOX_SETUP_INSTALL_COMMAND} \
xlibre-xserver \
xlibre-video-amdgpu \
xlibre-input-libinput \
libx11 \
libxft \
libxinerama
# `xlibre-video-amdgpu` depends on system gpu; ref lspci; maybe use `xlibre-drivers` instead
# if `xlibre-input-libinput` doesn't work, try `xlibre-input-evdev` (generic module) if libinput does not work
${=BOX_SETUP_INSTALL_COMMAND} \
xorg-xinit \
xorg-xrandr

View File

@@ -1,3 +0,0 @@
#!/bin/sh
echo "intentionally skipping build/installation for macos"

View File

@@ -1,3 +0,0 @@
#!/bin/sh
echo "intentionally skipping build/installation for macos"

View File

@@ -0,0 +1,36 @@
name,kind,os_overrides,distro_overrides,system_type_overrides,notes
mpv,package_manager,,,,
zsh,package_manager,,,,
mutt,package_manager,,,,
docker,package_manager,,,,may need special logic for debian https://docs.docker.com/engine/install/debian/
curl,package_manager,,,,
grep,package_manager,,,,
ripgrep,package_manager,,,,
sed,package_manager,macos: name='',,,
fzf,package_manager,,,,
jq,package_manager,,,,
parallel,package_manager,,,,
make,package_manager,,,,
cmake,package_manager,,,,
gettext,package_manager,,,,
htop,package_manager,,,,
neovim,package_manager,,,,
mpd,package_manager,,,,
ncmpcpp,package_manager,,,,
ffmpeg,package_manager,,,work: name='',
git,package_manager,,,,
tmux,package_manager,,,,
khal,package_manager,,,,
zathura,package_manager,macos: name='',,,
gcc,package_manager,macos: name='',,,
g++,package_manager,macos: name='',,,
clang,package_manager,macos: name='',,,
clang++,package_manager,macos: name='',,,
tenacity,package_manager,macos: name='--cask audacity',,work: name='',tenacity not available via homebrew; use audacity in macos
bitwig-studio,package_manager,macos: name='--cask bitwig-studio',artix: kind='aur'; arch: kind='aur'; alpine: kind='build_custom'; debian: kind='build_custom';,work: name='',
kitty,package_manager,macos: name='--cask kitty',,,
gimp,package_manager,macos: name='--cask gimp',,,
coreutils,package_manager,linux: name='',,,
findutils,package_manager,linux: name='',,,
--cask nikitabobko/tap/aerospace,package_manager,linux: name='',,,
pandoc,package_manager,,arch: name='pandoc-cli'; artix: name='pandoc-bin'; alpine: name='pandoc-cli';,work: name='',
1 name kind os_overrides distro_overrides system_type_overrides notes
2 mpv package_manager
3 zsh package_manager
4 mutt package_manager
5 docker package_manager may need special logic for debian https://docs.docker.com/engine/install/debian/
6 curl package_manager
7 grep package_manager
8 ripgrep package_manager
9 sed package_manager macos: name=''
10 fzf package_manager
11 jq package_manager
12 parallel package_manager
13 make package_manager
14 cmake package_manager
15 gettext package_manager
16 htop package_manager
17 neovim package_manager
18 mpd package_manager
19 ncmpcpp package_manager
20 ffmpeg package_manager work: name=''
21 git package_manager
22 tmux package_manager
23 khal package_manager
24 zathura package_manager macos: name=''
25 gcc package_manager macos: name=''
26 g++ package_manager macos: name=''
27 clang package_manager macos: name=''
28 clang++ package_manager macos: name=''
29 tenacity package_manager macos: name='--cask audacity' work: name='' tenacity not available via homebrew; use audacity in macos
30 bitwig-studio package_manager macos: name='--cask bitwig-studio' artix: kind='aur'; arch: kind='aur'; alpine: kind='build_custom'; debian: kind='build_custom'; work: name=''
31 kitty package_manager macos: name='--cask kitty'
32 gimp package_manager macos: name='--cask gimp'
33 coreutils package_manager linux: name=''
34 findutils package_manager linux: name=''
35 --cask nikitabobko/tap/aerospace package_manager linux: name=''
36 pandoc package_manager arch: name='pandoc-cli'; artix: name='pandoc-bin'; alpine: name='pandoc-cli'; work: name=''

View File

@@ -1,37 +0,0 @@
gcc
musl
coreutils
findutils
xlibre
make
mpv
kitty
st
dmenu
zsh
ksh
tmux
neovim
neomutt
curl
grep
ripgrep
sed
less
openssh
fzf
jq
parallel
gettext
htop
ffmpeg
mpd
ncmpcpp
git
calcurse
zathura
gimp
dwm
qutebrowser
aerospace
skhd

View File

@@ -1,2 +0,0 @@
tenacity
bitwig-studio

View File

@@ -1,5 +0,0 @@
clang
cmake
mise
podman
pandoc

View File

@@ -1,41 +1,34 @@
#!/bin/sh #!/bin/zsh
. ./src_files/shell/profile # ensure env vars set for use below
echo "---- making system dirs ----------------" echo "---- making system dirs ----------------"
source ./src_files/.config/zsh/.zshenv # ensure env vars set for use below
# some standard/common directories, some overlap/use in XDG directories # some standard/common directories, some overlap/use in XDG directories
! [ -d "$DIR_LOCAL" ] && mkdir -p "$DIR_LOCAL" [[ ! -d "$DIR_LOCAL" ]] && mkdir -p "$DIR_LOCAL"
! [ -d "$DIR_BIN" ] && mkdir -p "$DIR_BIN" [[ ! -d "$DIR_BIN" ]] && mkdir -p "$DIR_BIN"
! [ -d "$DIR_SCRIPTS" ] && mkdir -p "$DIR_SCRIPTS" [[ ! -d "$DIR_SCRIPTS" ]] && mkdir -p "$DIR_SCRIPTS"
! [ -d "$DIR_USER_OPT" ] && mkdir -p "$DIR_USER_OPT" [[ ! -d "$DIR_TMP" ]] && mkdir -p "$DIR_TMP"
! [ -d "$DIR_USER_LIB" ] && mkdir -p "$DIR_USER_LIB" [[ ! -d "$DIR_USER_OPT" ]] && mkdir -p "$DIR_USER_OPT"
[[ ! -d "$DIR_USER_LIB" ]] && mkdir -p "$DIR_USER_LIB"
# directories related to XDG Base Directory specification # directories related to XDG Base Directory specification
! [ -d "$XDG_CONFIG_HOME" ] && mkdir -p "$XDG_CONFIG_HOME" [[ ! -d "$XDG_CONFIG_HOME" ]] && mkdir -p "$XDG_CONFIG_HOME"
! [ -d "$XDG_CACHE_HOME" ] && mkdir -p "$XDG_CACHE_HOME" [[ ! -d "$XDG_CACHE_HOME" ]] && mkdir -p "$XDG_CACHE_HOME"
! [ -d "$XDG_DATA_HOME" ] && mkdir -p "$XDG_DATA_HOME" [[ ! -d "$XDG_DATA_HOME" ]] && mkdir -p "$XDG_DATA_HOME"
! [ -d "$XDG_STATE_HOME" ] && mkdir -p "$XDG_STATE_HOME" [[ ! -d "$XDG_STATE_HOME" ]] && mkdir -p "$XDG_STATE_HOME"
# additional directories for how i'm organizing my system # additional directories for how i'm organizing my system
! [ -d "$DIR_HOME_BOX" ] && mkdir -p "$DIR_HOME_BOX" [[ ! -d "$DIR_HOME_BOX" ]] && mkdir -p $DIR_HOME_BOX
! [ -d "$DIR_INBOX" ] && mkdir -p "$DIR_INBOX" [[ ! -d "$DIR_MUSIC" ]] && mkdir -p $DIR_MUSIC
! [ -d "$DIR_NOTES" ] && mkdir -p "$DIR_NOTES" [[ ! -d "$DIR_NOTES" ]] && mkdir -p $DIR_NOTES
! [ -d "$DIR_MUSIC" ] && mkdir -p "$DIR_MUSIC" [[ ! -d "$DIR_DEV" ]] && mkdir -p $DIR_DEV
! [ -d "$DIR_DEV" ] && mkdir -p "$DIR_DEV" [[ ! -d "$DIR_GIT_PROJECTS" ]] && mkdir -p $DIR_GIT_PROJECTS
! [ -d "$DIR_GIT_PROJECTS" ] && mkdir -p "$DIR_GIT_PROJECTS" [[ ! -d "$DIR_GIT_PROJECTS/me" ]] && mkdir -p $DIR_DEV/git/me
! [ -d "$DIR_GIT_PROJECTS/me" ] && mkdir -p "$DIR_GIT_PROJECTS/me" [[ ! -d "$DIR_GIT_PROJECTS/forks" ]] && mkdir -p $DIR_DEV/git/forks
! [ -d "$DIR_GIT_PROJECTS/forks" ] && mkdir -p "$DIR_GIT_PROJECTS/forks" [[ ! -d "$DIR_GIT_PROJECTS/learning" ]] && mkdir -p $DIR_DEV/git/learning
! [ -d "$DIR_GIT_PROJECTS/learning" ] && mkdir -p "$DIR_GIT_PROJECTS/learning" [[ ! -d "$DIR_GIT_PROJECTS/other" ]] && mkdir -p $DIR_DEV/git/other
! [ -d "$DIR_GIT_PROJECTS/other" ] && mkdir -p "$DIR_GIT_PROJECTS/other"
# directories for music/audio production # directories for music/audio production
! [ -d "$DIR_REAPER_PORTABLE_SHARED" ] && mkdir -p "$DIR_REAPER_PORTABLE_SHARED" [[ ! -d "$DIR_REAPER_PORTABLE_SHARED" ]] && mkdir -p $DIR_REAPER_PORTABLE_SHARED
! [ -d "$DIR_REAPER_PORTABLE_LINUX" ] && mkdir -p "$DIR_REAPER_PORTABLE_LINUX" [[ ! -d "$DIR_REAPER_PORTABLE_LINUX" ]] && mkdir -p $DIR_REAPER_PORTABLE_LINUX
! [ -d "$DIR_REAPER_PORTABLE_MACOS" ] && mkdir -p "$DIR_REAPER_PORTABLE_MACOS" [[ ! -d "$DIR_REAPER_PORTABLE_MACOS" ]] && mkdir -p $DIR_REAPER_PORTABLE_MACOS
# xdg spec and/or clean-up of home dir
echo "---- making xdg-spec/home-clean-up files"
! [ -d "$XDG_CONFIG_HOME/cups" ] && mkdir -p "$XDG_CONFIG_HOME/cups"
! [ -d "$XDG_DATA_HOME/irb" ] && mkdir -p "$XDG_DATA_HOME/irb"
! [ -d "$XDG_DATA_HOME/ncmpcpp" ] && mkdir -p "$XDG_DATA_HOME/ncmpcpp"
! [ -d "$XDG_CACHE_HOME/maven/repository" ] && mkdir -p "$XDG_CACHE_HOME/maven/repository"

8
ref/post-run.md Normal file
View File

@@ -0,0 +1,8 @@
# Manual steps needed after dotfile copy and/or installs
## macOS
- aerospace
- grant aerospace permission in accessibility settings
- likely need system reboot before aerospace works

21
ref/todo.md Normal file
View File

@@ -0,0 +1,21 @@
# todo items
- config for: terminal (kitty? havoc?)
- config for shell (if keeping zsh, may not need anything beyond what i've already done)
- config for mpd, and client(s), (mpd clients to consider: mpc, ncmpcpp, ncmpc, inori)
- config for mpv (if any, may not need anything)
- hyprland config and install on linux
- web browsers config and install
- get find, xargs, awk (use nawk) as unified as i can across system types
- decide on docker? or alternatives like podman? any license concerns?
- pick rss reader; newsboat? others? option with inbox and separate queues?
- decide if i even want a filemanager; if yes, pick one and configure
- decide what i'm doing for music streaming; spotify official? web? tui option?
- switch installation approach, use csv file with programs to install, install types,
any extra flags/opts, comments
- regarding the system-types idea i'd started to build in already, maybe have a
column for filtering in the csv file, or just have multiple csv files corresponding
to a base/core install, a music-studio install, a employer/work machine, etc.
- alternate idea: columns for "include_in_systems" and/or "excluded_from_systems"
- if both, likely apply the include column first, then the exclude (priority)

View File

@@ -0,0 +1,61 @@
# notes regarding my workflow and intended use of workspaces
## workspaces layout
idea from the ThePrimeagen: designated workspace/label/desktop per app/purpose
### current layout
| key | app/focus |
|-----|-----------|
| 1. | notes (nvim, obsidian) |
| 2. | music makeing - misc |
| 3. | music making - daw |
| 4. | drawing (gimp) |
| 5. | music/audio listening |
| 6. | comms (emails, chats, av/calls) |
| 7. | web browser |
| 8. | terminal (primary; one-off terminals & tui apps can be anywhere) |
| 9. | programming - misc (whatever is not in primary terminal) |
| 0. | general - misc (catch-all) |
### ideas/guidelines:
- use this consistently accross all machines
- if something not applicable for a given machine, just don't have apps or screens
present, but maintain absolute position/numbering of each screen
- structure the above so that programs which i'm likely to use with one hand off of the
keyboard (i.e. to use a trackpad, mouse, stylus, etc) are on the screens that allow
for one hand (i.e. the one still on the keyboard) to navigate those screens
- for me, using peripherals with right hand, so put programs likely to be used with
peripherals where my left hand can switch to them single-handedly (screens 1 to 5)
## workflow / use notes
- related to the layout above, my approach is to run almost every window in fullscreen
- note: on macOS, this is not mac's notion of fullscreen, which basically moves
windows to new workspaces/desktops when going to fullscreen mode; instead, when i
say 'fullscreen', the idea is taking up all of the normal screen (excluding the
menu bar at the top of the screen)
- key bindings are set for moving window focus up/down (vim style: mod + k/j)
- the mental model here is that every fullscreen window is in a stack, so i can move
focus up and down the stack (and i try to maintain consistent order in stacks,
e.g. in the comms workspace, email is always on the bottom and chat apps are above)
- for apps with tabs, pair the above mental model of a stack with a mental model of a
circular list being in any position in that stack
- so, keybindings are also set for previous/next tab (vim style: mod + h/l)
- specifically, mod+h is mapped to ctrl+shift+tab and mod+l is mapped to ctrl+tab,
so it should work anywhere ctrl+tab and ctrl+shift+tab work
- all this said, it is better to keep things simple when possible and avoid having too
many windows and/or tabs open at one time; however, with the designated purpose for
each workspace and the mental models above, it rarely takes me long to find what i need
## example cases
- if i want a particular browser window, i jump to workspace 9, then move focus
up or down until i get to the window i want; if the window is right but i need
a different tab, i then just move "right or left" through my tabs
- if i want a particular music-playing app/tui, i jumpt to workspace 4 and move
focus up or down as needed to find it
- variation case: if i want a particular terminal workspace, i jump to workspace
8, but then i'm in tmux land and navigate via the methods i've set up for tmux

View File

@@ -1,38 +0,0 @@
#!/bin/sh
prefix="/usr"
exec_prefix="${prefix}"
xrdb="xrdb"
xinitdir="/etc/X11/xinit"
xmodmap="xmodmap"
userresources="$HOME/.Xresources"
usermodmap="$HOME/.Xmodmap"
sysresources="$xinitdir/.Xresources"
sysmodmap="$xinitdir/.Xmodmap"
# merge in defaults and keymaps
[ -x /usr/bin/cpp ] && xinit_nocpp_opt="" || xinit_nocpp_opt="-nocpp"
[ -f "$sysresources" ] && "$xrdb" "$xinit_nocpp_opt" -merge "$sysresources"
[ -f "$sysmodmap" ] && "$xmodmap" "$sysmodmap"
[ -f "$userresources" ] && "$xrdb" -nocpp -merge "$userresources"
[ -f "$usermodmap" ] && "$xmodmap" "$usermodmap"
# source xinitdrc.d script files
[ -d "$xinitdir"/xinitrc.d ] && {
for f in "$xinitdir/xinitrc.d"/?*.sh ; do
[ -x "$f" ] && . "$f"
done
unset f
}
# xrandr mode for laptop display (framework 13in), target 1920x1280 resolution
dispmanage_modeline=$(cvt 1920 1280 60 | sed -n '2p' | sed -E "s/^Modeline //g")
dispmanage_mode_id=$(printf "%s" "$dispmanage_modeline" | sed -E "s/^([^ ]+)\s.*$/\1/g")
printf "%s" "$dispmanage_modeline" | xargs xrandr --newmode
printf "%s" "$dispmanage_mode_id" | xargs xrandr --addmode eDP
xrandr --output eDP --mode "1920x1280_60.00"
# start window manager
exec dwm

View File

@@ -25,18 +25,23 @@ default-root-container-orientation = 'vertical' # opts: horizontal vertical auto
outer.right = 0 outer.right = 0
[mode.main.binding] [mode.main.binding]
# layouts
cmd-comma = 'layout v_accordion' cmd-comma = 'layout v_accordion'
cmd-period = 'layout h_tiles' cmd-period = 'layout h_tiles'
cmd-slash = 'layout floating' cmd-slash = 'layout horizontal vertical'
# window resizing
alt-minus = 'resize smart -50' alt-minus = 'resize smart -50'
alt-equal = 'resize smart +50' alt-equal = 'resize smart +50'
# window focus/view # in stack mode, new windows are added "below" the current, so swap up and down
cmd-j = 'focus up' # new windows are added "below" current, so swap up and down cmd-j = 'focus up'
cmd-k = 'focus down' cmd-k = 'focus down'
cmd-l = 'focus right'
cmd-h = 'focus left'
cmd-shift-j = 'move up'
cmd-shift-k = 'move down'
cmd-shift-h = 'move left'
cmd-shift-l = 'move right'
cmd-1 = 'workspace 1' cmd-1 = 'workspace 1'
cmd-2 = 'workspace 2' cmd-2 = 'workspace 2'
cmd-3 = 'workspace 3' cmd-3 = 'workspace 3'
@@ -47,10 +52,6 @@ default-root-container-orientation = 'vertical' # opts: horizontal vertical auto
cmd-8 = 'workspace 8' cmd-8 = 'workspace 8'
cmd-9 = 'workspace 9' cmd-9 = 'workspace 9'
cmd-0 = 'workspace 10' cmd-0 = 'workspace 10'
# window movement
cmd-shift-j = 'move up' # new windows are added "below" current, so swap up and down
cmd-shift-k = 'move down'
cmd-shift-1 = 'move-node-to-workspace 1' cmd-shift-1 = 'move-node-to-workspace 1'
cmd-shift-2 = 'move-node-to-workspace 2' cmd-shift-2 = 'move-node-to-workspace 2'
cmd-shift-3 = 'move-node-to-workspace 3' cmd-shift-3 = 'move-node-to-workspace 3'
@@ -62,3 +63,13 @@ default-root-container-orientation = 'vertical' # opts: horizontal vertical auto
cmd-shift-9 = 'move-node-to-workspace 9' cmd-shift-9 = 'move-node-to-workspace 9'
cmd-shift-0 = 'move-node-to-workspace 10' cmd-shift-0 = 'move-node-to-workspace 10'
cmd-shift-semicolon = 'mode service'
[mode.service.binding]
r = ['reload-config', 'flatten-workspace-tree', 'mode main'] # reset layout
f = ['flatten-workspace-tree', 'layout floating', 'mode main']
cmd-h = ['join-with left', 'mode main']
cmd-j = ['join-with down', 'mode main']
cmd-k = ['join-with up', 'mode main']
cmd-l = ['join-with right', 'mode main']

View File

@@ -28,14 +28,14 @@ show_cpu_frequency=0
show_cached_memory=1 show_cached_memory=1
update_process_names=0 update_process_names=0
account_guest_in_cpu_meter=0 account_guest_in_cpu_meter=0
color_scheme=6 color_scheme=5
enable_mouse=1 enable_mouse=1
delay=40 delay=40
hide_function_bar=0 hide_function_bar=0
header_layout=two_50_50 header_layout=two_50_50
column_meters_0=LeftCPUs2 LeftCPUs8 Blank MemorySwap MemorySwap Blank NetworkIO NetworkIO column_meters_0=LeftCPUs2 LeftCPUs4 Blank MemorySwap MemorySwap Blank NetworkIO NetworkIO
column_meter_modes_0=1 3 2 1 3 2 2 3 column_meter_modes_0=1 3 2 1 3 2 2 3
column_meters_1=RightCPUs2 RightCPUs8 Blank LoadAverage Tasks Blank DiskIO FileDescriptors Blank Hostname System Uptime DateTime Battery column_meters_1=RightCPUs2 RightCPUs4 Blank LoadAverage Tasks Blank DiskIO FileDescriptors Blank Hostname System Uptime DateTime Battery
column_meter_modes_1=1 3 2 2 2 2 2 2 2 2 2 2 2 1 column_meter_modes_1=1 3 2 2 2 2 2 2 2 2 2 2 2 1
tree_view=0 tree_view=0
sort_key=47 sort_key=47

View File

@@ -1,20 +0,0 @@
input {
kb_options = caps:escape, \
ctrl:swap_lalt_lctl, \
ctrl:swap_ralt_rctl, \
altwin:swap_ralt_rwin # this one seems to not work, but leaving here for now
repeat_rate = 70
repeat_delay = 250
touchpad {
clickfinger_behavior = true # 2-finger click is right-click
scroll_factor = 0.3
natural_scroll = false # natural is a bad name for this
}
}
# custom window rules per app
windowrulev2 = float, class:REAPER, title:^(REAPER).*$
windowrulev2 = size 1120 744, class:REAPER, title:^(REAPER).*$
windowrulev2 = center, class:REAPER, title:^(REAPER).*$

View File

@@ -1 +0,0 @@
IRB.conf[:HISTORY_FILE] ||= File.join(ENV["XDG_DATA_HOME"], "irb", "history")

View File

@@ -20,7 +20,7 @@ macos_custom_beam_cursor yes
# theme stuff # theme stuff
# NOTE: on linux, may want background_opacity at 1.0 and let hyprland handle transparency # NOTE: on linux, may want background_opacity at 1.0 and let hyprland handle transparency
include ~/.config/kitty/theme.conf include ~/.config/kitty/theme.conf
background_opacity 0.94 background_opacity 0.95
# etc # etc
enable_audio_bell no enable_audio_bell no

View File

@@ -1,2 +0,0 @@
[ -r "$XDG_CONFIG_HOME/profile" ] && . "$XDG_CONFIG_HOME/profile"
[ -r "$XDG_CONFIG_HOME/rc" ] && . "$XDG_CONFIG_HOME/rc"

View File

@@ -1 +0,0 @@
<localRepository>${env.XDG_CACHE_HOME}/maven/repository</localRepository>

View File

@@ -1,4 +0,0 @@
h seek -5
l seek 5
H seek -30
L seek 30

View File

@@ -1,3 +0,0 @@
screenshot-format=png
screenshot-dir="~/dbox/inbox"
screenshot-template="%F-%p-%n"

View File

@@ -1,3 +0,0 @@
ncmcpp_directory = "$XDG_DATA_HOME/ncmpcpp"
lyrics_directory = "$DIR_MUSIC/.lyrics"
mpd_music_dir = "$DIR_MUSIC"

View File

@@ -0,0 +1,66 @@
initial_screen = "library"
library_tabs = ["playlists", "albums", "artists", "browse"]
[keybindings]
"Space" = "playpause"
##########################################################################################
# theme
# [theme] # from eltoncezar, similar to official spotify colors
# background = "#191414"
# primary = "#FFFFFF"
# secondary = "light black"
# title = "#1DB954"
# playing = "#1DB954"
# playing_selected = "#1ED760"
# playing_bg = "#191414"
# highlight = "#FFFFFF"
# highlight_bg = "#484848"
# error = "#FFFFFF"
# error_bg = "red"
# statusbar = "#191414"
# statusbar_progress = "#1DB954"
# statusbar_bg = "#1DB954"
# cmdline = "#FFFFFF"
# cmdline_bg = "#191414"
# search_match = "light red"
[theme] # from wojciech-zurek, tokyonight
background = "#1a1b26"
primary = "#9aa5ce"
secondary = "#414868"
title = "#9ece6a"
playing = "#7aa2f7"
playing_selected = "#bb9af7"
playing_bg = "#24283b"
highlight = "#c0caf5"
highlight_bg = "#24283b"
error = "#414868"
error_bg = "#f7768e"
statusbar = "#ff9e64"
statusbar_progress = "#7aa2f7"
statusbar_bg = "#1a1b26"
cmdline = "#c0caf5"
cmdline_bg = "#24283b"
search_match = "#f7768e"
# [theme] # from clooles, uses defaults/primary, supports transparency, for dynamic themes
# background = "default"
# primary = "foreground"
# secondary = "light black"
# title = "primary"
# playing = "primary"
# playing_selected = "primary"
# playing_bg = "primary"
# highlight = "#FFFFFF"
# highlight_bg = "#484848"
# error = "#FF0000"
# error_bg = "red"
# statusbar = "primary"
# statusbar_progress = "primary"
# statusbar_bg = "primary"
# cmdline = "default"
# cmdline_bg = "primary"
# search_match = "light red"

View File

@@ -1,6 +1,16 @@
local csGroup = vim.api.nvim_create_augroup("coreSettingsGroup", { clear = true })
local csgAutocmd = vim.api.nvim_create_autocmd
require("settings") require("settings")
require("plugin_manager") require("plugin_manager")
require("key_mappings") require("key_mappings")
require("util_functions") require("util_functions")
require("auto_commands")
csgAutocmd({"BufWritePre"}, {
group = csGroup,
pattern = "*",
command = [[%s/\s\+$//e]],
})
ThemeUpdate() ThemeUpdate()

View File

@@ -1,20 +0,0 @@
local autoCmdGroup = vim.api.nvim_create_augroup("autoCmdGroup", { clear = true })
local autoCmd = vim.api.nvim_create_autocmd
-- trim trailing whitespace on save
autoCmd({"BufWritePre"}, {
group = autoCmdGroup,
pattern = "*",
command = [[%s/\s\+$//e]],
})
-- adjust indent spacing for html files
autoCmd({"FileType"}, {
group = autoCmdGroup,
pattern = "html",
callback = function()
vim.opt_local.shiftwidth = 2
vim.opt_local.tabstop = 2
vim.opt_local.softtabstop = 2
end
})

View File

@@ -11,9 +11,9 @@ vim.keymap.set("n", "<leader>n", vim.cmd.Ex)
vim.keymap.set("v", "J", ":m '>+1<CR>gv") vim.keymap.set("v", "J", ":m '>+1<CR>gv")
vim.keymap.set("v", "K", ":m '<-2<CR>gv") vim.keymap.set("v", "K", ":m '<-2<CR>gv")
-- add extra vertical padding for the cursor after half-page jumps -- reduce effective distance of half-page jumps and vertically-center the cursor
vim.keymap.set("n", "<C-d>", "<C-d>4<C-e>") vim.keymap.set("n", "<C-d>", "<C-d>4<C-y>M")
vim.keymap.set("n", "<C-u>", "<C-u>4<C-y>") vim.keymap.set("n", "<C-u>", "<C-u>4<C-e>M")
-- open folds when iterating search results -- open folds when iterating search results
vim.keymap.set("n", "n", "nzv") vim.keymap.set("n", "n", "nzv")
@@ -22,13 +22,13 @@ vim.keymap.set("n", "N", "Nzv")
-- maintain cursor position after paragraph formatting -- maintain cursor position after paragraph formatting
vim.keymap.set("n", "=ap", "mF=ap'F") vim.keymap.set("n", "=ap", "mF=ap'F")
-- replace selected text, keep main register -- shortcuts for deleting into the void register
vim.keymap.set("x", "<leader>P", [["_dP]]) vim.keymap.set({ "n", "v" }, "<leader>d", [["_d]])
vim.keymap.set("x", "<leader>P", [["_dP]]) -- replace selected text, keep main register
-- shortcuts for using + register (system clipboard) -- shortcuts for using + register (system clipboard)
vim.keymap.set({ "n", "v" }, "<leader>y", [["+y]]) vim.keymap.set({ "n", "v" }, "<leader>y", [["+y]])
vim.keymap.set("n", "<leader>Y", [["+Y]]) vim.keymap.set("n", "<leader>Y", [["+Y]])
vim.keymap.set({ "n", "v" }, "<leader>d", [["+d]])
vim.keymap.set("n", "<leader>D", [["+D]]) vim.keymap.set("n", "<leader>D", [["+D]])
vim.keymap.set("n", "<leader>p", [["+p]]) vim.keymap.set("n", "<leader>p", [["+p]])
@@ -60,14 +60,6 @@ kmgAutocmd('FileType', {
end end
}) })
------------------------------------------------------------------------------------------
-- visual/ui-related toggles and shortcuts
vim.keymap.set("n", "<leader>vl", function() ToggleCursorLine() end)
vim.keymap.set("n", "<leader>vc", function() ToggleColorColumn('90') end)
vim.keymap.set("n", "<leader>vn", function() ToggleLineNumbers() end)
vim.keymap.set("n", "<leader>vw", function() ToggleWritingMode() end)
------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------
-- quickfix and location lists -- quickfix and location lists
-- ref: :h quickfix or :h location-list -- ref: :h quickfix or :h location-list
@@ -126,13 +118,25 @@ kmgAutocmd('LspAttach', {
vim.keymap.set("n", "<leader>lv", function() vim.diagnostic.open_float() end, opts) vim.keymap.set("n", "<leader>lv", function() vim.diagnostic.open_float() end, opts)
vim.keymap.set("n", "<leader>lq", function() vim.diagnostic.setqflist() end, opts) vim.keymap.set("n", "<leader>lq", function() vim.diagnostic.setqflist() end, opts)
-- TODO: learn what the below commands are and if i want to set keymaps for them -- TODO: learn what the below commands are and if i want to set keymaps for them
-- vim.keymap.set("n", "<leader>lws", function() vim.lsp.buf.workspace_symbol() end, opts) -- vim.keymap.set("n", "<leader>vws", function() vim.lsp.buf.workspace_symbol() end, opts)
-- vim.keymap.set("n", "<leader>lca", function() vim.lsp.buf.code_action() end, opts) -- vim.keymap.set("n", "<leader>vca", function() vim.lsp.buf.code_action() end, opts)
-- vim.keymap.set("n", "<leader>lrl", function() vim.lsp.buf.references() end, opts) -- vim.keymap.set("n", "<leader>vrl", function() vim.lsp.buf.references() end, opts)
-- vim.keymap.set("n", "<leader>lrn", function() vim.lsp.buf.rename() end, opts) -- vim.keymap.set("n", "<leader>vrn", function() vim.lsp.buf.rename() end, opts)
end end
}) })
------------------------------------------------------------------------------------------
-- git stuff
vim.keymap.set("n", "<leader>ga", function() vim.cmd("silent !git add %") end)
vim.keymap.set("n", "<leader>gs", function() TmpBuff("new"); ReadShellCmd('git status') end)
vim.keymap.set("n", "<leader>gl", function() TmpBuff("vnew"); ReadShellCmd('git log') end)
vim.keymap.set("n", "<leader>gg", function()
TmpBuff()
ReadShellCmd('git ' .. vim.fn.input('git '))
end)
vim.keymap.set("n", "<leader>gG", ":Git ") -- use fugitive plugin's generic git command
------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------
-- plugins -- plugins
@@ -148,8 +152,8 @@ vim.keymap.set('n', '<leader>fg', tscBuiltin.git_files, { desc = 'tscope find gi
vim.keymap.set('n', '<leader>fb', tscBuiltin.buffers, { desc = 'tscope buffers' }) vim.keymap.set('n', '<leader>fb', tscBuiltin.buffers, { desc = 'tscope buffers' })
vim.keymap.set('n', '<leader>fh', tscBuiltin.help_tags, { desc = 'tscope help tags' }) vim.keymap.set('n', '<leader>fh', tscBuiltin.help_tags, { desc = 'tscope help tags' })
-- TODO: maybe add commands: -- TODO: maybe add commands:
-- - find files including git-ignored (that is, have both a yes and no option) -- - find files including git-ignored (have a yes and no option)
-- - grep files including git-ignored (that is, have both a yes and no option) -- - grep files including git-ignored (have a yes and no option)
-- - grep which supports fuzzy-find, unless performance is horrendous -- - grep which supports fuzzy-find, unless performance is horrendous
-- harpoon -- harpoon
@@ -164,22 +168,14 @@ for i = 1, 10, 1 do
vim.keymap.set("n", "<leader>h" .. (i % 10), function() harpoon:list():replace_at(i) end) vim.keymap.set("n", "<leader>h" .. (i % 10), function() harpoon:list():replace_at(i) end)
end end
--- fugitive (git integration)
vim.keymap.set("n", "<leader>gg", ":Git ") -- shortcut, arbitrary git commands
vim.keymap.set("n", "<leader>ga", function() vim.cmd.Git({ "add %"}) end)
vim.keymap.set("n", "<leader>gl", function() vim.cmd.Git({ "log"}) end)
vim.keymap.set("n", "<leader>gs", function() vim.cmd.Git({ "-p status" }) end)
vim.keymap.set("n", "<leader>gc", function() vim.cmd.Git({ "commit -a" }) end)
-- undotree -- undotree
vim.keymap.set("n", "<leader>u", vim.cmd.UndotreeToggle) vim.keymap.set("n", "<leader>u", vim.cmd.UndotreeToggle)
-- treesitter and treesitter-context
vim.keymap.set("n", "<leader>tc", function() vim.cmd.TSContext({ "toggle" }) end)
-- conform (formatter) -- conform (formatter)
vim.keymap.set("n", "<leader>fmt", function() vim.keymap.set("n", "<leader>fmt", function()
require("conform").format({ bufnr = 0 }) require("conform").format({ bufnr = 0 })
end) end)
-- obisdian / notes
vim.keymap.set("n", "<leader>oo", function() vim.cmd("Obsidian open") end)
vim.keymap.set("n", "<leader>ot", "o- [ ] ")

View File

@@ -1,3 +1,4 @@
-- TODO: maybe switch this over from git-clone approach to neovim's builtin vim.pack.add
local path_lazy_nvim = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" local path_lazy_nvim = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(path_lazy_nvim) then if not vim.loop.fs_stat(path_lazy_nvim) then
local git_output = vim.fn.system({ local git_output = vim.fn.system({

View File

@@ -5,10 +5,10 @@ return {
local dap = require("dap") local dap = require("dap")
dap.set_log_level("DEBUG") dap.set_log_level("DEBUG")
-- dap.adapters.codelldb = { dap.adapters.codelldb = {
-- type = "executable", type = "executable",
-- command = "codelldb", command = "codelldb",
-- } }
local dapConfigArgsInput = function() local dapConfigArgsInput = function()
return vim.split(vim.fn.input("args: "), " ") return vim.split(vim.fn.input("args: "), " ")
@@ -95,7 +95,7 @@ return {
end, end,
}, },
{ {
"jay-babu/mason-nvim-dap.nvim", -- TODO: install here? manually outside of neovim? "jay-babu/mason-nvim-dap.nvim", -- TODO: here, or handle manually outside of neovim?
dependencies = { dependencies = {
"williamboman/mason.nvim", "williamboman/mason.nvim",
"mfussenegger/nvim-dap", "mfussenegger/nvim-dap",
@@ -104,7 +104,7 @@ return {
config = function() config = function()
require("mason-nvim-dap").setup({ require("mason-nvim-dap").setup({
ensure_installed = { ensure_installed = {
-- "codelldb", "codelldb",
-- "delve", -- "delve",
}, },
automatic_installation = true, automatic_installation = true,

View File

@@ -8,7 +8,7 @@ return {
settings = { settings = {
save_on_toggle = true, save_on_toggle = true,
sync_on_ui_close = true, sync_on_ui_close = true,
}, }
}) })
end, end,
}, },

View File

@@ -1,10 +1,4 @@
return { return {
{
"L3MON4D3/LuaSnip",
version = "v2.*",
-- build = "make install_jsregexp"
},
{
"neovim/nvim-lspconfig", "neovim/nvim-lspconfig",
dependencies = { dependencies = {
"stevearc/conform.nvim", "stevearc/conform.nvim",
@@ -35,7 +29,7 @@ return {
ensure_installed = { ensure_installed = {
"clangd", "clangd",
"lua_ls", "lua_ls",
-- "ruby_lsp", "ruby_lsp",
-- "gopls", -- "gopls",
-- "tailwindcss", -- "tailwindcss",
}, },
@@ -126,5 +120,4 @@ return {
-- vim.lsp.enable('standardrb') -- vim.lsp.enable('standardrb')
-- vim.lsp.enable('herb_ls') -- targets html + ruby (erb files) -- vim.lsp.enable('herb_ls') -- targets html + ruby (erb files)
end, end,
},
} }

View File

@@ -1,26 +0,0 @@
return {
{
"obsidian-nvim/obsidian.nvim",
version = "*", -- '*' for latest release, not latest commit
ft = "markdown",
opts = {
footer = {
enabled = false,
},
frontmatter = {
enabled = false,
},
legacy_commands = false,
new_notes_location = os.getenv("DIR_NOTES") .. "/inbox",
ui = {
enable = false,
},
workspaces = {
{
name = "notes",
path = os.getenv("DIR_NOTES"),
},
},
},
},
}

View File

@@ -4,20 +4,13 @@ return {
dependencies = { "nvim-lua/plenary.nvim" }, dependencies = { "nvim-lua/plenary.nvim" },
opts = { opts = {
defaults = { defaults = {
layout_strategy = "vertical", layout_strategy = "horizontal",
layout_config = { layout_config = {
horizontal = { horizontal = {
width = 0.98, width = 0.98,
height = 0.98, height = 0.98,
preview_width = 0.45, preview_width = 0.45,
}, },
vertical = {
width = 0.98,
height = 0.98,
preview_height = 0.55,
preview_cutoff = 14,
prompt_position = 'bottom',
},
}, },
path_display = { "truncate", }, path_display = { "truncate", },
}, },

View File

@@ -1,40 +1,4 @@
return { return {
{
"tiagovla/tokyodark.nvim",
lazy = false,
priority = 1000,
opts = {
custom_highlights = function(highlights, palette)
highlights.Comment['fg'] = "#8a9097"
highlights.LineNr['fg'] = "#8088A8"
highlights.Visual['bg'] = palette.bg3
return highlights
end,
gamma = 0.92, -- brightness
styles = {
comments = { italic = true },
keywords = { italic = false },
identifiers = { italic = false },
functions = {},
variables = {},
},
},
},
{
'ribru17/bamboo.nvim',
config = function()
require('bamboo').setup { }
require('bamboo').load()
end,
},
{
dir = vim.fn.stdpath("config") .. "/themes/pina",
name = "pina",
},
{
'steve-lohmeyer/mars.nvim',
name = 'mars',
},
{ {
"ellisonleao/gruvbox.nvim", "ellisonleao/gruvbox.nvim",
name = "gruvbox", name = "gruvbox",
@@ -63,11 +27,12 @@ return {
}, },
}, },
{ {
-- even if not connected to a zz-this-box theme, keep this for nvim diffthis -- TODO: decide if i want rose-pine, remove from file if not
"rose-pine/neovim", "rose-pine/neovim",
name = "rose-pine", name = "rose-pine",
}, },
{ {
-- TODO: decide if i want tokyonight, remove from file if not
"folke/tokyonight.nvim", "folke/tokyonight.nvim",
opts = { opts = {
style = "night", -- "night", "storm", "moon", "day" style = "night", -- "night", "storm", "moon", "day"
@@ -81,4 +46,29 @@ return {
end, end,
}, },
}, },
{
"tiagovla/tokyodark.nvim",
lazy = false,
priority = 1000,
opts = {
custom_highlights = function(highlights, _palette)
highlights.Comment['fg'] = "#8a9097"
highlights.LineNr['fg'] = "#8088A8"
return highlights
end,
},
},
{
'ribru17/bamboo.nvim',
-- lazy = false,
-- priority = 1000,
config = function()
require('bamboo').setup { }
require('bamboo').load()
end,
},
{
dir = vim.fn.stdpath("config") .. "/themes/pina",
name = "pina",
},
} }

View File

@@ -1,6 +1,7 @@
return { return {
{ {
"nvim-treesitter/nvim-treesitter", "nvim-treesitter/nvim-treesitter",
branch = 'master',
lazy = false, lazy = false,
build = ":TSUpdate", build = ":TSUpdate",
config = function() config = function()
@@ -16,7 +17,7 @@ return {
ignore_install = { ignore_install = {
"csv", "csv",
}, },
indent = { enable = true }, -- indent = { enable = true }, -- TODO: do i want this?
highlight = { highlight = {
enable = true, -- `false` will disable the whole extension enable = true, -- `false` will disable the whole extension
disable = function(lang, buf) disable = function(lang, buf)
@@ -50,7 +51,26 @@ return {
-- branch = "master", -- branch = "master",
-- }, -- },
-- } -- }
-- vim.treesitter.language.register("templ", "templ") -- vim.treesitter.language.register("templ", "templ")
end end
}, },
-- {
-- -- TODO: decide if needed/wanted
-- "nvim-treesitter/nvim-treesitter-context",
-- after = "nvim-treesitter",
-- opts = {
-- enable = false, -- can enable/disable via manual command
-- multiwindow = false,
-- max_lines = 0, -- lines the window should span; x <= 0 means no limit
-- min_window_height = 10, -- min window height to enable; x <= 0 means no limit
-- line_numbers = true,
-- multiline_threshold = 40, -- max lines to show for a single context
-- trim_scope = 'outer', -- 'inner', 'outer'; discard lines if max_lines exceeded
-- mode = 'cursor', -- 'cursor', 'topline'; line used to calculate context
-- separator = "-", -- 1 char, like '-'; only shown when >= 2 lines above
-- zindex = 20, -- z-index of the context window
-- on_attach = nil, -- (fun(buf: integer): boolean); return false to disable attaching
-- },
-- },
} }

View File

@@ -1,30 +1,25 @@
vim.g.mapleader = " " vim.g.mapleader = " "
-- -- TODO: do i want these?
-- vim.opt.isfname:append("@-@")
-- vim.opt.guicursor = ""
vim.opt.hlsearch = true vim.opt.hlsearch = true
vim.opt.incsearch = true vim.opt.incsearch = true
vim.opt.termguicolors = true vim.opt.termguicolors = true
vim.opt.scrolloff = 2 vim.opt.scrolloff = 2
vim.opt.colorcolumn = '' -- default to off, see keymapping shortcut to toggle vim.opt.colorcolumn = "90"
vim.opt.signcolumn = "yes" -- "auto", "yes", "no", "number" vim.opt.signcolumn = "yes" -- "auto", "yes", "no", "number"
vim.opt.laststatus = 2 vim.opt.laststatus = 2
vim.opt.splitright = true vim.opt.splitright = true
vim.opt.splitbelow = true vim.opt.splitbelow = true
vim.opt.number = true vim.opt.nu = true
vim.opt.relativenumber = true vim.opt.relativenumber = true
vim.opt.cursorline = true vim.opt.cursorline = true
vim.opt.cursorlineopt = "both" vim.opt.cursorlineopt = "both"
vim.opt.smartindent = true vim.opt.smartindent = true
vim.opt.wrap = true vim.opt.wrap = true
vim.opt.textwidth = 0
vim.opt.wrapmargin = 0
vim.opt.fillchars = { eob = ' ' }
vim.opt.conceallevel = 0
vim.opt.spell = false
vim.opt.spelllang = 'en_us'
vim.opt.errorbells = false vim.opt.errorbells = false
vim.opt.visualbell = false vim.opt.visualbell = false

View File

@@ -15,7 +15,7 @@ function TmpBuff(split_opt)
vim.opt_local.buftype = "nofile" vim.opt_local.buftype = "nofile"
vim.opt_local.bufhidden = "hide" vim.opt_local.bufhidden = "hide"
vim.opt_local.swapfile = false vim.opt_local.swapfile = false
vim.cmd("file tmp_" .. os.date("%Y%m%d_%H%M%S") .. "_" .. math.random(471)) vim.cmd("file tmp_" .. os.date("%Y%m%d_%H%M%S"))
end end
function ReadShellCmd(command) function ReadShellCmd(command)
@@ -32,91 +32,3 @@ function ToggleTabsSpaces()
end end
end end
function ToggleLineNumbers()
if vim.opt.number:get() then
vim.opt.number = false
vim.opt.relativenumber = false
else
vim.opt.number = true
vim.opt.relativenumber = true
end
end
function ToggleColorColumn(column_string)
if #vim.opt.colorcolumn:get() == 0 then
vim.opt.colorcolumn = (column_string or '90')
else
vim.opt.colorcolumn = ''
end
end
function ToggleCursorLine()
vim.opt.cursorline = (not vim.opt.cursorline:get())
end
local function EnableWritingModeUiForCurrentWindow()
vim.opt_local.number = false
vim.opt_local.relativenumber = false
vim.opt_local.colorcolumn = ''
vim.opt_local.signcolumn = "no"
vim.opt_local.cursorline = false
vim.opt_local.winfixwidth = true
-- vim.opt_local.wrap = true -- TODO: needed?
vim.opt_local.laststatus = 0
end
function ToggleWritingMode()
if vim.g.writing_mode then
vim.g.writing_mode = false
vim.api.nvim_set_hl(0, 'WinSeparator', vim.g.wrmode_prev_hl_winsep or {})
vim.opt_local.winfixwidth = false
vim.cmd("wincmd l")
vim.api.nvim_win_close(0, false)
vim.cmd("wincmd h")
vim.api.nvim_win_close(0, false)
vim.opt_local.number = true
vim.opt_local.relativenumber = true
vim.opt_local.signcolumn = "yes"
vim.opt_local.cursorline = true
vim.api.nvim_set_hl(0, 'SpellCap', vim.g.wrmode_prev_hl_spellcap or {})
vim.opt_local.spell = false
-- vim.opt_local.wrap = true -- TODO: needed?
vim.opt_local.textwidth = 0
vim.opt_local.scrolloff = 2
vim.opt_local.formatoptions:remove('t')
vim.opt_local.laststatus = 0
-- vim.cmd("vertical resize")
else
vim.g.writing_mode = true
vim.g.wrmode_prev_hl_winsep = vim.api.nvim_get_hl(0, { name = 'WinSeparator' })
vim.api.nvim_set_hl(0, 'WinSeparator', { bg = 'none', fg = '#000000' })
local window_width = 72
local window_padding = math.max(math.floor((vim.o.columns - window_width) / 2), 1)
vim.cmd("vsplit")
local writing_pane = vim.api.nvim_get_current_win()
EnableWritingModeUiForCurrentWindow()
vim.opt_local.spell = true
vim.g.wrmode_prev_hl_spellcap = vim.api.nvim_get_hl(0, { name = 'SpellCap' })
vim.api.nvim_set_hl(0, 'SpellCap', {})
vim.opt_local.textwidth = window_width
vim.opt_local.scrolloff = 14
vim.opt_local.formatoptions:append('t')
vim.cmd("wincmd h")
TmpBuff('enew')
local padding_pane_left = vim.api.nvim_get_current_win()
EnableWritingModeUiForCurrentWindow()
vim.cmd("wincmd l")
TmpBuff('vnew')
local padding_pane_right = vim.api.nvim_get_current_win()
EnableWritingModeUiForCurrentWindow()
vim.api.nvim_set_current_win(writing_pane)
vim.api.nvim_win_set_width(padding_pane_left, window_padding)
vim.api.nvim_win_set_width(padding_pane_right, window_padding)
vim.api.nvim_win_set_width(writing_pane, window_width)
end
end

View File

@@ -1,2 +0,0 @@
# this file is just here to easily allow committing this directory to git
# the imported themes are copied here when ./copy_dotfiles.sh is run

View File

@@ -15,6 +15,5 @@
"showInlineTitle": false, "showInlineTitle": false,
"readableLineLength": true, "readableLineLength": true,
"strictLineBreaks": true, "strictLineBreaks": true,
"livePreview": false, "livePreview": false
"propertiesInDocument": "hidden"
} }

View File

@@ -1,8 +1,8 @@
{ {
"theme": "obsidian", "theme": "obsidian",
"accentColor": "#2f930e", "accentColor": "#2f930e",
"baseFontSize": 20, "baseFontSize": 18,
"enabledCssSnippets": [], "enabledCssSnippets": [],
"translucency": false, "translucency": false,
"cssTheme": "" "cssTheme": "Obsidian gruvbox"
} }

View File

@@ -1,4 +1,7 @@
{ {
"markdown:toggle-preview": [
{ "modifiers": [ "Ctrl", "Shift" ], "key": "E" }
],
"switcher:open": [ "switcher:open": [
{ "modifiers": [ "Ctrl" ], "key": "F" } { "modifiers": [ "Ctrl" ], "key": "F" }
], ],
@@ -8,16 +11,10 @@
"app:toggle-right-sidebar": [ "app:toggle-right-sidebar": [
{ "modifiers": [ "Ctrl", "Shift" ], "key": "F" } { "modifiers": [ "Ctrl", "Shift" ], "key": "F" }
], ],
"markdown:toggle-preview": [
{ "modifiers": [ "Ctrl", "Shift" ], "key": "E" }
],
"editor:toggle-readable-line-length": [ "editor:toggle-readable-line-length": [
{ "modifiers": [ "Ctrl", "Shift" ], "key": "R" } { "modifiers": [ "Ctrl", "Shift" ], "key": "R" }
], ],
"file-explorer:reveal-active-file": [ "file-explorer:reveal-active-file": [
{ "modifiers": [ "Ctrl", "Shift" ], "key": "N" } { "modifiers": [ "Ctrl", "Shift" ], "key": "N" }
],
"app:open-settings": [
{ "modifiers": [ "Ctrl", "Shift" ], "key": "O" }
] ]
} }

View File

@@ -1,15 +0,0 @@
# ref: built-in keywords, https://github.com/koekeishiya/skhd/issues/1
# vim-like left/right movements for navigating tabs
cmd - h : $(which skhd) -k "ctrl + shift - tab"
cmd - l : $(which skhd) -k "ctrl - tab"
# shortcuts to open programs
cmd - return : open -n -a kitty.app
cmd + shift - b : open -n -a Brave\ Browser.app
cmd - s : open -n -a kitty.app --args --override macos_quit_when_last_window_closed=yes htop
cmd - b : open -n -a kitty.app --args --override macos_quit_when_last_window_closed=yes bookmark-find
# shortcuts to scripts/procs
# cmd - zxcv : path/to/script.sh

View File

@@ -4,14 +4,15 @@ tmux_omitted_dirs=(
$DIR_DEV $DIR_DEV
$DIR_GIT_PROJECTS $DIR_GIT_PROJECTS
) )
[[ ! ${tmux_omitted_dirs[(re)$(pwd)]} ]] && { [[ ! ${tmux_omitted_dirs[(re)$(pwd)]} ]] && {
tmux new-window -d -n $EDITOR tmux new-window -d -n $EDITOR
tmux send-keys -t :$EDITOR "$EDITOR ." c-M tmux send-keys -t :$EDITOR "$EDITOR ." c-M
tmux new-window -d -n debug tmux new-window -d -n daa
tmux new-window -d -n agt
tmux new-window -d -n procs tmux new-window -d -n procs
tmux rename-window cmd tmux rename-window cmd
tmux send-keys -t :cmd "clear; [[ -d .git ]] && git status" c-M tmux send-keys -t :cmd "clear; [[ -d .git ]] && git status" c-M
} }
clear clear

View File

@@ -1,4 +0,0 @@
tmux rename-window inbox
tmux send-keys -t :inbox 'cd "$DIR_INBOX"; clear; ls' c-M
clear

View File

@@ -0,0 +1 @@
/Users/david/.config/z-this-box/themes/.current-theme/tmux.conf

View File

@@ -1,19 +1,11 @@
# set -g default-terminal "tmux-255color" # TODO: messes up backspace render, fix
set -s escape-time 0 set -s escape-time 0
# replace default prefix and bind-key
unbind C-b unbind C-b
set-option -g prefix C-Space set-option -g prefix C-Space
bind-key C-Space send-prefix bind-key C-Space send-prefix
# settings for status line and window list
set-option -g base-index 1
set-option -g status-position 'bottom'
set-option -g status-left-length 28
set-option -Fg status-right '#{host} | %Y-%m-%d %H:%M' # or maybe host_short
# theme settings
set-option -g status-style "bg=default fg=default" # default, theme files can overwrite
source-file "$XDG_CONFIG_HOME/tmux/theme.conf" source-file "$XDG_CONFIG_HOME/tmux/theme.conf"
set -g base-index 1
# unbind keys # unbind keys
unbind-key f; unbind-key C-f; unbind-key s; unbind-key C-s unbind-key f; unbind-key C-f; unbind-key s; unbind-key C-s
@@ -46,7 +38,6 @@ bind-key C-f run-shell "tmux neww $DIR_SCRIPTS/tmux-session-init"
bind-key C-s choose-session bind-key C-s choose-session
bind-key S choose-window bind-key S choose-window
bind-key C-h run-shell "tmux neww $DIR_SCRIPTS/tmux-session-init hub" bind-key C-h run-shell "tmux neww $DIR_SCRIPTS/tmux-session-init hub"
bind-key C-j run-shell "tmux neww $DIR_SCRIPTS/tmux-session-init notes" \; switch-client -t "notes:2"
bind-key -r C-l switch-client -l bind-key -r C-l switch-client -l
bind-key -r C-o last-window bind-key -r C-o last-window
bind-key -r C-n next-window bind-key -r C-n next-window

View File

View File

@@ -1 +1,48 @@
[ -r "$HOME/.config/profile" ] && . $HOME/.config/profile # default programs
export BROWSER='brave'
export EDITOR='nvim'
export TERMINAL='kitty'
# env vars used for my organization structure
export DIR_HOME_BOX="$HOME/dbox"
export DIR_NOTES="$DIR_HOME_BOX/notes"
export DIR_MUSIC="$DIR_HOME_BOX/music/listen"
export DIR_DEV="$HOME/dev"
export DIR_GIT_PROJECTS="$DIR_DEV/git"
# util dirs; do not change without checking impact on xdg base dirs
export DIR_LOCAL="$HOME/.local"
export DIR_BIN="$DIR_LOCAL/bin"
export DIR_SCRIPTS="$DIR_LOCAL/scripts"
export DIR_TMP="$DIR_LOCAL/tmp"
export DIR_USER_OPT="$HOME/opt"
export DIR_USER_LIB="$DIR_LOCAL/lib"
# xdg base directory vars
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_CACHE_HOME="$HOME/.cache"
export XDG_DATA_HOME="$DIR_LOCAL/share"
export XDG_STATE_HOME="$DIR_LOCAL/state"
export XDG_DATA_DIRS="/usr/local/share:/usr/share"
#export XDG_CONFIG_DIRS="/etc/xdg" # TODO: does this work on macOS?
# directory for theme/style stuff
export DIR_THEME_SETTINGS="$XDG_CONFIG_HOME/zz-this-box/themes"
# zsh
export ZDOTDIR="$XDG_CONFIG_HOME/zsh" # may already be set, set anyway
# git
export GIT_EDITOR="$EDITOR"
# obsidian
export OBSIDIAN_WORKSPACES_TO_CONFIGURE=("$DIR_NOTES")
# reaper
export DIR_REAPER_PORTABLE_SHARED="$DIR_USER_OPT/reaper-portable/shared"
export DIR_REAPER_PORTABLE_LINUX="$DIR_USER_OPT/reaper-portable/linux"
export DIR_REAPER_PORTABLE_MACOS="$DIR_USER_OPT/reaper-portable/macos"
# clean-up of home dir
export __CF_USER_TEXT_ENCODING="0x0:0x0" # TODO: does this actually accomplish anything?

View File

@@ -1,5 +1,40 @@
[ -r "$HOME/.config/profile" ] && . "$HOME/.config/profile" # use vim-like control in shell
[ -r "$XDG_CONFIG_HOME/rc" ] && . "$XDG_CONFIG_HOME/rc" set -o vi
# path updates
export PATH=$DIR_BIN:$DIR_SCRIPTS:$PATH:$XDG_DATA_HOME
export PATH=$PATH:/opt/homebrew/opt/ccache/libexec:/opt/homebrew/bin
# shortcuts for common commands
alias 3e='echo;echo;echo'
alias 12e='3e;3e;3e;3e'
alias cl='clear; '
alias cls='clear;ls'
# shortcuts for executables
alias n='nvim'
alias nv='nvim'
alias ths='theme-set'
alias thw='theme-update-wallpaper'
alias tmi='tmux-session-init'
# executable overrides
alias ls='ls -F'
# misc commands
alias cal='khal calendar'
alias pdt='ping -c 2 drinkingtea.net'
alias ppw='ping -c 2 pinewoods.xyz'
alias weather='curl "wttr.in/dfw?2&F"'
alias shrug='echo "¯\\_(ツ)_/¯"'
alias journal="cd $DIR_HOME_BOX; $EDITOR .current-journal"
alias ncspotkeys="$EDITOR $DIR_GIT_PROJECTS/other/ncspot/doc/users.md"
# source extensions and system-specific files
[[ -a "$ZDOTDIR/zsh-general-dev" ]] && source "$ZDOTDIR/zsh-general-dev"
[[ -a "$ZDOTDIR/zsh-life-system" ]] && source "$ZDOTDIR/zsh-life-system"
# dev/lang setup
[[ -n $(command -v mise) ]] && eval "$(mise activate zsh)"
export DEVKITARM=/opt/devkitpro/devkitARM
# overwrite PS1 here, since zsh decided to use different special chars
export PS1="%n@%m %1~ %# "

View File

@@ -0,0 +1,24 @@
# set env vars, path updates, etc
[[ -a $HOME/.local-box-vars ]] && source $HOME/.local-box-vars
# login shortcuts
alias assume="source assume"
alias login-aws='aws sso login --profile'
alias login-aws-id-list="grep sso_account_id $HOME/.aws/config"
# git stuff
alias gfo='git fetch origin'
alias gfl='git fetch origin; git log'
alias gpo='git pull origin'
alias gppo='git push origin'
alias gst='git status'
alias git-push-to-temp='git branch -D temp; git checkout -b temp; git push origin temp -uf; git checkout -'
alias gptemp='git-push-to-temp'
# code/test/linter run and build commands
alias bel='bundle exec standardrb'
alias bet='bundle exec rspec'
alias lintjs='npx prettier --write'
alias prl='poetry run black'
alias prt='poetry run pytest'

View File

@@ -0,0 +1,7 @@
# life system shortcuts
alias life-system="cd $DIR_HOME_BOX/life/system; clear; ls"
alias goals="clear; sed -n 2,7p $DIR_HOME_BOX/life/system/direction/goals/current-goals.txt"
alias note="cd $DIR_HOME_BOX/life/system/tasks/inbox; $EDITOR"
alias todo="cd $DIR_HOME_BOX/life/system/tasks; $EDITOR +5 todo.txt"
alias budget="open $DIR_HOME_BOX/life/finance/budget/.current"

View File

@@ -1,2 +1,5 @@
set-window-option -g window-style bg=default # transparency set -g status-style 'bg=#111111 fg=#22cc00'
set-option -g status-style 'bg=default fg=#98971a'
# transparency
set-window-option -g window-style bg=default
# set-option -g status-style bg=default

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

View File

@@ -1,2 +0,0 @@
set-window-option -g window-style bg=default # transparency
set-option -g status-style 'bg=default fg=#549e6a'

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

View File

@@ -1,3 +0,0 @@
return {
colorscheme_name = 'mars'
}

View File

@@ -1,2 +0,0 @@
set-window-option -g window-style bg=default # transparency
set-option -g status-style 'bg=default fg=#e07b5f'

View File

@@ -0,0 +1,5 @@
set -g status-style 'bg=#549E6A fg=#000000'
# transparency
set-window-option -g window-style bg=default
# set-option -g status-style bg=default

Some files were not shown because too many files have changed in this diff Show More