💾 Archived View for ibannieto.info › gemlog › 2023-01-18.gmi captured on 2023-01-29 at 02:44:40. Gemini links have been rewritten to link to archived content

View Raw

More Information

➡️ Next capture (2023-03-20)

-=-=-=-=-=-=-

ibannieto's capsule

NixOS in my laptop

I've installed NixOS in my laptop -a Thinkpad x280- for my very first time, and the installation process was pretty straightforward.

NixOS Installation Guide

Everything is working as expected after some tweaking: X11, power management, acpi -including the backlight-, the touchpad, suspend, audio, camera and all of my applications are working fine with the (almost) same configuration as I had in my previous Arch Linux system.

After a week working with NixOS, still is "a stranger" distro to me because there are something "weird things" like non-standard directories (and everything is "packed") in the /nix path and there are some "concepts" around the configuration, which can be splited into more files and also some concepts like flakes and home-manager configurations, which makes sense to me if you want to perform post configurations into your dotfiles and declare all the custom parameters for your tool chain.

NixOS is like a sort of ansible/chef tools integrated with the operating system and this is a very cool concept.

This is an experiment anyway, I'm still learning a lots of new concepts and it's is a long way to run. Still, I'm thinking on try another desktop installation but with Wayland and with the sway echosystem. Also I want to tweak again the configuration in order to perform a new installation but with encrypted filesystems and start using my Yubikey, but that's another history...

This is my current running configuration.nix file (use at your own risk!):

{ config, pkgs, ... }:

{
  imports =
    [ # Include the results of the hardware scan.
      ./hardware-configuration.nix
    ];

  boot.loader.systemd-boot.enable = true;
  boot.loader.efi.canTouchEfiVariables = true;
  boot.kernelParams = [ "quiet" "ipv6.disable=1" "i915.enable_dpcd_backlight=3" ];

  networking.hostName = "hyperion"; # Define your hostname.
  networking.networkmanager.enable = true;  # Easiest to use and most distros use this by default.

  time.timeZone = "Europe/London";

  i18n.defaultLocale = "en_GB.UTF-8";
  console = {
    font = "Lat2-Terminus16";
  #  keyMap = "uk";
    useXkbConfig = true; # use xkbOptions in tty.
  };

  hardware.bluetooth.enable = true;
  hardware.pulseaudio.enable = true;
  programs.thunar.enable = true;
  services.blueman.enable = true;
  services.xserver.enable = true;
  services.xserver.layout = "uk";
  services.xserver.libinput.enable = true;
  services.xserver.windowManager.bspwm.enable = true;
  services.xserver.displayManager.lightdm.enable = true;
  services.xserver.displayManager.lightdm.background = "/home/iban/Pictures/wallpapers/fu5RgsM.jpg";
  services.xserver.displayManager.lightdm.greeters.gtk.cursorTheme.name = "Catppuccin-Macchiato-Dark-Cursors";
  services.xserver.displayManager.lightdm.greeters.gtk.theme.name = "Materia-dark-compact";
  services.xserver.displayManager.lightdm.greeters.gtk.iconTheme.name = "Materia-dark-compact";
  services.xserver.displayManager.lightdm.greeters.gtk.indicators = [ "~power" ];
  services.gnome.gnome-keyring.enable = true;
  # services.printing.enable = true;
  sound.enable = true;

  users.users.iban = {
    isNormalUser = true;
    initialPassword = "1234567";
    shell = pkgs.zsh;
    extraGroups = [ "wheel" "networkmanager" "audio" "video" "docker" "input" "storage" ];
    packages = with pkgs; [
      zsh
      thunderbird
    ];
  };

  nixpkgs.config.allowUnfree = true;
  nixpkgs.config.pulseaudio = true;

  virtualisation.docker.enable = true;
  virtualisation.docker.storageDriver = "btrfs";

  environment.systemPackages = with pkgs; [
     (polybar.override { mpdSupport = true; })
     accountsservice
     amfora
     argocd
     arp-scan
     aseprite
     awscli2
     bat
     bc
     calc
     catppuccin-cursors.macchiatoDark
     cargo
     chromium
     clippy
     dmenu
     docker
     dos2unix
     drawterm
     dunst
     feh
     ffmpeg
     fftw
     figlet
     file
     flac
     fluxcd
     fzf-zsh
     gcc
     gh
     git
     gnumake
     go
     gotop
     gpg-tui
     gummi
     gvfs
     hut
     imagemagick
     jq
     k9s
     keepass
     keepassxc
     killall
     kitty
     kube3d
     kubectl
     kubectx
     kubernetes-helm-wrapped
     lagrange
     libmpdclient
     libreoffice
     libvdpau
     lightlocker
     lsd
     lsof
     lxappearance
     materia-theme
     mc
     microcodeIntel
     microsoft-edge
     milkytracker
     moc
     mpd
     mpv
     ncdu
     ncmpcpp
     neofetch
     neovim
     nerdfonts
     netcat-gnu
     networkmanager_dmenu
     nfs-utils
     nmap
     nmapsi4
     obs-studio
     oh-my-zsh
     pass
     pass-git-helper
     pavucontrol
     picom
     pkg-config
     plymouth
     power-profiles-daemon
     powertop
     profanity
     pulseaudio
     python3
     python310Packages.mechanicalsoup
     python310Packages.pip
     pywal
     qbittorrent
     qtpass
     qutebrowser
     ranger
     ripgrep
     rofi
     rsync
     rustc
     rustfmt
     scrot
     starship
     sxhkd
     tdesktop
     terraform
     tiled
     tmux
     todo-txt-cli
     toot
     unzip
     upower
     vaapiIntel
     velero
     vim
     vlc
     vscode
     w3m
     weather-icons
     wget
     wmname
     xbanish
     xclip
     xdotool
     xfce.thunar
     xfce.thunar-archive-plugin
     xfce.thunar-media-tags-plugin
     xfce.thunar-volman
     xfce.xfce4-screenshooter
     xorg.xbacklight
     xournalpp
     yad
     youtube-dl
     yubikey-manager
     yubikey-manager-qt
     yubikey-personalization-gui
     zathura
     zsh
     zsh-autosuggestions
     zstd
  ];

  fonts.fonts = with pkgs; [
	cascadia-code
	noto-fonts
  	(nerdfonts.override { fonts = [ "FiraCode" "DroidSansMono" ]; })
  	dina-font
  	fira-code
  	fira-code-symbols
  	liberation_ttf
  	mplus-outline-fonts.githubRelease
  	nerdfonts
  	noto-fonts-cjk
  	noto-fonts-emoji
  	proggyfonts
  ];

  security.pam.mount.enable = true;
  security.pam.mount.createMountPoints = true;

  programs.gnupg.agent = {
    enable = true;
    enableSSHSupport = true;
  };

  programs.light.enable = true;
  programs.zsh = {
    enable = true;
    ohMyZsh = {
      enable = true;
      plugins = [ "docker" "git" "gh" "golang" "history" "kubectl" "kubectx" "pass" "rust" "ssh-agent" "sudo" "systemd" "terraform" "tmux" "vault"];
      # theme = "robbyrussell";
    };
  };

  hardware.pulseaudio.extraConfig = "load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1";

  services.mpd.extraConfig = ''
  	audio_output {
    	type "pulse"
    	name "Pulseaudio"
    	server "127.0.0.1"
  	}
	audio_output {
	type "fifo"
	name "Visualizer feed"
	path "/tmp/mpd.fifo"
	format "44100:16:2"
	}
  '';

  services.mpd.enable = true;
  services.mpd.musicDirectory = "nfs://192.168.0.2/Music/";
  services.power-profiles-daemon.enable = true;
  services.upower.enable = true;
  services.udisks2.enable = true;
  security.polkit.enable = true;
  services.accounts-daemon.enable = true;
  services.gnome.glib-networking.enable = true;
  services.gvfs.enable = true;
  services.tumbler.enable = true;
  services.xserver.updateDbusEnvironment = true;
  services.openssh.enable = true;

  networking.firewall.enable = true;
  networking.firewall.allowedTCPPorts = [ 22 ];

  system.copySystemConfiguration = true;

  system.stateVersion = "22.11";

}

NOTE: "1234567" is NOT my password ;-)

Back