diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..753fab7 --- /dev/null +++ b/flake.lock @@ -0,0 +1,404 @@ +{ + "nodes": { + "base16": { + "inputs": { + "fromYaml": "fromYaml" + }, + "locked": { + "lastModified": 1746562888, + "narHash": "sha256-YgNJQyB5dQiwavdDFBMNKk1wyS77AtdgDk/VtU6wEaI=", + "owner": "SenchoPens", + "repo": "base16.nix", + "rev": "806a1777a5db2a1ef9d5d6f493ef2381047f2b89", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "base16.nix", + "type": "github" + } + }, + "base16-fish": { + "flake": false, + "locked": { + "lastModified": 1754405784, + "narHash": "sha256-l9xHIy+85FN+bEo6yquq2IjD1rSg9fjfjpyGP1W8YXo=", + "owner": "tomyun", + "repo": "base16-fish", + "rev": "23ae20a0093dca0d7b39d76ba2401af0ccf9c561", + "type": "github" + }, + "original": { + "owner": "tomyun", + "repo": "base16-fish", + "rev": "23ae20a0093dca0d7b39d76ba2401af0ccf9c561", + "type": "github" + } + }, + "base16-helix": { + "flake": false, + "locked": { + "lastModified": 1748408240, + "narHash": "sha256-9M2b1rMyMzJK0eusea0x3lyh3mu5nMeEDSc4RZkGm+g=", + "owner": "tinted-theming", + "repo": "base16-helix", + "rev": "6c711ab1a9db6f51e2f6887cc3345530b33e152e", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-helix", + "type": "github" + } + }, + "base16-vim": { + "flake": false, + "locked": { + "lastModified": 1732806396, + "narHash": "sha256-e0bpPySdJf0F68Ndanwm+KWHgQiZ0s7liLhvJSWDNsA=", + "owner": "tinted-theming", + "repo": "base16-vim", + "rev": "577fe8125d74ff456cf942c733a85d769afe58b7", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-vim", + "rev": "577fe8125d74ff456cf942c733a85d769afe58b7", + "type": "github" + } + }, + "firefox-gnome-theme": { + "flake": false, + "locked": { + "lastModified": 1748383148, + "narHash": "sha256-pGvD/RGuuPf/4oogsfeRaeMm6ipUIznI2QSILKjKzeA=", + "owner": "rafaelmardojai", + "repo": "firefox-gnome-theme", + "rev": "4eb2714fbed2b80e234312611a947d6cb7d70caf", + "type": "github" + }, + "original": { + "owner": "rafaelmardojai", + "repo": "firefox-gnome-theme", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "stylix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1749398372, + "narHash": "sha256-tYBdgS56eXYaWVW3fsnPQ/nFlgWi/Z2Ymhyu21zVM98=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9305fe4e5c2a6fcf5ba6a3ff155720fbe4076569", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "fromYaml": { + "flake": false, + "locked": { + "lastModified": 1731966426, + "narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=", + "owner": "SenchoPens", + "repo": "fromYaml", + "rev": "106af9e2f715e2d828df706c386a685698f3223b", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "fromYaml", + "type": "github" + } + }, + "gnome-shell": { + "flake": false, + "locked": { + "lastModified": 1744584021, + "narHash": "sha256-0RJ4mJzf+klKF4Fuoc8VN8dpQQtZnKksFmR2jhWE1Ew=", + "owner": "GNOME", + "repo": "gnome-shell", + "rev": "52c517c8f6c199a1d6f5118fae500ef69ea845ae", + "type": "github" + }, + "original": { + "owner": "GNOME", + "ref": "48.1", + "repo": "gnome-shell", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1758463745, + "narHash": "sha256-uhzsV0Q0I9j2y/rfweWeGif5AWe0MGrgZ/3TjpDYdGA=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "3b955f5f0a942f9f60cdc9cacb7844335d0f21c3", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "release-25.05", + "repo": "home-manager", + "type": "github" + } + }, + "nixlib": { + "locked": { + "lastModified": 1736643958, + "narHash": "sha256-tmpqTSWVRJVhpvfSN9KXBvKEXplrwKnSZNAoNPf/S/s=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "1418bc28a52126761c02dd3d89b2d8ca0f521181", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "nixos-generators": { + "inputs": { + "nixlib": "nixlib", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1751903740, + "narHash": "sha256-PeSkNMvkpEvts+9DjFiop1iT2JuBpyknmBUs0Un0a4I=", + "owner": "nix-community", + "repo": "nixos-generators", + "rev": "032decf9db65efed428afd2fa39d80f7089085eb", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-generators", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1763334038, + "narHash": "sha256-LBVOyaH6NFzQ3X/c6vfMZ9k4SV2ofhpxeL9YnhHNJQQ=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4c8cdd5b1a630e8f72c9dd9bf582b1afb3127d2c", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-25.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nur": { + "inputs": { + "flake-parts": [ + "stylix", + "flake-parts" + ], + "nixpkgs": [ + "stylix", + "nixpkgs" + ], + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1751320053, + "narHash": "sha256-3m6RMw0FbbaUUa01PNaMLoO7D99aBClmY5ed9V3vz+0=", + "owner": "nix-community", + "repo": "NUR", + "rev": "cbde1735782f9c2bb2c63d5e05fba171a14a4670", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "NUR", + "type": "github" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "nixos-generators": "nixos-generators", + "nixpkgs": "nixpkgs", + "stylix": "stylix" + } + }, + "stylix": { + "inputs": { + "base16": "base16", + "base16-fish": "base16-fish", + "base16-helix": "base16-helix", + "base16-vim": "base16-vim", + "firefox-gnome-theme": "firefox-gnome-theme", + "flake-parts": "flake-parts", + "gnome-shell": "gnome-shell", + "nixpkgs": [ + "nixpkgs" + ], + "nur": "nur", + "systems": "systems", + "tinted-foot": "tinted-foot", + "tinted-kitty": "tinted-kitty", + "tinted-schemes": "tinted-schemes", + "tinted-tmux": "tinted-tmux", + "tinted-zed": "tinted-zed" + }, + "locked": { + "lastModified": 1763568967, + "narHash": "sha256-fF4m0SvHsjhPIjwthI0OxBfgUajL/jML0OzVOKAVVDg=", + "owner": "nix-community", + "repo": "stylix", + "rev": "93da22ccdf30f63909ac53dfc317cd8f51cc8bd6", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "release-25.05", + "repo": "stylix", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "tinted-foot": { + "flake": false, + "locked": { + "lastModified": 1726913040, + "narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=", + "owner": "tinted-theming", + "repo": "tinted-foot", + "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "tinted-foot", + "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", + "type": "github" + } + }, + "tinted-kitty": { + "flake": false, + "locked": { + "lastModified": 1735730497, + "narHash": "sha256-4KtB+FiUzIeK/4aHCKce3V9HwRvYaxX+F1edUrfgzb8=", + "owner": "tinted-theming", + "repo": "tinted-kitty", + "rev": "de6f888497f2c6b2279361bfc790f164bfd0f3fa", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "tinted-kitty", + "type": "github" + } + }, + "tinted-schemes": { + "flake": false, + "locked": { + "lastModified": 1750770351, + "narHash": "sha256-LI+BnRoFNRa2ffbe3dcuIRYAUcGklBx0+EcFxlHj0SY=", + "owner": "tinted-theming", + "repo": "schemes", + "rev": "5a775c6ffd6e6125947b393872cde95867d85a2a", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "schemes", + "type": "github" + } + }, + "tinted-tmux": { + "flake": false, + "locked": { + "lastModified": 1751159871, + "narHash": "sha256-UOHBN1fgHIEzvPmdNMHaDvdRMgLmEJh2hNmDrp3d3LE=", + "owner": "tinted-theming", + "repo": "tinted-tmux", + "rev": "bded5e24407cec9d01bd47a317d15b9223a1546c", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "tinted-tmux", + "type": "github" + } + }, + "tinted-zed": { + "flake": false, + "locked": { + "lastModified": 1751158968, + "narHash": "sha256-ksOyv7D3SRRtebpXxgpG4TK8gZSKFc4TIZpR+C98jX8=", + "owner": "tinted-theming", + "repo": "base16-zed", + "rev": "86a470d94204f7652b906ab0d378e4231a5b3384", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-zed", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "stylix", + "nur", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733222881, + "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "49717b5af6f80172275d47a418c9719a31a78b53", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..0492ae6 --- /dev/null +++ b/flake.nix @@ -0,0 +1,35 @@ +{ + description = "An opinionated NixOS-based LiveCD with extra privacy considerations."; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-25.05"; + home-manager = { + url = "github:nix-community/home-manager?ref=release-25.05"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nixos-generators = { + url = "github:nix-community/nixos-generators"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + stylix = { + url = "github:nix-community/stylix?ref=release-25.05"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { self, nixpkgs, home-manager, nixos-generators, stylix, ... }: + let + aberrantLinux = nixos-generators.nixosGenerate { + system = "x86_64-linux"; + modules = [ + ./modules + stylix.nixosModules.stylix + home-manager.nixosModules.default + ]; + format = "iso"; + }; + + in { + defaultPackage.x86_64-linux = aberrantLinux; + }; +} diff --git a/modules/apps.nix b/modules/apps.nix new file mode 100644 index 0000000..3e08c1c --- /dev/null +++ b/modules/apps.nix @@ -0,0 +1,14 @@ +{ pkgs, ... }: +{ + environment.systemPackages = with pkgs; [ + # General tool suite + libreoffice-qt6-fresh + gimp + tor-browser + kaidan + thunderbird + + # Optional VPN + protonvpn-gui + ]; +} diff --git a/modules/base.nix b/modules/base.nix new file mode 100644 index 0000000..07569bf --- /dev/null +++ b/modules/base.nix @@ -0,0 +1,26 @@ +{ + networking.hostName = "aberrant"; + + # Necessary for flake support + nix.settings.experimental-features = ["nix-command" "flakes"]; + + # General / Perf + zramSwap.enable = true; + boot.tmp.cleanOnBoot = true; + time.timeZone = "UTC"; + + users.users = { + # Disables root login by setting an invalid password + root.hashedPassword = "!"; + anon = { + isNormalUser = true; + extraGroups = ["wheel"]; + initialPassword = "anon"; + }; + }; + + # Redundant but good practice + security.sudo.wheelNeedsPassword = true; + + system.stateVersion = "25.05"; +} diff --git a/modules/branding.nix b/modules/branding.nix new file mode 100644 index 0000000..24e9948 --- /dev/null +++ b/modules/branding.nix @@ -0,0 +1,38 @@ +{ lib, config, pkgs,... }: +let + customGrubTheme = pkgs.minimal-grub-theme.overrideAttrs (oldAttrs: rec { + # srcs = oldAttrs.srcs or [ ] ++ [ ../var/icon.png ]; + + installPhase = let + originalInstall = oldAttrs.installPhase or '' + mkdir -p $out + ''; + in '' + ${originalInstall} + # Copy the custom icon to $out (e.g., next to other theme files) + cp ${../var/icon.png} $out/icons/installer.png + ''; + }); +in +{ + stylix = { + enable = true; + autoEnable = true; + polarity = "dark"; + image = ../var/wallpaper.png; + targets.console.enable = false; + }; + + system.nixos = { + distroName = lib.mkForce "Aberrant Linux"; + }; + + isoImage = { + appendToMenuLabel = " LiveCD"; + grubTheme = customGrubTheme; + }; + + image.baseName = lib.mkForce "aberrant${ + lib.optionalString (config.isoImage.edition != "") "-${config.isoImage.edition}" + }-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}"; +} diff --git a/modules/default.nix b/modules/default.nix new file mode 100644 index 0000000..e3fd3d5 --- /dev/null +++ b/modules/default.nix @@ -0,0 +1,12 @@ +{ + imports = [ + ./base.nix + ./tor.nix + + ./kde.nix + ./apps.nix + + ./branding.nix + ./user.nix + ]; +} diff --git a/modules/kde.nix b/modules/kde.nix new file mode 100644 index 0000000..e33de98 --- /dev/null +++ b/modules/kde.nix @@ -0,0 +1,14 @@ +{ + services = { + desktopManager.plasma6.enable = true; + displayManager.sddm = { + enable = true; + settings = { + Autologin = { + Session = "plasma.desktop"; + User = "anon"; + }; + }; + }; + }; +} diff --git a/modules/tor.nix b/modules/tor.nix new file mode 100644 index 0000000..b916143 --- /dev/null +++ b/modules/tor.nix @@ -0,0 +1,18 @@ +{ + #services.tor = { + # enable = true; + # settings = { + # VirtualAddrNetwork = "10.192.0.0/10"; + # AutomapHostsOnResolve = true; + # TransPort = 9040; + # DNSPort = 5353; + # }; + #}; + + #networking.firewall.extraCommands = '' + # # Redirect DNS UDP to Tor DNSPort + # iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 5353 + # # Redirect TCP connections to Tor TransPort + # iptables -t nat -A PREROUTING -p tcp --syn -j REDIRECT --to-ports 9040 + #''; +} diff --git a/modules/user.nix b/modules/user.nix new file mode 100644 index 0000000..7b68778 --- /dev/null +++ b/modules/user.nix @@ -0,0 +1,8 @@ +{ + home-manager.users."anon" = { + home.stateVersion = "25.05"; + home.file."~/Desktop/README.md" = { + source = ../var/README.md; + }; + }; +} diff --git a/var/README.md b/var/README.md new file mode 100644 index 0000000..6b21e3c --- /dev/null +++ b/var/README.md @@ -0,0 +1,3 @@ +Welcome to **Aberrant Linux**. + +This document will serve as a manual of sorts for everything related to Aberrant and it's usage. diff --git a/var/icon.png b/var/icon.png new file mode 100644 index 0000000..cd548a0 Binary files /dev/null and b/var/icon.png differ diff --git a/var/wallpaper.png b/var/wallpaper.png new file mode 100644 index 0000000..e9dec8f Binary files /dev/null and b/var/wallpaper.png differ diff --git a/var/wallpaper.xcf b/var/wallpaper.xcf new file mode 100644 index 0000000..d1226b9 Binary files /dev/null and b/var/wallpaper.xcf differ