[HN Gopher] A decade of dotfiles ___________________________________________________________________ A decade of dotfiles Author : mmazzarolo Score : 276 points Date : 2022-05-30 10:25 UTC (12 hours ago) (HTM) web link (evanhahn.com) (TXT) w3m dump (evanhahn.com) | thayne wrote: | The first part of his murder command can be accomplished by using | pkill or killall (but maybe those aren't available on mac?). The | second part is useful though. | asiachick wrote: | Going to be _that_ person but an article named "a decade of | dotfiles" has nothing to do with dotfiles. The first sentence | says "My first commit to my dotfiles repository was ten years | ago" and then the entire rest of the article has nothing to do | with "dotfiles" whatsoever. | | And then nearly all of the comments are actually about the title, | not about the article itself. | swyx wrote: | sharing my own new mac setup + dotfiles here: | https://github.com/sw-yx/swyxdotio/issues/420 (maintained for ~5 | years) | yonrg wrote: | dot files, configs and hosts are now managed in ansible. | | First solution a decade ago was to have a git repo and dotfiles | were linked directly into the working dir. This was nuts. The | dots were changed immediately, when checking out other branches. | And slight differences between hosts were not easily manageable. | A branch per host was not a solution. | | I learned from those mistakes and wrote an installer script for | that repo which copied/rsynced files from repo into ~ | | Still, slight changes between hosts were not easily manageable | and I was thinking about a templating mechanism... but then | ansible became a thing which I happily adopted. | | Might be too much for most users, but it helps me managing many | machines. | mathstuf wrote: | Yeah, I started with the direct symlink long ago too | ("declarative" lines that were just shell commands sourced at | the top). I now have a more...complex setup that uses CMake. | The basic setup is: group/ (e.g., "devel" or | "pim") program/ (e.g., "vim" or "mutt") | CMakeLists.txt (lists files and packages needed; I use Fedora) | config/ local/ | | repeat for each program, sorted into groups. Each program is | added via a function that wraps `add_subdirectory` in an option | asking if I want to enable that project. It also takes a list | of dependencies (so, e.g., `mutt` is hidden if I turn off | `msmtp` or `nvim` since it needs it in its configuration). | | Each program's CMake code declares what needs symlinked, | directories to be made, permission bits, etc. This is used to | also write out a "validation" script to ensure symlinks are | accurate and to notice untracked config files and such. I then | just configure, turn the programs I plan on using on in the | project and then "build" it. It also generates a `dnf install` | argument list for me to install anything needed for these | configurations. | | The symlink setup is actually `$HOME/.path` (to avoid the repo | from having hidden files; skippable if needed in the CMake | code) -> `$builddir/group/program/path` -> | `$srcdir/group/program/path`. This way, turning off a program | nukes the build tree and then I can just go and look for broken | symlinks in `$HOME` to clean up. Per-host bits overlay cleanly | since I use split configs where possible (i.e., `include | *.rc`). | | One nice thing about using CMake is that I can also have | `add_custom_command` at hand to generate files if needed (I use | it to generate `xcompose` combinations). | caeruleus wrote: | Last year, I started setting up a Qubes OS workstation. Doing all | the intricate little steps manually seemed like such a waste of | time that I started learning SaltStack, which is built into the | Qubes management stack, to be able to automate and replicate the | setup. This small itch exploded in such a way that I wrote a | formula for almost every program on every system and server I | use. For all other small programs, I just use one formula that | syncs the appropriate dotfiles (I can also template them with | Jinja). | | In hindsight, going with Nix would have been the most efficient | way to reach most of that, apart from the Qubes-specific stuff. | This will probably be the next step on my (ironic) odyssey of | going all-in on configuration to finally stop worrying about it | and reap the benefits of the beauty that is computing without its | nasty warts. | | In essence, I would love a proper integration between Nix and | Qubes OS. | | Edit: For anyone interested in an example of my current process, | see https://github.com/lkubb/salt-tool-chromium-formula, | https://github.com/lkubb/salt-tool-gpg-formula or | https://github.com/lkubb/salt-tool-macos-formula. | rgoulter wrote: | > In essence, I would love a proper integration between Nix and | Qubes OS. | | This sounds like it'd be interesting to you: https://spectrum- | os.org/ | nunez wrote: | I also started my dotfiles over ten years ago! First commit was | in 2012. Use them every day. I thank the awesome folks at Jane | Street for teaching me about both dotfiles and Mercurial! (Second | job out of college.) | pqs wrote: | I started in 2009. :-) | technothrasher wrote: | 1990, and I've still got things in my .cshrc to fix quirks in | SunOS 4 and Irix that I can't bear to remove out of | nostalgia. | zvr wrote: | 1983, but not in a git repo ;-) | | Also stuff to distinguish between different Unix flavors | and hardware ("if it's this host which is a sun3 with FPU, | add -m68881 to CFLAGS") -- not removed but commented out. | jchook wrote: | > Prefer scripts over aliases | | I prefer aliases when possible because they inherit autocomplete | rules. Also it's easy to "complect" things with custom scripts. | yakshaving_jgt wrote: | > It doesn't work for everything. For example, I have a boop | command (which I mentioned above) that needs access to the | previous command's exit status--as far as I know, that's | impossible with a script. | | I got nerd-sniped by this. I can't see any reason why this | wouldn't work. I tested this myself by writing a script called | show-error.sh: #!/bin/bash echo $? | | And then I ran $(exit 5) . ./show- | error.sh | | And this outputs 5 | SuchAnonMuchWow wrote: | this only works because you are sourcing the file, and not just | executing it: | | $(exit 5) ./show_error.sh | | outputs 0. | | Sourcing the file is the same as copying and pasting its | content into the current shell. It is designed to allow this | kind of things (accessing the caller execution context). But it | is not what we usually call a script precisely because of this. | throwaway41232 wrote: | I cant really check this right now but doesnt | | $(exit 5) | | just spawn a subshell which exits with 5 which is visible by | the parent script you just source your show-error.sh in? | | Try to subshell the source too like | | (. ./show-error.sh) | faho wrote: | Well, yeah, if you _source_ the file (for which `.` is a | shortcut) it runs in the current shell so the environment is | intact. | | If you just run it it won't work. | | So instead of running `boop` you would always have to `source | boop` or `. boop`. A function or alias you could just run like | normal. | | (and `export ?` complains about ? being an invalid identifier | in bash, in zsh `export "?"` apparently "works", but will reset | it before you get a chance to print it in another process) | NegativeLatency wrote: | You could also pass the exit status into the program being | called | kunalgupta wrote: | luv murder | francis-io wrote: | No one asked, but I feel like I've been down this road before. | Heavily customizing a system with obscure lines plucked from | strangers dotfiles. These days I use VS Code and Firefox for | almost everything. | iRomain wrote: | For my dotfiles [1] I use https://www.chezmoi.io which I really | like using and stuck (as opposed to my previous dotfiles attempts | which didn't stick). Albeit I have only been using it for a few | months as opposed to the author's decade. | | I guess the idea is to find the one tool/methodology that sticks | with you. | | [1] https://github.com/politician/dotfiles | blueflow wrote: | I find it odd that people use extra management software for | their dotfiles. Most of the files are in `~/.config` anyways, | so you can track this folder like a regular directory in git. | And for the software that does insist on writing into `~` | directly you can set up symlinks, with a script or manually. | yunohn wrote: | > I find it odd that people use extra management software for | their dotfiles | | > you can set up symlinks, with a script or manually. | | So yeah... that's exactly what dotfile managers do with | standardised scripts. | twp wrote: | Tracking `~/.config` as a regular directory in git only works | if all your machines are near-identical. If you want to share | dotfiles between, say, Linux and macOS, or between your home | and work machines, then a dotfile manager makes it much much | easier. | | For more reasons, see: https://www.chezmoi.io/why-use- | chezmoi/ | | Disclaimer: I'm the author of chezmoi | vivab0rg wrote: | Unrelated, but thank you for chezmoi, it's a clever little | utility very well designed. I use it to manage many | distinct Arch-based systems and soon will be moving my | Ubuntu servers to it. Congratulations! | twp wrote: | Thank you <3 | vivab0rg wrote: | I managed my dotfiles across many distros using a bare multi- | branch Git repo. But eventually it became a chore to share | snippets among them. Chezmoi is little thin utility wrapper | over Git that handles this usecase beautifully. I switched to | Chezmoi over the weekend and just shudder to the thought of how | much time I could have saved had I found it earlier. | e3bc54b2 wrote: | This is a good one, I hope I'll have mine for that long (started | 2019). | | Personally, I stopped worrying about dotfiles and GNU stow after | joining the cult of Nix. While I gave honest attempt to | everything else, Nix made it stick. Now I only have one single | repo, where In write config for (almost) all of my applications | in Nix, deploy them with Nix, rollback with Nix etc. Compared to | hodgepodge of INI/YAML/TOML/XML/JSON/WHATHAVEYOU it is nice to to | only have single tool to worry about. | | I wished Guix had the momentum and size of Nixpkgs. I'd much | prefer a Lisp than the language contraption of Nix. | doliveira wrote: | Oh, I so wish to learn it, seems quite awesome. I literally | made my own scripts to do exactly this management over the | years. But the learning curve seems huge, not many good | resources, etc... Honestly they all sound like those posts | trying to explain monads | | And frankly, I barely have motivation to study more concrete | stuff... | e3bc54b2 wrote: | Admittedly, it can be worse than sitting down and reading the | manual front to back, but I did it the hard (or simple) way. | | I used the simple template generated during nixos-install and | kept adding packages I needed. Configured them manually as | usual and went about my business. It works out more often | than people would realize. For services, development | toolchains etc just google and copy-paste from other people's | config. Simply add 'ext:nix' to google query and you should | be good. | | I'm at almost 3 years, know just enough Nix to write some | custom stuff, but nowhere close to the Wizard title. Its not | as bad as people make it out. | | Remember, your target is not to master it on day 1. Target is | to get VLC to play the media file (or some equivalent for | you). | klysm wrote: | As soon as you get something weird though, the rabbit hole | is forever | ewuhic wrote: | Can one use the benefits of Nix provisioning while using other | linux distro, Debian specifically? | PufPufPuf wrote: | You can install Nix package manager on any system, but the | packages will be separate from system packages. You can try | it and switch to full NixOS if you like it | mschwaig wrote: | If you are talking about provisioning dot files and command | line applications you want to have available on all you | machines then take a look at home-manager. | | https://github.com/nix-community/home-manager | | I use it on NixOS. It should absolutely work on other distros | unfortunately I don't have any first hand experience with | that or with what the best way is to set it up on other | distos (I think there are few options for how to do it). | chrisweekly wrote: | > "there are few options" | | I'm curious about your phrasing. In idiomatic English, this | says "there are _not many_ options", IOW options are | limited. It emphasizes the constraints. OTOH had you | written "there are _a_ few options", it'd emphasize the | existence of more than one option, with a positive | connotation. | | From context I infer you meant the latter, is that right? | mschwaig wrote: | Yes sorry. This was a typo. | | I meant to write 'a few options'. | rgoulter wrote: | Yes. I think it's a good way to get started with Nix. | | e.g. with nix installed, you'll be able to use the nix-shell | to get the development dependencies without having to install | system wide, if a shell.nix or flake.nix has been written for | it. (e.g. for repos like https://github.com/helix- | editor/helix). | | You'll be able to use the `nix shell` command to try out a | program without needing it installed system wide. Or you can | figure out how to write your own nix-shells etc. | | I think Home Manager is worth trying only once you're | otherwise familiar with Nix (or if you find a good config to | copy-paste from, though), since Nix's error messages and | debugging still aren't great. | francis-io wrote: | Currently I use Ansible to deploy my dotfiles, along with | anything else needed to setup a workstation. I keep seeing | people mention Nix. Would it give me anything that Ansible and | Git can't give me? | pmarreck wrote: | Ansible : Nix :: using Javascript to lay out a webpage : | using CSS to lay out a webpage | colordrops wrote: | There is no AnsibleOS, so you'll not have a reproducible OS, | and as the base OS gets upgraded underneath, ansible scripts | will break. Also, you have to put a ton of effort into making | sure Ansible scripts are idempotent, and even then there are | usually leaks. Nix (with flakes) is 100% reproducible and | it's very difficult to do anything that isn't idempotent. | What this all means is that there is more effort up front | learning and setting it up, but a lot less effort and | suffering in the long term. | | I personally switched for these reasons. | noahmasur wrote: | Mostly it provides guarantees about your system. It | guarantees that anything not in your config is not on your | system (for the most part). It guarantees that everything | builds successfully before it applies any changes. Most of | the filesystem is immutable so it forces you to use the | configuration. | | There are some other advantages: rollback to a previous state | at any time, enable complex system services with one line in | your config file, install multiple versions of tools on your | system without conflicts, install programs without root | (using home manager), build VMs and Docker images, pin the | versions and dependencies of all packages for | reproducibility, patch software with your own tweaks | natively. You can also put a Nix file in a code repo and | easily share your build dependencies with other developers. | francis-io wrote: | This might show my ignorance, but can Nix replace something | like asdf (https://github.com/asdf-vm/asdf)? | noahmasur wrote: | Yes, that's exactly the kind of thing it's great at. | | Nix stores all builds of its packages in a separate | "store" on the machine, each identified by the hash of | the build ("derivation"). When you activate your config, | it basically symlinks the version you want into your | PATH. | | If your project needs a specific version, when you | activate a Nix shell or script it will check your store | for that version and activate it. If it doesn't exist, it | will fetch it (or even compile it from scratch if you | need to). | kcorbitt wrote: | Part of the magic of asdf is that it reads a `.tool- | versions` file from anywhere above your current directory | and applies the correct version of each tool based on the | listed value. (You can also configure a global default | version for each tool in case your directory tree doesn't | have a .tool-versions file with an entry for the tool you | want to use.) | | Does Nix allow for a similar workflow? It's really nice | to be able to move between projects and automatically | have the correct tool versions configured without having | to run any special command. | noahmasur wrote: | To add to what rgoulter said, you can use your default | system configuration plus whatever the project says you | need (and the project's shell will override any conflicts | with your default). | | However, if you really want to make sure that you're not | including anything from your system, you can have direnv | pass the `--pure` flag, which will then include _only_ | the dependencies from the project and nothing else. This | is helpful to make sure that you 're not accidentally | relying on something already on your system when you | declare the project dependencies. | rgoulter wrote: | Pretty much. You'd use Direnv to support this UX. | https://direnv.net/ | | I think the nice thing about project-specific tooling | like this is it allows getting started with the project | very easily. (Rather than copy-pasting "apt-get | <whatever>"). | rgoulter wrote: | I'd describe nix as "programmatic package management". Nix is | a difficult tool to learn, but very powerful. A lot of nice | UX use cases with Nix could perhaps be described as "like | Docker, without the containers". | | In terms of applying configs, ansible is 'convergent', where | Nix is 'congruent'. | https://blog.flyingcircus.io/2016/05/06/thoughts-on- | systems-... (ansible will make changes to get it closer to a | target state, whereas nix will reach the target state by | constructing the target state again). | francis-io wrote: | Thank you. As someone who uses containers a lot (even to | run local programs, shout out to | https://blog.jessfraz.com/post/docker-containers-on-the- | desk...) this makes some sense to me. | | I'm a little way into the Nix Pills document | (https://nixos.org/guides/nix-pills/why-you-should-give- | it-a-...) which seems to start the explanation from a place | where I can understand. | ajvs wrote: | X11 is pretty poor for security, you should use Flatpak | as it has sandboxing and still stores all its files in | one directory. | rprospero wrote: | The biggest advantage that I can give is that everything is | together in a unified language. To give a trivial, but | extreme example, my workstation's colour scheme is controlled | via my Nix setup. This includes terminal colours, GTK theme, | Emacs syntax highlighting, Matplotlib colours, CSS overrides, | window manager, and more. Yet I can change a single line in | my Nix file and update all of these without worrying about | the myriad configuration languages that are involved. A | single change on a different line will update the default | font for all these applications as well. | jeppesen-io wrote: | yep! also what I find nice is you can just ref a package in | a config and it just gets installed | | e.g. create a g zsh alias for git using the alias section | of zsh module in home manager | | > g = "${pkgs.git}/bin/git"; | klysm wrote: | I wonder if we can make nix into a library of sorts for other | languages so we don't have to deal with its arcane-ness. | a-dub wrote: | i want to like nix, but the inconsistent naming and use of the | language was a huge turn off. | | all the randomly named config options and the spotty coverage | of them were like fingernails on the chalkboard for me. | tylergetsay wrote: | Any tips on places to get started with Nix? | jeppesen-io wrote: | I'd just install nix + home-manager on your linux or Macos | box. That's not too hard. Then take one of your dotfiles | supported by home-manager e.g. kitty term, and port it to nix | + home-manager | | No need to boil the ocean, just start small. You can mix and | match with what you're using now. If you like, port it all to | nix over time | e3bc54b2 wrote: | If you're looking to learn Nix start-to-end, there manuals | for Nix and NixOS, both are good. | | This is an extensive study at trying to 'understand' Nix, | because is does so many things differently: | https://ianthehenry.com/posts/how-to-learn-nix/ | | If you're just looking to start building your system, follow | NixOS manual up until you have a running system, then pace | yourself as you will. You can also setup Nix on existing | Linux distro or macOS and practice the ropes before plunging | into NixOS. | pmarreck wrote: | > I wish Guix had the momentum and size of Nixpkgs. I'd much | prefer a Lisp than the language contraption of Nix | | This is exactly my feeling as well. The fact that Guix uses | Guile (which is basically Scheme, a Lisp) throughout the entire | process (even from the preboot environment!) is kind of a big | deal. Plus the commandline UI is just _better_ (at least if you | prefer your package manager to look like "brew install | <packagename>" instead of "pacman -Ssyyu <package>"). I know | the "nix" command is making headway there but it's apparently | also being rewritten at the same time and is basically still a | buggy clusterfuck plus I hear there's an added complication of | friction between the older nix devs and the newer committers | working on the newer stuff. | | I almost wish there was a "declarative Bash" variant on a fork | of Nix that would allow people to lean on Bash knowledge but | would only permit declarative style operations, so you could | get the underlying Nix goodness but would have a more familiar | (to most) declarative command language on top of it... or even | better, something like https://wryun.github.io/es-shell/ | | ... but you'd still lose the nix momentum | cassepipe wrote: | How did you learn Guile ? | | Here is my experience so far : | | https://news.ycombinator.com/item?id=31558878 | akavel wrote: | Notably, Nix with home-manager. Makes it pretty seamless for me | to switch between Linux, Mac, and between employers. I love it | even more since I got my home-manager config to be a Nix Flake | - this way I have it 100% deterministic and can | upgrade/downgrade the tool versions when I like without | worrying too much whether I'll be able to go back if something | breaks (having flake.lock versioned in git is kinda mandated | and checked by Flakes). | shreyshnaccount wrote: | Does having one gh repo with everything on there count? Asking | for a friend... | asiachick wrote: | So, not having heard of Nix, I go to their home page and watch | the video. It shows "nix-shell -p nodejs". Hmm, sounds like | it's using the apt-get version of node which is usually out of | date. It then shows making a shell.nix that enables nodejs and | commits it to a repo and suggests sharing it. This completely | ignores the fact that my various projects requires specific | versions of node. Maybe the first example shouldn't be one | that's pretty clearly wrong? | akho wrote: | > sounds like it's using the apt-get version of node which is | usually out of date | | It's using the Nixpkgs version, which unfortunately depends | on which nixpkgs channel you're on. There's a `nodejs_latest` | attribute, which is actually latest (18.2.0 right now), as | well as `nodejs-12_x` or somesuch for past major versions | (where required by other nixpkgs packages). Plain `nodejs` | should be the LTS version. | | > This completely ignores the fact that my various projects | requires specific versions of node | | Nix allows you to pin either nixpkgs or a particular package | with commit-level granularity. I'm not sure this sort of | video is the right place to introduce that. | asiachick wrote: | would have been all that hard for the video to show | node-12.x instead of nodejs? I would have clearly shown | choosing a version instead of wrongly showing bad | unreproducible practices that makes anyone paying attention | question if the devs actually get what they're doing | akavel wrote: | Notably, with Nix Flakes, everything managed by Nix gets | automatically 100% precisely pinned to specific versions by | hash. | mekeor wrote: | there's a lispy alternative to nix, called gnu guix, which uses | guile/scheme instead of nix-lang. | e3bc54b2 wrote: | I know, I even mentioned it. Unfortunately and understandably | Guix means my WiFi won't work and there will be less stuff | supported OOTB. So I'll be on Nix for foreseeable future. | sierkov wrote: | https://gitlab.com/nonguix/nonguix ? | turboponyy wrote: | You can include community sources in order to use the | standard, non-libre Linux kernel - though my Guix | experience was a bit frustrating in part due to | complications such as this one compared to what I'm | currently experiencing with NixOS (thoroughly enjoying | it!). | | There are a fair few very vocal former NixOS users who miss | no opportunity to extol the benefits of Guix in the | chatrooms I frequent, though. Not without merit either, I | should say: the project and its UX does seem to be much | more well-thought out; it's developed by GNU; the project | takes software freedom seriously; many will surely enjoy | hacking away at their config in Scheme. As it stands | currently, though, there are more resources and it's easier | to get things done with NixOS - you also get to use learn a | (imo really great) packaging system that is in somewhat | wide use. | cassepipe wrote: | I tried learning Guile some days ago because Guix seems so | cool and I like the idea that the configuration is not done | in a special purpose language. | | Had never lisped before. | | It seemed cool and I tried my hand with a tutorial that makes | you embed guile in a C program to make it interactive. It was | okay but it seemed like too much boilerplate to have to | register functions individually but maybe it is standard when | embedding. Never tried with lua or Janet before so I can't | say. | | In general there is a lack of resources, it is quite hard as | a beginner to get a start with the language past playing with | the repl a little. | | Also tried to see if there was a Guile version of the famous | SICP but ugh it was not straightforward. | | I gave up. Hope Guix will foster better resources on Guile | Scheme. | pmarreck wrote: | wow, I didn't know about a lot of these useful tools, super cool! | kuon wrote: | I used to use stow to manage my dotfiles but this was a | cumbersome step that didn't provide any real advantage. | | Now I just edit config files by hand and with zfs autosnapshot I | can easily rollback if needed. | | I'd love to try something like nix, but I rely on many aur | packages that are bleeding edge for my workflow, I fear it would | be hard to be up to date with nix, but I have not tried yet. | ninjin wrote: | NixOS user here. My experience is that if you track unstable, | you will have bleeding edge packages within a day or two from | an upstream release. Likewise, due to how Nix works, you can | pick and mix from stable, unstable, and your own custom | expressions to your heart's content. My personal preference is | stable, with a very small subset of packages from unstable that | I try to peg back to stable once there is a new stable release. | | I will not pretend that there is not a learning curve though, | Nix is a bit of a beast. | superpope99 wrote: | > You don't need to reload your shell when you work on it. | | For this point - I use an alias alias | chalias="vim ~/.bash_aliases && source ~/.bash_aliases" | | auto-reloads the aliases when you exit the file | MenaceInc wrote: | Aliases all the way down | sgiratch wrote: | The site from wayback machine since it died from hug of death | https://web.archive.org/web/20220529161019/https://evanhahn.... | lobocinza wrote: | murder is similar to killall | thejosh wrote: | I have recently gone through mine when I finally changed to zsh | after using Bash for the last 16 years (starting on Ubuntu and | removed so many random commands I used. Now I barely need | anything, as the tooling is really good and is going through a | renaissance. | | Ripgrep (coming from silversearcher a few years ago) is one of my | favourite tools I use constantly. | dividedbyzero wrote: | I use yadm (https://yadm.io/), very happy with it. It's a thin | wrapper above a git repo rooted in the user home that is | configured to ignore untracked files. yadm adds a bunch of | helpful convenience feature on top (like "alt files" that symlink | either one or the other file depending system tags or the OS, and | secrets [which I don't use]) | mikewarot wrote: | As a long time Windows user... I had no idea, nor knowledge of | dotfiles. I found this introduction[1] which seems to explain it | fairly well, as far as I'm concerned. | | I find the idea of having a file system full of links in it a bit | odd.... but I only discovered the nest of them in my Windows 10 | system a month or so ago with the windows DIR /AL command. I'll | have to get over the cognitive dissonance and adjust to this new | reality. | | 1 - https://www.freecodecamp.org/news/dotfiles-what-is-a-dot- | fil... | akavel wrote: | AFAIK, many Windows apps traditionally tend to use the registry | for storing their configs. Which I believe is a similarly odd | and foreign idea to most Linux users. On the other hand, before | there was the Registry, there were .INI files on Windows too, | so kinda similar like dotfiles. | dimgl wrote: | > I find the idea of having a file system full of links in it a | bit odd... | | Windows has the same concept of a PATH, which is where your OS | looks for binaries. The difference is that Windows development | is, most of the time, not CLI driven, especially if you use | Visual Studio and other GUI tools. | | Development in Windows is a completely different beast to | Linux/Unix. | tasuki wrote: | > I find the idea of having a file system full of links in it a | bit odd... | | Why? | inetknght wrote: | > _I find the idea of having a file system full of links in it | a bit odd_ | | I used to be a Mac user. Everything stored settings in resource | forks and binary. When I moved to Windows, it was weird to have | a registry for most things and some things used .ini files that | were more useful. It was nice to have user-readable settings | even if they were in obscure places and directories. | | When I moved to Linux, dotfiles all made a whole lot more | sense. | | I've helped others learn how to Linux. Windows hides a _lot_ of | things in order to make the user experience idiot-friendly. I | 've had to un-teach them the crap that Windows teaches them. | tomxor wrote: | > Saying that I've been maintaining my dotfiles for a decade is | like saying that I've been decorating my home for a decade. | | I think it's more like decorating your home for the first time | (which is a lot of work), but then in the proceeding years you | keep tweaking a few bits to your liking as you learn more about | "decoration". | | The true benefits of the analogy break down a little, for | instance one big advantage is persistence, stability and control | - that some large corporation doesn't keep rudely breaking into | your home every month and forcefully redecorate everything with | the latest trend, or keep moving the furniture and light switches | around while you are asleep, and inserting annoying store fronts | into critical appliances like the fridge, or your toothpaste... | The other benefit being that you can fairly effortlessly take | your decorations with you to your next home! | unboxingelf wrote: | I've been decorating my home for a decade. | | I've been decorating my $HOME for a decade. | tomxor wrote: | I quite like to destroy my $HOME occasionally | | So I've been decorating my $XDG_CONFIG_DIRS for a decade. | [deleted] | bbkane wrote: | I used GNU Stow for a several years and always found it difficult | to tell what symlinks were actually being created, even in | verbose mode. | | When I also ran into the stow bug with --dotfiles , I gave up on | stow and wrote fling ( https://github.com/bbkane/fling ), which | works quite similarly, but prints out what symlinks it plans to | create and asks for confirmation before making them. Being | written in Go, fling is also easy to install on Windows, which | has come in real handy on occasion. | asdfqwertzxcv wrote: | Looks excellent! This is my major gripe with Stow as well. | kkfx wrote: | My personal sauce is Emacs with org-mode configs to be tangled, | far more efficient than anything else tried before to manage | dotfiles I care, ignoring those I do not care... | | NixOS (since unfortunately Guix System is still a bit raw for me) | complete tha game allowing to easy tangle the whole system config | and generate a custom iso with Emacs and all the rest. | | Zsh complete the game as shell, eshell honestly it's on my list | but I still can't use it daily... | jamesmstone wrote: | hey thats neat! how do you build the iso? | kkfx wrote: | It's very simple, a basic NixOS config like | https://paste2.org/E5IUKfs9 built with nix- | build '<nixpkgs/nixos>' -A config.system.build.isoImage \ | -I nixos-config=iso.nix | | you can add anything else, for instance X config for | interactive usage, perhaps with the same (nearly) EXWM used | normally etc. Nix language is obscene but making iso is | awesome easy, just a matter of download and build time. | swyx wrote: | i couldnt figure out what "sfx good" was in the boop command so | in case anyone was wondering here is my mac osx equivalent | 110 boop () { 111 local last="$?" 112 if [[ | "$last" == '0' ]]; then 113 afplay | /System/Library/Sounds/Glass.aiff 114 else 115 | afplay /System/Library/Sounds/Submarine.aiff 116 fi | 117 $(exit "$last") 118 } | teodorlu wrote: | I love `entr`, but I've recently moved a lot of my `entr` usage | to `watchexec`. Entr requires a file list on stdin, watchexec | watches the current folder. | | With entr: find . | entr COMMAND | | with watchexec: watchexec COMMAND | | Watchexec also gracefully handles new files and file deletions. | | https://watchexec.github.io/ | teodorlu wrote: | I think entr handles some things more cleanly, though: | | 1. Some bash is allowed, which has been confusing me. I'd | rather call 'bash -c "echo stuff > file"' myself. 2. Watchexec | has its own interface for "filter which files to watch". Entr | just relies on unix tools. | fallat wrote: | The point is that entr can then focus only on specific files... | watchexec now has to add special behaviors for .gitignores and | whatnot. It's way more flexible and you can alias this so you | don't have to remember anything or save it to ~/bin/my-watcher- | thing.sh (both of these things I find people are not using | enough). ___________________________________________________________________ (page generated 2022-05-30 23:00 UTC)