From f3d47705d8bac143de9ddb51b998163abc0b6bf6 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Sun, 15 Sep 2024 12:04:40 -0400 Subject: [PATCH] init --- .gitignore | 1 + README.md | 19 + justfile | 21 + nix/etcnixos/common.nix | 205 ++++++++++ nix/etcnixos/declarative-nm.nix | 52 +++ nix/etcnixos/flake.lock | 458 ++++++++++++++++++++++ nix/etcnixos/flake.nix | 62 +++ nix/etcnixos/hardware_desktop.nix | 58 +++ nix/etcnixos/hardware_laptop.nix | 53 +++ nix/etcnixos/networking.nix | 17 + nix/etcnixos/secrets/primary-password.age | Bin 0 -> 544 bytes nix/etcnixos/secrets/secrets.nix | 14 + nix/etcnixos/secrets/wifi-passwords.age | Bin 0 -> 775 bytes nix/etcnixos/system-mreow.nix | 118 ++++++ nix/etcnixos/system-nixos.nix | 132 +++++++ nix/home-manager/flake.lock | 400 +++++++++++++++++++ nix/home-manager/flake.nix | 100 +++++ nix/home-manager/gui.nix | 192 +++++++++ nix/home-manager/no-gui.nix | 175 +++++++++ nix/home-manager/progs/alacritty.nix | 118 ++++++ nix/home-manager/progs/borg.nix | 39 ++ nix/home-manager/progs/fish.nix | 57 +++ nix/home-manager/progs/helix.nix | 288 ++++++++++++++ nix/home-manager/progs/librewolf.nix | 77 ++++ nix/home-manager/progs/niri.nix | 167 ++++++++ nix/home-manager/progs/rss.nix | 91 +++++ nix/home-manager/progs/swaylock.nix | 31 ++ nix/home-manager/progs/waybar.nix | 253 ++++++++++++ nix/home-manager/secrets/factorio.age | Bin 0 -> 398 bytes nix/home-manager/secrets/secrets.nix | 10 + nix/home-manager/system-mreow.nix | 161 ++++++++ nix/home-manager/system-nixos.nix | 45 +++ 32 files changed, 3414 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 justfile create mode 100644 nix/etcnixos/common.nix create mode 100644 nix/etcnixos/declarative-nm.nix create mode 100644 nix/etcnixos/flake.lock create mode 100644 nix/etcnixos/flake.nix create mode 100644 nix/etcnixos/hardware_desktop.nix create mode 100644 nix/etcnixos/hardware_laptop.nix create mode 100644 nix/etcnixos/networking.nix create mode 100644 nix/etcnixos/secrets/primary-password.age create mode 100644 nix/etcnixos/secrets/secrets.nix create mode 100644 nix/etcnixos/secrets/wifi-passwords.age create mode 100644 nix/etcnixos/system-mreow.nix create mode 100644 nix/etcnixos/system-nixos.nix create mode 100644 nix/home-manager/flake.lock create mode 100644 nix/home-manager/flake.nix create mode 100644 nix/home-manager/gui.nix create mode 100644 nix/home-manager/no-gui.nix create mode 100644 nix/home-manager/progs/alacritty.nix create mode 100644 nix/home-manager/progs/borg.nix create mode 100644 nix/home-manager/progs/fish.nix create mode 100644 nix/home-manager/progs/helix.nix create mode 100644 nix/home-manager/progs/librewolf.nix create mode 100644 nix/home-manager/progs/niri.nix create mode 100644 nix/home-manager/progs/rss.nix create mode 100644 nix/home-manager/progs/swaylock.nix create mode 100644 nix/home-manager/progs/waybar.nix create mode 100644 nix/home-manager/secrets/factorio.age create mode 100644 nix/home-manager/secrets/secrets.nix create mode 100644 nix/home-manager/system-mreow.nix create mode 100644 nix/home-manager/system-nixos.nix diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ + diff --git a/README.md b/README.md new file mode 100644 index 0000000..7b61b12 --- /dev/null +++ b/README.md @@ -0,0 +1,19 @@ +# My Dotfiles ✨ +These are my dotfiles for my laptop (which I use [NixOS](https://nixos.org/) on). I'm still working on porting more configs to [home-manager](https://github.com/nix-community/home-manager). + +## Structure +The `nix` folder contains two sub directories, `etcnixos` and `home-manager`. The former is the contents of `/etc/nixos` (hence the name), whereas the latter is the contents of `~/.config/home-manager`. +`justfile` is the [just](https://github.com/casey/just) script I use for updating my nixOS system and syncing the changes with this repo. + +## What do I use? +Browser: Firefox 🦊 (actually Librewolf :p) + +Text Editor: [helix](https://github.com/helix-editor/helix) + +Terminal: [alacritty](https://github.com/alacritty/alacritty) + +Shell: [fish](https://fishshell.com/) with the [pure](https://github.com/pure-fish/pure) prompt + +WM: [niri](https://github.com/YaLTeR/niri) (KDE on my desktop) + +There is more that I'm using, but those are the main ones! Read my configs to get more into the specifics. diff --git a/justfile b/justfile new file mode 100644 index 0000000..d15b366 --- /dev/null +++ b/justfile @@ -0,0 +1,21 @@ +update_all: system_update home_update sync_configs + +format_home: + nixfmt ~/.config/home-manager + +format_system: + doas nixfmt /etc/nixos + +system_update: + doas nix flake update /etc/nixos + doas nixos-rebuild boot --impure + +home_update: + nix flake update ~/.config/home-manager + rm -fr ~/.gtkrc-2.0 + home-manager switch --impure + +sync_configs: format_home format_system + rsync -a --delete /etc/nixos/ ~/dotfiles/nix/etcnixos/ + rsync -a --delete ~/.config/home-manager/ ~/dotfiles/nix/home-manager/ + cp ~/justfile ~/dotfiles/ diff --git a/nix/etcnixos/common.nix b/nix/etcnixos/common.nix new file mode 100644 index 0000000..6fbebc8 --- /dev/null +++ b/nix/etcnixos/common.nix @@ -0,0 +1,205 @@ +{ + config, + pkgs, + lib, + username, + system, + hostname, + inputs, + ... +}: +{ + imports = [ ./declarative-nm.nix ]; + + nix = { + #garbage collection and cleanup stuff + gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 7d"; + }; + + #optimize the store + optimise.automatic = true; + + #enable flakes! + settings.experimental-features = [ + "nix-command" + "flakes" + ]; + }; + + #kernel options + boot = { + kernelPackages = pkgs.linuxPackages_cachyos-lto; + + kernel.sysctl = { + #for profiling + "kernel.perf_event_paranoid" = 1; + "kernel.kptr_restrict" = 0; + + #dmesg shushhhhh + "kernel.printk" = "2 4 1 7"; + }; + + # Bootloader. + loader = { + systemd-boot.enable = true; + efi.canTouchEfiVariables = true; + }; + + initrd = { + compressor = "zstd"; + compressorArgs = [ "-1" ]; + }; + }; + + environment.etc = { + #override default nixos /etc/issue + "issue".text = ""; + }; + + services = { + #fwupd for updating firmware + fwupd = { + enable = true; + extraRemotes = [ "lvfs-testing" ]; + }; + + #auto detect network printers + avahi = { + enable = true; + nssmdns4 = true; + openFirewall = true; + }; + + # Enable CUPS to print documents. + printing = { + enable = true; + drivers = with pkgs; [ hplip ]; + }; + + #disable fprintd (doesn't compile, idk) + fprintd.enable = false; + + #Making sure mullvad works on boot + mullvad-vpn.enable = true; + }; + + # Set your time zone. + time.timeZone = "America/New_York"; + + security = { + #lets use doas and not sudo! + doas.enable = true; + sudo.enable = false; + # Configure doas + doas.extraRules = [ + { + users = [ "${username}" ]; + keepEnv = true; + persist = true; + } + ]; + }; + + age.identityPaths = [ "/home/${username}/.ssh/id_ed25519" ]; + + age.secrets.wifi-passwords = { + file = ./secrets/wifi-passwords.age; + path = "/etc/secrets/wifi-passwords.nix"; + }; + + age.secrets.primary-password = { + file = ./secrets/primary-password.age; + path = "/etc/secrets/primary-password"; + }; + + #networking + networking = + let + wifi-passwords = import "${config.age.secrets.wifi-passwords.path}"; + in + import ./networking.nix { inherit hostname wifi-passwords; }; + + # Select internationalisation properties. + i18n.defaultLocale = "en_US.UTF-8"; + + i18n.extraLocaleSettings = { + LC_ADDRESS = "en_US.UTF-8"; + LC_IDENTIFICATION = "en_US.UTF-8"; + LC_MEASUREMENT = "en_US.UTF-8"; + LC_MONETARY = "en_US.UTF-8"; + LC_NAME = "en_US.UTF-8"; + LC_NUMERIC = "en_US.UTF-8"; + LC_PAPER = "en_US.UTF-8"; + LC_TELEPHONE = "en_US.UTF-8"; + LC_TIME = "en_US.UTF-8"; + }; + + # Enable Bluetooth + hardware.bluetooth = { + enable = true; + powerOnBoot = true; + + #Enable experimental features for battery % of bluetooth devices + settings.General.Experimental = true; + }; + + #apply gtk themes by enabling dconf + programs.dconf.enable = true; + + # Enable sound with pipewire. + hardware.pulseaudio.enable = false; # pipewire >>>>>>> pulseaudio + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + # If you want to use JACK applications, uncomment this + # jack.enable = true; + }; + + # Define my user account (the rest of the configuration if found in `~/.config/home-manager/...`) + users.users.${username} = { + isNormalUser = true; + extraGroups = [ + "networkmanager" + "wheel" + "video" + "camera" + ]; + hashedPasswordFile = config.age.secrets.primary-password.path; + }; + + services.gvfs.enable = true; + programs.gphoto2.enable = true; + + # Enable thermal data + services.thermald.enable = true; + + services.pcscd.enable = true; + programs.gnupg.agent = { + enable = true; + pinentryPackage = pkgs.pinentry-curses; + enableSSHSupport = false; + }; + + #System packages + environment.systemPackages = with pkgs; [ + mullvad-vpn + + #secureboot ctl + sbctl + + dmidecode + + (inputs.agenix.packages.${pkgs.system}.default.override { ageBin = "${pkgs.rage}/bin/rage"; }) + ]; + + #wayland with electron/chromium applications + environment.sessionVariables.NIXOS_OZONE_WL = "1"; + + system.stateVersion = "24.11"; +} diff --git a/nix/etcnixos/declarative-nm.nix b/nix/etcnixos/declarative-nm.nix new file mode 100644 index 0000000..7fea1a0 --- /dev/null +++ b/nix/etcnixos/declarative-nm.nix @@ -0,0 +1,52 @@ +{ + config, + lib, + pkgs, + ... +}: +with lib; +# from: https://discourse.nixos.org/t/imperative-declarative-wifi-networks-with-wpa-supplicant/12394/6 +let + cfg = config.networking.networkmanager; + + getFileName = stringAsChars (x: if x == " " then "-" else x); + + createWifi = ssid: opt: { + name = "NetworkManager/system-connections/${getFileName ssid}.nmconnection"; + value = { + mode = "0400"; + source = pkgs.writeText "${ssid}.nmconnection" '' + [connection] + id=${ssid} + type=wifi + + [wifi] + ssid=${ssid} + + [wifi-security] + ${optionalString (opt.psk != null) '' + key-mgmt=wpa-psk + psk=${opt.psk}''} + ''; + }; + }; + + keyFiles = mapAttrs' createWifi config.networking.wireless.networks; +in +{ + config = mkIf cfg.enable { + environment.etc = keyFiles; + + systemd.services.NetworkManager-predefined-connections = { + restartTriggers = mapAttrsToList (name: value: value.source) keyFiles; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + ExecStart = "${pkgs.coreutils}/bin/true"; + ExecReload = "${pkgs.networkmanager}/bin/nmcli connection reload"; + }; + reloadIfChanged = true; + wantedBy = [ "multi-user.target" ]; + }; + }; +} diff --git a/nix/etcnixos/flake.lock b/nix/etcnixos/flake.lock new file mode 100644 index 0000000..7603a49 --- /dev/null +++ b/nix/etcnixos/flake.lock @@ -0,0 +1,458 @@ +{ + "nodes": { + "agenix": { + "inputs": { + "darwin": "darwin", + "home-manager": "home-manager", + "nixpkgs": [ + "nixpkgs" + ], + "systems": "systems" + }, + "locked": { + "lastModified": 1723293904, + "narHash": "sha256-b+uqzj+Wa6xgMS9aNbX4I+sXeb5biPDi39VgvSFqFvU=", + "owner": "ryantm", + "repo": "agenix", + "rev": "f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41", + "type": "github" + }, + "original": { + "owner": "ryantm", + "repo": "agenix", + "type": "github" + } + }, + "alvr": { + "locked": { + "lastModified": 1726175462, + "narHash": "sha256-OWnvv900LI20DypGLMAsceRTFdkahMns6BHO2OKzmM0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d5c6dd163d933674a4e3871a89ddddb87036c751", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "pull/308097/head", + "repo": "nixpkgs", + "type": "github" + } + }, + "chaotic": { + "inputs": { + "fenix": "fenix", + "flake-schemas": "flake-schemas", + "home-manager": "home-manager_2", + "jovian": "jovian", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1726403681, + "narHash": "sha256-G922au3LygfpO+4CsAzQmtlg+KXjx8dSwehDwkCFMjQ=", + "owner": "chaotic-cx", + "repo": "nyx", + "rev": "68d822079a1b3e31db3cf1e30e32a69b46e6dfa3", + "type": "github" + }, + "original": { + "owner": "chaotic-cx", + "ref": "nyxpkgs-unstable", + "repo": "nyx", + "type": "github" + } + }, + "crane": { + "inputs": { + "nixpkgs": [ + "lanzaboote", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1721842668, + "narHash": "sha256-k3oiD2z2AAwBFLa4+xfU+7G5fisRXfkvrMTCJrjZzXo=", + "owner": "ipetkov", + "repo": "crane", + "rev": "529c1a0b1f29f0d78fa3086b8f6a134c71ef3aaf", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "darwin": { + "inputs": { + "nixpkgs": [ + "agenix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1700795494, + "narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=", + "owner": "lnl7", + "repo": "nix-darwin", + "rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d", + "type": "github" + }, + "original": { + "owner": "lnl7", + "ref": "master", + "repo": "nix-darwin", + "type": "github" + } + }, + "fenix": { + "inputs": { + "nixpkgs": [ + "chaotic", + "nixpkgs" + ], + "rust-analyzer-src": "rust-analyzer-src" + }, + "locked": { + "lastModified": 1726230467, + "narHash": "sha256-YyMNF7IFyysZ2KeqEO6AmV3nQeaDSxyNXLdHp1ghO60=", + "owner": "nix-community", + "repo": "fenix", + "rev": "43efa7a3a97f290441bd75b18defcd4f7b8df220", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "lanzaboote", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1719994518, + "narHash": "sha256-pQMhCCHyQGRzdfAkdJ4cIWiw+JNuWsTX7f0ZYSyz0VY=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9227223f6d922fee3c7b190b2cc238a99527bbb7", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-schemas": { + "locked": { + "lastModified": 1721999734, + "narHash": "sha256-G5CxYeJVm4lcEtaO87LKzOsVnWeTcHGKbKxNamNWgOw=", + "rev": "0a5c42297d870156d9c57d8f99e476b738dcd982", + "revCount": 75, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.1.5/0190ef2f-61e0-794b-ba14-e82f225e55e6/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%3D0.1.5.tar.gz" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "lanzaboote", + "pre-commit-hooks-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "agenix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1703113217, + "narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "chaotic", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1726222338, + "narHash": "sha256-KuA8ciNR8qCF3dQaCaeh0JWyQUgEwkwDHr/f49Q5/e8=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "503af483e1b328691ea3a434d331995595fb2e3d", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "jovian": { + "inputs": { + "nix-github-actions": "nix-github-actions", + "nixpkgs": [ + "chaotic", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1726115155, + "narHash": "sha256-VDylz5VX4JD4/TZv6xUJDwuvNdgLRGoOpue1dlZGdIQ=", + "owner": "Jovian-Experiments", + "repo": "Jovian-NixOS", + "rev": "02cf60ce20b6034fc0459e5116cec7016aaff6e4", + "type": "github" + }, + "original": { + "owner": "Jovian-Experiments", + "repo": "Jovian-NixOS", + "type": "github" + } + }, + "lanzaboote": { + "inputs": { + "crane": "crane", + "flake-compat": "flake-compat", + "flake-parts": "flake-parts", + "nixpkgs": [ + "nixpkgs" + ], + "pre-commit-hooks-nix": "pre-commit-hooks-nix", + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1725379389, + "narHash": "sha256-qS1H/5/20ewJIXmf8FN2A5KTOKKU9elWvCPwdBi1P/U=", + "owner": "nix-community", + "repo": "lanzaboote", + "rev": "e7bd94e0b5ff3c1e686f2101004ebf4fcea9d871", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "lanzaboote", + "type": "github" + } + }, + "nix-github-actions": { + "inputs": { + "nixpkgs": [ + "chaotic", + "jovian", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1690328911, + "narHash": "sha256-fxtExYk+aGf2YbjeWQ8JY9/n9dwuEt+ma1eUFzF8Jeo=", + "owner": "zhaofengli", + "repo": "nix-github-actions", + "rev": "96df4a39c52f53cb7098b923224d8ce941b64747", + "type": "github" + }, + "original": { + "owner": "zhaofengli", + "ref": "matrix-name", + "repo": "nix-github-actions", + "type": "github" + } + }, + "nixos-hardware": { + "locked": { + "lastModified": 1725885300, + "narHash": "sha256-5RLEnou1/GJQl+Wd+Bxaj7QY7FFQ9wjnFq1VNEaxTmc=", + "owner": "NixOS", + "repo": "nixos-hardware", + "rev": "166dee4f88a7e3ba1b7a243edb1aca822f00680e", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "master", + "repo": "nixos-hardware", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1726243404, + "narHash": "sha256-sjiGsMh+1cWXb53Tecsm4skyFNag33GPbVgCdfj3n9I=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "345c263f2f53a3710abe117f28a5cb86d0ba4059", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1720386169, + "narHash": "sha256-NGKVY4PjzwAa4upkGtAMz1npHGoRzWotlSnVlqI40mo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "194846768975b7ad2c4988bdb82572c00222c0d7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "pre-commit-hooks-nix": { + "inputs": { + "flake-compat": [ + "lanzaboote", + "flake-compat" + ], + "gitignore": "gitignore", + "nixpkgs": [ + "lanzaboote", + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable" + }, + "locked": { + "lastModified": 1721042469, + "narHash": "sha256-6FPUl7HVtvRHCCBQne7Ylp4p+dpP3P/OYuzjztZ4s70=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "f451c19376071a90d8c58ab1a953c6e9840527fd", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "root": { + "inputs": { + "agenix": "agenix", + "alvr": "alvr", + "chaotic": "chaotic", + "lanzaboote": "lanzaboote", + "nixos-hardware": "nixos-hardware", + "nixpkgs": "nixpkgs" + } + }, + "rust-analyzer-src": { + "flake": false, + "locked": { + "lastModified": 1725985110, + "narHash": "sha256-0HKj+JI6rtxaE6Kzcd6HyFNbEFJRsLy5DoNgVF1pyRM=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "bcc708992104c2059f310fbc3ac00bfc377f9ea8", + "type": "github" + }, + "original": { + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "lanzaboote", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1722219664, + "narHash": "sha256-xMOJ+HW4yj6e69PvieohUJ3dBSdgCfvI0nnCEe6/yVc=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "a6fbda5d9a14fb5f7c69b8489d24afeb349c7bb4", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "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" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/nix/etcnixos/flake.nix b/nix/etcnixos/flake.nix new file mode 100644 index 0000000..4906bd3 --- /dev/null +++ b/nix/etcnixos/flake.nix @@ -0,0 +1,62 @@ +{ + description = "A simple NixOS flake"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + lanzaboote = { + url = "github:nix-community/lanzaboote"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + nixos-hardware.url = "github:NixOS/nixos-hardware/master"; + alvr.url = "github:NixOS/nixpkgs/pull/308097/head"; + + chaotic = { + url = "github:chaotic-cx/nyx/nyxpkgs-unstable"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + agenix = { + url = "github:ryantm/agenix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = + { + self, + nixpkgs, + lanzaboote, + nixos-hardware, + chaotic, + agenix, + ... + }@inputs: + let + username = "primary"; + hostname = nixpkgs.lib.strings.removeSuffix "\n" (builtins.readFile /etc/hostname); + system = "x86_64-linux"; + in + { + nixosConfigurations.${hostname} = nixpkgs.lib.nixosSystem { + specialArgs = { + inherit inputs username hostname; + }; + modules = + [ + ./system-${hostname}.nix + chaotic.nixosModules.default + agenix.nixosModules.default + ] + ++ ( + if ("${hostname}" == "mreow") then # laptop + [ + nixos-hardware.nixosModules.framework-12th-gen-intel + lanzaboote.nixosModules.lanzaboote + ] + else + [ ] + ); + }; + }; +} diff --git a/nix/etcnixos/hardware_desktop.nix b/nix/etcnixos/hardware_desktop.nix new file mode 100644 index 0000000..c7ee556 --- /dev/null +++ b/nix/etcnixos/hardware_desktop.nix @@ -0,0 +1,58 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ + config, + lib, + pkgs, + modulesPath, + ... +}: + +{ + imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; + + boot.initrd.availableKernelModules = [ + "nvme" + "xhci_pci" + "ahci" + "usb_storage" + "usbhid" + "sd_mod" + ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = { + device = "/dev/disk/by-uuid/ff51be5a-b87b-4e6a-9c1d-796ceeaca153"; + fsType = "ext4"; + }; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/3D37-E610"; + fsType = "vfat"; + options = [ + "fmask=0022" + "dmask=0022" + ]; + }; + + fileSystems."/media/steam" = { + device = "/dev/disk/by-uuid/df865fc2-6b26-4689-809b-1615f860507e"; + fsType = "btrfs"; + }; + + swapDevices = [ ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp5s0.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp4s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/nix/etcnixos/hardware_laptop.nix b/nix/etcnixos/hardware_laptop.nix new file mode 100644 index 0000000..17a48a2 --- /dev/null +++ b/nix/etcnixos/hardware_laptop.nix @@ -0,0 +1,53 @@ +{ + config, + lib, + pkgs, + modulesPath, + ... +}: +{ + imports = [ + #if this is removed, then niri doesn't start, TODO! look into wtf this does + (modulesPath + "/installer/scan/not-detected.nix") + ]; + boot.initrd.availableKernelModules = [ + "xhci_pci" + "thunderbolt" + "nvme" + ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = { + device = "/dev/disk/by-uuid/acbd96e3-e7c7-442d-82cc-ce2913a9e90c"; + fsType = "btrfs"; + options = [ + "subvol=@" + "compress=zstd" + "autodefrag" + "noatime" + "space_cache=v2" + "discard" + ]; + }; + + boot.initrd.luks.devices."luks-0f481d5f-528c-4838-bd8a-d2780b4ba234".device = "/dev/disk/by-uuid/0f481d5f-528c-4838-bd8a-d2780b4ba234"; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/4D19-520E"; + fsType = "vfat"; + }; + + swapDevices = [ ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp166s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/nix/etcnixos/networking.nix b/nix/etcnixos/networking.nix new file mode 100644 index 0000000..fd1a983 --- /dev/null +++ b/nix/etcnixos/networking.nix @@ -0,0 +1,17 @@ +{ hostname, wifi-passwords, ... }: +{ + hostName = "${hostname}"; + + networkmanager = { + enable = true; + insertNameservers = [ + "1.1.1.1" + "8.8.8.8" + ]; + wifi = { + scanRandMacAddress = true; + }; + }; + + wireless.networks = wifi-passwords; +} diff --git a/nix/etcnixos/secrets/primary-password.age b/nix/etcnixos/secrets/primary-password.age new file mode 100644 index 0000000000000000000000000000000000000000..ca3ac41dc9112abfb2e0b195d029f728beaeedd8 GIT binary patch literal 544 zcmYdHPt{G$OD?J`D9Oyv)5|YP*Do{V(zR14F3!+RO))YxHMCUl$_b533{>!NEwJ>} z56MWcD9F#$chB>52?`6(i7fX@OG!#J3Dd7|HBJgn$t;X2_v9)KtI8~o$O;e5@Cgeu zaPc)yu`KrR^Got7^^bHmitupvEzT^-t|&{d$Vay=#lyubJy5~J)6?9&(#**)(yzoc zJGUUhI5EV?wJgc9B*`VqA}z`?)6c*#-7_<*%7UxXr82w3HLyIxH$2HdEvvM`v^Y6Z z+qAGSGt$M|B`hM(&od-4HQyk+I2&Y}uWou#YGQG!LWYGxL|{acLa0@;Teho$fsds& zSFTT#X|khhs<&x!q@PoGW=3XUka1N&P?)K?epOypNRV?{a9*iPWUhySS7kwBa7vJK zSY>&IfsvcJi;0oDA6L0)K#EyNNnmn#R+xX5XOebERYqB)fv2&FkA-%HtD|{wet~m& zg;`cnzN1;HVWM9km#(g^LWy&TWqv?zWpPQ4VNOVKdWLDPnO9&*VMRu|sX>l*M7l{( zXr)(>fw@OEmr(FopUIX?$LlK+94`5FdF{N&*P4~u&!7^?I@SBB7k}pgvGb9iF1^$GetS7e`pz*#M8z;={OLTpR5m)q#VT|9Q@1a3;{8`YTpP1=2gmA(dMg;Z Ua!SKnxmb&~bymkM=vuD>086*N@Bjb+ literal 0 HcmV?d00001 diff --git a/nix/etcnixos/secrets/secrets.nix b/nix/etcnixos/secrets/secrets.nix new file mode 100644 index 0000000..4ae7da2 --- /dev/null +++ b/nix/etcnixos/secrets/secrets.nix @@ -0,0 +1,14 @@ +let + laptop = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4jL6gYOunUlUtPvGdML0cpbKSsPNqQ1jit4E7U1RyH"; + desktop = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBJjT5QZ3zRDb+V6Em20EYpSEgPW5e/U+06uQGJdraxi"; +in +{ + "wifi-passwords.age".publicKeys = [ + laptop + desktop + ]; + "primary-password.age".publicKeys = [ + laptop + desktop + ]; +} diff --git a/nix/etcnixos/secrets/wifi-passwords.age b/nix/etcnixos/secrets/wifi-passwords.age new file mode 100644 index 0000000000000000000000000000000000000000..62dc809fe346531aca145a3620591e2b0fb7319f GIT binary patch literal 775 zcmYdHPt{G$OD?J`D9Oyv)5|YP*Do{V(zR14F3!+RO))YxHMCUl$_b533{)`9$t^H3 z^Ds$DF)z&vFp9`2&M^u0s7iIKG6<;5H!4VXPm9WNGS1C)H{i0TYXJM+Ar+ zm#(g^LWN~uX;PAxer1w*k++||MUcO5a+r&$V_r#UR9?QLfvJy?iAz*sg}!$(S6QU* zvgQLTtR`eL&)6=VeL=ly+rQ%{XTR0H`7(B9spieFkD-72_D0XB*mBwEmDon_j9VKI zJT~w?_E>oVi_?P=)|xi}YvCuKVgX=Uv main + extraConfig = { + init = { + defaultBranch = "main"; + }; + push.autoSetupRemote = true; + }; + + #gpg signing keys + signing = { + key = "9AB28AC10ECE533D"; + signByDefault = true; + }; + }; + + #fish shell! + programs.fish = import ./progs/fish.nix { inherit pkgs; }; + + #text editor + programs.helix = import ./progs/helix.nix { inherit pkgs; }; + + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; +} diff --git a/nix/home-manager/progs/alacritty.nix b/nix/home-manager/progs/alacritty.nix new file mode 100644 index 0000000..759d02a --- /dev/null +++ b/nix/home-manager/progs/alacritty.nix @@ -0,0 +1,118 @@ +{ pkgs }: +{ + #use the fish shell + shell.program = "${pkgs.fish}/bin/fish"; + + #some programs can't handle alacritty + env.TERM = "xterm-256color"; + + window = { + #using a window manager, no decorations needed + decorations = "none"; + + #semi-transparent + opacity = 0.95; + + #pading between the content of the terminal and the edge + padding = { + x = 10; + y = 10; + }; + + dimensions = { + columns = 80; + lines = 40; + }; + }; + + scrolling = { + history = 1000; + multiplier = 3; + }; + + font = + let + baseFont = { + family = "JetBrains Mono Nerd Font"; + style = "Regular"; + }; + in + { + size = 12; + + normal = baseFont; + + bold = baseFont // { + style = "Bold"; + }; + + italic = baseFont // { + style = "Italic"; + }; + + offset.y = 0; + glyph_offset.y = 0; + }; + + #color scheme + colors = { + primary = { + background = "0x131621"; + foreground = "0xa6accd"; + }; + + cursor = { + text = "CellBackground"; + cursor = "CellForeground"; + }; + + search = { + matches = { + foreground = "0x1b1e28"; + background = "0xadd7ff"; + }; + + focused_match = { + foreground = "0x1b1e28"; + background = "0xadd7ff"; + }; + }; + + selection = { + text = "CellForeground"; + background = "0x303340"; + }; + + vi_mode_cursor = { + text = "CellBackground"; + cursor = "CellForeground"; + }; + + normal = { + black = "0x1b1e28"; + red = "0xd0679d"; + green = "0x5de4c7"; + yellow = "0xfffac2"; + blue = "#435c89"; + magenta = "0xfcc5e9"; + cyan = "0xadd7ff"; + white = "0xffffff"; + }; + + bright = { + black = "0xa6accd"; + red = "0xd0679d"; + green = "0x5de4c7"; + yellow = "0xfffac2"; + blue = "0xadd7ff"; + magenta = "0xfae4fc"; + cyan = "0x89ddff"; + white = "0xffffff"; + }; + }; + + cursor = { + style = "Underline"; + vi_mode_style = "Underline"; + }; +} diff --git a/nix/home-manager/progs/borg.nix b/nix/home-manager/progs/borg.nix new file mode 100644 index 0000000..0493767 --- /dev/null +++ b/nix/home-manager/progs/borg.nix @@ -0,0 +1,39 @@ +{ homeDirectory }: +{ + home = { + location = { + sourceDirectories = [ + "/etc/nixos" + "${homeDirectory}/.librewolf" + "${homeDirectory}/dotfiles" + "${homeDirectory}/.config/home-manager" + "${homeDirectory}/.config/Signal" + "${homeDirectory}/Documents" + "${homeDirectory}/projects" + "${homeDirectory}/Pictures" + "${homeDirectory}/school" + "${homeDirectory}/.wallpaper.png" + "${homeDirectory}/.ssh" + "${homeDirectory}/justfile" + "${homeDirectory}/.local/share/fish" + "${homeDirectory}/.gnupg" + ]; + excludeHomeManagerSymlinks = true; + + repositories = [ "ssh://server-public/mnt/bak/laptop" ]; + }; + + retention = { + keepHourly = 48; + keepDaily = 30; + keepWeekly = 26; + keepMonthly = 24; + keepYearly = 10; + }; + + storage = { + #super secret password location (maybe I should find a way to store secrets properly) + encryptionPasscommand = "cat ${homeDirectory}/Documents/secrets/borg_bak_pass"; + }; + }; +} diff --git a/nix/home-manager/progs/fish.nix b/nix/home-manager/progs/fish.nix new file mode 100644 index 0000000..1e76482 --- /dev/null +++ b/nix/home-manager/progs/fish.nix @@ -0,0 +1,57 @@ +{ pkgs }: +{ + enable = true; + + interactiveShellInit = '' + #disable greeting + set fish_greeting + + #fixes gnupg password entry + export GPG_TTY=(${pkgs.coreutils}/bin/tty) + + #pfetch on shell start + PF_INFO="ascii title os host kernel uptime memory editor wm" ${pkgs.pfetch-rs}/bin/pfetch + ''; + + shellAliases = { + c = "${pkgs.cargo}/bin/cargo"; + cr = "${pkgs.cargo}/bin/cargo run"; + cb = "${pkgs.cargo}/bin/cargo build"; + + # from DistroTube's dot files: Changing "ls" to "eza" + ls = "${pkgs.eza}/bin/eza -al --color=always --group-directories-first"; + la = "${pkgs.eza}/bin/eza -a --color=always --group-directories-first"; + ll = "${pkgs.eza}/bin/eza -l --color=always --group-directories-first"; + lt = "${pkgs.eza}/bin/eza -aT --color=always --group-directories-first"; + + # gets the largest files in a git repo's history + "git-size" = '' + ${pkgs.git}/bin/git rev-list --objects --all | + ${pkgs.git}/bin/git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | + ${pkgs.gnused}/bin/sed -n 's/^blob //p' | + ${pkgs.coreutils}/bin/sort --numeric-sort --key=2 | + ${pkgs.coreutils}/bin/cut -c 1-12,41- | + ${pkgs.coreutils}/bin/numfmt --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest''; + + #aliases for (I think) macos commands + pbcopy = "${pkgs.wl-clipboard}/bin/wl-copy"; + pbpaste = "${pkgs.wl-clipboard}/bin/wl-paste"; + }; + + shellInit = '' + fish_add_path ~/.local/bin + fish_add_path ~/.cargo/bin + set hydro_color_pwd 62A + set hydro_color_error red + set hydro_color_duration yellow + set hydro_color_prompt green + set hydro_color_git blue + ''; + + plugins = [ + { + name = "hydro"; + src = pkgs.fishPlugins.hydro.src; + } + ]; +} diff --git a/nix/home-manager/progs/helix.nix b/nix/home-manager/progs/helix.nix new file mode 100644 index 0000000..76f4a5e --- /dev/null +++ b/nix/home-manager/progs/helix.nix @@ -0,0 +1,288 @@ +{ pkgs }: +{ + enable = true; + package = pkgs.helix; + settings = { + theme = "my_theme"; + editor = { + cursor-shape = { + insert = "bar"; + normal = "block"; + select = "underline"; + }; + + file-picker = { + hidden = false; + }; + + #wrapping!! + soft-wrap.enable = true; + }; + }; + + languages = { + language = [ + { + name = "rust"; + auto-format = true; + } + ]; + }; + + themes = { + #modified fleet_dark theme + my_theme = + let + white = "#ffffff"; + gray-120 = "#d1d1d1"; + gray-110 = "#c2c2c2"; + gray-100 = "#a0a0a0"; + gray-90 = "#898989"; + gray-80 = "#767676"; + gray-70 = "#5d5d5d"; + gray-60 = "#484848"; + gray-50 = "#383838"; + gray-40 = "#333333"; + gray-30 = "#2d2d2d"; + gray-20 = "#292929"; + gray-15 = "#1F1F1F"; + gray-10 = "#181818"; + black = "#000000"; + blue-110 = "#6daaf7"; + blue-100 = "#4d9bf8"; + blue-90 = "#3691f9"; + blue-80 = "#1a85f6"; + blue-70 = "#0273eb"; + blue-60 = "#0c6ddd"; + blue-50 = "#195eb5"; + blue-40 = "#194176"; + blue-30 = "#163764"; + blue-20 = "#132c4f"; + blue-10 = "#0b1b32"; + red-80 = "#ec7388"; + red-70 = "#ea4b67"; + red-60 = "#d93953"; + red-50 = "#ce364d"; + red-40 = "#c03248"; + red-30 = "#a72a3f"; + red-20 = "#761b2d"; + red-10 = "#390813"; + green-50 = "#4ca988"; + green-40 = "#3ea17f"; + green-30 = "#028764"; + green-20 = "#134939"; + green-10 = "#081f19"; + yellow-60 = "#f8ab17"; + yellow-50 = "#e1971b"; + yellow-40 = "#b5791f"; + yellow-30 = "#7c511a"; + yellow-20 = "#5a3a14"; + yellow-10 = "#281806"; + purple-20 = "#c07bf3"; + purple-10 = "#b35def"; + + blue = "#87C3FF"; + blue-light = "#ADD1DE"; + coral = "#CC7C8A"; + cyan = "#82D2CE"; + cyan-dark = "#779E9E"; + lime = "#A8CC7C"; + orange = "#E09B70"; + pink = "#E394DC"; + violet = "#AF9CFF"; + yellow = "#EBC88D"; + in + { + "attribute" = lime; + "type" = blue; + "type.return" = blue-light; + "type.parameter" = blue-light; + "constructor" = yellow; + "constant" = violet; + "constant.builtin.boolean" = cyan; + "constant.character" = yellow; + "constant.character.escape" = cyan; + "constant.numeric" = yellow; + "string" = pink; + "string.regexp" = cyan; + "string.special" = { + fg = yellow; + modifiers = [ "underlined" ]; + }; # .path / .url / .symbol + + "comment" = gray-90; # .line + # "comment.block" = {} # .documentation + "variable" = gray-120; # .builtin + "variable.builtin" = { + fg = coral; + }; + # "variable.other" = {} # .member + "variable.other.member" = violet; + "label" = yellow; + "keyword" = cyan; # .operator / .directive / .function + "function" = yellow; + "function.declaration" = "#EFEFEF"; + "function.macro" = lime; + "function.builtin" = lime; + "function.special" = lime; + #"function.declaration.method" = { fg = "lightest", modifiers = ["bold"] } #depends on #4892 + "tag" = blue; + "special" = lime; + "namespace" = blue; + + # used in theming + # "markup" = {} # .normal / .quote / .raw + # "markup.normal" = {} # .completion / .hover + "markup.bold" = { + modifiers = [ "bold" ]; + }; + "markup.italic" = { + modifiers = [ "italic" ]; + }; + "markup.strikethrough" = { + modifiers = [ "crossed_out" ]; + }; + "markup.heading" = { + fg = cyan; + modifiers = [ "bold" ]; + }; # .marker / .1 / .2 / .3 / .4 / .5 / .6 + "markup.list" = pink; # .unnumbered / .numbered + "markup.list.numbered" = cyan; + "markup.list.unnumbered" = cyan; + # "markup.link" = "green" + "markup.link.url" = { + fg = pink; + modifiers = [ + "italic" + "underlined" + ]; + }; + "markup.link.text" = cyan; + "markup.link.label" = purple-20; + "markup.quote" = pink; + "markup.raw" = pink; + "markup.raw.inline" = cyan; # .completion / .hover + "markup.raw.block" = "#EB83E2"; + + "diff.plus" = green-50; + "diff.minus" = red-50; + "diff.delta" = blue-80; + + # ui specific + # "ui.background" = { bg = gray-10; }; # .separator + "ui.background" = { }; + "ui.statusline" = { + fg = gray-120; + bg = gray-20; + }; # .inactive / .normal / .insert / .select + "ui.statusline.normal" = { + fg = gray-120; + bg = gray-20; + }; + "ui.statusline.inactive" = { + fg = gray-90; + }; + "ui.statusline.insert" = { + fg = gray-20; + bg = blue-90; + }; + "ui.statusline.select" = { + fg = gray-20; + bg = yellow-60; + }; + + "ui.cursor" = { + modifiers = [ "reversed" ]; + }; # .insert / .select / .match / .primary + "ui.cursor.match" = { + bg = blue-30; + }; # .insert / .select / .match / .primary + "ui.selection" = { + bg = gray-50; + }; # .primary + "ui.selection.primary" = { + bg = blue-40; + }; + + "ui.cursorline" = { + bg = gray-15; + }; + "ui.linenr" = gray-70; + "ui.linenr.selected" = gray-110; + + "ui.popup" = { + fg = gray-120; + bg = gray-20; + }; # .info + "ui.window" = { + fg = gray-50; + }; + "ui.help" = { + fg = gray-120; + bg = gray-20; + }; + "ui.menu" = { + fg = gray-120; + bg = gray-20; + }; # .selected + "ui.menu.selected" = { + fg = white; + bg = blue-40; + }; # .selected + # Calculated as #ffffff with 30% opacity + "ui.menu.scroll" = { + fg = "#dfdfdf"; + }; + + "ui.text" = gray-120; # .focus / .info + "ui.text.focus" = { + fg = white; + bg = blue-40; + }; + + "ui.virtual" = gray-90; # .whitespace + "ui.virtual.inlay-hint" = { + fg = gray-70; + }; + "ui.virtual.ruler" = { + bg = gray-20; + }; + + "hint" = gray-80; + "info" = "#A366C4"; + "warning" = "#FACb66"; + "error" = "#FF5269"; + + "diagnostic.hint" = { + underline = { + color = gray-80; + style = "line"; + }; + }; + "diagnostic.info" = { + underline = { + color = "#A366C4"; + style = "line"; + }; + }; + "diagnostic.warning" = { + underline = { + color = "#FACB66"; + style = "line"; + }; + }; + "diagnostic.error" = { + underline = { + color = "#FF5269"; + style = "line"; + }; + }; + "diagnostic.unnecessary" = { + modifiers = [ "dim" ]; + }; + "diagnostic.deprecated" = { + modifiers = [ "crossed_out" ]; + }; + }; + }; +} diff --git a/nix/home-manager/progs/librewolf.nix b/nix/home-manager/progs/librewolf.nix new file mode 100644 index 0000000..c26fd13 --- /dev/null +++ b/nix/home-manager/progs/librewolf.nix @@ -0,0 +1,77 @@ +{ pkgs, inputs, ... }: +{ + home.packages = with pkgs; [ librewolf ]; + + programs.librewolf = { + enable = true; + settings = { + "webgl.disabled" = false; + "privacy.resistFingerprinting" = false; + "privacy.clearOnShutdown.history" = false; + "privacy.clearOnShutdown.cookies" = false; + "network.cookie.lifetimePolicy" = 0; + "general.useragent.compatMode.firefox" = true; + "identity.fxaccounts.enabled" = true; + "services.sync.prefs.sync.privacy.clearOnShutdown.cookies" = false; + "services.sync.prefs.sync.privacy.clearOnShutdown_v2.cookiesAndStorage" = false; + + "general.useragent.override" = "Mozilla/5.0 (X11; Linux x86_64; rv:${pkgs.firefox.version}) Gecko/20100101 Firefox/${pkgs.firefox.version}"; + + "extensions.activeThemeID" = "firefox-compact-dark@mozilla.org"; + + # For themeing + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + "browser.tabs.drawInTitlebar" = true; + "svg.context-properties.content.enabled" = true; + + #fake location, FIT (just about) + "geo.provider.network.url" = + "data:application/json," + + builtins.toJSON { + location = { + lat = 28.0749; + lng = -80.6302; + }; + accuracy = 1.0; + }; + }; + }; + + home.file = + let + chromeTheme = ".librewolf/tckj7njq.default-release/chrome"; + + firefoxThemeFile = file: src: { + target = "${chromeTheme}/${file}"; + source = "${inputs.firefox-mod-theme}/${src}/${file}"; + recursive = true; + }; + + baseThemeFile = { + file = ""; + src = ""; + }; + + modThemeFiles = [ + { + file = "userChrome.css"; + } + { + file = "userContent.css"; + } + { + file = "ASSETS"; + } + ]; + in + builtins.listToAttrs ( + map (f: { + name = "firefox-theme-${f.file}"; + value = firefoxThemeFile f.file f.src; + }) (map (f: baseThemeFile // f) modThemeFiles) + ); + + home.sessionVariables = { + BROWSER = "librewolf"; + }; +} diff --git a/nix/home-manager/progs/niri.nix b/nix/home-manager/progs/niri.nix new file mode 100644 index 0000000..f7b766b --- /dev/null +++ b/nix/home-manager/progs/niri.nix @@ -0,0 +1,167 @@ +{ + config, + pkgs, + homeDirectory, +}: +{ + prefer-no-csd = true; + + spawn-at-startup = [ + #waybar + { command = [ "${pkgs.waybar}/bin/waybar" ]; } + + #swaybg works on more than just sway (sets a wallpaper) + { + command = [ + "${pkgs.swaybg}/bin/swaybg" + "-m" + "center" + "-i" + "${homeDirectory}/.wallpaper.png" + ]; + } + ]; + + window-rules = [ + { draw-border-with-background = false; } + { + geometry-corner-radius = { + top-left = 10.0; + top-right = 10.0; + bottom-right = 10.0; + bottom-left = 10.0; + }; + } + { clip-to-geometry = true; } + ]; + + binds = with config.lib.niri.actions; { + #application launcher + "Mod+Space".action = spawn [ + "rofi" + "-show" + "combi" + ]; + + #open a terminal + "Mod+T".action = spawn "${pkgs.alacritty}/bin/alacritty"; + + #lock the screen + "Mod+X".action = spawn "${pkgs.swaylock}/bin/swaylock"; + + #screenshotting + "Print".action = screenshot; + "Ctrl+Print".action = screenshot-screen; + "Alt+Print".action = screenshot-window; + + #Volume control + "XF86AudioRaiseVolume".action = spawn [ + "${pkgs.avizo}/bin/volumectl" + "-u" + "up" + ]; + "XF86AudioLowerVolume".action = spawn [ + "${pkgs.avizo}/bin/volumectl" + "-u" + "down" + ]; + "XF86AudioMute".action = spawn [ + "${pkgs.avizo}/bin/volumectl" + "toggle-mute" + ]; + "XF86AudioMicMute".action = spawn [ + "${pkgs.avizo}/bin/volumectl" + "-m" + "toggle-mute" + ]; + + #Display Brightness control + "XF86MonBrightnessUp".action = spawn [ + "${pkgs.avizo}/bin/lightctl" + "up" + ]; + "XF86MonBrightnessDown".action = spawn [ + "${pkgs.avizo}/bin/lightctl" + "down" + ]; + + #Force close a window + "Mod+Q".action = close-window; + + "Mod+Shift+Q".action = quit; + + #bindings for like window management ig + + "Mod+Left".action = focus-column-left; + "Mod+Down".action = focus-window-down; + "Mod+Up".action = focus-window-up; + "Mod+Right".action = focus-column-right; + + "Mod+H".action = focus-column-left; + "Mod+J".action = focus-window-down; + "Mod+K".action = focus-window-up; + "Mod+L".action = focus-column-right; + + "Mod+Ctrl+Left".action = move-column-left; + "Mod+Ctrl+Down".action = move-window-down; + "Mod+Ctrl+Up".action = move-window-up; + "Mod+Ctrl+Right".action = move-column-right; + + "Mod+Ctrl+H".action = move-column-left; + "Mod+Ctrl+J".action = move-window-down; + "Mod+Ctrl+K".action = move-window-up; + "Mod+Ctrl+L".action = move-column-right; + + #fine adjustments to height and width of window + "Mod+Minus".action = set-column-width "-10%"; + "Mod+Equal".action = set-column-width "+10%"; + "Mod+Shift+Minus".action = set-window-height "-10%"; + "Mod+Shift+Equal".action = set-window-height "+10%"; + + "Mod+Home".action = focus-column-first; + "Mod+End".action = focus-column-last; + "Mod+Ctrl+Home".action = move-column-to-first; + "Mod+Ctrl+End".action = move-column-to-last; + + "Mod+Shift+Left".action = focus-monitor-left; + "Mod+Shift+Down".action = focus-monitor-down; + "Mod+Shift+Up".action = focus-monitor-up; + "Mod+Shift+Right".action = focus-monitor-right; + + "Mod+Shift+H".action = focus-monitor-left; + "Mod+Shift+J".action = focus-monitor-down; + "Mod+Shift+K".action = focus-monitor-up; + "Mod+Shift+L".action = focus-monitor-right; + + "Mod+Shift+Ctrl+Left".action = move-column-to-monitor-left; + "Mod+Shift+Ctrl+Down".action = move-column-to-monitor-down; + "Mod+Shift+Ctrl+Up".action = move-column-to-monitor-up; + "Mod+Shift+Ctrl+Right".action = move-column-to-monitor-right; + + "Mod+Shift+Ctrl+H".action = move-column-to-monitor-left; + "Mod+Shift+Ctrl+J".action = move-column-to-monitor-down; + "Mod+Shift+Ctrl+K".action = move-column-to-monitor-up; + "Mod+Shift+Ctrl+L".action = move-column-to-monitor-right; + + "Mod+Page_Down".action = focus-workspace-down; + "Mod+Page_Up".action = focus-workspace-up; + "Mod+U".action = focus-workspace-down; + "Mod+I".action = focus-workspace-up; + + #move a window up and down workspaces + "Mod+Ctrl+Page_Down".action = move-column-to-workspace-down; + "Mod+Ctrl+Page_Up".action = move-column-to-workspace-up; + + "Mod+Ctrl+U".action = move-column-to-workspace-down; + "Mod+Ctrl+I".action = move-column-to-workspace-up; + + #does little squeeze thing into the left or right position with another window + "Mod+BracketLeft".action = consume-or-expel-window-left; + "Mod+BracketRight".action = consume-or-expel-window-right; + + "Mod+R".action = switch-preset-column-width; + "Mod+F".action = maximize-column; + "Mod+Shift+F".action = fullscreen-window; + "Mod+C".action = center-column; + }; +} diff --git a/nix/home-manager/progs/rss.nix b/nix/home-manager/progs/rss.nix new file mode 100644 index 0000000..97515ca --- /dev/null +++ b/nix/home-manager/progs/rss.nix @@ -0,0 +1,91 @@ +[ + { + title = "Stratechery"; + url = "https://stratechery.passport.online/feed/rss/2gi1tPZ8Ta36Tsx7rDLM5P"; + } + + { + title = "Factorio Blog"; + url = "https://www.factorio.com/blog/rss"; + } + + { + title = "Firefox Nightly News"; + url = "https://blog.nightly.mozilla.org/feed/"; + } + + { + title = "Servo Blog"; + url = "https://servo.org/blog/feed.xml"; + } + + { + title = "Alyssa Rosenzweig"; + url = "https://rosenzweig.io/feed.xml"; + } + + { + title = "Marc's Blog"; + url = "https://brooker.co.za/blog/rss.xml"; + } + + { + title = "Fabien Sanglard"; + url = "https://fabiensanglard.net/rss.xml"; + } + + { + title = "Xuanwo's Blog"; + url = "https://xuanwo.io/index.xml"; + } + + { + title = "Carlos Galdino"; + url = "https://blog.carlosgaldino.com/atom.xml"; + } + + { + title = "soatok"; + url = "https://soatok.blog/feed/"; + } + + { + title = "Jack Garbus"; + url = "https://jarbus.net/index.xml"; + } + + { + title = "Terence Eden"; + url = "https://shkspr.mobi/blog/feed/atom/"; + } + + { + title = "GioCities"; + url = "https://blog.giovanh.com/feeds/atom.xml"; + } + + { + title = "mcyoung"; + url = "https://mcyoung.xyz/atom.xml"; + } + + { + title = "Embrace the Red"; + url = "https://embracethered.com/blog/index.xml"; + } + + { + title = "Chips and Cheese"; + url = "https://chipsandcheese.com/feed/"; + } + + { + title = "System5"; + url = "https://blogsystem5.substack.com/feed"; + } + + { + title = "lwn"; + url = "https://lwn.net/headlines/Features"; + } +] diff --git a/nix/home-manager/progs/swaylock.nix b/nix/home-manager/progs/swaylock.nix new file mode 100644 index 0000000..bb528c3 --- /dev/null +++ b/nix/home-manager/progs/swaylock.nix @@ -0,0 +1,31 @@ +{ + color = "24273a"; + bs-hl-color = "f4dbd6"; + caps-lock-bs-hl-color = "f4dbd6"; + caps-lock-key-hl-color = "a6da95"; + inside-color = 0; + inside-clear-color = 0; + inside-caps-lock-color = 0; + inside-ver-color = 0; + inside-wrong-color = 0; + key-hl-color = "a6da95"; + layout-bg-color = 0; + layout-border-color = 0; + layout-text-color = "cad3f5"; + line-color = 0; + line-clear-color = 0; + line-caps-lock-color = 0; + line-ver-color = 0; + line-wrong-color = 0; + ring-color = "b7bdf8"; + ring-clear-color = "f4dbd6"; + ring-caps-lock-color = "f5a97f"; + ring-ver-color = "8aadf4"; + ring-wrong-color = "ee99a0"; + separator-color = 0; + text-color = "cad3f5"; + text-clear-color = "f4dbd6"; + text-caps-lock-color = "f5a97f"; + text-ver-color = "8aadf4"; + text-wrong-color = "ee99a0"; +} diff --git a/nix/home-manager/progs/waybar.nix b/nix/home-manager/progs/waybar.nix new file mode 100644 index 0000000..89248ea --- /dev/null +++ b/nix/home-manager/progs/waybar.nix @@ -0,0 +1,253 @@ +{ pkgs }: +{ + enable = true; + settings.mainBar = { + layer = "top"; + position = "top"; + # mod = "dock"; + # exclusive = true; + # gtk-layer-shell = true; + margin-bottom = -1; + # passthrough = false; + height = 32; + modules-left = + [ + ]; + modules-center = [ "clock" ]; + modules-right = [ + "cpu" + "memory" + "tray" + "pulseaudio" + "network" + "battery" + ]; + cpu = { + interval = 5; + format = " {usage}%"; + max-length = 10; + }; + memory = { + interval = 10; + format = " {percentage}%"; + max-length = 10; + tooltip = true; + tooltip-format = "RAM - {used:0.1f}GiB used"; + }; + tray = { + icon-size = 18; + spacing = 3; + }; + clock = { + format = " {:%R\n %d.%m.%Y}"; + tooltip-format = "{calendar}"; + calendar = { + mode = "year"; + mode-mon-col = 3; + weeks-pos = "right"; + on-scroll = 1; + on-click-right = "mode"; + format = { + months = "{}"; + days = "{}"; + weeks = "W{}"; + weekdays = "{}"; + today = "{}"; + }; + }; + actions = { + on-click-right = "mode"; + on-click-forward = "tz_up"; + on-click-backward = "tz_down"; + on-scroll-up = "shift_up"; + on-scroll-down = "shift_down"; + }; + }; + network = { + format-wifi = " {icon}"; + format-ethernet = "  "; + format-disconnected = "󰌙 "; + format-icons = [ + "󰤯 " + "󰤟 " + "󰤢 " + "󰤢 " + "󰤨 " + ]; + }; + battery = { + states = { + good = 95; + warning = 30; + critical = 20; + }; + format = " {icon} {capacity}%"; + format-charging = "  {capacity}%"; + format-plugged = "  {capacity}%"; + format-alt = "{time} {icon}"; + format-icons = [ + "󰂎" + "󰁺" + "󰁻" + "󰁼" + "󰁽" + "󰁾" + "󰁿" + "󰂀" + "󰂁" + "󰂂" + "󰁹" + ]; + }; + # not actually pulseaudio-specific + pulseaudio = { + max-volume = 100; + scroll-step = 10; + format = "{icon}"; + tooltip-format = "{volume}%"; + format-muted = "🔇"; + format-icons = { + default = [ + " " + " " + " " + ]; + }; + on-click = "${pkgs.pwvucontrol}/bin/pwvucontrol"; + }; + }; + + style = '' + /*base background color*/ + @define-color bg_main rgba(25, 25, 25, 1.0); + @define-color bg_main_tooltip rgba(0, 0, 0, 0.7); + + + /*base background color of selections */ + @define-color bg_hover rgba(200, 200, 200, 0.3); + /*base background color of active elements */ + @define-color bg_active rgba(100, 100, 100, 0.5); + + /*base border color*/ + @define-color border_main rgba(255, 255, 255, 0.2); + + /*text color for entries, views and content in general */ + @define-color content_main white; + /*text color for entries that are unselected */ + @define-color content_inactive rgba(255, 255, 255, 0.25); + + * { + text-shadow: none; + box-shadow: none; + border: none; + border-radius: 0; + font-family: "Segoe UI", "Ubuntu"; + font-weight: 600; + font-size: 12.7px; + } + + window#waybar { + background: @bg_main; + border-top: 0; + color: @content_main; + } + + tooltip { + background: @bg_main_tooltip; + border-radius: 5px; + border-width: 1px; + border-style: solid; + border-color: @border_main; + } + + tooltip label { + color: @content_main; + } + + #taskbar { + } + + #taskbar button { + min-width: 130px; + border-bottom: 3px solid rgba(255, 255, 255, 0.3); + margin-left: 2px; + margin-right: 2px; + padding-left: 8px; + padding-right: 8px; + color: white; + transition: all 0.25s cubic-bezier(0.165, 0.84, 0.44, 1); + } + + #taskbar button.active { + border-bottom: 3px solid white; + background: @bg_active; + } + + #taskbar button:hover { + border-bottom: 3px solid white; + background: @bg_hover; + color: @content_main; + } + + #cpu, #memory { + padding:3px; + } + + #window { + border-radius: 10px; + margin-left: 20px; + margin-right: 20px; + } + + #tray { + margin-left: 5px; + margin-right: 5px; + } + + #tray > .passive { + border-bottom: none; + } + + #tray > .active { + border-bottom: 3px solid white; + } + + #tray > .needs-attention { + border-bottom: 3px solid @warning_color; + } + + #tray > widget { + transition: all 0.25s cubic-bezier(0.165, 0.84, 0.44, 1); + } + + #tray > widget:hover { + background: @bg_hover; + } + + #pulseaudio { + font-family: "JetBrainsMono Nerd Font"; + padding-left: 3px; + padding-right: 3px; + transition: all 0.25s cubic-bezier(0.165, 0.84, 0.44, 1); + } + + #pulseaudio:hover { + background: @bg_hover; + } + + #network { + padding-left: 3px; + padding-right: 3px; + } + + #clock { + padding-right: 5px; + padding-left: 5px; + transition: all 0.25s cubic-bezier(0.165, 0.84, 0.44, 1); + } + + #clock:hover { + background: @bg_hover; + } + ''; +} diff --git a/nix/home-manager/secrets/factorio.age b/nix/home-manager/secrets/factorio.age new file mode 100644 index 0000000000000000000000000000000000000000..28800c02847e10484ff6047dadbc7cc8bdd21475 GIT binary patch literal 398 zcmYdHPt{G$OD?J`D9Oyv)5|YP*Do{V(zR14F3!+RO))YxHMCUl$_b533{(hm4@xyC z@%Qq#bTJAo)=u+@NH_4yGbl82Do#&}GIGo+&h{+xbIl2@D(6ZGO$rK+%riB~bMnj1 z^DK&}C@v^ZG%oe9G$>9E%l8Qm3r+V=Gj_6YEJwF3#lyubJy5|hJkT;J&ABi#)VnxB zzsfhr%iFsm#o4W-+$E&4#KXU=$VEHRpro`SB%jN)%)&1tGNd#qIo&kWAkW1&EZERI zv&u3oS3Aoy(WEda-@w+O5P>#R;|7K g9m}*Y{Ync(oty47rmPdW9(>Q~$OfH<0jHB#00tzHKL7v# literal 0 HcmV?d00001 diff --git a/nix/home-manager/secrets/secrets.nix b/nix/home-manager/secrets/secrets.nix new file mode 100644 index 0000000..7a30db5 --- /dev/null +++ b/nix/home-manager/secrets/secrets.nix @@ -0,0 +1,10 @@ +let + laptop = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4jL6gYOunUlUtPvGdML0cpbKSsPNqQ1jit4E7U1RyH"; + desktop = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBJjT5QZ3zRDb+V6Em20EYpSEgPW5e/U+06uQGJdraxi"; +in +{ + "factorio.age".publicKeys = [ + laptop + desktop + ]; +} diff --git a/nix/home-manager/system-mreow.nix b/nix/home-manager/system-mreow.nix new file mode 100644 index 0000000..1c8323f --- /dev/null +++ b/nix/home-manager/system-mreow.nix @@ -0,0 +1,161 @@ +{ + config, + pkgs, + lib, + homeDirectory, + ... +}: +{ + imports = [ ./gui.nix ]; + + home.packages = with pkgs; [ + wdisplays + intel-gpu-tools + swaylock + + #manage bluetooth devices + blueman + ]; + + #bluetooth manager + services.blueman-applet.enable = true; + + #notification daemon + services.dunst = { + enable = true; + package = pkgs.dunst; + }; + + #window manager + programs.niri = { + settings = import ./progs/niri.nix { inherit config pkgs homeDirectory; }; + }; + + programs.swaylock = { + enable = true; + settings = import ./progs/swaylock.nix; + }; + + #waybar for status bar + programs.waybar = import ./progs/waybar.nix { inherit pkgs; }; + + #backup utility + programs.borgmatic = { + enable = true; + package = pkgs.borgmatic; + backups = import ./progs/borg.nix { inherit homeDirectory; }; + }; + + # https://community.frame.work/t/speakers-sound-quality/1078/83 + # Filter: ON HPQ Fc 100.0 Hz Gain 0.0 dB Q 1.0 + # Filter: ON PK Fc 150.0 Hz Gain 4.02 dB Q 3.0 + # Filter: ON PK Fc 600.0 Hz Gain -5.07 dB Q 4.000000000000008 + # Filter: ON PK Fc 1200.0 Hz Gain -3.49 dB Q 4.17 + # Filter: ON PK Fc 2000.0 Hz Gain 1.43 dB Q 4.0 + # Filter: ON PK Fc 5300.0 Hz Gain 3.84 dB Q 2.64 + # Filter: ON HSC Fc 6000.0 Hz Gain 4.02 dB Q 4.36 + # Filter: ON PK Fc 7500.0 Hz Gain -2.09 dB Q 3.0 + # Filter: ON PK Fc 8000.0 Hz Gain 2.01 dB Q 4.36 + # Filter: ON PK Fc 900.0 Hz Gain -4.12 dB Q 5.909999999999967 + home.file.".config/easyeffects/output/framework.json".text = + let + baseBand = { + mode = "RLC (BT)"; + mute = false; + solo = false; + slope = "1x"; + type = "Bell"; + }; + + bandList = [ + { + frequency = 100.0; + gain = 0.0; + q = 1.0; + slope = "x4"; + type = "Hi-pass"; + } + { + frequency = 150.0; + gain = 4.02; + q = 3.0; + } + { + frequency = 600.0; + gain = -5.07; + q = 4.000000000000008; + } + { + frequency = 1200.0; + gain = -3.49; + q = 4.17; + } + { + frequency = 2000.0; + gain = 1.43; + q = 4.0; + } + { + frequency = 5300.0; + gain = 3.84; + q = 2.64; + } + { + frequency = 6000.0; + gain = 4.02; + q = 4.36; + type = "Hi-shelf"; + } + { + frequency = 7500.0; + gain = -2.09; + q = 3.0; + } + { + frequency = 8000.0; + gain = 2.01; + q = 4.36; + } + { + frequency = 900.0; + gain = -4.12; + q = 5.909999999999967; + } + ]; + + bands = builtins.listToAttrs ( + map (f: { + name = "band${toString f.snd}"; + value = baseBand // f.fst; + }) (lib.lists.zipLists bandList (lib.range 0 (lib.length (bandList)))) + ); + + in + builtins.toJSON { + output = { + blocklist = [ ]; + equalizer = { + balance = 0.0; + bypass = false; + input-gain = 0.0; + left = bands; + right = bands; + mode = "IIR"; + num-bands = 10; + output-gain = -1.5; + pitch-left = 0.0; + pitch-right = 0.0; + split-channels = false; + }; + plugins_order = [ + "equalizer" + ]; + }; + }; + + services.easyeffects = { + enable = true; + package = pkgs.easyeffects; + preset = "framework"; + }; +} diff --git a/nix/home-manager/system-nixos.nix b/nix/home-manager/system-nixos.nix new file mode 100644 index 0000000..1435381 --- /dev/null +++ b/nix/home-manager/system-nixos.nix @@ -0,0 +1,45 @@ +{ + pkgs, + inputs, + lib, + ... +}: +{ + imports = [ ./gui.nix ]; + nixpkgs.config.allowUnfree = true; + + nixpkgs.overlays = [ + # Add a protontricks-beta package so we can use protontricks with latest steam beta + # https://github.com/Matoking/protontricks/issues/304#issuecomment-2280920826 + ( + final: prev: + let + ps = prev.python312Packages; + in + { + vdf-patch = ps.vdf.overrideAttrs (oldAttrs: { + src = inputs.vdf-patch; + }); + protontricks-beta = prev.protontricks.overrideAttrs (oldAttrs: { + src = inputs.protontricks; + propagatedBuildInputs = [ + ps.setuptools # implicit dependency, used to find data/icon_placeholder.png + final.vdf-patch + ps.pillow + ]; + }); + } + ) + ]; + + home.packages = with pkgs; [ + protontricks-beta + beatsabermodmanager + protonup-qt + ]; + + programs.alacritty.settings = { + window.decorations = lib.mkForce "full"; + window.opacity = lib.mkForce 1.0; + }; +}