No, Debian doesn’t take your apt install ...
command and install a snap behind your back…
No, Debian doesn’t take your apt install ...
command and install a snap behind your back…
73 and 76, but I got them mixed up, ed is older.
That’s for original Emacs though, the gnu version came out in 85
Separate your system and user lists. Use home-manager for example for your user packages. I think separating those configs is the official recommendation.
As for the rest, I’m using nix on MX because of declarative package management. Screw going back to imperative and having to remember what packages to install. If it’s something I use often it goes on a list, if I don’t nix shell
comes to the rescue.
I’d rather mess around with dev envs for nix than distrobox.
Damn you broke my brain for a second there. I thought you meant that nixos replaced k8s, and was wondering what the hell are you talking about.
I was talking about regular fedora. It’s not that you have to reboot, but you don’t get to use those updates until you do. The most obvious example is updating the kernel and its modules.
Linux almost never needs to reboot after an update
Doesn’t it often need a reboot to apply some updates?
I rember reading something along those lines then I was researching why Fedora installs some updates after a reboot. Most
declarative > imperative all day, every day
I’m going to have to come back to Nix/NixOS in a bit.
Use nix + home-manager first for sure. It’s far easier, and you can slowly get into it while making a list of bleeding edge packages.
I’ll probably wait until the official docs catch up as it appears that they are quite a bit behind
Skip them altogether when you’re starting out. I gave up on trying nix the first few times due to how bad they are. zero-to-nix.com is better for learning the basics of nix.
That and I’m not sure how I feel about a DSL for package management. I’d much rather use JSON or YAML, or even INI or TOML.
The closest you can get is home-manager with a list of packages in a json-like format. It’s really not practical to develop a declarative system without a programming language. A basic example would be variables, more advanced would be to write a wrapper that modifies the package so it automatically runs the required cli commands to use your dediated gpu and nixGL with specific packages (nvidia-run-mx nixVulkanNvidia-525.147.05 obs
for example).
It’s sort of like IaC where you’ve got terraform (dsl), pulumi (various languages), and cloudformation (json/yaml). Can you guess which one is universally despised?
Maybe if I were a LISP or Haskell guy.
Then you’d use guix and a dsl made within an actual programming language (much better approach IMO).
That’s such a bad name, I only see lixmaballs.
How do you like it, that’s one of the earlier forks, right?
In case you missed topic of the whole discussion:
Nix has the same mix of conceptual simplicity and atrocious user interface as git,
Nobody at any point compared the difficulty of learning the entirety of each of those systems, and my entire point is that the complexity of nix is not in the cli commands…
I don’t really care about the declarative/imperative thing, to me how many commands you “really need” is beside the point.
Caring is not required, but you need to at least understand the difference.
This is essentially the same argument as the people who say “git is not complex because you only really need checkout/commit/push, just ignore all the other commands.”
It’s really not.
Stage,commit,push,fetch,merge,etc. are all commands you need issue to git in order to manually create a desired state. You need to know what you’re doing, and what to do differently if there’s an issue.
home-manager switch
does all of it on its own. You don’t use a different cli command if something’s broken, you change the source of truth. All of the commands you might use in an imperative package manager like apt update/upgrade/install/remove are instead that one command.
Even home-manager has this warning at the very top of the page that basically tells you “you need to understand all the other commands first before you use this,” and “if your directory gets messed up you have to fix it yourself.”
It’s quite a disingenuous interpretation of “beware: home-manager uses the nix language and so gives nix language errors” and “choosing to create configuration files might overwrite the existing ones for that package”…
If you’re using a programming language, expect error messages specific to that language/compiler/interpreter/whatever. And it’s not like every other PM is using standardised error messages, you still need to learn to read them.
Config files aren’t generated randomly, you need to manually enable the configuration of each package. If someone is capable of getting to the info required to know how to configure a package, it’s reasonable to expect that they can guess that changing a config might overwrite the existing one.
These are exactly the same kinds of problems people have with git.
Do tell me how you can solve git problems without changing the git commands.
You’re essentially saying that the terraform cli has the exact same problems as the aws cli, and that’s just ridiculous. They both let you host your blog, but they do it in a completely different way and therefore have different issues.
It’s far better in theory, but in practice it’s got some massive issues:
In it’s current state it’s really only good for emacs, lisps, and some other languages like haskell.
And how is SEL less for a rich person than RHEL?
You’re ignoring the difference between using something declaratory and imperatively. Just because it’s difficult to get to that one liner, it doesn’t change the fact you’ll still only use that one command. Git by it’s nature requires you to use different commands to achieve different results. Home-manager allows you to both update your packages and delete all of them with the same command, because that command is “sync the state with the source of truth”.
It’s working perfectly fine for me on desktop, jerboa, and voyager. Also, add a spoiler.
It’s much simpler because you’re using text files to define the expected state, the cli is there only to tell nix to figure out what it needs to do and to get on with it. Meanwhile with git you’re manually doing each of the steps until you reach the desired state.
I only need cd ~/dotfiles/nix/ && nix-channel --update && nix flake update && home-manager switch
for everyday package management. It’s the nix version of apt update upgrade and install.
nix shell
and nix run
are pretty useful as well, and you’d want home-manager generations
to rollback.
The confusion arises because there are 5 different ways to do the same thing, the non-experimental methods shouldn’t be used even though they’re recommended in the official docs, and you need to get lucky to get the info that you can use home-manager and that one liner.
It’s pretty easy for home-manager use, but still really useful. You can:
Here’s an example:
{
description = "home flake";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
home-manager.url = "github:nix-community/home-manager/master";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-23.11";
# nixgl.url = "github:guibou/nixGL";
};
outputs =
{
self,
nixpkgs,
nixpkgs-stable,
home-manager,
# nixgl,
...
}@inputs:
let
system = "x86_64-linux";
pkgs = import nixpkgs {
system = system;
config = {
allowUnfree = true;
};
};
pkgsStable = import nixpkgs-stable {
system = system;
config = {
allowUnfree = true;
};
};
in
{
homeConfigurations = {
shareni = home-manager.lib.homeManagerConfiguration {
inherit pkgs;
modules = [ ./home.nix ];
extraSpecialArgs = {
inherit inputs;
inherit system;
kmonad = pkgsStable.kmonad;
};
};
};
};
}
RHEL - 16 free licences and you can use them for whatever you want
Ubuntu pro - 5 free licences for personal use
SEL - you can try it out for 60 days or cobble something together while testing our enterprise packages
Yeah, who’d hate using a package manager that increasingly slows down your boot time with every package installed, or that uses a closed source store to provide you FOSS
Maybe there’s a reason canonical has to force it on their users