First commit!

This commit is contained in:
morganmayday 2026-02-12 15:00:24 -08:00
commit caafce59d9
13 changed files with 430 additions and 0 deletions

3
.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
scripts/depend/cache/*
scripts/cache/*
nixos-switch.log

49
configuration.nix Normal file
View file

@ -0,0 +1,49 @@
{ inputs, outputs, lib, config, pkgs, variables, ... }:
{
system.stateVersion = "25.05";
imports = [
# Imports these as if they're in this file
./modules/index.nix
];
nixpkgs = {
config = {
# Allow proprietary packages
allowUnfree = true;
allowUnfreePredicate = (_: true);
};
};
nix = let
flakeInputs = lib.filterAttrs (_: lib.isType "flake") inputs;
in {
settings = {
# Enable the nix commands, which are useful, and flakes, which are useful and necessary for this
experimental-features = "nix-command flakes";
};
gc = { # garbage collection
automatic = true;
dates = "weekly";
options = "--delete-older-than 14d";
};
};
boot.kernelPackages = pkgs.linuxPackages_latest;
# If you set up disk encryption, paste the line that looks like this from your generated config
# boot.initrd.luks.devices."LUKS-ID".device = "/dev/disk/by-uuid/DISK-UUID";
users.users = {
${variables.username} = {
isNormalUser = true;
extraGroups = [ "networkmanager" "wheel" "wireshark" ];
shell = pkgs.bash;
description= "${variables.userDescription}";
};
};
}

38
flake.nix Normal file
View file

@ -0,0 +1,38 @@
{
description = "Barebones version of Morgan Mayday's v1.0b config, for newer users";
inputs = {
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
nixpkgs.url = "nixpkgs/nixos-25.11";
nixpkgs-unstable.url = "nixpkgs/nixos-unstable";
};
};
outputs = { self, nixpkgs, nixos-hardware, ... }@inputs:
let
variables = {
# Change these to yours!
username = "mayday";
hostname = "atlas";
email = "me@morganmay.day";
gitUsername = "morganmayday";
userDescription = "Morgan Mayday";
# If you prefer nano, CHANGE THIS NOW!
editor = "nvim";
# Find this for your laptop in https://github.com/NixOS/nixos-hardware/tree/master
# If you can't find your machine in the nixos-hardware repo, comment this out.
hardware = "framework-12-13th-gen-intel";
};
in
{
nixosConfigurations.${variables.hostname} = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = { inherit inputs variables; };
modules = [
./configuration.nix
# If you can't find your machine in the nixos-hardware repo, comment this out.
nixos-hardware.nixosModules.${variables.hardware}
];
};
};
}

10
modules/boot.nix Normal file
View file

@ -0,0 +1,10 @@
## Controls the bootloader
{ inputs, config, pkgs, variables, ... }:
{
# Enables systemd-boot, I dislike Grub
boot.loader.systemd-boot.enable = true;
# Allows the bootloader to touch things in UEFI and such
boot.loader.efi.canTouchEfiVariables = true;
# Allows the firmware updater to work
services.fwupd.enable = true;
}

14
modules/index.nix Normal file
View file

@ -0,0 +1,14 @@
## Indexes all the other modules
{ inputs, config, pkgs, ... }:
{
imports =
[
./boot.nix
./packages.nix
./services.nix
./net.nix
./vars.nix
./unstable.nix
./machine.nix
];
}

14
modules/machine.nix Normal file
View file

@ -0,0 +1,14 @@
## Intended to route hostname and machine-specific settings
{ inputs, config, pkgs, variables, ... }:
{
imports =
[
# If you set up a machine-specific .nix file, the line below can route it from this folder
# ./${variables.hostname}.nix
# if map-impure for your hw config doesn't work, copy the below file into this folder, and point the path here
/etc/nixos/hardware-configuration.nix
];
system.nixos.label = "atlas";
networking.hostName = "atlas";
}

42
modules/net.nix Normal file
View file

@ -0,0 +1,42 @@
## Controls networking
{ inputs, config, pkgs, ... }:
{
networking = {
networkmanager = {
enable = true;
};
nameservers = [ "9.9.9.9" ]; # Backup is 1s for Cloudflare
enableIPv6 = false; # IPv6 has been fucky every single time I've tried to use it
nat = {
enable = true;
internalInterfaces = [ "ve-+" ];
externalInterface = "wlan0";
};
firewall = {
enable = true;
# open ports in firewall below
# allowedTCPPorts = [ ... ];
# allowedUDPPorts = [ ... ];
};
};
services = {
# LAN discovery, necessary for printing
avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
# VPN
mullvad-vpn.enable = true;
# Bluetooth
blueman.enable = false;
# Printing
printing = {
enable = true;
drivers = [ pkgs.gutenprint pkgs.cnijfilter2 pkgs.hplip pkgs.hplipWithPlugin];
};
};
# Bluetooth hardware
hardware.bluetooth.enable = false;
hardware.bluetooth.powerOnBoot = false;
}

102
modules/packages.nix Normal file
View file

@ -0,0 +1,102 @@
## Most if not all packages
{ inputs, config, pkgs, variables, ... }:
{
environment.systemPackages = with pkgs;
[
#### WORKFLOW-CLI ####
neovim
# nano # for if you don't like vim
bash
bc # bash calculator
kitty # terminal
#### WORKFLOW-GUI ####
# Since this version is on Plasma, you're gonna be provided with almost everything
speedcrunch # gui calculator
#### UNCORE UTILS ####
wget
unzip
zip
fastfetch # neofetch replacement
dust # disk storage mapper
fzf # fuzzy finder
jq # json parser
#### COMMS ####
# signal-desktop needs to be on the unstable release
vesktop
#### MEDIA READING ####
vlc # audio/video
zathura # pdfs
firefox # browsing
#### MEDIA MAKING ####
inkscape-with-extensions # visual art
libreoffice # office suite
#### GAMING ####
prismlauncher # Minecraft
wine # a nice cabernet, perhaps? windows compat layer, if Steam fails you.
#### FIRMWARE / BASEWARE ####
linux-firmware
pipewire # audio
pipecontrol # audio
fwupd # firmware updater
dbus # process messager
upower
syspower
brightnessctl
networkmanager
#### THEMING ####
swww # animated wallpaper engine
gtk4
gtk3
gtk2
nwg-look # gtk manager, imperative :/
#### THEME ELEMENTS ####
# nothing here :)
];
fonts.packages = with pkgs; [
noto-fonts-color-emoji
noto-fonts-monochrome-emoji
libertine
liberation_ttf
fira-code
fira-code-symbols
mplus-outline-fonts.githubRelease
dina-font
clearlyU
proggyfonts
garamond-libre
nerd-fonts.noto
nerd-fonts.shure-tech-mono
nerd-fonts.dejavu-sans-mono
];
environment.plasma6.excludePackages = with pkgs.kdePackages; [
# any packages you want to exclude from KDE Plasma's default install go here
];
programs = {
# Workflow
git.enable = true;
# again, kill neovim if you prefer nano
neovim = {
enable = true;
vimAlias = true;
configure = {
customRC = ''
require('neo-tree').setup({
--options go here
})
'';
};
};
# Steam
steam.enable = true;
# Network diagnostics
mtr.enable = true;
# nix-ld.enable = true;
# nix-ld.libraries = with pkgs; [
# Add any missing dynamic libraries for unpackaged programs here,
# NOT In environment.systemPackages
# ];
};
}

77
modules/services.nix Normal file
View file

@ -0,0 +1,77 @@
## Controls the bulk of system services other than bootloader and networking
{ inputs, config, pkgs, variables, ... }:
{
# Enables graphics
hardware.graphics.enable = true;
services = {
# Enable KDE Plasma and its display manager, SDDM
desktopManager.plasma6.enable = true;
displayManager.sddm.enable = true;
displayManager.sddm.wayland.enable = true; # enables specifically wayland support
# Automatically mount removable media to /media
udisks2.enable = true;
udisks2.mountOnMedia = true;
# Schedulers
cron.enable = true;
atd.enable = true;
# Power stuff
upower.enable = true;
logind.settings.Login = {
HandleLidSwitch = "suspend-then-hibernate";
HandlePowerKey = "poweroff";
};
# VFS stuff
envfs.enable = true;
gvfs.enable = true;
# Audio
pipewire = {
enable = true;
audio.enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = true;
wireplumber.enable = true;
};
# Location services
locate = {
enable = false;
package = pkgs.plocate;
};
# Temp management
thermald.enable = true;
# X11--I prefer wayland, but just to be safe
xserver = {
enable = true;
xkb.layout = "us";
xkb.variant = "";
};
};
# Allows sudo stuff with fuse for mounting shit
programs.fuse.userAllowOther = true;
# Power management
powerManagement.enable = true;
# if you ever need appimages this is magic code that does magic
boot.binfmt.registrations.appimage = {
wrapInterpreterInShell = false;
interpreter = "${pkgs.appimage-run}/bin/appimage-run";
recognitionType = "magic";
offset = 0;
mask = ''\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff'';
magicOrExtension = ''\x7fELF....AI\x02'';
};
# Security & encryption
security.polkit.enable = true;
security.rtkit.enable = true;
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
# Themeing
# qt = {
# enable = true;
# platformTheme = "gtk2";
# style = "gtk2";
#};
}

8
modules/unstable.nix Normal file
View file

@ -0,0 +1,8 @@
## Pulls packages specifically from unstable repo, rather than the default stable.
## Note: this may not work! This *should* work, but I use the opposite setup--unstable, with specific stable packages--so this is a bit more spaghetti.
{ inputs, config, pkgs, ... }:
{
environment.systemPackages = with inputs.nixpkgs-unstable; [
signal-desktop
];
}

32
modules/vars.nix Normal file
View file

@ -0,0 +1,32 @@
## Sets environment variables, locale, and the like.
{ inputs, config, pkgs, variables, ... }:
{
environment.sessionVariables = {
NIXOS_OZONE_WL = "1"; # fixes some electron stuff
ELECTRON_OZONE_PLATFORM_HINT = "auto";
DOTFILES_DIR = "/home/${variables.username}/dotfiles";
SCRIPTS_DIR = "/home/${variables.username}/dotfiles/scripts";
SCRIPTS_PATH = "/home/${variables.username}/dotfiles/scripts";
PATH="\${SCRIPTS_PATH}:\${PATH}";
EDITOR="${variables.editor}";
};
programs.git.config = {
user = {
email = "${variables.email}";
name = "${variables.gitUsername}";
};
core = {
pager = "cat";
editor = "${variables.editor}";
};
};
time.timeZone = "US/Pacific";
i18n.defaultLocale = "en_CA.UTF-8";
i18n.extraLocales = "all";
i18n.extraLocaleSettings = {
LC_TIME = "C.UTF-8";
LC_PAPER = "en_US.UTF-8";
LC_ADDRESS = "en_US.UTF-8";
LC_MONETARY = "en_US.UTF-8";
};
}

17
scripts/rebuild Executable file
View file

@ -0,0 +1,17 @@
#!/usr/bin/env bash
cd $DOTFILES_DIR
echo "Rebuilding..."
current=$(nixos-rebuild list-generations | grep True | awk '{print $4,"generation",$1,"kernel version",$5,"at",$3,$2}')
if [[ $* =~ u ]]; then
rm $DOTFILES_DIR/flake.lock
nix-channel --update
nix flake update
fi
git add . && git diff HEAD --minimal && git commit -am "$current rebuilding"
sudo nixos-rebuild switch --impure --flake $DOTFILES_DIR # &> nixos-switch.log || (cat nixos-switch.log | grep --color error && notify-send -e "NixOS Rebuild Failed!" --icon=software-update-available && exit 1) && notify-send -e "NixOS Rebuilt OK!" --icon=software-update-available
if [[ $* =~ p ]]; then
sync-dotfiles
fi
if [[ $* =~ r ]]; then
reboot
fi

24
scripts/sync-dotfiles Executable file
View file

@ -0,0 +1,24 @@
#!/usr/bin/env bash
echo ""
cd $DOTFILES_DIR
current=$(nixos-rebuild list-generations | grep True | awk '{print $4,"generation",$1,"kernel version",$5,"at",$3,$2}')
git add .
git commit -am "Autocommit for $current"
git remote update
statusr=$(git status --ahead-behind | grep -E "Your branch" | awk '{print $4}')
if [[ $statusr == "up" ]]; then
echo "Local and remote already synced."
elif [[ $statusr == "ahead" ]]; then
echo "Ahead of remote, no diverging changes. Pushing now."
git push -q
echo "Pushed!"
elif [[ $statusr == "behind" ]]; then
echo "Behind remote, no diverging changes. Pulling now."
git pull -q
echo "Pulled!"
elif [[ -n $statusr ]]; then
echo "Divergent changes detected. Manual intervention required."
fi
echo ""