hallettj

joined 2 years ago
[–] hallettj 4 points 9 months ago

I think you can mount an ISO image under your running system and make changes. I found a couple of guides that might be helpful:

How to Mount an ISO File on Linux

Edit and repack .iso bootable image

I haven't done this before, but I think you can chroot into the mount directory, and run package manager commands in the mounted image to install another package.

Or I have an alternative suggestion that might or might not be easier. I've been hearing a lot about immutable/atomic distros, and people designing their own images. You could make your own ublue image, for example, with whatever you want on it.

A promising looking starting point is github:ublue-os/startingpoint. Ignore the "Installation" instructions, and follow the "ISO" instructions instead.

Or I saw recently an announcement of a new way to build atomic images that is supposed to be easier than ever, BlueBuild

[–] hallettj 17 points 9 months ago (1 children)

Oh is that where all the memes went? My instance isn't federated with lemmy.world so it just looked like the star trek energy vanished.

While I'm here... I finally finished season 4 of Discovery. That show has been getting much stronger as it goes on IMO. I especially enjoyed the last ~3 episodes! I also like the take on the "villains" of the late season (the two humanoid ones). It's a refreshing departure from unsympathetic, plain evil antagonists.

[–] hallettj 7 points 9 months ago (1 children)

LEDs should last for tens of thousands of hours. There may have been a manufacturing defect in OP's case.

[–] hallettj 2 points 9 months ago (1 children)

It scrolls smoothly, it doesn't snap line by line. Although once the scroll animation is complete the final positions of lines and columns do end up aligned to a grid.

Neovim (as opposed to Vim) is not limited to terminal rendering. It's designed to be a UI-agnostic backend. It happens that the default frontend runs in a terminal.

[–] hallettj 2 points 9 months ago

I realized I made an implicit assumption that I didn't explain. You can use Nix without NixOS. But the configuration you're looking at is specifically a NixOS configuration. The shortcuts for setting up nextcloud services are based on the NixOS module system. You could get the same setup with Nix without NixOS, but you'd have to reproduce some of the functionality that is provided out-of-the-box in NixOS. My answer is one way to use the functionality from NixOS without fully installing NixOS.

[–] hallettj 5 points 9 months ago* (last edited 9 months ago) (2 children)

I think there's a way that might be easy-ish. In short what the services setting does is to get necessary packages, write configuration files, and install systemd unit files. You can build a NixOS configuration, and symlink or copy the necessary systemd units and configuration files. I think that would work, and would not interfere with other stuff on your system.

NixOS configurations must be built with nixos-rebuild - you can't use nix-build by itself. You can put your configuration wherever, and run:

$ nixos-rebuild build -I nixos-config=./configuration.nix

That will build everything in paths under /nix/store/ without touching anything else on your system. It will create a symlink in your working directory called result/ with a fully-built, bot not installed, NixOS. If you were running NixOS you would run nixos-rebuild switch to update symlinks to point to all of this stuff. But you'd skip that step.

result/etc/systemd/system/ contains systemd units. There will be a lot of stuff there that you don't want. You'd need to selectively symlink or copy units from this directory to your /etc/systemd/ tree.

The units use full paths to binaries in /nix/store/ so you don't need to do anything extra to install software packages.

You might need to symlink or copy configuration files for your services. Those should also be somewhere in result/.

If NixOS and Debian use the same systemd target names your services should run automatically on boot. If not you might have to do some fix-up, or run systemctl commands manually. I think you'd need to run some systemctl commands to start and stop services if you want to update without rebooting.

You can probably do all that symlinking just once if you symlink everything through that result symlink.

Edit: Although, taking a closer look at what services.nextcloud does I see that it does a lot, like initializing databases and creating user accounts if you choose to use a local database. It might be a lot of work to chase down all of the configuration that you would have to copy over. Running NixOS is definitely going to be easier.

[–] hallettj 2 points 9 months ago (6 children)

I don't know if it's your cup of tea, but Neovide provides smooth scrolling at arbitrary refresh rates. (It's a graphical frontend for Neovim, my IDE of choice.)

[–] hallettj 6 points 9 months ago

A credit system is an essential piece of a robust economy

[–] hallettj 6 points 9 months ago

(This is probably explained in the article, but I don't have a subscription.) The National Ignition Facility (NIF) creates fusion by bombarding a fuel capsule with lasers. The laser beams are reflected many times to build up energy, and to converge on the capsule. There is energy loss during that process so the laser energy that goes into the capsule is a small fraction of the electricity used to fire the lasers. When they say they got twice the energy out, that's compared to the laser energy going into the capsule, not the energy required to fire the lasers. So its a long way off from a practical power plant, but still important progress.

The purpose of the NIF is to study what goes on inside the capsule - for better understanding, and to figure out how to get the most possibly energy out of a fusion reaction. Once they have figured that out a possible next step is to design a system that delivers laser beams with less input energy. It's easier to do that after you know the ideal way for beams to interact with the capsule. Or maybe we never build a power plant based on the NIF design, but the findings help to make other reactor designs work.

[–] hallettj 6 points 9 months ago

If I'm doing more than one cracking two together is best. For the last one, countertop.

I get the flat, inside-the-sink idea. But I'd want to clean either way, and I clean the counters more often than I clean the sides of the sink.

[–] hallettj 1 points 9 months ago

I haven't worked with the deployment tools which is what I think would make the most direct comparison to other automation frameworks so I don't know how comparatively opinionated they are. I suspect it varies between those tools.

Using NixOS or Home Manager there is a certain way of doing things. But these are intended to be opinionated. Packages and modules come from either nixpkgs, or from third-party flakes which package for Nix. Services are usually orchestrated through systemd units which come from Nix packages.

You can do anything with Nix. The tools and frameworks encourage certain ways of doing things. But that depends on the framework. You can always build a new framework that works differently. Since they are all based on common concepts of Nix expressions, derivations, and in many cases flakes you get a certain baseline interoperability between frameworks.

[–] hallettj 8 points 9 months ago (2 children)

Well you're really feeding my Nix confirmation bias here. I used to use Ansible with my dot files to configure my personal computers to make it easy to get set up on a new machine or server shell account. But it wasn't great because I would have to remember to update my Ansible config whenever I installed stuff with my OS package manager (and usually I did not remember). Then along came Nix and Home Manager which combined package management and configuration management in exactly the way I wanted. Now my config stays in sync because editing it is how I install stuff.

Nix with either Home Manager or NixOps checks all of the benefits you listed, except arguably using a "known" programming language. What are you waiting for?

 

Posting just because I looked all over and didn't see an answer. This function expands its arguments to canonical, absolute file paths, and tests whether one is a string prefix of the other. It also works for checking whether a directory is inside of or is identical to another directory.

local is_file_in_directory = function(file_path, directory_path)
  local file = vim.fn.fnamemodify(file_path, ':p')
  local dir = vim.fn.fnamemodify(directory_path, ':p')
  return file ~= nil and dir ~= nil and
      -- is dir an initial substring of file?
      file:find(dir, 1, true) == 1
end

This came up because I'm setting up obsidian.nvim which looks like a handy way to get the best of both worlds between Obsidian and Neovim. I'm setting up some custom configuration to automatically change the selected Obsidian workspace when I cd into vault directory, and to set conceallevel = 1 only on files in a vault, and that requires checking whether the working directory or a file path is inside a given vault directory.

 

This is something that I struggle with. I know how to find top-level packages like git or cowsay. But what about utilities under nested paths? I always spend ages digging through the nixpkgs source code to try to find utilities to use in my nix expressions.

Today I want to use buildRustPackage. It's defined here, and is propagated here. But how do I access it given a pkgs variable? I have no idea!

https://search.nixos.org/packages is no help

nix search nixpkgs doesn't find it

I think I need to search by attribute name, not by derivation name. But I don't know how to do that.

3
submitted 1 year ago* (last edited 1 year ago) by hallettj to c/nixos@lemmy.ml
 

It took me a while to figure this out. I use Home Manager to manage my Gnome settings by setting dconf.settings = { ... }. My settings are non-trivial (for example my paperwm module). So it's helpful for me to check the actual dconf settings that Home Manager produces.

To do that build your configuration with home-manager build, open result/activate, and find a line that looks like this:

$DRY_RUN_CMD $DCONF_DBUS_RUN_SESSION /nix/store/4ab7dx08wx640444m71axlqvbrvz73bv-dconf-0.40.0/bin/dconf load / 
  < /nix/store/0hdnvwx8d9sifd6ib8n2hhblyblq0ccp-hm-dconf.ini

The store path for hm-dconf.ini has the settings.

Edit: added a line break to the script line so you can see the relevant store path

 

I have a workaround so this isn't exactly a problem for me. I'm just curious about what is going on, and what best practices are.

I'm setting up Arion. I think it will be helpful for my development flow in a project where I have several services that need to run and communicate with each other. Docker-compose is a nice way to handle this, but you have to have a Docker image to run, and it's a pain to create a new image after each code change. OTOH Arion will run an arbitrary command, and creates Nix-friendly images automatically. Very promising!

The Nix expression for the service I'm developing is exported from a flake, while the arion executable reads its configuration from a Nix expression that is not a flake. There is an example configuration that recommends importing a flake using builtins.getFlake which you can see here: https://github.com/hercules-ci/arion/blob/main/examples/flake/arion-pkgs.nix

The problem is that builtins.getFlake is slow. It adds >20s to every arion command I run. That includes starting services, reading logs, removing stopped containers, etc.

The example config includes a fallback that loads the flake using flake-compat instead of builtins.getFlake. When I use flake-compat loading the flake is nearly instant.

So I'm using flake-compat, and that seems to be working. (Many thanks to the flake-compat author!) But I'm curious why builtins.getFlake is so slow.

 

I've had a problem making commits with fugitive for a long time, over a number of versions of Neovim. Has anyone seen this error before? I've searched a number of times but not found anything.

I use the cc binding in a fugitive window to open a split to write a commit message. Then I run :x to close the split and finish the commit. Most times - but not every time - I get this error message, the commit is not made, and the fugitive window becomes blank.

g`"                                                                                                                            
Error detected while processing BufEnter Autocommands for "fugitive://*//"..function 81_ReloadWinStatus[11]..81_Reloa
dStatusBuffer[6]..fugitive#BufReadStatus[364]..BufEnter Autocommands for "fugitive://*//"..function 81_ReloadWinStatus[11]
..81_ReloadStatusBuffer[6]..fugitive#BufReadStatus[292]..BufReadPost Autocommands for "*"..function fugitive#Resume[5]..<s>81_RunWait:                                                                                                                 
line   29:                                                                                                                     
E242: Can't split a window while closing another

I don't know what the deal is with the g`" line in messages. That might be a clue?

This does not happen when I make a commit without writing a message - for example when I use ce to amend the last commit without editing the commit message.

 

Instead of getting plugins through nixpkgs I prefer to use my neovim-specific plugin manager. (In my case that's lazy.nvim.) Mostly this works without problems - but some setup is required when a plugin needs to compile something. The plugin that has given me the most trouble is Treesitter which wants to compile grammars. Here is how I got that working.

tl;dr: Configure Treesitter to compile grammars with gcc instead of clang.

As has been reported in https://github.com/nvim-treesitter/nvim-treesitter/issues/1449 Treesitter will try to use clang to compile Treesitter grammars, and on NixOS for some reason clang is not able to locate necessary C++ libraries. The fix that works for me is to configure Treesitter to use gcc instead. Here is the relevant part of my plugin config:

return {
  'nvim-treesitter/nvim-treesitter',
  build = ':TSUpdate',
  config = function()
    -- Set compiler to get grammar installation working in NixOS. See
    -- https://github.com/nvim-treesitter/nvim-treesitter/issues/1449
    require('nvim-treesitter.install').compilers = { 'gcc' }
    require('nvim-treesitter.configs').setup {
      ensure_installed = 'all', -- "all", or list of languages
      ignore_install = { 't32' }, -- t32 is failing to download for me
    }
  end,
}

I still had a problem with the t32 grammar, but I don't need that one so I disable it.

Of course you need to make sure that gcc is available. You could put it in your user profile, but I prefer to make sure by using the extraPackages option from Home Manager's neovim module. Here's my full config:

programs.neovim = {
  enable = true;
  defaultEditor = true;
  withPython3 = true;
  extraPackages = with pkgs; [
    fd
    gh # for github integration
    ripgrep

    # needed to compile fzf-native for telescope-fzf-native.nvim
    gcc
    gnumake

    # language servers
    nil # Nix LSP
    lua-language-server

    nixpkgs-fmt # I have nil configured to call this for formatting
  ];
};
 

I'm using a PaperWM which is a scrolling window manager extension for Gnome, and I love it! But it's an extensive extension which means it is sometimes brittle. I've thought it would be nice to find a window manager that is natively designed with a workflow that I like. There don't seem to be any actively-maintained scrolling window managers out there. But scrolling is kind of a special type of tiling - I was hoping that someone with tiling experience could give me some tips on how to configure Hyprland, Sway, or something else to customize it for my particular working style.

I've realized that generally what I want is to be able to look at 2 windows at a time. But often I want to keep one of those windows in view, while swapping out the second window. For example,

  • When programming I want to keep my editor in view while switching between a terminal or a browser as my second window.
  • When researching I have a browser window in view, and for my second window I'll switch between my notes app, my todo list, my password manager, a map, etc.

And there are some features I'd like,

  • When programming I'd like to be able to make my editor full screen sometimes, and be able to quickly switch back to editor-and-terminal side-by-side.
  • When there are more than 2 windows on my workspace I'd like the ones I'm not looking at to go away without having to think about moving them to a specific other workspace.
  • When I open a new window I'd like to automatically see that window next to the previous window I was looking at, ideally moving other windows out of the way instead of making my previous window smaller.

I know most of this could be done with two monitors. But I have one ultrawide instead. Besides, I'd like to be able to use a 3/4-1/4 or 2/3-1/3 split in some cases.

So what do you think? Do you have a workflow that you love that you'd like to share?

 

My family needs a second car. I'm thinking about a used Chevy Bolt or Nissan Leaf so I think the cost will be about $20,000.

What's a good source for financing? I was thinking about getting a loan from my bank, Chase. But I see there are also lenders that specialize in car loans, and there might be dealership options? My credit score is over 700.

 

I've been searching for a way to do this, but I haven't found anything. After I have refactored my Home Manager configuration is there a way I can test the changes in a shell before I switch?

From what I understand the next-best option is to switch, and then find and run the activate script of the previous generation to switch back.

 

It's a story as old as time. I moved into a new place with great fiber internet - but the modem is in the garage, my desktop PC is not, and the place is a rental so I have limited options for making modifications. The signal is not bad, but I'm getting dropouts.

Since the PC and router are fixed in place I thought maybe a directional antenna or two would help? 5GHz directional antennae are kinda scarce which makes me wonder if I'm on the wrong track. Does this new "beamforming" thing supersede directional antennae?

I have 802.11ax (a.k.a. Wi-Fi 6) on both sides of the connection. Maybe I could upgrade to Wi-Fi 6E and give 6GHz a go? Maybe that would be worse due to the intervening wall...

 

We're moving across the country so my wife made the difficult choices of picking her favorite orchids, and carefully packed them in a duffel bag. She put them in sideways with a big piece of cardboard on top. Then they rode as checked luggage. They came out banged up, but I think in not-too-bad shape. The sphagnum moss did a good job of staying in the pots.

view more: next ›