{"id":17803667,"url":"https://github.com/nickymeuleman/dotfiles","last_synced_at":"2025-10-05T01:09:02.782Z","repository":{"id":177674422,"uuid":"660292550","full_name":"NickyMeuleman/dotfiles","owner":"NickyMeuleman","description":"dotfiles for my WSL and Fedora setups","archived":false,"fork":false,"pushed_at":"2025-06-28T16:09:42.000Z","size":214,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-28T17:24:52.634Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NickyMeuleman.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2023-06-29T17:08:38.000Z","updated_at":"2025-06-28T16:09:46.000Z","dependencies_parsed_at":"2025-03-16T19:36:08.374Z","dependency_job_id":"98c43d13-314d-46ff-a10f-63eb461a2649","html_url":"https://github.com/NickyMeuleman/dotfiles","commit_stats":null,"previous_names":["nickymeuleman/dotfiles"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/NickyMeuleman/dotfiles","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NickyMeuleman%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NickyMeuleman%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NickyMeuleman%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NickyMeuleman%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NickyMeuleman","download_url":"https://codeload.github.com/NickyMeuleman/dotfiles/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NickyMeuleman%2Fdotfiles/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278396532,"owners_count":25979803,"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","status":"online","status_checked_at":"2025-10-04T02:00:05.491Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2024-10-27T12:47:33.231Z","updated_at":"2025-10-05T01:09:02.755Z","avatar_url":"https://github.com/NickyMeuleman.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dotfiles\n\n## Housekeeping\n\nFirst, fixing the weird things that annoy me.\nRanging from things that don't work correctly by default to things that are straight up broken without some intervention.\n\n### More software\n\nSince I'm on Fedora, I enabled [RPM Fusion](https://rpmfusion.org/).\nAnd I set up [Flathub](https://flathub.org/nl/setup/Fedora).\n\nI then also did the multimedia steps the RMP Fusion site has.\nApparently Fedora doesn't ship some media codecs you need to play a lot of videofiles.\n\u003chttps://rpmfusion.org/Howto/Multimedia\u003e\n\nAt this point, update all the things!\n`sudo dnf update \u0026\u0026 sudo dnf upgrade`\n\n### Audio\n\nThe audio was popping every time a sound starts playing similar to the sound you hear when you first plug in headphones.\n\nTo fix, I turned off power saving for the audio on my motherboard.\n\n```sh\necho `options snd-hda-intel power_save=0` \u003e /etc/modprobe.d/alsa-base.conf\n```\n\n### Login screen\n\nThere are 3 screens plugged into this computer:\n\n- 2 PC monitors\n- 1 TV\n\nEither I use the 2 monitors, or the single TV.\nNo matter what, it showed the login screen on the TV, even when it was off.\n\nTo fix it I deleted the `~/.config/monitors.xml` file.\nThen set up my monitors with the graphical Gnome tool (right click on the desktop followed by Display Settings).\n\nThis created that file again.\nThen I made GDM (that's Gnome's login manager, in other words it's the screen with the password input when you boot) to use that file.\n\nI copied the file that setting up the monitors created and made sure the `gdm` user and group owned that file.\n\n```sh\nsudo cp -v ~/.config/monitors.xml /var/lib/gdm/.config/\nsudo chown gdm:gdm /var/lib/gdm/.config/monitors.xml\n```\n\n### Browser\n\nSadly, in Firefox my cursor went invisible if I dare to watch a YouTube video.\nSo I fell into old habits and used Google Chrome.\n\nBut the text of tab titles was blurry.\n\nIn the browser I went to `chrome://flags` and set the `Preferred Ozone platform` to `Wayland`.\n\n### Build requirements\n\nSimilar to how I installed `build-essential` on WSL Ubuntu, Fedora needs some installed packages that are needed to build various pieces of software.\n\n`sudo dnf install make automake gcc gcc-c++ kernel-devel cmake`\n\n### Fonts\n\nI noticed emojis don't display in the terminal (for instance the astronaut in astro.dev starter).\nI set the specific font I use in the terminal to have a fallback to an emoji font is a glyph can not be displayed.\nThis is done by putting a file at `~/.config/fontconfig/fonts.conf`\n\nHelp on the syntax in that file:\n\u003chttps://fedoraproject.org/wiki/Fontconfig_packaging_tips\u003e\n\nThe specific syntax to use for the fallback (I used the nerdfont version if the jetbrainsmono font)\n\u003chttps://blog.sebastian-daschner.com/entries/linux-terminal-font-alacritty-jetbrains-mono-emoji\u003e\n\nThen force it to be applied with `fc-cache --really-force`\n\nTest it by echoing a bunch of emojis in the terminal, most have color now (not that heart outline).\n\n```sh\necho \"♥❤️👍😍🙊🥱🥺✨✅🎊🏄\".\n```\n\nThis does not show combined emojis, but the parts that make them.\nThe zero-width joiner unicode uses to combine emojis into new ones is still visible.\nAn example is the astronaut emoji, instead of seeing an astronaut, you see the parts:\n\"human,zwj,rocket\": 🧑‍🚀\n\n## Setup\n\n### Version control: `git`\n\n```sh\nsudo dnf install git\n```\n\nSome default settings:\n\n```sh\ngit config --global user.name \"Nicky Meuleman\"\ngit config --global user.email \"nicky.dev@outlook.com\"\ngit config --global core.autocrlf input\ngit config --global init.defaultBranch main\n```\n\n### Shell: `zsh`\n\n```sh\nsudo dnf install zsh\n```\n\nChange the default shell (`bash`) to `zsh` so it launches whenever you open the terminal.\n\n```sh\nchsh -s $(which zsh)\n```\n\n### Prompt: Starship\n\n\u003chttps://starship.rs/\u003e\n\nInstall using the command they provide.\n\nNo manpage, so `man starship` does not work.\nSee [issue #2926](https://github.com/starship/starship/issues/2926)\n\n`starship --help` works.\n\n`starship explain` is a handy tool that prints a quick summary of what every part of the current prompt is.\n\nThe `starship` binary can generate shell completions.\nPut the output for the specific shell in a file in the `$fpath`\n\n```sh\nstarship completions zsh \u003e $ZDIR/completions/_starship\n```\n\n### Rust language\n\n\u003chttps://www.rust-lang.org/\u003e\n\nInstall using the command they provide.\n\nManpages are weird.\nCargo is under `rustup man cargo`\n\nTrying to use it gives a usage hint that says:\n\n```txt\nUSAGE:\n    rustup man [OPTIONS] \u003ccommand\u003e\n```\n\nBut I have no idea what `[OPTIONS] \u003ccommand\u003e` is, I only guessed `cargo`.\n\nRelated: \u003chttps://github.com/rust-lang/rustup/issues/1729\u003e\n\nAdd completions to shell for both `rustup` and `cargo`: `rustup help completions`\n\n```sh\nrustup completions zsh \u003e $ZDIR/completions/_rustup\nrustup completions zsh cargo \u003e $ZDIR/completions/_cargo\n```\n\n### Node manager: `fnm`\n\n\u003chttps://github.com/Schniz/fnm\u003e\n\nInstall using the command they provide.\n\nNo manpage, so `man fnm` does not work.\n\n`fnm --help` works.\n\nA tl;dr is available: `tldr fnm`\n\nThe `fnm` binary can generate shell completions.\nPut the output for the specific shell in a file in the `$fpath`\n\n```sh\nfnm completions --shell=zsh \u003e $ZDIR/completions/_fnm\n```\n\n### Fuzzy finder: `fzf`\n\n\u003chttps://github.com/junegunn/fzf\u003e\n\nInstalled from source.\nThey have a handy script that does it for us, neat!\n\n\u003chttps://github.com/junegunn/fzf#using-git\u003e\n\nNo traditional completions so it does not fill in flags.\neg. when tabbing after `fzf -`.\n\u003chttps://github.com/junegunn/fzf/issues/3349\u003e\n\nFuzzy completion can be entered while typing a command pressing tax after the trigger sequence, which is \"\\*\\*\" by default.\n\neg. `vim **` and hitting tab will start a fuzzy search.\nWhen a file is selected the \"\\*\\*\" will be replaced with the path to that file.\n\nYou can start that fuzzy search off with a query by placing it before the trigger sequence before hitting tab. eg. `vim potatoes**` starts fzf off with \"potatoes\" already entered.\n\n\u003chttps://github.com/junegunn/fzf#fuzzy-completion-for-bash-and-zsh\u003e\n\nYou can also do this with hotkeys\n\n\u003chttps://github.com/junegunn/fzf#key-bindings-for-command-line\u003e\n\n`CTRL-t` does the almost same thing, it adds the selection to your prompt.\nIt does NOT start the fuzzy search off with what you already entered.\n\nSo if you did `vim pota`, hit `CTRL-t` and chose `potatoes.txt`, your final prompt would be `vim potapotatoes.txt`\n\nThe fuzzy finder uses some vim motion keys to navigate.\n\u003chttps://github.com/junegunn/fzf#using-the-finder\u003e\n\n### Smarter `cd`: `zoxide`\n\n\u003chttps://github.com/ajeetdsouza/zoxide\u003e\n\nInstalled from source.\n\n1. Clone repo and change directory into it\n2. Build for release with `cargo build --release`\n3. Move the executable to a directory in `$PATH`\n   - `cp target/release/zoxide $HOME/.local/bin/`\n4. Move man page to its dedicated directory\n   - `cp -r man/ $HOME/.local/share/`\n5. Move completions to a directory in `$fpath`\n   - `cp contrib/completions/_zoxide $ZDIR/completions/_zoxide`\n\nMake sure to use the full name instead of the `z` alias when using it for anything other than the base jumping functionality.\n\n`zoxide --help` works, but `z --help` does not.\n\nzoxide integrates with `zsh-autocomplete` to show frecent (not a typo) directories when tabbing direcly after `z`.\n\n\u003chttps://github.com/ajeetdsouza/zoxide/issues/9\u003e\n\nPressing tab after a space triggers interactive completion (like you get when you use `zi`)\neg. `z thing` and then tabbing triggers the interactive searcher that uses `fzf` with \"thing\" as query.\n\u003chttps://github.com/ajeetdsouza/zoxide/issues/9#issuecomment-986195030\u003e\n\n### Document conversion tool: `pandoc`\n\n\u003chttps://github.com/jgm/pandoc\u003e\n\nI could download the release from github and install that via these instructions:\n\u003chttps://github.com/jgm/pandoc/blob/main/INSTALL.md#linux\u003e\n\nInstead I opted for convenience and installed a slightly older version with\n\n```sh\nsudo dnf install pandoc\n```\n\n### Better `find`: `fd`\n\n\u003chttps://github.com/sharkdp/fd\u003e\n\n```sh\nsudo dnf install fd-find\n```\n\nThe binary name is `fd`, not `fd-find`.\n\n### Better `make`: `just`\n\n\u003chttps://github.com/casey/just\u003e\n\n```sh\nsudo dnf install just\n```\n\nThe `just` binary can generate shell completions.\nPut the output for the specific shell in a file in the `$fpath`\n\n```sh\njust --completions zsh \u003e $ZDIR/completions/_just\n```\n\n### Better `ls`: `eza`\n\nI previously used [`exa`](https://github.com/ogham/exa), but that's unmaintained now.\n\n\u003chttps://github.com/eza-community/eza\u003e\n\nBuilt from source.\n\n1. Clone repo and change directory into it\n2. Build for release with `cargo build --release`\n3. Move the executable to a directory in `$PATH`\n   - `cp target/release/eza $HOME/.local/bin/`\n4. Build man pages with `just man`\n5. Move man page to its dedicated directory\n   - `cp target/man/eza.1 $HOME/.local/share/man/man1/`\n   - `cp target/man/eza_colors.5 $HOME/.local/share/man/man5/`\n   - `cp target/man/eza_colors-explanation.5 $HOME/.local/share/man/man5/`\n6. Move completions to a directory in `$fpath`\n   - In my case `cp completions/zsh/_eza $ZDIR/completions/`\n\n### Simplified manpages with Tealdeer: `tldr`\n\n\u003chttps://github.com/dbrgn/tealdeer\u003e\n\nThis tool accesses the community pages on \u003chttps://tldr.sh/\u003e.\nThis is a rust version, the usual `tldr` tool is written in nodejs.\n\nExecutable named `tldr`\n\n```sh\nsudo dnf install tealdeer\n```\n\nNo manpage (but `tldr` has a `tldr` page! Hah!)\nThe website functions as those docs \u003chttps://dbrgn.github.io/tealdeer/\u003e\n\n### Better `cat`: `bat`\n\n\u003chttps://github.com/sharkdp/bat\u003e\n\n```sh\nsudo dnf install bat\n```\n\n### cli benchmark: `hyperfine`\n\n\u003chttps://github.com/sharkdp/hyperfine\u003e\n\nCLI benchmarking tool. Handy for quickly benchmarking some code without having to set up a proper benchmarking suite. (eg. using hyperfine instead of `criterion` to quickly bench something in Rust)\n\n```sh\nsudo dnf install hyperfine\n```\n\n### Better `du`: `dust`\n\n\u003chttps://github.com/bootandy/dust\u003e\n\nBuilt from source.\n\n1. Clone repo and change directory into it\n2. Build for release with `cargo build --release`\n3. Move the executable to a directory in `$PATH`\n   - `cp target/release/dust $HOME/.local/bin/`\n4. Move man page to its dedicated directory\n   - `cp man-page/dust.1 $HOME/.local/share/man/man1/dust.1`\n5. Move completions to a directory in `$fpath`\n   - `cp _completions/_dust $ZDIR/completions/_dust`\n\n### GitHub CLI: `gh`\n\n\u003chttps://github.com/cli/cli\u003e\n\n```sh\nsudo sudo dnf install gh\n```\n\nafter installing, authenticate with\n\n```sh\ngh auth login\n```\n\nThese dotfiles also provide a shortcut (`gh c`) to clone a github repo into a folder structure of OWNER/REPONAME.\nUsage is either `gh c owner/repo` or `gh c repo-url`\n\n### Resource monitoring utility: `btop`\n\n\u003chttps://github.com/aristocratos/btop\u003e\n\n```sh\nsudo dnf install btop\n```\n\nNo manpage.\nNo shell completions.\n\n### Better `grep`: ripgrep `rg`\n\n\u003chttps://github.com/BurntSushi/ripgrep\u003e\n\n```sh\nsudo dnf install ripgrep\n```\n\n### Count lines of code: `tokei`\n\n\u003chttps://github.com/XAMPPRocky/tokei\u003e\n\n```sh\nsudo dnf install tokei\n```\n\nNo manpages.\n\nNo shell completions.\n\n### Delete build artifacts: `kondo`\n\nRemoves `node_modules/` in JS projects, `target/` in Rust projects, and many more.\n\n\u003chttps://github.com/tbillington/kondo\u003e\n\nBuilt from source.\n\n1. Clone repo and change directory into it\n2. Build for release with `cargo build --release`\n3. Move the executable to a directory in `$PATH`\n   - `cp target/release/kondo $HOME/.local/bin/`\n\nNo manpages.\n\nNo shell completions.\n\n### Resource monitor: `btm`\n\nAn other terminal resource monitor because for some reason `btop` does not tell you anything about your GPU.\nThis one is nicer anyway imo.\n\n\u003chttps://github.com/ClementTsang/bottom\u003e\n\nBuilt from source.\n\nThe generation of manpages and shell completions is only performed when an env variale is set.\n\n1. Clone repo and change directory into it\n2. Build for release with `BTM_GENERATE=true cargo build --release --locked`\n3. Move the executable to a directory in `$PATH`\n   - `cp target/release/btm $HOME/.local/bin/`\n4. Move man page to its dedicated directory\n   - `cp target/tmp/bottom/manpage/btm.1 $HOME/.local/share/man/man1/`\n5. Move completions to a directory in `$fpath`\n   - `cp target/tmp/bottom/completion/_btm $ZDIR/completions/`\n\n### Terminal startup fetch: `macchina`\n\nSomething to differentiate terminal windows when I open up a bunch of clean ones.\nI didn't want to look for ASCII art, and a \"fetch\" script if fine, as long as it's fast.\n\n\u003chttps://github.com/Macchina-CLI/macchina\u003e\n\nInstalled from source.\n\n1. Clone repo and change directory into it\n2. Build for release with `cargo build --release`\n   - The produced binary is quite huge, consider stripping it to reduce its size\n     `strip target/release/macchina`\n3. Move the executable to a directory in `$PATH`\n   - `cp target/release/macchina $HOME/.local/bin/`\n4. Move man pages to its dedicated directory\n   - `cp doc/macchina.1 $HOME/.local/share/man/man1/`\n   - `cp doc/macchina.7 $HOME/.local/share/man/man7/`\n\nNo shell completions.\n\n### Terminal: `alacritty`\n\n\u003chttps://github.com/alacritty/alacritty\u003e\n\n```sh\nsudo sudo dnf install alacritty\n```\n\nThis uses the [catppuccin theme](https://github.com/catppuccin/alacritty).\nI cloned that repo and referred to a file in the `.toml` config file.\n\n### Video player: Celluloid\n\n\u003chttps://github.com/celluloid-player/celluloid\u003e\n\nInstalled via flatpak:\n`flatpak install flathub io.github.celluloid_player.Celluloid`\n\nIt's a frontend for [mpv](https://github.com/mpv-player/mpv).\nIt supports some configuration files for mpv.\nI linked the `input.conf` file via preferences in the GUI to get the keybinds I am used to.\n\n### Git tool: `lazygit`\n\n### Clipboard tool: `wl-copy` and `wl-paste`\n\nSomehow Fedora came without a clipboard tool?\nUsed mainly to make neovim aware of the system clipboard.\n\n`sudo dnf install wl-clipboard`\n\n### File watcher: `fswatch`\n\nNeovim `:checkhealth` recommended this.\nIt's a faster file watching tool, so it speeds up a lot of LSPs\n\n`sudo dnf fswatch`\n\n### Rust testing: `cargo nextest`\n\n\u003chttps://nexte.st\u003e\n\n`cargo install cargo-nextest --locked`\n\n### `treesitter`\n\n`cargo install tree-sitter-cli`\n\nNecessary because the treesitter grammar for LaTeX needs to be generated using the CLI-tool\n\n### Code screenshots: `silicon`\n\n\u003chttps://github.com/Aloxaf/silicon/\u003e\n\nInstall dependencies:\n\n```sh\nsudo dnf install \\\n  cmake \\\n  expat-devel fontconfig-devel libxcb-devel \\\n  freetype-devel libxml2-devel \\\n  harfbuzz\n```\n\nInstall with `cargo`:\n\n```sh\ncargo install silicon\n```\n\n`silicon` uses a lot of the same assets as `bat`, so I am reusing the theme files.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnickymeuleman%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnickymeuleman%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnickymeuleman%2Fdotfiles/lists"}