Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/archisman-mridha/dotfiles
Configurations for Neovim | VSCode | Zsh | Tmux | Nix Home Nanager | MacOS | Hyprland
https://github.com/archisman-mridha/dotfiles
apple-silicon archlinux dotfiles home-manager hyprland hyprland-config lazy-nvim macos neovim nix nix-home-manager tmux tmux-conf vscode vscode-settings vscode-settings-json wezterm zsh zshrc
Last synced: 11 days ago
JSON representation
Configurations for Neovim | VSCode | Zsh | Tmux | Nix Home Nanager | MacOS | Hyprland
- Host: GitHub
- URL: https://github.com/archisman-mridha/dotfiles
- Owner: Archisman-Mridha
- License: mit
- Created: 2024-04-06T22:22:10.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2025-01-08T12:28:59.000Z (29 days ago)
- Last Synced: 2025-01-08T13:44:20.050Z (29 days ago)
- Topics: apple-silicon, archlinux, dotfiles, home-manager, hyprland, hyprland-config, lazy-nvim, macos, neovim, nix, nix-home-manager, tmux, tmux-conf, vscode, vscode-settings, vscode-settings-json, wezterm, zsh, zshrc
- Language: Lua
- Homepage:
- Size: 10.2 MB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# Dotfiles
## Installing Arch Linux
You can follow this tutorial : https://www.youtube.com/watch?v=FxeriGuJKTM&t=354s, to install Arch Linux using the Arch Linux Installer. Just make sure you choose `Hyprland` as the desktop environment and `NetworkManager` as the network management tool.
You can list available wifi networks using this command :
```sh
nmcli dev wifi list
```and connect with one, using this command :
```sh
nmcli dev wifi connect password
```To verify that you're successfully connected to your wifi, run this command :
```sh
ip addr show
```
the `wlan0` network interface must have an IPv4 address assigned.## Setup
First install Nix :
```sh
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
```Then get into a temporary Nix shell, where you'll have access to git, stow and home-manager.
```sh
nix-shell -p git stow home-manager vim
```Clone this repository :
```sh
git clone https://github.com/Archisman-Mridha/dotfiles ~/dotfiles
cd ~/dotfiles
```You can customize [.config/home-manager/config.nix](.config/home-manager/config.nix) based on your
underlying system. Then execute the following commands :
```sh
stow --no-folding .home-manager switch --impure
```On MacOS, run the following to install nix-darwin :
```sh
nix run nix-darwin -- switch --flake $(pwd)/.config/home-manager
```The packages specified in [packages.nix](./.config/home-manager/modules/home-manager/packages.nix) and [homebrew.nix](./.config/home-manager/modules/nix-darwin/homebrew.nix) will be installed in your system.
Execute this command, if you want to cleanup Nix cache :
```sh
nix-collect-garbage -d
```## Arch Linux specific gotchas
- While executing `stow --no-folding .`, in Arch Linux, if you get an error as such :
```log
* cannot stow dotfiles/.config/hypr/hyprland.conf over existing target .config/hypr/hyprland.conf since neither a link nor a directory and --adopt not specified
```
In that case, first execute `stow --no-folding . --adopt`. Then, navigate to `~/.config/hypr/hyprland.conf` and replace the content with whatever is present [here](./.config/hypr/hyprland.conf).- If you're in Arch Linux, your default shell will be Bash. And as far as I know, we cannot change the default shell using HomeManager (since that requires root privileges). So, manually execute the following commands, to make zsh your default shell :
```sh
grep -qxF $(which zsh) /etc/shells || echo $(which zsh) | sudo tee -a /etc/shells
chsh -s $(which zsh)
```- zsh plugin manager isn't automatically installing `kube-ps1`. So you need to do it yourself :
```sh
yay -S kube-ps1
```- Run this, so SSHD starts up automatically on boot :
```sh
sudo systemctl enable sshd
```## Updating packages
Go to [./.config/home-manager/](./.config/home-manager/) and run :
```sh
nix flake update
home-manager switch --impure
```## Password management using gopass
### Bootstrap
Since, the company I currently work for uses [Password Store](https://www.passwordstore.org), I will be settling with [gopass](https://github.com/gopasspw/gopass) for now. But, if someday I discontinue working with them, I'll might give [sops-nix](https://youtu.be/G5f6GC7SnhU?si=baQEJPWG1dWgIqZQ) a try.
First, generate a GPG key-pair (which never expires), using this command :
```sh
gpg --gen-key
gpg --edit-key
```
Make sure you backup this GPG key-pair somewhere safe. You can view the actual public and private keys using :
```sh
gpg --export --armor
gpg --export-secret-keys --armor
```Next, initialize the password store using :
```sh
pass init
```You can follow this tutorial, to learn further more about gopass : https://youtu.be/FhwsfH2TpFA?si=ZIo4NmrTHEcgxS_u.
### Concurrent setups
First, import and trust the GPG keypair :
```sh
gpg --import password-store.private-key.gpg
gpg --import password-store.public-key.gpggpg --edit-key (and then type trust and hit Enter)
```Then, as usual, initialize the password store using `pass init `.
The SSH key-pair I use to sign commits and authenticate against Github, is stored at `personal/github/ssh`. So, I use these commands to complete my Github setup :
```sh
pass show personal/github/ssh/private-key > ~/.ssh/github
pass show personal/github/ssh/public-key > ~/.ssh/github.pub
```Don't forget to set correct file permission for the private key file :
```sh
chmod 600 ~/.ssh/github.pub
```
otherwise you'll get `file permissions too open` error.> A small script can be made for a better UX.
## Wezterm (and tmux)
- [Copy Mode](https://wezfurlong.org/wezterm/copymode.html)
- [Quick Select Mode](https://wezfurlong.org/wezterm/quickselect.html)## Working in my Arch Linux machine from my Macbook
Everytime, I connect to the wifi from my Arch Linux machine, I want it to get assigned with the same private IPv4 address : `192.168.29.146/24`. I can pull it off, using this command :
```sh
sudo nmcli connection modify "Bandwidth 5" \
ipv4.method manual \
ipv4.addresses "192.168.29.146/24" \
ipv4.gateway "192.168.29.1" \
ipv4.dns "8.8.8.8 8.8.4.4"sudo nmcli connection up "Bandwidth 5"
```In my Macbook, I open Neovim and run `:DistantInstall`. This will install the distant binary in my Macbook. Then, I run `:DistantLaunch ssh://@` to connect to the Arch Linux machine.
> distant.nvim currently doesn't support NeoTree and Telescope integration. But work on them is ongoing. So, as of now, I just SSH into my Arch Linux machine and run Neovim within that SSH session.
## Cheatsheets
- [Neovim](https://gist.github.com/Archisman-Mridha/41923c35fec46d46497a06bdca56cb6f)
- [Tmux](https://gist.github.com/Archisman-Mridha/d0157da78bac7e1675aa15cfdfa2eb97)
- [iTerm2](https://gist.github.com/Archisman-Mridha/b7654858acb1d7169482f1307b786a67)## Previews
- Neovim
![Neovim](./previews/neovim.png)- Wezterm
![Wezterm](./previews/wezterm.png)- VSCode
![VSCode](./previews/vscode.png)- Wallpaper
![CyberPunk](./.config/wallpapers/cyberpunk.jpg)## References
- [MyNixOS](https://mynixos.com)
- [Appendix A. Home Manager Configuration Options](https://nix-community.github.io/home-manager/options.xhtml)
- [Nix home-manager tutorial: Declare your entire home directory](https://youtu.be/FcC2dzecovw)
- [How I Use Tmux With Neovim For An Awesome Dev Workflow On My Mac](https://www.youtube.com/watch?v=U-omALWIBos)
- [Setup nix, nix-darwin and home-manager from scratch on an M1 Macbook Pro](https://gist.github.com/jmatsushita/5c50ef14b4b96cb24ae5268dab613050)
- [When and how should default.nix, shell.nix and release.nix be used?](https://stackoverflow.com/questions/44088192/when-and-how-should-default-nix-shell-nix-and-release-nix-be-used)
- [Master Nix inherit Keyword in 5 Minutes](https://www.ersocon.net/articles/master-nix-inherit-keyword-in-5-minutes~c464b126-0d57-4971-9a87-2515f9aa8d19)
- [Nix Language basics](https://nix.dev/tutorials/nix-language.html)
- [Disabling System Integrity Protection](https://github.com/koekeishiya/yabai/wiki/Disabling-System-Integrity-Protection)
- [Determinate Systems : Zero to Nix](https://zero-to-nix.com)- [Nix darwin activation script by elliott minns](https://gist.github.com/elliottminns/211ef645ebd484eb9a5228570bb60ec3)
- [Installing Arch Linux using the Arch Linux installer](https://www.youtube.com/watch?v=FxeriGuJKTM&t=354s)
- [Arch Linux Experience - Hyprland](https://www.youtube.com/watch?v=uZDPXFQYz0Q)
- [Distant.nvim's Neovim editor guide](https://distant.dev/editors/neovim/)
- [Editing files and running LSP servers on a remote machine](https://youtu.be/BuW2b1Ii0RI?si=vClcQbM75BbJYR73)
- [SSH Port Forwarding](https://www.geeksforgeeks.org/ssh-port-forwarding/)
- [This is perhaps my favorite password manager for the terminal](https://youtu.be/FhwsfH2TpFA?si=ZIo4NmrTHEcgxS_u)
- [PASS: a Password Manager & Two Factor Authentication (OTP) with no Cell Phone](https://youtu.be/sVkURNfxPd4?si=CD71pMNqsEzQhaDN)
- [Adding a new SSH key to your GitHub account](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account)
- [My Wezterm Config](https://www.youtube.com/watch?v=V1X4WQTaxrc)
## TODOs
- [x] Detect the underlying OS and CPU architecture, based on which the [macos.config.nix](./.config/home-manager/macos.config.nix) or the [archlinux.config.nix](./.config/home-manager/archlinux.config.nix) will be imported in [flake.nix](./.config/home-manager/flake.nix).
- [x] Setup gopass.
- [ ] Configure Hyprland.
- [ ] Shift the files inside [.config/home-manager](./.config/home-manager) to [.config/nix](./.config/nix). The [.config/home-manager](./.config/home-manager) name is a bit confusing, since it contains files related to both HomeManager and nix-darwin.
> I tried to do so, but was getting this error while doing `home-manager switch --flake ~/.config/nix#"archismanmridha" :
>
> access to absolute path '/nix/dotfiles' is forbidden in pure evaluation mode (use '--impure' to override)
>
> Using the --impure flag didn't solve the issue.- [ ] Enable image support in Neovim
- [ ] Setup distant.nvim - lualine integration