From 80df3eaffccac4a1ac2321266d9d0cdf97d7a76f Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Sat, 20 Sep 2025 22:04:21 -0400 Subject: [PATCH 01/22] feat: drop Sway and switch to Niri This had been coming for a while, but it's only today that I finally got the chance to sit down and make the change. It's actually quite nice that majority of my configuration was transferable with no major issues. Niri fulfills the scrolling + tilling combination so much better than what Sway w/ Papersway could. This is definitely going to be my final compositor experiment, I don't see myself switching to anything else after this. Most of the stuff in this PR was simple transitions. There wasn't much attempt to tap into Niri's flexibility, that's for the future. --- hosts/laptop/configuration.nix | 4 +- modules/home-manager/desktops/sway/config.nix | 19 --- .../home-manager/my/desktops/niri/config.nix | 19 +++ .../sway => my/desktops/niri}/module.nix | 0 .../sway => my/desktops/niri}/options.nix | 6 +- .../my/desktops/{sway => niri}/config.nix | 23 +--- .../my/desktops/{sway => niri}/module.nix | 0 modules/nixos/my/desktops/niri/options.nix | 12 ++ modules/nixos/my/desktops/sway/options.nix | 19 --- modules/nixos/my/desktops/sway/package.nix | 41 ------ users/frontear/home/desktops/default.nix | 2 +- .../home/desktops/{sway => niri}/default.nix | 7 +- .../home/desktops/niri/fs/default.nix | 9 ++ .../fs/niri}/backgrounds/bg_dark.jpg | Bin .../home/desktops/niri/fs/niri/config.kdl | 118 ++++++++++++++++++ .../home/desktops/niri/fs/niri/default.nix | 16 +++ .../{sway => niri}/fs/swayosd/default.nix | 0 .../{sway => niri}/fs/swayosd/style.scss | 0 .../{sway => niri}/programs/default.nix | 0 .../{sway => niri}/programs/foot/default.nix | 2 +- .../programs/microsoft-edge/default.nix | 4 +- .../programs/mission-center/default.nix | 4 +- .../{sway => niri}/programs/rofi/default.nix | 2 +- .../programs/swaylock/default.nix | 2 +- .../programs/thunar/default.nix | 4 +- .../programs/waybar/default.nix | 9 +- .../{sway => niri}/programs/waybar/style.nix | 2 +- .../{sway => niri}/services/default.nix | 0 .../{sway => niri}/services/dunst/default.nix | 2 +- .../niri/services/swayidle/default.nix | 27 ++++ .../{sway => niri}/stylix/default.nix | 4 +- .../desktops/{sway => niri}/stylix/theme.yaml | 0 .../sway/fs/bin/screenshot/package.nix | 42 ------- .../sway/fs/bin/screenshot/src/screenshot.sh | 17 --- .../home/desktops/sway/fs/default.nix | 14 --- .../home/desktops/sway/fs/sway/config | 102 --------------- .../home/desktops/sway/fs/sway/default.nix | 19 --- .../sway/services/swayidle/default.nix | 26 ---- users/frontear/nixos/default.nix | 3 +- 39 files changed, 231 insertions(+), 349 deletions(-) delete mode 100644 modules/home-manager/desktops/sway/config.nix create mode 100644 modules/home-manager/my/desktops/niri/config.nix rename modules/home-manager/{desktops/sway => my/desktops/niri}/module.nix (100%) rename modules/home-manager/{desktops/sway => my/desktops/niri}/options.nix (54%) rename modules/nixos/my/desktops/{sway => niri}/config.nix (59%) rename modules/nixos/my/desktops/{sway => niri}/module.nix (100%) create mode 100644 modules/nixos/my/desktops/niri/options.nix delete mode 100644 modules/nixos/my/desktops/sway/options.nix delete mode 100644 modules/nixos/my/desktops/sway/package.nix rename users/frontear/home/desktops/{sway => niri}/default.nix (82%) create mode 100644 users/frontear/home/desktops/niri/fs/default.nix rename users/frontear/home/desktops/{sway/fs/sway => niri/fs/niri}/backgrounds/bg_dark.jpg (100%) create mode 100644 users/frontear/home/desktops/niri/fs/niri/config.kdl create mode 100644 users/frontear/home/desktops/niri/fs/niri/default.nix rename users/frontear/home/desktops/{sway => niri}/fs/swayosd/default.nix (100%) rename users/frontear/home/desktops/{sway => niri}/fs/swayosd/style.scss (100%) rename users/frontear/home/desktops/{sway => niri}/programs/default.nix (100%) rename users/frontear/home/desktops/{sway => niri}/programs/foot/default.nix (94%) rename users/frontear/home/desktops/{sway => niri}/programs/microsoft-edge/default.nix (86%) rename users/frontear/home/desktops/{sway => niri}/programs/mission-center/default.nix (83%) rename users/frontear/home/desktops/{sway => niri}/programs/rofi/default.nix (98%) rename users/frontear/home/desktops/{sway => niri}/programs/swaylock/default.nix (92%) rename users/frontear/home/desktops/{sway => niri}/programs/thunar/default.nix (84%) rename users/frontear/home/desktops/{sway => niri}/programs/waybar/default.nix (93%) rename users/frontear/home/desktops/{sway => niri}/programs/waybar/style.nix (97%) rename users/frontear/home/desktops/{sway => niri}/services/default.nix (100%) rename users/frontear/home/desktops/{sway => niri}/services/dunst/default.nix (94%) create mode 100644 users/frontear/home/desktops/niri/services/swayidle/default.nix rename users/frontear/home/desktops/{sway => niri}/stylix/default.nix (93%) rename users/frontear/home/desktops/{sway => niri}/stylix/theme.yaml (100%) delete mode 100644 users/frontear/home/desktops/sway/fs/bin/screenshot/package.nix delete mode 100644 users/frontear/home/desktops/sway/fs/bin/screenshot/src/screenshot.sh delete mode 100644 users/frontear/home/desktops/sway/fs/default.nix delete mode 100644 users/frontear/home/desktops/sway/fs/sway/config delete mode 100644 users/frontear/home/desktops/sway/fs/sway/default.nix delete mode 100644 users/frontear/home/desktops/sway/services/swayidle/default.nix diff --git a/hosts/laptop/configuration.nix b/hosts/laptop/configuration.nix index 2217d2be..f03a7583 100644 --- a/hosts/laptop/configuration.nix +++ b/hosts/laptop/configuration.nix @@ -14,7 +14,7 @@ my.desktops = { - sway.enable = lib.mkForce false; + niri.enable = lib.mkForce false; gnome.enable = true; }; }; @@ -23,7 +23,7 @@ boot.kernelPackages = pkgs.linuxPackages_xanmod_latest; # Enable a desktop environment - my.desktops.sway.enable = true; + my.desktops.niri.enable = true; # Set locale, keymap and timezone console.keyMap = "us"; diff --git a/modules/home-manager/desktops/sway/config.nix b/modules/home-manager/desktops/sway/config.nix deleted file mode 100644 index 84930c6f..00000000 --- a/modules/home-manager/desktops/sway/config.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ - osConfig, - config, - lib, - ... -}: -let - cfg = config.my.desktops.sway; -in { - config = lib.mkIf cfg.enable { - assertions = [{ - assertion = osConfig.my.desktops.sway.enable; - message = "Please enable my.desktops.sway in your NixOS configuration"; - }]; - - - xdg.configFile."sway/config".source = cfg.config; - }; -} \ No newline at end of file diff --git a/modules/home-manager/my/desktops/niri/config.nix b/modules/home-manager/my/desktops/niri/config.nix new file mode 100644 index 00000000..131b4de6 --- /dev/null +++ b/modules/home-manager/my/desktops/niri/config.nix @@ -0,0 +1,19 @@ +{ + osConfig, + config, + lib, + ... +}: +let + cfg = config.my.desktops.niri; +in { + config = lib.mkIf cfg.enable { + assertions = [{ + assertion = osConfig.my.desktops.niri.enable; + message = "Please enable my.desktops.niri in your NixOS configuration"; + }]; + + + xdg.configFile."niri/config.kdl".source = cfg.config; + }; +} \ No newline at end of file diff --git a/modules/home-manager/desktops/sway/module.nix b/modules/home-manager/my/desktops/niri/module.nix similarity index 100% rename from modules/home-manager/desktops/sway/module.nix rename to modules/home-manager/my/desktops/niri/module.nix diff --git a/modules/home-manager/desktops/sway/options.nix b/modules/home-manager/my/desktops/niri/options.nix similarity index 54% rename from modules/home-manager/desktops/sway/options.nix rename to modules/home-manager/my/desktops/niri/options.nix index 894aa51f..7c3d5c18 100644 --- a/modules/home-manager/desktops/sway/options.nix +++ b/modules/home-manager/my/desktops/niri/options.nix @@ -5,9 +5,9 @@ }: { options = { - my.desktops.sway = { - enable = lib.mkEnableOption "sway" // { - default = osConfig.my.desktops.sway.enable; + my.desktops.niri = { + enable = lib.mkEnableOption "niri" // { + default = osConfig.my.desktops.niri.enable; }; config = lib.mkOption { diff --git a/modules/nixos/my/desktops/sway/config.nix b/modules/nixos/my/desktops/niri/config.nix similarity index 59% rename from modules/nixos/my/desktops/sway/config.nix rename to modules/nixos/my/desktops/niri/config.nix index 3e7badfe..f866e0c7 100644 --- a/modules/nixos/my/desktops/sway/config.nix +++ b/modules/nixos/my/desktops/niri/config.nix @@ -5,24 +5,13 @@ ... }: let - cfg = config.my.desktops.sway; + cfg = config.my.desktops.niri; in { config = lib.mkIf cfg.enable { networking.networkmanager.enable = true; services.pipewire.enable = true; - programs.uwsm = { - enable = true; - - waylandCompositors.sway = { - prettyName = "Sway"; - comment = "Sway compositor managed by UWSM"; - binPath = "/run/current-system/sw/bin/sway"; - }; - }; - - my.persist.directories = [{ path = "/var/cache/tuigreet"; unique = true; @@ -41,16 +30,8 @@ in { "NIXOS_OZONE_WL" = 1; }; - programs.sway = { + programs.niri = { enable = true; - package = cfg.package; - - extraPackages = []; - - wrapperFeatures = { - base = false; - gtk = true; - }; }; }; } \ No newline at end of file diff --git a/modules/nixos/my/desktops/sway/module.nix b/modules/nixos/my/desktops/niri/module.nix similarity index 100% rename from modules/nixos/my/desktops/sway/module.nix rename to modules/nixos/my/desktops/niri/module.nix diff --git a/modules/nixos/my/desktops/niri/options.nix b/modules/nixos/my/desktops/niri/options.nix new file mode 100644 index 00000000..d55dc415 --- /dev/null +++ b/modules/nixos/my/desktops/niri/options.nix @@ -0,0 +1,12 @@ +{ + lib, + pkgs, + ... +}: +{ + options = { + my.desktops.niri = { + enable = lib.mkEnableOption "niri"; + }; + }; +} \ No newline at end of file diff --git a/modules/nixos/my/desktops/sway/options.nix b/modules/nixos/my/desktops/sway/options.nix deleted file mode 100644 index 1921d73b..00000000 --- a/modules/nixos/my/desktops/sway/options.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ - lib, - pkgs, - ... -}: -{ - options = { - my.desktops.sway = { - enable = lib.mkEnableOption "sway"; - package = lib.mkOption { - default = pkgs.callPackage ./package.nix { - sway = pkgs.swayfx; - }; - - type = with lib.types; package; - }; - }; - }; -} \ No newline at end of file diff --git a/modules/nixos/my/desktops/sway/package.nix b/modules/nixos/my/desktops/sway/package.nix deleted file mode 100644 index 7b0c5a9f..00000000 --- a/modules/nixos/my/desktops/sway/package.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ - symlinkJoin, - - writeTextDir, - sway, - - # see: https://github.com/NixOS/nixpkgs/blob/dc9637876d0dcc8c9e5e22986b857632effeb727/nixos/modules/programs/wayland/sway.nix#L26-L29 - extraSessionCommands ? "", - extraOptions ? [], - withBaseWrapper ? true, - withGtkWrapper ? false, - enableXWayland ? true, - isNixOS ? false, -}: -symlinkJoin { - name = "sway-no-desktop-entry"; - - paths = [ - # Sway provides a default `sway.desktop` which is linked by NixOS to - # allow display managers to recognize Sway as a login target. This conflicts - # with our desire to use UWSM exclusively, as it shows both, and it can - # be confusing/annoying to switch between them. In an effort to prevent - # that from being an issue, we completely wipe the `sway.desktop` file, - # which will prevent it from being registered as valid (at least on tuigreet). - (writeTextDir "/share/wayland-sessions/sway.desktop" "") - (sway.override { - inherit - extraSessionCommands - extraOptions - withBaseWrapper - withGtkWrapper - enableXWayland - isNixOS - ; - }) - ]; - - passthru = { - inherit (sway) providedSessions; - }; -} \ No newline at end of file diff --git a/users/frontear/home/desktops/default.nix b/users/frontear/home/desktops/default.nix index a85ff84a..01afe2a3 100644 --- a/users/frontear/home/desktops/default.nix +++ b/users/frontear/home/desktops/default.nix @@ -4,6 +4,6 @@ { imports = [ ./gnome - ./sway + ./niri ]; } \ No newline at end of file diff --git a/users/frontear/home/desktops/sway/default.nix b/users/frontear/home/desktops/niri/default.nix similarity index 82% rename from users/frontear/home/desktops/sway/default.nix rename to users/frontear/home/desktops/niri/default.nix index dbdd32cc..449968cc 100644 --- a/users/frontear/home/desktops/sway/default.nix +++ b/users/frontear/home/desktops/niri/default.nix @@ -5,7 +5,7 @@ ... }: let - cfg = config.my.desktops.sway; + cfg = config.my.desktops.niri; fs = import ./fs { inherit (pkgs) callPackage; }; @@ -17,7 +17,7 @@ in { ]; config = lib.mkIf cfg.enable { - my.desktops.sway.config = "${fs.sway}/config"; + my.desktops.niri.config = "${fs.niri}/config.kdl"; my.programs = { swayosd = { @@ -33,7 +33,8 @@ in { home.packages = with pkgs; [ nerd-fonts.symbols-only - perlPackages.Apppapersway + app2unit + swaybg wl-clip-persist ]; diff --git a/users/frontear/home/desktops/niri/fs/default.nix b/users/frontear/home/desktops/niri/fs/default.nix new file mode 100644 index 00000000..23d0e957 --- /dev/null +++ b/users/frontear/home/desktops/niri/fs/default.nix @@ -0,0 +1,9 @@ +{ + callPackage, +}: +{ + niri = callPackage ./niri {}; + + + swayosd = callPackage ./swayosd {}; +} \ No newline at end of file diff --git a/users/frontear/home/desktops/sway/fs/sway/backgrounds/bg_dark.jpg b/users/frontear/home/desktops/niri/fs/niri/backgrounds/bg_dark.jpg similarity index 100% rename from users/frontear/home/desktops/sway/fs/sway/backgrounds/bg_dark.jpg rename to users/frontear/home/desktops/niri/fs/niri/backgrounds/bg_dark.jpg diff --git a/users/frontear/home/desktops/niri/fs/niri/config.kdl b/users/frontear/home/desktops/niri/fs/niri/config.kdl new file mode 100644 index 00000000..aaa7642b --- /dev/null +++ b/users/frontear/home/desktops/niri/fs/niri/config.kdl @@ -0,0 +1,118 @@ +output "eDP-1" { + scale 1.5 +} + +input { + keyboard { + repeat-delay 250 + repeat-rate 25 + } + + touchpad { + accel-profile "adaptive" + click-method "clickfinger" + drag false + dwt + dwtp + // left-handed + // middle-emulation + // natural-scroll + accel-speed 0.0 + scroll-factor 1.0 + scroll-method "two-finger" + tap + tap-button-map "left-middle-right" + } +} + +screenshot-path "~/Pictures/Screenshots/%Y-%m/%Y-%m-%d_%Hh%Mm%Ss.png" +hotkey-overlay { skip-at-startup; } + +cursor { + xcursor-theme "Bibata-Modern-Classic" + xcursor-size 16 +} + + +spawn-sh-at-startup "wl-clip-persist --clipboard regular" +spawn-sh-at-startup "swaybg -i '@backgrounds@/bg_dark.jpg' -m 'fit'" + + +// rounded corners always +prefer-no-csd +window-rule { + geometry-corner-radius 8 + clip-to-geometry true +} + +layout { + // emulates inner-gap of 2, and outer-gap of 4 + gaps 2 + struts { left 2; right 2; top 2; bottom 2; } + + focus-ring { off; } + + border { + width 2 + + active-color "#ff000055" + inactive-color "#595959aa" + } +} + + +binds { + XF86AudioMute allow-when-locked=true repeat=false { spawn-sh "swayosd-client --output-volume mute-toggle"; } + XF86AudioLowerVolume allow-when-locked=true { spawn-sh "swayosd-client --output-volume -5"; } + XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "swayosd-client --output-volume +5"; } + + XF86MonBrightnessDown allow-when-locked=true { spawn-sh "swayosd-client --brightness -5"; } + XF86MonBrightnessUp allow-when-locked=true { spawn-sh "swayosd-client --brightness +5"; } + + + Print repeat=false { screenshot; } + + + Ctrl+Alt+Delete repeat=false { quit; } + + Mod+BackSpace repeat=false { close-window; } + Mod+Return repeat=false { spawn-sh "footclient"; } + Mod+E repeat=false { spawn-sh "rofi -show drun -run-command 'app2unit -- {cmd}'"; } + + F11 repeat=false { fullscreen-window; } + Mod+F repeat=false { maximize-column; } + + Mod+Tab repeat=false { toggle-overview; } + + Mod+Left { focus-column-left; } + Mod+Down { focus-window-down; } + Mod+Up { focus-window-up; } + Mod+Right { focus-column-right; } + + Mod+Shift+Left { move-column-left; } + Mod+Shift+Down { move-window-down; } + Mod+Shift+Up { move-window-up; } + Mod+Shift+Right { move-column-right; } + + Mod+1 { focus-workspace 1; } + Mod+2 { focus-workspace 2; } + Mod+3 { focus-workspace 3; } + Mod+4 { focus-workspace 4; } + Mod+5 { focus-workspace 5; } + Mod+6 { focus-workspace 6; } + Mod+7 { focus-workspace 7; } + Mod+8 { focus-workspace 8; } + Mod+9 { focus-workspace 9; } + Mod+0 { focus-workspace 10; } + + Mod+Shift+1 { move-column-to-workspace 1; } + Mod+Shift+2 { move-column-to-workspace 2; } + Mod+Shift+3 { move-column-to-workspace 3; } + Mod+Shift+4 { move-column-to-workspace 4; } + Mod+Shift+5 { move-column-to-workspace 5; } + Mod+Shift+6 { move-column-to-workspace 6; } + Mod+Shift+7 { move-column-to-workspace 7; } + Mod+Shift+8 { move-column-to-workspace 8; } + Mod+Shift+9 { move-column-to-workspace 9; } + Mod+Shift+0 { move-column-to-workspace 10; } +} \ No newline at end of file diff --git a/users/frontear/home/desktops/niri/fs/niri/default.nix b/users/frontear/home/desktops/niri/fs/niri/default.nix new file mode 100644 index 00000000..e3ff9322 --- /dev/null +++ b/users/frontear/home/desktops/niri/fs/niri/default.nix @@ -0,0 +1,16 @@ +{ + lib, + runCommandNoCCLocal, +}: +runCommandNoCCLocal "fs-niri" { + src = with lib.fileset; toSource { + root = ./.; + fileset = difference ./. ./default.nix; + }; +} '' + install -Dm644 -t $out/backgrounds $src/backgrounds/* + install -Dm644 {$src,$out}/config.kdl + + substituteInPlace $out/config.kdl \ + --subst-var-by backgrounds $out/backgrounds +'' \ No newline at end of file diff --git a/users/frontear/home/desktops/sway/fs/swayosd/default.nix b/users/frontear/home/desktops/niri/fs/swayosd/default.nix similarity index 100% rename from users/frontear/home/desktops/sway/fs/swayosd/default.nix rename to users/frontear/home/desktops/niri/fs/swayosd/default.nix diff --git a/users/frontear/home/desktops/sway/fs/swayosd/style.scss b/users/frontear/home/desktops/niri/fs/swayosd/style.scss similarity index 100% rename from users/frontear/home/desktops/sway/fs/swayosd/style.scss rename to users/frontear/home/desktops/niri/fs/swayosd/style.scss diff --git a/users/frontear/home/desktops/sway/programs/default.nix b/users/frontear/home/desktops/niri/programs/default.nix similarity index 100% rename from users/frontear/home/desktops/sway/programs/default.nix rename to users/frontear/home/desktops/niri/programs/default.nix diff --git a/users/frontear/home/desktops/sway/programs/foot/default.nix b/users/frontear/home/desktops/niri/programs/foot/default.nix similarity index 94% rename from users/frontear/home/desktops/sway/programs/foot/default.nix rename to users/frontear/home/desktops/niri/programs/foot/default.nix index da64aff6..aab04a47 100644 --- a/users/frontear/home/desktops/sway/programs/foot/default.nix +++ b/users/frontear/home/desktops/niri/programs/foot/default.nix @@ -4,7 +4,7 @@ ... }: let - cfg = config.my.desktops.sway; + cfg = config.my.desktops.niri; in { config = lib.mkIf cfg.enable { stylix.targets.foot.enable = true; diff --git a/users/frontear/home/desktops/sway/programs/microsoft-edge/default.nix b/users/frontear/home/desktops/niri/programs/microsoft-edge/default.nix similarity index 86% rename from users/frontear/home/desktops/sway/programs/microsoft-edge/default.nix rename to users/frontear/home/desktops/niri/programs/microsoft-edge/default.nix index 77a32edc..599634fd 100644 --- a/users/frontear/home/desktops/sway/programs/microsoft-edge/default.nix +++ b/users/frontear/home/desktops/niri/programs/microsoft-edge/default.nix @@ -5,7 +5,7 @@ ... }: let - cfg = config.my.desktops.sway; + cfg = config.my.desktops.niri; in { config = lib.mkIf cfg.enable { my.programs.microsoft-edge.enable = true; @@ -20,7 +20,7 @@ in { module_path = pkgs.frontear.waybar-icon.lib; icon-name = "com.microsoft.Edge"; - on-click = "uwsm app com.microsoft.Edge.desktop"; + on-click = "app2unit com.microsoft.Edge.desktop"; tooltip = false; }; }; diff --git a/users/frontear/home/desktops/sway/programs/mission-center/default.nix b/users/frontear/home/desktops/niri/programs/mission-center/default.nix similarity index 83% rename from users/frontear/home/desktops/sway/programs/mission-center/default.nix rename to users/frontear/home/desktops/niri/programs/mission-center/default.nix index 29df06b5..1ab7bb4a 100644 --- a/users/frontear/home/desktops/sway/programs/mission-center/default.nix +++ b/users/frontear/home/desktops/niri/programs/mission-center/default.nix @@ -5,7 +5,7 @@ ... }: let - cfg = config.my.desktops.sway; + cfg = config.my.desktops.niri; in { config = lib.mkIf cfg.enable { home.packages = with pkgs; [ @@ -23,7 +23,7 @@ in { module_path = pkgs.frontear.waybar-icon.lib; icon-name = "io.missioncenter.MissionCenter"; - on-click = "uwsm app io.missioncenter.MissionCenter.desktop"; + on-click = "app2unit io.missioncenter.MissionCenter.desktop"; tooltip = false; }; }; diff --git a/users/frontear/home/desktops/sway/programs/rofi/default.nix b/users/frontear/home/desktops/niri/programs/rofi/default.nix similarity index 98% rename from users/frontear/home/desktops/sway/programs/rofi/default.nix rename to users/frontear/home/desktops/niri/programs/rofi/default.nix index 51a0745c..fa2df3c4 100644 --- a/users/frontear/home/desktops/sway/programs/rofi/default.nix +++ b/users/frontear/home/desktops/niri/programs/rofi/default.nix @@ -4,7 +4,7 @@ ... }: let - cfg = config.my.desktops.sway; + cfg = config.my.desktops.niri; inherit (config.lib.formats.rasi) mkLiteral; in { diff --git a/users/frontear/home/desktops/sway/programs/swaylock/default.nix b/users/frontear/home/desktops/niri/programs/swaylock/default.nix similarity index 92% rename from users/frontear/home/desktops/sway/programs/swaylock/default.nix rename to users/frontear/home/desktops/niri/programs/swaylock/default.nix index 4d39ddc3..46c2c592 100644 --- a/users/frontear/home/desktops/sway/programs/swaylock/default.nix +++ b/users/frontear/home/desktops/niri/programs/swaylock/default.nix @@ -4,7 +4,7 @@ ... }: let - cfg = config.my.desktops.sway; + cfg = config.my.desktops.niri; in { config = lib.mkIf cfg.enable { stylix.targets.swaylock.enable = true; diff --git a/users/frontear/home/desktops/sway/programs/thunar/default.nix b/users/frontear/home/desktops/niri/programs/thunar/default.nix similarity index 84% rename from users/frontear/home/desktops/sway/programs/thunar/default.nix rename to users/frontear/home/desktops/niri/programs/thunar/default.nix index 5b5ed77a..4e93936c 100644 --- a/users/frontear/home/desktops/sway/programs/thunar/default.nix +++ b/users/frontear/home/desktops/niri/programs/thunar/default.nix @@ -5,7 +5,7 @@ ... }: let - cfg = config.my.desktops.sway; + cfg = config.my.desktops.niri; in { config = lib.mkIf cfg.enable { my.programs = { @@ -22,7 +22,7 @@ in { module_path = pkgs.frontear.waybar-icon.lib; icon-name = "org.xfce.thunar"; - on-click = "uwsm app thunar.desktop"; + on-click = "app2unit thunar.desktop"; tooltip = false; }; }; diff --git a/users/frontear/home/desktops/sway/programs/waybar/default.nix b/users/frontear/home/desktops/niri/programs/waybar/default.nix similarity index 93% rename from users/frontear/home/desktops/sway/programs/waybar/default.nix rename to users/frontear/home/desktops/niri/programs/waybar/default.nix index f5cc7b0d..30be112a 100644 --- a/users/frontear/home/desktops/sway/programs/waybar/default.nix +++ b/users/frontear/home/desktops/niri/programs/waybar/default.nix @@ -5,7 +5,7 @@ ... }: let - cfg = config.my.desktops.sway; + cfg = config.my.desktops.niri; in { imports = [ ./style.nix @@ -25,7 +25,7 @@ in { modules-left = [ - "sway/workspaces" + "niri/workspaces" ]; modules-center = [ @@ -39,8 +39,7 @@ in { ]; - "sway/workspaces" = { - disable-scroll = true; + "niri/workspaces" = { disable-click = true; current-only = true; }; @@ -72,7 +71,7 @@ in { tooltip-format-wifi = "{essid} ({signalStrength}%)"; }; - wireplumber = { + "wireplumber" = { format = "{icon}"; format-muted = "󰝟"; format-icons = [ "󰕿" "󰖀" "󰕾" ]; diff --git a/users/frontear/home/desktops/sway/programs/waybar/style.nix b/users/frontear/home/desktops/niri/programs/waybar/style.nix similarity index 97% rename from users/frontear/home/desktops/sway/programs/waybar/style.nix rename to users/frontear/home/desktops/niri/programs/waybar/style.nix index ddf9235d..52bf47e8 100644 --- a/users/frontear/home/desktops/sway/programs/waybar/style.nix +++ b/users/frontear/home/desktops/niri/programs/waybar/style.nix @@ -4,7 +4,7 @@ ... }: let - cfg = config.my.desktops.sway; + cfg = config.my.desktops.niri; colors = config.lib.stylix.colors.withHashtag; # https://github.com/chriskempson/base16/blob/main/styling.md#styling-guidelines diff --git a/users/frontear/home/desktops/sway/services/default.nix b/users/frontear/home/desktops/niri/services/default.nix similarity index 100% rename from users/frontear/home/desktops/sway/services/default.nix rename to users/frontear/home/desktops/niri/services/default.nix diff --git a/users/frontear/home/desktops/sway/services/dunst/default.nix b/users/frontear/home/desktops/niri/services/dunst/default.nix similarity index 94% rename from users/frontear/home/desktops/sway/services/dunst/default.nix rename to users/frontear/home/desktops/niri/services/dunst/default.nix index b4b9a9c5..7441f206 100644 --- a/users/frontear/home/desktops/sway/services/dunst/default.nix +++ b/users/frontear/home/desktops/niri/services/dunst/default.nix @@ -4,7 +4,7 @@ ... }: let - cfg = config.my.desktops.sway; + cfg = config.my.desktops.niri; colors = config.lib.stylix.colors.withHashtag; in { diff --git a/users/frontear/home/desktops/niri/services/swayidle/default.nix b/users/frontear/home/desktops/niri/services/swayidle/default.nix new file mode 100644 index 00000000..bc107e37 --- /dev/null +++ b/users/frontear/home/desktops/niri/services/swayidle/default.nix @@ -0,0 +1,27 @@ +{ + config, + lib, + pkgs, + ... +}: +let + cfg = config.my.desktops.niri; +in { + config = lib.mkIf cfg.enable { + services.swayidle = { + enable = true; + + timeouts = [ + { + timeout = 60 * 2; + command = "${lib.getExe' config.programs.swaylock.package "swaylock"}"; + } + { + timeout = 60 * 5; + command = "${lib.getExe pkgs.niri} msg output eDP-1 off"; + resumeCommand = "${lib.getExe pkgs.niri} msg output eDP-1 on"; + } + ]; + }; + }; +} \ No newline at end of file diff --git a/users/frontear/home/desktops/sway/stylix/default.nix b/users/frontear/home/desktops/niri/stylix/default.nix similarity index 93% rename from users/frontear/home/desktops/sway/stylix/default.nix rename to users/frontear/home/desktops/niri/stylix/default.nix index 7ad24eda..80d965fc 100644 --- a/users/frontear/home/desktops/sway/stylix/default.nix +++ b/users/frontear/home/desktops/niri/stylix/default.nix @@ -5,7 +5,7 @@ ... }: let - cfg = config.my.desktops.sway; + cfg = config.my.desktops.niri; in { config = lib.mkIf cfg.enable { stylix = { @@ -56,7 +56,7 @@ in { }; # TODO: move this path to this folder - image = ../fs/sway/backgrounds/bg_dark.jpg; + image = ../fs/niri/backgrounds/bg_dark.jpg; imageScalingMode = "fit"; polarity = "dark"; diff --git a/users/frontear/home/desktops/sway/stylix/theme.yaml b/users/frontear/home/desktops/niri/stylix/theme.yaml similarity index 100% rename from users/frontear/home/desktops/sway/stylix/theme.yaml rename to users/frontear/home/desktops/niri/stylix/theme.yaml diff --git a/users/frontear/home/desktops/sway/fs/bin/screenshot/package.nix b/users/frontear/home/desktops/sway/fs/bin/screenshot/package.nix deleted file mode 100644 index d8080918..00000000 --- a/users/frontear/home/desktops/sway/fs/bin/screenshot/package.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ - lib, - stdenvNoCC, - - coreutils, - grim, - slurp, - wl-clipboard, -}: -stdenvNoCC.mkDerivation { - pname = "screenshot"; - version = "0.1.0"; - - src = ./src; - - installPhase = '' - runHook preInstall - - install -Dm755 $src/screenshot.sh $out/bin/screenshot - - runHook postInstall - ''; - - postInstall = '' - substituteInPlace $out/bin/screenshot \ - --subst-var-by path ${lib.makeBinPath [ - coreutils - grim - slurp - wl-clipboard - ]} - ''; - - meta = with lib; { - description = "Quick and fast script to capture a screenshot for Sway"; - license = licenses.agpl3Plus; - maintainers = with maintainers; [ frontear ]; - platforms = platforms.linux; - - mainProgram = "screenshot"; - }; -} \ No newline at end of file diff --git a/users/frontear/home/desktops/sway/fs/bin/screenshot/src/screenshot.sh b/users/frontear/home/desktops/sway/fs/bin/screenshot/src/screenshot.sh deleted file mode 100644 index c9c20e5c..00000000 --- a/users/frontear/home/desktops/sway/fs/bin/screenshot/src/screenshot.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash - -set -o errexit -set -o nounset -set -o pipefail - -export PATH="@path@:$PATH" - -ss_dir="$HOME/Pictures/Screenshots" -ss_folder=$(date '+%Y-%m') -ss_name=$(date '+%Y-%m-%d_%Hh%Mm%Ss') - -# Ensure folder exists before capturing the screen -mkdir -p "$ss_dir/$ss_folder" - -# Capture the screenshot, save it to the designated path, and copy it to the clipboard. -grim -cg "$(slurp)" - | tee "$ss_dir/$ss_folder/$ss_name.png" | wl-copy \ No newline at end of file diff --git a/users/frontear/home/desktops/sway/fs/default.nix b/users/frontear/home/desktops/sway/fs/default.nix deleted file mode 100644 index 526a6f92..00000000 --- a/users/frontear/home/desktops/sway/fs/default.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ - callPackage, -}: -let - # TODO: move `./bin` to the `pkgs` directory at root. - screenshot = callPackage ./bin/screenshot/package.nix {}; -in { - sway = callPackage ./sway { - inherit screenshot; - }; - - - swayosd = callPackage ./swayosd {}; -} \ No newline at end of file diff --git a/users/frontear/home/desktops/sway/fs/sway/config b/users/frontear/home/desktops/sway/fs/sway/config deleted file mode 100644 index 77952f2d..00000000 --- a/users/frontear/home/desktops/sway/fs/sway/config +++ /dev/null @@ -1,102 +0,0 @@ -exec uwsm finalize - - -output eDP-1 { - scale 1.5 - bg @backgrounds@/bg_dark.jpg fit -} - -client.focused #ff000055 #33333388 #dddddd #00000000 #ff000055 -client.unfocused #595959aa #16161688 #666666 #00000000 #595959aa -titlebar_separator disable - -corner_radius 8 -gaps inner 2 -gaps outer 4 - -exec papersway -exec wl-clip-persist --clipboard regular - -seat * xcursor_theme Bibata-Modern-Classic 16 - -focus_wrapping no -workspace_layout default - -input type:keyboard { - repeat_delay 250 - repeat_rate 25 -} - -input type:touchpad { - accel_profile adaptive - click_method clickfinger - drag disabled - dwt enabled - dwtp enabled - left_handed disabled - middle_emulation disabled - natural_scroll disabled - pointer_accel 0 - scroll_factor 1 - scroll_method two_finger - tap enabled - tap_button_map lrm -} - -bindsym --locked { - --no-repeat XF86AudioMute exec swayosd-client --output-volume mute-toggle - XF86AudioLowerVolume exec swayosd-client --output-volume -5 - XF86AudioRaiseVolume exec swayosd-client --output-volume +5 - - XF86MonBrightnessDown exec swayosd-client --brightness -5 - XF86MonBrightnessUp exec swayosd-client --brightness +5 -} - -bindsym --no-repeat { - Print exec @screenshot@ -} - -set $mod Mod4 -bindsym --no-repeat { - --locked Ctrl+Alt+Delete exec uwsm stop - Ctrl+Alt+R reload - - $mod+BackSpace kill - $mod+Return exec footclient - $mod+E exec rofi -show drun -run-command "uwsm app -- {cmd}" - - F11 fullscreen toggle - $mod+F floating toggle - - $mod+Left exec papersway-msg focus left - $mod+Right exec papersway-msg focus right - $mod+Up focus up - $mod+Down focus down - - $mod+Shift+Left exec papersway-msg move left - $mod+Shift+Right exec papersway-msg move right - $mod+Shift+Up move up - $mod+Shift+Down move down - - $mod+1 workspace number 1 - $mod+2 workspace number 2 - $mod+3 workspace number 3 - $mod+4 workspace number 4 - $mod+5 workspace number 5 - $mod+6 workspace number 6 - $mod+7 workspace number 7 - $mod+8 workspace number 8 - $mod+9 workspace number 9 - $mod+0 workspace number 10 - - $mod+Shift+1 move container to workspace number 1 - $mod+Shift+2 move container to workspace number 2 - $mod+Shift+3 move container to workspace number 3 - $mod+Shift+4 move container to workspace number 4 - $mod+Shift+5 move container to workspace number 5 - $mod+Shift+6 move container to workspace number 6 - $mod+Shift+7 move container to workspace number 7 - $mod+Shift+8 move container to workspace number 8 - $mod+Shift+9 move container to workspace number 9 - $mod+Shift+0 move container to workspace number 10 -} \ No newline at end of file diff --git a/users/frontear/home/desktops/sway/fs/sway/default.nix b/users/frontear/home/desktops/sway/fs/sway/default.nix deleted file mode 100644 index e5bfe83c..00000000 --- a/users/frontear/home/desktops/sway/fs/sway/default.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ - lib, - runCommandNoCCLocal, - - screenshot, -}: -runCommandNoCCLocal "fs-sway" { - src = with lib.fileset; toSource { - root = ./.; - fileset = difference ./. ./default.nix; - }; -} '' - install -Dm644 -t $out/backgrounds $src/backgrounds/* - install -Dm644 {$src,$out}/config - - substituteInPlace $out/config \ - --subst-var-by backgrounds $out/backgrounds \ - --subst-var-by screenshot ${lib.getExe screenshot} -'' \ No newline at end of file diff --git a/users/frontear/home/desktops/sway/services/swayidle/default.nix b/users/frontear/home/desktops/sway/services/swayidle/default.nix deleted file mode 100644 index a2f43aee..00000000 --- a/users/frontear/home/desktops/sway/services/swayidle/default.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ - config, - lib, - ... -}: -let - cfg = config.my.desktops.sway; -in { - config = lib.mkIf cfg.enable { - services.swayidle = { - enable = true; - - timeouts = [ - { - timeout = 60 * 2; - command = "swaylock"; - } - { - timeout = 60 * 5; - command = "swaymsg output * dpms off"; - resumeCommand = "swaymsg output * dpms on"; - } - ]; - }; - }; -} \ No newline at end of file diff --git a/users/frontear/nixos/default.nix b/users/frontear/nixos/default.nix index fee2c0ea..52293190 100644 --- a/users/frontear/nixos/default.nix +++ b/users/frontear/nixos/default.nix @@ -14,8 +14,7 @@ initialHashedPassword = "$y$j9T$gsXwh6NJa62APePZ.7xR00$lLYi86UgQdN1yjOIgqcegfTKsnqkXI4ufQHWdOTiKr6"; extraGroups = [ "wheel" ] ++ - (lib.optional config.networking.networkmanager.enable "networkmanager") ++ - (lib.optional config.my.desktops.sway.enable "input"); + (lib.optional config.networking.networkmanager.enable "networkmanager"); }; }; } \ No newline at end of file From d996353bae94ae25eba476baeaabbbc072e253ba Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Sat, 20 Sep 2025 22:12:51 -0400 Subject: [PATCH 02/22] feat: drop Zed I'm not going to do into a whole rant about the problems with this editor, instead I'm going to focus on the problems with using it on NixOS. Extensions do not install automatically, despite declaring them in the home-manager module. It only "encourages" Zed to install them after startup. The `settings.json` and `keymaps.json` are both impurely placed on the system by home-manager. I assume there must be a reason though I did not dig into it. Extensions use some downloaded `node` binary to download and install LSPs, kind of like `mason` for Neovim. This is a no-no for NixOS. Using this editor is more trouble than it's worth. VSCode by comparison is a lot easier to work with, since tooling has been built around it's existence in the Nix ecosystem. Maybe Zed will have the same tools in the future. For now, it's not worth it. --- .../programs/zed-editor/module.nix | 21 ----- users/frontear/home/programs/default.nix | 1 - users/frontear/home/programs/zed/default.nix | 83 ------------------- 3 files changed, 105 deletions(-) delete mode 100644 modules/home-manager/programs/zed-editor/module.nix delete mode 100644 users/frontear/home/programs/zed/default.nix diff --git a/modules/home-manager/programs/zed-editor/module.nix b/modules/home-manager/programs/zed-editor/module.nix deleted file mode 100644 index 2cf9769e..00000000 --- a/modules/home-manager/programs/zed-editor/module.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - cfg = config.programs.zed-editor; -in { - config = lib.mkIf cfg.enable { - programs.zed-editor = { - package = pkgs.zed-editor.fhs; - }; - - my.persist.directories = [ - "~/.local/share/zed" - # TODO: needed? - # "~/.config/zed" - ]; - }; -} \ No newline at end of file diff --git a/users/frontear/home/programs/default.nix b/users/frontear/home/programs/default.nix index 79da9b8a..b92b2d15 100644 --- a/users/frontear/home/programs/default.nix +++ b/users/frontear/home/programs/default.nix @@ -5,6 +5,5 @@ imports = [ ./neovim ./vscode - ./zed ]; } \ No newline at end of file diff --git a/users/frontear/home/programs/zed/default.nix b/users/frontear/home/programs/zed/default.nix deleted file mode 100644 index 58860df3..00000000 --- a/users/frontear/home/programs/zed/default.nix +++ /dev/null @@ -1,83 +0,0 @@ -{ - config, - pkgs, - ... -}: -{ - config = { - # TODO: extensions install node binaries, which does NOT work on NixOS. - # Figure out a proper fix for this, or else this editor is useless. - # - # see: https://wiki.nixos.org/wiki/Zed#LSP_Support - programs.zed-editor = { - enable = true; - - extensions = [ - "material-icon-theme" - "one-dark-pro" - - "basher" - "java" - "nix" - ]; - - extraPackages = with pkgs; [ - openjdk21 - nixd - ]; - - # https://zed.dev/docs/key-bindings - userKeymaps = [ - { - context = "Editor && vim_mode == normal"; - bindings = { - "ctrl-w" = "pane::CloseActiveItem"; - }; - } - ]; - - # https://zed.dev/docs/configuring-zed - userSettings = { - "auto_update" = false; - "disable_ai" = true; - - "base_keymap" = "VSCode"; - "vim_mode" = true; - - "buffer_font_family" = config.stylix.fonts.monospace.name; - "buffer_font_size" = config.stylix.fonts.sizes.applications; - "ui_font_family" = config.stylix.fonts.sansSerif.name; - "ui_font_size" = config.stylix.fonts.sizes.applications; - - # Disable ligatures as neither of my fonts support it. - "buffer_font_features"."calt" = false; - "ui_font_features"."calt" = false; - - "icon_theme" = "Material Icon Theme"; - "theme" = { - "mode" = "dark"; - "dark" = "One Dark Pro"; - "light" = "One Light"; # necessary to declare apparently.. - }; - - "inlay_hints"."enabled" = true; - - # Mirrored from VSCode - "autosave" = "on_focus_change"; - "minimap"."show" = "never"; - - "cursor_blink" = true; - "cursor_shape" = "bar"; - - "preferred_line_length" = 80; - "soft_wrap" = "bounded"; - - # NOTE: this mimics the `.editorconfig`, may not be necessary - "tab_size" = 2; - "hard_tabs" = false; - "ensure_final_newline_on_save" = false; - "remove_trailing_whitespace_on_save" = true; - }; - }; - }; -} \ No newline at end of file From ead7a36725dcd61a837b46564333614f20efe6dd Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Sat, 20 Sep 2025 23:43:08 -0400 Subject: [PATCH 03/22] feat: clean up modules This progresses the goals of #53. I would like to think I caught everything. This is a nice overhaul that removed "wrapper" module options that we don't need, and moved some things from `my.*` modules to their home-manager variants. It's also killed `modules/*/upstream`. --- .../home-manager/my/desktops/niri/config.nix | 19 ------- .../{ => my}/programs/bat/config.nix | 0 .../gnome => my/programs/bat}/module.nix | 0 .../{ => my}/programs/bat/options.nix | 0 .../{ => my}/programs/doggo/config.nix | 0 .../niri => programs/doggo}/module.nix | 0 .../{ => my}/programs/doggo/options.nix | 0 .../{ => my}/programs/duf/config.nix | 0 .../bat => my/programs/duf}/module.nix | 0 .../{ => my}/programs/duf/options.nix | 0 .../{ => my}/programs/dust/config.nix | 0 .../doggo => my/programs/dust}/module.nix | 0 .../{ => my}/programs/dust/options.nix | 0 .../{ => my}/programs/element/config.nix | 0 .../duf => my/programs/element}/module.nix | 0 .../{ => my}/programs/element/options.nix | 0 .../{ => my}/programs/fastfetch/config.nix | 0 .../dust => my/programs/fastfetch}/module.nix | 0 .../{ => my}/programs/fastfetch/options.nix | 0 .../{ => my}/programs/fd/config.nix | 0 .../element => my/programs/fd}/module.nix | 0 .../{ => my}/programs/fd/options.nix | 0 .../{ => my}/programs/gnupg/config.nix | 0 .../programs/gnupg}/module.nix | 0 .../{ => my}/programs/gnupg/options.nix | 0 .../{ => my}/programs/hyperfine/config.nix | 0 .../fd => my/programs/hyperfine}/module.nix | 0 .../{ => my}/programs/hyperfine/options.nix | 0 .../{ => my}/programs/inxi/config.nix | 0 .../gnupg => my/programs/inxi}/module.nix | 0 .../{ => my}/programs/inxi/options.nix | 0 .../{ => my}/programs/inxi/package.nix | 0 .../{ => my}/programs/legcord/config.nix | 0 .../programs/legcord}/module.nix | 0 .../{ => my}/programs/legcord/options.nix | 0 .../{ => my}/programs/libreoffice/config.nix | 0 .../programs/libreoffice}/module.nix | 0 .../{ => my}/programs/libreoffice/options.nix | 0 .../programs/microsoft-edge/config.nix | 0 .../programs/microsoft-edge}/module.nix | 0 .../programs/microsoft-edge/options.nix | 0 .../programs/microsoft-edge/package.nix | 0 .../{ => my}/programs/neovim/module.nix | 0 .../{ => my}/programs/neovim/package.nix | 0 .../{ => my}/programs/patool/config.nix | 0 .../programs/patool}/module.nix | 0 .../{ => my}/programs/patool/options.nix | 0 .../{ => my}/programs/patool/package.nix | 0 .../{ => my}/programs/ripgrep/config.nix | 0 .../programs/ripgrep}/module.nix | 0 .../{ => my}/programs/ripgrep/options.nix | 0 .../{ => my}/programs/swayosd/config.nix | 0 .../nix => my/programs/swayosd}/module.nix | 0 .../{ => my}/programs/swayosd/options.nix | 0 .../{ => my}/programs/swayosd/package.nix | 0 .../{ => my}/programs/thunar/config.nix | 0 .../patool => my/programs/thunar}/module.nix | 0 .../{ => my}/programs/thunar/options.nix | 0 .../home-manager/programs/direnv/config.nix | 33 ------------ .../home-manager/programs/direnv/module.nix | 19 +++++-- .../home-manager/programs/direnv/options.nix | 25 ---------- modules/home-manager/programs/eza/config.nix | 34 ------------- modules/home-manager/programs/eza/module.nix | 31 ++++++++++-- modules/home-manager/programs/eza/options.nix | 17 ------- modules/home-manager/programs/git/config.nix | 23 --------- modules/home-manager/programs/git/module.nix | 25 ++++++++-- modules/home-manager/programs/git/options.nix | 25 ---------- .../programs/nix-index/config.nix | 26 ---------- .../programs/nix-index/module.nix | 22 ++++++-- .../programs/nix-index/options.nix | 17 ------- modules/home-manager/programs/nix/options.nix | 14 ------ .../home-manager/programs/ripgrep/module.nix | 9 ---- .../{upstream => }/programs/ssh/module.nix | 0 .../home-manager/programs/swayosd/module.nix | 9 ---- .../home-manager/programs/thunar/module.nix | 9 ---- modules/home-manager/programs/zsh/module.nix | 8 +-- .../home-manager/services/pipewire/config.nix | 22 -------- .../home-manager/services/pipewire/module.nix | 9 ---- .../services/pipewire/options.nix | 14 ------ .../home-manager/services/yubico/module.nix | 9 ---- .../home-manager/services/yubico/options.nix | 14 ------ .../my}/desktops/gnome/config.nix | 7 --- .../home-manager/my/desktops/gnome/module.nix | 11 ++++ .../my}/desktops/gnome/options.nix | 6 ++- .../home-manager/my/desktops/niri/config.nix | 12 +++++ .../home-manager/my/desktops/niri/module.nix | 11 ++++ .../home-manager/my/desktops/niri/options.nix | 6 ++- .../my}/services/yubico/config.nix | 10 +--- .../my/services/yubico/module.nix | 10 ++++ .../home-manager}/nix/config.nix | 4 +- modules/nixos/home-manager/nix/module.nix | 10 ++++ .../home-manager/programs/zsh/config.nix | 15 ++++++ .../home-manager/programs/zsh/module.nix | 10 ++++ .../home-manager/services/pipewire/config.nix | 15 ++++++ .../home-manager/services/pipewire/module.nix | 10 ++++ modules/nixos/my/desktops/niri/options.nix | 1 - .../nixos/my/programs/powertop/package.nix | 4 +- modules/nixos/nix/module.nix | 14 ++++-- users/frontear/home/default.nix | 50 +++++++++---------- .../desktops/niri/programs/waybar/default.nix | 1 - 100 files changed, 235 insertions(+), 405 deletions(-) delete mode 100644 modules/home-manager/my/desktops/niri/config.nix rename modules/home-manager/{ => my}/programs/bat/config.nix (100%) rename modules/home-manager/{desktops/gnome => my/programs/bat}/module.nix (100%) rename modules/home-manager/{ => my}/programs/bat/options.nix (100%) rename modules/home-manager/{ => my}/programs/doggo/config.nix (100%) rename modules/home-manager/my/{desktops/niri => programs/doggo}/module.nix (100%) rename modules/home-manager/{ => my}/programs/doggo/options.nix (100%) rename modules/home-manager/{ => my}/programs/duf/config.nix (100%) rename modules/home-manager/{programs/bat => my/programs/duf}/module.nix (100%) rename modules/home-manager/{ => my}/programs/duf/options.nix (100%) rename modules/home-manager/{ => my}/programs/dust/config.nix (100%) rename modules/home-manager/{programs/doggo => my/programs/dust}/module.nix (100%) rename modules/home-manager/{ => my}/programs/dust/options.nix (100%) rename modules/home-manager/{ => my}/programs/element/config.nix (100%) rename modules/home-manager/{programs/duf => my/programs/element}/module.nix (100%) rename modules/home-manager/{ => my}/programs/element/options.nix (100%) rename modules/home-manager/{ => my}/programs/fastfetch/config.nix (100%) rename modules/home-manager/{programs/dust => my/programs/fastfetch}/module.nix (100%) rename modules/home-manager/{ => my}/programs/fastfetch/options.nix (100%) rename modules/home-manager/{ => my}/programs/fd/config.nix (100%) rename modules/home-manager/{programs/element => my/programs/fd}/module.nix (100%) rename modules/home-manager/{ => my}/programs/fd/options.nix (100%) rename modules/home-manager/{ => my}/programs/gnupg/config.nix (100%) rename modules/home-manager/{programs/fastfetch => my/programs/gnupg}/module.nix (100%) rename modules/home-manager/{ => my}/programs/gnupg/options.nix (100%) rename modules/home-manager/{ => my}/programs/hyperfine/config.nix (100%) rename modules/home-manager/{programs/fd => my/programs/hyperfine}/module.nix (100%) rename modules/home-manager/{ => my}/programs/hyperfine/options.nix (100%) rename modules/home-manager/{ => my}/programs/inxi/config.nix (100%) rename modules/home-manager/{programs/gnupg => my/programs/inxi}/module.nix (100%) rename modules/home-manager/{ => my}/programs/inxi/options.nix (100%) rename modules/home-manager/{ => my}/programs/inxi/package.nix (100%) rename modules/home-manager/{ => my}/programs/legcord/config.nix (100%) rename modules/home-manager/{programs/hyperfine => my/programs/legcord}/module.nix (100%) rename modules/home-manager/{ => my}/programs/legcord/options.nix (100%) rename modules/home-manager/{ => my}/programs/libreoffice/config.nix (100%) rename modules/home-manager/{programs/inxi => my/programs/libreoffice}/module.nix (100%) rename modules/home-manager/{ => my}/programs/libreoffice/options.nix (100%) rename modules/home-manager/{ => my}/programs/microsoft-edge/config.nix (100%) rename modules/home-manager/{programs/legcord => my/programs/microsoft-edge}/module.nix (100%) rename modules/home-manager/{ => my}/programs/microsoft-edge/options.nix (100%) rename modules/home-manager/{ => my}/programs/microsoft-edge/package.nix (100%) rename modules/home-manager/{ => my}/programs/neovim/module.nix (100%) rename modules/home-manager/{ => my}/programs/neovim/package.nix (100%) rename modules/home-manager/{ => my}/programs/patool/config.nix (100%) rename modules/home-manager/{programs/libreoffice => my/programs/patool}/module.nix (100%) rename modules/home-manager/{ => my}/programs/patool/options.nix (100%) rename modules/home-manager/{ => my}/programs/patool/package.nix (100%) rename modules/home-manager/{ => my}/programs/ripgrep/config.nix (100%) rename modules/home-manager/{programs/microsoft-edge => my/programs/ripgrep}/module.nix (100%) rename modules/home-manager/{ => my}/programs/ripgrep/options.nix (100%) rename modules/home-manager/{ => my}/programs/swayosd/config.nix (100%) rename modules/home-manager/{programs/nix => my/programs/swayosd}/module.nix (100%) rename modules/home-manager/{ => my}/programs/swayosd/options.nix (100%) rename modules/home-manager/{ => my}/programs/swayosd/package.nix (100%) rename modules/home-manager/{ => my}/programs/thunar/config.nix (100%) rename modules/home-manager/{programs/patool => my/programs/thunar}/module.nix (100%) rename modules/home-manager/{ => my}/programs/thunar/options.nix (100%) delete mode 100644 modules/home-manager/programs/direnv/config.nix delete mode 100644 modules/home-manager/programs/direnv/options.nix delete mode 100644 modules/home-manager/programs/eza/config.nix delete mode 100644 modules/home-manager/programs/eza/options.nix delete mode 100644 modules/home-manager/programs/git/config.nix delete mode 100644 modules/home-manager/programs/git/options.nix delete mode 100644 modules/home-manager/programs/nix-index/config.nix delete mode 100644 modules/home-manager/programs/nix-index/options.nix delete mode 100644 modules/home-manager/programs/nix/options.nix delete mode 100644 modules/home-manager/programs/ripgrep/module.nix rename modules/home-manager/{upstream => }/programs/ssh/module.nix (100%) delete mode 100644 modules/home-manager/programs/swayosd/module.nix delete mode 100644 modules/home-manager/programs/thunar/module.nix delete mode 100644 modules/home-manager/services/pipewire/config.nix delete mode 100644 modules/home-manager/services/pipewire/module.nix delete mode 100644 modules/home-manager/services/pipewire/options.nix delete mode 100644 modules/home-manager/services/yubico/module.nix delete mode 100644 modules/home-manager/services/yubico/options.nix rename modules/{home-manager => nixos/home-manager/my}/desktops/gnome/config.nix (70%) create mode 100644 modules/nixos/home-manager/my/desktops/gnome/module.nix rename modules/{home-manager => nixos/home-manager/my}/desktops/gnome/options.nix (57%) create mode 100644 modules/nixos/home-manager/my/desktops/niri/config.nix create mode 100644 modules/nixos/home-manager/my/desktops/niri/module.nix rename modules/{ => nixos}/home-manager/my/desktops/niri/options.nix (68%) rename modules/{home-manager => nixos/home-manager/my}/services/yubico/config.nix (73%) create mode 100644 modules/nixos/home-manager/my/services/yubico/module.nix rename modules/{home-manager/programs => nixos/home-manager}/nix/config.nix (78%) create mode 100644 modules/nixos/home-manager/nix/module.nix create mode 100644 modules/nixos/home-manager/programs/zsh/config.nix create mode 100644 modules/nixos/home-manager/programs/zsh/module.nix create mode 100644 modules/nixos/home-manager/services/pipewire/config.nix create mode 100644 modules/nixos/home-manager/services/pipewire/module.nix diff --git a/modules/home-manager/my/desktops/niri/config.nix b/modules/home-manager/my/desktops/niri/config.nix deleted file mode 100644 index 131b4de6..00000000 --- a/modules/home-manager/my/desktops/niri/config.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ - osConfig, - config, - lib, - ... -}: -let - cfg = config.my.desktops.niri; -in { - config = lib.mkIf cfg.enable { - assertions = [{ - assertion = osConfig.my.desktops.niri.enable; - message = "Please enable my.desktops.niri in your NixOS configuration"; - }]; - - - xdg.configFile."niri/config.kdl".source = cfg.config; - }; -} \ No newline at end of file diff --git a/modules/home-manager/programs/bat/config.nix b/modules/home-manager/my/programs/bat/config.nix similarity index 100% rename from modules/home-manager/programs/bat/config.nix rename to modules/home-manager/my/programs/bat/config.nix diff --git a/modules/home-manager/desktops/gnome/module.nix b/modules/home-manager/my/programs/bat/module.nix similarity index 100% rename from modules/home-manager/desktops/gnome/module.nix rename to modules/home-manager/my/programs/bat/module.nix diff --git a/modules/home-manager/programs/bat/options.nix b/modules/home-manager/my/programs/bat/options.nix similarity index 100% rename from modules/home-manager/programs/bat/options.nix rename to modules/home-manager/my/programs/bat/options.nix diff --git a/modules/home-manager/programs/doggo/config.nix b/modules/home-manager/my/programs/doggo/config.nix similarity index 100% rename from modules/home-manager/programs/doggo/config.nix rename to modules/home-manager/my/programs/doggo/config.nix diff --git a/modules/home-manager/my/desktops/niri/module.nix b/modules/home-manager/my/programs/doggo/module.nix similarity index 100% rename from modules/home-manager/my/desktops/niri/module.nix rename to modules/home-manager/my/programs/doggo/module.nix diff --git a/modules/home-manager/programs/doggo/options.nix b/modules/home-manager/my/programs/doggo/options.nix similarity index 100% rename from modules/home-manager/programs/doggo/options.nix rename to modules/home-manager/my/programs/doggo/options.nix diff --git a/modules/home-manager/programs/duf/config.nix b/modules/home-manager/my/programs/duf/config.nix similarity index 100% rename from modules/home-manager/programs/duf/config.nix rename to modules/home-manager/my/programs/duf/config.nix diff --git a/modules/home-manager/programs/bat/module.nix b/modules/home-manager/my/programs/duf/module.nix similarity index 100% rename from modules/home-manager/programs/bat/module.nix rename to modules/home-manager/my/programs/duf/module.nix diff --git a/modules/home-manager/programs/duf/options.nix b/modules/home-manager/my/programs/duf/options.nix similarity index 100% rename from modules/home-manager/programs/duf/options.nix rename to modules/home-manager/my/programs/duf/options.nix diff --git a/modules/home-manager/programs/dust/config.nix b/modules/home-manager/my/programs/dust/config.nix similarity index 100% rename from modules/home-manager/programs/dust/config.nix rename to modules/home-manager/my/programs/dust/config.nix diff --git a/modules/home-manager/programs/doggo/module.nix b/modules/home-manager/my/programs/dust/module.nix similarity index 100% rename from modules/home-manager/programs/doggo/module.nix rename to modules/home-manager/my/programs/dust/module.nix diff --git a/modules/home-manager/programs/dust/options.nix b/modules/home-manager/my/programs/dust/options.nix similarity index 100% rename from modules/home-manager/programs/dust/options.nix rename to modules/home-manager/my/programs/dust/options.nix diff --git a/modules/home-manager/programs/element/config.nix b/modules/home-manager/my/programs/element/config.nix similarity index 100% rename from modules/home-manager/programs/element/config.nix rename to modules/home-manager/my/programs/element/config.nix diff --git a/modules/home-manager/programs/duf/module.nix b/modules/home-manager/my/programs/element/module.nix similarity index 100% rename from modules/home-manager/programs/duf/module.nix rename to modules/home-manager/my/programs/element/module.nix diff --git a/modules/home-manager/programs/element/options.nix b/modules/home-manager/my/programs/element/options.nix similarity index 100% rename from modules/home-manager/programs/element/options.nix rename to modules/home-manager/my/programs/element/options.nix diff --git a/modules/home-manager/programs/fastfetch/config.nix b/modules/home-manager/my/programs/fastfetch/config.nix similarity index 100% rename from modules/home-manager/programs/fastfetch/config.nix rename to modules/home-manager/my/programs/fastfetch/config.nix diff --git a/modules/home-manager/programs/dust/module.nix b/modules/home-manager/my/programs/fastfetch/module.nix similarity index 100% rename from modules/home-manager/programs/dust/module.nix rename to modules/home-manager/my/programs/fastfetch/module.nix diff --git a/modules/home-manager/programs/fastfetch/options.nix b/modules/home-manager/my/programs/fastfetch/options.nix similarity index 100% rename from modules/home-manager/programs/fastfetch/options.nix rename to modules/home-manager/my/programs/fastfetch/options.nix diff --git a/modules/home-manager/programs/fd/config.nix b/modules/home-manager/my/programs/fd/config.nix similarity index 100% rename from modules/home-manager/programs/fd/config.nix rename to modules/home-manager/my/programs/fd/config.nix diff --git a/modules/home-manager/programs/element/module.nix b/modules/home-manager/my/programs/fd/module.nix similarity index 100% rename from modules/home-manager/programs/element/module.nix rename to modules/home-manager/my/programs/fd/module.nix diff --git a/modules/home-manager/programs/fd/options.nix b/modules/home-manager/my/programs/fd/options.nix similarity index 100% rename from modules/home-manager/programs/fd/options.nix rename to modules/home-manager/my/programs/fd/options.nix diff --git a/modules/home-manager/programs/gnupg/config.nix b/modules/home-manager/my/programs/gnupg/config.nix similarity index 100% rename from modules/home-manager/programs/gnupg/config.nix rename to modules/home-manager/my/programs/gnupg/config.nix diff --git a/modules/home-manager/programs/fastfetch/module.nix b/modules/home-manager/my/programs/gnupg/module.nix similarity index 100% rename from modules/home-manager/programs/fastfetch/module.nix rename to modules/home-manager/my/programs/gnupg/module.nix diff --git a/modules/home-manager/programs/gnupg/options.nix b/modules/home-manager/my/programs/gnupg/options.nix similarity index 100% rename from modules/home-manager/programs/gnupg/options.nix rename to modules/home-manager/my/programs/gnupg/options.nix diff --git a/modules/home-manager/programs/hyperfine/config.nix b/modules/home-manager/my/programs/hyperfine/config.nix similarity index 100% rename from modules/home-manager/programs/hyperfine/config.nix rename to modules/home-manager/my/programs/hyperfine/config.nix diff --git a/modules/home-manager/programs/fd/module.nix b/modules/home-manager/my/programs/hyperfine/module.nix similarity index 100% rename from modules/home-manager/programs/fd/module.nix rename to modules/home-manager/my/programs/hyperfine/module.nix diff --git a/modules/home-manager/programs/hyperfine/options.nix b/modules/home-manager/my/programs/hyperfine/options.nix similarity index 100% rename from modules/home-manager/programs/hyperfine/options.nix rename to modules/home-manager/my/programs/hyperfine/options.nix diff --git a/modules/home-manager/programs/inxi/config.nix b/modules/home-manager/my/programs/inxi/config.nix similarity index 100% rename from modules/home-manager/programs/inxi/config.nix rename to modules/home-manager/my/programs/inxi/config.nix diff --git a/modules/home-manager/programs/gnupg/module.nix b/modules/home-manager/my/programs/inxi/module.nix similarity index 100% rename from modules/home-manager/programs/gnupg/module.nix rename to modules/home-manager/my/programs/inxi/module.nix diff --git a/modules/home-manager/programs/inxi/options.nix b/modules/home-manager/my/programs/inxi/options.nix similarity index 100% rename from modules/home-manager/programs/inxi/options.nix rename to modules/home-manager/my/programs/inxi/options.nix diff --git a/modules/home-manager/programs/inxi/package.nix b/modules/home-manager/my/programs/inxi/package.nix similarity index 100% rename from modules/home-manager/programs/inxi/package.nix rename to modules/home-manager/my/programs/inxi/package.nix diff --git a/modules/home-manager/programs/legcord/config.nix b/modules/home-manager/my/programs/legcord/config.nix similarity index 100% rename from modules/home-manager/programs/legcord/config.nix rename to modules/home-manager/my/programs/legcord/config.nix diff --git a/modules/home-manager/programs/hyperfine/module.nix b/modules/home-manager/my/programs/legcord/module.nix similarity index 100% rename from modules/home-manager/programs/hyperfine/module.nix rename to modules/home-manager/my/programs/legcord/module.nix diff --git a/modules/home-manager/programs/legcord/options.nix b/modules/home-manager/my/programs/legcord/options.nix similarity index 100% rename from modules/home-manager/programs/legcord/options.nix rename to modules/home-manager/my/programs/legcord/options.nix diff --git a/modules/home-manager/programs/libreoffice/config.nix b/modules/home-manager/my/programs/libreoffice/config.nix similarity index 100% rename from modules/home-manager/programs/libreoffice/config.nix rename to modules/home-manager/my/programs/libreoffice/config.nix diff --git a/modules/home-manager/programs/inxi/module.nix b/modules/home-manager/my/programs/libreoffice/module.nix similarity index 100% rename from modules/home-manager/programs/inxi/module.nix rename to modules/home-manager/my/programs/libreoffice/module.nix diff --git a/modules/home-manager/programs/libreoffice/options.nix b/modules/home-manager/my/programs/libreoffice/options.nix similarity index 100% rename from modules/home-manager/programs/libreoffice/options.nix rename to modules/home-manager/my/programs/libreoffice/options.nix diff --git a/modules/home-manager/programs/microsoft-edge/config.nix b/modules/home-manager/my/programs/microsoft-edge/config.nix similarity index 100% rename from modules/home-manager/programs/microsoft-edge/config.nix rename to modules/home-manager/my/programs/microsoft-edge/config.nix diff --git a/modules/home-manager/programs/legcord/module.nix b/modules/home-manager/my/programs/microsoft-edge/module.nix similarity index 100% rename from modules/home-manager/programs/legcord/module.nix rename to modules/home-manager/my/programs/microsoft-edge/module.nix diff --git a/modules/home-manager/programs/microsoft-edge/options.nix b/modules/home-manager/my/programs/microsoft-edge/options.nix similarity index 100% rename from modules/home-manager/programs/microsoft-edge/options.nix rename to modules/home-manager/my/programs/microsoft-edge/options.nix diff --git a/modules/home-manager/programs/microsoft-edge/package.nix b/modules/home-manager/my/programs/microsoft-edge/package.nix similarity index 100% rename from modules/home-manager/programs/microsoft-edge/package.nix rename to modules/home-manager/my/programs/microsoft-edge/package.nix diff --git a/modules/home-manager/programs/neovim/module.nix b/modules/home-manager/my/programs/neovim/module.nix similarity index 100% rename from modules/home-manager/programs/neovim/module.nix rename to modules/home-manager/my/programs/neovim/module.nix diff --git a/modules/home-manager/programs/neovim/package.nix b/modules/home-manager/my/programs/neovim/package.nix similarity index 100% rename from modules/home-manager/programs/neovim/package.nix rename to modules/home-manager/my/programs/neovim/package.nix diff --git a/modules/home-manager/programs/patool/config.nix b/modules/home-manager/my/programs/patool/config.nix similarity index 100% rename from modules/home-manager/programs/patool/config.nix rename to modules/home-manager/my/programs/patool/config.nix diff --git a/modules/home-manager/programs/libreoffice/module.nix b/modules/home-manager/my/programs/patool/module.nix similarity index 100% rename from modules/home-manager/programs/libreoffice/module.nix rename to modules/home-manager/my/programs/patool/module.nix diff --git a/modules/home-manager/programs/patool/options.nix b/modules/home-manager/my/programs/patool/options.nix similarity index 100% rename from modules/home-manager/programs/patool/options.nix rename to modules/home-manager/my/programs/patool/options.nix diff --git a/modules/home-manager/programs/patool/package.nix b/modules/home-manager/my/programs/patool/package.nix similarity index 100% rename from modules/home-manager/programs/patool/package.nix rename to modules/home-manager/my/programs/patool/package.nix diff --git a/modules/home-manager/programs/ripgrep/config.nix b/modules/home-manager/my/programs/ripgrep/config.nix similarity index 100% rename from modules/home-manager/programs/ripgrep/config.nix rename to modules/home-manager/my/programs/ripgrep/config.nix diff --git a/modules/home-manager/programs/microsoft-edge/module.nix b/modules/home-manager/my/programs/ripgrep/module.nix similarity index 100% rename from modules/home-manager/programs/microsoft-edge/module.nix rename to modules/home-manager/my/programs/ripgrep/module.nix diff --git a/modules/home-manager/programs/ripgrep/options.nix b/modules/home-manager/my/programs/ripgrep/options.nix similarity index 100% rename from modules/home-manager/programs/ripgrep/options.nix rename to modules/home-manager/my/programs/ripgrep/options.nix diff --git a/modules/home-manager/programs/swayosd/config.nix b/modules/home-manager/my/programs/swayosd/config.nix similarity index 100% rename from modules/home-manager/programs/swayosd/config.nix rename to modules/home-manager/my/programs/swayosd/config.nix diff --git a/modules/home-manager/programs/nix/module.nix b/modules/home-manager/my/programs/swayosd/module.nix similarity index 100% rename from modules/home-manager/programs/nix/module.nix rename to modules/home-manager/my/programs/swayosd/module.nix diff --git a/modules/home-manager/programs/swayosd/options.nix b/modules/home-manager/my/programs/swayosd/options.nix similarity index 100% rename from modules/home-manager/programs/swayosd/options.nix rename to modules/home-manager/my/programs/swayosd/options.nix diff --git a/modules/home-manager/programs/swayosd/package.nix b/modules/home-manager/my/programs/swayosd/package.nix similarity index 100% rename from modules/home-manager/programs/swayosd/package.nix rename to modules/home-manager/my/programs/swayosd/package.nix diff --git a/modules/home-manager/programs/thunar/config.nix b/modules/home-manager/my/programs/thunar/config.nix similarity index 100% rename from modules/home-manager/programs/thunar/config.nix rename to modules/home-manager/my/programs/thunar/config.nix diff --git a/modules/home-manager/programs/patool/module.nix b/modules/home-manager/my/programs/thunar/module.nix similarity index 100% rename from modules/home-manager/programs/patool/module.nix rename to modules/home-manager/my/programs/thunar/module.nix diff --git a/modules/home-manager/programs/thunar/options.nix b/modules/home-manager/my/programs/thunar/options.nix similarity index 100% rename from modules/home-manager/programs/thunar/options.nix rename to modules/home-manager/my/programs/thunar/options.nix diff --git a/modules/home-manager/programs/direnv/config.nix b/modules/home-manager/programs/direnv/config.nix deleted file mode 100644 index 2c4ce329..00000000 --- a/modules/home-manager/programs/direnv/config.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ - osConfig, - config, - lib, - pkgs, - ... -}: -let - cfg = config.my.programs.direnv; - - # TODO: why does the NixOS module do this, but home-manager doesn't? - # - # see: https://github.com/NixOS/nixpkgs/blob/ea6374f096899fa72e92d848e87fc7842483284d/nixos/modules/programs/direnv.nix#L74 - # see: https://github.com/nix-community/home-manager/blob/3ec1cd9a0703fbd55d865b7fd2b07d08374f0355/modules/programs/direnv.nix#L107 - nix-direnv' = pkgs.nix-direnv.override { - nix = osConfig.nix.package; - }; -in { - config = lib.mkIf cfg.enable { - programs.direnv = { - inherit (cfg) - enable - package - config - ; - - nix-direnv = { - enable = true; - package = nix-direnv'; - }; - }; - }; -} \ No newline at end of file diff --git a/modules/home-manager/programs/direnv/module.nix b/modules/home-manager/programs/direnv/module.nix index aa5a227b..6468c769 100644 --- a/modules/home-manager/programs/direnv/module.nix +++ b/modules/home-manager/programs/direnv/module.nix @@ -1,9 +1,20 @@ { + config, + lib, ... }: -{ - imports = [ - ./options.nix - ./config.nix +let + cfg = config.programs.direnv; +in { + config = lib.mkMerge [ + { programs.direnv.enable = lib.mkDefault true; } + + (lib.mkIf cfg.enable { + programs.direnv = { + nix-direnv = { + enable = true; + }; + }; + }) ]; } \ No newline at end of file diff --git a/modules/home-manager/programs/direnv/options.nix b/modules/home-manager/programs/direnv/options.nix deleted file mode 100644 index dfd6b95c..00000000 --- a/modules/home-manager/programs/direnv/options.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ - options, - lib, - pkgs, - ... -}: -{ - options = { - my.programs.direnv = { - enable = lib.mkDefaultEnableOption "direnv"; - package = lib.mkOption { - default = pkgs.direnv; - - type = with lib.types; package; - }; - - - config = lib.mkOption { - default = {}; - - type = options.programs.direnv.config.type; - }; - }; - }; -} \ No newline at end of file diff --git a/modules/home-manager/programs/eza/config.nix b/modules/home-manager/programs/eza/config.nix deleted file mode 100644 index 11e6d316..00000000 --- a/modules/home-manager/programs/eza/config.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - cfg = config.my.programs.eza; -in { - config = lib.mkIf cfg.enable { - fonts.fontconfig.enable = lib.mkDefault true; - - home.packages = with pkgs; [ - nerd-fonts.symbols-only - ]; - - - programs.eza = { - inherit (cfg) - enable - package - ; - - extraOptions = [ - "--git" - "--group" - "--group-directories-first" - "--icons" - "--header" - "--octal-permissions" - ]; - }; - }; -} \ No newline at end of file diff --git a/modules/home-manager/programs/eza/module.nix b/modules/home-manager/programs/eza/module.nix index aa5a227b..52c278b5 100644 --- a/modules/home-manager/programs/eza/module.nix +++ b/modules/home-manager/programs/eza/module.nix @@ -1,9 +1,32 @@ { + config, + lib, + pkgs, ... }: -{ - imports = [ - ./options.nix - ./config.nix +let + cfg = config.programs.eza; +in { + config = lib.mkMerge [ + { programs.eza.enable = lib.mkDefault true; } + + (lib.mkIf cfg.enable { + fonts.fontconfig.enable = lib.mkDefault true; + + home.packages = with pkgs; [ + nerd-fonts.symbols-only + ]; + + programs.eza = { + extraOptions = [ + "--git" + "--group" + "--group-directories-first" + "--icons" + "--header" + "--octal-permissions" + ]; + }; + }) ]; } \ No newline at end of file diff --git a/modules/home-manager/programs/eza/options.nix b/modules/home-manager/programs/eza/options.nix deleted file mode 100644 index 4a969af1..00000000 --- a/modules/home-manager/programs/eza/options.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - lib, - pkgs, - ... -}: -{ - options = { - my.programs.eza = { - enable = lib.mkDefaultEnableOption "eza"; - package = lib.mkOption { - default = pkgs.eza; - - type = with lib.types; package; - }; - }; - }; -} \ No newline at end of file diff --git a/modules/home-manager/programs/git/config.nix b/modules/home-manager/programs/git/config.nix deleted file mode 100644 index 92dd83de..00000000 --- a/modules/home-manager/programs/git/config.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ - config, - lib, - ... -}: -let - cfg = config.my.programs.git; -in { - config = lib.mkIf cfg.enable { - programs.git = { - inherit (cfg) - enable - package - ; - - extraConfig = cfg.config; - - ignores = [ - ".envrc" - ]; - }; - }; -} \ No newline at end of file diff --git a/modules/home-manager/programs/git/module.nix b/modules/home-manager/programs/git/module.nix index aa5a227b..d6afb857 100644 --- a/modules/home-manager/programs/git/module.nix +++ b/modules/home-manager/programs/git/module.nix @@ -1,9 +1,26 @@ { + config, + lib, + pkgs, ... }: -{ - imports = [ - ./options.nix - ./config.nix +let + cfg = config.programs.git; +in { + config = lib.mkMerge [ + { + programs.git = { + enable = lib.mkDefault true; + package = pkgs.gitFull; + }; + } + + (lib.mkIf cfg.enable { + programs.git = { + ignores = [ + ".envrc" + ]; + }; + }) ]; } \ No newline at end of file diff --git a/modules/home-manager/programs/git/options.nix b/modules/home-manager/programs/git/options.nix deleted file mode 100644 index 36db8dcd..00000000 --- a/modules/home-manager/programs/git/options.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ - options, - lib, - pkgs, - ... -}: -{ - options = { - my.programs.git = { - enable = lib.mkDefaultEnableOption "git"; - package = lib.mkOption { - default = pkgs.gitFull; - - type = with lib.types; package; - }; - - - config = lib.mkOption { - default = {}; - - type = options.programs.git.extraConfig.type; - }; - }; - }; -} \ No newline at end of file diff --git a/modules/home-manager/programs/nix-index/config.nix b/modules/home-manager/programs/nix-index/config.nix deleted file mode 100644 index 322f1390..00000000 --- a/modules/home-manager/programs/nix-index/config.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ - config, - lib, - ... -}: -let - cfg = config.my.programs.nix-index; -in { - config = lib.mkIf cfg.enable { - my.persist.directories = [{ - path = "~/.cache/nix-index"; - unique = false; - }]; - - programs = { - command-not-found.enable = lib.mkForce false; - - nix-index = { - inherit (cfg) - enable - package - ; - }; - }; - }; -} \ No newline at end of file diff --git a/modules/home-manager/programs/nix-index/module.nix b/modules/home-manager/programs/nix-index/module.nix index aa5a227b..ffe52d15 100644 --- a/modules/home-manager/programs/nix-index/module.nix +++ b/modules/home-manager/programs/nix-index/module.nix @@ -1,9 +1,23 @@ { + config, + lib, ... }: -{ - imports = [ - ./options.nix - ./config.nix +let + cfg = config.programs.nix-index; +in { + config = lib.mkMerge [ + { programs.nix-index.enable = lib.mkDefault true; } + + (lib.mkIf cfg.enable { + my.persist.directories = [{ + path = "~/.cache/nix-index"; + unique = false; + }]; + + programs.command-not-found = { + enable = lib.mkForce false; + }; + }) ]; } \ No newline at end of file diff --git a/modules/home-manager/programs/nix-index/options.nix b/modules/home-manager/programs/nix-index/options.nix deleted file mode 100644 index 71857f8c..00000000 --- a/modules/home-manager/programs/nix-index/options.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - lib, - pkgs, - ... -}: -{ - options = { - my.programs.nix-index = { - enable = lib.mkDefaultEnableOption "nix-index"; - package = lib.mkOption { - default = pkgs.nix-index; - - type = with lib.types; package; - }; - }; - }; -} \ No newline at end of file diff --git a/modules/home-manager/programs/nix/options.nix b/modules/home-manager/programs/nix/options.nix deleted file mode 100644 index 524c6786..00000000 --- a/modules/home-manager/programs/nix/options.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ - osConfig, - lib, - ... -}: -{ - options = { - my.programs.nix = { - enable = lib.mkEnableOption "nix" // { - default = osConfig.nix.enable; - }; - }; - }; -} \ No newline at end of file diff --git a/modules/home-manager/programs/ripgrep/module.nix b/modules/home-manager/programs/ripgrep/module.nix deleted file mode 100644 index aa5a227b..00000000 --- a/modules/home-manager/programs/ripgrep/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/home-manager/upstream/programs/ssh/module.nix b/modules/home-manager/programs/ssh/module.nix similarity index 100% rename from modules/home-manager/upstream/programs/ssh/module.nix rename to modules/home-manager/programs/ssh/module.nix diff --git a/modules/home-manager/programs/swayosd/module.nix b/modules/home-manager/programs/swayosd/module.nix deleted file mode 100644 index aa5a227b..00000000 --- a/modules/home-manager/programs/swayosd/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/home-manager/programs/thunar/module.nix b/modules/home-manager/programs/thunar/module.nix deleted file mode 100644 index aa5a227b..00000000 --- a/modules/home-manager/programs/thunar/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/home-manager/programs/zsh/module.nix b/modules/home-manager/programs/zsh/module.nix index 20da55ab..ca7f2626 100644 --- a/modules/home-manager/programs/zsh/module.nix +++ b/modules/home-manager/programs/zsh/module.nix @@ -1,5 +1,4 @@ { - osConfig, config, lib, pkgs, @@ -9,11 +8,6 @@ let cfg = config.programs.zsh; in { config = lib.mkIf cfg.enable { - assertions = [{ - assertion = osConfig.programs.zsh.enable; - message = "Please enable programs.zsh to your NixOS configuration."; - }]; - # ZSH tries to atomically replace $HISTFILE, which fails if the file # is a bind-mount. As an alternative, persist the entire directory # around the file instead. @@ -23,7 +17,7 @@ in { }]; programs.zsh = { - # Prevent home-manager from trying to include a _second_ ZSH in my PATH.. + # Prevent home-manager from trying to include a _second_ ZSH in my PATH.. package = pkgs.emptyDirectory; # These are set at system-level diff --git a/modules/home-manager/services/pipewire/config.nix b/modules/home-manager/services/pipewire/config.nix deleted file mode 100644 index 61f99e3d..00000000 --- a/modules/home-manager/services/pipewire/config.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - osConfig, - config, - lib, - ... -}: -let - cfg = config.my.services.pipewire; -in { - config = lib.mkIf cfg.enable { - assertions = [{ - assertion = osConfig.services.pipewire.enable; - message = "Please enable my.services.pipewire in your NixOS configuration"; - }]; - - - my.persist.directories = [{ - path = "~/.local/state/wireplumber"; - unique = true; - }]; - }; -} \ No newline at end of file diff --git a/modules/home-manager/services/pipewire/module.nix b/modules/home-manager/services/pipewire/module.nix deleted file mode 100644 index aa5a227b..00000000 --- a/modules/home-manager/services/pipewire/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/home-manager/services/pipewire/options.nix b/modules/home-manager/services/pipewire/options.nix deleted file mode 100644 index fd12fdfb..00000000 --- a/modules/home-manager/services/pipewire/options.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ - osConfig, - lib, - ... -}: -{ - options = { - my.services.pipewire = { - enable = lib.mkEnableOption "pipewire" // { - default = osConfig.services.pipewire.enable; - }; - }; - }; -} \ No newline at end of file diff --git a/modules/home-manager/services/yubico/module.nix b/modules/home-manager/services/yubico/module.nix deleted file mode 100644 index aa5a227b..00000000 --- a/modules/home-manager/services/yubico/module.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - ... -}: -{ - imports = [ - ./options.nix - ./config.nix - ]; -} \ No newline at end of file diff --git a/modules/home-manager/services/yubico/options.nix b/modules/home-manager/services/yubico/options.nix deleted file mode 100644 index 1566c7ef..00000000 --- a/modules/home-manager/services/yubico/options.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ - osConfig, - lib, - ... -}: -{ - options = { - my.services.yubico = { - enable = lib.mkEnableOption "yubico" // { - default = osConfig.my.services.yubico.enable; - }; - }; - }; -} \ No newline at end of file diff --git a/modules/home-manager/desktops/gnome/config.nix b/modules/nixos/home-manager/my/desktops/gnome/config.nix similarity index 70% rename from modules/home-manager/desktops/gnome/config.nix rename to modules/nixos/home-manager/my/desktops/gnome/config.nix index fa8f6594..f545c07c 100644 --- a/modules/home-manager/desktops/gnome/config.nix +++ b/modules/nixos/home-manager/my/desktops/gnome/config.nix @@ -1,5 +1,4 @@ { - osConfig, config, lib, ... @@ -8,12 +7,6 @@ let cfg = config.my.desktops.gnome; in { config = lib.mkIf cfg.enable { - assertions = [{ - assertion = osConfig.my.desktops.gnome.enable; - message = "Please enable my.desktops.gnome in your NixOS configuration"; - }]; - - # TODO: determine what actually needs to be kept and what doesn't my.persist.directories = [ { diff --git a/modules/nixos/home-manager/my/desktops/gnome/module.nix b/modules/nixos/home-manager/my/desktops/gnome/module.nix new file mode 100644 index 00000000..f2dbf639 --- /dev/null +++ b/modules/nixos/home-manager/my/desktops/gnome/module.nix @@ -0,0 +1,11 @@ +{ + ... +}: +{ + config = { + home-manager.sharedModules = [ + ./options.nix + ./config.nix + ]; + }; +} \ No newline at end of file diff --git a/modules/home-manager/desktops/gnome/options.nix b/modules/nixos/home-manager/my/desktops/gnome/options.nix similarity index 57% rename from modules/home-manager/desktops/gnome/options.nix rename to modules/nixos/home-manager/my/desktops/gnome/options.nix index 86624578..0382cc86 100644 --- a/modules/home-manager/desktops/gnome/options.nix +++ b/modules/nixos/home-manager/my/desktops/gnome/options.nix @@ -1,5 +1,5 @@ { - osConfig, + nixosConfig, lib, ... }: @@ -7,7 +7,9 @@ options = { my.desktops.gnome = { enable = lib.mkEnableOption "gnome" // { - default = osConfig.my.desktops.gnome.enable; + default = nixosConfig.my.desktops.gnome.enable; + + readOnly = true; }; }; }; diff --git a/modules/nixos/home-manager/my/desktops/niri/config.nix b/modules/nixos/home-manager/my/desktops/niri/config.nix new file mode 100644 index 00000000..a77265ef --- /dev/null +++ b/modules/nixos/home-manager/my/desktops/niri/config.nix @@ -0,0 +1,12 @@ +{ + config, + lib, + ... +}: +let + cfg = config.my.desktops.niri; +in { + config = lib.mkIf cfg.enable { + xdg.configFile."niri/config.kdl".source = cfg.config; + }; +} \ No newline at end of file diff --git a/modules/nixos/home-manager/my/desktops/niri/module.nix b/modules/nixos/home-manager/my/desktops/niri/module.nix new file mode 100644 index 00000000..f2dbf639 --- /dev/null +++ b/modules/nixos/home-manager/my/desktops/niri/module.nix @@ -0,0 +1,11 @@ +{ + ... +}: +{ + config = { + home-manager.sharedModules = [ + ./options.nix + ./config.nix + ]; + }; +} \ No newline at end of file diff --git a/modules/home-manager/my/desktops/niri/options.nix b/modules/nixos/home-manager/my/desktops/niri/options.nix similarity index 68% rename from modules/home-manager/my/desktops/niri/options.nix rename to modules/nixos/home-manager/my/desktops/niri/options.nix index 7c3d5c18..68821e95 100644 --- a/modules/home-manager/my/desktops/niri/options.nix +++ b/modules/nixos/home-manager/my/desktops/niri/options.nix @@ -1,5 +1,5 @@ { - osConfig, + nixosConfig, lib, ... }: @@ -7,7 +7,9 @@ options = { my.desktops.niri = { enable = lib.mkEnableOption "niri" // { - default = osConfig.my.desktops.niri.enable; + default = nixosConfig.my.desktops.niri.enable; + + readOnly = true; }; config = lib.mkOption { diff --git a/modules/home-manager/services/yubico/config.nix b/modules/nixos/home-manager/my/services/yubico/config.nix similarity index 73% rename from modules/home-manager/services/yubico/config.nix rename to modules/nixos/home-manager/my/services/yubico/config.nix index 25906624..721ecfac 100644 --- a/modules/home-manager/services/yubico/config.nix +++ b/modules/nixos/home-manager/my/services/yubico/config.nix @@ -1,20 +1,14 @@ { - osConfig, + nixosConfig, config, lib, pkgs, ... }: let - cfg = config.my.services.yubico; + cfg = nixosConfig.my.services.yubico; in { config = lib.mkIf cfg.enable { - assertions = [{ - assertion = osConfig.my.services.yubico.enable; - message = "Please enable my.services.yubico in your NixOS configuration"; - }]; - - my.persist.directories = [ { path = "~/.local/share/com.yubico.yubioath"; diff --git a/modules/nixos/home-manager/my/services/yubico/module.nix b/modules/nixos/home-manager/my/services/yubico/module.nix new file mode 100644 index 00000000..fa54126c --- /dev/null +++ b/modules/nixos/home-manager/my/services/yubico/module.nix @@ -0,0 +1,10 @@ +{ + ... +}: +{ + config = { + home-manager.sharedModules = [ + ./config.nix + ]; + }; +} \ No newline at end of file diff --git a/modules/home-manager/programs/nix/config.nix b/modules/nixos/home-manager/nix/config.nix similarity index 78% rename from modules/home-manager/programs/nix/config.nix rename to modules/nixos/home-manager/nix/config.nix index 88c36afe..5dd3f660 100644 --- a/modules/home-manager/programs/nix/config.nix +++ b/modules/nixos/home-manager/nix/config.nix @@ -1,10 +1,10 @@ { - config, + nixosConfig, lib, ... }: let - cfg = config.my.programs.nix; + cfg = nixosConfig.nix; in { config = lib.mkIf cfg.enable { my.persist.directories = [{ diff --git a/modules/nixos/home-manager/nix/module.nix b/modules/nixos/home-manager/nix/module.nix new file mode 100644 index 00000000..fa54126c --- /dev/null +++ b/modules/nixos/home-manager/nix/module.nix @@ -0,0 +1,10 @@ +{ + ... +}: +{ + config = { + home-manager.sharedModules = [ + ./config.nix + ]; + }; +} \ No newline at end of file diff --git a/modules/nixos/home-manager/programs/zsh/config.nix b/modules/nixos/home-manager/programs/zsh/config.nix new file mode 100644 index 00000000..6500772b --- /dev/null +++ b/modules/nixos/home-manager/programs/zsh/config.nix @@ -0,0 +1,15 @@ +{ + nixosConfig, + config, + lib, + pkgs, + ... +}: +let + cfg = nixosConfig.programs.zsh; + cfgUser = nixosConfig.users.users.${config.home.username}; +in { + config = lib.mkIf cfg.enable { + programs.zsh.enable = lib.mkForce (cfgUser.shell == pkgs.zsh); + }; +} \ No newline at end of file diff --git a/modules/nixos/home-manager/programs/zsh/module.nix b/modules/nixos/home-manager/programs/zsh/module.nix new file mode 100644 index 00000000..fa54126c --- /dev/null +++ b/modules/nixos/home-manager/programs/zsh/module.nix @@ -0,0 +1,10 @@ +{ + ... +}: +{ + config = { + home-manager.sharedModules = [ + ./config.nix + ]; + }; +} \ No newline at end of file diff --git a/modules/nixos/home-manager/services/pipewire/config.nix b/modules/nixos/home-manager/services/pipewire/config.nix new file mode 100644 index 00000000..5aa8b446 --- /dev/null +++ b/modules/nixos/home-manager/services/pipewire/config.nix @@ -0,0 +1,15 @@ +{ + nixosConfig, + lib, + ... +}: +let + cfg = nixosConfig.services.pipewire; +in { + config = lib.mkIf cfg.enable { + my.persist.directories = [{ + path = "~/.local/state/wireplumber"; + unique = true; + }]; + }; +} \ No newline at end of file diff --git a/modules/nixos/home-manager/services/pipewire/module.nix b/modules/nixos/home-manager/services/pipewire/module.nix new file mode 100644 index 00000000..fa54126c --- /dev/null +++ b/modules/nixos/home-manager/services/pipewire/module.nix @@ -0,0 +1,10 @@ +{ + ... +}: +{ + config = { + home-manager.sharedModules = [ + ./config.nix + ]; + }; +} \ No newline at end of file diff --git a/modules/nixos/my/desktops/niri/options.nix b/modules/nixos/my/desktops/niri/options.nix index d55dc415..c954727d 100644 --- a/modules/nixos/my/desktops/niri/options.nix +++ b/modules/nixos/my/desktops/niri/options.nix @@ -1,6 +1,5 @@ { lib, - pkgs, ... }: { diff --git a/modules/nixos/my/programs/powertop/package.nix b/modules/nixos/my/programs/powertop/package.nix index e7152f01..299f72d1 100644 --- a/modules/nixos/my/programs/powertop/package.nix +++ b/modules/nixos/my/programs/powertop/package.nix @@ -20,7 +20,7 @@ xorg, }: -stdenv.mkDerivation (finalAttrs: { +stdenv.mkDerivation { pname = "powertop"; version = "2.15-unstable-2025-06-27"; @@ -66,4 +66,4 @@ stdenv.mkDerivation (finalAttrs: { substituteInPlace src/calibrate/calibrate.cpp --replace-fail "/usr/bin/xset" "${lib.getExe xorg.xset}" substituteInPlace src/tuning/bluetooth.cpp --replace-fail "/usr/bin/hcitool" "hcitool" ''; -}) \ No newline at end of file +} \ No newline at end of file diff --git a/modules/nixos/nix/module.nix b/modules/nixos/nix/module.nix index 1a5f71d7..850930c2 100644 --- a/modules/nixos/nix/module.nix +++ b/modules/nixos/nix/module.nix @@ -15,15 +15,23 @@ let }) inputs); in { config = lib.mkIf cfg.enable (lib.mkMerge [ + { + # Overlay nixpkgs to use Lix as our default Nix derivation. + # + # This is a better way to propagate the Nix package change, as many + # derivations internally use `pkgs.nix` in some form. Rather than + # tracking state across the modules, we can overlay it here. + nixpkgs.overlays = [(final: prev: { + nix = final.lixPackageSets.latest.lix; + })]; + } { # Use github:viperML/nh as our "nix wrapper" program. programs.nh.enable = true; # Set the system Nix package to our custom wrapper, which provides # instant access to all `pkgs` and `lib` attributes. - nix.package = pkgs.callPackage ./package.nix { - nix = pkgs.lixPackageSets.latest.lix; - }; + nix.package = pkgs.callPackage ./package.nix {}; } { # Throttle the nix-daemon so it doesn't consume diff --git a/users/frontear/home/default.nix b/users/frontear/home/default.nix index 1c63748f..37ca600d 100644 --- a/users/frontear/home/default.nix +++ b/users/frontear/home/default.nix @@ -17,29 +17,7 @@ "ssh" = "TERM= ssh"; }; - programs.zsh = { - enable = true; - - history.save = 10000; - history.size = 10000; - - initContent = '' - PS1='%B%F{green}[%n@%m %1~]%(#.#.$)%F{white}%b ' - RPS1='%B%(?.%F{green}.%F{red})%?%f%b' - ''; - - autosuggestion = { - enable = true; - strategy = [ "history" ]; - }; - - syntaxHighlighting = { - enable = true; - highlighters = [ "main" "brackets" ]; - }; - }; - - my.programs = { + programs = { direnv = { enable = true; @@ -53,9 +31,7 @@ }; git = { - enable = true; - - config = { + extraConfig = { user.email = "contact@frontear.dev"; user.name = "Ali Rizvi"; user.signingKey = "4BC247743ACFF25E"; @@ -74,6 +50,28 @@ }; }; + zsh = { + history.save = 10000; + history.size = 10000; + + initContent = '' + PS1='%B%F{green}[%n@%m %1~]%(#.#.$)%F{white}%b ' + RPS1='%B%(?.%F{green}.%F{red})%?%f%b' + ''; + + autosuggestion = { + enable = true; + strategy = [ "history" ]; + }; + + syntaxHighlighting = { + enable = true; + highlighters = [ "main" "brackets" ]; + }; + }; + }; + + my.programs = { gnupg = { enable = true; diff --git a/users/frontear/home/desktops/niri/programs/waybar/default.nix b/users/frontear/home/desktops/niri/programs/waybar/default.nix index 30be112a..041b8d47 100644 --- a/users/frontear/home/desktops/niri/programs/waybar/default.nix +++ b/users/frontear/home/desktops/niri/programs/waybar/default.nix @@ -1,7 +1,6 @@ { config, lib, - pkgs, ... }: let From 4ca1dfb04797ee5a17a695bd7c96e8ec753460c3 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Sun, 21 Sep 2025 00:49:14 -0400 Subject: [PATCH 04/22] feat: improve Niri desktop environment Firstly, we've finally added a proper polkit agent. Sway never had one, Niri is the first. I chose to use GNOME's agent since Niri already uses a lot of GNOME/GTK things as defaults and/or recommendations. Second, I overrode the Niri XDG Desktop Portal configuration to accept any file manager for the "file chooser" dialog. The GNOME Portal, which was preferred, enforced Nautilus, and I don't use Nautilus. Rather, I use Thunar, so I needed to overwrite this. Lastly, I added a new keybind Mod+L to lock the screen, and I updated the Mod+{Down,Up} and Mod+Shift+{Down,Up} keybinds to move workspaces when possible. I wanted to try and bend Niri to make my workspaces feel static, but I'll be flexible and try to make this dynamic workspace stuff work. --- .../nixos/home-manager/my/desktops/niri/config.nix | 4 ++++ modules/nixos/my/desktops/niri/config.nix | 14 ++++++++++++++ .../frontear/home/desktops/niri/fs/niri/config.kdl | 9 +++++---- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/modules/nixos/home-manager/my/desktops/niri/config.nix b/modules/nixos/home-manager/my/desktops/niri/config.nix index a77265ef..538d26ac 100644 --- a/modules/nixos/home-manager/my/desktops/niri/config.nix +++ b/modules/nixos/home-manager/my/desktops/niri/config.nix @@ -7,6 +7,10 @@ let cfg = config.my.desktops.niri; in { config = lib.mkIf cfg.enable { + # Since Niri already uses a lot of GNOME things, let's pull the GNOME + # polkit authentication agent as well. + services.polkit-gnome.enable = true; + xdg.configFile."niri/config.kdl".source = cfg.config; }; } \ No newline at end of file diff --git a/modules/nixos/my/desktops/niri/config.nix b/modules/nixos/my/desktops/niri/config.nix index f866e0c7..83aec15e 100644 --- a/modules/nixos/my/desktops/niri/config.nix +++ b/modules/nixos/my/desktops/niri/config.nix @@ -33,5 +33,19 @@ in { programs.niri = { enable = true; }; + + # This is being overriden from what Niri provides by default so that it can + # support other file-managers besides Nautilus, since the GNOME Portal only + # defaults to Nautilus for the file chooser dialog. + # + # see: https://github.com/YaLTeR/niri/blob/a1dccedbb72da372d2a8a84022f37ccaa4d4a6e6/resources/niri-portals.conf + xdg.portal.config.niri = { + default = [ "gnome" "gtk" ]; + + "org.freedesktop.impl.portal.Access" = [ "gtk" ]; + "org.freedesktop.impl.portal.FileChooser" = [ "gtk" ]; + "org.freedesktop.impl.portal.Notification" = [ "gtk" ]; + "org.freedesktop.impl.portal.Secret" = [ "gnome-keyring" ]; + }; }; } \ No newline at end of file diff --git a/users/frontear/home/desktops/niri/fs/niri/config.kdl b/users/frontear/home/desktops/niri/fs/niri/config.kdl index aaa7642b..15d1c269 100644 --- a/users/frontear/home/desktops/niri/fs/niri/config.kdl +++ b/users/frontear/home/desktops/niri/fs/niri/config.kdl @@ -78,6 +78,7 @@ binds { Mod+BackSpace repeat=false { close-window; } Mod+Return repeat=false { spawn-sh "footclient"; } Mod+E repeat=false { spawn-sh "rofi -show drun -run-command 'app2unit -- {cmd}'"; } + Mod+L repeat=false { spawn-sh "swaylock"; } F11 repeat=false { fullscreen-window; } Mod+F repeat=false { maximize-column; } @@ -85,13 +86,13 @@ binds { Mod+Tab repeat=false { toggle-overview; } Mod+Left { focus-column-left; } - Mod+Down { focus-window-down; } - Mod+Up { focus-window-up; } + Mod+Down { focus-window-or-workspace-down; } + Mod+Up { focus-window-or-workspace-up; } Mod+Right { focus-column-right; } Mod+Shift+Left { move-column-left; } - Mod+Shift+Down { move-window-down; } - Mod+Shift+Up { move-window-up; } + Mod+Shift+Down { move-window-down-or-to-workspace-down; } + Mod+Shift+Up { move-window-up-or-to-workspace-up; } Mod+Shift+Right { move-column-right; } Mod+1 { focus-workspace 1; } From ba2983fdb0a57d738cd7d0c54d1103738d871f75 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Sun, 21 Sep 2025 11:38:18 -0400 Subject: [PATCH 05/22] feat: drop the `fs` derivation, write configs in Nix, new programs The config is still just a big chunk of lines, but it allows me to interop values from the rest of the config into it. I've also taken the liberty to re-organize a few modules, as well as add 2 new programs to my little bar at the bottom, Legcord with Discord's icon, and OBS Studio. --- .../programs/obs-studio/module.nix | 15 ++ .../home-manager/my/desktops/niri/config.nix | 2 +- .../home-manager/my/desktops/niri/options.nix | 4 +- users/frontear/home/desktops/niri/default.nix | 142 +++++++++++++++--- .../home/desktops/niri/fs/default.nix | 9 -- .../home/desktops/niri/fs/niri/config.kdl | 119 --------------- .../home/desktops/niri/fs/niri/default.nix | 16 -- .../home/desktops/niri/my/default.nix | 8 + .../desktops/niri/my/programs/default.nix | 11 ++ .../niri/my/programs/element/default.nix | 14 ++ .../niri/my/programs/legcord/default.nix | 29 ++++ .../programs/microsoft-edge/default.nix | 0 .../niri/my/programs/swayosd/default.nix | 18 +++ .../programs/swayosd/fs}/default.nix | 0 .../programs/swayosd/fs}/style.scss | 0 .../home/desktops/niri/programs/default.nix | 4 +- .../niri/programs/obs-studio/default.nix | 37 +++++ .../backgrounds => stylix/assets}/bg_dark.jpg | Bin .../home/desktops/niri/stylix/default.nix | 3 +- 19 files changed, 261 insertions(+), 170 deletions(-) create mode 100644 modules/home-manager/programs/obs-studio/module.nix delete mode 100644 users/frontear/home/desktops/niri/fs/default.nix delete mode 100644 users/frontear/home/desktops/niri/fs/niri/config.kdl delete mode 100644 users/frontear/home/desktops/niri/fs/niri/default.nix create mode 100644 users/frontear/home/desktops/niri/my/default.nix create mode 100644 users/frontear/home/desktops/niri/my/programs/default.nix create mode 100644 users/frontear/home/desktops/niri/my/programs/element/default.nix create mode 100644 users/frontear/home/desktops/niri/my/programs/legcord/default.nix rename users/frontear/home/desktops/niri/{ => my}/programs/microsoft-edge/default.nix (100%) create mode 100644 users/frontear/home/desktops/niri/my/programs/swayosd/default.nix rename users/frontear/home/desktops/niri/{fs/swayosd => my/programs/swayosd/fs}/default.nix (100%) rename users/frontear/home/desktops/niri/{fs/swayosd => my/programs/swayosd/fs}/style.scss (100%) create mode 100644 users/frontear/home/desktops/niri/programs/obs-studio/default.nix rename users/frontear/home/desktops/niri/{fs/niri/backgrounds => stylix/assets}/bg_dark.jpg (100%) diff --git a/modules/home-manager/programs/obs-studio/module.nix b/modules/home-manager/programs/obs-studio/module.nix new file mode 100644 index 00000000..8cad3e33 --- /dev/null +++ b/modules/home-manager/programs/obs-studio/module.nix @@ -0,0 +1,15 @@ +{ + config, + lib, + ... +}: +let + cfg = config.programs.obs-studio; +in { + config = lib.mkIf cfg.enable { + my.persist.directories = [{ + path = "~/.config/obs-studio"; + unique = true; + }]; + }; +} \ No newline at end of file diff --git a/modules/nixos/home-manager/my/desktops/niri/config.nix b/modules/nixos/home-manager/my/desktops/niri/config.nix index 538d26ac..f9553322 100644 --- a/modules/nixos/home-manager/my/desktops/niri/config.nix +++ b/modules/nixos/home-manager/my/desktops/niri/config.nix @@ -11,6 +11,6 @@ in { # polkit authentication agent as well. services.polkit-gnome.enable = true; - xdg.configFile."niri/config.kdl".source = cfg.config; + xdg.configFile."niri/config.kdl".text = cfg.settings; }; } \ No newline at end of file diff --git a/modules/nixos/home-manager/my/desktops/niri/options.nix b/modules/nixos/home-manager/my/desktops/niri/options.nix index 68821e95..716a7a43 100644 --- a/modules/nixos/home-manager/my/desktops/niri/options.nix +++ b/modules/nixos/home-manager/my/desktops/niri/options.nix @@ -12,8 +12,8 @@ readOnly = true; }; - config = lib.mkOption { - type = with lib.types; path; + settings = lib.mkOption { + type = with lib.types; lines; }; }; }; diff --git a/users/frontear/home/desktops/niri/default.nix b/users/frontear/home/desktops/niri/default.nix index 449968cc..b481e5f0 100644 --- a/users/frontear/home/desktops/niri/default.nix +++ b/users/frontear/home/desktops/niri/default.nix @@ -6,43 +6,147 @@ }: let cfg = config.my.desktops.niri; - fs = import ./fs { - inherit (pkgs) callPackage; - }; in { imports = [ - ./stylix + ./my ./programs ./services + ./stylix ]; config = lib.mkIf cfg.enable { - my.desktops.niri.config = "${fs.niri}/config.kdl"; + my.desktops.niri = { + settings = '' + output "eDP-1" { + scale 1.5 + } + + input { + keyboard { + repeat-delay 250 + repeat-rate 25 + } + + touchpad { + accel-profile "adaptive" + click-method "clickfinger" + drag false + dwt + dwtp + // left-handed + // middle-emulation + // natural-scroll + accel-speed 0.0 + scroll-factor 1.0 + scroll-method "two-finger" + tap + tap-button-map "left-middle-right" + } + } + + screenshot-path "~/Pictures/Screenshots/%Y-%m/%Y-%m-%d_%Hh%Mm%Ss.png" + hotkey-overlay { skip-at-startup; } + + cursor { + xcursor-theme "${config.stylix.cursor.name}" + xcursor-size ${toString config.stylix.cursor.size} + } + + + spawn-sh-at-startup "${lib.getExe pkgs.wl-clip-persist} --clipboard regular" + spawn-sh-at-startup "${lib.getExe pkgs.swaybg} -i '${config.stylix.image}' -m '${config.stylix.imageScalingMode}'" + + + // rounded corners always + prefer-no-csd + window-rule { + geometry-corner-radius 8 + clip-to-geometry true + } + + layout { + // emulates inner-gap of 2, and outer-gap of 4 + gaps 2 + struts { left 2; right 2; top 2; bottom 2; } + + focus-ring { off; } + + border { + width 2 + + active-color "#ff000055" + inactive-color "#595959aa" + } + } + - my.programs = { - swayosd = { - enable = true; + binds { + XF86AudioMute allow-when-locked=true repeat=false { spawn-sh "swayosd-client --output-volume mute-toggle"; } + XF86AudioLowerVolume allow-when-locked=true { spawn-sh "swayosd-client --output-volume -5"; } + XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "swayosd-client --output-volume +5"; } - style = "${fs.swayosd}/style.css"; - }; + XF86MonBrightnessDown allow-when-locked=true { spawn-sh "swayosd-client --brightness -5"; } + XF86MonBrightnessUp allow-when-locked=true { spawn-sh "swayosd-client --brightness +5"; } + + + Print repeat=false { screenshot; } + + + Ctrl+Alt+Delete repeat=false { quit; } + + Mod+BackSpace repeat=false { close-window; } + Mod+Return repeat=false { spawn-sh "footclient"; } + Mod+E repeat=false { spawn-sh "rofi -show drun -run-command 'app2unit -- {cmd}'"; } + Mod+L repeat=false { spawn-sh "swaylock"; } + + F11 repeat=false { fullscreen-window; } + Mod+F repeat=false { maximize-column; } + + Mod+Tab repeat=false { toggle-overview; } + + Mod+Left { focus-column-left; } + Mod+Down { focus-window-or-workspace-down; } + Mod+Up { focus-window-or-workspace-up; } + Mod+Right { focus-column-right; } + + Mod+Shift+Left { move-column-left; } + Mod+Shift+Down { move-window-down-or-to-workspace-down; } + Mod+Shift+Up { move-window-up-or-to-workspace-up; } + Mod+Shift+Right { move-column-right; } + + Mod+1 { focus-workspace 1; } + Mod+2 { focus-workspace 2; } + Mod+3 { focus-workspace 3; } + Mod+4 { focus-workspace 4; } + Mod+5 { focus-workspace 5; } + Mod+6 { focus-workspace 6; } + Mod+7 { focus-workspace 7; } + Mod+8 { focus-workspace 8; } + Mod+9 { focus-workspace 9; } + Mod+0 { focus-workspace 10; } + + Mod+Shift+1 { move-column-to-workspace 1; } + Mod+Shift+2 { move-column-to-workspace 2; } + Mod+Shift+3 { move-column-to-workspace 3; } + Mod+Shift+4 { move-column-to-workspace 4; } + Mod+Shift+5 { move-column-to-workspace 5; } + Mod+Shift+6 { move-column-to-workspace 6; } + Mod+Shift+7 { move-column-to-workspace 7; } + Mod+Shift+8 { move-column-to-workspace 8; } + Mod+Shift+9 { move-column-to-workspace 9; } + Mod+Shift+0 { move-column-to-workspace 10; } + } + ''; }; + # TODO: de-duplicate fontconfig and `nerd-fonts.symbols-only` snippets fonts.fontconfig.enable = true; home.packages = with pkgs; [ nerd-fonts.symbols-only app2unit - swaybg - wl-clip-persist ]; - - - my.programs = { - element.enable = true; - - legcord.enable = true; - }; }; } \ No newline at end of file diff --git a/users/frontear/home/desktops/niri/fs/default.nix b/users/frontear/home/desktops/niri/fs/default.nix deleted file mode 100644 index 23d0e957..00000000 --- a/users/frontear/home/desktops/niri/fs/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - callPackage, -}: -{ - niri = callPackage ./niri {}; - - - swayosd = callPackage ./swayosd {}; -} \ No newline at end of file diff --git a/users/frontear/home/desktops/niri/fs/niri/config.kdl b/users/frontear/home/desktops/niri/fs/niri/config.kdl deleted file mode 100644 index 15d1c269..00000000 --- a/users/frontear/home/desktops/niri/fs/niri/config.kdl +++ /dev/null @@ -1,119 +0,0 @@ -output "eDP-1" { - scale 1.5 -} - -input { - keyboard { - repeat-delay 250 - repeat-rate 25 - } - - touchpad { - accel-profile "adaptive" - click-method "clickfinger" - drag false - dwt - dwtp - // left-handed - // middle-emulation - // natural-scroll - accel-speed 0.0 - scroll-factor 1.0 - scroll-method "two-finger" - tap - tap-button-map "left-middle-right" - } -} - -screenshot-path "~/Pictures/Screenshots/%Y-%m/%Y-%m-%d_%Hh%Mm%Ss.png" -hotkey-overlay { skip-at-startup; } - -cursor { - xcursor-theme "Bibata-Modern-Classic" - xcursor-size 16 -} - - -spawn-sh-at-startup "wl-clip-persist --clipboard regular" -spawn-sh-at-startup "swaybg -i '@backgrounds@/bg_dark.jpg' -m 'fit'" - - -// rounded corners always -prefer-no-csd -window-rule { - geometry-corner-radius 8 - clip-to-geometry true -} - -layout { - // emulates inner-gap of 2, and outer-gap of 4 - gaps 2 - struts { left 2; right 2; top 2; bottom 2; } - - focus-ring { off; } - - border { - width 2 - - active-color "#ff000055" - inactive-color "#595959aa" - } -} - - -binds { - XF86AudioMute allow-when-locked=true repeat=false { spawn-sh "swayosd-client --output-volume mute-toggle"; } - XF86AudioLowerVolume allow-when-locked=true { spawn-sh "swayosd-client --output-volume -5"; } - XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "swayosd-client --output-volume +5"; } - - XF86MonBrightnessDown allow-when-locked=true { spawn-sh "swayosd-client --brightness -5"; } - XF86MonBrightnessUp allow-when-locked=true { spawn-sh "swayosd-client --brightness +5"; } - - - Print repeat=false { screenshot; } - - - Ctrl+Alt+Delete repeat=false { quit; } - - Mod+BackSpace repeat=false { close-window; } - Mod+Return repeat=false { spawn-sh "footclient"; } - Mod+E repeat=false { spawn-sh "rofi -show drun -run-command 'app2unit -- {cmd}'"; } - Mod+L repeat=false { spawn-sh "swaylock"; } - - F11 repeat=false { fullscreen-window; } - Mod+F repeat=false { maximize-column; } - - Mod+Tab repeat=false { toggle-overview; } - - Mod+Left { focus-column-left; } - Mod+Down { focus-window-or-workspace-down; } - Mod+Up { focus-window-or-workspace-up; } - Mod+Right { focus-column-right; } - - Mod+Shift+Left { move-column-left; } - Mod+Shift+Down { move-window-down-or-to-workspace-down; } - Mod+Shift+Up { move-window-up-or-to-workspace-up; } - Mod+Shift+Right { move-column-right; } - - Mod+1 { focus-workspace 1; } - Mod+2 { focus-workspace 2; } - Mod+3 { focus-workspace 3; } - Mod+4 { focus-workspace 4; } - Mod+5 { focus-workspace 5; } - Mod+6 { focus-workspace 6; } - Mod+7 { focus-workspace 7; } - Mod+8 { focus-workspace 8; } - Mod+9 { focus-workspace 9; } - Mod+0 { focus-workspace 10; } - - Mod+Shift+1 { move-column-to-workspace 1; } - Mod+Shift+2 { move-column-to-workspace 2; } - Mod+Shift+3 { move-column-to-workspace 3; } - Mod+Shift+4 { move-column-to-workspace 4; } - Mod+Shift+5 { move-column-to-workspace 5; } - Mod+Shift+6 { move-column-to-workspace 6; } - Mod+Shift+7 { move-column-to-workspace 7; } - Mod+Shift+8 { move-column-to-workspace 8; } - Mod+Shift+9 { move-column-to-workspace 9; } - Mod+Shift+0 { move-column-to-workspace 10; } -} \ No newline at end of file diff --git a/users/frontear/home/desktops/niri/fs/niri/default.nix b/users/frontear/home/desktops/niri/fs/niri/default.nix deleted file mode 100644 index e3ff9322..00000000 --- a/users/frontear/home/desktops/niri/fs/niri/default.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - lib, - runCommandNoCCLocal, -}: -runCommandNoCCLocal "fs-niri" { - src = with lib.fileset; toSource { - root = ./.; - fileset = difference ./. ./default.nix; - }; -} '' - install -Dm644 -t $out/backgrounds $src/backgrounds/* - install -Dm644 {$src,$out}/config.kdl - - substituteInPlace $out/config.kdl \ - --subst-var-by backgrounds $out/backgrounds -'' \ No newline at end of file diff --git a/users/frontear/home/desktops/niri/my/default.nix b/users/frontear/home/desktops/niri/my/default.nix new file mode 100644 index 00000000..766a20e0 --- /dev/null +++ b/users/frontear/home/desktops/niri/my/default.nix @@ -0,0 +1,8 @@ +{ + ... +}: +{ + imports = [ + ./programs + ]; +} \ No newline at end of file diff --git a/users/frontear/home/desktops/niri/my/programs/default.nix b/users/frontear/home/desktops/niri/my/programs/default.nix new file mode 100644 index 00000000..c9c416b7 --- /dev/null +++ b/users/frontear/home/desktops/niri/my/programs/default.nix @@ -0,0 +1,11 @@ +{ + ... +}: +{ + imports = [ + ./element + ./legcord + ./microsoft-edge + ./swayosd + ]; +} \ No newline at end of file diff --git a/users/frontear/home/desktops/niri/my/programs/element/default.nix b/users/frontear/home/desktops/niri/my/programs/element/default.nix new file mode 100644 index 00000000..f75a65b3 --- /dev/null +++ b/users/frontear/home/desktops/niri/my/programs/element/default.nix @@ -0,0 +1,14 @@ +{ + config, + lib, + ... +}: +let + cfg = config.my.desktops.niri; +in { + config = lib.mkIf cfg.enable { + my.programs.element = { + enable = true; + }; + }; +} \ No newline at end of file diff --git a/users/frontear/home/desktops/niri/my/programs/legcord/default.nix b/users/frontear/home/desktops/niri/my/programs/legcord/default.nix new file mode 100644 index 00000000..97e755a8 --- /dev/null +++ b/users/frontear/home/desktops/niri/my/programs/legcord/default.nix @@ -0,0 +1,29 @@ +{ + config, + lib, + pkgs, + ... +}: +let + cfg = config.my.desktops.niri; +in { + config = lib.mkIf cfg.enable { + my.programs.legcord.enable = true; + + programs.waybar = { + settings.bottom = { + modules-center = lib.mkOrder 4 [ + "cffi/discord" + ]; + + "cffi/discord" = { + module_path = pkgs.frontear.waybar-icon.lib; + + icon-name = "discord"; + on-click = "app2unit legcord.desktop"; + tooltip = false; + }; + }; + }; + }; +} \ No newline at end of file diff --git a/users/frontear/home/desktops/niri/programs/microsoft-edge/default.nix b/users/frontear/home/desktops/niri/my/programs/microsoft-edge/default.nix similarity index 100% rename from users/frontear/home/desktops/niri/programs/microsoft-edge/default.nix rename to users/frontear/home/desktops/niri/my/programs/microsoft-edge/default.nix diff --git a/users/frontear/home/desktops/niri/my/programs/swayosd/default.nix b/users/frontear/home/desktops/niri/my/programs/swayosd/default.nix new file mode 100644 index 00000000..2974d89d --- /dev/null +++ b/users/frontear/home/desktops/niri/my/programs/swayosd/default.nix @@ -0,0 +1,18 @@ +{ + config, + lib, + pkgs, + ... +}: +let + cfg = config.my.desktops.niri; + fs = pkgs.callPackage ./fs {}; +in { + config = lib.mkIf cfg.enable { + my.programs.swayosd = { + enable = true; + + style = "${fs}/style.css"; + }; + }; +} \ No newline at end of file diff --git a/users/frontear/home/desktops/niri/fs/swayosd/default.nix b/users/frontear/home/desktops/niri/my/programs/swayosd/fs/default.nix similarity index 100% rename from users/frontear/home/desktops/niri/fs/swayosd/default.nix rename to users/frontear/home/desktops/niri/my/programs/swayosd/fs/default.nix diff --git a/users/frontear/home/desktops/niri/fs/swayosd/style.scss b/users/frontear/home/desktops/niri/my/programs/swayosd/fs/style.scss similarity index 100% rename from users/frontear/home/desktops/niri/fs/swayosd/style.scss rename to users/frontear/home/desktops/niri/my/programs/swayosd/fs/style.scss diff --git a/users/frontear/home/desktops/niri/programs/default.nix b/users/frontear/home/desktops/niri/programs/default.nix index 02bd4136..4f2650cd 100644 --- a/users/frontear/home/desktops/niri/programs/default.nix +++ b/users/frontear/home/desktops/niri/programs/default.nix @@ -4,11 +4,11 @@ { imports = [ ./foot - ./microsoft-edge ./mission-center - ./thunar + ./obs-studio ./rofi ./swaylock + ./thunar ./waybar ]; } \ No newline at end of file diff --git a/users/frontear/home/desktops/niri/programs/obs-studio/default.nix b/users/frontear/home/desktops/niri/programs/obs-studio/default.nix new file mode 100644 index 00000000..47d2a27b --- /dev/null +++ b/users/frontear/home/desktops/niri/programs/obs-studio/default.nix @@ -0,0 +1,37 @@ +{ + config, + lib, + pkgs, + ... +}: +let + cfg = config.my.desktops.niri; +in { + config = lib.mkIf cfg.enable { + programs.obs-studio.enable = true; + + programs.waybar = { + settings.bottom = { + modules-center = lib.mkOrder 5 [ + "cffi/recorder" + ]; + + "cffi/recorder" = { + module_path = pkgs.frontear.waybar-icon.lib; + + icon-name = "com.obsproject.Studio"; + on-click = "app2unit com.obsproject.Studio.desktop"; + tooltip = false; + }; + }; + }; + + xdg.mimeApps = { + enable = true; + + defaultApplications = { + "application/pdf" = [ "com.microsoft.Edge.desktop" ]; + }; + }; + }; +} \ No newline at end of file diff --git a/users/frontear/home/desktops/niri/fs/niri/backgrounds/bg_dark.jpg b/users/frontear/home/desktops/niri/stylix/assets/bg_dark.jpg similarity index 100% rename from users/frontear/home/desktops/niri/fs/niri/backgrounds/bg_dark.jpg rename to users/frontear/home/desktops/niri/stylix/assets/bg_dark.jpg diff --git a/users/frontear/home/desktops/niri/stylix/default.nix b/users/frontear/home/desktops/niri/stylix/default.nix index 80d965fc..55cf3ffd 100644 --- a/users/frontear/home/desktops/niri/stylix/default.nix +++ b/users/frontear/home/desktops/niri/stylix/default.nix @@ -55,8 +55,7 @@ in { light = "Papirus-Light"; }; - # TODO: move this path to this folder - image = ../fs/niri/backgrounds/bg_dark.jpg; + image = ./assets/bg_dark.jpg; imageScalingMode = "fit"; polarity = "dark"; From 1f26a3790df9d9ed7a4074e8d1a71072ee2681ee Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Sun, 21 Sep 2025 12:34:14 -0400 Subject: [PATCH 06/22] feat: setup automatic screen locking for multiple hardware events This makes it feel closer to a real desktop experience. --- users/frontear/home/desktops/niri/default.nix | 8 ++++++-- .../home/desktops/niri/services/swayidle/default.nix | 7 +++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/users/frontear/home/desktops/niri/default.nix b/users/frontear/home/desktops/niri/default.nix index b481e5f0..d8c76131 100644 --- a/users/frontear/home/desktops/niri/default.nix +++ b/users/frontear/home/desktops/niri/default.nix @@ -52,6 +52,10 @@ in { xcursor-size ${toString config.stylix.cursor.size} } + switch-events { + lid-close { spawn "swaylock"; } + } + spawn-sh-at-startup "${lib.getExe pkgs.wl-clip-persist} --clipboard regular" spawn-sh-at-startup "${lib.getExe pkgs.swaybg} -i '${config.stylix.image}' -m '${config.stylix.imageScalingMode}'" @@ -95,9 +99,9 @@ in { Ctrl+Alt+Delete repeat=false { quit; } Mod+BackSpace repeat=false { close-window; } - Mod+Return repeat=false { spawn-sh "footclient"; } + Mod+Return repeat=false { spawn "footclient"; } Mod+E repeat=false { spawn-sh "rofi -show drun -run-command 'app2unit -- {cmd}'"; } - Mod+L repeat=false { spawn-sh "swaylock"; } + Mod+L repeat=false { spawn "swaylock"; } F11 repeat=false { fullscreen-window; } Mod+F repeat=false { maximize-column; } diff --git a/users/frontear/home/desktops/niri/services/swayidle/default.nix b/users/frontear/home/desktops/niri/services/swayidle/default.nix index bc107e37..6ef4fbe4 100644 --- a/users/frontear/home/desktops/niri/services/swayidle/default.nix +++ b/users/frontear/home/desktops/niri/services/swayidle/default.nix @@ -11,6 +11,13 @@ in { services.swayidle = { enable = true; + events = [ + { + event = "before-sleep"; + command = "${lib.getExe' config.programs.swaylock.package "swaylock"}"; + } + ]; + timeouts = [ { timeout = 60 * 2; From a04108bd54d33437d2a1dc482971dc384422e815 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Sun, 21 Sep 2025 13:27:44 -0400 Subject: [PATCH 07/22] feat: fix benchmark workflow not triggering on PR to master I've had to manually start it via `workflow_dispatch`, which is kind of inconvenient. --- .github/workflows/benchmark-eval.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/benchmark-eval.yml b/.github/workflows/benchmark-eval.yml index f4d20df3..118ca4f1 100644 --- a/.github/workflows/benchmark-eval.yml +++ b/.github/workflows/benchmark-eval.yml @@ -2,12 +2,14 @@ name: Benchmark Evaluation Speed on: workflow_dispatch: - push: - branches: - - master + pull_request: + types: + - closed jobs: benchmark: + if: github.event.pull_request.merged == true + name: Benchmark NixOS Configuration runs-on: ubuntu-latest steps: From 3df95685a4f39548846cb5e20d593513b0447c7e Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Sun, 21 Sep 2025 14:17:19 -0400 Subject: [PATCH 08/22] feat: persist gnome-keyring secrets --- .../services/gnome/gnome-keyring/config.nix | 15 +++++++++++++++ .../services/gnome/gnome-keyring/module.nix | 10 ++++++++++ modules/nixos/my/desktops/niri/config.nix | 1 + 3 files changed, 26 insertions(+) create mode 100644 modules/nixos/home-manager/services/gnome/gnome-keyring/config.nix create mode 100644 modules/nixos/home-manager/services/gnome/gnome-keyring/module.nix diff --git a/modules/nixos/home-manager/services/gnome/gnome-keyring/config.nix b/modules/nixos/home-manager/services/gnome/gnome-keyring/config.nix new file mode 100644 index 00000000..cf8bb97e --- /dev/null +++ b/modules/nixos/home-manager/services/gnome/gnome-keyring/config.nix @@ -0,0 +1,15 @@ +{ + nixosConfig, + lib, + ... +}: +let + cfg = nixosConfig.services.gnome.gnome-keyring; +in { + config = lib.mkIf cfg.enable { + my.persist.directories = [{ + path = "~/.local/share/keyrings"; + unique = true; + }]; + }; +} \ No newline at end of file diff --git a/modules/nixos/home-manager/services/gnome/gnome-keyring/module.nix b/modules/nixos/home-manager/services/gnome/gnome-keyring/module.nix new file mode 100644 index 00000000..fa54126c --- /dev/null +++ b/modules/nixos/home-manager/services/gnome/gnome-keyring/module.nix @@ -0,0 +1,10 @@ +{ + ... +}: +{ + config = { + home-manager.sharedModules = [ + ./config.nix + ]; + }; +} \ No newline at end of file diff --git a/modules/nixos/my/desktops/niri/config.nix b/modules/nixos/my/desktops/niri/config.nix index 83aec15e..faea64da 100644 --- a/modules/nixos/my/desktops/niri/config.nix +++ b/modules/nixos/my/desktops/niri/config.nix @@ -9,6 +9,7 @@ let in { config = lib.mkIf cfg.enable { networking.networkmanager.enable = true; + services.gnome.gnome-keyring.enable = true; services.pipewire.enable = true; From 89f12a79b42dc3306f0710fad391886570bec7bb Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Sun, 21 Sep 2025 14:38:53 -0400 Subject: [PATCH 09/22] feat: make some windows maximized by default --- users/frontear/home/desktops/niri/default.nix | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/users/frontear/home/desktops/niri/default.nix b/users/frontear/home/desktops/niri/default.nix index d8c76131..54fdfb51 100644 --- a/users/frontear/home/desktops/niri/default.nix +++ b/users/frontear/home/desktops/niri/default.nix @@ -84,6 +84,17 @@ in { } + window-rule { + // matches on any of the following + match app-id="code" + match app-id="Element" + match app-id="legcord" + match app-id="microsoft-edge" + + open-maximized true + } + + binds { XF86AudioMute allow-when-locked=true repeat=false { spawn-sh "swayosd-client --output-volume mute-toggle"; } XF86AudioLowerVolume allow-when-locked=true { spawn-sh "swayosd-client --output-volume -5"; } From a44c0a2fdfb9361f860a9d7883917a45dc706be4 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Tue, 23 Sep 2025 19:21:56 -0400 Subject: [PATCH 10/22] feat: fix `yubioath-flutter` failing to load You may notice that my GPG public key has slightly changed. Long story short, my subkeys expired and during the time that I took to renew them, I decided to delete my old identity off of the key. I made this change gracefully, by keeping both identities for almost a year before now erasing the old one. Going forward, this is my one and only official identity for online purposes. --- .../my/services/yubico/config.nix | 11 ++- .../my/services/yubico/yubikey-manager.nix | 73 +++++++++++++++++++ 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 modules/nixos/home-manager/my/services/yubico/yubikey-manager.nix diff --git a/modules/nixos/home-manager/my/services/yubico/config.nix b/modules/nixos/home-manager/my/services/yubico/config.nix index 721ecfac..8e78f551 100644 --- a/modules/nixos/home-manager/my/services/yubico/config.nix +++ b/modules/nixos/home-manager/my/services/yubico/config.nix @@ -7,6 +7,15 @@ }: let cfg = nixosConfig.my.services.yubico; + + # Temporary extension to `pkgs` to fix an upstream incompatibility between + # `yubikey-manager` and `yubioath-flutter`. + # + # TODO: drop with https://github.com/NixOS/nixpkgs/issues/442315 + pkgs' = pkgs.extend (final: prev: { + # from: https://github.com/NixOS/nixpkgs/blob/3a75333d2d9e9114e0d8223f8bcd9d3b32c6401f/pkgs/by-name/yu/yubikey-manager/package.nix + yubikey-manager = prev.callPackage ./yubikey-manager.nix {}; + }); in { config = lib.mkIf cfg.enable { my.persist.directories = [ @@ -20,7 +29,7 @@ in { } ]; - home.packages = with pkgs; [ + home.packages = with pkgs'; [ yubikey-manager yubioath-flutter ]; diff --git a/modules/nixos/home-manager/my/services/yubico/yubikey-manager.nix b/modules/nixos/home-manager/my/services/yubico/yubikey-manager.nix new file mode 100644 index 00000000..1e68a75d --- /dev/null +++ b/modules/nixos/home-manager/my/services/yubico/yubikey-manager.nix @@ -0,0 +1,73 @@ +{ + lib, + stdenv, + fetchFromGitHub, + python3Packages, + installShellFiles, + procps, +}: + +python3Packages.buildPythonPackage rec { + pname = "yubikey-manager"; + version = "5.7.2"; + pyproject = true; + + src = fetchFromGitHub { + owner = "Yubico"; + repo = "yubikey-manager"; + tag = version; + hash = "sha256-dgOi9gJ7jO3+EjZQjHfx+KDsBtj6b4JWR3Bp9xWM6FI="; + }; + + postPatch = '' + substituteInPlace "ykman/pcsc/__init__.py" \ + --replace 'pkill' '${if stdenv.hostPlatform.isLinux then procps else "/usr"}/bin/pkill' + ''; + + nativeBuildInputs = with python3Packages; [ + poetry-core + installShellFiles + ]; + + propagatedBuildInputs = with python3Packages; [ + cryptography + pyscard + fido2 + click + keyring + ]; + + pythonRelaxDeps = [ + "keyring" + ]; + + postInstall = '' + installManPage man/ykman.1 + + installShellCompletion --cmd ykman \ + --bash <(_YKMAN_COMPLETE=bash_source "$out/bin/ykman") \ + --zsh <(_YKMAN_COMPLETE=zsh_source "$out/bin/ykman") \ + --fish <(_YKMAN_COMPLETE=fish_source "$out/bin/ykman") \ + ''; + + nativeCheckInputs = with python3Packages; [ + pytestCheckHook + makefun + ]; + + meta = { + homepage = "https://developers.yubico.com/yubikey-manager"; + changelog = "https://github.com/Yubico/yubikey-manager/releases/tag/${src.tag}"; + description = "Command line tool for configuring any YubiKey over all USB transports"; + + license = lib.licenses.bsd2; + platforms = lib.platforms.unix; + maintainers = with lib.maintainers; [ + benley + lassulus + pinpox + nickcao + ]; + mainProgram = "ykman"; + }; +} \ No newline at end of file From 5477364dd6743150ff4400327a679e016c9ff4b9 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Tue, 23 Sep 2025 22:29:36 -0400 Subject: [PATCH 11/22] feat: make `wl-clip-persist` die immediately instead of forever waiting This has become default behaviour starting from v0.5.0, which has landed in `nixpkgs/master` and should end up in `nixos-unstable` soon. --- users/frontear/home/desktops/niri/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/users/frontear/home/desktops/niri/default.nix b/users/frontear/home/desktops/niri/default.nix index 54fdfb51..0d0b0e0c 100644 --- a/users/frontear/home/desktops/niri/default.nix +++ b/users/frontear/home/desktops/niri/default.nix @@ -57,7 +57,7 @@ in { } - spawn-sh-at-startup "${lib.getExe pkgs.wl-clip-persist} --clipboard regular" + spawn-sh-at-startup "${lib.getExe pkgs.wl-clip-persist} --clipboard regular --reconnect-tries 0" spawn-sh-at-startup "${lib.getExe pkgs.swaybg} -i '${config.stylix.image}' -m '${config.stylix.imageScalingMode}'" From 7e1bb72882f7b1d18adc4d573a6f106f0bacf222 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Fri, 26 Sep 2025 18:23:24 -0400 Subject: [PATCH 12/22] feat: default `zramSwap.enable = true`, use GNOME for ISO Using GNOME for the ISO instead of KDE will reduce the overall build time on my system because it can re-use many of the derivations from my GNOME specialisation, rather than needing to pull the KDE ones. Build times shot down significantly by doing this change, so I'm pretty happy with it overall. I've also enabled **zram as swap** configuration by default for my system, simply because I don't use swap files/swap devices, and don't plan to. --- hosts/iso/configuration.nix | 12 ++--------- hosts/laptop/hardware/mounts.nix | 2 -- modules/nixos/zramSwap/module.nix | 34 +++++++++++++++++-------------- 3 files changed, 21 insertions(+), 27 deletions(-) diff --git a/hosts/iso/configuration.nix b/hosts/iso/configuration.nix index b8f26fc4..091f6a00 100644 --- a/hosts/iso/configuration.nix +++ b/hosts/iso/configuration.nix @@ -8,22 +8,14 @@ ]; config = { - networking.networkmanager.enable = true; + my.desktops.gnome.enable = true; - services.desktopManager.plasma6.enable = true; - services.displayManager.defaultSession = "plasmax11"; - - services.displayManager = { - autoLogin.enable = true; - sddm.enable = true; - }; + services.displayManager.autoLogin.enable = true; console.keyMap = "us"; i18n.defaultLocale = "en_CA.UTF-8"; time.timeZone = "America/Toronto"; - zramSwap.enable = true; - nixpkgs.config.allowUnfree = true; }; } \ No newline at end of file diff --git a/hosts/laptop/hardware/mounts.nix b/hosts/laptop/hardware/mounts.nix index b5756195..793b5485 100644 --- a/hosts/laptop/hardware/mounts.nix +++ b/hosts/laptop/hardware/mounts.nix @@ -37,7 +37,5 @@ interval = "weekly"; }; - - zramSwap.enable = true; }; } \ No newline at end of file diff --git a/modules/nixos/zramSwap/module.nix b/modules/nixos/zramSwap/module.nix index 1ccc7293..1da1fe1a 100644 --- a/modules/nixos/zramSwap/module.nix +++ b/modules/nixos/zramSwap/module.nix @@ -6,20 +6,24 @@ let cfg = config.zramSwap; in { - config = lib.mkIf cfg.enable { - # Optimizes swap-related kernel tunings for zram usage - # https://wiki.archlinux.org/title/Zram#Optimizing_swap_on_zram - boot.kernel.sysctl = { - "vm.swappiness" = 180; - "vm.watermark_boost_factor" = 0; - "vm.watermark_scale_factor" = 125; - "vm.page-cluster" = 0; - }; + config = lib.mkMerge [ + { zramSwap.enable = true; } - # Configures zram to work higher than any other swap devices. - zramSwap = { - memoryPercent = 150; # https://unix.stackexchange.com/a/596929 - priority = 100; - }; - }; + (lib.mkIf cfg.enable { + # Optimizes swap-related kernel tunings for zram usage + # https://wiki.archlinux.org/title/Zram#Optimizing_swap_on_zram + boot.kernel.sysctl = { + "vm.swappiness" = 180; + "vm.watermark_boost_factor" = 0; + "vm.watermark_scale_factor" = 125; + "vm.page-cluster" = 0; + }; + + # Configures zram to work higher than any other swap devices. + zramSwap = { + memoryPercent = 150; # https://unix.stackexchange.com/a/596929 + priority = 100; + }; + }) + ]; } \ No newline at end of file From 8e0a250ac428721f2a1537db137ef2046c9cef1a Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Fri, 26 Sep 2025 18:38:31 -0400 Subject: [PATCH 13/22] feat: wrap `element-desktop` to fix secrets service detection Stupid Electron bug. I don't know why Microsoft Edge doesn't have the same issue, since Electron and Chromium share the same APIs for detecting this sort of thing (via `os_crypt`). --- .../my/programs/element/options.nix | 3 ++ .../my/programs/element/package.nix | 29 +++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 modules/home-manager/my/programs/element/package.nix diff --git a/modules/home-manager/my/programs/element/options.nix b/modules/home-manager/my/programs/element/options.nix index c58105df..15e81104 100644 --- a/modules/home-manager/my/programs/element/options.nix +++ b/modules/home-manager/my/programs/element/options.nix @@ -9,6 +9,9 @@ enable = lib.mkEnableOption "element"; package = lib.mkOption { default = pkgs.element-desktop; + apply = element-desktop: pkgs.callPackage ./package.nix { + inherit element-desktop; + }; type = with lib.types; package; }; diff --git a/modules/home-manager/my/programs/element/package.nix b/modules/home-manager/my/programs/element/package.nix new file mode 100644 index 00000000..d0d006bd --- /dev/null +++ b/modules/home-manager/my/programs/element/package.nix @@ -0,0 +1,29 @@ +{ + lib, + symlinkJoin, + makeWrapper, + + element-desktop, + + # NOTE: despite it's name, this will actually force Electron to query the + # correct `org.freedesktops.secrets` provider through D-BUS. Thus, it's a + # safe default for any generic provider, _not_ just `gnome-keyring`. + # + # see: https://github.com/electron/electron/issues/47436#issuecomment-2995219848 + withArgs ? "--password-store=gnome-libsecret" +}: +symlinkJoin { + name = "element-desktop"; + paths = [ + element-desktop + ]; + + nativeBuildInputs = [ + makeWrapper + ]; + + postBuild = '' + wrapProgram $out/bin/element-desktop \ + --add-flags ${lib.escapeShellArg withArgs} + ''; +} \ No newline at end of file From 0e5d1635dc12b50cefd50a5ad0712f12ad954b31 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Sat, 27 Sep 2025 00:46:15 -0400 Subject: [PATCH 14/22] feat: drop Niri scaling to 1.25 Closes #58. I scaled up some of the base fonts heights, which correctly propagated to all of my things. I'm actually quite happy with how simple of a change this was. I also took the liberty of changing the date format for `swaylock`, so it doesn't keep overflowing outside of the little circle. --- pkgs/waybar-icon/src/lib.rs | 2 +- users/frontear/home/desktops/niri/default.nix | 2 +- .../home/desktops/niri/programs/swaylock/default.nix | 2 +- users/frontear/home/desktops/niri/stylix/default.nix | 6 ++++-- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/pkgs/waybar-icon/src/lib.rs b/pkgs/waybar-icon/src/lib.rs index a56955e2..c3687afe 100644 --- a/pkgs/waybar-icon/src/lib.rs +++ b/pkgs/waybar-icon/src/lib.rs @@ -26,7 +26,7 @@ impl Module for Icon { let g_theme = gtk::IconTheme::default().unwrap(); if let Some(info) = g_theme.lookup_icon(&config.icon_name, 24, gtk::IconLookupFlags::FORCE_SVG) { - let scaled_size = 28 * g_image.scale_factor(); + let scaled_size = 34 * g_image.scale_factor(); let pixbuf = gtk::gdk_pixbuf::Pixbuf::from_file_at_size(&info.filename().unwrap(), scaled_size, scaled_size).unwrap(); let surface = pixbuf.create_surface::(g_image.scale_factor(), None).unwrap(); diff --git a/users/frontear/home/desktops/niri/default.nix b/users/frontear/home/desktops/niri/default.nix index 0d0b0e0c..02646ca8 100644 --- a/users/frontear/home/desktops/niri/default.nix +++ b/users/frontear/home/desktops/niri/default.nix @@ -18,7 +18,7 @@ in { my.desktops.niri = { settings = '' output "eDP-1" { - scale 1.5 + scale 1.25 } input { diff --git a/users/frontear/home/desktops/niri/programs/swaylock/default.nix b/users/frontear/home/desktops/niri/programs/swaylock/default.nix index 46c2c592..1d56ae5c 100644 --- a/users/frontear/home/desktops/niri/programs/swaylock/default.nix +++ b/users/frontear/home/desktops/niri/programs/swaylock/default.nix @@ -18,7 +18,7 @@ in { indicator = true; clock = true; - datestr = "%a, %B %d, %Y"; + datestr = "%a, %b %d, %Y"; effect-blur = "16x2"; }; diff --git a/users/frontear/home/desktops/niri/stylix/default.nix b/users/frontear/home/desktops/niri/stylix/default.nix index 55cf3ffd..56d44393 100644 --- a/users/frontear/home/desktops/niri/stylix/default.nix +++ b/users/frontear/home/desktops/niri/stylix/default.nix @@ -22,8 +22,10 @@ in { fonts = { sizes = { - applications = 11; - terminal = 8; + applications = 12; + desktop = 12; + terminal = 10; + popups = 12; }; emoji = { From f5778dd86446c326a5c293f20f8b0a47729f9d6c Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Sat, 27 Sep 2025 22:46:20 -0400 Subject: [PATCH 15/22] feat: add `pkgs.man-pages` and `pkgs.linux-manual` to system I'm used to having them, and I like to reference them at random times, particularly when I'm researching subsystems of the kernel. It's a little annoying that they don't exist by default, so let's make it so. --- modules/nixos/documentation/man/module.nix | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 modules/nixos/documentation/man/module.nix diff --git a/modules/nixos/documentation/man/module.nix b/modules/nixos/documentation/man/module.nix new file mode 100644 index 00000000..4873edb3 --- /dev/null +++ b/modules/nixos/documentation/man/module.nix @@ -0,0 +1,19 @@ +{ + config, + lib, + pkgs, + ... +}: +let + cfg = config.documentation.man; +in { + config = lib.mkIf cfg.enable { + # I find these the man pages from these two to be quite useful to view. + # They usually exist on most other distros, and I'm very used to that + # availability, so let's bring them back here too. + environment.systemPackages = with pkgs; [ + linux-manual + man-pages + ]; + }; +} \ No newline at end of file From c2ec200c62e5d0e95a7e363f9cf7455009093dea Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Sun, 28 Sep 2025 14:14:13 -0400 Subject: [PATCH 16/22] feat: write an `app2unit` wrapper to fix certain applications Fairly self-documenting, Microsoft Edge was the main culprit and motivation for this. --- .../my/programs/app2unit/config.nix | 14 ++++++ .../my/programs/app2unit/module.nix | 9 ++++ .../my/programs/app2unit/options.nix | 21 +++++++++ .../my/programs/app2unit/package/default.nix | 21 +++++++++ .../my/programs/app2unit/package/package.nix | 38 ++++++++++++++++ .../programs/app2unit/package/src/app2unit.sh | 44 +++++++++++++++++++ users/frontear/home/desktops/niri/default.nix | 4 +- .../niri/my/programs/legcord/default.nix | 2 +- .../my/programs/microsoft-edge/default.nix | 2 +- .../niri/programs/mission-center/default.nix | 2 +- .../niri/programs/obs-studio/default.nix | 2 +- .../desktops/niri/programs/thunar/default.nix | 2 +- 12 files changed, 154 insertions(+), 7 deletions(-) create mode 100644 modules/home-manager/my/programs/app2unit/config.nix create mode 100644 modules/home-manager/my/programs/app2unit/module.nix create mode 100644 modules/home-manager/my/programs/app2unit/options.nix create mode 100644 modules/home-manager/my/programs/app2unit/package/default.nix create mode 100644 modules/home-manager/my/programs/app2unit/package/package.nix create mode 100755 modules/home-manager/my/programs/app2unit/package/src/app2unit.sh diff --git a/modules/home-manager/my/programs/app2unit/config.nix b/modules/home-manager/my/programs/app2unit/config.nix new file mode 100644 index 00000000..7d73618a --- /dev/null +++ b/modules/home-manager/my/programs/app2unit/config.nix @@ -0,0 +1,14 @@ +{ + config, + lib, + ... +}: +let + cfg = config.my.programs.app2unit; +in { + config = lib.mkIf cfg.enable { + home.packages = [ + cfg.package + ]; + }; +} \ No newline at end of file diff --git a/modules/home-manager/my/programs/app2unit/module.nix b/modules/home-manager/my/programs/app2unit/module.nix new file mode 100644 index 00000000..aa5a227b --- /dev/null +++ b/modules/home-manager/my/programs/app2unit/module.nix @@ -0,0 +1,9 @@ +{ + ... +}: +{ + imports = [ + ./options.nix + ./config.nix + ]; +} \ No newline at end of file diff --git a/modules/home-manager/my/programs/app2unit/options.nix b/modules/home-manager/my/programs/app2unit/options.nix new file mode 100644 index 00000000..6d81ea58 --- /dev/null +++ b/modules/home-manager/my/programs/app2unit/options.nix @@ -0,0 +1,21 @@ +{ + lib, + pkgs, + ... +}: +{ + options = { + my.programs.app2unit = { + enable = lib.mkEnableOption "app2unit"; + + package = lib.mkOption { + default = pkgs.app2unit; + apply = app2unit: pkgs.callPackage ./package { + inherit app2unit; + }; + + type = with lib.types; package; + }; + }; + }; +} \ No newline at end of file diff --git a/modules/home-manager/my/programs/app2unit/package/default.nix b/modules/home-manager/my/programs/app2unit/package/default.nix new file mode 100644 index 00000000..313cc83a --- /dev/null +++ b/modules/home-manager/my/programs/app2unit/package/default.nix @@ -0,0 +1,21 @@ +{ + callPackage, + buildEnv, + + app2unit, +}: +let + wrapper = callPackage ./package.nix { + inherit app2unit; + }; +in buildEnv { + inherit (app2unit) name version; + + paths = [ + wrapper + app2unit + ]; + + ignoreCollisions = true; + meta.mainProgram = "app2unit"; +} \ No newline at end of file diff --git a/modules/home-manager/my/programs/app2unit/package/package.nix b/modules/home-manager/my/programs/app2unit/package/package.nix new file mode 100644 index 00000000..02289cc6 --- /dev/null +++ b/modules/home-manager/my/programs/app2unit/package/package.nix @@ -0,0 +1,38 @@ +{ + lib, + stdenvNoCC, + + app2unit, +}: +stdenvNoCC.mkDerivation { + pname = "app2unit-wrapper"; + version = "0.1.0"; + + src = with lib.fileset; toSource { + root = ./.; + fileset = unions [ + ./src + ]; + }; + + env = { + app2unit = lib.getExe app2unit; + }; + + installPhase = '' + install -Dm755 src/app2unit.sh $out/bin/app2unit + + substituteInPlace $out/bin/app2unit \ + --subst-var app2unit + ''; + + meta = with lib; { + description = "Launch applications through app2unit with specific fixes"; + + license = licenses.agpl3Plus; + maintainers = with maintainers; [ frontear ]; + platforms = platforms.linux; + + mainProgram = "app2unit"; + }; +} \ No newline at end of file diff --git a/modules/home-manager/my/programs/app2unit/package/src/app2unit.sh b/modules/home-manager/my/programs/app2unit/package/src/app2unit.sh new file mode 100755 index 00000000..c06992bf --- /dev/null +++ b/modules/home-manager/my/programs/app2unit/package/src/app2unit.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash + +set -o errexit +set -o nounset +set -o pipefail + +# We want to be an extremely thin wrapper around `app2unit`. If there is only +# one argument given, and it matches with an expected application or .desktop +# file, then we will perform our wrapping. In all other cases, we will not do +# anything, and just pass arguments as is to the underlying application, to +# prevent breaking expected functionality. +# +# More directly, for this wrapper to be effective, the caller must ONLY provide +# a single argument (or a single argument after `--`): a path to a binary, or a +# .desktop file. This wrapper will then determine if the argument warrants any +# wrapping. If it does, then it will attach arguments as needed and re-invoke +# the underlying program. If not, then the underlying application is invoked +# with all arguments passed directly to it. + +# `app2unit` accepts binary files or .desktop files to be specified after an +# end-of-options `--` specifier. We will account for that by shifting it. +if [ "$1" = "--" ]; then + shift +fi + +if [ "$#" -eq 1 ]; then + case "$1" in + # Run Microsoft Edge as a service to link it with the other scope unit + # that comes up with it. This prevents a race condition during shutdown + # that causes unclean termination. + # + # see: https://github.com/hyprwm/Hyprland/discussions/8459#discussioncomment-14063563 + *microsoft-edge|*microsoft-edge.desktop|*com.microsoft.Edge.desktop) + exec "@app2unit@" -t service -- "$1" + ;; + esac +fi + +# Will never be reached if any `case` branch succeeds. +# +# NOTE: `-a "$0"` needed because this application has symlinks to the main +# binary which change the behaviour of execution. The symlink name, which will +# be seen in `$0`, determines this change. +exec -a "$0" "@app2unit@" "$@" \ No newline at end of file diff --git a/users/frontear/home/desktops/niri/default.nix b/users/frontear/home/desktops/niri/default.nix index 02646ca8..1a941eab 100644 --- a/users/frontear/home/desktops/niri/default.nix +++ b/users/frontear/home/desktops/niri/default.nix @@ -160,8 +160,8 @@ in { home.packages = with pkgs; [ nerd-fonts.symbols-only - - app2unit ]; + + my.programs.app2unit.enable = true; }; } \ No newline at end of file diff --git a/users/frontear/home/desktops/niri/my/programs/legcord/default.nix b/users/frontear/home/desktops/niri/my/programs/legcord/default.nix index 97e755a8..f0d6b3ad 100644 --- a/users/frontear/home/desktops/niri/my/programs/legcord/default.nix +++ b/users/frontear/home/desktops/niri/my/programs/legcord/default.nix @@ -20,7 +20,7 @@ in { module_path = pkgs.frontear.waybar-icon.lib; icon-name = "discord"; - on-click = "app2unit legcord.desktop"; + on-click = "app2unit -- legcord.desktop"; tooltip = false; }; }; diff --git a/users/frontear/home/desktops/niri/my/programs/microsoft-edge/default.nix b/users/frontear/home/desktops/niri/my/programs/microsoft-edge/default.nix index 599634fd..28842f35 100644 --- a/users/frontear/home/desktops/niri/my/programs/microsoft-edge/default.nix +++ b/users/frontear/home/desktops/niri/my/programs/microsoft-edge/default.nix @@ -20,7 +20,7 @@ in { module_path = pkgs.frontear.waybar-icon.lib; icon-name = "com.microsoft.Edge"; - on-click = "app2unit com.microsoft.Edge.desktop"; + on-click = "app2unit -- com.microsoft.Edge.desktop"; tooltip = false; }; }; diff --git a/users/frontear/home/desktops/niri/programs/mission-center/default.nix b/users/frontear/home/desktops/niri/programs/mission-center/default.nix index 1ab7bb4a..a0f009bf 100644 --- a/users/frontear/home/desktops/niri/programs/mission-center/default.nix +++ b/users/frontear/home/desktops/niri/programs/mission-center/default.nix @@ -23,7 +23,7 @@ in { module_path = pkgs.frontear.waybar-icon.lib; icon-name = "io.missioncenter.MissionCenter"; - on-click = "app2unit io.missioncenter.MissionCenter.desktop"; + on-click = "app2unit -- io.missioncenter.MissionCenter.desktop"; tooltip = false; }; }; diff --git a/users/frontear/home/desktops/niri/programs/obs-studio/default.nix b/users/frontear/home/desktops/niri/programs/obs-studio/default.nix index 47d2a27b..65684ce8 100644 --- a/users/frontear/home/desktops/niri/programs/obs-studio/default.nix +++ b/users/frontear/home/desktops/niri/programs/obs-studio/default.nix @@ -20,7 +20,7 @@ in { module_path = pkgs.frontear.waybar-icon.lib; icon-name = "com.obsproject.Studio"; - on-click = "app2unit com.obsproject.Studio.desktop"; + on-click = "app2unit -- com.obsproject.Studio.desktop"; tooltip = false; }; }; diff --git a/users/frontear/home/desktops/niri/programs/thunar/default.nix b/users/frontear/home/desktops/niri/programs/thunar/default.nix index 4e93936c..fdb4c922 100644 --- a/users/frontear/home/desktops/niri/programs/thunar/default.nix +++ b/users/frontear/home/desktops/niri/programs/thunar/default.nix @@ -22,7 +22,7 @@ in { module_path = pkgs.frontear.waybar-icon.lib; icon-name = "org.xfce.thunar"; - on-click = "app2unit thunar.desktop"; + on-click = "app2unit -- thunar.desktop"; tooltip = false; }; }; From 2837f33ba3af12d136662a361bc7c59ffc7544ba Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Sun, 28 Sep 2025 20:33:11 -0400 Subject: [PATCH 17/22] feat: add `pkgs.vista-fonts` to the libreoffice module This brings more proprietary fonts from Microsoft like Calibri. I originally thought they were part of `pkgs.corefonts`, but I realize they are not. --- modules/home-manager/my/programs/libreoffice/config.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/home-manager/my/programs/libreoffice/config.nix b/modules/home-manager/my/programs/libreoffice/config.nix index 96d78b19..402dafb8 100644 --- a/modules/home-manager/my/programs/libreoffice/config.nix +++ b/modules/home-manager/my/programs/libreoffice/config.nix @@ -19,6 +19,7 @@ in { cfg.package pkgs.corefonts + pkgs.vista-fonts (pkgs.hunspell.withDicts (dict: [ dict.en_CA From 71a06efd2b8d147d0af31037585c0be4c04dfa80 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Sun, 28 Sep 2025 23:03:18 -0400 Subject: [PATCH 18/22] feat: very lightly improve nixos-clean The home-manager stuff hasn't been relevant since they dropped creating profiles for the NixOS module, and hasn't even been doing anything for the past few months. I've switched the `switch-to-configuration` call from `switch` to `boot` to avoid an unnecessarily heavy context switch and just update the bootloader entries. Finally, since I dropped the home-manager stuff, I can now allow this application to run as root, which allows me to use whatever escalation program, like `run0`. This closes #59. --- pkgs/nixos-clean/src/nixos-clean.sh | 28 +++++----------------------- 1 file changed, 5 insertions(+), 23 deletions(-) diff --git a/pkgs/nixos-clean/src/nixos-clean.sh b/pkgs/nixos-clean/src/nixos-clean.sh index e1e2927c..fab9cb97 100755 --- a/pkgs/nixos-clean/src/nixos-clean.sh +++ b/pkgs/nixos-clean/src/nixos-clean.sh @@ -16,14 +16,13 @@ showUsage() { exit 1 } -if [ "$UID" -eq 0 ]; then - echo "Do not run this script as root." +if [ "$UID" -ne 0 ]; then + echo "Please run this script as root." exit 1 fi origArgs=("$@") systemProfiles=/nix/var/nix/profiles -userProfiles=${XDG_STATE_HOME:-$HOME/.local/state}/nix/profiles dryRun= verbose= cleanStore= @@ -70,30 +69,18 @@ cleanNixOS() { for p in $systemProfiles/system*; do if [ "$(readlink -f $p)" != "$latest" ]; then log "going to delete $p" - run sudo rm -f "$p" + run rm -f "$p" fi done log "regenerating boot entries" - run sudo /run/current-system/bin/switch-to-configuration switch -} - -cleanHomeManager() { - log "cleaning up home-manager generations..." - - local latest="$(readlink -f $userProfiles/home-manager)" - for p in $userProfiles/home-manager*; do - if [ "$(readlink -f $p)" != "$latest" ]; then - log "going to delete $p" - run rm -f "$p" - fi - done + run /run/current-system/bin/switch-to-configuration boot } cleanNix() { log "cleaning up the /nix/store" - run sudo nix-collect-garbage -d + run nix-collect-garbage -d } if [ -f /etc/NIXOS ]; then @@ -101,11 +88,6 @@ if [ -f /etc/NIXOS ]; then cleanStore=1 fi -if [ -L $userProfiles/home-manager ]; then - cleanHomeManager - cleanStore=1 -fi - if [ -n "$cleanStore" ]; then cleanNix fi \ No newline at end of file From d9e1444346844d9ad391a22f3b4ff9d9e4ebb0e9 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Mon, 29 Sep 2025 00:26:19 -0400 Subject: [PATCH 19/22] feat: update `flake.lock` --- flake.lock | 54 +++++++++++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/flake.lock b/flake.lock index 48f02b20..f3171b0b 100644 --- a/flake.lock +++ b/flake.lock @@ -70,11 +70,11 @@ "firefox-gnome-theme": { "flake": false, "locked": { - "lastModified": 1756083905, - "narHash": "sha256-UqYGTBgI5ypGh0Kf6zZjom/vABg7HQocB4gmxzl12uo=", + "lastModified": 1758112371, + "narHash": "sha256-lizRM2pj6PHrR25yimjyFn04OS4wcdbc38DCdBVa2rk=", "owner": "rafaelmardojai", "repo": "firefox-gnome-theme", - "rev": "b655eaf16d4cbec9c3472f62eee285d4b419a808", + "rev": "0909cfe4a2af8d358ad13b20246a350e14c2473d", "type": "github" }, "original": { @@ -162,11 +162,11 @@ ] }, "locked": { - "lastModified": 1758296614, - "narHash": "sha256-l60D1i0aaSqemy9dL7wP0ePMfcv/oZbeKpvUMY+q0kQ=", + "lastModified": 1759106866, + "narHash": "sha256-GjLvAl7qxGxKtop6ghasxjQ1biTT7pA+WU45byzMl/4=", "owner": "nix-community", "repo": "home-manager", - "rev": "55b1f5b7b191572257545413b98e37abab2fdb00", + "rev": "619ae569293b6427d23cce4854eb4f3c33af3eec", "type": "github" }, "original": { @@ -177,11 +177,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1757943327, - "narHash": "sha256-w6cDExPBqbq7fTLo4dZ1ozDGeq3yV6dSN4n/sAaS6OM=", + "lastModified": 1758663926, + "narHash": "sha256-6CFdj7Xs616t1W4jLDH7IohAAvl5Dyib3qEv/Uqw1rk=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "67a709cfe5d0643dafd798b0b613ed579de8be05", + "rev": "170ff93c860b2a9868ed1e1102d4e52cb3d934e1", "type": "github" }, "original": { @@ -192,11 +192,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1758198701, - "narHash": "sha256-7To75JlpekfUmdkUZewnT6MoBANS0XVypW6kjUOXQwc=", + "lastModified": 1758690382, + "narHash": "sha256-NY3kSorgqE5LMm1LqNwGne3ZLMF2/ILgLpFr1fS4X3o=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0147c2f1d54b30b5dd6d4a8c8542e8d7edf93b5d", + "rev": "e643668fd71b949c53f8626614b21ff71a07379d", "type": "github" }, "original": { @@ -233,11 +233,11 @@ ] }, "locked": { - "lastModified": 1756961635, - "narHash": "sha256-hETvQcILTg5kChjYNns1fD5ELdsYB/VVgVmBtqKQj9A=", + "lastModified": 1758998580, + "narHash": "sha256-VLx0z396gDCGSiowLMFz5XRO/XuNV+4EnDYjdJhHvUk=", "owner": "nix-community", "repo": "NUR", - "rev": "6ca27b2654ac55e3f6e0ca434c1b4589ae22b370", + "rev": "ba8d9c98f5f4630bcb0e815ab456afd90c930728", "type": "github" }, "original": { @@ -276,11 +276,11 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1757956156, - "narHash": "sha256-f0W7qbsCqpi6swQ5w8H+0YrAbNwsHgCFDkNRMTJjqrE=", + "lastModified": 1759069666, + "narHash": "sha256-/oVAVpL4xxR4KG4MlFspi8fiP9wEaSs+zqHkD2tw17g=", "owner": "nix-community", "repo": "stylix", - "rev": "0ce0103b498bb22f899ed8862d8d7f9503ed9cdb", + "rev": "f23b6c30cc002786a22998caf15312ea01c20654", "type": "github" }, "original": { @@ -340,11 +340,11 @@ "tinted-schemes": { "flake": false, "locked": { - "lastModified": 1754779259, - "narHash": "sha256-8KG2lXGaXLUE0F/JVwLQe7kOVm21IDfNEo0gfga5P4M=", + "lastModified": 1757716333, + "narHash": "sha256-d4km8W7w2zCUEmPAPUoLk1NlYrGODuVa3P7St+UrqkM=", "owner": "tinted-theming", "repo": "schemes", - "rev": "097d751b9e3c8b97ce158e7d141e5a292545b502", + "rev": "317a5e10c35825a6c905d912e480dfe8e71c7559", "type": "github" }, "original": { @@ -356,11 +356,11 @@ "tinted-tmux": { "flake": false, "locked": { - "lastModified": 1754788770, - "narHash": "sha256-LAu5nBr7pM/jD9jwFc6/kyFY4h7Us4bZz7dvVvehuwo=", + "lastModified": 1757811970, + "narHash": "sha256-n5ZJgmzGZXOD9pZdAl1OnBu3PIqD+X3vEBUGbTi4JiI=", "owner": "tinted-theming", "repo": "tinted-tmux", - "rev": "fb2175accef8935f6955503ec9dd3c973eec385c", + "rev": "d217ba31c846006e9e0ae70775b0ee0f00aa6b1e", "type": "github" }, "original": { @@ -372,11 +372,11 @@ "tinted-zed": { "flake": false, "locked": { - "lastModified": 1755613540, - "narHash": "sha256-zBFrrTxHLDMDX/OYxkCwGGbAhPXLi8FrnLhYLsSOKeY=", + "lastModified": 1757811247, + "narHash": "sha256-4EFOUyLj85NRL3OacHoLGEo0wjiRJzfsXtR4CZWAn6w=", "owner": "tinted-theming", "repo": "base16-zed", - "rev": "937bada16cd3200bdbd3a2f5776fc3b686d5cba0", + "rev": "824fe0aacf82b3c26690d14e8d2cedd56e18404e", "type": "github" }, "original": { From e4dd8bdb3b3f44f54dd8515fa9e942da0c91b4c5 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Mon, 29 Sep 2025 15:31:28 -0400 Subject: [PATCH 20/22] feat: cleanup some modules Moved the `pkgs.nerd-fonts.symbols-only` snippet to a common module. Although it's not the best solution, it's a little better. Moved some git configuration to the module, because it's a sane default. Moved some zsh configuration to the module for the same reasons. --- .../home-manager/fonts/fontconfig/module.nix | 24 +++++++++++++++++++ modules/home-manager/programs/eza/module.nix | 4 ---- modules/home-manager/programs/git/module.nix | 7 ++++++ modules/home-manager/programs/zsh/module.nix | 3 +++ users/frontear/home/default.nix | 8 ------- users/frontear/home/desktops/niri/default.nix | 7 ------ 6 files changed, 34 insertions(+), 19 deletions(-) create mode 100644 modules/home-manager/fonts/fontconfig/module.nix diff --git a/modules/home-manager/fonts/fontconfig/module.nix b/modules/home-manager/fonts/fontconfig/module.nix new file mode 100644 index 00000000..0e18fbae --- /dev/null +++ b/modules/home-manager/fonts/fontconfig/module.nix @@ -0,0 +1,24 @@ +{ + config, + lib, + pkgs, + ... +}: +let + cfg = config.fonts.fontconfig; +in { + # TODO: eventually I want to move this to some environment flag, such as + # `config.environment.isTerminal`, `config.environment.isGraphical`, and + # have these environment flags controlled by their respective programs. + # + # For example, using `programs.eza.enable` should enable the `isTerminal` + # flag, and therefore bring in all terminal styling configurations. + # + # The naming here is very much pending, but I prefer this instead of + # activating it here. + config = lib.mkIf cfg.enable { + home.packages = with pkgs; [ + nerd-fonts.symbols-only + ]; + }; +} \ No newline at end of file diff --git a/modules/home-manager/programs/eza/module.nix b/modules/home-manager/programs/eza/module.nix index 52c278b5..f5eee440 100644 --- a/modules/home-manager/programs/eza/module.nix +++ b/modules/home-manager/programs/eza/module.nix @@ -13,10 +13,6 @@ in { (lib.mkIf cfg.enable { fonts.fontconfig.enable = lib.mkDefault true; - home.packages = with pkgs; [ - nerd-fonts.symbols-only - ]; - programs.eza = { extraOptions = [ "--git" diff --git a/modules/home-manager/programs/git/module.nix b/modules/home-manager/programs/git/module.nix index d6afb857..a101d56b 100644 --- a/modules/home-manager/programs/git/module.nix +++ b/modules/home-manager/programs/git/module.nix @@ -20,6 +20,13 @@ in { ignores = [ ".envrc" ]; + + extraConfig = { + commit.gpgSign = true; + tag.gpgSign = true; + + init.defaultBranch = "main"; + }; }; }) ]; diff --git a/modules/home-manager/programs/zsh/module.nix b/modules/home-manager/programs/zsh/module.nix index ca7f2626..a74b2271 100644 --- a/modules/home-manager/programs/zsh/module.nix +++ b/modules/home-manager/programs/zsh/module.nix @@ -29,6 +29,9 @@ in { history.path = lib.mkIf config.xdg.enable "${config.xdg.dataHome}/zsh/zsh_history"; + + history.save = 10000; + history.size = 10000; }; }; } \ No newline at end of file diff --git a/users/frontear/home/default.nix b/users/frontear/home/default.nix index 37ca600d..3d481c1f 100644 --- a/users/frontear/home/default.nix +++ b/users/frontear/home/default.nix @@ -36,24 +36,16 @@ user.name = "Ali Rizvi"; user.signingKey = "4BC247743ACFF25E"; - commit.gpgSign = true; - tag.gpgSign = true; - merge.tool = "nvimdiff3"; # https:/dandavision.github.io/delta core.pager = "${lib.getExe pkgs.delta}"; interactive.diffFilter = "${lib.getExe pkgs.delta} --color-only"; delta.line-numbers = true; - - init.defaultBranch = "main"; }; }; zsh = { - history.save = 10000; - history.size = 10000; - initContent = '' PS1='%B%F{green}[%n@%m %1~]%(#.#.$)%F{white}%b ' RPS1='%B%(?.%F{green}.%F{red})%?%f%b' diff --git a/users/frontear/home/desktops/niri/default.nix b/users/frontear/home/desktops/niri/default.nix index 1a941eab..61787e2d 100644 --- a/users/frontear/home/desktops/niri/default.nix +++ b/users/frontear/home/desktops/niri/default.nix @@ -155,13 +155,6 @@ in { }; - # TODO: de-duplicate fontconfig and `nerd-fonts.symbols-only` snippets - fonts.fontconfig.enable = true; - - home.packages = with pkgs; [ - nerd-fonts.symbols-only - ]; - my.programs.app2unit.enable = true; }; } \ No newline at end of file From 7c9c551ba4e57876dc050ad8f567572028f7aac6 Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Tue, 30 Sep 2025 16:44:01 -0400 Subject: [PATCH 21/22] feat: bring legcord to GNOME Long story short, I use Discord to occasionally dump notes from class (usually off of my iPad) and it's a bit of a hassle to try and access the notes from my laptop when I need them. I considered trying to use Obsidian, a markdown note-taking application, but setting up a free sync that would just work on both my iPad and laptop proved to be a bit too much of a hassle to explore. As such, I'm just bringing Discord (via Legcord) to my GNOME specialisation. To try and keep myself from being needlessly distracted, I'm using a different account that can still access the notes, but does not have many of the other servers. I might explore using Obsidian in the future, but for now it's a bit too involved for me to waste my time on. --- users/frontear/home/desktops/gnome/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/users/frontear/home/desktops/gnome/default.nix b/users/frontear/home/desktops/gnome/default.nix index d026c4f4..81d981cb 100644 --- a/users/frontear/home/desktops/gnome/default.nix +++ b/users/frontear/home/desktops/gnome/default.nix @@ -9,7 +9,7 @@ in { config = lib.mkIf cfg.enable { my.programs = { microsoft-edge.enable = true; - + legcord.enable = true; libreoffice.enable = true; }; }; From d194a5a0500b7e72768f10abb018aa3b04fa874c Mon Sep 17 00:00:00 2001 From: Ali Rizvi Date: Thu, 2 Oct 2025 14:56:35 -0400 Subject: [PATCH 22/22] feat: the beginnings of a more organized modules directory See #53 for the details surrounding this change. This is the initial commit for this, which means that there is a LOT of work that needs to be done. Rather than trying to do it all in one commit I wanted to split it up across multiple (which is the correct way to be doing this stuff anyways). For starters, `lib.mkModules` need a massive overhaul so that it can perform most of the heavy lifting for module files resolution. This will allow me to drop all of the `module.nix` files that exist only to import `options.nix` and `config.nix`, simplying my structure considerably. After the overhaul, I need to move modules around to have them match the expected structure. This is definitely going to be the easiest part. --- .../nixos/home-manager/services/pipewire/module.nix | 10 ---------- modules/shared/services/pipewire/config/default.nix | 9 +++++++++ .../services/pipewire/config/home-manager.nix} | 0 .../services/pipewire/config/nixos.nix} | 0 modules/shared/services/pipewire/module.nix | 8 ++++++++ nix/nixosModules/default.nix | 1 + 6 files changed, 18 insertions(+), 10 deletions(-) delete mode 100644 modules/nixos/home-manager/services/pipewire/module.nix create mode 100644 modules/shared/services/pipewire/config/default.nix rename modules/{nixos/home-manager/services/pipewire/config.nix => shared/services/pipewire/config/home-manager.nix} (100%) rename modules/{nixos/services/pipewire/module.nix => shared/services/pipewire/config/nixos.nix} (100%) create mode 100644 modules/shared/services/pipewire/module.nix diff --git a/modules/nixos/home-manager/services/pipewire/module.nix b/modules/nixos/home-manager/services/pipewire/module.nix deleted file mode 100644 index fa54126c..00000000 --- a/modules/nixos/home-manager/services/pipewire/module.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ - ... -}: -{ - config = { - home-manager.sharedModules = [ - ./config.nix - ]; - }; -} \ No newline at end of file diff --git a/modules/shared/services/pipewire/config/default.nix b/modules/shared/services/pipewire/config/default.nix new file mode 100644 index 00000000..30f51c51 --- /dev/null +++ b/modules/shared/services/pipewire/config/default.nix @@ -0,0 +1,9 @@ +{ + imports = [ + ./nixos.nix + ]; + + config.home-manager.sharedModules = [ + ./home-manager.nix + ]; +} \ No newline at end of file diff --git a/modules/nixos/home-manager/services/pipewire/config.nix b/modules/shared/services/pipewire/config/home-manager.nix similarity index 100% rename from modules/nixos/home-manager/services/pipewire/config.nix rename to modules/shared/services/pipewire/config/home-manager.nix diff --git a/modules/nixos/services/pipewire/module.nix b/modules/shared/services/pipewire/config/nixos.nix similarity index 100% rename from modules/nixos/services/pipewire/module.nix rename to modules/shared/services/pipewire/config/nixos.nix diff --git a/modules/shared/services/pipewire/module.nix b/modules/shared/services/pipewire/module.nix new file mode 100644 index 00000000..fac2ea2e --- /dev/null +++ b/modules/shared/services/pipewire/module.nix @@ -0,0 +1,8 @@ +{ + ... +}: +{ + imports = [ + ./config + ]; +} \ No newline at end of file diff --git a/nix/nixosModules/default.nix b/nix/nixosModules/default.nix index a1a91084..f0fe6251 100644 --- a/nix/nixosModules/default.nix +++ b/nix/nixosModules/default.nix @@ -17,6 +17,7 @@ in { home-manager.nixosModules.default (lib.mkModules ../../modules/common {}) + (lib.mkModules ../../modules/shared {}) (lib.mkModules ../../modules/nixos { inherit inputs; })