Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/gianlucatruda/dotfiles

My custom dotfiles for daily-driving macOS via CLI.
https://github.com/gianlucatruda/dotfiles

Last synced: about 2 months ago
JSON representation

My custom dotfiles for daily-driving macOS via CLI.

Awesome Lists containing this project

README

        

# Gianluca's dotfiles

Heavily modified adaptation of [Mathias's dotfiles](https://github.com/mathiasbynens/dotfiles) that I've personalised since 2017.

My stack:

- Bash
- Alacritty
- Tmux
- Homebrew
- neoVim (as primary editor), based off [Kickstart.nvim](https://github.com/nvim-lua/kickstart.nvim/)
- Karabiner (and some Hammerspoon)
- Vim (with lean .vimrc, no plugins) as fallback

---

## Installation

With Git:
```bash
git clone [email protected]:gianlucatruda/dotfiles.git
cd dotfiles
```

### System agnostic bootstrap

```bash
cd dotfiles
source bootstrap.sh
```

Create the `~/.config/.extra` file:
```bash
echo "" >> ~/.config/.extra
```

Add the following details (and any other system-wide variables):
```bash
# Git credentials
GIT_AUTHOR_NAME="Your Name"
GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"
GIT_AUTHOR_EMAIL="[email protected]"
GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"
git config --global user.name "$GIT_AUTHOR_NAME"
git config --global user.email "$GIT_AUTHOR_EMAIL"
git config --global commit.gpgsign true
git config --global user.signingkey
```

Then load up by running `reload`, which is an alias for:

```bash
exec $SHELL -l
```

### Mac-specific setup

Configure some macOS preferences:
```bash
./macos.sh
```

Install macOS packages with Homebrew:
```bash
./brew.sh
```

#### Keeping homebrew synced with dotfiles

Update the dotfiles repo from the system:
```bash
cd
brew bundle dump --all --describe --force --file .config/homebrew/Brewfile
```

Update the system from the dotfiles repo:
```bash
cd
source bootstrap.sh
brew bundle install -v --cleanup --force --file ~/.config/homebrew/Brewfile
```

Note: you can also install, cleanup, upgrade in steps:
```bash
brew bundle install --no-upgrade --file ~/.config/homebrew/Brewfile
brew bundle cleanup --force --file ~/.config/homebrew/Brewfile
brew bundle install --file ~/.config/homebrew/Brewfile
```

---

## TODOs

- [x] Document structure, supported tools, and "philosophy"
- [ ] Look into [mackup](https://github.com/lra/mackup) for keeping application settings in sync.
- [ ] Test on another Mac (in progress)
- [ ] Test on Linux
- [ ] Migrate apps to be installed with Homebrew
- [ ] anki
- [ ] blender
- [ ] brave-browser
- [ ] docker
- [ ] firefox
- [ ] handbrake
- [ ] hex-fiend
- [ ] iina
- [ ] imageoptim
- [ ] karabiner-elements
- [ ] libreoffice
- [ ] obs
- [ ] obsidian
- [ ] shottr
- [ ] spectacle
- [ ] spotify
- [ ] tad
- [ ] todoist
- [ ] toothfairy
- [ ] transmission
- [ ] vcv-rack
- [x] vscodium
- [x] alacritty
- [x] ferdium
- [x] kap
- [x] qlmarkdown
- [x] syntax-highlight

---

## Overview

### Font and colour

- [Nightfox](https://github.com/EdenEast/nightfox.nvim/tree/main) colorscheme (both alacritty and nvim).
- [UbuntuMono](https://www.programmingfonts.org/#ubuntu) with [Nerd font icons](https://www.nerdfonts.com).

### Structure

Generate with:

```bash
tree -a -L 3 --gitignore -I .git/ -I .gitignore -I README.md
```

```
.
├── .bash_profile
├── .bashrc
├── .config
│   ├── .aliases
│   ├── .bash_prompt
│   ├── .exports
│   ├── .functions
│   ├── .inputrc
│   ├── .path
│   ├── alacritty.toml
│   ├── git
│   │   └── config
│   ├── homebrew
│   │   └── Brewfile
│   ├── htop
│   │   └── htoprc
│   ├── karabiner
│   │   ├── assets
│   │   ├── complex_modifications
│   │   └── karabiner.json
│   ├── lf
│   │   ├── colors
│   │   ├── icons
│   │   └── lfrc
│   ├── newsboat
│   │   └── config
│   ├── nvim
│   │   └── init.lua
│   ├── spotify-player
│   │   └── app.toml
│   └── tmux
│   └── tmux.conf
├── .hammerspoon
│   └── init.lua
├── .vimrc
├── bootstrap.sh
├── brew.sh
├── macos.sh
└── scripts
├── gt-btooth
├── gt-cheat
├── gt-scan
├── gt-stt
├── gt-sync-obsidian
├── gt-synchdd
└── gt-tts

15 directories, 32 files
```

### NeoVim setup

(Generated by GPT-4-turbo, based on my `init.lua`)

- **`lazy.nvim`**: A plugin manager to organize and manage Neovim plugins.
- **`tpope/vim-fugitive` and `tpope/vim-rhubarb`**: Tools for Git integration, providing commands for various Git operations directly within the editor.
- **`tpope/vim-sleuth`**: Automatically adjusts `tabstop` and `shiftwidth` based on the file contents.
- **`neovim/nvim-lspconfig`**: Configuration framework for Neovim's built-in LSP (Language Server Protocol).
- **`williamboman/mason.nvim`, `williamboman/mason-lspconfig.nvim`**: Tools for managing LSP servers, ensuring they are installed and up-to-date.
- **`j-hui/fidget.nvim`**: Provides a graphical indicator to display LSP progress information.
- **`folke/neodev.nvim`**: Enhances Neovim's Lua development experience by providing improved support and configurations specific to Neovim's API.
- **`hrsh7th/nvim-cmp`, various related plugins** (`L3MON4D3/LuaSnip`, `saadparwaiz1/cmp_luasnip`, etc.): Autocompletion framework setup with integrations for snippets, LSP, paths, and common programming constructs.
- **`folke/which-key.nvim`**: Helps discover keybindings by showing a popup with possible keybindings as you type.
- **`lewis6991/gitsigns.nvim`**: Adds Git-related information to the sign column (like added/changed lines) and provides commands for interacting with Git hunks.
- **`smithbm2316/centerpad.nvim`**: Provides padding to center the text within the editor window for a more focused writing/reading experience.
- **`nvim-lualine/lualine.nvim`**: A lightweight and configurable status line solution.
- **`lukas-reineke/indent-blankline.nvim`**: Adds indentation guides to empty lines.
- **`numToStr/Comment.nvim`**: Simplifies the task of commenting and uncommenting code lines or blocks.
- **`nvim-telescope/telescope.nvim`**, including the `plenary.nvim` and `fzf-native` plugins: An extendable fuzzy finder over lists that can be used to locate files, grep for strings, manage LSP sessions, and more.
- **`nvim-treesitter/nvim-treesitter`**: Enables advanced syntax highlighting, better filetype detection, and additional text manipulation features through its parsing library.
- **Leader Key**: The space ( `' '` ) key is configured as the leader key, pivotal for many custom shortcuts.
- **Colorscheme**: `nightfox.nvim` is set as the default theme, indicating an emphasis on visual aesthetics.
- **Clipboard**: Synchronized with the system clipboard, promoting easy copy-paste operations between Neovim and other applications.

### Bash functions

- **`v()`**: Opens the current directory or a specified directory in neovim if available, otherwise uses vi.
- **`sf()`**: Searches for text-readable, non-hidden files (or all files including hidden with `-a` flag, excluding `.git`) in the current directory using `rg` and `fzf`, then opens the selected file in Vim.
- **`sd()`**: Searches directories using `fzf` and changes to the selected directory, excluding paths containing `.git`.
- **`update_environment_from_tmumx()`**: Updates the environment variables in tmux if running inside a tmux session.
- **`mkd()`**: Creates a new directory (and any necessary parent directories) then changes into it.
- **`fs()`**: Displays the size of a file or total size of a directory using `du`, presenting results in human-readable form.
- **Built-in Overridden `diff()`**: Uses Git’s colored diff functionality when Git is installed, otherwise falls back to standard behavior.
- **`unidecode()`**: Decodes Unicode escape sequences in the format `\x{ABCD}` and outputs them.
- **`o()`**: Opens the current directory or a specified file/directory with the default system application.
- **`tre()`**: Runs the `tree` command showing hidden files and colorizing the output (ignoring `.git`, `node_modules`, and `bower_components` directories) and pipes the results to `less` with options to keep colors and line numbers.