{"id":22689700,"url":"https://github.com/idkjs/dm","last_synced_at":"2026-05-19T14:39:21.493Z","repository":{"id":42679255,"uuid":"320609276","full_name":"idkjs/dm","owner":"idkjs","description":"Portable dotfile manager for macos using fish","archived":false,"fork":false,"pushed_at":"2022-03-28T20:43:16.000Z","size":79,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-30T15:27:51.972Z","etag":null,"topics":["dotfiles","dotfiles-installer","dotfiles-macos","dotfiles-manager","fish","fish-plugin","fish-shell"],"latest_commit_sha":null,"homepage":"https://dm.idkjs.vercel.app","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/idkjs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-12-11T15:19:00.000Z","updated_at":"2021-03-29T05:28:43.000Z","dependencies_parsed_at":"2022-08-27T02:29:26.916Z","dependency_job_id":null,"html_url":"https://github.com/idkjs/dm","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/idkjs/dm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idkjs%2Fdm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idkjs%2Fdm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idkjs%2Fdm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idkjs%2Fdm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/idkjs","download_url":"https://codeload.github.com/idkjs/dm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idkjs%2Fdm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33220330,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-19T07:54:09.561Z","status":"ssl_error","status_checked_at":"2026-05-19T07:54:08.508Z","response_time":58,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["dotfiles","dotfiles-installer","dotfiles-macos","dotfiles-manager","fish","fish-plugin","fish-shell"],"created_at":"2024-12-10T00:21:17.951Z","updated_at":"2026-05-19T14:39:21.476Z","avatar_url":"https://github.com/idkjs.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\n# dm\n\n\u003e 100% pure-\u003ca href=\"https://fishshell.com\" title=\"Portable Minimal Dotfiles \"\u003efish\u003c/a\u003e portable minimal dotfiles manager.\n\n- fish implementation of [The best way to store your dotfiles: A bare Git repository](https://www.atlassian.com/git/tutorials/dotfiles) imagined by [StreakyCobra](https://news.ycombinator.com/item?id=11071754).\n-\n## Usage\n\n```bash\n~\u003e dm status\n#  add a global .gitignore file by adding it to your root and then pointing to it in `git config`\n~\u003e echo \"node_modules\" \u003e\u003e .gitignore\n~\u003e git config --global core.excludesFile \"~/.gitignore\"\n//  add it to your dotfiles with `dm add .gitignore`\n~\u003e dm add .gitignore\n// commit it with a message\n~\u003e dm commit -m \"Add global gitignore\"\n// add your fish configuration\n~\u003e dm add .config/fish\n~\u003e dm commit -m \"Add fish config\"\n// or add your whole .config directory\n~\u003e dm add .config\n~\u003e dm commit -m \"Adds .config to dotfiles\"\n```\n```bash\n# use dm status to see where you are\n~\u003e dm status\n\nOn branch main\n\nNo commits yet\n\nChanges to be committed:\n  (use \"git rm --cached \u003cfile\u003e...\" to unstage)\n\tnew file:   .config/.DS_Store\n\tnew file:   .config/configstore/update-notifier-qnm.json\n\tnew file:   .config/configstore/update-notifier-vercel.json\n\tnew file:   .config/fish/.DS_Store\n\tnew file:   .config/fish/completions/fisher.fish\n\tnew file:   .config/fish/completions/gitio.fish\n\tnew file:   .config/fish/completions/tabtab.fish\n\tnew file:   .config/fish/conf.d/dm.fish\n\tnew file:   .config/fish/fish_plugins\n\tnew file:   .config/fish/fish_variables\n\tnew file:   .config/fish/functions/.DS_Store\n\tnew file:   .config/fish/functions/fisher.fish\n\tnew file:   .config/fish/functions/gitio.fish\n\tnew file:   .config/gh/config.yml\n\tnew file:   .config/gh/hosts.yml\n\tnew file:   .gitconfig\n\tnew file:   .gitignore\n\nChanges not staged for commit:\n  (use \"git add \u003cfile\u003e...\" to update what will be committed)\n  (use \"git restore \u003cfile\u003e...\" to discard changes in working directory)\n\tmodified:   .config/.DS_Store\n\nUntracked files not listed (use -u option to show untracked files)\nmandalarian@mandalarian ~\u003e dm rm --cached .config/.DS_Store\nerror: the following file has staged content different from both the\nfile and the HEAD:\n    .config/.DS_Store\n(use -f to force removal)\n\n\n# looks like I have some unwanted `.DS_Store files\n~\u003e dm rm --cached -f .config/.DS_Store\nrm '.config/.DS_Store'\n~\u003e dm rm --cached -f .config/fish/.DS_Store\nrm '.config/fish/.DS_Store'\n~\u003e\n```\n\n## TLDR\n[automatic installation script](./scripts/dotfiles-install.fish):\n\n```bash\ncurl -fsSL https://dm.idkjs.vercel.app/install | fish\n```\n\n## Template/Fork\n\nClick the template button or fork this repo.\n\nHave at it!\n\n## Installation\n\n[fisherman](https://github.com/jorgebucaran/fisher)(recommended)\n\n```bash\nfisher install idkjs/dm\n```\n\nRun `git init --bare $HOME/.dotfiles`\nOpen a new terminal and run:\n\n```\ndm config --local status.showUntrackedFiles no`\n```\n## Manually\n\n1. Run\n```bash\ngit clone idkjs/dm\n```\n2. Run\n```bash\nmake\n```\nor\n\n```\ncp conf.d/dm.fish ~/.config/fish/conf.d/\n```\n\nRun `git init --bare $HOME/.dotfiles`\nOpen a new terminal and run `dm config --local status.showUntrackedFiles no`\n\n\n## Portability\n\nIf you need your config on a remote machine, just download your git repository and repeat the steps.\n\nOn new machine assuming you already have fish installed:\n\n```bash\nfisher install idkjs/dm\necho \".dotfiles\" \u003e\u003e .gitignore\ngit clone --bare \u003cgit-repo-url\u003e $HOME/.dotfiles\n```\n\n\nCheckout the actual content from the bare repository to your $HOME:\n\n### dm status\n```bash\n\n~/.dotfiles (BARE:main)\u003e dm status\nOn branch main\n\nNo commits yet\n\nnothing to commit (create/copy files and use \"git add\" to track)\n~/.dotfiles (BARE:main)\u003e\n```\n### dm checkout\n```bash\n\n~/.dotfiles (BARE:main)\u003e dotfiles status\nOn branch main\n\nNo commits yet\n\nnothing to commit (create/copy files and use \"git add\" to track)\n~/.dotfiles (BARE:main)\u003e\n```\n\n## Uninstalling\n\nTo uninstall run:\n\n```bash\nrm -f $HOME/.config/fish/conf.d/dm.fish\n```\nor\n```\nmake uninstall\n```\n\n## Resources\n\n[git-bare-ssh](https://gist.github.com/joahking/780877)\n[PatrickF1/dotfiles for deployment](https://github.com/PatrickF1/dotfiles)\n\n[quotes in fish docs](https://fishshell.com/docs/2.4/index.html#quotes)\n\n[echo variable name is `\\$HOME`](http://unix.stackexchange.com/questions/129084/ddg#129113)\n\n[string-expansion](https://stackoverflow.com/questions/65132069/how-to-combine-text-with-expanded-variable-into-a-variable-expansion-in-fish)\n\n[fish-article](https://mvolkmann.github.io/fish-article/)\n\n[`wraps` doesnt tak an `=` sign](https://fishshell.com/docs/current/cmds/alias.html?highlight=wraps#example)\n\n[use-exit-status-of-command-in-fish-function](https://dev.to/talha131/use-exit-status-of-command-in-fish-function-2lj1)\n\n[The best way to store your dotfiles: A bare Git repository](https://www.atlassian.com/git/tutorials/dotfiles)\n\n[fish-shell playground](https://rootnroll.com/d/fish-shell/)\n[https://github.com/afq984/dotfiles](https://github.com/afq984/dotfiles)\n[fishshell-gitter](https://gitter.im/fish-shell/fish-shell)\n[Figglewatts/dotfiles](https://github.com/Figglewatts/dotfiles/blob/master/install.fish)\n[skybro/dotfiles](https://github.com/sky-bro/.dotfiles/blob/master/README.md)\n[uses `set -l`/set local within function scope](https://github.com/tsujamin/dotfiles/blob/main/.config/fish/functions/dotfile.fish)\n\n[pre-commit-hook](https://github.com/gazorby/fish-git-check-id/blob/master/functions/gckid.fish)\n\n## License\n\n[MIT](LICENSE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fidkjs%2Fdm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fidkjs%2Fdm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fidkjs%2Fdm/lists"}