feat: add NixOS configuration.nix file and shell script to rebuild it
This commit is contained in:
parent
614293b68e
commit
3a66a152e7
18
.editorconfig
Normal file
18
.editorconfig
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# EditorConfig is awesome: https://editorconfig.org
|
||||||
|
|
||||||
|
# top-most .editorconfig file
|
||||||
|
root = true
|
||||||
|
|
||||||
|
# All files
|
||||||
|
[*]
|
||||||
|
indent_style = space # Use spaces for indentation
|
||||||
|
indent_size = 2 # Number of spaces used per indentation level
|
||||||
|
|
||||||
|
|
||||||
|
# Override for Makefile
|
||||||
|
[Makefile]
|
||||||
|
indent_style = tab
|
||||||
|
|
||||||
|
# Markdown files (md)
|
||||||
|
[*.md]
|
||||||
|
trim_trailing_whitespace = false # Markdown can use trailing whitespace for line breaks
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -3,3 +3,6 @@
|
|||||||
|
|
||||||
# IDEs
|
# IDEs
|
||||||
.idea/
|
.idea/
|
||||||
|
|
||||||
|
# Ignore private configurations
|
||||||
|
ssh-config.nix
|
7
Makefile
Normal file
7
Makefile
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# Makefile for updating NixOS configuration
|
||||||
|
|
||||||
|
.PHONY: all
|
||||||
|
|
||||||
|
# Default target
|
||||||
|
all:
|
||||||
|
./build-nix.sh
|
17
README.md
17
README.md
@ -1,19 +1,22 @@
|
|||||||
# Dotfiles
|
# Dotfiles
|
||||||
|
|
||||||
This repository is my setup for a new MacOS computer.
|
In this repo I store my config files.
|
||||||
|
- `Brewfile` for macOS (I'm about to drop it).
|
||||||
|
- `configuration.nix` for NixOS (a new linux distro for me, that I'm exploring as a replacement for macOS).
|
||||||
It helps me to install quickly all software I need for work and fun.
|
It helps me to install quickly all software I need for work and fun.
|
||||||
Feel free to check & alter the list of software to be installed - [Brewfile](Brewfile).
|
Feel free to check & alter the list of software to be installed in these files.
|
||||||
|
|
||||||
Additionally I install next software, that is not (yet) presented in Brew:
|
|
||||||
|
|
||||||
- Upwork
|
|
||||||
- Toggl Track
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
### macOS/Brew
|
||||||
1. Install Brew from here: https://brew.sh/
|
1. Install Brew from here: https://brew.sh/
|
||||||
2. Copy Brewfile to your computer and run `brew bundle` from the same folder where you copied the file.
|
2. Copy Brewfile to your computer and run `brew bundle` from the same folder where you copied the file.
|
||||||
3. Run `chmod +x ./cron-adjust-microphone-gain-to-100.sh` and `./cron-adjust-microphone-gain-to-100.sh` [to change microphone gain to 100% on macOS](https://apple.stackexchange.com/questions/97810/mac-osx-microphone-input-volume-level-auto-adjusts-can-it-be-disabled).
|
3. Run `chmod +x ./cron-adjust-microphone-gain-to-100.sh` and `./cron-adjust-microphone-gain-to-100.sh` [to change microphone gain to 100% on macOS](https://apple.stackexchange.com/questions/97810/mac-osx-microphone-input-volume-level-auto-adjusts-can-it-be-disabled).
|
||||||
|
|
||||||
Note: Brew will ask you for the root password and other apps inside Brewfile might ask you for your password as well.
|
Note: Brew will ask you for the root password and other apps inside Brewfile might ask you for your password as well.
|
||||||
Usually installation takes 10-20 min, so make sure to brew a cup of tea or coffee :)
|
Usually installation takes 10-20 min, so make sure to brew a cup of tea or coffee :)
|
||||||
|
|
||||||
|
### NixOS
|
||||||
|
1. `chmod +x ./build-nix.sh`
|
||||||
|
2. [Optionally] SSH Config `cp ./ssh-config.nix.example ./ssh-config.nix` and fill with your values.
|
||||||
|
3. [First run] `./build-nix.sh` or [then] just `make`
|
25
build-nix.sh
Executable file
25
build-nix.sh
Executable file
@ -0,0 +1,25 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Make sure that the script exits if any command returns a non-zero exit code
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Define the path to the system configuration file
|
||||||
|
NIXOS_CONFIG_PATH="/etc/nixos/configuration.nix"
|
||||||
|
|
||||||
|
echo "Checking for sudo access..."
|
||||||
|
# Ensure the script is being run with superuser privileges
|
||||||
|
sudo -v
|
||||||
|
|
||||||
|
echo "Backing up current configuration..."
|
||||||
|
# Create a backup of the current configuration file with a timestamp
|
||||||
|
sudo cp "${NIXOS_CONFIG_PATH}" "${NIXOS_CONFIG_PATH}-backup-$(date +%F-%H-%M-%S)"
|
||||||
|
|
||||||
|
echo "Copying new configuration..."
|
||||||
|
# Copy the local configuration.nix to the system configuration location
|
||||||
|
sudo cp ./configuration.nix "${NIXOS_CONFIG_PATH}"
|
||||||
|
|
||||||
|
echo "Rebuilding NixOS configuration..."
|
||||||
|
# Rebuild the NixOS configuration and make the changes effective
|
||||||
|
sudo nixos-rebuild switch
|
||||||
|
|
||||||
|
echo "NixOS configuration updated successfully."
|
129
configuration.nix
Normal file
129
configuration.nix
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
# Edit this configuration file to define what should be installed on
|
||||||
|
# your system. Help is available in the configuration.nix(5) man page
|
||||||
|
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
||||||
|
|
||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
sshConfigPath = ./ssh-config.nix;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports =
|
||||||
|
[ # Include the results of the hardware scan.
|
||||||
|
./hardware-configuration.nix
|
||||||
|
] ++ lib.optional (builtins.pathExists sshConfigPath) sshConfigPath;
|
||||||
|
|
||||||
|
# Bootloader.
|
||||||
|
boot.loader.grub.enable = true;
|
||||||
|
boot.loader.grub.device = "/dev/nvme0n1";
|
||||||
|
boot.loader.grub.useOSProber = true;
|
||||||
|
|
||||||
|
networking.hostName = "spy4x-pc";
|
||||||
|
networking.networkmanager.enable = true;
|
||||||
|
|
||||||
|
# Allow install "unfree" apps, like Google Chrome or WebStorm
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
|
||||||
|
time.timeZone = "Asia/Singapore";
|
||||||
|
|
||||||
|
i18n.defaultLocale = "en_SG.UTF-8";
|
||||||
|
i18n.extraLocaleSettings = {
|
||||||
|
LC_ADDRESS = "en_SG.UTF-8";
|
||||||
|
LC_IDENTIFICATION = "en_SG.UTF-8";
|
||||||
|
LC_MEASUREMENT = "en_SG.UTF-8";
|
||||||
|
LC_MONETARY = "en_SG.UTF-8";
|
||||||
|
LC_NAME = "en_SG.UTF-8";
|
||||||
|
LC_NUMERIC = "en_SG.UTF-8";
|
||||||
|
LC_PAPER = "en_SG.UTF-8";
|
||||||
|
LC_TELEPHONE = "en_SG.UTF-8";
|
||||||
|
LC_TIME = "en_SG.UTF-8";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enable the X11 windowing system.
|
||||||
|
services.xserver.enable = true;
|
||||||
|
|
||||||
|
# Enable the GNOME Desktop Environment.
|
||||||
|
services.xserver.displayManager.gdm.enable = true;
|
||||||
|
services.xserver.desktopManager.gnome.enable = true;
|
||||||
|
|
||||||
|
# Configure keymap in X11
|
||||||
|
services.xserver = {
|
||||||
|
layout = "us";
|
||||||
|
xkbVariant = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Activate and configure Docker
|
||||||
|
virtualisation.docker.enable = true;
|
||||||
|
virtualisation.docker.autoPrune.enable = true;
|
||||||
|
# virtualisation.docker.enableNvidia = true; # experiment for Roley?
|
||||||
|
|
||||||
|
# Enable sound with pipewire.
|
||||||
|
sound.enable = true;
|
||||||
|
hardware.pulseaudio.enable = false;
|
||||||
|
security.rtkit.enable = true;
|
||||||
|
services.pipewire = {
|
||||||
|
enable = true;
|
||||||
|
alsa.enable = true;
|
||||||
|
alsa.support32Bit = true;
|
||||||
|
pulse.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||||
|
users.users.spy4x = {
|
||||||
|
isNormalUser = true;
|
||||||
|
description = "Anton Shubin";
|
||||||
|
extraGroups = [
|
||||||
|
"networkmanager"
|
||||||
|
"wheel"
|
||||||
|
"bluetooth"
|
||||||
|
"docker"
|
||||||
|
];
|
||||||
|
packages = with pkgs; [
|
||||||
|
# Shell tools
|
||||||
|
git
|
||||||
|
gnumake # Source for "make" command
|
||||||
|
htop # System monitor viewer
|
||||||
|
unzip
|
||||||
|
killall # Kill processes by name instead of PID
|
||||||
|
ncdu # Disk space usage stats, per folder, nested
|
||||||
|
libwebp # Convert images into .webp format
|
||||||
|
speedtest-rs # Internet speed test
|
||||||
|
wl-clipboard # Wayland's clipboard copy/paste cli tools
|
||||||
|
tree
|
||||||
|
|
||||||
|
# Work
|
||||||
|
nodejs_21
|
||||||
|
nodePackages.pnpm
|
||||||
|
vscode-fhs # Wrapped variant of vscode which launches in a FHS compatible environment. Should allow for easy usage of extensions without nix-specific modifications.
|
||||||
|
jetbrains.webstorm
|
||||||
|
upwork
|
||||||
|
slack
|
||||||
|
ffmpeg # for Roley project
|
||||||
|
awscli
|
||||||
|
|
||||||
|
# Other
|
||||||
|
google-chrome
|
||||||
|
bitwarden # Password manager client
|
||||||
|
vlc
|
||||||
|
obs-studio # Video recorder and stream software
|
||||||
|
solaar # Logitech devices GUI. Strictly use with sudo, otherwise it doesn't see devices.
|
||||||
|
];
|
||||||
|
};
|
||||||
|
programs.steam.enable = true; # Install Steam for games management
|
||||||
|
|
||||||
|
# Shell aliases and other init
|
||||||
|
environment.interactiveShellInit = ''
|
||||||
|
alias copy='wl-copy <'
|
||||||
|
alias build='sudo nixos-rebuild switch'
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Enable automatic login for the user.
|
||||||
|
services.xserver.displayManager.autoLogin.enable = true;
|
||||||
|
services.xserver.displayManager.autoLogin.user = "spy4x";
|
||||||
|
|
||||||
|
# Workaround for GNOME autologin: https://github.com/NixOS/nixpkgs/issues/103746#issuecomment-945091229
|
||||||
|
systemd.services."getty@tty1".enable = false;
|
||||||
|
systemd.services."autovt@tty1".enable = false;
|
||||||
|
|
||||||
|
system.stateVersion = "23.11";
|
||||||
|
}
|
12
ssh-config.nix.example
Normal file
12
ssh-config.nix.example
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# Part of config, to remote machine aliases for SSH
|
||||||
|
|
||||||
|
{ ... }: {
|
||||||
|
programs.ssh.extraConfig = ''
|
||||||
|
|
||||||
|
Host my-remote-machine # alias to do "ssh my remote-machine"
|
||||||
|
HostName 192.192.192.192 # ip/hostname
|
||||||
|
User my-user # username
|
||||||
|
|
||||||
|
# ... other hosts
|
||||||
|
'';
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user