diff --git a/README.md b/README.md index 57e9cfd4..d74f1310 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ You might find it weird that most of my config is written in TypeScript. That's because all my desktops run [AGS](https://github.com/Aylur/ags) for UI. Click on -[this](https://git.nelim.org/matt1432/nixos-configs/src/branch/master/modules/ags) +[this](https://git.nelim.org/matt1432/nixos-configs/src/branch/master/nixosModules/ags) to see my configuration. I'm also a victim of Stockholm syndrome at this point and make my scripts @@ -17,10 +17,8 @@ in TypeScript because it's the scripting language I am most comfortable with. ### General This repo is the complete configuration of machines I own, -running NixOS or Nix. I tend to mix Home-Manager and NixOS -a lot to make my custom modules by using my global vars system -explained -[here](https://git.nelim.org/matt1432/nixos-configs/src/branch/master/devices) +running NixOS or Nix. Its structure is based on a flake's +[outputs](https://wiki.nixos.org/wiki/Flakes#Output_schema). ### Flake Location @@ -46,6 +44,9 @@ sudo ln -sf /home/matt/.nix /etc/nixos | `nixOnDroidConfigurations.default` | [Nix-On-Droid](https://git.nelim.org/matt1432/nixos-configs/src/branch/master/devices/android)'s configuration | | `packages` | Some custom [packages](https://git.nelim.org/matt1432/nixos-configs/src/branch/master/packages) not available in nixpkgs or modified from it | | `legacyPackages` | Some custom [package scopes](https://git.nelim.org/matt1432/nixos-configs/src/branch/master/legacyPackages) not available in nixpkgs or modified from it | +| `apps` | Scripts ran from the flake defined [here](https://git.nelim.org/matt1432/nixos-configs/src/branch/master/apps) | +| `homeManagerModules` | [Modules](https://git.nelim.org/matt1432/nixos-configs/src/branch/master/homeManagerModules) made for home-manager | +| `homeManagerModules` | [Modules](https://git.nelim.org/matt1432/nixos-configs/src/branch/master/nixosModules) made for NixOS systems | | `formatter` | I format nix code with [alejandra](https://github.com/kamadorueda/alejandra) | | `devShells.default` | A dev shell to build an ISO from the live-image nixosConfiguration | | `devShells.ags` | A dev shell to have a NodeJS env when I enter my AGS's config directory | diff --git a/common/default.nix b/common/default.nix index 56859846..94efb38b 100644 --- a/common/default.nix +++ b/common/default.nix @@ -8,16 +8,15 @@ pkgs, self, ... -} @ inputs: { +}: { imports = [ ./vars ./modules ./packages.nix + self.nixosModules.borgbackup home-manager.nixosModules.home-manager - - ../modules/borgbackup ]; boot.tmp.useTmpfs = true; diff --git a/common/modules/locale.nix b/common/modules/locale.nix index 6db81086..1c78c79a 100644 --- a/common/modules/locale.nix +++ b/common/modules/locale.nix @@ -4,7 +4,7 @@ enable = true; defaultFonts = { emoji = ["Noto Color Emoji"]; - monospace = ["Noto Nerd Font"]; + monospace = ["JetBrainsMono Nerd Font"]; sansSerif = ["Noto Nerd Font"]; serif = ["Noto Nerd Font"]; }; diff --git a/devices/bbsteamie/default.nix b/devices/bbsteamie/default.nix index 569229ad..78eff425 100644 --- a/devices/bbsteamie/default.nix +++ b/devices/bbsteamie/default.nix @@ -1,5 +1,6 @@ { config, + pkgs, self, ... }: let @@ -11,12 +12,11 @@ in { imports = [ ./hardware-configuration.nix - ../../modules/kmscon.nix - ../../modules/sshd.nix - ./modules/desktop + self.nixosModules.kmscon self.nixosModules.plymouth + self.nixosModules.server ]; # State Version: DO NOT CHANGE @@ -50,8 +50,16 @@ in { # ------------------------------------------------ # `Self` Modules configuration # ------------------------------------------------ + roles.server = { + user = mainUser; + sshd.enable = true; + }; + boot.plymouth = { enable = true; theme = "steamos"; + themePackages = [pkgs.steamdeck-hw-theme]; }; + + services.kmscon.enable = true; } diff --git a/devices/binto/default.nix b/devices/binto/default.nix index 9f09a48e..d5fde0df 100644 --- a/devices/binto/default.nix +++ b/devices/binto/default.nix @@ -11,24 +11,18 @@ in { imports = [ ./hardware-configuration.nix - ../../modules/ags - ../../modules/audio.nix - ../../modules/kmscon.nix - ../../modules/printer.nix - ../../modules/ratbag-mice.nix - ../../modules/sshd.nix - ../../modules/tailscale.nix - ./modules/gpu-replay.nix ./modules/nix-gaming.nix self.nixosModules.adb self.nixosModules.desktop + self.nixosModules.kmscon + self.nixosModules.server ]; home-manager.users.${mainUser} = { imports = [ - ../../home/firefox + self.homeManagerModules.firefox ]; # State Version: DO NOT CHANGE @@ -72,14 +66,23 @@ in { roles.desktop = { user = mainUser; + ags.enable = true; mainMonitor = "desc:GIGA-BYTE TECHNOLOGY CO. LTD. G27QC 0x00000B1D"; displayManager.duplicateScreen = false; fontSize = 12.5; }; + roles.server = { + user = mainUser; + tailscale.enable = true; + sshd.enable = true; + }; + programs.adb = { enable = true; user = mainUser; }; + + services.kmscon.enable = true; } diff --git a/devices/cluster/default.nix b/devices/cluster/default.nix index ef2c5fec..eaf93235 100644 --- a/devices/cluster/default.nix +++ b/devices/cluster/default.nix @@ -1,4 +1,4 @@ -deviceName: {config, ...}: let +deviceName: {config, self, ...}: let inherit (config.vars) mainUser hostName; clusterIP = config.services.pcsd.virtualIps.caddy-vip.ip; @@ -9,11 +9,10 @@ in { imports = [ ./hardware-configuration.nix - ../../modules/kmscon.nix - ../../modules/sshd.nix - ../../modules/tailscale.nix - ./modules/pcsd.nix + + self.nixosModules.kmscon + self.nixosModules.server ]; # State Version: DO NOT CHANGE @@ -57,4 +56,15 @@ in { }; time.timeZone = "America/Montreal"; + + # ------------------------------------------------ + # `Self` Modules configuration + # ------------------------------------------------ + roles.server = { + user = mainUser; + tailscale.enable = true; + sshd.enable = true; + }; + + services.kmscon.enable = true; } diff --git a/devices/nos/default.nix b/devices/nos/default.nix index 18d2bebe..6c6ff512 100644 --- a/devices/nos/default.nix +++ b/devices/nos/default.nix @@ -11,10 +11,6 @@ in { imports = [ ./hardware-configuration.nix - ../../modules/kmscon.nix - ../../modules/sshd.nix - ../../modules/tailscale.nix - ./modules/docker ./modules/jellyfin ./modules/mergerfs.nix @@ -23,6 +19,8 @@ in { ./modules/subtitles self.nixosModules.docker + self.nixosModules.kmscon + self.nixosModules.server ]; # State Version: DO NOT CHANGE @@ -54,4 +52,15 @@ in { }; time.timeZone = "America/Montreal"; + + # ------------------------------------------------ + # `Self` Modules configuration + # ------------------------------------------------ + roles.server = { + user = mainUser; + tailscale.enable = true; + sshd.enable = true; + }; + + services.kmscon.enable = true; } diff --git a/devices/servivi/default.nix b/devices/servivi/default.nix index 91e0a761..a8209807 100644 --- a/devices/servivi/default.nix +++ b/devices/servivi/default.nix @@ -11,10 +11,6 @@ in { imports = [ ./hardware-configuration.nix - ../../modules/kmscon.nix - ../../modules/sshd.nix - ../../modules/tailscale.nix - ./modules/7-days-to-die.nix ./modules/binary-cache.nix ./modules/minecraft.nix @@ -22,6 +18,8 @@ in { ./modules/pr-tracker.nix self.nixosModules.docker + self.nixosModules.kmscon + self.nixosModules.server ]; # State Version: DO NOT CHANGE @@ -70,5 +68,11 @@ in { # ------------------------------------------------ # `Self` Modules configuration # ------------------------------------------------ - # ... + roles.server = { + user = mainUser; + tailscale.enable = true; + sshd.enable = true; + }; + + services.kmscon.enable = true; } diff --git a/devices/wim/default.nix b/devices/wim/default.nix index 4d964d9d..96dacef1 100644 --- a/devices/wim/default.nix +++ b/devices/wim/default.nix @@ -1,6 +1,7 @@ { config, self, + pkgs, ... }: let inherit (config.vars) mainUser hostName; @@ -11,22 +12,18 @@ in { imports = [ ./hardware-configuration.nix - ../../modules/ags - ../../modules/audio.nix - ../../modules/kmscon.nix - ../../modules/printer.nix - ../../modules/tailscale.nix - ./modules/security.nix self.nixosModules.adb self.nixosModules.desktop + self.nixosModules.kmscon self.nixosModules.plymouth + self.nixosModules.server ]; home-manager.users.${mainUser} = { imports = [ - ../../home/firefox + self.homeManagerModules.firefox ]; # State Version: DO NOT CHANGE @@ -73,6 +70,7 @@ in { roles.desktop = { user = mainUser; + ags.enable = true; mainMonitor = "eDP-1"; isLaptop = true; isTouchscreen = true; @@ -80,6 +78,11 @@ in { fontSize = 12.5; }; + roles.server = { + user = mainUser; + tailscale.enable = true; + }; + programs.adb = { enable = true; user = mainUser; @@ -88,5 +91,10 @@ in { boot.plymouth = { enable = true; theme = "dracula"; + themePackages = [ + self.legacyPackages.${pkgs.system}.dracula.plymouth + ]; }; + + services.kmscon.enable = true; } diff --git a/flake.in.nix b/flake.in.nix index ab92ef7c..cac3adb4 100644 --- a/flake.in.nix +++ b/flake.in.nix @@ -55,13 +55,9 @@ nixpkgs.lib.genAttrs supportedSystems (system: attrs (mkPkgs system nixpkgs)); in { - nixosModules = { - adb = import ./modules/adb.nix; - desktop = import ./modules/desktop; - docker = import ./modules/docker; - nvidia = import ./modules/nvidia.nix; - plymouth = import ./modules/plymouth.nix; - }; + nixosModules = import ./nixosModules self; + + homeManagerModules = import ./homeManagerModules self; nixosConfigurations = { # Desktops diff --git a/home/firefox/default.nix b/home/firefox/default.nix deleted file mode 100644 index d242a3b9..00000000 --- a/home/firefox/default.nix +++ /dev/null @@ -1,219 +0,0 @@ -{ - config, - firefox-gx-src, - pkgs, - self, - ... -}: let - inherit (config.vars) hostName; - - inherit (self.legacyPackages.${pkgs.system}) firefoxAddons; - - firefox-gx = pkgs.callPackage ./gx-theme.nix { - inherit firefox-gx-src; - }; -in { - home.file = { - ".mozilla/firefox/matt/chrome/userContent.css".source = "${firefox-gx}/chrome/userContent.css"; - ".mozilla/firefox/matt/chrome/components".source = "${firefox-gx}/chrome/components"; - ".mozilla/firefox/matt/chrome/images".source = "${firefox-gx}/chrome/images"; - ".mozilla/firefox/matt/chrome/icons".source = "${firefox-gx}/chrome/icons"; - }; - - programs.firefox = { - enable = true; - profiles.matt = { - isDefault = true; - id = 0; - - userChrome = '' - @import url("file://${firefox-gx}/chrome/userChrome.css"); - ${import ./custom-css.nix hostName} - ''; - - settings = { - # Theme - "firefoxgx.tab-shapes" = true; - "firefoxgx.left-sidebar" = true; - "userChrome.tab.bottom_rounded_corner" = true; - "userChrome.tab.bottom_rounded_corner.wave" = false; - "userChrome.tab.bottom_rounded_corner.australis" = true; - "widget.use-xdg-desktop-portal.file-picker" = 1; - - # Firefox-gx user.js - /* - Default rules - */ - "toolkit.legacyUserProfileCustomizations.stylesheets" = true; - "svg.context-properties.content.enabled" = true; - "layout.css.color-mix.enabled" = true; - "browser.tabs.delayHidingAudioPlayingIconMS" = 0; - "layout.css.backdrop-filter.enabled" = true; - "browser.newtabpage.activity-stream.improvesearch.handoffToAwesomebar" = false; - "browser.newtabpage.activity-stream.newtabWallpapers.enabled" = true; - - /* - To active container tabs without any extension - */ - "privacy.userContext.enabled" = true; - "privacy.userContext.ui.enabled" = true; - "privacy.userContext.longPressBehavior" = 2; - - # Open previous windows and tabs - "browser.startup.page" = 3; - - # Prefs - "layout.css.devPixelsPerPx" = 1.12; - "browser.search.widget.inNavBar" = true; - "browser.toolbars.bookmarks.visibility" = "always"; - "browser.toolbars.bookmarks.showInPrivateBrowsing" = true; - "ui.key.menuAccessKey" = 0; - - # remove telemetry - "datareporting.policy.dataSubmissionEnabled" = false; - "datareporting.healthreport.uploadEnabled" = false; - "datareporting.healthreport.infoURL" = ""; - "dom.security.https_only_mode" = true; - - # remove first run and warning stuff - "datareporting.policy.firstRunURL" = ""; - "browser.aboutwelcome.enabled" = false; - "browser.aboutConfig.showWarning" = false; - - # Disable firefox autofill - "signon.rememberSignons" = false; - "extensions.formautofill.addresses.enabled" = false; - "extensions.formautofill.creditCards.enabled" = false; - - # remove new tab stuff - "extensions.pocket.enabled" = false; - "services.sync.prefs.sync.browser.newtabpage.activity-stream.feeds.section.topstories" = false; - "browser.newtabpage.activity-stream.section.highlights.includePocket" = false; - "browser.newtabpage.activity-stream.feeds.system.topstories" = false; - "browser.newtabpage.activity-stream.feeds.section.topstories" = false; - "browser.newtabpage.activity-stream.feeds.topsites" = false; - "browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons" = false; - "browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features" = false; - }; - - search = { - default = "DuckDuckGo"; - force = true; - engines = { - "Nixpkgs" = { - urls = [ - { - template = "https://github.com/search?q=repo%3ANixOS%2Fnixpkgs%20{searchTerms}&type=code"; - } - ]; - iconUpdateURL = "https://github.githubassets.com/favicons/favicon.png"; - updateInterval = 24 * 60 * 60 * 1000; # every day - definedAliases = ["@pkgs"]; - }; - - "NixOS Wiki" = { - urls = [ - { - template = "https://nixos.wiki/index.php?search={searchTerms}"; - } - ]; - iconUpdateURL = "https://nixos.wiki/favicon.png"; - updateInterval = 24 * 60 * 60 * 1000; # every day - definedAliases = ["@nw"]; - }; - - "MyNixos" = { - urls = [ - { - template = "https://mynixos.com/search?q={searchTerms}"; - } - ]; - iconUpdateURL = "https://mynixos.com/favicon.ico"; - updateInterval = 24 * 60 * 60 * 1000; # every day - definedAliases = ["@mn"]; - }; - - "Noogle" = { - urls = [ - { - template = "https://noogle.dev/q?term={searchTerms}"; - } - ]; - iconUpdateURL = "https://noogle.dev/favicon.ico"; - updateInterval = 24 * 60 * 60 * 1000; # every day - definedAliases = ["@ng"]; - }; - - "Firefox Add-ons" = { - urls = [ - { - template = "https://addons.mozilla.org/en-US/firefox/search/?q={searchTerms}"; - } - ]; - iconUpdateURL = "https://addons.mozilla.org/favicon.ico"; - updateInterval = 24 * 60 * 60 * 1000; # every day - definedAliases = ["@fa"]; - }; - - "ProtonDB" = { - urls = [ - { - template = "https://www.protondb.com/search?q={searchTerms}"; - } - ]; - iconUpdateURL = "https://www.protondb.com/favicon.ico"; - updateInterval = 24 * 60 * 60 * 1000; # every day - definedAliases = ["@pdb"]; - }; - - "YouTube" = { - urls = [ - { - template = "https://www.youtube.com/results?search_query={searchTerms}"; - } - ]; - iconUpdateURL = "https://www.youtube.com/favicon.ico"; - updateInterval = 24 * 60 * 60 * 1000; # every day - definedAliases = ["@yt" "@youtube"]; - }; - - "Bing".metaData.hidden = true; - "Google".metaData.hidden = true; - "eBay".metaData.hidden = true; - }; - order = [ - "DuckDuckGo" - "MyNixos" - "NixOS Wiki" - "Nixpkgs" - "Noogle" - "Wikipedia (en)" - "YouTube" - "Firefox Add-ons" - "ProtonDB" - "Amazon.ca" - ]; - }; - - extensions = with firefoxAddons; [ - auto-refresh-page - bitwarden - checkmarks-web-ext - darkreader - floccus - google-container - image-search-options - istilldontcareaboutcookies - opera-gx-witchcraft-purple - return-youtube-dislikes - seventv - sponsorblock - sound-volume - stylus - ttv-lol-pro - ublock-origin - undoclosetabbutton - ]; - }; - }; -} diff --git a/homeManagerModules/default.nix b/homeManagerModules/default.nix new file mode 100644 index 00000000..74c0734b --- /dev/null +++ b/homeManagerModules/default.nix @@ -0,0 +1,3 @@ +self: { + firefox = import ./firefox self; +} diff --git a/home/firefox/custom-css.nix b/homeManagerModules/firefox/custom-css.nix similarity index 100% rename from home/firefox/custom-css.nix rename to homeManagerModules/firefox/custom-css.nix diff --git a/homeManagerModules/firefox/default.nix b/homeManagerModules/firefox/default.nix new file mode 100644 index 00000000..753b55ff --- /dev/null +++ b/homeManagerModules/firefox/default.nix @@ -0,0 +1,222 @@ +self: { + osConfig, + pkgs, + ... +}: let + inherit (osConfig.networking) hostName; + + inherit (self.legacyPackages.${pkgs.system}) firefoxAddons; + + firefox-gx = pkgs.callPackage ./gx-theme.nix { + inherit (self.inputs) firefox-gx-src; + }; +in { + config = { + home.file = { + ".mozilla/firefox/matt/chrome/userContent.css".source = "${firefox-gx}/chrome/userContent.css"; + ".mozilla/firefox/matt/chrome/components".source = "${firefox-gx}/chrome/components"; + ".mozilla/firefox/matt/chrome/images".source = "${firefox-gx}/chrome/images"; + ".mozilla/firefox/matt/chrome/icons".source = "${firefox-gx}/chrome/icons"; + }; + + programs.firefox = { + enable = true; + profiles.matt = { + isDefault = true; + id = 0; + + userChrome = '' + @import url("file://${firefox-gx}/chrome/userChrome.css"); + ${import ./custom-css.nix hostName} + ''; + + settings = { + # Theme + "firefoxgx.tab-shapes" = true; + "firefoxgx.left-sidebar" = true; + "userChrome.tab.bottom_rounded_corner" = true; + "userChrome.tab.bottom_rounded_corner.wave" = false; + "userChrome.tab.bottom_rounded_corner.australis" = true; + "widget.use-xdg-desktop-portal.file-picker" = 1; + + # Firefox-gx user.js + /* + Default rules + */ + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + "svg.context-properties.content.enabled" = true; + "layout.css.color-mix.enabled" = true; + "browser.tabs.delayHidingAudioPlayingIconMS" = 0; + "layout.css.backdrop-filter.enabled" = true; + "browser.newtabpage.activity-stream.improvesearch.handoffToAwesomebar" = false; + "browser.newtabpage.activity-stream.newtabWallpapers.enabled" = true; + + /* + To active container tabs without any extension + */ + "privacy.userContext.enabled" = true; + "privacy.userContext.ui.enabled" = true; + "privacy.userContext.longPressBehavior" = 2; + + # Open previous windows and tabs + "browser.startup.page" = 3; + + # Prefs + "layout.css.devPixelsPerPx" = 1.12; + "browser.search.widget.inNavBar" = true; + "browser.toolbars.bookmarks.visibility" = "always"; + "browser.toolbars.bookmarks.showInPrivateBrowsing" = true; + "ui.key.menuAccessKey" = 0; + + # remove telemetry + "datareporting.policy.dataSubmissionEnabled" = false; + "datareporting.healthreport.uploadEnabled" = false; + "datareporting.healthreport.infoURL" = ""; + "dom.security.https_only_mode" = true; + + # remove first run and warning stuff + "datareporting.policy.firstRunURL" = ""; + "browser.aboutwelcome.enabled" = false; + "browser.aboutConfig.showWarning" = false; + + # Disable firefox autofill + "signon.rememberSignons" = false; + "extensions.formautofill.addresses.enabled" = false; + "extensions.formautofill.creditCards.enabled" = false; + + # remove new tab stuff + "extensions.pocket.enabled" = false; + "services.sync.prefs.sync.browser.newtabpage.activity-stream.feeds.section.topstories" = false; + "browser.newtabpage.activity-stream.section.highlights.includePocket" = false; + "browser.newtabpage.activity-stream.feeds.system.topstories" = false; + "browser.newtabpage.activity-stream.feeds.section.topstories" = false; + "browser.newtabpage.activity-stream.feeds.topsites" = false; + "browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons" = false; + "browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features" = false; + }; + + search = { + default = "DuckDuckGo"; + force = true; + engines = { + "Nixpkgs" = { + urls = [ + { + template = "https://github.com/search?q=repo%3ANixOS%2Fnixpkgs%20{searchTerms}&type=code"; + } + ]; + iconUpdateURL = "https://github.githubassets.com/favicons/favicon.png"; + updateInterval = 24 * 60 * 60 * 1000; # every day + definedAliases = ["@pkgs"]; + }; + + "NixOS Wiki" = { + urls = [ + { + template = "https://nixos.wiki/index.php?search={searchTerms}"; + } + ]; + iconUpdateURL = "https://nixos.wiki/favicon.png"; + updateInterval = 24 * 60 * 60 * 1000; # every day + definedAliases = ["@nw"]; + }; + + "MyNixos" = { + urls = [ + { + template = "https://mynixos.com/search?q={searchTerms}"; + } + ]; + iconUpdateURL = "https://mynixos.com/favicon.ico"; + updateInterval = 24 * 60 * 60 * 1000; # every day + definedAliases = ["@mn"]; + }; + + "Noogle" = { + urls = [ + { + template = "https://noogle.dev/q?term={searchTerms}"; + } + ]; + iconUpdateURL = "https://noogle.dev/favicon.ico"; + updateInterval = 24 * 60 * 60 * 1000; # every day + definedAliases = ["@ng"]; + }; + + "Firefox Add-ons" = { + urls = [ + { + template = "https://addons.mozilla.org/en-US/firefox/search/?q={searchTerms}"; + } + ]; + iconUpdateURL = "https://addons.mozilla.org/favicon.ico"; + updateInterval = 24 * 60 * 60 * 1000; # every day + definedAliases = ["@fa"]; + }; + + "ProtonDB" = { + urls = [ + { + template = "https://www.protondb.com/search?q={searchTerms}"; + } + ]; + iconUpdateURL = "https://www.protondb.com/favicon.ico"; + updateInterval = 24 * 60 * 60 * 1000; # every day + definedAliases = ["@pdb"]; + }; + + "YouTube" = { + urls = [ + { + template = "https://www.youtube.com/results?search_query={searchTerms}"; + } + ]; + iconUpdateURL = "https://www.youtube.com/favicon.ico"; + updateInterval = 24 * 60 * 60 * 1000; # every day + definedAliases = ["@yt" "@youtube"]; + }; + + "Bing".metaData.hidden = true; + "Google".metaData.hidden = true; + "eBay".metaData.hidden = true; + }; + order = [ + "DuckDuckGo" + "MyNixos" + "NixOS Wiki" + "Nixpkgs" + "Noogle" + "Wikipedia (en)" + "YouTube" + "Firefox Add-ons" + "ProtonDB" + "Amazon.ca" + ]; + }; + + extensions = with firefoxAddons; [ + auto-refresh-page + bitwarden + checkmarks-web-ext + darkreader + floccus + google-container + image-search-options + istilldontcareaboutcookies + opera-gx-witchcraft-purple + return-youtube-dislikes + seventv + sponsorblock + sound-volume + stylus + ttv-lol-pro + ublock-origin + undoclosetabbutton + ]; + }; + }; + }; + + # For accurate stack trace + _file = ./default.nix; +} diff --git a/home/firefox/gx-theme.nix b/homeManagerModules/firefox/gx-theme.nix similarity index 100% rename from home/firefox/gx-theme.nix rename to homeManagerModules/firefox/gx-theme.nix diff --git a/home/firefox/non-declarative-conf/ffz-settings (2023-12-13).json b/homeManagerModules/firefox/non-declarative-conf/ffz-settings (2023-12-13).json similarity index 100% rename from home/firefox/non-declarative-conf/ffz-settings (2023-12-13).json rename to homeManagerModules/firefox/non-declarative-conf/ffz-settings (2023-12-13).json diff --git a/modules/ags/default.nix b/modules/ags/default.nix deleted file mode 100644 index 83e96403..00000000 --- a/modules/ags/default.nix +++ /dev/null @@ -1,174 +0,0 @@ -{ - ags, - astal-tray, - config, - gtk-session-lock, - lib, - pkgs, - self, - ts-for-gir-src, - ... -}: let - inherit (lib) boolToString toLower; - - # Configs - inherit (config.vars) mainUser hostName; - cfgDesktop = config.roles.desktop; - flakeDir = config.environment.variables.FLAKE; - isTouchscreen = config.hardware.sensor.iio.enable; - - # Packages - astalTray = astal-tray.packages.${pkgs.system}.tray; - gtkSessionLock = gtk-session-lock.packages.${pkgs.system}.default; -in { - # Enable pam for ags - security.pam.services.ags = {}; - - services.upower.enable = true; - - home-manager.users.${mainUser}.imports = [ - ags.homeManagerModules.default - - ({ - config, - lib, - ... - }: let - inherit (config.lib.file) mkOutOfStoreSymlink; - inherit (lib) hasPrefix optionals removePrefix; - - configJs = - # javascript - '' - Utils.execAsync('hyprpaper'); - - import { transpileTypeScript } from './js/utils.js'; - - export default (await transpileTypeScript('${hostName}')).default; - ''; - - agsPkg = config.programs.ags.finalPackage; - agsConfigDir = "${removePrefix "/home/${mainUser}/" flakeDir}/modules/ags"; - in { - assertions = [ - { - assertion = hasPrefix "/home/${mainUser}/" flakeDir; - message = '' - Your $FLAKE environment variable needs to point to a directory in - the main users' home to use the AGS module. - ''; - } - ]; - - programs.ags = { - enable = true; - extraPackages = [ - astalTray - gtkSessionLock - ]; - }; - - home = { - file = let - mkType = package: girName: { - "${agsConfigDir}/config/types/@girs/${toLower girName}".source = - pkgs.callPackage - ./mk-types { - inherit ts-for-gir-src package girName; - }; - }; - in ( - { - # Generated types - "${agsConfigDir}/config/types" = { - source = "${agsPkg}/share/com.github.Aylur.ags/types"; - recursive = true; # To add other types inside the folder - }; - } - // (mkType gtkSessionLock "GtkSessionLock-0.1") - // (mkType astalTray "AstalTray-0.1") - // { - # Out of store symlinks - ".config/ags".source = mkOutOfStoreSymlink "${flakeDir}/modules/ags/config"; - - # Generated JavaScript files - "${agsConfigDir}/config/config.js".text = configJs; - "${agsConfigDir}/config/ts/lockscreen/vars.ts".text = - # javascript - '' - export default { - mainMonitor: '${cfgDesktop.mainMonitor}', - dupeLockscreen: ${boolToString cfgDesktop.displayManager.duplicateScreen}, - hasFprintd: ${boolToString (hostName == "wim")}, - }; - ''; - } - // (import ./icons.nix {inherit pkgs agsConfigDir;}) - ); - - packages = - [ - # TODO: replace with matugen - self.packages.${pkgs.system}.coloryou - ] - ++ (with pkgs; [ - # ags - dart-sass - bun - playerctl - (callPackage ./clipboard {}) - - ## gui - pavucontrol # TODO: replace with ags widget - ]) - ++ (optionals isTouchscreen (with pkgs; [ - lisgd - ydotool - ])); - }; - - wayland.windowManager.hyprland = { - settings = { - animations = { - bezier = [ - "easeInOutBack, 0.68, -0.6, 0.32, 1.6" - ]; - - animation = [ - "fadeLayersIn, 0" - "fadeLayersOut, 1, 3000, default" - "layers, 1, 8, easeInOutBack, slide left" - ]; - }; - - layerrule = [ - "noanim, ^(?!win-).*" - - # Lockscreen blur - "blur, ^(blur-bg.*)" - "ignorealpha 0.19, ^(blur-bg.*)" - ]; - - exec-once = [ - "ags" - "sleep 3; ags -r 'App.openWindow(\"win-applauncher\")'" - ]; - - bind = [ - "$mainMod SHIFT, E , exec, ags -t win-powermenu" - "$mainMod , D , exec, ags -t win-applauncher" - "$mainMod , V , exec, ags -t win-clipboard" - " , Print, exec, ags -t win-screenshot" - ]; - binde = [ - ## Brightness control - ", XF86MonBrightnessUp , exec, ags -r 'Brightness.screen += 0.05'" - ", XF86MonBrightnessDown, exec, ags -r 'Brightness.screen -= 0.05'" - ]; - bindn = [" , Escape , exec, ags -r 'closeAll()'"]; - bindr = ["CAPS, Caps_Lock, exec, ags -r 'Brightness.fetchCapsState()'"]; - }; - }; - }) - ]; -} diff --git a/modules/audio.nix b/modules/audio.nix deleted file mode 100644 index fe7df897..00000000 --- a/modules/audio.nix +++ /dev/null @@ -1,13 +0,0 @@ -{nix-gaming, ...}: { - imports = [nix-gaming.nixosModules.pipewireLowLatency]; - - hardware.pulseaudio.enable = false; - - services.pipewire = { - enable = true; - alsa.enable = true; - jack.enable = true; - pulse.enable = true; - lowLatency.enable = true; - }; -} diff --git a/modules/desktop/desktop-environment/dconf.nix b/modules/desktop/desktop-environment/dconf.nix deleted file mode 100644 index dbe47ae3..00000000 --- a/modules/desktop/desktop-environment/dconf.nix +++ /dev/null @@ -1,26 +0,0 @@ -{config, ...}: let - cfg = config.roles.desktop; -in { - programs.dconf.enable = true; - - home-manager.users.${cfg.user} = { - dconf.settings = { - "org/virt-manager/virt-manager/connections" = { - autoconnect = ["qemu:///system"]; - uris = ["qemu:///system"]; - }; - - "apps/seahorse/listing" = { - keyrings-selected = ["gnupg://"]; - }; - - "org/gtk/settings/file-chooser" = { - show-hidden = true; - }; - - "org/gnome/desktop/interface" = { - color-scheme = "prefer-dark"; - }; - }; - }; -} diff --git a/modules/desktop/desktop-environment/default.nix b/modules/desktop/desktop-environment/default.nix deleted file mode 100644 index fa7a57ed..00000000 --- a/modules/desktop/desktop-environment/default.nix +++ /dev/null @@ -1,223 +0,0 @@ -{ - config, - hyprland, - lib, - pkgs, - ... -}: let - inherit (lib) concatStringsSep optionals; - - cfg = config.roles.desktop; - - hyprCfg = - config - .home-manager - .users - .${cfg.user} - .wayland - .windowManager - .hyprland; -in { - # SYSTEM CONFIG - imports = [ - ./dconf.nix - - ./packages.nix - ./security.nix - ]; - - services = { - dbus.enable = true; - gvfs.enable = true; - libinput.enable = true; - xserver.wacom.enable = cfg.isTouchscreen; - }; - - programs.hyprland = { - enable = true; - package = hyprCfg.finalPackage; - portalPackage = - hyprland - .packages - .${pkgs.system} - .xdg-desktop-portal-hyprland; - }; - - xdg.portal = { - enable = true; - - extraPortals = with pkgs; [ - xdg-desktop-portal-kde - ]; - - config.hyprland = { - default = [ - "hyprland" - "gtk" - ]; - - "org.freedesktop.impl.portal.FileChooser" = [ - "kde" - ]; - }; - }; - - # HOME-MANAGER CONFIG - home-manager.users.${cfg.user} = { - imports = [ - ./home/dev.nix - - # Plugins - ./home/hyprgrass.nix - ./home/hyprexpo.nix - # ./home/Hyprspace.nix - - ./home/inputs.nix - ./home/style.nix - ]; - - wayland.windowManager.hyprland = { - enable = true; - package = - hyprland - .packages - .${pkgs.system} - .default; - - systemd.variables = ["-all"]; - - settings = { - envd = let - mkGSchemas = pkg: "${pkg}/share/gsettings-schemas/${pkg.name}"; - in - [ - "GTK_USE_PORTAL, 1" - "NIXOS_OZONE_WL, 1" - "ELECTRON_OZONE_PLATFORM_HINT, auto" - - "XDG_DATA_DIRS, ${concatStringsSep ":" [ - (mkGSchemas pkgs.gsettings-desktop-schemas) - (mkGSchemas pkgs.gtk3) - "$XDG_DATA_DIRS" - ]}" - ] - ++ (optionals config.nvidia.enable [ - "LIBVA_DRIVER_NAME, nvidia" - "NVD_BACKEND, direct" - "XDG_SESSION_TYPE, wayland" - "GBM_BACKEND, nvidia-drm" - "__GLX_VENDOR_LIBRARY_NAME, nvidia" - ]); - - xwayland.force_zero_scaling = true; - monitor = [ - (concatStringsSep "," [ - "desc:Acer Technologies Acer K212HQL T3EAA0014201" - "1920x1080@60" - "840x450, 1, transform, 3" - ]) - (concatStringsSep "," [ - "desc:BOE 0x0964" - "1920x1200@60" - "0x2920, 1" - ]) - (concatStringsSep "," [ - "desc:Samsung Electric Company C27JG5x HTOM100586" - "2560x1440@120" - "1920x120, 1" - ]) - (concatStringsSep "," [ - "desc:GIGA-BYTE TECHNOLOGY CO. LTD. G27QC 0x00000B1D" - "2560x1440@120" - "1920x1560, 1" - ]) - ]; - - "$mainMod" = "SUPER"; - - bind = [ - # Defaults - "$mainMod, F, fullscreen" - "$mainMod, C, killactive" - "$mainMod SHIFT, SPACE, togglefloating" - "$mainMod, J, layoutmsg, togglesplit" - - ## Move focus with arrow keys - "$mainMod, left, movefocus, l" - "$mainMod, right, movefocus, r" - "$mainMod, up, movefocus, u" - "$mainMod, down, movefocus, d" - - ## Move to specific workspaces - "$mainMod, 1, workspace, 1" - "$mainMod, 2, workspace, 2" - "$mainMod, 3, workspace, 3" - "$mainMod, 4, workspace, 4" - "$mainMod, 5, workspace, 5" - "$mainMod, 6, workspace, 6" - "$mainMod, 7, workspace, 7" - "$mainMod, 8, workspace, 8" - "$mainMod, 9, workspace, 9" - "$mainMod, 0, workspace, 10" - - # Move active window to a workspace - "$mainMod SHIFT, 1, movetoworkspace, 1" - "$mainMod SHIFT, 2, movetoworkspace, 2" - "$mainMod SHIFT, 3, movetoworkspace, 3" - "$mainMod SHIFT, 4, movetoworkspace, 4" - "$mainMod SHIFT, 5, movetoworkspace, 5" - "$mainMod SHIFT, 6, movetoworkspace, 6" - "$mainMod SHIFT, 7, movetoworkspace, 7" - "$mainMod SHIFT, 8, movetoworkspace, 8" - "$mainMod SHIFT, 9, movetoworkspace, 9" - "$mainMod SHIFT, 0, movetoworkspace, 10" - - ",XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle" - ",XF86AudioMicMute, exec, pactl set-source-mute @DEFAULT_SOURCE@ toggle" - ]; - - binde = [ - ",XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+ & ags -r 'popup_osd(\"speaker\")' &" - ",XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- & ags -r 'popup_osd(\"speaker\")' &" - ]; - - # Mouse Binds - bindm = [ - "$mainMod, mouse:272, movewindow" - "$mainMod, mouse:273, resizewindow" - ]; - - misc = { - disable_hyprland_logo = true; - disable_splash_rendering = true; - vfr = true; - }; - - dwindle = { - smart_split = true; - special_scale_factor = 0.8; - }; - }; - }; - - # libs - home.packages = with pkgs; [ - # tools - bluez-tools - brightnessctl - pulseaudio - alsa-utils - - qt5.qtwayland - qt6.qtwayland - libayatana-appindicator - xdg-utils - evtest - glib - xorg.xrandr - libinput - xclip - libnotify - ]; - }; -} diff --git a/modules/desktop/desktop-environment/dolphin.nix b/modules/desktop/desktop-environment/dolphin.nix deleted file mode 100644 index 8e3c6aa1..00000000 --- a/modules/desktop/desktop-environment/dolphin.nix +++ /dev/null @@ -1,51 +0,0 @@ -{ - config, - pkgs, - ... -}: let - inherit (config.vars) mainUser; -in { - environment.systemPackages = with pkgs; [ - plasma5Packages.kio-admin - ]; - - # To make it work with firefox - # https://www.reddit.com/r/NixOS/comments/xtoubc/comment/koxxr3e/?utm_source=share&utm_medium=web2x&context=3 - systemd.user.services.plasma-dolphin = { - unitConfig = { - Description = "Dolphin file manager"; - PartOf = ["graphical-session.target"]; - }; - path = ["/run/current-system/sw"]; - environment.QT_QPA_PLATFORM = "wayland"; - serviceConfig = { - Type = "dbus"; - BusName = "org.freedesktop.FileManager1"; - ExecStart = "${pkgs.dolphin}/bin/dolphin"; - }; - }; - - home-manager.users.${mainUser}.home.packages = with pkgs; - [ - gnome-calculator - ] - ++ (with kdePackages; [ - kde-cli-tools - ]) - ++ (with plasma5Packages; [ - ark - kcharselect - kdenlive - okular - - # Dolphin & co - dolphin - dolphin-plugins - kdegraphics-thumbnailers - ffmpegthumbs - kio - kio-admin # needs to be both here and in system pkgs - kio-extras - kmime - ]); -} diff --git a/modules/desktop/desktop-environment/home/Hyprspace.nix b/modules/desktop/desktop-environment/home/Hyprspace.nix deleted file mode 100644 index 93009601..00000000 --- a/modules/desktop/desktop-environment/home/Hyprspace.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ - Hyprspace, - pkgs, - ... -}: { - wayland.windowManager.hyprland = { - plugins = [Hyprspace.packages.${pkgs.system}.Hyprspace]; - - settings = { - bind = [ - "ALT, tab, overview:toggle" - ]; - }; - }; -} diff --git a/modules/desktop/desktop-environment/home/dev.nix b/modules/desktop/desktop-environment/home/dev.nix deleted file mode 100644 index 452d91e9..00000000 --- a/modules/desktop/desktop-environment/home/dev.nix +++ /dev/null @@ -1,18 +0,0 @@ -{pkgs, ...}: { - programs.bash.shellAliases = { - # https://wiki.hyprland.org/Contributing-and-Debugging/#lsp-and-formatting - "mkCMakeFiles" = "cmake -S . -B build/ -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON"; - }; - - home.packages = [ - (pkgs.writeShellScriptBin "testChanges" '' - rm -r /home/matt/git/$1/$2/{.cache,build} - nix flake update "$1" - nh os switch - ( - cd "/home/matt/git/$1/$2" - nix develop /home/matt/git/$1 -c cmake -S . -B build/ -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON - ) - '') - ]; -} diff --git a/modules/desktop/desktop-environment/home/foot.nix b/modules/desktop/desktop-environment/home/foot.nix deleted file mode 100644 index d3d08334..00000000 --- a/modules/desktop/desktop-environment/home/foot.nix +++ /dev/null @@ -1,88 +0,0 @@ -{ - lib, - osConfig, - ... -}: let - cfg = osConfig.roles.desktop; -in { - programs = { - # https://codeberg.org/dnkl/foot/wiki#spawning-new-terminal-instances-in-the-current-working-directory - bash.bashrcExtra = - # bash - '' - osc7_cwd() { - local strlen=''${#PWD} - local encoded="" - local pos c o - for (( pos=0; pos /dev/null 2>&1 - do - sleep 0.1 - if [[ $(hyprctl activewindow | grep Ksshaskpass) == "" ]]; then - killall -r ksshaskpass - fi - done - ) & - exec env SUDO_ASKPASS=${plasma5Packages.ksshaskpass}/bin/${plasma5Packages.ksshaskpass.pname} sudo -k -EA "${gparted}/bin/${gparted.pname}" "$@" - '') - - # tools - wl-color-picker - wl-clipboard - cliphist - grim-hyprland - slurp - satty - ]) - ++ [ - jellyfin-flake.packages.${pkgs.system}.jellyfin-media-player - - /* - Discord themes for Vencord - https://markchan0225.github.io/RoundedDiscord/RoundedDiscord.theme.css - https://raw.githubusercontent.com/dracula/BetterDiscord/master/Dracula_Official.theme.css - */ - (pkgs.symlinkJoin { - name = "discord"; - paths = [ - (pkgs.discord.override { - withOpenASAR = true; - withVencord = true; - }) - ]; - buildInputs = [pkgs.makeWrapper]; - postBuild = '' - wrapProgram $out/bin/Discord ${optionalString config.nvidia.enable - ''--prefix LD_LIBRARY_PATH : "${makeLibraryPath [ - pkgs.addOpenGLRunpath.driverLink - pkgs.libglvnd - ]}"''} \ - --add-flags "--enable-features=UseOzonePlatform,WebRTCPipeWireCapturer --ozone-platform=wayland" - ''; - }) - - (pkgs.symlinkJoin { - name = "rstudio"; - paths = [ - (pkgs.rstudioWrapper.override {packages = with pkgs.rPackages; [ggplot2 dplyr xts];}) - ]; - buildInputs = [pkgs.makeWrapper]; - postBuild = '' - wrapProgram $out/bin/rstudio --prefix LD_LIBRARY_PATH : "${makeLibraryPath [ - pkgs.addOpenGLRunpath.driverLink - pkgs.libglvnd - ]}" - ''; - }) - ]; - - wayland.windowManager.hyprland = { - settings = { - exec-once = - [ - "${config.programs.kdeconnect.package}/libexec/kdeconnectd" - "kdeconnect-indicator" - - "wl-paste --watch cliphist store" - - "sleep 3; nextcloud --background" - - "[workspace special:protonmail silent] proton-mail" - "[workspace special:spot silent] spotify" - ] - ++ optionals config.services.tailscale.enable [ - "sleep 3; ${getExe restartTailscale}" - ]; - - windowrule = [ - "tile,^(libreoffice)$" - "float,^(org.gnome.Calculator)$" - "float,^(com.gabm.satty)$" - "size 1000 700,^(com.gabm.satty)$" - - "float,^(com.nextcloud.desktopclient.nextcloud)$" - "move cursor -15 -10,^(com.nextcloud.desktopclient.nextcloud)$" - "size 400 581,^(com.nextcloud.desktopclient.nextcloud)$" - - "workspace special:protonmail silent,^(Proton Mail)$" - "workspace special:spot silent,^(Spotify)$" - ]; - - bind = [ - "$mainMod, Q, exec, foot" - - "$mainMod SHIFT, C, exec, wl-color-picker" - - "$mainMod, P, togglespecialworkspace, protonmail" - "$mainMod, S, togglespecialworkspace, spot" - ]; - }; - }; - }; -} diff --git a/modules/desktop/desktop-environment/security.nix b/modules/desktop/desktop-environment/security.nix deleted file mode 100644 index eb326f09..00000000 --- a/modules/desktop/desktop-environment/security.nix +++ /dev/null @@ -1,108 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: let - inherit (lib) getExe mkIf; - - cfg = config.roles.desktop; - - hmCfg = config.home-manager.users.${cfg.user}; - agsPkg = hmCfg.programs.ags.finalPackage; - hyprPkg = hmCfg.wayland.windowManager.hyprland.finalPackage; - - runInDesktop = pkgs.writeShellApplication { - name = "runInDesktop"; - runtimeInputs = [ - pkgs.sudo - agsPkg - hyprPkg - ]; - - text = '' - params=( "$@" ) - user="$(id -u ${cfg.user})" - readarray -t SIGS <<< "$(ls "/run/user/$user/hypr/")" - - run() { - export HYPRLAND_INSTANCE_SIGNATURE="$1" - sudo -Eu ${cfg.user} hyprctl dispatch exec "''${params[@]}" - } - - i=0 - - # FIXME: not sure if sudo passes the exit status to this - while ! run "''${SIGS[$i]}"; do - ((i+=1)) - done - ''; - }; - - lockPkg = pkgs.writeShellApplication { - name = "lock"; - runtimeInputs = [ - agsPkg - ]; - - text = '' - ags -r 'Tablet.setLaptopMode()' - ags -b lockscreen -c /home/${cfg.user}/.config/ags/lockscreen.js - ''; - }; -in { - services.acpid = mkIf cfg.isLaptop { - enable = true; - - lidEventCommands = - # bash - '' - LID="/proc/acpi/button/lid/LID/state" - state=$(${pkgs.gawk}/bin/awk '{print $2}' "$LID") - - case "$state" in - *open*) - ${getExe runInDesktop} "ags -b lockscreen -r 'authFinger()'" - ;; - - *close*) - ${getExe runInDesktop} ${getExe lockPkg} - ;; - - *) - logger -t lid-handler "Failed to detect lid state ($state)" - ;; - esac - ''; - }; - - home-manager.users.${cfg.user} = { - home.packages = [ - pkgs.seahorse - lockPkg - ]; - - wayland.windowManager.hyprland = { - settings = { - exec-once = [ - "gnome-keyring-daemon --start --components=secrets" - "${pkgs.plasma5Packages.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1" - ]; - - windowrule = [ - "float,^(org.kde.polkit-kde-authentication-agent-1)$" - "size 741 288,^(org.kde.polkit-kde-authentication-agent-1)$" - "center,^(org.kde.polkit-kde-authentication-agent-1)$" - - # For GParted auth - "size 741 288,^(org.kde.ksshaskpass)$" - "move cursor -370 -144,^(org.kde.ksshaskpass)$" - ]; - - bind = [ - "$mainMod, L, exec, ${getExe lockPkg}" - ]; - }; - }; - }; -} diff --git a/modules/desktop/display-manager/ags/default.nix b/modules/desktop/display-manager/ags/default.nix deleted file mode 100644 index 73e08b1e..00000000 --- a/modules/desktop/display-manager/ags/default.nix +++ /dev/null @@ -1,67 +0,0 @@ -{ - ags, - config, - lib, - pkgs, - ... -}: let - cfg = config.roles.desktop; - - hyprland = - config - .home-manager - .users - .${cfg.user} - .wayland - .windowManager - .hyprland - .finalPackage; -in { - # Add home folder for home-manager to work - users.users.greeter = { - home = "/var/lib/greeter"; - createHome = true; - }; - - home-manager.users.greeter = { - imports = [ags.homeManagerModules.default]; - - programs.ags.enable = true; - - home.packages = [ - hyprland - pkgs.gtk3 - pkgs.glib - ]; - - xdg.configFile = { - "ags".source = pkgs.stdenv.mkDerivation { - name = "ags-greeter"; - src = lib.fileset.toSource { - root = ./.; - fileset = lib.fileset.unions [ - ./scss - ./greeter.ts - ./ts - ./tsconfig.json - ]; - }; - - buildInputs = with pkgs; [ - bun - dart-sass - ]; - - buildPhase = '' - sass ./scss/greeter.scss style.css - bun build ./greeter.ts --external resource:///* --external gi://* --external cairo > config.js - ''; - - installPhase = '' - mkdir $out - mv style.css config.js $out/ - ''; - }; - }; - }; -} diff --git a/modules/desktop/display-manager/default.nix b/modules/desktop/display-manager/default.nix deleted file mode 100644 index 55566f4d..00000000 --- a/modules/desktop/display-manager/default.nix +++ /dev/null @@ -1,50 +0,0 @@ -{ - config, - pkgs, - ... -}: let - cfg = config.roles.desktop; - - hyprland = - config - .home-manager - .users - .${cfg.user} - .wayland - .windowManager - .hyprland - .finalPackage; - - cmd = toString (pkgs.writeShellScript "hyprland-wrapper" '' - trap 'systemctl --user stop hyprland-session.target; sleep 1' EXIT - exec Hyprland >/dev/null - ''); -in { - imports = [ - ./ags - ./hyprland.nix - ]; - - services = { - displayManager.sessionPackages = [hyprland]; - - greetd = { - enable = true; - settings = { - default_session = { - command = cmd; - user = "greeter"; - }; - - initial_session = { - command = cmd; - user = cfg.user; - }; - }; - }; - }; - - # unlock GPG keyring on login - services.gnome.gnome-keyring.enable = true; - security.pam.services.greetd.enableGnomeKeyring = true; -} diff --git a/modules/desktop/display-manager/hyprland.nix b/modules/desktop/display-manager/hyprland.nix deleted file mode 100644 index f6189e03..00000000 --- a/modules/desktop/display-manager/hyprland.nix +++ /dev/null @@ -1,60 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: let - inherit (lib) filterAttrs hasPrefix optionals; - - inherit (import ./setupMonitors.nix {inherit config pkgs;}) setupMonitors; - - cfg = config.roles.desktop; - - # Nix stuff - cfgHypr = - config - .home-manager - .users - .${cfg.user} - .wayland - .windowManager - .hyprland; - - devices = filterAttrs (n: v: hasPrefix "device:" n) cfgHypr.settings; -in { - home-manager.users.greeter = { - imports = [../desktop-environment/home/style.nix]; - - wayland.windowManager.hyprland = { - enable = true; - package = cfgHypr.finalPackage; - systemd.enable = false; - - settings = - { - inherit (cfgHypr.settings) cursor input misc monitor; - - envd = optionals (config.nvidia.enable) [ - "LIBVA_DRIVER_NAME, nvidia" - "NVD_BACKEND, direct" - "XDG_SESSION_TYPE, wayland" - "GBM_BACKEND, nvidia-drm" - "__GLX_VENDOR_LIBRARY_NAME, nvidia" - ]; - - general.border_size = 0; - - decoration = { - blur.enabled = false; - drop_shadow = false; - }; - - exec-once = [ - setupMonitors - "ags -b greeter &> /tmp/ags-greetd.log; hyprctl dispatch exit" - ]; - } - // devices; - }; - }; -} diff --git a/modules/desktop/home/hyprpaper.nix b/modules/desktop/home/hyprpaper.nix deleted file mode 100644 index 9583d38c..00000000 --- a/modules/desktop/home/hyprpaper.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ - lib, - pkgs, - self, - ... -}: let - wallpaper = toString self.legacyPackages.${pkgs.system}.dracula.wallpaper; -in { - home.packages = with pkgs; [hyprpaper]; - - xdg.configFile."hypr/hyprpaper.conf" = { - text = lib.hm.generators.toHyprconf { - attrs = { - ipc = "on"; - splash = false; - - preload = [wallpaper]; - - wallpaper = [ - ",${wallpaper}" - ]; - }; - }; - }; -} diff --git a/modules/desktop/home/theme/default.nix b/modules/desktop/home/theme/default.nix deleted file mode 100644 index cf388432..00000000 --- a/modules/desktop/home/theme/default.nix +++ /dev/null @@ -1,47 +0,0 @@ -{ - pkgs, - self, - ... -}: let - inherit (self.legacyPackages.${pkgs.system}) dracula; -in { - imports = [ - ./gtk.nix - ./qt.nix - ]; - - home.pointerCursor = { - name = "Dracula-cursors"; - package = dracula.gtk; - size = 24; - - gtk.enable = true; - - x11 = { - enable = true; - defaultCursor = "Dracula-cursors"; - }; - }; - - xresources.extraConfig = '' - ! Dracula Xresources palette - *.foreground: #F8F8F2 - *.background: #282A36 - *.color0: #000000 - *.color8: #4D4D4D - *.color1: #FF5555 - *.color9: #FF6E67 - *.color2: #50FA7B - *.color10: #5AF78E - *.color3: #F1FA8C - *.color11: #F4F99D - *.color4: #BD93F9 - *.color12: #CAA9FA - *.color5: #FF79C6 - *.color13: #FF92D0 - *.color6: #8BE9FD - *.color14: #9AEDFE - *.color7: #BFBFBF - *.color15: #E6E6E6 - ''; -} diff --git a/modules/desktop/home/theme/gtk.nix b/modules/desktop/home/theme/gtk.nix deleted file mode 100644 index ef02801c..00000000 --- a/modules/desktop/home/theme/gtk.nix +++ /dev/null @@ -1,64 +0,0 @@ -{ - pkgs, - lib, - osConfig, - ... -}: let - inherit (import ./gradience.nix {inherit pkgs lib;}) gradience; - - cfg = osConfig.roles.desktop; -in { - home.packages = with pkgs; [ - gnomeExtensions.user-themes - ]; - - # Gtk settings - gtk = { - enable = true; - - theme = { - name = "adw-gtk3"; - package = pkgs.adw-gtk3; - }; - - iconTheme = { - name = "Flat-Remix-Violet-Dark"; - package = pkgs.flat-remix-icon-theme; - }; - - font = { - name = "Sans Serif"; - size = cfg.fontSize; - }; - - gtk3 = { - extraConfig = { - "gtk-application-prefer-dark-theme" = 1; - }; - extraCss = "@import url(\"file://${gradience.build}/gtk-3.0/gtk.css\");"; - }; - - gtk4 = { - extraConfig = { - "gtk-application-prefer-dark-theme" = 1; - }; - extraCss = "@import url(\"file://${gradience.build}/gtk-4.0/gtk.css\");"; - }; - }; - - dconf.settings = { - "org/gnome/shell/extensions/user-theme" = { - name = gradience.shellTheme; - }; - "org/gnome/shell" = { - enabled-extensions = [pkgs.gnomeExtensions.user-themes.extensionUuid]; - }; - }; - - xdg.dataFile.shellTheme = { - enable = true; - recursive = true; - source = "${gradience.build}/gradience-shell"; - target = "themes/${gradience.shellTheme}"; - }; -} diff --git a/modules/desktop/home/theme/qt.nix b/modules/desktop/home/theme/qt.nix deleted file mode 100644 index da01d0c6..00000000 --- a/modules/desktop/home/theme/qt.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ - lib, - osConfig, - pkgs, - self, - ... -}: let - inherit (self.legacyPackages.${pkgs.system}) dracula; - - cfg = osConfig.roles.desktop; -in { - home.packages = with pkgs; [ - libsForQt5.qtstyleplugin-kvantum - qt6Packages.qtstyleplugin-kvantum - ]; - - qt = { - enable = true; - platformTheme.name = "qtct"; - }; - - xdg.configFile = let - floatFont = lib.strings.floatToString cfg.fontSize; - qtconf = - # ini - '' - [Fonts] - fixed="Sans Serif,${floatFont},-1,5,50,0,0,0,0,0" - general="Sans Serif,${floatFont},-1,5,50,0,0,0,0,0" - - [Appearance] - icon_theme=Flat-Remix-Violet-Dark - style=''; - # The newline before this must be there - in { - "Kvantum/Dracula/Dracula.kvconfig".source = "${dracula.gtk}/share/Kvantum/Dracula-purple-solid/Dracula-purple-solid.kvconfig"; - "Kvantum/Dracula/Dracula.svg".source = "${dracula.gtk}/share/Kvantum/Dracula-purple-solid/Dracula-purple-solid.svg"; - "Kvantum/kvantum.kvconfig".text = "[General]\ntheme=Dracula"; - - "qt5ct/qt5ct.conf".text = qtconf + "kvantum"; - "qt6ct/qt6ct.conf".text = qtconf + "kvantum"; - }; -} diff --git a/modules/kmscon.nix b/modules/kmscon.nix deleted file mode 100644 index c909d5fa..00000000 --- a/modules/kmscon.nix +++ /dev/null @@ -1,14 +0,0 @@ -{...}: { - services.kmscon = { - enable = true; - useXkbConfig = true; - hwRender = false; - - # FIXME: https://github.com/Aetf/kmscon/issues/18 // Icons not rendering properly - extraOptions = builtins.concatStringsSep " " [ - "--font-size 12.5" - "--font-dpi 170" - "--font-name 'JetBrainsMono Nerd Font'" - ]; - }; -} diff --git a/modules/printer.nix b/modules/printer.nix deleted file mode 100644 index 43fd5fd6..00000000 --- a/modules/printer.nix +++ /dev/null @@ -1,11 +0,0 @@ -{pkgs, ...}: { - services = { - # Enable CUPS to print documents. - printing = { - enable = true; - drivers = with pkgs; [ - hplip - ]; - }; - }; -} diff --git a/modules/ratbag-mice.nix b/modules/ratbag-mice.nix deleted file mode 100644 index 901064be..00000000 --- a/modules/ratbag-mice.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ - libratbag-src, - pkgs, - piper-src, - ... -}: let - inherit (import ../flake/lib.nix {}) mkVersion; -in { - services.ratbagd = { - enable = true; - - package = pkgs.libratbag.overrideAttrs { - pname = "libratbag"; - version = mkVersion libratbag-src; - src = libratbag-src; - }; - }; - - environment.systemPackages = [ - (pkgs.piper.overrideAttrs { - pname = "piper"; - version = mkVersion piper-src; - src = piper-src; - - mesonFlags = [ - "-Druntime-dependency-checks=false" - ]; - }) - ]; -} diff --git a/modules/sshd.nix b/modules/sshd.nix deleted file mode 100644 index e0334fc2..00000000 --- a/modules/sshd.nix +++ /dev/null @@ -1,21 +0,0 @@ -{config, ...}: let - inherit (config.vars) mainUser; -in { - services = { - openssh = { - enable = true; - settings = { - PasswordAuthentication = false; - PermitRootLogin = "no"; - }; - }; - }; - - users.users.${mainUser} = { - openssh.authorizedKeys.keys = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPE39uk52+NIDLdHeoSHIEsOUUFRzj06AGn09z4TUOYm matt@OP9" - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICr2+CpqXNMLsjgbrYyIwTKhlVSiIYol1ghBPzLmUpKl matt@binto" - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJGbLu+Gb7PiyNgNXMHemaQLnKixebx1/4cdJGna9OQp matt@wim" - ]; - }; -} diff --git a/modules/tailscale.nix b/modules/tailscale.nix deleted file mode 100644 index 7ae644cc..00000000 --- a/modules/tailscale.nix +++ /dev/null @@ -1,37 +0,0 @@ -{config, ...}: let - inherit (config.vars) hostName mainUser; -in { - services = { - tailscale = { - enable = true; - # TODO: add authKeyFile to get extraUpFlags to work - # https://github.com/juanfont/headscale/issues/1550 - # https://github.com/juanfont/headscale/blob/main/docs/running-headscale-linux-manual.md#register-machine-using-a-pre-authenticated-key - # https://www.reddit.com/r/NixOS/comments/18kz1nb/tailscale_extraupflags_not_working/ - extraUpFlags = [ - "--login-server https://headscale.nelim.org" - "--operator=matt" - ]; - }; - }; - - home-manager.users.${mainUser} = { - programs.bash.shellAliases = { - # Connect to headscale - tup = "tailscale up --login-server https://headscale.nelim.org"; - - # Desktop - pc = "ssh -t matt@binto 'tmux -2u new -At ${hostName}'"; - - # NAS - nos = "ssh -t matt@nos 'tmux -2u new -At ${hostName}'"; - - # Experimenting server - servivi = "ssh -t matt@servivi 'tmux -2u new -At ${hostName}'"; - - # Cluster nodes - thingone = "ssh -t matt@thingone 'tmux -2u new -At ${hostName}'"; - thingtwo = "ssh -t matt@thingtwo 'tmux -2u new -At ${hostName}'"; - }; - }; -} diff --git a/modules/adb.nix b/nixosModules/adb/default.nix similarity index 88% rename from modules/adb.nix rename to nixosModules/adb/default.nix index 7955bf28..93197ae2 100644 --- a/modules/adb.nix +++ b/nixosModules/adb/default.nix @@ -21,4 +21,7 @@ in { config = mkIf cfg.enable { users.users.${cfg.user}.extraGroups = ["adbusers"]; }; + + # For accurate stack trace + _file = ./default.nix; } diff --git a/modules/ags/README.md b/nixosModules/ags/README.md similarity index 100% rename from modules/ags/README.md rename to nixosModules/ags/README.md diff --git a/modules/ags/clipboard/default.nix b/nixosModules/ags/clipboard/default.nix similarity index 100% rename from modules/ags/clipboard/default.nix rename to nixosModules/ags/clipboard/default.nix diff --git a/modules/ags/clipboard/script.sh b/nixosModules/ags/clipboard/script.sh similarity index 100% rename from modules/ags/clipboard/script.sh rename to nixosModules/ags/clipboard/script.sh diff --git a/modules/ags/config/.envrc b/nixosModules/ags/config/.envrc similarity index 100% rename from modules/ags/config/.envrc rename to nixosModules/ags/config/.envrc diff --git a/modules/ags/config/binto.ts b/nixosModules/ags/config/binto.ts similarity index 100% rename from modules/ags/config/binto.ts rename to nixosModules/ags/config/binto.ts diff --git a/modules/ags/config/eslint.config.js b/nixosModules/ags/config/eslint.config.js similarity index 100% rename from modules/ags/config/eslint.config.js rename to nixosModules/ags/config/eslint.config.js diff --git a/modules/ags/config/global-types.d.ts b/nixosModules/ags/config/global-types.d.ts similarity index 100% rename from modules/ags/config/global-types.d.ts rename to nixosModules/ags/config/global-types.d.ts diff --git a/modules/ags/config/js/utils.js b/nixosModules/ags/config/js/utils.js similarity index 100% rename from modules/ags/config/js/utils.js rename to nixosModules/ags/config/js/utils.js diff --git a/modules/ags/config/lockscreen.js b/nixosModules/ags/config/lockscreen.js similarity index 100% rename from modules/ags/config/lockscreen.js rename to nixosModules/ags/config/lockscreen.js diff --git a/modules/ags/config/package-lock.json b/nixosModules/ags/config/package-lock.json similarity index 100% rename from modules/ags/config/package-lock.json rename to nixosModules/ags/config/package-lock.json diff --git a/modules/ags/config/package.json b/nixosModules/ags/config/package.json similarity index 100% rename from modules/ags/config/package.json rename to nixosModules/ags/config/package.json diff --git a/modules/ags/config/scss/binto-widgets/applauncher.scss b/nixosModules/ags/config/scss/binto-widgets/applauncher.scss similarity index 100% rename from modules/ags/config/scss/binto-widgets/applauncher.scss rename to nixosModules/ags/config/scss/binto-widgets/applauncher.scss diff --git a/modules/ags/config/scss/binto-widgets/bar.scss b/nixosModules/ags/config/scss/binto-widgets/bar.scss similarity index 100% rename from modules/ags/config/scss/binto-widgets/bar.scss rename to nixosModules/ags/config/scss/binto-widgets/bar.scss diff --git a/modules/ags/config/scss/binto-widgets/clipboard.scss b/nixosModules/ags/config/scss/binto-widgets/clipboard.scss similarity index 100% rename from modules/ags/config/scss/binto-widgets/clipboard.scss rename to nixosModules/ags/config/scss/binto-widgets/clipboard.scss diff --git a/modules/ags/config/scss/binto-widgets/date.scss b/nixosModules/ags/config/scss/binto-widgets/date.scss similarity index 100% rename from modules/ags/config/scss/binto-widgets/date.scss rename to nixosModules/ags/config/scss/binto-widgets/date.scss diff --git a/modules/ags/config/scss/binto-widgets/notification-center.scss b/nixosModules/ags/config/scss/binto-widgets/notification-center.scss similarity index 100% rename from modules/ags/config/scss/binto-widgets/notification-center.scss rename to nixosModules/ags/config/scss/binto-widgets/notification-center.scss diff --git a/modules/ags/config/scss/binto-widgets/notification.scss b/nixosModules/ags/config/scss/binto-widgets/notification.scss similarity index 100% rename from modules/ags/config/scss/binto-widgets/notification.scss rename to nixosModules/ags/config/scss/binto-widgets/notification.scss diff --git a/modules/ags/config/scss/binto-widgets/osd.scss b/nixosModules/ags/config/scss/binto-widgets/osd.scss similarity index 100% rename from modules/ags/config/scss/binto-widgets/osd.scss rename to nixosModules/ags/config/scss/binto-widgets/osd.scss diff --git a/modules/ags/config/scss/binto-widgets/powermenu.scss b/nixosModules/ags/config/scss/binto-widgets/powermenu.scss similarity index 100% rename from modules/ags/config/scss/binto-widgets/powermenu.scss rename to nixosModules/ags/config/scss/binto-widgets/powermenu.scss diff --git a/modules/ags/config/scss/binto-widgets/screenshot.scss b/nixosModules/ags/config/scss/binto-widgets/screenshot.scss similarity index 100% rename from modules/ags/config/scss/binto-widgets/screenshot.scss rename to nixosModules/ags/config/scss/binto-widgets/screenshot.scss diff --git a/modules/ags/config/scss/binto.scss b/nixosModules/ags/config/scss/binto.scss similarity index 100% rename from modules/ags/config/scss/binto.scss rename to nixosModules/ags/config/scss/binto.scss diff --git a/modules/ags/config/scss/common.scss b/nixosModules/ags/config/scss/common.scss similarity index 100% rename from modules/ags/config/scss/common.scss rename to nixosModules/ags/config/scss/common.scss diff --git a/modules/ags/config/scss/lockscreen.scss b/nixosModules/ags/config/scss/lockscreen.scss similarity index 100% rename from modules/ags/config/scss/lockscreen.scss rename to nixosModules/ags/config/scss/lockscreen.scss diff --git a/modules/ags/config/scss/wim-widgets/applauncher.scss b/nixosModules/ags/config/scss/wim-widgets/applauncher.scss similarity index 100% rename from modules/ags/config/scss/wim-widgets/applauncher.scss rename to nixosModules/ags/config/scss/wim-widgets/applauncher.scss diff --git a/modules/ags/config/scss/wim-widgets/clipboard.scss b/nixosModules/ags/config/scss/wim-widgets/clipboard.scss similarity index 100% rename from modules/ags/config/scss/wim-widgets/clipboard.scss rename to nixosModules/ags/config/scss/wim-widgets/clipboard.scss diff --git a/modules/ags/config/scss/wim-widgets/date.scss b/nixosModules/ags/config/scss/wim-widgets/date.scss similarity index 100% rename from modules/ags/config/scss/wim-widgets/date.scss rename to nixosModules/ags/config/scss/wim-widgets/date.scss diff --git a/modules/ags/config/scss/wim-widgets/notification-center.scss b/nixosModules/ags/config/scss/wim-widgets/notification-center.scss similarity index 100% rename from modules/ags/config/scss/wim-widgets/notification-center.scss rename to nixosModules/ags/config/scss/wim-widgets/notification-center.scss diff --git a/modules/ags/config/scss/wim-widgets/notification.scss b/nixosModules/ags/config/scss/wim-widgets/notification.scss similarity index 100% rename from modules/ags/config/scss/wim-widgets/notification.scss rename to nixosModules/ags/config/scss/wim-widgets/notification.scss diff --git a/modules/ags/config/scss/wim-widgets/osd.scss b/nixosModules/ags/config/scss/wim-widgets/osd.scss similarity index 100% rename from modules/ags/config/scss/wim-widgets/osd.scss rename to nixosModules/ags/config/scss/wim-widgets/osd.scss diff --git a/modules/ags/config/scss/wim-widgets/osk.scss b/nixosModules/ags/config/scss/wim-widgets/osk.scss similarity index 100% rename from modules/ags/config/scss/wim-widgets/osk.scss rename to nixosModules/ags/config/scss/wim-widgets/osk.scss diff --git a/modules/ags/config/scss/wim-widgets/player.scss b/nixosModules/ags/config/scss/wim-widgets/player.scss similarity index 100% rename from modules/ags/config/scss/wim-widgets/player.scss rename to nixosModules/ags/config/scss/wim-widgets/player.scss diff --git a/modules/ags/config/scss/wim-widgets/powermenu.scss b/nixosModules/ags/config/scss/wim-widgets/powermenu.scss similarity index 100% rename from modules/ags/config/scss/wim-widgets/powermenu.scss rename to nixosModules/ags/config/scss/wim-widgets/powermenu.scss diff --git a/modules/ags/config/scss/wim-widgets/quick-settings.scss b/nixosModules/ags/config/scss/wim-widgets/quick-settings.scss similarity index 100% rename from modules/ags/config/scss/wim-widgets/quick-settings.scss rename to nixosModules/ags/config/scss/wim-widgets/quick-settings.scss diff --git a/modules/ags/config/scss/wim-widgets/screenshot.scss b/nixosModules/ags/config/scss/wim-widgets/screenshot.scss similarity index 100% rename from modules/ags/config/scss/wim-widgets/screenshot.scss rename to nixosModules/ags/config/scss/wim-widgets/screenshot.scss diff --git a/modules/ags/config/scss/wim-widgets/systray.scss b/nixosModules/ags/config/scss/wim-widgets/systray.scss similarity index 100% rename from modules/ags/config/scss/wim-widgets/systray.scss rename to nixosModules/ags/config/scss/wim-widgets/systray.scss diff --git a/modules/ags/config/scss/wim-widgets/traybuttons.scss b/nixosModules/ags/config/scss/wim-widgets/traybuttons.scss similarity index 100% rename from modules/ags/config/scss/wim-widgets/traybuttons.scss rename to nixosModules/ags/config/scss/wim-widgets/traybuttons.scss diff --git a/modules/ags/config/scss/wim-widgets/workspaces.scss b/nixosModules/ags/config/scss/wim-widgets/workspaces.scss similarity index 100% rename from modules/ags/config/scss/wim-widgets/workspaces.scss rename to nixosModules/ags/config/scss/wim-widgets/workspaces.scss diff --git a/modules/ags/config/scss/wim.scss b/nixosModules/ags/config/scss/wim.scss similarity index 100% rename from modules/ags/config/scss/wim.scss rename to nixosModules/ags/config/scss/wim.scss diff --git a/modules/ags/config/services/brightness.ts b/nixosModules/ags/config/services/brightness.ts similarity index 100% rename from modules/ags/config/services/brightness.ts rename to nixosModules/ags/config/services/brightness.ts diff --git a/modules/ags/config/services/clipboard.ts b/nixosModules/ags/config/services/clipboard.ts similarity index 100% rename from modules/ags/config/services/clipboard.ts rename to nixosModules/ags/config/services/clipboard.ts diff --git a/modules/ags/config/services/gpu-screen-recorder.ts b/nixosModules/ags/config/services/gpu-screen-recorder.ts similarity index 100% rename from modules/ags/config/services/gpu-screen-recorder.ts rename to nixosModules/ags/config/services/gpu-screen-recorder.ts diff --git a/modules/ags/config/services/pointers.ts b/nixosModules/ags/config/services/pointers.ts similarity index 100% rename from modules/ags/config/services/pointers.ts rename to nixosModules/ags/config/services/pointers.ts diff --git a/modules/ags/config/services/tablet.ts b/nixosModules/ags/config/services/tablet.ts similarity index 100% rename from modules/ags/config/services/tablet.ts rename to nixosModules/ags/config/services/tablet.ts diff --git a/modules/ags/config/services/touch-gestures.ts b/nixosModules/ags/config/services/touch-gestures.ts similarity index 100% rename from modules/ags/config/services/touch-gestures.ts rename to nixosModules/ags/config/services/touch-gestures.ts diff --git a/modules/ags/config/ts/applauncher/app-item.ts b/nixosModules/ags/config/ts/applauncher/app-item.ts similarity index 100% rename from modules/ags/config/ts/applauncher/app-item.ts rename to nixosModules/ags/config/ts/applauncher/app-item.ts diff --git a/modules/ags/config/ts/applauncher/launch.ts b/nixosModules/ags/config/ts/applauncher/launch.ts similarity index 100% rename from modules/ags/config/ts/applauncher/launch.ts rename to nixosModules/ags/config/ts/applauncher/launch.ts diff --git a/modules/ags/config/ts/applauncher/main.ts b/nixosModules/ags/config/ts/applauncher/main.ts similarity index 100% rename from modules/ags/config/ts/applauncher/main.ts rename to nixosModules/ags/config/ts/applauncher/main.ts diff --git a/modules/ags/config/ts/bar/binto.ts b/nixosModules/ags/config/ts/bar/binto.ts similarity index 100% rename from modules/ags/config/ts/bar/binto.ts rename to nixosModules/ags/config/ts/bar/binto.ts diff --git a/modules/ags/config/ts/bar/fullscreen.ts b/nixosModules/ags/config/ts/bar/fullscreen.ts similarity index 100% rename from modules/ags/config/ts/bar/fullscreen.ts rename to nixosModules/ags/config/ts/bar/fullscreen.ts diff --git a/modules/ags/config/ts/bar/hovers/audio.ts b/nixosModules/ags/config/ts/bar/hovers/audio.ts similarity index 100% rename from modules/ags/config/ts/bar/hovers/audio.ts rename to nixosModules/ags/config/ts/bar/hovers/audio.ts diff --git a/modules/ags/config/ts/bar/hovers/bluetooth.ts b/nixosModules/ags/config/ts/bar/hovers/bluetooth.ts similarity index 100% rename from modules/ags/config/ts/bar/hovers/bluetooth.ts rename to nixosModules/ags/config/ts/bar/hovers/bluetooth.ts diff --git a/modules/ags/config/ts/bar/hovers/brightness.ts b/nixosModules/ags/config/ts/bar/hovers/brightness.ts similarity index 100% rename from modules/ags/config/ts/bar/hovers/brightness.ts rename to nixosModules/ags/config/ts/bar/hovers/brightness.ts diff --git a/modules/ags/config/ts/bar/hovers/hover-revealer.ts b/nixosModules/ags/config/ts/bar/hovers/hover-revealer.ts similarity index 100% rename from modules/ags/config/ts/bar/hovers/hover-revealer.ts rename to nixosModules/ags/config/ts/bar/hovers/hover-revealer.ts diff --git a/modules/ags/config/ts/bar/hovers/keyboard-layout.ts b/nixosModules/ags/config/ts/bar/hovers/keyboard-layout.ts similarity index 100% rename from modules/ags/config/ts/bar/hovers/keyboard-layout.ts rename to nixosModules/ags/config/ts/bar/hovers/keyboard-layout.ts diff --git a/modules/ags/config/ts/bar/hovers/network.ts b/nixosModules/ags/config/ts/bar/hovers/network.ts similarity index 100% rename from modules/ags/config/ts/bar/hovers/network.ts rename to nixosModules/ags/config/ts/bar/hovers/network.ts diff --git a/modules/ags/config/ts/bar/items/battery.ts b/nixosModules/ags/config/ts/bar/items/battery.ts similarity index 100% rename from modules/ags/config/ts/bar/items/battery.ts rename to nixosModules/ags/config/ts/bar/items/battery.ts diff --git a/modules/ags/config/ts/bar/items/cal-opener.ts b/nixosModules/ags/config/ts/bar/items/cal-opener.ts similarity index 100% rename from modules/ags/config/ts/bar/items/cal-opener.ts rename to nixosModules/ags/config/ts/bar/items/cal-opener.ts diff --git a/modules/ags/config/ts/bar/items/clock.ts b/nixosModules/ags/config/ts/bar/items/clock.ts similarity index 100% rename from modules/ags/config/ts/bar/items/clock.ts rename to nixosModules/ags/config/ts/bar/items/clock.ts diff --git a/modules/ags/config/ts/bar/items/current-window.ts b/nixosModules/ags/config/ts/bar/items/current-window.ts similarity index 100% rename from modules/ags/config/ts/bar/items/current-window.ts rename to nixosModules/ags/config/ts/bar/items/current-window.ts diff --git a/modules/ags/config/ts/bar/items/heart.ts b/nixosModules/ags/config/ts/bar/items/heart.ts similarity index 100% rename from modules/ags/config/ts/bar/items/heart.ts rename to nixosModules/ags/config/ts/bar/items/heart.ts diff --git a/modules/ags/config/ts/bar/items/notif-button.ts b/nixosModules/ags/config/ts/bar/items/notif-button.ts similarity index 100% rename from modules/ags/config/ts/bar/items/notif-button.ts rename to nixosModules/ags/config/ts/bar/items/notif-button.ts diff --git a/modules/ags/config/ts/bar/items/osk-toggle.ts b/nixosModules/ags/config/ts/bar/items/osk-toggle.ts similarity index 100% rename from modules/ags/config/ts/bar/items/osk-toggle.ts rename to nixosModules/ags/config/ts/bar/items/osk-toggle.ts diff --git a/modules/ags/config/ts/bar/items/quick-settings.ts b/nixosModules/ags/config/ts/bar/items/quick-settings.ts similarity index 100% rename from modules/ags/config/ts/bar/items/quick-settings.ts rename to nixosModules/ags/config/ts/bar/items/quick-settings.ts diff --git a/modules/ags/config/ts/bar/items/systray.ts b/nixosModules/ags/config/ts/bar/items/systray.ts similarity index 100% rename from modules/ags/config/ts/bar/items/systray.ts rename to nixosModules/ags/config/ts/bar/items/systray.ts diff --git a/modules/ags/config/ts/bar/items/tablet-toggle.ts b/nixosModules/ags/config/ts/bar/items/tablet-toggle.ts similarity index 100% rename from modules/ags/config/ts/bar/items/tablet-toggle.ts rename to nixosModules/ags/config/ts/bar/items/tablet-toggle.ts diff --git a/modules/ags/config/ts/bar/items/workspaces.ts b/nixosModules/ags/config/ts/bar/items/workspaces.ts similarity index 100% rename from modules/ags/config/ts/bar/items/workspaces.ts rename to nixosModules/ags/config/ts/bar/items/workspaces.ts diff --git a/modules/ags/config/ts/bar/wim.ts b/nixosModules/ags/config/ts/bar/wim.ts similarity index 100% rename from modules/ags/config/ts/bar/wim.ts rename to nixosModules/ags/config/ts/bar/wim.ts diff --git a/modules/ags/config/ts/clipboard/clip.ts b/nixosModules/ags/config/ts/clipboard/clip.ts similarity index 100% rename from modules/ags/config/ts/clipboard/clip.ts rename to nixosModules/ags/config/ts/clipboard/clip.ts diff --git a/modules/ags/config/ts/clipboard/main.ts b/nixosModules/ags/config/ts/clipboard/main.ts similarity index 100% rename from modules/ags/config/ts/clipboard/main.ts rename to nixosModules/ags/config/ts/clipboard/main.ts diff --git a/modules/ags/config/ts/corners/main.ts b/nixosModules/ags/config/ts/corners/main.ts similarity index 100% rename from modules/ags/config/ts/corners/main.ts rename to nixosModules/ags/config/ts/corners/main.ts diff --git a/modules/ags/config/ts/corners/screen-corners.ts b/nixosModules/ags/config/ts/corners/screen-corners.ts similarity index 100% rename from modules/ags/config/ts/corners/screen-corners.ts rename to nixosModules/ags/config/ts/corners/screen-corners.ts diff --git a/modules/ags/config/ts/date/binto.ts b/nixosModules/ags/config/ts/date/binto.ts similarity index 100% rename from modules/ags/config/ts/date/binto.ts rename to nixosModules/ags/config/ts/date/binto.ts diff --git a/modules/ags/config/ts/date/main.ts b/nixosModules/ags/config/ts/date/main.ts similarity index 100% rename from modules/ags/config/ts/date/main.ts rename to nixosModules/ags/config/ts/date/main.ts diff --git a/modules/ags/config/ts/date/wim.ts b/nixosModules/ags/config/ts/date/wim.ts similarity index 100% rename from modules/ags/config/ts/date/wim.ts rename to nixosModules/ags/config/ts/date/wim.ts diff --git a/modules/ags/config/ts/lib.ts b/nixosModules/ags/config/ts/lib.ts similarity index 100% rename from modules/ags/config/ts/lib.ts rename to nixosModules/ags/config/ts/lib.ts diff --git a/modules/ags/config/ts/lockscreen/lock.ts b/nixosModules/ags/config/ts/lockscreen/lock.ts similarity index 100% rename from modules/ags/config/ts/lockscreen/lock.ts rename to nixosModules/ags/config/ts/lockscreen/lock.ts diff --git a/modules/ags/config/ts/lockscreen/main.ts b/nixosModules/ags/config/ts/lockscreen/main.ts similarity index 100% rename from modules/ags/config/ts/lockscreen/main.ts rename to nixosModules/ags/config/ts/lockscreen/main.ts diff --git a/modules/ags/config/ts/media-player/gesture.ts b/nixosModules/ags/config/ts/media-player/gesture.ts similarity index 100% rename from modules/ags/config/ts/media-player/gesture.ts rename to nixosModules/ags/config/ts/media-player/gesture.ts diff --git a/modules/ags/config/ts/media-player/mpris.ts b/nixosModules/ags/config/ts/media-player/mpris.ts similarity index 100% rename from modules/ags/config/ts/media-player/mpris.ts rename to nixosModules/ags/config/ts/media-player/mpris.ts diff --git a/modules/ags/config/ts/media-player/player.ts b/nixosModules/ags/config/ts/media-player/player.ts similarity index 100% rename from modules/ags/config/ts/media-player/player.ts rename to nixosModules/ags/config/ts/media-player/player.ts diff --git a/modules/ags/config/ts/misc/audio-icons.ts b/nixosModules/ags/config/ts/misc/audio-icons.ts similarity index 100% rename from modules/ags/config/ts/misc/audio-icons.ts rename to nixosModules/ags/config/ts/misc/audio-icons.ts diff --git a/modules/ags/config/ts/misc/background-fade.ts b/nixosModules/ags/config/ts/misc/background-fade.ts similarity index 100% rename from modules/ags/config/ts/misc/background-fade.ts rename to nixosModules/ags/config/ts/misc/background-fade.ts diff --git a/modules/ags/config/ts/misc/closer.ts b/nixosModules/ags/config/ts/misc/closer.ts similarity index 100% rename from modules/ags/config/ts/misc/closer.ts rename to nixosModules/ags/config/ts/misc/closer.ts diff --git a/modules/ags/config/ts/misc/cursorbox.ts b/nixosModules/ags/config/ts/misc/cursorbox.ts similarity index 100% rename from modules/ags/config/ts/misc/cursorbox.ts rename to nixosModules/ags/config/ts/misc/cursorbox.ts diff --git a/modules/ags/config/ts/misc/persist.ts b/nixosModules/ags/config/ts/misc/persist.ts similarity index 100% rename from modules/ags/config/ts/misc/persist.ts rename to nixosModules/ags/config/ts/misc/persist.ts diff --git a/modules/ags/config/ts/misc/popup.ts b/nixosModules/ags/config/ts/misc/popup.ts similarity index 100% rename from modules/ags/config/ts/misc/popup.ts rename to nixosModules/ags/config/ts/misc/popup.ts diff --git a/modules/ags/config/ts/misc/separator.ts b/nixosModules/ags/config/ts/misc/separator.ts similarity index 100% rename from modules/ags/config/ts/misc/separator.ts rename to nixosModules/ags/config/ts/misc/separator.ts diff --git a/modules/ags/config/ts/misc/sorted-list.ts b/nixosModules/ags/config/ts/misc/sorted-list.ts similarity index 100% rename from modules/ags/config/ts/misc/sorted-list.ts rename to nixosModules/ags/config/ts/misc/sorted-list.ts diff --git a/modules/ags/config/ts/notifications/base.ts b/nixosModules/ags/config/ts/notifications/base.ts similarity index 100% rename from modules/ags/config/ts/notifications/base.ts rename to nixosModules/ags/config/ts/notifications/base.ts diff --git a/modules/ags/config/ts/notifications/binto.ts b/nixosModules/ags/config/ts/notifications/binto.ts similarity index 100% rename from modules/ags/config/ts/notifications/binto.ts rename to nixosModules/ags/config/ts/notifications/binto.ts diff --git a/modules/ags/config/ts/notifications/center.ts b/nixosModules/ags/config/ts/notifications/center.ts similarity index 100% rename from modules/ags/config/ts/notifications/center.ts rename to nixosModules/ags/config/ts/notifications/center.ts diff --git a/modules/ags/config/ts/notifications/gesture.ts b/nixosModules/ags/config/ts/notifications/gesture.ts similarity index 100% rename from modules/ags/config/ts/notifications/gesture.ts rename to nixosModules/ags/config/ts/notifications/gesture.ts diff --git a/modules/ags/config/ts/notifications/popup.ts b/nixosModules/ags/config/ts/notifications/popup.ts similarity index 100% rename from modules/ags/config/ts/notifications/popup.ts rename to nixosModules/ags/config/ts/notifications/popup.ts diff --git a/modules/ags/config/ts/notifications/wim.ts b/nixosModules/ags/config/ts/notifications/wim.ts similarity index 100% rename from modules/ags/config/ts/notifications/wim.ts rename to nixosModules/ags/config/ts/notifications/wim.ts diff --git a/modules/ags/config/ts/on-screen-keyboard/gesture.ts b/nixosModules/ags/config/ts/on-screen-keyboard/gesture.ts similarity index 100% rename from modules/ags/config/ts/on-screen-keyboard/gesture.ts rename to nixosModules/ags/config/ts/on-screen-keyboard/gesture.ts diff --git a/modules/ags/config/ts/on-screen-keyboard/keyboard-layouts.ts b/nixosModules/ags/config/ts/on-screen-keyboard/keyboard-layouts.ts similarity index 100% rename from modules/ags/config/ts/on-screen-keyboard/keyboard-layouts.ts rename to nixosModules/ags/config/ts/on-screen-keyboard/keyboard-layouts.ts diff --git a/modules/ags/config/ts/on-screen-keyboard/keyboard.ts b/nixosModules/ags/config/ts/on-screen-keyboard/keyboard.ts similarity index 100% rename from modules/ags/config/ts/on-screen-keyboard/keyboard.ts rename to nixosModules/ags/config/ts/on-screen-keyboard/keyboard.ts diff --git a/modules/ags/config/ts/on-screen-keyboard/keys.ts b/nixosModules/ags/config/ts/on-screen-keyboard/keys.ts similarity index 100% rename from modules/ags/config/ts/on-screen-keyboard/keys.ts rename to nixosModules/ags/config/ts/on-screen-keyboard/keys.ts diff --git a/modules/ags/config/ts/on-screen-keyboard/main.ts b/nixosModules/ags/config/ts/on-screen-keyboard/main.ts similarity index 100% rename from modules/ags/config/ts/on-screen-keyboard/main.ts rename to nixosModules/ags/config/ts/on-screen-keyboard/main.ts diff --git a/modules/ags/config/ts/osd/ctor.ts b/nixosModules/ags/config/ts/osd/ctor.ts similarity index 100% rename from modules/ags/config/ts/osd/ctor.ts rename to nixosModules/ags/config/ts/osd/ctor.ts diff --git a/modules/ags/config/ts/osd/main.ts b/nixosModules/ags/config/ts/osd/main.ts similarity index 100% rename from modules/ags/config/ts/osd/main.ts rename to nixosModules/ags/config/ts/osd/main.ts diff --git a/modules/ags/config/ts/osd/osds.ts b/nixosModules/ags/config/ts/osd/osds.ts similarity index 100% rename from modules/ags/config/ts/osd/osds.ts rename to nixosModules/ags/config/ts/osd/osds.ts diff --git a/modules/ags/config/ts/powermenu.ts b/nixosModules/ags/config/ts/powermenu.ts similarity index 100% rename from modules/ags/config/ts/powermenu.ts rename to nixosModules/ags/config/ts/powermenu.ts diff --git a/modules/ags/config/ts/quick-settings/bluetooth.ts b/nixosModules/ags/config/ts/quick-settings/bluetooth.ts similarity index 100% rename from modules/ags/config/ts/quick-settings/bluetooth.ts rename to nixosModules/ags/config/ts/quick-settings/bluetooth.ts diff --git a/modules/ags/config/ts/quick-settings/button-grid.ts b/nixosModules/ags/config/ts/quick-settings/button-grid.ts similarity index 100% rename from modules/ags/config/ts/quick-settings/button-grid.ts rename to nixosModules/ags/config/ts/quick-settings/button-grid.ts diff --git a/modules/ags/config/ts/quick-settings/main.ts b/nixosModules/ags/config/ts/quick-settings/main.ts similarity index 100% rename from modules/ags/config/ts/quick-settings/main.ts rename to nixosModules/ags/config/ts/quick-settings/main.ts diff --git a/modules/ags/config/ts/quick-settings/network.ts b/nixosModules/ags/config/ts/quick-settings/network.ts similarity index 100% rename from modules/ags/config/ts/quick-settings/network.ts rename to nixosModules/ags/config/ts/quick-settings/network.ts diff --git a/modules/ags/config/ts/quick-settings/slider-box.ts b/nixosModules/ags/config/ts/quick-settings/slider-box.ts similarity index 100% rename from modules/ags/config/ts/quick-settings/slider-box.ts rename to nixosModules/ags/config/ts/quick-settings/slider-box.ts diff --git a/modules/ags/config/ts/quick-settings/toggle-button.ts b/nixosModules/ags/config/ts/quick-settings/toggle-button.ts similarity index 100% rename from modules/ags/config/ts/quick-settings/toggle-button.ts rename to nixosModules/ags/config/ts/quick-settings/toggle-button.ts diff --git a/modules/ags/config/ts/screenshot/main.ts b/nixosModules/ags/config/ts/screenshot/main.ts similarity index 100% rename from modules/ags/config/ts/screenshot/main.ts rename to nixosModules/ags/config/ts/screenshot/main.ts diff --git a/modules/ags/config/ts/setup.ts b/nixosModules/ags/config/ts/setup.ts similarity index 100% rename from modules/ags/config/ts/setup.ts rename to nixosModules/ags/config/ts/setup.ts diff --git a/modules/ags/config/tsconfig.json b/nixosModules/ags/config/tsconfig.json similarity index 100% rename from modules/ags/config/tsconfig.json rename to nixosModules/ags/config/tsconfig.json diff --git a/modules/ags/config/wim.ts b/nixosModules/ags/config/wim.ts similarity index 100% rename from modules/ags/config/wim.ts rename to nixosModules/ags/config/wim.ts diff --git a/nixosModules/ags/default.nix b/nixosModules/ags/default.nix new file mode 100644 index 00000000..74a3ec4a --- /dev/null +++ b/nixosModules/ags/default.nix @@ -0,0 +1,176 @@ +self: { + config, + lib, + pkgs, + ... +}: let + inherit (self.inputs) ags astal-tray gtk-session-lock ts-for-gir-src; +in { + config = let + inherit (lib) boolToString mkIf toLower; + + # Configs + inherit (config.vars) mainUser hostName; + cfgDesktop = config.roles.desktop; + flakeDir = config.environment.variables.FLAKE; + + # Packages + astalTray = astal-tray.packages.${pkgs.system}.tray; + gtkSessionLock = gtk-session-lock.packages.${pkgs.system}.default; + in + mkIf cfgDesktop.ags.enable { + # Enable pam for ags + security.pam.services.ags = {}; + + services.upower.enable = true; + + home-manager.users.${mainUser}.imports = [ + ags.homeManagerModules.default + + ({ + config, + lib, + ... + }: let + inherit (config.lib.file) mkOutOfStoreSymlink; + inherit (lib) hasPrefix optionals removePrefix; + + configJs = + # javascript + '' + Utils.execAsync('hyprpaper'); + + import { transpileTypeScript } from './js/utils.js'; + + export default (await transpileTypeScript('${hostName}')).default; + ''; + + agsPkg = config.programs.ags.finalPackage; + agsConfigDir = "${removePrefix "/home/${mainUser}/" flakeDir}/modules/ags"; + in { + assertions = [ + { + assertion = hasPrefix "/home/${mainUser}/" flakeDir; + message = '' + Your $FLAKE environment variable needs to point to a directory in + the main users' home to use the AGS module. + ''; + } + ]; + + programs.ags = { + enable = true; + extraPackages = [ + astalTray + gtkSessionLock + ]; + }; + + home = { + file = let + mkType = package: girName: { + "${agsConfigDir}/config/types/@girs/${toLower girName}".source = + pkgs.callPackage + ./mk-types { + inherit ts-for-gir-src package girName; + }; + }; + in ( + { + # Generated types + "${agsConfigDir}/config/types" = { + source = "${agsPkg}/share/com.github.Aylur.ags/types"; + recursive = true; # To add other types inside the folder + }; + } + // (mkType gtkSessionLock "GtkSessionLock-0.1") + // (mkType astalTray "AstalTray-0.1") + // { + # Out of store symlinks + ".config/ags".source = mkOutOfStoreSymlink "${flakeDir}/modules/ags/config"; + + # Generated JavaScript files + "${agsConfigDir}/config/config.js".text = configJs; + "${agsConfigDir}/config/ts/lockscreen/vars.ts".text = + # javascript + '' + export default { + mainMonitor: '${cfgDesktop.mainMonitor}', + dupeLockscreen: ${boolToString cfgDesktop.displayManager.duplicateScreen}, + hasFprintd: ${boolToString (hostName == "wim")}, + }; + ''; + } + // (import ./icons.nix {inherit pkgs agsConfigDir;}) + ); + + packages = + [ + # TODO: replace with matugen + self.packages.${pkgs.system}.coloryou + ] + ++ (with pkgs; [ + # ags + dart-sass + bun + playerctl + (callPackage ./clipboard {}) + + ## gui + pavucontrol # TODO: replace with ags widget + ]) + ++ (optionals cfgDesktop.isTouchscreen (with pkgs; [ + lisgd + ydotool + ])); + }; + + wayland.windowManager.hyprland = { + settings = { + animations = { + bezier = [ + "easeInOutBack, 0.68, -0.6, 0.32, 1.6" + ]; + + animation = [ + "fadeLayersIn, 0" + "fadeLayersOut, 1, 3000, default" + "layers, 1, 8, easeInOutBack, slide left" + ]; + }; + + layerrule = [ + "noanim, ^(?!win-).*" + + # Lockscreen blur + "blur, ^(blur-bg.*)" + "ignorealpha 0.19, ^(blur-bg.*)" + ]; + + exec-once = [ + "ags" + "sleep 3; ags -r 'App.openWindow(\"win-applauncher\")'" + ]; + + bind = [ + "$mainMod SHIFT, E , exec, ags -t win-powermenu" + "$mainMod , D , exec, ags -t win-applauncher" + "$mainMod , V , exec, ags -t win-clipboard" + " , Print, exec, ags -t win-screenshot" + ]; + binde = [ + ## Brightness control + ", XF86MonBrightnessUp , exec, ags -r 'Brightness.screen += 0.05'" + ", XF86MonBrightnessDown, exec, ags -r 'Brightness.screen -= 0.05'" + ]; + bindn = [" , Escape , exec, ags -r 'closeAll()'"]; + bindr = ["CAPS, Caps_Lock, exec, ags -r 'Brightness.fetchCapsState()'"]; + }; + }; + }) + ]; + }; + + # For accurate stack trace + _file = ./default.nix; +} diff --git a/modules/ags/icons.nix b/nixosModules/ags/icons.nix similarity index 100% rename from modules/ags/icons.nix rename to nixosModules/ags/icons.nix diff --git a/modules/ags/mk-types/.envrc b/nixosModules/ags/mk-types/.envrc similarity index 100% rename from modules/ags/mk-types/.envrc rename to nixosModules/ags/mk-types/.envrc diff --git a/modules/ags/mk-types/default.nix b/nixosModules/ags/mk-types/default.nix similarity index 100% rename from modules/ags/mk-types/default.nix rename to nixosModules/ags/mk-types/default.nix diff --git a/modules/ags/mk-types/package-lock.json b/nixosModules/ags/mk-types/package-lock.json similarity index 100% rename from modules/ags/mk-types/package-lock.json rename to nixosModules/ags/mk-types/package-lock.json diff --git a/modules/ags/mk-types/package.json b/nixosModules/ags/mk-types/package.json similarity index 100% rename from modules/ags/mk-types/package.json rename to nixosModules/ags/mk-types/package.json diff --git a/modules/borgbackup/default.nix b/nixosModules/borgbackup/default.nix similarity index 87% rename from modules/borgbackup/default.nix rename to nixosModules/borgbackup/default.nix index 1f1ba408..1bd0d56d 100644 --- a/modules/borgbackup/default.nix +++ b/nixosModules/borgbackup/default.nix @@ -1,7 +1,7 @@ {...}: { imports = [./module.nix]; - services.borgbackup = { + config.services.borgbackup = { existingRepos = [ { name = "docker"; @@ -25,4 +25,7 @@ } ]; }; + + # For accurate stack trace + _file = ./default.nix; } diff --git a/modules/borgbackup/module.nix b/nixosModules/borgbackup/module.nix similarity index 99% rename from modules/borgbackup/module.nix rename to nixosModules/borgbackup/module.nix index 2cbb92b9..afd25c1f 100644 --- a/modules/borgbackup/module.nix +++ b/nixosModules/borgbackup/module.nix @@ -264,4 +264,7 @@ in { cfg.configs; }; }; + + # For accurate stack trace + _file = ./module.nix; } diff --git a/nixosModules/default.nix b/nixosModules/default.nix new file mode 100644 index 00000000..1d87a787 --- /dev/null +++ b/nixosModules/default.nix @@ -0,0 +1,10 @@ +self: { + adb = import ./adb; + borgbackup = import ./borgbackup; + desktop = import ./desktop self; + docker = import ./docker self.inputs.khepri; + kmscon = import ./kmscon; + nvidia = import ./nvidia; + plymouth = import ./plymouth; + server = import ./server; +} diff --git a/modules/desktop/default.nix b/nixosModules/desktop/default.nix similarity index 74% rename from modules/desktop/default.nix rename to nixosModules/desktop/default.nix index 30b4550f..0b6e8f9e 100644 --- a/modules/desktop/default.nix +++ b/nixosModules/desktop/default.nix @@ -1,20 +1,21 @@ -{ +self: { config, lib, - self, ... }: let - inherit (lib) types; - inherit (lib.options) mkOption; + inherit (lib) elemAt mkOption types; + + inherit (self.inputs) home-manager; cfg = config.roles.desktop; flakeDir = config.environment.variables.FLAKE; in { imports = [ - ./display-manager - ./desktop-environment + (import ./manager self) + (import ./environment self) self.nixosModules.nvidia + home-manager.nixosModules.home-manager ]; config.assertions = [ @@ -35,6 +36,14 @@ in { ''; }; + ags.enable = mkOption { + type = types.bool; + default = false; + description = '' + Whether we want to enable AGS for the DE shell. + ''; + }; + mainMonitor = mkOption { type = types.str; description = '' @@ -45,6 +54,11 @@ in { default = "null"; }; + fontName = mkOption { + type = types.str; + default = elemAt config.fonts.fontconfig.defaultFonts.monospace 0; + }; + fontSize = mkOption { type = types.float; default = 12.0; @@ -79,4 +93,7 @@ in { }; }; }; + + # For accurate stack trace + _file = ./default.nix; } diff --git a/modules/desktop/desktop-environment/config/dolphinrc b/nixosModules/desktop/environment/config/dolphinrc similarity index 100% rename from modules/desktop/desktop-environment/config/dolphinrc rename to nixosModules/desktop/environment/config/dolphinrc diff --git a/modules/desktop/desktop-environment/config/kdeglobals b/nixosModules/desktop/environment/config/kdeglobals similarity index 100% rename from modules/desktop/desktop-environment/config/kdeglobals rename to nixosModules/desktop/environment/config/kdeglobals diff --git a/modules/desktop/desktop-environment/config/kiorc b/nixosModules/desktop/environment/config/kiorc similarity index 100% rename from modules/desktop/desktop-environment/config/kiorc rename to nixosModules/desktop/environment/config/kiorc diff --git a/modules/desktop/desktop-environment/config/mimeapps.list b/nixosModules/desktop/environment/config/mimeapps.list similarity index 100% rename from modules/desktop/desktop-environment/config/mimeapps.list rename to nixosModules/desktop/environment/config/mimeapps.list diff --git a/nixosModules/desktop/environment/default.nix b/nixosModules/desktop/environment/default.nix new file mode 100644 index 00000000..88adcdbf --- /dev/null +++ b/nixosModules/desktop/environment/default.nix @@ -0,0 +1,230 @@ +self: { + config, + lib, + pkgs, + ... +}: let + inherit (self.inputs) hyprgrass hyprland hyprland-plugins; +in { + imports = [ + (import ../../ags self) + + ./modules/dconf.nix + ./modules/printer.nix + ./modules/security.nix + (import ./modules/audio.nix self) + (import ./modules/packages.nix self) + (import ./modules/ratbag-mice.nix self) + ]; + + config = let + inherit (lib) concatStringsSep optionals; + + cfg = config.roles.desktop; + + hyprCfg = + config + .home-manager + .users + .${cfg.user} + .wayland + .windowManager + .hyprland; + in { + services = { + dbus.enable = true; + gvfs.enable = true; + libinput.enable = true; + xserver.wacom.enable = cfg.isTouchscreen; + }; + + programs.hyprland = { + enable = true; + package = hyprCfg.finalPackage; + portalPackage = + hyprland + .packages + .${pkgs.system} + .xdg-desktop-portal-hyprland; + }; + + xdg.portal = { + enable = true; + + extraPortals = with pkgs; [ + xdg-desktop-portal-kde + ]; + + config.hyprland = { + default = [ + "hyprland" + "gtk" + ]; + + "org.freedesktop.impl.portal.FileChooser" = [ + "kde" + ]; + }; + }; + + home-manager.users.${cfg.user} = { + imports = [ + ./home/dev.nix + + # Plugins + (import ./home/hyprexpo.nix hyprland-plugins) + (import ./home/hyprgrass.nix hyprgrass) + + ./home/inputs.nix + (import ./home/style.nix self) + ]; + + wayland.windowManager.hyprland = { + enable = true; + package = + hyprland + .packages + .${pkgs.system} + .default; + + systemd.variables = ["-all"]; + + settings = { + envd = let + mkGSchemas = pkg: "${pkg}/share/gsettings-schemas/${pkg.name}"; + in + [ + "GTK_USE_PORTAL, 1" + "NIXOS_OZONE_WL, 1" + "ELECTRON_OZONE_PLATFORM_HINT, auto" + + "XDG_DATA_DIRS, ${concatStringsSep ":" [ + (mkGSchemas pkgs.gsettings-desktop-schemas) + (mkGSchemas pkgs.gtk3) + "$XDG_DATA_DIRS" + ]}" + ] + ++ (optionals config.nvidia.enable [ + "LIBVA_DRIVER_NAME, nvidia" + "NVD_BACKEND, direct" + "XDG_SESSION_TYPE, wayland" + "GBM_BACKEND, nvidia-drm" + "__GLX_VENDOR_LIBRARY_NAME, nvidia" + ]); + + xwayland.force_zero_scaling = true; + monitor = [ + (concatStringsSep "," [ + "desc:Acer Technologies Acer K212HQL T3EAA0014201" + "1920x1080@60" + "840x450, 1, transform, 3" + ]) + (concatStringsSep "," [ + "desc:BOE 0x0964" + "1920x1200@60" + "0x2920, 1" + ]) + (concatStringsSep "," [ + "desc:Samsung Electric Company C27JG5x HTOM100586" + "2560x1440@120" + "1920x120, 1" + ]) + (concatStringsSep "," [ + "desc:GIGA-BYTE TECHNOLOGY CO. LTD. G27QC 0x00000B1D" + "2560x1440@120" + "1920x1560, 1" + ]) + ]; + + "$mainMod" = "SUPER"; + + bind = [ + # Defaults + "$mainMod, F, fullscreen" + "$mainMod, C, killactive" + "$mainMod SHIFT, SPACE, togglefloating" + "$mainMod, J, layoutmsg, togglesplit" + + ## Move focus with arrow keys + "$mainMod, left, movefocus, l" + "$mainMod, right, movefocus, r" + "$mainMod, up, movefocus, u" + "$mainMod, down, movefocus, d" + + ## Move to specific workspaces + "$mainMod, 1, workspace, 1" + "$mainMod, 2, workspace, 2" + "$mainMod, 3, workspace, 3" + "$mainMod, 4, workspace, 4" + "$mainMod, 5, workspace, 5" + "$mainMod, 6, workspace, 6" + "$mainMod, 7, workspace, 7" + "$mainMod, 8, workspace, 8" + "$mainMod, 9, workspace, 9" + "$mainMod, 0, workspace, 10" + + # Move active window to a workspace + "$mainMod SHIFT, 1, movetoworkspace, 1" + "$mainMod SHIFT, 2, movetoworkspace, 2" + "$mainMod SHIFT, 3, movetoworkspace, 3" + "$mainMod SHIFT, 4, movetoworkspace, 4" + "$mainMod SHIFT, 5, movetoworkspace, 5" + "$mainMod SHIFT, 6, movetoworkspace, 6" + "$mainMod SHIFT, 7, movetoworkspace, 7" + "$mainMod SHIFT, 8, movetoworkspace, 8" + "$mainMod SHIFT, 9, movetoworkspace, 9" + "$mainMod SHIFT, 0, movetoworkspace, 10" + + ",XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle" + ",XF86AudioMicMute, exec, pactl set-source-mute @DEFAULT_SOURCE@ toggle" + ]; + + binde = [ + ",XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+ & ags -r 'popup_osd(\"speaker\")' &" + ",XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- & ags -r 'popup_osd(\"speaker\")' &" + ]; + + # Mouse Binds + bindm = [ + "$mainMod, mouse:272, movewindow" + "$mainMod, mouse:273, resizewindow" + ]; + + misc = { + disable_hyprland_logo = true; + disable_splash_rendering = true; + vfr = true; + }; + + dwindle = { + smart_split = true; + special_scale_factor = 0.8; + }; + }; + }; + + # libs + home.packages = with pkgs; [ + # tools + bluez-tools + brightnessctl + pulseaudio + alsa-utils + + qt5.qtwayland + qt6.qtwayland + libayatana-appindicator + xdg-utils + evtest + glib + xorg.xrandr + libinput + xclip + libnotify + ]; + }; + }; + + # For accurate stack trace + _file = ./default.nix; +} diff --git a/nixosModules/desktop/environment/home/dev.nix b/nixosModules/desktop/environment/home/dev.nix new file mode 100644 index 00000000..107cddd0 --- /dev/null +++ b/nixosModules/desktop/environment/home/dev.nix @@ -0,0 +1,23 @@ +{pkgs, ...}: { + config = { + programs.bash.shellAliases = { + # https://wiki.hyprland.org/Contributing-and-Debugging/#lsp-and-formatting + "mkCMakeFiles" = "cmake -S . -B build/ -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON"; + }; + + home.packages = [ + (pkgs.writeShellScriptBin "testChanges" '' + rm -r /home/matt/git/$1/$2/{.cache,build} + nix flake update "$1" + nh os switch + ( + cd "/home/matt/git/$1/$2" + nix develop /home/matt/git/$1 -c cmake -S . -B build/ -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON + ) + '') + ]; + }; + + # For accurate stack trace + _file = ./dev.nix; +} diff --git a/nixosModules/desktop/environment/home/foot.nix b/nixosModules/desktop/environment/home/foot.nix new file mode 100644 index 00000000..cdc67068 --- /dev/null +++ b/nixosModules/desktop/environment/home/foot.nix @@ -0,0 +1,93 @@ +{ + lib, + osConfig, + ... +}: { + config = let + cfg = osConfig.roles.desktop; + in { + programs = { + # https://codeberg.org/dnkl/foot/wiki#spawning-new-terminal-instances-in-the-current-working-directory + bash.bashrcExtra = + # bash + '' + osc7_cwd() { + local strlen=''${#PWD} + local encoded="" + local pos c o + for (( pos=0; pos /dev/null 2>&1 + do + sleep 0.1 + if [[ $(hyprctl activewindow | grep Ksshaskpass) == "" ]]; then + killall -r ksshaskpass + fi + done + ) & + exec env SUDO_ASKPASS=${plasma5Packages.ksshaskpass}/bin/${plasma5Packages.ksshaskpass.pname} sudo -k -EA "${gparted}/bin/${gparted.pname}" "$@" + '') + + # tools + wl-color-picker + wl-clipboard + cliphist + grim-hyprland + slurp + satty + ]) + ++ [ + jellyfin-flake.packages.${pkgs.system}.jellyfin-media-player + + /* + Discord themes for Vencord + https://markchan0225.github.io/RoundedDiscord/RoundedDiscord.theme.css + https://raw.githubusercontent.com/dracula/BetterDiscord/master/Dracula_Official.theme.css + */ + (pkgs.symlinkJoin { + name = "discord"; + paths = [ + (pkgs.discord.override { + withOpenASAR = true; + withVencord = true; + }) + ]; + buildInputs = [pkgs.makeWrapper]; + postBuild = '' + wrapProgram $out/bin/Discord ${optionalString config.nvidia.enable + ''--prefix LD_LIBRARY_PATH : "${makeLibraryPath [ + pkgs.addOpenGLRunpath.driverLink + pkgs.libglvnd + ]}"''} \ + --add-flags "--enable-features=UseOzonePlatform,WebRTCPipeWireCapturer --ozone-platform=wayland" + ''; + }) + ]; + + wayland.windowManager.hyprland = { + settings = { + exec-once = + [ + "${config.programs.kdeconnect.package}/libexec/kdeconnectd" + "kdeconnect-indicator" + + "wl-paste --watch cliphist store" + + "sleep 3; nextcloud --background" + + "[workspace special:protonmail silent] proton-mail" + "[workspace special:spot silent] spotify" + ] + ++ optionals config.services.tailscale.enable [ + "sleep 3; ${getExe restartTailscale}" + ]; + + windowrule = [ + "tile,^(libreoffice)$" + "float,^(org.gnome.Calculator)$" + "float,^(com.gabm.satty)$" + "size 1000 700,^(com.gabm.satty)$" + + "float,^(com.nextcloud.desktopclient.nextcloud)$" + "move cursor -15 -10,^(com.nextcloud.desktopclient.nextcloud)$" + "size 400 581,^(com.nextcloud.desktopclient.nextcloud)$" + + "workspace special:protonmail silent,^(Proton Mail)$" + "workspace special:spot silent,^(Spotify)$" + ]; + + bind = [ + "$mainMod, Q, exec, foot" + + "$mainMod SHIFT, C, exec, wl-color-picker" + + "$mainMod, P, togglespecialworkspace, protonmail" + "$mainMod, S, togglespecialworkspace, spot" + ]; + }; + }; + }; + }; + + # For accurate stack trace + _file = ./packages.nix; +} diff --git a/nixosModules/desktop/environment/modules/printer.nix b/nixosModules/desktop/environment/modules/printer.nix new file mode 100644 index 00000000..2c40813a --- /dev/null +++ b/nixosModules/desktop/environment/modules/printer.nix @@ -0,0 +1,16 @@ +{pkgs, ...}: { + config = { + services = { + # Enable CUPS to print documents. + printing = { + enable = true; + drivers = with pkgs; [ + hplip + ]; + }; + }; + }; + + # For accurate stack trace + _file = ./printer.nix; +} diff --git a/nixosModules/desktop/environment/modules/ratbag-mice.nix b/nixosModules/desktop/environment/modules/ratbag-mice.nix new file mode 100644 index 00000000..1c340514 --- /dev/null +++ b/nixosModules/desktop/environment/modules/ratbag-mice.nix @@ -0,0 +1,18 @@ +self: {pkgs, ...}: let + inherit (self.packages.${pkgs.system}) libratbag piper; +in { + config = { + services.ratbagd = { + enable = true; + + package = libratbag; + }; + + environment.systemPackages = [ + piper + ]; + }; + + # For accurate stack trace + _file = ./ratbag-mice.nix; +} diff --git a/nixosModules/desktop/environment/modules/security.nix b/nixosModules/desktop/environment/modules/security.nix new file mode 100644 index 00000000..16336a7f --- /dev/null +++ b/nixosModules/desktop/environment/modules/security.nix @@ -0,0 +1,113 @@ +{ + config, + lib, + pkgs, + ... +}: { + config = let + inherit (lib) getExe mkIf; + + cfg = config.roles.desktop; + + hmCfg = config.home-manager.users.${cfg.user}; + agsPkg = hmCfg.programs.ags.finalPackage; + hyprPkg = hmCfg.wayland.windowManager.hyprland.finalPackage; + + runInDesktop = pkgs.writeShellApplication { + name = "runInDesktop"; + runtimeInputs = [ + pkgs.sudo + agsPkg + hyprPkg + ]; + + text = '' + params=( "$@" ) + user="$(id -u ${cfg.user})" + readarray -t SIGS <<< "$(ls "/run/user/$user/hypr/")" + + run() { + export HYPRLAND_INSTANCE_SIGNATURE="$1" + sudo -Eu ${cfg.user} hyprctl dispatch exec "''${params[@]}" + } + + i=0 + + # FIXME: not sure if sudo passes the exit status to this + while ! run "''${SIGS[$i]}"; do + ((i+=1)) + done + ''; + }; + + lockPkg = pkgs.writeShellApplication { + name = "lock"; + runtimeInputs = [ + agsPkg + ]; + + text = '' + ags -r 'Tablet.setLaptopMode()' + ags -b lockscreen -c /home/${cfg.user}/.config/ags/lockscreen.js + ''; + }; + in { + services.acpid = mkIf cfg.isLaptop { + enable = true; + + lidEventCommands = + # bash + '' + LID="/proc/acpi/button/lid/LID/state" + state=$(${pkgs.gawk}/bin/awk '{print $2}' "$LID") + + case "$state" in + *open*) + ${getExe runInDesktop} "ags -b lockscreen -r 'authFinger()'" + ;; + + *close*) + ${getExe runInDesktop} ${getExe lockPkg} + ;; + + *) + logger -t lid-handler "Failed to detect lid state ($state)" + ;; + esac + ''; + }; + + home-manager.users.${cfg.user} = { + home.packages = [ + pkgs.seahorse + lockPkg + ]; + + wayland.windowManager.hyprland = { + settings = { + exec-once = [ + "gnome-keyring-daemon --start --components=secrets" + "${pkgs.plasma5Packages.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1" + ]; + + windowrule = [ + "float,^(org.kde.polkit-kde-authentication-agent-1)$" + "size 741 288,^(org.kde.polkit-kde-authentication-agent-1)$" + "center,^(org.kde.polkit-kde-authentication-agent-1)$" + + # For GParted auth + "size 741 288,^(org.kde.ksshaskpass)$" + "move cursor -370 -144,^(org.kde.ksshaskpass)$" + ]; + + bind = [ + "$mainMod, L, exec, ${getExe lockPkg}" + ]; + }; + }; + }; + }; + + # For accurate stack trace + _file = ./security.nix; +} diff --git a/nixosModules/desktop/home/hyprpaper.nix b/nixosModules/desktop/home/hyprpaper.nix new file mode 100644 index 00000000..8c110e38 --- /dev/null +++ b/nixosModules/desktop/home/hyprpaper.nix @@ -0,0 +1,29 @@ +self: { + lib, + pkgs, + ... +}: { + config = let + wallpaper = toString self.legacyPackages.${pkgs.system}.dracula.wallpaper; + in { + home.packages = with pkgs; [hyprpaper]; + + xdg.configFile."hypr/hyprpaper.conf" = { + text = lib.hm.generators.toHyprconf { + attrs = { + ipc = "on"; + splash = false; + + preload = [wallpaper]; + + wallpaper = [ + ",${wallpaper}" + ]; + }; + }; + }; + }; + + # For accurate stack trace + _file = ./hyprpaper.nix; +} diff --git a/nixosModules/desktop/home/theme/default.nix b/nixosModules/desktop/home/theme/default.nix new file mode 100644 index 00000000..52d09d3b --- /dev/null +++ b/nixosModules/desktop/home/theme/default.nix @@ -0,0 +1,48 @@ +self: {pkgs, ...}: { + imports = [ + ./gtk.nix + (import ./qt.nix self) + ]; + + config = let + inherit (self.legacyPackages.${pkgs.system}) dracula; + in { + home.pointerCursor = { + name = "Dracula-cursors"; + package = dracula.gtk; + size = 24; + + gtk.enable = true; + + x11 = { + enable = true; + defaultCursor = "Dracula-cursors"; + }; + }; + + xresources.extraConfig = '' + ! Dracula Xresources palette + *.foreground: #F8F8F2 + *.background: #282A36 + *.color0: #000000 + *.color8: #4D4D4D + *.color1: #FF5555 + *.color9: #FF6E67 + *.color2: #50FA7B + *.color10: #5AF78E + *.color3: #F1FA8C + *.color11: #F4F99D + *.color4: #BD93F9 + *.color12: #CAA9FA + *.color5: #FF79C6 + *.color13: #FF92D0 + *.color6: #8BE9FD + *.color14: #9AEDFE + *.color7: #BFBFBF + *.color15: #E6E6E6 + ''; + }; + + # For accurate stack trace + _file = ./default.nix; +} diff --git a/modules/desktop/home/theme/gradience.nix b/nixosModules/desktop/home/theme/gradience.nix similarity index 100% rename from modules/desktop/home/theme/gradience.nix rename to nixosModules/desktop/home/theme/gradience.nix diff --git a/nixosModules/desktop/home/theme/gtk.nix b/nixosModules/desktop/home/theme/gtk.nix new file mode 100644 index 00000000..2cc0f408 --- /dev/null +++ b/nixosModules/desktop/home/theme/gtk.nix @@ -0,0 +1,69 @@ +{ + pkgs, + lib, + osConfig, + ... +}: { + config = let + inherit (import ./gradience.nix {inherit pkgs lib;}) gradience; + + cfg = osConfig.roles.desktop; + in { + home.packages = with pkgs; [ + gnomeExtensions.user-themes + ]; + + # Gtk settings + gtk = { + enable = true; + + theme = { + name = "adw-gtk3"; + package = pkgs.adw-gtk3; + }; + + iconTheme = { + name = "Flat-Remix-Violet-Dark"; + package = pkgs.flat-remix-icon-theme; + }; + + font = { + name = "Sans Serif"; + size = cfg.fontSize; + }; + + gtk3 = { + extraConfig = { + "gtk-application-prefer-dark-theme" = 1; + }; + extraCss = "@import url(\"file://${gradience.build}/gtk-3.0/gtk.css\");"; + }; + + gtk4 = { + extraConfig = { + "gtk-application-prefer-dark-theme" = 1; + }; + extraCss = "@import url(\"file://${gradience.build}/gtk-4.0/gtk.css\");"; + }; + }; + + dconf.settings = { + "org/gnome/shell/extensions/user-theme" = { + name = gradience.shellTheme; + }; + "org/gnome/shell" = { + enabled-extensions = [pkgs.gnomeExtensions.user-themes.extensionUuid]; + }; + }; + + xdg.dataFile.shellTheme = { + enable = true; + recursive = true; + source = "${gradience.build}/gradience-shell"; + target = "themes/${gradience.shellTheme}"; + }; + }; + + # For accurate stack trace + _file = ./gtk.nix; +} diff --git a/nixosModules/desktop/home/theme/qt.nix b/nixosModules/desktop/home/theme/qt.nix new file mode 100644 index 00000000..945db7c9 --- /dev/null +++ b/nixosModules/desktop/home/theme/qt.nix @@ -0,0 +1,47 @@ +self: { + lib, + osConfig, + pkgs, + ... +}: { + config = let + inherit (self.legacyPackages.${pkgs.system}) dracula; + + cfg = osConfig.roles.desktop; + in { + home.packages = with pkgs; [ + libsForQt5.qtstyleplugin-kvantum + qt6Packages.qtstyleplugin-kvantum + ]; + + qt = { + enable = true; + platformTheme.name = "qtct"; + }; + + xdg.configFile = let + floatFont = lib.strings.floatToString cfg.fontSize; + qtconf = + # ini + '' + [Fonts] + fixed="Sans Serif,${floatFont},-1,5,50,0,0,0,0,0" + general="Sans Serif,${floatFont},-1,5,50,0,0,0,0,0" + + [Appearance] + icon_theme=Flat-Remix-Violet-Dark + style=''; + # The newline before this must be there + in { + "Kvantum/Dracula/Dracula.kvconfig".source = "${dracula.gtk}/share/Kvantum/Dracula-purple-solid/Dracula-purple-solid.kvconfig"; + "Kvantum/Dracula/Dracula.svg".source = "${dracula.gtk}/share/Kvantum/Dracula-purple-solid/Dracula-purple-solid.svg"; + "Kvantum/kvantum.kvconfig".text = "[General]\ntheme=Dracula"; + + "qt5ct/qt5ct.conf".text = qtconf + "kvantum"; + "qt6ct/qt6ct.conf".text = qtconf + "kvantum"; + }; + }; + + # For accurate stack trace + _file = ./qt.nix; +} diff --git a/modules/desktop/display-manager/ags/.envrc b/nixosModules/desktop/manager/ags/.envrc similarity index 100% rename from modules/desktop/display-manager/ags/.envrc rename to nixosModules/desktop/manager/ags/.envrc diff --git a/nixosModules/desktop/manager/ags/default.nix b/nixosModules/desktop/manager/ags/default.nix new file mode 100644 index 00000000..f1d18a27 --- /dev/null +++ b/nixosModules/desktop/manager/ags/default.nix @@ -0,0 +1,76 @@ +self: { + config, + lib, + pkgs, + ... +}: let + inherit (self.inputs) ags; +in { + config = let + cfg = config.roles.desktop; + + hyprland = + config + .home-manager + .users + .${cfg.user} + .wayland + .windowManager + .hyprland + .finalPackage; + in { + # Add home folder for home-manager to work + users.users.greeter = { + home = "/var/lib/greeter"; + createHome = true; + }; + + home-manager.users.greeter = { + imports = [ags.homeManagerModules.default]; + + programs.ags.enable = true; + + home.packages = [ + hyprland + pkgs.gtk3 + pkgs.glib + ]; + + xdg.configFile = { + "ags".source = pkgs.stdenv.mkDerivation { + name = "ags-greeter"; + src = lib.fileset.toSource { + root = ./.; + fileset = lib.fileset.unions [ + ./scss + ./greeter.ts + ./ts + ./tsconfig.json + ]; + }; + + buildInputs = with pkgs; [ + bun + dart-sass + ]; + + buildPhase = '' + sass ./scss/greeter.scss style.css + bun build ./greeter.ts \ + --external resource:///* \ + --external gi://* \ + --external cairo > config.js + ''; + + installPhase = '' + mkdir $out + mv style.css config.js $out/ + ''; + }; + }; + }; + }; + + # For accurate stack trace + _file = ./default.nix; +} diff --git a/modules/desktop/display-manager/ags/eslint.config.js b/nixosModules/desktop/manager/ags/eslint.config.js similarity index 100% rename from modules/desktop/display-manager/ags/eslint.config.js rename to nixosModules/desktop/manager/ags/eslint.config.js diff --git a/modules/desktop/display-manager/ags/greeter.ts b/nixosModules/desktop/manager/ags/greeter.ts similarity index 100% rename from modules/desktop/display-manager/ags/greeter.ts rename to nixosModules/desktop/manager/ags/greeter.ts diff --git a/modules/desktop/display-manager/ags/package-lock.json b/nixosModules/desktop/manager/ags/package-lock.json similarity index 100% rename from modules/desktop/display-manager/ags/package-lock.json rename to nixosModules/desktop/manager/ags/package-lock.json diff --git a/modules/desktop/display-manager/ags/package.json b/nixosModules/desktop/manager/ags/package.json similarity index 100% rename from modules/desktop/display-manager/ags/package.json rename to nixosModules/desktop/manager/ags/package.json diff --git a/modules/desktop/display-manager/ags/scss/greeter.scss b/nixosModules/desktop/manager/ags/scss/greeter.scss similarity index 100% rename from modules/desktop/display-manager/ags/scss/greeter.scss rename to nixosModules/desktop/manager/ags/scss/greeter.scss diff --git a/modules/desktop/display-manager/ags/ts/greetd/main.ts b/nixosModules/desktop/manager/ags/ts/greetd/main.ts similarity index 100% rename from modules/desktop/display-manager/ags/ts/greetd/main.ts rename to nixosModules/desktop/manager/ags/ts/greetd/main.ts diff --git a/modules/desktop/display-manager/ags/tsconfig.json b/nixosModules/desktop/manager/ags/tsconfig.json similarity index 100% rename from modules/desktop/display-manager/ags/tsconfig.json rename to nixosModules/desktop/manager/ags/tsconfig.json diff --git a/nixosModules/desktop/manager/default.nix b/nixosModules/desktop/manager/default.nix new file mode 100644 index 00000000..36827402 --- /dev/null +++ b/nixosModules/desktop/manager/default.nix @@ -0,0 +1,56 @@ +self: { + config, + pkgs, + ... +}: { + imports = [ + (import ./ags self) + (import ./hyprland.nix self) + ]; + + config = let + cfg = config.roles.desktop; + + hyprland = + config + .home-manager + .users + .${cfg.user} + .wayland + .windowManager + .hyprland + .finalPackage; + + # Hide TTY on launch + cmd = toString (pkgs.writeShellScript "hyprland-wrapper" '' + trap 'systemctl --user stop hyprland-session.target; sleep 1' EXIT + exec Hyprland >/dev/null + ''); + in { + services = { + displayManager.sessionPackages = [hyprland]; + + greetd = { + enable = true; + settings = { + default_session = { + command = cmd; + user = "greeter"; + }; + + initial_session = { + command = cmd; + user = cfg.user; + }; + }; + }; + }; + + # unlock GPG keyring on login + services.gnome.gnome-keyring.enable = true; + security.pam.services.greetd.enableGnomeKeyring = true; + }; + + # For accurate stack trace + _file = ./default.nix; +} diff --git a/nixosModules/desktop/manager/hyprland.nix b/nixosModules/desktop/manager/hyprland.nix new file mode 100644 index 00000000..8b307360 --- /dev/null +++ b/nixosModules/desktop/manager/hyprland.nix @@ -0,0 +1,67 @@ +self: { + config, + lib, + pkgs, + ... +}: { + config = let + inherit (lib) filterAttrs hasPrefix optionals; + + inherit (import ./setupMonitors.nix {inherit config pkgs;}) setupMonitors; + + cfg = config.roles.desktop; + + # Nix stuff + cfgHypr = + config + .home-manager + .users + .${cfg.user} + .wayland + .windowManager + .hyprland; + + devices = filterAttrs (n: v: hasPrefix "device:" n) cfgHypr.settings; + in { + home-manager.users.greeter = { + imports = [ + (import ../environment/home/style.nix self) + ]; + + wayland.windowManager.hyprland = { + enable = true; + package = cfgHypr.finalPackage; + systemd.enable = false; + + settings = + { + inherit (cfgHypr.settings) cursor input misc monitor; + + envd = optionals (config.nvidia.enable) [ + "LIBVA_DRIVER_NAME, nvidia" + "NVD_BACKEND, direct" + "XDG_SESSION_TYPE, wayland" + "GBM_BACKEND, nvidia-drm" + "__GLX_VENDOR_LIBRARY_NAME, nvidia" + ]; + + general.border_size = 0; + + decoration = { + blur.enabled = false; + drop_shadow = false; + }; + + exec-once = [ + setupMonitors + "ags -b greeter &> /tmp/ags-greetd.log; hyprctl dispatch exit" + ]; + } + // devices; + }; + }; + }; + + # For accurate stack trace + _file = ./hyprland.nix; +} diff --git a/modules/desktop/display-manager/setupMonitors.nix b/nixosModules/desktop/manager/setupMonitors.nix similarity index 100% rename from modules/desktop/display-manager/setupMonitors.nix rename to nixosModules/desktop/manager/setupMonitors.nix diff --git a/modules/docker/.template/compose.nix b/nixosModules/docker/.template/compose.nix similarity index 100% rename from modules/docker/.template/compose.nix rename to nixosModules/docker/.template/compose.nix diff --git a/modules/docker/.template/images/image.nix b/nixosModules/docker/.template/images/image.nix similarity index 100% rename from modules/docker/.template/images/image.nix rename to nixosModules/docker/.template/images/image.nix diff --git a/modules/docker/default.nix b/nixosModules/docker/default.nix similarity index 93% rename from modules/docker/default.nix rename to nixosModules/docker/default.nix index e8a1c862..3a1dfbe6 100644 --- a/modules/docker/default.nix +++ b/nixosModules/docker/default.nix @@ -1,6 +1,5 @@ -{ +khepri: { config, - khepri, lib, pkgs, ... @@ -43,4 +42,7 @@ in { (callPackage ./updateImage.nix {}) ]; }; + + # For accurate stack trace + _file = ./default.nix; } diff --git a/modules/docker/updateImage.nix b/nixosModules/docker/updateImage.nix similarity index 100% rename from modules/docker/updateImage.nix rename to nixosModules/docker/updateImage.nix diff --git a/nixosModules/kmscon/default.nix b/nixosModules/kmscon/default.nix new file mode 100644 index 00000000..367b1666 --- /dev/null +++ b/nixosModules/kmscon/default.nix @@ -0,0 +1,43 @@ +{ + config, + lib, + ... +}: let + inherit (lib) elemAt mkIf mkOption types; + + cfg = config.services.kmscon; +in { + options.services.kmscon = { + fontName = mkOption { + type = types.str; + default = elemAt config.fonts.fontconfig.defaultFonts.monospace 0; + }; + + fontSize = mkOption { + type = types.numbers.nonnegative; + default = 12.5; + }; + + fontDpi = mkOption { + type = types.numbers.nonnegative; + default = 170; + }; + }; + + config = mkIf cfg.enable { + services.kmscon = { + useXkbConfig = true; + hwRender = false; + + # FIXME: https://github.com/Aetf/kmscon/issues/18 // Icons not rendering properly + extraOptions = builtins.concatStringsSep " " [ + "--font-size ${toString cfg.fontSize}" + "--font-dpi ${toString cfg.fontDpi}" + "--font-name '${cfg.fontName}'" + ]; + }; + }; + + # For accurate stack trace + _file = ./default.nix; +} diff --git a/modules/nvidia.nix b/nixosModules/nvidia/default.nix similarity index 97% rename from modules/nvidia.nix rename to nixosModules/nvidia/default.nix index 6e0c8a37..1104b05f 100644 --- a/modules/nvidia.nix +++ b/nixosModules/nvidia/default.nix @@ -84,4 +84,7 @@ in { optionals cfg.enableCUDA ["nvidia-uvm"] ++ ["nvidia" "nvidia-drm"]; }; + + # For accurate stack trace + _file = ./default.nix; } diff --git a/modules/plymouth.nix b/nixosModules/plymouth/default.nix similarity index 59% rename from modules/plymouth.nix rename to nixosModules/plymouth/default.nix index 7a2dba64..e5e1758d 100644 --- a/modules/plymouth.nix +++ b/nixosModules/plymouth/default.nix @@ -1,15 +1,13 @@ { config, lib, - pkgs, - self, ... }: let - inherit (lib) hasAttr mkIf optionals; + inherit (lib) mkIf; cfg = config.boot.plymouth; in { - boot = mkIf cfg.enable { + config.boot = mkIf cfg.enable { initrd = { verbose = false; systemd.enable = true; @@ -29,13 +27,8 @@ in { ]; loader.timeout = 0; - - plymouth.themePackages = - [ - self.legacyPackages.${pkgs.system}.dracula.plymouth - ] - ++ optionals (hasAttr "steamdeck-hw-theme" pkgs) [ - pkgs.steamdeck-hw-theme - ]; }; + + # For accurate stack trace + _file = ./default.nix; } diff --git a/nixosModules/server/default.nix b/nixosModules/server/default.nix new file mode 100644 index 00000000..29a0597b --- /dev/null +++ b/nixosModules/server/default.nix @@ -0,0 +1,30 @@ +{lib, ...}: let + inherit (lib) mkOption types; +in { + imports = [ + ./sshd.nix + ./tailscale.nix + ]; + + options.roles.server = { + user = mkOption { + type = types.str; + description = '' + The name of the machine's main user. + ''; + }; + + sshd.enable = mkOption { + type = types.bool; + default = false; + }; + + tailscale.enable = mkOption { + type = types.bool; + default = false; + }; + }; + + # For accurate stack trace + _file = ./default.nix; +} diff --git a/nixosModules/server/sshd.nix b/nixosModules/server/sshd.nix new file mode 100644 index 00000000..ddc9e900 --- /dev/null +++ b/nixosModules/server/sshd.nix @@ -0,0 +1,32 @@ +{ + config, + lib, + ... +}: let + inherit (lib) mkIf; + + cfg = config.roles.server; +in { + config = mkIf cfg.sshd.enable { + services = { + openssh = { + enable = true; + settings = { + PasswordAuthentication = false; + PermitRootLogin = "no"; + }; + }; + }; + + users.users.${cfg.user} = { + openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPE39uk52+NIDLdHeoSHIEsOUUFRzj06AGn09z4TUOYm matt@OP9" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICr2+CpqXNMLsjgbrYyIwTKhlVSiIYol1ghBPzLmUpKl matt@binto" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJGbLu+Gb7PiyNgNXMHemaQLnKixebx1/4cdJGna9OQp matt@wim" + ]; + }; + }; + + # For accurate stack trace + _file = ./sshd.nix; +} diff --git a/nixosModules/server/tailscale.nix b/nixosModules/server/tailscale.nix new file mode 100644 index 00000000..735b5db4 --- /dev/null +++ b/nixosModules/server/tailscale.nix @@ -0,0 +1,49 @@ +{ + config, + lib, + ... +}: let + inherit (lib) mkIf; + inherit (config.networking) hostName; + + cfg = config.roles.server; +in { + config = mkIf cfg.tailscale.enable { + services = { + tailscale = { + enable = true; + # TODO: add authKeyFile to get extraUpFlags to work + # https://github.com/juanfont/headscale/issues/1550 + # https://github.com/juanfont/headscale/blob/main/docs/running-headscale-linux-manual.md#register-machine-using-a-pre-authenticated-key + # https://www.reddit.com/r/NixOS/comments/18kz1nb/tailscale_extraupflags_not_working/ + extraUpFlags = [ + "--login-server https://headscale.nelim.org" + "--operator=${cfg.user}" + ]; + }; + }; + + home-manager.users.${cfg.user} = { + programs.bash.shellAliases = { + # Connect to headscale + tup = "tailscale up --login-server https://headscale.nelim.org"; + + # Desktop + pc = "ssh -t matt@binto 'tmux -2u new -At ${hostName}'"; + + # NAS + nos = "ssh -t matt@nos 'tmux -2u new -At ${hostName}'"; + + # Experimenting server + servivi = "ssh -t matt@servivi 'tmux -2u new -At ${hostName}'"; + + # Cluster nodes + thingone = "ssh -t matt@thingone 'tmux -2u new -At ${hostName}'"; + thingtwo = "ssh -t matt@thingtwo 'tmux -2u new -At ${hostName}'"; + }; + }; + }; + + # For accurate stack trace + _file = ./tailscale.nix; +} diff --git a/packages/default.nix b/packages/default.nix index 71fbe190..67f9d24f 100644 --- a/packages/default.nix +++ b/packages/default.nix @@ -10,10 +10,20 @@ inherit (inputs) gpu-screen-recorder-src; }; + libratbag = pkgs.callPackage ./libratbag { + inherit (inputs) libratbag-src; + inherit mkVersion; + }; + pam-fprint-grosshack = pkgs.callPackage ./pam-fprint-grosshack { inherit (inputs) pam-fprint-grosshack-src; }; + piper = pkgs.callPackage ./piper { + inherit (inputs) piper-src; + inherit mkVersion; + }; + pokemon-colorscripts = pkgs.callPackage ./pokemon-colorscripts { inherit (inputs) pokemon-colorscripts-src; inherit mkVersion; diff --git a/packages/libratbag/default.nix b/packages/libratbag/default.nix new file mode 100644 index 00000000..c0b09b61 --- /dev/null +++ b/packages/libratbag/default.nix @@ -0,0 +1,11 @@ +{ + libratbag, + libratbag-src, + mkVersion, + ... +}: +libratbag.overrideAttrs { + pname = "libratbag"; + version = mkVersion libratbag-src; + src = libratbag-src; +} diff --git a/packages/piper/default.nix b/packages/piper/default.nix new file mode 100644 index 00000000..aa0119ce --- /dev/null +++ b/packages/piper/default.nix @@ -0,0 +1,15 @@ +{ + mkVersion, + piper, + piper-src, + ... +}: +piper.overrideAttrs { + pname = "piper"; + version = mkVersion piper-src; + src = piper-src; + + mesonFlags = [ + "-Druntime-dependency-checks=false" + ]; +}