# Table of Contents
1. [Dependencies](#dependencies)
    1. [Optional Dependencies](#optional-dependencies)
2. [Instructions](#instructions)
    1. [Modifications](#modifications)
3. [TODO](#todo)

# Dependencies
- If you have root, symlink `/bin/sh` to a copy of `dash` // This isn't necessary but it'll speed things up
- This repo was intended to be used with `chezmoi`. You can still make use of it manually but you'll have to move all the files to the right place yourself and set the permissions.
- Many programs here require a Nerd Font to be installed
  - I'm using [Fira Code](https://github.com/ryanoasis/nerd-fonts/releases/latest/download/FiraCode.tar.xz).
  - A patched version of [San Francisco Mono](https://github.com/shaunsingh/SFMono-Nerd-Font-Ligaturized) is viable to
  - There's a ton of other options [here](https://github.com/ryanoasis/nerd-fonts/releases/latest/)
- This repo primarily targests ZSH as a shell, unfortunately you'll need root to install this and set it as default without using janky hacks
  - If you do want to use janky hacks, I'm sure there's a way to get it through brew/spack, otherwise build it yourself, yeet it into `~/.local/bin` and add `exec zsh` to your `.bashrc`
## Optional Dependencies
- Cargo (package manager, should be able to install most of the stuff on this list without root) 
  - cargo-binstall (lets you download precompiled binaries for Rust apps)
- Go (package manager/programming language, should be able to install most of what cargo can't)
- brew (\*NIX)/scoop (Windows) (*very* optional package manager)
- Nala (Debian-based Linux) (package manager, don't use `apt`, worse `apt-get`, it's 2023)
- Zellij (terminal multiplexer, you can replace this with `tmux` but I don't have a config for that)
- fzf (fuzzy finder, my `.zshrc` should automatically download the binary, but its better if you install this with a package manager)
- Sheldon (plugin manager, currently only configured for zsh)
- pywal (lets you generate themes from an image)
- gpg-agent (lets you store GPG and SSH Keys)
  - ssh-agent comes with ssh, and will also be configured by this repo but gpg agent is more flexible
- mcfly (history search)
- zoxide (`cd` but better)
- broot (`cd` but a TUI)
- starship (shell theme)
- lazygit (git TUI)
- lazydocker (docker TUI)
- duf (`df` but better (tells you how much disk space you have))
- delta (`diff` but better)
- uutils (rust reimplementation of GNU Coreutils, mostly useful for adding progress bars to `cp` and `mv`)
- fd (aka fdfind) (`find` but better)
- gdu (`du`/`ncdu` but *much* faster)
  - btdu (`du`/`ncdu` but for more advanced BTRFS setups)
- viddy (`watch` but better) 
- bat (`cat` but better) 
- gping (`ping` but visual)
- lsd (`ls` but better)
- neovim (`vim` but better)
- ripgrep (`grep` but better)
- ag/silver searcher (`grep` for source code)
- bottom (`top` but better)

# Instructions
- To clone this repo run `chezmoi init https://gitea.argentumcation.com/mira/dotfiles`
- If you're not me, you're gonna have to make a few changes outlined in [Modifications](#modifications)
- Once done you should be able to run `chezmoi apply`
## Modifications
- Run `chezmoi cd` to enter the dir where Chezmoi stores files (`~/.local/share/chezmoi`)
- Several files are encrypted with my GPG key. If you're not someone with access to those, you'll need to delete the files prefixed with `encrypted_` , If you fork the repo be sure to change the public keys in the Chezmoi config
- `key.txt.asc` should be deleted as well, or replaced with a GPG private key encrypted with `gpg -a --symmetric`
- `pubkeys.asc` should contain your public GPG keys, if you have none, delete this file
-`run_onchange_add_ssh_pubkeys.ps1.tmpl` adds my pubkeys to `.ssh/authorized_keys`, if you don't want me to be able to ssh into your machine, delete this
- `run_decrypt_private_key.ps1.tmpl`is used to decrypt encrypted files. If you have none, delete this.
- Most configuration has been done for ZSH, with some copied over for Bash. There's a minimal config for PowerShell as well. 

# TODO
- fix `gpg-agent.conf` so it works on WSL
- automate deleting stuff specific to me
- add gum
- install dependencies