From 1f4d868307d531a9b5948f44748905e0bf178f8d Mon Sep 17 00:00:00 2001 From: Jet Pham <55770902+jetpham@users.noreply.github.com> Date: Fri, 8 Mar 2024 01:57:10 -0800 Subject: [PATCH 001/211] First commit --- flake.lock | 49 +++++++++++ flake.nix | 49 +++++++++++ home-manager/home.nix | 115 ++++++++++++++++++++++++++ nixos/configuration.nix | 136 +++++++++++++++++++++++++++++++ nixos/hardware-configuration.nix | 40 +++++++++ 5 files changed, 389 insertions(+) create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 home-manager/home.nix create mode 100644 nixos/configuration.nix create mode 100644 nixos/hardware-configuration.nix diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..177441e --- /dev/null +++ b/flake.lock @@ -0,0 +1,49 @@ +{ + "nodes": { + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1685599623, + "narHash": "sha256-Tob4CMOVHue0D3RzguDBCtUmX5ji2PsdbQDbIOIKvsc=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "93db05480c0c0f30382d3e80779e8386dcb4f9dd", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "release-23.05", + "repo": "home-manager", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1686431482, + "narHash": "sha256-oPVQ/0YP7yC2ztNsxvWLrV+f0NQ2QAwxbrZ+bgGydEM=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "d3bb401dcfc5a46ce51cdfb5762e70cc75d082d2", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..d4eb038 --- /dev/null +++ b/flake.nix @@ -0,0 +1,49 @@ +{ + description = "Jet's Nix Config"; + + inputs = { + # Nixpkgs + nixpkgs.url = "github:nixos/nixpkgs/nixos-23.05"; + + # Home manager + home-manager.url = "github:nix-community/home-manager/release-23.05"; + home-manager.inputs.nixpkgs.follows = "nixpkgs"; + + # TODO: Add any other flake you might need + # hardware.url = "github:nixos/nixos-hardware"; + + # Shameless plug: looking for a way to nixify your themes and make + # everything match nicely? Try nix-colors! + #nix-colors.url = "github:misterio77/nix-colors"; + }; + + outputs = { + self, + nixpkgs, + home-manager, + ... + } @ inputs: let + inherit (self) outputs; + in { + # NixOS configuration entrypoint + # Available through 'nixos-rebuild --flake .#your-hostname' + nixosConfigurations = { + jet = nixpkgs.lib.nixosSystem { + specialArgs = {inherit inputs outputs;}; + # > Our main nixos configuration file < + modules = [./nixos/configuration.nix]; + }; + }; + + # Standalone home-manager configuration entrypoint + # Available through 'home-manager --flake .#your-username@your-hostname' + homeConfigurations = { + "jet@laptop" = home-manager.lib.homeManagerConfiguration { + pkgs = nixpkgs.legacyPackages.x86_64-linux; # Home-manager requires 'pkgs' instance + extraSpecialArgs = {inherit inputs outputs;}; + # > Our main home-manager configuration file < + modules = [./home-manager/home.nix]; + }; + }; + }; +} diff --git a/home-manager/home.nix b/home-manager/home.nix new file mode 100644 index 0000000..8251f04 --- /dev/null +++ b/home-manager/home.nix @@ -0,0 +1,115 @@ +# This is your home-manager configuration file +# Use this to configure your home environment (it replaces ~/.config/nixpkgs/home.nix) +{ + inputs, + lib, + config, + pkgs, + ... +}: { + # You can import other home-manager modules here + imports = [ + # If you want to use home-manager modules from other flakes (such as nix-colors): + # inputs.nix-colors.homeManagerModule + + # You can also split up your configuration and import pieces of it here: + # ./nvim.nix + ]; + + nixpkgs = { + # You can add overlays here + overlays = [ + # If you want to use overlays exported from other flakes: + # neovim-nightly-overlay.overlays.default + + # Or define it inline, for example: + # (final: prev: { + # hi = final.hello.overrideAttrs (oldAttrs: { + # patches = [ ./change-hello-to-hi.patch ]; + # }); + # }) + ]; + # Configure your nixpkgs instance + config = { + # Disable if you don't want unfree packages + allowUnfree = true; + # Workaround for https://github.com/nix-community/home-manager/issues/2942 + allowUnfreePredicate = _: true; + }; + }; + + home = { + username = "jet"; + homeDirectory = "/home/jet"; + }; + + xresources.properties = { + "Xcursor.size" = 16; + "Xft.dpi" = 172; + }; + + home.packages = with pkgs; [ + neofetch + + # archives + zip + xz + unzip + + # utils + ripgrep # recursively searches directories for a regex pattern + eza # A modern replacement for ‘ls’ + fzf # A command-line fuzzy finder + + # misc + cowsay + file + which + tree + ]; + + # basic configuration of git, please change to your own + programs.git = { + enable = true; + userName = "Jet Pham"; + userEmail = "55770902+jetpham@users.noreply.github.com"; + }; + + programs.neovim = { + enable = true; + defaultEditor = true; + }; + + # starship - an customizable prompt for any shell + programs.starship = { + enable = true; + enableNushellIntegration = true; + # custom settings + settings = { + add_newline = false; + aws.disabled = true; + gcloud.disabled = true; + line_break.disabled = true; + }; + }; + + # alacritty - a cross-platform, GPU-accelerated terminal emulator + programs.kitty = { + enable = true; + }; + + programs.nushell = { + enable = true; + }; + +# Enable home-manager and git + programs.home-manager.enable = true; + programs.git.enable = true; + + # Nicely reload system units when changing configs + systemd.user.startServices = "sd-switch"; + + # https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion + home.stateVersion = "23.05"; + programs.home-manager.enable = true; +} diff --git a/nixos/configuration.nix b/nixos/configuration.nix new file mode 100644 index 0000000..2e109a0 --- /dev/null +++ b/nixos/configuration.nix @@ -0,0 +1,136 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running ‘nixos-help’). + +{ config, pkgs, ... }: + +{ + imports = + [ # Include the results of the hardware scan. + ./hardware-configuration.nix + ]; + + # Bootloader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + networking.hostName = "nixos"; # Define your hostname. + # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. + + # Configure network proxy if necessary + # networking.proxy.default = "http://user:password@proxy:port/"; + # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; + + # Enable networking + networking.networkmanager.enable = true; + + # Set your time zone. + time.timeZone = "America/Los_Angeles"; + + # 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 the X11 windowing system. + services.xserver.enable = true; + + # Enable the KDE Plasma Desktop Environment. + services.xserver.displayManager.sddm.enable = true; + services.xserver.desktopManager.plasma5.enable = true; + + # Configure keymap in X11 + services.xserver = { + layout = "us"; + xkbVariant = ""; + }; + + # Enable CUPS to print documents. + services.printing.enable = true; + + # Enable sound with pipewire. + sound.enable = true; + hardware.pulseaudio.enable = false; + 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; + + # use the example session manager (no others are packaged yet so this is enabled by default, + # no need to redefine it in your config for now) + #media-session.enable = true; + }; + + # Enable touchpad support (enabled default in most desktopManager). + # services.xserver.libinput.enable = true; + + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users.jet = { + isNormalUser = true; + description = "Jet Pham"; + extraGroups = [ "networkmanager" "wheel" ]; + packages = with pkgs; [ + firefox + # thunderbird + ]; + }; + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + # List packages installed in system profile. To search, run: + # $ nix search wget + nix.settings.experimental-features = [ "nix-command" "flakes" ]; + environment.systemPackages = with pkgs; [ + # vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. + # wget + git + vim + wget + curl + ]; + + environment.variables.EDITOR = "vim"; + + # Some programs need SUID wrappers, can be configured further or are + # started in user sessions. + # programs.mtr.enable = true; + # programs.gnupg.agent = { + # enable = true; + # enableSSHSupport = true; + # }; + + # List services that you want to enable: + + # Enable the OpenSSH daemon. + # services.openssh.enable = true; + + # Open ports in the firewall. + # networking.firewall.allowedTCPPorts = [ ... ]; + # networking.firewall.allowedUDPPorts = [ ... ]; + # Or disable the firewall altogether. + # networking.firewall.enable = false; + + # This value determines the NixOS release from which the default + # settings for stateful data, like file locations and database versions + # on your system were taken. It‘s perfectly fine and recommended to leave + # this value at the release version of the first install of this system. + # Before changing this value read the documentation for this option + # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). + system.stateVersion = "23.11"; # Did you read the comment? + +} diff --git a/nixos/hardware-configuration.nix b/nixos/hardware-configuration.nix new file mode 100644 index 0000000..3fb2b5d --- /dev/null +++ b/nixos/hardware-configuration.nix @@ -0,0 +1,40 @@ +# 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 = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/ecfaab5f-dc2e-4bf0-a4cc-9a873de92c6f"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/5426-5447"; + fsType = "vfat"; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/db16204a-f762-4252-a7bb-1ff4f333fc17"; } + ]; + + # 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.enp0s31f6.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp2s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} From d7e3c25116764e2b594d2b8cf9f596eb7639712e Mon Sep 17 00:00:00 2001 From: Jet Pham <55770902+jetpham@users.noreply.github.com> Date: Fri, 8 Mar 2024 01:58:49 -0800 Subject: [PATCH 002/211] Create README.md --- README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..4959383 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +Made using https://github.com/Misterio77/nix-starter-configs From 72e17f8ca37c1a0c711c6114cfc3cd06c59e29f9 Mon Sep 17 00:00:00 2001 From: Jet Pham <55770902+jetpham@users.noreply.github.com> Date: Thu, 14 Mar 2024 19:09:41 -0700 Subject: [PATCH 003/211] fixing warning --- flake.lock | 16 ++++++++-------- flake.nix | 4 ++-- home-manager/home.nix | 3 +-- nixos/configuration.nix | 6 +++--- 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/flake.lock b/flake.lock index 177441e..d671653 100644 --- a/flake.lock +++ b/flake.lock @@ -7,32 +7,32 @@ ] }, "locked": { - "lastModified": 1685599623, - "narHash": "sha256-Tob4CMOVHue0D3RzguDBCtUmX5ji2PsdbQDbIOIKvsc=", + "lastModified": 1706981411, + "narHash": "sha256-cLbLPTL1CDmETVh4p0nQtvoF+FSEjsnJTFpTxhXywhQ=", "owner": "nix-community", "repo": "home-manager", - "rev": "93db05480c0c0f30382d3e80779e8386dcb4f9dd", + "rev": "652fda4ca6dafeb090943422c34ae9145787af37", "type": "github" }, "original": { "owner": "nix-community", - "ref": "release-23.05", + "ref": "release-23.11", "repo": "home-manager", "type": "github" } }, "nixpkgs": { "locked": { - "lastModified": 1686431482, - "narHash": "sha256-oPVQ/0YP7yC2ztNsxvWLrV+f0NQ2QAwxbrZ+bgGydEM=", + "lastModified": 1709703039, + "narHash": "sha256-6hqgQ8OK6gsMu1VtcGKBxKQInRLHtzulDo9Z5jxHEFY=", "owner": "nixos", "repo": "nixpkgs", - "rev": "d3bb401dcfc5a46ce51cdfb5762e70cc75d082d2", + "rev": "9df3e30ce24fd28c7b3e2de0d986769db5d6225d", "type": "github" }, "original": { "owner": "nixos", - "ref": "nixos-23.05", + "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } diff --git a/flake.nix b/flake.nix index d4eb038..f2544b4 100644 --- a/flake.nix +++ b/flake.nix @@ -3,10 +3,10 @@ inputs = { # Nixpkgs - nixpkgs.url = "github:nixos/nixpkgs/nixos-23.05"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; # Home manager - home-manager.url = "github:nix-community/home-manager/release-23.05"; + home-manager.url = "github:nix-community/home-manager/release-23.11"; home-manager.inputs.nixpkgs.follows = "nixpkgs"; # TODO: Add any other flake you might need diff --git a/home-manager/home.nix b/home-manager/home.nix index 8251f04..0e13b11 100644 --- a/home-manager/home.nix +++ b/home-manager/home.nix @@ -45,7 +45,7 @@ xresources.properties = { "Xcursor.size" = 16; - "Xft.dpi" = 172; + "Xft.dpi" = 200; }; home.packages = with pkgs; [ @@ -111,5 +111,4 @@ # https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion home.stateVersion = "23.05"; - programs.home-manager.enable = true; } diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 2e109a0..dc9aa32 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -14,7 +14,7 @@ boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; - networking.hostName = "nixos"; # Define your hostname. + networking.hostName = "laptop"; # Define your hostname. # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. # Configure network proxy if necessary @@ -50,9 +50,9 @@ services.xserver.desktopManager.plasma5.enable = true; # Configure keymap in X11 - services.xserver = { + services.xserver.xkb = { layout = "us"; - xkbVariant = ""; + variant = ""; }; # Enable CUPS to print documents. From 1817d2d28df44c8939efebb8196fa7a344d55673 Mon Sep 17 00:00:00 2001 From: Jet Pham <55770902+jetpham@users.noreply.github.com> Date: Thu, 14 Mar 2024 19:57:49 -0700 Subject: [PATCH 004/211] unstable --- flake.lock | 7 +++---- flake.nix | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/flake.lock b/flake.lock index d671653..aea9538 100644 --- a/flake.lock +++ b/flake.lock @@ -7,16 +7,15 @@ ] }, "locked": { - "lastModified": 1706981411, - "narHash": "sha256-cLbLPTL1CDmETVh4p0nQtvoF+FSEjsnJTFpTxhXywhQ=", + "lastModified": 1710452332, + "narHash": "sha256-+lKOoQ89fD6iz6Ro7Adml4Sx6SqQcTWII4t1rvVtdjs=", "owner": "nix-community", "repo": "home-manager", - "rev": "652fda4ca6dafeb090943422c34ae9145787af37", + "rev": "096d9c04b3e9438855aa65e24129b97a998bd3d9", "type": "github" }, "original": { "owner": "nix-community", - "ref": "release-23.11", "repo": "home-manager", "type": "github" } diff --git a/flake.nix b/flake.nix index f2544b4..3f3c14f 100644 --- a/flake.nix +++ b/flake.nix @@ -6,7 +6,7 @@ nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; # Home manager - home-manager.url = "github:nix-community/home-manager/release-23.11"; + home-manager.url = "github:nix-community/home-manager"; home-manager.inputs.nixpkgs.follows = "nixpkgs"; # TODO: Add any other flake you might need From 66607d4a5f698fc40563bbdfd15c978cd0a80350 Mon Sep 17 00:00:00 2001 From: Jet Pham <55770902+jetpham@users.noreply.github.com> Date: Thu, 14 Mar 2024 20:59:51 -0700 Subject: [PATCH 005/211] add bluetooth --- nixos/configuration.nix | 2 + q | 112 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 q diff --git a/nixos/configuration.nix b/nixos/configuration.nix index dc9aa32..05353eb 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -58,6 +58,8 @@ # Enable CUPS to print documents. services.printing.enable = true; + hardware.bluetooth.enable = true; + # Enable sound with pipewire. sound.enable = true; hardware.pulseaudio.enable = false; diff --git a/q b/q new file mode 100644 index 0000000..02a7d54 --- /dev/null +++ b/q @@ -0,0 +1,112 @@ +commit 72e17f8ca37c1a0c711c6114cfc3cd06c59e29f9 (HEAD -> main, origin/main) +Author: Jet Pham <55770902+jetpham@users.noreply.github.com> +Date: Thu Mar 14 19:09:41 2024 -0700 + + fixing warning + +diff --git a/flake.lock b/flake.lock +index 177441e..d671653 100644 +--- a/flake.lock ++++ b/flake.lock +@@ -7,32 +7,32 @@ + ] + }, + "locked": { +- "lastModified": 1685599623, +- "narHash": "sha256-Tob4CMOVHue0D3RzguDBCtUmX5ji2PsdbQDbIOIKvsc=", ++ "lastModified": 1706981411, ++ "narHash": "sha256-cLbLPTL1CDmETVh4p0nQtvoF+FSEjsnJTFpTxhXywhQ=", + "owner": "nix-community", + "repo": "home-manager", +- "rev": "93db05480c0c0f30382d3e80779e8386dcb4f9dd", ++ "rev": "652fda4ca6dafeb090943422c34ae9145787af37", + "type": "github" + }, + "original": { + "owner": "nix-community", +- "ref": "release-23.05", ++ "ref": "release-23.11", + "repo": "home-manager", + "type": "github" + } + }, + "nixpkgs": { + "locked": { +- "lastModified": 1686431482, +- "narHash": "sha256-oPVQ/0YP7yC2ztNsxvWLrV+f0NQ2QAwxbrZ+bgGydEM=", ++ "lastModified": 1709703039, ++ "narHash": "sha256-6hqgQ8OK6gsMu1VtcGKBxKQInRLHtzulDo9Z5jxHEFY=", + "owner": "nixos", + "repo": "nixpkgs", +- "rev": "d3bb401dcfc5a46ce51cdfb5762e70cc75d082d2", ++ "rev": "9df3e30ce24fd28c7b3e2de0d986769db5d6225d", + "type": "github" + }, + "original": { + "owner": "nixos", +- "ref": "nixos-23.05", ++ "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } +diff --git a/flake.nix b/flake.nix +index d4eb038..f2544b4 100644 +--- a/flake.nix ++++ b/flake.nix +@@ -3,10 +3,10 @@ +  + inputs = { + # Nixpkgs +- nixpkgs.url = "github:nixos/nixpkgs/nixos-23.05"; ++ nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; +  + # Home manager +- home-manager.url = "github:nix-community/home-manager/release-23.05"; ++ home-manager.url = "github:nix-community/home-manager/release-23.11"; + home-manager.inputs.nixpkgs.follows = "nixpkgs"; +  + # TODO: Add any other flake you might need +diff --git a/home-manager/home.nix b/home-manager/home.nix +index 8251f04..0e13b11 100644 +--- a/home-manager/home.nix ++++ b/home-manager/home.nix +@@ -45,7 +45,7 @@ +  + xresources.properties = { + "Xcursor.size" = 16; +- "Xft.dpi" = 172; ++ "Xft.dpi" = 200; + }; +  + home.packages = with pkgs; [ +@@ -111,5 +111,4 @@ +  + # https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion + home.stateVersion = "23.05"; +- programs.home-manager.enable = true; + } +diff --git a/nixos/configuration.nix b/nixos/configuration.nix +index 2e109a0..dc9aa32 100644 +--- a/nixos/configuration.nix ++++ b/nixos/configuration.nix +@@ -14,7 +14,7 @@ + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; +  +- networking.hostName = "nixos"; # Define your hostname. ++ networking.hostName = "laptop"; # Define your hostname. + # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. +  + # Configure network proxy if necessary +@@ -50,9 +50,9 @@ + services.xserver.desktopManager.plasma5.enable = true; +  + # Configure keymap in X11 +- services.xserver = { ++ services.xserver.xkb = { + layout = "us"; +- xkbVariant = ""; ++ variant = ""; + }; +  + # Enable CUPS to print documents. From 342aa83849c80d2d56dba34ebfbc0ba3b4ed26fa Mon Sep 17 00:00:00 2001 From: Jet Pham <55770902+jetpham@users.noreply.github.com> Date: Fri, 15 Mar 2024 21:21:18 -0700 Subject: [PATCH 006/211] something works --- README.md | 1 - flake.lock | 28 ++++-- flake.nix | 9 +- home-manager/home.nix | 64 ++---------- home-manager/neovim-flake | 1 + nixos/configuration.nix | 165 ++++++++++++++++++------------- nixos/hardware-configuration.nix | 44 ++------- q | 112 --------------------- 8 files changed, 140 insertions(+), 284 deletions(-) delete mode 100644 README.md create mode 160000 home-manager/neovim-flake delete mode 100644 q diff --git a/README.md b/README.md deleted file mode 100644 index 4959383..0000000 --- a/README.md +++ /dev/null @@ -1 +0,0 @@ -Made using https://github.com/Misterio77/nix-starter-configs diff --git a/flake.lock b/flake.lock index aea9538..5354826 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,20 @@ { "nodes": { + "hardware": { + "locked": { + "lastModified": 1710123225, + "narHash": "sha256-j3oWlxRZxB7cFsgEntpH3rosjFHRkAo/dhX9H3OfxtY=", + "owner": "nixos", + "repo": "nixos-hardware", + "rev": "ad2fd7b978d5e462048729a6c635c45d3d33c9ba", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixos-hardware", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -7,11 +22,11 @@ ] }, "locked": { - "lastModified": 1710452332, - "narHash": "sha256-+lKOoQ89fD6iz6Ro7Adml4Sx6SqQcTWII4t1rvVtdjs=", + "lastModified": 1710532761, + "narHash": "sha256-SUXGZNrXX05YA9G6EmgupxhOr3swI1gcxLUeDMUhrEY=", "owner": "nix-community", "repo": "home-manager", - "rev": "096d9c04b3e9438855aa65e24129b97a998bd3d9", + "rev": "206f457fffdb9a73596a4cb2211a471bd305243d", "type": "github" }, "original": { @@ -22,11 +37,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1709703039, - "narHash": "sha256-6hqgQ8OK6gsMu1VtcGKBxKQInRLHtzulDo9Z5jxHEFY=", + "lastModified": 1710451336, + "narHash": "sha256-pP86Pcfu3BrAvRO7R64x7hs+GaQrjFes+mEPowCfkxY=", "owner": "nixos", "repo": "nixpkgs", - "rev": "9df3e30ce24fd28c7b3e2de0d986769db5d6225d", + "rev": "d691274a972b3165335d261cc4671335f5c67de9", "type": "github" }, "original": { @@ -38,6 +53,7 @@ }, "root": { "inputs": { + "hardware": "hardware", "home-manager": "home-manager", "nixpkgs": "nixpkgs" } diff --git a/flake.nix b/flake.nix index 3f3c14f..b5e949e 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,5 @@ { - description = "Jet's Nix Config"; + description = "Jet's nix config"; inputs = { # Nixpkgs @@ -9,12 +9,11 @@ home-manager.url = "github:nix-community/home-manager"; home-manager.inputs.nixpkgs.follows = "nixpkgs"; - # TODO: Add any other flake you might need - # hardware.url = "github:nixos/nixos-hardware"; + hardware.url = "github:nixos/nixos-hardware"; # Shameless plug: looking for a way to nixify your themes and make # everything match nicely? Try nix-colors! - #nix-colors.url = "github:misterio77/nix-colors"; + # nix-colors.url = "github:misterio77/nix-colors"; }; outputs = { @@ -28,7 +27,7 @@ # NixOS configuration entrypoint # Available through 'nixos-rebuild --flake .#your-hostname' nixosConfigurations = { - jet = nixpkgs.lib.nixosSystem { + laptop = nixpkgs.lib.nixosSystem { specialArgs = {inherit inputs outputs;}; # > Our main nixos configuration file < modules = [./nixos/configuration.nix]; diff --git a/home-manager/home.nix b/home-manager/home.nix index 0e13b11..823af19 100644 --- a/home-manager/home.nix +++ b/home-manager/home.nix @@ -13,7 +13,7 @@ # inputs.nix-colors.homeManagerModule # You can also split up your configuration and import pieces of it here: - # ./nvim.nix + ./neovim-flake/flake.nix ]; nixpkgs = { @@ -43,66 +43,22 @@ homeDirectory = "/home/jet"; }; - xresources.properties = { - "Xcursor.size" = 16; - "Xft.dpi" = 200; - }; - + # Add stuff for your user as you see fit: + programs.neovim.enable = true; home.packages = with pkgs; [ + steam neofetch - - # archives zip - xz unzip - - # utils - ripgrep # recursively searches directories for a regex pattern - eza # A modern replacement for ‘ls’ - fzf # A command-line fuzzy finder - - # misc - cowsay - file - which + eza tree + which + file + btop + powertop ]; - # basic configuration of git, please change to your own - programs.git = { - enable = true; - userName = "Jet Pham"; - userEmail = "55770902+jetpham@users.noreply.github.com"; - }; - - programs.neovim = { - enable = true; - defaultEditor = true; - }; - - # starship - an customizable prompt for any shell - programs.starship = { - enable = true; - enableNushellIntegration = true; - # custom settings - settings = { - add_newline = false; - aws.disabled = true; - gcloud.disabled = true; - line_break.disabled = true; - }; - }; - - # alacritty - a cross-platform, GPU-accelerated terminal emulator - programs.kitty = { - enable = true; - }; - - programs.nushell = { - enable = true; - }; - -# Enable home-manager and git + # Enable home-manager and git programs.home-manager.enable = true; programs.git.enable = true; diff --git a/home-manager/neovim-flake b/home-manager/neovim-flake new file mode 160000 index 0000000..7bcc215 --- /dev/null +++ b/home-manager/neovim-flake @@ -0,0 +1 @@ +Subproject commit 7bcc215d38226892849411721cfbc096fd7e4d2d diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 05353eb..36f6a96 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -1,30 +1,80 @@ -# Edit this configuration file to define what should be installed on -# your system. Help is available in the configuration.nix(5) man page -# and in the NixOS manual (accessible by running ‘nixos-help’). - -{ config, pkgs, ... }: - +# This is your system's configuration file. +# Use this to configure your system environment (it replaces /etc/nixos/configuration.nix) { - imports = - [ # Include the results of the hardware scan. - ./hardware-configuration.nix - ]; + inputs, + lib, + config, + pkgs, + ... +}: { + # You can import other NixOS modules here + imports = [ + # If you want to use modules from other flakes (such as nixos-hardware): + # inputs.hardware.nixosModules.common-cpu-amd + # inputs.hardware.nixosModules.common-ssd + inputs.hardware.nixosModules.lenovo-thinkpad-x1-6th-gen - # Bootloader. + # You can also split up your configuration and import pieces of it here: + # ./users.nix + + # Import your generated (nixos-generate-config) hardware configuration + ./hardware-configuration.nix + ]; + + nixpkgs = { + # You can add overlays here + overlays = [ + # If you want to use overlays exported from other flakes: + # neovim-nightly-overlay.overlays.default + + # Or define it inline, for example: + # (final: prev: { + # hi = final.hello.overrideAttrs (oldAttrs: { + # patches = [ ./change-hello-to-hi.patch ]; + # }); + # }) + ]; + # Configure your nixpkgs instance + config = { + # Disable if you don't want unfree packages + allowUnfree = true; + }; + }; + + # This will add each flake input as a registry + # To make nix3 commands consistent with your flake + nix.registry = (lib.mapAttrs (_: flake: {inherit flake;})) ((lib.filterAttrs (_: lib.isType "flake")) inputs); + + # This will additionally add your inputs to the system's legacy channels + # Making legacy nix commands consistent as well, awesome! + nix.nixPath = ["/etc/nix/path"]; + environment.etc = + lib.mapAttrs' + (name: value: { + name = "nix/path/${name}"; + value.source = value.flake; + }) + config.nix.registry; + + nix.settings = { + # Enable flakes and new 'nix' command + experimental-features = "nix-command flakes"; + # Deduplicate and optimize nix store + auto-optimise-store = true; + }; + + # FIXME: Add the rest of your current configuration + + networking.hostName = "laptop"; + networking.networkmanager.enable = true; + + hardware.bluetooth.enable = true; # enables support for Bluetooth + + # TODO: This is just an example, be sure to use whatever bootloader you prefer boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; - networking.hostName = "laptop"; # Define your hostname. - # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. - - # Configure network proxy if necessary - # networking.proxy.default = "http://user:password@proxy:port/"; - # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; - - # Enable networking - networking.networkmanager.enable = true; - - # Set your time zone. + # Set your time zone. time.timeZone = "America/Los_Angeles"; # Select internationalisation properties. @@ -55,12 +105,7 @@ variant = ""; }; - # Enable CUPS to print documents. - services.printing.enable = true; - - hardware.bluetooth.enable = true; - - # Enable sound with pipewire. + # Enable sound with pipewire. sound.enable = true; hardware.pulseaudio.enable = false; security.rtkit.enable = true; @@ -77,26 +122,22 @@ #media-session.enable = true; }; - # Enable touchpad support (enabled default in most desktopManager). - # services.xserver.libinput.enable = true; - # Define a user account. Don't forget to set a password with ‘passwd’. - users.users.jet = { - isNormalUser = true; - description = "Jet Pham"; - extraGroups = [ "networkmanager" "wheel" ]; + # TODO: Configure your system-wide user settings (groups, etc), add more users as needed. + users.users = { + jet = { + isNormalUser = true; + openssh.authorizedKeys.keys = [ + # TODO: Add your SSH public key(s) here, if you plan on using SSH to connect + ]; + # TODO: Be sure to add any other groups you need (such as networkmanager, audio, docker, etc) + extraGroups = ["wheel" "networkmanager"]; packages = with pkgs; [ firefox # thunderbird ]; + }; }; - - # Allow unfree packages - nixpkgs.config.allowUnfree = true; - - # List packages installed in system profile. To search, run: - # $ nix search wget - nix.settings.experimental-features = [ "nix-command" "flakes" ]; environment.systemPackages = with pkgs; [ # vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. # wget @@ -107,32 +148,18 @@ ]; environment.variables.EDITOR = "vim"; + # This setups a SSH server. Very important if you're setting up a headless system. + # Feel free to remove if you don't need it. + services.openssh = { + enable = true; + settings = { + # Forbid root login through SSH. + PermitRootLogin = "no"; + # Use keys only. Remove if you want to SSH using password (not recommended) + PasswordAuthentication = false; + }; + }; - # Some programs need SUID wrappers, can be configured further or are - # started in user sessions. - # programs.mtr.enable = true; - # programs.gnupg.agent = { - # enable = true; - # enableSSHSupport = true; - # }; - - # List services that you want to enable: - - # Enable the OpenSSH daemon. - # services.openssh.enable = true; - - # Open ports in the firewall. - # networking.firewall.allowedTCPPorts = [ ... ]; - # networking.firewall.allowedUDPPorts = [ ... ]; - # Or disable the firewall altogether. - # networking.firewall.enable = false; - - # This value determines the NixOS release from which the default - # settings for stateful data, like file locations and database versions - # on your system were taken. It‘s perfectly fine and recommended to leave - # this value at the release version of the first install of this system. - # Before changing this value read the documentation for this option - # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). - system.stateVersion = "23.11"; # Did you read the comment? - + # https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion + system.stateVersion = "23.05"; } diff --git a/nixos/hardware-configuration.nix b/nixos/hardware-configuration.nix index 3fb2b5d..dd00939 100644 --- a/nixos/hardware-configuration.nix +++ b/nixos/hardware-configuration.nix @@ -1,40 +1,10 @@ -# 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, ... }: - +# This is just an example, you should generate yours with nixos-generate-config and put it in here. { - imports = - [ (modulesPath + "/installer/scan/not-detected.nix") - ]; + fileSystems."/" = { + device = "/dev/sda1"; + fsType = "ext4"; + }; - boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = - { device = "/dev/disk/by-uuid/ecfaab5f-dc2e-4bf0-a4cc-9a873de92c6f"; - fsType = "ext4"; - }; - - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/5426-5447"; - fsType = "vfat"; - }; - - swapDevices = - [ { device = "/dev/disk/by-uuid/db16204a-f762-4252-a7bb-1ff4f333fc17"; } - ]; - - # 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.enp0s31f6.useDHCP = lib.mkDefault true; - # networking.interfaces.wlp2s0.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + # Set your system kind (needed for flakes) + nixpkgs.hostPlatform = "x86_64-linux"; } diff --git a/q b/q deleted file mode 100644 index 02a7d54..0000000 --- a/q +++ /dev/null @@ -1,112 +0,0 @@ -commit 72e17f8ca37c1a0c711c6114cfc3cd06c59e29f9 (HEAD -> main, origin/main) -Author: Jet Pham <55770902+jetpham@users.noreply.github.com> -Date: Thu Mar 14 19:09:41 2024 -0700 - - fixing warning - -diff --git a/flake.lock b/flake.lock -index 177441e..d671653 100644 ---- a/flake.lock -+++ b/flake.lock -@@ -7,32 +7,32 @@ - ] - }, - "locked": { -- "lastModified": 1685599623, -- "narHash": "sha256-Tob4CMOVHue0D3RzguDBCtUmX5ji2PsdbQDbIOIKvsc=", -+ "lastModified": 1706981411, -+ "narHash": "sha256-cLbLPTL1CDmETVh4p0nQtvoF+FSEjsnJTFpTxhXywhQ=", - "owner": "nix-community", - "repo": "home-manager", -- "rev": "93db05480c0c0f30382d3e80779e8386dcb4f9dd", -+ "rev": "652fda4ca6dafeb090943422c34ae9145787af37", - "type": "github" - }, - "original": { - "owner": "nix-community", -- "ref": "release-23.05", -+ "ref": "release-23.11", - "repo": "home-manager", - "type": "github" - } - }, - "nixpkgs": { - "locked": { -- "lastModified": 1686431482, -- "narHash": "sha256-oPVQ/0YP7yC2ztNsxvWLrV+f0NQ2QAwxbrZ+bgGydEM=", -+ "lastModified": 1709703039, -+ "narHash": "sha256-6hqgQ8OK6gsMu1VtcGKBxKQInRLHtzulDo9Z5jxHEFY=", - "owner": "nixos", - "repo": "nixpkgs", -- "rev": "d3bb401dcfc5a46ce51cdfb5762e70cc75d082d2", -+ "rev": "9df3e30ce24fd28c7b3e2de0d986769db5d6225d", - "type": "github" - }, - "original": { - "owner": "nixos", -- "ref": "nixos-23.05", -+ "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } -diff --git a/flake.nix b/flake.nix -index d4eb038..f2544b4 100644 ---- a/flake.nix -+++ b/flake.nix -@@ -3,10 +3,10 @@ -  - inputs = { - # Nixpkgs -- nixpkgs.url = "github:nixos/nixpkgs/nixos-23.05"; -+ nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; -  - # Home manager -- home-manager.url = "github:nix-community/home-manager/release-23.05"; -+ home-manager.url = "github:nix-community/home-manager/release-23.11"; - home-manager.inputs.nixpkgs.follows = "nixpkgs"; -  - # TODO: Add any other flake you might need -diff --git a/home-manager/home.nix b/home-manager/home.nix -index 8251f04..0e13b11 100644 ---- a/home-manager/home.nix -+++ b/home-manager/home.nix -@@ -45,7 +45,7 @@ -  - xresources.properties = { - "Xcursor.size" = 16; -- "Xft.dpi" = 172; -+ "Xft.dpi" = 200; - }; -  - home.packages = with pkgs; [ -@@ -111,5 +111,4 @@ -  - # https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion - home.stateVersion = "23.05"; -- programs.home-manager.enable = true; - } -diff --git a/nixos/configuration.nix b/nixos/configuration.nix -index 2e109a0..dc9aa32 100644 ---- a/nixos/configuration.nix -+++ b/nixos/configuration.nix -@@ -14,7 +14,7 @@ - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; -  -- networking.hostName = "nixos"; # Define your hostname. -+ networking.hostName = "laptop"; # Define your hostname. - # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. -  - # Configure network proxy if necessary -@@ -50,9 +50,9 @@ - services.xserver.desktopManager.plasma5.enable = true; -  - # Configure keymap in X11 -- services.xserver = { -+ services.xserver.xkb = { - layout = "us"; -- xkbVariant = ""; -+ variant = ""; - }; -  - # Enable CUPS to print documents. From 3ee6761b45a0ff376e31411a9131a78691d2f059 Mon Sep 17 00:00:00 2001 From: Jet Pham <55770902+jetpham@users.noreply.github.com> Date: Fri, 15 Mar 2024 22:50:47 -0700 Subject: [PATCH 007/211] tao is a magician --- flake.lock | 38 ++++--- flake.nix | 50 ++++------ home-manager/home.nix | 70 ------------- home-manager/neovim-flake | 1 - home.nix | 15 +++ laptop.nix | 123 +++++++++++++++++++++++ nixos/configuration.nix | 165 ------------------------------- nixos/hardware-configuration.nix | 10 -- 8 files changed, 175 insertions(+), 297 deletions(-) delete mode 100644 home-manager/home.nix delete mode 160000 home-manager/neovim-flake create mode 100644 home.nix create mode 100644 laptop.nix delete mode 100644 nixos/configuration.nix delete mode 100644 nixos/hardware-configuration.nix diff --git a/flake.lock b/flake.lock index 5354826..3708ed1 100644 --- a/flake.lock +++ b/flake.lock @@ -1,20 +1,5 @@ { "nodes": { - "hardware": { - "locked": { - "lastModified": 1710123225, - "narHash": "sha256-j3oWlxRZxB7cFsgEntpH3rosjFHRkAo/dhX9H3OfxtY=", - "owner": "nixos", - "repo": "nixos-hardware", - "rev": "ad2fd7b978d5e462048729a6c635c45d3d33c9ba", - "type": "github" - }, - "original": { - "owner": "nixos", - "repo": "nixos-hardware", - "type": "github" - } - }, "home-manager": { "inputs": { "nixpkgs": [ @@ -35,26 +20,39 @@ "type": "github" } }, + "nixos-hardware": { + "locked": { + "lastModified": 1710123225, + "narHash": "sha256-j3oWlxRZxB7cFsgEntpH3rosjFHRkAo/dhX9H3OfxtY=", + "owner": "NixOS", + "repo": "nixos-hardware", + "rev": "ad2fd7b978d5e462048729a6c635c45d3d33c9ba", + "type": "github" + }, + "original": { + "id": "nixos-hardware", + "type": "indirect" + } + }, "nixpkgs": { "locked": { "lastModified": 1710451336, "narHash": "sha256-pP86Pcfu3BrAvRO7R64x7hs+GaQrjFes+mEPowCfkxY=", - "owner": "nixos", + "owner": "NixOS", "repo": "nixpkgs", "rev": "d691274a972b3165335d261cc4671335f5c67de9", "type": "github" }, "original": { - "owner": "nixos", + "id": "nixpkgs", "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" + "type": "indirect" } }, "root": { "inputs": { - "hardware": "hardware", "home-manager": "home-manager", + "nixos-hardware": "nixos-hardware", "nixpkgs": "nixpkgs" } } diff --git a/flake.nix b/flake.nix index b5e949e..e28ec78 100644 --- a/flake.nix +++ b/flake.nix @@ -1,47 +1,35 @@ { - description = "Jet's nix config"; + description = "Jet's Nix Config"; inputs = { - # Nixpkgs - nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + nixpkgs.url = "nixpkgs/nixos-unstable"; + nixos-hardware.url = "nixos-hardware"; + # nixos-raspberrypi.url = "github:ramblurr/nixos-raspberrypi"; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; - # Home manager - home-manager.url = "github:nix-community/home-manager"; - home-manager.inputs.nixpkgs.follows = "nixpkgs"; - - hardware.url = "github:nixos/nixos-hardware"; - - # Shameless plug: looking for a way to nixify your themes and make - # everything match nicely? Try nix-colors! - # nix-colors.url = "github:misterio77/nix-colors"; + nixConfig = { }; outputs = { self, nixpkgs, + nixos-hardware, home-manager, ... - } @ inputs: let - inherit (self) outputs; - in { - # NixOS configuration entrypoint - # Available through 'nixos-rebuild --flake .#your-hostname' + } @ inputs: { nixosConfigurations = { laptop = nixpkgs.lib.nixosSystem { - specialArgs = {inherit inputs outputs;}; - # > Our main nixos configuration file < - modules = [./nixos/configuration.nix]; - }; - }; - - # Standalone home-manager configuration entrypoint - # Available through 'home-manager --flake .#your-username@your-hostname' - homeConfigurations = { - "jet@laptop" = home-manager.lib.homeManagerConfiguration { - pkgs = nixpkgs.legacyPackages.x86_64-linux; # Home-manager requires 'pkgs' instance - extraSpecialArgs = {inherit inputs outputs;}; - # > Our main home-manager configuration file < - modules = [./home-manager/home.nix]; + system = "x86_64-linux"; + specialArgs = {inherit inputs;}; + modules = [ + home-manager.nixosModules.home-manager + nixos-hardware.nixosModules.lenovo-thinkpad-x1-6th-gen + ./laptop.nix + ]; }; }; }; diff --git a/home-manager/home.nix b/home-manager/home.nix deleted file mode 100644 index 823af19..0000000 --- a/home-manager/home.nix +++ /dev/null @@ -1,70 +0,0 @@ -# This is your home-manager configuration file -# Use this to configure your home environment (it replaces ~/.config/nixpkgs/home.nix) -{ - inputs, - lib, - config, - pkgs, - ... -}: { - # You can import other home-manager modules here - imports = [ - # If you want to use home-manager modules from other flakes (such as nix-colors): - # inputs.nix-colors.homeManagerModule - - # You can also split up your configuration and import pieces of it here: - ./neovim-flake/flake.nix - ]; - - nixpkgs = { - # You can add overlays here - overlays = [ - # If you want to use overlays exported from other flakes: - # neovim-nightly-overlay.overlays.default - - # Or define it inline, for example: - # (final: prev: { - # hi = final.hello.overrideAttrs (oldAttrs: { - # patches = [ ./change-hello-to-hi.patch ]; - # }); - # }) - ]; - # Configure your nixpkgs instance - config = { - # Disable if you don't want unfree packages - allowUnfree = true; - # Workaround for https://github.com/nix-community/home-manager/issues/2942 - allowUnfreePredicate = _: true; - }; - }; - - home = { - username = "jet"; - homeDirectory = "/home/jet"; - }; - - # Add stuff for your user as you see fit: - programs.neovim.enable = true; - home.packages = with pkgs; [ - steam - neofetch - zip - unzip - eza - tree - which - file - btop - powertop - ]; - - # Enable home-manager and git - programs.home-manager.enable = true; - programs.git.enable = true; - - # Nicely reload system units when changing configs - systemd.user.startServices = "sd-switch"; - - # https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion - home.stateVersion = "23.05"; -} diff --git a/home-manager/neovim-flake b/home-manager/neovim-flake deleted file mode 160000 index 7bcc215..0000000 --- a/home-manager/neovim-flake +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7bcc215d38226892849411721cfbc096fd7e4d2d diff --git a/home.nix b/home.nix new file mode 100644 index 0000000..8da0832 --- /dev/null +++ b/home.nix @@ -0,0 +1,15 @@ +{ + # pkgs, + # inputs, + ... +}: { + programs = { + neovim = { + enable = true; + }; + }; + + home.username = "jet"; + home.homeDirectory = "/home/jet"; + home.stateVersion = "23.11"; +} diff --git a/laptop.nix b/laptop.nix new file mode 100644 index 0000000..bde01e0 --- /dev/null +++ b/laptop.nix @@ -0,0 +1,123 @@ +{ + inputs, + pkgs, + lib, + config, + modulesPath, + ... +}: { + environment.systemPackages = with pkgs; [ + # c + gcc + gdb + gnumake + clang + clang-tools + + # nix + nil + alejandra + + # else + bat + wget + firefox + git + tree + neovim + nushell + kitty + ]; + + hardware.bluetooth.enable = true; + + networking.networkmanager.enable = true; + services.automatic-timezoned.enable = true; + services.xserver.enable = true; + services.desktopManager.plasma6.enable = true; + services.xserver.displayManager.sddm.enable = true; + services.xserver.xkb.layout = "us"; + + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + wireplumber.enable = true; + }; + + environment.variables = { + EDITOR = "nvim"; + VISUAL = "nvim"; + PAGER = "bat"; + }; + environment.sessionVariables = { + EDITOR = "nvim"; + VISUAL = "nvim"; + PAGER = "bat"; + }; + + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + boot.initrd.availableKernelModules = ["xhci_pci" "nvme" "usb_storage" "sd_mod"]; + # boot.initrd.kernelModules = []; + boot.kernelModules = ["kvm-intel"]; + # boot.extraModulePackages = []; + + fileSystems."/" = { + device = "/dev/disk/by-uuid/ecfaab5f-dc2e-4bf0-a4cc-9a873de92c6f"; + fsType = "ext4"; + }; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/5426-5447"; + fsType = "vfat"; + }; + + swapDevices = [ + {device = "/dev/disk/by-uuid/db16204a-f762-4252-a7bb-1ff4f333fc17";} + ]; + + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + + fonts.packages = with pkgs; [ + noto-fonts-cjk + noto-fonts-color-emoji + ]; + + 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"; + }; + + users.users.jet = { + isNormalUser = true; + extraGroups = ["wheel"]; + shell = pkgs.nushell; + }; + home-manager.useGlobalPkgs = true; + home-manager.users.jet = import ./home.nix {inherit inputs pkgs;}; + + nix.settings = { + experimental-features = "nix-command flakes"; + auto-optimise-store = true; + trusted-users = ["root" "@wheel"]; + }; + nixpkgs.config = {allowUnfree = true;}; + + networking.hostName = "laptop"; + + imports = [(modulesPath + "/installer/scan/not-detected.nix")]; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + system.stateVersion = "23.05"; +} diff --git a/nixos/configuration.nix b/nixos/configuration.nix deleted file mode 100644 index 36f6a96..0000000 --- a/nixos/configuration.nix +++ /dev/null @@ -1,165 +0,0 @@ -# This is your system's configuration file. -# Use this to configure your system environment (it replaces /etc/nixos/configuration.nix) -{ - inputs, - lib, - config, - pkgs, - ... -}: { - # You can import other NixOS modules here - imports = [ - # If you want to use modules from other flakes (such as nixos-hardware): - # inputs.hardware.nixosModules.common-cpu-amd - # inputs.hardware.nixosModules.common-ssd - inputs.hardware.nixosModules.lenovo-thinkpad-x1-6th-gen - - # You can also split up your configuration and import pieces of it here: - # ./users.nix - - # Import your generated (nixos-generate-config) hardware configuration - ./hardware-configuration.nix - ]; - - nixpkgs = { - # You can add overlays here - overlays = [ - # If you want to use overlays exported from other flakes: - # neovim-nightly-overlay.overlays.default - - # Or define it inline, for example: - # (final: prev: { - # hi = final.hello.overrideAttrs (oldAttrs: { - # patches = [ ./change-hello-to-hi.patch ]; - # }); - # }) - ]; - # Configure your nixpkgs instance - config = { - # Disable if you don't want unfree packages - allowUnfree = true; - }; - }; - - # This will add each flake input as a registry - # To make nix3 commands consistent with your flake - nix.registry = (lib.mapAttrs (_: flake: {inherit flake;})) ((lib.filterAttrs (_: lib.isType "flake")) inputs); - - # This will additionally add your inputs to the system's legacy channels - # Making legacy nix commands consistent as well, awesome! - nix.nixPath = ["/etc/nix/path"]; - environment.etc = - lib.mapAttrs' - (name: value: { - name = "nix/path/${name}"; - value.source = value.flake; - }) - config.nix.registry; - - nix.settings = { - # Enable flakes and new 'nix' command - experimental-features = "nix-command flakes"; - # Deduplicate and optimize nix store - auto-optimise-store = true; - }; - - # FIXME: Add the rest of your current configuration - - networking.hostName = "laptop"; - networking.networkmanager.enable = true; - - hardware.bluetooth.enable = true; # enables support for Bluetooth - - # TODO: This is just an example, be sure to use whatever bootloader you prefer - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - - # Set your time zone. - time.timeZone = "America/Los_Angeles"; - - # 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 the X11 windowing system. - services.xserver.enable = true; - - # Enable the KDE Plasma Desktop Environment. - services.xserver.displayManager.sddm.enable = true; - services.xserver.desktopManager.plasma5.enable = true; - - # Configure keymap in X11 - services.xserver.xkb = { - layout = "us"; - variant = ""; - }; - - # Enable sound with pipewire. - sound.enable = true; - hardware.pulseaudio.enable = false; - 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; - - # use the example session manager (no others are packaged yet so this is enabled by default, - # no need to redefine it in your config for now) - #media-session.enable = true; - }; - - - # TODO: Configure your system-wide user settings (groups, etc), add more users as needed. - users.users = { - jet = { - isNormalUser = true; - openssh.authorizedKeys.keys = [ - # TODO: Add your SSH public key(s) here, if you plan on using SSH to connect - ]; - # TODO: Be sure to add any other groups you need (such as networkmanager, audio, docker, etc) - extraGroups = ["wheel" "networkmanager"]; - packages = with pkgs; [ - firefox - # thunderbird - ]; - }; - }; - environment.systemPackages = with pkgs; [ - # vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. - # wget - git - vim - wget - curl - ]; - - environment.variables.EDITOR = "vim"; - # This setups a SSH server. Very important if you're setting up a headless system. - # Feel free to remove if you don't need it. - services.openssh = { - enable = true; - settings = { - # Forbid root login through SSH. - PermitRootLogin = "no"; - # Use keys only. Remove if you want to SSH using password (not recommended) - PasswordAuthentication = false; - }; - }; - - # https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion - system.stateVersion = "23.05"; -} diff --git a/nixos/hardware-configuration.nix b/nixos/hardware-configuration.nix deleted file mode 100644 index dd00939..0000000 --- a/nixos/hardware-configuration.nix +++ /dev/null @@ -1,10 +0,0 @@ -# This is just an example, you should generate yours with nixos-generate-config and put it in here. -{ - fileSystems."/" = { - device = "/dev/sda1"; - fsType = "ext4"; - }; - - # Set your system kind (needed for flakes) - nixpkgs.hostPlatform = "x86_64-linux"; -} From cac7203033ef77aaab1fba4f0fed938ef293cba1 Mon Sep 17 00:00:00 2001 From: Jet Pham <55770902+jetpham@users.noreply.github.com> Date: Fri, 22 Mar 2024 23:35:56 -0700 Subject: [PATCH 008/211] hell n back --- README.md | 11 + flake.lock | 23 +- flake.nix | 79 ++- home.nix | 15 - hosts/desktop/hardware-configuration.nix | 31 + hosts/desktop/user.nix | 25 + hosts/laptop/hardware-configuration.nix | 40 ++ hosts/laptop/user.nix | 24 + laptop.nix | 123 ---- lib/default.nix | 3 + lib/mkSystem.nix | 11 + modules/default.nix | 24 + modules/direnv/default.nix | 14 + modules/dunst/default.nix | 42 ++ modules/eww/default.nix | 50 ++ modules/eww/eww.scss | 291 +++++++++ modules/eww/eww.yuck | 295 +++++++++ modules/eww/scripts/battery.sh | 38 ++ modules/eww/scripts/brightness.sh | 13 + modules/eww/scripts/volume.sh | 18 + modules/eww/scripts/wifi.sh | 12 + modules/eww/scripts/workspaces.lua | 30 + modules/eww/scripts/workspaces.sh | 9 + modules/firefox/default.nix | 98 +++ modules/firefox/userChrome.css | 69 +++ modules/git/default.nix | 21 + modules/hyprland/default.nix | 15 + modules/hyprland/hyprland.conf | 91 +++ modules/kitty/default.nix | 14 + modules/kitty/kitty.conf | 243 ++++++++ modules/laptopHardware/default.nix | 11 + modules/nushell/config.nu | 730 +++++++++++++++++++++++ modules/nushell/default.nix | 16 + modules/nushell/env.nu | 82 +++ modules/nushell/extra.nu | 16 + modules/nvim/default.nix | 97 +++ modules/nvim/init.lua | 83 +++ modules/packages/default.nix | 34 ++ modules/packages/maintenance | 8 + modules/system/configuration.nix | 160 +++++ modules/template.nix | 10 + modules/wofi/default.nix | 11 + modules/wofi/wofi.css | 35 ++ modules/xdg/default.nix | 21 + modules/zsh/default.nix | 79 +++ 45 files changed, 2988 insertions(+), 177 deletions(-) create mode 100644 README.md delete mode 100644 home.nix create mode 100644 hosts/desktop/hardware-configuration.nix create mode 100644 hosts/desktop/user.nix create mode 100644 hosts/laptop/hardware-configuration.nix create mode 100644 hosts/laptop/user.nix delete mode 100644 laptop.nix create mode 100644 lib/default.nix create mode 100644 lib/mkSystem.nix create mode 100644 modules/default.nix create mode 100644 modules/direnv/default.nix create mode 100644 modules/dunst/default.nix create mode 100644 modules/eww/default.nix create mode 100644 modules/eww/eww.scss create mode 100644 modules/eww/eww.yuck create mode 100755 modules/eww/scripts/battery.sh create mode 100755 modules/eww/scripts/brightness.sh create mode 100755 modules/eww/scripts/volume.sh create mode 100755 modules/eww/scripts/wifi.sh create mode 100755 modules/eww/scripts/workspaces.lua create mode 100755 modules/eww/scripts/workspaces.sh create mode 100644 modules/firefox/default.nix create mode 100644 modules/firefox/userChrome.css create mode 100644 modules/git/default.nix create mode 100644 modules/hyprland/default.nix create mode 100644 modules/hyprland/hyprland.conf create mode 100644 modules/kitty/default.nix create mode 100644 modules/kitty/kitty.conf create mode 100644 modules/laptopHardware/default.nix create mode 100644 modules/nushell/config.nu create mode 100644 modules/nushell/default.nix create mode 100644 modules/nushell/env.nu create mode 100644 modules/nushell/extra.nu create mode 100644 modules/nvim/default.nix create mode 100644 modules/nvim/init.lua create mode 100644 modules/packages/default.nix create mode 100755 modules/packages/maintenance create mode 100755 modules/system/configuration.nix create mode 100644 modules/template.nix create mode 100644 modules/wofi/default.nix create mode 100644 modules/wofi/wofi.css create mode 100644 modules/xdg/default.nix create mode 100755 modules/zsh/default.nix diff --git a/README.md b/README.md new file mode 100644 index 0000000..b1e3b8d --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +# ❄️ NixOS dotfiles + +*My configuration files for NixOS. Feel free to look around and copy!* + +# Special thanks to: +- [Sioodmy's dotfiles](https://github.com/sioodmy/dotfiles) +- [Syndrizzle's dotfiles](https://github.com/syndrizzle/hotfiles) +- [Javacafe01's dotfiles](https://github.com/javacafe01/dotfiles) +- [Siduck76's NvChad](https://github.com/siduck76/nvchad/) +- [NixOS Manual](https://nixos.org/manual/nixos/stable/) +- [Epsyle's NixOS Dotfiles](https://github.com/epsyle/snowflake/) \ No newline at end of file diff --git a/flake.lock b/flake.lock index 3708ed1..78eb6ca 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1710532761, - "narHash": "sha256-SUXGZNrXX05YA9G6EmgupxhOr3swI1gcxLUeDMUhrEY=", + "lastModified": 1711133180, + "narHash": "sha256-WJOahf+6115+GMl3wUfURu8fszuNeJLv9qAWFQl3Vmo=", "owner": "nix-community", "repo": "home-manager", - "rev": "206f457fffdb9a73596a4cb2211a471bd305243d", + "rev": "1c2c5e4cabba4c43504ef0f8cc3f3dfa284e2dbb", "type": "github" }, "original": { @@ -22,25 +22,26 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1710123225, - "narHash": "sha256-j3oWlxRZxB7cFsgEntpH3rosjFHRkAo/dhX9H3OfxtY=", + "lastModified": 1710783728, + "narHash": "sha256-eIsfu3c9JUBgm3cURSKTXLEI9Dlk1azo+MWKZVqrmkc=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "ad2fd7b978d5e462048729a6c635c45d3d33c9ba", + "rev": "1e679b9a9970780cd5d4dfe755a74a8f96d33388", "type": "github" }, "original": { - "id": "nixos-hardware", - "type": "indirect" + "owner": "NixOS", + "repo": "nixos-hardware", + "type": "github" } }, "nixpkgs": { "locked": { - "lastModified": 1710451336, - "narHash": "sha256-pP86Pcfu3BrAvRO7R64x7hs+GaQrjFes+mEPowCfkxY=", + "lastModified": 1711001935, + "narHash": "sha256-URtGpHue7HHZK0mrHnSf8wJ6OmMKYSsoLmJybrOLFSQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d691274a972b3165335d261cc4671335f5c67de9", + "rev": "20f77aa09916374aa3141cbc605c955626762c9a", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index e28ec78..ba885f1 100644 --- a/flake.nix +++ b/flake.nix @@ -2,35 +2,58 @@ description = "Jet's Nix Config"; inputs = { - nixpkgs.url = "nixpkgs/nixos-unstable"; - nixos-hardware.url = "nixos-hardware"; - # nixos-raspberrypi.url = "github:ramblurr/nixos-raspberrypi"; - home-manager = { - url = "github:nix-community/home-manager"; - inputs.nixpkgs.follows = "nixpkgs"; - }; + nixpkgs.url = "nixpkgs/nixos-unstable"; + nixos-hardware.url = "github:NixOS/nixos-hardware"; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; - nixConfig = { - }; + # All outputs for the system (configs) + outputs = { home-manager, nixpkgs, nixos-hardware, ... }@inputs: + let + system = "x86_64-linux"; #current system + pkgs = inputs.nixpkgs.legacyPackages.x86_64-linux; + lib = nixpkgs.lib; - outputs = { - self, - nixpkgs, - nixos-hardware, - home-manager, - ... - } @ inputs: { - nixosConfigurations = { - laptop = nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; - specialArgs = {inherit inputs;}; - modules = [ - home-manager.nixosModules.home-manager - nixos-hardware.nixosModules.lenovo-thinkpad-x1-6th-gen - ./laptop.nix - ]; - }; - }; - }; + # This lets us reuse the code to "create" a system + # Credits go to sioodmy on this one! + # https://github.com/sioodmy/dotfiles/blob/main/flake.nix + mkSystem = pkgs: system: hostname: + let + hardwareConfig = { + "laptop" = "${inputs.nixos-hardware}.nixosModules.lenovo-thinkpad-x1-6th-gen"; + # Add other hostnames and their respective hardware configurations here + }; + in + pkgs.lib.nixosSystem { + inherit system; + modules = [ + { networking.hostName = hostname; } + ./modules/system/configuration.nix + (./. + "/hosts/${hostname}/hardware-configuration.nix") + (hardwareConfig.${hostname} or (lib.mkForce {})) # Import hardware configuration if exists for hostname + home-manager.nixosModules.home-manager + { + home-manager = { + useUserPackages = true; + useGlobalPkgs = true; + extraSpecialArgs = { inherit inputs; }; + users.jet = (./. + "/hosts/${hostname}/user.nix"); + }; + } + ]; + specialArgs = { inherit inputs; }; + }; + + + in { + nixosConfigurations = { + # Now, defining a new system is can be done in one line + # Architecture Hostname + laptop = mkSystem inputs.nixpkgs "x86_64-linux" "laptop"; + #desktop = mkSystem inputs.nixpkgs "x86_64-linux" "desktop"; + }; + }; } diff --git a/home.nix b/home.nix deleted file mode 100644 index 8da0832..0000000 --- a/home.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ - # pkgs, - # inputs, - ... -}: { - programs = { - neovim = { - enable = true; - }; - }; - - home.username = "jet"; - home.homeDirectory = "/home/jet"; - home.stateVersion = "23.11"; -} diff --git a/hosts/desktop/hardware-configuration.nix b/hosts/desktop/hardware-configuration.nix new file mode 100644 index 0000000..6c7a573 --- /dev/null +++ b/hosts/desktop/hardware-configuration.nix @@ -0,0 +1,31 @@ +# USE YOUR OWN +{ config, lib, pkgs, modulesPath, ... }: +{ + imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; + + boot = { + initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; + initrd.kernelModules = [ "amdgpu" ]; + kernelModules = [ "wireguard" "kvm-amd" "msr" ]; + extraModulePackages = [ ]; + }; + + hardware.opengl.extraPackages = with pkgs; [ + rocm-opencl-icd + rocm-opencl-runtime + ]; + + fileSystems."/" = { + device = "/dev/disk/by-uuid/bd1e247e-9db1-4871-ae5a-f1d9dd0d09fb"; + fsType = "ext4"; + }; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/62D7-547D"; + fsType = "vfat"; + }; + + swapDevices = [ { device = "/dev/disk/by-uuid/e8eac985-dcd4-4f52-8681-751e13b37e28"; } ]; + + powerManagement.cpuFreqGovernor = lib.mkDefault "performance"; +} diff --git a/hosts/desktop/user.nix b/hosts/desktop/user.nix new file mode 100644 index 0000000..8db5f18 --- /dev/null +++ b/hosts/desktop/user.nix @@ -0,0 +1,25 @@ +{ config, lib, inputs, ...}: + +{ + imports = [ ../../modules/default.nix ]; + config.modules = { + # gui + firefox.enable = true; + foot.enable = true; + eww.enable = true; + dunst.enable = true; + hyprland.enable = true; + wofi.enable = true; + + # cli + nvim.enable = true; + zsh.enable = true; + git.enable = true; + gpg.enable = true; + direnv.enable = true; + + # system + xdg.enable = true; + packages.enable = true; + }; +} diff --git a/hosts/laptop/hardware-configuration.nix b/hosts/laptop/hardware-configuration.nix new file mode 100644 index 0000000..0b89762 --- /dev/null +++ b/hosts/laptop/hardware-configuration.nix @@ -0,0 +1,40 @@ +# 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 = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/ad656dd1-ef88-4930-b8dd-f61765bdc067"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/16AA-5446"; + fsType = "vfat"; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/cc53c40a-4c06-4fcf-844e-8e55147fc2ae"; } + ]; + + # 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.enp0s31f6.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp2s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/hosts/laptop/user.nix b/hosts/laptop/user.nix new file mode 100644 index 0000000..82c2e9c --- /dev/null +++ b/hosts/laptop/user.nix @@ -0,0 +1,24 @@ +{ config, lib, inputs, ...}: + +{ + imports = [ ../../modules/default.nix ]; + config.modules = { + # gui + firefox.enable = true; + kitty.enable = true; + eww.enable = true; + dunst.enable = true; + hyprland.enable = true; + wofi.enable = true; + + # cli + nvim.enable = true; + git.enable = true; + nushell.enable = true; + direnv.enable = true; + + # system + xdg.enable = true; + packages.enable = true; + }; +} diff --git a/laptop.nix b/laptop.nix deleted file mode 100644 index bde01e0..0000000 --- a/laptop.nix +++ /dev/null @@ -1,123 +0,0 @@ -{ - inputs, - pkgs, - lib, - config, - modulesPath, - ... -}: { - environment.systemPackages = with pkgs; [ - # c - gcc - gdb - gnumake - clang - clang-tools - - # nix - nil - alejandra - - # else - bat - wget - firefox - git - tree - neovim - nushell - kitty - ]; - - hardware.bluetooth.enable = true; - - networking.networkmanager.enable = true; - services.automatic-timezoned.enable = true; - services.xserver.enable = true; - services.desktopManager.plasma6.enable = true; - services.xserver.displayManager.sddm.enable = true; - services.xserver.xkb.layout = "us"; - - security.rtkit.enable = true; - services.pipewire = { - enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; - wireplumber.enable = true; - }; - - environment.variables = { - EDITOR = "nvim"; - VISUAL = "nvim"; - PAGER = "bat"; - }; - environment.sessionVariables = { - EDITOR = "nvim"; - VISUAL = "nvim"; - PAGER = "bat"; - }; - - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - boot.initrd.availableKernelModules = ["xhci_pci" "nvme" "usb_storage" "sd_mod"]; - # boot.initrd.kernelModules = []; - boot.kernelModules = ["kvm-intel"]; - # boot.extraModulePackages = []; - - fileSystems."/" = { - device = "/dev/disk/by-uuid/ecfaab5f-dc2e-4bf0-a4cc-9a873de92c6f"; - fsType = "ext4"; - }; - - fileSystems."/boot" = { - device = "/dev/disk/by-uuid/5426-5447"; - fsType = "vfat"; - }; - - swapDevices = [ - {device = "/dev/disk/by-uuid/db16204a-f762-4252-a7bb-1ff4f333fc17";} - ]; - - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; - - fonts.packages = with pkgs; [ - noto-fonts-cjk - noto-fonts-color-emoji - ]; - - 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"; - }; - - users.users.jet = { - isNormalUser = true; - extraGroups = ["wheel"]; - shell = pkgs.nushell; - }; - home-manager.useGlobalPkgs = true; - home-manager.users.jet = import ./home.nix {inherit inputs pkgs;}; - - nix.settings = { - experimental-features = "nix-command flakes"; - auto-optimise-store = true; - trusted-users = ["root" "@wheel"]; - }; - nixpkgs.config = {allowUnfree = true;}; - - networking.hostName = "laptop"; - - imports = [(modulesPath + "/installer/scan/not-detected.nix")]; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - system.stateVersion = "23.05"; -} diff --git a/lib/default.nix b/lib/default.nix new file mode 100644 index 0000000..c9d221d --- /dev/null +++ b/lib/default.nix @@ -0,0 +1,3 @@ +inputs: { + mkSystem = import ./mkSystem.nix inputs; +} diff --git a/lib/mkSystem.nix b/lib/mkSystem.nix new file mode 100644 index 0000000..5ae4789 --- /dev/null +++ b/lib/mkSystem.nix @@ -0,0 +1,11 @@ +{ self, ... } @ inputs: name: system: inputs.nixpkgs.lib.nixosSystem ( + { + inherit system; + specialArgs = { inherit inputs self; }; + modules = [ + "${self}/hosts/${name}/system.nix" + "${self}/hosts/${name}/user.nix" + inputs.home-manager.nixosModule + ]; + } +) diff --git a/modules/default.nix b/modules/default.nix new file mode 100644 index 0000000..4e52b9a --- /dev/null +++ b/modules/default.nix @@ -0,0 +1,24 @@ +{ inputs, pkgs, config, ... }: + +{ + home.stateVersion = "21.03"; + imports = [ + # gui + ./firefox + ./foot + ./eww + ./dunst + ./hyprland + ./wofi + + # cli + ./nvim + ./zsh + ./git + ./direnv + + # system + ./xdg + ./packages + ]; +} diff --git a/modules/direnv/default.nix b/modules/direnv/default.nix new file mode 100644 index 0000000..9db2079 --- /dev/null +++ b/modules/direnv/default.nix @@ -0,0 +1,14 @@ +{ pkgs, lib, config, ... }: + +with lib; +let cfg = config.modules.direnv; + +in { + options.modules.direnv= { enable = mkEnableOption "direnv"; }; + config = mkIf cfg.enable { + programs.direnv = { + enable = true; + nix-direnv.enable = true; + }; + }; +} diff --git a/modules/dunst/default.nix b/modules/dunst/default.nix new file mode 100644 index 0000000..1dc85ac --- /dev/null +++ b/modules/dunst/default.nix @@ -0,0 +1,42 @@ +{ pkgs, lib, config, ... }: + +with lib; +let cfg = config.modules.dunst; + +in { + options.modules.dunst = { enable = mkEnableOption "dunst"; }; + config = mkIf cfg.enable { + home.packages = with pkgs; [ + dunst + ]; + + services.dunst = { + enable = true; + settings = { + global = { + origin = "top-left"; + offset = "60x12"; + separator_height = 2; + padding = 12; + horizontal_padding = 12; + text_icon_padding = 12; + frame_width = 4; + separator_color = "frame"; + idle_threshold = 120; + font = "JetBrainsMono Nerdfont 12"; + line_height = 0; + format = "%s\n%b"; + alignment = "center"; + icon_position = "off"; + startup_notification = "false"; + corner_radius = 12; + + frame_color = "#44465c"; + background = "#303241"; + foreground = "#d9e0ee"; + timeout = 2; + }; + }; + }; + }; +} diff --git a/modules/eww/default.nix b/modules/eww/default.nix new file mode 100644 index 0000000..2eae452 --- /dev/null +++ b/modules/eww/default.nix @@ -0,0 +1,50 @@ +{ inputs, lib, config, pkgs, ... }: +with lib; +let + cfg = config.modules.eww; +in { + options.modules.eww = { enable = mkEnableOption "eww"; }; + + config = mkIf cfg.enable { + # theres no programs.eww.enable here because eww looks for files in .config + # thats why we have all the home.files + + # eww package + home.packages = with pkgs; [ + eww + pamixer + brightnessctl + (nerdfonts.override { fonts = [ "JetBrainsMono" ]; }) + ]; + + # configuration + home.file.".config/eww/eww.scss".source = ./eww.scss; + home.file.".config/eww/eww.yuck".source = ./eww.yuck; + + # scripts + home.file.".config/eww/scripts/battery.sh" = { + source = ./scripts/battery.sh; + executable = true; + }; + + home.file.".config/eww/scripts/wifi.sh" = { + source = ./scripts/wifi.sh; + executable = true; + }; + + home.file.".config/eww/scripts/brightness.sh" = { + source = ./scripts/brightness.sh; + executable = true; + }; + + home.file.".config/eww/scripts/workspaces.sh" = { + source = ./scripts/workspaces.sh; + executable = true; + }; + + home.file.".config/eww/scripts/workspaces.lua" = { + source = ./scripts/workspaces.lua; + executable = true; + }; + }; +} diff --git a/modules/eww/eww.scss b/modules/eww/eww.scss new file mode 100644 index 0000000..88f0320 --- /dev/null +++ b/modules/eww/eww.scss @@ -0,0 +1,291 @@ +$base: #44465c; +$blue: #3fc6de; +$surface0: #44465c; +$surface1: #44465c; +$text: #d9e0ee; +$overlay0: #6e738d; +$red: #ec6a88; +$peach: #efb993; +$yellow: #efb993; +$mauve: #b072d1; +$green: #3fdaa4; +$mantle: #292a37; +$crust: #2e303e; +$light-gray: #9699b7; + +* { + all: unset; //Unsets everything so you can style everything from scratch + font-family: "JetBrainsMono" +} + +.icon { + font-family: monospace; + font-size: 1.4rem; +} + + +button { + transition: background-color 200ms, color 200ms; +} + +.active { + color: $green; + font-size: 1.4rem; +} + +.inactive { + color: $base; + font-size: 1.4rem; +} + +.inactive:hover { + color: $light-gray; +} + +.bar { + background-color: $mantle; + border-left: 4px dotted $red; +} + +.dashboard { + background-color: $mantle; + padding: 1rem; + margin-bottom: 1rem; +} + +.cal-box { + padding: 1rem 1rem .2rem; +} + +.cal { + padding: 0; + border-radius: 8px; +} + +.calendar_box { + padding: 1rem; + calendar:selected { + color: $blue; + } + + calendar.header { + color: $blue; + font-weight: bold; + } + + calendar.button { + color: $blue; + } + + calendar.highlight { + color: $green; + font-weight: bold; + } + + calendar:indeterminate { + color: rgba(205, 219, 249, 0.3); + } +} + +.sysinfo_box { + padding: 1rem; + .iconmem { + font-size: 3rem; + color: $yellow; + } + .iconcpu { + font-size: 3rem; + color: $blue; + } + .icondisk { + font-size: 3rem; + color: $green; + } + .cpubar, .membar, .diskbar { + background-color: $crust; + } +} +.slider_box { + padding: 0 1rem; + scale { + background-color: $crust; + border-radius: 100px; + margin: 0.5rem 0; + } + + scale trough { + border-radius: 100px; + } + + scale highlight { + padding: 8px; + margin: 8px; + border-radius: 100px; + } + + .brightness_slider highlight { + background-color: $yellow; + } + + .volume_slider highlight { + background-color: $blue; + } + + .micvolume_slider highlight { + background-color: $green; + } + + .slider_icon { + font-size: 2rem; + padding-right: 0.75rem; + } +} + +.notification_box { +} + +.wifi { + font-size: 2rem; + color: $blue; +} + +.clock { + font-weight: bold; + background-color: $base; + color: $text; + border-radius: 10px; + padding: 0.2rem; + margin: 0.5rem; +} + +.cpubar { + color: $blue; + background-color: $surface1; + margin: 4px 0; +} + +.diskbar { + color: $green; + background-color: $surface1; + margin: 4px 0; +} + +.membar { + color: $yellow; + background-color: $surface1; + margin: 4px 0; +} + +.iconmem, .iconcpu, .icondisk { + color: $base; + font-size: 2.5rem; +} + +.date { + font-size: 1.5rem; +} + +.reg-btn { + font-size: 2rem; + margin: 2px 8px; + border-radius: 10px; +} + +.dashbutton { + color: $mauve; +} + +.dashbutton:hover { + background-color: $base; +} + +.dashbutton:active { + background-color: $mauve; + color: $mantle; +} + +.powerbutton { + color: $red; +} + +.powerbutton:hover { + background-color: $base; +} + +.powerbutton:active { + background-color: $red; + color: $mantle; +} + +.launchbutton { + background-color: $blue; + color: $mantle; + margin-top: 6px; +} + +.launchbutton:hover { + background-color: $mauve; +} + +.launchbutton:active { + color: $mauve; + background-color: $mantle; +} + +.battery { + font-size: 1.5rem; + color: $blue; +} + +// Credits AlphaTechnolog +.powermenu-box { + padding: 0 2px; + margin: 7px 7px 7px 0px; + background: inherit; + .dispatcher { + border-radius: 15px; + background: $base; + color: $red; + font-size: 14px; + padding: 0 14px 0 10px; + &:hover { background-color: $surface0; } + &:active { background-color: $surface1; } + } +} + +// powermenu +.powermenu-container { + background: $crust; + color: $text; + padding: 10px; + font-size: 55px; + + transition: all 200ms cubic-bezier(.1,-0.00,.0,1.49); + + .btn { margin: 1rem;} + // shutdown + .shutdown-btn-box .btn { + color: $red; + border-radius: 15px; + background-color: $mantle; + &:hover { background-color: $base; } + &:active { background-color: $surface1; } + } + // reboot + .reboot-btn-box .btn { + color: $mauve; + border-radius: 15px; + background-color: $mantle; + &:hover { background-color: $base; } + &:active { background-color: $surface1; } + } + // exit + .exit-btn-box .btn { + color: $yellow; + border-radius: 15px; + background-color: $mantle; + &:hover { background-color: $base; } + &:active { background-color: $surface1; } + } +} + diff --git a/modules/eww/eww.yuck b/modules/eww/eww.yuck new file mode 100644 index 0000000..0b85bde --- /dev/null +++ b/modules/eww/eww.yuck @@ -0,0 +1,295 @@ +(defwidget bar [] + (centerbox :orientation "v" :hexpand false + (box :valign "start" :hexpand false :vexpand true :orientation "v" :space-evenly false + (launch) + (dashbutton) + (powerbutton) + ) + + (workspaces :halign "center" :vexpand true :hexpand false :orientation "v") + + (box :valign "end" :hexpand false :vexpand true :orientation "v" :space-evenly false + (battery) + (wifi) + (mem :thickness 4 :icon "") + (cpu :thickness 4 :icon "") + (disk :thickness 4 :icon "") + (time) + ) + ) +) + +(defpoll brightness :interval "999h" :initial 0 `brightnessctl -m | awk -F, '{print substr($4, 0, length($4)-1)}'`) +(defpoll volume :interval "999h" :initial 0 `pamixer --get-volume`) +(defpoll micvolume :interval "999h" :initial 0 `pamixer --get-volume --source 1`) +(defwidget dashboard [] + (box :orientation "v" + (box :class "info_box" :orientation "v" :space-evenly false + (box :class "calendar_box" + (calendar :width 200 :class "cal") + ) + + (box :class "slider_box" :orientation "v" :vexpand false :hexpand false + (box :space-evenly false + (label :class "slider_icon" :text "") + (scale :min 1 :max 101 :width 315 :class "brightness_slider" :value brightness :onchange "brightnessctl set {}%" :height 10) + ) + (box :space-evenly false + (label :class "slider_icon" :text "墳") + (scale :min 1 :max 101 :width 315 :class "volume_slider" :value volume :onchange "pamixer --set-volume $(echo {} | sed 's/[.].*$//')") + ) + (box :space-evenly false + (label :class "slider_icon" :text "") + (scale :min 1 :max 101 :width 315 :class "micvolume_slider" :value micvolume :onchange "pamixer --set-volume $(echo {} | sed 's/[.].*$//') --source 1") + ) + ) + (box :class "sysinfo_box" :orientation "h" :vexpand true :spacing 15 + (mem :thickness 12 :icon "") + (cpu :thickness 12 :icon "") + (disk :thickness 12 :icon "") + ) + ) + (box :class "notification_box" + ) + ) +) + + + + +;; Variables +(defvar time false) +(defvar cal false) + +;; ━━━ WIDGETS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +;; ━━━ MEMORY ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +(defwidget dashbutton[] + (button :class "reg-btn dashbutton" :onclick "eww open dashboard --toggle" "舘") +) + + + +;; ━━━ MEMORY ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +(defwidget mem [icon thickness] + (box :vexpand "false" :hexpand "false" + (circular-progress :value {EWW_RAM.used_mem_perc} + :class "membar" + :thickness {thickness} + :start-at 75 + + (label :class "iconmem" :text {icon}) + ) + ) +) + +;; ━━━ CPU ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +(defwidget cpu [icon thickness] + (box :vexpand "false" :hexpand "false" + (circular-progress :value {EWW_CPU.avg} + :class "cpubar" + :thickness {thickness} + :start-at 75 + + (label :class "iconcpu" :text {icon}) + ) + ) +) + +;; ━━━ DISK ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +(defwidget disk [icon thickness] + (box :vexpand "false" :hexpand "false" + (circular-progress :value {EWW_DISK["/"].used_perc} + :class "diskbar" + :thickness {thickness} + :start-at 75 + (label :class "icondisk" :text {icon}) + + ) + ) +) + + +;; ━━━ WIFI ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +(defvar wifi "{}") +(defpoll wifi :interval "30s" "./scripts/wifi.sh") + +(defwidget wifi [] + (box :vexpand false :hexpand false :orientation "v" + (label :text {wifi.icon} + :limit-width 10 + :tooltip {wifi.status} + :class "wifi" + ) + ) +) + +;; ━━━ BATTERY ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +(defvar battery "{}") +(defpoll battery :interval "60s" "./scripts/battery.sh") + +(defwidget battery [] + (label :text {battery.icon} + :limit-width 10 + :tooltip "${battery.status}: ${battery.percent}" + :class "battery" + ) +) + + +;; ━━━ VOLUME ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +(defvar volume-level 50) +(defvar volume-muted false) + +(defwindow volume + :monitor 0 + :geometry (geometry :y "100px" :x "0px" :width "250px" :height "200px" :anchor "center bottom") + :windowtype "dock" + :wm-ignore true + :stacking "fg" + + (box :class "volume-window" + :orientation "v" + :space-evenly "false" + (box :class "volume-widget" + :orientation "h" + :space-evenly false + :spacing 10 + (label :text {volume-muted ? "" : + volume-level == 0 ? "" : + volume-level < 32 ? "" : + volume-level < 65 ? "" : + ""} + + :class 'volume-icon ${volume-muted ? "volume-icon-muted" : ""}' + ) + (scale :class 'volume-slider ${volume-muted ? "volume-slider-muted" : ""}' + :hexpand "true" + :min 0 + :max 100 + :height 8 + :marks true + :value volume-level + :onchange "pamixer --set-volume {}")))) + +;; ━━━ TIME ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +(defpoll hour :interval "10s" "date +%H") +(defpoll minute :interval "10s" "date +%M") +(defpoll dateVar :interval "600s" "date '+%A %d.%m.%y'") + +(defwidget time [] + (eventbox :cursor "hand" :hexpand false :vexpand false + :tooltip "${dateVar}" + (box :orientation "v" :hexpand false :vexpand false :space-evenly false :class "clock" + (button :class "date" + :onclick "" "${hour}") + + (button :class "date" + :onclick "" "${minute}") + ) + ) +) + + + + +(defvar bright-level 50) +(defvar bright-muted false) +(defwindow brightness + :monitor 0 + :geometry (geometry :y "-60px" :x "60px" :width "300px" :height "150px" :anchor "bottom left") + :wm-ignore true + :stacking "fg" + + (box :class "volume-window" + :orientation "v" + :space-evenly "false" + (box :class "volume-widget" + :orientation "h" + :space-evenly false + :spacing 10 + (label :text "" + :class 'volume-icon' + ) + (scale :class 'volume-slider' + :hexpand "true" + :min 0 + :max 100 + :height 8 + :marks true + :value bright-level + :onchange "brightnessctl set {}%")))) +(defwidget launch [] + (button :class "reg-btn launchbutton" + :hexpand true + :onclick "wofi --show run --xoffset=1670 --yoffset=12 --width=230px --height=984 --style=$HOME/.config/wofi.css --term=footclient --prompt=Run &" "") +) + +(defwidget powerbutton [] + (eventbox :cursor "hand" + (button :class "reg-btn powerbutton" + :onclick "eww open powermenu --toggle &" "") + ) +) + (defwidget powermenucontent [] + (box :orientation "h" + :class "powermenu-container" + (box :class "shutdown-btn-box" + :orientation "h" + (button :class "btn" + :tooltip "Shutdown" + :onclick "eww close powermenu && shutdown now" + "⏻") + ) + (box :class "reboot-btn-box" + :orientation "h" + (button :class "btn" + :tooltip "Reboot" + :onclick "eww close powermenu && reboot" + "") + ) + (box :class "exit-btn-box" + :orientation "h" + (button :class "btn" + :tooltip "Suspend" + :onclick "systemctl suspend" + "") + ) + ) +) + +(defwindow powermenu + :monitor 0 + :geometry (geometry :x "0%" + :y "0%" + :width "30%" + :height "15%" + :anchor "center center") + :wm-ignore true + (powermenucontent)) + +(deflisten workspaces_listen "./scripts/workspaces.sh") +(defwidget workspaces [] + (literal :content workspaces_listen)) + +(defwindow dashboard + :monitor 0 + :geometry (geometry + :height "1080px" + :width "350px" + :x "48px" + :y "0px" + :anchor "top left") + :stacking "fg" + :class "dashboard" + (dashboard)) + +(defwindow bar + :monitor 0 + :exclusive false + :geometry (geometry :height "1080px" :x "-4px" :y "0px" + :width "52px" + :anchor "top left") + :stacking "fg" + (bar)) diff --git a/modules/eww/scripts/battery.sh b/modules/eww/scripts/battery.sh new file mode 100755 index 0000000..46fe3f8 --- /dev/null +++ b/modules/eww/scripts/battery.sh @@ -0,0 +1,38 @@ +#!/bin/sh + +bat=/sys/class/power_supply/BAT1/ +per="$(cat "$bat/capacity")" +status="$(cat "$bat/status")" + +if [ "$per" -gt "90" ]; then + icon="" +elif [ "$per" -gt "80" ]; then + icon="" +elif [ "$per" -gt "70" ]; then + icon="" +elif [ "$per" -gt "60" ]; then + icon="" +elif [ "$per" -gt "50" ]; then + icon="" +elif [ "$per" -gt "40" ]; then + icon="" +elif [ "$per" -gt "30" ]; then + icon="" +elif [ "$per" -gt "20" ]; then + icon="" +elif [ "$per" -gt "10" ]; then + icon="" +elif [ "$per" -gt "0" ]; then + icon="" +else + icon="" +fi + + + + +if [ -s /sys/class/power_supply/BAT1/capacity ]; then + echo "{\"percent\": \"$per\", \"icon\": \"$icon\", \"charging\": \"$charging\", \"visible\": \"true\", \"status\": \"$status\"}" +else + echo "{\"visible\": \"false\" }" +fi diff --git a/modules/eww/scripts/brightness.sh b/modules/eww/scripts/brightness.sh new file mode 100755 index 0000000..47f9d4e --- /dev/null +++ b/modules/eww/scripts/brightness.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +if eww windows | grep -q "\*brightness"; then + eww update bright-level="$(brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}' | tr -d '%')" +else + eww close volume + eww open brightness + + eww update bright-level="$(brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}' | tr -d '%')" + sleep 2 + sleep 1 + eww close brightness +fi diff --git a/modules/eww/scripts/volume.sh b/modules/eww/scripts/volume.sh new file mode 100755 index 0000000..974530b --- /dev/null +++ b/modules/eww/scripts/volume.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +if eww windows | rg -q "\*volume"; then + eww update volume-level=$(pamixer --get-volume) + eww update volume-muted=$(pamixer --get-mute) + eww update volume-hidden=false +else + eww close brightness + eww open volume + + eww update volume-level=$(pamixer --get-volume) + eww update volume-muted=$(pamixer --get-mute) + eww update volume-hidden=false + sleep 2 + eww update volume-hidden=true + sleep 1 + eww close volume +fi diff --git a/modules/eww/scripts/wifi.sh b/modules/eww/scripts/wifi.sh new file mode 100755 index 0000000..02cbf34 --- /dev/null +++ b/modules/eww/scripts/wifi.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +if iwctl station wlan0 show | grep -q "connected"; then + icon="" + ssid=Amadeus + status="Connected to ${ssid}" +else + icon="睊" + status="offline" +fi + +echo "{\"icon\": \"${icon}\", \"status\": \"${status}\"}" diff --git a/modules/eww/scripts/workspaces.lua b/modules/eww/scripts/workspaces.lua new file mode 100755 index 0000000..cb0ec28 --- /dev/null +++ b/modules/eww/scripts/workspaces.lua @@ -0,0 +1,30 @@ +#!/usr/bin/env lua + +function trim(s) + return (string.gsub(s, "^%s*(.-)%s*$", "%1")) +end + +aw = io.popen("hyprctl monitors | grep active | sed 's/()/(1)/g' | sort | awk 'NR>1{print $1}' RS='(' FS=')'") +active_workspace = aw:read("*a") +aw:close() + +ew = io.popen("hyprctl workspaces | grep ID | sed 's/()/(1)/g' | sort | awk 'NR>1{print $1}' RS='(' FS=')'") +existing_workspaces = ew:read("*a") +ew:close() + +box = "(box :orientation \"v\" :spacing 1 :space-evenly \"true\" " + +for i = 1, #existing_workspaces do + local c = existing_workspaces:sub(i,i) + if tonumber(c) == tonumber(active_workspace) then + local btn = "(button :class \"active\" :onclick \"hyprctl dispatch workspace "..c.." \" \"\")" + box = box .. btn + elseif c ~= "\n" then + local btn = "(button :class \"inactive\" :onclick \"hyprctl dispatch workspace "..c.."\" \"\")" + box = box .. btn + end +end + +box = box .. ")" + +print(box) diff --git a/modules/eww/scripts/workspaces.sh b/modules/eww/scripts/workspaces.sh new file mode 100755 index 0000000..9ff9739 --- /dev/null +++ b/modules/eww/scripts/workspaces.sh @@ -0,0 +1,9 @@ +#!/bin/sh +workspaces() { +./scripts/workspaces.lua +} +workspaces +tail -f /tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/hyprland.log | grep --line-buffered "Changed to workspace" | while read -r; do +workspaces +done + diff --git a/modules/firefox/default.nix b/modules/firefox/default.nix new file mode 100644 index 0000000..ed756b6 --- /dev/null +++ b/modules/firefox/default.nix @@ -0,0 +1,98 @@ +{ inputs, lib, config, pkgs, ... }: +with lib; +let + cfg = config.modules.eww; + +in { + options.modules.firefox = { enable = mkEnableOption "firefox"; }; + + config = mkIf cfg.enable { + programs.firefox = { + profiles = { + default = { + enable = true; + + # Install extensions from NUR + extensions = with pkgs.nur.repos.rycee.firefox-addons; [ + decentraleyes + ublock-origin + clearurls + sponsorblock + darkreader + h264ify + df-youtube + ]; + + # Privacy about:config settings + profiles.notus = { + settings = { + "browser.send_pings" = false; + "browser.urlbar.speculativeConnect.enabled" = false; + "dom.event.clipboardevents.enabled" = true; + "media.navigator.enabled" = false; + "network.cookie.cookieBehavior" = 1; + "network.http.referer.XOriginPolicy" = 2; + "network.http.referer.XOriginTrimmingPolicy" = 2; + "beacon.enabled" = false; + "browser.safebrowsing.downloads.remote.enabled" = false; + "network.IDN_show_punycode" = true; + "extensions.activeThemeID" = "firefox-compact-dark@mozilla.org"; + "app.shield.optoutstudies.enabled" = false; + "dom.security.https_only_mode_ever_enabled" = true; + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + "browser.toolbars.bookmarks.visibility" = "never"; + "geo.enabled" = false; + + # Disable telemetry + "browser.newtabpage.activity-stream.feeds.telemetry" = false; + "browser.ping-centre.telemetry" = false; + "browser.tabs.crashReporting.sendReport" = false; + "devtools.onboarding.telemetry.logged" = false; + "toolkit.telemetry.enabled" = false; + "toolkit.telemetry.unified" = false; + "toolkit.telemetry.server" = ""; + + # Disable Pocket + "browser.newtabpage.activity-stream.feeds.discoverystreamfeed" = false; + "browser.newtabpage.activity-stream.feeds.section.topstories" = false; + "browser.newtabpage.activity-stream.section.highlights.includePocket" = false; + "browser.newtabpage.activity-stream.showSponsored" = false; + "extensions.pocket.enabled" = false; + + # Disable prefetching + "network.dns.disablePrefetch" = true; + "network.prefetch-next" = false; + + # Disable JS in PDFs + "pdfjs.enableScripting" = false; + + # Harden SSL + "security.ssl.require_safe_negotiation" = true; + + # Extra + "identity.fxaccounts.enabled" = false; + "browser.search.suggest.enabled" = false; + "browser.urlbar.shortcuts.bookmarks" = false; + "browser.urlbar.shortcuts.history" = false; + "browser.urlbar.shortcuts.tabs" = false; + "browser.urlbar.suggest.bookmark" = false; + "browser.urlbar.suggest.engines" = false; + "browser.urlbar.suggest.history" = false; + "browser.urlbar.suggest.openpage" = false; + "browser.urlbar.suggest.topsites" = false; + "browser.uidensity" = 1; + "media.autoplay.enabled" = false; + "toolkit.zoomManager.zoomValues" = ".8,.90,.95,1,1.1,1.2"; + + "privacy.firstparty.isolate" = true; + "network.http.sendRefererHeader" = 0; + }; + + # userChome.css to make it look better + userChrome = buildins.readFile ./userChrome.css; + }; + }; + }; + }; + }; +} diff --git a/modules/firefox/userChrome.css b/modules/firefox/userChrome.css new file mode 100644 index 0000000..a5a4a4e --- /dev/null +++ b/modules/firefox/userChrome.css @@ -0,0 +1,69 @@ +* { + box-shadow: none !important; + border: 0px solid !important; +} + +#tabbrowser-tabs { + --user-tab-rounding: 8px; +} + +.tab-background { + border-radius: var(--user-tab-rounding) var(--user-tab-rounding) 0px 0px !important; + /* Connected */ + margin-block: 1px 0 !important; + /* Connected */ +} + +#scrollbutton-up, +#scrollbutton-down { + /* 6/10/2021 */ + border-top-width: 1px !important; + border-bottom-width: 0 !important; +} + +.tab-background:is([selected], [multiselected]):-moz-lwtheme { + --lwt-tabs-border-color: rgba(0, 0, 0, 0.5) !important; + border-bottom-color: transparent !important; +} + +[brighttext='true'] .tab-background:is([selected], [multiselected]):-moz-lwtheme { + --lwt-tabs-border-color: rgba(255, 255, 255, 0.5) !important; + border-bottom-color: transparent !important; +} + +/* Container color bar visibility */ +.tabbrowser-tab[usercontextid]>.tab-stack>.tab-background>.tab-context-line { + margin: 0px max(calc(var(--user-tab-rounding) - 3px), 0px) !important; +} + +#TabsToolbar, +#tabbrowser-tabs { + --tab-min-height: 29px !important; +} + +#main-window[sizemode='true'] #toolbar-menubar[autohide='true']+#TabsToolbar, +#main-window[sizemode='true'] #toolbar-menubar[autohide='true']+#TabsToolbar #tabbrowser-tabs { + --tab-min-height: 30px !important; +} + +#scrollbutton-up, +#scrollbutton-down { + border-top-width: 0 !important; + border-bottom-width: 0 !important; +} + +#TabsToolbar, +#TabsToolbar>hbox, +#TabsToolbar-customization-target, +#tabbrowser-arrowscrollbox { + max-height: calc(var(--tab-min-height) + 1px) !important; +} + +#TabsToolbar-customization-target toolbarbutton>.toolbarbutton-icon, +#TabsToolbar-customization-target .toolbarbutton-text, +#TabsToolbar-customization-target .toolbarbutton-badge-stack, +#scrollbutton-up, +#scrollbutton-down { + padding-top: 7px !important; + padding-bottom: 6px !important; +} \ No newline at end of file diff --git a/modules/git/default.nix b/modules/git/default.nix new file mode 100644 index 0000000..b2d9f65 --- /dev/null +++ b/modules/git/default.nix @@ -0,0 +1,21 @@ +{ pkgs, lib, config, ... }: + +with lib; +let cfg = config.modules.git; + +in { + options.modules.git = { enable = mkEnableOption "git"; }; + config = mkIf cfg.enable { + programs.git = { + enable = true; + userName = "notusknot"; + userEmail = "notusknot@gmail.com"; + extraConfig = { + init = { defaultBranch = "main"; }; + core = { + excludesfile = "$NIXOS_CONFIG_DIR/scripts/gitignore"; + }; + }; + }; + }; +} diff --git a/modules/hyprland/default.nix b/modules/hyprland/default.nix new file mode 100644 index 0000000..5138eb4 --- /dev/null +++ b/modules/hyprland/default.nix @@ -0,0 +1,15 @@ +{ inputs, pkgs, lib, config, ... }: + +with lib; +let cfg = config.modules.hyprland; + +in { + options.modules.hyprland= { enable = mkEnableOption "hyprland"; }; + config = mkIf cfg.enable { + home.packages = with pkgs; [ + wofi swaybg wlsunset wl-clipboard hyprland + ]; + + home.file.".config/hypr/hyprland.conf".source = ./hyprland.conf; + }; +} diff --git a/modules/hyprland/hyprland.conf b/modules/hyprland/hyprland.conf new file mode 100644 index 0000000..f0edd2f --- /dev/null +++ b/modules/hyprland/hyprland.conf @@ -0,0 +1,91 @@ +monitor=eDP-1,1920x1080@60,0x0,1 +monitor=eDP-1,addreserved,0,0,48,0 + +exec-once=swaybg -i $NIXOS_CONFIG_DIR/pics/wallpaper.png +exec-once=foot --server +exec-once=wlsunset -l -23 -L -46 +exec-once=eww daemon +exec-once=eww open bar +exec-once=dunst + +input { + follow_mouse=0 +} + +general { + sensitivity=1 + main_mod=ALT + + gaps_in=6 + gaps_out=12 + border_size=4 + col.active_border=0xffb072d1 + col.inactive_border=0xff292a37 + + damage_tracking=full +} + +decoration { + rounding=8 + blur=0 + drop_shadow=0 + shadow_range=60 + col.shadow=0x66000000 +} + +animations { + enabled=1 + animation=windows,1,4,default,slide + animation=borders,1,5,default + animation=fadein,1,5,default + animation=workspaces,1,3,default,vertslide +} + +dwindle { + pseudotile=0 # enable pseudotiling on dwindle +} + +# example window rules +# for windows named/classed as abc and xyz +windowrule=float,move 0 0,pqiv +windowrule=float,foot-notes +#windowrule=size 420 69,abc +#windowrule=tile,xyz +#windowrule=float,abc +#windowrule=pseudo,abc +#windowrule=monitor 0,xyz + +# example binds +bind=ALT,Return,exec,footclient +bind=ALTSHIFT,Q,killactive, +bind=ALT,V,togglefloating, +bind=ALT,R,exec,wofi --show run --xoffset=1670 --yoffset=12 --width=230px --height=984 --style=$HOME/.config/wofi.css --term=footclient --prompt=Run +bind=ALT,N,exec,cd ~/stuff/notes && footclient -a foot-notes sh -c "nvim ~/stuff/notes/$(date '+%Y-%m-%d').md" +bind=ALT,F,fullscreen,0 + +bind=ALT,h,movefocus,l +bind=ALT,l,movefocus,r +bind=ALT,k,movefocus,u +bind=ALT,j,movefocus,d + +bind=ALTSHIFT,h,movewindow,l +bind=ALTSHIFT,l,movewindow,r +bind=ALTSHIFT,k,movewindow,u +bind=ALTSHIFT,j,movewindow,d + +bind=ALT,1,workspace,1 +bind=ALT,2,workspace,2 +bind=ALT,3,workspace,3 +bind=ALT,4,workspace,4 +bind=ALT,5,workspace,5 + +bind=ALTSHIFT,exclam,movetoworkspacesilent,1 +bind=ALTSHIFT,at,movetoworkspacesilent,2 +bind=ALTSHIFT,numbersign,movetoworkspacesilent,3 +bind=ALTSHIFT,dollar,movetoworkspacesilent,4 +bind=ALTSHIFT,percent,movetoworkspacesilent,5 + +bind=,XF86MonBrightnessUp,exec,brightnessctl set +5% +bind=,XF86MonBrightnessDown,exec,brightnessctl set 5%- +bind=,XF86AudioRaiseVolume,exec,pamixer -i 5 +bind=,XF86AudioLowerVolume,exec,pamixer -d 5 diff --git a/modules/kitty/default.nix b/modules/kitty/default.nix new file mode 100644 index 0000000..4b9fde2 --- /dev/null +++ b/modules/kitty/default.nix @@ -0,0 +1,14 @@ +{ pkgs, lib, config, ... }: + +with lib; +let cfg = config.modules.foot; + +in { + options.modules.foot = { enable = mkEnableOption "foot"; }; + config = mkIf cfg.enable { + programs.kitty = { + enable = true; + extraConfig = buildins.readFile ./kitty.conf; + }; + }; +} diff --git a/modules/kitty/kitty.conf b/modules/kitty/kitty.conf new file mode 100644 index 0000000..5629bfa --- /dev/null +++ b/modules/kitty/kitty.conf @@ -0,0 +1,243 @@ +# vim:fileencoding=utf-8:ft=conf + +# Font family. You can also specify different fonts for the +# bold/italic/bold-italic variants. By default they are derived automatically, +# by the OSes font system. Setting them manually is useful for font families +# that have many weight variants like Book, Medium, Thick, etc. For example: +# font_family Operator Mono Book +# bold_font Operator Mono Thick +# bold_italic_font Operator Mono Medium +# font_family Input Mono +font_family JetBrainsMono Nerdfont +italic_font auto +bold_font auto +bold_italic_font auto + +# Font size (in pts) +font_size 12.0 + +# The foreground color +foreground #c0b18b + +# The background color +background #262626 + +# The foreground for selections +selection_foreground #2f2f2f + +# The background for selections +selection_background #d75f5f + +# The cursor color +cursor #8fee96 + +# The cursor shape can be one of (block, beam, underline) +shell_integration no-cursor +cursor_shape block + +# The interval (in seconds) at which to blink the cursor. Set to zero to +# disable blinking. +cursor_blink_interval 0.5 + +# Stop blinking cursor after the specified number of seconds of keyboard inactivity. Set to +# zero or a negative number to never stop blinking. +cursor_stop_blinking_after 15.0 + +# Number of lines of history to keep in memory for scrolling back +scrollback_lines 2000 + +# Program with which to view scrollback in a new window. The scrollback buffer is passed as +# STDIN to this program. If you change it, make sure the program you use can +# handle ANSI escape sequences for colors and text formatting. +scrollback_pager less +G -R + +# Wheel scroll multiplier (modify the amount scrolled by the mouse wheel) +wheel_scroll_multiplier 5.0 + +# The interval between successive clicks to detect double/triple clicks (in seconds) +click_interval 0.5 + +# Characters considered part of a word when double clicking. In addition to these characters +# any character that is marked as an alpha-numeric character in the unicode +# database will be matched. +select_by_word_characters :@-./_~?&=%+# + +# Hide mouse cursor after the specified number of seconds of the mouse not being used. Set to +# zero or a negative number to disable mouse cursor hiding. +mouse_hide_wait 0.0 + +# The enabled window layouts. A comma separated list of layout names. The special value * means +# all layouts. The first listed layout will be used as the startup layout. +# For a list of available layouts, see the file layouts.py +enabled_layouts * + +# If enabled, the window size will be remembered so that new instances of kitty will have the same +# size as the previous instance. If disabled, the window will initially have size configured +# by initial_window_width/height, in pixels. +remember_window_size no +initial_window_width 640 +initial_window_height 400 + +# Delay (in milliseconds) between screen updates. Decreasing it, increases fps +# at the cost of more CPU usage. The default value yields ~100fps which is more +# that sufficient for most uses. +# repaint_delay 10 +repaint_delay 10 + +# Delay (in milliseconds) before input from the program running in the terminal +# is processed. Note that decreasing it will increase responsiveness, but also +# increase CPU usage and might cause flicker in full screen programs that +# redraw the entire screen on each loop, because kitty is so fast that partial +# screen updates will be drawn. +input_delay 3 + +# Visual bell duration. Flash the screen when a bell occurs for the specified number of +# seconds. Set to zero to disable. +visual_bell_duration 0.0 + +# Enable/disable the audio bell. Useful in environments that require silence. +enable_audio_bell yes + +# The modifier keys to press when clicking with the mouse on URLs to open the URL +open_url_modifiers ctrl+shift + +# The program with which to open URLs that are clicked on. The special value "default" means to +# use the operating system's default URL handler. +open_url_with default + +# The value of the TERM environment variable to set +term xterm-kitty + +# The width (in pts) of window borders. Will be rounded to the nearest number of pixels based on screen resolution. +window_border_width 0 + +window_margin_width 15 + +# The color for the border of the active window +active_border_color #ffffff + +# The color for the border of inactive windows +inactive_border_color #cccccc + +# Tab-bar colors +active_tab_foreground #000 +active_tab_background #eee +inactive_tab_foreground #444 +inactive_tab_background #999 + + +# The 16 terminal colors. There are 8 basic colors, each color has a dull and +# bright version. + +# black +color0 #2f2f2f +color8 #656565 + +# red +color1 #d75f5f +color9 #d75f5f + +# green +color2 #d4d232 +color10 #8fee96 + +# yellow +color3 #af865a +color11 #cd950c + +# blue +color4 #22c3a1 +color12 #22c3a1 + +# magenta +color5 #775759 +color13 #775759 + +# cyan +color6 #84edb9 +color14 #84edb9 + +# white +color7 #c0b18b +color15 #d8d8d8 + +# Key mapping +# For a list of key names, see: http://www.glfw.org/docs/latest/group__keys.html +# For a list of modifier names, see: http://www.glfw.org/docs/latest/group__mods.html +# You can use the special action no_op to unmap a keyboard shortcut that is +# assigned in the default configuration. + +# Clipboard +map super+v paste_from_clipboard +map ctrl+shift+s paste_from_selection +map super+c copy_to_clipboard +map shift+insert paste_from_selection + +# Scrolling +map ctrl+shift+up scroll_line_up +map ctrl+shift+down scroll_line_down +map ctrl+shift+k scroll_line_up +map ctrl+shift+j scroll_line_down +map ctrl+shift+page_up scroll_page_up +map ctrl+shift+page_down scroll_page_down +map ctrl+shift+home scroll_home +map ctrl+shift+end scroll_end +map ctrl+shift+h show_scrollback + +# Window management +map super+n new_os_window +map super+w close_window +map ctrl+shift+enter new_window +map ctrl+shift+] next_window +map ctrl+shift+[ previous_window +map ctrl+shift+f move_window_forward +map ctrl+shift+b move_window_backward +map ctrl+shift+` move_window_to_top +map ctrl+shift+1 first_window +map ctrl+shift+2 second_window +map ctrl+shift+3 third_window +map ctrl+shift+4 fourth_window +map ctrl+shift+5 fifth_window +map ctrl+shift+6 sixth_window +map ctrl+shift+7 seventh_window +map ctrl+shift+8 eighth_window +map ctrl+shift+9 ninth_window +map ctrl+shift+0 tenth_window + +# Tab management +map ctrl+shift+right next_tab +map ctrl+shift+left previous_tab +map ctrl+shift+t new_tab +map ctrl+shift+q close_tab +map ctrl+shift+l next_layout +map ctrl+shift+. move_tab_forward +map ctrl+shift+, move_tab_backward + +# Miscellaneous +map ctrl+shift+up increase_font_size +map ctrl+shift+down decrease_font_size +map ctrl+shift+backspace restore_font_size + +# Symbol mapping (special font for specified unicode code points). Map the +# specified unicode codepoints to a particular font. Useful if you need special +# rendering for some symbols, such as for Powerline. Avoids the need for +# patched fonts. Each unicode code point is specified in the form U+. You can specify multiple code points, separated by commas +# and ranges separated by hyphens. symbol_map itself can be specified multiple times. +# Syntax is: +# +# symbol_map codepoints Font Family Name +# +# For example: +# +#symbol_map U+E0A0-U+E0A2,U+E0B0-U+E0B3 PowerlineSymbols +hide_window_decorations titlebar-only +macos_option_as_alt no + +# Change the color of the kitty window's titlebar on macOS. A value of "system" +# means to use the default system color, a value of "background" means to use +# the default background color and finally you can use an arbitrary color, such +# as #12af59 or "red". +macos_titlebar_color background + +allow_remote_control yes \ No newline at end of file diff --git a/modules/laptopHardware/default.nix b/modules/laptopHardware/default.nix new file mode 100644 index 0000000..da4664a --- /dev/null +++ b/modules/laptopHardware/default.nix @@ -0,0 +1,11 @@ +{ pkgs, lib, config, ... }: + +with lib; +let cfg = config.modules.laptopHardware; + +in { + options.modules.laptopHardware = { enable = mkEnableOption "laptopHardware"; }; + config = mkIf cfg.enable { + + }; +} diff --git a/modules/nushell/config.nu b/modules/nushell/config.nu new file mode 100644 index 0000000..2017b7c --- /dev/null +++ b/modules/nushell/config.nu @@ -0,0 +1,730 @@ +# Nushell Config File +# +# version = 0.83.1 + +# For more information on defining custom themes, see +# https://www.nushell.sh/book/coloring_and_theming.html +# And here is the theme collection +# https://github.com/nushell/nu_scripts/tree/main/themes +let dark_theme = { + # color for nushell primitives + separator: white + leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off + header: green_bold + empty: blue + # Closures can be used to choose colors for specific values. + # The value (in this case, a bool) is piped into the closure. + bool: {|| if $in { 'light_cyan' } else { 'light_gray' } } + int: white + filesize: {|e| + if $e == 0b { + 'white' + } else if $e < 1mb { + 'cyan' + } else { 'blue' } + } + duration: white + date: {|| (date now) - $in | + if $in < 1hr { + 'purple' + } else if $in < 6hr { + 'red' + } else if $in < 1day { + 'yellow' + } else if $in < 3day { + 'green' + } else if $in < 1wk { + 'light_green' + } else if $in < 6wk { + 'cyan' + } else if $in < 52wk { + 'blue' + } else { 'dark_gray' } + } + range: white + float: white + string: white + nothing: white + binary: white + cellpath: white + row_index: green_bold + record: white + list: white + block: white + hints: dark_gray + search_result: {bg: red fg: white} + shape_and: purple_bold + shape_binary: purple_bold + shape_block: blue_bold + shape_bool: light_cyan + shape_closure: green_bold + shape_custom: green + shape_datetime: cyan_bold + shape_directory: cyan + shape_external: cyan + shape_externalarg: green_bold + shape_filepath: cyan + shape_flag: blue_bold + shape_float: purple_bold + # shapes are used to change the cli syntax highlighting + shape_garbage: { fg: white bg: red attr: b} + shape_globpattern: cyan_bold + shape_int: purple_bold + shape_internalcall: cyan_bold + shape_list: cyan_bold + shape_literal: blue + shape_match_pattern: green + shape_matching_brackets: { attr: u } + shape_nothing: light_cyan + shape_operator: yellow + shape_or: purple_bold + shape_pipe: purple_bold + shape_range: yellow_bold + shape_record: cyan_bold + shape_redirection: purple_bold + shape_signature: green_bold + shape_string: green + shape_string_interpolation: cyan_bold + shape_table: blue_bold + shape_variable: purple + shape_vardecl: purple +} + + +# External completer example +# let carapace_completer = {|spans| +# carapace $spans.0 nushell $spans | from json +# } + + +# The default config record. This is where much of your global configuration is setup. +$env.config = { + show_banner: false # true or false to enable or disable the welcome banner at startup + + ls: { + use_ls_colors: true # use the LS_COLORS environment variable to colorize output + clickable_links: true # enable or disable clickable links. Your terminal has to support links. + } + + rm: { + always_trash: false # always act as if -t was given. Can be overridden with -p + } + + + table: { + mode: rounded # basic, compact, compact_double, light, thin, with_love, rounded, reinforced, heavy, none, other + index_mode: always # "always" show indexes, "never" show indexes, "auto" = show indexes when a table has "index" column + show_empty: true # show 'empty list' and 'empty record' placeholders for command output + trim: { + methodology: wrapping # wrapping or truncating + wrapping_try_keep_words: true # A strategy used by the 'wrapping' methodology + truncating_suffix: "..." # A suffix used by the 'truncating' methodology + } + } + + # datetime_format determines what a datetime rendered in the shell would look like. + # Behavior without this configuration point will be to "humanize" the datetime display, + # showing something like "a day ago." + datetime_format: { + # normal: '%a, %d %b %Y %H:%M:%S %z' # shows up in displays of variables or other datetime's outside of tables + # table: '%m/%d/%y %I:%M:%S%p' # generally shows up in tabular outputs such as ls. commenting this out will change it to the default human readable datetime format + } + + explore: { + try: { + border_color: {fg: "white"} + }, + status_bar_background: {fg: "#1D1F21", bg: "#C4C9C6"}, + command_bar_text: {fg: "#C4C9C6"}, + highlight: {fg: "black", bg: "yellow"}, + status: { + error: {fg: "white", bg: "red"}, + warn: {} + info: {} + }, + table: { + split_line: {fg: "#404040"}, + selected_cell: {}, + selected_row: {}, + selected_column: {}, + cursor: true, + line_head_top: true, + line_head_bottom: true, + line_shift: true, + line_index: true, + }, + config: { + border_color: {fg: "white"} + cursor_color: {fg: "black", bg: "light_yellow"} + }, + } + + history: { + max_size: 100_000 # Session has to be reloaded for this to take effect + sync_on_enter: false # Enable to share history between multiple sessions, else you have to close the session to write history to file + file_format: "plaintext" # "sqlite" or "plaintext" + isolation: false # only available with sqlite file_format. true enables history isolation, false disables it. true will allow the history to be isolated to the current session using up/down arrows. false will allow the history to be shared across all sessions. + } + + completions: { + case_sensitive: false # set to true to enable case-sensitive completions + quick: true # set this to false to prevent auto-selecting completions when only one remains + partial: true # set this to false to prevent partial filling of the prompt + algorithm: "fuzzy" # prefix or fuzzy + external: { + enable: true # set to false to prevent nushell looking into $env.PATH to find more suggestions, `false` recommended for WSL users as this look up may be very slow + max_results: 100 # setting it lower can improve completion performance at the cost of omitting some options + completer: null # check 'carapace_completer' above as an example + } + } + + filesize: { + metric: true # true => KB, MB, GB (ISO standard), false => KiB, MiB, GiB (Windows standard) + format: "auto" # b, kb, kib, mb, mib, gb, gib, tb, tib, pb, pib, eb, eib, auto + } + + cursor_shape: { + emacs: line # block, underscore, line, blink_block, blink_underscore, blink_line (line is the default) + vi_insert: line # block, underscore, line , blink_block, blink_underscore, blink_line (block is the default) + vi_normal: block # block, underscore, line, blink_block, blink_underscore, blink_line (underscore is the default) + } + + color_config: {} # if you want a more interesting theme, you can replace the empty record with `$dark_theme`, `$light_theme` or another custom record + use_grid_icons: true + footer_mode: "25" # always, never, number_of_rows, auto + float_precision: 2 # the precision for displaying floats in tables + buffer_editor: "" # command that will be used to edit the current line buffer with ctrl+o, if unset fallback to $env.EDITOR and $env.VISUAL + use_ansi_coloring: true + bracketed_paste: true # enable bracketed paste, currently useless on windows + edit_mode: emacs # emacs, vi + shell_integration: false # enables terminal shell integration. Off by default, as some terminals have issues with this. + render_right_prompt_on_last_line: false # true or false to enable or disable right prompt to be rendered on last line of the prompt. + + hooks: { + pre_prompt: [{ null }] # run before the prompt is shown + pre_execution: [{ null }] # run before the repl input is run + env_change: { + PWD: [{|before, after| null }] # run if the PWD environment is different since the last repl input + } + display_output: { + if (term size).columns >= 80 { + table -e + } else { + table + } + } + command_not_found: { null } # return an error message when a command is not found + } + + menus: [ + # Configuration for default nushell menus + # Note the lack of source parameter + { + name: completion_menu + only_buffer_difference: false + marker: "| " + type: { + layout: columnar + columns: 4 + col_width: 20 # Optional value. If missing all the screen width is used to calculate column width + col_padding: 2 + } + style: { + text: green + selected_text: green_reverse + description_text: yellow + } + } + { + name: history_menu + only_buffer_difference: true + marker: "? " + type: { + layout: list + page_size: 10 + } + style: { + text: green + selected_text: green_reverse + description_text: yellow + } + } + { + name: help_menu + only_buffer_difference: true + marker: "? " + type: { + layout: description + columns: 4 + col_width: 20 # Optional value. If missing all the screen width is used to calculate column width + col_padding: 2 + selection_rows: 4 + description_rows: 10 + } + style: { + text: green + selected_text: green_reverse + description_text: yellow + } + } + ] + + keybindings: [ + { + name: completion_menu + modifier: none + keycode: tab + mode: [emacs vi_normal vi_insert] + event: { + until: [ + { send: menu name: completion_menu } + { send: menunext } + ] + } + } + { + name: history_menu + modifier: control + keycode: char_r + mode: [emacs, vi_insert, vi_normal] + event: { send: menu name: history_menu } + } + { + name: help_menu + modifier: none + keycode: f1 + mode: [emacs, vi_insert, vi_normal] + event: { send: menu name: help_menu } + } + { + name: completion_previous_menu + modifier: shift + keycode: backtab + mode: [emacs, vi_normal, vi_insert] + event: { send: menuprevious } + } + { + name: next_page_menu + modifier: control + keycode: char_x + mode: emacs + event: { send: menupagenext } + } + { + name: undo_or_previous_page_menu + modifier: control + keycode: char_z + mode: emacs + event: { + until: [ + { send: menupageprevious } + { edit: undo } + ] + } + } + { + name: escape + modifier: none + keycode: escape + mode: [emacs, vi_normal, vi_insert] + event: { send: esc } # NOTE: does not appear to work + } + { + name: cancel_command + modifier: control + keycode: char_c + mode: [emacs, vi_normal, vi_insert] + event: { send: ctrlc } + } + { + name: quit_shell + modifier: control + keycode: char_d + mode: [emacs, vi_normal, vi_insert] + event: { send: ctrld } + } + { + name: clear_screen + modifier: control + keycode: char_l + mode: [emacs, vi_normal, vi_insert] + event: { send: clearscreen } + } + { + name: search_history + modifier: control + keycode: char_r + mode: [emacs, vi_normal, vi_insert] + event: { send: searchhistory } + } + { + name: open_command_editor + modifier: control + keycode: char_o + mode: [emacs, vi_normal, vi_insert] + event: { send: openeditor } + } + { + name: move_up + modifier: none + keycode: up + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: menuup} + {send: up} + ] + } + } + { + name: move_down + modifier: none + keycode: down + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: menudown} + {send: down} + ] + } + } + { + name: move_left + modifier: none + keycode: left + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: menuleft} + {send: left} + ] + } + } + { + name: move_right_or_take_history_hint + modifier: none + keycode: right + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: historyhintcomplete} + {send: menuright} + {send: right} + ] + } + } + { + name: move_one_word_left + modifier: control + keycode: left + mode: [emacs, vi_normal, vi_insert] + event: {edit: movewordleft} + } + { + name: move_one_word_right_or_take_history_hint + modifier: control + keycode: right + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: historyhintwordcomplete} + {edit: movewordright} + ] + } + } + { + name: move_to_line_start + modifier: none + keycode: home + mode: [emacs, vi_normal, vi_insert] + event: {edit: movetolinestart} + } + { + name: move_to_line_start + modifier: control + keycode: char_a + mode: [emacs, vi_normal, vi_insert] + event: {edit: movetolinestart} + } + { + name: move_to_line_end_or_take_history_hint + modifier: none + keycode: end + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: historyhintcomplete} + {edit: movetolineend} + ] + } + } + { + name: move_to_line_end_or_take_history_hint + modifier: control + keycode: char_e + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: historyhintcomplete} + {edit: movetolineend} + ] + } + } + { + name: move_to_line_start + modifier: control + keycode: home + mode: [emacs, vi_normal, vi_insert] + event: {edit: movetolinestart} + } + { + name: move_to_line_end + modifier: control + keycode: end + mode: [emacs, vi_normal, vi_insert] + event: {edit: movetolineend} + } + { + name: move_up + modifier: control + keycode: char_p + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: menuup} + {send: up} + ] + } + } + { + name: move_down + modifier: control + keycode: char_t + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + {send: menudown} + {send: down} + ] + } + } + { + name: delete_one_character_backward + modifier: none + keycode: backspace + mode: [emacs, vi_insert] + event: {edit: backspace} + } + { + name: delete_one_word_backward + modifier: control + keycode: backspace + mode: [emacs, vi_insert] + event: {edit: backspaceword} + } + { + name: delete_one_character_forward + modifier: none + keycode: delete + mode: [emacs, vi_insert] + event: {edit: delete} + } + { + name: delete_one_character_forward + modifier: control + keycode: delete + mode: [emacs, vi_insert] + event: {edit: delete} + } + { + name: delete_one_character_forward + modifier: control + keycode: char_h + mode: [emacs, vi_insert] + event: {edit: backspace} + } + { + name: delete_one_word_backward + modifier: control + keycode: char_w + mode: [emacs, vi_insert] + event: {edit: backspaceword} + } + { + name: move_left + modifier: none + keycode: backspace + mode: vi_normal + event: {edit: moveleft} + } + { + name: newline_or_run_command + modifier: none + keycode: enter + mode: emacs + event: {send: enter} + } + { + name: move_left + modifier: control + keycode: char_b + mode: emacs + event: { + until: [ + {send: menuleft} + {send: left} + ] + } + } + { + name: move_right_or_take_history_hint + modifier: control + keycode: char_f + mode: emacs + event: { + until: [ + {send: historyhintcomplete} + {send: menuright} + {send: right} + ] + } + } + { + name: redo_change + modifier: control + keycode: char_g + mode: emacs + event: {edit: redo} + } + { + name: undo_change + modifier: control + keycode: char_z + mode: emacs + event: {edit: undo} + } + { + name: paste_before + modifier: control + keycode: char_y + mode: emacs + event: {edit: pastecutbufferbefore} + } + { + name: cut_word_left + modifier: control + keycode: char_w + mode: emacs + event: {edit: cutwordleft} + } + { + name: cut_line_to_end + modifier: control + keycode: char_k + mode: emacs + event: {edit: cuttoend} + } + { + name: cut_line_from_start + modifier: control + keycode: char_u + mode: emacs + event: {edit: cutfromstart} + } + { + name: swap_graphemes + modifier: control + keycode: char_t + mode: emacs + event: {edit: swapgraphemes} + } + { + name: move_one_word_left + modifier: alt + keycode: left + mode: emacs + event: {edit: movewordleft} + } + { + name: move_one_word_right_or_take_history_hint + modifier: alt + keycode: right + mode: emacs + event: { + until: [ + {send: historyhintwordcomplete} + {edit: movewordright} + ] + } + } + { + name: move_one_word_left + modifier: alt + keycode: char_b + mode: emacs + event: {edit: movewordleft} + } + { + name: move_one_word_right_or_take_history_hint + modifier: alt + keycode: char_f + mode: emacs + event: { + until: [ + {send: historyhintwordcomplete} + {edit: movewordright} + ] + } + } + { + name: delete_one_word_forward + modifier: alt + keycode: delete + mode: emacs + event: {edit: deleteword} + } + { + name: delete_one_word_backward + modifier: alt + keycode: backspace + mode: emacs + event: {edit: backspaceword} + } + { + name: delete_one_word_backward + modifier: alt + keycode: char_m + mode: emacs + event: {edit: backspaceword} + } + { + name: cut_word_to_right + modifier: alt + keycode: char_d + mode: emacs + event: {edit: cutwordright} + } + { + name: upper_case_word + modifier: alt + keycode: char_u + mode: emacs + event: {edit: uppercaseword} + } + { + name: lower_case_word + modifier: alt + keycode: char_l + mode: emacs + event: {edit: lowercaseword} + } + { + name: capitalize_char + modifier: alt + keycode: char_c + mode: emacs + event: {edit: capitalizechar} + } + ] +} + diff --git a/modules/nushell/default.nix b/modules/nushell/default.nix new file mode 100644 index 0000000..dbbc391 --- /dev/null +++ b/modules/nushell/default.nix @@ -0,0 +1,16 @@ +{ pkgs, lib, config, ... }: + +with lib; +let cfg = config.modules.nushell; + +in { + options.modules.nushell = { enable = mkEnableOption "nushell"; }; + config = mkIf cfg.enable { + programs.nushell = { + enable = true; + configFile.source = ./config.nu; + envFile.source = ./env.nu; + extraConfig = buildins.readFile ./extra.nu; + } + }; +} diff --git a/modules/nushell/env.nu b/modules/nushell/env.nu new file mode 100644 index 0000000..51ed547 --- /dev/null +++ b/modules/nushell/env.nu @@ -0,0 +1,82 @@ +# Nushell Environment Config File +# +# version = 0.83.1 + +def create_left_prompt [] { + mut home = "" + try { + if $nu.os-info.name == "windows" { + $home = $env.USERPROFILE + } else { + $home = $env.HOME + } + } + + let dir = ([ + ($env.PWD | str substring 0..($home | str length) | str replace $home "~"), + ($env.PWD | str substring ($home | str length)..) + ] | str join) + + let path_color = (if (is-admin) { ansi red_bold } else { ansi green_bold }) + let separator_color = (if (is-admin) { ansi light_red_bold } else { ansi light_green_bold }) + let path_segment = $"($path_color)($dir)" + + $path_segment | str replace --all (char path_sep) $"($separator_color)/($path_color)" +} + +def create_right_prompt [] { + # create a right prompt in magenta with green separators and am/pm underlined + let time_segment = ([ + (ansi reset) + (ansi magenta) + (date now | date format '%Y/%m/%d %r') + ] | str join | str replace --all "([/:])" $"(ansi green)${1}(ansi magenta)" | + str replace --all "([AP]M)" $"(ansi magenta_underline)${1}") + + let last_exit_code = if ($env.LAST_EXIT_CODE != 0) {([ + (ansi rb) + ($env.LAST_EXIT_CODE) + ] | str join) + } else { "" } + + ([$last_exit_code, (char space), $time_segment] | str join) +} + +# Use nushell functions to define your right and left prompt +$env.PROMPT_COMMAND = {|| create_left_prompt } +# $env.PROMPT_COMMAND_RIGHT = {|| create_right_prompt } + +# The prompt indicators are environmental variables that represent +# the state of the prompt +$env.PROMPT_INDICATOR = {|| " > " } +$env.PROMPT_INDICATOR_VI_INSERT = {|| " : " } +$env.PROMPT_INDICATOR_VI_NORMAL = {|| " > " } +$env.PROMPT_MULTILINE_INDICATOR = {|| "::: " } + +# Specifies how environment variables are: +# - converted from a string to a value on Nushell startup (from_string) +# - converted from a value back to a string when running external commands (to_string) +# Note: The conversions happen *after* config.nu is loaded +$env.ENV_CONVERSIONS = { + "PATH": { + from_string: { |s| $s | split row (char esep) | path expand --no-symlink } + to_string: { |v| $v | path expand --no-symlink | str join (char esep) } + } + "Path": { + from_string: { |s| $s | split row (char esep) | path expand --no-symlink } + to_string: { |v| $v | path expand --no-symlink | str join (char esep) } + } +} + +# Directories to search for scripts when calling source or use +$env.NU_LIB_DIRS = [ + # ($nu.default-config-dir | path join 'scripts') # add /scripts +] + +# Directories to search for plugin binaries when calling register +$env.NU_PLUGIN_DIRS = [ + # ($nu.default-config-dir | path join 'plugins') # add /plugins +] + +# To add entries to PATH (on Windows you might use Path), you can use the following pattern: +# $env.PATH = ($env.PATH | split row (char esep) | prepend '/some/path') diff --git a/modules/nushell/extra.nu b/modules/nushell/extra.nu new file mode 100644 index 0000000..0d58793 --- /dev/null +++ b/modules/nushell/extra.nu @@ -0,0 +1,16 @@ +#source ~/.cache/starship/init.nu +#source ~/.zoxide.nu +#alias cringe = sudo bootctl set-oneshot auto-windows +#alias fetch = neofetch +#alias ff = firefox +#alias gc = sudo nix-collect-garbage -d +#alias js = jj status +#alias jd = jj diff +#alias pu = pueue +#alias rb = sudo nice -n19 nixos-rebuild boot --flake ~/projects/NOflake/ +#alias rs = sudo nice -n19 nixos-rebuild switch --flake ~/projects/NOflake/ +#alias t = task +#alias ts = tailscale +#alias tss = tailscale status +#alias tsx = tailscale exit-node list +#alias zl = zellij diff --git a/modules/nvim/default.nix b/modules/nvim/default.nix new file mode 100644 index 0000000..65cad85 --- /dev/null +++ b/modules/nvim/default.nix @@ -0,0 +1,97 @@ +{ lib, config, pkgs, ... }: +with lib; +let + cfg = config.modules.nvim; + # Source my theme + jabuti-nvim = pkgs.vimUtils.buildVimPlugin { + name = "jabuti-nvim"; + src = pkgs.fetchFromGitHub { + owner = "jabuti-theme"; + repo = "jabuti-nvim"; + rev = "17f1b94cbf1871a89cdc264e4a8a2b3b4f7c76d2"; + sha256 = "sha256-iPjwx/rTd98LUPK1MUfqKXZhQ5NmKx/rN8RX1PIuDFA="; + }; + }; +in { + options.modules.nvim = { enable = mkEnableOption "nvim"; }; + config = mkIf cfg.enable { + + home.file.".config/nvim/settings.lua".source = ./init.lua; + + home.packages = with pkgs; [ + nixfmt # Nix + sumneko-lua-language-server stylua # Lua + ]; + + programs.zsh = { + initExtra = '' + export EDITOR="nvim" + ''; + + shellAliases = { + v = "nvim -i NONE"; + nvim = "nvim -i NONE"; + }; + }; + + programs.neovim = { + enable = true; + plugins = with pkgs.vimPlugins; [ + vim-nix + plenary-nvim + { + plugin = zk-nvim; + config = "require('zk').setup()"; + } + { + plugin = jabuti-nvim; + config = "colorscheme jabuti"; + } + { + plugin = impatient-nvim; + config = "lua require('impatient')"; + } + { + plugin = lualine-nvim; + config = "lua require('lualine').setup()"; + } + { + plugin = telescope-nvim; + config = "lua require('telescope').setup()"; + } + { + plugin = indent-blankline-nvim; + config = "lua require('indent_blankline').setup()"; + } + { + plugin = nvim-lspconfig; + config = '' + lua << EOF + require('lspconfig').rust_analyzer.setup{} + require('lspconfig').sumneko_lua.setup{} + require('lspconfig').rnix.setup{} + require('lspconfig').zk.setup{} + EOF + ''; + } + { + plugin = nvim-treesitter; + config = '' + lua << EOF + require('nvim-treesitter.configs').setup { + highlight = { + enable = true, + additional_vim_regex_highlighting = false, + }, + } + EOF + ''; + } + ]; + + extraConfig = '' + luafile ~/.config/nvim/settings.lua + ''; + }; + }; +} diff --git a/modules/nvim/init.lua b/modules/nvim/init.lua new file mode 100644 index 0000000..a34d108 --- /dev/null +++ b/modules/nvim/init.lua @@ -0,0 +1,83 @@ +local o = vim.opt +local g = vim.g + +-- Autocmds +vim.cmd [[ +augroup CursorLine + au! + au VimEnter * setlocal cursorline + au WinEnter * setlocal cursorline + au BufWinEnter * setlocal cursorline + au WinLeave * setlocal nocursorline +augroup END + +autocmd FileType nix setlocal shiftwidth=4 +]] + +-- Keybinds +local map = vim.api.nvim_set_keymap +local opts = { silent = true, noremap = true } + +map("n", "", "h", opts) +map("n", "", "j", opts) +map("n", "", "k", opts) +map("n", "", "l", opts) +map('n', '', ':Telescope live_grep ', opts) +map('n', '', ':Telescope find_files ', opts) +map('n', 'j', 'gj', opts) +map('n', 'k', 'gk', opts) +map('n', ';', ':', { noremap = true } ) + +g.mapleader = ' ' + +-- Performance +o.lazyredraw = true; +o.shell = "zsh" +o.shadafile = "NONE" + +-- Colors +o.termguicolors = true + +-- Undo files +o.undofile = true + +-- Indentation +o.smartindent = true +o.tabstop = 4 +o.shiftwidth = 4 +o.shiftround = true +o.expandtab = true +o.scrolloff = 3 + +-- Set clipboard to use system clipboard +o.clipboard = "unnamedplus" + +-- Use mouse +o.mouse = "a" + +-- Nicer UI settings +o.cursorline = true +o.relativenumber = true +o.number = true + +-- Get rid of annoying viminfo file +o.viminfo = "" +o.viminfofile = "NONE" + +-- Miscellaneous quality of life +o.ignorecase = true +o.ttimeoutlen = 5 +o.hidden = true +o.shortmess = "atI" +o.wrap = false +o.backup = false +o.writebackup = false +o.errorbells = false +o.swapfile = false +o.showmode = false +o.laststatus = 3 +o.pumheight = 6 +o.splitright = true +o.splitbelow = true +o.completeopt = "menuone,noselect" + diff --git a/modules/packages/default.nix b/modules/packages/default.nix new file mode 100644 index 0000000..fb782ed --- /dev/null +++ b/modules/packages/default.nix @@ -0,0 +1,34 @@ +{ pkgs, lib, config, ... }: + +with lib; +let cfg = + config.modules.packages; + screen = pkgs.writeShellScriptBin "screen" ''${builtins.readFile ./screen}''; + bandw = pkgs.writeShellScriptBin "bandw" ''${builtins.readFile ./bandw}''; + maintenance = pkgs.writeShellScriptBin "maintenance" ''${builtins.readFile ./maintenance}''; + +in { + options.modules.packages = { enable = mkEnableOption "packages"; }; + config = mkIf cfg.enable { + home.packages = with pkgs; [ + # C + gcc + gdb + gnumake + clang + clang-tools + # nix + nil + alejandra + # cli tools + bat + eza + fzf + ripgrep + unzip + tealdeer + ffmpeg + btop + ]; + }; +} diff --git a/modules/packages/maintenance b/modules/packages/maintenance new file mode 100755 index 0000000..4d10d6d --- /dev/null +++ b/modules/packages/maintenance @@ -0,0 +1,8 @@ +sudo nix-collect-garbage -d +sudo nix store verify --all +sudo nix store repair --all +cd $NIXOS_CONFIG_DIR +nix flake update +sudo nixos-rebuild switch --flake . --upgrade +nix run nixpkgs#bleachbit +nix run nixpkgs#pcmanfm diff --git a/modules/system/configuration.nix b/modules/system/configuration.nix new file mode 100755 index 0000000..d4627ef --- /dev/null +++ b/modules/system/configuration.nix @@ -0,0 +1,160 @@ +{ config, pkgs, inputs, ... }: + +{ + # Remove unecessary preinstalled packages + environment.defaultPackages = [ ]; + services.xserver.desktopManager.xterm.enable = false; + + programs.zsh.enable = true; + + # Laptop-specific packages (the other ones are installed in `packages.nix`) + environment.systemPackages = with pkgs; [ + acpi tlp git + ]; + + # Install fonts + fonts = { + packages = with pkgs; [ + jetbrains-mono + roboto + openmoji-color + (nerdfonts.override { fonts = [ "JetBrainsMono" ]; }) + ]; + + fontconfig = { + hinting.autohint = true; + defaultFonts = { + emoji = [ "OpenMoji Color" ]; + }; + }; + }; + + + # Wayland stuff: enable XDG integration, allow sway to use brillo +xdg = { + portal = { + enable = true; + extraPortals = with pkgs; [ + xdg-desktop-portal-wlr + xdg-desktop-portal-gtk + ]; + config = { + common = { + default = "gtk"; + }; + preferred = { + "org.freedesktop.impl.portal.Screencast" = "wlr"; + }; + }; + }; +}; + + + # Nix settings, auto cleanup and enable flakes + nix = { + settings.auto-optimise-store = true; + settings.allowed-users = [ "jet" ]; + gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 7d"; + }; + extraOptions = '' + experimental-features = nix-command flakes + keep-outputs = true + keep-derivations = true + ''; + }; + + # Boot settings: clean /tmp/, latest kernel and enable bootloader + boot = { + tmp.cleanOnBoot = true; + loader = { + systemd-boot.enable = true; + systemd-boot.editor = false; + efi.canTouchEfiVariables = true; + timeout = 0; + }; + }; + + # Set up locales (timezone and keyboard layout) + time.timeZone = "America/Los_Angeles"; + i18n.defaultLocale = "en_US.UTF-8"; + console = { + font = "Lat2-Terminus16"; + keyMap = "us"; + }; + + # Set up user and enable sudo + users.users.jet = { + isNormalUser = true; + extraGroups = [ "input" "wheel" "networkmanager"]; + shell = pkgs.zsh; + }; + + # Set up networking and secure it + networking = { + # Enable networking + networkmanager.enable = true; + firewall = { + #enable = true; + #allowedTCPPorts = [ 443 80 ]; + #allowedUDPPorts = [ 443 80 44857 ]; + #allowPing = false; + }; + }; + + # Set environment variables + environment.variables = { + NIXOS_CONFIG = "$HOME/.config/nixos/configuration.nix"; + NIXOS_CONFIG_DIR = "$HOME/.config/nixos/"; + XDG_DATA_HOME = "$HOME/.local/share"; + PASSWORD_STORE_DIR = "$HOME/.local/share/password-store"; + GTK_RC_FILES = "$HOME/.local/share/gtk-1.0/gtkrc"; + GTK2_RC_FILES = "$HOME/.local/share/gtk-2.0/gtkrc"; + MOZ_ENABLE_WAYLAND = "1"; + ZK_NOTEBOOK_DIR = "$HOME/stuff/notes/"; + EDITOR = "nvim"; + DIRENV_LOG_FORMAT = ""; + ANKI_WAYLAND = "1"; + DISABLE_QT5_COMPAT = "0"; + GTK_USE_PORTAL = "1"; + }; + + # Security + security = { + # Extra security + protectKernelImage = true; + }; + # Allow unfree package + nixpkgs.config.allowUnfree = true; + + # Enable sound with pipewire. + sound.enable = true; + hardware.pulseaudio.enable = false; + 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; + + # use the example session manager (no others are packaged yet so this is enabled by default, + # no need to redefine it in your config for now) + #media-session.enable = true; + }; + + # enable pulseaudio, enable opengl (for Wayland) + hardware = { + bluetooth.enable = true; + opengl = { + enable = true; + driSupport = true; + }; + }; + + # Do not touch + system.stateVersion = "23.11"; +} diff --git a/modules/template.nix b/modules/template.nix new file mode 100644 index 0000000..ce7f29b --- /dev/null +++ b/modules/template.nix @@ -0,0 +1,10 @@ +{ pkgs, lib, config, ... }: + +with lib; +let cfg = config.modules.PROGRAM; + +in { + options.modules.PROGRAM = { enable = mkEnableOption "PROGRAM"; }; + config = mkIf cfg.enable { + }; +} diff --git a/modules/wofi/default.nix b/modules/wofi/default.nix new file mode 100644 index 0000000..956dc36 --- /dev/null +++ b/modules/wofi/default.nix @@ -0,0 +1,11 @@ +{ pkgs, lib, config, ... }: + +with lib; +let cfg = config.modules.wofi; + +in { + options.modules.wofi = { enable = mkEnableOption "wofi"; }; + config = mkIf cfg.enable { + home.file.".config/wofi.css".source = ./wofi.css; + }; +} diff --git a/modules/wofi/wofi.css b/modules/wofi/wofi.css new file mode 100644 index 0000000..6f2ca04 --- /dev/null +++ b/modules/wofi/wofi.css @@ -0,0 +1,35 @@ +* { + all: unset; + font-family: "JetBrainsMono"; + font-size: 16px; +} + +#window { + background-color: #292a37; + border-radius: 12px; +} + +#outer-box { + background-color: #292a37; + border: 4px solid #44465c; + border-radius: 12px; +} + +#input{ + margin: 1rem; + padding: 0.5rem; + border-radius: 10px; + background-color: #303241; +} + +#entry { + margin: 0.25rem 0.75rem 0.25rem 0.75rem; + padding: 0.25rem 0.75rem 0.25rem 0.75rem; + color: #9699b7; + border-radius: 8px; +} + +#entry:selected { + background-color: #303241; + color: #d9e0ee; +} diff --git a/modules/xdg/default.nix b/modules/xdg/default.nix new file mode 100644 index 0000000..82109b0 --- /dev/null +++ b/modules/xdg/default.nix @@ -0,0 +1,21 @@ +{ pkgs, lib, config, ... }: + +with lib; +let cfg = config.modules.xdg; + +in { + options.modules.xdg = { enable = mkEnableOption "xdg"; }; + config = mkIf cfg.enable { + xdg.userDirs = { + enable = true; + documents = "$HOME/stuff/other/"; + download = "$HOME/stuff/other/"; + videos = "$HOME/stuff/other/"; + music = "$HOME/stuff/music/"; + pictures = "$HOME/stuff/pictures/"; + desktop = "$HOME/stuff/other/"; + publicShare = "$HOME/stuff/other/"; + templates = "$HOME/stuff/other/"; + }; + }; +} diff --git a/modules/zsh/default.nix b/modules/zsh/default.nix new file mode 100755 index 0000000..aa5aed8 --- /dev/null +++ b/modules/zsh/default.nix @@ -0,0 +1,79 @@ +{ pkgs, lib, config, ... }: +with lib; +let cfg = config.modules.zsh; +in { + options.modules.zsh = { enable = mkEnableOption "zsh"; }; + + config = mkIf cfg.enable { + home.packages = [ + pkgs.zsh + ]; + + programs.zsh = { + enable = true; + + # directory to put config files in + dotDir = ".config/zsh"; + + enableCompletion = true; + autosuggestion.enable = true; + syntaxHighlighting.enable = true; + + # .zshrc + initExtra = '' + PROMPT="%F{blue}%m %~%b "$'\n'"%(?.%F{green}%Bλ%b |.%F{red}?) %f" + + export PASSWORD_STORE_DIR="$XDG_DATA_HOME/password-store"; + export ZK_NOTEBOOK_DIR="~/stuff/notes"; + export DIRENV_LOG_FORMAT=""; + bindkey '^ ' autosuggest-accept + + edir() { tar -cz $1 | age -p > $1.tar.gz.age && rm -rf $1 &>/dev/null && echo "$1 encrypted" } + ddir() { age -d $1 | tar -xz && rm -rf $1 &>/dev/null && echo "$1 decrypted" } + ''; + + # basically aliases for directories: + # `cd ~dots` will cd into ~/.config/nixos + dirHashes = { + dots = "$HOME/.config/nixos"; + stuff = "$HOME/stuff"; + media = "/run/media/$USER"; + junk = "$HOME/stuff/other"; + }; + + # Tweak settings for history + history = { + save = 1000; + size = 1000; + path = "$HOME/.cache/zsh_history"; + }; + + # Set some aliases + shellAliases = { + c = "clear"; + mkdir = "mkdir -vp"; + rm = "rm -rifv"; + mv = "mv -iv"; + cp = "cp -riv"; + cat = "bat --paging=never --style=plain"; + ls = "exa -a --icons"; + tree = "exa --tree --icons"; + nd = "nix develop -c $SHELL"; + rebuild = "sudo nixos-rebuild switch --flake $NIXOS_CONFIG_DIR --fast; notify-send 'Rebuild complete\!'"; + }; + + # Source all plugins, nix-style + plugins = [ + { + name = "auto-ls"; + src = pkgs.fetchFromGitHub { + owner = "notusknot"; + repo = "auto-ls"; + rev = "62a176120b9deb81a8efec992d8d6ed99c2bd1a1"; + sha256 = "08wgs3sj7hy30x03m8j6lxns8r2kpjahb9wr0s0zyzrmr4xwccj0"; + }; + } + ]; + }; +}; +} From 03985749c670dd18d2b3dd7a5664c59c71d5999a Mon Sep 17 00:00:00 2001 From: Jet Pham <55770902+jetpham@users.noreply.github.com> Date: Fri, 22 Mar 2024 23:43:34 -0700 Subject: [PATCH 009/211] first round of bug hunting --- flake.nix | 2 +- hosts/desktop/user.nix | 1 - modules/default.nix | 1 - modules/eww/eww.yuck | 2 +- modules/hyprland/hyprland.conf | 9 ++++----- modules/kitty/default.nix | 4 ++-- 6 files changed, 8 insertions(+), 11 deletions(-) diff --git a/flake.nix b/flake.nix index ba885f1..8559f43 100644 --- a/flake.nix +++ b/flake.nix @@ -23,7 +23,7 @@ mkSystem = pkgs: system: hostname: let hardwareConfig = { - "laptop" = "${inputs.nixos-hardware}.nixosModules.lenovo-thinkpad-x1-6th-gen"; + "laptop" = nixos-hardware.nixosModules.lenovo-thinkpad-x1-6th-gen; # Add other hostnames and their respective hardware configurations here }; in diff --git a/hosts/desktop/user.nix b/hosts/desktop/user.nix index 8db5f18..5b3df77 100644 --- a/hosts/desktop/user.nix +++ b/hosts/desktop/user.nix @@ -5,7 +5,6 @@ config.modules = { # gui firefox.enable = true; - foot.enable = true; eww.enable = true; dunst.enable = true; hyprland.enable = true; diff --git a/modules/default.nix b/modules/default.nix index 4e52b9a..c6dde50 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -5,7 +5,6 @@ imports = [ # gui ./firefox - ./foot ./eww ./dunst ./hyprland diff --git a/modules/eww/eww.yuck b/modules/eww/eww.yuck index 0b85bde..ec30798 100644 --- a/modules/eww/eww.yuck +++ b/modules/eww/eww.yuck @@ -223,7 +223,7 @@ (defwidget launch [] (button :class "reg-btn launchbutton" :hexpand true - :onclick "wofi --show run --xoffset=1670 --yoffset=12 --width=230px --height=984 --style=$HOME/.config/wofi.css --term=footclient --prompt=Run &" "") + :onclick "wofi --show run --xoffset=1670 --yoffset=12 --width=230px --height=984 --style=$HOME/.config/wofi.css --term=kittyclient --prompt=Run &" "") ) (defwidget powerbutton [] diff --git a/modules/hyprland/hyprland.conf b/modules/hyprland/hyprland.conf index f0edd2f..bda3854 100644 --- a/modules/hyprland/hyprland.conf +++ b/modules/hyprland/hyprland.conf @@ -2,7 +2,7 @@ monitor=eDP-1,1920x1080@60,0x0,1 monitor=eDP-1,addreserved,0,0,48,0 exec-once=swaybg -i $NIXOS_CONFIG_DIR/pics/wallpaper.png -exec-once=foot --server +exec-once=kitty --server exec-once=wlsunset -l -23 -L -46 exec-once=eww daemon exec-once=eww open bar @@ -48,7 +48,7 @@ dwindle { # example window rules # for windows named/classed as abc and xyz windowrule=float,move 0 0,pqiv -windowrule=float,foot-notes +windowrule=float,kitty-notes #windowrule=size 420 69,abc #windowrule=tile,xyz #windowrule=float,abc @@ -56,11 +56,10 @@ windowrule=float,foot-notes #windowrule=monitor 0,xyz # example binds -bind=ALT,Return,exec,footclient +bind=ALT,Return,exec,kittyclient bind=ALTSHIFT,Q,killactive, bind=ALT,V,togglefloating, -bind=ALT,R,exec,wofi --show run --xoffset=1670 --yoffset=12 --width=230px --height=984 --style=$HOME/.config/wofi.css --term=footclient --prompt=Run -bind=ALT,N,exec,cd ~/stuff/notes && footclient -a foot-notes sh -c "nvim ~/stuff/notes/$(date '+%Y-%m-%d').md" +bind=ALT,R,exec,wofi --show run --xoffset=1670 --yoffset=12 --width=230px --height=984 --style=$HOME/.config/wofi.css --term=kittyclient --prompt=Run bind=ALT,F,fullscreen,0 bind=ALT,h,movefocus,l diff --git a/modules/kitty/default.nix b/modules/kitty/default.nix index 4b9fde2..6d8ca8d 100644 --- a/modules/kitty/default.nix +++ b/modules/kitty/default.nix @@ -1,10 +1,10 @@ { pkgs, lib, config, ... }: with lib; -let cfg = config.modules.foot; +let cfg = config.modules.kitty; in { - options.modules.foot = { enable = mkEnableOption "foot"; }; + options.modules.kitty = { enable = mkEnableOption "kitty"; }; config = mkIf cfg.enable { programs.kitty = { enable = true; From 0a759878ec091ea5ee4ac3c0738d3ae4ded7fb92 Mon Sep 17 00:00:00 2001 From: Jet Pham <55770902+jetpham@users.noreply.github.com> Date: Fri, 22 Mar 2024 23:47:02 -0700 Subject: [PATCH 010/211] something working! --- modules/default.nix | 3 ++- modules/firefox/default.nix | 2 +- modules/kitty/default.nix | 2 +- modules/nushell/default.nix | 4 ++-- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/modules/default.nix b/modules/default.nix index c6dde50..77a2de4 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -7,12 +7,13 @@ ./firefox ./eww ./dunst + ./kitty ./hyprland ./wofi # cli ./nvim - ./zsh + ./nushell ./git ./direnv diff --git a/modules/firefox/default.nix b/modules/firefox/default.nix index ed756b6..168ed2b 100644 --- a/modules/firefox/default.nix +++ b/modules/firefox/default.nix @@ -89,7 +89,7 @@ in { }; # userChome.css to make it look better - userChrome = buildins.readFile ./userChrome.css; + userChrome = builtins.readFile ./userChrome.css; }; }; }; diff --git a/modules/kitty/default.nix b/modules/kitty/default.nix index 6d8ca8d..c8108c8 100644 --- a/modules/kitty/default.nix +++ b/modules/kitty/default.nix @@ -8,7 +8,7 @@ in { config = mkIf cfg.enable { programs.kitty = { enable = true; - extraConfig = buildins.readFile ./kitty.conf; + extraConfig = builtins.readFile ./kitty.conf; }; }; } diff --git a/modules/nushell/default.nix b/modules/nushell/default.nix index dbbc391..7d46a87 100644 --- a/modules/nushell/default.nix +++ b/modules/nushell/default.nix @@ -10,7 +10,7 @@ in { enable = true; configFile.source = ./config.nu; envFile.source = ./env.nu; - extraConfig = buildins.readFile ./extra.nu; - } + extraConfig = builtins.readFile ./extra.nu; + }; }; } From f4f9a0029647ef4c4721b0ad00a3c8558d89c64d Mon Sep 17 00:00:00 2001 From: Jet Pham <55770902+jetpham@users.noreply.github.com> Date: Thu, 4 Jul 2024 05:19:21 +0000 Subject: [PATCH 011/211] uh --- hosts/desktop/hardware-configuration.nix | 31 ---------- hosts/desktop/user.nix | 24 ------- modules/nvim/default.nix | 2 +- modules/nvim/init.lua | 2 +- modules/packages/default.nix | 6 -- modules/system/configuration.nix | 4 +- modules/zsh/default.nix | 79 ------------------------ 7 files changed, 4 insertions(+), 144 deletions(-) delete mode 100644 hosts/desktop/hardware-configuration.nix delete mode 100644 hosts/desktop/user.nix delete mode 100755 modules/zsh/default.nix diff --git a/hosts/desktop/hardware-configuration.nix b/hosts/desktop/hardware-configuration.nix deleted file mode 100644 index 6c7a573..0000000 --- a/hosts/desktop/hardware-configuration.nix +++ /dev/null @@ -1,31 +0,0 @@ -# USE YOUR OWN -{ config, lib, pkgs, modulesPath, ... }: -{ - imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; - - boot = { - initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; - initrd.kernelModules = [ "amdgpu" ]; - kernelModules = [ "wireguard" "kvm-amd" "msr" ]; - extraModulePackages = [ ]; - }; - - hardware.opengl.extraPackages = with pkgs; [ - rocm-opencl-icd - rocm-opencl-runtime - ]; - - fileSystems."/" = { - device = "/dev/disk/by-uuid/bd1e247e-9db1-4871-ae5a-f1d9dd0d09fb"; - fsType = "ext4"; - }; - - fileSystems."/boot" = { - device = "/dev/disk/by-uuid/62D7-547D"; - fsType = "vfat"; - }; - - swapDevices = [ { device = "/dev/disk/by-uuid/e8eac985-dcd4-4f52-8681-751e13b37e28"; } ]; - - powerManagement.cpuFreqGovernor = lib.mkDefault "performance"; -} diff --git a/hosts/desktop/user.nix b/hosts/desktop/user.nix deleted file mode 100644 index 5b3df77..0000000 --- a/hosts/desktop/user.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ config, lib, inputs, ...}: - -{ - imports = [ ../../modules/default.nix ]; - config.modules = { - # gui - firefox.enable = true; - eww.enable = true; - dunst.enable = true; - hyprland.enable = true; - wofi.enable = true; - - # cli - nvim.enable = true; - zsh.enable = true; - git.enable = true; - gpg.enable = true; - direnv.enable = true; - - # system - xdg.enable = true; - packages.enable = true; - }; -} diff --git a/modules/nvim/default.nix b/modules/nvim/default.nix index 65cad85..a5013bd 100644 --- a/modules/nvim/default.nix +++ b/modules/nvim/default.nix @@ -23,7 +23,7 @@ in { sumneko-lua-language-server stylua # Lua ]; - programs.zsh = { + programs.nushell = { initExtra = '' export EDITOR="nvim" ''; diff --git a/modules/nvim/init.lua b/modules/nvim/init.lua index a34d108..4da3afa 100644 --- a/modules/nvim/init.lua +++ b/modules/nvim/init.lua @@ -32,7 +32,7 @@ g.mapleader = ' ' -- Performance o.lazyredraw = true; -o.shell = "zsh" +o.shell = "nushell" o.shadafile = "NONE" -- Colors diff --git a/modules/packages/default.nix b/modules/packages/default.nix index fb782ed..0a09f31 100644 --- a/modules/packages/default.nix +++ b/modules/packages/default.nix @@ -11,12 +11,6 @@ in { options.modules.packages = { enable = mkEnableOption "packages"; }; config = mkIf cfg.enable { home.packages = with pkgs; [ - # C - gcc - gdb - gnumake - clang - clang-tools # nix nil alejandra diff --git a/modules/system/configuration.nix b/modules/system/configuration.nix index d4627ef..7d80d8d 100755 --- a/modules/system/configuration.nix +++ b/modules/system/configuration.nix @@ -5,7 +5,7 @@ environment.defaultPackages = [ ]; services.xserver.desktopManager.xterm.enable = false; - programs.zsh.enable = true; + programs.nushell.enable = true; # Laptop-specific packages (the other ones are installed in `packages.nix`) environment.systemPackages = with pkgs; [ @@ -89,7 +89,7 @@ xdg = { users.users.jet = { isNormalUser = true; extraGroups = [ "input" "wheel" "networkmanager"]; - shell = pkgs.zsh; + shell = pkgs.nushell; }; # Set up networking and secure it diff --git a/modules/zsh/default.nix b/modules/zsh/default.nix deleted file mode 100755 index aa5aed8..0000000 --- a/modules/zsh/default.nix +++ /dev/null @@ -1,79 +0,0 @@ -{ pkgs, lib, config, ... }: -with lib; -let cfg = config.modules.zsh; -in { - options.modules.zsh = { enable = mkEnableOption "zsh"; }; - - config = mkIf cfg.enable { - home.packages = [ - pkgs.zsh - ]; - - programs.zsh = { - enable = true; - - # directory to put config files in - dotDir = ".config/zsh"; - - enableCompletion = true; - autosuggestion.enable = true; - syntaxHighlighting.enable = true; - - # .zshrc - initExtra = '' - PROMPT="%F{blue}%m %~%b "$'\n'"%(?.%F{green}%Bλ%b |.%F{red}?) %f" - - export PASSWORD_STORE_DIR="$XDG_DATA_HOME/password-store"; - export ZK_NOTEBOOK_DIR="~/stuff/notes"; - export DIRENV_LOG_FORMAT=""; - bindkey '^ ' autosuggest-accept - - edir() { tar -cz $1 | age -p > $1.tar.gz.age && rm -rf $1 &>/dev/null && echo "$1 encrypted" } - ddir() { age -d $1 | tar -xz && rm -rf $1 &>/dev/null && echo "$1 decrypted" } - ''; - - # basically aliases for directories: - # `cd ~dots` will cd into ~/.config/nixos - dirHashes = { - dots = "$HOME/.config/nixos"; - stuff = "$HOME/stuff"; - media = "/run/media/$USER"; - junk = "$HOME/stuff/other"; - }; - - # Tweak settings for history - history = { - save = 1000; - size = 1000; - path = "$HOME/.cache/zsh_history"; - }; - - # Set some aliases - shellAliases = { - c = "clear"; - mkdir = "mkdir -vp"; - rm = "rm -rifv"; - mv = "mv -iv"; - cp = "cp -riv"; - cat = "bat --paging=never --style=plain"; - ls = "exa -a --icons"; - tree = "exa --tree --icons"; - nd = "nix develop -c $SHELL"; - rebuild = "sudo nixos-rebuild switch --flake $NIXOS_CONFIG_DIR --fast; notify-send 'Rebuild complete\!'"; - }; - - # Source all plugins, nix-style - plugins = [ - { - name = "auto-ls"; - src = pkgs.fetchFromGitHub { - owner = "notusknot"; - repo = "auto-ls"; - rev = "62a176120b9deb81a8efec992d8d6ed99c2bd1a1"; - sha256 = "08wgs3sj7hy30x03m8j6lxns8r2kpjahb9wr0s0zyzrmr4xwccj0"; - }; - } - ]; - }; -}; -} From 863a046f423eb853e3138db5fe7467791f2b2823 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Fri, 15 Aug 2025 18:24:14 -0700 Subject: [PATCH 012/211] feat: init flake --- configuration.nix | 177 +++++++++++++++++++++++++++++++++++++ flake.lock | 91 +++++++++++++++++++ flake.nix | 36 ++++++++ hardware-configuration.nix | 38 ++++++++ home.nix | 131 +++++++++++++++++++++++++++ 5 files changed, 473 insertions(+) create mode 100644 configuration.nix create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 hardware-configuration.nix create mode 100644 home.nix diff --git a/configuration.nix b/configuration.nix new file mode 100644 index 0000000..25e1dd2 --- /dev/null +++ b/configuration.nix @@ -0,0 +1,177 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running ‘nixos-help’). + +{ config, pkgs, ... }: + +{ + imports = + [ # Include the results of the hardware scan. + ./hardware-configuration.nix + ]; + + # Bootloader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + networking.hostName = "framework"; # Define your hostname. + # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. + + # Configure network proxy if necessary + # networking.proxy.default = "http://user:password@proxy:port/"; + # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; + hardware.bluetooth = { + enable = true; + powerOnBoot = true; + settings = { + General = { + Experimental = true; # Show battery charge of Bluetooth devices + }; + }; + }; + + # Enable networking + networking.networkmanager.enable = true; + + # Set your time zone. + time.timeZone = "America/Los_Angeles"; + + # 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 the X11 windowing system. + services.xserver.enable = true; + + # Enable keyd for key remapping + services.keyd = { + enable = true; + keyboards = { + default = { + ids = [ "*" ]; # Apply to all keyboards + settings = { + main = { + capslock = "esc"; + esc = "capslock"; + leftalt = "leftcontrol"; + leftcontrol = "leftalt"; + }; + }; + }; + }; + }; + + # Prevent trackpad interference with keyd + environment.etc."libinput/local-overrides.quirks".text = '' + [Serial Keyboards] + MatchUdevType=keyboard + MatchName=keyd virtual keyboard + AttrKeyboardIntegration=internal + ''; + + # Set Kitty as default terminal + xdg.terminal-exec = { + enable = true; + settings = { + default = [ "kitty.desktop" ]; + }; + }; + + # Enable the GNOME Desktop Environment. + services.displayManager.gdm.enable = true; + services.desktopManager.gnome.enable = true; + + # Configure keymap in X11 + services.xserver.xkb = { + layout = "us"; + variant = ""; + }; + + # Enable CUPS to print documents. + services.printing.enable = true; + + # Enable sound with pipewire. + services.pulseaudio.enable = false; + 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; + + # use the example session manager (no others are packaged yet so this is enabled by default, + # no need to redefine it in your config for now) + #media-session.enable = true; + }; + + # Enable touchpad support (enabled default in most desktopManager). + # services.xserver.libinput.enable = true; + + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users.jet = { + isNormalUser = true; + description = "Jet"; + extraGroups = [ "networkmanager" "wheel" ]; + }; + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + # Enable the Flakes feature and the accompanying new nix command-line tool + nix.settings.experimental-features = [ "nix-command" "flakes" ]; + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + git + helix # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. + wget + vim + ]; + + environment.variables.EDITOR = "helix"; + environment.sessionVariables = { + TERMINAL = "kitty"; + }; + + # Some programs need SUID wrappers, can be configured further or are + # started in user sessions. + # programs.mtr.enable = true; + # programs.gnupg.agent = { + # enable = true; + # enableSSHSupport = true; + # }; + + # List services that you want to enable: + + # Enable the OpenSSH daemon. + # services.openssh.enable = true; + + # Open ports in the firewall. + # networking.firewall.allowedTCPPorts = [ ... ]; + # networking.firewall.allowedUDPPorts = [ ... ]; + # Or disable the firewall altogether. + # networking.firewall.enable = false; + + # This value determines the NixOS release from which the default + # settings for stateful data, like file locations and database versions + # on your system were taken. It‘s perfectly fine and recommended to leave + # this value at the release version of the first install of this system. + # Before changing this value read the documentation for this option + # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). + system.stateVersion = "25.05"; # Did you read the comment? + +} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..95181ef --- /dev/null +++ b/flake.lock @@ -0,0 +1,91 @@ +{ + "nodes": { + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1755121891, + "narHash": "sha256-UtYkukiGnPRJ5rpd4W/wFVrLMh8fqtNkqHTPgHEtrqU=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "279ca5addcdcfa31ac852b3ecb39fc372684f426", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "zen-browser", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1752603129, + "narHash": "sha256-S+wmHhwNQ5Ru689L2Gu8n1OD6s9eU9n9mD827JNR+kw=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "e8c19a3cec2814c754f031ab3ae7316b64da085b", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1755027561, + "narHash": "sha256-IVft239Bc8p8Dtvf7UAACMG5P3ZV+3/aO28gXpGtMXI=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "005433b926e16227259a1843015b5b2b7f7d1fc3", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "nixpkgs": "nixpkgs", + "zen-browser": "zen-browser" + } + }, + "zen-browser": { + "inputs": { + "home-manager": "home-manager_2", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1755199018, + "narHash": "sha256-y7dM6ihF4feDgbssaeFxKXjsJb6Rzjz1brc17kSkcoQ=", + "owner": "0xc000022070", + "repo": "zen-browser-flake", + "rev": "8bf64e38baa26429c31d0623c3f16812b794b436", + "type": "github" + }, + "original": { + "owner": "0xc000022070", + "repo": "zen-browser-flake", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..fbe3de8 --- /dev/null +++ b/flake.nix @@ -0,0 +1,36 @@ +{ + description = "flake for jet with Home Manager enabled"; + # https://github.com/drakerossman/nixos-musings/blob/main/how-to-add-home-manager-to-nixos/flake.nix + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + home-manager.url = "github:nix-community/home-manager"; + home-manager.inputs.nixpkgs.follows = "nixpkgs"; + zen-browser = { + url = "github:0xc000022070/zen-browser-flake"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = inputs@{ + self, + nixpkgs, + home-manager, + ... + }: { + nixosConfigurations = { + jet = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + ./configuration.nix + home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.extraSpecialArgs = { inherit inputs; }; + home-manager.users.jet = import ./home.nix; + } + ]; + }; + }; + }; +} diff --git a/hardware-configuration.nix b/hardware-configuration.nix new file mode 100644 index 0000000..eb976ee --- /dev/null +++ b/hardware-configuration.nix @@ -0,0 +1,38 @@ +# 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" "thunderbolt" "usb_storage" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/687945b8-9e15-473d-b083-d3a3b12ac98f"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/407C-573B"; + fsType = "vfat"; + options = [ "fmask=0077" "dmask=0077" ]; + }; + + 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.wlp192s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/home.nix b/home.nix new file mode 100644 index 0000000..bcd19e4 --- /dev/null +++ b/home.nix @@ -0,0 +1,131 @@ +{ config, pkgs, inputs, ... }: + +{ + home.username = "jet"; + home.stateVersion = "23.05"; + + home.packages = with pkgs; [ + code-cursor + ghidra-bin + kitty + zellij + jujutsu + vlc + docker + btop + inputs.zen-browser.packages."${pkgs.system}".twilight-official + nerd-fonts.commit-mono + prismlauncher + steam + qbittorrent-enhanced + openexr # for omelia + gimp3 + obs-studio + inkscape + blender + kdePackages.kdenlive + android-studio + bat + zoxide + eza + ripgrep + ]; + + programs.eza = { + enable = true; + icons = "always"; + enableBashIntegration = true; + git = true; + }; + + programs.zoxide = { + enable = true; + enableBashIntegration = true; + }; + + programs.bash = { + enable = true; + shellAliases = { + ll = "eza -l"; + la = "eza -la"; + ".." = "cd .."; + gs = "git status"; + gc = "git commit"; + gp = "git push"; + gl = "git pull"; + cat = "bat"; + grep = "rg --color=auto"; + cls = "clear"; + j = "jj"; + jgf = "jj git fetch"; + jgp = "jj git push"; + jgc = "jj git clone --colocate"; + jd = "jj describe"; + }; + }; + + programs.kitty = { + enable = true; + settings = { + hide_window_decorations = "yes"; + draw_minimal_borders = "yes"; + font_family = "CommitMono Nerd Font"; + font_size = "12"; + confirm_os_window_close = "0"; + enable_audio_bell = "no"; + }; + keybindings = { + "ctrl+shift+c" = "copy_and_clear_or_interrupt"; + "ctrl+c" = "copy_and_clear_or_interrupt"; + "ctrl+shift+v" = "paste_from_clipboard"; + "ctrl+v" = "paste_from_clipboard"; + }; + themeFile = "GitHub_Dark_High_Contrast"; + }; + + programs.jujutsu = { + enable = true; + settings = { + user = { + email = "jetthomaspham@gmail.com"; + name = "Jet Pham"; + }; + + signing = { + behavior = "own"; + backend = "ssh"; + key = "~/.ssh/id_ed25519.pub"; + }; + + git = { + sign-on-push = true; + push-new-bookmarks = true; + }; + ui = { + editor = "hx"; + pager = "bat"; + }; + }; + }; + + # Override the Kitty desktop entry to always launch in fullscreen + xdg.desktopEntries.kitty = { + name = "Kitty"; + genericName = "Terminal Emulator"; + exec = "kitty --start-as=fullscreen"; + icon = "kitty"; + type = "Application"; + categories = ["System" "TerminalEmulator"]; + comment = "Fast, featureful, GPU based terminal emulator"; + }; + + # Autostart applications using proper desktop files + xdg.autostart = { + enable = true; + entries = [ + "${pkgs.kitty}/share/applications/kitty.desktop" + "${inputs.zen-browser.packages."${pkgs.system}".twilight-official}/share/applications/zen-twilight.desktop" + "${pkgs.code-cursor}/share/applications/cursor.desktop" + ]; + }; +} \ No newline at end of file From 33ead79cc700fb4c38577c64eda459aa31b7fbbc Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Mon, 18 Aug 2025 16:46:01 -0700 Subject: [PATCH 013/211] feat: update to new things --- home.nix | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/home.nix b/home.nix index bcd19e4..6d97765 100644 --- a/home.nix +++ b/home.nix @@ -29,8 +29,14 @@ zoxide eza ripgrep + unzip + jq + direnv + mullvad-vpn ]; + programs.mullvad-vpn.enable = true; + programs.eza = { enable = true; icons = "always"; @@ -43,6 +49,12 @@ enableBashIntegration = true; }; + programs.direnv = { + enable = true; + enableBashIntegration = true; + nix-direnv.enable = true; + }; + programs.bash = { enable = true; shellAliases = { From 41065e667138200012506833232f9b0281daf72f Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Mon, 18 Aug 2025 17:29:06 -0700 Subject: [PATCH 014/211] feat: update zellij config --- home.nix | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/home.nix b/home.nix index 6d97765..22c6a45 100644 --- a/home.nix +++ b/home.nix @@ -35,6 +35,25 @@ mullvad-vpn ]; + programs.zellij = { + enable = true; + enableBashIntegration = true; + settings = { + # Default shell (using bash as configured in your system) + default_shell = "bash"; + default_layout = "compact"; + copy_on_select = false; + + # Mouse and interaction settings + mouse_mode = true; + + show_startup_tips = false; + show_release_notes = false; + + on_force_close = "detach"; + }; + }; + programs.mullvad-vpn.enable = true; programs.eza = { @@ -61,13 +80,7 @@ ll = "eza -l"; la = "eza -la"; ".." = "cd .."; - gs = "git status"; - gc = "git commit"; - gp = "git push"; - gl = "git pull"; - cat = "bat"; - grep = "rg --color=auto"; - cls = "clear"; + c = "cd && ls"; j = "jj"; jgf = "jj git fetch"; jgp = "jj git push"; From 2d10b09d1febb45f14d36850239d6e1fbf640c9e Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Mon, 18 Aug 2025 17:31:21 -0700 Subject: [PATCH 015/211] feat: add more aliasable commands --- home.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/home.nix b/home.nix index 22c6a45..0857fab 100644 --- a/home.nix +++ b/home.nix @@ -86,6 +86,11 @@ jgp = "jj git push"; jgc = "jj git clone --colocate"; jd = "jj describe"; + js = "jj show"; + je = "jj edit --ignore-immutable"; + jn = "jj new"; + jdiff = "jj diff"; + ns = "sudo nixos-rebuild switch --flake ~/Documents/nixos-config#jet"; }; }; From 51f990e3e4bdd25646ccfb0eeedb1918d43b6f52 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Mon, 18 Aug 2025 17:43:49 -0700 Subject: [PATCH 016/211] feat: hide top bar --- cat.png | Bin 0 -> 28441 bytes configuration.nix | 2 +- home.nix | 46 +++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 cat.png diff --git a/cat.png b/cat.png new file mode 100644 index 0000000000000000000000000000000000000000..8b182e2cd117cce3e71b3948f660f26ba6c3ffa7 GIT binary patch literal 28441 zcmeAS@N?(olHy`uVBq!ia0y~y;C5hOU~k}HW?*2*x~Vpafq{XsILO_J@#aaLdIkmt zmUKs7M+SzC{oH>NSs54@6p}rHd>I(3)EF2VS{N99F)%PRykKA`HDF+PmB7GYHG_dc zykO3*KpO@IhN}TSA+GEULIwtgLJW$A28ImWGT*;_7iCtKWLN+6`7^ta(&tZ~v$C>8 zn3cbM`_92AoSu=v%qJ(ts+yUZ$;cy{ot?wODkjXR$SR<~%CEr8C$DAXY-#UnVq)sy z7nPlrZD44albtgmBH?XJ!Lz&9IGIHF*d-s#j{DD`ywpebOru>}Tig40?->{vUN^1` zcQ$0=mHqVTb9{V!Mn*OIxT6%g)M00iX+{GJq$vZWgN15?k$Z<+pb2~`6 zBt^s&R(i+F2L&tt|Nq~?n45uLjhj`>D0j~m1_lPs0*}aI1_o|n5N2eUHAjMhL4m>3 z#WAGf)|(r#lS7Y6wk0ynoS-SoCBtgpExE`gXvM}Xkye%?fByfUGFc|zYs#8=%XWva zkGo#`%3$;NxV!JGbMx=s^4`8QdzbJ}pS)XZnZKvMob_p0jO()Ylw77Q47XGmGB_8g zGHzjrV&J{Nl;O#s%V^@jyoDiZ(pJt3Oc|3I7O-BJw8pnV%waYQgKon#xGu&mFBKza zGw3#$aWX`KH8zNWH3~U+Gw@zOQ>&6KynywB8lwaE0#&#!hTJNTYibVM3w)UxrZGeb zIdCsv1#4uvAmqSof~r>cfbMQ`MmdSoQ>9o3FkoPnd2X7{bKU5$l zc^gSHL^0@|oWzoGGKV39af^z#&;r%Xj3D3Wcs5Ks!v=P3iYL<+m=2f$Xo|cysW3*N znP%cZs+A`{{#E_-Wr?ys_nylhS(H2~wdYK9A=g3Y5UCsrn4bxaIOo9X_ z?}bU3j3B>;DLHsAV+99BCxh-xF;I}xTW{{?HGLQ6o=9KxI%;ahKCL&}=7CHZ4Pp-5 z3mBt74rjdp=6W+_Fm7Rx0tGUI)B;8jgMs(LB(MlmMgv=hCpeKYnmC;HodOdT1H~O& zTNHzC0~;v58rVP@z==@>ECMnyN(h|97prptNVt~vA zg)f6H=k)4=pE^!iOX7B~K9Q~jbr*v!I7xsl1EoDih-FfcSOJ?4$|(>jrVOxAycZbW z8VfowZvp9oh6mV*V6W?f?d8271o9!+a8T?*q!>-Wf@~QL-)3?w0NVvJ8I=B^x}a8o zoQ-TRBnTU(F-R>?mF2yly2P$mp)~%l>Y=CQr}cY1K*~W%AXyL=;$X``ZUk8iiZDh{ zc1Ly>SP&LxAcrHfL5hiR4k)s~g@@DvRWvp@p}>*?gDxXDz|b7S{H3&3#&Ty15u8z?7$tQK-${!(~uqQB=3 z9mTC+H;6fSGw3$*g9|orXoCt`SYhc63iFSkG7l`(P}W!D1+oU3utEN;0Tp5(Z$QdM zusWC#z44$j7F299Zz+Bf4DuGJ?1q~6fcXL_GlCKvC`-YMSFjO(U{X>Gs>?;+ew3-~ zW6Km%LGaq$JLpz;}%(PiTsKwbpZ z91UePpt1m*kwJ`xX({s)<@P1kd5F1=xL&D_k<`={FIn9^4!c|fZ4>k0Im>}G(h3bxxiI{fj5ZZ?M_hs z7HebxxpCfZkh=sq9GJH}=Dq;39i#~65m2s#x&sy$lNh2{m@X)=UYKVM%JC4LuXl1U zP;G!33HCNf5&4c${(6q@%eM8$gT)-YC+IRomP9kcoCiux;3%5}uHrL5MYSh`E>d7_ z;a~xI{_7M_w00u}CCCfVScziFfJQJUsJ`kA138-If|5Xkn|8yuDWLKTs?$Fbl)WKF zLINHXp3tx&*)d}5U-oh=FlAm~TOJeUDevn3&%|%>#QMK=TeLRGyQC>_$)`nwG6bl& z1C{ikqy$Qsu(BT#?%bes2P#lNktyv7P6^;@0UEzkKt)hJsAqlrVah(q-|H&D$9E~y!G;TFC)%DDHq%$H=QTb>LVp4E=q zz8!tKd4>GS-+!Me9+zJLiC$h%rUhkk6|mW6j9Vr%fNM$K3pZFU_%S(vYHAaQ;AOr*6+&xyhpx! zzslWc_i-aDD2SNB@eHk+z<~x4fmK|P$N{MYmCayBfh!zv*nndOlvuzq1BnlKjDf=p zDGotV52{z;;-K6Bj!00o1~wU#RA3@t2SB3@Dh_ulIK)7LNDc;h0hC9;i3eQiF@s&D zymg5*^DmP_te!zydC&FbLCtg(P~$+z!5fk?m@+)U4P|czT}Yw^$xZ^*JRqNf)TlCU zp_!Jcu`Ud{YY(P+PU3r64@xDIR6zCmG_ZwC8J=MK8?bUgJ^)uulR$MX=K@ub^QSRH zVdHu-=z4-{E!+mSfAieJwm{x(fm*}5*Cw~VeYNR&GiUa<%#tVmk2jy-yf|kX3#c*4 z2`UD_EeB9@0-U_Tk%uV`O$y-HVuThCkQjv)GLWVSsDX*Y1W*!z*+Og6s?IG)-z(>0 zC){8sbyhV~&T^g$yMigW(ZQe#Z481MN}#ZYq+xGxvH|7f1*%}*g9^tBpp*m6HK6DO z=Mhjs0xJe*F6@dykq1rBh++`h1_agKyik+D!HHFI6ez7g0vO`pwRgW5e45FyWy!X< z4>MmJNN0u=Y!g({nZc1LwLsNz(i~n$4)$(Rv6Ke8wqY8JXOS7WXThM$Iq69b132=c zgj5)}%;5z$&|&&OnGmPylQ$VajXLHnDjt(IGeTOEo)cIu6q$kR1(-f?5)x9ut{UuA zP~M)T;Cb%Yqx@g~f)4LjTMK^RT#&kO)m34eZa2GBbuUQa0xB)%YJjSWEeuhIWE;vB zft#g54&3E7j?i`{NDZh01$zTjSA&Z!P=P<-rd%=$Pg%Rb{b{XC?(ZtQ9)_q5OKWR2 zv%aqPQv$mU+&csnmXKHimz3ZH1?umB+lNJppmr75Yal;@GacBEprRA*$ALFTc`M6> zDADM9zpLKw6|E`U=|0~*UgXNF_4D1pB{%m1#Y@%fpuz^!YH#v*FAGktps@|5z2%@Z z2kDjwyxa@+Kd3ZvT=Ja{R9{0304e*nk_l7|gDU2ZFZV#H4BQJKQ&4O%6G zbzxzHod`|#P&T+P2G$Gm7sR(qGnu6DcXD6;?*W1wOOlrCW-9892A z1~@l@MZngBT@OydCXfL!up>Zh&^QC6=mj|fl&e8840bC>3LJ2dwg9-%0reHAF%I(s zj16kxfmMQS1jR2XwSmiW;+^!x>%=i5&IPKO`(xHM=gY1HJBBF(Qci;s6u4{##osh= z1p;!9D!5hwb>qRchibz#aKR7u9aswFSx6-VaxvXwQ@l6IPC{J9Mrymma5S9laK>eHzJGzhbyRg z0!l>)?=o(|?_Ff;_L^;a=xHRmh6P~p1~dz_9Zk~;bns&9XxacGR{xO0hCG+F%253 zg~S=C*u^Oh4zS17GN4hkORN3|r`^6@ELZ9FyXxKMxf&o>fCu5g<((?HoCTNqpb;=| z0S~T7y&+wHW^h4E->Q_LkM{sQnPBIXU?{r`lE`*QI0#JnuZI^-vFTnLO*qg|@wpeq6Mm!;|0F$6L z3)FOQt_2H1TnZZP0Jl@Y4FXWp6%fDfdChn&2>u{wA&01mjZ49eY*W(y>DBeQRc zgJQjr12l^SZXtn2%AkhvP6rLWfONxx4;q@_^bcpJ#4~JRxxl6b8m0vs4e}2tYlG^L z7|`Sys5B6hnYeaGjhLdTgLn1&K$F{gKW;DEYwnnLVe*Q1-|zI#DZYBwaXuS(>IT#g zg{BcmQE`iz89Y1-cObaX1Lti}x&ylo+@S-Df1KgZ44%vZ^-Dn!04lJ+K7ZQ?@*P+a zhyjT{P%44N4}=YJw*&K*iZjc>-8xWS0rfXP^$olmWrc z0@vu^N(^KZsHO*}5Kw9ZTLE$?tZIh_5hz_i(mS{x3obgr%{y2T2Fi1w@PK3&NV^cE z7oig3VW@Uc?19V#x4R)75SZ1V$`d37YTl9M$dWR-pDxFH0`G2N7yQSxg|i?fW&OdY z%LDhP&#KQ>S@~bi(iq~FE#S!oNa_Vu1CY$JK7F+ zz32Jo=AXPjxnA4;=cM^F*Ir(6HNQ?~=WK@Dqg)FZZ@mTgZa~i4mNadGiZE;~0P6*Y zw`Gu`2JB--sReiQK+3@CBR4{8BSxtOsYkgMJcTLUvL=Gj#9{YcP#E%Fc&FwNy%98~ zzZ;tTq!z42mIvp?2DXgt(xCVNsfh|(1Iic>i$J#Qgc`-5s~yI`dm+yp_LHr6=iFbKt6g2zuT86(m ztA5W6YtZ{?@=s88dbldcHr-f|=T3t>2g<45pa$tXBe07=HZIj}V9O|%1p6h5A@?OH zd}G1k)ga~|y#^Ez(?OmD#Wq9kOHl9I#9{VlNGNP80R_1pD9Az0btJ36xo+AzkZ)5V z0mHZj&8iJ3Rxxi`$_+}447ukZad+zyDBbPm0SPi?G$2_8u2G_Qp*RiADsVo4`)cjX z>F+*s)E}QV#XoMbj0lLmljOSBNgy9M<5c_x!v~=NVye;rLb$T+xAw14#Y> zc^q6wfeJoQVUY?71h67dDeNr{3c9;sPl7TFD=1q+Y(6_UO{{uv+m#l*>*UjVHxFC3 z3#v=XmKR8_bT5-T%m1S8>fUEUddy!8t$U$K8suw8{QxUiA;ALflp{(;kTOu^BN z$cCgNaIFnWBOnE!VJ%RC0JY5Eg(;}50f}`)nG3fL9Nn-I8C-~g(lV0Opri*D2N!M# zl_;@>&0&bL-t;!p;ir`zZ_9R^W~iNWIf(tmoExeldOyR@FPe0HPRzRMQ`0AMDueUl z-BgfYK|!M1PzITcN3(ZR3BqHH;AE`}Nf4?H+dxuJAsJ?Hn#amjRD5^JY`gA>>JM)> zMKS)`-Q>j(`@MQ!zgJxG-OH6iXYCn%TpOmD>NHH74au>(4cppSFBBESg8147hNwI} za0#=8;g*z`*om{EARhOERNm7oN{gX!6?vE`!yHr^G3077ZCR7ZxaCd^C}n^u6uhQy zaL5A{ET9%zc7)s7*`N}vLCoQ_l$gWro#03h7F>|Z%e~;~Ge~j8y-*DK{o;w}nK6EUwkm!7K0EAFmDj!S zlgIY=r0srxd)}_cJ|}M9-6j3^VLv!ML!ug%f};@SE+i}D34_7~lr^?6L|tnJm;Nm* zpu#RSBZ?pFmE8;r7(qqhX=tGg&Qgq9?tlv%FbCvyR7r+gxnRAZ&=hkxT_pgrW%dLH z-V4*#@%X-W1m&MxaRw6yP$9Y#Ts45pYf$F|Qs9DAfN~hBq?p5QUx*C2_>Y9RP*@1$ z!l?^0Z8<Lnmm*idDta|J5lpP(< z=KsmQ^ZoW_mJ58VK^_OU%Rou!Rw6jHfIij1;PLaKiqP#`@pH*hv~wmBv=ucHt8_qE)@&AwD~S!KLmHI z`97cFzRSDQHs)fXX?$dxA=Bvr@HiKzPsU9@smx+K}2WxJcIDpIp#}U{ujI)A3D^`3#alA#E{Q^U- z8>5MX^(=7InDZ@Qyw$_>VkYBWwoPm04{kieyWQyIkJu^od*wI%4%~4y{{OxOf96C_ z1l3M_GZ~_$O$LS8tsYR{DpdD0sCx!6@bs!_XFzjg4Q7iW9rT@ypoT^oXb8YnqhZ?4 zhha=64zodC0h#lx4bsGYJArdSswKF`5B7HC)lGB2{cEtsHCZR`fScu@5RPKXmW0@o>toi zu1dg#kE{`-X#?hfvk%x#kjua!1WBKuqy-xgL1sgAfhM;HqmkApoP=af@4Cf3{lC=J ziB)xa{VJu}GU@hWC6N;3|c< zycsYqSQ4C)7<3~c6+Xy9Z_K0vR|zVNH-Td&N)0kBa}8W6%vOhSr-C!K3%G~u4V460 zD1@2D;VMBb3rNzM21-9`l^_2I+;V*4U+0wAvv=Gt{#i1wo@vXYqPzKem91-c#C-qh zuIPX9b)2%;@AVWcY=>%|?{sZS32B`(Q1`r2<2cBS-!-b;3sv)jJ zHxAO~1(&z8?LmfuDh+NPkh9OqgG>M|RcB=b6^7vY1a3LR%WHq`tdWyEwdp`j>pR95 z6HV?v&Ryla?WZ!hxYjWMd3p;Z%%-ubfsBKO*d&ONpzs2@C>0z$V3oWVrl~rdW)gN_ zhH{xQA`_TEK@BPz8c>bdbO2o1LX3&pbO0Q+pilz2S_d2`U<(;9;4Q33#!+XIC@-D{}zn;HX$oED4 zqSWc2Tkn~w<({6e5#IXi_20VBCpbS?NOj&yzw7i$E}gmWemyA7gByjA)&`UW7a@?a z1(V=H7?M!H1N2})P&|Pd;0yu^R&ad`X`jFq!+JhYlR9;5}d(iCha zND8&L1~wcNm2k!2gbYcP5Ry!1$MIj-TXe6f{y$#-co^N$SrGZp$-67 z45x2_Ge1NK>_DU_03~IRNg$!9X-ioyq%k=#Z-G=*kfB%;huNU|Rh#jb7E@BgzIDF^ zPefI}-+aKQVXeno(QgW0Q&T3%Br09a{BZmmC_BQ()qJ6j1E+&|Oi)9aG9s%%UIKdr zoQJddLD?JR07#Icl571z4mSf2)PZHz`h)hgfQA$y!3a&X{7{|2+UYo*f*ym!&+Ih~U;7C_F(04N|cctOuTgfoK6u z(}9a@NX$cLRv?DJ_fml4AISvJR2^LVvKZ)!J0uejQ3-AwK)9eyDUfIbWo~f85Mqd! z!}`1Y7yqpPS@^{A9rp#*C2`Eh?OpwDg~j}{jAFiUb5(HCzgIJ6?@v#91g=jp$_1FI zumTpQ01{4+qy(zfAb|lPVQQeR1{bgpl@QZF14xiy0F%f@ft(LA1X{*Iq##}a7dP;T zf-*3SLX>%EMuAHMP*n|f1Ef6*2|REQTle9nSx?{eGJg5<{*evSi?2IkzR&hv^VI-U z4}vRWh$CRjqCp020jz)~jNw_x(Xpnfa`?$sjL)>IUuw zXTjY?whWNv@Bju)cES=aDjTE;DSp8AgM$w|$_xn=69;cGMaXJuaD0Qp8RSAxWT3K< zDi!d^G&ugilj;er2F*Sr4ji*uiL#4wQi0>j$S_X-ZoUrK%d{7(iu5Zv#X4UPof3!C=n zI)Q5*P|Pr!I7HtA7YmSB0i_LC;sZx7$erczG!O+EJYWZz372Ht0_lP?=$^iikuLvnD9^L1p+fbI@2A*mo$B=1gCB3;rz95~-`7H*JbU?$?vk|E#qw`Wfo@^Pcy= z&`r0E?yc%Rk@e=Hf1vDsIoER=(ilwi`X7E;=K;>t5N|PMfSM;T!x6;{C}+a+KO_Mm zS3jVsKSU-1)!?u)6yz6h(9Gt9*Z|fH3QllPfPIgsTtVXasy?J*5T^Z>4|t3W65dFO z88j>kG7hW`EDkQFppJl)0WU%sYnc}v{3!9GZ_T^fzhM`)#ngp{o~*9Fy27RG#laB(aS145AmVTm!z$1?1wRpp#S*rRC1MWo*Wb!ci?QqU^4P1j zpnU?^aBwC>N*|yYLNBCX%@&Y%Pzn>++B8TA;Poa%FF1vPtN=5R(*a6O163^;-UMsG zD6t4d1WLmk=E5(09ZhFKXe>$<@-n7%D@!sD~Je~AwZrlmCtOhZM_uE%%)IYO` zS*QH)fvtl(o3tca>*0`p;LcCay>G8K)W!T;yTD3jyVEzh!av&r_lKKKy28M6!9%y< zUjACU-bu56+e9(ngj+;>o)>el2A$SGeC(oy9ZKnqQcEyy0iVJEO>U@Z3LHX6xe(-V zP;f#OgI$B1JW=WltWN%A(Qt2CPpQnEZ|3hOo-SRH8)`4}y*fU>{Kg6W7S$8m4lzot z-2T>t>4h>w)syP|UH^pFI=(7L8ni;T8pKA=g@_D+5wVa3vZzrF@)3R!bpN6zXB6wC zz$<6LfdAFeio^QTf1vULSvL9=$nhxk60$T%KYBfYo?MXw5Ij4+ zx7;D$J1b_N=JekaH;UG{|C{$G2e+CKW?|OF_=8Pqfuk^D>mC?)pef_@4tG5T-igrF(?S1ldm1$&Y$Dh3mta`R( zsjQ55XRs~)u5^Me{>vA=FeONX78)GLe#gqbh~z=A0$VVN@b$&ZyJ4L^P+*BUREtAg z3?WgY1Ed00n!?#%kcRv~f^Ohh3nXP zaTK}mqyUObxJroPwm`HJu=*@&3AY}yZWo-!k)s`4;DbBypj;1XAR-41r0>PM7-9)L z2*1q&x5wdbh%-inAKaB-t03wSRXCQCzzu2%EN#9umFK)x=cSPhT$!&+O zNj1oI-kKQm?)&zriB|5LajM;b{h~tpZN7 zAaA2+VU$|XD1k_ijJLF*>FLG)ZSm~dMbeH8ZTy{&Z5+?-dos;iVZ*(%if@uW{p%ND zYGdg#eLCw^nCGv5pEKODzOJwXcVoeBfQA(~B;d|Kw-=nYKvpAb0hQ55pxQy~3+Lct zqoDEy?m1W_!Xp4ZnZV6J*24Cpo9UN!@H1wszGFXTN?lyWSY8pnh?n@DfM{fo{(cRHxF zf~QNcEpR`;0}~#bgc$Guf~8QT$`2eP2;1Sdz`co`@q$Ovxa7nGi^ETU{=Is|Pv-d4 z^EJ!D*dCdhon`-GwP9atU+v7DS_`sIoSPu!@LpinoyIHH#h?WS5RZdOdQeFPGaO4U z0i_CvVk{%M$PQ-QQVs9oA$bfOC>TBmrzfOzfow6TZiD+D6uWmpOE)0SL>{@pXy$`z ze26kA3DOL8J6N%9LzwV_`?4*P3U14;6v(V*{J5%N-9#(7sg{RJZ>&-@+PwH#vE}Dg zH(ig-Z8-Pl@VeKlY=s|X)p%ZMP3Bx+{8z~7RrRAE!7EGS7yN?441RDC*nx-{Qpovj;1C6ED@5`N%G@hx<_w;iz&krZ!3OpXVlEhcUns)U zpe@<(Bm&*=4{{Z#B@LPb#AL&_R)VIXVXGrR%0L@uUz9Wa6|gm4ysKN`^Uj#x&-A#i zue#gKv%vVuZmsE$LtVD`KK`_8`VFZC@#bO5rc7K5mVTZDDGeYA6yB$f0#8Fjq+pvi zLGDCmgAxm#U;)JsxC15T06oS`;1=&88lJUJ6uirf|akw64DwKOy@>Xbf2xH zH~uoi-PXrE-0K)$NUh9%e%W==T#I`rpGqxw9QZme@XSwdd=&K^mZG7Zd@Y zNn;3?RR4f#1sz=lNz|Z8ejMT^gU__OlsW0gp8M&g?^Ab5yqmwa`e}sw z=UZ889)F5nnf(3FmPhmK%S^8^TD@yo?&49qS82Mjdo9mG(8^FqfPhI-%K+r^K+IwB zU^8u(+=A;9t@>84GhP$8qwR6U6)U~;fau?6tQ@X~ZDsrTGiDzDi=WT;2w#YIl5|l1 zYRfEmcWw3_6UekFxK2cx5kRjV;Eg$GVG2n;AQHDq&`J+*MgV0NP$>^CRl&&(CC`Gl zMwR~n_JAAD_M5EE?eC(>&-cVZP~T+ zyypsD_+0txIp=Gpk~f-yL60{fG6HzD2{^TYauamlHMrykmDcdW9;Mnrs)9hZ6P{!S zG81ArF~uaPa)#Ros$TGzjI|OIbMTg8e(^LW&OE7{X;<4DsW*L3i`b4^$2;u`Gi81; z*X49Wj@|V2j4#ftTfH~0mQ&G`3sD1tDnWRuPFz6?Jq8(+WWYg&Xc&On0B|SbDSE&s z=7QoA9I=R^9goSx6x)zO@Sbtf@<9FO{bzp0Fkd)+Z|;syk{)Xpr?`=ssE}&3DN=@*SUckzTH5nS}LHLL==a}$bkW}%NUZMYZ_W7r!Z(H)k zP0s(&w|Hz>ez$vj@6o%rSzr9Hb(^bFT4)JbDG$nZ@bh)xM?Qf(L0nKEdIR7?DZ##B zL<$!8If3AU0D2-0el{XO5gDTA+nsWkoPGXjPj9vEIKAV~z1P=F^wu+%ocS;r zVH{EE7C8;WPQYR|ageSf%I!!+2#R`yBM$o`n$3*xQt-H>t~-rf_w>JhnLOKg>hQqe(Hd>~hz$kw5Ez90nvh{Rnpg94N3MFd;D zY0&X?jt_5jr7kd-e>%fj^1|o!+MAze>t~wwloeL0FPQJdwnXLX4xS4Py&0g&3UW>* zICX-GU~puD%W+5!*$F!S1|?d-DnL46$-D!ctB}<|PwNEt*db|a+HTO+97K+Xs(@Gv zaRQmnDUo*A|65=^U*~)HzU0f!)7m@kv_6iCeV&}+1&;N@8lW*! zl;Q|1&b*}!gyJj`H3cJPV9DX7oQ!cHAcX z_i`N1uCRYMR`1a2TR!*U#+Y+|X74g`QGEzMID;}rO0R|%Qz%gliwKAy{>Xx>=?z87 z1F#H)67S$Ffh9e_#P7e+j<{Y}DO{^--jhI=QU{;=Ju zUCVX!;OF2I2Gjc9CZCvPbMEQ!da(tC>x2%{9pK8U|z2mL`3A-Hg9V9T%u9RvnT z7PmorcOju%&H%Ozx{Id}yhjfdx}fq8a!wd1vqFxx0S5}AaSryLCqr$nL%Q5P{e?eO znr6S3J@awdxy3hm%8)=XQnjXth;+xT>QK$ zX5H3z`)iKL&fB>TRF%%^c^r(?g&^MjNErex6Ck+-dd@gFBZJxyNC_XGZ(s!|dhZ3j z_lnyMs3tV*vsjQk^Z2jq;Oh)uHZp&WOpfzT`uv}DYyG?1$CkbQnLJ-e(&4&?Z2v1M z*ZEEp7GAwsTK(Ym)db{Jf?PK9UYHaMAIt`2)tjY|f)+w*D1*u>NZhhzG`LA3m!04d zEO;po@EuOIx%FZ;-=K7H@1xxsL1-?=o3r z!%iVB^< Date: Mon, 18 Aug 2025 19:10:10 -0700 Subject: [PATCH 017/211] feat: fix bat formatting for jj feat: add signal update zellij --- configuration.nix | 38 ++++++++++++++++++++++++++++++++++++-- home.nix | 23 +++++++++++++++++++---- 2 files changed, 55 insertions(+), 6 deletions(-) diff --git a/configuration.nix b/configuration.nix index ebf4d32..31bf2fc 100644 --- a/configuration.nix +++ b/configuration.nix @@ -124,7 +124,7 @@ users.users.jet = { isNormalUser = true; description = "Jet"; - extraGroups = [ "networkmanager" "wheel" ]; + extraGroups = [ "networkmanager" "wheel" "podman" ]; }; # Allow unfree packages @@ -140,6 +140,8 @@ helix # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. wget vim + podman + podman-compose ]; environment.variables.EDITOR = "helix"; @@ -160,6 +162,25 @@ # Enable the OpenSSH daemon. # services.openssh.enable = true; + # Enable Podman with rootless support + virtualisation = { + containers.enable = true; + oci-containers.backend = "podman"; + podman = { + enable = true; + autoPrune.enable = true; + # Create a `docker` alias for podman, to use it as a drop-in replacement + dockerCompat = true; + # Required for containers under podman-compose to be able to talk to each other. + defaultNetwork.settings.dns_enabled = true; + }; + }; + + # Create podman group + users.groups.podman = { + name = "podman"; + }; + # Open ports in the firewall. # networking.firewall.allowedTCPPorts = [ ... ]; # networking.firewall.allowedUDPPorts = [ ... ]; @@ -168,10 +189,23 @@ # This value determines the NixOS release from which the default # settings for stateful data, like file locations and database versions - # on your system were taken. It‘s perfectly fine and recommended to leave + # on your system were taken. It's perfectly fine and recommended to leave # this value at the release version of the first install of this system. # Before changing this value read the documentation for this option # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). system.stateVersion = "25.05"; # Did you read the comment? + # Set user profile picture for GNOME + system.activationScripts.script.text = '' + mkdir -p /var/lib/AccountsService/{icons,users} + cp /home/jet/Documents/nixos-config/cat.png /var/lib/AccountsService/icons/jet + echo -e "[User]\nIcon=/var/lib/AccountsService/icons/jet\n" > /var/lib/AccountsService/users/jet + + chown root:root /var/lib/AccountsService/users/jet + chmod 0600 /var/lib/AccountsService/users/jet + + chown root:root /var/lib/AccountsService/icons/jet + chmod 0444 /var/lib/AccountsService/icons/jet + ''; + } diff --git a/home.nix b/home.nix index 2d37ac4..f19deca 100644 --- a/home.nix +++ b/home.nix @@ -73,6 +73,14 @@ direnv mullvad-vpn gnomeExtensions.hide-top-bar + signal-desktop + podman-tui + dive + passt + dbeaver-bin + insomnia + tree + logseq ]; programs.zellij = { @@ -83,11 +91,11 @@ # Default shell (using bash as configured in your system) default_shell = "bash"; default_layout = "compact"; - copy_on_select = false; pane_frames = false; - # Mouse and interaction settings + # Mouse and interaction settings - enable for proper pane handling mouse_mode = true; + copy_on_select = true; show_startup_tips = false; show_release_notes = false; @@ -176,8 +184,9 @@ push-new-bookmarks = true; }; ui = { + default-command = "log"; editor = "hx"; - pager = "bat"; + pager = "bat --style=plain"; }; }; }; @@ -202,4 +211,10 @@ "${pkgs.code-cursor}/share/applications/cursor.desktop" ]; }; -} \ No newline at end of file + + # Enable rootless Podman with Home Manager + services.podman = { + enable = true; + autoUpdate.enable = true; + }; +} From b9d2ec9b88beeb1740a60552ed473773e9bb721a Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sat, 23 Aug 2025 14:55:08 -0700 Subject: [PATCH 018/211] feat: add ffmpeg and some other chrome stuff --- home.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/home.nix b/home.nix index f19deca..d5d9fe6 100644 --- a/home.nix +++ b/home.nix @@ -81,6 +81,11 @@ insomnia tree logseq + figma-agent + figma-linux + libheif + ffmpeg + google-chrome ]; programs.zellij = { From 05edc10042437b5829bdc5bf12332067d46bd5c4 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Wed, 27 Aug 2025 15:24:35 -0700 Subject: [PATCH 019/211] feat: add helix conf and pdftk --- home.nix | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/home.nix b/home.nix index d5d9fe6..b384788 100644 --- a/home.nix +++ b/home.nix @@ -86,8 +86,32 @@ libheif ffmpeg google-chrome + pdftk ]; + programs.helix = { + enable = true; + defaultEditor = true; + settings = { + theme = "dark_high_contrast"; + editor = { + line-number = "relative"; + lsp.display-messages = true; + }; + }; + languages = { + haskell = { + config = { + end-of-line-diagnostics = "hint"; + }; + "inline-diagnostics" = { + cursor-line = "hint"; + other-lines = "hint"; + }; + }; + }; + }; + programs.zellij = { enable = true; enableBashIntegration = true; @@ -147,6 +171,7 @@ jdiff = "jj diff"; jsq = "jj squash"; ns = "sudo nixos-rebuild switch --flake ~/Documents/nixos-config#jet"; + nd = "nix develop"; }; }; From 9d0a0cee3dc90d6a6996eb6dde621594b44a6685 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Wed, 27 Aug 2025 15:24:35 -0700 Subject: [PATCH 020/211] feat: add laptop power managment configuration --- configuration.nix | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/configuration.nix b/configuration.nix index 31bf2fc..18602b7 100644 --- a/configuration.nix +++ b/configuration.nix @@ -133,6 +133,45 @@ # Enable the Flakes feature and the accompanying new nix command-line tool nix.settings.experimental-features = [ "nix-command" "flakes" ]; + # Power management for laptop + # Configure lid switch behavior - hybrid-sleep when lid is closed to prevent overheating + services.logind = { + lidSwitch = "hybrid-sleep"; + lidSwitchExternalPower = "hybrid-sleep"; + lidSwitchDocked = "ignore"; + }; + + # Configure suspend-then-hibernate delay (in seconds) + # This controls how long to stay in suspend before hibernating + # Default is 0 (disabled) - set to a positive value to enable + # 300 seconds = 5 minutes + systemd.sleep.extraConfig = '' + HibernateDelaySec=300 + ''; + + # Enable auto-cpufreq for intelligent power management (replaces TLP) + services.auto-cpufreq.enable = true; + services.auto-cpufreq.settings = { + # Hybrid mode: automatically switches between performance and powersave + battery = { + governor = "powersave"; + turbo = "never"; + }; + charger = { + governor = "performance"; + turbo = "auto"; + }; + }; + + # Disable power-profiles-daemon to avoid conflict with auto-cpufreq + services.power-profiles-daemon.enable = false; + + # Enable thermald for thermal management + services.thermald.enable = true; + + # Enable power management + powerManagement.enable = true; + # List packages installed in system profile. To search, run: # $ nix search wget environment.systemPackages = with pkgs; [ From 452f2f4cc9fd2119d208bccfeefc77555d2d048e Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Wed, 27 Aug 2025 16:30:00 -0700 Subject: [PATCH 021/211] feat: fix suspend hybrid with restart --- configuration.nix | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/configuration.nix b/configuration.nix index 18602b7..8da7934 100644 --- a/configuration.nix +++ b/configuration.nix @@ -134,7 +134,7 @@ nix.settings.experimental-features = [ "nix-command" "flakes" ]; # Power management for laptop - # Configure lid switch behavior - hybrid-sleep when lid is closed to prevent overheating + # Configure lid switch behavior - hybrid-sleep with 1-minute delay to hibernate services.logind = { lidSwitch = "hybrid-sleep"; lidSwitchExternalPower = "hybrid-sleep"; @@ -143,16 +143,14 @@ # Configure suspend-then-hibernate delay (in seconds) # This controls how long to stay in suspend before hibernating - # Default is 0 (disabled) - set to a positive value to enable - # 300 seconds = 5 minutes + # 60 seconds = 1 minute systemd.sleep.extraConfig = '' - HibernateDelaySec=300 + HibernateDelaySec=60 ''; # Enable auto-cpufreq for intelligent power management (replaces TLP) services.auto-cpufreq.enable = true; services.auto-cpufreq.settings = { - # Hybrid mode: automatically switches between performance and powersave battery = { governor = "powersave"; turbo = "never"; From 659d79265ea31c501a448e7e417ab4947e0784b2 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Wed, 27 Aug 2025 17:40:41 -0700 Subject: [PATCH 022/211] feat: add swap space and try hybrid sleep again --- configuration.nix | 9 +-------- hardware-configuration.nix | 9 ++++++++- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/configuration.nix b/configuration.nix index 8da7934..7d6f7cc 100644 --- a/configuration.nix +++ b/configuration.nix @@ -134,20 +134,13 @@ nix.settings.experimental-features = [ "nix-command" "flakes" ]; # Power management for laptop - # Configure lid switch behavior - hybrid-sleep with 1-minute delay to hibernate + # Configure lid switch behavior - hybrid-sleep for optimal power management services.logind = { lidSwitch = "hybrid-sleep"; lidSwitchExternalPower = "hybrid-sleep"; lidSwitchDocked = "ignore"; }; - # Configure suspend-then-hibernate delay (in seconds) - # This controls how long to stay in suspend before hibernating - # 60 seconds = 1 minute - systemd.sleep.extraConfig = '' - HibernateDelaySec=60 - ''; - # Enable auto-cpufreq for intelligent power management (replaces TLP) services.auto-cpufreq.enable = true; services.auto-cpufreq.settings = { diff --git a/hardware-configuration.nix b/hardware-configuration.nix index eb976ee..d5b4b01 100644 --- a/hardware-configuration.nix +++ b/hardware-configuration.nix @@ -24,7 +24,14 @@ options = [ "fmask=0077" "dmask=0077" ]; }; - swapDevices = [ ]; + # Add swap file for hibernation support + # This creates a 96GB swap file to match your RAM capacity + swapDevices = [ + { + device = "/swapfile"; + size = 98304; # 96GB in MB + } + ]; # 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 From dd59d1808c8d4f35bbdb660b305034dd0c702fb3 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Tue, 2 Sep 2025 15:10:57 -0700 Subject: [PATCH 023/211] feat: update frameowkr hardware and docker no pod --- configuration.nix | 86 ++++++++++++++++++++++++++++---------- flake.lock | 34 +++++++++++---- flake.nix | 3 ++ hardware-configuration.nix | 1 + home.nix | 4 ++ 5 files changed, 96 insertions(+), 32 deletions(-) diff --git a/configuration.nix b/configuration.nix index 7d6f7cc..d7a3c71 100644 --- a/configuration.nix +++ b/configuration.nix @@ -13,6 +13,13 @@ # Bootloader. boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; + + # Boot time optimizations + boot.loader.timeout = 0; # Boot immediately without waiting for user input + + # Disable slow services that delay boot + systemd.services.systemd-udev-settle.enable = false; + systemd.services.NetworkManager-wait-online.enable = false; networking.hostName = "framework"; # Define your hostname. # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. @@ -20,6 +27,11 @@ # Configure network proxy if necessary # networking.proxy.default = "http://user:password@proxy:port/"; # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; + + # Optimize network configuration for faster boot + networking.dhcpcd.wait = "background"; # Avoid waiting for IP during boot + networking.dhcpcd.extraConfig = "noarp"; # Skip ARP checks to speed up + hardware.bluetooth = { enable = true; powerOnBoot = true; @@ -54,6 +66,13 @@ # Enable the X11 windowing system. services.xserver.enable = true; + # Framework Laptop 13 AMD AI 300 Series specific configurations + # Enable AMD GPU support and power management + hardware.graphics = { + enable = true; + enable32Bit = true; + }; + # Enable keyd for key remapping services.keyd = { enable = true; @@ -120,11 +139,11 @@ # Enable touchpad support (enabled default in most desktopManager). # services.xserver.libinput.enable = true; - # Define a user account. Don't forget to set a password with ‘passwd’. + # Define a user account. Don't forget to set a password with 'passwd'. users.users.jet = { isNormalUser = true; description = "Jet"; - extraGroups = [ "networkmanager" "wheel" "podman" ]; + extraGroups = [ "networkmanager" "wheel" "docker" ]; }; # Allow unfree packages @@ -132,13 +151,28 @@ # Enable the Flakes feature and the accompanying new nix command-line tool nix.settings.experimental-features = [ "nix-command" "flakes" ]; + + # Framework-specific services + # Enable fwupd for BIOS updates (distributed through LVFS) + services.fwupd.enable = true; + + # Enable automatic garbage collection to prevent old generations from slowing boot + nix.gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 30d"; + }; # Power management for laptop # Configure lid switch behavior - hybrid-sleep for optimal power management services.logind = { - lidSwitch = "hybrid-sleep"; - lidSwitchExternalPower = "hybrid-sleep"; - lidSwitchDocked = "ignore"; + settings = { + Login = { + HandleLidSwitch = "hibernate"; + HandleLidSwitchExternalPower = "hybrid-sleep"; + HandleLidSwitchDocked = "ignore"; + }; + }; }; # Enable auto-cpufreq for intelligent power management (replaces TLP) @@ -154,14 +188,25 @@ }; }; - # Disable power-profiles-daemon to avoid conflict with auto-cpufreq - services.power-profiles-daemon.enable = false; - # Enable thermald for thermal management services.thermald.enable = true; + # Framework Laptop 13 specific power optimizations + # Enable power-profiles-daemon for better AMD power management + # (Note: This conflicts with auto-cpufreq, so we'll keep auto-cpufreq disabled) + services.power-profiles-daemon.enable = false; + + # AMD specific power management + powerManagement.cpuFreqGovernor = "powersave"; + # Enable power management powerManagement.enable = true; + + # Enable ZRAM swap for better memory management and potentially faster boot + zramSwap = { + enable = true; + algorithm = "zstd"; + }; # List packages installed in system profile. To search, run: # $ nix search wget @@ -170,8 +215,8 @@ helix # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. wget vim - podman - podman-compose + docker + docker-compose ]; environment.variables.EDITOR = "helix"; @@ -192,23 +237,18 @@ # Enable the OpenSSH daemon. # services.openssh.enable = true; - # Enable Podman with rootless support - virtualisation = { - containers.enable = true; - oci-containers.backend = "podman"; - podman = { + # Enable rootless Docker + virtualisation.docker = { + enable = true; + rootless = { enable = true; - autoPrune.enable = true; - # Create a `docker` alias for podman, to use it as a drop-in replacement - dockerCompat = true; - # Required for containers under podman-compose to be able to talk to each other. - defaultNetwork.settings.dns_enabled = true; + setSocketVariable = true; }; }; - # Create podman group - users.groups.podman = { - name = "podman"; + # Create docker group + users.groups.docker = { + name = "docker"; }; # Open ports in the firewall. diff --git a/flake.lock b/flake.lock index 95181ef..c3c15bc 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1755121891, - "narHash": "sha256-UtYkukiGnPRJ5rpd4W/wFVrLMh8fqtNkqHTPgHEtrqU=", + "lastModified": 1756777514, + "narHash": "sha256-BVCWCoYNCqTt8UuEUbsHJmwjEOGjKatbrBTlLg2rwzU=", "owner": "nix-community", "repo": "home-manager", - "rev": "279ca5addcdcfa31ac852b3ecb39fc372684f426", + "rev": "e31db6141e47f1007a54bc9e4d8b2a26a9fbd697", "type": "github" }, "original": { @@ -41,13 +41,28 @@ "type": "github" } }, + "nixos-hardware": { + "locked": { + "lastModified": 1756750488, + "narHash": "sha256-e4ZAu2sjOtGpvbdS5zo+Va5FUUkAnizl4wb0/JlIL2I=", + "owner": "NixOS", + "repo": "nixos-hardware", + "rev": "47eb4856cfd01eaeaa7bb5944a0f27db8fb9b94a", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixos-hardware", + "type": "github" + } + }, "nixpkgs": { "locked": { - "lastModified": 1755027561, - "narHash": "sha256-IVft239Bc8p8Dtvf7UAACMG5P3ZV+3/aO28gXpGtMXI=", + "lastModified": 1756542300, + "narHash": "sha256-tlOn88coG5fzdyqz6R93SQL5Gpq+m/DsWpekNFhqPQk=", "owner": "nixos", "repo": "nixpkgs", - "rev": "005433b926e16227259a1843015b5b2b7f7d1fc3", + "rev": "d7600c775f877cd87b4f5a831c28aa94137377aa", "type": "github" }, "original": { @@ -60,6 +75,7 @@ "root": { "inputs": { "home-manager": "home-manager", + "nixos-hardware": "nixos-hardware", "nixpkgs": "nixpkgs", "zen-browser": "zen-browser" } @@ -72,11 +88,11 @@ ] }, "locked": { - "lastModified": 1755199018, - "narHash": "sha256-y7dM6ihF4feDgbssaeFxKXjsJb6Rzjz1brc17kSkcoQ=", + "lastModified": 1756772830, + "narHash": "sha256-Cn2q2OpSu9aX0j5uRolbPU5Ms6RalVVc6QWibgZb3ak=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "8bf64e38baa26429c31d0623c3f16812b794b436", + "rev": "b60c294e338f7d15a34f46cb380c6ec84ef4b79a", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index fbe3de8..5a8ea8f 100644 --- a/flake.nix +++ b/flake.nix @@ -5,6 +5,7 @@ nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; home-manager.url = "github:nix-community/home-manager"; home-manager.inputs.nixpkgs.follows = "nixpkgs"; + nixos-hardware.url = "github:NixOS/nixos-hardware"; zen-browser = { url = "github:0xc000022070/zen-browser-flake"; inputs.nixpkgs.follows = "nixpkgs"; @@ -15,6 +16,7 @@ self, nixpkgs, home-manager, + nixos-hardware, ... }: { nixosConfigurations = { @@ -22,6 +24,7 @@ system = "x86_64-linux"; modules = [ ./configuration.nix + nixos-hardware.nixosModules.framework-amd-ai-300-series home-manager.nixosModules.home-manager { home-manager.useGlobalPkgs = true; diff --git a/hardware-configuration.nix b/hardware-configuration.nix index d5b4b01..15c86a4 100644 --- a/hardware-configuration.nix +++ b/hardware-configuration.nix @@ -16,6 +16,7 @@ fileSystems."/" = { device = "/dev/disk/by-uuid/687945b8-9e15-473d-b083-d3a3b12ac98f"; fsType = "ext4"; + options = [ "noatime" ]; }; fileSystems."/boot" = diff --git a/home.nix b/home.nix index b384788..9173926 100644 --- a/home.nix +++ b/home.nix @@ -87,6 +87,8 @@ ffmpeg google-chrome pdftk + gh + nmap ]; programs.helix = { @@ -172,6 +174,7 @@ jsq = "jj squash"; ns = "sudo nixos-rebuild switch --flake ~/Documents/nixos-config#jet"; nd = "nix develop"; + h = "hx"; }; }; @@ -239,6 +242,7 @@ "${pkgs.kitty}/share/applications/kitty.desktop" "${inputs.zen-browser.packages."${pkgs.system}".twilight-official}/share/applications/zen-twilight.desktop" "${pkgs.code-cursor}/share/applications/cursor.desktop" + "${pkgs.signal-desktop}/share/applications/signal.desktop" ]; }; From 549ed8cc4a171c437d4c0b373dbd70686cca18cf Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Tue, 2 Sep 2025 15:24:50 -0700 Subject: [PATCH 024/211] feat: remove unsed packages --- flake.lock | 12 ++++++------ home.nix | 7 ------- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/flake.lock b/flake.lock index c3c15bc..8d3712c 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1756777514, - "narHash": "sha256-BVCWCoYNCqTt8UuEUbsHJmwjEOGjKatbrBTlLg2rwzU=", + "lastModified": 1756842514, + "narHash": "sha256-XbtRMewPGJwTNhBC4pnBu3w/xT1XejvB0HfohC2Kga8=", "owner": "nix-community", "repo": "home-manager", - "rev": "e31db6141e47f1007a54bc9e4d8b2a26a9fbd697", + "rev": "30fc1b532645a21e157b6e33e3f8b4c154f86382", "type": "github" }, "original": { @@ -88,11 +88,11 @@ ] }, "locked": { - "lastModified": 1756772830, - "narHash": "sha256-Cn2q2OpSu9aX0j5uRolbPU5Ms6RalVVc6QWibgZb3ak=", + "lastModified": 1756840469, + "narHash": "sha256-TtOazKYiRtYEEKnLmeBihr/E+PN1xdT/to1NPNsoxQQ=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "b60c294e338f7d15a34f46cb380c6ec84ef4b79a", + "rev": "0532bd5938efddca7d9462778ba7989b3734f965", "type": "github" }, "original": { diff --git a/home.nix b/home.nix index 9173926..0038c1f 100644 --- a/home.nix +++ b/home.nix @@ -45,25 +45,21 @@ vim helix code-cursor - ghidra-bin kitty zellij jujutsu vlc docker - btop inputs.zen-browser.packages."${pkgs.system}".twilight-official nerd-fonts.commit-mono prismlauncher steam qbittorrent-enhanced - openexr # for omelia gimp3 obs-studio inkscape blender kdePackages.kdenlive - android-studio bat zoxide eza @@ -71,16 +67,13 @@ unzip jq direnv - mullvad-vpn gnomeExtensions.hide-top-bar signal-desktop - podman-tui dive passt dbeaver-bin insomnia tree - logseq figma-agent figma-linux libheif From ee67b4c4bf91d59763682d8585786e0e0817fc2d Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Tue, 2 Sep 2025 15:25:47 -0700 Subject: [PATCH 025/211] feat: add jj jbs alias --- home.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/home.nix b/home.nix index 0038c1f..13dd249 100644 --- a/home.nix +++ b/home.nix @@ -159,6 +159,7 @@ jgf = "jj git fetch"; jgp = "jj git push"; jgc = "jj git clone --colocate"; + jbs = "jj bookmark set"; jd = "jj describe"; js = "jj show"; je = "jj edit --ignore-immutable"; From e43a5bf6ed2fa8cefd18436c49ebf8a7ae4baa50 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Thu, 4 Sep 2025 18:59:02 -0700 Subject: [PATCH 026/211] feat: add orca and handbrake --- home.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/home.nix b/home.nix index 13dd249..8dfd2aa 100644 --- a/home.nix +++ b/home.nix @@ -82,6 +82,8 @@ pdftk gh nmap + handbrake + orca-slicer ]; programs.helix = { @@ -169,6 +171,7 @@ ns = "sudo nixos-rebuild switch --flake ~/Documents/nixos-config#jet"; nd = "nix develop"; h = "hx"; + }; }; From 5aab8c53d18409722adb6919a4931a8fd9e0a495 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Mon, 8 Sep 2025 22:01:39 -0700 Subject: [PATCH 027/211] feat: update flake and remove optimizations --- configuration.nix | 8 ++------ flake.lock | 24 ++++++++++++------------ 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/configuration.nix b/configuration.nix index d7a3c71..743ec49 100644 --- a/configuration.nix +++ b/configuration.nix @@ -18,8 +18,6 @@ boot.loader.timeout = 0; # Boot immediately without waiting for user input # Disable slow services that delay boot - systemd.services.systemd-udev-settle.enable = false; - systemd.services.NetworkManager-wait-online.enable = false; networking.hostName = "framework"; # Define your hostname. # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. @@ -29,8 +27,6 @@ # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; # Optimize network configuration for faster boot - networking.dhcpcd.wait = "background"; # Avoid waiting for IP during boot - networking.dhcpcd.extraConfig = "noarp"; # Skip ARP checks to speed up hardware.bluetooth = { enable = true; @@ -168,8 +164,8 @@ services.logind = { settings = { Login = { - HandleLidSwitch = "hibernate"; - HandleLidSwitchExternalPower = "hybrid-sleep"; + HandleLidSwitch = "suspend"; + HandleLidSwitchExternalPower = "suspend"; HandleLidSwitchDocked = "ignore"; }; }; diff --git a/flake.lock b/flake.lock index 8d3712c..a324e85 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1756842514, - "narHash": "sha256-XbtRMewPGJwTNhBC4pnBu3w/xT1XejvB0HfohC2Kga8=", + "lastModified": 1757256385, + "narHash": "sha256-WK7tOhWwr15mipcckhDg2no/eSpM1nIh4C9le8HgHhk=", "owner": "nix-community", "repo": "home-manager", - "rev": "30fc1b532645a21e157b6e33e3f8b4c154f86382", + "rev": "f35703b412c67b48e97beb6e27a6ab96a084cd37", "type": "github" }, "original": { @@ -43,11 +43,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1756750488, - "narHash": "sha256-e4ZAu2sjOtGpvbdS5zo+Va5FUUkAnizl4wb0/JlIL2I=", + "lastModified": 1757103352, + "narHash": "sha256-PtT7ix43ss8PONJ1VJw3f6t2yAoGH+q462Sn8lrmWmk=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "47eb4856cfd01eaeaa7bb5944a0f27db8fb9b94a", + "rev": "11b2a10c7be726321bb854403fdeec391e798bf0", "type": "github" }, "original": { @@ -58,11 +58,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1756542300, - "narHash": "sha256-tlOn88coG5fzdyqz6R93SQL5Gpq+m/DsWpekNFhqPQk=", + "lastModified": 1757068644, + "narHash": "sha256-NOrUtIhTkIIumj1E/Rsv1J37Yi3xGStISEo8tZm3KW4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "d7600c775f877cd87b4f5a831c28aa94137377aa", + "rev": "8eb28adfa3dc4de28e792e3bf49fcf9007ca8ac9", "type": "github" }, "original": { @@ -88,11 +88,11 @@ ] }, "locked": { - "lastModified": 1756840469, - "narHash": "sha256-TtOazKYiRtYEEKnLmeBihr/E+PN1xdT/to1NPNsoxQQ=", + "lastModified": 1757308755, + "narHash": "sha256-daEx9piqNWMVsfJx91O2lKtSTPUXnanS755M1oo5zLU=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "0532bd5938efddca7d9462778ba7989b3734f965", + "rev": "36f0082103e6a4f3ec51e5c48a4c79426c8c6853", "type": "github" }, "original": { From c0ae8fcbd2407f4e0dc2c6b0dd16b51316744d24 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sun, 14 Sep 2025 23:49:00 -0700 Subject: [PATCH 028/211] feat: update nix everything --- configuration.nix | 4 +++- flake.lock | 24 ++++++++++++------------ home.nix | 17 +++++++++++++++++ 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/configuration.nix b/configuration.nix index 743ec49..3416ead 100644 --- a/configuration.nix +++ b/configuration.nix @@ -67,6 +67,8 @@ hardware.graphics = { enable = true; enable32Bit = true; + # Add OpenCL support for CPU-based operations + extraPackages = with pkgs; [ pocl ]; }; # Enable keyd for key remapping @@ -139,7 +141,7 @@ users.users.jet = { isNormalUser = true; description = "Jet"; - extraGroups = [ "networkmanager" "wheel" "docker" ]; + extraGroups = [ "networkmanager" "wheel" "docker" "video" "render" ]; }; # Allow unfree packages diff --git a/flake.lock b/flake.lock index a324e85..0afd1fe 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1757256385, - "narHash": "sha256-WK7tOhWwr15mipcckhDg2no/eSpM1nIh4C9le8HgHhk=", + "lastModified": 1757910558, + "narHash": "sha256-qD2UBG+JfmIE50OmjumOQZ73LKUacxO7uq2hxkna0rA=", "owner": "nix-community", "repo": "home-manager", - "rev": "f35703b412c67b48e97beb6e27a6ab96a084cd37", + "rev": "5e06d0f1844bd150e7813368b06f32b03c816a0d", "type": "github" }, "original": { @@ -43,11 +43,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1757103352, - "narHash": "sha256-PtT7ix43ss8PONJ1VJw3f6t2yAoGH+q462Sn8lrmWmk=", + "lastModified": 1757891025, + "narHash": "sha256-NfiTk59huy/YK9H4W4wVwRYyiP2u86QqROM5KK4f5F4=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "11b2a10c7be726321bb854403fdeec391e798bf0", + "rev": "4c38a024fa32e61db2be8573e5282b15d9733a79", "type": "github" }, "original": { @@ -58,11 +58,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1757068644, - "narHash": "sha256-NOrUtIhTkIIumj1E/Rsv1J37Yi3xGStISEo8tZm3KW4=", + "lastModified": 1757745802, + "narHash": "sha256-hLEO2TPj55KcUFUU1vgtHE9UEIOjRcH/4QbmfHNF820=", "owner": "nixos", "repo": "nixpkgs", - "rev": "8eb28adfa3dc4de28e792e3bf49fcf9007ca8ac9", + "rev": "c23193b943c6c689d70ee98ce3128239ed9e32d1", "type": "github" }, "original": { @@ -88,11 +88,11 @@ ] }, "locked": { - "lastModified": 1757308755, - "narHash": "sha256-daEx9piqNWMVsfJx91O2lKtSTPUXnanS755M1oo5zLU=", + "lastModified": 1757900278, + "narHash": "sha256-Cnx4ZB6CNYnCkTE49z/IWNbaR2l42n9aITIaMzHmunk=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "36f0082103e6a4f3ec51e5c48a4c79426c8c6853", + "rev": "a6fd725c7c9ceab921aa3e88963391b4c9336a0c", "type": "github" }, "original": { diff --git a/home.nix b/home.nix index 8dfd2aa..3fd5593 100644 --- a/home.nix +++ b/home.nix @@ -84,8 +84,25 @@ nmap handbrake orca-slicer + # OpenCL runtime and hashcat for password recovery + hashcat + pocl # Portable Computing Language - better for AMD CPUs + ocl-icd # OpenCL Installable Client Driver + clinfo # OpenCL information tool for debugging + fontforge-gtk ]; + # OpenCL configuration for hashcat using PoCL + home.file.".config/OpenCL/vendors/pocl.icd".text = '' + ${pkgs.pocl}/lib/libpocl.so + ''; + + # Set environment variables for OpenCL + home.sessionVariables = { + OCL_ICD_VENDORS = "/etc/OpenCL/vendors"; + POCL_DEVICES = "cpu"; + }; + programs.helix = { enable = true; defaultEditor = true; From 099da9f196fe602bec3a9c849a8e1bf1f702a540 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Tue, 16 Sep 2025 09:35:31 -0700 Subject: [PATCH 029/211] feat: add tor --- home.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/home.nix b/home.nix index 3fd5593..a5c0ee0 100644 --- a/home.nix +++ b/home.nix @@ -90,6 +90,7 @@ ocl-icd # OpenCL Installable Client Driver clinfo # OpenCL information tool for debugging fontforge-gtk + tor ]; # OpenCL configuration for hashcat using PoCL From cb0b84b2b88ad68e229bc60b783cdf1ad0ea3775 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Thu, 25 Sep 2025 11:50:30 -0700 Subject: [PATCH 030/211] feat: update flake and mullvad --- configuration.nix | 10 ++++++++++ flake.lock | 24 ++++++++++++------------ home.nix | 3 ++- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/configuration.nix b/configuration.nix index 3416ead..0d6e93a 100644 --- a/configuration.nix +++ b/configuration.nix @@ -41,6 +41,16 @@ # Enable networking networking.networkmanager.enable = true; + networking.nameservers = [ "1.1.1.1#one.one.one.one" "1.0.0.1#one.one.one.one" ]; + + services.resolved = { + enable = true; + dnssec = "true"; + domains = [ "~." ]; + fallbackDns = [ "1.1.1.1#one.one.one.one" "1.0.0.1#one.one.one.one" ]; + dnsovertls = "true"; + }; + # Set your time zone. time.timeZone = "America/Los_Angeles"; diff --git a/flake.lock b/flake.lock index 0afd1fe..6aaf8d6 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1757910558, - "narHash": "sha256-qD2UBG+JfmIE50OmjumOQZ73LKUacxO7uq2hxkna0rA=", + "lastModified": 1758810399, + "narHash": "sha256-bpWoE1tiFX5T1tr5EudkpW9Kk02XR+6olkoSkf3nHZU=", "owner": "nix-community", "repo": "home-manager", - "rev": "5e06d0f1844bd150e7813368b06f32b03c816a0d", + "rev": "39d26c16866260eee6d0487fe9c102ba1c1bf7b2", "type": "github" }, "original": { @@ -43,11 +43,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1757891025, - "narHash": "sha256-NfiTk59huy/YK9H4W4wVwRYyiP2u86QqROM5KK4f5F4=", + "lastModified": 1758663926, + "narHash": "sha256-6CFdj7Xs616t1W4jLDH7IohAAvl5Dyib3qEv/Uqw1rk=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "4c38a024fa32e61db2be8573e5282b15d9733a79", + "rev": "170ff93c860b2a9868ed1e1102d4e52cb3d934e1", "type": "github" }, "original": { @@ -58,11 +58,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1757745802, - "narHash": "sha256-hLEO2TPj55KcUFUU1vgtHE9UEIOjRcH/4QbmfHNF820=", + "lastModified": 1758690382, + "narHash": "sha256-NY3kSorgqE5LMm1LqNwGne3ZLMF2/ILgLpFr1fS4X3o=", "owner": "nixos", "repo": "nixpkgs", - "rev": "c23193b943c6c689d70ee98ce3128239ed9e32d1", + "rev": "e643668fd71b949c53f8626614b21ff71a07379d", "type": "github" }, "original": { @@ -88,11 +88,11 @@ ] }, "locked": { - "lastModified": 1757900278, - "narHash": "sha256-Cnx4ZB6CNYnCkTE49z/IWNbaR2l42n9aITIaMzHmunk=", + "lastModified": 1758820628, + "narHash": "sha256-qegU3PxQMleVyPPHHVu6qrqQl4fdja8c6J0/EEI6npc=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "a6fd725c7c9ceab921aa3e88963391b4c9336a0c", + "rev": "39ca0cd474439e1e5fd207b6f6da36191ce535ee", "type": "github" }, "original": { diff --git a/home.nix b/home.nix index a5c0ee0..4e6b46b 100644 --- a/home.nix +++ b/home.nix @@ -90,7 +90,8 @@ ocl-icd # OpenCL Installable Client Driver clinfo # OpenCL information tool for debugging fontforge-gtk - tor + tor-browser + mullvad-vpn ]; # OpenCL configuration for hashcat using PoCL From 1e531e421dfdc21ceaf095c94a2ddcac9d4d9a15 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Fri, 26 Sep 2025 10:37:03 -0700 Subject: [PATCH 031/211] feat: update flake --- flake.lock | 12 ++++++------ home.nix | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/flake.lock b/flake.lock index 6aaf8d6..4ca8189 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1758810399, - "narHash": "sha256-bpWoE1tiFX5T1tr5EudkpW9Kk02XR+6olkoSkf3nHZU=", + "lastModified": 1758853693, + "narHash": "sha256-Gzrt0dOF9oQvQLTi3bke9HKY7Fv8ZGrjAvgEN58KKgU=", "owner": "nix-community", "repo": "home-manager", - "rev": "39d26c16866260eee6d0487fe9c102ba1c1bf7b2", + "rev": "c1a47eae05fb93788d3e3a7f1e63d7fc34d60c63", "type": "github" }, "original": { @@ -88,11 +88,11 @@ ] }, "locked": { - "lastModified": 1758820628, - "narHash": "sha256-qegU3PxQMleVyPPHHVu6qrqQl4fdja8c6J0/EEI6npc=", + "lastModified": 1758831668, + "narHash": "sha256-Twa/Hw2qe02MVKHZ/hcRcP0PauHl1iuXrYknUGqOj0U=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "39ca0cd474439e1e5fd207b6f6da36191ce535ee", + "rev": "cdbd421a5ceb7f268bb9c2a04f7b27d04b93c7eb", "type": "github" }, "original": { diff --git a/home.nix b/home.nix index 4e6b46b..068a43f 100644 --- a/home.nix +++ b/home.nix @@ -92,6 +92,7 @@ fontforge-gtk tor-browser mullvad-vpn + arduino-ide ]; # OpenCL configuration for hashcat using PoCL From 716ff2ef185bd4579d8239984a89a171d763a90f Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Tue, 7 Oct 2025 14:28:03 -0700 Subject: [PATCH 032/211] feat: update flake --- flake.lock | 24 ++++++++++++------------ home.nix | 2 ++ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/flake.lock b/flake.lock index 4ca8189..b39ebd5 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1758853693, - "narHash": "sha256-Gzrt0dOF9oQvQLTi3bke9HKY7Fv8ZGrjAvgEN58KKgU=", + "lastModified": 1759853171, + "narHash": "sha256-uqbhyXtqMbYIiMqVqUhNdSuh9AEEkiasoK3mIPIVRhk=", "owner": "nix-community", "repo": "home-manager", - "rev": "c1a47eae05fb93788d3e3a7f1e63d7fc34d60c63", + "rev": "1a09eb84fa9e33748432a5253102d01251f72d6d", "type": "github" }, "original": { @@ -43,11 +43,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1758663926, - "narHash": "sha256-6CFdj7Xs616t1W4jLDH7IohAAvl5Dyib3qEv/Uqw1rk=", + "lastModified": 1759582739, + "narHash": "sha256-spZegilADH0q5OngM86u6NmXxduCNv5eX9vCiUPhOYc=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "170ff93c860b2a9868ed1e1102d4e52cb3d934e1", + "rev": "3441b5242af7577230a78ffb03542add264179ab", "type": "github" }, "original": { @@ -58,11 +58,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1758690382, - "narHash": "sha256-NY3kSorgqE5LMm1LqNwGne3ZLMF2/ILgLpFr1fS4X3o=", + "lastModified": 1759733170, + "narHash": "sha256-TXnlsVb5Z8HXZ6mZoeOAIwxmvGHp1g4Dw89eLvIwKVI=", "owner": "nixos", "repo": "nixpkgs", - "rev": "e643668fd71b949c53f8626614b21ff71a07379d", + "rev": "8913c168d1c56dc49a7718685968f38752171c3b", "type": "github" }, "original": { @@ -88,11 +88,11 @@ ] }, "locked": { - "lastModified": 1758831668, - "narHash": "sha256-Twa/Hw2qe02MVKHZ/hcRcP0PauHl1iuXrYknUGqOj0U=", + "lastModified": 1759810989, + "narHash": "sha256-QZGjGBps8DLx56+60m1nAaJihNZZXoggtB76nCE7nks=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "cdbd421a5ceb7f268bb9c2a04f7b27d04b93c7eb", + "rev": "a36d0113a80d1b70511192bbefdfa30303f05fab", "type": "github" }, "original": { diff --git a/home.nix b/home.nix index 068a43f..254d404 100644 --- a/home.nix +++ b/home.nix @@ -93,6 +93,7 @@ tor-browser mullvad-vpn arduino-ide + mgba ]; # OpenCL configuration for hashcat using PoCL @@ -185,6 +186,7 @@ jd = "jj describe"; js = "jj show"; je = "jj edit --ignore-immutable"; + jall = "jj log -r 'all()'"; jn = "jj new"; jdiff = "jj diff"; jsq = "jj squash"; From 8304d8dcdfa477b03ba544bf290d7899dd9ed5bf Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Thu, 9 Oct 2025 00:42:40 -0700 Subject: [PATCH 033/211] feat: remove unused --- cat.png | Bin 28441 -> 0 bytes configuration.nix | 2 ++ home.nix | 32 +++++--------------------------- 3 files changed, 7 insertions(+), 27 deletions(-) delete mode 100644 cat.png diff --git a/cat.png b/cat.png deleted file mode 100644 index 8b182e2cd117cce3e71b3948f660f26ba6c3ffa7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28441 zcmeAS@N?(olHy`uVBq!ia0y~y;C5hOU~k}HW?*2*x~Vpafq{XsILO_J@#aaLdIkmt zmUKs7M+SzC{oH>NSs54@6p}rHd>I(3)EF2VS{N99F)%PRykKA`HDF+PmB7GYHG_dc zykO3*KpO@IhN}TSA+GEULIwtgLJW$A28ImWGT*;_7iCtKWLN+6`7^ta(&tZ~v$C>8 zn3cbM`_92AoSu=v%qJ(ts+yUZ$;cy{ot?wODkjXR$SR<~%CEr8C$DAXY-#UnVq)sy z7nPlrZD44albtgmBH?XJ!Lz&9IGIHF*d-s#j{DD`ywpebOru>}Tig40?->{vUN^1` zcQ$0=mHqVTb9{V!Mn*OIxT6%g)M00iX+{GJq$vZWgN15?k$Z<+pb2~`6 zBt^s&R(i+F2L&tt|Nq~?n45uLjhj`>D0j~m1_lPs0*}aI1_o|n5N2eUHAjMhL4m>3 z#WAGf)|(r#lS7Y6wk0ynoS-SoCBtgpExE`gXvM}Xkye%?fByfUGFc|zYs#8=%XWva zkGo#`%3$;NxV!JGbMx=s^4`8QdzbJ}pS)XZnZKvMob_p0jO()Ylw77Q47XGmGB_8g zGHzjrV&J{Nl;O#s%V^@jyoDiZ(pJt3Oc|3I7O-BJw8pnV%waYQgKon#xGu&mFBKza zGw3#$aWX`KH8zNWH3~U+Gw@zOQ>&6KynywB8lwaE0#&#!hTJNTYibVM3w)UxrZGeb zIdCsv1#4uvAmqSof~r>cfbMQ`MmdSoQ>9o3FkoPnd2X7{bKU5$l zc^gSHL^0@|oWzoGGKV39af^z#&;r%Xj3D3Wcs5Ks!v=P3iYL<+m=2f$Xo|cysW3*N znP%cZs+A`{{#E_-Wr?ys_nylhS(H2~wdYK9A=g3Y5UCsrn4bxaIOo9X_ z?}bU3j3B>;DLHsAV+99BCxh-xF;I}xTW{{?HGLQ6o=9KxI%;ahKCL&}=7CHZ4Pp-5 z3mBt74rjdp=6W+_Fm7Rx0tGUI)B;8jgMs(LB(MlmMgv=hCpeKYnmC;HodOdT1H~O& zTNHzC0~;v58rVP@z==@>ECMnyN(h|97prptNVt~vA zg)f6H=k)4=pE^!iOX7B~K9Q~jbr*v!I7xsl1EoDih-FfcSOJ?4$|(>jrVOxAycZbW z8VfowZvp9oh6mV*V6W?f?d8271o9!+a8T?*q!>-Wf@~QL-)3?w0NVvJ8I=B^x}a8o zoQ-TRBnTU(F-R>?mF2yly2P$mp)~%l>Y=CQr}cY1K*~W%AXyL=;$X``ZUk8iiZDh{ zc1Ly>SP&LxAcrHfL5hiR4k)s~g@@DvRWvp@p}>*?gDxXDz|b7S{H3&3#&Ty15u8z?7$tQK-${!(~uqQB=3 z9mTC+H;6fSGw3$*g9|orXoCt`SYhc63iFSkG7l`(P}W!D1+oU3utEN;0Tp5(Z$QdM zusWC#z44$j7F299Zz+Bf4DuGJ?1q~6fcXL_GlCKvC`-YMSFjO(U{X>Gs>?;+ew3-~ zW6Km%LGaq$JLpz;}%(PiTsKwbpZ z91UePpt1m*kwJ`xX({s)<@P1kd5F1=xL&D_k<`={FIn9^4!c|fZ4>k0Im>}G(h3bxxiI{fj5ZZ?M_hs z7HebxxpCfZkh=sq9GJH}=Dq;39i#~65m2s#x&sy$lNh2{m@X)=UYKVM%JC4LuXl1U zP;G!33HCNf5&4c${(6q@%eM8$gT)-YC+IRomP9kcoCiux;3%5}uHrL5MYSh`E>d7_ z;a~xI{_7M_w00u}CCCfVScziFfJQJUsJ`kA138-If|5Xkn|8yuDWLKTs?$Fbl)WKF zLINHXp3tx&*)d}5U-oh=FlAm~TOJeUDevn3&%|%>#QMK=TeLRGyQC>_$)`nwG6bl& z1C{ikqy$Qsu(BT#?%bes2P#lNktyv7P6^;@0UEzkKt)hJsAqlrVah(q-|H&D$9E~y!G;TFC)%DDHq%$H=QTb>LVp4E=q zz8!tKd4>GS-+!Me9+zJLiC$h%rUhkk6|mW6j9Vr%fNM$K3pZFU_%S(vYHAaQ;AOr*6+&xyhpx! zzslWc_i-aDD2SNB@eHk+z<~x4fmK|P$N{MYmCayBfh!zv*nndOlvuzq1BnlKjDf=p zDGotV52{z;;-K6Bj!00o1~wU#RA3@t2SB3@Dh_ulIK)7LNDc;h0hC9;i3eQiF@s&D zymg5*^DmP_te!zydC&FbLCtg(P~$+z!5fk?m@+)U4P|czT}Yw^$xZ^*JRqNf)TlCU zp_!Jcu`Ud{YY(P+PU3r64@xDIR6zCmG_ZwC8J=MK8?bUgJ^)uulR$MX=K@ub^QSRH zVdHu-=z4-{E!+mSfAieJwm{x(fm*}5*Cw~VeYNR&GiUa<%#tVmk2jy-yf|kX3#c*4 z2`UD_EeB9@0-U_Tk%uV`O$y-HVuThCkQjv)GLWVSsDX*Y1W*!z*+Og6s?IG)-z(>0 zC){8sbyhV~&T^g$yMigW(ZQe#Z481MN}#ZYq+xGxvH|7f1*%}*g9^tBpp*m6HK6DO z=Mhjs0xJe*F6@dykq1rBh++`h1_agKyik+D!HHFI6ez7g0vO`pwRgW5e45FyWy!X< z4>MmJNN0u=Y!g({nZc1LwLsNz(i~n$4)$(Rv6Ke8wqY8JXOS7WXThM$Iq69b132=c zgj5)}%;5z$&|&&OnGmPylQ$VajXLHnDjt(IGeTOEo)cIu6q$kR1(-f?5)x9ut{UuA zP~M)T;Cb%Yqx@g~f)4LjTMK^RT#&kO)m34eZa2GBbuUQa0xB)%YJjSWEeuhIWE;vB zft#g54&3E7j?i`{NDZh01$zTjSA&Z!P=P<-rd%=$Pg%Rb{b{XC?(ZtQ9)_q5OKWR2 zv%aqPQv$mU+&csnmXKHimz3ZH1?umB+lNJppmr75Yal;@GacBEprRA*$ALFTc`M6> zDADM9zpLKw6|E`U=|0~*UgXNF_4D1pB{%m1#Y@%fpuz^!YH#v*FAGktps@|5z2%@Z z2kDjwyxa@+Kd3ZvT=Ja{R9{0304e*nk_l7|gDU2ZFZV#H4BQJKQ&4O%6G zbzxzHod`|#P&T+P2G$Gm7sR(qGnu6DcXD6;?*W1wOOlrCW-9892A z1~@l@MZngBT@OydCXfL!up>Zh&^QC6=mj|fl&e8840bC>3LJ2dwg9-%0reHAF%I(s zj16kxfmMQS1jR2XwSmiW;+^!x>%=i5&IPKO`(xHM=gY1HJBBF(Qci;s6u4{##osh= z1p;!9D!5hwb>qRchibz#aKR7u9aswFSx6-VaxvXwQ@l6IPC{J9Mrymma5S9laK>eHzJGzhbyRg z0!l>)?=o(|?_Ff;_L^;a=xHRmh6P~p1~dz_9Zk~;bns&9XxacGR{xO0hCG+F%253 zg~S=C*u^Oh4zS17GN4hkORN3|r`^6@ELZ9FyXxKMxf&o>fCu5g<((?HoCTNqpb;=| z0S~T7y&+wHW^h4E->Q_LkM{sQnPBIXU?{r`lE`*QI0#JnuZI^-vFTnLO*qg|@wpeq6Mm!;|0F$6L z3)FOQt_2H1TnZZP0Jl@Y4FXWp6%fDfdChn&2>u{wA&01mjZ49eY*W(y>DBeQRc zgJQjr12l^SZXtn2%AkhvP6rLWfONxx4;q@_^bcpJ#4~JRxxl6b8m0vs4e}2tYlG^L z7|`Sys5B6hnYeaGjhLdTgLn1&K$F{gKW;DEYwnnLVe*Q1-|zI#DZYBwaXuS(>IT#g zg{BcmQE`iz89Y1-cObaX1Lti}x&ylo+@S-Df1KgZ44%vZ^-Dn!04lJ+K7ZQ?@*P+a zhyjT{P%44N4}=YJw*&K*iZjc>-8xWS0rfXP^$olmWrc z0@vu^N(^KZsHO*}5Kw9ZTLE$?tZIh_5hz_i(mS{x3obgr%{y2T2Fi1w@PK3&NV^cE z7oig3VW@Uc?19V#x4R)75SZ1V$`d37YTl9M$dWR-pDxFH0`G2N7yQSxg|i?fW&OdY z%LDhP&#KQ>S@~bi(iq~FE#S!oNa_Vu1CY$JK7F+ zz32Jo=AXPjxnA4;=cM^F*Ir(6HNQ?~=WK@Dqg)FZZ@mTgZa~i4mNadGiZE;~0P6*Y zw`Gu`2JB--sReiQK+3@CBR4{8BSxtOsYkgMJcTLUvL=Gj#9{YcP#E%Fc&FwNy%98~ zzZ;tTq!z42mIvp?2DXgt(xCVNsfh|(1Iic>i$J#Qgc`-5s~yI`dm+yp_LHr6=iFbKt6g2zuT86(m ztA5W6YtZ{?@=s88dbldcHr-f|=T3t>2g<45pa$tXBe07=HZIj}V9O|%1p6h5A@?OH zd}G1k)ga~|y#^Ez(?OmD#Wq9kOHl9I#9{VlNGNP80R_1pD9Az0btJ36xo+AzkZ)5V z0mHZj&8iJ3Rxxi`$_+}447ukZad+zyDBbPm0SPi?G$2_8u2G_Qp*RiADsVo4`)cjX z>F+*s)E}QV#XoMbj0lLmljOSBNgy9M<5c_x!v~=NVye;rLb$T+xAw14#Y> zc^q6wfeJoQVUY?71h67dDeNr{3c9;sPl7TFD=1q+Y(6_UO{{uv+m#l*>*UjVHxFC3 z3#v=XmKR8_bT5-T%m1S8>fUEUddy!8t$U$K8suw8{QxUiA;ALflp{(;kTOu^BN z$cCgNaIFnWBOnE!VJ%RC0JY5Eg(;}50f}`)nG3fL9Nn-I8C-~g(lV0Opri*D2N!M# zl_;@>&0&bL-t;!p;ir`zZ_9R^W~iNWIf(tmoExeldOyR@FPe0HPRzRMQ`0AMDueUl z-BgfYK|!M1PzITcN3(ZR3BqHH;AE`}Nf4?H+dxuJAsJ?Hn#amjRD5^JY`gA>>JM)> zMKS)`-Q>j(`@MQ!zgJxG-OH6iXYCn%TpOmD>NHH74au>(4cppSFBBESg8147hNwI} za0#=8;g*z`*om{EARhOERNm7oN{gX!6?vE`!yHr^G3077ZCR7ZxaCd^C}n^u6uhQy zaL5A{ET9%zc7)s7*`N}vLCoQ_l$gWro#03h7F>|Z%e~;~Ge~j8y-*DK{o;w}nK6EUwkm!7K0EAFmDj!S zlgIY=r0srxd)}_cJ|}M9-6j3^VLv!ML!ug%f};@SE+i}D34_7~lr^?6L|tnJm;Nm* zpu#RSBZ?pFmE8;r7(qqhX=tGg&Qgq9?tlv%FbCvyR7r+gxnRAZ&=hkxT_pgrW%dLH z-V4*#@%X-W1m&MxaRw6yP$9Y#Ts45pYf$F|Qs9DAfN~hBq?p5QUx*C2_>Y9RP*@1$ z!l?^0Z8<Lnmm*idDta|J5lpP(< z=KsmQ^ZoW_mJ58VK^_OU%Rou!Rw6jHfIij1;PLaKiqP#`@pH*hv~wmBv=ucHt8_qE)@&AwD~S!KLmHI z`97cFzRSDQHs)fXX?$dxA=Bvr@HiKzPsU9@smx+K}2WxJcIDpIp#}U{ujI)A3D^`3#alA#E{Q^U- z8>5MX^(=7InDZ@Qyw$_>VkYBWwoPm04{kieyWQyIkJu^od*wI%4%~4y{{OxOf96C_ z1l3M_GZ~_$O$LS8tsYR{DpdD0sCx!6@bs!_XFzjg4Q7iW9rT@ypoT^oXb8YnqhZ?4 zhha=64zodC0h#lx4bsGYJArdSswKF`5B7HC)lGB2{cEtsHCZR`fScu@5RPKXmW0@o>toi zu1dg#kE{`-X#?hfvk%x#kjua!1WBKuqy-xgL1sgAfhM;HqmkApoP=af@4Cf3{lC=J ziB)xa{VJu}GU@hWC6N;3|c< zycsYqSQ4C)7<3~c6+Xy9Z_K0vR|zVNH-Td&N)0kBa}8W6%vOhSr-C!K3%G~u4V460 zD1@2D;VMBb3rNzM21-9`l^_2I+;V*4U+0wAvv=Gt{#i1wo@vXYqPzKem91-c#C-qh zuIPX9b)2%;@AVWcY=>%|?{sZS32B`(Q1`r2<2cBS-!-b;3sv)jJ zHxAO~1(&z8?LmfuDh+NPkh9OqgG>M|RcB=b6^7vY1a3LR%WHq`tdWyEwdp`j>pR95 z6HV?v&Ryla?WZ!hxYjWMd3p;Z%%-ubfsBKO*d&ONpzs2@C>0z$V3oWVrl~rdW)gN_ zhH{xQA`_TEK@BPz8c>bdbO2o1LX3&pbO0Q+pilz2S_d2`U<(;9;4Q33#!+XIC@-D{}zn;HX$oED4 zqSWc2Tkn~w<({6e5#IXi_20VBCpbS?NOj&yzw7i$E}gmWemyA7gByjA)&`UW7a@?a z1(V=H7?M!H1N2})P&|Pd;0yu^R&ad`X`jFq!+JhYlR9;5}d(iCha zND8&L1~wcNm2k!2gbYcP5Ry!1$MIj-TXe6f{y$#-co^N$SrGZp$-67 z45x2_Ge1NK>_DU_03~IRNg$!9X-ioyq%k=#Z-G=*kfB%;huNU|Rh#jb7E@BgzIDF^ zPefI}-+aKQVXeno(QgW0Q&T3%Br09a{BZmmC_BQ()qJ6j1E+&|Oi)9aG9s%%UIKdr zoQJddLD?JR07#Icl571z4mSf2)PZHz`h)hgfQA$y!3a&X{7{|2+UYo*f*ym!&+Ih~U;7C_F(04N|cctOuTgfoK6u z(}9a@NX$cLRv?DJ_fml4AISvJR2^LVvKZ)!J0uejQ3-AwK)9eyDUfIbWo~f85Mqd! z!}`1Y7yqpPS@^{A9rp#*C2`Eh?OpwDg~j}{jAFiUb5(HCzgIJ6?@v#91g=jp$_1FI zumTpQ01{4+qy(zfAb|lPVQQeR1{bgpl@QZF14xiy0F%f@ft(LA1X{*Iq##}a7dP;T zf-*3SLX>%EMuAHMP*n|f1Ef6*2|REQTle9nSx?{eGJg5<{*evSi?2IkzR&hv^VI-U z4}vRWh$CRjqCp020jz)~jNw_x(Xpnfa`?$sjL)>IUuw zXTjY?whWNv@Bju)cES=aDjTE;DSp8AgM$w|$_xn=69;cGMaXJuaD0Qp8RSAxWT3K< zDi!d^G&ugilj;er2F*Sr4ji*uiL#4wQi0>j$S_X-ZoUrK%d{7(iu5Zv#X4UPof3!C=n zI)Q5*P|Pr!I7HtA7YmSB0i_LC;sZx7$erczG!O+EJYWZz372Ht0_lP?=$^iikuLvnD9^L1p+fbI@2A*mo$B=1gCB3;rz95~-`7H*JbU?$?vk|E#qw`Wfo@^Pcy= z&`r0E?yc%Rk@e=Hf1vDsIoER=(ilwi`X7E;=K;>t5N|PMfSM;T!x6;{C}+a+KO_Mm zS3jVsKSU-1)!?u)6yz6h(9Gt9*Z|fH3QllPfPIgsTtVXasy?J*5T^Z>4|t3W65dFO z88j>kG7hW`EDkQFppJl)0WU%sYnc}v{3!9GZ_T^fzhM`)#ngp{o~*9Fy27RG#laB(aS145AmVTm!z$1?1wRpp#S*rRC1MWo*Wb!ci?QqU^4P1j zpnU?^aBwC>N*|yYLNBCX%@&Y%Pzn>++B8TA;Poa%FF1vPtN=5R(*a6O163^;-UMsG zD6t4d1WLmk=E5(09ZhFKXe>$<@-n7%D@!sD~Je~AwZrlmCtOhZM_uE%%)IYO` zS*QH)fvtl(o3tca>*0`p;LcCay>G8K)W!T;yTD3jyVEzh!av&r_lKKKy28M6!9%y< zUjACU-bu56+e9(ngj+;>o)>el2A$SGeC(oy9ZKnqQcEyy0iVJEO>U@Z3LHX6xe(-V zP;f#OgI$B1JW=WltWN%A(Qt2CPpQnEZ|3hOo-SRH8)`4}y*fU>{Kg6W7S$8m4lzot z-2T>t>4h>w)syP|UH^pFI=(7L8ni;T8pKA=g@_D+5wVa3vZzrF@)3R!bpN6zXB6wC zz$<6LfdAFeio^QTf1vULSvL9=$nhxk60$T%KYBfYo?MXw5Ij4+ zx7;D$J1b_N=JekaH;UG{|C{$G2e+CKW?|OF_=8Pqfuk^D>mC?)pef_@4tG5T-igrF(?S1ldm1$&Y$Dh3mta`R( zsjQ55XRs~)u5^Me{>vA=FeONX78)GLe#gqbh~z=A0$VVN@b$&ZyJ4L^P+*BUREtAg z3?WgY1Ed00n!?#%kcRv~f^Ohh3nXP zaTK}mqyUObxJroPwm`HJu=*@&3AY}yZWo-!k)s`4;DbBypj;1XAR-41r0>PM7-9)L z2*1q&x5wdbh%-inAKaB-t03wSRXCQCzzu2%EN#9umFK)x=cSPhT$!&+O zNj1oI-kKQm?)&zriB|5LajM;b{h~tpZN7 zAaA2+VU$|XD1k_ijJLF*>FLG)ZSm~dMbeH8ZTy{&Z5+?-dos;iVZ*(%if@uW{p%ND zYGdg#eLCw^nCGv5pEKODzOJwXcVoeBfQA(~B;d|Kw-=nYKvpAb0hQ55pxQy~3+Lct zqoDEy?m1W_!Xp4ZnZV6J*24Cpo9UN!@H1wszGFXTN?lyWSY8pnh?n@DfM{fo{(cRHxF zf~QNcEpR`;0}~#bgc$Guf~8QT$`2eP2;1Sdz`co`@q$Ovxa7nGi^ETU{=Is|Pv-d4 z^EJ!D*dCdhon`-GwP9atU+v7DS_`sIoSPu!@LpinoyIHH#h?WS5RZdOdQeFPGaO4U z0i_CvVk{%M$PQ-QQVs9oA$bfOC>TBmrzfOzfow6TZiD+D6uWmpOE)0SL>{@pXy$`z ze26kA3DOL8J6N%9LzwV_`?4*P3U14;6v(V*{J5%N-9#(7sg{RJZ>&-@+PwH#vE}Dg zH(ig-Z8-Pl@VeKlY=s|X)p%ZMP3Bx+{8z~7RrRAE!7EGS7yN?441RDC*nx-{Qpovj;1C6ED@5`N%G@hx<_w;iz&krZ!3OpXVlEhcUns)U zpe@<(Bm&*=4{{Z#B@LPb#AL&_R)VIXVXGrR%0L@uUz9Wa6|gm4ysKN`^Uj#x&-A#i zue#gKv%vVuZmsE$LtVD`KK`_8`VFZC@#bO5rc7K5mVTZDDGeYA6yB$f0#8Fjq+pvi zLGDCmgAxm#U;)JsxC15T06oS`;1=&88lJUJ6uirf|akw64DwKOy@>Xbf2xH zH~uoi-PXrE-0K)$NUh9%e%W==T#I`rpGqxw9QZme@XSwdd=&K^mZG7Zd@Y zNn;3?RR4f#1sz=lNz|Z8ejMT^gU__OlsW0gp8M&g?^Ab5yqmwa`e}sw z=UZ889)F5nnf(3FmPhmK%S^8^TD@yo?&49qS82Mjdo9mG(8^FqfPhI-%K+r^K+IwB zU^8u(+=A;9t@>84GhP$8qwR6U6)U~;fau?6tQ@X~ZDsrTGiDzDi=WT;2w#YIl5|l1 zYRfEmcWw3_6UekFxK2cx5kRjV;Eg$GVG2n;AQHDq&`J+*MgV0NP$>^CRl&&(CC`Gl zMwR~n_JAAD_M5EE?eC(>&-cVZP~T+ zyypsD_+0txIp=Gpk~f-yL60{fG6HzD2{^TYauamlHMrykmDcdW9;Mnrs)9hZ6P{!S zG81ArF~uaPa)#Ros$TGzjI|OIbMTg8e(^LW&OE7{X;<4DsW*L3i`b4^$2;u`Gi81; z*X49Wj@|V2j4#ftTfH~0mQ&G`3sD1tDnWRuPFz6?Jq8(+WWYg&Xc&On0B|SbDSE&s z=7QoA9I=R^9goSx6x)zO@Sbtf@<9FO{bzp0Fkd)+Z|;syk{)Xpr?`=ssE}&3DN=@*SUckzTH5nS}LHLL==a}$bkW}%NUZMYZ_W7r!Z(H)k zP0s(&w|Hz>ez$vj@6o%rSzr9Hb(^bFT4)JbDG$nZ@bh)xM?Qf(L0nKEdIR7?DZ##B zL<$!8If3AU0D2-0el{XO5gDTA+nsWkoPGXjPj9vEIKAV~z1P=F^wu+%ocS;r zVH{EE7C8;WPQYR|ageSf%I!!+2#R`yBM$o`n$3*xQt-H>t~-rf_w>JhnLOKg>hQqe(Hd>~hz$kw5Ez90nvh{Rnpg94N3MFd;D zY0&X?jt_5jr7kd-e>%fj^1|o!+MAze>t~wwloeL0FPQJdwnXLX4xS4Py&0g&3UW>* zICX-GU~puD%W+5!*$F!S1|?d-DnL46$-D!ctB}<|PwNEt*db|a+HTO+97K+Xs(@Gv zaRQmnDUo*A|65=^U*~)HzU0f!)7m@kv_6iCeV&}+1&;N@8lW*! zl;Q|1&b*}!gyJj`H3cJPV9DX7oQ!cHAcX z_i`N1uCRYMR`1a2TR!*U#+Y+|X74g`QGEzMID;}rO0R|%Qz%gliwKAy{>Xx>=?z87 z1F#H)67S$Ffh9e_#P7e+j<{Y}DO{^--jhI=QU{;=Ju zUCVX!;OF2I2Gjc9CZCvPbMEQ!da(tC>x2%{9pK8U|z2mL`3A-Hg9V9T%u9RvnT z7PmorcOju%&H%Ozx{Id}yhjfdx}fq8a!wd1vqFxx0S5}AaSryLCqr$nL%Q5P{e?eO znr6S3J@awdxy3hm%8)=XQnjXth;+xT>QK$ zX5H3z`)iKL&fB>TRF%%^c^r(?g&^MjNErex6Ck+-dd@gFBZJxyNC_XGZ(s!|dhZ3j z_lnyMs3tV*vsjQk^Z2jq;Oh)uHZp&WOpfzT`uv}DYyG?1$CkbQnLJ-e(&4&?Z2v1M z*ZEEp7GAwsTK(Ym)db{Jf?PK9UYHaMAIt`2)tjY|f)+w*D1*u>NZhhzG`LA3m!04d zEO;po@EuOIx%FZ;-=K7H@1xxsL1-?=o3r z!%iVB^< Date: Tue, 28 Oct 2025 13:03:44 -0700 Subject: [PATCH 034/211] feat: update and alias --- flake.lock | 24 ++++++++++++------------ home.nix | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/flake.lock b/flake.lock index b39ebd5..d8f970e 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1759853171, - "narHash": "sha256-uqbhyXtqMbYIiMqVqUhNdSuh9AEEkiasoK3mIPIVRhk=", + "lastModified": 1761666354, + "narHash": "sha256-fHr+tIYBJccNF8QWqgowfRmEAtAMSt1deZIRNKL8A7c=", "owner": "nix-community", "repo": "home-manager", - "rev": "1a09eb84fa9e33748432a5253102d01251f72d6d", + "rev": "ca2ab1d877a24d5a437dad62f56b8b2c02e964e9", "type": "github" }, "original": { @@ -43,11 +43,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1759582739, - "narHash": "sha256-spZegilADH0q5OngM86u6NmXxduCNv5eX9vCiUPhOYc=", + "lastModified": 1761669189, + "narHash": "sha256-INBZnPA9JzyDn+Fnni2250PbRzKx7Eafz0T2c7NhXiQ=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "3441b5242af7577230a78ffb03542add264179ab", + "rev": "9c0ee5dfa186e10efe9b53505b65d22c81860fde", "type": "github" }, "original": { @@ -58,11 +58,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1759733170, - "narHash": "sha256-TXnlsVb5Z8HXZ6mZoeOAIwxmvGHp1g4Dw89eLvIwKVI=", + "lastModified": 1761373498, + "narHash": "sha256-Q/uhWNvd7V7k1H1ZPMy/vkx3F8C13ZcdrKjO7Jv7v0c=", "owner": "nixos", "repo": "nixpkgs", - "rev": "8913c168d1c56dc49a7718685968f38752171c3b", + "rev": "6a08e6bb4e46ff7fcbb53d409b253f6bad8a28ce", "type": "github" }, "original": { @@ -88,11 +88,11 @@ ] }, "locked": { - "lastModified": 1759810989, - "narHash": "sha256-QZGjGBps8DLx56+60m1nAaJihNZZXoggtB76nCE7nks=", + "lastModified": 1761535208, + "narHash": "sha256-E1PobJMiFmVUX2YdqYk/MpKb0LXavOYvlg8DCBBzlHc=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "a36d0113a80d1b70511192bbefdfa30303f05fab", + "rev": "79a94872a3e6993a051c4e22a2dcb02c1d088acf", "type": "github" }, "original": { diff --git a/home.nix b/home.nix index 60c813a..9ea48d7 100644 --- a/home.nix +++ b/home.nix @@ -168,7 +168,7 @@ jn = "jj new"; jdiff = "jj diff"; jsq = "jj squash"; - ns = "sudo nixos-rebuild switch --flake ~/Documents/nixos-config#jet"; + ns = "sudo nixos-rebuild switch --flake ~/Documents/nix-config#jet"; nd = "nix develop"; h = "hx"; From 332442567cf431ac42a15c9fb04328d8aa7f45e3 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Tue, 28 Oct 2025 17:28:56 -0700 Subject: [PATCH 035/211] feat: home manager zen --- home.nix | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/home.nix b/home.nix index 9ea48d7..0bc8b70 100644 --- a/home.nix +++ b/home.nix @@ -1,6 +1,8 @@ { config, pkgs, inputs, lib, ... }: { + imports = [ inputs.zen-browser.homeModules.twilight-official ]; + home.username = "jet"; home.stateVersion = "23.05"; @@ -52,7 +54,6 @@ jujutsu vlc docker - inputs.zen-browser.packages."${pkgs.system}".twilight-official nerd-fonts.commit-mono prismlauncher qbittorrent-enhanced @@ -221,6 +222,17 @@ }; }; + # Configure Zen Browser with about:config settings + programs.zen-browser = { + enable = true; + policies = { + Preferences = { + "zen.theme.border-radius" = 0; + "zen.theme.content-element-separation" = 0; + }; + }; + }; + # Override the Kitty desktop entry to always launch in fullscreen xdg.desktopEntries.kitty = { name = "Kitty"; @@ -237,7 +249,7 @@ enable = true; entries = [ "${pkgs.kitty}/share/applications/kitty.desktop" - "${inputs.zen-browser.packages."${pkgs.system}".twilight-official}/share/applications/zen-twilight.desktop" + "${config.programs.zen-browser.package}/share/applications/zen-twilight.desktop" "${pkgs.code-cursor}/share/applications/cursor.desktop" "${pkgs.signal-desktop}/share/applications/signal.desktop" ]; From c2019067b202c8b464d9283549216f5e0738cab8 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Wed, 29 Oct 2025 14:48:46 -0700 Subject: [PATCH 036/211] feat: add packages --- home.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.nix b/home.nix index 0bc8b70..f18bb8e 100644 --- a/home.nix +++ b/home.nix @@ -77,6 +77,8 @@ tor-browser mullvad-vpn element-desktop + font-manager + handbrake ]; From f6e564e22a1535499c5cf15f9ab9f7dfa5be1842 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Wed, 29 Oct 2025 15:02:49 -0700 Subject: [PATCH 037/211] feat: use holy c --- .gitattributes | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..5c1c87e --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* linguist-language=HolyC From 785768d3707bf43e850348db808faed4df939d42 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Wed, 29 Oct 2025 15:06:29 -0700 Subject: [PATCH 038/211] feat: add readme and credit --- README.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..be46434 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# Jet's Nixos config + +I've done nixos a few times but this time around it's been very comfterable. Nothing is really that special about it, but feel free to copy it! + +> silly language thing creddited to https://github.com/SylvanFranklin/.config From c02841491169331ef520b65dd9bcdf660e21fbc0 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Thu, 6 Nov 2025 18:53:36 -0800 Subject: [PATCH 039/211] feat: update packages and add some stuff --- configuration.nix | 14 ++++++++++++++ flake.lock | 30 +++++++++++++++--------------- flake.nix | 18 ++++++++++++++++++ home.nix | 3 +++ 4 files changed, 50 insertions(+), 15 deletions(-) diff --git a/configuration.nix b/configuration.nix index 059375b..0dc9b62 100644 --- a/configuration.nix +++ b/configuration.nix @@ -261,6 +261,20 @@ name = "docker"; }; + # https://wiki.nixos.org/wiki/Appimage#Register_AppImage_files_as_a_binary_type_to_binfmt_misc + programs.appimage = { + enable = true; + binfmt = true; + }; + + # GameCube adapter udev rules for Slippi/Dolphin + services.udev.extraRules = '' + # GameCube adapter USB device (vendor ID 057e, product ID 0337) + SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="057e", ATTRS{idProduct}=="0337", MODE="0666" + # GameCube adapter HID device (needed for Dolphin to access controllers) + KERNEL=="hidraw*", ATTRS{idVendor}=="057e", ATTRS{idProduct}=="0337", MODE="0666", GROUP="input" + ''; + # Open ports in the firewall. # networking.firewall.allowedTCPPorts = [ ... ]; # networking.firewall.allowedUDPPorts = [ ... ]; diff --git a/flake.lock b/flake.lock index d8f970e..2fbf549 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1761666354, - "narHash": "sha256-fHr+tIYBJccNF8QWqgowfRmEAtAMSt1deZIRNKL8A7c=", + "lastModified": 1762463325, + "narHash": "sha256-33YUsWpPyeBZEWrKQ2a1gkRZ7i0XCC/2MYpU6BVeQSU=", "owner": "nix-community", "repo": "home-manager", - "rev": "ca2ab1d877a24d5a437dad62f56b8b2c02e964e9", + "rev": "0562fef070a1027325dd4ea10813d64d2c967b39", "type": "github" }, "original": { @@ -28,11 +28,11 @@ ] }, "locked": { - "lastModified": 1752603129, - "narHash": "sha256-S+wmHhwNQ5Ru689L2Gu8n1OD6s9eU9n9mD827JNR+kw=", + "lastModified": 1762351818, + "narHash": "sha256-0ptUDbYwxv1kk/uzEX4+NJjY2e16MaAhtzAOJ6K0TG0=", "owner": "nix-community", "repo": "home-manager", - "rev": "e8c19a3cec2814c754f031ab3ae7316b64da085b", + "rev": "b959c67241cae17fc9e4ee7eaf13dfa8512477ea", "type": "github" }, "original": { @@ -43,11 +43,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1761669189, - "narHash": "sha256-INBZnPA9JzyDn+Fnni2250PbRzKx7Eafz0T2c7NhXiQ=", + "lastModified": 1762463231, + "narHash": "sha256-hv1mG5j5PTbnWbtHHomzTus77pIxsc4x8VrMjc7+/YE=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "9c0ee5dfa186e10efe9b53505b65d22c81860fde", + "rev": "52113c4f5cfd1e823001310e56d9c8d0699a6226", "type": "github" }, "original": { @@ -58,11 +58,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1761373498, - "narHash": "sha256-Q/uhWNvd7V7k1H1ZPMy/vkx3F8C13ZcdrKjO7Jv7v0c=", + "lastModified": 1762363567, + "narHash": "sha256-YRqMDEtSMbitIMj+JLpheSz0pwEr0Rmy5mC7myl17xs=", "owner": "nixos", "repo": "nixpkgs", - "rev": "6a08e6bb4e46ff7fcbb53d409b253f6bad8a28ce", + "rev": "ae814fd3904b621d8ab97418f1d0f2eb0d3716f4", "type": "github" }, "original": { @@ -88,11 +88,11 @@ ] }, "locked": { - "lastModified": 1761535208, - "narHash": "sha256-E1PobJMiFmVUX2YdqYk/MpKb0LXavOYvlg8DCBBzlHc=", + "lastModified": 1762482908, + "narHash": "sha256-/Bsw5brCo8gbV5rgK2+SVMrVFasnE5LgJLZertAxdsc=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "79a94872a3e6993a051c4e22a2dcb02c1d088acf", + "rev": "45b88a529bd410aeba3d28f8396901d57f8b32d4", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 5a8ea8f..db2f66d 100644 --- a/flake.nix +++ b/flake.nix @@ -32,6 +32,24 @@ home-manager.extraSpecialArgs = { inherit inputs; }; home-manager.users.jet = import ./home.nix; } + { + nixpkgs.overlays = [ + (final: prev: { + code-cursor = prev.code-cursor.overrideAttrs (oldAttrs: rec { + pname = "cursor"; + version = "2.0.64"; + src = prev.appimageTools.extract { + inherit pname version; + src = prev.fetchurl { + url = "https://downloads.cursor.com/production/25412918da7e74b2686b25d62da1f01cfcd27683/linux/x64/Cursor-2.0.64-x86_64.AppImage"; + hash = "sha256-zT9GhdwGDWZJQl+WpV2txbmp3/tJRtL6ds1UZQoKNzA="; + }; + }; + sourceRoot = "${pname}-${version}-extracted/usr/share/cursor"; + }); + }) + ]; + } ]; }; }; diff --git a/home.nix b/home.nix index f18bb8e..896be6a 100644 --- a/home.nix +++ b/home.nix @@ -79,6 +79,9 @@ element-desktop font-manager handbrake + libreoffice-qt + steam + appimage-run ]; From 158b91d842468e2e29f58f0088ba8a1736279065 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Wed, 12 Nov 2025 16:53:06 -0800 Subject: [PATCH 040/211] feat: update and remove matrix --- configuration.nix | 47 +++++++++++++++++++++++++++++++++++++++++------ flake.lock | 24 ++++++++++++------------ home.nix | 1 - 3 files changed, 53 insertions(+), 19 deletions(-) diff --git a/configuration.nix b/configuration.nix index 0dc9b62..a06c287 100644 --- a/configuration.nix +++ b/configuration.nix @@ -173,8 +173,16 @@ options = "--delete-older-than 30d"; }; + # Optimize Nix for RAM - use more memory for builds + nix.settings = { + max-jobs = "auto"; # Use all CPU cores + cores = 0; # Use all cores + # Build in RAM via tmpfs (configured above) + build-users-group = "nixbld"; + }; + # Power management for laptop - # Configure lid switch behavior - hybrid-sleep for optimal power management + # Configure lid switch behavior - suspend (no swap needed with 96GB RAM) services.logind = { settings = { Login = { @@ -211,11 +219,38 @@ # Enable power management powerManagement.enable = true; - - # Enable ZRAM swap for better memory management and potentially faster boot - zramSwap = { - enable = true; - algorithm = "zstd"; + + # RAM optimizations for 96GB system + # Disable swap usage (set swappiness to 0) - with 96GB RAM, never need swap + boot.kernel.sysctl = { + "vm.swappiness" = 0; # Never swap to disk + "vm.vfs_cache_pressure" = 50; # Keep more filesystem cache in RAM + "vm.dirty_ratio" = 15; # Write to disk when 15% of RAM is dirty + "vm.dirty_background_ratio" = 5; # Start writing when 5% dirty + }; + + # Use RAM disk (tmpfs) for temporary files - much faster than disk + fileSystems."/tmp" = { + device = "tmpfs"; + fsType = "tmpfs"; + options = [ + "size=32G" # Use up to 32GB RAM for /tmp (adjust as needed) + "mode=1777" + "nosuid" + "nodev" + ]; + }; + + # RAM disk for Nix build cache - speeds up compilation significantly + fileSystems."/tmp/nix-build" = { + device = "tmpfs"; + fsType = "tmpfs"; + options = [ + "size=32G" # 32GB for Nix builds + "mode=1777" + "nosuid" + "nodev" + ]; }; # List packages installed in system profile. To search, run: diff --git a/flake.lock b/flake.lock index 2fbf549..ec65da8 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1762463325, - "narHash": "sha256-33YUsWpPyeBZEWrKQ2a1gkRZ7i0XCC/2MYpU6BVeQSU=", + "lastModified": 1762964643, + "narHash": "sha256-RYHN8O/Aja59XDji6WSJZPkJpYVUfpSkyH+PEupBJqM=", "owner": "nix-community", "repo": "home-manager", - "rev": "0562fef070a1027325dd4ea10813d64d2c967b39", + "rev": "827f2a23373a774a8805f84ca5344654c31f354b", "type": "github" }, "original": { @@ -43,11 +43,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1762463231, - "narHash": "sha256-hv1mG5j5PTbnWbtHHomzTus77pIxsc4x8VrMjc7+/YE=", + "lastModified": 1762847253, + "narHash": "sha256-BWWnUUT01lPwCWUvS0p6Px5UOBFeXJ8jR+ZdLX8IbrU=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "52113c4f5cfd1e823001310e56d9c8d0699a6226", + "rev": "899dc449bc6428b9ee6b3b8f771ca2b0ef945ab9", "type": "github" }, "original": { @@ -58,11 +58,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1762363567, - "narHash": "sha256-YRqMDEtSMbitIMj+JLpheSz0pwEr0Rmy5mC7myl17xs=", + "lastModified": 1762844143, + "narHash": "sha256-SlybxLZ1/e4T2lb1czEtWVzDCVSTvk9WLwGhmxFmBxI=", "owner": "nixos", "repo": "nixpkgs", - "rev": "ae814fd3904b621d8ab97418f1d0f2eb0d3716f4", + "rev": "9da7f1cf7f8a6e2a7cb3001b048546c92a8258b4", "type": "github" }, "original": { @@ -88,11 +88,11 @@ ] }, "locked": { - "lastModified": 1762482908, - "narHash": "sha256-/Bsw5brCo8gbV5rgK2+SVMrVFasnE5LgJLZertAxdsc=", + "lastModified": 1762903129, + "narHash": "sha256-4vxtwKSBiiJ950ccLo8kQvBGwyNjhglOgWI5b/sjGXY=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "45b88a529bd410aeba3d28f8396901d57f8b32d4", + "rev": "d03a5917aef22219df1f97b6da6fe5b8039be8de", "type": "github" }, "original": { diff --git a/home.nix b/home.nix index 896be6a..ff13e8c 100644 --- a/home.nix +++ b/home.nix @@ -76,7 +76,6 @@ google-chrome tor-browser mullvad-vpn - element-desktop font-manager handbrake libreoffice-qt From 2fab8c92b4434aa33e7f3f203213f6fe3d0a234e Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Wed, 12 Nov 2025 22:25:56 -0800 Subject: [PATCH 041/211] feat: update cursor --- config/settings.yml | 2783 +++++++++++++++++++++++++++++++++++++++++++ configuration.nix | 56 +- flake.lock | 24 +- flake.nix | 6 +- home.nix | 14 + 5 files changed, 2860 insertions(+), 23 deletions(-) create mode 100644 config/settings.yml diff --git a/config/settings.yml b/config/settings.yml new file mode 100644 index 0000000..75e2fc7 --- /dev/null +++ b/config/settings.yml @@ -0,0 +1,2783 @@ +general: + # Debug mode, only for development. Is overwritten by ${SEARXNG_DEBUG} + debug: false + # displayed name + instance_name: "SearXNG" + # For example: https://example.com/privacy + privacypolicy_url: false + # use true to use your own donation page written in searx/info/en/donate.md + # use false to disable the donation link + donation_url: false + # mailto:contact@example.com + contact_url: false + # record stats + enable_metrics: true + # expose stats in open metrics format at /metrics + # leave empty to disable (no password set) + # open_metrics: + open_metrics: '' + +brand: + new_issue_url: https://github.com/searxng/searxng/issues/new + docs_url: https://docs.searxng.org/ + public_instances: https://searx.space + wiki_url: https://github.com/searxng/searxng/wiki + issue_url: https://github.com/searxng/searxng/issues + # custom: + # # Custom entries in the footer: [title]: [link] + # links: + # Uptime: https://uptime.searxng.org/history/darmarit-org + # About: "https://searxng.org" + +search: + # Filter results. 0: None, 1: Moderate, 2: Strict + safe_search: 0 + # Existing autocomplete backends: "360search", "baidu", "brave", "dbpedia", "duckduckgo", "google", "yandex", + # "mwmbl", "naver", "seznam", "sogou", "startpage", "stract", "swisscows", "quark", "qwant", "wikipedia" - + # leave blank to turn it off by default. + autocomplete: "" + # minimun characters to type before autocompleter starts + autocomplete_min: 4 + # backend for the favicon near URL in search results. + # Available resolvers: "allesedv", "duckduckgo", "google", "yandex" - leave blank to turn it off by default. + favicon_resolver: "" + # Default search language - leave blank to detect from browser information or + # use codes from 'languages.py' + default_lang: "auto" + # max_page: 0 # if engine supports paging, 0 means unlimited numbers of pages + # Available languages + # languages: + # - all + # - en + # - en-US + # - de + # - it-IT + # - fr + # - fr-BE + # ban time in seconds after engine errors + ban_time_on_fail: 5 + # max ban time in seconds after engine errors + max_ban_time_on_fail: 120 + suspended_times: + # Engine suspension time after error (in seconds; set to 0 to disable) + # For error "Access denied" and "HTTP error [402, 403]" + SearxEngineAccessDenied: 86400 + # For error "CAPTCHA" + SearxEngineCaptcha: 86400 + # For error "Too many request" and "HTTP error 429" + SearxEngineTooManyRequests: 3600 + # Cloudflare CAPTCHA + cf_SearxEngineCaptcha: 1296000 + cf_SearxEngineAccessDenied: 86400 + # ReCAPTCHA + recaptcha_SearxEngineCaptcha: 604800 + + # remove format to deny access, use lower case. + # formats: [html, csv, json, rss] + formats: + - html + +server: + # Is overwritten by ${SEARXNG_PORT} and ${SEARXNG_BIND_ADDRESS} + port: 8888 + bind_address: "127.0.0.1" + # public URL of the instance, to ensure correct inbound links. Is overwritten + # by ${SEARXNG_BASE_URL}. + base_url: false # "http://example.com/location" + # rate limit the number of request on the instance, block some bots. + # Is overwritten by ${SEARXNG_LIMITER} + limiter: false + # enable features designed only for public instances. + # Is overwritten by ${SEARXNG_PUBLIC_INSTANCE} + public_instance: false + + # If your instance owns a /etc/searxng/settings.yml file, then set the following + # values there. + + secret_key: "a4k4HJNatE6xiQKtG2CgYw0trnMQEiRc" # Is overwritten by ${SEARXNG_SECRET} + # Proxy image results through SearXNG. Is overwritten by ${SEARXNG_IMAGE_PROXY} + image_proxy: false + # 1.0 and 1.1 are supported + http_protocol_version: "1.0" + # POST queries are "more secure!" but are also the source of hard-to-locate + # annoyances, which is why GET may be better for end users and their browsers. + # see https://github.com/searxng/searxng/pull/3619 + # Is overwritten by ${SEARXNG_METHOD} + method: "POST" + default_http_headers: + X-Content-Type-Options: nosniff + X-Download-Options: noopen + X-Robots-Tag: noindex, nofollow + Referrer-Policy: no-referrer + +valkey: + # URL to connect valkey database. Is overwritten by ${SEARXNG_VALKEY_URL}. + # https://docs.searxng.org/admin/settings/settings_valkey.html#settings-valkey + # url: valkey://localhost:6379/0 + url: false + +ui: + # Custom static path - leave it blank if you didn't change + static_path: "" + # Custom templates path - leave it blank if you didn't change + templates_path: "" + # query_in_title: When true, the result page's titles contains the query + # it decreases the privacy, since the browser can records the page titles. + query_in_title: false + # infinite_scroll: When true, automatically loads the next page when scrolling to bottom of the current page. + infinite_scroll: false + # ui theme + default_theme: simple + # center the results ? + center_alignment: false + # URL prefix of the internet archive, don't forget trailing slash (if needed). + # cache_url: "https://webcache.googleusercontent.com/search?q=cache:" + # Default interface locale - leave blank to detect from browser information or + # use codes from the 'locales' config section + default_locale: "" + # Open result links in a new tab by default + # results_on_new_tab: false + theme_args: + # style of simple theme: auto, light, dark, black + simple_style: auto + # Perform search immediately if a category selected. + # Disable to select multiple categories at once and start the search manually. + search_on_category_select: true + # Hotkeys: default or vim + hotkeys: default + # URL formatting: pretty, full or host + url_formatting: pretty + +# Lock arbitrary settings on the preferences page. +# +# preferences: +# lock: +# - categories +# - language +# - autocomplete +# - favicon +# - safesearch +# - method +# - doi_resolver +# - locale +# - theme +# - results_on_new_tab +# - infinite_scroll +# - search_on_category_select +# - method +# - image_proxy +# - query_in_title + +# communication with search engines +# +outgoing: + # default timeout in seconds, can be override by engine + request_timeout: 3.0 + # the maximum timeout in seconds + # max_request_timeout: 10.0 + # suffix of searxng_useragent, could contain information like an email address + # to the administrator + useragent_suffix: "" + # The maximum number of concurrent connections that may be established. + pool_connections: 100 + # Allow the connection pool to maintain keep-alive connections below this + # point. + pool_maxsize: 20 + # See https://www.python-httpx.org/http2/ + enable_http2: true + # uncomment below section if you want to use a custom server certificate + # see https://www.python-httpx.org/advanced/#changing-the-verification-defaults + # and https://www.python-httpx.org/compatibility/#ssl-configuration + # verify: ~/.mitmproxy/mitmproxy-ca-cert.cer + # + # uncomment below section if you want to use a proxyq see: SOCKS proxies + # https://2.python-requests.org/en/latest/user/advanced/#proxies + # are also supported: see + # https://2.python-requests.org/en/latest/user/advanced/#socks + # + # proxies: + # all://: + # - http://proxy1:8080 + # - http://proxy2:8080 + # + # using_tor_proxy: true + # + # Extra seconds to add in order to account for the time taken by the proxy + # + # extra_proxy_timeout: 10 + # + # uncomment below section only if you have more than one network interface + # which can be the source of outgoing search requests + # + # source_ips: + # - 1.1.1.1 + # - 1.1.1.2 + # - fe80::/126 + +# Plugin configuration, for more details see +# https://docs.searxng.org/admin/settings/settings_plugins.html +# +plugins: + + searx.plugins.calculator.SXNGPlugin: + active: true + + searx.plugins.hash_plugin.SXNGPlugin: + active: true + + searx.plugins.self_info.SXNGPlugin: + active: true + + searx.plugins.unit_converter.SXNGPlugin: + active: true + + searx.plugins.ahmia_filter.SXNGPlugin: + active: true + + searx.plugins.hostnames.SXNGPlugin: + active: true + + searx.plugins.time_zone.SXNGPlugin: + active: true + + searx.plugins.oa_doi_rewrite.SXNGPlugin: + active: false + + searx.plugins.tor_check.SXNGPlugin: + active: false + + searx.plugins.tracker_url_remover.SXNGPlugin: + active: true + + +# Configuration of the "Hostnames plugin": +# +# hostnames: +# replace: +# '(.*\.)?youtube\.com$': 'yt.example.com' +# '(.*\.)?youtu\.be$': 'yt.example.com' +# '(.*\.)?reddit\.com$': 'teddit.example.com' +# '(.*\.)?redd\.it$': 'teddit.example.com' +# '(www\.)?twitter\.com$': 'nitter.example.com' +# remove: +# - '(.*\.)?facebook.com$' +# low_priority: +# - '(.*\.)?google(\..*)?$' +# high_priority: +# - '(.*\.)?wikipedia.org$' +# +# Alternatively you can use external files for configuring the "Hostnames plugin": +# +# hostnames: +# replace: 'rewrite-hosts.yml' +# +# Content of 'rewrite-hosts.yml' (place the file in the same directory as 'settings.yml'): +# '(.*\.)?youtube\.com$': 'yt.example.com' +# '(.*\.)?youtu\.be$': 'yt.example.com' +# + +checker: + # disable checker when in debug mode + off_when_debug: true + + # use "scheduling: {}" to disable scheduling + # scheduling: interval or int + + # to activate the scheduler: + # * uncomment "scheduling" section + # * add "cache2 = name=searxngcache,items=2000,blocks=2000,blocksize=4096,bitmap=1" + # to your uwsgi.ini + + # scheduling: + # start_after: [300, 1800] # delay to start the first run of the checker + # every: [86400, 90000] # how often the checker runs + + # additional tests: only for the YAML anchors (see the engines section) + # + additional_tests: + rosebud: &test_rosebud + matrix: + query: rosebud + lang: en + result_container: + - not_empty + - ['one_title_contains', 'citizen kane'] + test: + - unique_results + + android: &test_android + matrix: + query: ['android'] + lang: ['en', 'de', 'fr', 'zh-CN'] + result_container: + - not_empty + - ['one_title_contains', 'google'] + test: + - unique_results + + # tests: only for the YAML anchors (see the engines section) + tests: + infobox: &tests_infobox + infobox: + matrix: + query: ["linux", "new york", "bbc"] + result_container: + - has_infobox + +categories_as_tabs: + general: + images: + videos: + news: + map: + music: + it: + science: + files: + social media: + +engines: + - name: 360search + engine: 360search + shortcut: 360so + disabled: true + + - name: 360search videos + engine: 360search_videos + shortcut: 360sov + disabled: true + + - name: 9gag + engine: 9gag + shortcut: 9g + disabled: true + + - name: acfun + engine: acfun + shortcut: acf + disabled: true + + - name: adobe stock + engine: adobe_stock + shortcut: asi + categories: ["images"] + # https://docs.searxng.org/dev/engines/online/adobe_stock.html + adobe_order: relevance + adobe_content_types: ["photo", "illustration", "zip_vector", "template", "3d", "image"] + timeout: 6 + disabled: true + + - name: adobe stock video + engine: adobe_stock + shortcut: asv + network: adobe stock + categories: ["videos"] + adobe_order: relevance + adobe_content_types: ["video"] + timeout: 6 + disabled: true + + - name: adobe stock audio + engine: adobe_stock + shortcut: asa + network: adobe stock + categories: ["music"] + adobe_order: relevance + adobe_content_types: ["audio"] + timeout: 6 + disabled: true + + - name: astrophysics data system + engine: astrophysics_data_system + shortcut: ads + # read https://docs.searxng.org/dev/engines/online/astrophysics_data_system.html + api_key: "" + inactive: true + + - name: alpine linux packages + engine: alpinelinux + disabled: true + shortcut: alp + + - name: annas archive + engine: annas_archive + disabled: true + shortcut: aa + timeout: 5 + + - name: ansa + engine: ansa + shortcut: ans + disabled: true + + # - name: annas articles + # engine: annas_archive + # shortcut: aaa + # # https://docs.searxng.org/dev/engines/online/annas_archive.html + # aa_content: 'magazine' # book_fiction, book_unknown, book_nonfiction, book_comic + # aa_ext: 'pdf' # pdf, epub, .. + # aa_sort: oldest' # newest, oldest, largest, smallest + + - name: apk mirror + engine: apkmirror + timeout: 4.0 + shortcut: apkm + disabled: true + + - name: apple app store + engine: apple_app_store + shortcut: aps + disabled: true + + # Requires Tor + - name: ahmia + engine: ahmia + categories: onions + enable_http: true + shortcut: ah + + - name: anaconda + engine: xpath + paging: true + first_page_num: 0 + search_url: https://anaconda.org/search?q={query}&page={pageno} + results_xpath: //tbody/tr + url_xpath: ./td/h5/a[last()]/@href + title_xpath: ./td/h5 + content_xpath: ./td[h5]/text() + categories: it + timeout: 6.0 + shortcut: conda + disabled: true + + - name: arch linux wiki + engine: archlinux + shortcut: al + + - name: nixos wiki + engine: mediawiki + shortcut: nixw + base_url: https://wiki.nixos.org/ + search_type: text + disabled: true + categories: [it, software wikis] + + - name: artic + engine: artic + shortcut: arc + timeout: 4.0 + + - name: arxiv + engine: arxiv + shortcut: arx + + - name: ask + engine: ask + shortcut: ask + disabled: true + + # - name: azure + # engine: azure + # shortcut: az + # categories: [it, cloud] + # azure_tenant_id: "your_tenant_id" + # azure_client_id: "your_client_id" + # azure_client_secret: "your_client_secret" + # disabled: true + + # tmp suspended: dh key too small + # - name: base + # engine: base + # shortcut: bs + + - name: bandcamp + engine: bandcamp + shortcut: bc + categories: music + + - name: baidu + baidu_category: general + categories: [general] + engine: baidu + shortcut: bd + disabled: true + + - name: baidu images + baidu_category: images + categories: [images] + engine: baidu + shortcut: bdi + disabled: true + + - name: baidu kaifa + baidu_category: it + categories: [it] + engine: baidu + shortcut: bdk + disabled: true + + - name: wikipedia + engine: wikipedia + shortcut: wp + # add "list" to the array to get results in the results list + display_type: ["infobox"] + categories: [general] + + - name: bilibili + engine: bilibili + shortcut: bil + disabled: true + + - name: bing + engine: bing + shortcut: bi + disabled: true + + - name: bing images + engine: bing_images + shortcut: bii + + - name: bing news + engine: bing_news + shortcut: bin + + - name: bing videos + engine: bing_videos + shortcut: biv + + - name: bitchute + engine: bitchute + shortcut: bit + disabled: true + + - name: bitbucket + engine: xpath + paging: true + search_url: https://bitbucket.org/repo/all/{pageno}?name={query} + url_xpath: //article[@class="repo-summary"]//a[@class="repo-link"]/@href + title_xpath: //article[@class="repo-summary"]//a[@class="repo-link"] + content_xpath: //article[@class="repo-summary"]/p + categories: [it, repos] + timeout: 4.0 + disabled: true + shortcut: bb + about: + website: https://bitbucket.org/ + wikidata_id: Q2493781 + official_api_documentation: https://developer.atlassian.com/bitbucket + use_official_api: false + require_api_key: false + results: HTML + + - name: bpb + engine: bpb + shortcut: bpb + disabled: true + + - name: btdigg + engine: btdigg + shortcut: bt + disabled: true + + - name: openverse + engine: openverse + categories: images + shortcut: opv + + - name: media.ccc.de + engine: ccc_media + shortcut: c3tv + # We don't set language: de here because media.ccc.de is not just + # for a German audience. It contains many English videos and many + # German videos have English subtitles. + disabled: true + + - name: chefkoch + engine: chefkoch + shortcut: chef + # to show premium or plus results too: + # skip_premium: false + + # WARNING: links from chinaso.com voilate users privacy + # Before activate these engines its mandatory to read + # - https://github.com/searxng/searxng/issues/4694 + # - https://docs.searxng.org/dev/engines/online/chinaso.html + + - name: chinaso news + engine: chinaso + shortcut: chinaso + categories: [news] + chinaso_category: news + chinaso_news_source: all + disabled: true + inactive: true + + - name: chinaso images + engine: chinaso + network: chinaso news + shortcut: chinasoi + categories: [images] + chinaso_category: images + disabled: true + inactive: true + + - name: chinaso videos + engine: chinaso + network: chinaso news + shortcut: chinasov + categories: [videos] + chinaso_category: videos + disabled: true + inactive: true + + - name: cloudflareai + engine: cloudflareai + shortcut: cfai + # get api token and accont id from https://developers.cloudflare.com/workers-ai/get-started/rest-api/ + cf_account_id: 'your_cf_accout_id' + cf_ai_api: 'your_cf_api' + # create your ai gateway by https://developers.cloudflare.com/ai-gateway/get-started/creating-gateway/ + cf_ai_gateway: 'your_cf_ai_gateway_name' + # find the model name from https://developers.cloudflare.com/workers-ai/models/#text-generation + cf_ai_model: 'ai_model_name' + # custom your preferences + # cf_ai_model_display_name: 'Cloudflare AI' + # cf_ai_model_assistant: 'prompts_for_assistant_role' + # cf_ai_model_system: 'prompts_for_system_role' + timeout: 30 + disabled: true + + - name: core.ac.uk + engine: core + shortcut: cor + # read https://docs.searxng.org/dev/engines/online/core.html + api_key: "" + inactive: true + + - name: crossref + engine: crossref + shortcut: cr + timeout: 30 + disabled: true + + - name: crowdview + engine: json_engine + shortcut: cv + categories: general + paging: false + search_url: https://crowdview-next-js.onrender.com/api/search-v3?query={query} + results_query: results + url_query: link + title_query: title + content_query: snippet + title_html_to_text: true + content_html_to_text: true + disabled: true + about: + website: https://crowdview.ai/ + + - name: yep + engine: yep + shortcut: yep + categories: general + search_type: web + timeout: 5 + disabled: true + + - name: yep images + engine: yep + shortcut: yepi + categories: images + search_type: images + disabled: true + + - name: yep news + engine: yep + shortcut: yepn + categories: news + search_type: news + disabled: true + + - name: currency + engine: currency_convert + shortcut: cc + + - name: deezer + engine: deezer + shortcut: dz + disabled: true + + - name: destatis + engine: destatis + shortcut: destat + disabled: true + + - name: deviantart + engine: deviantart + shortcut: da + timeout: 3.0 + + - name: devicons + engine: devicons + shortcut: di + timeout: 3.0 + + - name: ddg definitions + engine: duckduckgo_definitions + shortcut: ddd + weight: 2 + disabled: true + tests: *tests_infobox + + # cloudflare protected + # - name: digbt + # engine: digbt + # shortcut: dbt + # timeout: 6.0 + # disabled: true + + - name: docker hub + engine: docker_hub + shortcut: dh + categories: [it, packages] + + - name: encyclosearch + engine: json_engine + shortcut: es + categories: general + paging: true + search_url: https://encyclosearch.org/encyclosphere/search?q={query}&page={pageno}&resultsPerPage=15 + results_query: Results + url_query: SourceURL + title_query: Title + content_query: Description + disabled: true + about: + website: https://encyclosearch.org + official_api_documentation: https://encyclosearch.org/docs/#/rest-api + use_official_api: true + require_api_key: false + results: JSON + + - name: erowid + engine: xpath + paging: true + first_page_num: 0 + page_size: 30 + search_url: https://www.erowid.org/search.php?q={query}&s={pageno} + url_xpath: //dl[@class="results-list"]/dt[@class="result-title"]/a/@href + title_xpath: //dl[@class="results-list"]/dt[@class="result-title"]/a/text() + content_xpath: //dl[@class="results-list"]/dd[@class="result-details"] + categories: [] + shortcut: ew + disabled: true + about: + website: https://www.erowid.org/ + wikidata_id: Q1430691 + official_api_documentation: + use_official_api: false + require_api_key: false + results: HTML + + # - name: elasticsearch + # shortcut: els + # engine: elasticsearch + # base_url: http://localhost:9200 + # username: elastic + # password: changeme + # index: my-index + # enable_http: true + # # available options: match, simple_query_string, term, terms, custom + # query_type: match + # # if query_type is set to custom, provide your query here + # # custom_query_json: {"query":{"match_all": {}}} + # # show_metadata: false + # disabled: true + + - name: wikidata + engine: wikidata + shortcut: wd + timeout: 3.0 + weight: 2 + # add "list" to the array to get results in the results list + display_type: ["infobox"] + tests: *tests_infobox + categories: [general] + + - name: duckduckgo + engine: duckduckgo + shortcut: ddg + + - name: duckduckgo images + engine: duckduckgo_extra + categories: [images, web] + ddg_category: images + shortcut: ddi + disabled: true + + - name: duckduckgo videos + engine: duckduckgo_extra + categories: [videos, web] + ddg_category: videos + shortcut: ddv + disabled: true + + - name: duckduckgo news + engine: duckduckgo_extra + categories: [news, web] + ddg_category: news + shortcut: ddn + disabled: true + + - name: duckduckgo weather + engine: duckduckgo_weather + shortcut: ddw + disabled: true + + - name: apple maps + engine: apple_maps + shortcut: apm + disabled: true + timeout: 5.0 + + - name: emojipedia + engine: emojipedia + timeout: 4.0 + shortcut: em + disabled: true + + - name: tineye + engine: tineye + shortcut: tin + timeout: 9.0 + disabled: true + + - name: etymonline + engine: xpath + paging: true + search_url: https://etymonline.com/search?page={pageno}&q={query} + url_xpath: //a[contains(@class, "word__name--")]/@href + title_xpath: //a[contains(@class, "word__name--")] + content_xpath: //section[contains(@class, "word__defination")] + first_page_num: 1 + shortcut: et + categories: [dictionaries] + about: + website: https://www.etymonline.com/ + wikidata_id: Q1188617 + official_api_documentation: + use_official_api: false + require_api_key: false + results: HTML + + # - name: ebay + # engine: ebay + # shortcut: eb + # base_url: 'https://www.ebay.com' + # disabled: true + # timeout: 5 + + - name: 1x + engine: www1x + shortcut: 1x + timeout: 3.0 + disabled: true + + - name: fdroid + engine: fdroid + shortcut: fd + disabled: true + + - name: findthatmeme + engine: findthatmeme + shortcut: ftm + disabled: true + + - name: flickr + categories: images + shortcut: fl + # You can use the engine using the official stable API, but you need an API + # key, see: https://www.flickr.com/services/apps/create/ + # engine: flickr + # api_key: 'apikey' # required! + # Or you can use the html non-stable engine, activated by default + engine: flickr_noapi + + - name: free software directory + engine: mediawiki + shortcut: fsd + categories: [it, software wikis] + base_url: https://directory.fsf.org/ + search_type: title + timeout: 5.0 + disabled: true + about: + website: https://directory.fsf.org/ + wikidata_id: Q2470288 + + # - name: freesound + # engine: freesound + # shortcut: fnd + # disabled: true + # timeout: 15.0 + # API key required, see: https://freesound.org/docs/api/overview.html + # api_key: MyAPIkey + + - name: frinkiac + engine: frinkiac + shortcut: frk + disabled: true + + - name: fyyd + engine: fyyd + shortcut: fy + timeout: 8.0 + disabled: true + + - name: geizhals + engine: geizhals + shortcut: geiz + disabled: true + + - name: genius + engine: genius + shortcut: gen + + - name: gentoo + engine: mediawiki + shortcut: ge + categories: ["it", "software wikis"] + base_url: "https://wiki.gentoo.org/" + api_path: "api.php" + search_type: text + timeout: 10 + + - name: gitlab + engine: gitlab + base_url: https://gitlab.com + shortcut: gl + disabled: true + about: + website: https://gitlab.com/ + wikidata_id: Q16639197 + + # - name: gnome + # engine: gitlab + # base_url: https://gitlab.gnome.org + # shortcut: gn + # about: + # website: https://gitlab.gnome.org + # wikidata_id: Q44316 + + - name: github + engine: github + shortcut: gh + + - name: github code + engine: github_code + shortcut: ghc + disabled: true + ghc_auth: + # type is one of: + # * none + # * personal_access_token + # * bearer + # When none is passed, the token is not requried. + type: "none" + token: "token" + # specify whether to highlight the matching lines to the query + ghc_highlight_matching_lines: true + ghc_strip_new_lines: true + ghc_strip_whitespace: false + timeout: 10.0 + + - name: codeberg + # https://docs.searxng.org/dev/engines/online/gitea.html + engine: gitea + base_url: https://codeberg.org + shortcut: cb + disabled: true + + - name: gitea.com + engine: gitea + base_url: https://gitea.com + shortcut: gitea + disabled: true + + - name: goodreads + engine: goodreads + shortcut: good + timeout: 4.0 + disabled: true + + - name: google + engine: google + shortcut: go + # additional_tests: + # android: *test_android + + - name: google images + engine: google_images + shortcut: goi + # additional_tests: + # android: *test_android + # dali: + # matrix: + # query: ['Dali Christ'] + # lang: ['en', 'de', 'fr', 'zh-CN'] + # result_container: + # - ['one_title_contains', 'Salvador'] + + - name: google news + engine: google_news + shortcut: gon + # additional_tests: + # android: *test_android + + - name: google videos + engine: google_videos + shortcut: gov + # additional_tests: + # android: *test_android + + - name: google scholar + engine: google_scholar + shortcut: gos + + - name: google play apps + engine: google_play + categories: [files, apps] + shortcut: gpa + play_categ: apps + disabled: true + + - name: google play movies + engine: google_play + categories: videos + shortcut: gpm + play_categ: movies + disabled: true + + - name: material icons + engine: material_icons + shortcut: mi + disabled: true + + - name: habrahabr + engine: xpath + paging: true + search_url: https://habr.com/en/search/page{pageno}/?q={query} + results_xpath: //article[contains(@class, "tm-articles-list__item")] + url_xpath: .//a[@class="tm-title__link"]/@href + title_xpath: .//a[@class="tm-title__link"] + content_xpath: .//div[contains(@class, "article-formatted-body")] + categories: it + timeout: 4.0 + disabled: true + shortcut: habr + about: + website: https://habr.com/ + wikidata_id: Q4494434 + official_api_documentation: https://habr.com/en/docs/help/api/ + use_official_api: false + require_api_key: false + results: HTML + + - name: hackernews + engine: hackernews + shortcut: hn + disabled: true + + - name: hex + engine: hex + shortcut: hex + disabled: true + # Valid values: name inserted_at updated_at total_downloads recent_downloads + sort_criteria: "recent_downloads" + page_size: 10 + + - name: crates.io + engine: crates + shortcut: crates + disabled: true + timeout: 6.0 + + - name: hoogle + engine: xpath + search_url: https://hoogle.haskell.org/?hoogle={query} + results_xpath: '//div[@class="result"]' + title_xpath: './/div[@class="ans"]//a' + url_xpath: './/div[@class="ans"]//a/@href' + content_xpath: './/div[@class="from"]' + page_size: 20 + categories: [it, packages] + shortcut: ho + about: + website: https://hoogle.haskell.org/ + wikidata_id: Q34010 + official_api_documentation: https://hackage.haskell.org/api + use_official_api: false + require_api_key: false + results: JSON + + - name: il post + engine: il_post + shortcut: pst + disabled: true + + - name: huggingface + engine: huggingface + shortcut: hf + disabled: true + + - name: huggingface datasets + huggingface_endpoint: datasets + engine: huggingface + shortcut: hfd + disabled: true + + - name: huggingface spaces + huggingface_endpoint: spaces + engine: huggingface + shortcut: hfs + disabled: true + + - name: imdb + engine: imdb + shortcut: imdb + timeout: 6.0 + disabled: true + + - name: imgur + engine: imgur + shortcut: img + disabled: true + + - name: ina + engine: ina + shortcut: in + timeout: 6.0 + disabled: true + + # - name: invidious + # engine: invidious + # # if you want to use invidious with SearXNG you should setup one locally + # # https://github.com/searxng/searxng/issues/2722#issuecomment-2884993248 + # base_url: + # - https://invidious.example1.com + # - https://invidious.example2.com + # shortcut: iv + # timeout: 3.0 + + - name: ipernity + engine: ipernity + shortcut: ip + disabled: true + + - name: iqiyi + engine: iqiyi + shortcut: iq + disabled: true + + - name: jisho + engine: jisho + shortcut: js + timeout: 3.0 + disabled: true + + - name: kickass + engine: kickass + base_url: + - https://kickasstorrents.to + - https://kickasstorrents.cr + - https://kickasstorrent.cr + - https://kickass.sx + - https://kat.am + shortcut: kc + timeout: 4.0 + + - name: lemmy communities + engine: lemmy + lemmy_type: Communities + shortcut: leco + + - name: lemmy users + engine: lemmy + network: lemmy communities + lemmy_type: Users + shortcut: leus + + - name: lemmy posts + engine: lemmy + network: lemmy communities + lemmy_type: Posts + shortcut: lepo + + - name: lemmy comments + engine: lemmy + network: lemmy communities + lemmy_type: Comments + shortcut: lecom + + - name: library genesis + engine: xpath + # search_url: https://libgen.is/search.php?req={query} + search_url: https://libgen.rs/search.php?req={query} + url_xpath: //a[contains(@href,"book/index.php?md5")]/@href + title_xpath: //a[contains(@href,"book/")]/text()[1] + content_xpath: //td/a[1][contains(@href,"=author")]/text() + categories: files + timeout: 7.0 + disabled: true + shortcut: lg + about: + website: https://libgen.fun/ + wikidata_id: Q22017206 + official_api_documentation: + use_official_api: false + require_api_key: false + results: HTML + + - name: z-library + engine: zlibrary + shortcut: zlib + timeout: 7.0 + disabled: true + # https://github.com/searxng/searxng/issues/3610 + inactive: true + + - name: library of congress + engine: loc + shortcut: loc + categories: images + disabled: true + + - name: libretranslate + engine: libretranslate + # https://github.com/LibreTranslate/LibreTranslate?tab=readme-ov-file#mirrors + base_url: + - https://libretranslate.com/translate + # api_key: abc123 + shortcut: lt + disabled: true + + - name: lingva + engine: lingva + shortcut: lv + # set lingva instance in url, by default it will use the official instance + # url: https://lingva.thedaviddelta.com + + - name: lobste.rs + engine: xpath + search_url: https://lobste.rs/search?q={query}&what=stories&order=relevance + results_xpath: //li[contains(@class, "story")] + url_xpath: .//a[@class="u-url"]/@href + title_xpath: .//a[@class="u-url"] + content_xpath: .//a[@class="domain"] + categories: it + shortcut: lo + timeout: 5.0 + disabled: true + about: + website: https://lobste.rs/ + wikidata_id: Q60762874 + official_api_documentation: + use_official_api: false + require_api_key: false + results: HTML + + - name: marginalia + engine: marginalia + shortcut: mar + # To get an API key, please follow the instructions at + # - https://about.marginalia-search.com/article/api/ + # api_key: ... + disabled: true + inactive: true + + - name: mastodon users + engine: mastodon + mastodon_type: accounts + base_url: https://mastodon.social + shortcut: mau + + - name: mastodon hashtags + engine: mastodon + mastodon_type: hashtags + base_url: https://mastodon.social + shortcut: mah + + # - name: matrixrooms + # engine: mrs + # # https://docs.searxng.org/dev/engines/online/mrs.html + # # base_url: https://mrs-api-host + # shortcut: mtrx + # disabled: true + + - name: mdn + shortcut: mdn + engine: json_engine + categories: [it] + paging: true + search_url: https://developer.mozilla.org/api/v1/search?q={query}&page={pageno} + results_query: documents + url_query: mdn_url + url_prefix: https://developer.mozilla.org + title_query: title + content_query: summary + about: + website: https://developer.mozilla.org + wikidata_id: Q3273508 + official_api_documentation: null + use_official_api: false + require_api_key: false + results: JSON + + - name: metacpan + engine: metacpan + shortcut: cpan + disabled: true + number_of_results: 20 + + # https://docs.searxng.org/dev/engines/offline/search-indexer-engines.html#module-searx.engines.meilisearch + # - name: meilisearch + # engine: meilisearch + # shortcut: mes + # enable_http: true + # base_url: http://localhost:7700 + # index: my-index + # auth_key: Bearer XXXX + + - name: microsoft learn + engine: microsoft_learn + shortcut: msl + disabled: true + + - name: mixcloud + engine: mixcloud + shortcut: mc + + # MongoDB engine + # Required dependency: pymongo + # - name: mymongo + # engine: mongodb + # shortcut: md + # exact_match_only: false + # host: '127.0.0.1' + # port: 27017 + # enable_http: true + # results_per_page: 20 + # database: 'business' + # collection: 'reviews' # name of the db collection + # key: 'name' # key in the collection to search for + + - name: mozhi + engine: mozhi + base_url: + - https://mozhi.aryak.me + - https://translate.bus-hit.me + - https://nyc1.mz.ggtyler.dev + # mozhi_engine: google - see https://mozhi.aryak.me for supported engines + timeout: 4.0 + shortcut: mz + disabled: true + + - name: mwmbl + engine: mwmbl + # api_url: https://api.mwmbl.org + shortcut: mwm + disabled: true + + - name: niconico + engine: niconico + shortcut: nico + disabled: true + + - name: npm + engine: npm + shortcut: npm + timeout: 5.0 + disabled: true + + - name: nyaa + engine: nyaa + shortcut: nt + disabled: true + + - name: mankier + engine: json_engine + search_url: https://www.mankier.com/api/v2/mans/?q={query} + results_query: results + url_query: url + title_query: name + content_query: description + categories: it + shortcut: man + about: + website: https://www.mankier.com/ + official_api_documentation: https://www.mankier.com/api + use_official_api: true + require_api_key: false + results: JSON + + # https://docs.searxng.org/dev/engines/online/mullvad_leta.html + - name: mullvadleta + engine: mullvad_leta + disabled: true + leta_engine: google + categories: [general, web] + shortcut: ml + + - name: mullvadleta brave + engine: mullvad_leta + network: mullvadleta + disabled: true + leta_engine: brave + categories: [general, web] + shortcut: mlb + + - name: odysee + engine: odysee + shortcut: od + disabled: true + + - name: ollama + engine: ollama + shortcut: ollama + disabled: true + + - name: openairedatasets + engine: json_engine + paging: true + search_url: https://api.openaire.eu/search/datasets?format=json&page={pageno}&size=10&title={query} + results_query: response/results/result + url_query: metadata/oaf:entity/oaf:result/children/instance/webresource/url/$ + title_query: metadata/oaf:entity/oaf:result/title/$ + content_query: metadata/oaf:entity/oaf:result/description/$ + content_html_to_text: true + categories: "science" + shortcut: oad + timeout: 5.0 + about: + website: https://www.openaire.eu/ + wikidata_id: Q25106053 + official_api_documentation: https://api.openaire.eu/ + use_official_api: false + require_api_key: false + results: JSON + + - name: openairepublications + engine: json_engine + paging: true + search_url: https://api.openaire.eu/search/publications?format=json&page={pageno}&size=10&title={query} + results_query: response/results/result + url_query: metadata/oaf:entity/oaf:result/children/instance/webresource/url/$ + title_query: metadata/oaf:entity/oaf:result/title/$ + content_query: metadata/oaf:entity/oaf:result/description/$ + content_html_to_text: true + categories: science + shortcut: oap + timeout: 5.0 + about: + website: https://www.openaire.eu/ + wikidata_id: Q25106053 + official_api_documentation: https://api.openaire.eu/ + use_official_api: false + require_api_key: false + results: JSON + + - name: openalex + engine: openalex + shortcut: oa + # https://docs.searxng.org/dev/engines/online/openalex.html + # Recommended by OpenAlex: join the polite pool with an email address + # mailto: "[email protected]" + timeout: 5.0 + disabled: true + + - name: openclipart + engine: openclipart + shortcut: ocl + inactive: true + disabled: true + timeout: 30 + + - name: openlibrary + engine: openlibrary + shortcut: ol + timeout: 10 + disabled: true + + - name: openmeteo + engine: open_meteo + shortcut: om + disabled: true + + # - name: opensemanticsearch + # engine: opensemantic + # shortcut: oss + # base_url: 'http://localhost:8983/solr/opensemanticsearch/' + + - name: openstreetmap + engine: openstreetmap + shortcut: osm + + - name: openrepos + engine: xpath + paging: true + search_url: https://openrepos.net/search/node/{query}?page={pageno} + url_xpath: //li[@class="search-result"]//h3[@class="title"]/a/@href + title_xpath: //li[@class="search-result"]//h3[@class="title"]/a + content_xpath: //li[@class="search-result"]//div[@class="search-snippet-info"]//p[@class="search-snippet"] + categories: files + timeout: 4.0 + disabled: true + shortcut: or + about: + website: https://openrepos.net/ + wikidata_id: + official_api_documentation: + use_official_api: false + require_api_key: false + results: HTML + + - name: packagist + engine: json_engine + paging: true + search_url: https://packagist.org/search.json?q={query}&page={pageno} + results_query: results + url_query: url + title_query: name + content_query: description + categories: [it, packages] + disabled: true + timeout: 5.0 + shortcut: pack + about: + website: https://packagist.org + wikidata_id: Q108311377 + official_api_documentation: https://packagist.org/apidoc + use_official_api: true + require_api_key: false + results: JSON + + - name: pdbe + engine: pdbe + shortcut: pdb + # Hide obsolete PDB entries. Default is not to hide obsolete structures + # hide_obsolete: false + + - name: photon + engine: photon + shortcut: ph + + - name: pinterest + engine: pinterest + shortcut: pin + + - name: piped + engine: piped + shortcut: ppd + categories: videos + piped_filter: videos + timeout: 3.0 + inactive: true + + # URL to use as link and for embeds + frontend_url: https://srv.piped.video + # Instance will be selected randomly, for more see https://piped-instances.kavin.rocks/ + backend_url: + - https://pipedapi.ducks.party + - https://api.piped.private.coffee + + - name: piped.music + engine: piped + network: piped + shortcut: ppdm + categories: music + piped_filter: music_songs + timeout: 3.0 + inactive: true + + - name: piratebay + engine: piratebay + shortcut: tpb + # You may need to change this URL to a proxy if piratebay is blocked in your + # country + url: https://thepiratebay.org/ + timeout: 3.0 + + - name: pixabay images + engine: pixabay + pixabay_type: images + categories: images + shortcut: pixi + disabled: true + + - name: pixabay videos + engine: pixabay + pixabay_type: videos + categories: videos + shortcut: pixv + disabled: true + + - name: pixiv + shortcut: pv + engine: pixiv + disabled: true + inactive: true + pixiv_image_proxies: + - https://pximg.example.org + # A proxy is required to load the images. Hosting an image proxy server + # for Pixiv: + # --> https://pixivfe.pages.dev/hosting-image-proxy-server/ + # Proxies from public instances. Ask the public instances owners if they + # agree to receive traffic from SearXNG! + # --> https://codeberg.org/VnPower/PixivFE#instances + # --> https://github.com/searxng/searxng/pull/3192#issuecomment-1941095047 + # image proxy of https://pixiv.cat + # - https://i.pixiv.cat + # image proxy of https://www.pixiv.pics + # - https://pximg.cocomi.eu.org + # image proxy of https://pixivfe.exozy.me + # - https://pximg.exozy.me + # image proxy of https://pixivfe.ducks.party + # - https://pixiv.ducks.party + # image proxy of https://pixiv.perennialte.ch + # - https://pximg.perennialte.ch + + - name: podcastindex + engine: podcastindex + shortcut: podcast + + # Required dependency: psychopg2 + # - name: postgresql + # engine: postgresql + # database: postgres + # username: postgres + # password: postgres + # limit: 10 + # query_str: 'SELECT * from my_table WHERE my_column = %(query)s' + # shortcut : psql + + - name: presearch + engine: presearch + search_type: search + categories: [general, web] + shortcut: ps + timeout: 4.0 + disabled: true + + - name: presearch images + engine: presearch + network: presearch + search_type: images + categories: [images, web] + timeout: 4.0 + shortcut: psimg + disabled: true + + - name: presearch videos + engine: presearch + network: presearch + search_type: videos + categories: [general, web] + timeout: 4.0 + shortcut: psvid + disabled: true + + - name: presearch news + engine: presearch + network: presearch + search_type: news + categories: [news, web] + timeout: 4.0 + shortcut: psnews + disabled: true + + - name: pub.dev + engine: xpath + shortcut: pd + search_url: https://pub.dev/packages?q={query}&page={pageno} + paging: true + results_xpath: //div[contains(@class,"packages-item")] + url_xpath: ./div/h3/a/@href + title_xpath: ./div/h3/a + content_xpath: ./div/div/div[contains(@class,"packages-description")]/span + categories: [packages, it] + timeout: 3.0 + disabled: true + first_page_num: 1 + about: + website: https://pub.dev/ + official_api_documentation: https://pub.dev/help/api + use_official_api: false + require_api_key: false + results: HTML + + - name: public domain image archive + engine: public_domain_image_archive + shortcut: pdia + disabled: true + + - name: pubmed + engine: pubmed + shortcut: pub + + - name: pypi + shortcut: pypi + engine: pypi + + - name: quark + quark_category: general + categories: [general] + engine: quark + shortcut: qk + disabled: true + + - name: quark images + quark_category: images + categories: [images] + engine: quark + shortcut: qki + disabled: true + + - name: qwant + qwant_categ: web + engine: qwant + shortcut: qw + categories: [general, web] + disabled: true + additional_tests: + rosebud: *test_rosebud + + - name: qwant news + qwant_categ: news + engine: qwant + shortcut: qwn + categories: news + network: qwant + + - name: qwant images + qwant_categ: images + engine: qwant + shortcut: qwi + categories: [images, web] + network: qwant + + - name: qwant videos + qwant_categ: videos + engine: qwant + shortcut: qwv + categories: [videos, web] + network: qwant + + # - name: library + # engine: recoll + # shortcut: lib + # base_url: 'https://recoll.example.org/' + # search_dir: '' + # mount_prefix: /export + # dl_prefix: 'https://download.example.org' + # timeout: 30.0 + # categories: files + # disabled: true + + # - name: recoll library reference + # engine: recoll + # base_url: 'https://recoll.example.org/' + # search_dir: reference + # mount_prefix: /export + # dl_prefix: 'https://download.example.org' + # shortcut: libr + # timeout: 30.0 + # categories: files + # disabled: true + + - name: radio browser + engine: radio_browser + shortcut: rb + + - name: reddit + engine: reddit + shortcut: re + page_size: 25 + disabled: true + + - name: reuters + engine: reuters + shortcut: reu + # https://docs.searxng.org/dev/engines/online/reuters.html + # sort_order = "relevance" + + - name: right dao + engine: xpath + paging: true + page_size: 12 + search_url: https://rightdao.com/search?q={query}&start={pageno} + results_xpath: //div[contains(@class, "description")] + url_xpath: ../div[contains(@class, "title")]/a/@href + title_xpath: ../div[contains(@class, "title")] + content_xpath: . + categories: general + shortcut: rd + disabled: true + about: + website: https://rightdao.com/ + use_official_api: false + require_api_key: false + results: HTML + + - name: rottentomatoes + engine: rottentomatoes + shortcut: rt + disabled: true + + # Required dependency: valkey + # - name: myvalkey + # shortcut : rds + # engine: valkey_server + # exact_match_only: false + # host: '127.0.0.1' + # port: 6379 + # enable_http: true + # password: '' + # db: 0 + + # tmp suspended: bad certificate + # - name: scanr structures + # shortcut: scs + # engine: scanr_structures + # disabled: true + + - name: searchmysite + engine: xpath + shortcut: sms + categories: general + paging: true + search_url: https://searchmysite.net/search/?q={query}&page={pageno} + results_xpath: //div[contains(@class,'search-result')] + url_xpath: .//a[contains(@class,'result-link')]/@href + title_xpath: .//span[contains(@class,'result-title-txt')]/text() + content_xpath: ./p[@id='result-hightlight'] + disabled: true + about: + website: https://searchmysite.net + + - name: selfhst icons + engine: selfhst + shortcut: si + disabled: true + + - name: sepiasearch + engine: sepiasearch + shortcut: sep + + - name: sogou + engine: sogou + shortcut: sogou + disabled: true + + - name: sogou images + engine: sogou_images + shortcut: sogoui + disabled: true + + - name: sogou videos + engine: sogou_videos + shortcut: sogouv + disabled: true + + - name: sogou wechat + engine: sogou_wechat + shortcut: sogouw + disabled: true + + - name: soundcloud + engine: soundcloud + shortcut: sc + + - name: stackoverflow + engine: stackexchange + shortcut: st + api_site: 'stackoverflow' + categories: [it, q&a] + + - name: askubuntu + engine: stackexchange + shortcut: ubuntu + api_site: 'askubuntu' + categories: [it, q&a] + + - name: superuser + engine: stackexchange + shortcut: su + api_site: 'superuser' + categories: [it, q&a] + + - name: discuss.python + engine: discourse + shortcut: dpy + base_url: 'https://discuss.python.org' + categories: [it, q&a] + disabled: true + + - name: caddy.community + engine: discourse + shortcut: caddy + base_url: 'https://caddy.community' + categories: [it, q&a] + disabled: true + + - name: pi-hole.community + engine: discourse + shortcut: pi + categories: [it, q&a] + base_url: 'https://discourse.pi-hole.net' + disabled: true + + - name: searchcode code + engine: searchcode_code + shortcut: scc + disabled: true + inactive: true + + # - name: searx + # engine: searx_engine + # shortcut: se + # instance_urls : + # - http://127.0.0.1:8888/ + # - ... + # disabled: true + + - name: semantic scholar + engine: semantic_scholar + shortcut: se + + # Spotify needs API credentials + # - name: spotify + # engine: spotify + # shortcut: stf + # api_client_id: ******* + # api_client_secret: ******* + + # - name: solr + # engine: solr + # shortcut: slr + # base_url: http://localhost:8983 + # collection: collection_name + # sort: '' # sorting: asc or desc + # field_list: '' # comma separated list of field names to display on the UI + # default_fields: '' # default field to query + # query_fields: '' # query fields + # enable_http: true + + - name: springer nature + engine: springer + shortcut: springer + timeout: 5 + # read https://docs.searxng.org/dev/engines/online/springer.html + api_key: "" + inactive: true + + - name: startpage + engine: startpage + shortcut: sp + startpage_categ: web + categories: [general, web] + additional_tests: + rosebud: *test_rosebud + + - name: startpage news + engine: startpage + startpage_categ: news + categories: [news, web] + shortcut: spn + + - name: startpage images + engine: startpage + startpage_categ: images + categories: [images, web] + shortcut: spi + + - name: steam + engine: steam + shortcut: stm + disabled: true + + - name: tokyotoshokan + engine: tokyotoshokan + shortcut: tt + timeout: 6.0 + disabled: true + + - name: solidtorrents + engine: solidtorrents + shortcut: solid + timeout: 4.0 + base_url: + - https://solidtorrents.to + - https://bitsearch.to + + # For this demo of the sqlite engine download: + # https://liste.mediathekview.de/filmliste-v2.db.bz2 + # and unpack into searx/data/filmliste-v2.db + # Query to test: "!mediathekview concert" + # + # - name: mediathekview + # engine: sqlite + # shortcut: mediathekview + # categories: [general, videos] + # result_type: MainResult + # database: searx/data/filmliste-v2.db + # query_str: >- + # SELECT title || ' (' || time(duration, 'unixepoch') || ')' AS title, + # COALESCE( NULLIF(url_video_hd,''), NULLIF(url_video_sd,''), url_video) AS url, + # description AS content + # FROM film + # WHERE title LIKE :wildcard OR description LIKE :wildcard + # ORDER BY duration DESC + + - name: tagesschau + engine: tagesschau + # when set to false, display URLs from Tagesschau, and not the actual source + # (e.g. NDR, WDR, SWR, HR, ...) + use_source_url: true + shortcut: ts + disabled: true + + - name: tmdb + engine: xpath + paging: true + categories: movies + search_url: https://www.themoviedb.org/search?page={pageno}&query={query} + results_xpath: //div[contains(@class,"movie") or contains(@class,"tv")]//div[contains(@class,"card")] + url_xpath: .//div[contains(@class,"poster")]/a/@href + thumbnail_xpath: .//img/@src + title_xpath: .//div[contains(@class,"title")]//h2 + content_xpath: .//div[contains(@class,"overview")] + shortcut: tm + disabled: true + + # Requires Tor + - name: torch + engine: xpath + paging: true + search_url: + http://xmh57jrknzkhv6y3ls3ubitzfqnkrwxhopf5aygthi7d6rplyvk3noyd.onion/cgi-bin/omega/omega?P={query}&DEFAULTOP=and + results_xpath: //table//tr + url_xpath: ./td[2]/a + title_xpath: ./td[2]/b + content_xpath: ./td[2]/small + categories: onions + enable_http: true + shortcut: tch + + # TubeArchivist is a self-hosted Youtube archivist software. + # https://docs.searxng.org/dev/engines/online/tubearchivist.html + # + # - name: tubearchivist + # engine: tubearchivist + # shortcut: tuba + # base_url: + # ta_token: + # ta_link_to_mp4: false + + # torznab engine lets you query any torznab compatible indexer. Using this + # engine in combination with Jackett opens the possibility to query a lot of + # public and private indexers directly from SearXNG. More details at: + # https://docs.searxng.org/dev/engines/online/torznab.html + # + # - name: Torznab EZTV + # engine: torznab + # shortcut: eztv + # base_url: http://localhost:9117/api/v2.0/indexers/eztv/results/torznab + # enable_http: true # if using localhost + # api_key: xxxxxxxxxxxxxxx + # show_magnet_links: true + # show_torrent_files: false + # # https://github.com/Jackett/Jackett/wiki/Jackett-Categories + # torznab_categories: # optional + # - 2000 + # - 5000 + + # tmp suspended - too slow, too many errors + # - name: urbandictionary + # engine : xpath + # search_url : https://www.urbandictionary.com/define.php?term={query} + # url_xpath : //*[@class="word"]/@href + # title_xpath : //*[@class="def-header"] + # content_xpath: //*[@class="meaning"] + # shortcut: ud + + - name: unsplash + engine: unsplash + shortcut: us + + - name: yandex + engine: yandex + categories: general + search_type: web + shortcut: yd + disabled: true + inactive: true + + - name: yandex images + engine: yandex + categories: images + search_type: images + shortcut: ydi + disabled: true + inactive: true + + - name: yandex music + engine: yandex_music + shortcut: ydm + disabled: true + # https://yandex.com/support/music/access.html + inactive: true + + - name: yahoo + engine: yahoo + shortcut: yh + disabled: true + + - name: yahoo news + engine: yahoo_news + shortcut: yhn + + - name: youtube + shortcut: yt + # You can use the engine using the official stable API, but you need an API + # key See: https://console.developers.google.com/project + # + # engine: youtube_api + # api_key: 'apikey' # required! + # + # Or you can use the html non-stable engine, activated by default + engine: youtube_noapi + + - name: dailymotion + engine: dailymotion + shortcut: dm + + - name: vimeo + engine: vimeo + shortcut: vm + + - name: wiby + engine: json_engine + paging: true + search_url: https://wiby.me/json/?q={query}&p={pageno} + url_query: URL + title_query: Title + content_query: Snippet + categories: [general, web] + shortcut: wib + disabled: true + about: + website: https://wiby.me/ + + - name: wikibooks + engine: mediawiki + weight: 0.5 + shortcut: wb + categories: [general, wikimedia] + base_url: "https://{language}.wikibooks.org/" + search_type: text + disabled: true + about: + website: https://www.wikibooks.org/ + wikidata_id: Q367 + + - name: wikinews + engine: mediawiki + shortcut: wn + categories: [news, wikimedia] + base_url: "https://{language}.wikinews.org/" + search_type: text + srsort: create_timestamp_desc + about: + website: https://www.wikinews.org/ + wikidata_id: Q964 + + - name: wikiquote + engine: mediawiki + weight: 0.5 + shortcut: wq + categories: [general, wikimedia] + base_url: "https://{language}.wikiquote.org/" + search_type: text + disabled: true + additional_tests: + rosebud: *test_rosebud + about: + website: https://www.wikiquote.org/ + wikidata_id: Q369 + + - name: wikisource + engine: mediawiki + weight: 0.5 + shortcut: ws + categories: [general, wikimedia] + base_url: "https://{language}.wikisource.org/" + search_type: text + disabled: true + about: + website: https://www.wikisource.org/ + wikidata_id: Q263 + + - name: wikispecies + engine: mediawiki + shortcut: wsp + categories: [general, science, wikimedia] + base_url: "https://species.wikimedia.org/" + search_type: text + disabled: true + about: + website: https://species.wikimedia.org/ + wikidata_id: Q13679 + tests: + wikispecies: + matrix: + query: "Campbell, L.I. et al. 2011: MicroRNAs" + lang: en + result_container: + - not_empty + - ['one_title_contains', 'Tardigrada'] + test: + - unique_results + + - name: wiktionary + engine: mediawiki + shortcut: wt + categories: [dictionaries, wikimedia] + base_url: "https://{language}.wiktionary.org/" + search_type: text + about: + website: https://www.wiktionary.org/ + wikidata_id: Q151 + + - name: wikiversity + engine: mediawiki + weight: 0.5 + shortcut: wv + categories: [general, wikimedia] + base_url: "https://{language}.wikiversity.org/" + search_type: text + disabled: true + about: + website: https://www.wikiversity.org/ + wikidata_id: Q370 + + - name: wikivoyage + engine: mediawiki + weight: 0.5 + shortcut: wy + categories: [general, wikimedia] + base_url: "https://{language}.wikivoyage.org/" + search_type: text + disabled: true + about: + website: https://www.wikivoyage.org/ + wikidata_id: Q373 + + - name: wikicommons.images + engine: wikicommons + shortcut: wci + categories: images + wc_search_type: image + + - name: wikicommons.videos + engine: wikicommons + shortcut: wcv + categories: videos + wc_search_type: video + + - name: wikicommons.audio + engine: wikicommons + shortcut: wca + categories: music + wc_search_type: audio + + - name: wikicommons.files + engine: wikicommons + shortcut: wcf + categories: files + wc_search_type: file + + - name: wolframalpha + shortcut: wa + # You can use the engine using the official stable API, but you need an API + # key. See: https://products.wolframalpha.com/api/ + # + # engine: wolframalpha_api + # api_key: '' + # + # Or you can use the html non-stable engine, activated by default + engine: wolframalpha_noapi + timeout: 6.0 + categories: general + disabled: true + + - name: dictzone + engine: dictzone + shortcut: dc + + - name: mymemory translated + engine: translated + shortcut: tl + timeout: 5.0 + # You can use without an API key, but you are limited to 1000 words/day + # See: https://mymemory.translated.net/doc/usagelimits.php + # api_key: '' + + # Required dependency: mysql-connector-python + # - name: mysql + # engine: mysql_server + # database: mydatabase + # username: user + # password: pass + # limit: 10 + # query_str: 'SELECT * from mytable WHERE fieldname=%(query)s' + # shortcut: mysql + + # Required dependency: mariadb + # - name: mariadb + # engine: mariadb_server + # database: mydatabase + # username: user + # password: pass + # limit: 10 + # query_str: 'SELECT * from mytable WHERE fieldname=%(query)s' + # shortcut: mdb + + - name: 1337x + engine: 1337x + shortcut: 1337x + disabled: true + + - name: duden + engine: duden + shortcut: du + disabled: true + + - name: seznam + shortcut: szn + engine: seznam + disabled: true + + # - name: deepl + # engine: deepl + # shortcut: dpl + # # You can use the engine using the official stable API, but you need an API key + # # See: https://www.deepl.com/pro-api?cta=header-pro-api + # api_key: '' # required! + # timeout: 5.0 + # disabled: true + + - name: mojeek + shortcut: mjk + engine: mojeek + categories: [general, web] + disabled: true + + - name: mojeek images + shortcut: mjkimg + engine: mojeek + categories: [images, web] + search_type: images + paging: false + disabled: true + + - name: mojeek news + shortcut: mjknews + engine: mojeek + categories: [news, web] + search_type: news + paging: false + disabled: true + + - name: moviepilot + engine: moviepilot + shortcut: mp + disabled: true + + - name: naver + categories: [general, web] + engine: naver + shortcut: nvr + disabled: true + + - name: naver images + naver_category: images + categories: [images] + engine: naver + shortcut: nvri + disabled: true + + - name: naver news + naver_category: news + categories: [news] + engine: naver + shortcut: nvrn + disabled: true + + - name: naver videos + naver_category: videos + categories: [videos] + engine: naver + shortcut: nvrv + disabled: true + + - name: rubygems + shortcut: rbg + engine: xpath + paging: true + search_url: https://rubygems.org/search?page={pageno}&query={query} + results_xpath: /html/body/main/div/a[@class="gems__gem"] + url_xpath: ./@href + title_xpath: ./span/h2 + content_xpath: ./span/p + suggestion_xpath: /html/body/main/div/div[@class="search__suggestions"]/p/a + first_page_num: 1 + categories: [it, packages] + disabled: true + about: + website: https://rubygems.org/ + wikidata_id: Q1853420 + official_api_documentation: https://guides.rubygems.org/rubygems-org-api/ + use_official_api: false + require_api_key: false + results: HTML + + - name: peertube + engine: peertube + shortcut: ptb + paging: true + # alternatives see: https://instances.joinpeertube.org/instances + # base_url: https://tube.4aem.com + categories: videos + disabled: true + timeout: 6.0 + + - name: mediathekviewweb + engine: mediathekviewweb + shortcut: mvw + disabled: true + + - name: yacy + # https://docs.searxng.org/dev/engines/online/yacy.html + engine: yacy + categories: general + search_type: text + # see https://github.com/searxng/searxng/pull/3631#issuecomment-2240903027 + base_url: + - https://yacy.searchlab.eu + shortcut: ya + disabled: true + # if you aren't using HTTPS for your local yacy instance disable https + # enable_http: false + search_mode: 'global' + # timeout can be reduced in 'local' search mode + timeout: 5.0 + + - name: yacy images + engine: yacy + network: yacy + categories: images + search_type: image + shortcut: yai + disabled: true + # timeout can be reduced in 'local' search mode + timeout: 5.0 + + - name: rumble + engine: rumble + shortcut: ru + base_url: https://rumble.com/ + paging: true + categories: videos + disabled: true + + - name: repology + engine: repology + shortcut: rep + disabled: true + inactive: true + + - name: livespace + engine: livespace + shortcut: ls + categories: videos + disabled: true + timeout: 5.0 + + - name: wordnik + engine: wordnik + shortcut: wnik + timeout: 5.0 + + - name: woxikon.de synonyme + engine: xpath + shortcut: woxi + categories: [dictionaries] + timeout: 5.0 + disabled: true + search_url: https://synonyme.woxikon.de/synonyme/{query}.php + url_xpath: //div[@class="upper-synonyms"]/a/@href + content_xpath: //div[@class="synonyms-list-group"] + title_xpath: //div[@class="upper-synonyms"]/a + no_result_for_http_status: [404] + about: + website: https://www.woxikon.de/ + wikidata_id: # No Wikidata ID + use_official_api: false + require_api_key: false + results: HTML + language: de + + - name: seekr news + engine: seekr + shortcut: senews + categories: news + seekr_category: news + disabled: true + + - name: seekr images + engine: seekr + network: seekr news + shortcut: seimg + categories: images + seekr_category: images + disabled: true + + - name: seekr videos + engine: seekr + network: seekr news + shortcut: sevid + categories: videos + seekr_category: videos + disabled: true + + - name: stract + engine: stract + shortcut: str + disabled: true + + - name: svgrepo + engine: svgrepo + shortcut: svg + timeout: 10.0 + disabled: true + + - name: tootfinder + engine: tootfinder + shortcut: toot + + - name: uxwing + engine: uxwing + shortcut: ux + disabled: true + + - name: voidlinux + engine: voidlinux + shortcut: void + disabled: true + + - name: wallhaven + engine: wallhaven + # api_key: abcdefghijklmnopqrstuvwxyz + shortcut: wh + disabled: true + + # wikimini: online encyclopedia for children + # The fulltext and title parameter is necessary for Wikimini because + # sometimes it will not show the results and redirect instead + - name: wikimini + engine: xpath + shortcut: wkmn + search_url: https://fr.wikimini.org/w/index.php?search={query}&title=Sp%C3%A9cial%3ASearch&fulltext=Search + url_xpath: //li/div[@class="mw-search-result-heading"]/a/@href + title_xpath: //li//div[@class="mw-search-result-heading"]/a + content_xpath: //li/div[@class="searchresult"] + categories: general + disabled: true + about: + website: https://wikimini.org/ + wikidata_id: Q3568032 + use_official_api: false + require_api_key: false + results: HTML + language: fr + + - name: wttr.in + engine: wttr + shortcut: wttr + timeout: 9.0 + + - name: brave + engine: brave + shortcut: br + time_range_support: true + paging: true + categories: [general, web] + brave_category: search + # brave_spellcheck: true + + - name: brave.images + engine: brave + network: brave + shortcut: brimg + categories: [images, web] + brave_category: images + + - name: brave.videos + engine: brave + network: brave + shortcut: brvid + categories: [videos, web] + brave_category: videos + + - name: brave.news + engine: brave + network: brave + shortcut: brnews + categories: news + brave_category: news + + # - name: brave.goggles + # engine: brave + # network: brave + # shortcut: brgog + # time_range_support: true + # paging: true + # categories: [general, web] + # brave_category: goggles + # Goggles: # required! This should be a URL ending in .goggle + + - name: lib.rs + shortcut: lrs + engine: lib_rs + disabled: true + + - name: sourcehut + shortcut: srht + engine: sourcehut + # https://docs.searxng.org/dev/engines/online/sourcehut.html + # sourcehut_sort_order: longest-active + disabled: true + + - name: bt4g + engine: bt4g + shortcut: bt4g + + - name: pkg.go.dev + engine: pkg_go_dev + shortcut: pgo + disabled: true + + - name: senscritique + engine: senscritique + shortcut: scr + timeout: 4.0 + disabled: true + + - name: minecraft wiki + engine: mediawiki + shortcut: mcw + categories: ["software wikis"] + base_url: https://minecraft.wiki/ + api_path: "api.php" + search_type: text + disabled: true + about: + website: https://minecraft.wiki/ + wikidata_id: Q105533483 + +# Doku engine lets you access to any Doku wiki instance: +# A public one or a privete/corporate one. +# - name: ubuntuwiki +# engine: doku +# shortcut: uw +# base_url: 'https://doc.ubuntu-fr.org' + +# Be careful when enabling this engine if you are +# running a public instance. Do not expose any sensitive +# information. You can restrict access by configuring a list +# of access tokens under tokens. +# - name: git grep +# engine: command +# command: ['git', 'grep', '{{QUERY}}'] +# shortcut: gg +# tokens: [] +# disabled: true +# delimiter: +# chars: ':' +# keys: ['filepath', 'code'] + +# Be careful when enabling this engine if you are +# running a public instance. Do not expose any sensitive +# information. You can restrict access by configuring a list +# of access tokens under tokens. +# - name: locate +# engine: command +# command: ['locate', '{{QUERY}}'] +# shortcut: loc +# tokens: [] +# disabled: true +# delimiter: +# chars: ' ' +# keys: ['line'] + +# Be careful when enabling this engine if you are +# running a public instance. Do not expose any sensitive +# information. You can restrict access by configuring a list +# of access tokens under tokens. +# - name: find +# engine: command +# command: ['find', '.', '-name', '{{QUERY}}'] +# query_type: path +# shortcut: fnd +# tokens: [] +# disabled: true +# delimiter: +# chars: ' ' +# keys: ['line'] + +# Be careful when enabling this engine if you are +# running a public instance. Do not expose any sensitive +# information. You can restrict access by configuring a list +# of access tokens under tokens. +# - name: pattern search in files +# engine: command +# command: ['fgrep', '{{QUERY}}'] +# shortcut: fgr +# tokens: [] +# disabled: true +# delimiter: +# chars: ' ' +# keys: ['line'] + +# Be careful when enabling this engine if you are +# running a public instance. Do not expose any sensitive +# information. You can restrict access by configuring a list +# of access tokens under tokens. +# - name: regex search in files +# engine: command +# command: ['grep', '{{QUERY}}'] +# shortcut: gr +# tokens: [] +# disabled: true +# delimiter: +# chars: ' ' +# keys: ['line'] + +doi_resolvers: + oadoi.org: 'https://oadoi.org/' + doi.org: 'https://doi.org/' + sci-hub.se: 'https://sci-hub.se/' + sci-hub.st: 'https://sci-hub.st/' + sci-hub.ru: 'https://sci-hub.ru/' + +default_doi_resolver: 'oadoi.org' diff --git a/configuration.nix b/configuration.nix index a06c287..96744e8 100644 --- a/configuration.nix +++ b/configuration.nix @@ -296,6 +296,37 @@ name = "docker"; }; + # Enable SearXNG metasearch engine + services.searx = { + enable = true; + redisCreateLocally = true; + environmentFile = "/etc/searxng/searxng.env"; + settings = { + server = { + bind_address = "127.0.0.1"; + port = 8888; + # secret_key is set via environmentFile to avoid exposing it in nix store + }; + general = { + debug = false; + instance_name = "SearXNG"; + donation_url = false; + contact_url = false; + privacypolicy_url = false; + enable_metrics = false; + }; + ui = { + default_locale = "en"; + default_theme = "simple"; + }; + search = { + safe_search = 0; + autocomplete = "google"; + autocomplete_min = 2; + }; + }; + }; + # https://wiki.nixos.org/wiki/Appimage#Register_AppImage_files_as_a_binary_type_to_binfmt_misc programs.appimage = { enable = true; @@ -324,17 +355,26 @@ # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). system.stateVersion = "25.05"; # Did you read the comment? + # Create SearXNG environment file with secret key + system.activationScripts.searxng-env.text = '' + mkdir -p /etc/searxng + if [ ! -f /etc/searxng/searxng.env ]; then + echo 'SEARXNG_SECRET=78db11dc49971aa8e3c378cd9d05398f9e42c2f4ca5c2cc206183bf0ace4f237' > /etc/searxng/searxng.env + chmod 600 /etc/searxng/searxng.env + fi + ''; + # Set user profile picture for GNOME system.activationScripts.script.text = '' mkdir -p /var/lib/AccountsService/{icons,users} - cp /home/jet/Documents/nixos-config/cat.png /var/lib/AccountsService/icons/jet - echo -e "[User]\nIcon=/var/lib/AccountsService/icons/jet\n" > /var/lib/AccountsService/users/jet - - chown root:root /var/lib/AccountsService/users/jet - chmod 0600 /var/lib/AccountsService/users/jet - - chown root:root /var/lib/AccountsService/icons/jet - chmod 0444 /var/lib/AccountsService/icons/jet + if [ -f /home/jet/Documents/nixos-config/cat.png ]; then + cp /home/jet/Documents/nixos-config/cat.png /var/lib/AccountsService/icons/jet + echo -e "[User]\nIcon=/var/lib/AccountsService/icons/jet\n" > /var/lib/AccountsService/users/jet + chown root:root /var/lib/AccountsService/users/jet + chmod 0600 /var/lib/AccountsService/users/jet + chown root:root /var/lib/AccountsService/icons/jet + chmod 0444 /var/lib/AccountsService/icons/jet + fi ''; } diff --git a/flake.lock b/flake.lock index ec65da8..6939e1d 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1762964643, - "narHash": "sha256-RYHN8O/Aja59XDji6WSJZPkJpYVUfpSkyH+PEupBJqM=", + "lastModified": 1763416652, + "narHash": "sha256-8EBEEvtzQ11LCxpQHMNEBQAGtQiCu/pqP9zSovDSbNM=", "owner": "nix-community", "repo": "home-manager", - "rev": "827f2a23373a774a8805f84ca5344654c31f354b", + "rev": "ea164b7c9ccdc2321379c2ff78fd4317b4c41312", "type": "github" }, "original": { @@ -28,11 +28,11 @@ ] }, "locked": { - "lastModified": 1762351818, - "narHash": "sha256-0ptUDbYwxv1kk/uzEX4+NJjY2e16MaAhtzAOJ6K0TG0=", + "lastModified": 1762964643, + "narHash": "sha256-RYHN8O/Aja59XDji6WSJZPkJpYVUfpSkyH+PEupBJqM=", "owner": "nix-community", "repo": "home-manager", - "rev": "b959c67241cae17fc9e4ee7eaf13dfa8512477ea", + "rev": "827f2a23373a774a8805f84ca5344654c31f354b", "type": "github" }, "original": { @@ -58,11 +58,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1762844143, - "narHash": "sha256-SlybxLZ1/e4T2lb1czEtWVzDCVSTvk9WLwGhmxFmBxI=", + "lastModified": 1763283776, + "narHash": "sha256-Y7TDFPK4GlqrKrivOcsHG8xSGqQx3A6c+i7novT85Uk=", "owner": "nixos", "repo": "nixpkgs", - "rev": "9da7f1cf7f8a6e2a7cb3001b048546c92a8258b4", + "rev": "50a96edd8d0db6cc8db57dab6bb6d6ee1f3dc49a", "type": "github" }, "original": { @@ -88,11 +88,11 @@ ] }, "locked": { - "lastModified": 1762903129, - "narHash": "sha256-4vxtwKSBiiJ950ccLo8kQvBGwyNjhglOgWI5b/sjGXY=", + "lastModified": 1763353619, + "narHash": "sha256-y30wSzjr7QiO4OVB/Tt7dnLRLIuK2EpaftpKeMMLGu0=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "d03a5917aef22219df1f97b6da6fe5b8039be8de", + "rev": "7463345c68cfdd9e92e2d40e390b1a802b0f2add", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index db2f66d..27af045 100644 --- a/flake.nix +++ b/flake.nix @@ -37,12 +37,12 @@ (final: prev: { code-cursor = prev.code-cursor.overrideAttrs (oldAttrs: rec { pname = "cursor"; - version = "2.0.64"; + version = "2.0.77"; src = prev.appimageTools.extract { inherit pname version; src = prev.fetchurl { - url = "https://downloads.cursor.com/production/25412918da7e74b2686b25d62da1f01cfcd27683/linux/x64/Cursor-2.0.64-x86_64.AppImage"; - hash = "sha256-zT9GhdwGDWZJQl+WpV2txbmp3/tJRtL6ds1UZQoKNzA="; + url = "https://downloads.cursor.com/production/ba90f2f88e4911312761abab9492c42442117cfe/linux/x64/Cursor-2.0.77-x86_64.AppImage"; + hash = "sha256-/r7cmjgFhec7fEKUfFKw3vUoB9LJB2P/646cMeRKp/0="; }; }; sourceRoot = "${pname}-${version}-extracted/usr/share/cursor"; diff --git a/home.nix b/home.nix index ff13e8c..4c2c656 100644 --- a/home.nix +++ b/home.nix @@ -234,6 +234,20 @@ "zen.theme.border-radius" = 0; "zen.theme.content-element-separation" = 0; }; + # Add SearXNG as default search engine + SearchEngines = { + Default = "SearXNG"; + Add = [ + { + Name = "SearXNG"; + URLTemplate = "http://127.0.0.1:8888/search?q={searchTerms}"; + Method = "GET"; + IconURL = "http://127.0.0.1:8888/static/themes/simple/img/searxng.png"; + Alias = "sx"; + Description = "SearXNG - Privacy-respecting metasearch engine"; + } + ]; + }; }; }; From 39cfa3f054556ea5762e36cc62cdbb36b9f900a7 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Tue, 18 Nov 2025 15:59:43 -0800 Subject: [PATCH 042/211] feat: add gh and obsidian --- flake.lock | 12 ++++++------ home.nix | 2 ++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/flake.lock b/flake.lock index 6939e1d..ca6be46 100644 --- a/flake.lock +++ b/flake.lock @@ -58,11 +58,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1763283776, - "narHash": "sha256-Y7TDFPK4GlqrKrivOcsHG8xSGqQx3A6c+i7novT85Uk=", + "lastModified": 1763421233, + "narHash": "sha256-Stk9ZYRkGrnnpyJ4eqt9eQtdFWRRIvMxpNRf4sIegnw=", "owner": "nixos", "repo": "nixpkgs", - "rev": "50a96edd8d0db6cc8db57dab6bb6d6ee1f3dc49a", + "rev": "89c2b2330e733d6cdb5eae7b899326930c2c0648", "type": "github" }, "original": { @@ -88,11 +88,11 @@ ] }, "locked": { - "lastModified": 1763353619, - "narHash": "sha256-y30wSzjr7QiO4OVB/Tt7dnLRLIuK2EpaftpKeMMLGu0=", + "lastModified": 1763457799, + "narHash": "sha256-33hJpIuqbn/PHf4VCZAktxDCUxnWLOtMAOyAFd75O9E=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "7463345c68cfdd9e92e2d40e390b1a802b0f2add", + "rev": "85bc80b9d8c8b22ed273163dd7c7adfad9287a5d", "type": "github" }, "original": { diff --git a/home.nix b/home.nix index 4c2c656..707d650 100644 --- a/home.nix +++ b/home.nix @@ -81,6 +81,8 @@ libreoffice-qt steam appimage-run + obsidian + gh ]; From 0a745b1cab7555dc33747d22afc03ac52318a3ae Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sat, 22 Nov 2025 15:49:24 -0800 Subject: [PATCH 043/211] feat: beepr --- configuration.nix | 20 +++----------------- home.nix | 17 +++++++++-------- 2 files changed, 12 insertions(+), 25 deletions(-) diff --git a/configuration.nix b/configuration.nix index 96744e8..ff579bb 100644 --- a/configuration.nix +++ b/configuration.nix @@ -301,29 +301,15 @@ enable = true; redisCreateLocally = true; environmentFile = "/etc/searxng/searxng.env"; + # Use custom settings.yml file from nix-config + settingsFile = ./config/settings.yml; + # Override specific settings via NixOS options (these take precedence) settings = { server = { bind_address = "127.0.0.1"; port = 8888; # secret_key is set via environmentFile to avoid exposing it in nix store }; - general = { - debug = false; - instance_name = "SearXNG"; - donation_url = false; - contact_url = false; - privacypolicy_url = false; - enable_metrics = false; - }; - ui = { - default_locale = "en"; - default_theme = "simple"; - }; - search = { - safe_search = 0; - autocomplete = "google"; - autocomplete_min = 2; - }; }; }; diff --git a/home.nix b/home.nix index 707d650..b48d8e1 100644 --- a/home.nix +++ b/home.nix @@ -83,6 +83,7 @@ appimage-run obsidian gh + beeper ]; @@ -100,7 +101,7 @@ editor = { line-number = "relative"; lsp.display-messages = true; - }; + }; }; languages = { haskell = { @@ -118,20 +119,20 @@ programs.zellij = { enable = true; enableBashIntegration = true; - + settings = { # Default shell (using bash as configured in your system) default_shell = "bash"; default_layout = "compact"; pane_frames = false; - + # Mouse and interaction settings - enable for proper pane handling mouse_mode = true; copy_on_select = true; - + show_startup_tips = false; show_release_notes = false; - + on_force_close = "detach"; }; }; @@ -178,7 +179,7 @@ ns = "sudo nixos-rebuild switch --flake ~/Documents/nix-config#jet"; nd = "nix develop"; h = "hx"; - + }; }; @@ -263,7 +264,7 @@ categories = ["System" "TerminalEmulator"]; comment = "Fast, featureful, GPU based terminal emulator"; }; - + # Autostart applications using proper desktop files xdg.autostart = { enable = true; @@ -271,7 +272,7 @@ "${pkgs.kitty}/share/applications/kitty.desktop" "${config.programs.zen-browser.package}/share/applications/zen-twilight.desktop" "${pkgs.code-cursor}/share/applications/cursor.desktop" - "${pkgs.signal-desktop}/share/applications/signal.desktop" + "${pkgs.beeper}/share/applications/beeper.desktop" ]; }; From bf461e4f7d8b3b8db8011195d77f788a6dda3c69 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sat, 22 Nov 2025 15:52:07 -0800 Subject: [PATCH 044/211] feat: zed moment --- home.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/home.nix b/home.nix index b48d8e1..eedfec9 100644 --- a/home.nix +++ b/home.nix @@ -84,6 +84,7 @@ obsidian gh beeper + zed-editor ]; @@ -271,8 +272,8 @@ entries = [ "${pkgs.kitty}/share/applications/kitty.desktop" "${config.programs.zen-browser.package}/share/applications/zen-twilight.desktop" - "${pkgs.code-cursor}/share/applications/cursor.desktop" - "${pkgs.beeper}/share/applications/beeper.desktop" + "${pkgs.zed-editor}/share/applications/dev.zed.Zed.desktop" + "${pkgs.beeper}/share/applications/beepertexts.desktop" ]; }; From c12e188acca7f77857b1b562563e53134f23b46a Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Mon, 8 Dec 2025 18:43:50 -0800 Subject: [PATCH 045/211] feat: update to rust linting and flake update --- configuration.nix | 14 ++++++-------- flake.lock | 30 +++++++++++++++--------------- flake.nix | 13 +------------ home.nix | 27 ++++++++++++++++++--------- 4 files changed, 40 insertions(+), 44 deletions(-) diff --git a/configuration.nix b/configuration.nix index ff579bb..74c4683 100644 --- a/configuration.nix +++ b/configuration.nix @@ -13,6 +13,7 @@ # Bootloader. boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; + boot.kernelParams = [ "usbcore.autosuspend=-1" ]; # Boot time optimizations boot.loader.timeout = 0; # Boot immediately without waiting for user input @@ -38,23 +39,20 @@ }; }; - # Enable networking networking.networkmanager.enable = true; - networking.nameservers = [ "1.1.1.1#one.one.one.one" "1.0.0.1#one.one.one.one" ]; - services.resolved = { enable = true; - dnssec = "true"; - domains = [ "~." ]; - fallbackDns = [ "1.1.1.1#one.one.one.one" "1.0.0.1#one.one.one.one" ]; - dnsovertls = "true"; }; + networking.firewall.checkReversePath = "loose"; + services.tailscale.enable = true; + services.mullvad-vpn.enable = true; + services.mullvad-vpn.package = pkgs.mullvad-vpn; # Set your time zone. - time.timeZone = "America/Los_Angeles"; + time.timeZone = "Europe/Berlin"; # Select internationalisation properties. i18n.defaultLocale = "en_US.UTF-8"; diff --git a/flake.lock b/flake.lock index ca6be46..eef80e9 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1763416652, - "narHash": "sha256-8EBEEvtzQ11LCxpQHMNEBQAGtQiCu/pqP9zSovDSbNM=", + "lastModified": 1767619743, + "narHash": "sha256-N0kK1JqxIjFl7hPAfhkW6C9AO7feYJUWLPyqJO2VuQQ=", "owner": "nix-community", "repo": "home-manager", - "rev": "ea164b7c9ccdc2321379c2ff78fd4317b4c41312", + "rev": "a65c04965c841eb01ba401f5162f12bc8d52014f", "type": "github" }, "original": { @@ -28,11 +28,11 @@ ] }, "locked": { - "lastModified": 1762964643, - "narHash": "sha256-RYHN8O/Aja59XDji6WSJZPkJpYVUfpSkyH+PEupBJqM=", + "lastModified": 1767104570, + "narHash": "sha256-GKgwu5//R+cLdKysZjGqvUEEOGXXLdt93sNXeb2M/Lk=", "owner": "nix-community", "repo": "home-manager", - "rev": "827f2a23373a774a8805f84ca5344654c31f354b", + "rev": "e4e78a2cbeaddd07ab7238971b16468cc1d14daf", "type": "github" }, "original": { @@ -43,11 +43,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1762847253, - "narHash": "sha256-BWWnUUT01lPwCWUvS0p6Px5UOBFeXJ8jR+ZdLX8IbrU=", + "lastModified": 1767185284, + "narHash": "sha256-ljDBUDpD1Cg5n3mJI81Hz5qeZAwCGxon4kQW3Ho3+6Q=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "899dc449bc6428b9ee6b3b8f771ca2b0ef945ab9", + "rev": "40b1a28dce561bea34858287fbb23052c3ee63fe", "type": "github" }, "original": { @@ -58,11 +58,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1763421233, - "narHash": "sha256-Stk9ZYRkGrnnpyJ4eqt9eQtdFWRRIvMxpNRf4sIegnw=", + "lastModified": 1767379071, + "narHash": "sha256-EgE0pxsrW9jp9YFMkHL9JMXxcqi/OoumPJYwf+Okucw=", "owner": "nixos", "repo": "nixpkgs", - "rev": "89c2b2330e733d6cdb5eae7b899326930c2c0648", + "rev": "fb7944c166a3b630f177938e478f0378e64ce108", "type": "github" }, "original": { @@ -88,11 +88,11 @@ ] }, "locked": { - "lastModified": 1763457799, - "narHash": "sha256-33hJpIuqbn/PHf4VCZAktxDCUxnWLOtMAOyAFd75O9E=", + "lastModified": 1767568852, + "narHash": "sha256-6s8hL3YX9zAq2T7qvcwwzaEVwc9MEYbW+C2LcAAQfbk=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "85bc80b9d8c8b22ed273163dd7c7adfad9287a5d", + "rev": "350c729b261e6f5529460140a5f0943dd4c5e156", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 27af045..0002b69 100644 --- a/flake.nix +++ b/flake.nix @@ -35,18 +35,7 @@ { nixpkgs.overlays = [ (final: prev: { - code-cursor = prev.code-cursor.overrideAttrs (oldAttrs: rec { - pname = "cursor"; - version = "2.0.77"; - src = prev.appimageTools.extract { - inherit pname version; - src = prev.fetchurl { - url = "https://downloads.cursor.com/production/ba90f2f88e4911312761abab9492c42442117cfe/linux/x64/Cursor-2.0.77-x86_64.AppImage"; - hash = "sha256-/r7cmjgFhec7fEKUfFKw3vUoB9LJB2P/646cMeRKp/0="; - }; - }; - sourceRoot = "${pname}-${version}-extracted/usr/share/cursor"; - }); + }) ]; } diff --git a/home.nix b/home.nix index eedfec9..55fa3fc 100644 --- a/home.nix +++ b/home.nix @@ -48,20 +48,16 @@ git wget helix - code-cursor-fhs kitty zellij jujutsu vlc docker nerd-fonts.commit-mono - prismlauncher qbittorrent-enhanced gimp3 obs-studio inkscape - blender - kdePackages.kdenlive bat zoxide eza @@ -78,13 +74,16 @@ mullvad-vpn font-manager handbrake - libreoffice-qt steam appimage-run - obsidian gh beeper - zed-editor + antigravity-fhs + prusa-slicer + printrun + mkp224o + libreoffice-qt-fresh + claude-code ]; @@ -102,6 +101,7 @@ editor = { line-number = "relative"; lsp.display-messages = true; + lsp.display-inlay-hints = true; }; }; languages = { @@ -114,6 +114,15 @@ other-lines = "hint"; }; }; + rust = { + config = { + end-of-line-diagnostics = "hint"; + }; + "inline-diagnostics" = { + cursor-line = "hint"; + other-lines = "hint"; + }; + }; }; }; @@ -180,7 +189,7 @@ ns = "sudo nixos-rebuild switch --flake ~/Documents/nix-config#jet"; nd = "nix develop"; h = "hx"; - + vanity = "mkp224o-amd64-64-24k -d noisebridgevanitytor noisebridge{2..7}"; }; }; @@ -272,7 +281,7 @@ entries = [ "${pkgs.kitty}/share/applications/kitty.desktop" "${config.programs.zen-browser.package}/share/applications/zen-twilight.desktop" - "${pkgs.zed-editor}/share/applications/dev.zed.Zed.desktop" + "${pkgs.beeper}/share/applications/beepertexts.desktop" ]; }; From 46f77fce4f7afe7688135a6739256bcbe957978f Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Fri, 9 Jan 2026 21:30:46 +0100 Subject: [PATCH 046/211] feat: add wifi qr code extension to gnome and update --- flake.lock | 18 +++++++++--------- home.nix | 2 ++ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/flake.lock b/flake.lock index eef80e9..7a2b28c 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1767619743, - "narHash": "sha256-N0kK1JqxIjFl7hPAfhkW6C9AO7feYJUWLPyqJO2VuQQ=", + "lastModified": 1767971841, + "narHash": "sha256-TwDXF4MkmjI9c3Sly9FOWXf4sPbre6ZujG87v39G1Ig=", "owner": "nix-community", "repo": "home-manager", - "rev": "a65c04965c841eb01ba401f5162f12bc8d52014f", + "rev": "0e4217b2c4827e71e2e612accccb01981c16afda", "type": "github" }, "original": { @@ -58,11 +58,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1767379071, - "narHash": "sha256-EgE0pxsrW9jp9YFMkHL9JMXxcqi/OoumPJYwf+Okucw=", + "lastModified": 1767892417, + "narHash": "sha256-dhhvQY67aboBk8b0/u0XB6vwHdgbROZT3fJAjyNh5Ww=", "owner": "nixos", "repo": "nixpkgs", - "rev": "fb7944c166a3b630f177938e478f0378e64ce108", + "rev": "3497aa5c9457a9d88d71fa93a4a8368816fbeeba", "type": "github" }, "original": { @@ -88,11 +88,11 @@ ] }, "locked": { - "lastModified": 1767568852, - "narHash": "sha256-6s8hL3YX9zAq2T7qvcwwzaEVwc9MEYbW+C2LcAAQfbk=", + "lastModified": 1767763594, + "narHash": "sha256-5ysv8EuVAgDoYmNuXEUNf7vBzdeRaFxeIlIndv5HMvs=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "350c729b261e6f5529460140a5f0943dd4c5e156", + "rev": "8b2302d8c10369c9135552cc892da75cff5ddb03", "type": "github" }, "original": { diff --git a/home.nix b/home.nix index 55fa3fc..fa7c64c 100644 --- a/home.nix +++ b/home.nix @@ -40,6 +40,7 @@ disable-user-extensions = false; enabled-extensions = [ "hidetopbar@mathieu.bidon.ca" + "wifiqrcode@glerro.pm.me" ]; }; }; @@ -65,6 +66,7 @@ unzip direnv gnomeExtensions.hide-top-bar + gnomeExtensions.wifi-qrcode signal-desktop tree figma-agent From d9dfcae4f9edd29e947565f3c265138c464e2440 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sat, 31 Jan 2026 04:50:44 +0100 Subject: [PATCH 047/211] feat: rename to framework --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 0002b69..2033192 100644 --- a/flake.nix +++ b/flake.nix @@ -20,7 +20,7 @@ ... }: { nixosConfigurations = { - jet = nixpkgs.lib.nixosSystem { + framework = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ ./configuration.nix From a9979324ba36cd24b1f1d29786d7c53b895aa601 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sat, 31 Jan 2026 04:50:44 +0100 Subject: [PATCH 048/211] feat: refactor with new --- .gitignore | 1 + configuration.nix | 33 ++++----------------------------- home.nix | 43 +++++++++++++++---------------------------- 3 files changed, 20 insertions(+), 57 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..92b2793 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.direnv diff --git a/configuration.nix b/configuration.nix index 74c4683..683b1b3 100644 --- a/configuration.nix +++ b/configuration.nix @@ -52,7 +52,7 @@ services.mullvad-vpn.package = pkgs.mullvad-vpn; # Set your time zone. - time.timeZone = "Europe/Berlin"; + time.timeZone = "America/Los_Angeles"; # Select internationalisation properties. i18n.defaultLocale = "en_US.UTF-8"; @@ -260,6 +260,7 @@ vim docker docker-compose + nh ]; environment.variables.EDITOR = "helix"; @@ -294,23 +295,6 @@ name = "docker"; }; - # Enable SearXNG metasearch engine - services.searx = { - enable = true; - redisCreateLocally = true; - environmentFile = "/etc/searxng/searxng.env"; - # Use custom settings.yml file from nix-config - settingsFile = ./config/settings.yml; - # Override specific settings via NixOS options (these take precedence) - settings = { - server = { - bind_address = "127.0.0.1"; - port = 8888; - # secret_key is set via environmentFile to avoid exposing it in nix store - }; - }; - }; - # https://wiki.nixos.org/wiki/Appimage#Register_AppImage_files_as_a_binary_type_to_binfmt_misc programs.appimage = { enable = true; @@ -339,20 +323,11 @@ # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). system.stateVersion = "25.05"; # Did you read the comment? - # Create SearXNG environment file with secret key - system.activationScripts.searxng-env.text = '' - mkdir -p /etc/searxng - if [ ! -f /etc/searxng/searxng.env ]; then - echo 'SEARXNG_SECRET=78db11dc49971aa8e3c378cd9d05398f9e42c2f4ca5c2cc206183bf0ace4f237' > /etc/searxng/searxng.env - chmod 600 /etc/searxng/searxng.env - fi - ''; - # Set user profile picture for GNOME system.activationScripts.script.text = '' mkdir -p /var/lib/AccountsService/{icons,users} - if [ -f /home/jet/Documents/nixos-config/cat.png ]; then - cp /home/jet/Documents/nixos-config/cat.png /var/lib/AccountsService/icons/jet + if [ -f /home/jet/Documents/nix-config/cat.png ]; then + cp /home/jet/Documents/nix-config/cat.png /var/lib/AccountsService/icons/jet echo -e "[User]\nIcon=/var/lib/AccountsService/icons/jet\n" > /var/lib/AccountsService/users/jet chown root:root /var/lib/AccountsService/users/jet chmod 0600 /var/lib/AccountsService/users/jet diff --git a/home.nix b/home.nix index fa7c64c..3ce65d6 100644 --- a/home.nix +++ b/home.nix @@ -1,7 +1,7 @@ { config, pkgs, inputs, lib, ... }: { - imports = [ inputs.zen-browser.homeModules.twilight-official ]; + imports = [ inputs.zen-browser.homeModules.default ]; home.username = "jet"; home.stateVersion = "23.05"; @@ -19,9 +19,9 @@ }; "org/gnome/desktop/background" = { picture-uri = - "file:///home/jet/Documents/nixos-config/cat.png"; + "file:///home/jet/Documents/nix-config/cat.png"; picture-uri-dark = - "file:///home/jet/Documents/nixos-config/cat.png"; + "file:///home/jet/Documents/nix-config/cat.png"; picture-options = "wallpaper"; }; "org/gnome/settings-daemon/plugins/power" = { @@ -41,6 +41,9 @@ enabled-extensions = [ "hidetopbar@mathieu.bidon.ca" "wifiqrcode@glerro.pm.me" + "system-monitor@paradoxxx.zero.gmail.com" + "clipboard-indicator@tudmotu.com" + "emoji-copy@felipeftn" ]; }; }; @@ -57,7 +60,6 @@ nerd-fonts.commit-mono qbittorrent-enhanced gimp3 - obs-studio inkscape bat zoxide @@ -67,25 +69,24 @@ direnv gnomeExtensions.hide-top-bar gnomeExtensions.wifi-qrcode + gnomeExtensions.system-monitor-next + gnomeExtensions.clipboard-indicator + gnomeExtensions.emoji-copy signal-desktop tree - figma-agent - figma-linux google-chrome - tor-browser mullvad-vpn font-manager - handbrake steam appimage-run gh beeper antigravity-fhs - prusa-slicer - printrun mkp224o - libreoffice-qt-fresh claude-code + logseq + element-desktop + zulip ]; @@ -188,7 +189,7 @@ jn = "jj new"; jdiff = "jj diff"; jsq = "jj squash"; - ns = "sudo nixos-rebuild switch --flake ~/Documents/nix-config#jet"; + nhs = "nh os switch ."; nd = "nix develop"; h = "hx"; vanity = "mkp224o-amd64-64-24k -d noisebridgevanitytor noisebridge{2..7}"; @@ -218,6 +219,7 @@ programs.jujutsu = { enable = true; settings = { + remotes.origin.auto-track-bookmarks = "glob:*"; user = { email = "jetthomaspham@gmail.com"; name = "Jet Pham"; @@ -231,7 +233,6 @@ git = { sign-on-push = true; - push-new-bookmarks = true; }; ui = { default-command = "log"; @@ -249,20 +250,6 @@ "zen.theme.border-radius" = 0; "zen.theme.content-element-separation" = 0; }; - # Add SearXNG as default search engine - SearchEngines = { - Default = "SearXNG"; - Add = [ - { - Name = "SearXNG"; - URLTemplate = "http://127.0.0.1:8888/search?q={searchTerms}"; - Method = "GET"; - IconURL = "http://127.0.0.1:8888/static/themes/simple/img/searxng.png"; - Alias = "sx"; - Description = "SearXNG - Privacy-respecting metasearch engine"; - } - ]; - }; }; }; @@ -282,7 +269,7 @@ enable = true; entries = [ "${pkgs.kitty}/share/applications/kitty.desktop" - "${config.programs.zen-browser.package}/share/applications/zen-twilight.desktop" + "${config.programs.zen-browser.package}/share/applications/zen.desktop" "${pkgs.beeper}/share/applications/beepertexts.desktop" ]; From 4ea61e08ac07f7049e7015f1301bbbda92e1a49c Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Wed, 4 Feb 2026 00:23:09 +0100 Subject: [PATCH 049/211] feat: update and add prismlauncher --- flake.lock | 30 +++++++++++++++--------------- home.nix | 1 + 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/flake.lock b/flake.lock index 7a2b28c..653860d 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1767971841, - "narHash": "sha256-TwDXF4MkmjI9c3Sly9FOWXf4sPbre6ZujG87v39G1Ig=", + "lastModified": 1769978395, + "narHash": "sha256-gj1yP3spUb1vGtaF5qPhshd2j0cg4xf51pklDsIm19Q=", "owner": "nix-community", "repo": "home-manager", - "rev": "0e4217b2c4827e71e2e612accccb01981c16afda", + "rev": "984708c34d3495a518e6ab6b8633469bbca2f77a", "type": "github" }, "original": { @@ -28,11 +28,11 @@ ] }, "locked": { - "lastModified": 1767104570, - "narHash": "sha256-GKgwu5//R+cLdKysZjGqvUEEOGXXLdt93sNXeb2M/Lk=", + "lastModified": 1769872935, + "narHash": "sha256-07HMIGQ/WJeAQJooA7Kkg1SDKxhAiV6eodvOwTX6WKI=", "owner": "nix-community", "repo": "home-manager", - "rev": "e4e78a2cbeaddd07ab7238971b16468cc1d14daf", + "rev": "f4ad5068ee8e89e4a7c2e963e10dd35cd77b37b7", "type": "github" }, "original": { @@ -43,11 +43,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1767185284, - "narHash": "sha256-ljDBUDpD1Cg5n3mJI81Hz5qeZAwCGxon4kQW3Ho3+6Q=", + "lastModified": 1769302137, + "narHash": "sha256-QEDtctEkOsbx8nlFh4yqPEOtr4tif6KTqWwJ37IM2ds=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "40b1a28dce561bea34858287fbb23052c3ee63fe", + "rev": "a351494b0e35fd7c0b7a1aae82f0afddf4907aa8", "type": "github" }, "original": { @@ -58,11 +58,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1767892417, - "narHash": "sha256-dhhvQY67aboBk8b0/u0XB6vwHdgbROZT3fJAjyNh5Ww=", + "lastModified": 1770115704, + "narHash": "sha256-KHFT9UWOF2yRPlAnSXQJh6uVcgNcWlFqqiAZ7OVlHNc=", "owner": "nixos", "repo": "nixpkgs", - "rev": "3497aa5c9457a9d88d71fa93a4a8368816fbeeba", + "rev": "e6eae2ee2110f3d31110d5c222cd395303343b08", "type": "github" }, "original": { @@ -88,11 +88,11 @@ ] }, "locked": { - "lastModified": 1767763594, - "narHash": "sha256-5ysv8EuVAgDoYmNuXEUNf7vBzdeRaFxeIlIndv5HMvs=", + "lastModified": 1770097899, + "narHash": "sha256-FKRpvwWR96VDW4bdsxIrZgIAXvdXqsCTaV1HghCJBoQ=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "8b2302d8c10369c9135552cc892da75cff5ddb03", + "rev": "615a27db86f3fddd0f096b5e9ea832795a4608d1", "type": "github" }, "original": { diff --git a/home.nix b/home.nix index 3ce65d6..01dac00 100644 --- a/home.nix +++ b/home.nix @@ -78,6 +78,7 @@ mullvad-vpn font-manager steam + prismlauncher appimage-run gh beeper From 7c9ab8c9c84d85284993b166f8e33387040ce9aa Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Wed, 4 Feb 2026 17:43:48 -0800 Subject: [PATCH 050/211] feat:update and clean out mullvad --- config/settings.yml | 2783 ------------------------------------------- configuration.nix | 2 - flake.lock | 18 +- home.nix | 3 - 4 files changed, 9 insertions(+), 2797 deletions(-) delete mode 100644 config/settings.yml diff --git a/config/settings.yml b/config/settings.yml deleted file mode 100644 index 75e2fc7..0000000 --- a/config/settings.yml +++ /dev/null @@ -1,2783 +0,0 @@ -general: - # Debug mode, only for development. Is overwritten by ${SEARXNG_DEBUG} - debug: false - # displayed name - instance_name: "SearXNG" - # For example: https://example.com/privacy - privacypolicy_url: false - # use true to use your own donation page written in searx/info/en/donate.md - # use false to disable the donation link - donation_url: false - # mailto:contact@example.com - contact_url: false - # record stats - enable_metrics: true - # expose stats in open metrics format at /metrics - # leave empty to disable (no password set) - # open_metrics: - open_metrics: '' - -brand: - new_issue_url: https://github.com/searxng/searxng/issues/new - docs_url: https://docs.searxng.org/ - public_instances: https://searx.space - wiki_url: https://github.com/searxng/searxng/wiki - issue_url: https://github.com/searxng/searxng/issues - # custom: - # # Custom entries in the footer: [title]: [link] - # links: - # Uptime: https://uptime.searxng.org/history/darmarit-org - # About: "https://searxng.org" - -search: - # Filter results. 0: None, 1: Moderate, 2: Strict - safe_search: 0 - # Existing autocomplete backends: "360search", "baidu", "brave", "dbpedia", "duckduckgo", "google", "yandex", - # "mwmbl", "naver", "seznam", "sogou", "startpage", "stract", "swisscows", "quark", "qwant", "wikipedia" - - # leave blank to turn it off by default. - autocomplete: "" - # minimun characters to type before autocompleter starts - autocomplete_min: 4 - # backend for the favicon near URL in search results. - # Available resolvers: "allesedv", "duckduckgo", "google", "yandex" - leave blank to turn it off by default. - favicon_resolver: "" - # Default search language - leave blank to detect from browser information or - # use codes from 'languages.py' - default_lang: "auto" - # max_page: 0 # if engine supports paging, 0 means unlimited numbers of pages - # Available languages - # languages: - # - all - # - en - # - en-US - # - de - # - it-IT - # - fr - # - fr-BE - # ban time in seconds after engine errors - ban_time_on_fail: 5 - # max ban time in seconds after engine errors - max_ban_time_on_fail: 120 - suspended_times: - # Engine suspension time after error (in seconds; set to 0 to disable) - # For error "Access denied" and "HTTP error [402, 403]" - SearxEngineAccessDenied: 86400 - # For error "CAPTCHA" - SearxEngineCaptcha: 86400 - # For error "Too many request" and "HTTP error 429" - SearxEngineTooManyRequests: 3600 - # Cloudflare CAPTCHA - cf_SearxEngineCaptcha: 1296000 - cf_SearxEngineAccessDenied: 86400 - # ReCAPTCHA - recaptcha_SearxEngineCaptcha: 604800 - - # remove format to deny access, use lower case. - # formats: [html, csv, json, rss] - formats: - - html - -server: - # Is overwritten by ${SEARXNG_PORT} and ${SEARXNG_BIND_ADDRESS} - port: 8888 - bind_address: "127.0.0.1" - # public URL of the instance, to ensure correct inbound links. Is overwritten - # by ${SEARXNG_BASE_URL}. - base_url: false # "http://example.com/location" - # rate limit the number of request on the instance, block some bots. - # Is overwritten by ${SEARXNG_LIMITER} - limiter: false - # enable features designed only for public instances. - # Is overwritten by ${SEARXNG_PUBLIC_INSTANCE} - public_instance: false - - # If your instance owns a /etc/searxng/settings.yml file, then set the following - # values there. - - secret_key: "a4k4HJNatE6xiQKtG2CgYw0trnMQEiRc" # Is overwritten by ${SEARXNG_SECRET} - # Proxy image results through SearXNG. Is overwritten by ${SEARXNG_IMAGE_PROXY} - image_proxy: false - # 1.0 and 1.1 are supported - http_protocol_version: "1.0" - # POST queries are "more secure!" but are also the source of hard-to-locate - # annoyances, which is why GET may be better for end users and their browsers. - # see https://github.com/searxng/searxng/pull/3619 - # Is overwritten by ${SEARXNG_METHOD} - method: "POST" - default_http_headers: - X-Content-Type-Options: nosniff - X-Download-Options: noopen - X-Robots-Tag: noindex, nofollow - Referrer-Policy: no-referrer - -valkey: - # URL to connect valkey database. Is overwritten by ${SEARXNG_VALKEY_URL}. - # https://docs.searxng.org/admin/settings/settings_valkey.html#settings-valkey - # url: valkey://localhost:6379/0 - url: false - -ui: - # Custom static path - leave it blank if you didn't change - static_path: "" - # Custom templates path - leave it blank if you didn't change - templates_path: "" - # query_in_title: When true, the result page's titles contains the query - # it decreases the privacy, since the browser can records the page titles. - query_in_title: false - # infinite_scroll: When true, automatically loads the next page when scrolling to bottom of the current page. - infinite_scroll: false - # ui theme - default_theme: simple - # center the results ? - center_alignment: false - # URL prefix of the internet archive, don't forget trailing slash (if needed). - # cache_url: "https://webcache.googleusercontent.com/search?q=cache:" - # Default interface locale - leave blank to detect from browser information or - # use codes from the 'locales' config section - default_locale: "" - # Open result links in a new tab by default - # results_on_new_tab: false - theme_args: - # style of simple theme: auto, light, dark, black - simple_style: auto - # Perform search immediately if a category selected. - # Disable to select multiple categories at once and start the search manually. - search_on_category_select: true - # Hotkeys: default or vim - hotkeys: default - # URL formatting: pretty, full or host - url_formatting: pretty - -# Lock arbitrary settings on the preferences page. -# -# preferences: -# lock: -# - categories -# - language -# - autocomplete -# - favicon -# - safesearch -# - method -# - doi_resolver -# - locale -# - theme -# - results_on_new_tab -# - infinite_scroll -# - search_on_category_select -# - method -# - image_proxy -# - query_in_title - -# communication with search engines -# -outgoing: - # default timeout in seconds, can be override by engine - request_timeout: 3.0 - # the maximum timeout in seconds - # max_request_timeout: 10.0 - # suffix of searxng_useragent, could contain information like an email address - # to the administrator - useragent_suffix: "" - # The maximum number of concurrent connections that may be established. - pool_connections: 100 - # Allow the connection pool to maintain keep-alive connections below this - # point. - pool_maxsize: 20 - # See https://www.python-httpx.org/http2/ - enable_http2: true - # uncomment below section if you want to use a custom server certificate - # see https://www.python-httpx.org/advanced/#changing-the-verification-defaults - # and https://www.python-httpx.org/compatibility/#ssl-configuration - # verify: ~/.mitmproxy/mitmproxy-ca-cert.cer - # - # uncomment below section if you want to use a proxyq see: SOCKS proxies - # https://2.python-requests.org/en/latest/user/advanced/#proxies - # are also supported: see - # https://2.python-requests.org/en/latest/user/advanced/#socks - # - # proxies: - # all://: - # - http://proxy1:8080 - # - http://proxy2:8080 - # - # using_tor_proxy: true - # - # Extra seconds to add in order to account for the time taken by the proxy - # - # extra_proxy_timeout: 10 - # - # uncomment below section only if you have more than one network interface - # which can be the source of outgoing search requests - # - # source_ips: - # - 1.1.1.1 - # - 1.1.1.2 - # - fe80::/126 - -# Plugin configuration, for more details see -# https://docs.searxng.org/admin/settings/settings_plugins.html -# -plugins: - - searx.plugins.calculator.SXNGPlugin: - active: true - - searx.plugins.hash_plugin.SXNGPlugin: - active: true - - searx.plugins.self_info.SXNGPlugin: - active: true - - searx.plugins.unit_converter.SXNGPlugin: - active: true - - searx.plugins.ahmia_filter.SXNGPlugin: - active: true - - searx.plugins.hostnames.SXNGPlugin: - active: true - - searx.plugins.time_zone.SXNGPlugin: - active: true - - searx.plugins.oa_doi_rewrite.SXNGPlugin: - active: false - - searx.plugins.tor_check.SXNGPlugin: - active: false - - searx.plugins.tracker_url_remover.SXNGPlugin: - active: true - - -# Configuration of the "Hostnames plugin": -# -# hostnames: -# replace: -# '(.*\.)?youtube\.com$': 'yt.example.com' -# '(.*\.)?youtu\.be$': 'yt.example.com' -# '(.*\.)?reddit\.com$': 'teddit.example.com' -# '(.*\.)?redd\.it$': 'teddit.example.com' -# '(www\.)?twitter\.com$': 'nitter.example.com' -# remove: -# - '(.*\.)?facebook.com$' -# low_priority: -# - '(.*\.)?google(\..*)?$' -# high_priority: -# - '(.*\.)?wikipedia.org$' -# -# Alternatively you can use external files for configuring the "Hostnames plugin": -# -# hostnames: -# replace: 'rewrite-hosts.yml' -# -# Content of 'rewrite-hosts.yml' (place the file in the same directory as 'settings.yml'): -# '(.*\.)?youtube\.com$': 'yt.example.com' -# '(.*\.)?youtu\.be$': 'yt.example.com' -# - -checker: - # disable checker when in debug mode - off_when_debug: true - - # use "scheduling: {}" to disable scheduling - # scheduling: interval or int - - # to activate the scheduler: - # * uncomment "scheduling" section - # * add "cache2 = name=searxngcache,items=2000,blocks=2000,blocksize=4096,bitmap=1" - # to your uwsgi.ini - - # scheduling: - # start_after: [300, 1800] # delay to start the first run of the checker - # every: [86400, 90000] # how often the checker runs - - # additional tests: only for the YAML anchors (see the engines section) - # - additional_tests: - rosebud: &test_rosebud - matrix: - query: rosebud - lang: en - result_container: - - not_empty - - ['one_title_contains', 'citizen kane'] - test: - - unique_results - - android: &test_android - matrix: - query: ['android'] - lang: ['en', 'de', 'fr', 'zh-CN'] - result_container: - - not_empty - - ['one_title_contains', 'google'] - test: - - unique_results - - # tests: only for the YAML anchors (see the engines section) - tests: - infobox: &tests_infobox - infobox: - matrix: - query: ["linux", "new york", "bbc"] - result_container: - - has_infobox - -categories_as_tabs: - general: - images: - videos: - news: - map: - music: - it: - science: - files: - social media: - -engines: - - name: 360search - engine: 360search - shortcut: 360so - disabled: true - - - name: 360search videos - engine: 360search_videos - shortcut: 360sov - disabled: true - - - name: 9gag - engine: 9gag - shortcut: 9g - disabled: true - - - name: acfun - engine: acfun - shortcut: acf - disabled: true - - - name: adobe stock - engine: adobe_stock - shortcut: asi - categories: ["images"] - # https://docs.searxng.org/dev/engines/online/adobe_stock.html - adobe_order: relevance - adobe_content_types: ["photo", "illustration", "zip_vector", "template", "3d", "image"] - timeout: 6 - disabled: true - - - name: adobe stock video - engine: adobe_stock - shortcut: asv - network: adobe stock - categories: ["videos"] - adobe_order: relevance - adobe_content_types: ["video"] - timeout: 6 - disabled: true - - - name: adobe stock audio - engine: adobe_stock - shortcut: asa - network: adobe stock - categories: ["music"] - adobe_order: relevance - adobe_content_types: ["audio"] - timeout: 6 - disabled: true - - - name: astrophysics data system - engine: astrophysics_data_system - shortcut: ads - # read https://docs.searxng.org/dev/engines/online/astrophysics_data_system.html - api_key: "" - inactive: true - - - name: alpine linux packages - engine: alpinelinux - disabled: true - shortcut: alp - - - name: annas archive - engine: annas_archive - disabled: true - shortcut: aa - timeout: 5 - - - name: ansa - engine: ansa - shortcut: ans - disabled: true - - # - name: annas articles - # engine: annas_archive - # shortcut: aaa - # # https://docs.searxng.org/dev/engines/online/annas_archive.html - # aa_content: 'magazine' # book_fiction, book_unknown, book_nonfiction, book_comic - # aa_ext: 'pdf' # pdf, epub, .. - # aa_sort: oldest' # newest, oldest, largest, smallest - - - name: apk mirror - engine: apkmirror - timeout: 4.0 - shortcut: apkm - disabled: true - - - name: apple app store - engine: apple_app_store - shortcut: aps - disabled: true - - # Requires Tor - - name: ahmia - engine: ahmia - categories: onions - enable_http: true - shortcut: ah - - - name: anaconda - engine: xpath - paging: true - first_page_num: 0 - search_url: https://anaconda.org/search?q={query}&page={pageno} - results_xpath: //tbody/tr - url_xpath: ./td/h5/a[last()]/@href - title_xpath: ./td/h5 - content_xpath: ./td[h5]/text() - categories: it - timeout: 6.0 - shortcut: conda - disabled: true - - - name: arch linux wiki - engine: archlinux - shortcut: al - - - name: nixos wiki - engine: mediawiki - shortcut: nixw - base_url: https://wiki.nixos.org/ - search_type: text - disabled: true - categories: [it, software wikis] - - - name: artic - engine: artic - shortcut: arc - timeout: 4.0 - - - name: arxiv - engine: arxiv - shortcut: arx - - - name: ask - engine: ask - shortcut: ask - disabled: true - - # - name: azure - # engine: azure - # shortcut: az - # categories: [it, cloud] - # azure_tenant_id: "your_tenant_id" - # azure_client_id: "your_client_id" - # azure_client_secret: "your_client_secret" - # disabled: true - - # tmp suspended: dh key too small - # - name: base - # engine: base - # shortcut: bs - - - name: bandcamp - engine: bandcamp - shortcut: bc - categories: music - - - name: baidu - baidu_category: general - categories: [general] - engine: baidu - shortcut: bd - disabled: true - - - name: baidu images - baidu_category: images - categories: [images] - engine: baidu - shortcut: bdi - disabled: true - - - name: baidu kaifa - baidu_category: it - categories: [it] - engine: baidu - shortcut: bdk - disabled: true - - - name: wikipedia - engine: wikipedia - shortcut: wp - # add "list" to the array to get results in the results list - display_type: ["infobox"] - categories: [general] - - - name: bilibili - engine: bilibili - shortcut: bil - disabled: true - - - name: bing - engine: bing - shortcut: bi - disabled: true - - - name: bing images - engine: bing_images - shortcut: bii - - - name: bing news - engine: bing_news - shortcut: bin - - - name: bing videos - engine: bing_videos - shortcut: biv - - - name: bitchute - engine: bitchute - shortcut: bit - disabled: true - - - name: bitbucket - engine: xpath - paging: true - search_url: https://bitbucket.org/repo/all/{pageno}?name={query} - url_xpath: //article[@class="repo-summary"]//a[@class="repo-link"]/@href - title_xpath: //article[@class="repo-summary"]//a[@class="repo-link"] - content_xpath: //article[@class="repo-summary"]/p - categories: [it, repos] - timeout: 4.0 - disabled: true - shortcut: bb - about: - website: https://bitbucket.org/ - wikidata_id: Q2493781 - official_api_documentation: https://developer.atlassian.com/bitbucket - use_official_api: false - require_api_key: false - results: HTML - - - name: bpb - engine: bpb - shortcut: bpb - disabled: true - - - name: btdigg - engine: btdigg - shortcut: bt - disabled: true - - - name: openverse - engine: openverse - categories: images - shortcut: opv - - - name: media.ccc.de - engine: ccc_media - shortcut: c3tv - # We don't set language: de here because media.ccc.de is not just - # for a German audience. It contains many English videos and many - # German videos have English subtitles. - disabled: true - - - name: chefkoch - engine: chefkoch - shortcut: chef - # to show premium or plus results too: - # skip_premium: false - - # WARNING: links from chinaso.com voilate users privacy - # Before activate these engines its mandatory to read - # - https://github.com/searxng/searxng/issues/4694 - # - https://docs.searxng.org/dev/engines/online/chinaso.html - - - name: chinaso news - engine: chinaso - shortcut: chinaso - categories: [news] - chinaso_category: news - chinaso_news_source: all - disabled: true - inactive: true - - - name: chinaso images - engine: chinaso - network: chinaso news - shortcut: chinasoi - categories: [images] - chinaso_category: images - disabled: true - inactive: true - - - name: chinaso videos - engine: chinaso - network: chinaso news - shortcut: chinasov - categories: [videos] - chinaso_category: videos - disabled: true - inactive: true - - - name: cloudflareai - engine: cloudflareai - shortcut: cfai - # get api token and accont id from https://developers.cloudflare.com/workers-ai/get-started/rest-api/ - cf_account_id: 'your_cf_accout_id' - cf_ai_api: 'your_cf_api' - # create your ai gateway by https://developers.cloudflare.com/ai-gateway/get-started/creating-gateway/ - cf_ai_gateway: 'your_cf_ai_gateway_name' - # find the model name from https://developers.cloudflare.com/workers-ai/models/#text-generation - cf_ai_model: 'ai_model_name' - # custom your preferences - # cf_ai_model_display_name: 'Cloudflare AI' - # cf_ai_model_assistant: 'prompts_for_assistant_role' - # cf_ai_model_system: 'prompts_for_system_role' - timeout: 30 - disabled: true - - - name: core.ac.uk - engine: core - shortcut: cor - # read https://docs.searxng.org/dev/engines/online/core.html - api_key: "" - inactive: true - - - name: crossref - engine: crossref - shortcut: cr - timeout: 30 - disabled: true - - - name: crowdview - engine: json_engine - shortcut: cv - categories: general - paging: false - search_url: https://crowdview-next-js.onrender.com/api/search-v3?query={query} - results_query: results - url_query: link - title_query: title - content_query: snippet - title_html_to_text: true - content_html_to_text: true - disabled: true - about: - website: https://crowdview.ai/ - - - name: yep - engine: yep - shortcut: yep - categories: general - search_type: web - timeout: 5 - disabled: true - - - name: yep images - engine: yep - shortcut: yepi - categories: images - search_type: images - disabled: true - - - name: yep news - engine: yep - shortcut: yepn - categories: news - search_type: news - disabled: true - - - name: currency - engine: currency_convert - shortcut: cc - - - name: deezer - engine: deezer - shortcut: dz - disabled: true - - - name: destatis - engine: destatis - shortcut: destat - disabled: true - - - name: deviantart - engine: deviantart - shortcut: da - timeout: 3.0 - - - name: devicons - engine: devicons - shortcut: di - timeout: 3.0 - - - name: ddg definitions - engine: duckduckgo_definitions - shortcut: ddd - weight: 2 - disabled: true - tests: *tests_infobox - - # cloudflare protected - # - name: digbt - # engine: digbt - # shortcut: dbt - # timeout: 6.0 - # disabled: true - - - name: docker hub - engine: docker_hub - shortcut: dh - categories: [it, packages] - - - name: encyclosearch - engine: json_engine - shortcut: es - categories: general - paging: true - search_url: https://encyclosearch.org/encyclosphere/search?q={query}&page={pageno}&resultsPerPage=15 - results_query: Results - url_query: SourceURL - title_query: Title - content_query: Description - disabled: true - about: - website: https://encyclosearch.org - official_api_documentation: https://encyclosearch.org/docs/#/rest-api - use_official_api: true - require_api_key: false - results: JSON - - - name: erowid - engine: xpath - paging: true - first_page_num: 0 - page_size: 30 - search_url: https://www.erowid.org/search.php?q={query}&s={pageno} - url_xpath: //dl[@class="results-list"]/dt[@class="result-title"]/a/@href - title_xpath: //dl[@class="results-list"]/dt[@class="result-title"]/a/text() - content_xpath: //dl[@class="results-list"]/dd[@class="result-details"] - categories: [] - shortcut: ew - disabled: true - about: - website: https://www.erowid.org/ - wikidata_id: Q1430691 - official_api_documentation: - use_official_api: false - require_api_key: false - results: HTML - - # - name: elasticsearch - # shortcut: els - # engine: elasticsearch - # base_url: http://localhost:9200 - # username: elastic - # password: changeme - # index: my-index - # enable_http: true - # # available options: match, simple_query_string, term, terms, custom - # query_type: match - # # if query_type is set to custom, provide your query here - # # custom_query_json: {"query":{"match_all": {}}} - # # show_metadata: false - # disabled: true - - - name: wikidata - engine: wikidata - shortcut: wd - timeout: 3.0 - weight: 2 - # add "list" to the array to get results in the results list - display_type: ["infobox"] - tests: *tests_infobox - categories: [general] - - - name: duckduckgo - engine: duckduckgo - shortcut: ddg - - - name: duckduckgo images - engine: duckduckgo_extra - categories: [images, web] - ddg_category: images - shortcut: ddi - disabled: true - - - name: duckduckgo videos - engine: duckduckgo_extra - categories: [videos, web] - ddg_category: videos - shortcut: ddv - disabled: true - - - name: duckduckgo news - engine: duckduckgo_extra - categories: [news, web] - ddg_category: news - shortcut: ddn - disabled: true - - - name: duckduckgo weather - engine: duckduckgo_weather - shortcut: ddw - disabled: true - - - name: apple maps - engine: apple_maps - shortcut: apm - disabled: true - timeout: 5.0 - - - name: emojipedia - engine: emojipedia - timeout: 4.0 - shortcut: em - disabled: true - - - name: tineye - engine: tineye - shortcut: tin - timeout: 9.0 - disabled: true - - - name: etymonline - engine: xpath - paging: true - search_url: https://etymonline.com/search?page={pageno}&q={query} - url_xpath: //a[contains(@class, "word__name--")]/@href - title_xpath: //a[contains(@class, "word__name--")] - content_xpath: //section[contains(@class, "word__defination")] - first_page_num: 1 - shortcut: et - categories: [dictionaries] - about: - website: https://www.etymonline.com/ - wikidata_id: Q1188617 - official_api_documentation: - use_official_api: false - require_api_key: false - results: HTML - - # - name: ebay - # engine: ebay - # shortcut: eb - # base_url: 'https://www.ebay.com' - # disabled: true - # timeout: 5 - - - name: 1x - engine: www1x - shortcut: 1x - timeout: 3.0 - disabled: true - - - name: fdroid - engine: fdroid - shortcut: fd - disabled: true - - - name: findthatmeme - engine: findthatmeme - shortcut: ftm - disabled: true - - - name: flickr - categories: images - shortcut: fl - # You can use the engine using the official stable API, but you need an API - # key, see: https://www.flickr.com/services/apps/create/ - # engine: flickr - # api_key: 'apikey' # required! - # Or you can use the html non-stable engine, activated by default - engine: flickr_noapi - - - name: free software directory - engine: mediawiki - shortcut: fsd - categories: [it, software wikis] - base_url: https://directory.fsf.org/ - search_type: title - timeout: 5.0 - disabled: true - about: - website: https://directory.fsf.org/ - wikidata_id: Q2470288 - - # - name: freesound - # engine: freesound - # shortcut: fnd - # disabled: true - # timeout: 15.0 - # API key required, see: https://freesound.org/docs/api/overview.html - # api_key: MyAPIkey - - - name: frinkiac - engine: frinkiac - shortcut: frk - disabled: true - - - name: fyyd - engine: fyyd - shortcut: fy - timeout: 8.0 - disabled: true - - - name: geizhals - engine: geizhals - shortcut: geiz - disabled: true - - - name: genius - engine: genius - shortcut: gen - - - name: gentoo - engine: mediawiki - shortcut: ge - categories: ["it", "software wikis"] - base_url: "https://wiki.gentoo.org/" - api_path: "api.php" - search_type: text - timeout: 10 - - - name: gitlab - engine: gitlab - base_url: https://gitlab.com - shortcut: gl - disabled: true - about: - website: https://gitlab.com/ - wikidata_id: Q16639197 - - # - name: gnome - # engine: gitlab - # base_url: https://gitlab.gnome.org - # shortcut: gn - # about: - # website: https://gitlab.gnome.org - # wikidata_id: Q44316 - - - name: github - engine: github - shortcut: gh - - - name: github code - engine: github_code - shortcut: ghc - disabled: true - ghc_auth: - # type is one of: - # * none - # * personal_access_token - # * bearer - # When none is passed, the token is not requried. - type: "none" - token: "token" - # specify whether to highlight the matching lines to the query - ghc_highlight_matching_lines: true - ghc_strip_new_lines: true - ghc_strip_whitespace: false - timeout: 10.0 - - - name: codeberg - # https://docs.searxng.org/dev/engines/online/gitea.html - engine: gitea - base_url: https://codeberg.org - shortcut: cb - disabled: true - - - name: gitea.com - engine: gitea - base_url: https://gitea.com - shortcut: gitea - disabled: true - - - name: goodreads - engine: goodreads - shortcut: good - timeout: 4.0 - disabled: true - - - name: google - engine: google - shortcut: go - # additional_tests: - # android: *test_android - - - name: google images - engine: google_images - shortcut: goi - # additional_tests: - # android: *test_android - # dali: - # matrix: - # query: ['Dali Christ'] - # lang: ['en', 'de', 'fr', 'zh-CN'] - # result_container: - # - ['one_title_contains', 'Salvador'] - - - name: google news - engine: google_news - shortcut: gon - # additional_tests: - # android: *test_android - - - name: google videos - engine: google_videos - shortcut: gov - # additional_tests: - # android: *test_android - - - name: google scholar - engine: google_scholar - shortcut: gos - - - name: google play apps - engine: google_play - categories: [files, apps] - shortcut: gpa - play_categ: apps - disabled: true - - - name: google play movies - engine: google_play - categories: videos - shortcut: gpm - play_categ: movies - disabled: true - - - name: material icons - engine: material_icons - shortcut: mi - disabled: true - - - name: habrahabr - engine: xpath - paging: true - search_url: https://habr.com/en/search/page{pageno}/?q={query} - results_xpath: //article[contains(@class, "tm-articles-list__item")] - url_xpath: .//a[@class="tm-title__link"]/@href - title_xpath: .//a[@class="tm-title__link"] - content_xpath: .//div[contains(@class, "article-formatted-body")] - categories: it - timeout: 4.0 - disabled: true - shortcut: habr - about: - website: https://habr.com/ - wikidata_id: Q4494434 - official_api_documentation: https://habr.com/en/docs/help/api/ - use_official_api: false - require_api_key: false - results: HTML - - - name: hackernews - engine: hackernews - shortcut: hn - disabled: true - - - name: hex - engine: hex - shortcut: hex - disabled: true - # Valid values: name inserted_at updated_at total_downloads recent_downloads - sort_criteria: "recent_downloads" - page_size: 10 - - - name: crates.io - engine: crates - shortcut: crates - disabled: true - timeout: 6.0 - - - name: hoogle - engine: xpath - search_url: https://hoogle.haskell.org/?hoogle={query} - results_xpath: '//div[@class="result"]' - title_xpath: './/div[@class="ans"]//a' - url_xpath: './/div[@class="ans"]//a/@href' - content_xpath: './/div[@class="from"]' - page_size: 20 - categories: [it, packages] - shortcut: ho - about: - website: https://hoogle.haskell.org/ - wikidata_id: Q34010 - official_api_documentation: https://hackage.haskell.org/api - use_official_api: false - require_api_key: false - results: JSON - - - name: il post - engine: il_post - shortcut: pst - disabled: true - - - name: huggingface - engine: huggingface - shortcut: hf - disabled: true - - - name: huggingface datasets - huggingface_endpoint: datasets - engine: huggingface - shortcut: hfd - disabled: true - - - name: huggingface spaces - huggingface_endpoint: spaces - engine: huggingface - shortcut: hfs - disabled: true - - - name: imdb - engine: imdb - shortcut: imdb - timeout: 6.0 - disabled: true - - - name: imgur - engine: imgur - shortcut: img - disabled: true - - - name: ina - engine: ina - shortcut: in - timeout: 6.0 - disabled: true - - # - name: invidious - # engine: invidious - # # if you want to use invidious with SearXNG you should setup one locally - # # https://github.com/searxng/searxng/issues/2722#issuecomment-2884993248 - # base_url: - # - https://invidious.example1.com - # - https://invidious.example2.com - # shortcut: iv - # timeout: 3.0 - - - name: ipernity - engine: ipernity - shortcut: ip - disabled: true - - - name: iqiyi - engine: iqiyi - shortcut: iq - disabled: true - - - name: jisho - engine: jisho - shortcut: js - timeout: 3.0 - disabled: true - - - name: kickass - engine: kickass - base_url: - - https://kickasstorrents.to - - https://kickasstorrents.cr - - https://kickasstorrent.cr - - https://kickass.sx - - https://kat.am - shortcut: kc - timeout: 4.0 - - - name: lemmy communities - engine: lemmy - lemmy_type: Communities - shortcut: leco - - - name: lemmy users - engine: lemmy - network: lemmy communities - lemmy_type: Users - shortcut: leus - - - name: lemmy posts - engine: lemmy - network: lemmy communities - lemmy_type: Posts - shortcut: lepo - - - name: lemmy comments - engine: lemmy - network: lemmy communities - lemmy_type: Comments - shortcut: lecom - - - name: library genesis - engine: xpath - # search_url: https://libgen.is/search.php?req={query} - search_url: https://libgen.rs/search.php?req={query} - url_xpath: //a[contains(@href,"book/index.php?md5")]/@href - title_xpath: //a[contains(@href,"book/")]/text()[1] - content_xpath: //td/a[1][contains(@href,"=author")]/text() - categories: files - timeout: 7.0 - disabled: true - shortcut: lg - about: - website: https://libgen.fun/ - wikidata_id: Q22017206 - official_api_documentation: - use_official_api: false - require_api_key: false - results: HTML - - - name: z-library - engine: zlibrary - shortcut: zlib - timeout: 7.0 - disabled: true - # https://github.com/searxng/searxng/issues/3610 - inactive: true - - - name: library of congress - engine: loc - shortcut: loc - categories: images - disabled: true - - - name: libretranslate - engine: libretranslate - # https://github.com/LibreTranslate/LibreTranslate?tab=readme-ov-file#mirrors - base_url: - - https://libretranslate.com/translate - # api_key: abc123 - shortcut: lt - disabled: true - - - name: lingva - engine: lingva - shortcut: lv - # set lingva instance in url, by default it will use the official instance - # url: https://lingva.thedaviddelta.com - - - name: lobste.rs - engine: xpath - search_url: https://lobste.rs/search?q={query}&what=stories&order=relevance - results_xpath: //li[contains(@class, "story")] - url_xpath: .//a[@class="u-url"]/@href - title_xpath: .//a[@class="u-url"] - content_xpath: .//a[@class="domain"] - categories: it - shortcut: lo - timeout: 5.0 - disabled: true - about: - website: https://lobste.rs/ - wikidata_id: Q60762874 - official_api_documentation: - use_official_api: false - require_api_key: false - results: HTML - - - name: marginalia - engine: marginalia - shortcut: mar - # To get an API key, please follow the instructions at - # - https://about.marginalia-search.com/article/api/ - # api_key: ... - disabled: true - inactive: true - - - name: mastodon users - engine: mastodon - mastodon_type: accounts - base_url: https://mastodon.social - shortcut: mau - - - name: mastodon hashtags - engine: mastodon - mastodon_type: hashtags - base_url: https://mastodon.social - shortcut: mah - - # - name: matrixrooms - # engine: mrs - # # https://docs.searxng.org/dev/engines/online/mrs.html - # # base_url: https://mrs-api-host - # shortcut: mtrx - # disabled: true - - - name: mdn - shortcut: mdn - engine: json_engine - categories: [it] - paging: true - search_url: https://developer.mozilla.org/api/v1/search?q={query}&page={pageno} - results_query: documents - url_query: mdn_url - url_prefix: https://developer.mozilla.org - title_query: title - content_query: summary - about: - website: https://developer.mozilla.org - wikidata_id: Q3273508 - official_api_documentation: null - use_official_api: false - require_api_key: false - results: JSON - - - name: metacpan - engine: metacpan - shortcut: cpan - disabled: true - number_of_results: 20 - - # https://docs.searxng.org/dev/engines/offline/search-indexer-engines.html#module-searx.engines.meilisearch - # - name: meilisearch - # engine: meilisearch - # shortcut: mes - # enable_http: true - # base_url: http://localhost:7700 - # index: my-index - # auth_key: Bearer XXXX - - - name: microsoft learn - engine: microsoft_learn - shortcut: msl - disabled: true - - - name: mixcloud - engine: mixcloud - shortcut: mc - - # MongoDB engine - # Required dependency: pymongo - # - name: mymongo - # engine: mongodb - # shortcut: md - # exact_match_only: false - # host: '127.0.0.1' - # port: 27017 - # enable_http: true - # results_per_page: 20 - # database: 'business' - # collection: 'reviews' # name of the db collection - # key: 'name' # key in the collection to search for - - - name: mozhi - engine: mozhi - base_url: - - https://mozhi.aryak.me - - https://translate.bus-hit.me - - https://nyc1.mz.ggtyler.dev - # mozhi_engine: google - see https://mozhi.aryak.me for supported engines - timeout: 4.0 - shortcut: mz - disabled: true - - - name: mwmbl - engine: mwmbl - # api_url: https://api.mwmbl.org - shortcut: mwm - disabled: true - - - name: niconico - engine: niconico - shortcut: nico - disabled: true - - - name: npm - engine: npm - shortcut: npm - timeout: 5.0 - disabled: true - - - name: nyaa - engine: nyaa - shortcut: nt - disabled: true - - - name: mankier - engine: json_engine - search_url: https://www.mankier.com/api/v2/mans/?q={query} - results_query: results - url_query: url - title_query: name - content_query: description - categories: it - shortcut: man - about: - website: https://www.mankier.com/ - official_api_documentation: https://www.mankier.com/api - use_official_api: true - require_api_key: false - results: JSON - - # https://docs.searxng.org/dev/engines/online/mullvad_leta.html - - name: mullvadleta - engine: mullvad_leta - disabled: true - leta_engine: google - categories: [general, web] - shortcut: ml - - - name: mullvadleta brave - engine: mullvad_leta - network: mullvadleta - disabled: true - leta_engine: brave - categories: [general, web] - shortcut: mlb - - - name: odysee - engine: odysee - shortcut: od - disabled: true - - - name: ollama - engine: ollama - shortcut: ollama - disabled: true - - - name: openairedatasets - engine: json_engine - paging: true - search_url: https://api.openaire.eu/search/datasets?format=json&page={pageno}&size=10&title={query} - results_query: response/results/result - url_query: metadata/oaf:entity/oaf:result/children/instance/webresource/url/$ - title_query: metadata/oaf:entity/oaf:result/title/$ - content_query: metadata/oaf:entity/oaf:result/description/$ - content_html_to_text: true - categories: "science" - shortcut: oad - timeout: 5.0 - about: - website: https://www.openaire.eu/ - wikidata_id: Q25106053 - official_api_documentation: https://api.openaire.eu/ - use_official_api: false - require_api_key: false - results: JSON - - - name: openairepublications - engine: json_engine - paging: true - search_url: https://api.openaire.eu/search/publications?format=json&page={pageno}&size=10&title={query} - results_query: response/results/result - url_query: metadata/oaf:entity/oaf:result/children/instance/webresource/url/$ - title_query: metadata/oaf:entity/oaf:result/title/$ - content_query: metadata/oaf:entity/oaf:result/description/$ - content_html_to_text: true - categories: science - shortcut: oap - timeout: 5.0 - about: - website: https://www.openaire.eu/ - wikidata_id: Q25106053 - official_api_documentation: https://api.openaire.eu/ - use_official_api: false - require_api_key: false - results: JSON - - - name: openalex - engine: openalex - shortcut: oa - # https://docs.searxng.org/dev/engines/online/openalex.html - # Recommended by OpenAlex: join the polite pool with an email address - # mailto: "[email protected]" - timeout: 5.0 - disabled: true - - - name: openclipart - engine: openclipart - shortcut: ocl - inactive: true - disabled: true - timeout: 30 - - - name: openlibrary - engine: openlibrary - shortcut: ol - timeout: 10 - disabled: true - - - name: openmeteo - engine: open_meteo - shortcut: om - disabled: true - - # - name: opensemanticsearch - # engine: opensemantic - # shortcut: oss - # base_url: 'http://localhost:8983/solr/opensemanticsearch/' - - - name: openstreetmap - engine: openstreetmap - shortcut: osm - - - name: openrepos - engine: xpath - paging: true - search_url: https://openrepos.net/search/node/{query}?page={pageno} - url_xpath: //li[@class="search-result"]//h3[@class="title"]/a/@href - title_xpath: //li[@class="search-result"]//h3[@class="title"]/a - content_xpath: //li[@class="search-result"]//div[@class="search-snippet-info"]//p[@class="search-snippet"] - categories: files - timeout: 4.0 - disabled: true - shortcut: or - about: - website: https://openrepos.net/ - wikidata_id: - official_api_documentation: - use_official_api: false - require_api_key: false - results: HTML - - - name: packagist - engine: json_engine - paging: true - search_url: https://packagist.org/search.json?q={query}&page={pageno} - results_query: results - url_query: url - title_query: name - content_query: description - categories: [it, packages] - disabled: true - timeout: 5.0 - shortcut: pack - about: - website: https://packagist.org - wikidata_id: Q108311377 - official_api_documentation: https://packagist.org/apidoc - use_official_api: true - require_api_key: false - results: JSON - - - name: pdbe - engine: pdbe - shortcut: pdb - # Hide obsolete PDB entries. Default is not to hide obsolete structures - # hide_obsolete: false - - - name: photon - engine: photon - shortcut: ph - - - name: pinterest - engine: pinterest - shortcut: pin - - - name: piped - engine: piped - shortcut: ppd - categories: videos - piped_filter: videos - timeout: 3.0 - inactive: true - - # URL to use as link and for embeds - frontend_url: https://srv.piped.video - # Instance will be selected randomly, for more see https://piped-instances.kavin.rocks/ - backend_url: - - https://pipedapi.ducks.party - - https://api.piped.private.coffee - - - name: piped.music - engine: piped - network: piped - shortcut: ppdm - categories: music - piped_filter: music_songs - timeout: 3.0 - inactive: true - - - name: piratebay - engine: piratebay - shortcut: tpb - # You may need to change this URL to a proxy if piratebay is blocked in your - # country - url: https://thepiratebay.org/ - timeout: 3.0 - - - name: pixabay images - engine: pixabay - pixabay_type: images - categories: images - shortcut: pixi - disabled: true - - - name: pixabay videos - engine: pixabay - pixabay_type: videos - categories: videos - shortcut: pixv - disabled: true - - - name: pixiv - shortcut: pv - engine: pixiv - disabled: true - inactive: true - pixiv_image_proxies: - - https://pximg.example.org - # A proxy is required to load the images. Hosting an image proxy server - # for Pixiv: - # --> https://pixivfe.pages.dev/hosting-image-proxy-server/ - # Proxies from public instances. Ask the public instances owners if they - # agree to receive traffic from SearXNG! - # --> https://codeberg.org/VnPower/PixivFE#instances - # --> https://github.com/searxng/searxng/pull/3192#issuecomment-1941095047 - # image proxy of https://pixiv.cat - # - https://i.pixiv.cat - # image proxy of https://www.pixiv.pics - # - https://pximg.cocomi.eu.org - # image proxy of https://pixivfe.exozy.me - # - https://pximg.exozy.me - # image proxy of https://pixivfe.ducks.party - # - https://pixiv.ducks.party - # image proxy of https://pixiv.perennialte.ch - # - https://pximg.perennialte.ch - - - name: podcastindex - engine: podcastindex - shortcut: podcast - - # Required dependency: psychopg2 - # - name: postgresql - # engine: postgresql - # database: postgres - # username: postgres - # password: postgres - # limit: 10 - # query_str: 'SELECT * from my_table WHERE my_column = %(query)s' - # shortcut : psql - - - name: presearch - engine: presearch - search_type: search - categories: [general, web] - shortcut: ps - timeout: 4.0 - disabled: true - - - name: presearch images - engine: presearch - network: presearch - search_type: images - categories: [images, web] - timeout: 4.0 - shortcut: psimg - disabled: true - - - name: presearch videos - engine: presearch - network: presearch - search_type: videos - categories: [general, web] - timeout: 4.0 - shortcut: psvid - disabled: true - - - name: presearch news - engine: presearch - network: presearch - search_type: news - categories: [news, web] - timeout: 4.0 - shortcut: psnews - disabled: true - - - name: pub.dev - engine: xpath - shortcut: pd - search_url: https://pub.dev/packages?q={query}&page={pageno} - paging: true - results_xpath: //div[contains(@class,"packages-item")] - url_xpath: ./div/h3/a/@href - title_xpath: ./div/h3/a - content_xpath: ./div/div/div[contains(@class,"packages-description")]/span - categories: [packages, it] - timeout: 3.0 - disabled: true - first_page_num: 1 - about: - website: https://pub.dev/ - official_api_documentation: https://pub.dev/help/api - use_official_api: false - require_api_key: false - results: HTML - - - name: public domain image archive - engine: public_domain_image_archive - shortcut: pdia - disabled: true - - - name: pubmed - engine: pubmed - shortcut: pub - - - name: pypi - shortcut: pypi - engine: pypi - - - name: quark - quark_category: general - categories: [general] - engine: quark - shortcut: qk - disabled: true - - - name: quark images - quark_category: images - categories: [images] - engine: quark - shortcut: qki - disabled: true - - - name: qwant - qwant_categ: web - engine: qwant - shortcut: qw - categories: [general, web] - disabled: true - additional_tests: - rosebud: *test_rosebud - - - name: qwant news - qwant_categ: news - engine: qwant - shortcut: qwn - categories: news - network: qwant - - - name: qwant images - qwant_categ: images - engine: qwant - shortcut: qwi - categories: [images, web] - network: qwant - - - name: qwant videos - qwant_categ: videos - engine: qwant - shortcut: qwv - categories: [videos, web] - network: qwant - - # - name: library - # engine: recoll - # shortcut: lib - # base_url: 'https://recoll.example.org/' - # search_dir: '' - # mount_prefix: /export - # dl_prefix: 'https://download.example.org' - # timeout: 30.0 - # categories: files - # disabled: true - - # - name: recoll library reference - # engine: recoll - # base_url: 'https://recoll.example.org/' - # search_dir: reference - # mount_prefix: /export - # dl_prefix: 'https://download.example.org' - # shortcut: libr - # timeout: 30.0 - # categories: files - # disabled: true - - - name: radio browser - engine: radio_browser - shortcut: rb - - - name: reddit - engine: reddit - shortcut: re - page_size: 25 - disabled: true - - - name: reuters - engine: reuters - shortcut: reu - # https://docs.searxng.org/dev/engines/online/reuters.html - # sort_order = "relevance" - - - name: right dao - engine: xpath - paging: true - page_size: 12 - search_url: https://rightdao.com/search?q={query}&start={pageno} - results_xpath: //div[contains(@class, "description")] - url_xpath: ../div[contains(@class, "title")]/a/@href - title_xpath: ../div[contains(@class, "title")] - content_xpath: . - categories: general - shortcut: rd - disabled: true - about: - website: https://rightdao.com/ - use_official_api: false - require_api_key: false - results: HTML - - - name: rottentomatoes - engine: rottentomatoes - shortcut: rt - disabled: true - - # Required dependency: valkey - # - name: myvalkey - # shortcut : rds - # engine: valkey_server - # exact_match_only: false - # host: '127.0.0.1' - # port: 6379 - # enable_http: true - # password: '' - # db: 0 - - # tmp suspended: bad certificate - # - name: scanr structures - # shortcut: scs - # engine: scanr_structures - # disabled: true - - - name: searchmysite - engine: xpath - shortcut: sms - categories: general - paging: true - search_url: https://searchmysite.net/search/?q={query}&page={pageno} - results_xpath: //div[contains(@class,'search-result')] - url_xpath: .//a[contains(@class,'result-link')]/@href - title_xpath: .//span[contains(@class,'result-title-txt')]/text() - content_xpath: ./p[@id='result-hightlight'] - disabled: true - about: - website: https://searchmysite.net - - - name: selfhst icons - engine: selfhst - shortcut: si - disabled: true - - - name: sepiasearch - engine: sepiasearch - shortcut: sep - - - name: sogou - engine: sogou - shortcut: sogou - disabled: true - - - name: sogou images - engine: sogou_images - shortcut: sogoui - disabled: true - - - name: sogou videos - engine: sogou_videos - shortcut: sogouv - disabled: true - - - name: sogou wechat - engine: sogou_wechat - shortcut: sogouw - disabled: true - - - name: soundcloud - engine: soundcloud - shortcut: sc - - - name: stackoverflow - engine: stackexchange - shortcut: st - api_site: 'stackoverflow' - categories: [it, q&a] - - - name: askubuntu - engine: stackexchange - shortcut: ubuntu - api_site: 'askubuntu' - categories: [it, q&a] - - - name: superuser - engine: stackexchange - shortcut: su - api_site: 'superuser' - categories: [it, q&a] - - - name: discuss.python - engine: discourse - shortcut: dpy - base_url: 'https://discuss.python.org' - categories: [it, q&a] - disabled: true - - - name: caddy.community - engine: discourse - shortcut: caddy - base_url: 'https://caddy.community' - categories: [it, q&a] - disabled: true - - - name: pi-hole.community - engine: discourse - shortcut: pi - categories: [it, q&a] - base_url: 'https://discourse.pi-hole.net' - disabled: true - - - name: searchcode code - engine: searchcode_code - shortcut: scc - disabled: true - inactive: true - - # - name: searx - # engine: searx_engine - # shortcut: se - # instance_urls : - # - http://127.0.0.1:8888/ - # - ... - # disabled: true - - - name: semantic scholar - engine: semantic_scholar - shortcut: se - - # Spotify needs API credentials - # - name: spotify - # engine: spotify - # shortcut: stf - # api_client_id: ******* - # api_client_secret: ******* - - # - name: solr - # engine: solr - # shortcut: slr - # base_url: http://localhost:8983 - # collection: collection_name - # sort: '' # sorting: asc or desc - # field_list: '' # comma separated list of field names to display on the UI - # default_fields: '' # default field to query - # query_fields: '' # query fields - # enable_http: true - - - name: springer nature - engine: springer - shortcut: springer - timeout: 5 - # read https://docs.searxng.org/dev/engines/online/springer.html - api_key: "" - inactive: true - - - name: startpage - engine: startpage - shortcut: sp - startpage_categ: web - categories: [general, web] - additional_tests: - rosebud: *test_rosebud - - - name: startpage news - engine: startpage - startpage_categ: news - categories: [news, web] - shortcut: spn - - - name: startpage images - engine: startpage - startpage_categ: images - categories: [images, web] - shortcut: spi - - - name: steam - engine: steam - shortcut: stm - disabled: true - - - name: tokyotoshokan - engine: tokyotoshokan - shortcut: tt - timeout: 6.0 - disabled: true - - - name: solidtorrents - engine: solidtorrents - shortcut: solid - timeout: 4.0 - base_url: - - https://solidtorrents.to - - https://bitsearch.to - - # For this demo of the sqlite engine download: - # https://liste.mediathekview.de/filmliste-v2.db.bz2 - # and unpack into searx/data/filmliste-v2.db - # Query to test: "!mediathekview concert" - # - # - name: mediathekview - # engine: sqlite - # shortcut: mediathekview - # categories: [general, videos] - # result_type: MainResult - # database: searx/data/filmliste-v2.db - # query_str: >- - # SELECT title || ' (' || time(duration, 'unixepoch') || ')' AS title, - # COALESCE( NULLIF(url_video_hd,''), NULLIF(url_video_sd,''), url_video) AS url, - # description AS content - # FROM film - # WHERE title LIKE :wildcard OR description LIKE :wildcard - # ORDER BY duration DESC - - - name: tagesschau - engine: tagesschau - # when set to false, display URLs from Tagesschau, and not the actual source - # (e.g. NDR, WDR, SWR, HR, ...) - use_source_url: true - shortcut: ts - disabled: true - - - name: tmdb - engine: xpath - paging: true - categories: movies - search_url: https://www.themoviedb.org/search?page={pageno}&query={query} - results_xpath: //div[contains(@class,"movie") or contains(@class,"tv")]//div[contains(@class,"card")] - url_xpath: .//div[contains(@class,"poster")]/a/@href - thumbnail_xpath: .//img/@src - title_xpath: .//div[contains(@class,"title")]//h2 - content_xpath: .//div[contains(@class,"overview")] - shortcut: tm - disabled: true - - # Requires Tor - - name: torch - engine: xpath - paging: true - search_url: - http://xmh57jrknzkhv6y3ls3ubitzfqnkrwxhopf5aygthi7d6rplyvk3noyd.onion/cgi-bin/omega/omega?P={query}&DEFAULTOP=and - results_xpath: //table//tr - url_xpath: ./td[2]/a - title_xpath: ./td[2]/b - content_xpath: ./td[2]/small - categories: onions - enable_http: true - shortcut: tch - - # TubeArchivist is a self-hosted Youtube archivist software. - # https://docs.searxng.org/dev/engines/online/tubearchivist.html - # - # - name: tubearchivist - # engine: tubearchivist - # shortcut: tuba - # base_url: - # ta_token: - # ta_link_to_mp4: false - - # torznab engine lets you query any torznab compatible indexer. Using this - # engine in combination with Jackett opens the possibility to query a lot of - # public and private indexers directly from SearXNG. More details at: - # https://docs.searxng.org/dev/engines/online/torznab.html - # - # - name: Torznab EZTV - # engine: torznab - # shortcut: eztv - # base_url: http://localhost:9117/api/v2.0/indexers/eztv/results/torznab - # enable_http: true # if using localhost - # api_key: xxxxxxxxxxxxxxx - # show_magnet_links: true - # show_torrent_files: false - # # https://github.com/Jackett/Jackett/wiki/Jackett-Categories - # torznab_categories: # optional - # - 2000 - # - 5000 - - # tmp suspended - too slow, too many errors - # - name: urbandictionary - # engine : xpath - # search_url : https://www.urbandictionary.com/define.php?term={query} - # url_xpath : //*[@class="word"]/@href - # title_xpath : //*[@class="def-header"] - # content_xpath: //*[@class="meaning"] - # shortcut: ud - - - name: unsplash - engine: unsplash - shortcut: us - - - name: yandex - engine: yandex - categories: general - search_type: web - shortcut: yd - disabled: true - inactive: true - - - name: yandex images - engine: yandex - categories: images - search_type: images - shortcut: ydi - disabled: true - inactive: true - - - name: yandex music - engine: yandex_music - shortcut: ydm - disabled: true - # https://yandex.com/support/music/access.html - inactive: true - - - name: yahoo - engine: yahoo - shortcut: yh - disabled: true - - - name: yahoo news - engine: yahoo_news - shortcut: yhn - - - name: youtube - shortcut: yt - # You can use the engine using the official stable API, but you need an API - # key See: https://console.developers.google.com/project - # - # engine: youtube_api - # api_key: 'apikey' # required! - # - # Or you can use the html non-stable engine, activated by default - engine: youtube_noapi - - - name: dailymotion - engine: dailymotion - shortcut: dm - - - name: vimeo - engine: vimeo - shortcut: vm - - - name: wiby - engine: json_engine - paging: true - search_url: https://wiby.me/json/?q={query}&p={pageno} - url_query: URL - title_query: Title - content_query: Snippet - categories: [general, web] - shortcut: wib - disabled: true - about: - website: https://wiby.me/ - - - name: wikibooks - engine: mediawiki - weight: 0.5 - shortcut: wb - categories: [general, wikimedia] - base_url: "https://{language}.wikibooks.org/" - search_type: text - disabled: true - about: - website: https://www.wikibooks.org/ - wikidata_id: Q367 - - - name: wikinews - engine: mediawiki - shortcut: wn - categories: [news, wikimedia] - base_url: "https://{language}.wikinews.org/" - search_type: text - srsort: create_timestamp_desc - about: - website: https://www.wikinews.org/ - wikidata_id: Q964 - - - name: wikiquote - engine: mediawiki - weight: 0.5 - shortcut: wq - categories: [general, wikimedia] - base_url: "https://{language}.wikiquote.org/" - search_type: text - disabled: true - additional_tests: - rosebud: *test_rosebud - about: - website: https://www.wikiquote.org/ - wikidata_id: Q369 - - - name: wikisource - engine: mediawiki - weight: 0.5 - shortcut: ws - categories: [general, wikimedia] - base_url: "https://{language}.wikisource.org/" - search_type: text - disabled: true - about: - website: https://www.wikisource.org/ - wikidata_id: Q263 - - - name: wikispecies - engine: mediawiki - shortcut: wsp - categories: [general, science, wikimedia] - base_url: "https://species.wikimedia.org/" - search_type: text - disabled: true - about: - website: https://species.wikimedia.org/ - wikidata_id: Q13679 - tests: - wikispecies: - matrix: - query: "Campbell, L.I. et al. 2011: MicroRNAs" - lang: en - result_container: - - not_empty - - ['one_title_contains', 'Tardigrada'] - test: - - unique_results - - - name: wiktionary - engine: mediawiki - shortcut: wt - categories: [dictionaries, wikimedia] - base_url: "https://{language}.wiktionary.org/" - search_type: text - about: - website: https://www.wiktionary.org/ - wikidata_id: Q151 - - - name: wikiversity - engine: mediawiki - weight: 0.5 - shortcut: wv - categories: [general, wikimedia] - base_url: "https://{language}.wikiversity.org/" - search_type: text - disabled: true - about: - website: https://www.wikiversity.org/ - wikidata_id: Q370 - - - name: wikivoyage - engine: mediawiki - weight: 0.5 - shortcut: wy - categories: [general, wikimedia] - base_url: "https://{language}.wikivoyage.org/" - search_type: text - disabled: true - about: - website: https://www.wikivoyage.org/ - wikidata_id: Q373 - - - name: wikicommons.images - engine: wikicommons - shortcut: wci - categories: images - wc_search_type: image - - - name: wikicommons.videos - engine: wikicommons - shortcut: wcv - categories: videos - wc_search_type: video - - - name: wikicommons.audio - engine: wikicommons - shortcut: wca - categories: music - wc_search_type: audio - - - name: wikicommons.files - engine: wikicommons - shortcut: wcf - categories: files - wc_search_type: file - - - name: wolframalpha - shortcut: wa - # You can use the engine using the official stable API, but you need an API - # key. See: https://products.wolframalpha.com/api/ - # - # engine: wolframalpha_api - # api_key: '' - # - # Or you can use the html non-stable engine, activated by default - engine: wolframalpha_noapi - timeout: 6.0 - categories: general - disabled: true - - - name: dictzone - engine: dictzone - shortcut: dc - - - name: mymemory translated - engine: translated - shortcut: tl - timeout: 5.0 - # You can use without an API key, but you are limited to 1000 words/day - # See: https://mymemory.translated.net/doc/usagelimits.php - # api_key: '' - - # Required dependency: mysql-connector-python - # - name: mysql - # engine: mysql_server - # database: mydatabase - # username: user - # password: pass - # limit: 10 - # query_str: 'SELECT * from mytable WHERE fieldname=%(query)s' - # shortcut: mysql - - # Required dependency: mariadb - # - name: mariadb - # engine: mariadb_server - # database: mydatabase - # username: user - # password: pass - # limit: 10 - # query_str: 'SELECT * from mytable WHERE fieldname=%(query)s' - # shortcut: mdb - - - name: 1337x - engine: 1337x - shortcut: 1337x - disabled: true - - - name: duden - engine: duden - shortcut: du - disabled: true - - - name: seznam - shortcut: szn - engine: seznam - disabled: true - - # - name: deepl - # engine: deepl - # shortcut: dpl - # # You can use the engine using the official stable API, but you need an API key - # # See: https://www.deepl.com/pro-api?cta=header-pro-api - # api_key: '' # required! - # timeout: 5.0 - # disabled: true - - - name: mojeek - shortcut: mjk - engine: mojeek - categories: [general, web] - disabled: true - - - name: mojeek images - shortcut: mjkimg - engine: mojeek - categories: [images, web] - search_type: images - paging: false - disabled: true - - - name: mojeek news - shortcut: mjknews - engine: mojeek - categories: [news, web] - search_type: news - paging: false - disabled: true - - - name: moviepilot - engine: moviepilot - shortcut: mp - disabled: true - - - name: naver - categories: [general, web] - engine: naver - shortcut: nvr - disabled: true - - - name: naver images - naver_category: images - categories: [images] - engine: naver - shortcut: nvri - disabled: true - - - name: naver news - naver_category: news - categories: [news] - engine: naver - shortcut: nvrn - disabled: true - - - name: naver videos - naver_category: videos - categories: [videos] - engine: naver - shortcut: nvrv - disabled: true - - - name: rubygems - shortcut: rbg - engine: xpath - paging: true - search_url: https://rubygems.org/search?page={pageno}&query={query} - results_xpath: /html/body/main/div/a[@class="gems__gem"] - url_xpath: ./@href - title_xpath: ./span/h2 - content_xpath: ./span/p - suggestion_xpath: /html/body/main/div/div[@class="search__suggestions"]/p/a - first_page_num: 1 - categories: [it, packages] - disabled: true - about: - website: https://rubygems.org/ - wikidata_id: Q1853420 - official_api_documentation: https://guides.rubygems.org/rubygems-org-api/ - use_official_api: false - require_api_key: false - results: HTML - - - name: peertube - engine: peertube - shortcut: ptb - paging: true - # alternatives see: https://instances.joinpeertube.org/instances - # base_url: https://tube.4aem.com - categories: videos - disabled: true - timeout: 6.0 - - - name: mediathekviewweb - engine: mediathekviewweb - shortcut: mvw - disabled: true - - - name: yacy - # https://docs.searxng.org/dev/engines/online/yacy.html - engine: yacy - categories: general - search_type: text - # see https://github.com/searxng/searxng/pull/3631#issuecomment-2240903027 - base_url: - - https://yacy.searchlab.eu - shortcut: ya - disabled: true - # if you aren't using HTTPS for your local yacy instance disable https - # enable_http: false - search_mode: 'global' - # timeout can be reduced in 'local' search mode - timeout: 5.0 - - - name: yacy images - engine: yacy - network: yacy - categories: images - search_type: image - shortcut: yai - disabled: true - # timeout can be reduced in 'local' search mode - timeout: 5.0 - - - name: rumble - engine: rumble - shortcut: ru - base_url: https://rumble.com/ - paging: true - categories: videos - disabled: true - - - name: repology - engine: repology - shortcut: rep - disabled: true - inactive: true - - - name: livespace - engine: livespace - shortcut: ls - categories: videos - disabled: true - timeout: 5.0 - - - name: wordnik - engine: wordnik - shortcut: wnik - timeout: 5.0 - - - name: woxikon.de synonyme - engine: xpath - shortcut: woxi - categories: [dictionaries] - timeout: 5.0 - disabled: true - search_url: https://synonyme.woxikon.de/synonyme/{query}.php - url_xpath: //div[@class="upper-synonyms"]/a/@href - content_xpath: //div[@class="synonyms-list-group"] - title_xpath: //div[@class="upper-synonyms"]/a - no_result_for_http_status: [404] - about: - website: https://www.woxikon.de/ - wikidata_id: # No Wikidata ID - use_official_api: false - require_api_key: false - results: HTML - language: de - - - name: seekr news - engine: seekr - shortcut: senews - categories: news - seekr_category: news - disabled: true - - - name: seekr images - engine: seekr - network: seekr news - shortcut: seimg - categories: images - seekr_category: images - disabled: true - - - name: seekr videos - engine: seekr - network: seekr news - shortcut: sevid - categories: videos - seekr_category: videos - disabled: true - - - name: stract - engine: stract - shortcut: str - disabled: true - - - name: svgrepo - engine: svgrepo - shortcut: svg - timeout: 10.0 - disabled: true - - - name: tootfinder - engine: tootfinder - shortcut: toot - - - name: uxwing - engine: uxwing - shortcut: ux - disabled: true - - - name: voidlinux - engine: voidlinux - shortcut: void - disabled: true - - - name: wallhaven - engine: wallhaven - # api_key: abcdefghijklmnopqrstuvwxyz - shortcut: wh - disabled: true - - # wikimini: online encyclopedia for children - # The fulltext and title parameter is necessary for Wikimini because - # sometimes it will not show the results and redirect instead - - name: wikimini - engine: xpath - shortcut: wkmn - search_url: https://fr.wikimini.org/w/index.php?search={query}&title=Sp%C3%A9cial%3ASearch&fulltext=Search - url_xpath: //li/div[@class="mw-search-result-heading"]/a/@href - title_xpath: //li//div[@class="mw-search-result-heading"]/a - content_xpath: //li/div[@class="searchresult"] - categories: general - disabled: true - about: - website: https://wikimini.org/ - wikidata_id: Q3568032 - use_official_api: false - require_api_key: false - results: HTML - language: fr - - - name: wttr.in - engine: wttr - shortcut: wttr - timeout: 9.0 - - - name: brave - engine: brave - shortcut: br - time_range_support: true - paging: true - categories: [general, web] - brave_category: search - # brave_spellcheck: true - - - name: brave.images - engine: brave - network: brave - shortcut: brimg - categories: [images, web] - brave_category: images - - - name: brave.videos - engine: brave - network: brave - shortcut: brvid - categories: [videos, web] - brave_category: videos - - - name: brave.news - engine: brave - network: brave - shortcut: brnews - categories: news - brave_category: news - - # - name: brave.goggles - # engine: brave - # network: brave - # shortcut: brgog - # time_range_support: true - # paging: true - # categories: [general, web] - # brave_category: goggles - # Goggles: # required! This should be a URL ending in .goggle - - - name: lib.rs - shortcut: lrs - engine: lib_rs - disabled: true - - - name: sourcehut - shortcut: srht - engine: sourcehut - # https://docs.searxng.org/dev/engines/online/sourcehut.html - # sourcehut_sort_order: longest-active - disabled: true - - - name: bt4g - engine: bt4g - shortcut: bt4g - - - name: pkg.go.dev - engine: pkg_go_dev - shortcut: pgo - disabled: true - - - name: senscritique - engine: senscritique - shortcut: scr - timeout: 4.0 - disabled: true - - - name: minecraft wiki - engine: mediawiki - shortcut: mcw - categories: ["software wikis"] - base_url: https://minecraft.wiki/ - api_path: "api.php" - search_type: text - disabled: true - about: - website: https://minecraft.wiki/ - wikidata_id: Q105533483 - -# Doku engine lets you access to any Doku wiki instance: -# A public one or a privete/corporate one. -# - name: ubuntuwiki -# engine: doku -# shortcut: uw -# base_url: 'https://doc.ubuntu-fr.org' - -# Be careful when enabling this engine if you are -# running a public instance. Do not expose any sensitive -# information. You can restrict access by configuring a list -# of access tokens under tokens. -# - name: git grep -# engine: command -# command: ['git', 'grep', '{{QUERY}}'] -# shortcut: gg -# tokens: [] -# disabled: true -# delimiter: -# chars: ':' -# keys: ['filepath', 'code'] - -# Be careful when enabling this engine if you are -# running a public instance. Do not expose any sensitive -# information. You can restrict access by configuring a list -# of access tokens under tokens. -# - name: locate -# engine: command -# command: ['locate', '{{QUERY}}'] -# shortcut: loc -# tokens: [] -# disabled: true -# delimiter: -# chars: ' ' -# keys: ['line'] - -# Be careful when enabling this engine if you are -# running a public instance. Do not expose any sensitive -# information. You can restrict access by configuring a list -# of access tokens under tokens. -# - name: find -# engine: command -# command: ['find', '.', '-name', '{{QUERY}}'] -# query_type: path -# shortcut: fnd -# tokens: [] -# disabled: true -# delimiter: -# chars: ' ' -# keys: ['line'] - -# Be careful when enabling this engine if you are -# running a public instance. Do not expose any sensitive -# information. You can restrict access by configuring a list -# of access tokens under tokens. -# - name: pattern search in files -# engine: command -# command: ['fgrep', '{{QUERY}}'] -# shortcut: fgr -# tokens: [] -# disabled: true -# delimiter: -# chars: ' ' -# keys: ['line'] - -# Be careful when enabling this engine if you are -# running a public instance. Do not expose any sensitive -# information. You can restrict access by configuring a list -# of access tokens under tokens. -# - name: regex search in files -# engine: command -# command: ['grep', '{{QUERY}}'] -# shortcut: gr -# tokens: [] -# disabled: true -# delimiter: -# chars: ' ' -# keys: ['line'] - -doi_resolvers: - oadoi.org: 'https://oadoi.org/' - doi.org: 'https://doi.org/' - sci-hub.se: 'https://sci-hub.se/' - sci-hub.st: 'https://sci-hub.st/' - sci-hub.ru: 'https://sci-hub.ru/' - -default_doi_resolver: 'oadoi.org' diff --git a/configuration.nix b/configuration.nix index 683b1b3..949c872 100644 --- a/configuration.nix +++ b/configuration.nix @@ -48,8 +48,6 @@ networking.firewall.checkReversePath = "loose"; services.tailscale.enable = true; - services.mullvad-vpn.enable = true; - services.mullvad-vpn.package = pkgs.mullvad-vpn; # Set your time zone. time.timeZone = "America/Los_Angeles"; diff --git a/flake.lock b/flake.lock index 653860d..147a1c8 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1769978395, - "narHash": "sha256-gj1yP3spUb1vGtaF5qPhshd2j0cg4xf51pklDsIm19Q=", + "lastModified": 1770164260, + "narHash": "sha256-mQgOAYWlVJyuyXjZN6yxqXWyODvQI5P/UZUCU7IOuYo=", "owner": "nix-community", "repo": "home-manager", - "rev": "984708c34d3495a518e6ab6b8633469bbca2f77a", + "rev": "4fda26500b4539e0a1e3afba9f0e1616bdad4f85", "type": "github" }, "original": { @@ -58,11 +58,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1770115704, - "narHash": "sha256-KHFT9UWOF2yRPlAnSXQJh6uVcgNcWlFqqiAZ7OVlHNc=", + "lastModified": 1770181073, + "narHash": "sha256-ksTL7P9QC1WfZasNlaAdLOzqD8x5EPyods69YBqxSfk=", "owner": "nixos", "repo": "nixpkgs", - "rev": "e6eae2ee2110f3d31110d5c222cd395303343b08", + "rev": "bf922a59c5c9998a6584645f7d0de689512e444c", "type": "github" }, "original": { @@ -88,11 +88,11 @@ ] }, "locked": { - "lastModified": 1770097899, - "narHash": "sha256-FKRpvwWR96VDW4bdsxIrZgIAXvdXqsCTaV1HghCJBoQ=", + "lastModified": 1770230276, + "narHash": "sha256-Kx0G9tiq8w52sbHJhJ/NWtXA9DaiswVJ4mMSGzVi8bQ=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "615a27db86f3fddd0f096b5e9ea832795a4608d1", + "rev": "1e3fd9868ba83159c1a094f98184c47e4e4470fd", "type": "github" }, "original": { diff --git a/home.nix b/home.nix index 01dac00..ad14196 100644 --- a/home.nix +++ b/home.nix @@ -75,7 +75,6 @@ signal-desktop tree google-chrome - mullvad-vpn font-manager steam prismlauncher @@ -151,8 +150,6 @@ }; }; - programs.mullvad-vpn.enable = true; - programs.eza = { enable = true; icons = "always"; From a365c1d443e78ac30b20454e9cb99e3cd7468668 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Wed, 4 Feb 2026 17:59:32 -0800 Subject: [PATCH 051/211] feat: set zen browser as default browser --- home.nix | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/home.nix b/home.nix index ad14196..9696b0c 100644 --- a/home.nix +++ b/home.nix @@ -273,6 +273,18 @@ ]; }; + # Set Zen Browser as default + xdg.mimeApps = { + enable = true; + defaultApplications = { + "text/html" = "zen.desktop"; + "x-scheme-handler/http" = "zen.desktop"; + "x-scheme-handler/https" = "zen.desktop"; + "x-scheme-handler/about" = "zen.desktop"; + "x-scheme-handler/unknown" = "zen.desktop"; + }; + }; + # Enable rootless Podman with Home Manager services.podman = { enable = true; From f0a1bf8e76c0315aa4e4a14262122fbb71921a5e Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Fri, 6 Feb 2026 03:48:47 +0100 Subject: [PATCH 052/211] fix: add backup postfix --- flake.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/flake.nix b/flake.nix index 2033192..f9e21dd 100644 --- a/flake.nix +++ b/flake.nix @@ -29,6 +29,7 @@ { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; + home-manager.backupFileExtension = "backup"; home-manager.extraSpecialArgs = { inherit inputs; }; home-manager.users.jet = import ./home.nix; } From 24389cf5abea2d332b9ddcca93ae59568bde8e9c Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Thu, 12 Feb 2026 20:03:33 -0800 Subject: [PATCH 053/211] fix: remove unused gnome apps, switch to nemo --- configuration.nix | 24 ++++++++++++++++++++++++ flake.lock | 24 ++++++++++++------------ home.nix | 23 ++++++++++++++++++----- 3 files changed, 54 insertions(+), 17 deletions(-) diff --git a/configuration.nix b/configuration.nix index 949c872..4567b45 100644 --- a/configuration.nix +++ b/configuration.nix @@ -116,6 +116,30 @@ # Enable the GNOME Desktop Environment. services.displayManager.gdm.enable = true; services.desktopManager.gnome.enable = true; + + # Remove default GNOME apps (keeping loupe and file-roller) + environment.gnome.excludePackages = with pkgs; [ + epiphany # GNOME Web + gnome-calculator + gnome-calendar + gnome-characters + gnome-clocks + gnome-connections + gnome-console + gnome-contacts + gnome-maps + gnome-music + gnome-weather + snapshot # Camera + gnome-text-editor + simple-scan + totem # Videos (have VLC) + yelp # Help docs + evince # PDF viewer (using Zen Browser) + geary # Email + gnome-tour + gnome-font-viewer # Have font-manager + ]; # Configure keymap in X11 services.xserver.xkb = { diff --git a/flake.lock b/flake.lock index 147a1c8..dc3c767 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1770164260, - "narHash": "sha256-mQgOAYWlVJyuyXjZN6yxqXWyODvQI5P/UZUCU7IOuYo=", + "lastModified": 1771018093, + "narHash": "sha256-STUF5x1eQNKrhGn53WH1GpzBCsG719yl5rYnm7+1c4I=", "owner": "nix-community", "repo": "home-manager", - "rev": "4fda26500b4539e0a1e3afba9f0e1616bdad4f85", + "rev": "26dfad95d92c50a56ce708f4256bf720bb30a630", "type": "github" }, "original": { @@ -43,11 +43,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1769302137, - "narHash": "sha256-QEDtctEkOsbx8nlFh4yqPEOtr4tif6KTqWwJ37IM2ds=", + "lastModified": 1770882871, + "narHash": "sha256-nw5g+xl3veea+maxJ2/81tMEA/rPq9aF1H5XF35X+OE=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "a351494b0e35fd7c0b7a1aae82f0afddf4907aa8", + "rev": "af04cb78aa85b2a4d1c15fc7270347e0d0eda97b", "type": "github" }, "original": { @@ -58,11 +58,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1770181073, - "narHash": "sha256-ksTL7P9QC1WfZasNlaAdLOzqD8x5EPyods69YBqxSfk=", + "lastModified": 1770841267, + "narHash": "sha256-9xejG0KoqsoKEGp2kVbXRlEYtFFcDTHjidiuX8hGO44=", "owner": "nixos", "repo": "nixpkgs", - "rev": "bf922a59c5c9998a6584645f7d0de689512e444c", + "rev": "ec7c70d12ce2fc37cb92aff673dcdca89d187bae", "type": "github" }, "original": { @@ -88,11 +88,11 @@ ] }, "locked": { - "lastModified": 1770230276, - "narHash": "sha256-Kx0G9tiq8w52sbHJhJ/NWtXA9DaiswVJ4mMSGzVi8bQ=", + "lastModified": 1771000521, + "narHash": "sha256-5UDaXr770MaDac9HcFvGlUjsqyOoNbFdHArmjmtHcVk=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "1e3fd9868ba83159c1a094f98184c47e4e4470fd", + "rev": "80ce62fd26af1934454f405bcb2510ceeea8d3a2", "type": "github" }, "original": { diff --git a/home.nix b/home.nix index 9696b0c..69bf172 100644 --- a/home.nix +++ b/home.nix @@ -46,6 +46,19 @@ "emoji-copy@felipeftn" ]; }; + "org/nemo/preferences" = { + show-hidden-files = true; + default-folder-viewer = "list-view"; + show-location-entry = true; + show-full-path-titles = true; + date-format = "informal"; + }; + "org/nemo/window-state" = { + side-pane-view = "treeview"; + }; + "org/nemo/list-view" = { + default-zoom-level = "small"; + }; }; home.packages = with pkgs; [ @@ -87,6 +100,7 @@ logseq element-desktop zulip + nemo-with-extensions ]; @@ -187,7 +201,7 @@ jn = "jj new"; jdiff = "jj diff"; jsq = "jj squash"; - nhs = "nh os switch ."; + nhs = "nh os switch ~/Documents/nix-config"; nd = "nix develop"; h = "hx"; vanity = "mkp224o-amd64-64-24k -d noisebridgevanitytor noisebridge{2..7}"; @@ -266,10 +280,8 @@ xdg.autostart = { enable = true; entries = [ - "${pkgs.kitty}/share/applications/kitty.desktop" - "${config.programs.zen-browser.package}/share/applications/zen.desktop" - - "${pkgs.beeper}/share/applications/beepertexts.desktop" + pkgs.kitty + config.programs.zen-browser.package ]; }; @@ -282,6 +294,7 @@ "x-scheme-handler/https" = "zen.desktop"; "x-scheme-handler/about" = "zen.desktop"; "x-scheme-handler/unknown" = "zen.desktop"; + "inode/directory" = "nemo.desktop"; }; }; From 8614a0c19fa284b8f527d6b2c7122c4155f43f6f Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sun, 15 Feb 2026 20:18:29 -0800 Subject: [PATCH 054/211] feat: dark mode and show hidden in file picker --- home.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.nix b/home.nix index 69bf172..855eb25 100644 --- a/home.nix +++ b/home.nix @@ -11,6 +11,7 @@ "org/gnome/desktop/interface" = { clock-format = "12h"; clock-show-weekday = true; + color-scheme = "prefer-dark"; enable-animations = false; enable-hot-corners = false; }; @@ -32,6 +33,7 @@ }; "org/gtk/settings/file-chooser" = { clock-format = "12h"; + show-hidden = true; }; "org/gnome/desktop/peripherals/touchpad" = { disable-while-typing = true; From c1862c152e939ea5b30a540928cc5f95faa9b99d Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Mon, 16 Feb 2026 14:17:40 -0800 Subject: [PATCH 055/211] feat: update --- flake.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/flake.lock b/flake.lock index dc3c767..6b9cef4 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1771018093, - "narHash": "sha256-STUF5x1eQNKrhGn53WH1GpzBCsG719yl5rYnm7+1c4I=", + "lastModified": 1771188132, + "narHash": "sha256-qLXxN/tPrZtnekaLBQuVtxQfvqqs5cT5WbyH4zZaTGI=", "owner": "nix-community", "repo": "home-manager", - "rev": "26dfad95d92c50a56ce708f4256bf720bb30a630", + "rev": "ae8003d8b61d0d373e7ca3da1a48f9c870d15df9", "type": "github" }, "original": { @@ -28,11 +28,11 @@ ] }, "locked": { - "lastModified": 1769872935, - "narHash": "sha256-07HMIGQ/WJeAQJooA7Kkg1SDKxhAiV6eodvOwTX6WKI=", + "lastModified": 1771102945, + "narHash": "sha256-e5NfW8NhC3qChR8bHVni/asrig/ZFzd1wzpq+cEE/tg=", "owner": "nix-community", "repo": "home-manager", - "rev": "f4ad5068ee8e89e4a7c2e963e10dd35cd77b37b7", + "rev": "ff5e5d882c51f9a032479595cbab40fd04f56399", "type": "github" }, "original": { @@ -43,11 +43,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1770882871, - "narHash": "sha256-nw5g+xl3veea+maxJ2/81tMEA/rPq9aF1H5XF35X+OE=", + "lastModified": 1771171797, + "narHash": "sha256-ngIarpog/Hv5r9M1YyvsaaSUBCqtWqHl6pibq6n2ppo=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "af04cb78aa85b2a4d1c15fc7270347e0d0eda97b", + "rev": "531af1dbaee7cfdd7aed1e595ce418b7e2e99a80", "type": "github" }, "original": { @@ -58,11 +58,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1770841267, - "narHash": "sha256-9xejG0KoqsoKEGp2kVbXRlEYtFFcDTHjidiuX8hGO44=", + "lastModified": 1771008912, + "narHash": "sha256-gf2AmWVTs8lEq7z/3ZAsgnZDhWIckkb+ZnAo5RzSxJg=", "owner": "nixos", "repo": "nixpkgs", - "rev": "ec7c70d12ce2fc37cb92aff673dcdca89d187bae", + "rev": "a82ccc39b39b621151d6732718e3e250109076fa", "type": "github" }, "original": { @@ -88,11 +88,11 @@ ] }, "locked": { - "lastModified": 1771000521, - "narHash": "sha256-5UDaXr770MaDac9HcFvGlUjsqyOoNbFdHArmjmtHcVk=", + "lastModified": 1771222275, + "narHash": "sha256-df+Un2QnDj95MQxmsnopCtSy/meWO2RDHuMGAqq3nlc=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "80ce62fd26af1934454f405bcb2510ceeea8d3a2", + "rev": "a20f5d0c6454b5b24a497afb280427c9af33a0be", "type": "github" }, "original": { From ae6262904fe3f2ec26ed44ad04e3d46d63ec3505 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Mon, 16 Feb 2026 14:18:51 -0800 Subject: [PATCH 056/211] fix: make zen default browser in sessions vars --- flake.lock | 18 +++++++++--------- home.nix | 1 + 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/flake.lock b/flake.lock index 6b9cef4..d1c615b 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1771188132, - "narHash": "sha256-qLXxN/tPrZtnekaLBQuVtxQfvqqs5cT5WbyH4zZaTGI=", + "lastModified": 1771269455, + "narHash": "sha256-BZ31eN5F99YH6vkc4AhzKGE+tJgJ52kl8f01K7wCs8w=", "owner": "nix-community", "repo": "home-manager", - "rev": "ae8003d8b61d0d373e7ca3da1a48f9c870d15df9", + "rev": "5f1d42a97b19803041434f66681d5c44c9ae62e3", "type": "github" }, "original": { @@ -43,11 +43,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1771171797, - "narHash": "sha256-ngIarpog/Hv5r9M1YyvsaaSUBCqtWqHl6pibq6n2ppo=", + "lastModified": 1771257191, + "narHash": "sha256-H1l+zHq+ZinWH7F1IidpJ2farmbfHXjaxAm1RKWE1KI=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "531af1dbaee7cfdd7aed1e595ce418b7e2e99a80", + "rev": "66e1a090ded57a0f88e2b381a7d4daf4a5722c3f", "type": "github" }, "original": { @@ -88,11 +88,11 @@ ] }, "locked": { - "lastModified": 1771222275, - "narHash": "sha256-df+Un2QnDj95MQxmsnopCtSy/meWO2RDHuMGAqq3nlc=", + "lastModified": 1771269662, + "narHash": "sha256-hOElvRG8mOCmYc9vhZOqnccqIJRoD6VR6vXOOj0attk=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "a20f5d0c6454b5b24a497afb280427c9af33a0be", + "rev": "9294a1e30995dc950e2632296a74baae25252473", "type": "github" }, "original": { diff --git a/home.nix b/home.nix index 855eb25..f75498d 100644 --- a/home.nix +++ b/home.nix @@ -110,6 +110,7 @@ home.sessionVariables = { OCL_ICD_VENDORS = "/etc/OpenCL/vendors"; POCL_DEVICES = "cpu"; + BROWSER = "zen"; }; programs.helix = { From 4e09fe222ad9dd7a75b9eb881bc39fc169c54387 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Mon, 16 Feb 2026 15:50:57 -0800 Subject: [PATCH 057/211] feat: add tor-browser --- home.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/home.nix b/home.nix index f75498d..59e28e4 100644 --- a/home.nix +++ b/home.nix @@ -103,6 +103,7 @@ element-desktop zulip nemo-with-extensions + tor-browser ]; From b954569da7b62c0095dc80472ea7cc40c2e64b23 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Mon, 16 Feb 2026 17:35:58 -0800 Subject: [PATCH 058/211] feat: organize pkgs and remove abs dirs --- .gitignore | 1 + configuration.nix | 6 ++- flake.lock | 24 ++++++------ flake.nix | 1 + home.nix | 95 +++++++++++++++++++++++++++++------------------ 5 files changed, 76 insertions(+), 51 deletions(-) diff --git a/.gitignore b/.gitignore index 92b2793..2bbdbfe 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .direnv +result diff --git a/configuration.nix b/configuration.nix index 4567b45..a4e27b1 100644 --- a/configuration.nix +++ b/configuration.nix @@ -345,11 +345,13 @@ # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). system.stateVersion = "25.05"; # Did you read the comment? + # Set user profile picture for GNOME # Set user profile picture for GNOME system.activationScripts.script.text = '' mkdir -p /var/lib/AccountsService/{icons,users} - if [ -f /home/jet/Documents/nix-config/cat.png ]; then - cp /home/jet/Documents/nix-config/cat.png /var/lib/AccountsService/icons/jet + img="/home/jet/Documents/nix-config/cat.png" + if [ -f "$img" ]; then + cp "$img" /var/lib/AccountsService/icons/jet echo -e "[User]\nIcon=/var/lib/AccountsService/icons/jet\n" > /var/lib/AccountsService/users/jet chown root:root /var/lib/AccountsService/users/jet chmod 0600 /var/lib/AccountsService/users/jet diff --git a/flake.lock b/flake.lock index d1c615b..28acfe9 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1771269455, - "narHash": "sha256-BZ31eN5F99YH6vkc4AhzKGE+tJgJ52kl8f01K7wCs8w=", + "lastModified": 1771531206, + "narHash": "sha256-1R3Wx6KUkMb4x4E5UOhW9p6rqiexzSGGWxZqSHqW5n0=", "owner": "nix-community", "repo": "home-manager", - "rev": "5f1d42a97b19803041434f66681d5c44c9ae62e3", + "rev": "91be7cce763fa4022c7cf025a71b0c366d1b6e77", "type": "github" }, "original": { @@ -43,11 +43,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1771257191, - "narHash": "sha256-H1l+zHq+ZinWH7F1IidpJ2farmbfHXjaxAm1RKWE1KI=", + "lastModified": 1771423359, + "narHash": "sha256-yRKJ7gpVmXbX2ZcA8nFi6CMPkJXZGjie2unsiMzj3Ig=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "66e1a090ded57a0f88e2b381a7d4daf4a5722c3f", + "rev": "740a22363033e9f1bb6270fbfb5a9574067af15b", "type": "github" }, "original": { @@ -58,11 +58,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1771008912, - "narHash": "sha256-gf2AmWVTs8lEq7z/3ZAsgnZDhWIckkb+ZnAo5RzSxJg=", + "lastModified": 1771369470, + "narHash": "sha256-0NBlEBKkN3lufyvFegY4TYv5mCNHbi5OmBDrzihbBMQ=", "owner": "nixos", "repo": "nixpkgs", - "rev": "a82ccc39b39b621151d6732718e3e250109076fa", + "rev": "0182a361324364ae3f436a63005877674cf45efb", "type": "github" }, "original": { @@ -88,11 +88,11 @@ ] }, "locked": { - "lastModified": 1771269662, - "narHash": "sha256-hOElvRG8mOCmYc9vhZOqnccqIJRoD6VR6vXOOj0attk=", + "lastModified": 1771562861, + "narHash": "sha256-6oT3rF68W8HERLXvFfEkpz8xpAVLKZsY1ZuR/BbDTO8=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "9294a1e30995dc950e2632296a74baae25252473", + "rev": "7783a3adf3d5a9599a82c75a44c7482e70398ac2", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index f9e21dd..8c47f0e 100644 --- a/flake.nix +++ b/flake.nix @@ -19,6 +19,7 @@ nixos-hardware, ... }: { + formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt; nixosConfigurations = { framework = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; diff --git a/home.nix b/home.nix index 59e28e4..4ef65bd 100644 --- a/home.nix +++ b/home.nix @@ -4,10 +4,20 @@ imports = [ inputs.zen-browser.homeModules.default ]; home.username = "jet"; + home.homeDirectory = "/home/jet"; home.stateVersion = "23.05"; + # Define configuration directory + # Note: we can't use config.home.homeDirectory in the let block if we're also defining it in the set + # recursively without strict evaluation issues sometimes, but here it should be fine if we just use the string. + # Safer to just use /home/jet or home.homeDirectory if it was passed in. + # Actually, `config.home.homeDirectory` is safe to use inside simple attribute sets. + # Let's use a let binding for clarity. + # Configure GNOME settings - dconf.settings = { + dconf.settings = let + nixConfigDirectory = "${config.home.homeDirectory}/Documents/nix-config"; + in { "org/gnome/desktop/interface" = { clock-format = "12h"; clock-show-weekday = true; @@ -19,10 +29,8 @@ enabled = true; }; "org/gnome/desktop/background" = { - picture-uri = - "file:///home/jet/Documents/nix-config/cat.png"; - picture-uri-dark = - "file:///home/jet/Documents/nix-config/cat.png"; + picture-uri = "file://${nixConfigDirectory}/cat.png"; + picture-uri-dark = "file://${nixConfigDirectory}/cat.png"; picture-options = "wallpaper"; }; "org/gnome/settings-daemon/plugins/power" = { @@ -64,46 +72,58 @@ }; home.packages = with pkgs; [ - git - wget - helix - kitty - zellij - jujutsu - vlc - docker - nerd-fonts.commit-mono - qbittorrent-enhanced - gimp3 - inkscape + # CLI Tools bat - zoxide eza ripgrep + tree + wget unzip + zoxide direnv + nh + google-chrome + # Development + git + gh + jujutsu + helix + mkp224o + claude-code + nixfmt + + # Terminal + kitty + zellij + nerd-fonts.commit-mono + fastfetch + + # Desktop / GUI + vlc + gimp3 + inkscape + qbittorrent-enhanced + signal-desktop + beeper + element-desktop + zulip + logseq + steam + prismlauncher + nemo-with-extensions + font-manager + antigravity-fhs + appimage-run + + # GNOME Extensions gnomeExtensions.hide-top-bar gnomeExtensions.wifi-qrcode gnomeExtensions.system-monitor-next gnomeExtensions.clipboard-indicator gnomeExtensions.emoji-copy - signal-desktop - tree - google-chrome - font-manager - steam - prismlauncher - appimage-run - gh - beeper - antigravity-fhs - mkp224o - claude-code - logseq - element-desktop - zulip - nemo-with-extensions - tor-browser + + # Virtualization/Containerization + docker ]; @@ -112,6 +132,8 @@ OCL_ICD_VENDORS = "/etc/OpenCL/vendors"; POCL_DEVICES = "cpu"; BROWSER = "zen"; + # Set FLAKE for nh + NH_FLAKE = "${config.home.homeDirectory}/Documents/nix-config"; }; programs.helix = { @@ -205,14 +227,13 @@ jn = "jj new"; jdiff = "jj diff"; jsq = "jj squash"; - nhs = "nh os switch ~/Documents/nix-config"; + nhs = "nh os switch"; nd = "nix develop"; h = "hx"; vanity = "mkp224o-amd64-64-24k -d noisebridgevanitytor noisebridge{2..7}"; }; }; - programs.kitty = { enable = true; settings = { From 9ef458d62a0b7ebf53487e87ae594e5d67339447 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Fri, 20 Feb 2026 01:08:41 -0800 Subject: [PATCH 059/211] fix: add antigravity overlay --- flake.nix | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/flake.nix b/flake.nix index 8c47f0e..0089da0 100644 --- a/flake.nix +++ b/flake.nix @@ -37,7 +37,17 @@ { nixpkgs.overlays = [ (final: prev: { + + antigravity = prev.antigravity.overrideAttrs (oldAttrs: rec { + version = "1.18.3"; + src = prev.fetchurl { + url = "https://edgedl.me.gvt1.com/edgedl/release2/j0qc3/antigravity/stable/1.18.3-4739469533380608/linux-x64/Antigravity.tar.gz"; + hash = "sha256:0f4n3i45gjr36hidpvibzn3p2jla2r7wg91ybmf2akafjn6f8zsc"; + }; + }); + antigravity-fhs = final.antigravity.fhs; + }) ]; } From c96db92ecd3f6651595a71557274c24ad588c7b7 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Fri, 20 Feb 2026 01:08:41 -0800 Subject: [PATCH 060/211] feat: add store optimization and aggresive gc --- configuration.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/configuration.nix b/configuration.nix index a4e27b1..1338b26 100644 --- a/configuration.nix +++ b/configuration.nix @@ -189,9 +189,10 @@ # Enable automatic garbage collection to prevent old generations from slowing boot nix.gc = { automatic = true; - dates = "weekly"; - options = "--delete-older-than 30d"; + dates = "daily"; + options = "--delete-older-than 7d"; }; + nix.settings.auto-optimise-store = true; # Optimize Nix for RAM - use more memory for builds nix.settings = { From 5abb509c7006b636d19f63f021d40123d79e122c Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sun, 22 Feb 2026 16:37:53 -0800 Subject: [PATCH 061/211] feat: add thunderbird --- home.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.nix b/home.nix index 4ef65bd..f7ca633 100644 --- a/home.nix +++ b/home.nix @@ -99,6 +99,7 @@ fastfetch # Desktop / GUI + thunderbird vlc gimp3 inkscape @@ -282,6 +283,7 @@ # Configure Zen Browser with about:config settings programs.zen-browser = { enable = true; + suppressXdgMigrationWarning = true; policies = { Preferences = { "zen.theme.border-radius" = 0; From 621665f44618b3bd0d15ecb38f28230be01cb59b Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sun, 22 Feb 2026 16:38:48 -0800 Subject: [PATCH 062/211] feat: add jss alias for jj show -s --- home.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/home.nix b/home.nix index f7ca633..92a28e1 100644 --- a/home.nix +++ b/home.nix @@ -223,6 +223,7 @@ jbs = "jj bookmark set"; jd = "jj describe"; js = "jj show"; + jss = "jj show -s"; je = "jj edit --ignore-immutable"; jall = "jj log -r 'all()'"; jn = "jj new"; From 3ad19c87969601f41a62ffad001cd583e04ab424 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Thu, 26 Feb 2026 16:22:57 -0800 Subject: [PATCH 063/211] update: flake.lock --- flake.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/flake.lock b/flake.lock index 28acfe9..7207390 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1771531206, - "narHash": "sha256-1R3Wx6KUkMb4x4E5UOhW9p6rqiexzSGGWxZqSHqW5n0=", + "lastModified": 1772060133, + "narHash": "sha256-VuyRptb8v1lVGMlLp4/1vRX3Efwec0CN0S6mKmDPzLg=", "owner": "nix-community", "repo": "home-manager", - "rev": "91be7cce763fa4022c7cf025a71b0c366d1b6e77", + "rev": "ce9b6e52500a0ea0ec48f0bbf6d7a3e431d9dfa4", "type": "github" }, "original": { @@ -28,11 +28,11 @@ ] }, "locked": { - "lastModified": 1771102945, - "narHash": "sha256-e5NfW8NhC3qChR8bHVni/asrig/ZFzd1wzpq+cEE/tg=", + "lastModified": 1771756436, + "narHash": "sha256-Tl2I0YXdhSTufGqAaD1ySh8x+cvVsEI1mJyJg12lxhI=", "owner": "nix-community", "repo": "home-manager", - "rev": "ff5e5d882c51f9a032479595cbab40fd04f56399", + "rev": "5bd3589390b431a63072868a90c0f24771ff4cbb", "type": "github" }, "original": { @@ -43,11 +43,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1771423359, - "narHash": "sha256-yRKJ7gpVmXbX2ZcA8nFi6CMPkJXZGjie2unsiMzj3Ig=", + "lastModified": 1771969195, + "narHash": "sha256-qwcDBtrRvJbrrnv1lf/pREQi8t2hWZxVAyeMo7/E9sw=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "740a22363033e9f1bb6270fbfb5a9574067af15b", + "rev": "41c6b421bdc301b2624486e11905c9af7b8ec68e", "type": "github" }, "original": { @@ -58,11 +58,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1771369470, - "narHash": "sha256-0NBlEBKkN3lufyvFegY4TYv5mCNHbi5OmBDrzihbBMQ=", + "lastModified": 1771848320, + "narHash": "sha256-0MAd+0mun3K/Ns8JATeHT1sX28faLII5hVLq0L3BdZU=", "owner": "nixos", "repo": "nixpkgs", - "rev": "0182a361324364ae3f436a63005877674cf45efb", + "rev": "2fc6539b481e1d2569f25f8799236694180c0993", "type": "github" }, "original": { @@ -88,11 +88,11 @@ ] }, "locked": { - "lastModified": 1771562861, - "narHash": "sha256-6oT3rF68W8HERLXvFfEkpz8xpAVLKZsY1ZuR/BbDTO8=", + "lastModified": 1772085492, + "narHash": "sha256-1o9qkvOI/ThFDgEbW4Q4GVK7aV+traAIWSqP7gom7/0=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "7783a3adf3d5a9599a82c75a44c7482e70398ac2", + "rev": "6577a70551b52ef35138e5d8b87a35d40b14eeeb", "type": "github" }, "original": { From 44a1a1f792f15449bb0bde588af8d3aa22bb9e4d Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Thu, 26 Feb 2026 16:28:59 -0800 Subject: [PATCH 064/211] feat: remove claude code --- home.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/home.nix b/home.nix index 92a28e1..b1f33b2 100644 --- a/home.nix +++ b/home.nix @@ -82,14 +82,12 @@ zoxide direnv nh - google-chrome # Development git gh jujutsu helix mkp224o - claude-code nixfmt # Terminal From b4cbac22b47a24c0b7875c617bcda663479779d1 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Thu, 26 Feb 2026 16:30:30 -0800 Subject: [PATCH 065/211] feat: add comma for running pakcages --- configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/configuration.nix b/configuration.nix index 1338b26..b14c5bd 100644 --- a/configuration.nix +++ b/configuration.nix @@ -284,6 +284,7 @@ docker docker-compose nh + comma ]; environment.variables.EDITOR = "helix"; From f6d9a52ce7fb4e7cdbee07ee6d91aa9c3c0101c6 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Thu, 26 Feb 2026 16:30:30 -0800 Subject: [PATCH 066/211] fix: remove adding nh in home dir --- home.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/home.nix b/home.nix index b1f33b2..716355e 100644 --- a/home.nix +++ b/home.nix @@ -81,7 +81,6 @@ unzip zoxide direnv - nh # Development git gh From 3becde9260f2da79782be4a5dba0e8eafcd1b492 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Thu, 26 Feb 2026 16:30:30 -0800 Subject: [PATCH 067/211] feat: Add `jab` and `jsp` aliases for jj --- home.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.nix b/home.nix index 716355e..34d3207 100644 --- a/home.nix +++ b/home.nix @@ -221,6 +221,8 @@ jd = "jj describe"; js = "jj show"; jss = "jj show -s"; + jab = "jj abandon"; + jsp = "jj split"; je = "jj edit --ignore-immutable"; jall = "jj log -r 'all()'"; jn = "jj new"; From 49ee6c3ac493687a37649fa5192970fa4595db76 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Thu, 26 Feb 2026 19:12:49 -0800 Subject: [PATCH 068/211] feat: configure comma with nix index --- configuration.nix | 3 ++- flake.lock | 33 +++++++++++++++++++++++++++------ flake.nix | 5 +++++ 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/configuration.nix b/configuration.nix index b14c5bd..b16957b 100644 --- a/configuration.nix +++ b/configuration.nix @@ -284,9 +284,10 @@ docker docker-compose nh - comma ]; + programs.nix-index-database.comma.enable = true; + environment.variables.EDITOR = "helix"; environment.sessionVariables = { TERMINAL = "kitty"; diff --git a/flake.lock b/flake.lock index 7207390..e086d27 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1772060133, - "narHash": "sha256-VuyRptb8v1lVGMlLp4/1vRX3Efwec0CN0S6mKmDPzLg=", + "lastModified": 1772161633, + "narHash": "sha256-1LxK/Ff6sPf6fWZeV9VjHeA+hRLQssO3CjuHBvGDhW8=", "owner": "nix-community", "repo": "home-manager", - "rev": "ce9b6e52500a0ea0ec48f0bbf6d7a3e431d9dfa4", + "rev": "31ea32fa1465568e95ea1288ea1dd02689c77c5e", "type": "github" }, "original": { @@ -41,6 +41,26 @@ "type": "github" } }, + "nix-index-database": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1771734689, + "narHash": "sha256-/phvMgr1yutyAMjKnZlxkVplzxHiz60i4rc+gKzpwhg=", + "owner": "nix-community", + "repo": "nix-index-database", + "rev": "8f590b832326ab9699444f3a48240595954a4b10", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-index-database", + "type": "github" + } + }, "nixos-hardware": { "locked": { "lastModified": 1771969195, @@ -75,6 +95,7 @@ "root": { "inputs": { "home-manager": "home-manager", + "nix-index-database": "nix-index-database", "nixos-hardware": "nixos-hardware", "nixpkgs": "nixpkgs", "zen-browser": "zen-browser" @@ -88,11 +109,11 @@ ] }, "locked": { - "lastModified": 1772085492, - "narHash": "sha256-1o9qkvOI/ThFDgEbW4Q4GVK7aV+traAIWSqP7gom7/0=", + "lastModified": 1772158021, + "narHash": "sha256-UX/mZlmDYccOVGDIEFVvXkHRSjjSkOnYO/F4O6XDrKg=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "6577a70551b52ef35138e5d8b87a35d40b14eeeb", + "rev": "0af6863a54e1468ce1ef34bf0bbd073aed5a8b2e", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 0089da0..d17119d 100644 --- a/flake.nix +++ b/flake.nix @@ -10,6 +10,10 @@ url = "github:0xc000022070/zen-browser-flake"; inputs.nixpkgs.follows = "nixpkgs"; }; + nix-index-database = { + url = "github:nix-community/nix-index-database"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = inputs@{ @@ -27,6 +31,7 @@ ./configuration.nix nixos-hardware.nixosModules.framework-amd-ai-300-series home-manager.nixosModules.home-manager + inputs.nix-index-database.nixosModules.default { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; From e9cee62aeaeb39380ab1582d7f8a34869770855d Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Fri, 27 Feb 2026 16:07:18 -0800 Subject: [PATCH 069/211] feat: add tea for forgejo development in cli --- home.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/home.nix b/home.nix index 34d3207..b0b76e3 100644 --- a/home.nix +++ b/home.nix @@ -84,6 +84,7 @@ # Development git gh + tea jujutsu helix mkp224o From da687af88c1e6ff583af21ed51c8179e766d3c67 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Fri, 27 Feb 2026 16:07:56 -0800 Subject: [PATCH 070/211] update: update nix flake --- flake.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/flake.lock b/flake.lock index e086d27..9654b69 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1772161633, - "narHash": "sha256-1LxK/Ff6sPf6fWZeV9VjHeA+hRLQssO3CjuHBvGDhW8=", + "lastModified": 1772218752, + "narHash": "sha256-G8nArvOTZXU8DRvrzAdz3Elcj6kA/vMtvY9mrGLATtA=", "owner": "nix-community", "repo": "home-manager", - "rev": "31ea32fa1465568e95ea1288ea1dd02689c77c5e", + "rev": "f3a30376bb9eb2f6f61816be7d6ed954b6d2a3b9", "type": "github" }, "original": { @@ -109,11 +109,11 @@ ] }, "locked": { - "lastModified": 1772158021, - "narHash": "sha256-UX/mZlmDYccOVGDIEFVvXkHRSjjSkOnYO/F4O6XDrKg=", + "lastModified": 1772234766, + "narHash": "sha256-DQUeBIc9MfUbCbf7No6TFQifLIRu8MgsJmjN4m9dAVM=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "0af6863a54e1468ce1ef34bf0bbd073aed5a8b2e", + "rev": "b6d2b852d2a5a9abfffcda848574ff514c2db1ec", "type": "github" }, "original": { From 2202cd39cd089875e38084670e35dc6e668cde31 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sat, 28 Feb 2026 13:14:36 -0800 Subject: [PATCH 071/211] feat: add searxng from extremist.software to zen --- home.nix | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/home.nix b/home.nix index b0b76e3..2982c9d 100644 --- a/home.nix +++ b/home.nix @@ -291,6 +291,20 @@ "zen.theme.content-element-separation" = 0; }; }; + profiles.default = { + isDefault = true; + search = { + default = "SearXNG"; + privateDefault = "SearXNG"; + force = true; + engines = { + "SearXNG" = { + urls = [{ template = "https://search.extremist.software/search?q={searchTerms}"; }]; + definedAliases = [ "@s" ]; + }; + }; + }; + }; }; # Override the Kitty desktop entry to always launch in fullscreen From b07f9ab600aebf656c8681fdaa5453768d86865c Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sat, 28 Feb 2026 13:29:17 -0800 Subject: [PATCH 072/211] feat: configure zen browsers extensions and policies --- flake.lock | 43 +++++++++++++++++++++++++++++++++++++++++++ flake.nix | 5 +++++ home.nix | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 91 insertions(+) diff --git a/flake.lock b/flake.lock index 9654b69..810383b 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,26 @@ { "nodes": { + "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "nur", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733312601, + "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -92,12 +113,34 @@ "type": "github" } }, + "nur": { + "inputs": { + "flake-parts": "flake-parts", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1772311898, + "narHash": "sha256-tcytPbQci6Bvo4DXXGLtGghdFXyC+TVKG70IDlJnr9s=", + "owner": "nix-community", + "repo": "NUR", + "rev": "a91b651e8469c0ea0b52b3851c276b0b1f85b7de", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "NUR", + "type": "github" + } + }, "root": { "inputs": { "home-manager": "home-manager", "nix-index-database": "nix-index-database", "nixos-hardware": "nixos-hardware", "nixpkgs": "nixpkgs", + "nur": "nur", "zen-browser": "zen-browser" } }, diff --git a/flake.nix b/flake.nix index d17119d..9da10f5 100644 --- a/flake.nix +++ b/flake.nix @@ -14,6 +14,10 @@ url = "github:nix-community/nix-index-database"; inputs.nixpkgs.follows = "nixpkgs"; }; + nur = { + url = "github:nix-community/NUR"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = inputs@{ @@ -41,6 +45,7 @@ } { nixpkgs.overlays = [ + inputs.nur.overlays.default (final: prev: { antigravity = prev.antigravity.overrideAttrs (oldAttrs: rec { diff --git a/home.nix b/home.nix index 2982c9d..e220eb8 100644 --- a/home.nix +++ b/home.nix @@ -286,6 +286,29 @@ enable = true; suppressXdgMigrationWarning = true; policies = { + DisableTelemetry = true; + DisableFirefoxStudies = true; + DisablePocket = true; + DontCheckDefaultBrowser = true; + DisableAppUpdate = true; + DisableMasterPasswordCreation = true; + DisablePasswordReveal = true; + DisableProfileImport = true; + ExtensionUpdate = false; + OfferToSaveLogins = false; + DisableFirefoxAccounts = true; + DisableFormHistory = true; + DisableSafeMode = true; + DisableSetDesktopBackground = true; + EnableTrackingProtection = { + Value = true; + Locked = true; + Cryptomining = true; + Fingerprinting = true; + }; + HardwareAcceleration = true; + NoDefaultBookmarks = true; + PasswordManagerEnabled = false; Preferences = { "zen.theme.border-radius" = 0; "zen.theme.content-element-separation" = 0; @@ -293,6 +316,26 @@ }; profiles.default = { isDefault = true; + settings = { + "identity.fxaccounts.enabled" = false; + }; + extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [ + ublock-origin + onepassword-password-manager + sponsorblock + darkreader + vimium + return-youtube-dislikes + react-devtools + firefox-color + pay-by-privacy + translate-web-pages + user-agent-string-switcher + copy-selected-tabs-to-clipboard + dearrow + violentmonkey + tst-indent-line + ]; search = { default = "SearXNG"; privateDefault = "SearXNG"; From cbaa366f3d560f03f62ff3b9c2076d9eb1801bf6 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sat, 28 Feb 2026 13:48:30 -0800 Subject: [PATCH 073/211] feat: add butt for beyla.noise interfacing --- home.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/home.nix b/home.nix index e220eb8..0d08f60 100644 --- a/home.nix +++ b/home.nix @@ -113,6 +113,7 @@ font-manager antigravity-fhs appimage-run + butt # GNOME Extensions gnomeExtensions.hide-top-bar From 4bba217fd05d360c95425385bd9f74014f048a59 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sat, 28 Feb 2026 13:55:18 -0800 Subject: [PATCH 074/211] fix: remove listed packages that are already enabled --- configuration.nix | 3 +-- home.nix | 15 +-------------- 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/configuration.nix b/configuration.nix index b16957b..a9cf3a0 100644 --- a/configuration.nix +++ b/configuration.nix @@ -278,14 +278,13 @@ # $ nix search wget environment.systemPackages = with pkgs; [ git - helix # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. wget vim - docker docker-compose nh ]; + programs.steam.enable = true; programs.nix-index-database.comma.enable = true; environment.variables.EDITOR = "helix"; diff --git a/home.nix b/home.nix index 0d08f60..3dd372f 100644 --- a/home.nix +++ b/home.nix @@ -74,25 +74,17 @@ home.packages = with pkgs; [ # CLI Tools bat - eza ripgrep tree - wget unzip - zoxide - direnv + # Development - git gh tea - jujutsu - helix mkp224o nixfmt # Terminal - kitty - zellij nerd-fonts.commit-mono fastfetch @@ -107,12 +99,10 @@ element-desktop zulip logseq - steam prismlauncher nemo-with-extensions font-manager antigravity-fhs - appimage-run butt # GNOME Extensions @@ -121,9 +111,6 @@ gnomeExtensions.system-monitor-next gnomeExtensions.clipboard-indicator gnomeExtensions.emoji-copy - - # Virtualization/Containerization - docker ]; From 62461fe8d7aa0bb2c3c1dab609bf61de14fd3d97 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sat, 28 Feb 2026 13:55:39 -0800 Subject: [PATCH 075/211] update: flake update --- flake.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/flake.lock b/flake.lock index 810383b..701f0ae 100644 --- a/flake.lock +++ b/flake.lock @@ -121,11 +121,11 @@ ] }, "locked": { - "lastModified": 1772311898, - "narHash": "sha256-tcytPbQci6Bvo4DXXGLtGghdFXyC+TVKG70IDlJnr9s=", + "lastModified": 1772315374, + "narHash": "sha256-OQUKXqb5orWghLM0Ttq9Yb0BTvPHqcbHCacm3Mg7nSs=", "owner": "nix-community", "repo": "NUR", - "rev": "a91b651e8469c0ea0b52b3851c276b0b1f85b7de", + "rev": "7b95523b69ea5c3ff1379908bc0203a01e1f8430", "type": "github" }, "original": { @@ -152,11 +152,11 @@ ] }, "locked": { - "lastModified": 1772234766, - "narHash": "sha256-DQUeBIc9MfUbCbf7No6TFQifLIRu8MgsJmjN4m9dAVM=", + "lastModified": 1772306482, + "narHash": "sha256-092P58kRKiLBn0eg4eI67frffMkKiDhOa1ZOREmMeB4=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "b6d2b852d2a5a9abfffcda848574ff514c2db1ec", + "rev": "2e593ac6926cbf44adc8c9ef785da024812d2467", "type": "github" }, "original": { From 58f40838e03be0f43cceadc79cad5c6438331d55 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sat, 28 Feb 2026 14:02:46 -0800 Subject: [PATCH 076/211] feat: remove butt because I'm not ready yet --- home.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/home.nix b/home.nix index 3dd372f..133997a 100644 --- a/home.nix +++ b/home.nix @@ -103,7 +103,6 @@ nemo-with-extensions font-manager antigravity-fhs - butt # GNOME Extensions gnomeExtensions.hide-top-bar From 632089c4c5762525f2b03d2cd9a97837f7300d17 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sat, 28 Feb 2026 14:02:46 -0800 Subject: [PATCH 077/211] feat: configure z to l --- home.nix | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/home.nix b/home.nix index 133997a..acbb528 100644 --- a/home.nix +++ b/home.nix @@ -181,6 +181,10 @@ icons = "always"; enableBashIntegration = true; git = true; + extraOptions = [ + "--group-directories-first" + "--all" + ]; }; programs.zoxide = { @@ -197,10 +201,7 @@ programs.bash = { enable = true; shellAliases = { - ll = "eza -l"; - la = "eza -la"; - ".." = "cd .."; - c = "cd && ls"; + ".." = "z .."; j = "jj"; jgf = "jj git fetch"; jgp = "jj git push"; @@ -217,10 +218,20 @@ jdiff = "jj diff"; jsq = "jj squash"; nhs = "nh os switch"; - nd = "nix develop"; h = "hx"; vanity = "mkp224o-amd64-64-24k -d noisebridgevanitytor noisebridge{2..7}"; }; + initExtra = '' + # Automatically list directory contents when changing directories + auto_l_on_cd() { + if [ "$__LAST_PWD" != "$PWD" ]; then + l + __LAST_PWD="$PWD" + fi + } + export PROMPT_COMMAND="auto_l_on_cd; $PROMPT_COMMAND" + __LAST_PWD="$PWD" + ''; }; programs.kitty = { From 114199ec064302210040dbe519510081d0d848a4 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sat, 28 Feb 2026 14:27:13 -0800 Subject: [PATCH 078/211] feat: add . as an alias for .. --- home.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/home.nix b/home.nix index acbb528..f67f5f4 100644 --- a/home.nix +++ b/home.nix @@ -201,6 +201,7 @@ programs.bash = { enable = true; shellAliases = { + "." = "z .."; ".." = "z .."; j = "jj"; jgf = "jj git fetch"; From 66ffe8350c909d813eadc3e8bff00e867b968e7c Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sat, 28 Feb 2026 15:30:32 -0800 Subject: [PATCH 079/211] feat: add davinci resolve --- home.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/home.nix b/home.nix index f67f5f4..24131b0 100644 --- a/home.nix +++ b/home.nix @@ -103,6 +103,7 @@ nemo-with-extensions font-manager antigravity-fhs + davinci-resolve # GNOME Extensions gnomeExtensions.hide-top-bar From 50c1504d47619da61b3fd41f3fbe14eddfb040a9 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sat, 28 Feb 2026 16:30:45 -0800 Subject: [PATCH 080/211] feat: make nhs a direnv script --- .envrc | 1 + flake.nix | 14 ++++++++++++++ home.nix | 3 --- 3 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 .envrc diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..3550a30 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/flake.nix b/flake.nix index 9da10f5..2d863e5 100644 --- a/flake.nix +++ b/flake.nix @@ -64,5 +64,19 @@ ]; }; }; + + devShells.x86_64-linux.default = + let + pkgs = nixpkgs.legacyPackages.x86_64-linux; + nhs = pkgs.writeShellScriptBin "nhs" '' + nh os switch --hostname framework --impure path:. "$@" + ''; + in + pkgs.mkShell { + packages = [ + pkgs.nh + nhs + ]; + }; }; } diff --git a/home.nix b/home.nix index 24131b0..9a68ede 100644 --- a/home.nix +++ b/home.nix @@ -119,8 +119,6 @@ OCL_ICD_VENDORS = "/etc/OpenCL/vendors"; POCL_DEVICES = "cpu"; BROWSER = "zen"; - # Set FLAKE for nh - NH_FLAKE = "${config.home.homeDirectory}/Documents/nix-config"; }; programs.helix = { @@ -219,7 +217,6 @@ jn = "jj new"; jdiff = "jj diff"; jsq = "jj squash"; - nhs = "nh os switch"; h = "hx"; vanity = "mkp224o-amd64-64-24k -d noisebridgevanitytor noisebridge{2..7}"; }; From 9edc8b00380e0a255715901fdc0e6c7c6c322338 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sat, 28 Feb 2026 16:30:45 -0800 Subject: [PATCH 081/211] feat: update hardware firmware to use amd --- configuration.nix | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/configuration.nix b/configuration.nix index a9cf3a0..b1bc85c 100644 --- a/configuration.nix +++ b/configuration.nix @@ -75,8 +75,13 @@ hardware.graphics = { enable = true; enable32Bit = true; - # Add OpenCL support for CPU-based operations - extraPackages = with pkgs; [ pocl ]; + # Add OpenCL support via Rusticl (recommended by NixOS wiki for DaVinci Resolve) + extraPackages = with pkgs; [ mesa.opencl ]; + }; + + # Enable Rusticl for AMD Radeon GPUs (DaVinci Resolve) + environment.variables = { + RUSTICL_ENABLE = "radeonsi"; }; # Enable keyd for key remapping From d68735aade2618549e94f78cb00da10ed4a55a1c Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sat, 28 Feb 2026 19:00:57 -0800 Subject: [PATCH 082/211] feat: add hyfetch to be gay and do crime --- home.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.nix b/home.nix index 9a68ede..f0c5d19 100644 --- a/home.nix +++ b/home.nix @@ -77,7 +77,7 @@ ripgrep tree unzip - + hyfetch # Development gh tea From 8da3f2a67508fa94ee3c0a3c93176033451c8740 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sun, 1 Mar 2026 11:45:14 -0800 Subject: [PATCH 083/211] feat: add zulip client --- home.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/home.nix b/home.nix index f0c5d19..7eb25c4 100644 --- a/home.nix +++ b/home.nix @@ -104,6 +104,7 @@ font-manager antigravity-fhs davinci-resolve + zulip # GNOME Extensions gnomeExtensions.hide-top-bar From 0561ba4c38a25a85d11605cd5978f55d5a1d1840 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sun, 1 Mar 2026 12:13:17 -0800 Subject: [PATCH 084/211] feat: add vencord client --- home.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/home.nix b/home.nix index 7eb25c4..3ba8c47 100644 --- a/home.nix +++ b/home.nix @@ -105,6 +105,7 @@ antigravity-fhs davinci-resolve zulip + vesktop # GNOME Extensions gnomeExtensions.hide-top-bar From 4069287840e095455932f804be4f7a0ed743552c Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Mon, 2 Mar 2026 16:37:54 -0800 Subject: [PATCH 085/211] feat: replace davinci resolve with kdenlive --- home.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.nix b/home.nix index 3ba8c47..794c2fb 100644 --- a/home.nix +++ b/home.nix @@ -103,7 +103,7 @@ nemo-with-extensions font-manager antigravity-fhs - davinci-resolve + kdePackages.kdenlive zulip vesktop From 5811f32beb6a0838ae52c8ea6f6edd59d085feae Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Mon, 2 Mar 2026 18:26:21 -0800 Subject: [PATCH 086/211] feat: add claude code! --- home.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/home.nix b/home.nix index 794c2fb..1425f93 100644 --- a/home.nix +++ b/home.nix @@ -103,6 +103,7 @@ nemo-with-extensions font-manager antigravity-fhs + claude-code kdePackages.kdenlive zulip vesktop From ce8b7972b5ac4d8c5d17b72318864d6aa478e365 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Mon, 2 Mar 2026 18:43:21 -0800 Subject: [PATCH 087/211] feat: set gtk3 to use dark mode by default --- home.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/home.nix b/home.nix index 1425f93..4789efc 100644 --- a/home.nix +++ b/home.nix @@ -383,6 +383,11 @@ }; }; + gtk = { + enable = true; + gtk3.extraConfig.gtk-application-prefer-dark-theme = 1; + }; + # Enable rootless Podman with Home Manager services.podman = { enable = true; From fb7f3b5d15d41b11350460c8250980a89d7d83c2 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Mon, 2 Mar 2026 18:53:01 -0800 Subject: [PATCH 088/211] feat: add obs and virtual camera support --- configuration.nix | 7 +++++++ home.nix | 1 + 2 files changed, 8 insertions(+) diff --git a/configuration.nix b/configuration.nix index b1bc85c..287184c 100644 --- a/configuration.nix +++ b/configuration.nix @@ -248,6 +248,13 @@ # RAM optimizations for 96GB system # Disable swap usage (set swappiness to 0) - with 96GB RAM, never need swap + # v4l2loopback for OBS Virtual Camera + boot.extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ]; + boot.kernelModules = [ "v4l2loopback" ]; + boot.extraModprobeConfig = '' + options v4l2loopback devices=1 video_nr=1 card_label="OBS Virtual Camera" exclusive_caps=1 + ''; + boot.kernel.sysctl = { "vm.swappiness" = 0; # Never swap to disk "vm.vfs_cache_pressure" = 50; # Keep more filesystem cache in RAM diff --git a/home.nix b/home.nix index 4789efc..758dca3 100644 --- a/home.nix +++ b/home.nix @@ -107,6 +107,7 @@ kdePackages.kdenlive zulip vesktop + obs-studio # GNOME Extensions gnomeExtensions.hide-top-bar From 5768b554e36d28652c43340646787de9917c64ce Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Mon, 2 Mar 2026 18:53:01 -0800 Subject: [PATCH 089/211] feat: add a alias "c" for claude --- home.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/home.nix b/home.nix index 758dca3..37a2e85 100644 --- a/home.nix +++ b/home.nix @@ -204,6 +204,7 @@ programs.bash = { enable = true; shellAliases = { + "c" = "claude"; "." = "z .."; ".." = "z .."; j = "jj"; From f15ffa7e61f884ab30741e87e74cfdf5700eb7e5 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Mon, 2 Mar 2026 19:13:19 -0800 Subject: [PATCH 090/211] feat: add google chrome :( --- home.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/home.nix b/home.nix index 37a2e85..72d7266 100644 --- a/home.nix +++ b/home.nix @@ -108,6 +108,7 @@ zulip vesktop obs-studio + google-chrome # GNOME Extensions gnomeExtensions.hide-top-bar From 4f4ca386790bc7ff7066f9c70f6c9e40b875268f Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Mon, 2 Mar 2026 22:07:41 -0800 Subject: [PATCH 091/211] update: update nix flake --- flake.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/flake.lock b/flake.lock index 701f0ae..4d22f8a 100644 --- a/flake.lock +++ b/flake.lock @@ -28,11 +28,11 @@ ] }, "locked": { - "lastModified": 1772218752, - "narHash": "sha256-G8nArvOTZXU8DRvrzAdz3Elcj6kA/vMtvY9mrGLATtA=", + "lastModified": 1772516620, + "narHash": "sha256-2r4cKdqCVlQkvcTcLUMxmsmAYZZxCMd//w/PnDnukTE=", "owner": "nix-community", "repo": "home-manager", - "rev": "f3a30376bb9eb2f6f61816be7d6ed954b6d2a3b9", + "rev": "2b9504d5a0169d4940a312abe2df2c5658db8de9", "type": "github" }, "original": { @@ -49,11 +49,11 @@ ] }, "locked": { - "lastModified": 1771756436, - "narHash": "sha256-Tl2I0YXdhSTufGqAaD1ySh8x+cvVsEI1mJyJg12lxhI=", + "lastModified": 1772330611, + "narHash": "sha256-UZjPc/d5XRxvjDbk4veAO4XFdvx6BUum2l40V688Xq8=", "owner": "nix-community", "repo": "home-manager", - "rev": "5bd3589390b431a63072868a90c0f24771ff4cbb", + "rev": "58fd7ff0eec2cda43e705c4c0585729ec471d400", "type": "github" }, "original": { @@ -69,11 +69,11 @@ ] }, "locked": { - "lastModified": 1771734689, - "narHash": "sha256-/phvMgr1yutyAMjKnZlxkVplzxHiz60i4rc+gKzpwhg=", + "lastModified": 1772341813, + "narHash": "sha256-/PQ0ubBCMj/MVCWEI/XMStn55a8dIKsvztj4ZVLvUrQ=", "owner": "nix-community", "repo": "nix-index-database", - "rev": "8f590b832326ab9699444f3a48240595954a4b10", + "rev": "a2051ff239ce2e8a0148fa7a152903d9a78e854f", "type": "github" }, "original": { @@ -99,11 +99,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1771848320, - "narHash": "sha256-0MAd+0mun3K/Ns8JATeHT1sX28faLII5hVLq0L3BdZU=", + "lastModified": 1772433332, + "narHash": "sha256-izhTDFKsg6KeVBxJS9EblGeQ8y+O8eCa6RcW874vxEc=", "owner": "nixos", "repo": "nixpkgs", - "rev": "2fc6539b481e1d2569f25f8799236694180c0993", + "rev": "cf59864ef8aa2e178cccedbe2c178185b0365705", "type": "github" }, "original": { @@ -121,11 +121,11 @@ ] }, "locked": { - "lastModified": 1772315374, - "narHash": "sha256-OQUKXqb5orWghLM0Ttq9Yb0BTvPHqcbHCacm3Mg7nSs=", + "lastModified": 1772517253, + "narHash": "sha256-Z0JxYlGXMFnCJgSGCamKD9NQbL/O7z4wz0/slUR2kIw=", "owner": "nix-community", "repo": "NUR", - "rev": "7b95523b69ea5c3ff1379908bc0203a01e1f8430", + "rev": "4411f3ec0cac5431eb409da2481bc97f7223ad6a", "type": "github" }, "original": { @@ -152,11 +152,11 @@ ] }, "locked": { - "lastModified": 1772306482, - "narHash": "sha256-092P58kRKiLBn0eg4eI67frffMkKiDhOa1ZOREmMeB4=", + "lastModified": 1772517053, + "narHash": "sha256-aBuL2TFnyBLR+t6iBlKnTWWzprXYKQQIaV0IuCSPPeE=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "2e593ac6926cbf44adc8c9ef785da024812d2467", + "rev": "32e9673aee2ae994ced561247918952398a3e933", "type": "github" }, "original": { From 3314dbaa9c5382c698a79ad11fd001efc2661453 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Mon, 2 Mar 2026 22:19:36 -0800 Subject: [PATCH 092/211] fix: remove chrome --- home.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/home.nix b/home.nix index 72d7266..37a2e85 100644 --- a/home.nix +++ b/home.nix @@ -108,7 +108,6 @@ zulip vesktop obs-studio - google-chrome # GNOME Extensions gnomeExtensions.hide-top-bar From 7089a2c05ad4a4b1c9e8004731cd67ebb018a9d5 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Tue, 3 Mar 2026 17:26:15 -0800 Subject: [PATCH 093/211] feat: add alias for nix flake update nfu --- home.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/home.nix b/home.nix index 37a2e85..d76f1eb 100644 --- a/home.nix +++ b/home.nix @@ -204,6 +204,7 @@ programs.bash = { enable = true; shellAliases = { + "nfu" = "nix flake update"; "c" = "claude"; "." = "z .."; ".." = "z .."; From 19b9521728cb408ba94bcada237ed40cbbe8c60f Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Tue, 3 Mar 2026 17:26:15 -0800 Subject: [PATCH 094/211] feat: use claude code alias --- flake.lock | 21 +++++++++++++++++++++ flake.nix | 5 +++++ 2 files changed, 26 insertions(+) diff --git a/flake.lock b/flake.lock index 4d22f8a..6d83989 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,25 @@ { "nodes": { + "claude-code-overlay": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1772252606, + "narHash": "sha256-SiIhFq4XbD3LmODQ2mTtakRBnjBn/KoSgAOId1cL1Ks=", + "owner": "ryoppippi", + "repo": "claude-code-overlay", + "rev": "b1ebf027412136bbbe4202741c3d48721644bc4b", + "type": "github" + }, + "original": { + "owner": "ryoppippi", + "repo": "claude-code-overlay", + "type": "github" + } + }, "flake-parts": { "inputs": { "nixpkgs-lib": [ @@ -136,6 +156,7 @@ }, "root": { "inputs": { + "claude-code-overlay": "claude-code-overlay", "home-manager": "home-manager", "nix-index-database": "nix-index-database", "nixos-hardware": "nixos-hardware", diff --git a/flake.nix b/flake.nix index 2d863e5..a4d2396 100644 --- a/flake.nix +++ b/flake.nix @@ -18,6 +18,10 @@ url = "github:nix-community/NUR"; inputs.nixpkgs.follows = "nixpkgs"; }; + claude-code-overlay = { + url = "github:ryoppippi/claude-code-overlay"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = inputs@{ @@ -46,6 +50,7 @@ { nixpkgs.overlays = [ inputs.nur.overlays.default + inputs.claude-code-overlay.overlays.default (final: prev: { antigravity = prev.antigravity.overrideAttrs (oldAttrs: rec { From 00aa80ddc0e993beb4f3f4d37de9a7464ccae10d Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Tue, 3 Mar 2026 17:28:03 -0800 Subject: [PATCH 095/211] update: nix flake update --- flake.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/flake.lock b/flake.lock index 6d83989..1742cfa 100644 --- a/flake.lock +++ b/flake.lock @@ -48,11 +48,11 @@ ] }, "locked": { - "lastModified": 1772516620, - "narHash": "sha256-2r4cKdqCVlQkvcTcLUMxmsmAYZZxCMd//w/PnDnukTE=", + "lastModified": 1772569491, + "narHash": "sha256-bdr6ueeXO1Xg91sFkuvaysYF0mVdwHBpdyhTjBEWv+s=", "owner": "nix-community", "repo": "home-manager", - "rev": "2b9504d5a0169d4940a312abe2df2c5658db8de9", + "rev": "924e61f5c2aeab38504028078d7091077744ab17", "type": "github" }, "original": { @@ -119,11 +119,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1772433332, - "narHash": "sha256-izhTDFKsg6KeVBxJS9EblGeQ8y+O8eCa6RcW874vxEc=", + "lastModified": 1772542754, + "narHash": "sha256-WGV2hy+VIeQsYXpsLjdr4GvHv5eECMISX1zKLTedhdg=", "owner": "nixos", "repo": "nixpkgs", - "rev": "cf59864ef8aa2e178cccedbe2c178185b0365705", + "rev": "8c809a146a140c5c8806f13399592dbcb1bb5dc4", "type": "github" }, "original": { @@ -141,11 +141,11 @@ ] }, "locked": { - "lastModified": 1772517253, - "narHash": "sha256-Z0JxYlGXMFnCJgSGCamKD9NQbL/O7z4wz0/slUR2kIw=", + "lastModified": 1772583385, + "narHash": "sha256-3m4A+B/CnrG3xUeZbOw1OoLdSvB+7I/zZTW4fLM1go0=", "owner": "nix-community", "repo": "NUR", - "rev": "4411f3ec0cac5431eb409da2481bc97f7223ad6a", + "rev": "29adb5e8129c1020e59ca0a76b2a40d0e4a74eb1", "type": "github" }, "original": { From 044cc7da4a302b41c4351e0a3aae1206f65532a0 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Wed, 4 Mar 2026 15:59:06 -0800 Subject: [PATCH 096/211] fix have nemo be the only file explorer --- configuration.nix | 1 + home.nix | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/configuration.nix b/configuration.nix index 287184c..d23e5d6 100644 --- a/configuration.nix +++ b/configuration.nix @@ -144,6 +144,7 @@ geary # Email gnome-tour gnome-font-viewer # Have font-manager + nautilus # Using Nemo ]; # Configure keymap in X11 diff --git a/home.nix b/home.nix index d76f1eb..922c84a 100644 --- a/home.nix +++ b/home.nix @@ -101,6 +101,7 @@ logseq prismlauncher nemo-with-extensions + file-roller font-manager antigravity-fhs claude-code @@ -364,6 +365,28 @@ comment = "Fast, featureful, GPU based terminal emulator"; }; + # Extract archives on double-click + xdg.desktopEntries.extract-here = { + name = "Extract Here"; + exec = "file-roller --extract-here %U"; + icon = "file-roller"; + type = "Application"; + categories = ["Utility"]; + mimeType = [ + "application/zip" + "application/x-tar" + "application/x-compressed-tar" + "application/x-bzip-compressed-tar" + "application/x-xz-compressed-tar" + "application/x-zstd-compressed-tar" + "application/gzip" + "application/x-7z-compressed" + "application/x-rar" + "application/x-rar-compressed" + ]; + noDisplay = true; + }; + # Autostart applications using proper desktop files xdg.autostart = { enable = true; @@ -383,6 +406,16 @@ "x-scheme-handler/about" = "zen.desktop"; "x-scheme-handler/unknown" = "zen.desktop"; "inode/directory" = "nemo.desktop"; + "application/zip" = "extract-here.desktop"; + "application/x-tar" = "extract-here.desktop"; + "application/x-compressed-tar" = "extract-here.desktop"; + "application/x-bzip-compressed-tar" = "extract-here.desktop"; + "application/x-xz-compressed-tar" = "extract-here.desktop"; + "application/x-zstd-compressed-tar" = "extract-here.desktop"; + "application/gzip" = "extract-here.desktop"; + "application/x-7z-compressed" = "extract-here.desktop"; + "application/x-rar" = "extract-here.desktop"; + "application/x-rar-compressed" = "extract-here.desktop"; }; }; From acecc562295051130161d477ef427f8f2f48f166 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Wed, 4 Mar 2026 16:55:15 -0800 Subject: [PATCH 097/211] fix: a ton of different changes home.nix: - Bumped home.stateVersion from "23.05" to "25.05" - Removed the nixConfigDirectory let binding and verbose comments, simplified to dconf.settings = { - Removed org/gnome/desktop/background block (cat.png wallpaper) - Removed antigravity-fhs from packages - Removed duplicate zulip entry configuration.nix: - Removed "usbcore.autosuspend=-1" from boot.kernelParams - Added targeted udev rules for Framework fingerprint reader (27a6) and USB-C hub (32ac) autosuspend - Added services.fstrim.enable = true for NVMe/SSD health - Added nix.optimise.automatic = true for periodic store deduplication - Removed duplicate comment and entire cat.png activation script hardware-configuration.nix: - Replaced 96GB swapfile config with swapDevices = [ ] flake.nix: - Removed the antigravity overlay (override + fhs binding) --- configuration.nix | 26 +++++++++----------------- flake.nix | 13 ------------- hardware-configuration.nix | 9 +-------- home.nix | 20 ++------------------ 4 files changed, 12 insertions(+), 56 deletions(-) diff --git a/configuration.nix b/configuration.nix index d23e5d6..31d792b 100644 --- a/configuration.nix +++ b/configuration.nix @@ -13,8 +13,6 @@ # Bootloader. boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; - boot.kernelParams = [ "usbcore.autosuspend=-1" ]; - # Boot time optimizations boot.loader.timeout = 0; # Boot immediately without waiting for user input @@ -191,6 +189,9 @@ # Framework-specific services # Enable fwupd for BIOS updates (distributed through LVFS) services.fwupd.enable = true; + + # Enable periodic TRIM for NVMe/SSD health + services.fstrim.enable = true; # Enable automatic garbage collection to prevent old generations from slowing boot nix.gc = { @@ -199,6 +200,7 @@ options = "--delete-older-than 7d"; }; nix.settings.auto-optimise-store = true; + nix.optimise.automatic = true; # Optimize Nix for RAM - use more memory for builds nix.settings = { @@ -339,11 +341,16 @@ }; # GameCube adapter udev rules for Slippi/Dolphin + # Disable USB autosuspend for Framework's problematic devices (fingerprint reader, USB-C hub) services.udev.extraRules = '' # GameCube adapter USB device (vendor ID 057e, product ID 0337) SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="057e", ATTRS{idProduct}=="0337", MODE="0666" # GameCube adapter HID device (needed for Dolphin to access controllers) KERNEL=="hidraw*", ATTRS{idVendor}=="057e", ATTRS{idProduct}=="0337", MODE="0666", GROUP="input" + # Disable autosuspend for Framework fingerprint reader + ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="27a6", ATTR{power/autosuspend}="-1" + # Disable autosuspend for Framework USB-C hub controllers + ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="32ac", ATTR{power/autosuspend}="-1" ''; # Open ports in the firewall. @@ -360,19 +367,4 @@ # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). system.stateVersion = "25.05"; # Did you read the comment? - # Set user profile picture for GNOME - # Set user profile picture for GNOME - system.activationScripts.script.text = '' - mkdir -p /var/lib/AccountsService/{icons,users} - img="/home/jet/Documents/nix-config/cat.png" - if [ -f "$img" ]; then - cp "$img" /var/lib/AccountsService/icons/jet - echo -e "[User]\nIcon=/var/lib/AccountsService/icons/jet\n" > /var/lib/AccountsService/users/jet - chown root:root /var/lib/AccountsService/users/jet - chmod 0600 /var/lib/AccountsService/users/jet - chown root:root /var/lib/AccountsService/icons/jet - chmod 0444 /var/lib/AccountsService/icons/jet - fi - ''; - } diff --git a/flake.nix b/flake.nix index a4d2396..beae9c2 100644 --- a/flake.nix +++ b/flake.nix @@ -51,19 +51,6 @@ nixpkgs.overlays = [ inputs.nur.overlays.default inputs.claude-code-overlay.overlays.default - (final: prev: { - - antigravity = prev.antigravity.overrideAttrs (oldAttrs: rec { - version = "1.18.3"; - src = prev.fetchurl { - url = "https://edgedl.me.gvt1.com/edgedl/release2/j0qc3/antigravity/stable/1.18.3-4739469533380608/linux-x64/Antigravity.tar.gz"; - hash = "sha256:0f4n3i45gjr36hidpvibzn3p2jla2r7wg91ybmf2akafjn6f8zsc"; - }; - }); - - antigravity-fhs = final.antigravity.fhs; - - }) ]; } ]; diff --git a/hardware-configuration.nix b/hardware-configuration.nix index 15c86a4..09d89e5 100644 --- a/hardware-configuration.nix +++ b/hardware-configuration.nix @@ -25,14 +25,7 @@ options = [ "fmask=0077" "dmask=0077" ]; }; - # Add swap file for hibernation support - # This creates a 96GB swap file to match your RAM capacity - swapDevices = [ - { - device = "/swapfile"; - size = 98304; # 96GB in MB - } - ]; + 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 diff --git a/home.nix b/home.nix index 922c84a..b97ad72 100644 --- a/home.nix +++ b/home.nix @@ -5,19 +5,10 @@ home.username = "jet"; home.homeDirectory = "/home/jet"; - home.stateVersion = "23.05"; + home.stateVersion = "25.05"; - # Define configuration directory - # Note: we can't use config.home.homeDirectory in the let block if we're also defining it in the set - # recursively without strict evaluation issues sometimes, but here it should be fine if we just use the string. - # Safer to just use /home/jet or home.homeDirectory if it was passed in. - # Actually, `config.home.homeDirectory` is safe to use inside simple attribute sets. - # Let's use a let binding for clarity. - # Configure GNOME settings - dconf.settings = let - nixConfigDirectory = "${config.home.homeDirectory}/Documents/nix-config"; - in { + dconf.settings = { "org/gnome/desktop/interface" = { clock-format = "12h"; clock-show-weekday = true; @@ -28,11 +19,6 @@ "org/gnome/system/location" = { enabled = true; }; - "org/gnome/desktop/background" = { - picture-uri = "file://${nixConfigDirectory}/cat.png"; - picture-uri-dark = "file://${nixConfigDirectory}/cat.png"; - picture-options = "wallpaper"; - }; "org/gnome/settings-daemon/plugins/power" = { sleep-inactive-ac-type = "nothing"; }; @@ -103,10 +89,8 @@ nemo-with-extensions file-roller font-manager - antigravity-fhs claude-code kdePackages.kdenlive - zulip vesktop obs-studio From e826d26833ac4ee8a51564e489e1b10a0ec59bd3 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Thu, 5 Mar 2026 13:38:53 -0800 Subject: [PATCH 098/211] feat: make direnv reload and allow aliases dr and da --- home.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.nix b/home.nix index b97ad72..0d7e113 100644 --- a/home.nix +++ b/home.nix @@ -189,6 +189,8 @@ programs.bash = { enable = true; shellAliases = { + "dr" = "direnv reload"; + "da" = "direnv allow"; "nfu" = "nix flake update"; "c" = "claude"; "." = "z .."; From e49a188dbb7d41809969e5b696a963a1d92c7cfd Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Thu, 5 Mar 2026 15:42:46 -0800 Subject: [PATCH 099/211] feat: remove beeper --- home.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/home.nix b/home.nix index 0d7e113..f9a1902 100644 --- a/home.nix +++ b/home.nix @@ -81,7 +81,6 @@ inkscape qbittorrent-enhanced signal-desktop - beeper element-desktop zulip logseq From 0d9ded1aceaded7dde30936d66fb118bf02d6dab Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Thu, 5 Mar 2026 15:46:08 -0800 Subject: [PATCH 100/211] update: update nix flake --- flake.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/flake.lock b/flake.lock index 1742cfa..b42ce85 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1772252606, - "narHash": "sha256-SiIhFq4XbD3LmODQ2mTtakRBnjBn/KoSgAOId1cL1Ks=", + "lastModified": 1772674218, + "narHash": "sha256-1oc5zUFOjeK2Bro5cdCe3Fc/uzQIHyxfKMDZQ+Zm6Uo=", "owner": "ryoppippi", "repo": "claude-code-overlay", - "rev": "b1ebf027412136bbbe4202741c3d48721644bc4b", + "rev": "e177db5beaf0cd10761e1b4a6eac2906627ed119", "type": "github" }, "original": { @@ -48,11 +48,11 @@ ] }, "locked": { - "lastModified": 1772569491, - "narHash": "sha256-bdr6ueeXO1Xg91sFkuvaysYF0mVdwHBpdyhTjBEWv+s=", + "lastModified": 1772633327, + "narHash": "sha256-jl+DJB2DUx7EbWLRng+6HNWW/1/VQOnf0NsQB4PlA7I=", "owner": "nix-community", "repo": "home-manager", - "rev": "924e61f5c2aeab38504028078d7091077744ab17", + "rev": "5a75730e6f21ee624cbf86f4915c6e7489c74acc", "type": "github" }, "original": { @@ -119,11 +119,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1772542754, - "narHash": "sha256-WGV2hy+VIeQsYXpsLjdr4GvHv5eECMISX1zKLTedhdg=", + "lastModified": 1772624091, + "narHash": "sha256-QKyJ0QGWBn6r0invrMAK8dmJoBYWoOWy7lN+UHzW1jc=", "owner": "nixos", "repo": "nixpkgs", - "rev": "8c809a146a140c5c8806f13399592dbcb1bb5dc4", + "rev": "80bdc1e5ce51f56b19791b52b2901187931f5353", "type": "github" }, "original": { @@ -141,11 +141,11 @@ ] }, "locked": { - "lastModified": 1772583385, - "narHash": "sha256-3m4A+B/CnrG3xUeZbOw1OoLdSvB+7I/zZTW4fLM1go0=", + "lastModified": 1772745558, + "narHash": "sha256-pVmX5Z0PLUZIL7TFcfYyWNqEKDVf72bAz0PORyNQHSQ=", "owner": "nix-community", "repo": "NUR", - "rev": "29adb5e8129c1020e59ca0a76b2a40d0e4a74eb1", + "rev": "361709a61eebc0b1783dd478677b7ac4e1efa0a2", "type": "github" }, "original": { @@ -173,11 +173,11 @@ ] }, "locked": { - "lastModified": 1772517053, - "narHash": "sha256-aBuL2TFnyBLR+t6iBlKnTWWzprXYKQQIaV0IuCSPPeE=", + "lastModified": 1772638901, + "narHash": "sha256-kzAyU054Mzpnzgx475MgmcjYJXxXWQWBG7LLsYtHXKw=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "32e9673aee2ae994ced561247918952398a3e933", + "rev": "75de12ddd50616a3628499ec18b648bceb88eb0d", "type": "github" }, "original": { From eac47ddc2899a5f504693f0290e74ed162c3b2b6 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Thu, 5 Mar 2026 15:49:04 -0800 Subject: [PATCH 101/211] feat: organize home packages --- home.nix | 55 +++++++++++++++++++++++++++---------------------------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/home.nix b/home.nix index f9a1902..8373045 100644 --- a/home.nix +++ b/home.nix @@ -58,47 +58,46 @@ }; home.packages = with pkgs; [ - # CLI Tools + # CLI bat - ripgrep - tree - unzip - hyfetch - # Development + claude-code + fastfetch gh - tea + hyfetch mkp224o nixfmt + ripgrep + tea + tree + unzip - # Terminal - nerd-fonts.commit-mono - fastfetch - - # Desktop / GUI - thunderbird - vlc - gimp3 - inkscape - qbittorrent-enhanced - signal-desktop + # Desktop element-desktop - zulip - logseq - prismlauncher - nemo-with-extensions file-roller font-manager - claude-code + gimp3 + inkscape kdePackages.kdenlive - vesktop + logseq + nemo-with-extensions obs-studio - + prismlauncher + qbittorrent-enhanced + signal-desktop + thunderbird + vesktop + vlc + zulip + + # Fonts + nerd-fonts.commit-mono + # GNOME Extensions - gnomeExtensions.hide-top-bar - gnomeExtensions.wifi-qrcode - gnomeExtensions.system-monitor-next gnomeExtensions.clipboard-indicator gnomeExtensions.emoji-copy + gnomeExtensions.hide-top-bar + gnomeExtensions.system-monitor-next + gnomeExtensions.wifi-qrcode ]; From 4e0cfb1314424ac48c0956387cdc29ca3eb63acb Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Thu, 5 Mar 2026 15:49:04 -0800 Subject: [PATCH 102/211] fix: fix indentation --- home.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.nix b/home.nix index 8373045..b1ce53a 100644 --- a/home.nix +++ b/home.nix @@ -112,7 +112,7 @@ enable = true; defaultEditor = true; settings = { - theme = "dark_high_contrast"; + theme = "dark_high_contrast"; editor = { line-number = "relative"; lsp.display-messages = true; From ac09076b513ca45ab5f6885e01660ee14d735951 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Thu, 5 Mar 2026 15:49:04 -0800 Subject: [PATCH 103/211] feat: remove haskell from helix configuration --- home.nix | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/home.nix b/home.nix index b1ce53a..7bc165c 100644 --- a/home.nix +++ b/home.nix @@ -120,24 +120,16 @@ }; }; languages = { - haskell = { - config = { + language = [ + { + name = "rust"; end-of-line-diagnostics = "hint"; - }; - "inline-diagnostics" = { - cursor-line = "hint"; - other-lines = "hint"; - }; - }; - rust = { - config = { - end-of-line-diagnostics = "hint"; - }; - "inline-diagnostics" = { - cursor-line = "hint"; - other-lines = "hint"; - }; - }; + inline-diagnostics = { + cursor-line = "hint"; + other-lines = "hint"; + }; + } + ]; }; }; From 3606cc74254f0d8091e3df44ff0536a03c61b7e2 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Thu, 5 Mar 2026 16:30:21 -0800 Subject: [PATCH 104/211] feat: add rust ts and nix ls and for helix --- home.nix | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/home.nix b/home.nix index 7bc165c..1ca1732 100644 --- a/home.nix +++ b/home.nix @@ -71,6 +71,11 @@ tree unzip + # LSP Servers + rust-analyzer + typescript-language-server + nil + # Desktop element-desktop file-roller @@ -129,6 +134,22 @@ other-lines = "hint"; }; } + { + name = "typescript"; + end-of-line-diagnostics = "hint"; + inline-diagnostics = { + cursor-line = "hint"; + other-lines = "hint"; + }; + } + { + name = "nix"; + end-of-line-diagnostics = "hint"; + inline-diagnostics = { + cursor-line = "hint"; + other-lines = "hint"; + }; + } ]; }; }; From a386763b86e419617229eb946ac05b875c93da24 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Thu, 5 Mar 2026 17:07:19 -0800 Subject: [PATCH 105/211] fix: clean up comments, unused docker and podman, etc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit configuration.nix 1. Removed stale NixOS boilerplate comments — all the default # Edit this configuration file..., # Bootloader., # Enable the X11 windowing system., # Define a user account..., commented-out options like # services.openssh.enable, firewall comments, and stateVersion comment 2. Removed Docker/docker-compose — virtualisation.docker block, users.groups.docker, "docker" from extraGroups, docker-compose from systemPackages 3. Removed vim from systemPackages 4. Removed environment.variables.EDITOR (helix defaultEditor = true in home.nix handles this) 5. Removed environment.sessionVariables.TERMINAL and environment.variables.RUSTICL_ENABLE (moved to home.nix) 6. Removed /tmp/nix-build tmpfs mount 7. Added networking.firewall.enable = true and # Required for Tailscale comment on checkReversePath 8. Separated v4l2loopback from the RAM section (moved # RAM optimizations comment to above boot.kernel.sysctl) 9. Fixed indentation — systemPackages, programs.appimage, imports, lists reformatted to one-item-per-line 10. Trailing whitespace cleanup throughout home.nix 1. Removed services.podman block 2. Added TERMINAL = "kitty" and RUSTICL_ENABLE = "radeonsi" to home.sessionVariables 3. Replaced 3 repetitive helix language blocks with a single map expression 4. Formatting fixes — function args split to one-per-line, trailing whitespace, list formatting (categories, urls, etc.) 5. Removed blank line before home.sessionVariables --- configuration.nix | 168 ++++++++++------------------------------------ home.nix | 68 +++++++++---------- 2 files changed, 66 insertions(+), 170 deletions(-) diff --git a/configuration.nix b/configuration.nix index 31d792b..fd81b0b 100644 --- a/configuration.nix +++ b/configuration.nix @@ -1,32 +1,14 @@ -# Edit this configuration file to define what should be installed on -# your system. Help is available in the configuration.nix(5) man page -# and in the NixOS manual (accessible by running ‘nixos-help’). - { config, pkgs, ... }: { - imports = - [ # Include the results of the hardware scan. - ./hardware-configuration.nix - ]; + imports = [ ./hardware-configuration.nix ]; - # Bootloader. boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; - # Boot time optimizations - boot.loader.timeout = 0; # Boot immediately without waiting for user input - - # Disable slow services that delay boot + boot.loader.timeout = 0; - networking.hostName = "framework"; # Define your hostname. - # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. + networking.hostName = "framework"; - # Configure network proxy if necessary - # networking.proxy.default = "http://user:password@proxy:port/"; - # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; - - # Optimize network configuration for faster boot - hardware.bluetooth = { enable = true; powerOnBoot = true; @@ -43,14 +25,13 @@ enable = true; }; + networking.firewall.enable = true; + # Required for Tailscale networking.firewall.checkReversePath = "loose"; services.tailscale.enable = true; - # Set your time zone. time.timeZone = "America/Los_Angeles"; - - # Select internationalisation properties. i18n.defaultLocale = "en_US.UTF-8"; i18n.extraLocaleSettings = { @@ -65,7 +46,6 @@ LC_TIME = "en_US.UTF-8"; }; - # Enable the X11 windowing system. services.xserver.enable = true; # Framework Laptop 13 AMD AI 300 Series specific configurations @@ -77,11 +57,6 @@ extraPackages = with pkgs; [ mesa.opencl ]; }; - # Enable Rusticl for AMD Radeon GPUs (DaVinci Resolve) - environment.variables = { - RUSTICL_ENABLE = "radeonsi"; - }; - # Enable keyd for key remapping services.keyd = { enable = true; @@ -116,13 +91,12 @@ }; }; - # Enable the GNOME Desktop Environment. services.displayManager.gdm.enable = true; services.desktopManager.gnome.enable = true; # Remove default GNOME apps (keeping loupe and file-roller) environment.gnome.excludePackages = with pkgs; [ - epiphany # GNOME Web + epiphany # GNOME Web gnome-calculator gnome-calendar gnome-characters @@ -133,28 +107,25 @@ gnome-maps gnome-music gnome-weather - snapshot # Camera + snapshot # Camera gnome-text-editor simple-scan - totem # Videos (have VLC) - yelp # Help docs - evince # PDF viewer (using Zen Browser) - geary # Email + totem # Videos (have VLC) + yelp # Help docs + evince # PDF viewer (using Zen Browser) + geary # Email gnome-tour gnome-font-viewer # Have font-manager - nautilus # Using Nemo + nautilus # Using Nemo ]; - - # Configure keymap in X11 + services.xserver.xkb = { layout = "us"; variant = ""; }; - # Enable CUPS to print documents. services.printing.enable = true; - # Enable sound with pipewire. services.pulseaudio.enable = false; security.rtkit.enable = true; services.pipewire = { @@ -162,37 +133,31 @@ alsa.enable = true; alsa.support32Bit = true; pulse.enable = true; - # If you want to use JACK applications, uncomment this - #jack.enable = true; - - # use the example session manager (no others are packaged yet so this is enabled by default, - # no need to redefine it in your config for now) - #media-session.enable = true; }; - - # Enable touchpad support (enabled default in most desktopManager). - # services.xserver.libinput.enable = true; - - # Define a user account. Don't forget to set a password with 'passwd'. users.users.jet = { isNormalUser = true; description = "Jet"; - extraGroups = [ "networkmanager" "wheel" "docker" "video" "render" ]; + extraGroups = [ + "networkmanager" + "wheel" + "video" + "render" + ]; }; - # Allow unfree packages nixpkgs.config.allowUnfree = true; + nix.settings.experimental-features = [ + "nix-command" + "flakes" + ]; - # Enable the Flakes feature and the accompanying new nix command-line tool - nix.settings.experimental-features = [ "nix-command" "flakes" ]; - # Framework-specific services # Enable fwupd for BIOS updates (distributed through LVFS) services.fwupd.enable = true; # Enable periodic TRIM for NVMe/SSD health services.fstrim.enable = true; - + # Enable automatic garbage collection to prevent old generations from slowing boot nix.gc = { automatic = true; @@ -202,11 +167,9 @@ nix.settings.auto-optimise-store = true; nix.optimise.automatic = true; - # Optimize Nix for RAM - use more memory for builds nix.settings = { - max-jobs = "auto"; # Use all CPU cores - cores = 0; # Use all cores - # Build in RAM via tmpfs (configured above) + max-jobs = "auto"; + cores = 0; build-users-group = "nixbld"; }; @@ -242,15 +205,13 @@ # Enable power-profiles-daemon for better AMD power management # (Note: This conflicts with auto-cpufreq, so we'll keep auto-cpufreq disabled) services.power-profiles-daemon.enable = false; - + # AMD specific power management powerManagement.cpuFreqGovernor = "powersave"; # Enable power management powerManagement.enable = true; - # RAM optimizations for 96GB system - # Disable swap usage (set swappiness to 0) - with 96GB RAM, never need swap # v4l2loopback for OBS Virtual Camera boot.extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ]; boot.kernelModules = [ "v4l2loopback" ]; @@ -258,6 +219,7 @@ options v4l2loopback devices=1 video_nr=1 card_label="OBS Virtual Camera" exclusive_caps=1 ''; + # RAM optimizations for 96GB system boot.kernel.sysctl = { "vm.swappiness" = 0; # Never swap to disk "vm.vfs_cache_pressure" = 50; # Keep more filesystem cache in RAM @@ -277,67 +239,19 @@ ]; }; - # RAM disk for Nix build cache - speeds up compilation significantly - fileSystems."/tmp/nix-build" = { - device = "tmpfs"; - fsType = "tmpfs"; - options = [ - "size=32G" # 32GB for Nix builds - "mode=1777" - "nosuid" - "nodev" - ]; - }; - - # List packages installed in system profile. To search, run: - # $ nix search wget environment.systemPackages = with pkgs; [ - git - wget - vim - docker-compose - nh + git + wget + nh ]; programs.steam.enable = true; programs.nix-index-database.comma.enable = true; - environment.variables.EDITOR = "helix"; - environment.sessionVariables = { - TERMINAL = "kitty"; - }; - - # Some programs need SUID wrappers, can be configured further or are - # started in user sessions. - # programs.mtr.enable = true; - # programs.gnupg.agent = { - # enable = true; - # enableSSHSupport = true; - # }; - - # List services that you want to enable: - - # Enable the OpenSSH daemon. - # services.openssh.enable = true; - - # Enable rootless Docker - virtualisation.docker = { - enable = true; - rootless = { - enable = true; - setSocketVariable = true; - }; - }; - - # Create docker group - users.groups.docker = { - name = "docker"; - }; - - # https://wiki.nixos.org/wiki/Appimage#Register_AppImage_files_as_a_binary_type_to_binfmt_misc + # https://wiki.nixos.org/wiki/Appimage programs.appimage = { - enable = true; - binfmt = true; + enable = true; + binfmt = true; }; # GameCube adapter udev rules for Slippi/Dolphin @@ -353,18 +267,6 @@ ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="32ac", ATTR{power/autosuspend}="-1" ''; - # Open ports in the firewall. - # networking.firewall.allowedTCPPorts = [ ... ]; - # networking.firewall.allowedUDPPorts = [ ... ]; - # Or disable the firewall altogether. - # networking.firewall.enable = false; - - # This value determines the NixOS release from which the default - # settings for stateful data, like file locations and database versions - # on your system were taken. It's perfectly fine and recommended to leave - # this value at the release version of the first install of this system. - # Before changing this value read the documentation for this option - # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). - system.stateVersion = "25.05"; # Did you read the comment? + system.stateVersion = "25.05"; } diff --git a/home.nix b/home.nix index 1ca1732..ae39f13 100644 --- a/home.nix +++ b/home.nix @@ -1,4 +1,10 @@ -{ config, pkgs, inputs, lib, ... }: +{ + config, + pkgs, + inputs, + lib, + ... +}: { imports = [ inputs.zen-browser.homeModules.default ]; @@ -105,12 +111,13 @@ gnomeExtensions.wifi-qrcode ]; - # Set environment variables for OpenCL home.sessionVariables = { OCL_ICD_VENDORS = "/etc/OpenCL/vendors"; POCL_DEVICES = "cpu"; BROWSER = "zen"; + TERMINAL = "kitty"; + RUSTICL_ENABLE = "radeonsi"; }; programs.helix = { @@ -125,32 +132,21 @@ }; }; languages = { - language = [ - { - name = "rust"; - end-of-line-diagnostics = "hint"; - inline-diagnostics = { - cursor-line = "hint"; - other-lines = "hint"; - }; - } - { - name = "typescript"; - end-of-line-diagnostics = "hint"; - inline-diagnostics = { - cursor-line = "hint"; - other-lines = "hint"; - }; - } - { - name = "nix"; - end-of-line-diagnostics = "hint"; - inline-diagnostics = { - cursor-line = "hint"; - other-lines = "hint"; - }; - } - ]; + language = + map + (name: { + inherit name; + end-of-line-diagnostics = "hint"; + inline-diagnostics = { + cursor-line = "hint"; + other-lines = "hint"; + }; + }) + [ + "rust" + "typescript" + "nix" + ]; }; }; @@ -200,7 +196,7 @@ programs.bash = { enable = true; shellAliases = { - "dr" = "direnv reload"; + "dr" = "direnv reload"; "da" = "direnv allow"; "nfu" = "nix flake update"; "c" = "claude"; @@ -343,7 +339,7 @@ force = true; engines = { "SearXNG" = { - urls = [{ template = "https://search.extremist.software/search?q={searchTerms}"; }]; + urls = [ { template = "https://search.extremist.software/search?q={searchTerms}"; } ]; definedAliases = [ "@s" ]; }; }; @@ -358,7 +354,10 @@ exec = "kitty --start-as=fullscreen"; icon = "kitty"; type = "Application"; - categories = ["System" "TerminalEmulator"]; + categories = [ + "System" + "TerminalEmulator" + ]; comment = "Fast, featureful, GPU based terminal emulator"; }; @@ -368,7 +367,7 @@ exec = "file-roller --extract-here %U"; icon = "file-roller"; type = "Application"; - categories = ["Utility"]; + categories = [ "Utility" ]; mimeType = [ "application/zip" "application/x-tar" @@ -421,9 +420,4 @@ gtk3.extraConfig.gtk-application-prefer-dark-theme = 1; }; - # Enable rootless Podman with Home Manager - services.podman = { - enable = true; - autoUpdate.enable = true; - }; } From 966dd1bfffaf67a21c8b85a81f259b08a1fb1fc5 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sun, 8 Mar 2026 19:04:38 -0700 Subject: [PATCH 106/211] fix: remove extra curlies --- configuration.nix | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/configuration.nix b/configuration.nix index fd81b0b..4290d76 100644 --- a/configuration.nix +++ b/configuration.nix @@ -21,9 +21,7 @@ networking.networkmanager.enable = true; - services.resolved = { - enable = true; - }; + services.resolved.enable = true; networking.firewall.enable = true; # Required for Tailscale From f5b62c00534ab566261bb06cb070635a1acd2859 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sun, 8 Mar 2026 19:04:38 -0700 Subject: [PATCH 107/211] fix: remove unused opencl configurations --- home.nix | 4 ---- 1 file changed, 4 deletions(-) diff --git a/home.nix b/home.nix index ae39f13..6544ef1 100644 --- a/home.nix +++ b/home.nix @@ -111,13 +111,9 @@ gnomeExtensions.wifi-qrcode ]; - # Set environment variables for OpenCL home.sessionVariables = { - OCL_ICD_VENDORS = "/etc/OpenCL/vendors"; - POCL_DEVICES = "cpu"; BROWSER = "zen"; TERMINAL = "kitty"; - RUSTICL_ENABLE = "radeonsi"; }; programs.helix = { From 23b2ac9a335cbcf2432f25783509be7d55a98f53 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sun, 8 Mar 2026 19:04:38 -0700 Subject: [PATCH 108/211] feat: configure to only keep 3 configurations/gens --- configuration.nix | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/configuration.nix b/configuration.nix index 4290d76..97e3edf 100644 --- a/configuration.nix +++ b/configuration.nix @@ -4,6 +4,7 @@ imports = [ ./hardware-configuration.nix ]; boot.loader.systemd-boot.enable = true; + boot.loader.systemd-boot.configurationLimit = 3; boot.loader.efi.canTouchEfiVariables = true; boot.loader.timeout = 0; @@ -144,10 +145,16 @@ }; nixpkgs.config.allowUnfree = true; - nix.settings.experimental-features = [ - "nix-command" - "flakes" - ]; + nix.settings = { + experimental-features = [ + "nix-command" + "flakes" + ]; + auto-optimise-store = true; + max-jobs = "auto"; + cores = 0; + build-users-group = "nixbld"; + }; # Framework-specific services # Enable fwupd for BIOS updates (distributed through LVFS) @@ -156,19 +163,22 @@ # Enable periodic TRIM for NVMe/SSD health services.fstrim.enable = true; - # Enable automatic garbage collection to prevent old generations from slowing boot - nix.gc = { - automatic = true; - dates = "daily"; - options = "--delete-older-than 7d"; + # Keep only last 10 generations, GC everything else (daily) + systemd.services.nix-cleanup = { + description = "Nix generation cleanup and garbage collection"; + serviceConfig.Type = "oneshot"; + script = '' + ${pkgs.nix}/bin/nix-env --delete-generations +3 -p /nix/var/nix/profiles/system + ${pkgs.nix}/bin/nix-env --delete-generations +3 -p /nix/var/nix/profiles/per-user/jet/home-manager || true + ${pkgs.nix}/bin/nix-store --gc + ''; }; - nix.settings.auto-optimise-store = true; - nix.optimise.automatic = true; - - nix.settings = { - max-jobs = "auto"; - cores = 0; - build-users-group = "nixbld"; + systemd.timers.nix-cleanup = { + wantedBy = [ "timers.target" ]; + timerConfig = { + OnCalendar = "daily"; + Persistent = true; + }; }; # Power management for laptop From 4ac1fd148994ee6b811d4cc2f294a8150f61910e Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sun, 8 Mar 2026 19:04:38 -0700 Subject: [PATCH 109/211] fix: remove default languages already set --- configuration.nix | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/configuration.nix b/configuration.nix index 97e3edf..16ebf9e 100644 --- a/configuration.nix +++ b/configuration.nix @@ -33,18 +33,6 @@ time.timeZone = "America/Los_Angeles"; 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"; - }; - services.xserver.enable = true; # Framework Laptop 13 AMD AI 300 Series specific configurations From 02a273f2f723057fa1091b3178864c3c1265de34 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sun, 8 Mar 2026 19:04:38 -0700 Subject: [PATCH 110/211] fix: remove unused comments --- configuration.nix | 3 --- 1 file changed, 3 deletions(-) diff --git a/configuration.nix b/configuration.nix index 16ebf9e..3083c5b 100644 --- a/configuration.nix +++ b/configuration.nix @@ -40,8 +40,6 @@ hardware.graphics = { enable = true; enable32Bit = true; - # Add OpenCL support via Rusticl (recommended by NixOS wiki for DaVinci Resolve) - extraPackages = with pkgs; [ mesa.opencl ]; }; # Enable keyd for key remapping @@ -108,7 +106,6 @@ services.xserver.xkb = { layout = "us"; - variant = ""; }; services.printing.enable = true; From c634b77ae1f366423a1e52fadc891061ddf98a97 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sun, 8 Mar 2026 19:04:38 -0700 Subject: [PATCH 111/211] fix: make power management work for AMD chip --- configuration.nix | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/configuration.nix b/configuration.nix index 3083c5b..f12f59e 100644 --- a/configuration.nix +++ b/configuration.nix @@ -191,18 +191,10 @@ }; }; - # Enable thermald for thermal management - services.thermald.enable = true; - - # Framework Laptop 13 specific power optimizations - # Enable power-profiles-daemon for better AMD power management - # (Note: This conflicts with auto-cpufreq, so we'll keep auto-cpufreq disabled) +# Disable power-profiles-daemon (conflicts with auto-cpufreq) services.power-profiles-daemon.enable = false; - # AMD specific power management - powerManagement.cpuFreqGovernor = "powersave"; - - # Enable power management + # Enable power management (governor managed dynamically by auto-cpufreq) powerManagement.enable = true; # v4l2loopback for OBS Virtual Camera From 2e4b2e8a80de59da98bc7a15dbec4eb50e92b324 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sun, 8 Mar 2026 19:04:38 -0700 Subject: [PATCH 112/211] fix: remove swap because I have alot of mem --- configuration.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/configuration.nix b/configuration.nix index f12f59e..9440909 100644 --- a/configuration.nix +++ b/configuration.nix @@ -206,8 +206,7 @@ # RAM optimizations for 96GB system boot.kernel.sysctl = { - "vm.swappiness" = 0; # Never swap to disk - "vm.vfs_cache_pressure" = 50; # Keep more filesystem cache in RAM +"vm.vfs_cache_pressure" = 50; # Keep more filesystem cache in RAM "vm.dirty_ratio" = 15; # Write to disk when 15% of RAM is dirty "vm.dirty_background_ratio" = 5; # Start writing when 5% dirty }; From 1815ab4b887bc02d7956b60a713b1ff3c0da176c Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sun, 8 Mar 2026 19:04:38 -0700 Subject: [PATCH 113/211] fix: remove unused lib input --- home.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/home.nix b/home.nix index 6544ef1..208c38d 100644 --- a/home.nix +++ b/home.nix @@ -2,7 +2,6 @@ config, pkgs, inputs, - lib, ... }: From f396f4ff74ab6d90fcd702807cc8553016e5f69b Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sun, 8 Mar 2026 19:04:38 -0700 Subject: [PATCH 114/211] fix: remove dangerous alias --- home.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/home.nix b/home.nix index 208c38d..a71689f 100644 --- a/home.nix +++ b/home.nix @@ -195,7 +195,6 @@ "da" = "direnv allow"; "nfu" = "nix flake update"; "c" = "claude"; - "." = "z .."; ".." = "z .."; j = "jj"; jgf = "jj git fetch"; From 99b88770213f853f975c84403d501a8c07214fba Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sun, 8 Mar 2026 19:04:38 -0700 Subject: [PATCH 115/211] remove possibly dangerous control c alias --- home.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/home.nix b/home.nix index a71689f..967ed2a 100644 --- a/home.nix +++ b/home.nix @@ -239,7 +239,6 @@ }; keybindings = { "ctrl+shift+c" = "copy_and_clear_or_interrupt"; - "ctrl+c" = "copy_and_clear_or_interrupt"; "ctrl+shift+v" = "paste_from_clipboard"; "ctrl+v" = "paste_from_clipboard"; }; From 8d2981f1d2e6163e0460a5eef33861ed8a2d5de3 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sun, 8 Mar 2026 19:04:38 -0700 Subject: [PATCH 116/211] fix: remove depricated warning config --- home.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/home.nix b/home.nix index 967ed2a..f3b9ad6 100644 --- a/home.nix +++ b/home.nix @@ -274,7 +274,6 @@ # Configure Zen Browser with about:config settings programs.zen-browser = { enable = true; - suppressXdgMigrationWarning = true; policies = { DisableTelemetry = true; DisableFirefoxStudies = true; From 97c8a8b2b9298e9dc107b056d7e3d6b074e59ae8 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sun, 8 Mar 2026 19:04:38 -0700 Subject: [PATCH 117/211] update: nfu --- flake.lock | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/flake.lock b/flake.lock index b42ce85..2139a8d 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1772674218, - "narHash": "sha256-1oc5zUFOjeK2Bro5cdCe3Fc/uzQIHyxfKMDZQ+Zm6Uo=", + "lastModified": 1772841847, + "narHash": "sha256-Qre73BGBcw1YlhBTTT+T/rVoqVtlCgHYYExUreIJoYs=", "owner": "ryoppippi", "repo": "claude-code-overlay", - "rev": "e177db5beaf0cd10761e1b4a6eac2906627ed119", + "rev": "871c9fa0d37c0d6b3bdbf30341a8d08a75b1793b", "type": "github" }, "original": { @@ -48,11 +48,11 @@ ] }, "locked": { - "lastModified": 1772633327, - "narHash": "sha256-jl+DJB2DUx7EbWLRng+6HNWW/1/VQOnf0NsQB4PlA7I=", + "lastModified": 1772985285, + "narHash": "sha256-wEEmvfqJcl9J0wyMgMrj1TixOgInBW/6tLPhWGoZE3s=", "owner": "nix-community", "repo": "home-manager", - "rev": "5a75730e6f21ee624cbf86f4915c6e7489c74acc", + "rev": "5be5d8245cbc7bc0c09fbb5f38f23f223c543f85", "type": "github" }, "original": { @@ -89,11 +89,11 @@ ] }, "locked": { - "lastModified": 1772341813, - "narHash": "sha256-/PQ0ubBCMj/MVCWEI/XMStn55a8dIKsvztj4ZVLvUrQ=", + "lastModified": 1772945408, + "narHash": "sha256-PMt48sEQ8cgCeljQ9I/32uoBq/8t8y+7W/nAZhf72TQ=", "owner": "nix-community", "repo": "nix-index-database", - "rev": "a2051ff239ce2e8a0148fa7a152903d9a78e854f", + "rev": "1c1d8ea87b047788fd7567adf531418c5da321ec", "type": "github" }, "original": { @@ -104,11 +104,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1771969195, - "narHash": "sha256-qwcDBtrRvJbrrnv1lf/pREQi8t2hWZxVAyeMo7/E9sw=", + "lastModified": 1772972630, + "narHash": "sha256-mUJxsNOrBMNOUJzN0pfdVJ1r2pxeqm9gI/yIKXzVVbk=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "41c6b421bdc301b2624486e11905c9af7b8ec68e", + "rev": "3966ce987e1a9a164205ac8259a5fe8a64528f72", "type": "github" }, "original": { @@ -119,11 +119,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1772624091, - "narHash": "sha256-QKyJ0QGWBn6r0invrMAK8dmJoBYWoOWy7lN+UHzW1jc=", + "lastModified": 1772963539, + "narHash": "sha256-9jVDGZnvCckTGdYT53d/EfznygLskyLQXYwJLKMPsZs=", "owner": "nixos", "repo": "nixpkgs", - "rev": "80bdc1e5ce51f56b19791b52b2901187931f5353", + "rev": "9dcb002ca1690658be4a04645215baea8b95f31d", "type": "github" }, "original": { @@ -141,11 +141,11 @@ ] }, "locked": { - "lastModified": 1772745558, - "narHash": "sha256-pVmX5Z0PLUZIL7TFcfYyWNqEKDVf72bAz0PORyNQHSQ=", + "lastModified": 1773086064, + "narHash": "sha256-w5cbHv8jVS+1iD7xPokoT3XPUnkiAxFCUtW2KEwgU5s=", "owner": "nix-community", "repo": "NUR", - "rev": "361709a61eebc0b1783dd478677b7ac4e1efa0a2", + "rev": "e5b002c3d53b380695fd161e6562570ed8e7d01d", "type": "github" }, "original": { @@ -173,11 +173,11 @@ ] }, "locked": { - "lastModified": 1772638901, - "narHash": "sha256-kzAyU054Mzpnzgx475MgmcjYJXxXWQWBG7LLsYtHXKw=", + "lastModified": 1772945022, + "narHash": "sha256-Fv14NttjL/7xfi6eVwrSEBAyBvDjI00RLiRNqA5apcw=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "75de12ddd50616a3628499ec18b648bceb88eb0d", + "rev": "3a6a5ca7fb48cc8fd8183386506a06579d1d79dc", "type": "github" }, "original": { From b241067fae43fa3dd6e1d20eeaddc0050986b5e3 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Mon, 9 Mar 2026 15:51:57 -0700 Subject: [PATCH 118/211] feat: fix helix syntax error --- home.nix | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/home.nix b/home.nix index f3b9ad6..15d1bec 100644 --- a/home.nix +++ b/home.nix @@ -124,25 +124,13 @@ line-number = "relative"; lsp.display-messages = true; lsp.display-inlay-hints = true; + end-of-line-diagnostics = "hint"; + inline-diagnostics = { + cursor-line = "hint"; + other-lines = "hint"; + }; }; }; - languages = { - language = - map - (name: { - inherit name; - end-of-line-diagnostics = "hint"; - inline-diagnostics = { - cursor-line = "hint"; - other-lines = "hint"; - }; - }) - [ - "rust" - "typescript" - "nix" - ]; - }; }; programs.zellij = { From f88ec598fc0caba7da811136788353338040f17a Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Mon, 9 Mar 2026 15:53:37 -0700 Subject: [PATCH 119/211] fix: add host platform instead of system --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index beae9c2..301f9d1 100644 --- a/flake.nix +++ b/flake.nix @@ -34,8 +34,8 @@ formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt; nixosConfigurations = { framework = nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; modules = [ + { nixpkgs.hostPlatform = "x86_64-linux"; } ./configuration.nix nixos-hardware.nixosModules.framework-amd-ai-300-series home-manager.nixosModules.home-manager From 583d7f912d37fe8da1714b1e162603187480345e Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Tue, 10 Mar 2026 12:58:21 -0700 Subject: [PATCH 120/211] update: nfu --- flake.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/flake.lock b/flake.lock index 2139a8d..cfe2951 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1772841847, - "narHash": "sha256-Qre73BGBcw1YlhBTTT+T/rVoqVtlCgHYYExUreIJoYs=", + "lastModified": 1773106201, + "narHash": "sha256-p5JuCe5wywjp2oanroCOzH+kzKCFt7rpJDg+lVykSjw=", "owner": "ryoppippi", "repo": "claude-code-overlay", - "rev": "871c9fa0d37c0d6b3bdbf30341a8d08a75b1793b", + "rev": "a6293ea4b12f65545c21357c1df4dcb885f0de6e", "type": "github" }, "original": { @@ -48,11 +48,11 @@ ] }, "locked": { - "lastModified": 1772985285, - "narHash": "sha256-wEEmvfqJcl9J0wyMgMrj1TixOgInBW/6tLPhWGoZE3s=", + "lastModified": 1773093840, + "narHash": "sha256-u/96NoAyN8BSRuM3ZimGf7vyYgXa3pLx4MYWjokuoH4=", "owner": "nix-community", "repo": "home-manager", - "rev": "5be5d8245cbc7bc0c09fbb5f38f23f223c543f85", + "rev": "bb014746edb2a98d975abde4dd40fa240de4cf86", "type": "github" }, "original": { @@ -141,11 +141,11 @@ ] }, "locked": { - "lastModified": 1773086064, - "narHash": "sha256-w5cbHv8jVS+1iD7xPokoT3XPUnkiAxFCUtW2KEwgU5s=", + "lastModified": 1773172220, + "narHash": "sha256-9vfQ3gOW043q1huw1PE0K9WsGjtgtvgPON7uB/7Z4Ok=", "owner": "nix-community", "repo": "NUR", - "rev": "e5b002c3d53b380695fd161e6562570ed8e7d01d", + "rev": "f683c10b22ac7d5a6b4474dd48842e70a44226de", "type": "github" }, "original": { @@ -173,11 +173,11 @@ ] }, "locked": { - "lastModified": 1772945022, - "narHash": "sha256-Fv14NttjL/7xfi6eVwrSEBAyBvDjI00RLiRNqA5apcw=", + "lastModified": 1773117756, + "narHash": "sha256-47P/mNwhBao57SDfEMQqWPrK8GEUCcVj/Bb24390BDk=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "3a6a5ca7fb48cc8fd8183386506a06579d1d79dc", + "rev": "bb5e69d7f82c0a58ad11b5ae46755c44772e335c", "type": "github" }, "original": { From d9ff0501d112da7482aa0c7f915a8f13982417e7 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Tue, 10 Mar 2026 13:47:17 -0700 Subject: [PATCH 121/211] feat: add linphone --- home.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/home.nix b/home.nix index 15d1bec..e397bc6 100644 --- a/home.nix +++ b/home.nix @@ -98,6 +98,7 @@ vesktop vlc zulip + linphone # Fonts nerd-fonts.commit-mono From 6799bb8941a64556c8c7209a583900d1c8fffc4d Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Tue, 10 Mar 2026 15:19:14 -0700 Subject: [PATCH 122/211] feat: add allowlist for claude --- home.nix | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/home.nix b/home.nix index e397bc6..d382a7d 100644 --- a/home.nix +++ b/home.nix @@ -396,6 +396,19 @@ }; }; + home.file.".claude/settings.json".text = builtins.toJSON { + allowedTools = [ + "Read" + "Glob" + "Grep" + "Write" + "Edit" + "Agent" + "WebFetch" + "WebSearch" + ]; + }; + gtk = { enable = true; gtk3.extraConfig.gtk-application-prefer-dark-theme = 1; From 237277ac5b0ac9ed35fb4c91ae42d88ac917d609 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Wed, 11 Mar 2026 13:15:40 -0700 Subject: [PATCH 123/211] fix: formatting and unused services --- configuration.nix | 12 ++----- flake.nix | 92 ++++++++++++++++++++++++----------------------- home.nix | 11 ++++++ 3 files changed, 61 insertions(+), 54 deletions(-) diff --git a/configuration.nix b/configuration.nix index 9440909..8c7cb79 100644 --- a/configuration.nix +++ b/configuration.nix @@ -33,8 +33,6 @@ time.timeZone = "America/Los_Angeles"; i18n.defaultLocale = "en_US.UTF-8"; - services.xserver.enable = true; - # Framework Laptop 13 AMD AI 300 Series specific configurations # Enable AMD GPU support and power management hardware.graphics = { @@ -78,6 +76,7 @@ services.displayManager.gdm.enable = true; services.desktopManager.gnome.enable = true; + services.gnome.sushi.enable = true; # Remove default GNOME apps (keeping loupe and file-roller) environment.gnome.excludePackages = with pkgs; [ @@ -104,10 +103,6 @@ nautilus # Using Nemo ]; - services.xserver.xkb = { - layout = "us"; - }; - services.printing.enable = true; services.pulseaudio.enable = false; @@ -191,7 +186,7 @@ }; }; -# Disable power-profiles-daemon (conflicts with auto-cpufreq) + # Disable power-profiles-daemon (conflicts with auto-cpufreq) services.power-profiles-daemon.enable = false; # Enable power management (governor managed dynamically by auto-cpufreq) @@ -206,7 +201,7 @@ # RAM optimizations for 96GB system boot.kernel.sysctl = { -"vm.vfs_cache_pressure" = 50; # Keep more filesystem cache in RAM + "vm.vfs_cache_pressure" = 50; # Keep more filesystem cache in RAM "vm.dirty_ratio" = 15; # Write to disk when 15% of RAM is dirty "vm.dirty_background_ratio" = 5; # Start writing when 5% dirty }; @@ -224,7 +219,6 @@ }; environment.systemPackages = with pkgs; [ - git wget nh ]; diff --git a/flake.nix b/flake.nix index 301f9d1..12257cb 100644 --- a/flake.nix +++ b/flake.nix @@ -24,51 +24,53 @@ }; }; - outputs = inputs@{ - self, - nixpkgs, - home-manager, - nixos-hardware, - ... - }: { - formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt; - nixosConfigurations = { - framework = nixpkgs.lib.nixosSystem { - modules = [ - { nixpkgs.hostPlatform = "x86_64-linux"; } - ./configuration.nix - nixos-hardware.nixosModules.framework-amd-ai-300-series - home-manager.nixosModules.home-manager - inputs.nix-index-database.nixosModules.default - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.backupFileExtension = "backup"; - home-manager.extraSpecialArgs = { inherit inputs; }; - home-manager.users.jet = import ./home.nix; - } - { - nixpkgs.overlays = [ - inputs.nur.overlays.default - inputs.claude-code-overlay.overlays.default - ]; - } - ]; + outputs = + inputs@{ + self, + nixpkgs, + home-manager, + nixos-hardware, + ... + }: + { + formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt; + nixosConfigurations = { + framework = nixpkgs.lib.nixosSystem { + modules = [ + { nixpkgs.hostPlatform = "x86_64-linux"; } + ./configuration.nix + nixos-hardware.nixosModules.framework-amd-ai-300-series + home-manager.nixosModules.home-manager + inputs.nix-index-database.nixosModules.default + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.backupFileExtension = "backup"; + home-manager.extraSpecialArgs = { inherit inputs; }; + home-manager.users.jet = import ./home.nix; + } + { + nixpkgs.overlays = [ + inputs.nur.overlays.default + inputs.claude-code-overlay.overlays.default + ]; + } + ]; + }; }; - }; - devShells.x86_64-linux.default = - let - pkgs = nixpkgs.legacyPackages.x86_64-linux; - nhs = pkgs.writeShellScriptBin "nhs" '' - nh os switch --hostname framework --impure path:. "$@" - ''; - in - pkgs.mkShell { - packages = [ - pkgs.nh - nhs - ]; - }; - }; + devShells.x86_64-linux.default = + let + pkgs = nixpkgs.legacyPackages.x86_64-linux; + nhs = pkgs.writeShellScriptBin "nhs" '' + nh os switch --hostname framework --impure path:. "$@" + ''; + in + pkgs.mkShell { + packages = [ + pkgs.nh + nhs + ]; + }; + }; } diff --git a/home.nix b/home.nix index d382a7d..720b4f7 100644 --- a/home.nix +++ b/home.nix @@ -116,6 +116,17 @@ TERMINAL = "kitty"; }; + programs.git = { + enable = true; + userName = "Jet Pham"; + userEmail = "jet@extremist.software"; + signing = { + key = "~/.ssh/id_ed25519.pub"; + signByDefault = true; + format = "ssh"; + }; + }; + programs.helix = { enable = true; defaultEditor = true; From ecf60cb4d5150b2ffd6a15ea317e7dec68a8a15f Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Wed, 11 Mar 2026 13:24:39 -0700 Subject: [PATCH 124/211] feat: allow suspend on powerkey and remove comment --- configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configuration.nix b/configuration.nix index 8c7cb79..9405013 100644 --- a/configuration.nix +++ b/configuration.nix @@ -162,13 +162,13 @@ }; # Power management for laptop - # Configure lid switch behavior - suspend (no swap needed with 96GB RAM) services.logind = { settings = { Login = { HandleLidSwitch = "suspend"; HandleLidSwitchExternalPower = "suspend"; HandleLidSwitchDocked = "ignore"; + HandlePowerKey = "suspend"; }; }; }; From 303ca6e8f8ea5262c522008bbfec66273657fc0c Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Fri, 13 Mar 2026 16:42:05 -0700 Subject: [PATCH 125/211] update: nfu --- flake.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/flake.lock b/flake.lock index cfe2951..db5f926 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1773106201, - "narHash": "sha256-p5JuCe5wywjp2oanroCOzH+kzKCFt7rpJDg+lVykSjw=", + "lastModified": 1773421797, + "narHash": "sha256-oj5EbWTbF7derFNC/z1A9uEvL3H4ojdRLlc9CIaNoIw=", "owner": "ryoppippi", "repo": "claude-code-overlay", - "rev": "a6293ea4b12f65545c21357c1df4dcb885f0de6e", + "rev": "ae63d8715f6a0add50290876dfbd64798dfd4f15", "type": "github" }, "original": { @@ -48,11 +48,11 @@ ] }, "locked": { - "lastModified": 1773093840, - "narHash": "sha256-u/96NoAyN8BSRuM3ZimGf7vyYgXa3pLx4MYWjokuoH4=", + "lastModified": 1773422513, + "narHash": "sha256-MPjR48roW7CUMU6lu0+qQGqj92Kuh3paIulMWFZy+NQ=", "owner": "nix-community", "repo": "home-manager", - "rev": "bb014746edb2a98d975abde4dd40fa240de4cf86", + "rev": "ef12a9a2b0f77c8fa3dda1e7e494fca668909056", "type": "github" }, "original": { @@ -119,11 +119,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1772963539, - "narHash": "sha256-9jVDGZnvCckTGdYT53d/EfznygLskyLQXYwJLKMPsZs=", + "lastModified": 1773282481, + "narHash": "sha256-b/GV2ysM8mKHhinse2wz+uP37epUrSE+sAKXy/xvBY4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "9dcb002ca1690658be4a04645215baea8b95f31d", + "rev": "fe416aaedd397cacb33a610b33d60ff2b431b127", "type": "github" }, "original": { @@ -141,11 +141,11 @@ ] }, "locked": { - "lastModified": 1773172220, - "narHash": "sha256-9vfQ3gOW043q1huw1PE0K9WsGjtgtvgPON7uB/7Z4Ok=", + "lastModified": 1773436970, + "narHash": "sha256-8W7J/EvtAvO4x8X2ebGE/hJns85fT6fHIdKrKf9/EII=", "owner": "nix-community", "repo": "NUR", - "rev": "f683c10b22ac7d5a6b4474dd48842e70a44226de", + "rev": "18e764719da8c51f8c69c5ea0f96c02e4e384d16", "type": "github" }, "original": { @@ -173,11 +173,11 @@ ] }, "locked": { - "lastModified": 1773117756, - "narHash": "sha256-47P/mNwhBao57SDfEMQqWPrK8GEUCcVj/Bb24390BDk=", + "lastModified": 1773290887, + "narHash": "sha256-L1yMYmFffHfZNP+hKJGRBmrFKkn/VDhu7jEbVftBQuM=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "bb5e69d7f82c0a58ad11b5ae46755c44772e335c", + "rev": "9346698c4562819f61b4e5097151ec0b17729fab", "type": "github" }, "original": { From 3a1bfec41b7f0a4dcb564f41cf6235033f561d33 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Fri, 13 Mar 2026 23:20:05 -0700 Subject: [PATCH 126/211] feat: update git setting --- home.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.nix b/home.nix index 720b4f7..c612b75 100644 --- a/home.nix +++ b/home.nix @@ -118,8 +118,8 @@ programs.git = { enable = true; - userName = "Jet Pham"; - userEmail = "jet@extremist.software"; + settings.user.name = "Jet"; + settings.user.email = "jet@extremist.software"; signing = { key = "~/.ssh/id_ed25519.pub"; signByDefault = true; From 391582525884b653260131b18807f1a61ef97753 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sat, 14 Mar 2026 17:20:21 -0700 Subject: [PATCH 127/211] feat: a ton of performance and qol improvements --- configuration.nix | 10 ++++++++-- home.nix | 20 ++++++++++++++++++-- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/configuration.nix b/configuration.nix index 9405013..1a93090 100644 --- a/configuration.nix +++ b/configuration.nix @@ -6,7 +6,8 @@ boot.loader.systemd-boot.enable = true; boot.loader.systemd-boot.configurationLimit = 3; boot.loader.efi.canTouchEfiVariables = true; - boot.loader.timeout = 0; + boot.loader.timeout = 1; + boot.loader.systemd-boot.consoleMode = "max"; networking.hostName = "framework"; @@ -142,8 +143,10 @@ # Enable periodic TRIM for NVMe/SSD health services.fstrim.enable = true; + services.irqbalance.enable = true; + services.earlyoom.enable = true; - # Keep only last 10 generations, GC everything else (daily) + # Keep only last 3 generations, GC everything else (daily) systemd.services.nix-cleanup = { description = "Nix generation cleanup and garbage collection"; serviceConfig.Type = "oneshot"; @@ -204,6 +207,9 @@ "vm.vfs_cache_pressure" = 50; # Keep more filesystem cache in RAM "vm.dirty_ratio" = 15; # Write to disk when 15% of RAM is dirty "vm.dirty_background_ratio" = 5; # Start writing when 5% dirty + "kernel.nmi_watchdog" = 0; + "net.core.default_qdisc" = "fq"; + "net.ipv4.tcp_congestion_control" = "bbr"; }; # Use RAM disk (tmpfs) for temporary files - much faster than disk diff --git a/home.nix b/home.nix index c612b75..a4ab962 100644 --- a/home.nix +++ b/home.nix @@ -66,13 +66,17 @@ # CLI bat claude-code + fd + btop fastfetch gh hyfetch + jq mkp224o nixfmt ripgrep tea + trash-cli tree unzip @@ -145,6 +149,11 @@ }; }; + programs.starship = { + enable = true; + enableBashIntegration = true; + }; + programs.zellij = { enable = true; enableBashIntegration = true; @@ -177,6 +186,11 @@ ]; }; + programs.fzf = { + enable = true; + enableBashIntegration = true; + }; + programs.zoxide = { enable = true; enableBashIntegration = true; @@ -190,6 +204,7 @@ programs.bash = { enable = true; + enableCompletion = true; shellAliases = { "dr" = "direnv reload"; "da" = "direnv allow"; @@ -212,6 +227,7 @@ jdiff = "jj diff"; jsq = "jj squash"; h = "hx"; + t = "trash"; vanity = "mkp224o-amd64-64-24k -d noisebridgevanitytor noisebridge{2..7}"; }; initExtra = '' @@ -250,8 +266,8 @@ settings = { remotes.origin.auto-track-bookmarks = "glob:*"; user = { - email = "jetthomaspham@gmail.com"; - name = "Jet Pham"; + email = "jet@extremist.software"; + name = "Jet"; }; signing = { From 755ec04d04bdc9b47a6c7c7a73111b7d125efe69 Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Sat, 14 Mar 2026 17:24:36 -0700 Subject: [PATCH 128/211] feat: add difftastic --- home.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.nix b/home.nix index a4ab962..2c14eb4 100644 --- a/home.nix +++ b/home.nix @@ -74,6 +74,7 @@ jq mkp224o nixfmt + difftastic ripgrep tea trash-cli @@ -284,6 +285,7 @@ editor = "hx"; pager = "bat --style=plain"; }; + diff.tool = [ "difft" "--color=always" "$left" "$right" ]; }; }; From 009cd16749414171d1dfeac19760f42ba454876d Mon Sep 17 00:00:00 2001 From: Jet Date: Sat, 14 Mar 2026 17:53:58 -0700 Subject: [PATCH 129/211] feat: configure startship --- home.nix | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/home.nix b/home.nix index 2c14eb4..0b8fd73 100644 --- a/home.nix +++ b/home.nix @@ -153,6 +153,13 @@ programs.starship = { enable = true; enableBashIntegration = true; + settings = { + cmd_duration.min_time = 500; + directory.truncation_length = 3; + nix_shell.format = "[$symbol]($style) "; + battery.disabled = false; + git_branch.disabled = true; + }; }; programs.zellij = { From 21a99a829cd19e80516ab2c77c562b88fb50d95a Mon Sep 17 00:00:00 2001 From: Jet Date: Sat, 14 Mar 2026 21:28:26 -0700 Subject: [PATCH 130/211] update: nfu --- flake.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/flake.lock b/flake.lock index db5f926..1ac23dc 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1773421797, - "narHash": "sha256-oj5EbWTbF7derFNC/z1A9uEvL3H4ojdRLlc9CIaNoIw=", + "lastModified": 1773451814, + "narHash": "sha256-ncqkZfGjNMNjnUHyBPqPCuM1IdlfbP+PTDw4eoJwbYM=", "owner": "ryoppippi", "repo": "claude-code-overlay", - "rev": "ae63d8715f6a0add50290876dfbd64798dfd4f15", + "rev": "0d9fb590af016130d71cf810ade72cdd7ab60f4c", "type": "github" }, "original": { @@ -104,11 +104,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1772972630, - "narHash": "sha256-mUJxsNOrBMNOUJzN0pfdVJ1r2pxeqm9gI/yIKXzVVbk=", + "lastModified": 1773533765, + "narHash": "sha256-qonGfS2lzCgCl59Zl63jF6dIRRpvW3AJooBGMaXjHiY=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "3966ce987e1a9a164205ac8259a5fe8a64528f72", + "rev": "f8e82243fd601afb9f59ad230958bd073795cbfe", "type": "github" }, "original": { @@ -119,11 +119,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1773282481, - "narHash": "sha256-b/GV2ysM8mKHhinse2wz+uP37epUrSE+sAKXy/xvBY4=", + "lastModified": 1773389992, + "narHash": "sha256-wvfdLLWJ2I9oEpDd9PfMA8osfIZicoQ5MT1jIwNs9Tk=", "owner": "nixos", "repo": "nixpkgs", - "rev": "fe416aaedd397cacb33a610b33d60ff2b431b127", + "rev": "c06b4ae3d6599a672a6210b7021d699c351eebda", "type": "github" }, "original": { @@ -141,11 +141,11 @@ ] }, "locked": { - "lastModified": 1773436970, - "narHash": "sha256-8W7J/EvtAvO4x8X2ebGE/hJns85fT6fHIdKrKf9/EII=", + "lastModified": 1773548407, + "narHash": "sha256-EoSCGCeW02BGOKyS37mwbJ+nMGRAwPx7cudMNe6+7c4=", "owner": "nix-community", "repo": "NUR", - "rev": "18e764719da8c51f8c69c5ea0f96c02e4e384d16", + "rev": "a2e1b895ef68dbb8198b9b737527bb45d542bf24", "type": "github" }, "original": { @@ -173,11 +173,11 @@ ] }, "locked": { - "lastModified": 1773290887, - "narHash": "sha256-L1yMYmFffHfZNP+hKJGRBmrFKkn/VDhu7jEbVftBQuM=", + "lastModified": 1773496078, + "narHash": "sha256-AAMjxIVrWJnn3STN38WOTcB3wtneHB0Rh+yGuek6anI=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "9346698c4562819f61b4e5097151ec0b17729fab", + "rev": "d296c2b39ec0b6528278d0bae2ead86d4749734c", "type": "github" }, "original": { From f09b4bbb3d621fc053d0412c73d601b97fb0f8fd Mon Sep 17 00:00:00 2001 From: Jet Date: Sat, 14 Mar 2026 23:01:17 -0700 Subject: [PATCH 131/211] feat: allow mouse movement while typing --- home.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.nix b/home.nix index 0b8fd73..78ededb 100644 --- a/home.nix +++ b/home.nix @@ -35,7 +35,7 @@ show-hidden = true; }; "org/gnome/desktop/peripherals/touchpad" = { - disable-while-typing = true; + disable-while-typing = false; }; "org/gnome/shell" = { disable-user-extensions = false; From 25e1ea91bd8e616526fbf98d3799f3be1620d1e0 Mon Sep 17 00:00:00 2001 From: Jet Date: Sun, 15 Mar 2026 14:36:29 -0700 Subject: [PATCH 132/211] fix: remove impure --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 12257cb..5faf8c9 100644 --- a/flake.nix +++ b/flake.nix @@ -63,7 +63,7 @@ let pkgs = nixpkgs.legacyPackages.x86_64-linux; nhs = pkgs.writeShellScriptBin "nhs" '' - nh os switch --hostname framework --impure path:. "$@" + nh os switch --hostname framework path:. "$@" ''; in pkgs.mkShell { From bf4cd75c19a140d1ef5fab495ac39cae2341f602 Mon Sep 17 00:00:00 2001 From: Jet Date: Sun, 15 Mar 2026 14:36:29 -0700 Subject: [PATCH 133/211] feat: make the starship prompt clearner --- home.nix | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/home.nix b/home.nix index 78ededb..e6812f7 100644 --- a/home.nix +++ b/home.nix @@ -154,11 +154,14 @@ enable = true; enableBashIntegration = true; settings = { - cmd_duration.min_time = 500; + format = "$directory$git_status$nix_shell$cmd_duration$line_break$character"; directory.truncation_length = 3; - nix_shell.format = "[$symbol]($style) "; - battery.disabled = false; + git_status.style = "red"; git_branch.disabled = true; + nix_shell.format = "[$symbol]($style) "; + cmd_duration.min_time = 500; + character.success_symbol = "[❯](bold green)"; + character.error_symbol = "[❯](bold red)"; }; }; From 8fed12f03aa8dd7a22e7849f363cbc03589ad6e6 Mon Sep 17 00:00:00 2001 From: Jet Date: Sun, 15 Mar 2026 14:36:29 -0700 Subject: [PATCH 134/211] feat: make bash have better history management --- home.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/home.nix b/home.nix index e6812f7..530e164 100644 --- a/home.nix +++ b/home.nix @@ -216,6 +216,10 @@ programs.bash = { enable = true; enableCompletion = true; + historyControl = [ "ignoredups" "erasedups" ]; + historySize = 50000; + historyFileSize = 100000; + shellOptions = [ "histappend" "checkwinsize" "globstar" ]; shellAliases = { "dr" = "direnv reload"; "da" = "direnv allow"; From 8214fba9da3838ebfc92f222ce51e9118732c3cb Mon Sep 17 00:00:00 2001 From: Jet Date: Sun, 15 Mar 2026 14:36:29 -0700 Subject: [PATCH 135/211] make ctrl v more default --- home.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/home.nix b/home.nix index 530e164..21cc81c 100644 --- a/home.nix +++ b/home.nix @@ -271,7 +271,6 @@ keybindings = { "ctrl+shift+c" = "copy_and_clear_or_interrupt"; "ctrl+shift+v" = "paste_from_clipboard"; - "ctrl+v" = "paste_from_clipboard"; }; themeFile = "GitHub_Dark_High_Contrast"; }; From 8344ad81e05be67d5a317bf6f9a51b7d48c8cf97 Mon Sep 17 00:00:00 2001 From: Jet Date: Sun, 15 Mar 2026 14:36:29 -0700 Subject: [PATCH 136/211] feat: enable declarative dirs for xdg --- home.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.nix b/home.nix index 21cc81c..adc2d5d 100644 --- a/home.nix +++ b/home.nix @@ -451,6 +451,8 @@ ]; }; + xdg.userDirs.enable = true; + gtk = { enable = true; gtk3.extraConfig.gtk-application-prefer-dark-theme = 1; From f94a2c8bbbdf88c1da937b462ede2006d3ee360e Mon Sep 17 00:00:00 2001 From: Jet Date: Sun, 15 Mar 2026 16:54:04 -0700 Subject: [PATCH 137/211] fix: remove duped platform --- hardware-configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/hardware-configuration.nix b/hardware-configuration.nix index 09d89e5..cf136b9 100644 --- a/hardware-configuration.nix +++ b/hardware-configuration.nix @@ -34,6 +34,5 @@ networking.useDHCP = lib.mkDefault true; # networking.interfaces.wlp192s0.useDHCP = lib.mkDefault true; - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; } From ce860d063f93014a540ffcbd68210d7d8a49042d Mon Sep 17 00:00:00 2001 From: Jet Date: Sun, 15 Mar 2026 16:54:04 -0700 Subject: [PATCH 138/211] feat: dedupe name and email --- home.nix | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/home.nix b/home.nix index adc2d5d..c101546 100644 --- a/home.nix +++ b/home.nix @@ -5,6 +5,11 @@ ... }: +let + name = "Jet"; + email = "jet@extremist.software"; + sshSigningKey = "~/.ssh/id_ed25519.pub"; +in { imports = [ inputs.zen-browser.homeModules.default ]; @@ -123,10 +128,10 @@ programs.git = { enable = true; - settings.user.name = "Jet"; - settings.user.email = "jet@extremist.software"; + settings.user.name = name; + settings.user.email = email; signing = { - key = "~/.ssh/id_ed25519.pub"; + key = sshSigningKey; signByDefault = true; format = "ssh"; }; @@ -280,14 +285,13 @@ settings = { remotes.origin.auto-track-bookmarks = "glob:*"; user = { - email = "jet@extremist.software"; - name = "Jet"; + inherit email name; }; signing = { behavior = "own"; backend = "ssh"; - key = "~/.ssh/id_ed25519.pub"; + key = sshSigningKey; }; git = { From 5fe123a2ac757d169df6a7b96faba10c5471ce51 Mon Sep 17 00:00:00 2001 From: Jet Date: Mon, 16 Mar 2026 14:33:15 -0700 Subject: [PATCH 139/211] update: nfu --- flake.lock | 36 ++++++++++++++++++------------------ flake.nix | 5 +++++ 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/flake.lock b/flake.lock index 1ac23dc..50a5882 100644 --- a/flake.lock +++ b/flake.lock @@ -48,11 +48,11 @@ ] }, "locked": { - "lastModified": 1773422513, - "narHash": "sha256-MPjR48roW7CUMU6lu0+qQGqj92Kuh3paIulMWFZy+NQ=", + "lastModified": 1773681856, + "narHash": "sha256-+bRqxoFCJFO9ZTFhcCkzNXbDT3b8AEk88fyjB7Is6eo=", "owner": "nix-community", "repo": "home-manager", - "rev": "ef12a9a2b0f77c8fa3dda1e7e494fca668909056", + "rev": "57d5560ee92a424fb71fde800acd6ed2c725dfce", "type": "github" }, "original": { @@ -69,11 +69,11 @@ ] }, "locked": { - "lastModified": 1772330611, - "narHash": "sha256-UZjPc/d5XRxvjDbk4veAO4XFdvx6BUum2l40V688Xq8=", + "lastModified": 1773422513, + "narHash": "sha256-MPjR48roW7CUMU6lu0+qQGqj92Kuh3paIulMWFZy+NQ=", "owner": "nix-community", "repo": "home-manager", - "rev": "58fd7ff0eec2cda43e705c4c0585729ec471d400", + "rev": "ef12a9a2b0f77c8fa3dda1e7e494fca668909056", "type": "github" }, "original": { @@ -89,11 +89,11 @@ ] }, "locked": { - "lastModified": 1772945408, - "narHash": "sha256-PMt48sEQ8cgCeljQ9I/32uoBq/8t8y+7W/nAZhf72TQ=", + "lastModified": 1773552174, + "narHash": "sha256-mHSRNrT1rjeYBgkAlj07dW3+1nFEgAd8Gu6lgyfT9DU=", "owner": "nix-community", "repo": "nix-index-database", - "rev": "1c1d8ea87b047788fd7567adf531418c5da321ec", + "rev": "8faeb68130df077450451b6734a221ba0d6cde42", "type": "github" }, "original": { @@ -119,11 +119,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1773389992, - "narHash": "sha256-wvfdLLWJ2I9oEpDd9PfMA8osfIZicoQ5MT1jIwNs9Tk=", + "lastModified": 1773646010, + "narHash": "sha256-iYrs97hS7p5u4lQzuNWzuALGIOdkPXvjz7bviiBjUu8=", "owner": "nixos", "repo": "nixpkgs", - "rev": "c06b4ae3d6599a672a6210b7021d699c351eebda", + "rev": "5b2c2d84341b2afb5647081c1386a80d7a8d8605", "type": "github" }, "original": { @@ -141,11 +141,11 @@ ] }, "locked": { - "lastModified": 1773548407, - "narHash": "sha256-EoSCGCeW02BGOKyS37mwbJ+nMGRAwPx7cudMNe6+7c4=", + "lastModified": 1773695410, + "narHash": "sha256-UH3Gls2rmw7dxbCLx+Ckwxl6ZvfcbEli8/9XK2QTpWY=", "owner": "nix-community", "repo": "NUR", - "rev": "a2e1b895ef68dbb8198b9b737527bb45d542bf24", + "rev": "8f524deff7cdf1b4dd714ce64ea8b43819ff2718", "type": "github" }, "original": { @@ -173,11 +173,11 @@ ] }, "locked": { - "lastModified": 1773496078, - "narHash": "sha256-AAMjxIVrWJnn3STN38WOTcB3wtneHB0Rh+yGuek6anI=", + "lastModified": 1773695806, + "narHash": "sha256-HYmp4Ym/dlkRIPap7GFznNUNuDTTW0iIcOtHmhRzl3w=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "d296c2b39ec0b6528278d0bae2ead86d4749734c", + "rev": "ced61240cc38dee9e659a7ced0cd9a839c6085d3", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 5faf8c9..d730a1f 100644 --- a/flake.nix +++ b/flake.nix @@ -53,6 +53,11 @@ nixpkgs.overlays = [ inputs.nur.overlays.default inputs.claude-code-overlay.overlays.default + (final: prev: { + zulip = prev.zulip.override { + electron_39 = final.electron_38; + }; + }) ]; } ]; From f69c065ca3bc0e599855db0daf2fe78d2457c256 Mon Sep 17 00:00:00 2001 From: Jet Date: Mon, 16 Mar 2026 17:48:13 -0700 Subject: [PATCH 140/211] feat: change up the function keys --- configuration.nix | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/configuration.nix b/configuration.nix index 1a93090..ceba3e5 100644 --- a/configuration.nix +++ b/configuration.nix @@ -53,6 +53,28 @@ esc = "capslock"; leftalt = "leftcontrol"; leftcontrol = "leftalt"; + mute = "mute"; # ← Key 1: mute + volumedown = "playpause"; # ← Key 2: play/pause + volumeup = "volumedown"; # ← Key 3: vol down + previoussong = "volumeup"; # ← Key 4: vol up + playpause = "command(touch /tmp/keyd-f5-test)"; # ← Key 5: lock screen (testing) + nextsong = "noop"; # ← Key 6: disabled + brightnessdown = "noop"; # ← Key 7: disabled + brightnessup = "noop"; # ← Key 8: disabled + # Key 9: display toggle (leftmeta+p) - disabled below + rfkill = "brightnessdown"; # ← Key 10: brightness down + sysrq = "brightnessup"; # ← Key 11: brightness up + media = "sysrq"; # ← Key 12: screenshot + }; + }; + }; + frameworkRadio = { + ids = [ "32ac:0006" ]; + settings = { + main = { + brightnessdown = "noop"; # ← Key 7: disabled + brightnessup = "noop"; # ← Key 8: disabled + rfkill = "brightnessdown"; # ← Key 10: brightness down }; }; }; From 02d42ab4cd4150cee869dc748f5773c50be3e6f7 Mon Sep 17 00:00:00 2001 From: Jet Date: Mon, 16 Mar 2026 17:48:13 -0700 Subject: [PATCH 141/211] feat: configure thunderbird --- home.nix | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 91 insertions(+), 1 deletion(-) diff --git a/home.nix b/home.nix index c101546..746f3a9 100644 --- a/home.nix +++ b/home.nix @@ -104,7 +104,6 @@ in prismlauncher qbittorrent-enhanced signal-desktop - thunderbird vesktop vlc zulip @@ -442,6 +441,97 @@ in }; }; + programs.thunderbird = { + enable = true; + profiles.default = { + isDefault = true; + settings = { + # Use maildir instead of mbox — faster for large mailboxes + "mail.serverDefaultStoreContractID" = "@mozilla.org/msgstore/maildirstore;1"; + + # Increase IMAP connection limits + "mail.server.default.max_cached_connections" = 10; + "mail.imap.max_cached_connections" = 10; + + # IMAP IDLE — server pushes new mail instantly (no polling delay) + "mail.server.default.use_idle" = true; + + # Poll every 1 minute as fallback when IDLE drops + "mail.server.default.check_new_mail" = true; + "mail.server.default.check_time" = 1; + + # Faster IMAP sync + "mail.imap.min_time_between_cleanups" = 300; + "mail.imap.fetch_by_chunks" = true; + "mail.imap.chunk_size" = 65536; + "mail.imap.chunk_add" = 16384; + + # Reduce timeouts (fail fast instead of hanging) + "mail.server.default.timeout" = 60; + "mailnews.tcptimeout" = 60; + + # Network performance + "network.http.max-connections" = 48; + "network.http.max-persistent-connections-per-server" = 10; + "network.dns.disablePrefetch" = false; + + # Cache messages offline for instant reading + "mail.server.default.offline_download" = true; + "mail.server.default.download_on_biff" = true; + + # Auto-compact folders when >20MB wasted (keeps mbox files lean) + "mail.purge_threshhold_mb" = 20; + "mail.prompt_purge_threshhold" = false; + + # Block remote content by default (tracking pixels, slow image loads) + "mailnews.message_display.disable_remote_image" = true; + + # Disable adaptive junk filter (server-side spam is better) + "mail.spam.manualMark" = true; + "mailnews.ui.junk.firstuse" = false; + "mailnews.ui.junk.manualMarkAsJunkMarksRead" = true; + + # Prefetch next message while reading current one + "mail.server.default.autosync_offline_stores" = true; + + # Open links in default browser (Zen) instead of Thunderbird's internal browser + "network.protocol-handler.warn-external.http" = false; + "network.protocol-handler.warn-external.https" = false; + "network.protocol-handler.expose-all" = true; + + # Simplify message rendering + "mailnews.display.prefer_plaintext" = false; + "mailnews.display.disallow_mime_handlers" = 0; + "mailnews.display.html_as" = 0; + + # Disable return receipt prompts + "mail.incorporate.return_receipt" = 0; + "mail.receipt.request_return_receipt_on" = false; + + # Disable chat and calendar background connections + "mail.chat.enabled" = false; + "calendar.integration.notify" = false; + + # Disable unnecessary features + "mail.phishing.detection.enabled" = false; + "mail.rights.version" = 1; + "mail.shell.checkDefaultClient" = false; + "mail.spotlight.enable" = false; + + # Faster UI rendering + "gfx.webrender.all" = true; + + # Network keepalive + "network.http.keep-alive.timeout" = 600; + "network.http.response.timeout" = 120; + + # Fix UI not updating after delete/archive — move to next message automatically + "mail.delete_matches_sort_order" = true; + "mail.advance_on_delete" = true; + }; + }; + }; + home.file.".claude/settings.json".text = builtins.toJSON { allowedTools = [ "Read" From ef50c36670f02f6669aca7339d268053df33ded8 Mon Sep 17 00:00:00 2001 From: Jet Date: Tue, 17 Mar 2026 01:01:30 -0700 Subject: [PATCH 142/211] feat: add qemu for aarch64 simulation --- configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/configuration.nix b/configuration.nix index ceba3e5..4afe063 100644 --- a/configuration.nix +++ b/configuration.nix @@ -8,6 +8,7 @@ boot.loader.efi.canTouchEfiVariables = true; boot.loader.timeout = 1; boot.loader.systemd-boot.consoleMode = "max"; + boot.binfmt.emulatedSystems = [ "aarch64-linux" ]; networking.hostName = "framework"; From 0d2afb65b702fa3cce43aa9595bf2b037da2b312 Mon Sep 17 00:00:00 2001 From: Jet Date: Tue, 17 Mar 2026 02:26:58 -0700 Subject: [PATCH 143/211] feat: add dj alias to control noisebridge speakers --- home.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.nix b/home.nix index 746f3a9..d5bcb57 100644 --- a/home.nix +++ b/home.nix @@ -70,6 +70,7 @@ in home.packages = with pkgs; [ # CLI bat + ffmpeg-full claude-code fd btop @@ -248,6 +249,7 @@ in h = "hx"; t = "trash"; vanity = "mkp224o-amd64-64-24k -d noisebridgevanitytor noisebridge{2..7}"; + dj = "ffmpeg -f pulse -i alsa_output.pci-0000_c1_00.6.analog-stereo.monitor -ac 2 -ar 44100 -acodec libmp3lame -b:a 128k -content_type audio/mpeg -f mp3 'icecast://nbradio:nbradio@beyla:8005/live'"; }; initExtra = '' # Automatically list directory contents when changing directories From 4ad63d79811a33786a85074228a3665e006564f1 Mon Sep 17 00:00:00 2001 From: Jet Date: Tue, 17 Mar 2026 16:03:25 -0700 Subject: [PATCH 144/211] update: nfu --- flake.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/flake.lock b/flake.lock index 50a5882..d15dc98 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1773451814, - "narHash": "sha256-ncqkZfGjNMNjnUHyBPqPCuM1IdlfbP+PTDw4eoJwbYM=", + "lastModified": 1773711031, + "narHash": "sha256-S7jOY+xHm8Y8N6Amm663/saMZ+VSGBGZfWiQrkVyXQM=", "owner": "ryoppippi", "repo": "claude-code-overlay", - "rev": "0d9fb590af016130d71cf810ade72cdd7ab60f4c", + "rev": "19b4712c89218e578e93b32143e51f70022a7bfb", "type": "github" }, "original": { @@ -141,11 +141,11 @@ ] }, "locked": { - "lastModified": 1773695410, - "narHash": "sha256-UH3Gls2rmw7dxbCLx+Ckwxl6ZvfcbEli8/9XK2QTpWY=", + "lastModified": 1773785107, + "narHash": "sha256-AO9pqTrp/m+pPbobe9ISKOQaSqPCXLJ87A+ADVVuJyg=", "owner": "nix-community", "repo": "NUR", - "rev": "8f524deff7cdf1b4dd714ce64ea8b43819ff2718", + "rev": "ec8410da639a9b314f867cfe808e6b9912a575b4", "type": "github" }, "original": { @@ -173,11 +173,11 @@ ] }, "locked": { - "lastModified": 1773695806, - "narHash": "sha256-HYmp4Ym/dlkRIPap7GFznNUNuDTTW0iIcOtHmhRzl3w=", + "lastModified": 1773737882, + "narHash": "sha256-P6k0BtT1/idYveVRdcwAZk8By9UjZW8XOMhSoS6wTBY=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "ced61240cc38dee9e659a7ced0cd9a839c6085d3", + "rev": "a7f1db35d74faf04e5189b3a32f890186ace5c28", "type": "github" }, "original": { From 9f919ad68e0c6b396b0478c41565e9e5ec312a64 Mon Sep 17 00:00:00 2001 From: Jet Date: Wed, 18 Mar 2026 16:40:39 -0700 Subject: [PATCH 145/211] feat: add tea-init script --- home.nix | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/home.nix b/home.nix index d5bcb57..59feda6 100644 --- a/home.nix +++ b/home.nix @@ -68,6 +68,20 @@ in }; home.packages = with pkgs; [ + # Scripts + (writeShellScriptBin "tea-init" '' + name="''${1:-$(basename "$PWD")}" + login="''${2:-git.extremist.software}" + user=$(tea logins list -o simple | awk -v l="$login" '$2 == "https://"l {print $4}') + if [ -z "$user" ]; then + echo "error: no tea login found for $login" >&2 + exit 1 + fi + tea repo create --name "$name" --login "$login" + git remote add origin "git@''${login}:''${user}/''${name}.git" + git push -u origin "$(git branch --show-current)" + '') + # CLI bat ffmpeg-full From 47b0643cdf2f619a585a23f4e1cc76be0b73f63c Mon Sep 17 00:00:00 2001 From: Jet Date: Wed, 18 Mar 2026 16:40:39 -0700 Subject: [PATCH 146/211] update: nfu --- flake.lock | 24 ++++++++++++------------ flake.nix | 5 ----- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/flake.lock b/flake.lock index d15dc98..2549491 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1773711031, - "narHash": "sha256-S7jOY+xHm8Y8N6Amm663/saMZ+VSGBGZfWiQrkVyXQM=", + "lastModified": 1773804142, + "narHash": "sha256-XiW/Tsauyig4Oog1yjxBAzTfO8HAiwtpT0uLh4QpVJ8=", "owner": "ryoppippi", "repo": "claude-code-overlay", - "rev": "19b4712c89218e578e93b32143e51f70022a7bfb", + "rev": "292f18fd1be3376acfa7e7238e4f5b4607700cd9", "type": "github" }, "original": { @@ -48,11 +48,11 @@ ] }, "locked": { - "lastModified": 1773681856, - "narHash": "sha256-+bRqxoFCJFO9ZTFhcCkzNXbDT3b8AEk88fyjB7Is6eo=", + "lastModified": 1773810247, + "narHash": "sha256-6Vz1Thy/1s7z+Rq5OfkWOBAdV4eD+OrvDs10yH6xJzQ=", "owner": "nix-community", "repo": "home-manager", - "rev": "57d5560ee92a424fb71fde800acd6ed2c725dfce", + "rev": "d47357a4c806d18a3e853ad2699eaec3c01622e7", "type": "github" }, "original": { @@ -119,11 +119,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1773646010, - "narHash": "sha256-iYrs97hS7p5u4lQzuNWzuALGIOdkPXvjz7bviiBjUu8=", + "lastModified": 1773734432, + "narHash": "sha256-IF5ppUWh6gHGHYDbtVUyhwy/i7D261P7fWD1bPefOsw=", "owner": "nixos", "repo": "nixpkgs", - "rev": "5b2c2d84341b2afb5647081c1386a80d7a8d8605", + "rev": "cda48547b432e8d3b18b4180ba07473762ec8558", "type": "github" }, "original": { @@ -141,11 +141,11 @@ ] }, "locked": { - "lastModified": 1773785107, - "narHash": "sha256-AO9pqTrp/m+pPbobe9ISKOQaSqPCXLJ87A+ADVVuJyg=", + "lastModified": 1773868362, + "narHash": "sha256-xKO8rtuLbWaZD9Wcbbrs94eqF9DCuTz18AZOEMRRups=", "owner": "nix-community", "repo": "NUR", - "rev": "ec8410da639a9b314f867cfe808e6b9912a575b4", + "rev": "9b4ccdf51c867b73a6dd9d03cd577e013b43ccd9", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index d730a1f..5faf8c9 100644 --- a/flake.nix +++ b/flake.nix @@ -53,11 +53,6 @@ nixpkgs.overlays = [ inputs.nur.overlays.default inputs.claude-code-overlay.overlays.default - (final: prev: { - zulip = prev.zulip.override { - electron_39 = final.electron_38; - }; - }) ]; } ]; From d0381a9dca2dfc4421443af40636a87c1c1cf1d4 Mon Sep 17 00:00:00 2001 From: Jet Date: Wed, 18 Mar 2026 17:06:39 -0700 Subject: [PATCH 147/211] fix: make tea-init use the ssh origin url --- home.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/home.nix b/home.nix index 59feda6..d74678f 100644 --- a/home.nix +++ b/home.nix @@ -78,8 +78,7 @@ in exit 1 fi tea repo create --name "$name" --login "$login" - git remote add origin "git@''${login}:''${user}/''${name}.git" - git push -u origin "$(git branch --show-current)" + git remote add origin "ssh://forgejo@''${login}/''${user}/''${name}.git" '') # CLI From e7460679458628f8e008283e9e5aa015b4d82c07 Mon Sep 17 00:00:00 2001 From: Jet Date: Wed, 18 Mar 2026 21:52:42 -0700 Subject: [PATCH 148/211] feat: add codex-cli to laptop config --- configuration.nix | 26 +++++++++--------- flake.lock | 55 ++++++++++++++++++++++++++++++++++++++ flake.nix | 4 +++ hardware-configuration.nix | 45 ++++++++++++++++++++----------- home.nix | 19 ++++++++++--- 5 files changed, 118 insertions(+), 31 deletions(-) diff --git a/configuration.nix b/configuration.nix index 4afe063..b42bb04 100644 --- a/configuration.nix +++ b/configuration.nix @@ -54,18 +54,18 @@ esc = "capslock"; leftalt = "leftcontrol"; leftcontrol = "leftalt"; - mute = "mute"; # ← Key 1: mute - volumedown = "playpause"; # ← Key 2: play/pause - volumeup = "volumedown"; # ← Key 3: vol down - previoussong = "volumeup"; # ← Key 4: vol up - playpause = "command(touch /tmp/keyd-f5-test)"; # ← Key 5: lock screen (testing) - nextsong = "noop"; # ← Key 6: disabled - brightnessdown = "noop"; # ← Key 7: disabled - brightnessup = "noop"; # ← Key 8: disabled + mute = "mute"; # ← Key 1: mute + volumedown = "playpause"; # ← Key 2: play/pause + volumeup = "volumedown"; # ← Key 3: vol down + previoussong = "volumeup"; # ← Key 4: vol up + playpause = "command(touch /tmp/keyd-f5-test)"; # ← Key 5: lock screen (testing) + nextsong = "noop"; # ← Key 6: disabled + brightnessdown = "noop"; # ← Key 7: disabled + brightnessup = "noop"; # ← Key 8: disabled # Key 9: display toggle (leftmeta+p) - disabled below - rfkill = "brightnessdown"; # ← Key 10: brightness down - sysrq = "brightnessup"; # ← Key 11: brightness up - media = "sysrq"; # ← Key 12: screenshot + rfkill = "brightnessdown"; # ← Key 10: brightness down + sysrq = "brightnessup"; # ← Key 11: brightness up + media = "sysrq"; # ← Key 12: screenshot }; }; }; @@ -73,8 +73,8 @@ ids = [ "32ac:0006" ]; settings = { main = { - brightnessdown = "noop"; # ← Key 7: disabled - brightnessup = "noop"; # ← Key 8: disabled + brightnessdown = "noop"; # ← Key 7: disabled + brightnessup = "noop"; # ← Key 8: disabled rfkill = "brightnessdown"; # ← Key 10: brightness down }; }; diff --git a/flake.lock b/flake.lock index 2549491..643b686 100644 --- a/flake.lock +++ b/flake.lock @@ -20,6 +20,27 @@ "type": "github" } }, + "codex-cli-nix": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773692150, + "narHash": "sha256-w95aHT9Q1Q3GfE4TR2El80g1Zn1wFOtMDhQhn5NQngo=", + "owner": "sadjow", + "repo": "codex-cli-nix", + "rev": "26a2d3fff58bd3d18e203f5e96f092c2f997883c", + "type": "github" + }, + "original": { + "owner": "sadjow", + "repo": "codex-cli-nix", + "type": "github" + } + }, "flake-parts": { "inputs": { "nixpkgs-lib": [ @@ -41,6 +62,24 @@ "type": "github" } }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -157,6 +196,7 @@ "root": { "inputs": { "claude-code-overlay": "claude-code-overlay", + "codex-cli-nix": "codex-cli-nix", "home-manager": "home-manager", "nix-index-database": "nix-index-database", "nixos-hardware": "nixos-hardware", @@ -165,6 +205,21 @@ "zen-browser": "zen-browser" } }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, "zen-browser": { "inputs": { "home-manager": "home-manager_2", diff --git a/flake.nix b/flake.nix index 5faf8c9..901c9f6 100644 --- a/flake.nix +++ b/flake.nix @@ -22,6 +22,10 @@ url = "github:ryoppippi/claude-code-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; + codex-cli-nix = { + url = "github:sadjow/codex-cli-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = diff --git a/hardware-configuration.nix b/hardware-configuration.nix index cf136b9..20e36c0 100644 --- a/hardware-configuration.nix +++ b/hardware-configuration.nix @@ -1,29 +1,44 @@ # 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, ... }: +{ + config, + lib, + pkgs, + modulesPath, + ... +}: { - imports = - [ (modulesPath + "/installer/scan/not-detected.nix") - ]; + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; - boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "sd_mod" ]; + boot.initrd.availableKernelModules = [ + "nvme" + "xhci_pci" + "thunderbolt" + "usb_storage" + "sd_mod" + ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ "kvm-amd" ]; boot.extraModulePackages = [ ]; - fileSystems."/" = - { device = "/dev/disk/by-uuid/687945b8-9e15-473d-b083-d3a3b12ac98f"; - fsType = "ext4"; - options = [ "noatime" ]; - }; + fileSystems."/" = { + device = "/dev/disk/by-uuid/687945b8-9e15-473d-b083-d3a3b12ac98f"; + fsType = "ext4"; + options = [ "noatime" ]; + }; - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/407C-573B"; - fsType = "vfat"; - options = [ "fmask=0077" "dmask=0077" ]; - }; + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/407C-573B"; + fsType = "vfat"; + options = [ + "fmask=0077" + "dmask=0077" + ]; + }; swapDevices = [ ]; diff --git a/home.nix b/home.nix index d74678f..ddf310f 100644 --- a/home.nix +++ b/home.nix @@ -85,6 +85,7 @@ in bat ffmpeg-full claude-code + inputs.codex-cli-nix.packages.${pkgs.stdenv.hostPlatform.system}.default fd btop fastfetch @@ -234,10 +235,17 @@ in programs.bash = { enable = true; enableCompletion = true; - historyControl = [ "ignoredups" "erasedups" ]; + historyControl = [ + "ignoredups" + "erasedups" + ]; historySize = 50000; historyFileSize = 100000; - shellOptions = [ "histappend" "checkwinsize" "globstar" ]; + shellOptions = [ + "histappend" + "checkwinsize" + "globstar" + ]; shellAliases = { "dr" = "direnv reload"; "da" = "direnv allow"; @@ -316,7 +324,12 @@ in editor = "hx"; pager = "bat --style=plain"; }; - diff.tool = [ "difft" "--color=always" "$left" "$right" ]; + diff.tool = [ + "difft" + "--color=always" + "$left" + "$right" + ]; }; }; From d1ea0060d8126c5a9270bb4f2008863506765cd6 Mon Sep 17 00:00:00 2001 From: Jet Date: Thu, 19 Mar 2026 00:37:39 -0700 Subject: [PATCH 149/211] update: nfu update --- flake.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/flake.lock b/flake.lock index 643b686..5cbf577 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1773804142, - "narHash": "sha256-XiW/Tsauyig4Oog1yjxBAzTfO8HAiwtpT0uLh4QpVJ8=", + "lastModified": 1774047888, + "narHash": "sha256-lUJ5dPga70KM1oj5vFEZm15PbojyrZ2nqJQ3C4bRSiY=", "owner": "ryoppippi", "repo": "claude-code-overlay", - "rev": "292f18fd1be3376acfa7e7238e4f5b4607700cd9", + "rev": "076a658308611db196d1a250d6fd7fe35ce620ad", "type": "github" }, "original": { @@ -28,11 +28,11 @@ ] }, "locked": { - "lastModified": 1773692150, - "narHash": "sha256-w95aHT9Q1Q3GfE4TR2El80g1Zn1wFOtMDhQhn5NQngo=", + "lastModified": 1773944613, + "narHash": "sha256-YPgI5DAfcwcWOjHGERsTha/SuuRt7l+oOTGT94G643s=", "owner": "sadjow", "repo": "codex-cli-nix", - "rev": "26a2d3fff58bd3d18e203f5e96f092c2f997883c", + "rev": "7937d799ae69e7ded828b8aef5d26e89fbbc817f", "type": "github" }, "original": { @@ -87,11 +87,11 @@ ] }, "locked": { - "lastModified": 1773810247, - "narHash": "sha256-6Vz1Thy/1s7z+Rq5OfkWOBAdV4eD+OrvDs10yH6xJzQ=", + "lastModified": 1774007980, + "narHash": "sha256-FOnZjElEI8pqqCvB6K/1JRHTE8o4rer8driivTpq2uo=", "owner": "nix-community", "repo": "home-manager", - "rev": "d47357a4c806d18a3e853ad2699eaec3c01622e7", + "rev": "9670de2921812bc4e0452f6e3efd8c859696c183", "type": "github" }, "original": { @@ -143,11 +143,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1773533765, - "narHash": "sha256-qonGfS2lzCgCl59Zl63jF6dIRRpvW3AJooBGMaXjHiY=", + "lastModified": 1774018263, + "narHash": "sha256-HHYEwK1A22aSaxv2ibhMMkKvrDGKGlA/qObG4smrSqc=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "f8e82243fd601afb9f59ad230958bd073795cbfe", + "rev": "2d4b4717b2534fad5c715968c1cece04a172b365", "type": "github" }, "original": { @@ -158,11 +158,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1773734432, - "narHash": "sha256-IF5ppUWh6gHGHYDbtVUyhwy/i7D261P7fWD1bPefOsw=", + "lastModified": 1773821835, + "narHash": "sha256-TJ3lSQtW0E2JrznGVm8hOQGVpXjJyXY2guAxku2O9A4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "cda48547b432e8d3b18b4180ba07473762ec8558", + "rev": "b40629efe5d6ec48dd1efba650c797ddbd39ace0", "type": "github" }, "original": { @@ -180,11 +180,11 @@ ] }, "locked": { - "lastModified": 1773868362, - "narHash": "sha256-xKO8rtuLbWaZD9Wcbbrs94eqF9DCuTz18AZOEMRRups=", + "lastModified": 1774067251, + "narHash": "sha256-kxPPIRaJsxGcPRUOO2sUbvloaVdRiSDD0cN2Fxoj7pg=", "owner": "nix-community", "repo": "NUR", - "rev": "9b4ccdf51c867b73a6dd9d03cd577e013b43ccd9", + "rev": "83ab96ae446c783b0dcf20b7eff35cf293faa0d4", "type": "github" }, "original": { From 31f93b5bc906b5b504ec86d01e43fdc1710b194c Mon Sep 17 00:00:00 2001 From: Jet Date: Thu, 19 Mar 2026 23:01:06 -0700 Subject: [PATCH 150/211] feat: add jet and root as trusted users --- configuration.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/configuration.nix b/configuration.nix index b42bb04..cd71e7d 100644 --- a/configuration.nix +++ b/configuration.nix @@ -155,6 +155,10 @@ "flakes" ]; auto-optimise-store = true; + trusted-users = [ + "root" + "jet" + ]; max-jobs = "auto"; cores = 0; build-users-group = "nixbld"; From de27df4ce26e589cea2f3fcbf423f35a0778f870 Mon Sep 17 00:00:00 2001 From: Jet Date: Thu, 19 Mar 2026 23:01:06 -0700 Subject: [PATCH 151/211] feat: add opencode and use simpler gc --- README.md | 5 +++++ configuration.nix | 31 ++++++++++++------------------- home.nix | 2 ++ 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index be46434..048ad14 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,8 @@ I've done nixos a few times but this time around it's been very comfterable. Nothing is really that special about it, but feel free to copy it! > silly language thing creddited to https://github.com/SylvanFranklin/.config + +This flake currently defines one host: `framework` which is my laptop. + +- system config lives in `configuration.nix` +- Home Manager config lives in `home.nix` diff --git a/configuration.nix b/configuration.nix index cd71e7d..0e97aee 100644 --- a/configuration.nix +++ b/configuration.nix @@ -90,6 +90,11 @@ AttrKeyboardIntegration=internal ''; + # Codex currently probes the conventional FHS bubblewrap path. + systemd.tmpfiles.rules = [ + "L+ /usr/bin/bwrap - - - - ${pkgs.bubblewrap}/bin/bwrap" + ]; + # Set Kitty as default terminal xdg.terminal-exec = { enable = true; @@ -154,7 +159,6 @@ "nix-command" "flakes" ]; - auto-optimise-store = true; trusted-users = [ "root" "jet" @@ -163,6 +167,12 @@ cores = 0; build-users-group = "nixbld"; }; + nix.gc = { + automatic = true; + dates = "daily"; + options = "--delete-older-than 7d"; + }; + nix.optimise.automatic = true; # Framework-specific services # Enable fwupd for BIOS updates (distributed through LVFS) @@ -173,24 +183,6 @@ services.irqbalance.enable = true; services.earlyoom.enable = true; - # Keep only last 3 generations, GC everything else (daily) - systemd.services.nix-cleanup = { - description = "Nix generation cleanup and garbage collection"; - serviceConfig.Type = "oneshot"; - script = '' - ${pkgs.nix}/bin/nix-env --delete-generations +3 -p /nix/var/nix/profiles/system - ${pkgs.nix}/bin/nix-env --delete-generations +3 -p /nix/var/nix/profiles/per-user/jet/home-manager || true - ${pkgs.nix}/bin/nix-store --gc - ''; - }; - systemd.timers.nix-cleanup = { - wantedBy = [ "timers.target" ]; - timerConfig = { - OnCalendar = "daily"; - Persistent = true; - }; - }; - # Power management for laptop services.logind = { settings = { @@ -252,6 +244,7 @@ }; environment.systemPackages = with pkgs; [ + bubblewrap wget nh ]; diff --git a/home.nix b/home.nix index ddf310f..e50402d 100644 --- a/home.nix +++ b/home.nix @@ -85,6 +85,7 @@ in bat ffmpeg-full claude-code + opencode inputs.codex-cli-nix.packages.${pkgs.stdenv.hostPlatform.system}.default fd btop @@ -251,6 +252,7 @@ in "da" = "direnv allow"; "nfu" = "nix flake update"; "c" = "claude"; + "o" = "opencode"; ".." = "z .."; j = "jj"; jgf = "jj git fetch"; From c0f379b126c786b4f7108dd78770acdd9539a882 Mon Sep 17 00:00:00 2001 From: Jet Date: Sat, 21 Mar 2026 21:15:02 -0700 Subject: [PATCH 152/211] update: nfu --- flake.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/flake.lock b/flake.lock index 5cbf577..4c71984 100644 --- a/flake.lock +++ b/flake.lock @@ -87,11 +87,11 @@ ] }, "locked": { - "lastModified": 1774007980, - "narHash": "sha256-FOnZjElEI8pqqCvB6K/1JRHTE8o4rer8driivTpq2uo=", + "lastModified": 1774135471, + "narHash": "sha256-TVeIGOxnfSPM6JvkRkXHpJECnj1OG2dXkWMSA4elzzQ=", "owner": "nix-community", "repo": "home-manager", - "rev": "9670de2921812bc4e0452f6e3efd8c859696c183", + "rev": "856b01ebd1de3f53c3929ce8082d9d67d799d816", "type": "github" }, "original": { @@ -180,11 +180,11 @@ ] }, "locked": { - "lastModified": 1774067251, - "narHash": "sha256-kxPPIRaJsxGcPRUOO2sUbvloaVdRiSDD0cN2Fxoj7pg=", + "lastModified": 1774152499, + "narHash": "sha256-DJlz0n3nIN9L1QJIDQvlQ1EGaCznnuG366KvPadgAxM=", "owner": "nix-community", "repo": "NUR", - "rev": "83ab96ae446c783b0dcf20b7eff35cf293faa0d4", + "rev": "6fe2bd55682b0b22412d62ba0ff332d8e92e8af2", "type": "github" }, "original": { @@ -228,11 +228,11 @@ ] }, "locked": { - "lastModified": 1773737882, - "narHash": "sha256-P6k0BtT1/idYveVRdcwAZk8By9UjZW8XOMhSoS6wTBY=", + "lastModified": 1774103303, + "narHash": "sha256-ZKsQGY0D4DLe3071/RZSQHLqqmFvsA38PudjEvnPbZI=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "a7f1db35d74faf04e5189b3a32f890186ace5c28", + "rev": "ae52b215dd66f73cb131106b7588f3a983617cee", "type": "github" }, "original": { From 9c45bf2fd05710164feb6e7855728c9c6c198d45 Mon Sep 17 00:00:00 2001 From: Jet Date: Sun, 22 Mar 2026 16:15:53 -0700 Subject: [PATCH 153/211] update:nfu --- flake.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/flake.lock b/flake.lock index 4c71984..309ffed 100644 --- a/flake.lock +++ b/flake.lock @@ -87,11 +87,11 @@ ] }, "locked": { - "lastModified": 1774135471, - "narHash": "sha256-TVeIGOxnfSPM6JvkRkXHpJECnj1OG2dXkWMSA4elzzQ=", + "lastModified": 1774210133, + "narHash": "sha256-yeiWCY9aAUUJ3ebMVjs0UZXRnT5x90MCtpbpOWiXrvM=", "owner": "nix-community", "repo": "home-manager", - "rev": "856b01ebd1de3f53c3929ce8082d9d67d799d816", + "rev": "c6fe2944ad9f2444b2d767c4a5edee7c166e8a95", "type": "github" }, "original": { @@ -128,11 +128,11 @@ ] }, "locked": { - "lastModified": 1773552174, - "narHash": "sha256-mHSRNrT1rjeYBgkAlj07dW3+1nFEgAd8Gu6lgyfT9DU=", + "lastModified": 1774156144, + "narHash": "sha256-gdYe9wTPl4ignDyXUl1LlICWj41+S0GB5lG1fKP17+A=", "owner": "nix-community", "repo": "nix-index-database", - "rev": "8faeb68130df077450451b6734a221ba0d6cde42", + "rev": "55b588747fa3d7fc351a11831c4b874dab992862", "type": "github" }, "original": { @@ -180,11 +180,11 @@ ] }, "locked": { - "lastModified": 1774152499, - "narHash": "sha256-DJlz0n3nIN9L1QJIDQvlQ1EGaCznnuG366KvPadgAxM=", + "lastModified": 1774218460, + "narHash": "sha256-fdEXRtp71NeVZajEyCOlIgGXcYSFu55fGJY6Pp7d6WY=", "owner": "nix-community", "repo": "NUR", - "rev": "6fe2bd55682b0b22412d62ba0ff332d8e92e8af2", + "rev": "ad5f494290c6e24e5ddb54e36c36de76009cc0f2", "type": "github" }, "original": { @@ -228,11 +228,11 @@ ] }, "locked": { - "lastModified": 1774103303, - "narHash": "sha256-ZKsQGY0D4DLe3071/RZSQHLqqmFvsA38PudjEvnPbZI=", + "lastModified": 1774155194, + "narHash": "sha256-0+8XV5WPO5Ie8hBcEEpPoR7mCqUmMnVZFiu6DQIxIE0=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "ae52b215dd66f73cb131106b7588f3a983617cee", + "rev": "56e6e71b465967758ff4db948ff943cb8ea31ca4", "type": "github" }, "original": { From 08ed4093422ea89eae3a133e6b70944d23664d86 Mon Sep 17 00:00:00 2001 From: Jet Date: Tue, 24 Mar 2026 15:11:37 -0700 Subject: [PATCH 154/211] feat: add lm-studio --- home.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/home.nix b/home.nix index e50402d..e52f995 100644 --- a/home.nix +++ b/home.nix @@ -124,6 +124,7 @@ in vlc zulip linphone + lmstudio # Fonts nerd-fonts.commit-mono From 33bc6c1bad3d39ca2ceb4c9f73953c4672d4da85 Mon Sep 17 00:00:00 2001 From: Jet Date: Tue, 24 Mar 2026 15:11:37 -0700 Subject: [PATCH 155/211] feat: open port 4096 for opencode --- configuration.nix | 1 + home.nix | 2 ++ 2 files changed, 3 insertions(+) diff --git a/configuration.nix b/configuration.nix index 0e97aee..9d76c29 100644 --- a/configuration.nix +++ b/configuration.nix @@ -29,6 +29,7 @@ networking.firewall.enable = true; # Required for Tailscale networking.firewall.checkReversePath = "loose"; + networking.firewall.interfaces."tailscale0".allowedTCPPorts = [ 4096 ]; services.tailscale.enable = true; diff --git a/home.nix b/home.nix index e52f995..aa9932a 100644 --- a/home.nix +++ b/home.nix @@ -254,6 +254,8 @@ in "nfu" = "nix flake update"; "c" = "claude"; "o" = "opencode"; + "ow" = + "URL=\"https://$(tailscale status --json | jq -r '.Self.DNSName | sub(\"\\.$\"; \"\")')\"; printf 'Open on phone: %s\\n' \"$URL\"; tailscale serve --bg 443 http://127.0.0.1:4096; opencode web --hostname 127.0.0.1 --port 4096"; ".." = "z .."; j = "jj"; jgf = "jj git fetch"; From 99103b4806814903e75c2eb97cb06c51a0221faf Mon Sep 17 00:00:00 2001 From: Jet Date: Tue, 24 Mar 2026 15:42:33 -0700 Subject: [PATCH 156/211] fix: depricaded variable gtk naming --- home.nix | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/home.nix b/home.nix index aa9932a..216a24a 100644 --- a/home.nix +++ b/home.nix @@ -578,10 +578,14 @@ in ]; }; - xdg.userDirs.enable = true; + xdg.userDirs = { + enable = true; + setSessionVariables = true; + }; gtk = { enable = true; + gtk4.theme = config.gtk.theme; gtk3.extraConfig.gtk-application-prefer-dark-theme = 1; }; From a8ef79f2bc205caea725352b8a3dd554ef96b395 Mon Sep 17 00:00:00 2001 From: Jet Date: Tue, 24 Mar 2026 15:43:42 -0700 Subject: [PATCH 157/211] fix: ow command for opening opencode with tailscale --- home.nix | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/home.nix b/home.nix index 216a24a..d5c78b1 100644 --- a/home.nix +++ b/home.nix @@ -80,6 +80,13 @@ in tea repo create --name "$name" --login "$login" git remote add origin "ssh://forgejo@''${login}/''${user}/''${name}.git" '') + (writeShellScriptBin "ow" '' + DNS="$(tailscale status --json | jq -r '.Self.DNSName')" + DNS="''${DNS%.}" + sudo -v + sudo tailscale serve --bg 4096 + exec opencode web --hostname 127.0.0.1 --port 4096 + '') # CLI bat @@ -254,8 +261,6 @@ in "nfu" = "nix flake update"; "c" = "claude"; "o" = "opencode"; - "ow" = - "URL=\"https://$(tailscale status --json | jq -r '.Self.DNSName | sub(\"\\.$\"; \"\")')\"; printf 'Open on phone: %s\\n' \"$URL\"; tailscale serve --bg 443 http://127.0.0.1:4096; opencode web --hostname 127.0.0.1 --port 4096"; ".." = "z .."; j = "jj"; jgf = "jj git fetch"; From 7399d1aaef41e7a74126864e12def8a4b54ef57c Mon Sep 17 00:00:00 2001 From: Jet Date: Tue, 24 Mar 2026 15:58:33 -0700 Subject: [PATCH 158/211] update: nfu --- flake.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/flake.lock b/flake.lock index 309ffed..5e3a6a5 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1774047888, - "narHash": "sha256-lUJ5dPga70KM1oj5vFEZm15PbojyrZ2nqJQ3C4bRSiY=", + "lastModified": 1774302978, + "narHash": "sha256-PCR6Gqmgu06zWcueVvvHa/z5AqPOdQ2Vt4gbCbBc/+A=", "owner": "ryoppippi", "repo": "claude-code-overlay", - "rev": "076a658308611db196d1a250d6fd7fe35ce620ad", + "rev": "9de89ca1dc76379a0faf86a3d2905a754b70b189", "type": "github" }, "original": { @@ -87,11 +87,11 @@ ] }, "locked": { - "lastModified": 1774210133, - "narHash": "sha256-yeiWCY9aAUUJ3ebMVjs0UZXRnT5x90MCtpbpOWiXrvM=", + "lastModified": 1774379316, + "narHash": "sha256-0nGNxWDUH2Hzlj/R3Zf4FEK6fsFNB/dvewuboSRZqiI=", "owner": "nix-community", "repo": "home-manager", - "rev": "c6fe2944ad9f2444b2d767c4a5edee7c166e8a95", + "rev": "1eb0549a1ab3fe3f5acf86668249be15fa0e64f7", "type": "github" }, "original": { @@ -158,11 +158,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1773821835, - "narHash": "sha256-TJ3lSQtW0E2JrznGVm8hOQGVpXjJyXY2guAxku2O9A4=", + "lastModified": 1774106199, + "narHash": "sha256-US5Tda2sKmjrg2lNHQL3jRQ6p96cgfWh3J1QBliQ8Ws=", "owner": "nixos", "repo": "nixpkgs", - "rev": "b40629efe5d6ec48dd1efba650c797ddbd39ace0", + "rev": "6c9a78c09ff4d6c21d0319114873508a6ec01655", "type": "github" }, "original": { @@ -180,11 +180,11 @@ ] }, "locked": { - "lastModified": 1774218460, - "narHash": "sha256-fdEXRtp71NeVZajEyCOlIgGXcYSFu55fGJY6Pp7d6WY=", + "lastModified": 1774389454, + "narHash": "sha256-kkQKhN+dnjcJ3JDvqvjEL/MTyqw4WvpG2Gpm+94IVJo=", "owner": "nix-community", "repo": "NUR", - "rev": "ad5f494290c6e24e5ddb54e36c36de76009cc0f2", + "rev": "937fc69582636f648e18e2dfbdfbf39d734fc952", "type": "github" }, "original": { @@ -228,11 +228,11 @@ ] }, "locked": { - "lastModified": 1774155194, - "narHash": "sha256-0+8XV5WPO5Ie8hBcEEpPoR7mCqUmMnVZFiu6DQIxIE0=", + "lastModified": 1774352774, + "narHash": "sha256-gibUM0pSnLxEeuFrYA8T1oEaixk+fjQpqXbYaxcEX/4=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "56e6e71b465967758ff4db948ff943cb8ea31ca4", + "rev": "a0f3d47dbd8f8618a1920d5a5ca09b7993415895", "type": "github" }, "original": { From ac5bd7e14baa70b53c4c5811a28e4fbdb8d4c4d2 Mon Sep 17 00:00:00 2001 From: Jet Date: Wed, 25 Mar 2026 19:27:07 -0700 Subject: [PATCH 159/211] feat: add libre office --- home.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/home.nix b/home.nix index d5c78b1..d622b02 100644 --- a/home.nix +++ b/home.nix @@ -121,6 +121,7 @@ in gimp3 inkscape kdePackages.kdenlive + libreoffice logseq nemo-with-extensions obs-studio From 8e9121d75dc819e26e977b022fd8ac1edd43c59d Mon Sep 17 00:00:00 2001 From: Jet Date: Thu, 26 Mar 2026 18:08:01 -0700 Subject: [PATCH 160/211] feat: add t3code --- home.nix | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/home.nix b/home.nix index d622b02..61e25bf 100644 --- a/home.nix +++ b/home.nix @@ -9,6 +9,13 @@ let name = "Jet"; email = "jet@extremist.software"; sshSigningKey = "~/.ssh/id_ed25519.pub"; + t3 = pkgs.writeShellApplication { + name = "t3"; + runtimeInputs = [ pkgs.nodejs_24 ]; + text = '' + exec npx --yes --package=t3@0.0.14 t3 "$@" + ''; + }; in { imports = [ inputs.zen-browser.homeModules.default ]; @@ -93,6 +100,7 @@ in ffmpeg-full claude-code opencode + t3 inputs.codex-cli-nix.packages.${pkgs.stdenv.hostPlatform.system}.default fd btop From f3d2b5b586fc4bd49bda7a48cda3c003a6710848 Mon Sep 17 00:00:00 2001 From: Jet Date: Thu, 26 Mar 2026 19:07:01 -0700 Subject: [PATCH 161/211] feat: add new open tab fzf zellij upgrade! --- home.nix | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 76 insertions(+), 1 deletion(-) diff --git a/home.nix b/home.nix index 61e25bf..365fe6e 100644 --- a/home.nix +++ b/home.nix @@ -16,6 +16,58 @@ let exec npx --yes --package=t3@0.0.14 t3 "$@" ''; }; + zellijNewTabZoxide = pkgs.writeShellApplication { + name = "zellij-new-tab-zoxide"; + runtimeInputs = [ + pkgs.coreutils + pkgs.fzf + pkgs.zellij + pkgs.zoxide + ]; + text = '' + set -euo pipefail + + dirs="$(${pkgs.zoxide}/bin/zoxide query -l | while IFS= read -r dir; do + if [ -d "$dir" ]; then + printf '%s\t%s\n' "$(${pkgs.coreutils}/bin/basename "$dir")" "$dir" + fi + done)" + + if [ -z "$dirs" ]; then + exec ${pkgs.bashInteractive}/bin/bash -i + fi + + dir="$(printf '%s\n' "$dirs" | ${pkgs.fzf}/bin/fzf \ + --delimiter='\t' \ + --with-nth='2' \ + --nth='1' \ + --height='40%' \ + --layout='reverse' \ + --border \ + --prompt='dir> ' \ + --exit-0 | ${pkgs.coreutils}/bin/cut -f2-)" + + if [ -z "$dir" ]; then + if [ -n "''${ZELLIJ:-}" ]; then + ${pkgs.zellij}/bin/zellij action close-tab >/dev/null 2>&1 || true + fi + exit 0 + fi + + tab_name="$(${pkgs.coreutils}/bin/basename "$dir")" + if [ "$dir" = "/" ]; then + tab_name="/" + fi + + cd "$dir" + + if [ -n "''${ZELLIJ:-}" ]; then + ${pkgs.zellij}/bin/zellij action rename-tab "$tab_name" >/dev/null 2>&1 || true + fi + + exec ${pkgs.bashInteractive}/bin/bash -i + ''; + }; in { imports = [ inputs.zen-browser.homeModules.default ]; @@ -101,6 +153,7 @@ in claude-code opencode t3 + zellijNewTabZoxide inputs.codex-cli-nix.packages.${pkgs.stdenv.hostPlatform.system}.default fd btop @@ -204,7 +257,16 @@ in programs.zellij = { enable = true; - enableBashIntegration = true; + enableBashIntegration = false; + + layouts.zoxide-picker = '' + layout { + pane command="${zellijNewTabZoxide}/bin/zellij-new-tab-zoxide" close_on_exit=true + pane size=1 borderless=true { + plugin location="compact-bar" + } + } + ''; settings = { # Default shell (using bash as configured in your system) @@ -221,6 +283,15 @@ in on_force_close = "detach"; }; + + extraConfig = '' + keybinds { + tab { + bind "n" { NewTab { layout "zoxide-picker"; }; SwitchToMode "Normal"; } + bind "N" { NewTab; SwitchToMode "Normal"; } + } + } + ''; }; programs.eza = { @@ -292,6 +363,10 @@ in dj = "ffmpeg -f pulse -i alsa_output.pci-0000_c1_00.6.analog-stereo.monitor -ac 2 -ar 44100 -acodec libmp3lame -b:a 128k -content_type audio/mpeg -f mp3 'icecast://nbradio:nbradio@beyla:8005/live'"; }; initExtra = '' + if [ -z "''${ZELLIJ:-}" ]; then + zellij -l zoxide-picker + fi + # Automatically list directory contents when changing directories auto_l_on_cd() { if [ "$__LAST_PWD" != "$PWD" ]; then From 3151b73ba9623028649d4efbb69778c9160498a2 Mon Sep 17 00:00:00 2001 From: Jet Date: Thu, 26 Mar 2026 20:50:36 -0700 Subject: [PATCH 162/211] feat: add mullvad exit nodes --- configuration.nix | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/configuration.nix b/configuration.nix index 9d76c29..061aa55 100644 --- a/configuration.nix +++ b/configuration.nix @@ -31,7 +31,13 @@ networking.firewall.checkReversePath = "loose"; networking.firewall.interfaces."tailscale0".allowedTCPPorts = [ 4096 ]; - services.tailscale.enable = true; + services.tailscale = { + enable = true; + extraSetFlags = [ + "--exit-node=us-sjc-wg-401.mullvad.ts.net" + "--exit-node-allow-lan-access" + ]; + }; time.timeZone = "America/Los_Angeles"; i18n.defaultLocale = "en_US.UTF-8"; From ede16eb325ce989af88b768b723452b1bfb064fd Mon Sep 17 00:00:00 2001 From: Jet Date: Thu, 26 Mar 2026 20:50:36 -0700 Subject: [PATCH 163/211] feat: make zellij bottom bar cleaner --- home.nix | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/home.nix b/home.nix index 365fe6e..a07e68d 100644 --- a/home.nix +++ b/home.nix @@ -259,6 +259,18 @@ in enable = true; enableBashIntegration = false; + layouts.tabs-and-mode = '' + layout { + pane + pane size=1 borderless=true { + plugin location="status-bar" + } + pane size=1 borderless=true { + plugin location="tab-bar" + } + } + ''; + layouts.zoxide-picker = '' layout { pane command="${zellijNewTabZoxide}/bin/zellij-new-tab-zoxide" close_on_exit=true @@ -271,8 +283,9 @@ in settings = { # Default shell (using bash as configured in your system) default_shell = "bash"; - default_layout = "compact"; + default_layout = "tabs-and-mode"; pane_frames = false; + simplified_ui = true; # Mouse and interaction settings - enable for proper pane handling mouse_mode = true; @@ -282,6 +295,12 @@ in show_release_notes = false; on_force_close = "detach"; + + ui = { + pane_frames = { + hide_session_name = true; + }; + }; }; extraConfig = '' From 5765d408e3b9c682eeb946e9839fd809d9ff6d89 Mon Sep 17 00:00:00 2001 From: Jet Date: Fri, 27 Mar 2026 13:27:20 -0700 Subject: [PATCH 164/211] feat: use nautilus again --- configuration.nix | 2 +- home.nix | 85 ++++++++++++++++++++++++++++++++--------------- 2 files changed, 60 insertions(+), 27 deletions(-) diff --git a/configuration.nix b/configuration.nix index 061aa55..0a18ae1 100644 --- a/configuration.nix +++ b/configuration.nix @@ -136,7 +136,7 @@ geary # Email gnome-tour gnome-font-viewer # Have font-manager - nautilus # Using Nemo + nautilus ]; services.printing.enable = true; diff --git a/home.nix b/home.nix index a07e68d..28f2f42 100644 --- a/home.nix +++ b/home.nix @@ -68,6 +68,45 @@ let exec ${pkgs.bashInteractive}/bin/bash -i ''; }; + zellijSyncTabName = pkgs.writeShellApplication { + name = "zellij-sync-tab-name"; + runtimeInputs = [ + pkgs.coreutils + pkgs.jq + pkgs.zellij + ]; + text = '' + set -euo pipefail + + if [ -z "''${ZELLIJ:-}" ]; then + exit 0 + fi + + current_tab_info="$(${pkgs.zellij}/bin/zellij action current-tab-info --json 2>/dev/null)" + current_tab_id="$(printf '%s\n' "$current_tab_info" | ${pkgs.jq}/bin/jq -r '.tab_id // empty')" + current_tab_name="$(printf '%s\n' "$current_tab_info" | ${pkgs.jq}/bin/jq -r '.name // empty')" + + if [ -z "$current_tab_id" ]; then + exit 0 + fi + + next_tab_name="$(${pkgs.zellij}/bin/zellij action list-panes --json 2>/dev/null | ${pkgs.jq}/bin/jq -r --argjson tab_id "$current_tab_id" ' + [ .[] + | select((.is_plugin | not) and .tab_id == $tab_id) + | .pane_cwd // empty + | if . == "/" then "/" else split("/") | map(select(length > 0)) | last end + ] + | reduce .[] as $name ([]; if index($name) == null then . + [$name] else . end) + | join("-") + ' 2>/dev/null)" + + if [ -z "$next_tab_name" ] || [ "$next_tab_name" = "$current_tab_name" ]; then + exit 0 + fi + + exec ${pkgs.zellij}/bin/zellij action rename-tab "$next_tab_name" + ''; + }; in { imports = [ inputs.zen-browser.homeModules.default ]; @@ -111,19 +150,6 @@ in "emoji-copy@felipeftn" ]; }; - "org/nemo/preferences" = { - show-hidden-files = true; - default-folder-viewer = "list-view"; - show-location-entry = true; - show-full-path-titles = true; - date-format = "informal"; - }; - "org/nemo/window-state" = { - side-pane-view = "treeview"; - }; - "org/nemo/list-view" = { - default-zoom-level = "small"; - }; }; home.packages = with pkgs; [ @@ -154,6 +180,7 @@ in opencode t3 zellijNewTabZoxide + zellijSyncTabName inputs.codex-cli-nix.packages.${pkgs.stdenv.hostPlatform.system}.default fd btop @@ -184,7 +211,6 @@ in kdePackages.kdenlive libreoffice logseq - nemo-with-extensions obs-studio prismlauncher qbittorrent-enhanced @@ -393,7 +419,14 @@ in __LAST_PWD="$PWD" fi } - export PROMPT_COMMAND="auto_l_on_cd; $PROMPT_COMMAND" + + auto_rename_zellij_tab() { + if [ -n "''${ZELLIJ:-}" ]; then + zellij-sync-tab-name >/dev/null 2>&1 || true + fi + } + + export PROMPT_COMMAND="auto_l_on_cd; auto_rename_zellij_tab; $PROMPT_COMMAND" __LAST_PWD="$PWD" ''; }; @@ -568,17 +601,17 @@ in "x-scheme-handler/https" = "zen.desktop"; "x-scheme-handler/about" = "zen.desktop"; "x-scheme-handler/unknown" = "zen.desktop"; - "inode/directory" = "nemo.desktop"; - "application/zip" = "extract-here.desktop"; - "application/x-tar" = "extract-here.desktop"; - "application/x-compressed-tar" = "extract-here.desktop"; - "application/x-bzip-compressed-tar" = "extract-here.desktop"; - "application/x-xz-compressed-tar" = "extract-here.desktop"; - "application/x-zstd-compressed-tar" = "extract-here.desktop"; - "application/gzip" = "extract-here.desktop"; - "application/x-7z-compressed" = "extract-here.desktop"; - "application/x-rar" = "extract-here.desktop"; - "application/x-rar-compressed" = "extract-here.desktop"; + "inode/directory" = "org.gnome.Nautilus.desktop"; + "application/zip" = "org.gnome.FileRoller.desktop"; + "application/x-tar" = "org.gnome.FileRoller.desktop"; + "application/x-compressed-tar" = "org.gnome.FileRoller.desktop"; + "application/x-bzip-compressed-tar" = "org.gnome.FileRoller.desktop"; + "application/x-xz-compressed-tar" = "org.gnome.FileRoller.desktop"; + "application/x-zstd-compressed-tar" = "org.gnome.FileRoller.desktop"; + "application/gzip" = "org.gnome.FileRoller.desktop"; + "application/x-7z-compressed" = "org.gnome.FileRoller.desktop"; + "application/x-rar" = "org.gnome.FileRoller.desktop"; + "application/x-rar-compressed" = "org.gnome.FileRoller.desktop"; }; }; From 9298a554b0a3638fd6f7b3867723610f3a736549 Mon Sep 17 00:00:00 2001 From: Jet Date: Fri, 27 Mar 2026 13:33:35 -0700 Subject: [PATCH 165/211] fix: stop excluding nautalius --- configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/configuration.nix b/configuration.nix index 0a18ae1..741c4ef 100644 --- a/configuration.nix +++ b/configuration.nix @@ -136,7 +136,6 @@ geary # Email gnome-tour gnome-font-viewer # Have font-manager - nautilus ]; services.printing.enable = true; From 540b13024780eb4416d06051a78abad3d5d9a505 Mon Sep 17 00:00:00 2001 From: Jet Date: Fri, 27 Mar 2026 13:33:35 -0700 Subject: [PATCH 166/211] update: nfu --- flake.lock | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/flake.lock b/flake.lock index 5e3a6a5..437fd0f 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1774302978, - "narHash": "sha256-PCR6Gqmgu06zWcueVvvHa/z5AqPOdQ2Vt4gbCbBc/+A=", + "lastModified": 1774586286, + "narHash": "sha256-VuNhpBWmYbGAoV2r/6SoP7TsFnkGlLbCbPTkBsDtLF8=", "owner": "ryoppippi", "repo": "claude-code-overlay", - "rev": "9de89ca1dc76379a0faf86a3d2905a754b70b189", + "rev": "f8202e2dc56b054969348d1cf98082d54e31c947", "type": "github" }, "original": { @@ -28,11 +28,11 @@ ] }, "locked": { - "lastModified": 1773944613, - "narHash": "sha256-YPgI5DAfcwcWOjHGERsTha/SuuRt7l+oOTGT94G643s=", + "lastModified": 1774566674, + "narHash": "sha256-UVHUY9jHiFj9jqY3KH28OThDEX4JUeEEWIUE+3VFJVI=", "owner": "sadjow", "repo": "codex-cli-nix", - "rev": "7937d799ae69e7ded828b8aef5d26e89fbbc817f", + "rev": "d43a70bd123e49cb862ee36d0e3ab2ed550308df", "type": "github" }, "original": { @@ -87,11 +87,11 @@ ] }, "locked": { - "lastModified": 1774379316, - "narHash": "sha256-0nGNxWDUH2Hzlj/R3Zf4FEK6fsFNB/dvewuboSRZqiI=", + "lastModified": 1774626137, + "narHash": "sha256-1WelwA45Xm4glTG8R9IX9jYeFKDG2HbR79jAauLezUE=", "owner": "nix-community", "repo": "home-manager", - "rev": "1eb0549a1ab3fe3f5acf86668249be15fa0e64f7", + "rev": "9df3a639007cfe0d074433f7fc225ea94f877d08", "type": "github" }, "original": { @@ -143,11 +143,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1774018263, - "narHash": "sha256-HHYEwK1A22aSaxv2ibhMMkKvrDGKGlA/qObG4smrSqc=", + "lastModified": 1774567711, + "narHash": "sha256-uVlOHBvt6Vc/iYNJXLPa4c3cLXwMllOCVfAaLAcphIo=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "2d4b4717b2534fad5c715968c1cece04a172b365", + "rev": "3f6f874dfc34d386d10e434c48ad966c4832243e", "type": "github" }, "original": { @@ -158,11 +158,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1774106199, - "narHash": "sha256-US5Tda2sKmjrg2lNHQL3jRQ6p96cgfWh3J1QBliQ8Ws=", + "lastModified": 1774386573, + "narHash": "sha256-4hAV26quOxdC6iyG7kYaZcM3VOskcPUrdCQd/nx8obc=", "owner": "nixos", "repo": "nixpkgs", - "rev": "6c9a78c09ff4d6c21d0319114873508a6ec01655", + "rev": "46db2e09e1d3f113a13c0d7b81e2f221c63b8ce9", "type": "github" }, "original": { @@ -180,11 +180,11 @@ ] }, "locked": { - "lastModified": 1774389454, - "narHash": "sha256-kkQKhN+dnjcJ3JDvqvjEL/MTyqw4WvpG2Gpm+94IVJo=", + "lastModified": 1774641407, + "narHash": "sha256-KKgKcovJkcS2ULjX/QOhkJIV8fo0eyIGvSsD2s4A/Kc=", "owner": "nix-community", "repo": "NUR", - "rev": "937fc69582636f648e18e2dfbdfbf39d734fc952", + "rev": "35a6d202e62767f4152d4d89f61578c89a18560d", "type": "github" }, "original": { @@ -228,11 +228,11 @@ ] }, "locked": { - "lastModified": 1774352774, - "narHash": "sha256-gibUM0pSnLxEeuFrYA8T1oEaixk+fjQpqXbYaxcEX/4=", + "lastModified": 1774605342, + "narHash": "sha256-VEcy7N8TExxCsDem0SUsqJJlTcUm0y4vaSPYCghe5W8=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "a0f3d47dbd8f8618a1920d5a5ca09b7993415895", + "rev": "4916e4d7ab444c544c3f36cc9fafe58cdb0f7237", "type": "github" }, "original": { From 910e0b0cda7345d06692d3a4f91b6ddade4f3c89 Mon Sep 17 00:00:00 2001 From: Jet Date: Fri, 27 Mar 2026 14:26:29 -0700 Subject: [PATCH 167/211] feat: add handbreke --- home.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/home.nix b/home.nix index 28f2f42..a819007 100644 --- a/home.nix +++ b/home.nix @@ -207,6 +207,7 @@ in file-roller font-manager gimp3 + handbrake inkscape kdePackages.kdenlive libreoffice From 5e25c5d78548c2c25b232c87262c211314c10a6e Mon Sep 17 00:00:00 2001 From: Jet Date: Fri, 27 Mar 2026 15:53:34 -0700 Subject: [PATCH 168/211] feat: remove the dj command --- home.nix | 352 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 340 insertions(+), 12 deletions(-) diff --git a/home.nix b/home.nix index a819007..f37eddb 100644 --- a/home.nix +++ b/home.nix @@ -107,6 +107,327 @@ let exec ${pkgs.zellij}/bin/zellij action rename-tab "$next_tab_name" ''; }; + browserAudio = pkgs.writeShellApplication { + name = "browser-audio"; + runtimeInputs = [ + pkgs.coreutils + pkgs.curl + pkgs.ffmpeg-full + pkgs.fzf + pkgs.gawk + pkgs.gnugrep + pkgs.jq + pkgs.pulseaudio + pkgs.qpwgraph + pkgs.pavucontrol + pkgs.procps + ]; + text = '' + set -euo pipefail + + sink_name="''${BROWSER_AUDIO_SINK:-browser-radio}" + sink_description="''${BROWSER_AUDIO_DESCRIPTION:-Browser Radio}" + bitrate="''${BROWSER_AUDIO_BITRATE:-128k}" + + usage() { + printf '%s\n' \ + "Usage: browser-audio [args]" \ + "" \ + "Commands:" \ + " setup Create the dedicated browser sink if needed" \ + " pick Pick a live playback stream and move it to the sink" \ + " route Move matching playback streams to the sink" \ + " status Show the sink and any streams already routed to it" \ + " open Open pavucontrol and qpwgraph for manual routing" \ + " cast Stream the sink monitor to Icecast/Shoutcast with ffmpeg" \ + " cast-pick Pick a live stream, route it, then start casting" \ + " stop Stop prior ffmpeg jobs and remove the sink" \ + " remove Remove the dedicated sink" \ + "" \ + "Notes:" \ + " - If your browser exposes a tab as its own playback stream, pick can isolate it." \ + " - Otherwise, launch a dedicated browser instance for music and route that stream." + } + + ensure_sink() { + if ! pactl list short sinks | awk '{print $2}' | grep -Fxq "$sink_name"; then + pactl load-module module-null-sink \ + sink_name="$sink_name" \ + sink_properties="device.description=$sink_description" >/dev/null + fi + } + + sink_module_id() { + pactl -f json list modules | jq -r --arg sink_name "$sink_name" ' + .[] + | select(.name == "module-null-sink") + | select((.argument // "") | contains("sink_name=" + $sink_name)) + | .index + ' | head -n1 + } + + stop_existing_casts() { + pkill -f "ffmpeg.*$sink_name\.monitor" >/dev/null 2>&1 || true + } + + remove_sink() { + local module_id + + module_id="$(sink_module_id || true)" + if [ -n "$module_id" ] && [ "$module_id" != "null" ]; then + pactl unload-module "$module_id" + fi + } + + reset_state() { + stop_existing_casts + remove_sink + } + + stream_rows() { + pactl -f json list sink-inputs | jq -r ' + .[] + | [ + (.index | tostring), + (.sink | tostring), + (.properties."application.name" // "unknown-app"), + (.properties."media.name" // .properties."node.description" // "unknown-media"), + (.properties."application.process.binary" // "unknown-bin") + ] + | @tsv + ' + } + + pick_stream() { + local selection + + selection="$(stream_rows | fzf \ + --delimiter=$'\t' \ + --with-nth=3,4,5 \ + --layout=reverse \ + --border \ + --prompt='audio> ' \ + --header=$'Pick a live playback stream to route into browser-radio\napp | media | binary' \ + --exit-0)" + + if [ -z "$selection" ]; then + exit 0 + fi + + pactl move-sink-input "$(printf '%s\n' "$selection" | cut -f1)" "$sink_name" + } + + route_matching() { + local pattern="$1" + local matches + + matches="$(stream_rows | grep -Ei "$pattern" || true)" + if [ -z "$matches" ]; then + printf 'No playback streams matched %s\n' "$pattern" >&2 + exit 1 + fi + + printf '%s\n' "$matches" | while IFS=$'\t' read -r stream_id _rest; do + [ -n "$stream_id" ] || continue + pactl move-sink-input "$stream_id" "$sink_name" + done + } + + show_status() { + printf 'Sink: %s\n' "$sink_name" + pactl list short sinks | awk -v sink="$sink_name" '$2 == sink {print}' + printf '\nStreams on %s:\n' "$sink_name" + pactl -f json list sink-inputs | jq -r --arg sink_name "$sink_name" --argjson sink_index "$(pactl list short sinks | awk -v sink="$sink_name" '$2 == sink {print $1; exit}')" ' + .[] + | select(.sink == $sink_index) + | "- #\(.index) \(.properties["application.name"] // "unknown-app") :: \(.properties["media.name"] // .properties["node.description"] // "unknown-media")" + ' + } + + cast_sink() { + local url="$1" + local rest auth host_path endpoint + local tmpdir fifo ffmpeg_pid curl_pid ffmpeg_status curl_status interrupted=0 + + case "$url" in + icecast://*) + rest="''${url#icecast://}" + auth="''${rest%%@*}" + host_path="''${rest#*@}" + endpoint="http://''${host_path}" + ;; + *) + printf 'cast requires an icecast:// URL\n' >&2 + exit 1 + ;; + esac + + tmpdir="$(mktemp -d)" + fifo="$tmpdir/audio.mp3" + mkfifo "$fifo" + + cleanup_cast() { + local pid + local waited + + trap - INT TERM EXIT + + for pid in "''${ffmpeg_pid:-}" "''${curl_pid:-}"; do + [ -n "$pid" ] || continue + kill "$pid" >/dev/null 2>&1 || true + done + + for pid in "''${ffmpeg_pid:-}" "''${curl_pid:-}"; do + [ -n "$pid" ] || continue + waited=0 + while kill -0 "$pid" >/dev/null 2>&1; do + if [ "$waited" -ge 20 ]; then + kill -9 "$pid" >/dev/null 2>&1 || true + break + fi + sleep 0.1 + waited=$((waited + 1)) + done + wait "$pid" >/dev/null 2>&1 || true + done + + rm -rf "$tmpdir" + if [ "$interrupted" -eq 1 ]; then + exit 130 + fi + } + + trap 'interrupted=1; cleanup_cast' INT TERM + trap cleanup_cast EXIT + + curl \ + --silent \ + --show-error \ + --http1.0 \ + --user "$auth" \ + --header 'Content-Type: audio/mpeg' \ + --request SOURCE \ + --data-binary @- \ + "$endpoint" <"$fifo" & + curl_pid=$! + + ffmpeg \ + -y \ + -hide_banner \ + -loglevel warning \ + -f pulse \ + -channel_layout stereo \ + -i "$sink_name.monitor" \ + -ac 2 \ + -ar 44100 \ + -acodec libmp3lame \ + -b:a "$bitrate" \ + -id3v2_version 0 \ + -write_xing 0 \ + -f mp3 \ + "$fifo" & + ffmpeg_pid=$! + + set +e + wait "$ffmpeg_pid" + ffmpeg_status=$? + wait "$curl_pid" + curl_status=$? + set -e + + trap - INT TERM EXIT + rm -rf "$tmpdir" + + if [ "$ffmpeg_status" -ne 0 ]; then + return "$ffmpeg_status" + fi + + if [ "$curl_status" -ne 0 ]; then + return "$curl_status" + fi + } + + command="''${1:-help}" + case "$command" in + setup) + ensure_sink + show_status + ;; + pick) + ensure_sink + pick_stream + show_status + ;; + route) + ensure_sink + if [ "''${2:-}" = "" ]; then + printf 'route requires a regex\n' >&2 + exit 1 + fi + route_matching "$2" + show_status + ;; + status) + ensure_sink + show_status + ;; + open) + ensure_sink + pavucontrol >/dev/null 2>&1 & + qpwgraph >/dev/null 2>&1 & + ;; + cast) + reset_state + ensure_sink + if [ "''${2:-}" = "" ]; then + printf 'cast requires an icecast:// URL\n' >&2 + exit 1 + fi + cast_sink "$2" + ;; + cast-pick) + reset_state + ensure_sink + if [ "''${2:-}" = "" ]; then + printf 'cast-pick requires an icecast:// URL\n' >&2 + exit 1 + fi + pick_stream + show_status + cast_sink "$2" + ;; + stop) + reset_state + ;; + remove) + remove_sink + ;; + help|-h|--help) + usage + ;; + *) + printf 'Unknown command: %s\n\n' "$command" >&2 + usage >&2 + exit 1 + ;; + esac + ''; + }; + zenRadio = pkgs.writeShellApplication { + name = "zen-radio"; + runtimeInputs = [ + config.programs.zen-browser.package + pkgs.coreutils + ]; + text = '' + set -euo pipefail + + profile_dir="''${XDG_STATE_HOME:-$HOME/.local/state}/zen-radio-profile" + mkdir -p "$profile_dir" + + exec zen --new-instance --profile "$profile_dir" "$@" + ''; + }; in { imports = [ inputs.zen-browser.homeModules.default ]; @@ -175,6 +496,7 @@ in # CLI bat + browserAudio ffmpeg-full claude-code opencode @@ -213,11 +535,14 @@ in libreoffice logseq obs-studio + pavucontrol prismlauncher + qpwgraph qbittorrent-enhanced signal-desktop vesktop vlc + zenRadio zulip linphone lmstudio @@ -406,13 +731,8 @@ in h = "hx"; t = "trash"; vanity = "mkp224o-amd64-64-24k -d noisebridgevanitytor noisebridge{2..7}"; - dj = "ffmpeg -f pulse -i alsa_output.pci-0000_c1_00.6.analog-stereo.monitor -ac 2 -ar 44100 -acodec libmp3lame -b:a 128k -content_type audio/mpeg -f mp3 'icecast://nbradio:nbradio@beyla:8005/live'"; }; initExtra = '' - if [ -z "''${ZELLIJ:-}" ]; then - zellij -l zoxide-picker - fi - # Automatically list directory contents when changing directories auto_l_on_cd() { if [ "$__LAST_PWD" != "$PWD" ]; then @@ -421,13 +741,7 @@ in fi } - auto_rename_zellij_tab() { - if [ -n "''${ZELLIJ:-}" ]; then - zellij-sync-tab-name >/dev/null 2>&1 || true - fi - } - - export PROMPT_COMMAND="auto_l_on_cd; auto_rename_zellij_tab; $PROMPT_COMMAND" + export PROMPT_COMMAND="auto_l_on_cd; $PROMPT_COMMAND" __LAST_PWD="$PWD" ''; }; @@ -562,6 +876,20 @@ in comment = "Fast, featureful, GPU based terminal emulator"; }; + xdg.desktopEntries.zen-radio = { + name = "Zen Radio"; + genericName = "Dedicated Browser Audio"; + exec = "zen-radio %U"; + icon = "zen"; + type = "Application"; + categories = [ + "Network" + "WebBrowser" + "AudioVideo" + ]; + comment = "Dedicated Zen instance for isolating music playback"; + }; + # Extract archives on double-click xdg.desktopEntries.extract-here = { name = "Extract Here"; From a1b5f501d717a0c187c351955e0026d9c97b99a8 Mon Sep 17 00:00:00 2001 From: Jet Date: Sat, 28 Mar 2026 16:49:55 -0700 Subject: [PATCH 169/211] update: nfu --- flake.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/flake.lock b/flake.lock index 437fd0f..3db4601 100644 --- a/flake.lock +++ b/flake.lock @@ -87,11 +87,11 @@ ] }, "locked": { - "lastModified": 1774626137, - "narHash": "sha256-1WelwA45Xm4glTG8R9IX9jYeFKDG2HbR79jAauLezUE=", + "lastModified": 1774738535, + "narHash": "sha256-2jfBEZUC67IlnxO5KItFCAd7Oc+1TvyV/jQlR+2ykGQ=", "owner": "nix-community", "repo": "home-manager", - "rev": "9df3a639007cfe0d074433f7fc225ea94f877d08", + "rev": "769e07ef8f4cf7b1ec3b96ef015abec9bc6b1e2a", "type": "github" }, "original": { @@ -180,11 +180,11 @@ ] }, "locked": { - "lastModified": 1774641407, - "narHash": "sha256-KKgKcovJkcS2ULjX/QOhkJIV8fo0eyIGvSsD2s4A/Kc=", + "lastModified": 1774737476, + "narHash": "sha256-Bf6YP8iirgloZ+MwyDvRl/DDQrfNMrE4Ou47l/StxJ8=", "owner": "nix-community", "repo": "NUR", - "rev": "35a6d202e62767f4152d4d89f61578c89a18560d", + "rev": "88adcc30bbaa5b6d16f48a5a2ccc10758d145db3", "type": "github" }, "original": { @@ -228,11 +228,11 @@ ] }, "locked": { - "lastModified": 1774605342, - "narHash": "sha256-VEcy7N8TExxCsDem0SUsqJJlTcUm0y4vaSPYCghe5W8=", + "lastModified": 1774708879, + "narHash": "sha256-rTYvYkQL69/YkZB+MRA/IaX1qJ1lPx5KXoQS2/9+7Mw=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "4916e4d7ab444c544c3f36cc9fafe58cdb0f7237", + "rev": "d01d23c798cceef42307d5789bfbce70515e8800", "type": "github" }, "original": { From 560b08f10b8517d6efb69370f332310d9a492fad Mon Sep 17 00:00:00 2001 From: Jet Date: Sat, 28 Mar 2026 18:56:05 -0700 Subject: [PATCH 170/211] feat: add chrome and tor --- home.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/home.nix b/home.nix index f37eddb..d6522f1 100644 --- a/home.nix +++ b/home.nix @@ -529,6 +529,7 @@ in file-roller font-manager gimp3 + google-chrome handbrake inkscape kdePackages.kdenlive @@ -540,6 +541,7 @@ in qpwgraph qbittorrent-enhanced signal-desktop + tor-browser vesktop vlc zenRadio From f5980993495e7d1c149571a0be92a8eac98b8273 Mon Sep 17 00:00:00 2001 From: Jet Date: Sat, 28 Mar 2026 19:47:55 -0700 Subject: [PATCH 171/211] feat: add super openai command --- home.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/home.nix b/home.nix index d6522f1..c09fad4 100644 --- a/home.nix +++ b/home.nix @@ -714,6 +714,7 @@ in "nfu" = "nix flake update"; "c" = "claude"; "o" = "opencode"; + "ou" = "OPENCODE_PERMISSION='\"allow\"' opencode"; ".." = "z .."; j = "jj"; jgf = "jj git fetch"; From 3da9c48250943ea9fc98c7df3b6d2c5bd019b541 Mon Sep 17 00:00:00 2001 From: Jet Date: Sat, 28 Mar 2026 19:47:55 -0700 Subject: [PATCH 172/211] fix: use zen-beta by default not zen --- home.nix | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/home.nix b/home.nix index c09fad4..6fc3820 100644 --- a/home.nix +++ b/home.nix @@ -928,11 +928,11 @@ in xdg.mimeApps = { enable = true; defaultApplications = { - "text/html" = "zen.desktop"; - "x-scheme-handler/http" = "zen.desktop"; - "x-scheme-handler/https" = "zen.desktop"; - "x-scheme-handler/about" = "zen.desktop"; - "x-scheme-handler/unknown" = "zen.desktop"; + "text/html" = "zen-beta.desktop"; + "x-scheme-handler/http" = "zen-beta.desktop"; + "x-scheme-handler/https" = "zen-beta.desktop"; + "x-scheme-handler/about" = "zen-beta.desktop"; + "x-scheme-handler/unknown" = "zen-beta.desktop"; "inode/directory" = "org.gnome.Nautilus.desktop"; "application/zip" = "org.gnome.FileRoller.desktop"; "application/x-tar" = "org.gnome.FileRoller.desktop"; From 960d2fd9dae22f5a7b36ddbc59ec2a02396e153f Mon Sep 17 00:00:00 2001 From: Jet Date: Mon, 30 Mar 2026 15:32:43 -0700 Subject: [PATCH 173/211] feat: add t3code --- flake.nix | 44 ++++++++++++++++++++++++++++++++++++++++++++ home.nix | 9 +-------- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/flake.nix b/flake.nix index 901c9f6..4ffafb0 100644 --- a/flake.nix +++ b/flake.nix @@ -37,6 +37,50 @@ ... }: { + packages.x86_64-linux = + let + pkgs = nixpkgs.legacyPackages.x86_64-linux; + t3Version = "0.0.15"; + t3App = pkgs.appimageTools.wrapType2 rec { + pname = "t3"; + version = t3Version; + + src = pkgs.fetchurl { + url = "https://github.com/pingdotgg/t3code/releases/download/v${version}/T3-Code-${version}-x86_64.AppImage"; + hash = "sha256:67ccbb4961f9e7e642edc469828d1c746dbbdeb6c38854b7a5742ddeea7bb038"; + }; + + extraPkgs = pkgs: [ pkgs.xdg-utils ]; + }; + t3Icon = pkgs.fetchurl { + url = "https://raw.githubusercontent.com/pingdotgg/t3code/v${t3Version}/apps/desktop/resources/icon.png"; + hash = "sha256-rXMAXnje7dOKxoqQ/G16Ohub9A54IPhhlv9x1/aKcvw="; + }; + t3Desktop = pkgs.makeDesktopItem { + name = "t3-code"; + desktopName = "T3 Code"; + genericName = "AI Coding Assistant"; + exec = "t3 %U"; + icon = "${t3Icon}"; + terminal = false; + categories = [ + "Development" + "IDE" + ]; + startupNotify = true; + comment = "Launch T3 Code from the GitHub release AppImage"; + }; + in + { + t3code = pkgs.symlinkJoin { + name = "t3code-${t3Version}"; + paths = [ + t3App + t3Desktop + ]; + }; + }; + formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt; nixosConfigurations = { framework = nixpkgs.lib.nixosSystem { diff --git a/home.nix b/home.nix index 6fc3820..27f398a 100644 --- a/home.nix +++ b/home.nix @@ -9,13 +9,6 @@ let name = "Jet"; email = "jet@extremist.software"; sshSigningKey = "~/.ssh/id_ed25519.pub"; - t3 = pkgs.writeShellApplication { - name = "t3"; - runtimeInputs = [ pkgs.nodejs_24 ]; - text = '' - exec npx --yes --package=t3@0.0.14 t3 "$@" - ''; - }; zellijNewTabZoxide = pkgs.writeShellApplication { name = "zellij-new-tab-zoxide"; runtimeInputs = [ @@ -500,7 +493,7 @@ in ffmpeg-full claude-code opencode - t3 + inputs.self.packages.${pkgs.stdenv.hostPlatform.system}.t3code zellijNewTabZoxide zellijSyncTabName inputs.codex-cli-nix.packages.${pkgs.stdenv.hostPlatform.system}.default From e2cb1f407844d4f717583073433a824542383ab7 Mon Sep 17 00:00:00 2001 From: Jet Date: Wed, 1 Apr 2026 17:02:24 -0700 Subject: [PATCH 174/211] feat: remove redundent tailscale ip print --- home.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/home.nix b/home.nix index 27f398a..3e3c538 100644 --- a/home.nix +++ b/home.nix @@ -480,8 +480,6 @@ in git remote add origin "ssh://forgejo@''${login}/''${user}/''${name}.git" '') (writeShellScriptBin "ow" '' - DNS="$(tailscale status --json | jq -r '.Self.DNSName')" - DNS="''${DNS%.}" sudo -v sudo tailscale serve --bg 4096 exec opencode web --hostname 127.0.0.1 --port 4096 From fdea8f149f644023686f16dbaf0f820f7c40f853 Mon Sep 17 00:00:00 2001 From: Jet Date: Wed, 1 Apr 2026 17:02:24 -0700 Subject: [PATCH 175/211] fix: update readme spelling --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 048ad14..ac50f50 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# Jet's Nixos config +# Jet's NixOS config -I've done nixos a few times but this time around it's been very comfterable. Nothing is really that special about it, but feel free to copy it! +I've done NixOS a few times, but this round has been very comfortable. Nothing is really that special about it, but feel free to copy it! -> silly language thing creddited to https://github.com/SylvanFranklin/.config +> silly language thing credited to https://github.com/SylvanFranklin/.config This flake currently defines one host: `framework` which is my laptop. From 015010858a7da2ffb3475afeede5d66e2e2ba4f4 Mon Sep 17 00:00:00 2001 From: Jet Date: Wed, 1 Apr 2026 17:02:24 -0700 Subject: [PATCH 176/211] fix: remove self input from flake.nix --- flake.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/flake.nix b/flake.nix index 4ffafb0..dc4610f 100644 --- a/flake.nix +++ b/flake.nix @@ -30,7 +30,6 @@ outputs = inputs@{ - self, nixpkgs, home-manager, nixos-hardware, From 7f627ec2d36ed4bb662f6a0259c0f329f9fde33c Mon Sep 17 00:00:00 2001 From: Jet Date: Wed, 1 Apr 2026 17:02:24 -0700 Subject: [PATCH 177/211] update: nfu --- flake.lock | 54 +++++++++++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/flake.lock b/flake.lock index 3db4601..f05138c 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1774586286, - "narHash": "sha256-VuNhpBWmYbGAoV2r/6SoP7TsFnkGlLbCbPTkBsDtLF8=", + "lastModified": 1775002057, + "narHash": "sha256-2BlROtk2O6cHEBWYOodHIHWGh55x/kK0nlQIrVHRj68=", "owner": "ryoppippi", "repo": "claude-code-overlay", - "rev": "f8202e2dc56b054969348d1cf98082d54e31c947", + "rev": "f657902903109bd56352ff86cd522b4721b3b87a", "type": "github" }, "original": { @@ -28,11 +28,11 @@ ] }, "locked": { - "lastModified": 1774566674, - "narHash": "sha256-UVHUY9jHiFj9jqY3KH28OThDEX4JUeEEWIUE+3VFJVI=", + "lastModified": 1774977969, + "narHash": "sha256-MbCh0ayUhnP8Z/83tTPR9iTzNxQkfleedmlcgsHh1LA=", "owner": "sadjow", "repo": "codex-cli-nix", - "rev": "d43a70bd123e49cb862ee36d0e3ab2ed550308df", + "rev": "8be597476146c75f440708f9a7ad50ae489641c4", "type": "github" }, "original": { @@ -87,11 +87,11 @@ ] }, "locked": { - "lastModified": 1774738535, - "narHash": "sha256-2jfBEZUC67IlnxO5KItFCAd7Oc+1TvyV/jQlR+2ykGQ=", + "lastModified": 1775080052, + "narHash": "sha256-jAB4ZZbx8ECu9GcE/PUUwT+wpooZ0Ssmn2imB8PVTdM=", "owner": "nix-community", "repo": "home-manager", - "rev": "769e07ef8f4cf7b1ec3b96ef015abec9bc6b1e2a", + "rev": "6267895e9898399f0ce2fe79b645e9ee4858aaff", "type": "github" }, "original": { @@ -108,11 +108,11 @@ ] }, "locked": { - "lastModified": 1773422513, - "narHash": "sha256-MPjR48roW7CUMU6lu0+qQGqj92Kuh3paIulMWFZy+NQ=", + "lastModified": 1774991950, + "narHash": "sha256-kScKj3qJDIWuN9/6PMmgy5esrTUkYinrO5VvILik/zw=", "owner": "nix-community", "repo": "home-manager", - "rev": "ef12a9a2b0f77c8fa3dda1e7e494fca668909056", + "rev": "f2d3e04e278422c7379e067e323734f3e8c585a7", "type": "github" }, "original": { @@ -128,11 +128,11 @@ ] }, "locked": { - "lastModified": 1774156144, - "narHash": "sha256-gdYe9wTPl4ignDyXUl1LlICWj41+S0GB5lG1fKP17+A=", + "lastModified": 1774762074, + "narHash": "sha256-89Mh4Eb/5stVJX6kGagVMijcU2FmfeD8Qv7UXc5d92o=", "owner": "nix-community", "repo": "nix-index-database", - "rev": "55b588747fa3d7fc351a11831c4b874dab992862", + "rev": "bc13aeaed568be76eab84df88ff39261bb52ff70", "type": "github" }, "original": { @@ -143,11 +143,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1774567711, - "narHash": "sha256-uVlOHBvt6Vc/iYNJXLPa4c3cLXwMllOCVfAaLAcphIo=", + "lastModified": 1774933469, + "narHash": "sha256-OrnCQeUO2bqaWUl0lkDWyGWjKsOhtCyd7JSfTedQNUE=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "3f6f874dfc34d386d10e434c48ad966c4832243e", + "rev": "f4c4c2c0c923d7811ac2a63ccc154767e4195337", "type": "github" }, "original": { @@ -158,11 +158,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1774386573, - "narHash": "sha256-4hAV26quOxdC6iyG7kYaZcM3VOskcPUrdCQd/nx8obc=", + "lastModified": 1775036866, + "narHash": "sha256-ZojAnPuCdy657PbTq5V0Y+AHKhZAIwSIT2cb8UgAz/U=", "owner": "nixos", "repo": "nixpkgs", - "rev": "46db2e09e1d3f113a13c0d7b81e2f221c63b8ce9", + "rev": "6201e203d09599479a3b3450ed24fa81537ebc4e", "type": "github" }, "original": { @@ -180,11 +180,11 @@ ] }, "locked": { - "lastModified": 1774737476, - "narHash": "sha256-Bf6YP8iirgloZ+MwyDvRl/DDQrfNMrE4Ou47l/StxJ8=", + "lastModified": 1775083152, + "narHash": "sha256-jmj9atnmjkaqnmNz63TV0gcoaNeC1ooxmxyWgQ9vGfk=", "owner": "nix-community", "repo": "NUR", - "rev": "88adcc30bbaa5b6d16f48a5a2ccc10758d145db3", + "rev": "f0acccabf10fa7fa1e8d27da0d20e2f6df3150b2", "type": "github" }, "original": { @@ -228,11 +228,11 @@ ] }, "locked": { - "lastModified": 1774708879, - "narHash": "sha256-rTYvYkQL69/YkZB+MRA/IaX1qJ1lPx5KXoQS2/9+7Mw=", + "lastModified": 1775021133, + "narHash": "sha256-JB0u0evfSlmNg9HdGDxtXjaCcdKUpFPdSAMGxvJo5Pw=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "d01d23c798cceef42307d5789bfbce70515e8800", + "rev": "4bf1a6837064486c4f573a9d500c4cf3c1c075c0", "type": "github" }, "original": { From 526498ce2a73334be1248b77f709cc0242c74d04 Mon Sep 17 00:00:00 2001 From: Jet Date: Wed, 1 Apr 2026 18:05:42 -0700 Subject: [PATCH 178/211] feat: do sudo before nh and exit on fail --- flake.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/flake.nix b/flake.nix index dc4610f..e0c9d5f 100644 --- a/flake.nix +++ b/flake.nix @@ -110,6 +110,7 @@ let pkgs = nixpkgs.legacyPackages.x86_64-linux; nhs = pkgs.writeShellScriptBin "nhs" '' + sudo -v || exit $? nh os switch --hostname framework path:. "$@" ''; in From 9260cbff20617a4811749d2e7bad4df67240638b Mon Sep 17 00:00:00 2001 From: Jet Date: Wed, 1 Apr 2026 18:05:42 -0700 Subject: [PATCH 179/211] feat: set tailscale exit to sjc ip --- configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configuration.nix b/configuration.nix index 741c4ef..7742705 100644 --- a/configuration.nix +++ b/configuration.nix @@ -34,7 +34,7 @@ services.tailscale = { enable = true; extraSetFlags = [ - "--exit-node=us-sjc-wg-401.mullvad.ts.net" + "--exit-node=100.66.72.23" "--exit-node-allow-lan-access" ]; }; From 039ccb6f72e95866a63b288f1a01273b4dad9c0f Mon Sep 17 00:00:00 2001 From: Jet Date: Thu, 2 Apr 2026 17:40:20 -0700 Subject: [PATCH 180/211] feat: add fullscreen startup apps and apod wallpaper --- flake.lock | 24 +-- home.nix | 508 +++++++++++++++++------------------------------------ 2 files changed, 174 insertions(+), 358 deletions(-) diff --git a/flake.lock b/flake.lock index f05138c..32cb5c4 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1775002057, - "narHash": "sha256-2BlROtk2O6cHEBWYOodHIHWGh55x/kK0nlQIrVHRj68=", + "lastModified": 1775171219, + "narHash": "sha256-3poVYyTB/THwwX2OIA4YNTEhg5pW3XEt1l53GV0j2mk=", "owner": "ryoppippi", "repo": "claude-code-overlay", - "rev": "f657902903109bd56352ff86cd522b4721b3b87a", + "rev": "644838d512a95c415886736f1e6dc28531625f7d", "type": "github" }, "original": { @@ -87,11 +87,11 @@ ] }, "locked": { - "lastModified": 1775080052, - "narHash": "sha256-jAB4ZZbx8ECu9GcE/PUUwT+wpooZ0Ssmn2imB8PVTdM=", + "lastModified": 1775143651, + "narHash": "sha256-S0RqAyDPMTcv9vASMaE8eY1QexFysAOdnxUxFHIPOyE=", "owner": "nix-community", "repo": "home-manager", - "rev": "6267895e9898399f0ce2fe79b645e9ee4858aaff", + "rev": "d166a078541982a76f14d3e06e9665fa5c9ed85e", "type": "github" }, "original": { @@ -180,11 +180,11 @@ ] }, "locked": { - "lastModified": 1775083152, - "narHash": "sha256-jmj9atnmjkaqnmNz63TV0gcoaNeC1ooxmxyWgQ9vGfk=", + "lastModified": 1775171065, + "narHash": "sha256-S0lTH4iokBAUoDLF8yiFowBCa3J7DrQLTE+isXAHCqM=", "owner": "nix-community", "repo": "NUR", - "rev": "f0acccabf10fa7fa1e8d27da0d20e2f6df3150b2", + "rev": "8014c3dae628bb117c00ad835d1a9deb39b3f731", "type": "github" }, "original": { @@ -228,11 +228,11 @@ ] }, "locked": { - "lastModified": 1775021133, - "narHash": "sha256-JB0u0evfSlmNg9HdGDxtXjaCcdKUpFPdSAMGxvJo5Pw=", + "lastModified": 1775162238, + "narHash": "sha256-0qt2cfUqfTbesQlvO3NeJLCqa7NoVxUK9vxs79prNHk=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "4bf1a6837064486c4f573a9d500c4cf3c1c075c0", + "rev": "9bf98d57ca82698483ec2d9211ce01669ba37820", "type": "github" }, "original": { diff --git a/home.nix b/home.nix index 3e3c538..fa79dfc 100644 --- a/home.nix +++ b/home.nix @@ -9,6 +9,106 @@ let name = "Jet"; email = "jet@extremist.software"; sshSigningKey = "~/.ssh/id_ed25519.pub"; + zenStartup = pkgs.makeDesktopItem { + name = "zen-startup"; + desktopName = "Zen Startup"; + comment = "Launch Zen in fullscreen"; + exec = "${config.programs.zen-browser.package}/bin/zen --fullscreen"; + terminal = false; + categories = [ "Network" ]; + }; + kittyZellijStartup = pkgs.makeDesktopItem { + name = "kitty-zellij-startup"; + desktopName = "Kitty Zellij Startup"; + comment = "Open Kitty, pick a directory, and launch Zellij"; + exec = "${pkgs.kitty}/bin/kitty --start-as=fullscreen ${zellijNewTabZoxide}/bin/zellij-new-tab-zoxide"; + terminal = false; + categories = [ + "TerminalEmulator" + ]; + }; + vesktopStartup = pkgs.makeDesktopItem { + name = "vesktop-startup"; + desktopName = "Vesktop Startup"; + comment = "Launch Vesktop in fullscreen"; + exec = "${pkgs.vesktop}/bin/vesktop --start-fullscreen"; + terminal = false; + categories = [ "Network" ]; + }; + signalStartup = pkgs.makeDesktopItem { + name = "signal-startup"; + desktopName = "Signal Startup"; + comment = "Launch Signal in fullscreen"; + exec = "${pkgs.signal-desktop}/bin/signal-desktop --start-fullscreen"; + terminal = false; + categories = [ "Network" ]; + }; + thunderbirdStartup = pkgs.makeDesktopItem { + name = "thunderbird-startup"; + desktopName = "Thunderbird Startup"; + comment = "Launch Thunderbird in fullscreen"; + exec = "${pkgs.thunderbird}/bin/thunderbird --fullscreen"; + terminal = false; + categories = [ "Network" ]; + }; + zulipStartup = pkgs.makeDesktopItem { + name = "zulip-startup"; + desktopName = "Zulip Startup"; + comment = "Launch Zulip in fullscreen"; + exec = "${pkgs.zulip}/bin/zulip --start-fullscreen"; + terminal = false; + categories = [ "Network" ]; + }; + nasaApodWallpaper = pkgs.writeShellApplication { + name = "nasa-apod-wallpaper"; + runtimeInputs = [ + pkgs.coreutils + pkgs.curl + pkgs.glib + pkgs.jq + ]; + text = '' + set -euo pipefail + + state_dir="${config.home.homeDirectory}/.local/state/nasa-apod" + mkdir -p "$state_dir" + + json="$(curl -fsSL 'https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY')" + media_type="$(printf '%s' "$json" | jq -r '.media_type // empty')" + + if [ "$media_type" != "image" ]; then + exit 0 + fi + + image_url="$(printf '%s' "$json" | jq -r '.hdurl // .url // empty')" + if [ -z "$image_url" ]; then + exit 1 + fi + + ext="''${image_url##*.}" + ext="''${ext%%\?*}" + if [ -z "$ext" ] || [ "$ext" = "$image_url" ]; then + ext="jpg" + fi + + date_stamp="$(printf '%s' "$json" | jq -r '.date // empty')" + if [ -z "$date_stamp" ]; then + date_stamp="$(date +%F)" + fi + + target="$state_dir/apod-$date_stamp.$ext" + tmp="$target.tmp" + + curl -fsSL "$image_url" -o "$tmp" + mv "$tmp" "$target" + ln -sfn "$target" "$state_dir/current" + + wallpaper_uri="file://$state_dir/current" + gsettings set org.gnome.desktop.background picture-uri "$wallpaper_uri" + gsettings set org.gnome.desktop.background picture-uri-dark "$wallpaper_uri" + gsettings set org.gnome.desktop.background picture-options 'zoom' + ''; + }; zellijNewTabZoxide = pkgs.writeShellApplication { name = "zellij-new-tab-zoxide"; runtimeInputs = [ @@ -27,7 +127,10 @@ let done)" if [ -z "$dirs" ]; then - exec ${pkgs.bashInteractive}/bin/bash -i + if [ -n "''${ZELLIJ:-}" ]; then + exec ${pkgs.bashInteractive}/bin/bash -i + fi + exit 0 fi dir="$(printf '%s\n' "$dirs" | ${pkgs.fzf}/bin/fzf \ @@ -54,11 +157,34 @@ let cd "$dir" + escape_kdl() { + local value="$1" + value="''${value//\\/\\\\}" + value="''${value//\"/\\\"}" + printf '%s' "$value" + } + if [ -n "''${ZELLIJ:-}" ]; then ${pkgs.zellij}/bin/zellij action rename-tab "$tab_name" >/dev/null 2>&1 || true fi - exec ${pkgs.bashInteractive}/bin/bash -i + if [ -n "''${ZELLIJ:-}" ]; then + exec ${pkgs.bashInteractive}/bin/bash -i + fi + + layout_file="${config.home.homeDirectory}/.local/state/zellij-launch-layout.kdl" + mkdir -p "$(dirname "$layout_file")" + printf '%s\n' \ + 'layout {' \ + " tab name=\"$(escape_kdl "$tab_name")\" cwd=\"$(escape_kdl "$dir")\" {" \ + ' pane focus=true' \ + ' pane size=1 borderless=true {' \ + ' plugin location="compact-bar"' \ + ' }' \ + ' }' \ + '}' > "$layout_file" + + exec ${pkgs.zellij}/bin/zellij -l "$layout_file" ''; }; zellijSyncTabName = pkgs.writeShellApplication { @@ -100,327 +226,6 @@ let exec ${pkgs.zellij}/bin/zellij action rename-tab "$next_tab_name" ''; }; - browserAudio = pkgs.writeShellApplication { - name = "browser-audio"; - runtimeInputs = [ - pkgs.coreutils - pkgs.curl - pkgs.ffmpeg-full - pkgs.fzf - pkgs.gawk - pkgs.gnugrep - pkgs.jq - pkgs.pulseaudio - pkgs.qpwgraph - pkgs.pavucontrol - pkgs.procps - ]; - text = '' - set -euo pipefail - - sink_name="''${BROWSER_AUDIO_SINK:-browser-radio}" - sink_description="''${BROWSER_AUDIO_DESCRIPTION:-Browser Radio}" - bitrate="''${BROWSER_AUDIO_BITRATE:-128k}" - - usage() { - printf '%s\n' \ - "Usage: browser-audio [args]" \ - "" \ - "Commands:" \ - " setup Create the dedicated browser sink if needed" \ - " pick Pick a live playback stream and move it to the sink" \ - " route Move matching playback streams to the sink" \ - " status Show the sink and any streams already routed to it" \ - " open Open pavucontrol and qpwgraph for manual routing" \ - " cast Stream the sink monitor to Icecast/Shoutcast with ffmpeg" \ - " cast-pick Pick a live stream, route it, then start casting" \ - " stop Stop prior ffmpeg jobs and remove the sink" \ - " remove Remove the dedicated sink" \ - "" \ - "Notes:" \ - " - If your browser exposes a tab as its own playback stream, pick can isolate it." \ - " - Otherwise, launch a dedicated browser instance for music and route that stream." - } - - ensure_sink() { - if ! pactl list short sinks | awk '{print $2}' | grep -Fxq "$sink_name"; then - pactl load-module module-null-sink \ - sink_name="$sink_name" \ - sink_properties="device.description=$sink_description" >/dev/null - fi - } - - sink_module_id() { - pactl -f json list modules | jq -r --arg sink_name "$sink_name" ' - .[] - | select(.name == "module-null-sink") - | select((.argument // "") | contains("sink_name=" + $sink_name)) - | .index - ' | head -n1 - } - - stop_existing_casts() { - pkill -f "ffmpeg.*$sink_name\.monitor" >/dev/null 2>&1 || true - } - - remove_sink() { - local module_id - - module_id="$(sink_module_id || true)" - if [ -n "$module_id" ] && [ "$module_id" != "null" ]; then - pactl unload-module "$module_id" - fi - } - - reset_state() { - stop_existing_casts - remove_sink - } - - stream_rows() { - pactl -f json list sink-inputs | jq -r ' - .[] - | [ - (.index | tostring), - (.sink | tostring), - (.properties."application.name" // "unknown-app"), - (.properties."media.name" // .properties."node.description" // "unknown-media"), - (.properties."application.process.binary" // "unknown-bin") - ] - | @tsv - ' - } - - pick_stream() { - local selection - - selection="$(stream_rows | fzf \ - --delimiter=$'\t' \ - --with-nth=3,4,5 \ - --layout=reverse \ - --border \ - --prompt='audio> ' \ - --header=$'Pick a live playback stream to route into browser-radio\napp | media | binary' \ - --exit-0)" - - if [ -z "$selection" ]; then - exit 0 - fi - - pactl move-sink-input "$(printf '%s\n' "$selection" | cut -f1)" "$sink_name" - } - - route_matching() { - local pattern="$1" - local matches - - matches="$(stream_rows | grep -Ei "$pattern" || true)" - if [ -z "$matches" ]; then - printf 'No playback streams matched %s\n' "$pattern" >&2 - exit 1 - fi - - printf '%s\n' "$matches" | while IFS=$'\t' read -r stream_id _rest; do - [ -n "$stream_id" ] || continue - pactl move-sink-input "$stream_id" "$sink_name" - done - } - - show_status() { - printf 'Sink: %s\n' "$sink_name" - pactl list short sinks | awk -v sink="$sink_name" '$2 == sink {print}' - printf '\nStreams on %s:\n' "$sink_name" - pactl -f json list sink-inputs | jq -r --arg sink_name "$sink_name" --argjson sink_index "$(pactl list short sinks | awk -v sink="$sink_name" '$2 == sink {print $1; exit}')" ' - .[] - | select(.sink == $sink_index) - | "- #\(.index) \(.properties["application.name"] // "unknown-app") :: \(.properties["media.name"] // .properties["node.description"] // "unknown-media")" - ' - } - - cast_sink() { - local url="$1" - local rest auth host_path endpoint - local tmpdir fifo ffmpeg_pid curl_pid ffmpeg_status curl_status interrupted=0 - - case "$url" in - icecast://*) - rest="''${url#icecast://}" - auth="''${rest%%@*}" - host_path="''${rest#*@}" - endpoint="http://''${host_path}" - ;; - *) - printf 'cast requires an icecast:// URL\n' >&2 - exit 1 - ;; - esac - - tmpdir="$(mktemp -d)" - fifo="$tmpdir/audio.mp3" - mkfifo "$fifo" - - cleanup_cast() { - local pid - local waited - - trap - INT TERM EXIT - - for pid in "''${ffmpeg_pid:-}" "''${curl_pid:-}"; do - [ -n "$pid" ] || continue - kill "$pid" >/dev/null 2>&1 || true - done - - for pid in "''${ffmpeg_pid:-}" "''${curl_pid:-}"; do - [ -n "$pid" ] || continue - waited=0 - while kill -0 "$pid" >/dev/null 2>&1; do - if [ "$waited" -ge 20 ]; then - kill -9 "$pid" >/dev/null 2>&1 || true - break - fi - sleep 0.1 - waited=$((waited + 1)) - done - wait "$pid" >/dev/null 2>&1 || true - done - - rm -rf "$tmpdir" - if [ "$interrupted" -eq 1 ]; then - exit 130 - fi - } - - trap 'interrupted=1; cleanup_cast' INT TERM - trap cleanup_cast EXIT - - curl \ - --silent \ - --show-error \ - --http1.0 \ - --user "$auth" \ - --header 'Content-Type: audio/mpeg' \ - --request SOURCE \ - --data-binary @- \ - "$endpoint" <"$fifo" & - curl_pid=$! - - ffmpeg \ - -y \ - -hide_banner \ - -loglevel warning \ - -f pulse \ - -channel_layout stereo \ - -i "$sink_name.monitor" \ - -ac 2 \ - -ar 44100 \ - -acodec libmp3lame \ - -b:a "$bitrate" \ - -id3v2_version 0 \ - -write_xing 0 \ - -f mp3 \ - "$fifo" & - ffmpeg_pid=$! - - set +e - wait "$ffmpeg_pid" - ffmpeg_status=$? - wait "$curl_pid" - curl_status=$? - set -e - - trap - INT TERM EXIT - rm -rf "$tmpdir" - - if [ "$ffmpeg_status" -ne 0 ]; then - return "$ffmpeg_status" - fi - - if [ "$curl_status" -ne 0 ]; then - return "$curl_status" - fi - } - - command="''${1:-help}" - case "$command" in - setup) - ensure_sink - show_status - ;; - pick) - ensure_sink - pick_stream - show_status - ;; - route) - ensure_sink - if [ "''${2:-}" = "" ]; then - printf 'route requires a regex\n' >&2 - exit 1 - fi - route_matching "$2" - show_status - ;; - status) - ensure_sink - show_status - ;; - open) - ensure_sink - pavucontrol >/dev/null 2>&1 & - qpwgraph >/dev/null 2>&1 & - ;; - cast) - reset_state - ensure_sink - if [ "''${2:-}" = "" ]; then - printf 'cast requires an icecast:// URL\n' >&2 - exit 1 - fi - cast_sink "$2" - ;; - cast-pick) - reset_state - ensure_sink - if [ "''${2:-}" = "" ]; then - printf 'cast-pick requires an icecast:// URL\n' >&2 - exit 1 - fi - pick_stream - show_status - cast_sink "$2" - ;; - stop) - reset_state - ;; - remove) - remove_sink - ;; - help|-h|--help) - usage - ;; - *) - printf 'Unknown command: %s\n\n' "$command" >&2 - usage >&2 - exit 1 - ;; - esac - ''; - }; - zenRadio = pkgs.writeShellApplication { - name = "zen-radio"; - runtimeInputs = [ - config.programs.zen-browser.package - pkgs.coreutils - ]; - text = '' - set -euo pipefail - - profile_dir="''${XDG_STATE_HOME:-$HOME/.local/state}/zen-radio-profile" - mkdir -p "$profile_dir" - - exec zen --new-instance --profile "$profile_dir" "$@" - ''; - }; in { imports = [ inputs.zen-browser.homeModules.default ]; @@ -431,6 +236,11 @@ in # Configure GNOME settings dconf.settings = { + "org/gnome/desktop/background" = { + picture-options = "zoom"; + picture-uri = "file://${config.home.homeDirectory}/.local/state/nasa-apod/current"; + picture-uri-dark = "file://${config.home.homeDirectory}/.local/state/nasa-apod/current"; + }; "org/gnome/desktop/interface" = { clock-format = "12h"; clock-show-weekday = true; @@ -487,7 +297,6 @@ in # CLI bat - browserAudio ffmpeg-full claude-code opencode @@ -535,7 +344,6 @@ in tor-browser vesktop vlc - zenRadio zulip linphone lmstudio @@ -750,10 +558,6 @@ in confirm_os_window_close = "0"; enable_audio_bell = "no"; }; - keybindings = { - "ctrl+shift+c" = "copy_and_clear_or_interrupt"; - "ctrl+shift+v" = "paste_from_clipboard"; - }; themeFile = "GitHub_Dark_High_Contrast"; }; @@ -860,7 +664,7 @@ in xdg.desktopEntries.kitty = { name = "Kitty"; genericName = "Terminal Emulator"; - exec = "kitty --start-as=fullscreen"; + exec = "${pkgs.kitty}/bin/kitty --start-as=fullscreen ${zellijNewTabZoxide}/bin/zellij-new-tab-zoxide"; icon = "kitty"; type = "Application"; categories = [ @@ -870,20 +674,6 @@ in comment = "Fast, featureful, GPU based terminal emulator"; }; - xdg.desktopEntries.zen-radio = { - name = "Zen Radio"; - genericName = "Dedicated Browser Audio"; - exec = "zen-radio %U"; - icon = "zen"; - type = "Application"; - categories = [ - "Network" - "WebBrowser" - "AudioVideo" - ]; - comment = "Dedicated Zen instance for isolating music playback"; - }; - # Extract archives on double-click xdg.desktopEntries.extract-here = { name = "Extract Here"; @@ -910,11 +700,37 @@ in xdg.autostart = { enable = true; entries = [ - pkgs.kitty - config.programs.zen-browser.package + zenStartup + kittyZellijStartup + signalStartup + thunderbirdStartup + vesktopStartup + zulipStartup ]; }; + systemd.user.services.nasa-apod-wallpaper = { + Unit = { + Description = "Fetch NASA APOD wallpaper"; + After = [ "graphical-session.target" ]; + PartOf = [ "graphical-session.target" ]; + }; + Service = { + Type = "oneshot"; + ExecStart = "${nasaApodWallpaper}/bin/nasa-apod-wallpaper"; + }; + }; + + systemd.user.timers.nasa-apod-wallpaper = { + Unit.Description = "Refresh NASA APOD wallpaper daily"; + Timer = { + OnStartupSec = "2m"; + OnUnitActiveSec = "1d"; + Unit = "nasa-apod-wallpaper.service"; + }; + Install.WantedBy = [ "timers.target" ]; + }; + # Set Zen Browser as default xdg.mimeApps = { enable = true; From cf6ae10d392cbe48d88a66b1e1ce8a2f7030dab5 Mon Sep 17 00:00:00 2001 From: Jet Date: Thu, 2 Apr 2026 18:35:31 -0700 Subject: [PATCH 181/211] feat: make apod more reliable and configure zellij to die --- home.nix | 54 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/home.nix b/home.nix index fa79dfc..0822516 100644 --- a/home.nix +++ b/home.nix @@ -71,9 +71,33 @@ let set -euo pipefail state_dir="${config.home.homeDirectory}/.local/state/nasa-apod" + current_link="$state_dir/current" mkdir -p "$state_dir" + curl_args=( + --fail + --silent + --show-error + --location + --retry 30 + --retry-all-errors + --retry-delay 2 + --connect-timeout 10 + --max-time 300 + ) + + set_wallpaper() { + local target="$1" + + gsettings set org.gnome.desktop.background picture-uri "file://$target" + gsettings set org.gnome.desktop.background picture-uri-dark "file://$target" + gsettings set org.gnome.desktop.background picture-options 'zoom' + } + + json="$(curl "''${curl_args[@]}" 'https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY' || true)" + if [ -z "$json" ]; then + exit 0 + fi - json="$(curl -fsSL 'https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY')" media_type="$(printf '%s' "$json" | jq -r '.media_type // empty')" if [ "$media_type" != "image" ]; then @@ -82,7 +106,7 @@ let image_url="$(printf '%s' "$json" | jq -r '.hdurl // .url // empty')" if [ -z "$image_url" ]; then - exit 1 + exit 0 fi ext="''${image_url##*.}" @@ -99,14 +123,13 @@ let target="$state_dir/apod-$date_stamp.$ext" tmp="$target.tmp" - curl -fsSL "$image_url" -o "$tmp" - mv "$tmp" "$target" - ln -sfn "$target" "$state_dir/current" - - wallpaper_uri="file://$state_dir/current" - gsettings set org.gnome.desktop.background picture-uri "$wallpaper_uri" - gsettings set org.gnome.desktop.background picture-uri-dark "$wallpaper_uri" - gsettings set org.gnome.desktop.background picture-options 'zoom' + if curl "''${curl_args[@]}" "$image_url" -o "$tmp" && [ -s "$tmp" ]; then + mv "$tmp" "$target" + ln -sfn "$target" "$current_link" + set_wallpaper "$target" + else + rm -f "$tmp" + fi ''; }; zellijNewTabZoxide = pkgs.writeShellApplication { @@ -236,11 +259,6 @@ in # Configure GNOME settings dconf.settings = { - "org/gnome/desktop/background" = { - picture-options = "zoom"; - picture-uri = "file://${config.home.homeDirectory}/.local/state/nasa-apod/current"; - picture-uri-dark = "file://${config.home.homeDirectory}/.local/state/nasa-apod/current"; - }; "org/gnome/desktop/interface" = { clock-format = "12h"; clock-show-weekday = true; @@ -447,7 +465,9 @@ in show_startup_tips = false; show_release_notes = false; - on_force_close = "detach"; + attach_to_session = false; + on_force_close = "quit"; + session_serialization = false; ui = { pane_frames = { @@ -724,7 +744,7 @@ in systemd.user.timers.nasa-apod-wallpaper = { Unit.Description = "Refresh NASA APOD wallpaper daily"; Timer = { - OnStartupSec = "2m"; + OnStartupSec = "0"; OnUnitActiveSec = "1d"; Unit = "nasa-apod-wallpaper.service"; }; From 5f65331bef3ad93750a736ad4af76fb7a6be8762 Mon Sep 17 00:00:00 2001 From: Jet Date: Sat, 4 Apr 2026 11:08:25 -0700 Subject: [PATCH 182/211] update: nfu --- flake.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/flake.lock b/flake.lock index 32cb5c4..b75d776 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1775171219, - "narHash": "sha256-3poVYyTB/THwwX2OIA4YNTEhg5pW3XEt1l53GV0j2mk=", + "lastModified": 1775261198, + "narHash": "sha256-BdXWR+LoP8K0V71oT1pNXdlajowVxaLiXXeDXMdvLoM=", "owner": "ryoppippi", "repo": "claude-code-overlay", - "rev": "644838d512a95c415886736f1e6dc28531625f7d", + "rev": "e4ec05a124e6a206e405091f245449291c58e8b6", "type": "github" }, "original": { @@ -87,11 +87,11 @@ ] }, "locked": { - "lastModified": 1775143651, - "narHash": "sha256-S0RqAyDPMTcv9vASMaE8eY1QexFysAOdnxUxFHIPOyE=", + "lastModified": 1775320414, + "narHash": "sha256-pIDPHus8udcxO4lT+zUULBfvue2D08E73abzVEJNE+8=", "owner": "nix-community", "repo": "home-manager", - "rev": "d166a078541982a76f14d3e06e9665fa5c9ed85e", + "rev": "5ee3b3ef63e469c84639c2c9e282726352c86069", "type": "github" }, "original": { @@ -143,11 +143,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1774933469, - "narHash": "sha256-OrnCQeUO2bqaWUl0lkDWyGWjKsOhtCyd7JSfTedQNUE=", + "lastModified": 1775203647, + "narHash": "sha256-6MWaMLXK9QMndI94CIxeiPafi3wuO+imCtK9tfhsZdw=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "f4c4c2c0c923d7811ac2a63ccc154767e4195337", + "rev": "80afbd13eea0b7c4ac188de949e1711b31c2b5f0", "type": "github" }, "original": { @@ -180,11 +180,11 @@ ] }, "locked": { - "lastModified": 1775171065, - "narHash": "sha256-S0lTH4iokBAUoDLF8yiFowBCa3J7DrQLTE+isXAHCqM=", + "lastModified": 1775325653, + "narHash": "sha256-dlopJjB8mZ3wE4HEUgQOE79zy/rutmG5m96ehAwmTWU=", "owner": "nix-community", "repo": "NUR", - "rev": "8014c3dae628bb117c00ad835d1a9deb39b3f731", + "rev": "63115094168cdfc8a4c09261f3f2fc9838f3affa", "type": "github" }, "original": { @@ -228,11 +228,11 @@ ] }, "locked": { - "lastModified": 1775162238, - "narHash": "sha256-0qt2cfUqfTbesQlvO3NeJLCqa7NoVxUK9vxs79prNHk=", + "lastModified": 1775278263, + "narHash": "sha256-BgkUmlOuFaaZQCnlhXkQ3/Fng65aq00tJQkpoeTn7Mw=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "9bf98d57ca82698483ec2d9211ce01669ba37820", + "rev": "bb051d7a0f04356d42528bbb65dc014adf2dab66", "type": "github" }, "original": { From 3e2229799cb6e8f99c89c7dfc595a21a91f71286 Mon Sep 17 00:00:00 2001 From: Jet Date: Sat, 4 Apr 2026 11:37:40 -0700 Subject: [PATCH 183/211] feat: move to betterbird off of thunderbird --- configuration.nix | 3 ++ home.nix | 122 ++++++++++------------------------------------ 2 files changed, 28 insertions(+), 97 deletions(-) diff --git a/configuration.nix b/configuration.nix index 7742705..8d25997 100644 --- a/configuration.nix +++ b/configuration.nix @@ -110,6 +110,8 @@ }; }; + services.flatpak.enable = true; + services.displayManager.gdm.enable = true; services.desktopManager.gnome.enable = true; services.gnome.sushi.enable = true; @@ -251,6 +253,7 @@ environment.systemPackages = with pkgs; [ bubblewrap + flatpak wget nh ]; diff --git a/home.nix b/home.nix index 0822516..5e260f4 100644 --- a/home.nix +++ b/home.nix @@ -43,11 +43,11 @@ let terminal = false; categories = [ "Network" ]; }; - thunderbirdStartup = pkgs.makeDesktopItem { - name = "thunderbird-startup"; - desktopName = "Thunderbird Startup"; - comment = "Launch Thunderbird in fullscreen"; - exec = "${pkgs.thunderbird}/bin/thunderbird --fullscreen"; + betterbirdStartup = pkgs.makeDesktopItem { + name = "betterbird-startup"; + desktopName = "Betterbird Startup"; + comment = "Launch Betterbird in fullscreen"; + exec = "${pkgs.flatpak}/bin/flatpak run eu.betterbird.Betterbird --fullscreen"; terminal = false; categories = [ "Network" ]; }; @@ -716,6 +716,24 @@ in noDisplay = true; }; + xdg.desktopEntries.betterbird = { + name = "Betterbird"; + genericName = "Mail Client"; + exec = "${pkgs.flatpak}/bin/flatpak run eu.betterbird.Betterbird %u"; + icon = "eu.betterbird.Betterbird"; + type = "Application"; + categories = [ + "Network" + "Email" + ]; + mimeType = [ + "x-scheme-handler/mailto" + "x-scheme-handler/webcal" + "text/calendar" + ]; + comment = "Fine-tuned Thunderbird mail client"; + }; + # Autostart applications using proper desktop files xdg.autostart = { enable = true; @@ -723,7 +741,7 @@ in zenStartup kittyZellijStartup signalStartup - thunderbirdStartup + betterbirdStartup vesktopStartup zulipStartup ]; @@ -760,6 +778,7 @@ in "x-scheme-handler/https" = "zen-beta.desktop"; "x-scheme-handler/about" = "zen-beta.desktop"; "x-scheme-handler/unknown" = "zen-beta.desktop"; + "x-scheme-handler/mailto" = "betterbird.desktop"; "inode/directory" = "org.gnome.Nautilus.desktop"; "application/zip" = "org.gnome.FileRoller.desktop"; "application/x-tar" = "org.gnome.FileRoller.desktop"; @@ -774,97 +793,6 @@ in }; }; - programs.thunderbird = { - enable = true; - profiles.default = { - isDefault = true; - settings = { - # Use maildir instead of mbox — faster for large mailboxes - "mail.serverDefaultStoreContractID" = "@mozilla.org/msgstore/maildirstore;1"; - - # Increase IMAP connection limits - "mail.server.default.max_cached_connections" = 10; - "mail.imap.max_cached_connections" = 10; - - # IMAP IDLE — server pushes new mail instantly (no polling delay) - "mail.server.default.use_idle" = true; - - # Poll every 1 minute as fallback when IDLE drops - "mail.server.default.check_new_mail" = true; - "mail.server.default.check_time" = 1; - - # Faster IMAP sync - "mail.imap.min_time_between_cleanups" = 300; - "mail.imap.fetch_by_chunks" = true; - "mail.imap.chunk_size" = 65536; - "mail.imap.chunk_add" = 16384; - - # Reduce timeouts (fail fast instead of hanging) - "mail.server.default.timeout" = 60; - "mailnews.tcptimeout" = 60; - - # Network performance - "network.http.max-connections" = 48; - "network.http.max-persistent-connections-per-server" = 10; - "network.dns.disablePrefetch" = false; - - # Cache messages offline for instant reading - "mail.server.default.offline_download" = true; - "mail.server.default.download_on_biff" = true; - - # Auto-compact folders when >20MB wasted (keeps mbox files lean) - "mail.purge_threshhold_mb" = 20; - "mail.prompt_purge_threshhold" = false; - - # Block remote content by default (tracking pixels, slow image loads) - "mailnews.message_display.disable_remote_image" = true; - - # Disable adaptive junk filter (server-side spam is better) - "mail.spam.manualMark" = true; - "mailnews.ui.junk.firstuse" = false; - "mailnews.ui.junk.manualMarkAsJunkMarksRead" = true; - - # Prefetch next message while reading current one - "mail.server.default.autosync_offline_stores" = true; - - # Open links in default browser (Zen) instead of Thunderbird's internal browser - "network.protocol-handler.warn-external.http" = false; - "network.protocol-handler.warn-external.https" = false; - "network.protocol-handler.expose-all" = true; - - # Simplify message rendering - "mailnews.display.prefer_plaintext" = false; - "mailnews.display.disallow_mime_handlers" = 0; - "mailnews.display.html_as" = 0; - - # Disable return receipt prompts - "mail.incorporate.return_receipt" = 0; - "mail.receipt.request_return_receipt_on" = false; - - # Disable chat and calendar background connections - "mail.chat.enabled" = false; - "calendar.integration.notify" = false; - - # Disable unnecessary features - "mail.phishing.detection.enabled" = false; - "mail.rights.version" = 1; - "mail.shell.checkDefaultClient" = false; - "mail.spotlight.enable" = false; - - # Faster UI rendering - "gfx.webrender.all" = true; - - # Network keepalive - "network.http.keep-alive.timeout" = 600; - "network.http.response.timeout" = 120; - - # Fix UI not updating after delete/archive — move to next message automatically - "mail.delete_matches_sort_order" = true; - "mail.advance_on_delete" = true; - }; - }; - }; - home.file.".claude/settings.json".text = builtins.toJSON { allowedTools = [ "Read" From 5582f5ef25ca0f19ed6ae2e23c26802e372ebe1e Mon Sep 17 00:00:00 2001 From: Jet Date: Sat, 4 Apr 2026 19:39:49 -0700 Subject: [PATCH 184/211] update: nfu --- flake.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/flake.lock b/flake.lock index b75d776..2b9ad7f 100644 --- a/flake.lock +++ b/flake.lock @@ -180,11 +180,11 @@ ] }, "locked": { - "lastModified": 1775325653, - "narHash": "sha256-dlopJjB8mZ3wE4HEUgQOE79zy/rutmG5m96ehAwmTWU=", + "lastModified": 1775356232, + "narHash": "sha256-oHbYzFPE2PoqfGKEQrLeSuJi944SvOCzNvcqQ5WHFjw=", "owner": "nix-community", "repo": "NUR", - "rev": "63115094168cdfc8a4c09261f3f2fc9838f3affa", + "rev": "4755536f14c499dbfeabc316ba0650193d116bc1", "type": "github" }, "original": { @@ -228,11 +228,11 @@ ] }, "locked": { - "lastModified": 1775278263, - "narHash": "sha256-BgkUmlOuFaaZQCnlhXkQ3/Fng65aq00tJQkpoeTn7Mw=", + "lastModified": 1775349555, + "narHash": "sha256-4QuGX/NCAqojvTxatzZ0NiWuAV4EAOXU3UdlWsrYVAE=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "bb051d7a0f04356d42528bbb65dc014adf2dab66", + "rev": "92cc7e68329b4e394fd1282d412029d550444628", "type": "github" }, "original": { From 12d137f292a5a5908e601eb0aa14d09ad12137e8 Mon Sep 17 00:00:00 2001 From: Jet Date: Sun, 5 Apr 2026 17:01:03 -0700 Subject: [PATCH 185/211] update: nfu --- flake.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/flake.lock b/flake.lock index 2b9ad7f..624d1ba 100644 --- a/flake.lock +++ b/flake.lock @@ -87,11 +87,11 @@ ] }, "locked": { - "lastModified": 1775320414, - "narHash": "sha256-pIDPHus8udcxO4lT+zUULBfvue2D08E73abzVEJNE+8=", + "lastModified": 1775427330, + "narHash": "sha256-pm1SDX9Tj4eHWwjtDEqSU+5QZO7nHHqU8GT0JtbI9rc=", "owner": "nix-community", "repo": "home-manager", - "rev": "5ee3b3ef63e469c84639c2c9e282726352c86069", + "rev": "7e7269ac064bea120d7b23daed432a096617872d", "type": "github" }, "original": { @@ -128,11 +128,11 @@ ] }, "locked": { - "lastModified": 1774762074, - "narHash": "sha256-89Mh4Eb/5stVJX6kGagVMijcU2FmfeD8Qv7UXc5d92o=", + "lastModified": 1775365369, + "narHash": "sha256-DgH5mveLoau20CuTnaU5RXZWgFQWn56onQ4Du2CqYoI=", "owner": "nix-community", "repo": "nix-index-database", - "rev": "bc13aeaed568be76eab84df88ff39261bb52ff70", + "rev": "cef5cf82671e749ac87d69aadecbb75967e6f6c3", "type": "github" }, "original": { @@ -180,11 +180,11 @@ ] }, "locked": { - "lastModified": 1775356232, - "narHash": "sha256-oHbYzFPE2PoqfGKEQrLeSuJi944SvOCzNvcqQ5WHFjw=", + "lastModified": 1775428668, + "narHash": "sha256-jBB0ePG3nuGvgkpYLQA1Zw9r33b/aZR9cNRZTxdwWTs=", "owner": "nix-community", "repo": "NUR", - "rev": "4755536f14c499dbfeabc316ba0650193d116bc1", + "rev": "4e55c283f1aa76fe3a8ed942be9e1710805e16d8", "type": "github" }, "original": { @@ -228,11 +228,11 @@ ] }, "locked": { - "lastModified": 1775349555, - "narHash": "sha256-4QuGX/NCAqojvTxatzZ0NiWuAV4EAOXU3UdlWsrYVAE=", + "lastModified": 1775367672, + "narHash": "sha256-nGC6qrRsWysfR7/8wsSooq0X71rfJjhq1b+dFI6oQtY=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "92cc7e68329b4e394fd1282d412029d550444628", + "rev": "33cd729244914f1e121477c5de148639c5e73c4a", "type": "github" }, "original": { From 8cbaf5805528f9f06133c6677ba3722c0f5da029 Mon Sep 17 00:00:00 2001 From: Jet Date: Sun, 5 Apr 2026 17:04:57 -0700 Subject: [PATCH 186/211] feat: add docker --- configuration.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/configuration.nix b/configuration.nix index 8d25997..9e7aded 100644 --- a/configuration.nix +++ b/configuration.nix @@ -112,6 +112,8 @@ services.flatpak.enable = true; + virtualisation.docker.enable = true; + services.displayManager.gdm.enable = true; services.desktopManager.gnome.enable = true; services.gnome.sushi.enable = true; @@ -158,6 +160,7 @@ "wheel" "video" "render" + "docker" ]; }; @@ -253,6 +256,8 @@ environment.systemPackages = with pkgs; [ bubblewrap + docker + docker-compose flatpak wget nh From ff48beff2ce9b8a0538b704c5462c8d42e471a4f Mon Sep 17 00:00:00 2001 From: Jet Date: Sun, 5 Apr 2026 18:47:50 -0700 Subject: [PATCH 187/211] feat: add tailscale extension --- configuration.nix | 12 ++++++++++++ home.nix | 20 ++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/configuration.nix b/configuration.nix index 9e7aded..5029856 100644 --- a/configuration.nix +++ b/configuration.nix @@ -39,6 +39,18 @@ ]; }; + systemd.services.tailscale-set-operator = { + description = "Set Tailscale operator user"; + after = [ "tailscaled.service" ]; + requires = [ "tailscaled.service" ]; + wantedBy = [ "multi-user.target" ]; + serviceConfig.Type = "oneshot"; + path = [ pkgs.tailscale ]; + script = '' + tailscale set --operator=jet + ''; + }; + time.timeZone = "America/Los_Angeles"; i18n.defaultLocale = "en_US.UTF-8"; diff --git a/home.nix b/home.nix index 5e260f4..08f629a 100644 --- a/home.nix +++ b/home.nix @@ -59,6 +59,20 @@ let terminal = false; categories = [ "Network" ]; }; + tailscaleQsExtension = pkgs.stdenvNoCC.mkDerivation { + pname = "tailscale-gnome-qs"; + version = "5"; + src = pkgs.fetchzip { + url = "https://github.com/tailscale-qs/tailscale-gnome-qs/archive/refs/tags/v5.tar.gz"; + sha256 = "0b9jy8pyxvpkxf3adlwq42kii14jn5g7xyxggjzg87pb5jg4zfg2"; + }; + dontBuild = true; + installPhase = '' + mkdir -p "$out/share/gnome-shell/extensions" + cp -r "$src/tailscale-gnome-qs@tailscale-qs.github.io" \ + "$out/share/gnome-shell/extensions/tailscale-gnome-qs@tailscale-qs.github.io" + ''; + }; nasaApodWallpaper = pkgs.writeShellApplication { name = "nasa-apod-wallpaper"; runtimeInputs = [ @@ -290,6 +304,7 @@ in "system-monitor@paradoxxx.zero.gmail.com" "clipboard-indicator@tudmotu.com" "emoji-copy@felipeftn" + "tailscale-gnome-qs@tailscale-qs.github.io" ]; }; }; @@ -747,6 +762,11 @@ in ]; }; + home.file.".local/share/gnome-shell/extensions/tailscale-gnome-qs@tailscale-qs.github.io" = { + source = "${tailscaleQsExtension}/share/gnome-shell/extensions/tailscale-gnome-qs@tailscale-qs.github.io"; + recursive = true; + }; + systemd.user.services.nasa-apod-wallpaper = { Unit = { Description = "Fetch NASA APOD wallpaper"; From 3ed33ed2cb02d2129b30643deca06d002bc1019d Mon Sep 17 00:00:00 2001 From: Jet Date: Sun, 5 Apr 2026 20:26:57 -0700 Subject: [PATCH 188/211] fix: use desktop applications for the startup --- home.nix | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/home.nix b/home.nix index 08f629a..0ec4efa 100644 --- a/home.nix +++ b/home.nix @@ -12,8 +12,8 @@ let zenStartup = pkgs.makeDesktopItem { name = "zen-startup"; desktopName = "Zen Startup"; - comment = "Launch Zen in fullscreen"; - exec = "${config.programs.zen-browser.package}/bin/zen --fullscreen"; + comment = "Launch Zen Browser"; + exec = "${config.programs.zen-browser.package}/bin/zen-beta"; terminal = false; categories = [ "Network" ]; }; @@ -753,12 +753,12 @@ in xdg.autostart = { enable = true; entries = [ - zenStartup - kittyZellijStartup - signalStartup - betterbirdStartup - vesktopStartup - zulipStartup + "${zenStartup}/share/applications/zen-startup.desktop" + "${kittyZellijStartup}/share/applications/kitty-zellij-startup.desktop" + "${signalStartup}/share/applications/signal-startup.desktop" + "${betterbirdStartup}/share/applications/betterbird-startup.desktop" + "${vesktopStartup}/share/applications/vesktop-startup.desktop" + "${zulipStartup}/share/applications/zulip-startup.desktop" ]; }; From cf18c87bff4541c1500bd50df23b1fdb162a9c50 Mon Sep 17 00:00:00 2001 From: Jet Date: Sun, 5 Apr 2026 20:32:08 -0700 Subject: [PATCH 189/211] feat: make zellij persist --- home.nix | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/home.nix b/home.nix index 0ec4efa..a334e3b 100644 --- a/home.nix +++ b/home.nix @@ -20,8 +20,8 @@ let kittyZellijStartup = pkgs.makeDesktopItem { name = "kitty-zellij-startup"; desktopName = "Kitty Zellij Startup"; - comment = "Open Kitty, pick a directory, and launch Zellij"; - exec = "${pkgs.kitty}/bin/kitty --start-as=fullscreen ${zellijNewTabZoxide}/bin/zellij-new-tab-zoxide"; + comment = "Open Kitty and attach to the main Zellij session"; + exec = "${pkgs.kitty}/bin/kitty --start-as=fullscreen ${zellijPersistentSession}/bin/zellij-persistent-session"; terminal = false; categories = [ "TerminalEmulator" @@ -224,6 +224,15 @@ let exec ${pkgs.zellij}/bin/zellij -l "$layout_file" ''; }; + zellijPersistentSession = pkgs.writeShellApplication { + name = "zellij-persistent-session"; + runtimeInputs = [ pkgs.zellij ]; + text = '' + set -euo pipefail + + exec ${pkgs.zellij}/bin/zellij attach --create main --force-run-commands + ''; + }; zellijSyncTabName = pkgs.writeShellApplication { name = "zellij-sync-tab-name"; runtimeInputs = [ @@ -480,9 +489,11 @@ in show_startup_tips = false; show_release_notes = false; - attach_to_session = false; - on_force_close = "quit"; - session_serialization = false; + attach_to_session = true; + session_name = "main"; + on_force_close = "detach"; + session_serialization = true; + serialize_pane_viewport = true; ui = { pane_frames = { @@ -699,7 +710,7 @@ in xdg.desktopEntries.kitty = { name = "Kitty"; genericName = "Terminal Emulator"; - exec = "${pkgs.kitty}/bin/kitty --start-as=fullscreen ${zellijNewTabZoxide}/bin/zellij-new-tab-zoxide"; + exec = "${pkgs.kitty}/bin/kitty --start-as=fullscreen ${zellijPersistentSession}/bin/zellij-persistent-session"; icon = "kitty"; type = "Application"; categories = [ From 5772ba0e19bc1239432dfc1813ade56a2a2420ae Mon Sep 17 00:00:00 2001 From: Jet Date: Mon, 6 Apr 2026 09:20:21 -0700 Subject: [PATCH 190/211] feat: fix opencode yolo mode and add mcp servers --- home.nix | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/home.nix b/home.nix index a334e3b..9309af7 100644 --- a/home.nix +++ b/home.nix @@ -558,8 +558,9 @@ in "da" = "direnv allow"; "nfu" = "nix flake update"; "c" = "claude"; - "o" = "opencode"; - "ou" = "OPENCODE_PERMISSION='\"allow\"' opencode"; + "o" = + "OPENCODE_PERMISSION='{\"*\":\"allow\",\"external_directory\":\"allow\",\"doom_loop\":\"allow\"}' opencode"; + "os" = "opencode"; ".." = "z .."; j = "jj"; jgf = "jj git fetch"; @@ -837,6 +838,22 @@ in ]; }; + home.file.".config/opencode/opencode.json".text = builtins.toJSON { + "$schema" = "https://opencode.ai/config.json"; + mcp = { + linear = { + type = "remote"; + url = "https://mcp.linear.app/mcp"; + enabled = true; + }; + github = { + type = "remote"; + url = "https://api.githubcopilot.com/mcp/"; + enabled = true; + }; + }; + }; + xdg.userDirs = { enable = true; setSessionVariables = true; From 9e0d9a04e8b168e17988037419ef61156019db25 Mon Sep 17 00:00:00 2001 From: Jet Date: Mon, 6 Apr 2026 09:45:05 -0700 Subject: [PATCH 191/211] fix: zellij closing out in kitty --- home.nix | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/home.nix b/home.nix index 9309af7..e8bf597 100644 --- a/home.nix +++ b/home.nix @@ -167,7 +167,7 @@ let if [ -n "''${ZELLIJ:-}" ]; then exec ${pkgs.bashInteractive}/bin/bash -i fi - exit 0 + exit 1 fi dir="$(printf '%s\n' "$dirs" | ${pkgs.fzf}/bin/fzf \ @@ -183,8 +183,9 @@ let if [ -z "$dir" ]; then if [ -n "''${ZELLIJ:-}" ]; then ${pkgs.zellij}/bin/zellij action close-tab >/dev/null 2>&1 || true + exit 0 fi - exit 0 + exit 1 fi tab_name="$(${pkgs.coreutils}/bin/basename "$dir")" @@ -230,7 +231,15 @@ let text = '' set -euo pipefail - exec ${pkgs.zellij}/bin/zellij attach --create main --force-run-commands + while true; do + if ${pkgs.zellij}/bin/zellij attach --create main --force-run-commands; then + if ! ${zellijNewTabZoxide}/bin/zellij-new-tab-zoxide; then + exec ${pkgs.bashInteractive}/bin/bash -i + fi + else + exit $? + fi + done ''; }; zellijSyncTabName = pkgs.writeShellApplication { @@ -478,7 +487,7 @@ in settings = { # Default shell (using bash as configured in your system) default_shell = "bash"; - default_layout = "tabs-and-mode"; + default_layout = "zoxide-picker"; pane_frames = false; simplified_ui = true; From 040793a8c38d9e31ed683271532409e6adfd85b6 Mon Sep 17 00:00:00 2001 From: Jet Date: Mon, 6 Apr 2026 09:45:05 -0700 Subject: [PATCH 192/211] fix: remove github mcp --- home.nix | 5 ----- 1 file changed, 5 deletions(-) diff --git a/home.nix b/home.nix index e8bf597..ad1fb0f 100644 --- a/home.nix +++ b/home.nix @@ -855,11 +855,6 @@ in url = "https://mcp.linear.app/mcp"; enabled = true; }; - github = { - type = "remote"; - url = "https://api.githubcopilot.com/mcp/"; - enabled = true; - }; }; }; From d13e24ef1180231e5add680ed76e428d6303aa0c Mon Sep 17 00:00:00 2001 From: Jet Date: Mon, 6 Apr 2026 10:00:57 -0700 Subject: [PATCH 193/211] fix: resolve opencode / zellij key conflicts --- home.nix | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/home.nix b/home.nix index ad1fb0f..ea2944a 100644 --- a/home.nix +++ b/home.nix @@ -858,6 +858,15 @@ in }; }; + home.file.".config/opencode/tui.json".text = builtins.toJSON { + "$schema" = "https://opencode.ai/tui.json"; + keybinds = { + leader = "ctrl+x"; + command_list = "p"; + variant_cycle = "t"; + }; + }; + xdg.userDirs = { enable = true; setSessionVariables = true; From e5d81fe1cac571e103c55f8b236d4218177c27fc Mon Sep 17 00:00:00 2001 From: Jet Date: Mon, 6 Apr 2026 22:03:07 -0700 Subject: [PATCH 194/211] fix: unpin the exit node --- configuration.nix | 4 ---- 1 file changed, 4 deletions(-) diff --git a/configuration.nix b/configuration.nix index 5029856..99c1df1 100644 --- a/configuration.nix +++ b/configuration.nix @@ -33,10 +33,6 @@ services.tailscale = { enable = true; - extraSetFlags = [ - "--exit-node=100.66.72.23" - "--exit-node-allow-lan-access" - ]; }; systemd.services.tailscale-set-operator = { From 94cefda7e5991ba3a7257e154ff95fd74f87a2bd Mon Sep 17 00:00:00 2001 From: Jet Date: Tue, 7 Apr 2026 11:07:48 -0700 Subject: [PATCH 195/211] feat: update network setting --- configuration.nix | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/configuration.nix b/configuration.nix index 99c1df1..20a20ab 100644 --- a/configuration.nix +++ b/configuration.nix @@ -12,6 +12,9 @@ networking.hostName = "framework"; + # Ensure current wireless firmware is available. + hardware.enableRedistributableFirmware = true; + hardware.bluetooth = { enable = true; powerOnBoot = true; @@ -23,6 +26,14 @@ }; networking.networkmanager.enable = true; + networking.networkmanager.settings = { + connection = { + "wifi.powersave" = 2; + }; + device = { + "wifi.scan-rand-mac-address" = false; + }; + }; services.resolved.enable = true; @@ -237,6 +248,7 @@ boot.extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ]; boot.kernelModules = [ "v4l2loopback" ]; boot.extraModprobeConfig = '' + options cfg80211 ieee80211_regdom=US options v4l2loopback devices=1 video_nr=1 card_label="OBS Virtual Camera" exclusive_caps=1 ''; From dd06e6fecd455a3a2320ab38034901175c599a36 Mon Sep 17 00:00:00 2001 From: Jet Date: Wed, 8 Apr 2026 08:39:44 -0700 Subject: [PATCH 196/211] update: nfu --- flake.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/flake.lock b/flake.lock index 624d1ba..0b30dcb 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1775261198, - "narHash": "sha256-BdXWR+LoP8K0V71oT1pNXdlajowVxaLiXXeDXMdvLoM=", + "lastModified": 1775626290, + "narHash": "sha256-c17srKrWXdCd884osWV2qlbxk8pcq5yyG9oOLNYIWtA=", "owner": "ryoppippi", "repo": "claude-code-overlay", - "rev": "e4ec05a124e6a206e405091f245449291c58e8b6", + "rev": "48385cee5ac0d160a08749f7cf2e177c9d716631", "type": "github" }, "original": { @@ -87,11 +87,11 @@ ] }, "locked": { - "lastModified": 1775427330, - "narHash": "sha256-pm1SDX9Tj4eHWwjtDEqSU+5QZO7nHHqU8GT0JtbI9rc=", + "lastModified": 1775661044, + "narHash": "sha256-HlvLj+wE5ELaU+u2cY2nBFUJHdrob1V7qydk9lBx7oE=", "owner": "nix-community", "repo": "home-manager", - "rev": "7e7269ac064bea120d7b23daed432a096617872d", + "rev": "4ac0a4fd1537325d769377d574dccd10b97c28a2", "type": "github" }, "original": { @@ -143,11 +143,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1775203647, - "narHash": "sha256-6MWaMLXK9QMndI94CIxeiPafi3wuO+imCtK9tfhsZdw=", + "lastModified": 1775490113, + "narHash": "sha256-2ZBhDNZZwYkRmefK5XLOusCJHnoeKkoN95hoSGgMxWM=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "80afbd13eea0b7c4ac188de949e1711b31c2b5f0", + "rev": "c775c2772ba56e906cbeb4e0b2db19079ef11ff7", "type": "github" }, "original": { @@ -158,11 +158,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1775036866, - "narHash": "sha256-ZojAnPuCdy657PbTq5V0Y+AHKhZAIwSIT2cb8UgAz/U=", + "lastModified": 1775423009, + "narHash": "sha256-vPKLpjhIVWdDrfiUM8atW6YkIggCEKdSAlJPzzhkQlw=", "owner": "nixos", "repo": "nixpkgs", - "rev": "6201e203d09599479a3b3450ed24fa81537ebc4e", + "rev": "68d8aa3d661f0e6bd5862291b5bb263b2a6595c9", "type": "github" }, "original": { @@ -180,11 +180,11 @@ ] }, "locked": { - "lastModified": 1775428668, - "narHash": "sha256-jBB0ePG3nuGvgkpYLQA1Zw9r33b/aZR9cNRZTxdwWTs=", + "lastModified": 1775662057, + "narHash": "sha256-LG6dmWDFupuAkMjQDGuFB9uHjI26sI5n2GkKWqQ1YvQ=", "owner": "nix-community", "repo": "NUR", - "rev": "4e55c283f1aa76fe3a8ed942be9e1710805e16d8", + "rev": "3e23e182935bb987359a84b98e2f9785672da019", "type": "github" }, "original": { @@ -228,11 +228,11 @@ ] }, "locked": { - "lastModified": 1775367672, - "narHash": "sha256-nGC6qrRsWysfR7/8wsSooq0X71rfJjhq1b+dFI6oQtY=", + "lastModified": 1775649431, + "narHash": "sha256-GhXOFE81wmiiyK7uS16z5uQuTz6zCbPYY878vfNWhJQ=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "33cd729244914f1e121477c5de148639c5e73c4a", + "rev": "80e0b30183ad7608a1ecb80656cc42e3b6c8b06f", "type": "github" }, "original": { From 79ca596b55f384cca8c9ff96fd193974bb25c06d Mon Sep 17 00:00:00 2001 From: Jet Date: Thu, 9 Apr 2026 17:30:34 -0700 Subject: [PATCH 197/211] feat: remove exept opencode and lmstudio --- flake.lock | 94 ++++++------------------------------------------------ flake.nix | 53 ------------------------------ home.nix | 17 ---------- 3 files changed, 9 insertions(+), 155 deletions(-) diff --git a/flake.lock b/flake.lock index 0b30dcb..fef3eaa 100644 --- a/flake.lock +++ b/flake.lock @@ -1,46 +1,5 @@ { "nodes": { - "claude-code-overlay": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1775626290, - "narHash": "sha256-c17srKrWXdCd884osWV2qlbxk8pcq5yyG9oOLNYIWtA=", - "owner": "ryoppippi", - "repo": "claude-code-overlay", - "rev": "48385cee5ac0d160a08749f7cf2e177c9d716631", - "type": "github" - }, - "original": { - "owner": "ryoppippi", - "repo": "claude-code-overlay", - "type": "github" - } - }, - "codex-cli-nix": { - "inputs": { - "flake-utils": "flake-utils", - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1774977969, - "narHash": "sha256-MbCh0ayUhnP8Z/83tTPR9iTzNxQkfleedmlcgsHh1LA=", - "owner": "sadjow", - "repo": "codex-cli-nix", - "rev": "8be597476146c75f440708f9a7ad50ae489641c4", - "type": "github" - }, - "original": { - "owner": "sadjow", - "repo": "codex-cli-nix", - "type": "github" - } - }, "flake-parts": { "inputs": { "nixpkgs-lib": [ @@ -62,24 +21,6 @@ "type": "github" } }, - "flake-utils": { - "inputs": { - "systems": "systems" - }, - "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, "home-manager": { "inputs": { "nixpkgs": [ @@ -87,11 +28,11 @@ ] }, "locked": { - "lastModified": 1775661044, - "narHash": "sha256-HlvLj+wE5ELaU+u2cY2nBFUJHdrob1V7qydk9lBx7oE=", + "lastModified": 1775779786, + "narHash": "sha256-rNdhnAdIKg0IpFwLCy6lVc+amSHRXWp4DMtQKsB1bGw=", "owner": "nix-community", "repo": "home-manager", - "rev": "4ac0a4fd1537325d769377d574dccd10b97c28a2", + "rev": "0eddb2cc1abc5692935308c5efb4035c023bddc7", "type": "github" }, "original": { @@ -180,11 +121,11 @@ ] }, "locked": { - "lastModified": 1775662057, - "narHash": "sha256-LG6dmWDFupuAkMjQDGuFB9uHjI26sI5n2GkKWqQ1YvQ=", + "lastModified": 1775776296, + "narHash": "sha256-hdiH0ZCM+5OBvjy/lhVhsi/OdatIVb3c2oPykToi7sw=", "owner": "nix-community", "repo": "NUR", - "rev": "3e23e182935bb987359a84b98e2f9785672da019", + "rev": "3b4718913a3b8e6e7d3a0e4e455dadf3e0f6c4f8", "type": "github" }, "original": { @@ -195,8 +136,6 @@ }, "root": { "inputs": { - "claude-code-overlay": "claude-code-overlay", - "codex-cli-nix": "codex-cli-nix", "home-manager": "home-manager", "nix-index-database": "nix-index-database", "nixos-hardware": "nixos-hardware", @@ -205,21 +144,6 @@ "zen-browser": "zen-browser" } }, - "systems": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, "zen-browser": { "inputs": { "home-manager": "home-manager_2", @@ -228,11 +152,11 @@ ] }, "locked": { - "lastModified": 1775649431, - "narHash": "sha256-GhXOFE81wmiiyK7uS16z5uQuTz6zCbPYY878vfNWhJQ=", + "lastModified": 1775744672, + "narHash": "sha256-Qg3Wnn3WYiiii35CE9kE+XX4ooSFzupAnGC1/NjI5C8=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "80e0b30183ad7608a1ecb80656cc42e3b6c8b06f", + "rev": "14a238beb0621977e9bf04cba68919d5650deea9", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index e0c9d5f..066f5ad 100644 --- a/flake.nix +++ b/flake.nix @@ -18,14 +18,6 @@ url = "github:nix-community/NUR"; inputs.nixpkgs.follows = "nixpkgs"; }; - claude-code-overlay = { - url = "github:ryoppippi/claude-code-overlay"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - codex-cli-nix = { - url = "github:sadjow/codex-cli-nix"; - inputs.nixpkgs.follows = "nixpkgs"; - }; }; outputs = @@ -36,50 +28,6 @@ ... }: { - packages.x86_64-linux = - let - pkgs = nixpkgs.legacyPackages.x86_64-linux; - t3Version = "0.0.15"; - t3App = pkgs.appimageTools.wrapType2 rec { - pname = "t3"; - version = t3Version; - - src = pkgs.fetchurl { - url = "https://github.com/pingdotgg/t3code/releases/download/v${version}/T3-Code-${version}-x86_64.AppImage"; - hash = "sha256:67ccbb4961f9e7e642edc469828d1c746dbbdeb6c38854b7a5742ddeea7bb038"; - }; - - extraPkgs = pkgs: [ pkgs.xdg-utils ]; - }; - t3Icon = pkgs.fetchurl { - url = "https://raw.githubusercontent.com/pingdotgg/t3code/v${t3Version}/apps/desktop/resources/icon.png"; - hash = "sha256-rXMAXnje7dOKxoqQ/G16Ohub9A54IPhhlv9x1/aKcvw="; - }; - t3Desktop = pkgs.makeDesktopItem { - name = "t3-code"; - desktopName = "T3 Code"; - genericName = "AI Coding Assistant"; - exec = "t3 %U"; - icon = "${t3Icon}"; - terminal = false; - categories = [ - "Development" - "IDE" - ]; - startupNotify = true; - comment = "Launch T3 Code from the GitHub release AppImage"; - }; - in - { - t3code = pkgs.symlinkJoin { - name = "t3code-${t3Version}"; - paths = [ - t3App - t3Desktop - ]; - }; - }; - formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt; nixosConfigurations = { framework = nixpkgs.lib.nixosSystem { @@ -99,7 +47,6 @@ { nixpkgs.overlays = [ inputs.nur.overlays.default - inputs.claude-code-overlay.overlays.default ]; } ]; diff --git a/home.nix b/home.nix index ea2944a..20ce4ed 100644 --- a/home.nix +++ b/home.nix @@ -349,12 +349,9 @@ in # CLI bat ffmpeg-full - claude-code opencode - inputs.self.packages.${pkgs.stdenv.hostPlatform.system}.t3code zellijNewTabZoxide zellijSyncTabName - inputs.codex-cli-nix.packages.${pkgs.stdenv.hostPlatform.system}.default fd btop fastfetch @@ -566,7 +563,6 @@ in "dr" = "direnv reload"; "da" = "direnv allow"; "nfu" = "nix flake update"; - "c" = "claude"; "o" = "OPENCODE_PERMISSION='{\"*\":\"allow\",\"external_directory\":\"allow\",\"doom_loop\":\"allow\"}' opencode"; "os" = "opencode"; @@ -834,19 +830,6 @@ in }; }; - home.file.".claude/settings.json".text = builtins.toJSON { - allowedTools = [ - "Read" - "Glob" - "Grep" - "Write" - "Edit" - "Agent" - "WebFetch" - "WebSearch" - ]; - }; - home.file.".config/opencode/opencode.json".text = builtins.toJSON { "$schema" = "https://opencode.ai/config.json"; mcp = { From 08e6548986775e8b4f894f3b66268da27f377f77 Mon Sep 17 00:00:00 2001 From: Jet Date: Thu, 9 Apr 2026 18:51:26 -0700 Subject: [PATCH 198/211] feat(opencode): add global NixOS rules for agent behavior --- home.nix | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/home.nix b/home.nix index 20ce4ed..21a076a 100644 --- a/home.nix +++ b/home.nix @@ -841,6 +841,20 @@ in }; }; + home.file.".config/opencode/AGENTS.md".text = '' + # NixOS Rules + + - This machine is NixOS. Prefer the Nix way for installing and running tools. + - Do not suggest `apt`, `dnf`, `pacman`, `brew`, `npm -g`, `pip install`, `cargo install`, `curl | sh`, or manual installers unless explicitly asked. + - If a repo has `flake.nix`, treat it as the source of truth for project tooling. + - If a needed tool belongs to the project, add it to `flake.nix` or the dev shell instead of installing it another way. + - If a repo has `flake.nix`, ensure `.envrc` contains `use flake` unless the repo intentionally uses a different setup. + - If there is no `flake.nix` and the tool is only needed temporarily, prefer `nix shell nixpkgs# -c `. + - For persistent tools, prefer declarative Nix configuration. + - Prefer `direnv` or `nix develop` before deciding a tool is missing. + - Never run `nixos-rebuild`, `nh os switch`, `nhs`, or other system switch commands unless explicitly asked. + ''; + home.file.".config/opencode/tui.json".text = builtins.toJSON { "$schema" = "https://opencode.ai/tui.json"; keybinds = { From 120a918491fe8552626d577e87d45e8cd8e6411d Mon Sep 17 00:00:00 2001 From: Jet Pham Date: Thu, 9 Apr 2026 19:21:58 -0700 Subject: [PATCH 199/211] feat(opencode): disable autoupdate and sharing Keep OpenCode aligned with the Nix-managed install by disabling self-updates and prevent accidental public session sharing from the global config. --- home.nix | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/home.nix b/home.nix index 21a076a..211401f 100644 --- a/home.nix +++ b/home.nix @@ -832,13 +832,8 @@ in home.file.".config/opencode/opencode.json".text = builtins.toJSON { "$schema" = "https://opencode.ai/config.json"; - mcp = { - linear = { - type = "remote"; - url = "https://mcp.linear.app/mcp"; - enabled = true; - }; - }; + autoupdate = false; + share = "disabled"; }; home.file.".config/opencode/AGENTS.md".text = '' From 73f9b76fbb32a2025f297ad3ea0e9c2c1f26a9fe Mon Sep 17 00:00:00 2001 From: Jet Date: Sat, 11 Apr 2026 15:36:16 -0700 Subject: [PATCH 200/211] update: nfu --- flake.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/flake.lock b/flake.lock index fef3eaa..f3d7f98 100644 --- a/flake.lock +++ b/flake.lock @@ -28,11 +28,11 @@ ] }, "locked": { - "lastModified": 1775779786, - "narHash": "sha256-rNdhnAdIKg0IpFwLCy6lVc+amSHRXWp4DMtQKsB1bGw=", + "lastModified": 1775900011, + "narHash": "sha256-QUGu6CJYFQ5AWVV0n3/FsJyV+1/gj7HSDx68/SX9pwM=", "owner": "nix-community", "repo": "home-manager", - "rev": "0eddb2cc1abc5692935308c5efb4035c023bddc7", + "rev": "b0569dc6ec1e6e7fefd8f6897184e4c191cd768e", "type": "github" }, "original": { @@ -99,11 +99,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1775423009, - "narHash": "sha256-vPKLpjhIVWdDrfiUM8atW6YkIggCEKdSAlJPzzhkQlw=", + "lastModified": 1775710090, + "narHash": "sha256-ar3rofg+awPB8QXDaFJhJ2jJhu+KqN/PRCXeyuXR76E=", "owner": "nixos", "repo": "nixpkgs", - "rev": "68d8aa3d661f0e6bd5862291b5bb263b2a6595c9", + "rev": "4c1018dae018162ec878d42fec712642d214fdfa", "type": "github" }, "original": { @@ -121,11 +121,11 @@ ] }, "locked": { - "lastModified": 1775776296, - "narHash": "sha256-hdiH0ZCM+5OBvjy/lhVhsi/OdatIVb3c2oPykToi7sw=", + "lastModified": 1775943573, + "narHash": "sha256-wVkICplIusvEurDLpyITAT11M5J9lwWLEM3eVZIfgPE=", "owner": "nix-community", "repo": "NUR", - "rev": "3b4718913a3b8e6e7d3a0e4e455dadf3e0f6c4f8", + "rev": "94ec6b896793b9b9bb5cbbd1f0d29c50c7613db9", "type": "github" }, "original": { @@ -152,11 +152,11 @@ ] }, "locked": { - "lastModified": 1775744672, - "narHash": "sha256-Qg3Wnn3WYiiii35CE9kE+XX4ooSFzupAnGC1/NjI5C8=", + "lastModified": 1775933978, + "narHash": "sha256-I1ju8FT1J9nNUSw8DDMGCLLUweDAkr45D2HQn3bW43o=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "14a238beb0621977e9bf04cba68919d5650deea9", + "rev": "d1c71822cb8e861345c7ab6a9f841ac99d59d74a", "type": "github" }, "original": { From 313f7beb7a38d0b30f6861c7262ac2da87442dec Mon Sep 17 00:00:00 2001 From: Jet Date: Sat, 11 Apr 2026 15:45:58 -0700 Subject: [PATCH 201/211] feat: add git using riht email and signers keys --- home.nix | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/home.nix b/home.nix index 211401f..a791fcc 100644 --- a/home.nix +++ b/home.nix @@ -9,6 +9,7 @@ let name = "Jet"; email = "jet@extremist.software"; sshSigningKey = "~/.ssh/id_ed25519.pub"; + sshPublicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE40ISu3ydCqfdpb26JYD5cIN0Fu0id/FDS+xjB5zpqu"; zenStartup = pkgs.makeDesktopItem { name = "zen-startup"; desktopName = "Zen Startup"; @@ -414,8 +415,16 @@ in programs.git = { enable = true; - settings.user.name = name; - settings.user.email = email; + settings = { + user.name = name; + user.email = email; + core.sshCommand = "ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3"; + core.compression = 6; + pack.windowMemory = "256m"; + pack.packSizeLimit = "2g"; + pack.threads = 1; + gpg.ssh.allowedSignersFile = "~/.config/git/allowed_signers"; + }; signing = { key = sshSigningKey; signByDefault = true; @@ -423,6 +432,14 @@ in }; }; + home.file.".gitconfig".text = '' + # Compatibility shim for tools that only read ~/.gitconfig. + [include] + path = ~/.config/git/config + ''; + + home.file.".config/git/allowed_signers".text = "${email} ${sshPublicKey}\n"; + programs.helix = { enable = true; defaultEditor = true; From 03146451653247af543f773b665eed0a1306c75c Mon Sep 17 00:00:00 2001 From: Jet Date: Mon, 13 Apr 2026 13:09:54 -0700 Subject: [PATCH 202/211] update: nfu --- flake.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/flake.lock b/flake.lock index f3d7f98..e875415 100644 --- a/flake.lock +++ b/flake.lock @@ -28,11 +28,11 @@ ] }, "locked": { - "lastModified": 1775900011, - "narHash": "sha256-QUGu6CJYFQ5AWVV0n3/FsJyV+1/gj7HSDx68/SX9pwM=", + "lastModified": 1776046499, + "narHash": "sha256-Wzc4nn07/0RL21ypPHRzNDQZcjhIC8LaYo7QJQjM5T4=", "owner": "nix-community", "repo": "home-manager", - "rev": "b0569dc6ec1e6e7fefd8f6897184e4c191cd768e", + "rev": "287f84846c1eb3b72c986f5f6bebcff0bd67440d", "type": "github" }, "original": { @@ -69,11 +69,11 @@ ] }, "locked": { - "lastModified": 1775365369, - "narHash": "sha256-DgH5mveLoau20CuTnaU5RXZWgFQWn56onQ4Du2CqYoI=", + "lastModified": 1775970782, + "narHash": "sha256-7jt9Vpm48Yy5yAWigYpde+HxtYEpEuyzIQJF4VYehhk=", "owner": "nix-community", "repo": "nix-index-database", - "rev": "cef5cf82671e749ac87d69aadecbb75967e6f6c3", + "rev": "bedba5989b04614fc598af9633033b95a937933f", "type": "github" }, "original": { @@ -121,11 +121,11 @@ ] }, "locked": { - "lastModified": 1775943573, - "narHash": "sha256-wVkICplIusvEurDLpyITAT11M5J9lwWLEM3eVZIfgPE=", + "lastModified": 1776100293, + "narHash": "sha256-tpmEtdyUewL+5YbnWd3ntBzNfzxteWyG9KhbLwZn/Cs=", "owner": "nix-community", "repo": "NUR", - "rev": "94ec6b896793b9b9bb5cbbd1f0d29c50c7613db9", + "rev": "91d731ebdeb74c63c19335c7563f54ebae2c77e8", "type": "github" }, "original": { @@ -152,11 +152,11 @@ ] }, "locked": { - "lastModified": 1775933978, - "narHash": "sha256-I1ju8FT1J9nNUSw8DDMGCLLUweDAkr45D2HQn3bW43o=", + "lastModified": 1776091817, + "narHash": "sha256-Vwmi3P4LAUmOrE2zc9JpnRrNxNwamDN46hqcXpWTkp0=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "d1c71822cb8e861345c7ab6a9f841ac99d59d74a", + "rev": "4f2e98c1125ab4be758cd1b51b526ad998e9618f", "type": "github" }, "original": { From deade87da92a2bcd8c87d48023e7f0f6dc3392ab Mon Sep 17 00:00:00 2001 From: Jet Date: Mon, 13 Apr 2026 13:21:40 -0700 Subject: [PATCH 203/211] feat: add slack --- home.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/home.nix b/home.nix index a791fcc..56e71e3 100644 --- a/home.nix +++ b/home.nix @@ -390,6 +390,7 @@ in qpwgraph qbittorrent-enhanced signal-desktop + slack tor-browser vesktop vlc From 4d872539c30942d0e8d56567f43d9c0dc0a640f0 Mon Sep 17 00:00:00 2001 From: Jet Date: Wed, 15 Apr 2026 15:01:55 -0700 Subject: [PATCH 204/211] update: nfu --- flake.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/flake.lock b/flake.lock index e875415..9a8d070 100644 --- a/flake.lock +++ b/flake.lock @@ -28,11 +28,11 @@ ] }, "locked": { - "lastModified": 1776046499, - "narHash": "sha256-Wzc4nn07/0RL21ypPHRzNDQZcjhIC8LaYo7QJQjM5T4=", + "lastModified": 1776184304, + "narHash": "sha256-No6QGBmIv5ChiwKCcbkxjdEQ/RO2ZS1gD7SFy6EZ7rc=", "owner": "nix-community", "repo": "home-manager", - "rev": "287f84846c1eb3b72c986f5f6bebcff0bd67440d", + "rev": "3c7524c68348ef79ce48308e0978611a050089b2", "type": "github" }, "original": { @@ -99,11 +99,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1775710090, - "narHash": "sha256-ar3rofg+awPB8QXDaFJhJ2jJhu+KqN/PRCXeyuXR76E=", + "lastModified": 1776169885, + "narHash": "sha256-l/iNYDZ4bGOAFQY2q8y5OAfBBtrDAaPuRQqWaFHVRXM=", "owner": "nixos", "repo": "nixpkgs", - "rev": "4c1018dae018162ec878d42fec712642d214fdfa", + "rev": "4bd9165a9165d7b5e33ae57f3eecbcb28fb231c9", "type": "github" }, "original": { @@ -121,11 +121,11 @@ ] }, "locked": { - "lastModified": 1776100293, - "narHash": "sha256-tpmEtdyUewL+5YbnWd3ntBzNfzxteWyG9KhbLwZn/Cs=", + "lastModified": 1776288778, + "narHash": "sha256-fJPzv8Jc91RoEToYZ4588mO1imNyiDq4ulrUJXr7pIA=", "owner": "nix-community", "repo": "NUR", - "rev": "91d731ebdeb74c63c19335c7563f54ebae2c77e8", + "rev": "3cc6e021e559b189b74ede016363e5bcf79f603a", "type": "github" }, "original": { @@ -152,11 +152,11 @@ ] }, "locked": { - "lastModified": 1776091817, - "narHash": "sha256-Vwmi3P4LAUmOrE2zc9JpnRrNxNwamDN46hqcXpWTkp0=", + "lastModified": 1776144279, + "narHash": "sha256-eX3u6wJ34+qu7ZR1qWOaToGWmudYQSOEStZZm6goP+8=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "4f2e98c1125ab4be758cd1b51b526ad998e9618f", + "rev": "727de8a44c85e90f899c540cf3ffa0d5d3344f9c", "type": "github" }, "original": { From 15d700c9b61a2a2ff9b8290279272ad6ec8700d6 Mon Sep 17 00:00:00 2001 From: Jet Date: Wed, 15 Apr 2026 18:51:19 -0700 Subject: [PATCH 205/211] feat: add skills --- home.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/home.nix b/home.nix index 56e71e3..f90f1fa 100644 --- a/home.nix +++ b/home.nix @@ -351,6 +351,7 @@ in bat ffmpeg-full opencode + skills zellijNewTabZoxide zellijSyncTabName fd From 3ba6320171318271825680dc4732e6f279cace32 Mon Sep 17 00:00:00 2001 From: Jet Date: Wed, 15 Apr 2026 19:16:38 -0700 Subject: [PATCH 206/211] fix: add missing opencode dep --- home.nix | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/home.nix b/home.nix index f90f1fa..b4178af 100644 --- a/home.nix +++ b/home.nix @@ -74,6 +74,16 @@ let "$out/share/gnome-shell/extensions/tailscale-gnome-qs@tailscale-qs.github.io" ''; }; + # opencode's native watcher binding needs libstdc++.so.6 on NixOS. + wrappedOpencode = pkgs.symlinkJoin { + name = "opencode-wrapped"; + paths = [ pkgs.opencode ]; + nativeBuildInputs = [ pkgs.makeWrapper ]; + postBuild = '' + wrapProgram "$out/bin/opencode" \ + --prefix LD_LIBRARY_PATH : "${pkgs.lib.makeLibraryPath [ pkgs.stdenv.cc.cc.lib ]}" + ''; + }; nasaApodWallpaper = pkgs.writeShellApplication { name = "nasa-apod-wallpaper"; runtimeInputs = [ @@ -350,7 +360,7 @@ in # CLI bat ffmpeg-full - opencode + wrappedOpencode skills zellijNewTabZoxide zellijSyncTabName From 4202551bb96da239a1d10734acfcbcd383f46383 Mon Sep 17 00:00:00 2001 From: Jet Date: Wed, 15 Apr 2026 19:19:22 -0700 Subject: [PATCH 207/211] feat: set default model --- home.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/home.nix b/home.nix index b4178af..0749112 100644 --- a/home.nix +++ b/home.nix @@ -862,6 +862,10 @@ in home.file.".config/opencode/opencode.json".text = builtins.toJSON { "$schema" = "https://opencode.ai/config.json"; autoupdate = false; + model = "openai/gpt-5.4-fast"; + provider.openai.models."gpt-5.4-fast".options = { + reasoningEffort = "xhigh"; + }; share = "disabled"; }; From a2984461292187c2cf29c53124fc749b3f03d06f Mon Sep 17 00:00:00 2001 From: Jet Date: Wed, 15 Apr 2026 19:20:56 -0700 Subject: [PATCH 208/211] feat: use gpt-5.4-mini-fast for opencode background tasks --- home.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/home.nix b/home.nix index 0749112..cfebde7 100644 --- a/home.nix +++ b/home.nix @@ -863,6 +863,7 @@ in "$schema" = "https://opencode.ai/config.json"; autoupdate = false; model = "openai/gpt-5.4-fast"; + small_model = "openai/gpt-5.4-mini-fast"; provider.openai.models."gpt-5.4-fast".options = { reasoningEffort = "xhigh"; }; From 5ad3ce1439600a4086c90a546d5a2713f57c6e6c Mon Sep 17 00:00:00 2001 From: Jet Date: Thu, 16 Apr 2026 14:36:16 -0700 Subject: [PATCH 209/211] update: nfu --- flake.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/flake.lock b/flake.lock index 9a8d070..d30a65f 100644 --- a/flake.lock +++ b/flake.lock @@ -28,11 +28,11 @@ ] }, "locked": { - "lastModified": 1776184304, - "narHash": "sha256-No6QGBmIv5ChiwKCcbkxjdEQ/RO2ZS1gD7SFy6EZ7rc=", + "lastModified": 1776373306, + "narHash": "sha256-iAJIzHngGZeLIkjzuuWI6VBsYJ1n89a/Esq0m8R1vjs=", "owner": "nix-community", "repo": "home-manager", - "rev": "3c7524c68348ef79ce48308e0978611a050089b2", + "rev": "d401492e2acd4fea42f7705a3c266cea739c9c36", "type": "github" }, "original": { @@ -121,11 +121,11 @@ ] }, "locked": { - "lastModified": 1776288778, - "narHash": "sha256-fJPzv8Jc91RoEToYZ4588mO1imNyiDq4ulrUJXr7pIA=", + "lastModified": 1776374701, + "narHash": "sha256-4EKgvB6jcyMLpT3+sUjQ9yBRs8RF7GvPj0uuh6xU1zY=", "owner": "nix-community", "repo": "NUR", - "rev": "3cc6e021e559b189b74ede016363e5bcf79f603a", + "rev": "610dd2de6fb34e3f1213876cf556ab4991ddd6a9", "type": "github" }, "original": { @@ -152,11 +152,11 @@ ] }, "locked": { - "lastModified": 1776144279, - "narHash": "sha256-eX3u6wJ34+qu7ZR1qWOaToGWmudYQSOEStZZm6goP+8=", + "lastModified": 1776317517, + "narHash": "sha256-JP1XVRabZquf7pnXvRUjp7DV+EBrB6Qmp3+vG3HMy/k=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "727de8a44c85e90f899c540cf3ffa0d5d3344f9c", + "rev": "0a7be59e988bb2cb452080f59aaabae70bc415ae", "type": "github" }, "original": { From dca1951e15c7a5a74713e238dae141e1bf70cf5e Mon Sep 17 00:00:00 2001 From: Jet Date: Thu, 16 Apr 2026 14:53:01 -0700 Subject: [PATCH 210/211] feat: add linear mcp server --- home.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/home.nix b/home.nix index cfebde7..5fb38f8 100644 --- a/home.nix +++ b/home.nix @@ -862,6 +862,11 @@ in home.file.".config/opencode/opencode.json".text = builtins.toJSON { "$schema" = "https://opencode.ai/config.json"; autoupdate = false; + mcp.linear = { + type = "remote"; + url = "https://mcp.linear.app/mcp"; + enabled = true; + }; model = "openai/gpt-5.4-fast"; small_model = "openai/gpt-5.4-mini-fast"; provider.openai.models."gpt-5.4-fast".options = { From d0e3379f86e43ad096d9bf3502a8cf183b8c4698 Mon Sep 17 00:00:00 2001 From: Jet Date: Thu, 16 Apr 2026 19:28:54 -0700 Subject: [PATCH 211/211] feat: add claude plugin --- home.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/home.nix b/home.nix index 5fb38f8..1a39fc8 100644 --- a/home.nix +++ b/home.nix @@ -359,6 +359,8 @@ in # CLI bat + bun + claude-code ffmpeg-full wrappedOpencode skills @@ -862,6 +864,7 @@ in home.file.".config/opencode/opencode.json".text = builtins.toJSON { "$schema" = "https://opencode.ai/config.json"; autoupdate = false; + plugin = [ "opencode-with-claude" ]; mcp.linear = { type = "remote"; url = "https://mcp.linear.app/mcp";