{"id":17602498,"url":"https://github.com/fortes/dotfiles","last_synced_at":"2025-07-20T01:32:17.668Z","repository":{"id":8042600,"uuid":"9452923","full_name":"fortes/dotfiles","owner":"fortes","description":"My personal quirks quantified in text form","archived":false,"fork":false,"pushed_at":"2025-05-28T00:19:22.000Z","size":1372,"stargazers_count":72,"open_issues_count":1,"forks_count":8,"subscribers_count":4,"default_branch":"debian-bookworm","last_synced_at":"2025-06-02T18:01:57.965Z","etag":null,"topics":["cmus","dotfiles","rofi","swaywm","tmux-conf","vimrc","wezterm-config"],"latest_commit_sha":null,"homepage":"https://fortes.com","language":"Shell","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fortes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2013-04-15T16:20:34.000Z","updated_at":"2025-06-02T15:37:19.000Z","dependencies_parsed_at":"2024-02-12T23:23:49.896Z","dependency_job_id":"8237155c-d10d-4372-8a2d-d18d0ee8e642","html_url":"https://github.com/fortes/dotfiles","commit_stats":{"total_commits":1603,"total_committers":3,"mean_commits":534.3333333333334,"dds":"0.0012476606363068798","last_synced_commit":"447a77e650335f1a7c46638d0d67e3546da2f36f"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/fortes/dotfiles","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fortes%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fortes%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fortes%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fortes%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fortes","download_url":"https://codeload.github.com/fortes/dotfiles/tar.gz/refs/heads/debian-bookworm","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fortes%2Fdotfiles/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266053826,"owners_count":23869496,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cmus","dotfiles","rofi","swaywm","tmux-conf","vimrc","wezterm-config"],"created_at":"2024-10-22T13:08:34.167Z","updated_at":"2025-07-20T01:32:17.657Z","avatar_url":"https://github.com/fortes.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dotfiles\n\nThis is only public so I can easily share it across machines. There is probably nothing of interest for you here ... or is there?\n\nMy usage is mostly terminal-based, via Crostini on Chromebook, WSL2 on Windows, and (rarely) MacOS terminal. Making heavy use of:\n\n- Bash / Tmux\n- FZF / pistol / fd / ripgrep\n- Neovim\n- cmus\n\nGraphical sections are Linux-only, and use:\n\n- sway / swaync / waybar\n- WezTerm\n- Firefox\n\nOn MacOS, use:\n\n- WezTerm\n- Rectangle\n\n## Letting me own your machine\n\n```sh\ngit clone https://github.com/fortes/dotfiles.git --branch debian-bookworm\n./dotfiles/script/setup\n```\n\n## Post-Setup\n\nOnce you've run setup, you'll still have to do the following universal manual steps (see platform-specific sections for more):\n\n1. Generate this machine's SSH keys:\n\n   ```sh\n   ssh-keygen -t ed25519 -C \"$(hostname)\"\n   ```\n\n   Then add the key into GitHub and wherever else\n\n2. Add any additional ssh keys into `~/.ssh`\n\n   Might need to extract out of 1Password, once downloaded will have the password removed. To restore, do\n\n   ```sh\n   ssh-keygen -p -f KEY_FILE\n   ```\n\n   Alternatively, try using the command line `op` to get the keys:\n\n   ```sh\n   op item get SSH_KEY_ITEM_ID --fields \"private key\" --reveal \u003e ~/.ssh/xxx \u0026\u0026\n   op item get SSH_KEY_ITEM_ID --fields \"public key\" \u003e ~/.ssh/xxx.pub\n   # Private key has quotes around it, so need to remove them before this next step\n   ssh-keygen -p -f ~/.ssh/xxx\n   chmod 400 ~/.ssh/xxx*\n   ```\n\n3. Authorize your public keys on the new machine:\n\n   ```sh\n   ssh-import-id gh:fortes\n   ```\n\n4. Add your favorite servers into `.ssh/config.local`\n\n5. Setup `.gitconfig.local`:\n\n   ```\n   [user]\n     name = Your Name\n     email = xyz@abc.com\n   ```\n\n   If you need to tweak any config based upon the directory path, do something like\n\n   ```\n   [includeIf \"gitdir:~/src/company/\"]\n     path = ~/.config/git/company.gitconfig\n   ```\n\n6. Log into GitHub Copilot / Claude Code\n\n   ```sh\n   # GitHub CLI client\n   gh auth login\n   # Install the Copilot extension\n   gh extension install github/gh-copilot\n   # May also need to update the Copilot extensions\n   gh extension upgrade gh-copilot\n\n   # Launch Claude Code, which will take you through the flow\n   claude\n\n   # Copilot Vim extension by doing `:Copilot setup`\n   # Make sure `ENABLE_GITHUB_COPILOT` variable is set in `~/.profile.local`\n   ```\n\n7. Log into Spotify via `ncspot` and `psst`\n\n8. Add keys for `llm` via `llm keys set xxx` (or copy over from another machine from `~/.config/io.datasette.llm`)\n\n## Ignoring changes to a file\n\n```sh\ngit update-index --skip-worktree ./symlinks/npmrc\n```\n\nTo make changes in the future:\n\n```sh\ngit update-index --no-skip-worktree ./symlinks/npmrc\n```\n\n### Firefox\n\n- Log into sync accounts, extensions should automatically install\n- Run `dotfiles/script/stow` manually to make sure to link `user.js` for Firefox now that a profile has been created\n- Configure uBlock Origin\n  - Enable in private mode\n  - Enable cloud storage mode. Should do the following for you, but doesn't always work:\n    - Enable annoyances filters\n    - Add [Bypass paywalls clean filter](https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters)\n\n### Chrome\n\n- Log into sync accounts, extensions should automatically install\n\n### Debian\n\n- Run browser setup above\n- Can install some optional apps via scripts:\n  - `dotfiles/script/setup_kvm`\n  - `dotfiles/script/setup_signal`\n  - `dotfiles/script/setup_zerotier`\n  - `dotfiles/script/setup_zoom`\n- Depending on the machine, you may need `pavucontrol` in order to unmute your audio output via GUI.\n  \\*\\* 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`\n- If running multiple monitors, need to configure Wacom tablet to only use a specific monitor:\n  ```\n  input \"type:tablet_tool\" {\n    map_to_output DP-1\n  }\n  ```\n- For High DPI displays, create a `~/.Xresources.local` file with the proper `Xft.dpi` (see `.Xresources` for example)\n- To mount SMB shares on boot, add something like the following to `/etc/fstab`:\n\n  ```\n  //machine-name/share /media/share cifs nofail,user=,password=,ro\t0\t0\n  ```\n\n### Chromebook\n\n- Do setup via phone, should copy over everything\n- Set local device password and PIN for quicker local login\n- Extensions, settings, and play store apps should automatically sync\n  - Night light might need to be manually set up?\n- Chrome Extension Setup\n  - 1Password: Login to account\n  - uBlock Origin Lite: Set default config\n- Enable Linux, choose a larger disk size (20GB fine?). Double check which debian version it is via `lsb_release -a` (should be `bookworm`)\n- Run `setup_machine`\n- Share `Downloads` folder with Linux, then symlink via `ln -s /mnt/chromeos/MyFiles/Downloads ~/downloads`\n- Change terminal font by going to `chrome-untrusted://terminal/html/nassh_preferences_editor.html`\n  - Add `'DejaVu Sans Mono Nerd'` to the beginning of \"Text Font Family\"\n  - Add the following to custom CSS:\n    ```css\n    @font-face {\n      font-family: \"DejaVu Sans Mono Nerd\";\n      src: url(https://raw.githubusercontent.com/ryanoasis/nerd-fonts/master/patched-fonts/DejaVuSansMono/Regular/DejaVuSansMNerdFontMono-Regular.ttf);\n      font-weight: normal;\n      font-style: normal;\n    }\n    ```\n\n### Windows\n\n- Run all Windows Updates\n- Install machine-specific drivers, update BIOS, etc\n- Uninstall Teams, and other pre-installed unwanted things\n- Enable BitLocker\n- Adjust taskbar settings\n- Adjust settings for Snipping tool, make sure to save to `Downloads` folder\n- Disable browser tabs from being in Alt-Tab list (Settings -\u003e System -\u003e Multitasking)\n- Disable \"When I snap a window, suggest what I can snap next to it\" in System -\u003e Multitasking\n- Remove OneDrive and Microsoft Edge from startup items\n- Turn on clipboard history by hitting Windows-V\n- Set Windows Terminal as default terminal application\n  - Download [JetBrains Mono](https://www.jetbrains.com/lp/mono/) and set it as the default font in Windows Terminal\n  - Choose reasonable default colors for Windows Terminal\n- Enable Hyper-V (required for WSL, useful for VMs)\n  - Search for `hyper-v` in start menu, will show up in obscure UI for settings\n- Enable [Windows Sandbox](https://learn.microsoft.com/en-us/windows/security/threat-protection/windows-sandbox/windows-sandbox-overview)\n- Accept MS Store terms for `winget`, running `winget list` should prompt\n- Get WinGet via MS Store via `App Installer`\n  - `winget install AgileBits.1Password`\n  - `winget install Mozilla.Firefox`\n  - `winget install OpenWhisperSystems.Signal`\n- Depending on machine setup, the following might be of use as well\n  - `winget install Google.Chrome.Dev`\n  - `winget install Microsoft.MouseandKeyboardCenter`\n  - `winget install Microsoft.PowerToys`\n  - `winget install Microsoft.VisualStudioCode`\n  - `winget install Plex.PlexAmp`\n  - `winget install VideoLAN.VLC`\n  - `winget install Zoom.Zoom`\n- If gaming, also install:\n  - `winget install Blizzard.BattleNet`\n  - `winget install Valve.Steam`\n- WSL\n  - [Optional] Allocate more memory for WSL VM by creating/adding to `%UserProfile%\\.wslconfig`:\n    ```\n    [wsl2]\n    memory=16G\n    ```\n  - [Optional] Enable `systemd` for VM by creating/adding to `/etc/wsl.conf`:\n    ```\n    [boot]\n    systemd=true\n    ```\n  - Install `Windows Subsystem for Linux` via running `wsl --install Debian` (in an admin terminal)\n  - Enter the WSL2 container and run `sudo apt update \u0026\u0026 sudo apt dist-upgrade`\n  - Clone this repo and run `~/dotfiles/setup_machine`\n  - [Optional] Set Debian as the default terminal\n  - To auto-mount network shares, do something like this in `/etc/fstab` (`drvfs` special for WSL):\n    ```\n    \\\\machine-name\\share\t/mnt/machine-share\tdrvfs\tdefaults,ro,noatime,uid=1000,gid=1000,umask=022\t0\t0\n    ```\n- 1Password\n  - Sign into account\n  - Disable global keyboard shortcuts\n- Firefox\n  - Sign into account\n- VS Code\n  - Sign in via GitHub to sync\n  - (optional) Sign into GitHub Co-pilot\n  - Install extensions (in case sync doesn't work)\n    - Copilot\n    - SSH\n    - WSL\n    - vim\n- Steam \u0026 Battle.net\n  - Sign in and install games locally\n\n### Mac\n\nStill a work in progress, but kinda works\n\n- Set up TouchID, Apple account if required\n- Remove all the junk from the dock\n- Enable _Night Shift_ and set to _Sunset to Sunrise_\n- Turn off Natural Scrolling\n- Increase keyboard repeat rate to max, delay to min\n- Change Globe key to Control dictation\n- Disable iCloud syncing of all but Find My Mac \u0026 Safari\n- Set `terminal.app` profile, send option as meta key\n- May want to install command line tools manually in order to get `git`: `xcode-select --install`\n- Run `setup_mac`\n- Make sure keys repeat properly in VSCode: `defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool false`\n  - For other apps that have this issue, do the following:\n    ```sh\n    # Get the app id\n    osascript -e 'id of app \"Cursor\"'\n    # Outputs something like `com.todesktop.xxxxx`\n    defaults write -g com.todesktop.xxxxx ApplePressAndHoldEnabled -bool false\n    ```\n- `terminal.app` sucks with colors, switch to WezTerm and pin it in the dock\n- Make sure `Rectangle.app` starts on login\n- Install the 1Password extension in Safari (others should sync automatically)\n\n### Docker\n\nImages are built with some frequency, via CI.\n\n```sh\ndocker run -it --rm --name dotfiles ghcr.io/fortes/dotfiles:latest\n```\n\nTo share files, use `-v /path/to/host:/path/to/container`, for example if sharing the `~/src` folder:\n\n```sh\ndocker run -it --rm --name dotfiles -v ~/src:/home/fortes/src dotfiles\n```\n\nWill need to manually start neovim to install plugins. Some other things may or may not work, we'll have to test to find out!\n\n#### Local building\n\n```sh\ndocker build -t dotfiles .\n```\n\nThen follow normal pattern, just use the local image name like so:\n\n```sh\ndocker run -it --rm --name dotfiles dotfiles\n```\n\n## Other Notes\n\n### Finding packages in backports\n\nSince you have to manually install packages from backports, can be tricky to know what is available. To find out, run the following:\n\n```sh\napt-cache policy $(dpkg --list | cut -d' ' -f3)\n```\n\nThis will list out all the packages installed, then need to search through to manually check which have backports available (pipe to `nvim -`).\n\n## Known Issues\n\n### Mac\n\n- 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.\n\n### Linux\n\n- Media keys on Microsoft Ergonomic Keyboard sometimes aren't detected, disconnect/reconnect USB may be enough to fix?\n- Mouse wheel speed also sometimes goes to a better default after disconnect/reconnect\n- 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)\n- `1password` GUI not installing correctly, something wrong w/ bash logic\n\n## TODO/Future Improvements\n\n- [ ] Set up [network share](https://www.reddit.com/r/Crostini/wiki/howto/addnetworkshares/) in Crostini\n- [ ] Look into publishing a docker container via GitHub actions\n- [ ] `exa` is now unmaintained, need to either go to [eza](https://github.com/eza-community/eza) or `lsd`\n- [ ] Move from `docker` to `podman`\n- [ ] Get `devcontainer` setup for this repo\n- [ ] Get remote VSCode settings synced up as well, currently in `~/.vscode-server/data/Machine`\n- [ ] Figure out how to get [M1 CI running](https://github.blog/changelog/2024-01-30-github-actions-introducing-the-new-m1-macos-runner-available-to-open-source/) to check builds\n- [ ] Figure out what [Windows 11 tweaks \u0026 usability improvements](https://kittenlabs.de/blog/2024/08/20/windows-11-tweaks-usability-improvements/) to copy\n- [ ] 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](https://docs.github.com/en/codespaces/troubleshooting/troubleshooting-personalization-for-codespaces#troubleshooting-dotfiles) can be helpful\n- [ ] Figure out how to [use Hammerspoon](https://github.com/Hammerspoon/Spoons/blob/master/Source/MusicAppMediaFix.spoon/init.lua) to have media keys control cmus, instead of launching iTunes (gross)\n- Try switching from docker to podman\n- [ ] Look into `glances` and `btop`\n- [ ] `wshowkeys` or similar for showing keypresses for screencasts, etc\n- [ ] Figure out Lutris / Wine / Proton for Linux gaming\n- [ ] [Auto-publish Docker images](https://docs.github.com/en/actions/publishing-packages/publishing-docker-images#publishing-images-to-github-packages)\n- [ ] Better colorschemes, coordinated everywhere\n  - Check [themer](https://github.com/themerdev/themer) for generation\n  - [ ] Easier swapping into light mode\n  - [ ] `dircolors` can be better and used elsewhere: https://github.com/seebi/dircolors-solarized\n  - [ ] [RootLoops](https://rootloops.sh/) for generation\n- [ ] Figure out how to get USB-C DP Alt devices to work, might need [displaylink-debian](https://github.com/AdnanHodzic/displaylink-debian) or at the very least `evdi-dkms`\n- [ ] Get [Nvidia Drivers](https://wiki.debian.org/NvidiaGraphicsDrivers) drivers with a reasonable resolution for linux console\n  - Install `nvidia-detect` and run to check support\n  - Install `nvidia-driver`\n  - Get better resolution when booted into console by adding `GRUB_GFXMODE=auto` in `/etc/default/grub`, then run `sudo update-grub`\n- [ ] Learn from [Wayland Apps in Wireguard Docker Containers](https://www.procustodibus.com/blog/2024/10/wayland-wireguard-containers/) and see if anything worth copying\n- [ ] [Dotfile managers](https://dotfiles.github.io/utilities/) might have something better than GNU `stow`\n\n## License\n\nThis repository is licensed under the BSD 3-Clause License. See the LICENSE file for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffortes%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffortes%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffortes%2Fdotfiles/lists"}