From 49ad024034f76777b77dbd22431406cf792a9bcc Mon Sep 17 00:00:00 2001 From: Lyes Saadi Date: Sat, 22 Mar 2025 14:16:04 +0100 Subject: [PATCH] Splitting desktop to user and gnome and adding agenix --- flake.lock | 140 ++++++++++++++++--- flake.nix | 15 ++- modules/common/packages.nix | 4 +- modules/desktop/networking.nix | 8 +- modules/desktop/packages.nix | 195 +-------------------------- modules/desktop/system.nix | 23 ---- modules/gnome/default.nix | 39 ++++++ modules/gnome/packages.nix | 107 +++++++++++++++ users/lyes/common/default.nix | 32 +++++ users/lyes/{ => common}/home.nix | 0 users/lyes/{ => common}/packages.nix | 4 +- users/lyes/default.nix | 28 +--- users/lyes/desktop/default.nix | 8 ++ users/lyes/desktop/packages.nix | 124 +++++++++++++++++ 14 files changed, 453 insertions(+), 274 deletions(-) create mode 100644 modules/gnome/default.nix create mode 100644 modules/gnome/packages.nix create mode 100644 users/lyes/common/default.nix rename users/lyes/{ => common}/home.nix (100%) rename users/lyes/{ => common}/packages.nix (61%) create mode 100644 users/lyes/desktop/default.nix create mode 100644 users/lyes/desktop/packages.nix diff --git a/flake.lock b/flake.lock index ba14e2a..3176f43 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,48 @@ { "nodes": { + "agenix": { + "inputs": { + "darwin": "darwin", + "home-manager": "home-manager", + "nixpkgs": "nixpkgs", + "systems": "systems" + }, + "locked": { + "lastModified": 1736955230, + "narHash": "sha256-uenf8fv2eG5bKM8C/UvFaiJMZ4IpUFaQxk9OH5t/1gA=", + "owner": "ryantm", + "repo": "agenix", + "rev": "e600439ec4c273cf11e06fe4d9d906fb98fa097c", + "type": "github" + }, + "original": { + "owner": "ryantm", + "repo": "agenix", + "type": "github" + } + }, + "darwin": { + "inputs": { + "nixpkgs": [ + "agenix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1700795494, + "narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=", + "owner": "lnl7", + "repo": "nix-darwin", + "rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d", + "type": "github" + }, + "original": { + "owner": "lnl7", + "ref": "master", + "repo": "nix-darwin", + "type": "github" + } + }, "disko": { "inputs": { "nixpkgs": [ @@ -23,15 +66,36 @@ "home-manager": { "inputs": { "nixpkgs": [ + "agenix", "nixpkgs" ] }, "locked": { - "lastModified": 1739757849, - "narHash": "sha256-Gs076ot1YuAAsYVcyidLKUMIc4ooOaRGO0PqTY7sBzA=", + "lastModified": 1703113217, + "narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=", "owner": "nix-community", "repo": "home-manager", - "rev": "9d3d080aec2a35e05a15cedd281c2384767c2cfe", + "rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1742234739, + "narHash": "sha256-zFL6zsf/5OztR1NSNQF33dvS1fL/BzVUjabZq4qrtY4=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "f6af7280a3390e65c2ad8fd059cdc303426cbd59", "type": "github" }, "original": { @@ -59,11 +123,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1741792691, - "narHash": "sha256-f0BVt1/cvA0DQ/q3rB+HY4g4tKksd03ZkzI4xehC2Ew=", + "lastModified": 1742631601, + "narHash": "sha256-yJ3OOAmsGAxSl0bTmKUp3+cEYtSS+V6hUPK2rYhIPr8=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "e1f12151258b12c567f456d8248e4694e9390613", + "rev": "380ed15bcd6440606c6856db44a99140d422b46f", "type": "github" }, "original": { @@ -75,27 +139,27 @@ }, "nixpkgs": { "locked": { - "lastModified": 1741862977, - "narHash": "sha256-prZ0M8vE/ghRGGZcflvxCu40ObKaB+ikn74/xQoNrGQ=", + "lastModified": 1703013332, + "narHash": "sha256-+tFNwMvlXLbJZXiMHqYq77z/RfmpfpiI3yjL6o/Zo9M=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "cdd2ef009676ac92b715ff26630164bb88fec4e0", + "rev": "54aac082a4d9bb5bbc5c4e899603abfb76a3f6d6", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-24.11", + "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } }, "nixpkgs-unstable": { "locked": { - "lastModified": 1742069588, - "narHash": "sha256-C7jVfohcGzdZRF6DO+ybyG/sqpo1h6bZi9T56sxLy+k=", + "lastModified": 1742422364, + "narHash": "sha256-mNqIplmEohk5jRkqYqG19GA8MbQ/D4gQSK0Mu4LvfRQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c80f6a7e10b39afcc1894e02ef785b1ad0b0d7e5", + "rev": "a84ebe20c6bc2ecbcfb000a50776219f48d134cc", "type": "github" }, "original": { @@ -107,11 +171,27 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1735471104, - "narHash": "sha256-0q9NGQySwDQc7RhAV2ukfnu7Gxa5/ybJ2ANT8DQrQrs=", + "lastModified": 1742512142, + "narHash": "sha256-8XfURTDxOm6+33swQJu/hx6xw1Tznl8vJJN5HwVqckg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "7105ae3957700a9646cc4b766f5815b23ed0c682", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1742288794, + "narHash": "sha256-Txwa5uO+qpQXrNG4eumPSD+hHzzYi/CdaM80M9XRLCo=", "owner": "nixos", "repo": "nixpkgs", - "rev": "88195a94f390381c6afcdaa933c2f6ff93959cb4", + "rev": "b6eaf97c6960d97350c584de1b6dcff03c9daf42", "type": "github" }, "original": { @@ -123,25 +203,41 @@ }, "root": { "inputs": { + "agenix": "agenix", "disko": "disko", - "home-manager": "home-manager", + "home-manager": "home-manager_2", "nix-flatpak": "nix-flatpak", "nixos-hardware": "nixos-hardware", - "nixpkgs": "nixpkgs", + "nixpkgs": "nixpkgs_2", "nixpkgs-unstable": "nixpkgs-unstable", "zen-browser": "zen-browser" } }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, "zen-browser": { "inputs": { - "nixpkgs": "nixpkgs_2" + "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1742076998, - "narHash": "sha256-EuqbZFwam8dXNiuytI67rIUrF4ogy62OF2nGxWk8GGI=", + "lastModified": 1742614294, + "narHash": "sha256-bZbYlP/xqGyW2aVle742dFbc0npFnwJBzcEnXNywJgY=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "30fdea2435aeeb961acba896b9b65bab4fd17003", + "rev": "7fa9ec4e14d89e568ebaac302049980df7cf0cc9", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 0c538fb..6a1d973 100644 --- a/flake.nix +++ b/flake.nix @@ -14,9 +14,19 @@ zen-browser.url = "github:0xc000022070/zen-browser-flake"; disko.url = "github:nix-community/disko"; disko.inputs.nixpkgs.follows = "nixpkgs"; + agenix.url = "github:ryantm/agenix"; }; - outputs = { self, nixpkgs, nixpkgs-unstable, nixos-hardware, nix-flatpak, disko, ... }@attrs: { + outputs = { + self, + nixpkgs, + nixpkgs-unstable, + nixos-hardware, + nix-flatpak, + disko, + agenix, + ... + }@attrs: { nixosConfigurations = { lyes-pc = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; @@ -26,6 +36,7 @@ ./hosts/lyes-pc/disko-config.nix ./users/lyes + ./users/lyes/desktop ./modules ./modules/desktop @@ -33,11 +44,13 @@ # ./modules/nvidia # ./modules/specialisations/old-kernel.nix # ./modules/specialisations/gaming.nix + ./modules/gnome ./modules/sway nix-flatpak.nixosModules.nix-flatpak nixos-hardware.nixosModules.framework-16-7040-amd disko.nixosModules.disko + agenix.nixosModules.default ]; }; diff --git a/modules/common/packages.nix b/modules/common/packages.nix index db52849..562212c 100644 --- a/modules/common/packages.nix +++ b/modules/common/packages.nix @@ -1,4 +1,4 @@ -{ pkgs, ... }: +{ pkgs, agenix, ... }: { environment.systemPackages = with pkgs; [ @@ -16,11 +16,13 @@ man-pages-posix python3 any-nix-shell + cheat # Nix home-manager nix-index direnv + agenix.packages."${system}".default ]; # Some programs need SUID wrappers, can be configured further or are diff --git a/modules/desktop/networking.nix b/modules/desktop/networking.nix index 623a5e1..1ae2523 100644 --- a/modules/desktop/networking.nix +++ b/modules/desktop/networking.nix @@ -1,4 +1,4 @@ -{ pkgs, lib, ... }: +{ ... }: { # Networking @@ -53,10 +53,4 @@ # Bluetooth hardware.bluetooth.enable = true; hardware.bluetooth.powerOnBoot = true; - - # KDE Connect - programs.kdeconnect = { - enable = true; - package = lib.mkDefault pkgs.gnomeExtensions.gsconnect; - }; } diff --git a/modules/desktop/packages.nix b/modules/desktop/packages.nix index 95925b3..2620d0b 100644 --- a/modules/desktop/packages.nix +++ b/modules/desktop/packages.nix @@ -1,90 +1,17 @@ -{ pkgs, lib, config, zen-browser, ... }: +{ pkgs, lib, config, ... }: -let - tex = (pkgs.texlive.combine { inherit (pkgs.texlive) - scheme-medium - lettre - wallpaper - lastpage - hyphenat - moresize - fontawesome5 - montserrat - titlesec - ly1 - footmisc - titling - frpseudocode - ebproof - comment; - }); -in { +{ # Packages environment.systemPackages = with pkgs; [ - # Web - zen-browser.packages."${system}".default - fragments - dropbox - varia - filezilla - whatip - epiphany - organicmaps - # Messaging - thunderbird-128 - discord - vesktop - whatsapp-for-linux - # element-desktop - fractal - zoom-us - - # Image - drawing - gimp - loupe - snapshot - inkscape + thunderbird # Video - mpv vlc - syncplay - obs-studio - yt-dlp - handbrake - kooha - video-trimmer - (kodi.withPackages(kodiPkgs: with kodiPkgs; [ - youtube - sponsorblock - pvr-iptvsimple - ])) # Audio - shortwave - gnome-podcasts - helvum - local.quadcastrgb - gnome-sound-recorder easyeffects - # Games - heroic - # cemu - prismlauncher - # vvvvvv - ryujinx - dolphin-emu - parsec-bin - unstable.suyu - # suyu - - # Reading - # calibre - papers - # Office libreoffice onlyoffice-bin @@ -95,137 +22,21 @@ in { hunspellDicts.en_US hunspellDicts.en_GB-ize - # Note taking - apostrophe - setzer - tex - pandoc - unstable.typst - # typst - tinymist - zotero - - # Programming - git - git-lfs - vscode - # zed-editor - gcc - rustup - python3 - ocaml - ocamlPackages.ocaml-lsp - ocamlPackages.ocamlformat - opam - ledit - nodejs - nil - nixd - nixfmt-rfc-style - protege # LogIA Course - haskellPackages.Agda - agdaPackages.standard-library - devtoolbox - elan - - # Containers & VMs - toolbox - distrobox - gnome-boxes - - # Virtualization - qemu - virt-manager - - # System - gnome-firmware - - # Utilities - ghostty - impression - resources - file-roller - baobab - planify - dosage-tracker - - # Proton - protonmail-bridge-gui - protonmail-desktop - protonvpn-gui - proton-pass - - # Customization - gnome-tweaks - gnome-extension-manager - adw-gtk3 - paper-icon-theme - # gnomeExtensions.gsconnect - - # Multimedia - pipewire.dev - # pulseaudio - libopus - # Printing hplipWithPlugin ]; # Flatpaks services.flatpak = lib.mkIf (config?services.flatpak.packages) { - remotes = lib.mkOptionDefault [{ - name = "gnome-nightly"; - location = "https://nightly.gnome.org/gnome-nightly.flatpakrepo"; - }]; - packages = [ - # Image - "page.kramo.Sly" - - # Video - "org.nickvision.tubeconverter" - - # Audio - "io.github.revisto.drum-machine" - - # Reading - "com.github.johnfactotum.Foliate" - - # Science - "com.github.alexhuntley.Plots" - - # Office - "com.belmoussaoui.Obfuscate" - "com.github.muriloventuroso.pdftricks" - "com.github.flxzt.rnote" - "com.github.jeromerobert.pdfarranger" - "garden.jamie.Morphosis" - # Utilities - "com.belmoussaoui.Decoder" - "io.github.nokse22.minitext" "org.gnome.World.PikaBackup" - "io.github.fabrialberio.pinapp" - "re.sonny.Eloquent" # Customization - "ca.desrt.dconf-editor" - "app.drey.Damask" - "com.github.GradienceTeam.Gradience" "com.github.tchx84.Flatseal" # Games "com.usebottles.bottles" - "dev.tchx84.Gameeky" - "dev.tchx84.Gameeky.ThematicPack.FreedomValley" - "dev.tchx84.Gameeky.ThematicPack.Blasterman" - "dev.tchx84.Gameeky.ThematicPack.Wackman" - "net.zdechov.app.TransLines" - "io.github.nokse22.ultimate-tic-tac-toe" - - # Programming - { appId = "org.gnome.Builder.Devel"; origin = "gnome-nightly"; } - "app.drey.Biblioteca" ]; uninstallUnmanaged = true; diff --git a/modules/desktop/system.nix b/modules/desktop/system.nix index 0f47190..cb0a96a 100644 --- a/modules/desktop/system.nix +++ b/modules/desktop/system.nix @@ -12,24 +12,6 @@ # Fingerprint services.fprintd.enable = true; - security.pam.services.login.fprintAuth = false; - security.pam.services.gdm-fingerprint.text = '' - auth required pam_shells.so - auth requisite pam_nologin.so - auth requisite pam_faillock.so preauth - auth required ${pkgs.fprintd}/lib/security/pam_fprintd.so - auth optional pam_permit.so - auth required pam_env.so - auth [success=ok default=1] ${pkgs.gdm}/lib/security/pam_gdm.so - auth optional ${pkgs.gnome-keyring}/lib/security/pam_gnome_keyring.so - - account include login - - password required pam_deny.so - - session include login - session optional ${pkgs.gnome-keyring}/lib/security/pam_gnome_keyring.so auto_start - ''; # Touchpad services.libinput.enable = true; @@ -45,11 +27,6 @@ programs.xwayland.enable = true; environment.sessionVariables.NIXOS_OZONE_WL = "1"; - # GNOME - services.xserver.displayManager.gdm.enable = true; - services.xserver.desktopManager.gnome.enable = true; - environment.gnome.excludePackages = [ pkgs.evince ]; - # KDE # services.desktopManager.plasma6.enable = true; # programs.ssh.askPassword = lib.mkForce "${pkgs.gnome.seahorse}/libexec/seahorse/ssh-askpass"; diff --git a/modules/gnome/default.nix b/modules/gnome/default.nix new file mode 100644 index 0000000..9b86a87 --- /dev/null +++ b/modules/gnome/default.nix @@ -0,0 +1,39 @@ +{ pkgs, lib, ... }: + +{ + imports = + [ + ./packages.nix + ]; + + # Fingerprint + security.pam.services.login.fprintAuth = false; + security.pam.services.gdm-fingerprint.text = '' + auth required pam_shells.so + auth requisite pam_nologin.so + auth requisite pam_faillock.so preauth + auth required ${pkgs.fprintd}/lib/security/pam_fprintd.so + auth optional pam_permit.so + auth required pam_env.so + auth [success=ok default=1] ${pkgs.gdm}/lib/security/pam_gdm.so + auth optional ${pkgs.gnome-keyring}/lib/security/pam_gnome_keyring.so + + account include login + + password required pam_deny.so + + session include login + session optional ${pkgs.gnome-keyring}/lib/security/pam_gnome_keyring.so auto_start + ''; + + # GNOME + services.xserver.displayManager.gdm.enable = true; + services.xserver.desktopManager.gnome.enable = true; + environment.gnome.excludePackages = [ pkgs.evince ]; + + # KDE Connect + programs.kdeconnect = { + enable = true; + package = lib.mkDefault pkgs.gnomeExtensions.gsconnect; + }; +} diff --git a/modules/gnome/packages.nix b/modules/gnome/packages.nix new file mode 100644 index 0000000..fb8afa4 --- /dev/null +++ b/modules/gnome/packages.nix @@ -0,0 +1,107 @@ +{ pkgs, lib, config, ... }: + +{ + environment.systemPackages = with pkgs; [ + # Web + fragments + varia + whatip + epiphany + + # Image + drawing + loupe + snapshot + + # Video + kooha + video-trimmer + + # Audio + shortwave + gnome-podcasts + gnome-sound-recorder + + # Reading + papers + + # Note taking + apostrophe + setzer + + # Programming + devtoolbox + + # Containers & VMs + gnome-boxes + + # System + gnome-firmware + + # Utilities + impression + resources + file-roller + baobab + planify + dosage-tracker + + # Customization + gnome-tweaks + gnome-extension-manager + adw-gtk3 + paper-icon-theme + ]; + + services.flatpak = lib.mkIf (config?services.flatpak.packages) { + remotes = lib.mkOptionDefault [{ + name = "gnome-nightly"; + location = "https://nightly.gnome.org/gnome-nightly.flatpakrepo"; + }]; + + packages = [ + # Image + "page.kramo.Sly" + + # Video + "org.nickvision.tubeconverter" + + # Audio + "io.github.revisto.drum-machine" + + # Reading + "com.github.johnfactotum.Foliate" + + # Science + "com.github.alexhuntley.Plots" + + # Office + "com.belmoussaoui.Obfuscate" + "com.github.muriloventuroso.pdftricks" + "com.github.flxzt.rnote" + "com.github.jeromerobert.pdfarranger" + "garden.jamie.Morphosis" + + # Utilities + "com.belmoussaoui.Decoder" + "io.github.nokse22.minitext" + "io.github.fabrialberio.pinapp" + "re.sonny.Eloquent" + + # Customization + "ca.desrt.dconf-editor" + "app.drey.Damask" + "com.github.GradienceTeam.Gradience" + + # Games + "dev.tchx84.Gameeky" + "dev.tchx84.Gameeky.ThematicPack.FreedomValley" + "dev.tchx84.Gameeky.ThematicPack.Blasterman" + "dev.tchx84.Gameeky.ThematicPack.Wackman" + + # Programming + { appId = "org.gnome.Builder.Devel"; origin = "gnome-nightly"; } + "app.drey.Biblioteca" + ]; + }; +} diff --git a/users/lyes/common/default.nix b/users/lyes/common/default.nix new file mode 100644 index 0000000..15f89f7 --- /dev/null +++ b/users/lyes/common/default.nix @@ -0,0 +1,32 @@ +{ pkgs, home-manager, ... }: + +{ + imports = + [ + ./packages.nix + home-manager.nixosModules.default + ]; + + users.users.lyes = { + description = "Lyes Saadi"; + home = "/home/lyes"; + isNormalUser = true; + initialHashedPassword = ""; # Set for vms and initial installations + extraGroups = [ "wheel" "networkmanager" ]; + shell = pkgs.fish; + }; + + home-manager.useUserPackages = true; + home-manager.useGlobalPkgs = true; + home-manager.users.lyes = { ... }: { + imports = + [ + ./home.nix + ]; + + home.username = "lyes"; + home.homeDirectory = "/home/lyes"; + + home.stateVersion = "22.11"; + }; +} diff --git a/users/lyes/home.nix b/users/lyes/common/home.nix similarity index 100% rename from users/lyes/home.nix rename to users/lyes/common/home.nix diff --git a/users/lyes/packages.nix b/users/lyes/common/packages.nix similarity index 61% rename from users/lyes/packages.nix rename to users/lyes/common/packages.nix index 4ac40d4..dc46daf 100644 --- a/users/lyes/packages.nix +++ b/users/lyes/common/packages.nix @@ -1,9 +1,9 @@ -{ pkgs, nixpkgs-unstable, lib, config, ... }: +{ pkgs, ... }: { # Packages users.users.lyes.packages = with pkgs; [ - # Commandline + # Commandline Utilities starship wl-clipboard sl diff --git a/users/lyes/default.nix b/users/lyes/default.nix index 15f89f7..e02d7ed 100644 --- a/users/lyes/default.nix +++ b/users/lyes/default.nix @@ -1,32 +1,8 @@ -{ pkgs, home-manager, ... }: +{ ... }: { imports = [ - ./packages.nix - home-manager.nixosModules.default + ./common ]; - - users.users.lyes = { - description = "Lyes Saadi"; - home = "/home/lyes"; - isNormalUser = true; - initialHashedPassword = ""; # Set for vms and initial installations - extraGroups = [ "wheel" "networkmanager" ]; - shell = pkgs.fish; - }; - - home-manager.useUserPackages = true; - home-manager.useGlobalPkgs = true; - home-manager.users.lyes = { ... }: { - imports = - [ - ./home.nix - ]; - - home.username = "lyes"; - home.homeDirectory = "/home/lyes"; - - home.stateVersion = "22.11"; - }; } diff --git a/users/lyes/desktop/default.nix b/users/lyes/desktop/default.nix new file mode 100644 index 0000000..4934d9a --- /dev/null +++ b/users/lyes/desktop/default.nix @@ -0,0 +1,8 @@ +{ ... }: + +{ + imports = + [ + ./packages.nix + ]; +} diff --git a/users/lyes/desktop/packages.nix b/users/lyes/desktop/packages.nix new file mode 100644 index 0000000..15cc821 --- /dev/null +++ b/users/lyes/desktop/packages.nix @@ -0,0 +1,124 @@ +{ pkgs, zen-browser, ... }: + +let + tex = (pkgs.texlive.combine { inherit (pkgs.texlive) + scheme-medium + lettre + wallpaper + lastpage + hyphenat + moresize + fontawesome5 + montserrat + titlesec + ly1 + footmisc + titling + frpseudocode + ebproof + comment; + }); +in { + users.users.lyes.packages = with pkgs; [ + # Web + zen-browser.packages."${system}".default + dropbox + filezilla + organicmaps + + # Messaging + discord + vesktop + whatsapp-for-linux + # element-desktop + fractal + zoom-us + + # Image + gimp + inkscape + + # Video + mpv + syncplay + obs-studio + yt-dlp + handbrake + (kodi.withPackages(kodiPkgs: with kodiPkgs; [ + youtube + sponsorblock + pvr-iptvsimple + ])) + + # Audio + helvum + local.quadcastrgb + + # Games + heroic + # cemu + prismlauncher + # vvvvvv + ryujinx + dolphin-emu + parsec-bin + unstable.suyu + # suyu + # factorio + + # Reading + # calibre + + # Note taking + tex + pandoc + unstable.typst + # typst + tinymist + zotero + + # Programming + git + git-lfs + vscode + # zed-editor + gcc + rustup + python3 + ocaml + ocamlPackages.ocaml-lsp + ocamlPackages.ocamlformat + opam + ledit + nodejs + nil + nixd + nixfmt-rfc-style + protege # LogIA Course + haskellPackages.Agda + agdaPackages.standard-library + elan + + # Containers & VMs + toolbox + distrobox + + # Virtualization + qemu + virt-manager + + # Utilities + ghostty + + # Proton + protonmail-bridge-gui + protonmail-desktop + protonvpn-gui + proton-pass + + # Multimedia + pipewire.dev + # pulseaudio + libopus + ]; +}