First commit!
This commit is contained in:
commit
caafce59d9
13 changed files with 430 additions and 0 deletions
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
scripts/depend/cache/*
|
||||||
|
scripts/cache/*
|
||||||
|
nixos-switch.log
|
||||||
49
configuration.nix
Normal file
49
configuration.nix
Normal 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
38
flake.nix
Normal 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
10
modules/boot.nix
Normal 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
14
modules/index.nix
Normal 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
14
modules/machine.nix
Normal 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
42
modules/net.nix
Normal 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
102
modules/packages.nix
Normal 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
77
modules/services.nix
Normal 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
8
modules/unstable.nix
Normal 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
32
modules/vars.nix
Normal 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
17
scripts/rebuild
Executable 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
24
scripts/sync-dotfiles
Executable 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 ""
|
||||||
Loading…
Add table
Add a link
Reference in a new issue