Skip to content

iturdikulov/dotfiles

Repository files navigation

NixOS Unstable

Hey, you. You're finally awake. You were trying to configure your OS declaratively, right? Walked right into that NixOS ambush, same as us, and those dotfiles over there.

Disclaimer: This is not a community framework or distribution. It's a private configuration and an ongoing experiment to feel out NixOS. I make no guarantees that it will work out of the box for anyone but myself. It may also change drastically and without warning.

Until I can bend spoons with my nix-fu, please don't treat me like an authority or expert in the NixOS space. Seek help on the NixOS discourse instead.

TODO: add screenshoot

TODO: add screenshoot TODO: add screenshoot TODO: add screenshoot


Shell: zsh
DM: greetd + tuigreet
WM: sway + swaybar
Editor: neovim
Terminal: foot
Launcher: rofi
Browser: brave + firefox
GTK Theme: Ant Dracula

Quick start

  1. Acquire NixOS 23.04 or newer:

    # Yoink nixos-unstable
    wget -O nixos.iso https://channels.nixos.org/nixos-unstable/latest-nixos-minimal-x86_64-linux.iso
    
    # Write it to a flash drive
    # TODO: add ventoy note
    cp nixos.iso /dev/sdX
  2. Boot into the installer.

  3. Switch to root user: sudo su -

  4. Do your partitions and mount your root.

OR

  1. Install these dotfiles:

    nix-shell -p git nixVersions.stable
    
    # Set HOST to the desired hostname of this system
    export HOST=...
    # Set USER to your desired username (defaults to hlissner)
    export USER=...
    # Optional, set architecture (defaults to x86_64-linux)
    export NIX_SYSTEM=x86_64-linux # or aarch64-linux
    
    git clone https://github.com/iturdikulov/dotfiles /home/inom/Computer/software/dotfiles
    cd /home/inom/Computer/software/dotfiles
    
    # Create a host config in `hosts/` and add it to the repo:
    mkdir -p hosts/$HOST
    nixos-generate-config --root /mnt --dir /home/inom/Computer/software/dotfiles/hosts/$HOST
    rm -f hosts/$HOST/configuration.nix
    cp hosts/volga/default.nix hosts/$HOST/default.nix
    # get some settings from hosts/volga/hardware-configuration.nix too!
    
    # configure this for your system; don't use it verbatim!
    # DON't forget about modules section!
    vim hosts/$HOST/default.nix
    
    # Optionally Check / adjust options file (default user name and autorized
    # keys at least)
    vim modules/options.nix
    vim modules/services/ssh.nix
    
    git add hosts/$HOST
    
    # Install nixOS
    # as alternative you can install flake from installed nixos
    USER=$USER nixos-install --root /mnt --impure --flake .#$HOST
    
    # Alternative install method with building
    # nix build /mnt/etc/nixos#nixosConfigurations.<HOSTNAME>.config.system.build.toplevel --experimental-features "flakes nix-command" --store "/mnt" --impure
    # nixos-install --root /mnt --system ./result
    
    # If you get 'unrecognized option: --impure', replace '--impure' with
    # `--option pure-eval no`.
    
    # Then move the dotfiles to the mounted drive!
    # TODO: need verify this
    mkdir -p /mnt/home/$USER/Computer/software/dotfiles
    mv /mnt/dotfiles /mnt/home/$USER/Computer/software/dotfiles
    
    # Reboot and change owner
    chown -R ...
    
    # NAS clients, create dedicated directory
    mkidr /media
  2. Then reboot and you're good to go!

⚠️ Don't forget to change your root and $USER passwords! They are set to nixos by default.

  1. Import gpg key gpg --import-options restore --import private.gpg

  2. Optional. Setup git config

    • Get sec key from this output: gpg --list-secret-keys --keyid-format LONG <EMAIL>
    • Change git config: vi config/git/config
    • Rebuild configuration hey rebuild
  3. When you configured git access, you can change dotfiles remote url:

    cd /home/inom/Computer/software/dotfiles
    git remote set-url origin [email protected]:Inom-Turdikulov/nix_dotfiles.git
    git status

Share directory in VM

Sometimes if you want to test dotfiles in VM, you need access to some files outside guest machine, here some steps required for QUEMU/VirtManager

  • poweroff guest and enable shared memory (memory -> enable shared memory)
  • add shared Filesystem (add hardware -> File system -> Driver=virtiofs -> select soruce and target path)
  • mount shared Filesystem (sudo mount -t virtiofs target_path mount_path)

Management

And I say, bin/hey, what's going on?

Usage: hey [global-options] [command] [sub-options]

Available Commands:
  check                  Run 'nix flake check' on your dotfiles
  gc                     Garbage collect & optimize nix store
  generations            Explore, manage, diff across generations
  help [SUBCOMMAND]      Show usage information for this script or a subcommand
  rebuild                Rebuild the current system's flake
  repl                   Open a nix-repl with nixpkgs and dotfiles preloaded
  rollback               Roll back to last generation
  search                 Search nixpkgs for a package
  show                   [ARGS...]
  ssh HOST [COMMAND]     Run a bin/hey command on a remote NixOS system
  swap PATH [PATH...]    Recursively swap nix-store symlinks with copies (and back).
  test                   Quickly rebuild, for quick iteration
  theme THEME_NAME       Quickly swap to another theme module
  update [INPUT...]      Update specific flakes or all of them
  upgrade                Update all flakes and rebuild system

Options:
    -d, --dryrun                     Don't change anything; perform dry run
    -D, --debug                      Show trace on nix errors
    -f, --flake URI                  Change target flake to URI
    -h, --help                       Display this help, or help for a specific command
    -i, -A, -q, -e, -p               Forward to nix-env

Frequently asked questions

TODO

https://github.com/hlissner/dotfiles/commits/master/?before=1e2ca74b02d2d92005352bf328acc86abb10efbd+141 refactor(lib): add and use mkWrapper & mkLauncherEntry

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published