• 12 Jan 2025, 9:46 p.m.

    I have upgraded my four (4) main phones to android 15, and installed magisk, lsposed framework, and BCR, to ensure my normal required functionality is present.

  • 13 Jan 2025, 2:59 p.m.

    Drove past a bright-orange Lamborghini parked at the side of Canal Street this morning. It had a Kuwaiti registration plate.

    Perhaps Fawaz and Billy are back for Unfinished Business #3.

  • 14 Jan 2025, 6:46 a.m.

    Was there a cardboard CalMac Ferry moored in the canal? If so, I'd say defo.

  • 14 Jan 2025, 5:44 p.m.

    NixOS Impermanence Setup

    Boot machine with Nixos installer usb. Close installer, open terminal, open firefox at

    https://github.com/vimjoyer/impermanent-setup
    

    Become su by running sudo su

    add tree to the shell with

    nix-shell -p tree

    use lsblk to determine disk to install to.

    In this case identifies sda

    Download the disko configuration

    curl https://raw.githubusercontent.com/vimjoyer/impermanent-setup/main/final/disko.nix -o /tmp/disko.nix
    

    replace "/dev/vda" with "/dev/sda"

    Partition the drives using disko.nix flake

    sudo nix --experimental-features "nix-command flakes" run github:nix-community/disko -- --mode disko /tmp/disko.nix --arg device '"/dev/sda"'
    

    Use lsblk to check partitions. We should have these sub volumes mounted at /mnt - check with tree /mnt tree /tmp

    /mnt
    ├──boot
    ├──nix
    └──persist
    
    /tmp
    ├──disko.nix
    

    Configuration

    Generate with sudo nixos-generate-config --no-filesystems --root /mnt

    /mnt
    ├──boot
    ├──etc
    │  └──nixos
    │    ├──configuration.nix
    │    └──hardware-configuration.nix
    ├──nix
    └──persist
    
    /tmp
    ├──disko.nix
    

    Move disko.nix into the config files directory with mv /tmp/disko.nix /mnt/etc/nixos/

    /mnt
    ├──boot
    ├──etc
    │  └──nixos
    │    ├──configuration.nix
    │    ├──disko.nix
    │    └──hardware-configuration.nix
    ├──nix
    └──persist
    

    Initialise flake using

    nix --extra-experimental-features "nix-command flakes" flake init --template github:vimjoyer/impermanent-setup

    # flake.nix
    {
      description = "Nixos config flake";
    
      inputs = {
        nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
    
        disko = {
          url = "github:nix-community/disko";
          inputs.nixpkgs.follows = "nixpkgs";
        };
    
        # impermanence = {
        #   url = "github:nix-community/impermanence";
        # };
    
        # home-manager = {
        #   url = "github:nix-community/home-manager";
        #   inputs.nixpkgs.follows = "nixpkgs";
        # };
      };
    
      outputs = {nixpkgs, ...} @ inputs:
      {
        nixosConfigurations.default = nixpkgs.lib.nixosSystem {
          specialArgs = {inherit inputs;};
          modules = [
            inputs.disko.nixosModules.default
            (import ./disko.nix { device = "/dev/vda"; })
    
            ./configuration.nix
    
            # inputs.home-manager.nixosModules.default
            # inputs.impermanence.nixosModules.impermanence
          ];
        };
      };
    }
    

    Move the flake.nix to the configuration directory with mv flake.nix /mnt/etc/nixos/

    /mnt
    ├──boot
    ├──etc
    │  └──nixos
    │     ├──configuration.nix
    │     ├──disko.nix
    │     ├──flake.nix
    │     └──hardware-configuration.nix
    ├──nix
    └──persist
    

    Edit nano /mnt/etc/nixos/flake.nix to replace (import ./disko.nix { device = "/dev/vda"; }) with (import ./disko.nix { device = "/dev/sda"; }) to provide the correct disk target

    Edit nano /mnt/etc/nixos/configuration.nix comment out the service.xserver declarations, to remove a window manager

    # services.xserver.enable = true;
    # services.xserver.displayManager.gdm.enable = true;
    # services.xserver.desktopManager.gnome.enable = true;
    

    add a user declaration

        users.users.computer_user = {
        isNormalUser = true;
        initialPassword = "password";
        extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user.
      };
    

    add btrfs volume management

      boot.initrd.postDeviceCommands = lib.mkAfter ''
        mkdir /btrfs_tmp
        mount /dev/root_vg/root /btrfs_tmp
        if [[ -e /btrfs_tmp/root ]]; then
            mkdir -p /btrfs_tmp/old_roots
            timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%-d_%H:%M:%S")
            mv /btrfs_tmp/root "/btrfs_tmp/old_roots/$timestamp"
        fi
    
        delete_subvolume_recursively() {
            IFS=$'\n'
            for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do
                delete_subvolume_recursively "/btrfs_tmp/$i"
            done
            btrfs subvolume delete "$1"
        }
    
        for i in $(find /btrfs_tmp/old_roots/ -maxdepth 1 -mtime +30); do
            delete_subvolume_recursively "$i"
        done
    
        btrfs subvolume create /btrfs_tmp/root
        umount /btrfs_tmp
      '';
    

    Enable persistence

    cp -r /mnt/etc/nixos /mnt/persist
    cp -r /mnt/etc/nixos /mnt/etc/persist

    /mnt
    ├──boot
    ├──etc
    │  ├──nixos
    │  │  ├──configuration.nix
    │  │  ├──disko.nix
    │  │  ├──flake.nix
    │  │  └──hardware-configuration.nix
    │  └──persist
    │     ├──configuration.nix
    │     ├──disko.nix
    │     ├──flake.nix
    │     └──hardware-configuration.nix
    ├──nix
    └──persist
       └──nixos
          ├──configuration.nix
          ├──disko.nix
          ├──flake.nix
          └──hardware-configuration.nix
    

    Install nixos from the flake config.

    nixos-install --root /mnt --flake /mnt/etc/nixos#default

    On Completion

    You will be requested to provide a root password, and confirm it. If that is successful then

    reboot

    Add impermanence

    Edit the flake.nix to uncomment the impermanence settings

    {
      description = "Nixos config flake";
    
      inputs = {
        nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
    
        disko = {
          url = "github:nix-community/disko";
          inputs.nixpkgs.follows = "nixpkgs";
        };
    
        impermanence = {
          url = "github:nix-community/impermanence";
        };
    .
    .
    .
    .
    .
            ./configuration.nix
    
            # inputs.home-manager.nixosModules.default
            inputs.impermanence.nixosModules.impermanence
          ];
    

    Edit the configuration.nix to add the necessary impermanence settings

      fileSystems."/persist".neededForBoot = true;
      environment.persistence."/persist/system" = {
        hideMounts = true;
        directories = [
          "/etc/nixos"
          "/var/log"
          # "/var/lib/bluetooth"
          "/var/lib/nixos"
          "/var/lib/systemd/coredump"
          # "/etc/NetworkManager/system-connections"
          { directory = "/var/lib/colord"; user = "colord"; group = "colord"; mode = "u=rwx,g=rx,o="; }
        ];
        files = [
          "/etc/machine-id"
          { file = "/var/keys/secret_file"; parentDirectory = { mode = "u=rwx,g=,o="; }; }
        ];
      };
    

    rebuild

    sudo nixos-rebuild boot --flake /persist/nixos#default

    sudo reboot

    sudo mkdir -p /etc/
    sudo cp -r /persist/nixos /etc
    sudo reboot
    

    check with tree /persist

    Configure home manager to handle user environments

  • 14 Jan 2025, 7:09 p.m.

    Daughter came home with a consent form for a birthday party. They're not going anywhere, the parents just want my consent to act in a health emergency.

    I've told my daughter I don't approve of this friendship. Nothing good can come from parents like that.

  • 14 Jan 2025, 7:13 p.m.

    What if you don't sign it do they just let her, for example, choke to death or something?

  • 14 Jan 2025, 7:15 p.m.

    Sounds to me like they just want permission to go in with any weak excuse.

  • 14 Jan 2025, 7:16 p.m.

    It needs to be returned by January 28th. If it isn't returned, she won't be able to attend.

  • 14 Jan 2025, 8:47 p.m.

    A health emergency isn't really the time for staging a play, but it's nice they're asking for an opinion.