From 377e36e15722681e65144fedd1da443adf484594 Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Sat, 14 Feb 2026 10:48:34 -0800 Subject: [PATCH 01/32] Remove deprecated option --- homes/x86_64-linux/alejandro@git/default.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/homes/x86_64-linux/alejandro@git/default.nix b/homes/x86_64-linux/alejandro@git/default.nix index 4bb54e0..0cf5664 100644 --- a/homes/x86_64-linux/alejandro@git/default.nix +++ b/homes/x86_64-linux/alejandro@git/default.nix @@ -12,6 +12,5 @@ nix.gc = { automatic = true; options = "-d"; - frequency = "03:15"; }; } From 7ba479675887b791e206106eca27b7063e0e708e Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Wed, 18 Feb 2026 19:53:16 -0800 Subject: [PATCH 02/32] Enable zathura --- homes/x86_64-linux/alejandro@carbon/default.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/homes/x86_64-linux/alejandro@carbon/default.nix b/homes/x86_64-linux/alejandro@carbon/default.nix index 2f502d4..91972ed 100644 --- a/homes/x86_64-linux/alejandro@carbon/default.nix +++ b/homes/x86_64-linux/alejandro@carbon/default.nix @@ -31,4 +31,7 @@ in ", switch:off:Lid Switch, exec, ${clamshell_script}/bin/clamshell open" ", switch:on:Lid Switch, exec, ${clamshell_script}/bin/clamshell close" ]; + + catppuccin.zathura.enable = true; + programs.zathura.enable = true; } From 259c75204d29d82ef0c9697c07d14c324f64591b Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Sat, 21 Feb 2026 08:07:34 -0800 Subject: [PATCH 03/32] Add ability to inhibit sleep when plugged in --- .../x86_64-linux/alejandro@carbon/default.nix | 2 +- modules/home/services/hypridle/default.nix | 26 ++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/homes/x86_64-linux/alejandro@carbon/default.nix b/homes/x86_64-linux/alejandro@carbon/default.nix index 91972ed..1356707 100644 --- a/homes/x86_64-linux/alejandro@carbon/default.nix +++ b/homes/x86_64-linux/alejandro@carbon/default.nix @@ -4,7 +4,6 @@ let internal_display_settings = "eDP-1,preferred,auto,1.6"; clamshell_script = pkgs.writeShellScriptBin "clamshell" '' if ${pkgs.hyprland}/bin/hyprctl monitors | ${pkgs.ripgrep}/bin/rg -q '\sDP-'; then - echo "Detected external monitor..." if [[ "$1" == "open" ]]; then ${pkgs.hyprland}/bin/hyprctl keyword monitor ${internal_display_settings} else @@ -25,6 +24,7 @@ in ",preferred,auto,1" ]; }; + aa.services.hypridle.suspendInhibitWhenPluggedIn = true; aa.windowManagers.sway.enable = lib.mkForce false; wayland.windowManager.hyprland.settings.bindl = [ diff --git a/modules/home/services/hypridle/default.nix b/modules/home/services/hypridle/default.nix index 50e792d..6e7dfe9 100644 --- a/modules/home/services/hypridle/default.nix +++ b/modules/home/services/hypridle/default.nix @@ -14,6 +14,18 @@ let ; cfg = config.${namespace}.services.hypridle; + + # Script that suspends only when on battery power. + # When plugged in, uses systemd-inhibit to block suspend. + suspendScript = pkgs.writeShellScript "hypridle-suspend" '' + if [ "$(${pkgs.coreutils}/bin/cat /sys/class/power_supply/AC/online)" = "1" ]; then + # Plugged in - inhibit suspend + ${pkgs.systemd}/bin/systemd-inhibit --what=sleep --who=hypridle --why="AC power connected" --mode=block ${pkgs.coreutils}/bin/sleep infinity & + else + # On battery - suspend + ${pkgs.systemd}/bin/systemctl suspend + fi + ''; in { options.${namespace}.services.hypridle = { @@ -49,6 +61,14 @@ in Whether or not to automatically suspend ''; }; + suspendInhibitWhenPluggedIn = mkOption { + type = types.bool; + default = false; + description = '' + Whether to inhibit suspend when AC power is connected. + Useful for laptops that should only suspend on battery. + ''; + }; brightnessTimeout = mkOption { type = types.int; @@ -108,7 +128,11 @@ in # Suspend system (lib.mkIf cfg.suspendEnable { timeout = cfg.suspendTimeout; - on-timeout = "systemctl suspend"; + on-timeout = + if cfg.suspendInhibitWhenPluggedIn then + "${suspendScript}" + else + "${pkgs.systemd}/bin/systemctl suspend"; }) ]; }; From 3edb2674145e805466b69793f7e71ed4fb6cc643 Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Sat, 28 Feb 2026 21:25:59 -0800 Subject: [PATCH 04/32] Ran nixfmt-tree --- modules/home/apps/tmux/default.nix | 69 +++++++------ .../nixos/services/adguardhome/default.nix | 17 ++-- modules/nixos/services/grafana/default.nix | 21 ++-- modules/nixos/services/minio/default.nix | 97 +++++++++---------- modules/nixos/services/nix-serve/default.nix | 27 +++--- modules/nixos/services/octoprint/default.nix | 25 +++-- modules/nixos/services/sunshine/default.nix | 31 +++--- modules/nixos/services/teslamate/default.nix | 23 +++-- modules/nixos/user/default.nix | 3 +- 9 files changed, 153 insertions(+), 160 deletions(-) diff --git a/modules/home/apps/tmux/default.nix b/modules/home/apps/tmux/default.nix index 63120c4..3cef1f2 100644 --- a/modules/home/apps/tmux/default.nix +++ b/modules/home/apps/tmux/default.nix @@ -75,44 +75,43 @@ in tmuxPlugins.vim-tmux-navigator ]; - extraConfig = - '' - # Scrolling with mouse wheel scrolls output instead of previous commands - setw -g mouse on + extraConfig = '' + # Scrolling with mouse wheel scrolls output instead of previous commands + setw -g mouse on - # Open panes in the same directory - bind c new-window -c "#{pane_current_path}" - bind '"' split-window -c "#{pane_current_path}" - bind % split-window -h -c "#{pane_current_path}" + # Open panes in the same directory + bind c new-window -c "#{pane_current_path}" + bind '"' split-window -c "#{pane_current_path}" + bind % split-window -h -c "#{pane_current_path}" - # sessionizer - bind C-o display-popup -E "${pkgs.tmux-sessionizer}/bin/tms" - bind C-j display-popup -E "${pkgs.tmux-sessionizer}/bin/tms switch" - bind C-w display-popup -E "${pkgs.tmux-sessionizer}/bin/tms windows" - bind C-s command-prompt -p "Rename active session to:" "run-shell '${pkgs.tmux-sessionizer}/bin/tms rename %1'" + # sessionizer + bind C-o display-popup -E "${pkgs.tmux-sessionizer}/bin/tms" + bind C-j display-popup -E "${pkgs.tmux-sessionizer}/bin/tms switch" + bind C-w display-popup -E "${pkgs.tmux-sessionizer}/bin/tms windows" + bind C-s command-prompt -p "Rename active session to:" "run-shell '${pkgs.tmux-sessionizer}/bin/tms rename %1'" - '' - + lib.strings.optionalString config.programs.lazygit.enable '' - # Open lazygit in a popup - # Spins up a new session with a '-lg' suffix (hitting the shortcut - # toggles between attaching and detaching) - bind C-g if-shell "[[ $(tmux display-message -p '#S') == *-lg ]]" { - detach-client - } { - display-popup -h 90% -w 90% -E "tmux new-session -A -s $(tmux display-message -p '#S')-lg ${pkgs.lazygit}/bin/lazygit" - } - '' - + lib.strings.optionalString config.programs.btop.enable '' - # Open btop in a popup - # Spins up a new session named `btop` (hitting the shortcut - # toggles between attaching and detaching) - # NOTE: This overrides the default C-t shortcut (shows time by default) - bind C-t if-shell "[[ $(tmux display-message -p '#S') == btop ]]" { - detach-client - } { - display-popup -h 90% -w 90% -E "tmux new-session -A -s btop ${pkgs.btop}/bin/btop" - } - ''; + '' + + lib.strings.optionalString config.programs.lazygit.enable '' + # Open lazygit in a popup + # Spins up a new session with a '-lg' suffix (hitting the shortcut + # toggles between attaching and detaching) + bind C-g if-shell "[[ $(tmux display-message -p '#S') == *-lg ]]" { + detach-client + } { + display-popup -h 90% -w 90% -E "tmux new-session -A -s $(tmux display-message -p '#S')-lg ${pkgs.lazygit}/bin/lazygit" + } + '' + + lib.strings.optionalString config.programs.btop.enable '' + # Open btop in a popup + # Spins up a new session named `btop` (hitting the shortcut + # toggles between attaching and detaching) + # NOTE: This overrides the default C-t shortcut (shows time by default) + bind C-t if-shell "[[ $(tmux display-message -p '#S') == btop ]]" { + detach-client + } { + display-popup -h 90% -w 90% -E "tmux new-session -A -s btop ${pkgs.btop}/bin/btop" + } + ''; }; xdg.configFile."tms/config.toml".source = (pkgs.formats.toml { }).generate "tms-config" tmsConfig; diff --git a/modules/nixos/services/adguardhome/default.nix b/modules/nixos/services/adguardhome/default.nix index 00c369c..1f1f778 100644 --- a/modules/nixos/services/adguardhome/default.nix +++ b/modules/nixos/services/adguardhome/default.nix @@ -38,16 +38,15 @@ in services.nginx = { enable = true; recommendedProxySettings = true; - virtualHosts."adguardhome.kilonull.com" = - { - locations."/" = { - proxyPass = "http://127.0.0.1:3000"; - }; - } - // lib.optionalAttrs (cfg.acmeCertName != "") { - forceSSL = true; - useACMEHost = cfg.acmeCertName; + virtualHosts."adguardhome.kilonull.com" = { + locations."/" = { + proxyPass = "http://127.0.0.1:3000"; }; + } + // lib.optionalAttrs (cfg.acmeCertName != "") { + forceSSL = true; + useACMEHost = cfg.acmeCertName; + }; }; networking.firewall = { diff --git a/modules/nixos/services/grafana/default.nix b/modules/nixos/services/grafana/default.nix index 1a83bc2..1841cd7 100644 --- a/modules/nixos/services/grafana/default.nix +++ b/modules/nixos/services/grafana/default.nix @@ -113,18 +113,17 @@ in services.nginx = { enable = true; - virtualHosts."${server_settings.domain}" = - { - locations."/" = { - proxyPass = "http://${server_settings.http_addr}:${toString server_settings.http_port}"; - proxyWebsockets = true; - recommendedProxySettings = true; - }; - } - // lib.optionalAttrs (cfg.acmeCertName != "") { - forceSSL = true; - useACMEHost = cfg.acmeCertName; + virtualHosts."${server_settings.domain}" = { + locations."/" = { + proxyPass = "http://${server_settings.http_addr}:${toString server_settings.http_port}"; + proxyWebsockets = true; + recommendedProxySettings = true; }; + } + // lib.optionalAttrs (cfg.acmeCertName != "") { + forceSSL = true; + useACMEHost = cfg.acmeCertName; + }; }; networking.firewall = { diff --git a/modules/nixos/services/minio/default.nix b/modules/nixos/services/minio/default.nix index 074396c..a998f4b 100644 --- a/modules/nixos/services/minio/default.nix +++ b/modules/nixos/services/minio/default.nix @@ -33,63 +33,62 @@ in services.nginx = { enable = true; virtualHosts = { - "minio.kilonull.com" = - { - extraConfig = '' - # Allow special characters in headers - ignore_invalid_headers off; - # Allow any size file to be uploaded. - # Set to a value such as 1000m; to restrict file size to a specific value - client_max_body_size 0; - # Disable buffering - proxy_buffering off; - proxy_request_buffering off; - ''; + "minio.kilonull.com" = { + extraConfig = '' + # Allow special characters in headers + ignore_invalid_headers off; + # Allow any size file to be uploaded. + # Set to a value such as 1000m; to restrict file size to a specific value + client_max_body_size 0; + # Disable buffering + proxy_buffering off; + proxy_request_buffering off; + ''; - locations."/".extraConfig = '' - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; + locations."/".extraConfig = '' + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; - proxy_connect_timeout 300; - # Default is HTTP/1, keepalive is only enabled in HTTP/1.1 - proxy_http_version 1.1; - proxy_set_header Connection ""; - chunked_transfer_encoding off; + proxy_connect_timeout 300; + # Default is HTTP/1, keepalive is only enabled in HTTP/1.1 + proxy_http_version 1.1; + proxy_set_header Connection ""; + chunked_transfer_encoding off; - proxy_pass http://localhost:9000; - ''; - locations."/ui".extraConfig = '' - rewrite ^/ui/(.*) /$1 break; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-NginX-Proxy true; + proxy_pass http://localhost:9000; + ''; + locations."/ui".extraConfig = '' + rewrite ^/ui/(.*) /$1 break; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-NginX-Proxy true; - # This is necessary to pass the correct IP to be hashed - real_ip_header X-Real-IP; + # This is necessary to pass the correct IP to be hashed + real_ip_header X-Real-IP; - proxy_connect_timeout 300; + proxy_connect_timeout 300; - # To support websockets in MinIO versions released after January 2023 - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - # Some environments may encounter CORS errors (Kubernetes + Nginx Ingress) - # Uncomment the following line to set the Origin request to an empty string - proxy_set_header Origin ""; + # To support websockets in MinIO versions released after January 2023 + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + # Some environments may encounter CORS errors (Kubernetes + Nginx Ingress) + # Uncomment the following line to set the Origin request to an empty string + proxy_set_header Origin ""; - chunked_transfer_encoding off; + chunked_transfer_encoding off; - proxy_pass http://localhost:9001; - ''; - } - // lib.optionalAttrs (cfg.acmeCertName != "") { - forceSSL = true; - useACMEHost = cfg.acmeCertName; - }; + proxy_pass http://localhost:9001; + ''; + } + // lib.optionalAttrs (cfg.acmeCertName != "") { + forceSSL = true; + useACMEHost = cfg.acmeCertName; + }; }; }; }; diff --git a/modules/nixos/services/nix-serve/default.nix b/modules/nixos/services/nix-serve/default.nix index 80f0dce..3e3b61d 100644 --- a/modules/nixos/services/nix-serve/default.nix +++ b/modules/nixos/services/nix-serve/default.nix @@ -45,20 +45,19 @@ in nginx = { enable = true; - virtualHosts."${cfg.subdomain_name}.${cfg.domain_name}" = - { - serverAliases = [ "${cfg.subdomain_name}" ]; - locations."/".extraConfig = '' - proxy_pass http://localhost:${toString config.services.nix-serve.port}; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - ''; - } - // lib.optionalAttrs (cfg.acmeCertName != "") { - forceSSL = true; - useACMEHost = cfg.acmeCertName; - }; + virtualHosts."${cfg.subdomain_name}.${cfg.domain_name}" = { + serverAliases = [ "${cfg.subdomain_name}" ]; + locations."/".extraConfig = '' + proxy_pass http://localhost:${toString config.services.nix-serve.port}; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + ''; + } + // lib.optionalAttrs (cfg.acmeCertName != "") { + forceSSL = true; + useACMEHost = cfg.acmeCertName; + }; }; }; diff --git a/modules/nixos/services/octoprint/default.nix b/modules/nixos/services/octoprint/default.nix index 35cde36..451cfd9 100644 --- a/modules/nixos/services/octoprint/default.nix +++ b/modules/nixos/services/octoprint/default.nix @@ -25,20 +25,19 @@ in services.nginx = { enable = true; recommendedProxySettings = true; - virtualHosts."octoprint.kilonull.com" = - { - locations."/" = { - proxyPass = "http://127.0.0.1:${toString config.services.octoprint.port}"; - proxyWebsockets = true; - extraConfig = '' - client_max_body_size 512m; - ''; - }; - } - // lib.optionalAttrs (cfg.acmeCertName != "") { - forceSSL = true; - useACMEHost = cfg.acmeCertName; + virtualHosts."octoprint.kilonull.com" = { + locations."/" = { + proxyPass = "http://127.0.0.1:${toString config.services.octoprint.port}"; + proxyWebsockets = true; + extraConfig = '' + client_max_body_size 512m; + ''; }; + } + // lib.optionalAttrs (cfg.acmeCertName != "") { + forceSSL = true; + useACMEHost = cfg.acmeCertName; + }; }; networking.firewall.allowedTCPPorts = [ diff --git a/modules/nixos/services/sunshine/default.nix b/modules/nixos/services/sunshine/default.nix index 3d73849..db6afc4 100644 --- a/modules/nixos/services/sunshine/default.nix +++ b/modules/nixos/services/sunshine/default.nix @@ -30,23 +30,22 @@ in services.nginx = { enable = true; - virtualHosts."sunshine.kilonull.com" = - { - locations."/" = { - recommendedProxySettings = true; - # NOTE: Sunshine is a little weird since it requires multiple - # ports. You configure it with a base port and the web UI +1 from - # the base port. - proxyPass = "https://127.0.0.1:${toString (config.services.sunshine.settings.port + 1)}"; - extraConfig = '' - proxy_ssl_verify off; - ''; - }; - } - // lib.optionalAttrs (cfg.acmeCertName != "") { - forceSSL = true; - useACMEHost = cfg.acmeCertName; + virtualHosts."sunshine.kilonull.com" = { + locations."/" = { + recommendedProxySettings = true; + # NOTE: Sunshine is a little weird since it requires multiple + # ports. You configure it with a base port and the web UI +1 from + # the base port. + proxyPass = "https://127.0.0.1:${toString (config.services.sunshine.settings.port + 1)}"; + extraConfig = '' + proxy_ssl_verify off; + ''; }; + } + // lib.optionalAttrs (cfg.acmeCertName != "") { + forceSSL = true; + useACMEHost = cfg.acmeCertName; + }; }; }; } diff --git a/modules/nixos/services/teslamate/default.nix b/modules/nixos/services/teslamate/default.nix index 4c35ff4..cb0c188 100644 --- a/modules/nixos/services/teslamate/default.nix +++ b/modules/nixos/services/teslamate/default.nix @@ -147,19 +147,18 @@ in services.nginx = { enable = true; - virtualHosts."teslamate.kilonull.com" = - { - locations."/" = { - recommendedProxySettings = true; - proxyWebsockets = true; - # TODO: Make port configurable. - proxyPass = "http://127.0.0.1:4000"; - }; - } - // lib.optionalAttrs (cfg.acmeCertName != "") { - forceSSL = true; - useACMEHost = cfg.acmeCertName; + virtualHosts."teslamate.kilonull.com" = { + locations."/" = { + recommendedProxySettings = true; + proxyWebsockets = true; + # TODO: Make port configurable. + proxyPass = "http://127.0.0.1:4000"; }; + } + // lib.optionalAttrs (cfg.acmeCertName != "") { + forceSSL = true; + useACMEHost = cfg.acmeCertName; + }; }; networking.firewall.allowedTCPPorts = [ 4000 ]; diff --git a/modules/nixos/user/default.nix b/modules/nixos/user/default.nix index 67bea25..7810ec5 100644 --- a/modules/nixos/user/default.nix +++ b/modules/nixos/user/default.nix @@ -58,6 +58,7 @@ in shell = pkgs.zsh; extraGroups = [ "wheel" ] ++ cfg.extraGroups; - } // cfg.extraOptions; + } + // cfg.extraOptions; }; } From 90b3ee1edae7dea4f38b122a406743da34ffaf2d Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Sat, 28 Feb 2026 21:26:50 -0800 Subject: [PATCH 05/32] Add yazi popup --- modules/home/apps/tmux/default.nix | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/modules/home/apps/tmux/default.nix b/modules/home/apps/tmux/default.nix index 3cef1f2..130250e 100644 --- a/modules/home/apps/tmux/default.nix +++ b/modules/home/apps/tmux/default.nix @@ -111,6 +111,16 @@ in } { display-popup -h 90% -w 90% -E "tmux new-session -A -s btop ${pkgs.btop}/bin/btop" } + '' + + lib.strings.optionalString config.programs.yazi.enable '' + # Open yazi in a popup + # Spins up a new session with a '-yazi' suffix (hitting the shortcut + # toggles between attaching and detaching) + bind C-g if-shell "[[ $(tmux display-message -p '#S') == *-yazi ]]" { + detach-client + } { + display-popup -h 90% -w 90% -E "tmux new-session -A -s $(tmux display-message -p '#S')-yazi ${pkgs.yazi}/bin/yazi" + } ''; }; From 0819294a35d0f6775ba625984350e1d6a7a1d805 Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Sat, 28 Feb 2026 21:38:14 -0800 Subject: [PATCH 06/32] Disable hydra --- systems/x86_64-linux/gospel/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/systems/x86_64-linux/gospel/default.nix b/systems/x86_64-linux/gospel/default.nix index 40a1475..58e570e 100644 --- a/systems/x86_64-linux/gospel/default.nix +++ b/systems/x86_64-linux/gospel/default.nix @@ -47,7 +47,8 @@ services.prometheus.enable = true; services.promtail.enable = true; services.hydra = { - enable = true; + # Intentionally disabled for now + enable = false; acmeCertName = "kilonull.com"; secretKeyPath = "/var/gospelCache"; s3Bucket = "nix-store"; From a6fdf61cea522b7a2fc97f67c95269f8c7484067 Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Sat, 28 Feb 2026 22:05:51 -0800 Subject: [PATCH 07/32] Fix typo --- .forgejo/workflows/build_nixos_configs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/build_nixos_configs.yml b/.forgejo/workflows/build_nixos_configs.yml index 650718e..93523e9 100644 --- a/.forgejo/workflows/build_nixos_configs.yml +++ b/.forgejo/workflows/build_nixos_configs.yml @@ -1,4 +1,4 @@ -name: Buill NixOS Configurations +name: Build NixOS Configurations on: [push] jobs: From d12fc5d944af0544ea964d63e5d58c451cbc7dee Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Sat, 28 Feb 2026 22:10:27 -0800 Subject: [PATCH 08/32] Add runner settings to get nix builds working Committing this late (was already in use by system) --- systems/x86_64-linux/gospel/default.nix | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/systems/x86_64-linux/gospel/default.nix b/systems/x86_64-linux/gospel/default.nix index 58e570e..4422494 100644 --- a/systems/x86_64-linux/gospel/default.nix +++ b/systems/x86_64-linux/gospel/default.nix @@ -112,6 +112,15 @@ "ubuntu-20.04:docker://node:16-bullseye" "ubuntu-18.04:docker://node:16-buster" ]; + settings.container = { + options = '' + ; + -e PATH=:${pkgs.nix}/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + -e NIX_PATH=nixpkgs=flake:nixpkgs:/nix/var/nix/profiles/per-user/root/channels + -e NIX_REMOTE=daemon + ''; + valid_volumes = [ "/nix" ]; + }; }; }; }; From 16b77fee0a97b10b7d44082ce03ae266caf5f741 Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Sat, 28 Feb 2026 22:26:07 -0800 Subject: [PATCH 09/32] Update lockfile --- flake.lock | 56 +++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/flake.lock b/flake.lock index 0f4d688..11ba4d8 100644 --- a/flake.lock +++ b/flake.lock @@ -63,11 +63,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1770551880, - "narHash": "sha256-+cS5yXWsSLiK36+PP/+dcQdxpXSclx2d65p7l6Dis+A=", + "lastModified": 1772153824, + "narHash": "sha256-T65qXmlcD9qFpPTi+mOXsn4dIkO2N8Ls67nqmuzepv0=", "owner": "catppuccin", "repo": "nix", - "rev": "db4dfe3f2a80e9c33492d839accd49f75c7324c2", + "rev": "4b0f5b7bf7b3eeb484d49524f3c9791864ab9362", "type": "github" }, "original": { @@ -132,11 +132,11 @@ ] }, "locked": { - "lastModified": 1770744655, - "narHash": "sha256-n8U5fggqvdAUJ6Ydd7uEG1aEsZBuRgUJnA++dtsmpYQ=", + "lastModified": 1772320113, + "narHash": "sha256-F/yM6SAAtCkG4NVOWap70CcAiPP+EIR5rb2zI3XlHDw=", "owner": "cachix", "repo": "devenv", - "rev": "d8bd7b74d0604227220074ac0bc934c4efb2b8fb", + "rev": "65c59037d2dba83876ec9da8d22584d604553f16", "type": "github" }, "original": { @@ -361,11 +361,11 @@ ] }, "locked": { - "lastModified": 1770779995, - "narHash": "sha256-Evbc+u49wYQ5uyEi/HHxVFEt3g/w4MZxkMXMe7McjRM=", + "lastModified": 1772330611, + "narHash": "sha256-UZjPc/d5XRxvjDbk4veAO4XFdvx6BUum2l40V688Xq8=", "owner": "nix-community", "repo": "home-manager", - "rev": "b3f43db171474132528be57610bfa5fb3b766879", + "rev": "58fd7ff0eec2cda43e705c4c0585729ec471d400", "type": "github" }, "original": { @@ -401,11 +401,11 @@ ] }, "locked": { - "lastModified": 1770395975, - "narHash": "sha256-zg0AEZn8d4rqIIsw5XrkVL5p1y6fBj2L57awfUg+gNA=", + "lastModified": 1771532737, + "narHash": "sha256-H26FQmOyvIGnedfAioparJQD8Oe+/byD6OpUpnI/hkE=", "owner": "cachix", "repo": "nix", - "rev": "ccb6019ce2bd11f5de5fe4617c0079d8cb1ed057", + "rev": "7eb6c427c7a86fdc3ebf9e6cbf2a84e80e8974fd", "type": "github" }, "original": { @@ -480,11 +480,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1770631810, - "narHash": "sha256-b7iK/x+zOXbjhRqa+XBlYla4zFvPZyU5Ln2HJkiSnzc=", + "lastModified": 1771969195, + "narHash": "sha256-qwcDBtrRvJbrrnv1lf/pREQi8t2hWZxVAyeMo7/E9sw=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "2889685785848de940375bf7fea5e7c5a3c8d502", + "rev": "41c6b421bdc301b2624486e11905c9af7b8ec68e", "type": "github" }, "original": { @@ -496,11 +496,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1770197578, - "narHash": "sha256-AYqlWrX09+HvGs8zM6ebZ1pwUqjkfpnv8mewYwAo+iM=", + "lastModified": 1771848320, + "narHash": "sha256-0MAd+0mun3K/Ns8JATeHT1sX28faLII5hVLq0L3BdZU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", + "rev": "2fc6539b481e1d2569f25f8799236694180c0993", "type": "github" }, "original": { @@ -527,11 +527,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1770617025, - "narHash": "sha256-1jZvgZoAagZZB6NwGRv2T2ezPy+X6EFDsJm+YSlsvEs=", + "lastModified": 1772047000, + "narHash": "sha256-7DaQVv4R97cii/Qdfy4tmDZMB2xxtyIvNGSwXBBhSmo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2db38e08fdadcc0ce3232f7279bab59a15b94482", + "rev": "1267bb4920d0fc06ea916734c11b0bf004bbe17e", "type": "github" }, "original": { @@ -559,11 +559,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1770562336, - "narHash": "sha256-ub1gpAONMFsT/GU2hV6ZWJjur8rJ6kKxdm9IlCT0j84=", + "lastModified": 1772198003, + "narHash": "sha256-I45esRSssFtJ8p/gLHUZ1OUaaTaVLluNkABkk6arQwE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d6c71932130818840fc8fe9509cf50be8c64634f", + "rev": "dd9b079222d43e1943b6ebd802f04fd959dc8e61", "type": "github" }, "original": { @@ -612,11 +612,11 @@ "nixvim": "nixvim_2" }, "locked": { - "lastModified": 1770233182, - "narHash": "sha256-p6AN4IoRzITMYHt4OlPqWE9L80bbEHOh60Ek3OgMSJ4=", + "lastModified": 1770835587, + "narHash": "sha256-D0LVQRMGA0xJpdpykxXaoHC3vGrkYG461jbJ5TfUzEM=", "ref": "main", - "rev": "5a55725bd5de3f0640ccfcbf38600fc79b3f92fd", - "revCount": 58, + "rev": "72767c9aee71b0e5cec6dde7c2de92d3edb93dc4", + "revCount": 59, "type": "git", "url": "https://git.alejandr0angul0.dev/alejandro-angulo/nixvim-config" }, From 07928e2e6e80f15fffaa8c148ed9f18d0b18090b Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Sat, 28 Feb 2026 22:31:50 -0800 Subject: [PATCH 10/32] Fix yazi shortcut --- modules/home/apps/tmux/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/home/apps/tmux/default.nix b/modules/home/apps/tmux/default.nix index 130250e..fb8ac52 100644 --- a/modules/home/apps/tmux/default.nix +++ b/modules/home/apps/tmux/default.nix @@ -116,7 +116,7 @@ in # Open yazi in a popup # Spins up a new session with a '-yazi' suffix (hitting the shortcut # toggles between attaching and detaching) - bind C-g if-shell "[[ $(tmux display-message -p '#S') == *-yazi ]]" { + bind C-y if-shell "[[ $(tmux display-message -p '#S') == *-yazi ]]" { detach-client } { display-popup -h 90% -w 90% -E "tmux new-session -A -s $(tmux display-message -p '#S')-yazi ${pkgs.yazi}/bin/yazi" From e7b18117930366b54cca4684181535637040c6c6 Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Sat, 28 Feb 2026 22:35:09 -0800 Subject: [PATCH 11/32] Cache upstream binaries too --- .forgejo/workflows/build_nixos_configs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/build_nixos_configs.yml b/.forgejo/workflows/build_nixos_configs.yml index 93523e9..579e3cd 100644 --- a/.forgejo/workflows/build_nixos_configs.yml +++ b/.forgejo/workflows/build_nixos_configs.yml @@ -27,4 +27,4 @@ jobs: nix --extra-experimental-features nix-command --extra-experimental-features flakes run nixpkgs#attic-client \ -- login gospel https://attic.kilonull.com ${{ secrets.ATTIC_PUSH_SECRET }} nix --extra-experimental-features nix-command --extra-experimental-features flakes run nixpkgs#attic-client \ - -- push gospel:nixosConfigs ./result + -- push --ignore-upstream-cache-filter gospel:nixosConfigs ./result From 1d4762941dfb3f8858eec94914066bb7fb8a709c Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Sat, 28 Feb 2026 23:02:42 -0800 Subject: [PATCH 12/32] Try disabling allowed hosts list --- modules/nixos/services/atticd/default.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/nixos/services/atticd/default.nix b/modules/nixos/services/atticd/default.nix index 8843c6d..1a41dd5 100644 --- a/modules/nixos/services/atticd/default.nix +++ b/modules/nixos/services/atticd/default.nix @@ -37,7 +37,6 @@ in # openssl genrsa -traditional 4096 | base64 -w0 environmentFile = config.age.secrets.atticd.path; settings = { - allowed-hosts = [ "attic.kilonull.com" ]; api-endpoint = "https://attic.kilonull.com/"; listen = "[::]:8080"; garbage-collection.retention-period = "30d"; From 3e68b6d7bf3f5607ebd7b066c36311502c867392 Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Sat, 28 Feb 2026 23:14:39 -0800 Subject: [PATCH 13/32] Address build warning --- modules/home/programs/yazi/default.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/home/programs/yazi/default.nix b/modules/home/programs/yazi/default.nix index c44c998..4867baf 100644 --- a/modules/home/programs/yazi/default.nix +++ b/modules/home/programs/yazi/default.nix @@ -13,7 +13,10 @@ in }; config = lib.mkIf cfg.enable { - programs.yazi.enable = true; + programs.yazi = { + enable = true; + shellWrapperName = "y"; + }; catppuccin.yazi.enable = true; }; } From 79b18edc1abd3ab8f51c046b179a11e58ea8f545 Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Tue, 3 Mar 2026 08:31:43 -0800 Subject: [PATCH 14/32] Add zoom --- systems/x86_64-linux/carbon/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/systems/x86_64-linux/carbon/default.nix b/systems/x86_64-linux/carbon/default.nix index 41e05a9..fa68830 100644 --- a/systems/x86_64-linux/carbon/default.nix +++ b/systems/x86_64-linux/carbon/default.nix @@ -82,6 +82,7 @@ nixos-generators vlc signal-desktop-bin + zoom-us ]; environment.pathsToLink = [ "/share/applications" From 8db258d433b4b9638d8bdc8a996d1dc9fccbb722 Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Sat, 21 Mar 2026 15:02:54 -0700 Subject: [PATCH 15/32] Update lockfile --- flake.lock | 685 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 611 insertions(+), 74 deletions(-) diff --git a/flake.lock b/flake.lock index 11ba4d8..6ef3c66 100644 --- a/flake.lock +++ b/flake.lock @@ -44,11 +44,69 @@ ] }, "locked": { - "lastModified": 1760971495, - "narHash": "sha256-IwnNtbNVrlZIHh7h4Wz6VP0Furxg9Hh0ycighvL5cZc=", + "lastModified": 1767714506, + "narHash": "sha256-WaTs0t1CxhgxbIuvQ97OFhDTVUGd1HA+KzLZUZBhe0s=", "owner": "cachix", "repo": "cachix", - "rev": "c5bfd933d1033672f51a863c47303fc0e093c2d2", + "rev": "894c649f0daaa38bbcfb21de64be47dfa7cd0ec9", + "type": "github" + }, + "original": { + "owner": "cachix", + "ref": "latest", + "repo": "cachix", + "type": "github" + } + }, + "cachix_2": { + "inputs": { + "devenv": [ + "devenv", + "crate2nix" + ], + "flake-compat": [ + "devenv", + "crate2nix" + ], + "git-hooks": "git-hooks", + "nixpkgs": "nixpkgs_3" + }, + "locked": { + "lastModified": 1767714506, + "narHash": "sha256-WaTs0t1CxhgxbIuvQ97OFhDTVUGd1HA+KzLZUZBhe0s=", + "owner": "cachix", + "repo": "cachix", + "rev": "894c649f0daaa38bbcfb21de64be47dfa7cd0ec9", + "type": "github" + }, + "original": { + "owner": "cachix", + "ref": "latest", + "repo": "cachix", + "type": "github" + } + }, + "cachix_3": { + "inputs": { + "devenv": [ + "devenv", + "crate2nix", + "crate2nix_stable" + ], + "flake-compat": [ + "devenv", + "crate2nix", + "crate2nix_stable" + ], + "git-hooks": "git-hooks_2", + "nixpkgs": "nixpkgs_4" + }, + "locked": { + "lastModified": 1767714506, + "narHash": "sha256-WaTs0t1CxhgxbIuvQ97OFhDTVUGd1HA+KzLZUZBhe0s=", + "owner": "cachix", + "repo": "cachix", + "rev": "894c649f0daaa38bbcfb21de64be47dfa7cd0ec9", "type": "github" }, "original": { @@ -63,11 +121,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1772153824, - "narHash": "sha256-T65qXmlcD9qFpPTi+mOXsn4dIkO2N8Ls67nqmuzepv0=", + "lastModified": 1774098279, + "narHash": "sha256-OoQRoQmwCuBBXObi82F6C+eYV1lYCt5Va5k/VckJ6vo=", "owner": "catppuccin", "repo": "nix", - "rev": "4b0f5b7bf7b3eeb484d49524f3c9791864ab9362", + "rev": "cb374516af3ccc3aa0c6ef518292bf4ae417a60e", "type": "github" }, "original": { @@ -97,6 +155,64 @@ "url": "https://git.alejandr0angul0.dev/alejandro-angulo/catppuccin-nix-palette" } }, + "crate2nix": { + "inputs": { + "cachix": "cachix_2", + "crate2nix_stable": "crate2nix_stable", + "devshell": "devshell_2", + "flake-compat": "flake-compat_3", + "flake-parts": "flake-parts_2", + "nix-test-runner": "nix-test-runner_2", + "nixpkgs": [ + "devenv", + "nixpkgs" + ], + "pre-commit-hooks": "pre-commit-hooks_2" + }, + "locked": { + "lastModified": 1773440526, + "narHash": "sha256-OcX1MYqUdoalY3/vU67PEx8m6RvqGxX0LwKonjzXn7I=", + "owner": "nix-community", + "repo": "crate2nix", + "rev": "e697d3049c909580128caa856ab8eb709556a97b", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "crate2nix", + "type": "github" + } + }, + "crate2nix_stable": { + "inputs": { + "cachix": "cachix_3", + "crate2nix_stable": [ + "devenv", + "crate2nix", + "crate2nix_stable" + ], + "devshell": "devshell", + "flake-compat": "flake-compat_2", + "flake-parts": "flake-parts", + "nix-test-runner": "nix-test-runner", + "nixpkgs": "nixpkgs_5", + "pre-commit-hooks": "pre-commit-hooks" + }, + "locked": { + "lastModified": 1769627083, + "narHash": "sha256-SUuruvw1/moNzCZosHaa60QMTL+L9huWdsCBN6XZIic=", + "owner": "nix-community", + "repo": "crate2nix", + "rev": "7c33e664668faecf7655fa53861d7a80c9e464a2", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "0.15.0", + "repo": "crate2nix", + "type": "github" + } + }, "deploy-rs": { "inputs": { "flake-compat": "flake-compat", @@ -122,21 +238,23 @@ "devenv": { "inputs": { "cachix": "cachix", - "flake-compat": "flake-compat_2", - "flake-parts": "flake-parts", - "git-hooks": "git-hooks", + "crate2nix": "crate2nix", + "flake-compat": "flake-compat_4", + "flake-parts": "flake-parts_3", + "git-hooks": "git-hooks_3", "nix": "nix", "nixd": "nixd", "nixpkgs": [ "nixpkgs" - ] + ], + "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1772320113, - "narHash": "sha256-F/yM6SAAtCkG4NVOWap70CcAiPP+EIR5rb2zI3XlHDw=", + "lastModified": 1774123099, + "narHash": "sha256-nkSq47+H4V4Z1CKHa3Hm6xYkRbjDLEptwOfOuAnUsnE=", "owner": "cachix", "repo": "devenv", - "rev": "65c59037d2dba83876ec9da8d22584d604553f16", + "rev": "c39977739dc6685541b552353a3b37259a85ad33", "type": "github" }, "original": { @@ -145,6 +263,51 @@ "type": "github" } }, + "devshell": { + "inputs": { + "nixpkgs": [ + "devenv", + "crate2nix", + "crate2nix_stable", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1768818222, + "narHash": "sha256-460jc0+CZfyaO8+w8JNtlClB2n4ui1RbHfPTLkpwhU8=", + "owner": "numtide", + "repo": "devshell", + "rev": "255a2b1725a20d060f566e4755dbf571bbbb5f76", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "devshell_2": { + "inputs": { + "nixpkgs": [ + "devenv", + "crate2nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1768818222, + "narHash": "sha256-460jc0+CZfyaO8+w8JNtlClB2n4ui1RbHfPTLkpwhU8=", + "owner": "numtide", + "repo": "devshell", + "rev": "255a2b1725a20d060f566e4755dbf571bbbb5f76", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, "flake-compat": { "flake": false, "locked": { @@ -162,13 +325,41 @@ } }, "flake-compat_2": { + "locked": { + "lastModified": 1733328505, + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "revCount": 69, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.1.0/01948eb7-9cba-704f-bbf3-3fa956735b52/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, + "flake-compat_3": { + "locked": { + "lastModified": 1733328505, + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "revCount": 69, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.1.0/01948eb7-9cba-704f-bbf3-3fa956735b52/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, + "flake-compat_4": { "flake": false, "locked": { - "lastModified": 1761588595, - "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", + "lastModified": 1767039857, + "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", "owner": "edolstra", "repo": "flake-compat", - "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", + "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", "type": "github" }, "original": { @@ -177,7 +368,7 @@ "type": "github" } }, - "flake-compat_3": { + "flake-compat_5": { "flake": false, "locked": { "lastModified": 1650374568, @@ -197,15 +388,17 @@ "inputs": { "nixpkgs-lib": [ "devenv", + "crate2nix", + "crate2nix_stable", "nixpkgs" ] }, "locked": { - "lastModified": 1760948891, - "narHash": "sha256-TmWcdiUUaWk8J4lpjzu4gCGxWY6/Ok7mOK4fIFfBuU4=", + "lastModified": 1768135262, + "narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "864599284fc7c0ba6357ed89ed5e2cd5040f0c04", + "rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac", "type": "github" }, "original": { @@ -216,7 +409,11 @@ }, "flake-parts_2": { "inputs": { - "nixpkgs-lib": "nixpkgs-lib" + "nixpkgs-lib": [ + "devenv", + "crate2nix", + "nixpkgs" + ] }, "locked": { "lastModified": 1768135262, @@ -233,6 +430,45 @@ } }, "flake-parts_3": { + "inputs": { + "nixpkgs-lib": [ + "devenv", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1772408722, + "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_4": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1768135262, + "narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_5": { "inputs": { "nixpkgs-lib": [ "nixvim", @@ -254,21 +490,6 @@ "type": "github" } }, - "flake-root": { - "locked": { - "lastModified": 1723604017, - "narHash": "sha256-rBtQ8gg+Dn4Sx/s+pvjdq3CB2wQNzx9XGFq/JVGCB6k=", - "owner": "srid", - "repo": "flake-root", - "rev": "b759a56851e10cb13f6b8e5698af7b59c44be26e", - "type": "github" - }, - "original": { - "owner": "srid", - "repo": "flake-root", - "type": "github" - } - }, "flake-utils": { "inputs": { "systems": "systems_5" @@ -310,20 +531,82 @@ "inputs": { "flake-compat": [ "devenv", + "crate2nix", + "cachix", "flake-compat" ], "gitignore": "gitignore", + "nixpkgs": [ + "devenv", + "crate2nix", + "cachix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1765404074, + "narHash": "sha256-+ZDU2d+vzWkEJiqprvV5PR26DVFN2vgddwG5SnPZcUM=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "2d6f58930fbcd82f6f9fd59fb6d13e37684ca529", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "git-hooks_2": { + "inputs": { + "flake-compat": [ + "devenv", + "crate2nix", + "crate2nix_stable", + "cachix", + "flake-compat" + ], + "gitignore": "gitignore_2", + "nixpkgs": [ + "devenv", + "crate2nix", + "crate2nix_stable", + "cachix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1765404074, + "narHash": "sha256-+ZDU2d+vzWkEJiqprvV5PR26DVFN2vgddwG5SnPZcUM=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "2d6f58930fbcd82f6f9fd59fb6d13e37684ca529", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "git-hooks_3": { + "inputs": { + "flake-compat": [ + "devenv", + "flake-compat" + ], + "gitignore": "gitignore_5", "nixpkgs": [ "devenv", "nixpkgs" ] }, "locked": { - "lastModified": 1760663237, - "narHash": "sha256-BflA6U4AM1bzuRMR8QqzPXqh8sWVCNDzOdsxXEguJIc=", + "lastModified": 1772893680, + "narHash": "sha256-JDqZMgxUTCq85ObSaFw0HhE+lvdOre1lx9iI6vYyOEs=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "ca5b894d3e3e151ffc1db040b6ce4dcc75d31c37", + "rev": "8baab586afc9c9b57645a734c820e4ac0a604af9", "type": "github" }, "original": { @@ -333,6 +616,102 @@ } }, "gitignore": { + "inputs": { + "nixpkgs": [ + "devenv", + "crate2nix", + "cachix", + "git-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_2": { + "inputs": { + "nixpkgs": [ + "devenv", + "crate2nix", + "crate2nix_stable", + "cachix", + "git-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_3": { + "inputs": { + "nixpkgs": [ + "devenv", + "crate2nix", + "crate2nix_stable", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_4": { + "inputs": { + "nixpkgs": [ + "devenv", + "crate2nix", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_5": { "inputs": { "nixpkgs": [ "devenv", @@ -361,11 +740,11 @@ ] }, "locked": { - "lastModified": 1772330611, - "narHash": "sha256-UZjPc/d5XRxvjDbk4veAO4XFdvx6BUum2l40V688Xq8=", + "lastModified": 1774007980, + "narHash": "sha256-FOnZjElEI8pqqCvB6K/1JRHTE8o4rer8driivTpq2uo=", "owner": "nix-community", "repo": "home-manager", - "rev": "58fd7ff0eec2cda43e705c4c0585729ec471d400", + "rev": "9670de2921812bc4e0452f6e3efd8c859696c183", "type": "github" }, "original": { @@ -401,11 +780,11 @@ ] }, "locked": { - "lastModified": 1771532737, - "narHash": "sha256-H26FQmOyvIGnedfAioparJQD8Oe+/byD6OpUpnI/hkE=", + "lastModified": 1774103430, + "narHash": "sha256-MRNVInSmvhKIg3y0UdogQJXe+omvKijGszFtYpd5r9k=", "owner": "cachix", "repo": "nix", - "rev": "7eb6c427c7a86fdc3ebf9e6cbf2a84e80e8974fd", + "rev": "e127c1c94cefe02d8ca4cca79ef66be4c527510e", "type": "github" }, "original": { @@ -415,13 +794,44 @@ "type": "github" } }, + "nix-test-runner": { + "flake": false, + "locked": { + "lastModified": 1588761593, + "narHash": "sha256-FKJykltAN/g3eIceJl4SfDnnyuH2jHImhMrXS2KvGIs=", + "owner": "stoeffel", + "repo": "nix-test-runner", + "rev": "c45d45b11ecef3eb9d834c3b6304c05c49b06ca2", + "type": "github" + }, + "original": { + "owner": "stoeffel", + "repo": "nix-test-runner", + "type": "github" + } + }, + "nix-test-runner_2": { + "flake": false, + "locked": { + "lastModified": 1588761593, + "narHash": "sha256-FKJykltAN/g3eIceJl4SfDnnyuH2jHImhMrXS2KvGIs=", + "owner": "stoeffel", + "repo": "nix-test-runner", + "rev": "c45d45b11ecef3eb9d834c3b6304c05c49b06ca2", + "type": "github" + }, + "original": { + "owner": "stoeffel", + "repo": "nix-test-runner", + "type": "github" + } + }, "nixd": { "inputs": { "flake-parts": [ "devenv", "flake-parts" ], - "flake-root": "flake-root", "nixpkgs": [ "devenv", "nixpkgs" @@ -429,11 +839,11 @@ "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1763964548, - "narHash": "sha256-JTRoaEWvPsVIMFJWeS4G2isPo15wqXY/otsiHPN0zww=", + "lastModified": 1773634079, + "narHash": "sha256-49qb4QNMv77VOeEux+sMd0uBhPvvHgVc0r938Bulvbo=", "owner": "nix-community", "repo": "nixd", - "rev": "d4bf15e56540422e2acc7bc26b20b0a0934e3f5e", + "rev": "8ecf93d4d93745e05ea53534e8b94f5e9506e6bd", "type": "github" }, "original": { @@ -480,11 +890,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1771969195, - "narHash": "sha256-qwcDBtrRvJbrrnv1lf/pREQi8t2hWZxVAyeMo7/E9sw=", + "lastModified": 1774018263, + "narHash": "sha256-HHYEwK1A22aSaxv2ibhMMkKvrDGKGlA/qObG4smrSqc=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "41c6b421bdc301b2624486e11905c9af7b8ec68e", + "rev": "2d4b4717b2534fad5c715968c1cece04a172b365", "type": "github" }, "original": { @@ -496,11 +906,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1771848320, - "narHash": "sha256-0MAd+0mun3K/Ns8JATeHT1sX28faLII5hVLq0L3BdZU=", + "lastModified": 1773821835, + "narHash": "sha256-TJ3lSQtW0E2JrznGVm8hOQGVpXjJyXY2guAxku2O9A4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2fc6539b481e1d2569f25f8799236694180c0993", + "rev": "b40629efe5d6ec48dd1efba650c797ddbd39ace0", "type": "github" }, "original": { @@ -527,11 +937,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1772047000, - "narHash": "sha256-7DaQVv4R97cii/Qdfy4tmDZMB2xxtyIvNGSwXBBhSmo=", + "lastModified": 1773964973, + "narHash": "sha256-NV/J+tTER0P5iJhUDL/8HO5MDjDceLQPRUYgdmy5wXw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1267bb4920d0fc06ea916734c11b0bf004bbe17e", + "rev": "812b3986fd1568f7a858f97fcf425ad996ba7d25", "type": "github" }, "original": { @@ -559,11 +969,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1772198003, - "narHash": "sha256-I45esRSssFtJ8p/gLHUZ1OUaaTaVLluNkABkk6arQwE=", + "lastModified": 1765186076, + "narHash": "sha256-hM20uyap1a0M9d344I692r+ik4gTMyj60cQWO+hAYP8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "dd9b079222d43e1943b6ebd802f04fd959dc8e61", + "rev": "addf7cf5f383a3101ecfba091b98d0a1263dc9b8", "type": "github" }, "original": { @@ -574,6 +984,54 @@ } }, "nixpkgs_4": { + "locked": { + "lastModified": 1765186076, + "narHash": "sha256-hM20uyap1a0M9d344I692r+ik4gTMyj60cQWO+hAYP8=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "addf7cf5f383a3101ecfba091b98d0a1263dc9b8", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1769433173, + "narHash": "sha256-Gf1dFYgD344WZ3q0LPlRoWaNdNQq8kSBDLEWulRQSEs=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "13b0f9e6ac78abbbb736c635d87845c4f4bee51b", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_6": { + "locked": { + "lastModified": 1773821835, + "narHash": "sha256-TJ3lSQtW0E2JrznGVm8hOQGVpXjJyXY2guAxku2O9A4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b40629efe5d6ec48dd1efba650c797ddbd39ace0", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_7": { "locked": { "lastModified": 1768875095, "narHash": "sha256-dYP3DjiL7oIiiq3H65tGIXXIT1Waiadmv93JS0sS+8A=", @@ -589,7 +1047,7 @@ "type": "github" } }, - "nixpkgs_5": { + "nixpkgs_8": { "locked": { "lastModified": 1767026758, "narHash": "sha256-7fsac/f7nh/VaKJ/qm3I338+wAJa/3J57cOGpXi0Sbg=", @@ -607,8 +1065,8 @@ }, "nixvim": { "inputs": { - "flake-parts": "flake-parts_2", - "nixpkgs": "nixpkgs_4", + "flake-parts": "flake-parts_4", + "nixpkgs": "nixpkgs_7", "nixvim": "nixvim_2" }, "locked": { @@ -628,8 +1086,8 @@ }, "nixvim_2": { "inputs": { - "flake-parts": "flake-parts_3", - "nixpkgs": "nixpkgs_5", + "flake-parts": "flake-parts_5", + "nixpkgs": "nixpkgs_8", "systems": "systems_4" }, "locked": { @@ -665,11 +1123,11 @@ "powerlevel10k": { "flake": false, "locked": { - "lastModified": 1769621797, - "narHash": "sha256-xiUNt2zomP3TNiCW/PZn6rS/3pv+uW17YjkzEPc227I=", + "lastModified": 1773468431, + "narHash": "sha256-J8qKLkKYd62LuUY2y6Hy+AaokKVDSTucCNQwVQeAaxo=", "owner": "romkatv", "repo": "powerlevel10k", - "rev": "8ed1f58e082e1cce85e1d69235d1a906cf3c643e", + "rev": "604f19a9eaa18e76db2e60b8d446d5f879065f90", "type": "github" }, "original": { @@ -679,6 +1137,64 @@ "type": "github" } }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": [ + "devenv", + "crate2nix", + "crate2nix_stable", + "flake-compat" + ], + "gitignore": "gitignore_3", + "nixpkgs": [ + "devenv", + "crate2nix", + "crate2nix_stable", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1769069492, + "narHash": "sha256-Efs3VUPelRduf3PpfPP2ovEB4CXT7vHf8W+xc49RL/U=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "a1ef738813b15cf8ec759bdff5761b027e3e1d23", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "pre-commit-hooks_2": { + "inputs": { + "flake-compat": [ + "devenv", + "crate2nix", + "flake-compat" + ], + "gitignore": "gitignore_4", + "nixpkgs": [ + "devenv", + "crate2nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1769069492, + "narHash": "sha256-Efs3VUPelRduf3PpfPP2ovEB4CXT7vHf8W+xc49RL/U=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "a1ef738813b15cf8ec759bdff5761b027e3e1d23", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, "root": { "inputs": { "agenix": "agenix", @@ -689,7 +1205,7 @@ "home-manager": "home-manager", "nixos-generators": "nixos-generators", "nixos-hardware": "nixos-hardware", - "nixpkgs": "nixpkgs_3", + "nixpkgs": "nixpkgs_6", "nixpkgs-stable": "nixpkgs-stable", "nixvim": "nixvim", "powerlevel10k": "powerlevel10k", @@ -697,9 +1213,30 @@ "zsh-syntax-highlighting": "zsh-syntax-highlighting" } }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "devenv", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773630837, + "narHash": "sha256-zJhgAGnbVKeBMJOb9ctZm4BGS/Rnrz+5lfSXTVah4HQ=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "f600ea449c7b5bb596fa1cf21c871cc5b9e31316", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, "snowfall-lib": { "inputs": { - "flake-compat": "flake-compat_3", + "flake-compat": "flake-compat_5", "flake-utils-plus": "flake-utils-plus", "nixpkgs": [ "nixpkgs" @@ -803,11 +1340,11 @@ ] }, "locked": { - "lastModified": 1734704479, - "narHash": "sha256-MMi74+WckoyEWBRcg/oaGRvXC9BVVxDZNRMpL+72wBI=", + "lastModified": 1772660329, + "narHash": "sha256-IjU1FxYqm+VDe5qIOxoW+pISBlGvVApRjiw/Y/ttJzY=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "65712f5af67234dad91a5a4baee986a8b62dbf8f", + "rev": "3710e0e1218041bbad640352a0440114b1e10428", "type": "github" }, "original": { From cd2ee1eb19e24dca3a898eaaa3cf07ccbf496cdc Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Sat, 21 Mar 2026 15:09:14 -0700 Subject: [PATCH 16/32] Add chromium on carbon --- systems/x86_64-linux/carbon/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/systems/x86_64-linux/carbon/default.nix b/systems/x86_64-linux/carbon/default.nix index fa68830..e1a43bd 100644 --- a/systems/x86_64-linux/carbon/default.nix +++ b/systems/x86_64-linux/carbon/default.nix @@ -75,6 +75,7 @@ wireguard-tools + chromium prusa-slicer traceroute gnumake From 55c5365472c32da7429372a69ac6adb6556528e8 Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Sat, 21 Mar 2026 15:13:38 -0700 Subject: [PATCH 17/32] Remove stray semicolon --- systems/x86_64-linux/gospel/default.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/systems/x86_64-linux/gospel/default.nix b/systems/x86_64-linux/gospel/default.nix index 4422494..342ac2d 100644 --- a/systems/x86_64-linux/gospel/default.nix +++ b/systems/x86_64-linux/gospel/default.nix @@ -114,7 +114,6 @@ ]; settings.container = { options = '' - ; -e PATH=:${pkgs.nix}/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -e NIX_PATH=nixpkgs=flake:nixpkgs:/nix/var/nix/profiles/per-user/root/channels -e NIX_REMOTE=daemon From 4217565d5eca8ce25628c08c7fb53af162f47503 Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Sat, 21 Mar 2026 16:04:57 -0700 Subject: [PATCH 18/32] Fix issue after updating lockfile --- modules/home/windowManagers/hyprland/default.nix | 4 ++-- modules/home/windowManagers/sway/default.nix | 4 ++-- overlays/{signal-desktop-bin => signal-desktop}/default.nix | 2 +- systems/x86_64-linux/carbon/default.nix | 4 +--- systems/x86_64-linux/gospel/default.nix | 2 +- 5 files changed, 7 insertions(+), 9 deletions(-) rename overlays/{signal-desktop-bin => signal-desktop}/default.nix (79%) diff --git a/modules/home/windowManagers/hyprland/default.nix b/modules/home/windowManagers/hyprland/default.nix index aba89ff..365ddaa 100644 --- a/modules/home/windowManagers/hyprland/default.nix +++ b/modules/home/windowManagers/hyprland/default.nix @@ -252,8 +252,8 @@ in ", XF86AudioPrev, exec, ${pkgs.playerctl}/bin/playerctl previous" ", XF86AudioNext, exec, ${pkgs.playerctl}/bin/playerctl next" ", XF86AudioPlay, exec, ${pkgs.playerctl}/bin/playerctl play-pause" - ", XF86MonBrightnessDown, exec, ${pkgs.light}/bin/light -U 5" - ", XF86MonBrightnessUp, exec, ${pkgs.light}/bin/light -A 5" + ", XF86MonBrightnessDown, exec, ${pkgs.brightnessctl}/bin/brightnessctl set +5" + ", XF86MonBrightnessUp, exec, ${pkgs.brightnessctl}/bin/brightnessctl set 5-" ]; }; }; diff --git a/modules/home/windowManagers/sway/default.nix b/modules/home/windowManagers/sway/default.nix index 358f299..272bdf1 100644 --- a/modules/home/windowManagers/sway/default.nix +++ b/modules/home/windowManagers/sway/default.nix @@ -320,8 +320,8 @@ in "${modifier}+Left" = "exec 'playerctl previous'"; # Backlight keys - "XF86MonBrightnessDown" = "exec '${pkgs.light}/bin/light -U 5'"; - "XF86MonBrightnessUp" = "exec '${pkgs.light}/bin/light -A 5'"; + "XF86MonBrightnessDown" = "exec '${pkgs.brightnessctl}/bin/brightnessctl set 5+'"; + "XF86MonBrightnessUp" = "exec '${pkgs.brightnessctl}/bin/brightnessctl set 5-'"; # Navigation diff --git a/overlays/signal-desktop-bin/default.nix b/overlays/signal-desktop/default.nix similarity index 79% rename from overlays/signal-desktop-bin/default.nix rename to overlays/signal-desktop/default.nix index be1b4c3..7941eec 100644 --- a/overlays/signal-desktop-bin/default.nix +++ b/overlays/signal-desktop/default.nix @@ -1,6 +1,6 @@ { ... }: (final: prev: { - signal-desktop-bin = prev.signal-desktop-bin.overrideAttrs (oldAttrs: { + signal-desktop = prev.signal-desktop.overrideAttrs (oldAttrs: { nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [ prev.makeWrapper ]; postInstall = oldAttrs.postInstall or "" + '' wrapProgram $out/bin/signal-desktop \ diff --git a/systems/x86_64-linux/carbon/default.nix b/systems/x86_64-linux/carbon/default.nix index e1a43bd..7d3ae69 100644 --- a/systems/x86_64-linux/carbon/default.nix +++ b/systems/x86_64-linux/carbon/default.nix @@ -82,7 +82,7 @@ hugo nixos-generators vlc - signal-desktop-bin + signal-desktop zoom-us ]; environment.pathsToLink = [ @@ -90,8 +90,6 @@ "/share/xdg-desktop-portal" ]; - programs.light.enable = true; - # 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 diff --git a/systems/x86_64-linux/gospel/default.nix b/systems/x86_64-linux/gospel/default.nix index 342ac2d..f1376a3 100644 --- a/systems/x86_64-linux/gospel/default.nix +++ b/systems/x86_64-linux/gospel/default.nix @@ -202,7 +202,7 @@ prusa-slicer esptool minicom - signal-desktop-bin + signal-desktop ncdu cntr From 549d9ee251364880ef408c12f97122cefe0d8e1e Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Tue, 24 Mar 2026 17:25:33 -0700 Subject: [PATCH 19/32] Fix brightness controls --- modules/home/windowManagers/hyprland/default.nix | 4 ++-- modules/home/windowManagers/sway/default.nix | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/home/windowManagers/hyprland/default.nix b/modules/home/windowManagers/hyprland/default.nix index 365ddaa..9b6a83b 100644 --- a/modules/home/windowManagers/hyprland/default.nix +++ b/modules/home/windowManagers/hyprland/default.nix @@ -252,8 +252,8 @@ in ", XF86AudioPrev, exec, ${pkgs.playerctl}/bin/playerctl previous" ", XF86AudioNext, exec, ${pkgs.playerctl}/bin/playerctl next" ", XF86AudioPlay, exec, ${pkgs.playerctl}/bin/playerctl play-pause" - ", XF86MonBrightnessDown, exec, ${pkgs.brightnessctl}/bin/brightnessctl set +5" - ", XF86MonBrightnessUp, exec, ${pkgs.brightnessctl}/bin/brightnessctl set 5-" + ", XF86MonBrightnessDown, exec, ${pkgs.brightnessctl}/bin/brightnessctl set -n10 10%-" + ", XF86MonBrightnessUp, exec, ${pkgs.brightnessctl}/bin/brightnessctl set 10%+" ]; }; }; diff --git a/modules/home/windowManagers/sway/default.nix b/modules/home/windowManagers/sway/default.nix index 272bdf1..4a122b8 100644 --- a/modules/home/windowManagers/sway/default.nix +++ b/modules/home/windowManagers/sway/default.nix @@ -320,8 +320,8 @@ in "${modifier}+Left" = "exec 'playerctl previous'"; # Backlight keys - "XF86MonBrightnessDown" = "exec '${pkgs.brightnessctl}/bin/brightnessctl set 5+'"; - "XF86MonBrightnessUp" = "exec '${pkgs.brightnessctl}/bin/brightnessctl set 5-'"; + "XF86MonBrightnessDown" = "exec '${pkgs.brightnessctl}/bin/brightnessctl set -n10 10%-'"; + "XF86MonBrightnessUp" = "exec '${pkgs.brightnessctl}/bin/brightnessctl set 10%+'"; # Navigation From 99061b65dae2d8017a7d21f044bf6a1030089add Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Sat, 4 Apr 2026 18:26:57 -0700 Subject: [PATCH 20/32] Fixed sleep when plugged in --- modules/home/services/hypridle/default.nix | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/modules/home/services/hypridle/default.nix b/modules/home/services/hypridle/default.nix index 6e7dfe9..6b082a9 100644 --- a/modules/home/services/hypridle/default.nix +++ b/modules/home/services/hypridle/default.nix @@ -16,12 +16,8 @@ let cfg = config.${namespace}.services.hypridle; # Script that suspends only when on battery power. - # When plugged in, uses systemd-inhibit to block suspend. suspendScript = pkgs.writeShellScript "hypridle-suspend" '' - if [ "$(${pkgs.coreutils}/bin/cat /sys/class/power_supply/AC/online)" = "1" ]; then - # Plugged in - inhibit suspend - ${pkgs.systemd}/bin/systemd-inhibit --what=sleep --who=hypridle --why="AC power connected" --mode=block ${pkgs.coreutils}/bin/sleep infinity & - else + if [ "$(${pkgs.coreutils}/bin/cat /sys/class/power_supply/AC/online)" != "1" ]; then # On battery - suspend ${pkgs.systemd}/bin/systemctl suspend fi From 4f2db0b1e56db1dc0850f4e6d7056604b89ac7be Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Sat, 11 Apr 2026 23:02:07 -0700 Subject: [PATCH 21/32] Initial framework setup --- flake.lock | 61 +++++----- flake.nix | 1 + .../alejandro@framework/default.nix | 37 ++++++ modules/home/services/swaync/default.nix | 2 +- systems/x86_64-linux/framework/default.nix | 114 ++++++++++++++++++ .../framework/hardware-configuration.nix | 42 +++++++ 6 files changed, 226 insertions(+), 31 deletions(-) create mode 100644 homes/x86_64-linux/alejandro@framework/default.nix create mode 100644 systems/x86_64-linux/framework/default.nix create mode 100644 systems/x86_64-linux/framework/hardware-configuration.nix diff --git a/flake.lock b/flake.lock index 6ef3c66..b9490b9 100644 --- a/flake.lock +++ b/flake.lock @@ -121,11 +121,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1774098279, - "narHash": "sha256-OoQRoQmwCuBBXObi82F6C+eYV1lYCt5Va5k/VckJ6vo=", + "lastModified": 1775994227, + "narHash": "sha256-4VKeWtl9dEubrgpy9fSXkXbjBZlNXPNlQQM5l1ppHv4=", "owner": "catppuccin", "repo": "nix", - "rev": "cb374516af3ccc3aa0c6ef518292bf4ae417a60e", + "rev": "d0a9a21ed8e235956a768fc624242ec9a3e15575", "type": "github" }, "original": { @@ -170,16 +170,17 @@ "pre-commit-hooks": "pre-commit-hooks_2" }, "locked": { - "lastModified": 1773440526, - "narHash": "sha256-OcX1MYqUdoalY3/vU67PEx8m6RvqGxX0LwKonjzXn7I=", - "owner": "nix-community", + "lastModified": 1772186516, + "narHash": "sha256-8s28pzmQ6TOIUzznwFibtW1CMieMUl1rYJIxoQYor58=", + "owner": "rossng", "repo": "crate2nix", - "rev": "e697d3049c909580128caa856ab8eb709556a97b", + "rev": "ba5dd398e31ee422fbe021767eb83b0650303a6e", "type": "github" }, "original": { - "owner": "nix-community", + "owner": "rossng", "repo": "crate2nix", + "rev": "ba5dd398e31ee422fbe021767eb83b0650303a6e", "type": "github" } }, @@ -250,11 +251,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1774123099, - "narHash": "sha256-nkSq47+H4V4Z1CKHa3Hm6xYkRbjDLEptwOfOuAnUsnE=", + "lastModified": 1775997427, + "narHash": "sha256-JUXHTRFoHQanKoAKvHTM4Z0YdbCnmZUGqgMPw95KxUw=", "owner": "cachix", "repo": "devenv", - "rev": "c39977739dc6685541b552353a3b37259a85ad33", + "rev": "88ac631cf8b6582ed372b8b22e3bd12240c61f64", "type": "github" }, "original": { @@ -740,11 +741,11 @@ ] }, "locked": { - "lastModified": 1774007980, - "narHash": "sha256-FOnZjElEI8pqqCvB6K/1JRHTE8o4rer8driivTpq2uo=", + "lastModified": 1776030105, + "narHash": "sha256-b4cNpWPDSH+/CTTiw8++yGh1UYG2kQNrbIehV2iGoeo=", "owner": "nix-community", "repo": "home-manager", - "rev": "9670de2921812bc4e0452f6e3efd8c859696c183", + "rev": "49088dc2e7a876e338e510c5f5f60f659819c650", "type": "github" }, "original": { @@ -780,16 +781,16 @@ ] }, "locked": { - "lastModified": 1774103430, - "narHash": "sha256-MRNVInSmvhKIg3y0UdogQJXe+omvKijGszFtYpd5r9k=", + "lastModified": 1775984952, + "narHash": "sha256-FciKF0weMXVirN+ZBSniR4wpKx168cBa9IXhuaLOkkU=", "owner": "cachix", "repo": "nix", - "rev": "e127c1c94cefe02d8ca4cca79ef66be4c527510e", + "rev": "e671135fc5b783798c444e4ece101f6b15ff0c46", "type": "github" }, "original": { "owner": "cachix", - "ref": "devenv-2.32", + "ref": "devenv-2.34", "repo": "nix", "type": "github" } @@ -890,11 +891,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1774018263, - "narHash": "sha256-HHYEwK1A22aSaxv2ibhMMkKvrDGKGlA/qObG4smrSqc=", + "lastModified": 1775490113, + "narHash": "sha256-2ZBhDNZZwYkRmefK5XLOusCJHnoeKkoN95hoSGgMxWM=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "2d4b4717b2534fad5c715968c1cece04a172b365", + "rev": "c775c2772ba56e906cbeb4e0b2db19079ef11ff7", "type": "github" }, "original": { @@ -906,11 +907,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1773821835, - "narHash": "sha256-TJ3lSQtW0E2JrznGVm8hOQGVpXjJyXY2guAxku2O9A4=", + "lastModified": 1775423009, + "narHash": "sha256-vPKLpjhIVWdDrfiUM8atW6YkIggCEKdSAlJPzzhkQlw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b40629efe5d6ec48dd1efba650c797ddbd39ace0", + "rev": "68d8aa3d661f0e6bd5862291b5bb263b2a6595c9", "type": "github" }, "original": { @@ -937,11 +938,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1773964973, - "narHash": "sha256-NV/J+tTER0P5iJhUDL/8HO5MDjDceLQPRUYgdmy5wXw=", + "lastModified": 1775811116, + "narHash": "sha256-t+HZK42pB6N+i5RGbuy7Xluez/VvWbembBdvzsc23Ss=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "812b3986fd1568f7a858f97fcf425ad996ba7d25", + "rev": "54170c54449ea4d6725efd30d719c5e505f1c10e", "type": "github" }, "original": { @@ -1017,11 +1018,11 @@ }, "nixpkgs_6": { "locked": { - "lastModified": 1773821835, - "narHash": "sha256-TJ3lSQtW0E2JrznGVm8hOQGVpXjJyXY2guAxku2O9A4=", + "lastModified": 1775710090, + "narHash": "sha256-ar3rofg+awPB8QXDaFJhJ2jJhu+KqN/PRCXeyuXR76E=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b40629efe5d6ec48dd1efba650c797ddbd39ace0", + "rev": "4c1018dae018162ec878d42fec712642d214fdfa", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index ec75400..5eea5ad 100644 --- a/flake.nix +++ b/flake.nix @@ -25,6 +25,7 @@ agenix.inputs.darwin.follows = ""; nixos-hardware.url = "github:NixOS/nixos-hardware/master"; + nixos-hardware.inputs.nixpkgs.follows = "nixpkgs"; nixvim.url = "git+https://git.alejandr0angul0.dev/alejandro-angulo/nixvim-config?ref=main"; # nixvim.inputs.nixpkgs.follows = "nixpkgs"; diff --git a/homes/x86_64-linux/alejandro@framework/default.nix b/homes/x86_64-linux/alejandro@framework/default.nix new file mode 100644 index 0000000..a0ec750 --- /dev/null +++ b/homes/x86_64-linux/alejandro@framework/default.nix @@ -0,0 +1,37 @@ +{ lib, pkgs, ... }: +let + + internal_display_settings = "eDP-1,preferred,auto,2"; + clamshell_script = pkgs.writeShellScriptBin "clamshell" '' + if ${pkgs.hyprland}/bin/hyprctl monitors | ${pkgs.ripgrep}/bin/rg -q '\sDP-'; then + if [[ "$1" == "open" ]]; then + ${pkgs.hyprland}/bin/hyprctl keyword monitor ${internal_display_settings} + else + ${pkgs.hyprland}/bin/hyprctl keyword monitor "eDP-1,disable" + fi + fi + ''; +in +{ + aa.isHeadless = false; + aa.windowManagers.sway.clamshell.enable = true; + aa.programs.opencode.enable = true; + aa.windowManagers.hyprland = { + enable = true; + monitor = [ + internal_display_settings + "desc:Dell Inc. DELL U4025QW BH2F734,preferred,auto,1" + ",preferred,auto,1" + ]; + }; + aa.services.hypridle.suspendInhibitWhenPluggedIn = true; + aa.windowManagers.sway.enable = lib.mkForce false; + + wayland.windowManager.hyprland.settings.bindl = [ + ", switch:off:Lid Switch, exec, ${clamshell_script}/bin/clamshell open" + ", switch:on:Lid Switch, exec, ${clamshell_script}/bin/clamshell close" + ]; + + catppuccin.zathura.enable = true; + programs.zathura.enable = true; +} diff --git a/modules/home/services/swaync/default.nix b/modules/home/services/swaync/default.nix index 49b84c2..ea8ba62 100644 --- a/modules/home/services/swaync/default.nix +++ b/modules/home/services/swaync/default.nix @@ -30,6 +30,6 @@ in }; }; - xdg.configFile."swaync/style.css".source = "${pkgs.aa.catppuccin-swaync}/catppuccin.css"; +# xdg.configFile."swaync/style.css".source = "${pkgs.aa.catppuccin-swaync}/catppuccin.css"; }; } diff --git a/systems/x86_64-linux/framework/default.nix b/systems/x86_64-linux/framework/default.nix new file mode 100644 index 0000000..64c9fc0 --- /dev/null +++ b/systems/x86_64-linux/framework/default.nix @@ -0,0 +1,114 @@ +{ + inputs, + pkgs, + lib, + ... +}: +{ + imports = [ + # Include the results of the hardware scan. + # ./hardware-configuration-zfs.nix + # ./zfs.nix + ./hardware-configuration.nix + inputs.nixos-hardware.nixosModules.framework-13-7040-amd + ]; + + aa = { + nix = { + enable = true; + useSelfhostedCache = true; + remoteBuilder.client.enable = false; + }; + + archetypes.workstation.enable = true; + + # services.printing.enable = true; + services.tailscale = { + enable = true; + configureClientRouting = true; + }; + + hardware.audio.enable = true; + hardware.bluetooth.enable = true; + + # system.zfs.enable = true; + apps.yubikey.enable = true; + + user.extraGroups = [ + "dialout" + "video" + ]; + }; + + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + boot.kernelPackages = pkgs.linuxPackages_latest; + + services.fwupd.enable = true; + + virtualisation = { + docker = { + enable = true; + storageDriver = "overlay2"; + rootless = { + enable = true; + setSocketVariable = true; + }; + }; + }; + + networking = { + hostName = "framework"; + networkmanager.enable = true; # Enables wireless support via wpa_supplicant. + }; + + # This service is problematic + # See: https://github.com/NixOS/nixpkgs/issues/180175 + systemd.services.NetworkManager-wait-online.enable = false; + + # services.tlp.settings = { + # USB_DENYLIST = "0000:1111 2222:3333 4444:5555"; + # }; + # Still need to run `nix run nixpkgs#bolt -- enroll DEVICE_UUID` + services.hardware.bolt.enable = true; + + services.power-profiles-daemon.enable = lib.mkForce false; + + time.timeZone = "America/Los_Angeles"; + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + pavucontrol + # android-tools + # sanoid + # # Below 3 installed for sanoid + # pv + # lzop + # mbuffer + + # wireguard-tools + + chromium + # prusa-slicer + traceroute + gnumake + hugo + nixos-generators + vlc + signal-desktop + # zoom-us + ]; + environment.pathsToLink = [ + "/share/applications" + "/share/xdg-desktop-portal" + ]; + + # 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.11"; # Did you read the comment? +} diff --git a/systems/x86_64-linux/framework/hardware-configuration.nix b/systems/x86_64-linux/framework/hardware-configuration.nix new file mode 100644 index 0000000..4400243 --- /dev/null +++ b/systems/x86_64-linux/framework/hardware-configuration.nix @@ -0,0 +1,42 @@ +{ + config, + lib, + 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 = "UUID=00a14ad6-5635-4b54-b7e2-a35943639bb8"; + fsType = "bcachefs"; + }; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/66E9-291D"; + fsType = "vfat"; + options = [ + "fmask=0077" + "dmask=0077" + ]; + }; + + swapDevices = [ { device = "/dev/disk/by-label/SWAP"; } ]; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} From 989e6d6411c59510819349ff3000e71afc430d70 Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Sun, 12 Apr 2026 22:35:23 -0700 Subject: [PATCH 22/32] Fix missing icons for swaync --- modules/home/services/swaync/default.nix | 15 +++++++++++++-- systems/x86_64-linux/framework/default.nix | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/modules/home/services/swaync/default.nix b/modules/home/services/swaync/default.nix index ea8ba62..6e36405 100644 --- a/modules/home/services/swaync/default.nix +++ b/modules/home/services/swaync/default.nix @@ -16,7 +16,18 @@ in }; config = mkIf cfg.enable { - home.packages = [ pkgs.libnotify ]; + home.packages = [ + pkgs.libnotify + pkgs.dconf + ]; + + gtk = { + enable = true; + iconTheme = { + name = lib.mkForce "Adwaita"; + package = lib.mkForce pkgs.adwaita-icon-theme; + }; + }; services.swaync = { enable = true; @@ -30,6 +41,6 @@ in }; }; -# xdg.configFile."swaync/style.css".source = "${pkgs.aa.catppuccin-swaync}/catppuccin.css"; + # xdg.configFile."swaync/style.css".source = "${pkgs.aa.catppuccin-swaync}/catppuccin.css"; }; } diff --git a/systems/x86_64-linux/framework/default.nix b/systems/x86_64-linux/framework/default.nix index 64c9fc0..c5c11be 100644 --- a/systems/x86_64-linux/framework/default.nix +++ b/systems/x86_64-linux/framework/default.nix @@ -45,6 +45,7 @@ boot.kernelPackages = pkgs.linuxPackages_latest; services.fwupd.enable = true; + services.gvfs.enable = true; virtualisation = { docker = { From 2f78caa535a2aba6245df73e673901b09abe790d Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Tue, 14 Apr 2026 09:27:06 -0700 Subject: [PATCH 23/32] Update scaling for external monitor --- homes/x86_64-linux/alejandro@carbon/default.nix | 2 +- homes/x86_64-linux/alejandro@framework/default.nix | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homes/x86_64-linux/alejandro@carbon/default.nix b/homes/x86_64-linux/alejandro@carbon/default.nix index 1356707..f5ed070 100644 --- a/homes/x86_64-linux/alejandro@carbon/default.nix +++ b/homes/x86_64-linux/alejandro@carbon/default.nix @@ -20,7 +20,7 @@ in enable = true; monitor = [ "eDP-1,preferred,auto,1.6" - "desc:Dell Inc. DELL U4025QW BH2F734,3440x1440,auto,1" + "desc:Dell Inc. DELL U4025QW BH2F734,preferred,auto,1.25" ",preferred,auto,1" ]; }; diff --git a/homes/x86_64-linux/alejandro@framework/default.nix b/homes/x86_64-linux/alejandro@framework/default.nix index a0ec750..4c2f0d2 100644 --- a/homes/x86_64-linux/alejandro@framework/default.nix +++ b/homes/x86_64-linux/alejandro@framework/default.nix @@ -20,7 +20,7 @@ in enable = true; monitor = [ internal_display_settings - "desc:Dell Inc. DELL U4025QW BH2F734,preferred,auto,1" + "desc:Dell Inc. DELL U4025QW BH2F734,preferred,auto,1.6" ",preferred,auto,1" ]; }; From 1752103b0a961e655764c24b7bfe5dedbec9b454 Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Tue, 14 Apr 2026 09:28:01 -0700 Subject: [PATCH 24/32] Add swayosd --- .../home/windowManagers/hyprland/default.nix | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/modules/home/windowManagers/hyprland/default.nix b/modules/home/windowManagers/hyprland/default.nix index 9b6a83b..2c90721 100644 --- a/modules/home/windowManagers/hyprland/default.nix +++ b/modules/home/windowManagers/hyprland/default.nix @@ -246,14 +246,14 @@ in # Media keys bindl = [ - ", XF86AudioRaiseVolume, exec, ${pkgs.pamixer}/bin/pamixer --increase 5" - ", XF86AudioLowerVolume, exec, ${pkgs.pamixer}/bin/pamixer --decrease 5" - ", XF86AudioMute, exec, ${pkgs.pamixer}/bin/pamixer --toggle-mute" - ", XF86AudioPrev, exec, ${pkgs.playerctl}/bin/playerctl previous" - ", XF86AudioNext, exec, ${pkgs.playerctl}/bin/playerctl next" - ", XF86AudioPlay, exec, ${pkgs.playerctl}/bin/playerctl play-pause" - ", XF86MonBrightnessDown, exec, ${pkgs.brightnessctl}/bin/brightnessctl set -n10 10%-" - ", XF86MonBrightnessUp, exec, ${pkgs.brightnessctl}/bin/brightnessctl set 10%+" + ", XF86AudioRaiseVolume, exec, ${pkgs.swayosd}/bin/swayosd-client --output-volume 5" + ", XF86AudioLowerVolume, exec, ${pkgs.swayosd}/bin/swayosd-client --output-volume -5" + ", XF86AudioMute, exec, ${pkgs.swayosd}/bin/swayosd-client --output-volume mute-toggle" + ", XF86AudioPrev, exec, ${pkgs.swayosd}/bin/swayosd-client --playerctl previous" + ", XF86AudioNext, exec, ${pkgs.swayosd}/bin/swayosd-client --playerctl next" + ", XF86AudioPlay, exec, ${pkgs.swayosd}/bin/swayosd-client --playerctl play-pause" + ", XF86MonBrightnessDown, exec, ${pkgs.swayosd}/bin/swayosd-client --brightness lower" + ", XF86MonBrightnessUp, exec, ${pkgs.swayosd}/bin/swayosd-client --brightness raise" ]; }; }; @@ -272,5 +272,7 @@ in ]; }; }; + + services.swayosd.enable = true; }; } From 68081f7eed0740b748efbeefd33e5ec312ba4e84 Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Tue, 14 Apr 2026 09:30:24 -0700 Subject: [PATCH 25/32] Add framework to build matrix --- .forgejo/workflows/build_nixos_configs.yml | 1 + flake.nix | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.forgejo/workflows/build_nixos_configs.yml b/.forgejo/workflows/build_nixos_configs.yml index 579e3cd..563c980 100644 --- a/.forgejo/workflows/build_nixos_configs.yml +++ b/.forgejo/workflows/build_nixos_configs.yml @@ -12,6 +12,7 @@ jobs: matrix: system: - "carbon" + - "framework" - "git" - "gospel" - "node" diff --git a/flake.nix b/flake.nix index 5eea5ad..be3cf28 100644 --- a/flake.nix +++ b/flake.nix @@ -25,10 +25,8 @@ agenix.inputs.darwin.follows = ""; nixos-hardware.url = "github:NixOS/nixos-hardware/master"; - nixos-hardware.inputs.nixpkgs.follows = "nixpkgs"; nixvim.url = "git+https://git.alejandr0angul0.dev/alejandro-angulo/nixvim-config?ref=main"; - # nixvim.inputs.nixpkgs.follows = "nixpkgs"; devenv.url = "github:cachix/devenv"; devenv.inputs.nixpkgs.follows = "nixpkgs"; @@ -145,9 +143,10 @@ hydraJobs = let systems_to_build = [ + "carbon" + "framework" "gospel" "node" - "carbon" ]; in { From b6fce2b0df3047e710afb835961ff54559e18c89 Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Tue, 14 Apr 2026 09:39:38 -0700 Subject: [PATCH 26/32] Add gesture to swipe across workspaces --- modules/home/windowManagers/hyprland/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/home/windowManagers/hyprland/default.nix b/modules/home/windowManagers/hyprland/default.nix index 2c90721..36e3d9b 100644 --- a/modules/home/windowManagers/hyprland/default.nix +++ b/modules/home/windowManagers/hyprland/default.nix @@ -255,6 +255,8 @@ in ", XF86MonBrightnessDown, exec, ${pkgs.swayosd}/bin/swayosd-client --brightness lower" ", XF86MonBrightnessUp, exec, ${pkgs.swayosd}/bin/swayosd-client --brightness raise" ]; + + gesture = "3, horizontal, workspace"; }; }; From 7afb67c36c6eb6981a0d22772e4ff6298f45c50a Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Tue, 14 Apr 2026 18:33:07 -0700 Subject: [PATCH 27/32] Add spicetify --- flake.lock | 48 +++++++++++++++++++ flake.nix | 7 ++- .../x86_64-linux/alejandro@carbon/default.nix | 2 + .../alejandro@framework/default.nix | 2 + modules/home/programs/spicetify/default.nix | 29 +++++++++++ 5 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 modules/home/programs/spicetify/default.nix diff --git a/flake.lock b/flake.lock index b9490b9..aa8c37d 100644 --- a/flake.lock +++ b/flake.lock @@ -1064,6 +1064,19 @@ "type": "github" } }, + "nixpkgs_9": { + "locked": { + "lastModified": 1775710090, + "narHash": "sha256-WGjBfvXv/mcg5yBg+AtK1Q3FHyXfjAAeJROmg7DLYfM=", + "rev": "4c1018dae018162ec878d42fec712642d214fdfa", + "type": "tarball", + "url": "https://releases.nixos.org/nixos/unstable/nixos-26.05pre977467.4c1018dae018/nixexprs.tar.xz" + }, + "original": { + "type": "tarball", + "url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz" + } + }, "nixvim": { "inputs": { "flake-parts": "flake-parts_4", @@ -1211,6 +1224,7 @@ "nixvim": "nixvim", "powerlevel10k": "powerlevel10k", "snowfall-lib": "snowfall-lib", + "spicetify-nix": "spicetify-nix", "zsh-syntax-highlighting": "zsh-syntax-highlighting" } }, @@ -1257,6 +1271,25 @@ "type": "github" } }, + "spicetify-nix": { + "inputs": { + "nixpkgs": "nixpkgs_9", + "systems": "systems_6" + }, + "locked": { + "lastModified": 1776126760, + "narHash": "sha256-Y/RrT7WdJe9B81ZSSRuSXktVyV5koWfcQIRHDqIIof4=", + "owner": "Gerg-L", + "repo": "spicetify-nix", + "rev": "8b00357d910c5281181c21fc3a0d071ceec80c06", + "type": "github" + }, + "original": { + "owner": "Gerg-L", + "repo": "spicetify-nix", + "type": "github" + } + }, "systems": { "locked": { "lastModified": 1681028828, @@ -1332,6 +1365,21 @@ "type": "github" } }, + "systems_6": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, "treefmt-nix": { "inputs": { "nixpkgs": [ diff --git a/flake.nix b/flake.nix index be3cf28..fd223db 100644 --- a/flake.nix +++ b/flake.nix @@ -31,6 +31,8 @@ devenv.url = "github:cachix/devenv"; devenv.inputs.nixpkgs.follows = "nixpkgs"; + spicetify-nix.url = "github:Gerg-L/spicetify-nix"; + zsh-syntax-highlighting.url = "github:zsh-users/zsh-syntax-highlighting/master"; zsh-syntax-highlighting.flake = false; @@ -58,7 +60,10 @@ catppuccin.nixosModules.catppuccin ]; - homes.modules = with inputs; [ catppuccin.homeModules.catppuccin ]; + homes.modules = with inputs; [ + catppuccin.homeModules.catppuccin + spicetify-nix.homeManagerModules.spicetify + ]; outputs-builder = channels: { devShells.default = inputs.devenv.lib.mkShell { diff --git a/homes/x86_64-linux/alejandro@carbon/default.nix b/homes/x86_64-linux/alejandro@carbon/default.nix index f5ed070..7729c52 100644 --- a/homes/x86_64-linux/alejandro@carbon/default.nix +++ b/homes/x86_64-linux/alejandro@carbon/default.nix @@ -27,6 +27,8 @@ in aa.services.hypridle.suspendInhibitWhenPluggedIn = true; aa.windowManagers.sway.enable = lib.mkForce false; + aa.spicetify.enable = true; + wayland.windowManager.hyprland.settings.bindl = [ ", switch:off:Lid Switch, exec, ${clamshell_script}/bin/clamshell open" ", switch:on:Lid Switch, exec, ${clamshell_script}/bin/clamshell close" diff --git a/homes/x86_64-linux/alejandro@framework/default.nix b/homes/x86_64-linux/alejandro@framework/default.nix index 4c2f0d2..62b59a2 100644 --- a/homes/x86_64-linux/alejandro@framework/default.nix +++ b/homes/x86_64-linux/alejandro@framework/default.nix @@ -32,6 +32,8 @@ in ", switch:on:Lid Switch, exec, ${clamshell_script}/bin/clamshell close" ]; + aa.programs.spicetify.enable = true; + catppuccin.zathura.enable = true; programs.zathura.enable = true; } diff --git a/modules/home/programs/spicetify/default.nix b/modules/home/programs/spicetify/default.nix new file mode 100644 index 0000000..410bcbc --- /dev/null +++ b/modules/home/programs/spicetify/default.nix @@ -0,0 +1,29 @@ +{ + config, + lib, + namespace, + inputs, + pkgs, + ... +}: +let + cfg = config.${namespace}.programs.spicetify; + spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.stdenv.hostPlatform.system}; +in +{ + options.${namespace}.programs.spicetify = { + enable = lib.mkEnableOption "spicetify"; + }; + + config = lib.mkIf cfg.enable { + programs.spicetify = { + enable = true; + colorScheme = "mocha"; + theme = spicePkgs.themes.catppuccin; + enabledExtensions = with spicePkgs.extensions; [ + keyboardShortcut + shuffle + ]; + }; + }; +} From 3a0b951b3c214b82fa1635e9431fc856547b6ed9 Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Tue, 14 Apr 2026 18:33:14 -0700 Subject: [PATCH 28/32] Fix evaluation warnings --- modules/home/programs/opencode/default.nix | 4 +++- modules/home/services/swaync/default.nix | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/home/programs/opencode/default.nix b/modules/home/programs/opencode/default.nix index b52b59b..eae0792 100644 --- a/modules/home/programs/opencode/default.nix +++ b/modules/home/programs/opencode/default.nix @@ -24,12 +24,14 @@ in config = lib.mkIf cfg.enable { programs.opencode = { enable = true; - settings = { + tui = { theme = "catppuccin"; keybinds = { app_exit = "ctrl+d,q"; session_interrupt = "ctrl+c"; }; + }; + settings = { mcp = { context7 = { type = "local"; diff --git a/modules/home/services/swaync/default.nix b/modules/home/services/swaync/default.nix index 6e36405..9b0f6e9 100644 --- a/modules/home/services/swaync/default.nix +++ b/modules/home/services/swaync/default.nix @@ -23,6 +23,7 @@ in gtk = { enable = true; + gtk4.theme = null; iconTheme = { name = lib.mkForce "Adwaita"; package = lib.mkForce pkgs.adwaita-icon-theme; From a4d7f143d52e5e1817eab5c7254107c72da53b76 Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Tue, 14 Apr 2026 18:36:36 -0700 Subject: [PATCH 29/32] Re-enable catppuccin css for swaync --- modules/home/services/swaync/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/home/services/swaync/default.nix b/modules/home/services/swaync/default.nix index 9b0f6e9..0d42cd9 100644 --- a/modules/home/services/swaync/default.nix +++ b/modules/home/services/swaync/default.nix @@ -42,6 +42,6 @@ in }; }; - # xdg.configFile."swaync/style.css".source = "${pkgs.aa.catppuccin-swaync}/catppuccin.css"; + xdg.configFile."swaync/style.css".source = "${pkgs.aa.catppuccin-swaync}/catppuccin.css"; }; } From 18b2f7165da3ef7c0e9358eb00ca5bad4c95ce37 Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Tue, 14 Apr 2026 18:58:22 -0700 Subject: [PATCH 30/32] Add catppuccin theme for swayosd --- .../home/windowManagers/hyprland/default.nix | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/modules/home/windowManagers/hyprland/default.nix b/modules/home/windowManagers/hyprland/default.nix index 36e3d9b..acbe34a 100644 --- a/modules/home/windowManagers/hyprland/default.nix +++ b/modules/home/windowManagers/hyprland/default.nix @@ -275,6 +275,46 @@ in }; }; - services.swayosd.enable = true; + xdg.configFile."swayosd/style.css".text = '' + window#osd { + border-radius: 999px; + border: none; + background: rgba(30, 30, 46, 0.8); } + window#osd #container { + margin: 16px; } + window#osd image, + window#osd label { + color: #cdd6f4; } + window#osd progressbar:disabled, + window#osd image:disabled { + opacity: 0.5; } + window#osd progressbar, + window#osd segmentedprogress { + min-height: 6px; + border-radius: 999px; + background: transparent; + border: none; } + window#osd trough, + window#osd segment { + min-height: inherit; + border-radius: inherit; + border: none; + background: rgba(49, 50, 68, 0.8); } + window#osd progress, + window#osd segment.active { + min-height: inherit; + border-radius: inherit; + border: none; + background: #9399b2; } + window#osd segment { + margin-left: 8px; } + window#osd segment:first-child { + margin-left: 0; } + ''; + + services.swayosd = { + enable = true; + stylePath = "${config.xdg.configHome}/${config.xdg.configFile."swayosd/style.css".target}"; + }; }; } From e2460ca093b6e552157c5dfbfadf8f7365352ec0 Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Fri, 17 Apr 2026 19:30:05 -0700 Subject: [PATCH 31/32] Prevent undesirable suspends hypridle only suspends if not connected to an external monitor and logind no longer suspends while charging --- modules/home/services/hypridle/default.nix | 7 ++++--- systems/x86_64-linux/framework/default.nix | 6 ++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/modules/home/services/hypridle/default.nix b/modules/home/services/hypridle/default.nix index 6b082a9..d73a8c5 100644 --- a/modules/home/services/hypridle/default.nix +++ b/modules/home/services/hypridle/default.nix @@ -15,10 +15,11 @@ let cfg = config.${namespace}.services.hypridle; - # Script that suspends only when on battery power. + # Script that suspends only when not docked (no external monitors). suspendScript = pkgs.writeShellScript "hypridle-suspend" '' - if [ "$(${pkgs.coreutils}/bin/cat /sys/class/power_supply/AC/online)" != "1" ]; then - # On battery - suspend + mon_count=$(${pkgs.hyprland}/bin/hyprctl monitors all 2>/dev/null | ${pkgs.gnugrep}/bin/grep -c '^Monitor' || echo "0") + # If only 1 monitor (builtin), suspend. If 2+ monitors, assume docked - don't suspend. + if [ "$mon_count" -le 1 ]; then ${pkgs.systemd}/bin/systemctl suspend fi ''; diff --git a/systems/x86_64-linux/framework/default.nix b/systems/x86_64-linux/framework/default.nix index c5c11be..66c9c37 100644 --- a/systems/x86_64-linux/framework/default.nix +++ b/systems/x86_64-linux/framework/default.nix @@ -46,6 +46,12 @@ services.fwupd.enable = true; services.gvfs.enable = true; + services.logind.settings.Login = { + HandleLidSwitchDocked = "ignore"; + HandleLidSwitchExternalPower = "ignore"; + HandleLidSwitch = "suspend"; + KillUserProcesses = false; + }; virtualisation = { docker = { From 66ae387a1b974b722cb28d6dd904c41857ab0681 Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Fri, 17 Apr 2026 19:30:21 -0700 Subject: [PATCH 32/32] Increase scaling and refresh rate --- homes/x86_64-linux/alejandro@framework/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homes/x86_64-linux/alejandro@framework/default.nix b/homes/x86_64-linux/alejandro@framework/default.nix index 62b59a2..310fae1 100644 --- a/homes/x86_64-linux/alejandro@framework/default.nix +++ b/homes/x86_64-linux/alejandro@framework/default.nix @@ -20,7 +20,7 @@ in enable = true; monitor = [ internal_display_settings - "desc:Dell Inc. DELL U4025QW BH2F734,preferred,auto,1.6" + "desc:Dell Inc. DELL U4025QW BH2F734,5120x2160@120,auto,2" ",preferred,auto,1" ]; };