Skip to content

My personal quirks quantified in text form

License

Notifications You must be signed in to change notification settings

fortes/dotfiles

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dotfiles

This is only public so I can easily share it across machines. There is probably nothing of interest for you here ... or is there?

My usage is mostly terminal-based, via Crostini on Chromebook, WSL2 on Windows, and (rarely) MacOS terminal. Making heavy use of:

  • Bash / Tmux
  • FZF / pistol / fd / ripgrep
  • Neovim
  • cmus

Graphical sections are Linux-only, and use:

  • sway / swaync / waybar
  • WezTerm
  • Firefox

On MacOS, use:

  • WezTerm
  • Rectangle

Letting me own your machine

git clone https://github.com/fortes/dotfiles.git --branch debian-bookworm
./dotfiles/script/setup

Post-Setup

Once you've run setup, you'll still have to do the following universal manual steps (see platform-specific sections for more):

  1. Generate this machine's SSH keys:

    ssh-keygen -t ed25519 -C "$(hostname)"

    Then add the key into GitHub and wherever else

  2. Add any additional ssh keys into ~/.ssh

    Might need to extract out of 1Password, once downloaded will have the password removed. To restore, do

    ssh-keygen -p -f KEY_FILE

    Alternatively, try using the command line op to get the keys:

    op item get SSH_KEY_ITEM_ID --fields "private key" --reveal > ~/.ssh/xxx &&
    op item get SSH_KEY_ITEM_ID --fields "public key" > ~/.ssh/xxx.pub
    # Private key has quotes around it, so need to remove them before this next step
    ssh-keygen -p -f ~/.ssh/xxx
    chmod 400 ~/.ssh/xxx*
  3. Authorize your public keys on the new machine:

    ssh-import-id gh:fortes
  4. Add your favorite servers into .ssh/config.local

  5. Setup .gitconfig.local:

    [user]
      name = Your Name
      email = [email protected]
    

    If you need to tweak any config based upon the directory path, do something like

    [includeIf "gitdir:~/src/company/"]
      path = ~/.config/git/company.gitconfig
    
  6. Log into GitHub Copilot / Claude Code

    # GitHub CLI client
    gh auth login
    # Install the Copilot extension
    gh extension install github/gh-copilot
    # May also need to update the Copilot extensions
    gh extension upgrade gh-copilot
    
    # Launch Claude Code, which will take you through the flow
    claude
    
    # Copilot Vim extension by doing `:Copilot setup`
    # Make sure `ENABLE_GITHUB_COPILOT` variable is set in `~/.profile.local`
  7. Log into Spotify via ncspot and psst

  8. Add keys for llm via llm keys set xxx (or copy over from another machine from ~/.config/io.datasette.llm)

Ignoring changes to a file

git update-index --skip-worktree ./symlinks/npmrc

To make changes in the future:

git update-index --no-skip-worktree ./symlinks/npmrc

Firefox

  • Log into sync accounts, extensions should automatically install
  • Run dotfiles/script/stow manually to make sure to link user.js for Firefox now that a profile has been created
  • Configure uBlock Origin
    • Enable in private mode
    • Enable cloud storage mode. Should do the following for you, but doesn't always work:

Chrome

  • Log into sync accounts, extensions should automatically install

Debian

  • Run browser setup above

  • Can install some optional apps via scripts:

    • dotfiles/script/setup_kvm
    • dotfiles/script/setup_signal
    • dotfiles/script/setup_zerotier
    • dotfiles/script/setup_zoom
  • Depending on the machine, you may need pavucontrol in order to unmute your audio output via GUI. ** Alternatively, find the name of the desired output via pacmd list-sinks then run pacmd set-default-sink $SINK_NAME and make sure to unmute via pacmd set-sink-mute [name] 0

  • If running multiple monitors, need to configure Wacom tablet to only use a specific monitor:

    input "type:tablet_tool" {
      map_to_output DP-1
    }
    
  • For High DPI displays, create a ~/.Xresources.local file with the proper Xft.dpi (see .Xresources for example)

  • To mount SMB shares on boot, add something like the following to /etc/fstab:

    //machine-name/share /media/share cifs nofail,user=,password=,ro	0	0
    

Chromebook

  • Do setup via phone, should copy over everything
  • Set local device password and PIN for quicker local login
  • Extensions, settings, and play store apps should automatically sync
    • Night light might need to be manually set up?
  • Chrome Extension Setup
    • 1Password: Login to account
    • uBlock Origin Lite: Set default config
  • Enable Linux, choose a larger disk size (20GB fine?). Double check which debian version it is via lsb_release -a (should be bookworm)
  • Run setup_machine
  • Share Downloads folder with Linux, then symlink via ln -s /mnt/chromeos/MyFiles/Downloads ~/downloads
  • Change terminal font by going to chrome-untrusted://terminal/html/nassh_preferences_editor.html
    • Add 'DejaVu Sans Mono Nerd' to the beginning of "Text Font Family"
    • Add the following to custom CSS:
      @font-face {
        font-family: "DejaVu Sans Mono Nerd";
        src: url(https://raw.githubusercontent.com/ryanoasis/nerd-fonts/master/patched-fonts/DejaVuSansMono/Regular/DejaVuSansMNerdFontMono-Regular.ttf);
        font-weight: normal;
        font-style: normal;
      }

Windows

  • Run all Windows Updates
  • Install machine-specific drivers, update BIOS, etc
  • Uninstall Teams, and other pre-installed unwanted things
  • Enable BitLocker
  • Adjust taskbar settings
  • Adjust settings for Snipping tool, make sure to save to Downloads folder
  • Disable browser tabs from being in Alt-Tab list (Settings -> System -> Multitasking)
  • Disable "When I snap a window, suggest what I can snap next to it" in System -> Multitasking
  • Remove OneDrive and Microsoft Edge from startup items
  • Turn on clipboard history by hitting Windows-V
  • Set Windows Terminal as default terminal application
    • Download JetBrains Mono and set it as the default font in Windows Terminal
    • Choose reasonable default colors for Windows Terminal
  • Enable Hyper-V (required for WSL, useful for VMs)
    • Search for hyper-v in start menu, will show up in obscure UI for settings
  • Enable Windows Sandbox
  • Accept MS Store terms for winget, running winget list should prompt
  • Get WinGet via MS Store via App Installer
    • winget install AgileBits.1Password
    • winget install Mozilla.Firefox
    • winget install OpenWhisperSystems.Signal
  • Depending on machine setup, the following might be of use as well
    • winget install Google.Chrome.Dev
    • winget install Microsoft.MouseandKeyboardCenter
    • winget install Microsoft.PowerToys
    • winget install Microsoft.VisualStudioCode
    • winget install Plex.PlexAmp
    • winget install VideoLAN.VLC
    • winget install Zoom.Zoom
  • If gaming, also install:
    • winget install Blizzard.BattleNet
    • winget install Valve.Steam
  • WSL
    • [Optional] Allocate more memory for WSL VM by creating/adding to %UserProfile%\.wslconfig:
      [wsl2]
      memory=16G
      
    • [Optional] Enable systemd for VM by creating/adding to /etc/wsl.conf:
      [boot]
      systemd=true
      
    • Install Windows Subsystem for Linux via running wsl --install Debian (in an admin terminal)
    • Enter the WSL2 container and run sudo apt update && sudo apt dist-upgrade
    • Clone this repo and run ~/dotfiles/setup_machine
    • [Optional] Set Debian as the default terminal
    • To auto-mount network shares, do something like this in /etc/fstab (drvfs special for WSL):
      \\machine-name\share	/mnt/machine-share	drvfs	defaults,ro,noatime,uid=1000,gid=1000,umask=022	0	0
      
  • 1Password
    • Sign into account
    • Disable global keyboard shortcuts
  • Firefox
    • Sign into account
  • VS Code
    • Sign in via GitHub to sync
    • (optional) Sign into GitHub Co-pilot
    • Install extensions (in case sync doesn't work)
      • Copilot
      • SSH
      • WSL
      • vim
  • Steam & Battle.net
    • Sign in and install games locally

Mac

Still a work in progress, but kinda works

  • Set up TouchID, Apple account if required
  • Remove all the junk from the dock
  • Enable Night Shift and set to Sunset to Sunrise
  • Turn off Natural Scrolling
  • Increase keyboard repeat rate to max, delay to min
  • Change Globe key to Control dictation
  • Disable iCloud syncing of all but Find My Mac & Safari
  • Set terminal.app profile, send option as meta key
  • May want to install command line tools manually in order to get git: xcode-select --install
  • Run setup_mac
  • Make sure keys repeat properly in VSCode: defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool false
    • For other apps that have this issue, do the following:
      # Get the app id
      osascript -e 'id of app "Cursor"'
      # Outputs something like `com.todesktop.xxxxx`
      defaults write -g com.todesktop.xxxxx ApplePressAndHoldEnabled -bool false
  • terminal.app sucks with colors, switch to WezTerm and pin it in the dock
  • Make sure Rectangle.app starts on login
  • Install the 1Password extension in Safari (others should sync automatically)

Docker

Images are built with some frequency, via CI.

docker run -it --rm --name dotfiles ghcr.io/fortes/dotfiles:latest

To share files, use -v /path/to/host:/path/to/container, for example if sharing the ~/src folder:

docker run -it --rm --name dotfiles -v ~/src:/home/fortes/src dotfiles

Will need to manually start neovim to install plugins. Some other things may or may not work, we'll have to test to find out!

Local building

docker build -t dotfiles .

Then follow normal pattern, just use the local image name like so:

docker run -it --rm --name dotfiles dotfiles

Other Notes

Finding packages in backports

Since you have to manually install packages from backports, can be tricky to know what is available. To find out, run the following:

apt-cache policy $(dpkg --list | cut -d' ' -f3)

This will list out all the packages installed, then need to search through to manually check which have backports available (pipe to nvim -).

Known Issues

Mac

  • Firefox and VSCode casks get ornery and no longer update via brew, currently install once via script, but updates have to happen manually. Need to investigate further.

Linux

  • Media keys on Microsoft Ergonomic Keyboard sometimes aren't detected, disconnect/reconnect USB may be enough to fix?
  • Mouse wheel speed also sometimes goes to a better default after disconnect/reconnect
  • 1Password can't manage to save authentication, dies trying to talk to keychain via dbus (for some reason, looking for org.kde.kwalletd5 and ignores gnome keyring)
  • 1password GUI not installing correctly, something wrong w/ bash logic

TODO/Future Improvements

  • Set up network share in Crostini
  • Look into publishing a docker container via GitHub actions
  • exa is now unmaintained, need to either go to eza or lsd
  • Move from docker to podman
  • Get devcontainer setup for this repo
  • Get remote VSCode settings synced up as well, currently in ~/.vscode-server/data/Machine
  • Figure out how to get M1 CI running to check builds
  • Figure out what Windows 11 tweaks & usability improvements to copy
  • Get things working in GitHub codespaces, which seems to use Ubuntu 20.04.06 LTS underneath. Currently fails silently trying to install backports sources. Troubleshooting instructions can be helpful
  • Figure out how to use Hammerspoon to have media keys control cmus, instead of launching iTunes (gross)
  • Try switching from docker to podman
  • Look into glances and btop
  • wshowkeys or similar for showing keypresses for screencasts, etc
  • Figure out Lutris / Wine / Proton for Linux gaming
  • Auto-publish Docker images
  • Better colorschemes, coordinated everywhere
  • Figure out how to get USB-C DP Alt devices to work, might need displaylink-debian or at the very least evdi-dkms
  • Get Nvidia Drivers drivers with a reasonable resolution for linux console
    • Install nvidia-detect and run to check support
    • Install nvidia-driver
    • Get better resolution when booted into console by adding GRUB_GFXMODE=auto in /etc/default/grub, then run sudo update-grub
  • Learn from Wayland Apps in Wireguard Docker Containers and see if anything worth copying
  • Dotfile managers might have something better than GNU stow

License

This repository is licensed under the BSD 3-Clause License. See the LICENSE file for more information.