Move to multi-file nix config

This commit is contained in:
agryphus 2023-12-05 21:59:51 -05:00
parent 40ae8fa74b
commit f10c0a019b
8 changed files with 303 additions and 122 deletions

View file

@ -1,21 +1,36 @@
# 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`).
# This configuration is considered to be core to my system. Each group of features considered not core
# will be found in one of the ./profile
{ config, pkgs, ... }:
let
# Change this to your user's name
HOME = "/home/vince";
in
{
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
./personal.nix
./profiles/emacs.nix
./profiles/lf.nix
./profiles/nvim.nix
./profiles/virtualbox.nix
./profiles/wayland_desktop.nix
./profiles/xdesktop.nix
];
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
nix.settings.experimental-features = ["nix-command" "flakes"];
nix = {
package = pkgs.nixFlakes;
extraOptions = ''
experimental-features = nix-command flakes
'';
};
environment.sessionVariables = {
ZDOTDIR = "$HOME/.config/zsh";
@ -40,53 +55,6 @@
# Set your time zone.
time.timeZone = "America/New_York";
i18n = {
defaultLocale = "en_US.UTF-8";
inputMethod = {
# Have to install fcitx5 through here so that the binary is patched to be able to see the addons.
# If also installed through system packages, the binary without addonds will take precedence.
enabled = "fcitx5";
fcitx5.addons = with pkgs; [
fcitx5-configtool
fcitx5-rime
fcitx5-chinese-addons
];
};
};
fonts.fonts = with pkgs; [
source-han-sans
source-han-serif
(nerdfonts.override { fonts = [ "FiraCode" ]; })
];
# X Server
services.xserver = {
enable = true;
autorun = false;
autoRepeatDelay = 300;
autoRepeatInterval = 50;
# Configure keymap in X11
layout = "us";
xkbOptions = "eurosign:e,caps:escape";
# Touchpad stuff
libinput = {
enable = true;
touchpad.naturalScrolling = true;
};
displayManager = {
lightdm.enable = false;
startx.enable = true;
};
windowManager.dwm.enable = true;
};
# Bluetooth daemon
services.blueman.enable = true;
hardware.bluetooth.enable = true;
@ -111,24 +79,20 @@
path = [ pkgs.coreutils ]; # For chgrp
};
# Monitor switching service. Allow users to restart the service without password
# services.autorandr.enable = true;
security.sudo.extraConfig = ''
%wheel ALL=(ALL:ALL) NOPASSWD: ${pkgs.systemd}/bin/systemctl restart autorandr
'';
# Misc services
services.syncthing.enable = true;
services.udisks2.enable = true; # USB Mounting
# services.printing.enable = true; # CUPS
# Some programs need SUID wrappers, can be configured further or are
# started in user sessions.
programs = {
zsh.enable = true;
gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
nix-ld.enable = true; # Run unpatched binaries
zsh.enable = true;
};
# Define a user account. Don't forget to set a password with passwd.
@ -145,89 +109,44 @@
# $ nix search wget
environment.systemPackages = with pkgs; [
# General programs that I like and use
arandr # Visually move relative positions of monitors
autorandr # Save and load xrandr profiles
blueman # Bluetooth manager
bluetuith # TUI bluetooth manager
bear # Generate Clang compilation database
devour # Opens new program on top of terminal
dunst # Notification daemon
dwmblocks # Suckless statusbar for DWM
dwm # Suckless tiling window manager
emacs # Lisp machine VM / ELisp interpreter / way of life
feh # Image viewer I use for background setting
firefox # My browser of choice
distrobox # Easily spin up VMs of other distos
entr # Hooks for file changes
git # Imagine not having this
htop # Process monitor
htop-vim # Process monitor, with vim bindings
imagemagick # Image conversion/processing tool
jq # Commandline JSON processor
killall # Easy way to kill a process
libnotify # Send messages to notification daemon
libreoffice # MSOffice btfo
maim # Screenshot utility
neofetch # Aesthetic sysinfo
pass-nodmenu # CLI password store (without dmenu dependency)
picom # X Compositor
pinentry-curses # Terminal-based pinentry program
pinentry-rofi # Rofi frontend for pinentry program
python311 # Python
rofi # Menu prompt program
rofi-pass # Rofi frontend for password store
st # Suckless terminal
sxhkd # Hotkey daemon
syncthing # Syncing files between machines
texlive.combined.scheme-full # LaTeX to create documents
tldr # Brief info about a command
tmux # Terminal multiplexor
typst # Cool, minimal LaTeX alternative
udisks # Good way of dealing with USBs and similar media
ungoogled-chromium # If I need a special chrome feature
xsecurelock # Session locker
zsh # Shell
# Shell
starship # Universal shell prompt
zsh
zsh-autocomplete
zsh-autosuggestions
zsh-nix-shell # Use zsh for nix build shell
zsh-syntax-highlighting # Shell syntax highlighting
# GTK Themes
lxappearance-gtk2 # Theme switcher
gruvbox-dark-gtk
# Neovim and neovim accessories
neovim # Editor
###
nodejs # Used by Mason to pull deps
ripgrep # Used by telescope
gcc
unzip
# lf and lf accessories
# There might be some repeats is here from elsewhere in this file, but I simply want to
# enumerate everything my config of lf depends on. No, I'm not using home-manager (for now)
lf # File explorer
###
atool # Provides aunpack, to open archives. Also can list archive contents.
bat # A prettified 'cat'
broot # A slicker fzf
ffmpegthumbnailer # Get thumbnails of videos
file # Get information about a specific file
fzf # Fuzzy finder. Might fully replace with broot
mediainfo # Get info about media
mpv # Audio and video player
nsxiv # Image viewer
odt2txt # Convert open documents to text
perl536Packages.FileMimeInfo # Provides mimeopen, to ask what program to open files in
poppler_utils # Provides pdftoppm, to turn pdfs into images
ueberzugpp # Terminal image overlayer
unrar-wrapper # Extract .rar files
xclip # Copy file name to clip
zathura # PDF viewer
# X accessories
xorg.xauth
xclip
# Silly programs
asciiquarium # Good to throw on an extra monitor
asciiquarium
bsdgames # Fun collection of command-line games
neo-cowsay # The cow says moo
sl # Choo choo
# Some nix specific stuff
nix-index
home-manager
nix-output-monitor # Track dependency graph during builds
nix-prefetch-git # Like nix-prefetch-url, but for git
nvd # See diffs between builds
# Pop into an environment abiding by the Filesystem Hierarchy Standard to run
# applications which do not play nicely with NixOS.
@ -273,6 +192,18 @@
)
];
nixpkgs.overlays = [
(self: super: {
asciiquarium = super.asciiquarium.overrideAttrs (oa: {
src = pkgs.fetchgit {
url = "https://github.com/nothub/asciiquarium";
rev = "204090ff4c97b2e00cd67f26b1a37ca7accd4f95";
hash = "sha256-0Y0bcsa6GfP/A+gZe6o94WNWfQNHVEtMZfMuvWVBu0c=";
};
});
})
];
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. It's perfectly fine and recommended to leave