{"id":13538957,"url":"https://github.com/hlissner/dotfiles","last_synced_at":"2025-05-14T12:12:36.339Z","repository":{"id":7193522,"uuid":"8497338","full_name":"hlissner/dotfiles","owner":"hlissner","description":"And I say hey, what's going on?","archived":false,"fork":false,"pushed_at":"2025-04-20T09:30:51.000Z","size":25000,"stargazers_count":1758,"open_issues_count":4,"forks_count":101,"subscribers_count":42,"default_branch":"master","last_synced_at":"2025-04-20T10:36:11.706Z","etag":null,"topics":["dotfiles","nix-flake","nixos","nixos-configuration"],"latest_commit_sha":null,"homepage":"https://youtu.be/ZZ5LpwO-An4","language":"Nix","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/hlissner.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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},"funding":{"github":"hlissner","liberapay":"hlissner","custom":"https://paypal.me/hlissner"}},"created_at":"2013-03-01T08:33:14.000Z","updated_at":"2025-04-20T09:30:55.000Z","dependencies_parsed_at":"2024-06-26T00:36:54.044Z","dependency_job_id":"a4effc6e-77fe-4c9c-8ec4-f6042faeca41","html_url":"https://github.com/hlissner/dotfiles","commit_stats":{"total_commits":2565,"total_committers":6,"mean_commits":427.5,"dds":"0.0019493177387914784","last_synced_commit":"531e90f4e5e27a13f23ad2d8adf2f2f57aa0c08a"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hlissner%2Fdotfiles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hlissner%2Fdotfiles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hlissner%2Fdotfiles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hlissner%2Fdotfiles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hlissner","download_url":"https://codeload.github.com/hlissner/dotfiles/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254140768,"owners_count":22021220,"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","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","nix-flake","nixos","nixos-configuration"],"created_at":"2024-08-01T09:01:18.200Z","updated_at":"2025-05-14T12:12:31.328Z","avatar_url":"https://github.com/hlissner.png","language":"Nix","funding_links":["https://github.com/sponsors/hlissner","https://liberapay.com/hlissner","https://paypal.me/hlissner"],"categories":["Shell","Nix","SCSS","dotfiles","Nix Configurations"],"sub_categories":[],"readme":"[![Made with Doom Emacs](https://img.shields.io/badge/Made_with-Doom_Emacs-blueviolet.svg?style=flat-square\u0026logo=GNU%20Emacs\u0026logoColor=white)](https://github.com/doomemacs)\n[![NixOS Unstable](https://img.shields.io/badge/NixOS-24.05-blue.svg?style=flat-square\u0026logo=NixOS\u0026logoColor=white)](https://nixos.org)\n\n**Hey,** you. You're finally awake. You were trying to configure your OS\ndeclaratively, right? Walked right into that NixOS ambush, same as us, and those\ndotfiles over there.\n\n\u003e [!IMPORTANT]\n\u003e **Disclaimer:** _This is not a \"community framework\" or \"NixOS distribution\"._\n\u003e Please do not use it like one. It is an ongoing and haphazard experiment to\n\u003e feel out NixOS and the Nix language for my own purposes, and is home to all\n\u003e manner of unspeakable, over-engineered hackery that make the other 9 circles\n\u003e of hell look like tropical beach resorts.\n\u003e\n\u003e Until I can bend spoons with my Nix-fu, please divert your Nix(OS) questions\n\u003e [to the NixOS discourse][nixos-discourse] instead of my issue tracker. That\n\u003e said, I'm more than happy [to hear input and discuss ideas](/discussions), but\n\u003e be warned: I'm awful at staying on top of my Github notifications.\n\n(screenshots coming soon)\n\n------\n\n|               | Wayland                 | X11                                              |\n|---------------|-------------------------|--------------------------------------------------|\n| **Shell:**    | zsh + zgenom            | \"                                                |\n| **WM:**       | hyprland + waybar       | lightdm + lightdm-mini-greeter + bspwm + polybar |\n| **Editor:**   | [Doom Emacs][doomemacs] | \"                                                |\n| **Terminal:** | foot                    | st                                               |\n| **Launcher:** | rofi                    | \"                                                |\n| **Browser:**  | firefox                 | \"                                                |\n\n-----\n\n## Quick start\n\n1. Acquire or build a NixOS 24.05+ image:\n   ```sh\n   # Yoink nixos-unstable from upstream\n   $ wget -O nixos.iso https://channels.nixos.org/nixos-unstable/latest-nixos-minimal-x86_64-linux.iso\n   ```\n\n2. Write it to a USB drive:\n   ```sh\n   # Replace /dev/sdX with the correct partition!\n   $ cp nixos.iso /dev/sdX\n   ```\n   \n3. Restart and boot into the installer.\n\n4. Do your partitions and mount your root to `/mnt` ([for\n   example](hosts/udon/README.org)).\n\n5. Clone these dotfiles somewhere:\n   ```sh\n   $ git clone --recursive https://github.com/hlissner/dotfiles\n   ```\n   \n6. Create a host config in `hosts/` (see [existing ones](hosts/) for examples).\n\n7. Run the installer:\n   ```sh\n   # The options are optional, but these are their default values, if you omit them.\n   $ dotfiles/install.zsh \\ \n         --root /mnt \\\n         --flake /mnt/etc/dotfiles \\\n         --user \"$USER\" \\\n         --host \"$HOST\" \\\n         --dest /mnt/home/$USER/.config/dotfiles\n   ```\n\n8. Then reboot and you're good to go!\n\n\u003e [!WARNING]\n\u003e Don't forget to change your `root` and `$USER` passwords! They are set to\n\u003e `nixos` by default.\n\n\n## Management\n\nAnd I say, `bin/hey`, [what's going on?](https://youtu.be/ZZ5LpwO-An4).\n\n```\nSYNOPSIS:\n  hey [-?|-??|-???|-!] [-h|--help] COMMAND [ARGS...]\n\nOPTIONS:\n  -!           -- Do a dry run. WARNING: It's up to called scripts to obey!\n  -?,-??,-???  -- Enable debug (verbose) mode.\n  -h,--help    -- Display the documentation embedded in a target script's\n                  header.\n\nCOMMANDS:\n  - build|b    -- Build nix images or recompile bin/hey\n  - exec       -- Dispatch to $DOTFILES_HOME/{,hosts/$HOST,config/$WM}/bin/shim.d $PATH\n  - get|set    -- Alias for hey vars {get,set} ...\n  - gc         -- Run garbage collection on the user's/system's profile\n  - help|h     -- Display documentation for the command\n  - hook       -- Trigger scripts associated with an event\n  - host       -- Dispatch to $DOTFILES_HOME/hosts/$HOST/bin\n  - info       -- Display information about current system (JSON)\n  - path       -- Display path to area of my dotfiles\n  - profile    -- Manage or analyze a system or user nix profile\n  - pull       -- Update flake inputs\n  - reload     -- Run reload hooks\n  - repl       -- Open a Janet, Nix, or nix-develop REPL\n  - swap       -- Swap nix-store symlinks with copies (and back)\n  - sync|s     -- Rebuild this flake (using nixos-rebuild)\n  - test       -- Run Hey and/or Nix test suites\n  - which      -- Print out the script's path (with arguments) w/o executing it\n  - wm         -- Dispatch to $DOTFILES_HOME/config/$WM/bin\n  - vars       -- Get or set session or persistent state in userspace.\n  - @*         -- Dispatch to $DOTFILES_HOME/config/${1#@}/bin\n  - .*         -- Tries to be smart. Looks for any executable under host, wm,\n                  then $DOTFILES_HOME/bin.\n```\n\n## Frequently asked questions\n\n+ **Why NixOS?**\n\n  Because managing a fleet of servers, a hundred strong, is the tenth circle of\n  hell without a declarative, generational, and immutable single-source-of-truth\n  configuration framework like NixOS.\n  \n  Sure beats the nightmare of brittle capistrano/chef/puppet/ansible/shell\n  scripts I left behind.\n\n+ **Should I use NixOS?**\n\n  **Short answer:** no.\n  \n  **Long answer:** no really. Don't.\n  \n  **Long long answer:** I'm not kidding. Don't.\n  \n  **Unsigned long long answer:** Alright alright. Here's why not:\n\n  - Its learning curve is steep.\n  - You _will_ trial and error your way to enlightenment, if you survive the\n    frustration long enough.\n  - NixOS is unlike other Linux distros. Your issues will be unique and\n    difficult to google. A decent grasp of Linux and your chosen services is a\n    must, if only to distinguish Nix(OS) issues from Linux (or upstream) issues\n    -- as well as to debug them or report them to the correct authority (and\n    coherently).\n  - If words like \"declarative\", \"generational\", and \"immutable\" don't put your\n    sexuality in jeopardy, you're considering NixOS for the wrong reasons.\n  - The overhead of managing a NixOS config will rarely pay for itself with 3\n    systems or fewer (perhaps another distro with nix on top would suit you\n    better?).\n  - Official documentation for Nix(OS) is vast, but shallow. Unofficial\n    resources and example configs are sparse and tend toward too simple or too\n    complex (and most are outdated). Case in point: this repo.\n  - The Nix language is obtuse and its toolchain is not intuitive. Your\n    experience will be infinitely worse if functional languages are alien to\n    you, however, learning Nix is a must to do even a fraction of what makes\n    NixOS worth the trouble.\n  - If you need somebody else to tell you whether or not you need NixOS, you\n    don't need NixOS.\n\n  If you're not discouraged by this, then you didn't need my advice in the first\n  place. Stop procrastinating and try NixOS!\n  \n+ **How do you manage secrets?**\n\n  With [agenix].\n\n+ **Why did you write bin/hey?**\n\n  I envy Guix's CLI and want similar for NixOS, whose toolchain is spread across\n  many commands, none of which are as intuitive: `nix`, `nix-collect-garbage`,\n  `nixos-rebuild`, `nix-env`, `nix-shell`, etc.\n  \n  I don't claim `hey` is the answer, but who doesn't like their own brew?\n\n+ **How 2 flakes?**\n\n  Would it be the NixOS experience if I gave you all the answers in one,\n  convenient place?\n  \n  No. Suffer my pain:\n  \n  - [A three-part tweag article that everyone's read.](https://www.tweag.io/blog/2020-05-25-flakes/)\n  - [An overengineered config to scare off beginners.](https://github.com/divnix/devos)\n  - [A minimalistic config for scared beginners.](https://github.com/colemickens/nixos-flake-example)\n  - [A nixos wiki page that spells out the format of flake.nix.](https://wiki.nixos.org/wiki/Flakes)\n  - [Official documentation that nobody reads.](https://nixos.org/learn.html)\n  - [Some great videos on general nixOS tooling and hackery.](https://www.youtube.com/channel/UC-cY3DcYladGdFQWIKL90SQ)\n  - A couple flake configs that I \n    [may](https://github.com/LEXUGE/nixos) \n    [have](https://github.com/bqv/nixrc)\n    [shamelessly](https://git.sr.ht/~dunklecat/nixos-config/tree)\n    [rummaged](https://github.com/utdemir/dotfiles)\n    [through](https://github.com/purcell/dotfiles).\n  - [Some notes about using Nix](https://github.com/justinwoo/nix-shorts)\n  - [What helped me figure out generators (for npm, yarn, python and haskell)](https://myme.no/posts/2020-01-26-nixos-for-development.html)\n  - [Learn from someone else's descent into madness; this journals his\n    experience digging into the NixOS\n    ecosystem](https://www.ianthehenry.com/posts/how-to-learn-nix/introduction/)\n  - [What y'all will need when Nix drives you to drink.](https://www.youtube.com/watch?v=Eni9PPPPBpg)\n\n  And if all else fails, ask for help on [the NixOS Discourse][nixos-discourse].\n\n\n[nixos-discourse]: https://discourse.nixos.org\n[doomemacs]: https://github.com/doomemacs/doomemacs\n[agenix]: https://github.com/ryantm/agenix\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhlissner%2Fdotfiles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhlissner%2Fdotfiles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhlissner%2Fdotfiles/lists"}