diff --git a/flake.nix b/flake.nix
index 0599a79..977e6c4 100755
--- a/flake.nix
+++ b/flake.nix
@@ -115,25 +115,26 @@
systems = [
"x86_64-linux"
"aarch64-linux"
- "aarch64-darwin"
+ # "aarch64-darwin"
+ # aarch64-darwin is currently disabled due to lack of maintenance
];
flake = {
nixosConfigurations = {
demeter = buildLiminalOS {
inherit inputs nixpkgs;
- systemModule = ./hosts/demeter;
+ systemModule = ./reference/hosts/demeter;
};
callisto = buildLiminalOS {
inherit nixpkgs inputs;
- systemModule = ./hosts/callisto;
+ systemModule = ./reference/hosts/callisto;
};
adrastea = buildLiminalOS {
inherit inputs nixpkgs;
- systemModule = ./hosts/adrastea;
+ systemModule = ./reference/hosts/adrastea;
};
cassini = buildLiminalOS {
inherit inputs nixpkgs;
- systemModule = ./hosts/cassini;
+ systemModule = ./reference/hosts/cassini;
};
};
darwinConfigurations.phobos = nix-darwin.lib.darwinSystem {
@@ -146,7 +147,12 @@
};
};
perSystem =
- { pkgs, system, ... }:
+ {
+ pkgs,
+ system,
+ config,
+ ...
+ }:
{
formatter = pkgs.nixfmt-rfc-style;
@@ -164,6 +170,16 @@
inputs.viminal.packages.${system}.default
];
};
+
+ nixosModules = {
+ default = config.nixosModules.liminalOS;
+ liminalOS = ./modules/default.nix;
+ };
+
+ homeManagerModules = {
+ default = config.homeManagerModules.liminalOS;
+ liminalOS = ./hm/modules/default.nix;
+ };
};
};
}
diff --git a/hm/default.nix b/hm/default.nix
new file mode 100644
index 0000000..2c3bf2f
--- /dev/null
+++ b/hm/default.nix
@@ -0,0 +1,29 @@
+{
+ inputs,
+ config,
+ lib,
+ ...
+}:
+let
+ cfg = config.liminalOS;
+in
+{
+ imports = [
+ inputs.home-manager.nixosModules.home-manager
+ ];
+
+ options.liminalOS.integrateHomeManager = lib.mkOption {
+ type = lib.types.bool;
+ default = cfg.enable;
+ description = ''
+ Whether to activate home manager with default options. Keep in mind you still have to import the liminalOS home-manager module.
+ '';
+ };
+
+ config.home-manager = lib.mkIf cfg.integrateHomeManager {
+ useGlobalPkgs = true;
+ useUserPackages = true;
+ backupFileExtension = "backup";
+ extraSpecialArgs = { inherit inputs; };
+ };
+}
diff --git a/hm/modules/common/default.nix b/hm/modules/common/default.nix
new file mode 100644
index 0000000..a955cfd
--- /dev/null
+++ b/hm/modules/common/default.nix
@@ -0,0 +1,10 @@
+{
+ imports = [ ./shellenv ];
+ # Let home Manager install and manage itself.
+ programs.home-manager.enable = true;
+
+ home.file.".essentials" = {
+ source = ./essentials;
+ recursive = true;
+ };
+}
diff --git a/hm/modules/common/essentials/README.md b/hm/modules/common/essentials/README.md
new file mode 100644
index 0000000..5d8c79d
--- /dev/null
+++ b/hm/modules/common/essentials/README.md
@@ -0,0 +1 @@
+This place contains all of the stuff that is too hard or unwieldy to manage fully with nix, but is still useful to have ready on every system.
diff --git a/hm/modules/common/essentials/tabliss.json b/hm/modules/common/essentials/tabliss.json
new file mode 100644
index 0000000..c4ff7a1
--- /dev/null
+++ b/hm/modules/common/essentials/tabliss.json
@@ -0,0 +1 @@
+{"locale":"en","widget/QmFu0MVUS_uo":null,"widget/cMOmcy4ZqrjS":null,"widget/i54ELqP74_Sv":null,"widget/B_kz3lJkUxlp":null,"widget/Yvubo6Zu9lT8":null,"widget/MHcdYwMetd1i":null,"timeZone":null,"widget/Dj61R7yvYklL":null,"data/He0QCGvD65VV":{"messages":["There is no system but GNU, and Linux is one of its kernels."]},"widget/RuC5niQwKdxR":null,"widget/LCUpMUdJn0Yf":null,"widget/yJ9fL4n4XbdH":null,"widget/FkVDvMgaeXIG":null,"widget/L8ulAGK5O_0u":{"id":"L8ulAGK5O_0u","key":"widget/literature-clock","order":1,"display":{"position":"middleCentre","fontFamily":"Lora"}},"data/default-unsplash":{"by":"topics","collections":"","featured":false,"paused":false,"search":"","topics":"xHxYTMHLgOc","timeout":900},"data/y8f2hoHcUia3":{"columns":3,"links":[{"url":"https://github.com/","icon":"github"},{"url":"https://www.youtube.com/","icon":"youtube"},{"url":"https://github.com/youwen5","icon":"user"}],"visible":true,"linkOpenStyle":false},"widget/sqbQm1Apn-Ad":null,"widget/1SHRYajLSARQ":{"id":"1SHRYajLSARQ","key":"widget/weather","order":0,"display":{"position":"topCentre","fontSize":26,"fontFamily":"Lora"}},"widget/He0QCGvD65VV":{"id":"He0QCGvD65VV","key":"widget/message","order":5,"display":{"position":"bottomCentre","fontFamily":"Lora","fontWeight":400}},"widget/y8f2hoHcUia3":{"id":"y8f2hoHcUia3","key":"widget/links","order":4,"display":{"position":"middleCentre"}},"widget/KNX14ZQq5_lc":{"id":"KNX14ZQq5_lc","key":"widget/css","order":2,"display":{"position":"middleCentre","fontFamily":""}},"widget/rOHrlmChb_Sp":null,"data/KNX14ZQq5_lc":{"input":"\n.Widget .LiteratureClock {\n padding: 20px;\n background-color: rgba(0,0,0,0.1);\n border-radius: 20px;\n backdrop-filter: blur(4px);\n font-size: 1.2em;\n max-width: 800px;\n}\n\n.Widget .Message {\n margin-bottom: 60px;\n}\n\n\n.Widget {\n user-select: none;\n}\n\n.Widget .Weather {\n padding: 20px;\n}\n\n.Widget .Links {\n margin-top: 40px;\n}\n.Widget .Links a:hover {\n scale: 1.15;\n}"},"background":{"id":"default-unsplash","key":"background/unsplash","display":{"luminosity":-0.2,"blur":0}},"widget/default-time":null,"widget/default-greeting":null,"focus":false,"data/1SHRYajLSARQ":{"showDetails":false,"units":"us","latitude":34.4133,"longitude":-119.861,"name":"Isla Vista"},"version":3}
\ No newline at end of file
diff --git a/hm/modules/common/essentials/vencord-settings.json b/hm/modules/common/essentials/vencord-settings.json
new file mode 100644
index 0000000..b147d49
--- /dev/null
+++ b/hm/modules/common/essentials/vencord-settings.json
@@ -0,0 +1,617 @@
+{
+ "settings": {
+ "autoUpdate": true,
+ "autoUpdateNotification": true,
+ "useQuickCss": true,
+ "themeLinks": [
+ "https://raw.githubusercontent.com/catppuccin/discord/main/themes/macchiato.theme.css"
+ ],
+ "enabledThemes": [
+ "stylix.theme.css"
+ ],
+ "enableReactDevtools": false,
+ "frameless": false,
+ "transparent": false,
+ "winCtrlQ": false,
+ "disableMinSize": false,
+ "winNativeTitleBar": false,
+ "plugins": {
+ "ChatInputButtonAPI": {
+ "enabled": false
+ },
+ "CommandsAPI": {
+ "enabled": true
+ },
+ "MemberListDecoratorsAPI": {
+ "enabled": false
+ },
+ "MessageAccessoriesAPI": {
+ "enabled": true
+ },
+ "MessageDecorationsAPI": {
+ "enabled": false
+ },
+ "MessageEventsAPI": {
+ "enabled": true
+ },
+ "MessagePopoverAPI": {
+ "enabled": false
+ },
+ "MessageUpdaterAPI": {
+ "enabled": false
+ },
+ "ServerListAPI": {
+ "enabled": true
+ },
+ "UserSettingsAPI": {
+ "enabled": true
+ },
+ "AlwaysAnimate": {
+ "enabled": false
+ },
+ "AlwaysTrust": {
+ "enabled": true,
+ "domain": true,
+ "file": true
+ },
+ "AnonymiseFileNames": {
+ "enabled": true,
+ "anonymiseByDefault": true,
+ "method": 0,
+ "randomisedLength": 7
+ },
+ "AppleMusicRichPresence": {
+ "enabled": false
+ },
+ "WebRichPresence (arRPC)": {
+ "enabled": false
+ },
+ "AutomodContext": {
+ "enabled": false
+ },
+ "BANger": {
+ "enabled": false
+ },
+ "BetterFolders": {
+ "enabled": true,
+ "sidebar": true,
+ "showFolderIcon": 1,
+ "keepIcons": false,
+ "closeAllHomeButton": false,
+ "closeAllFolders": false,
+ "forceOpen": false,
+ "sidebarAnim": true
+ },
+ "BetterGifAltText": {
+ "enabled": false
+ },
+ "BetterGifPicker": {
+ "enabled": false
+ },
+ "BetterNotesBox": {
+ "enabled": false
+ },
+ "BetterRoleContext": {
+ "enabled": false
+ },
+ "BetterRoleDot": {
+ "enabled": true,
+ "bothStyles": false,
+ "copyRoleColorInProfilePopout": false
+ },
+ "BetterSessions": {
+ "enabled": true,
+ "backgroundCheck": false
+ },
+ "BetterSettings": {
+ "enabled": false,
+ "disableFade": true,
+ "eagerLoad": true
+ },
+ "BetterUploadButton": {
+ "enabled": false
+ },
+ "BiggerStreamPreview": {
+ "enabled": false
+ },
+ "BlurNSFW": {
+ "enabled": false
+ },
+ "CallTimer": {
+ "enabled": true
+ },
+ "ClearURLs": {
+ "enabled": true
+ },
+ "ClientTheme": {
+ "enabled": false
+ },
+ "ColorSighted": {
+ "enabled": false
+ },
+ "ConsoleJanitor": {
+ "enabled": false
+ },
+ "ConsoleShortcuts": {
+ "enabled": false
+ },
+ "CopyEmojiMarkdown": {
+ "enabled": false
+ },
+ "CopyUserURLs": {
+ "enabled": true
+ },
+ "CrashHandler": {
+ "enabled": true
+ },
+ "CtrlEnterSend": {
+ "enabled": false
+ },
+ "CustomRPC": {
+ "enabled": false
+ },
+ "CustomIdle": {
+ "enabled": false
+ },
+ "Dearrow": {
+ "enabled": false
+ },
+ "Decor": {
+ "enabled": false
+ },
+ "DisableCallIdle": {
+ "enabled": false
+ },
+ "DontRoundMyTimestamps": {
+ "enabled": false
+ },
+ "EmoteCloner": {
+ "enabled": false
+ },
+ "Experiments": {
+ "enabled": false
+ },
+ "F8Break": {
+ "enabled": false
+ },
+ "FakeNitro": {
+ "enabled": false
+ },
+ "FakeProfileThemes": {
+ "enabled": false
+ },
+ "FavoriteEmojiFirst": {
+ "enabled": false
+ },
+ "FavoriteGifSearch": {
+ "enabled": false
+ },
+ "FixCodeblockGap": {
+ "enabled": false
+ },
+ "FixSpotifyEmbeds": {
+ "enabled": false
+ },
+ "FixYoutubeEmbeds": {
+ "enabled": false
+ },
+ "ForceOwnerCrown": {
+ "enabled": false
+ },
+ "FriendInvites": {
+ "enabled": false
+ },
+ "FriendsSince": {
+ "enabled": false
+ },
+ "GameActivityToggle": {
+ "enabled": false
+ },
+ "GifPaste": {
+ "enabled": false
+ },
+ "GreetStickerPicker": {
+ "enabled": false
+ },
+ "HideAttachments": {
+ "enabled": false
+ },
+ "iLoveSpam": {
+ "enabled": false
+ },
+ "IgnoreActivities": {
+ "enabled": false
+ },
+ "ImageLink": {
+ "enabled": false
+ },
+ "ImageZoom": {
+ "enabled": false
+ },
+ "ImplicitRelationships": {
+ "enabled": false
+ },
+ "InvisibleChat": {
+ "enabled": false
+ },
+ "KeepCurrentChannel": {
+ "enabled": false
+ },
+ "LastFMRichPresence": {
+ "enabled": false
+ },
+ "LoadingQuotes": {
+ "enabled": false
+ },
+ "MaskedLinkPaste": {
+ "enabled": false
+ },
+ "MemberCount": {
+ "enabled": false
+ },
+ "MessageClickActions": {
+ "enabled": false
+ },
+ "MessageLatency": {
+ "enabled": false
+ },
+ "MessageLinkEmbeds": {
+ "enabled": false
+ },
+ "MessageLogger": {
+ "enabled": false
+ },
+ "MessageTags": {
+ "enabled": false
+ },
+ "MoreCommands": {
+ "enabled": false
+ },
+ "MoreKaomoji": {
+ "enabled": false
+ },
+ "MoreUserTags": {
+ "enabled": false
+ },
+ "Moyai": {
+ "enabled": false
+ },
+ "MutualGroupDMs": {
+ "enabled": false
+ },
+ "NewGuildSettings": {
+ "enabled": false
+ },
+ "NoBlockedMessages": {
+ "enabled": false
+ },
+ "NoDefaultHangStatus": {
+ "enabled": false
+ },
+ "NoDevtoolsWarning": {
+ "enabled": false
+ },
+ "NoF1": {
+ "enabled": false
+ },
+ "NoMosaic": {
+ "enabled": false
+ },
+ "NoOnboardingDelay": {
+ "enabled": false
+ },
+ "NoPendingCount": {
+ "enabled": false
+ },
+ "NoProfileThemes": {
+ "enabled": false
+ },
+ "NoReplyMention": {
+ "enabled": false
+ },
+ "NoScreensharePreview": {
+ "enabled": false
+ },
+ "NoServerEmojis": {
+ "enabled": false
+ },
+ "NoTypingAnimation": {
+ "enabled": false
+ },
+ "NoUnblockToJump": {
+ "enabled": false
+ },
+ "NormalizeMessageLinks": {
+ "enabled": false
+ },
+ "NotificationVolume": {
+ "enabled": false
+ },
+ "NSFWGateBypass": {
+ "enabled": false
+ },
+ "OnePingPerDM": {
+ "enabled": false
+ },
+ "oneko": {
+ "enabled": false
+ },
+ "OpenInApp": {
+ "enabled": false
+ },
+ "OverrideForumDefaults": {
+ "enabled": false
+ },
+ "PartyMode": {
+ "enabled": false
+ },
+ "PauseInvitesForever": {
+ "enabled": false
+ },
+ "PermissionFreeWill": {
+ "enabled": false
+ },
+ "PermissionsViewer": {
+ "enabled": false
+ },
+ "petpet": {
+ "enabled": false
+ },
+ "PictureInPicture": {
+ "enabled": false
+ },
+ "PinDMs": {
+ "enabled": false
+ },
+ "PlainFolderIcon": {
+ "enabled": false
+ },
+ "PlatformIndicators": {
+ "enabled": false
+ },
+ "PreviewMessage": {
+ "enabled": false
+ },
+ "QuickMention": {
+ "enabled": false
+ },
+ "QuickReply": {
+ "enabled": false
+ },
+ "ReactErrorDecoder": {
+ "enabled": false
+ },
+ "ReadAllNotificationsButton": {
+ "enabled": true
+ },
+ "RelationshipNotifier": {
+ "enabled": false
+ },
+ "ReplaceGoogleSearch": {
+ "enabled": false
+ },
+ "ReplyTimestamp": {
+ "enabled": false
+ },
+ "RevealAllSpoilers": {
+ "enabled": false
+ },
+ "ReverseImageSearch": {
+ "enabled": false
+ },
+ "ReviewDB": {
+ "enabled": false
+ },
+ "RoleColorEverywhere": {
+ "enabled": false
+ },
+ "SecretRingToneEnabler": {
+ "enabled": false
+ },
+ "Summaries": {
+ "enabled": false
+ },
+ "SendTimestamps": {
+ "enabled": false
+ },
+ "ServerInfo": {
+ "enabled": false
+ },
+ "ServerListIndicators": {
+ "enabled": false
+ },
+ "ShikiCodeblocks": {
+ "enabled": false
+ },
+ "ShowAllMessageButtons": {
+ "enabled": false
+ },
+ "ShowConnections": {
+ "enabled": false
+ },
+ "ShowHiddenChannels": {
+ "enabled": true,
+ "showMode": 0,
+ "hideUnreads": true
+ },
+ "ShowHiddenThings": {
+ "enabled": true,
+ "showTimeouts": true,
+ "showInvitesPaused": true,
+ "showModView": true,
+ "disableDiscoveryFilters": true,
+ "disableDisallowedDiscoveryFilters": true
+ },
+ "ShowMeYourName": {
+ "enabled": false
+ },
+ "ShowTimeoutDuration": {
+ "enabled": false
+ },
+ "SilentMessageToggle": {
+ "enabled": false
+ },
+ "SilentTyping": {
+ "enabled": false
+ },
+ "SortFriendRequests": {
+ "enabled": false
+ },
+ "SpotifyControls": {
+ "enabled": true,
+ "hoverControls": false
+ },
+ "SpotifyCrack": {
+ "enabled": false
+ },
+ "SpotifyShareCommands": {
+ "enabled": false
+ },
+ "StartupTimings": {
+ "enabled": false
+ },
+ "StreamerModeOnStream": {
+ "enabled": false
+ },
+ "SuperReactionTweaks": {
+ "enabled": false
+ },
+ "TextReplace": {
+ "enabled": false
+ },
+ "ThemeAttributes": {
+ "enabled": false
+ },
+ "TimeBarAllActivities": {
+ "enabled": false
+ },
+ "Translate": {
+ "enabled": false
+ },
+ "TypingIndicator": {
+ "enabled": false
+ },
+ "TypingTweaks": {
+ "enabled": false
+ },
+ "Unindent": {
+ "enabled": false
+ },
+ "UnlockedAvatarZoom": {
+ "enabled": false
+ },
+ "UnsuppressEmbeds": {
+ "enabled": false
+ },
+ "UserVoiceShow": {
+ "enabled": false
+ },
+ "USRBG": {
+ "enabled": false
+ },
+ "ValidReply": {
+ "enabled": false
+ },
+ "ValidUser": {
+ "enabled": false
+ },
+ "VoiceChatDoubleClick": {
+ "enabled": false
+ },
+ "VcNarrator": {
+ "enabled": false
+ },
+ "VencordToolbox": {
+ "enabled": false
+ },
+ "ViewIcons": {
+ "enabled": false
+ },
+ "ViewRaw": {
+ "enabled": false
+ },
+ "VoiceDownload": {
+ "enabled": false
+ },
+ "VoiceMessages": {
+ "enabled": false
+ },
+ "WebKeybinds": {
+ "enabled": true
+ },
+ "WebScreenShareFixes": {
+ "enabled": true
+ },
+ "WhoReacted": {
+ "enabled": false
+ },
+ "XSOverlay": {
+ "enabled": false
+ },
+ "NoTrack": {
+ "enabled": true,
+ "disableAnalytics": true
+ },
+ "WebContextMenus": {
+ "enabled": true,
+ "addBack": true
+ },
+ "Settings": {
+ "enabled": true,
+ "settingsLocation": "aboveNitro"
+ },
+ "SupportHelper": {
+ "enabled": true
+ },
+ "YoutubeAdblock": {
+ "enabled": true
+ },
+ "AlwaysExpandRoles": {
+ "enabled": false
+ },
+ "FullSearchContext": {
+ "enabled": false
+ },
+ "UserMessagesPronouns": {
+ "enabled": false
+ },
+ "DynamicImageModalAPI": {
+ "enabled": false
+ },
+ "AccountPanelServerProfile": {
+ "enabled": false
+ },
+ "CopyFileContents": {
+ "enabled": false
+ },
+ "FixImagesQuality": {
+ "enabled": false
+ },
+ "MentionAvatars": {
+ "enabled": false
+ },
+ "NoMaskedUrlPaste": {
+ "enabled": false
+ },
+ "StickerPaste": {
+ "enabled": false
+ },
+ "VolumeBooster": {
+ "enabled": false
+ }
+ },
+ "notifications": {
+ "timeout": 5000,
+ "position": "bottom-right",
+ "useNative": "not-focused",
+ "logLimit": 50
+ },
+ "cloud": {
+ "authenticated": false,
+ "url": "https://api.vencord.dev/",
+ "settingsSync": false,
+ "settingsSyncVersion": 1730351821316
+ }
+ },
+ "quickCss": ""
+}
\ No newline at end of file
diff --git a/hm/modules/common/shellenv/default.nix b/hm/modules/common/shellenv/default.nix
new file mode 100644
index 0000000..a6d1d43
--- /dev/null
+++ b/hm/modules/common/shellenv/default.nix
@@ -0,0 +1,212 @@
+{
+ config,
+ lib,
+ inputs,
+ pkgs,
+ osConfig,
+ ...
+}:
+let
+ cfg = config.liminalOS;
+in
+{
+ imports = [
+ inputs.nix-index-database.hmModules.nix-index
+ ./fastfetch
+ ];
+
+ options.liminalOS.shellEnv = {
+ enable = lib.mkOption {
+ type = lib.types.bool;
+ default = true;
+ description = ''
+ Whether to set up a CLI development environment.
+ '';
+ };
+ };
+
+ config = lib.mkIf cfg.shellEnv.enable {
+
+ programs.bash.enable = true;
+
+ programs.nushell = {
+ enable = true;
+ configFile.text = ''
+ $env.config = {
+ edit_mode: vi,
+ show_banner: false
+ }
+ '';
+ };
+
+ programs.fzf = {
+ enable = true;
+ };
+
+ programs.git = {
+ enable = true;
+ userName = lib.mkDefault "liminalOS user";
+ userEmail = lib.mkDefault "liminalOS@localhost";
+ delta.enable = true;
+ maintenance.enable = true;
+ extraConfig = {
+ init.defaultBranch = "main";
+ safe.directory = [
+ osConfig.liminalOS.flakeLocation
+ ];
+ };
+ };
+
+ home.packages = [ pkgs.git-absorb ];
+
+ programs.lazygit = {
+ enable = true;
+ settings = {
+ git.paging = {
+ colorArg = "always";
+ pager = "delta --dark --paging=never";
+ };
+ };
+ };
+
+ programs.bat.enable = true;
+
+ programs.ripgrep.enable = true;
+
+ programs.readline = {
+ enable = true;
+ extraConfig = "set editing-mode vi";
+ };
+
+ programs.zoxide = {
+ enable = true;
+ enableFishIntegration = true;
+ enableNushellIntegration = true;
+ enableBashIntegration = true;
+ };
+
+ programs.gh = {
+ enable = true;
+ };
+
+ programs.starship = {
+ enable = true;
+ enableFishIntegration = true;
+ enableBashIntegration = true;
+ enableNushellIntegration = true;
+ };
+
+ home.file.".config/starship.toml".text = builtins.readFile ./jetpack.toml;
+
+ programs.direnv = {
+ enable = true;
+ nix-direnv.enable = true;
+ config.global.hide_env_diff = true;
+ };
+
+ programs.fish = {
+ enable = true;
+ shellAliases = {
+ ls = "eza -l --icons=auto";
+ neofetch = "${pkgs.fastfetch}/bin/fastfetch";
+ };
+ interactiveShellInit = ''
+ fish_vi_key_bindings
+ set -g fish_greeting
+ '';
+ plugins = [
+ {
+ name = "autopair";
+ src = pkgs.fetchFromGitHub {
+ owner = "jorgebucaran";
+ repo = "autopair.fish";
+ rev = "4d1752ff5b39819ab58d7337c69220342e9de0e2";
+ hash = "sha256-qt3t1iKRRNuiLWiVoiAYOu+9E7jsyECyIqZJ/oRIT1A=";
+ };
+ }
+ {
+ name = "fzf";
+ src = pkgs.fetchFromGitHub {
+ owner = "PatrickF1";
+ repo = "fzf.fish";
+ rev = "8920367cf85eee5218cc25a11e209d46e2591e7a";
+ hash = "sha256-T8KYLA/r/gOKvAivKRoeqIwE2pINlxFQtZJHpOy9GMM=";
+ };
+ }
+ {
+ name = "sponge";
+ src = pkgs.fetchFromGitHub {
+ owner = "meaningful-ooo";
+ repo = "sponge";
+ rev = "384299545104d5256648cee9d8b117aaa9a6d7be";
+ hash = "sha256-MdcZUDRtNJdiyo2l9o5ma7nAX84xEJbGFhAVhK+Zm1w=";
+ };
+ }
+ {
+ name = "done";
+ src = pkgs.fetchFromGitHub {
+ owner = "franciscolourenco";
+ repo = "done";
+ rev = "eb32ade85c0f2c68cbfcff3036756bbf27a4f366";
+ hash = "sha256-DMIRKRAVOn7YEnuAtz4hIxrU93ULxNoQhW6juxCoh4o=";
+ };
+ }
+ ];
+ };
+
+ programs.nix-index = {
+ enable = true;
+ enableBashIntegration = true;
+ enableFishIntegration = true;
+ };
+
+ programs.nix-index-database.comma.enable = true;
+
+ programs.fd.enable = true;
+
+ programs.btop = {
+ enable = true;
+ settings = {
+ vim_keys = true;
+ theme_background = false;
+ };
+ };
+
+ programs.eza = {
+ enable = true;
+ enableFishIntegration = true;
+ enableBashIntegration = true;
+ git = true;
+ };
+
+ programs.yazi = {
+ enable = true;
+ enableBashIntegration = true;
+ enableFishIntegration = true;
+ plugins = {
+ mediainfo = pkgs.fetchFromGitHub {
+ owner = "Ape";
+ repo = "mediainfo.yazi";
+ rev = "c69314e80f5b45fe87a0e06a10d064ed54110439";
+ hash = "sha256-8xdBPdKSiwB7iRU8DJdTHY+BjfR9D3FtyVtDL9tNiy4=";
+ };
+ };
+ settings = {
+ plugin = {
+ prepend_previewers = [
+ {
+ mime = "{image,audio,video}/*";
+ run = "mediainfo";
+ }
+ {
+ mime = "application/x-subrip";
+ run = "mediainfo";
+ }
+ ];
+ };
+ };
+ };
+
+ programs.zathura.enable = true;
+ };
+}
diff --git a/hm/modules/common/shellenv/fastfetch/config.json b/hm/modules/common/shellenv/fastfetch/config.json
new file mode 100644
index 0000000..2021c56
--- /dev/null
+++ b/hm/modules/common/shellenv/fastfetch/config.json
@@ -0,0 +1,81 @@
+{
+ "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
+ "display": {
+ "separator": " "
+ },
+ "modules": [
+ "break",
+ "break",
+ "break",
+ "break",
+ "break",
+ {
+ "type": "title",
+ "keyWidth": 10
+ },
+ "break",
+ {
+ "type": "os",
+ "key": " ",
+ "keyColor": "34",
+ "format": "{3} on {12}"
+ },
+ {
+ "type": "kernel",
+ "key": " ",
+ "keyColor": "34"
+ },
+ {
+ "type": "packages",
+ "key": " ",
+ "keyColor": "34"
+ },
+ {
+ "type": "shell",
+ "key": " ",
+ "keyColor": "34"
+ },
+ {
+ "type": "terminal",
+ "key": " ",
+ "keyColor": "34"
+ },
+ {
+ "type": "wm",
+ "key": " ",
+ "keyColor": "34"
+ },
+ {
+ "type": "CPU",
+ "key": " ",
+ "keyColor": "34"
+ },
+ {
+ "type": "GPU",
+ "key": " ",
+ "keyColor": "34"
+ },
+ {
+ "type": "uptime",
+ "key": " ",
+ "keyColor": "34"
+ },
+ {
+ "type": "media",
+ "key": " ",
+ "keyColor": "34"
+ },
+ {
+ "type": "player",
+ "key": " ",
+ "keyColor": "34"
+ },
+ "break",
+ {
+ "type": "custom",
+ "format": "\u001b[90m \u001b[31m \u001b[32m \u001b[33m \u001b[34m \u001b[35m \u001b[36m \u001b[37m "
+ },
+ "break",
+ "break"
+ ]
+}
diff --git a/hm/modules/common/shellenv/fastfetch/default.nix b/hm/modules/common/shellenv/fastfetch/default.nix
new file mode 100644
index 0000000..a7fc792
--- /dev/null
+++ b/hm/modules/common/shellenv/fastfetch/default.nix
@@ -0,0 +1,39 @@
+{ config, lib, ... }:
+let
+ fastfetchConfig = builtins.fromJSON (builtins.readFile ./config.json);
+ cfg = config.liminalOS.shellEnv.fastfetch;
+in
+{
+ options.liminalOS.shellEnv.fastfetch = {
+ enable = lib.mkOption {
+ type = lib.types.bool;
+ default = config.liminalOS.shellEnv.enable;
+ description = ''
+ Whether to set up and configure fastfetch.
+ '';
+ };
+ useKittyImage = lib.mkOption {
+ type = lib.types.bool;
+ default = cfg.enable;
+ description = ''
+ Whether to use the kitty image protocol.
+ '';
+ };
+ };
+ config.programs.fastfetch = lib.mkIf cfg.enable {
+ enable = true;
+ settings = (
+ fastfetchConfig
+ // {
+ logo = {
+ height = 18;
+ padding = {
+ top = 2;
+ };
+ type = if cfg.useKittyImage then "kitty" else "auto";
+ source = lib.mkIf cfg.useKittyImage ./nixos-logo.png;
+ };
+ }
+ );
+ };
+}
diff --git a/hm/modules/common/shellenv/fastfetch/nixos-logo.png b/hm/modules/common/shellenv/fastfetch/nixos-logo.png
new file mode 100644
index 0000000..acbaad4
Binary files /dev/null and b/hm/modules/common/shellenv/fastfetch/nixos-logo.png differ
diff --git a/hm/modules/common/shellenv/jetpack.toml b/hm/modules/common/shellenv/jetpack.toml
new file mode 100644
index 0000000..2d209c7
--- /dev/null
+++ b/hm/modules/common/shellenv/jetpack.toml
@@ -0,0 +1,315 @@
+# version: 1.0.0
+
+add_newline = false
+continuation_prompt = "[▸▹ ](dimmed white)"
+
+format = """( $nix_shell$container$fill$git_metrics\n)$cmd_duration\
+$hostname\
+$localip\
+$shlvl\
+$shell\
+$env_var\
+$jobs\
+$sudo\
+$username\
+$character"""
+
+right_format = """
+$singularity\
+$kubernetes\
+$directory\
+$vcsh\
+$fossil_branch\
+$git_branch\
+$git_commit\
+$git_state\
+$git_status\
+$hg_branch\
+$pijul_channel\
+$docker_context\
+$package\
+$c\
+$cmake\
+$cobol\
+$daml\
+$dart\
+$deno\
+$dotnet\
+$elixir\
+$elm\
+$erlang\
+$fennel\
+$golang\
+$guix_shell\
+$haskell\
+$haxe\
+$helm\
+$java\
+$julia\
+$kotlin\
+$gradle\
+$lua\
+$nim\
+$nodejs\
+$ocaml\
+$opa\
+$perl\
+$php\
+$pulumi\
+$purescript\
+$python\
+$raku\
+$rlang\
+$red\
+$ruby\
+$rust\
+$scala\
+$solidity\
+$swift\
+$terraform\
+$vlang\
+$vagrant\
+$zig\
+$buf\
+$conda\
+$meson\
+$spack\
+$memory_usage\
+$aws\
+$gcloud\
+$openstack\
+$azure\
+$crystal\
+$custom\
+$status\
+$os\
+$battery\
+$time"""
+
+[fill]
+symbol = ' '
+
+[character]
+format = "$symbol "
+success_symbol = "[◎](bold italic bright-yellow)"
+error_symbol = "[○](italic purple)"
+vimcmd_symbol = "[■](italic dimmed green)"
+# not supported in zsh
+vimcmd_replace_one_symbol = "◌"
+vimcmd_replace_symbol = "□"
+vimcmd_visual_symbol = "▼"
+
+[env_var.VIMSHELL]
+format = "[$env_value]($style)"
+style = 'green italic'
+
+[sudo]
+format = "[$symbol]($style)"
+style = "bold italic bright-purple"
+symbol = "⋈┈"
+disabled = false
+
+[username]
+style_user = "bright-yellow bold italic"
+style_root = "purple bold italic"
+format = "[⭘ $user]($style) "
+disabled = false
+show_always = false
+
+[directory]
+home_symbol = "⌂"
+truncation_length = 2
+truncation_symbol = "□ "
+read_only = " ◈"
+use_os_path_sep = true
+style = "italic blue"
+format = '[$path]($style)[$read_only]($read_only_style)'
+repo_root_style = 'bold blue'
+repo_root_format = '[$before_root_path]($before_repo_root_style)[$repo_root]($repo_root_style)[$path]($style)[$read_only]($read_only_style) [△](bold bright-blue)'
+
+[cmd_duration]
+format = "[◄ $duration ](italic white)"
+
+[jobs]
+format = "[$symbol$number]($style) "
+style = "white"
+symbol = "[▶](blue italic)"
+
+[localip]
+ssh_only = true
+format = " ◯[$localipv4](bold magenta)"
+disabled = false
+
+[time]
+disabled = false
+format = "[ $time]($style)"
+time_format = "%R"
+utc_time_offset = "local"
+style = "italic dimmed white"
+
+[battery]
+format = "[ $percentage $symbol]($style)"
+full_symbol = "█"
+charging_symbol = "[↑](italic bold green)"
+discharging_symbol = "↓"
+unknown_symbol = "░"
+empty_symbol = "▃"
+
+[[battery.display]]
+threshold = 20
+style = "italic bold red"
+
+[[battery.display]]
+threshold = 60
+style = "italic dimmed bright-purple"
+
+[[battery.display]]
+threshold = 70
+style = "italic dimmed yellow"
+
+[git_branch]
+format = " [$branch(:$remote_branch)]($style)"
+symbol = "[△](bold italic bright-blue)"
+style = "italic bright-blue"
+truncation_symbol = "⋯"
+truncation_length = 11
+ignore_branches = ["main", "master"]
+only_attached = true
+
+[git_metrics]
+format = '([▴$added]($added_style))([▿$deleted]($deleted_style))'
+added_style = 'italic dimmed green'
+deleted_style = 'italic dimmed red'
+ignore_submodules = true
+disabled = false
+
+[git_status]
+style = "bold italic bright-blue"
+format = "([⎪$ahead_behind$staged$modified$untracked$renamed$deleted$conflicted$stashed⎥]($style))"
+conflicted = "[◪◦](italic bright-magenta)"
+ahead = "[▴│[${count}](bold white)│](italic green)"
+behind = "[▿│[${count}](bold white)│](italic red)"
+diverged = "[◇ ▴┤[${ahead_count}](regular white)│▿┤[${behind_count}](regular white)│](italic bright-magenta)"
+untracked = "[◌◦](italic bright-yellow)"
+stashed = "[◃◈](italic white)"
+modified = "[●◦](italic yellow)"
+staged = "[▪┤[$count](bold white)│](italic bright-cyan)"
+renamed = "[◎◦](italic bright-blue)"
+deleted = "[✕](italic red)"
+
+[deno]
+format = " [deno](italic) [∫ $version](green bold)"
+version_format = "${raw}"
+
+[lua]
+format = " [lua](italic) [${symbol}${version}]($style)"
+version_format = "${raw}"
+symbol = "⨀ "
+style = "bold bright-yellow"
+
+[nodejs]
+format = " [node](italic) [◫ ($version)](bold bright-green)"
+version_format = "${raw}"
+detect_files = ["package-lock.json", "yarn.lock"]
+detect_folders = ["node_modules"]
+detect_extensions = []
+
+[python]
+format = " [py](italic) [${symbol}${version}]($style)"
+symbol = "[⌉](bold bright-blue)⌊ "
+version_format = "${raw}"
+style = "bold bright-yellow"
+
+[ruby]
+format = " [rb](italic) [${symbol}${version}]($style)"
+symbol = "◆ "
+version_format = "${raw}"
+style = "bold red"
+
+[rust]
+format = " [rs](italic) [$symbol$version]($style)"
+symbol = "⊃ "
+version_format = "${raw}"
+style = "bold red"
+
+[package]
+format = " [pkg](italic dimmed) [$symbol$version]($style)"
+version_format = "${raw}"
+symbol = "◨ "
+style = "dimmed yellow italic bold"
+
+[swift]
+format = " [sw](italic) [${symbol}${version}]($style)"
+symbol = "◁ "
+style = "bold bright-red"
+version_format = "${raw}"
+
+[aws]
+disabled = true
+format = " [aws](italic) [$symbol $profile $region]($style)"
+style = "bold blue"
+symbol = "▲ "
+
+[buf]
+symbol = "■ "
+format = " [buf](italic) [$symbol $version $buf_version]($style)"
+
+[c]
+symbol = "ℂ "
+format = " [$symbol($version(-$name))]($style)"
+
+[conda]
+symbol = "◯ "
+format = " conda [$symbol$environment]($style)"
+
+[dart]
+symbol = "◁◅ "
+format = " dart [$symbol($version )]($style)"
+
+[docker_context]
+symbol = "◧ "
+format = " docker [$symbol$context]($style)"
+
+[elixir]
+symbol = "△ "
+format = " exs [$symbol $version OTP $otp_version ]($style)"
+
+[elm]
+symbol = "◩ "
+format = " elm [$symbol($version )]($style)"
+
+[golang]
+symbol = "∩ "
+format = " go [$symbol($version )]($style)"
+
+[haskell]
+symbol = "❯λ "
+format = " hs [$symbol($version )]($style)"
+
+[java]
+symbol = "∪ "
+format = " java [${symbol}(${version} )]($style)"
+
+[julia]
+symbol = "◎ "
+format = " jl [$symbol($version )]($style)"
+
+[memory_usage]
+symbol = "▪▫▪ "
+format = " mem [${ram}( ${swap})]($style)"
+
+[nim]
+symbol = "▴▲▴ "
+format = " nim [$symbol($version )]($style)"
+
+[nix_shell]
+style = 'bold italic dimmed blue'
+symbol = ''
+format = '[$symbol nix⎪$state⎪]($style) [$name](italic dimmed white)'
+impure_msg = '[⌽](bold dimmed red)'
+pure_msg = '[⌾](bold dimmed green)'
+unknown_msg = '[◌](bold dimmed ellow)'
+
+[spack]
+symbol = "◇ "
+format = " spack [$symbol$environment]($style)"
diff --git a/hm/modules/darwin/darwin-home.nix b/hm/modules/darwin/darwin-home.nix
new file mode 100755
index 0000000..c2ea10e
--- /dev/null
+++ b/hm/modules/darwin/darwin-home.nix
@@ -0,0 +1,81 @@
+{
+ inputs,
+ config,
+ pkgs,
+ ...
+}:
+{
+ home.username = "youwen";
+ home.homeDirectory = "/Users/youwen";
+
+ # link the configuration file in current directory to the specified location in home directory
+ # home.file.".config/i3/wallpaper.jpg".source = ./wallpaper.jpg;
+
+ # link all files in `./scripts` to `~/.config/i3/scripts`
+ # home.file.".config/i3/scripts" = {
+ # source = ./scripts;
+ # recursive = true; # link recursively
+ # executable = true; # make all files executable
+ # };
+
+ # encode the file content in nix configuration file directly
+ # home.file.".xxx".text = ''
+ # xxx
+ # '';
+
+ # Packages that should be installed to the user profile.
+ home.packages = with pkgs; [
+ neofetch
+
+ # archives
+ zip
+ xz
+ unzip
+ p7zip
+
+ # utils
+ nurl # helps fetch git data for nixpkgs
+
+ # nix related
+ #
+ # it provides the command `nom` works just like `nix`
+ # with more details log output
+ nix-output-monitor
+ ];
+
+ programs.git.extraConfig.commit.gpgsign = "false";
+
+ programs.oh-my-posh.enableZshIntegration = true;
+
+ programs.bash.enable = true;
+ programs.zsh.enable = true;
+
+ programs.kitty = {
+ enable = true;
+ theme = "Tokyo Night";
+ font.name = "CaskaydiaCove Nerd Font";
+ settings = {
+ font_size = 13;
+ window_padding_width = "8 8 0";
+ confirm_os_window_close = -1;
+ shell_integration = "enabled";
+ enable_audio_bell = "no";
+ background_opacity = "0.8";
+ hide_window_decorations = "titlebar-only";
+ background_blur = 32;
+ };
+ };
+
+ # This value determines the home Manager release that your
+ # configuration is compatible with. This helps avoid breakage
+ # when a new home Manager release introduces backwards
+ # incompatible changes.
+ home.stateVersion = "24.05";
+ #
+ # You can update home Manager without changing this value. See
+ # the home Manager release notes for a list of state version
+ # changes in each release.
+
+ # Let home Manager install and manage itself.
+ programs.home-manager.enable = true;
+}
diff --git a/hm/modules/default.nix b/hm/modules/default.nix
new file mode 100644
index 0000000..48ebc2c
--- /dev/null
+++ b/hm/modules/default.nix
@@ -0,0 +1,6 @@
+{
+ imports = [
+ ./common
+ ./linux
+ ];
+}
diff --git a/hm/modules/linux/default.nix b/hm/modules/linux/default.nix
new file mode 100755
index 0000000..5a67997
--- /dev/null
+++ b/hm/modules/linux/default.nix
@@ -0,0 +1,45 @@
+{
+ pkgs,
+ lib,
+ config,
+ ...
+}:
+{
+ imports = [
+ ./var/easyeffects
+ ./programs
+ ./spicetify
+ ./desktop-environment
+ ./theming
+ ./platform-tweaks
+ ];
+
+ programs.fish.functions = lib.mkIf config.liminalOS.programs.enable {
+ # rebuild = ''doas nixos-rebuild --flake ~/.config/liminalOS\#${osConfig.networking.hostName} switch &| nom'';
+ # os-test = ''doas nixos-rebuild --flake ~/.config/liminalOS\#${osConfig.networking.hostName} test &| nom'';
+ # nixos-update = ''
+ # cd ~/.config/liminalOS
+ # nix flake update --commit-lock-file
+ # doas nixos-rebuild --flake ~/.config/liminalOS\#${osConfig.networking.hostName} switch &| nom
+ # '';
+ nh = {
+ # wrapper for nh as it doesn't work with `doas`
+ body = ''
+ if count $argv > /dev/null
+ if contains -- os $argv or contains -- clean $argv
+ doas ${pkgs.nh}/bin/nh $argv -R
+ else
+ ${pkgs.nh}/bin/nh $argv
+ end
+ else
+ ${pkgs.nh}/bin/nh
+ end
+ '';
+ };
+ spt = "${pkgs.spotify-player}/bin/spotify_player";
+ };
+
+ home.file = lib.mkIf config.liminalOS.programs.enable {
+ ".config/vesktop/settings.json".source = config.lib.file.mkOutOfStoreSymlink ./var/settings.json;
+ };
+}
diff --git a/hm/modules/linux/desktop-environment/default.nix b/hm/modules/linux/desktop-environment/default.nix
new file mode 100644
index 0000000..e4f9b7a
--- /dev/null
+++ b/hm/modules/linux/desktop-environment/default.nix
@@ -0,0 +1,23 @@
+{
+ osConfig,
+ config,
+ lib,
+ ...
+}:
+{
+ imports = [
+ ./hyprland
+ ./waybar
+ ./swaync.nix
+ ];
+
+ options.liminalOS.desktop = {
+ enable = lib.mkOption {
+ type = lib.types.bool;
+ default = osConfig.liminalOS.desktop.enable;
+ description = ''
+ Whether to enable the default configuration for the userland portions of the liminalOS desktop environment.
+ '';
+ };
+ };
+}
diff --git a/hm/modules/linux/desktop-environment/hyprland/default.nix b/hm/modules/linux/desktop-environment/hyprland/default.nix
new file mode 100644
index 0000000..207d31b
--- /dev/null
+++ b/hm/modules/linux/desktop-environment/hyprland/default.nix
@@ -0,0 +1,394 @@
+{
+ pkgs,
+ config,
+ lib,
+ osConfig,
+ ...
+}:
+let
+ cfg = config.liminalOS.desktop.hyprland;
+in
+{
+ options.liminalOS.desktop.hyprland = {
+ enable = lib.mkOption {
+ type = lib.types.bool;
+ default = config.liminalOS.desktop.enable;
+ description = ''
+ Whether to enable and rice Hyprland as well as some basic desktop utilities.
+ '';
+ };
+ applyGtkFix = lib.mkOption {
+ type = lib.types.bool;
+ default = cfg.enable;
+ description = ''
+ Whether to set GSK_RENDERER environment variable to stop GTK apps from crashing.
+ '';
+ };
+ idleDaemon.enable = lib.mkOption {
+ type = lib.types.bool;
+ default = cfg.enable;
+ description = ''
+ Whether to setup and enable Hypridle with some defaults to automatically lock the screen and suspend after idling.
+ '';
+ };
+ screenlocker.enable = lib.mkOption {
+ type = lib.types.bool;
+ default = cfg.enable;
+ description = ''
+ Whether to set up Hyprlock for screen locking.
+ '';
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ home.packages =
+ with pkgs;
+ [
+ wl-clipboard
+ libsForQt5.qtstyleplugin-kvantum
+ libsForQt5.qt5ct
+ papirus-icon-theme
+ libsForQt5.qt5ct
+ ]
+ ++ (lib.optionals (!osConfig.liminalOS.theming.enable) [
+ pkgs.bibata-cursors
+ ]);
+
+ wayland.windowManager.hyprland = {
+ enable = true;
+ settings = {
+ "$mod" = "SUPER";
+ "$Left" = "H";
+ "$Right" = "L";
+ "$Up" = "K";
+ "$Down" = "J";
+ env =
+ (lib.optionals cfg.applyGtkFix [
+ "GSK_RENDERER,gl"
+ ])
+ ++ (lib.optionals (config.liminalOS.formFactor == "laptop" && !osConfig.liminalOS.theming.enable) [
+ "HYPRCURSOR_THEME,Bibata-Modern-Ice"
+ "HYPRCURSOR_SIZE,24"
+ "XCURSOR_THEME,Bibata-Modern-Ice"
+ "XCURSOR_SIZE,24"
+ ])
+ ++ (lib.optionals (config.liminalOS.formFactor == "desktop" && !osConfig.liminalOS.theming.enable) [
+ "HYPRCURSOR_THEME,Bibata-Modern-Ice"
+ "HYPRCURSOR_SIZE,26"
+ "XCURSOR_THEME,Bibata-Modern-Ice"
+ "XCURSOR_SIZE,26"
+ ]);
+ bind =
+ [
+ # Window actions
+ "$mod, Q, killactive"
+ "$mod, W, togglefloating"
+ "$mod, V, togglesplit"
+ "$mod, Return, fullscreen"
+
+ # Move around
+ "$mod, $Left, movefocus, l"
+ "$mod, $Right, movefocus, r"
+ "$mod, $Up, movefocus, u"
+ "$mod, $Down, movefocus, d"
+
+ "$mod, D, workspace, previous"
+
+ "$mod, 1, workspace, 1"
+ "$mod+Ctrl, H, workspace, 1"
+ "$mod, 2, workspace, 2"
+ "$mod+Ctrl, J, workspace, 2"
+ "$mod, 3, workspace, 3"
+ "$mod+Ctrl, K, workspace, 3"
+ "$mod, 4, workspace, 4"
+ "$mod+Ctrl, L, workspace, 4"
+ "$mod, 5, workspace, 5"
+ "$mod+Ctrl, semicolon, workspace, 5"
+ "$mod, 6, workspace, 6"
+ "$mod+Ctrl, apostrophe, workspace, 6"
+ "$mod, 7, workspace, 7"
+ "$mod+Ctrl, U, workspace, 7"
+ "$mod, 8, workspace, 8"
+ "$mod+Ctrl, I, workspace, 8"
+ "$mod, 9, workspace, 9"
+ "$mod+Ctrl, O, workspace, 9"
+ "$mod, 0, workspace, 10"
+ "$mod+Ctrl, P, workspace, 10"
+
+ # Move active window to a workspace with mainMod + SHIFT + [0-9]
+ "$mod+Shift, 1, movetoworkspace, 1"
+ "$mod+Ctrl+Shift, H, movetoworkspace, 1"
+ "$mod+Shift, 2, movetoworkspace, 2"
+ "$mod+Ctrl+Shift, J, movetoworkspace, 2"
+ "$mod+Shift, 3, movetoworkspace, 3"
+ "$mod+Ctrl+Shift, K, movetoworkspace, 3"
+ "$mod+Shift, 4, movetoworkspace, 4"
+ "$mod+Ctrl+Shift, L, movetoworkspace, 4"
+ "$mod+Shift, 5, movetoworkspace, 5"
+ "$mod+Ctrl+Shift, semicolon, movetoworkspace, 5"
+ "$mod+Shift, 6, movetoworkspace, 6"
+ "$mod+Ctrl+Shift, apostrophe, movetoworkspace, 6"
+ "$mod+Shift, 7, movetoworkspace, 7"
+ "$mod+Ctrl+Shift, U, movetoworkspace, 7"
+ "$mod+Shift, 8, movetoworkspace, 8"
+ "$mod+Ctrl+Shift, I, movetoworkspace, 8"
+ "$mod+Shift, 9, movetoworkspace, 9"
+ "$mod+Ctrl+Shift, O, movetoworkspace, 9"
+ "$mod+Shift, 0, movetoworkspace, 10"
+ "$mod+Ctrl+Shift, P, movetoworkspace, 10"
+
+ # Special workspace
+ "$mod, S, togglespecialworkspace"
+ "$mod+Alt, S, movetoworkspacesilent, special"
+
+ # Move windows around
+ "$mod+Shift, $Left, movewindow, l"
+ "$mod+Shift, $Right, movewindow, r"
+ "$mod+Shift, $Up, movewindow, u"
+ "$mod+Shift, $Down, movewindow, d"
+
+ "$mod+Ctrl, bracketright, movetoworkspace, r+1"
+ "$mod+Ctrl, bracketleft, movetoworkspace, r-1"
+
+ "$mod, bracketright, workspace, r+1"
+ "$mod, bracketleft, workspace, r-1"
+
+ # Utilities
+ "$mod, Space, exec, pkill -x rofi || rofi -show drun" # Run rofi application launcher
+ "$mod, G, exec, pkill -x rofi || rofi -show window" # Run rofi window switcher
+
+ ''$mod, P, exec, ${pkgs.grim}/bin/grim -g "$(${pkgs.slurp}/bin/slurp)" - | ${pkgs.swappy}/bin/swappy -f -'' # Screenshot
+ ''$mod+Shift, P, exec, ${pkgs.grim}/bin/grim - | ${pkgs.swappy}/bin/swappy -f -'' # Screenshot
+
+ "$mod, Backspace, exec, pkill -x wlogout || wlogout" # show logout menu
+
+ "$mod, Z, exec, loginctl lock-session"
+
+ # Media controls
+ ",XF86AudioMute, exec, ${pkgs.pamixer}/bin/pamixer -t"
+ ",XF86AudioPlay, exec, ${pkgs.playerctl}/bin/playerctl --player=%any,firefox play-pause"
+ ",XF86AudioNext, exec, ${pkgs.playerctl}/bin/playerctl --player=%any,firefox next"
+ ",XF86AudioRewind, exec, ${pkgs.playerctl}/bin/playerctl --player=%any,firefox previous"
+ ]
+ ++ (lib.optionals config.liminalOS.programs.zen.enable [
+ "$mod, F, exec, zen"
+ ])
+ ++ (lib.optionals config.liminalOS.desktop.swaync.enable [
+ "$mod, N, exec, sleep 0.1 && ${pkgs.swaynotificationcenter}/bin/swaync-client -t -sw"
+ ])
+ ++ (lib.optionals config.liminalOS.programs.enable [
+ # Application Keybinds
+ "$mod, R, exec, ${pkgs.pavucontrol}/bin/pavucontrol -t 3" # open pavucontrol on 'outputs' tab
+ "$mod, T, exec, ${pkgs.kitty}/bin/kitty"
+ "$mod, E, exec, ${pkgs.xfce.thunar}/bin/thunar"
+ "$mod, M, exec, ${pkgs.thunderbird}/bin/thunderbird"
+ ]);
+ bindm = [
+ "$mod, mouse:272, movewindow"
+ "$mod, mouse:273, resizewindow"
+ ];
+ bindel = [
+ ",XF86MonBrightnessDown, exec, ${pkgs.brightnessctl}/bin/brightnessctl set 5%-"
+ ",XF86MonBrightnessUp, exec, ${pkgs.brightnessctl}/bin/brightnessctl set 5%+"
+ ",XF86AudioRaiseVolume, exec, ${pkgs.pamixer}/bin/pamixer -i 5"
+ ",XF86AudioLowerVolume, exec, ${pkgs.pamixer}/bin/pamixer -d 5"
+ ];
+ binde = [
+ # Resize windows
+ "$mod+Alt, $Right, resizeactive, 30 0"
+ "$mod+Alt, $Left, resizeactive, -30 0"
+ "$mod+Alt, $Up, resizeactive, 0 -30"
+ "$mod+Alt, $Down, resizeactive, 0 30"
+ ];
+ windowrulev2 = import ./windowrulev2.nix;
+ layerrule = [
+ "blur,rofi"
+ "ignorezero,rofi"
+ "animation slide bottom 0.2 0.2 wind,rofi"
+ "blur,notifications"
+ "ignorezero,notifications"
+ "blur,swaync-notification-window"
+ "animation slide right 0.5 0.5,swaync-control-center"
+ "animation slide right 0.5 0.5,notifications"
+ "animation slide right 0.5 0.5,swaync-notification-window"
+ "ignorezero,swaync-notification-window"
+ "blur,swaync-control-center"
+ "ignorezero,swaync-control-center"
+ "blur,logout_dialog"
+ ];
+ dwindle = {
+ pseudotile = "yes";
+ preserve_split = "yes";
+ };
+ animations = {
+ enabled = "yes";
+ bezier = [
+ "wind, 0.05, 0.9, 0.1, 1.05"
+ "winIn, 0.1, 1.1, 0.1, 1.1"
+ "winOut, 0.3, -0.3, 0, 1"
+ "liner, 1, 1, 1, 1"
+ ];
+ animation = [
+ "windows, 1, 6, wind, slide"
+ "windowsIn, 1, 6, winIn, slide"
+ "windowsOut, 1, 5, winOut, slide"
+ "windowsMove, 1, 5, wind, slide"
+ # "border, 1, 1, liner"
+ # "borderangle, 1, 30, liner, loop"
+ "fade, 1, 10, default"
+ "workspaces, 1, 5, wind"
+ # "layers, 1, 8, default, slide"
+ ];
+ };
+
+ general = {
+ gaps_in = "3";
+ gaps_out = "8";
+ border_size = "2";
+ # the dot is a hyprland name, not nix syntax, so we escape it
+ "col.active_border" = pkgs.lib.mkForce "rgba(ca9ee6ff) rgba(f2d5cfff) 45deg";
+ "col.inactive_border" = pkgs.lib.mkForce "rgba(b4befecc) rgba(6c7086cc) 45deg";
+ layout = "dwindle";
+ resize_on_border = "true";
+ };
+
+ misc = {
+ disable_hyprland_logo = true;
+ disable_splash_rendering = true;
+ };
+
+ cursor = {
+ hide_on_key_press = true;
+ };
+
+ decoration = {
+ rounding = "10";
+ dim_special = "0.3";
+ blur = {
+ enabled = "yes";
+ size = "6";
+ passes = "3";
+ new_optimizations = "on";
+ ignore_opacity = "on";
+ xray = "false";
+ special = true;
+ };
+ shadow = {
+ enabled = false;
+ };
+ };
+ input = {
+ sensitivity = if config.liminalOS.formFactor == "laptop" then "0.0" else "-0.65";
+ };
+ };
+ };
+
+ wayland.windowManager.hyprland.settings.input.touchpad =
+ lib.mkIf (config.liminalOS.formFactor == "laptop")
+ {
+ natural_scroll = true;
+ disable_while_typing = true;
+ clickfinger_behavior = true;
+ tap-to-click = false;
+ scroll_factor = 0.15;
+ };
+
+ services.hyprpaper.enable = true;
+
+ programs.wlogout.enable = true;
+
+ programs.rofi = {
+ enable = true;
+ package = pkgs.rofi-wayland;
+ # theme = "gruvbox-dark";
+ terminal = "${pkgs.kitty}/bin/kitty";
+ extraConfig = {
+ modi = "window,drun,ssh,combi,filebrowser,recursivebrowser";
+ display-drun = " ";
+ combi-modi = "window,drun,ssh";
+ run-shell-command = "{terminal} -e {cmd}";
+ sidebar-mode = true;
+ background-color = "transparent";
+ sorting = "fuzzy";
+ };
+ };
+
+ programs.hyprlock = lib.mkIf cfg.screenlocker.enable {
+ enable = true;
+ settings = {
+ general = {
+ hide_cursor = true;
+ grace = 1;
+ };
+ background = {
+ monitor = "";
+ path = "/tmp/__hyprlock-monitor-screenshot.png";
+ blur_passes = 3;
+ blur_size = 7;
+ noise = 0.0117;
+ contrast = 0.8916;
+ brightness = 0.8172;
+ vibrancy = 0.1696;
+ vibrancy_darkness = 0.0;
+ };
+ input-field = {
+ monitor = "";
+ size = "200, 50";
+ outline_thickness = 3;
+ dots_size = 0.33;
+ dots_spacing = 0.15;
+ dots_center = false;
+ dots_rounding = -1;
+ outer_color = "rgb(151515)";
+ inner_color = "rgb(200, 200, 200)";
+ font_color = "rgb(10, 10, 10)";
+ fade_on_empty = true;
+ fade_timeout = 1000;
+ placeholder_text = "Input Password...";
+ hide_input = false;
+ rounding = -1;
+ check_color = "rgb(204, 136, 34)";
+ fail_color = "rgb(204, 34, 34)";
+ fail_text = "$FAIL ($ATTEMPTS)";
+ fail_timeout = 2000;
+ fail_transition = 300;
+ capslock_color = -1;
+ numlock_color = -1;
+ bothlock_color = -1;
+ invert_numlock = false;
+ swap_font_color = false;
+
+ position = "0, -20";
+ halign = "center";
+ valign = "center";
+ };
+ };
+ };
+
+ services.hypridle = lib.mkIf cfg.idleDaemon.enable {
+ enable = true;
+ settings = {
+ general = {
+ lock_cmd = "pidof hyprlock || ${pkgs.grim}/bin/grim -o ${config.programs.hyprlock.settings.background.monitor} /tmp/__hyprlock-monitor-screenshot.png && ${pkgs.hyprlock}/bin/hyprlock"; # avoid starting multiple hyprlock instances.
+ before_sleep_cmd = "loginctl lock-session"; # lock before suspend.
+ after_sleep_cmd = "hyprctl dispatch dpms on"; # to avoid having to press a key twice to turn on the display.
+ };
+ listener = [
+ {
+ timeout = 1500;
+ on-timeout = "loginctl lock-session";
+ }
+ {
+ timeout = 330; # 5.5min
+ on-timeout = "hyprctl dispatch dpms off"; # screen off when timeout has passed
+ on-resume = "hyprctl dispatch dpms on"; # screen on when activity is detected after timeout has fired.
+ }
+ {
+ timeout = 1800;
+ on-timeout = "systemctl suspend";
+ }
+ ];
+ };
+ };
+ };
+}
diff --git a/hm/modules/linux/desktop-environment/hyprland/windowrulev2.nix b/hm/modules/linux/desktop-environment/hyprland/windowrulev2.nix
new file mode 100644
index 0000000..d366ae7
--- /dev/null
+++ b/hm/modules/linux/desktop-environment/hyprland/windowrulev2.nix
@@ -0,0 +1,86 @@
+[
+ "opacity 0.90 0.90,class:^(librewolf)$"
+ "opacity 0.90 0.90,class:^(floorp)$"
+ "opacity 0.90 0.90,class:^(zen-alpha)$"
+ "opacity 0.90 0.90,class:^(zen-beta)$"
+ "opacity 0.90 0.90,class:^(Brave-browser)$"
+ "opacity 0.80 0.80,class:^(Steam)$"
+ "opacity 0.80 0.80,class:^(steam)$"
+ "opacity 0.80 0.80,class:^(steamwebhelper)$"
+ "opacity 0.80 0.80,class:^(Spotify)$"
+ "opacity 0.80 0.80,initialTitle:^(Spotify Premium)$"
+ "opacity 0.80 0.80,initialTitle:^(Spotify Free)$"
+ "opacity 0.80 0.80,class:^(code-oss)$"
+ "opacity 0.80 0.80,class:^(Code)$"
+ "opacity 0.80 0.80,class:^(code-url-handler)$"
+ "opacity 0.80 0.80,class:^(code-insiders-url-handler)$"
+ "opacity 0.80 0.80,class:^(kitty)$"
+ "opacity 0.80 0.80,class:^(neovide)$"
+ "opacity 0.80 0.80,class:^(org.kde.dolphin)$"
+ "opacity 0.80 0.80,class:^(thunar)$"
+ "opacity 0.80 0.80,class:^(org.kde.ark)$"
+ "opacity 0.80 0.80,class:^(nwg-look)$"
+ "opacity 0.80 0.80,class:^(qt5ct)$"
+ "opacity 0.80 0.80,class:^(qt6ct)$"
+ "opacity 0.80 0.80,class:^(kvantummanager)$"
+ "opacity 0.80 0.80,class:^(waypaper)$"
+ "opacity 0.80 0.80,class:^(org.pulseaudio.pavucontrol)$"
+ "opacity 0.80 0.80,class:^(com.github.wwmm.easyeffects)$"
+ "opacity 0.80 0.80,class:^(thunderbird)$"
+
+ "opacity 0.90 0.90,class:^(com.github.rafostar.Clapper)$ # Clapper-Gtk"
+ "opacity 0.80 0.80,class:^(com.github.tchx84.Flatseal)$ # Flatseal-Gtk"
+ "opacity 0.80 0.80,class:^(hu.kramo.Cartridges)$ # Cartridges-Gtk"
+ "opacity 0.80 0.80,class:^(com.obsproject.Studio)$ # Obs-Qt"
+ "opacity 0.80 0.80,class:^(gnome-boxes)$ # Boxes-Gtk"
+ "opacity 0.80 0.80,class:^(discord)$ # Discord-Electron"
+ "opacity 0.80 0.80,class:^(vesktop)$ # Vesktop-Electron"
+ "opacity 0.80 0.80,class:^(ArmCord)$ # ArmCord-Electron"
+ "opacity 0.80 0.80,class:^(app.drey.Warp)$ # Warp-Gtk"
+ "opacity 0.80 0.80,class:^(net.davidotek.pupgui2)$ # ProtonUp-Qt"
+ "opacity 0.80 0.80,class:^(yad)$ # Protontricks-Gtk"
+ "opacity 0.80 0.80,class:^(signal)$ # Signal-Gtk"
+ "opacity 0.80 0.80,class:^(io.github.alainm23.planify)$ # planify-Gtk"
+ "opacity 0.80 0.80,class:^(io.gitlab.theevilskeleton.Upscaler)$ # Upscaler-Gtk"
+ "opacity 0.80 0.80,class:^(com.github.unrud.VideoDownloader)$ # VideoDownloader-Gtk"
+ "opacity 0.80 0.80,class:^(lutris)$ # Lutris game launcher"
+
+ "opacity 0.80 0.70,class:^(pavucontrol)$"
+ "opacity 0.80 0.70,class:^(blueman-manager)$"
+ "opacity 0.80 0.70,class:^(nm-applet)$"
+ "opacity 0.80 0.70,class:^(nm-connection-editor)$"
+ "opacity 0.80 0.70,class:^(org.kde.polkit-kde-authentication-agent-1)$"
+
+ "float,class:^(org.kde.dolphin)$,title:^(Progress Dialog — Dolphin)$"
+ "float,class:^(org.kde.dolphin)$,title:^(Copying — Dolphin)$"
+ "float,title:^(Picture-in-Picture)$"
+ "float,class:^(librewolf)$,title:^(Library)$"
+ "float,class:^(floorp)$,title:^(Library)$"
+ "float,class:^(zen-alpha)$,title:^(Library)$"
+ "float,title:^(Extension: (Bitwarden Password Manager))$"
+ "float,class:^(vlc)$"
+ "float,class:^(kvantummanager)$"
+ "float,class:^(qt5ct)$"
+ "float,class:^(qt6ct)$"
+ "float,class:^(nwg-look)$"
+ "float,class:^(org.kde.ark)$"
+ "float,class:^(org.pulseaudio.pavucontrol)$"
+ "float,class:^(com.github.rafostar.Clapper)$ # Clapper-Gtk"
+ "float,class:^(app.drey.Warp)$ # Warp-Gtk"
+ "float,class:^(net.davidotek.pupgui2)$ # ProtonUp-Qt"
+ "float,class:^(yad)$ # Protontricks-Gtk"
+ "float,class:^(eog)$ # Imageviewer-Gtk"
+ "float,class:^(io.github.alainm23.planify)$ # planify-Gtk"
+ "float,class:^(io.gitlab.theevilskeleton.Upscaler)$ # Upscaler-Gtk"
+ "float,class:^(com.github.unrud.VideoDownloader)$ # VideoDownloader-Gkk"
+ "float,class:^(blueman-manager)$"
+ "float,class:^(nm-applet)$"
+ "float,class:^(nm-connection-editor)$"
+ "float,class:^(org.kde.polkit-kde-authentication-agent-1)$"
+ "opacity 0.80 0.80,class:^(org.freedesktop.impl.portal.desktop.gtk)$"
+ "opacity 0.80 0.80,class:^(org.freedesktop.impl.portal.desktop.hyprland)$"
+
+ "size 50% 50%,class:^(org.pulseaudio.pavucontrol)"
+
+ "stayfocused, class:^(pinentry-)" # fix pinentry losing focus
+]
diff --git a/hm/modules/linux/desktop-environment/swaync.nix b/hm/modules/linux/desktop-environment/swaync.nix
new file mode 100644
index 0000000..73b1b3e
--- /dev/null
+++ b/hm/modules/linux/desktop-environment/swaync.nix
@@ -0,0 +1,325 @@
+{ config, lib, ... }:
+let
+ cfg = config.liminalOS.desktop.swaync;
+in
+{
+ options.liminalOS.desktop.swaync = {
+ enable = lib.mkOption {
+ type = lib.types.bool;
+ default = config.liminalOS.desktop.enable;
+ description = ''
+ Whether to enable the swaync notification center and daemon.
+ '';
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ services.swaync.enable = true;
+ services.swaync.settings = {
+ positionX = "right";
+ positionY = "top";
+ control-center-margin-top = 10;
+ control-center-margin-bottom = 10;
+ control-center-margin-right = 10;
+ control-center-margin-left = 10;
+ notification-icon-size = 64;
+ notification-body-image-height = 100;
+ notification-body-image-width = 200;
+ timeout = 10;
+ timeout-low = 5;
+ timeout-critical = 0;
+ fit-to-screen = false;
+ control-center-width = 500;
+ control-center-height = 800;
+ notification-window-width = 500;
+ keyboard-shortcuts = true;
+ image-visibility = "when-available";
+ transition-time = 200;
+ hide-on-clear = false;
+ hide-on-action = true;
+ script-fail-notify = true;
+ widgets = [
+ "title"
+ "mpris"
+ "volume"
+ "backlight"
+ "dnd"
+ "notifications"
+ ];
+ widget-config = {
+ title = {
+ text = "Mission Control";
+ clear-all-button = "true";
+ button-text = " All Systems Go";
+ };
+ dnd = {
+ text = "Do Not Disturb";
+ };
+ label = {
+ max-lines = 1;
+ text = "Mission Control";
+ };
+ mpris = {
+ image-size = 96;
+ image-radius = 7;
+ };
+ volume = {
+ label = "";
+ };
+ backlight = {
+ label = "";
+ };
+ };
+ };
+
+ home.file.".config/swaync/style.css".text = ''
+ * {
+ font-family: ${config.stylix.fonts.monospace.name};
+ }
+ .control-center .notification-row:focus,
+ .control-center .notification-row:hover {
+ background: #${config.lib.stylix.colors.base00}
+ }
+ .notification-row {
+ outline: none;
+ margin: 10px;
+ padding: 0;
+ }
+ .notification {
+ background: transparent;
+ padding: 0;
+ margin: 0px;
+ opacity: 0.75;
+ }
+ .notification-content {
+ background: #${config.lib.stylix.colors.base00};
+ padding: 10px;
+ border-radius: 5px;
+ border: 2px solid #${config.lib.stylix.colors.base05};
+ margin: 0;
+ }
+ .notification-default-action {
+ margin: 0;
+ padding: 0;
+ border-radius: 5px;
+ }
+ .close-button {
+ background: #${config.lib.stylix.colors.base08};
+ color: #${config.lib.stylix.colors.base00};
+ text-shadow: none;
+ padding: 0;
+ border-radius: 5px;
+ margin-top: 5px;
+ margin-right: 5px;
+ }
+ .close-button:hover {
+ box-shadow: none;
+ background: #${config.lib.stylix.colors.base0D};
+ transition: all .15s ease-in-out;
+ border: none
+ }
+ .notification-action {
+ border: 2px solid #${config.lib.stylix.colors.base0D};
+ border-top: none;
+ border-radius: 5px;
+ }
+ .notification-default-action:hover,
+ .notification-action:hover {
+ color: #${config.lib.stylix.colors.base0B};
+ background: #${config.lib.stylix.colors.base0B}
+ }
+ .notification-default-action {
+ border-radius: 5px;
+ margin: 0px;
+ }
+ .notification-default-action:not(:only-child) {
+ border-bottom-left-radius: 7px;
+ border-bottom-right-radius: 7px
+ }
+ .notification-action:first-child {
+ border-bottom-left-radius: 10px;
+ background: #${config.lib.stylix.colors.base00}
+ }
+ .notification-action:last-child {
+ border-bottom-right-radius: 10px;
+ background: #${config.lib.stylix.colors.base00}
+ }
+ .inline-reply {
+ margin-top: 8px
+ }
+ .inline-reply-entry {
+ background: #${config.lib.stylix.colors.base00};
+ color: #${config.lib.stylix.colors.base05};
+ caret-color: #${config.lib.stylix.colors.base05};
+ border: 1px solid #${config.lib.stylix.colors.base09};
+ border-radius: 5px
+ }
+ .inline-reply-button {
+ margin-left: 4px;
+ background: #${config.lib.stylix.colors.base00};
+ border: 1px solid #${config.lib.stylix.colors.base09};
+ border-radius: 5px;
+ color: #${config.lib.stylix.colors.base05}
+ }
+ .inline-reply-button:disabled {
+ background: initial;
+ color: #${config.lib.stylix.colors.base03};
+ border: 1px solid transparent
+ }
+ .inline-reply-button:hover {
+ background: #${config.lib.stylix.colors.base00}
+ }
+ .body-image {
+ margin-top: 6px;
+ background-color: #${config.lib.stylix.colors.base05};
+ border-radius: 5px
+ }
+ .summary {
+ font-size: 16px;
+ font-weight: 700;
+ background: transparent;
+ color: rgba(158, 206, 106, 1);
+ text-shadow: none
+ }
+ .time {
+ font-size: 16px;
+ font-weight: 700;
+ background: transparent;
+ color: #${config.lib.stylix.colors.base05};
+ text-shadow: none;
+ margin-right: 18px
+ }
+ .body {
+ font-size: 15px;
+ font-weight: 400;
+ background: transparent;
+ color: #${config.lib.stylix.colors.base05};
+ text-shadow: none
+ }
+ .control-center {
+ background: #${config.lib.stylix.colors.base00};
+ border: 2px solid #${config.lib.stylix.colors.base0C};
+ border-radius: 5px;
+ opacity: 0.85;
+ }
+ .control-center-list {
+ background: transparent
+ }
+ .control-center-list-placeholder {
+ opacity: .5
+ }
+ .floating-notifications {
+ background: transparent
+ }
+ .blank-window {
+ background: alpha(black, 0)
+ }
+ .widget-title {
+ color: #${config.lib.stylix.colors.base0B};
+ background: #${config.lib.stylix.colors.base00};
+ padding: 5px 10px;
+ margin: 10px 10px 5px 10px;
+ font-size: 1.5rem;
+ border-radius: 5px;
+ }
+ .widget-title>button {
+ font-size: 1rem;
+ color: #${config.lib.stylix.colors.base05};
+ text-shadow: none;
+ background: #${config.lib.stylix.colors.base00};
+ box-shadow: none;
+ border-radius: 5px;
+ }
+ .widget-title>button:hover {
+ background: #${config.lib.stylix.colors.base08};
+ color: #${config.lib.stylix.colors.base00};
+ }
+ .widget-dnd {
+ background: #${config.lib.stylix.colors.base00};
+ padding: 5px 10px;
+ margin: 10px 10px 5px 10px;
+ border-radius: 5px;
+ font-size: large;
+ color: #${config.lib.stylix.colors.base0B};
+ }
+ .widget-dnd>switch {
+ border-radius: 5px;
+ /* border: 1px solid #${config.lib.stylix.colors.base0B}; */
+ background: #${config.lib.stylix.colors.base0B};
+ }
+ .widget-dnd>switch:checked {
+ background: #${config.lib.stylix.colors.base08};
+ border: 1px solid #${config.lib.stylix.colors.base08};
+ }
+ .widget-dnd>switch slider {
+ background: #${config.lib.stylix.colors.base00};
+ border-radius: 5px
+ }
+ .widget-dnd>switch:checked slider {
+ background: #${config.lib.stylix.colors.base00};
+ border-radius: 5px
+ }
+ .widget-label {
+ margin: 10px 10px 5px 10px;
+ }
+ .widget-label>label {
+ font-size: 1rem;
+ color: #${config.lib.stylix.colors.base05};
+ }
+ .widget-mpris {
+ color: #${config.lib.stylix.colors.base05};
+ padding: 5px 10px;
+ margin: 10px 10px 5px 10px;
+ border-radius: 5px;
+ }
+ .widget-mpris > box > button {
+ border-radius: 5px;
+ }
+ .widget-mpris-player {
+ padding: 5px 10px;
+ margin: 10px
+ }
+ .widget-mpris-title {
+ font-weight: 700;
+ font-size: 1.25rem
+ }
+ .widget-mpris-subtitle {
+ font-size: 1.1rem
+ }
+ .widget-menubar>box>.menu-button-bar>button {
+ border: none;
+ background: transparent
+ }
+ .topbar-buttons>button {
+ border: none;
+ background: transparent
+ }
+ .widget-volume {
+ background: #${config.lib.stylix.colors.base01};
+ padding: 5px;
+ margin: 10px 10px 5px 10px;
+ border-radius: 5px;
+ font-size: x-large;
+ color: #${config.lib.stylix.colors.base05};
+ }
+ .widget-volume>box>button {
+ background: #${config.lib.stylix.colors.base0B};
+ border: none
+ }
+ .per-app-volume {
+ background-color: #${config.lib.stylix.colors.base00};
+ padding: 4px 8px 8px;
+ margin: 0 8px 8px;
+ border-radius: 5px;
+ }
+ .widget-backlight {
+ background: #${config.lib.stylix.colors.base01};
+ padding: 5px;
+ margin: 10px 10px 5px 10px;
+ border-radius: 5px;
+ font-size: x-large;
+ color: #${config.lib.stylix.colors.base05}
+ }
+ '';
+ };
+}
diff --git a/hm/modules/linux/desktop-environment/waybar/default.nix b/hm/modules/linux/desktop-environment/waybar/default.nix
new file mode 100644
index 0000000..66aee10
--- /dev/null
+++ b/hm/modules/linux/desktop-environment/waybar/default.nix
@@ -0,0 +1,208 @@
+{
+ pkgs,
+ osConfig,
+ config,
+ lib,
+ ...
+}:
+let
+ cfg = config.liminalOS.desktop.waybar;
+in
+{
+ options.liminalOS.desktop.waybar = {
+ enable = lib.mkOption {
+ type = lib.types.bool;
+ default = config.liminalOS.desktop.enable;
+ description = ''
+ Whether to enable Waybar and the liminalOS rice.
+ '';
+ };
+ };
+
+ config = {
+ programs.waybar = lib.mkIf cfg.enable {
+ enable = true;
+ style = ./style.css;
+ systemd.enable = true;
+ settings = {
+ mainBar = {
+ name = "bar0";
+
+ layer = "top";
+ position = "top";
+
+ height = 28;
+
+ "margin" = "5px 10px 0px 10px";
+ "spacing" = 10;
+
+ "mode" = "top";
+
+ reload_style_on_change = true;
+
+ modules-left = [
+ "hyprland/workspaces"
+ "hyprland/window"
+ ];
+ modules-right = [
+ "tray"
+ "idle_inhibitor"
+ "backlight"
+ "wireplumber"
+ "network"
+ "battery"
+ "disk"
+ "memory"
+ "cpu"
+ "temperature"
+ "clock"
+ "custom/notification"
+ ];
+
+ idle_inhibitor = {
+ format = "{icon}";
+ format-icons = {
+ activated = " ";
+ deactivated = " ";
+ };
+ };
+
+ network = {
+ format = "{ifname}";
+ format-wifi = "{icon}{essid}";
+ format-ethernet = " {essid}";
+ format-disconnected = " Disconnected";
+ format-icons = [
+ " "
+ " "
+ " "
+ ];
+ tooltip-format = " {bandwidthUpBits} | {bandwidthDownBits}";
+ tooltip-format-wifi = " {bandwidthUpBits} | {bandwidthDownBits} | {signalStrength}";
+ };
+
+ backlight = {
+ interval = 2;
+ format = " {percent}%";
+ on-scroll-up = "${pkgs.brightnessctl}/bin/brightnessctl set +4";
+ on-scroll-down = "${pkgs.brightnessctl}/bin/brightnessctl set 4-";
+ };
+
+ wireplumber = {
+ format = "{icon} {volume}%";
+ format-muted = " ";
+ on-click = "pamixer -t";
+ on-scroll-up = "${pkgs.pamixer}/bin/pamixer set 5%+";
+ on-scroll-down = "${pkgs.pamixer}/bin/pamixer set 5%-";
+ format-icons = [
+ ""
+ ""
+ ""
+ ""
+ ""
+ ];
+ };
+
+ battery = {
+ interval = 10;
+ format = "{icon} {capacity}%";
+ format-icons = [
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ];
+ tooltip = true;
+ tooltip-format = "{timeTo}";
+ };
+
+ disk = {
+ intervel = 30;
+ format = " {percentage_used}%";
+ tooltip-format = "{used} used out of {total} on \"{path}\" ({percentage_used}%)";
+ };
+
+ memory = {
+ interval = 10;
+ format = " {used}";
+ tooltip-format = "{used}GiB used of {total}GiB ({percentage}%)";
+ };
+
+ cpu = {
+ interval = 10;
+ format = " {usage}%";
+ };
+
+ temperature = {
+ interval = 10;
+ };
+
+ clock = {
+ interval = 1;
+ format = "{:%H:%M:%S}";
+ };
+
+ "custom/notification" = lib.mkIf config.liminalOS.desktop.swaync.enable {
+ tooltip = false;
+ format = "{icon}";
+ format-icons = {
+ notification = "⬤";
+ none = " ";
+ dnd-notification = "⬤";
+ dnd-none = " ";
+ };
+ return-type = "json";
+ exec = "${pkgs.swaynotificationcenter}/bin/swaync-client -swb";
+ on-click = "sleep 0.1 && ${pkgs.swaynotificationcenter}/bin/swaync-client -t -sw";
+ on-click-right = "sleep 0.1 && ${pkgs.swaynotificationcenter}/bin/swaync-client -d -sw";
+ escape = true;
+ };
+
+ "hyprland/workspaces" = {
+ show-special = true;
+ persistent-workspaces = {
+ "*" = [
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ ];
+ };
+ format = "{icon}";
+ format-icons = {
+ active = "";
+ empty = "";
+ default = "";
+ urgent = "";
+ special = "";
+ };
+ };
+
+ "hyprland/window" = {
+ icon = true;
+ icon-size = 20;
+ max-length = 50;
+ rewrite = {
+ "(.*) — LibreWolf" = "$1";
+ "(.*) — Zen Browser" = "$1";
+ "^$" = "👾";
+ };
+ };
+ };
+ };
+ };
+ };
+}
diff --git a/hm/modules/linux/desktop-environment/waybar/desktop/default.nix b/hm/modules/linux/desktop-environment/waybar/desktop/default.nix
new file mode 100644
index 0000000..731f793
--- /dev/null
+++ b/hm/modules/linux/desktop-environment/waybar/desktop/default.nix
@@ -0,0 +1,171 @@
+{
+ # home.file.".config/waybar/config".source = ./config.jsonc;
+ programs.waybar = {
+ enable = true;
+ style = ./style.css;
+ systemd.enable = true;
+ settings = {
+ mainBar = {
+ name = "bar0";
+
+ layer = "top";
+ position = "top";
+
+ height = 28;
+ # "width" = 1920;
+
+ "margin" = "5px 10px 0px 10px";
+ "spacing" = 10;
+
+ "mode" = "top";
+ # "exclusive" = true;
+
+ # "output" = "eDP-1";
+
+ reload_style_on_change = true;
+
+ modules-left = [ "hyprland/workspaces" ];
+ modules-center = [ "hyprland/window" ];
+ modules-right = [
+ "tray"
+ "idle_inhibitor"
+ "backlight"
+ "wireplumber"
+ "network"
+ "battery"
+ "disk"
+ "memory"
+ "cpu"
+ "temperature"
+ "clock"
+ ];
+
+ idle_inhibitor = {
+ format = "{icon}";
+ format-icons = {
+ activated = " ";
+ deactivated = " ";
+ };
+ };
+
+ network = {
+ format = "{ifname}";
+ format-wifi = "{icon}{essid}";
+ format-ethernet = " {essid}";
+ format-disconnected = " Disconnected";
+ format-icons = [
+ " "
+ " "
+ " "
+ ];
+ tooltip-format = " {bandwidthUpBits} | {bandwidthDownBits}";
+ tooltip-format-wifi = " {bandwidthUpBits} | {bandwidthDownBits} | {signalStrength}";
+ };
+
+ backlight = {
+ interval = 2;
+ format = " {percent}%";
+ on-scroll-up = "brightnessctl set +4";
+ on-scroll-down = "brightnessctl set 4-";
+ };
+
+ wireplumber = {
+ format = "{icon} {volume}%";
+ format-muted = " ";
+ on-click = "pamixer -t";
+ on-scroll-up = "pamixer set 5%+";
+ on-scroll-down = "pamixer set 5%-";
+ format-icons = [
+ ""
+ ""
+ ""
+ ""
+ ""
+ ];
+ };
+
+ battery = {
+ interval = 10;
+ format = "{icon}{capacity}%";
+ format-icons = [
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ""
+ ];
+ tooltip = true;
+ tooltip-format = "{timeTo}";
+ };
+
+ disk = {
+ intervel = 30;
+ format = " {percentage_used}%";
+ tooltip-format = "{used} used out of {total} on \"{path}\" ({percentage_used}%)";
+ };
+
+ memory = {
+ interval = 10;
+ format = " {used}";
+ tooltip-format = "{used}GiB used of {total}GiB ({percentage}%)";
+ };
+
+ cpu = {
+ interval = 10;
+ format = " {usage}%";
+ };
+
+ temperature = {
+ interval = 10;
+ };
+
+ clock = {
+ interval = 1;
+ format = "{:%H:%M:%S}";
+ };
+
+ "hyprland/workspaces" = {
+ show-special = true;
+ persistent-workspaces = {
+ "*" = [
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ ];
+ };
+ format = "{icon}";
+ format-icons = {
+ active = "";
+ empty = "";
+ default = "";
+ urgent = "";
+ special = "";
+ };
+ };
+ "hyprland/window" = {
+ icon = true;
+ icon-size = 20;
+ max-length = 50;
+ rewrite = {
+ "(.*) — Ablaze Floorp" = "$1";
+ "(.*) — Zen Browser" = "$1";
+ "^$" = "👾";
+ };
+ };
+ };
+ };
+ };
+}
diff --git a/hm/modules/linux/desktop-environment/waybar/desktop/style.css b/hm/modules/linux/desktop-environment/waybar/desktop/style.css
new file mode 100644
index 0000000..0307cdf
--- /dev/null
+++ b/hm/modules/linux/desktop-environment/waybar/desktop/style.css
@@ -0,0 +1,71 @@
+window#waybar {
+ font-family: "CaskaydiaCove Nerd Font";
+ background-color: rgba(0,0,0,0);
+ font-size: 0.8rem;
+ border-radius: 0.5rem;
+}
+
+.modules-left, .modules-center {
+ opacity: 1;
+ background: linear-gradient(45deg, rgb(214, 39, 200), rgb(5, 83, 252));
+ border-radius: 0.5rem;
+ padding: 2px;
+}
+
+.modules-right {
+ opacity: 1;
+ background-color: rgba(0,0,0,0.5);
+ border-radius: 0.5rem;
+ padding: 2px 2px 2px 10px
+}
+
+/* label.module {
+ margin-left: -1px;
+} */
+
+#workspaces {
+ background-color: rgba(0,0,0,0.5);
+ border-radius: 0.5rem;
+ padding: 0 2px;
+}
+
+#workspaces button {
+ font-size: 0.6rem;
+ padding: 0 0.3rem 0 0;
+}
+
+#window {
+ background-color: rgba(0,0,0,0.5);
+ border-radius: 0.5rem;
+ padding: 2px 5px;
+}
+
+#clock {
+ font-weight: bolder;
+ border-radius: 0.5rem;
+ padding: 0 3px 0 0;
+}
+
+#battery {
+ color: lightgreen;
+}
+
+#memory {
+ color: lightpink;
+}
+
+#disk {
+ color: lightskyblue;
+}
+
+#cpu {
+ color: lightgoldenrodyellow;
+}
+
+#temperature {
+ color: lightslategray;
+}
+
+#network {
+ color: lightsteelblue;
+}
diff --git a/hm/modules/linux/desktop-environment/waybar/style.css b/hm/modules/linux/desktop-environment/waybar/style.css
new file mode 100644
index 0000000..9a4ef6e
--- /dev/null
+++ b/hm/modules/linux/desktop-environment/waybar/style.css
@@ -0,0 +1,78 @@
+window#waybar {
+ font-family: "CaskaydiaCove Nerd Font";
+ background-color: rgba(0,0,0,0);
+ font-size: 0.8rem;
+ border-radius: 0.5rem;
+ color: #cccccc;
+}
+
+.modules-left {
+ opacity: 1;
+ background: linear-gradient(45deg, rgb(214, 39, 200), rgb(5, 83, 252));
+ border-radius: 0.5rem;
+ padding: 2px;
+}
+
+.modules-center {
+ opacity: 0;
+}
+
+.modules-right {
+ opacity: 1;
+ background-color: rgba(0,0,0,0.5);
+ border-radius: 0.5rem;
+ padding: 2px 2px 2px 10px
+}
+
+/* label.module {
+ margin-left: -1px;
+} */
+
+#workspaces {
+ background-color: rgba(0,0,0,0.5);
+ border-radius: 0.5rem;
+ padding: 0 2px;
+}
+
+#workspaces button {
+ font-size: 0.6rem;
+ padding: 0 0.3rem 0 0;
+ border: #cccccc;
+ color: #cccccc;
+}
+
+#window {
+ background-color: rgba(0,0,0,0.5);
+ border-radius: 0.5rem;
+ padding: 2px 5px;
+}
+
+#clock {
+ font-weight: bolder;
+ border-radius: 0.5rem;
+ padding: 0 3px 0 0;
+}
+
+#battery {
+ color: lightgreen;
+}
+
+#memory {
+ color: lightpink;
+}
+
+#disk {
+ color: lightskyblue;
+}
+
+#cpu {
+ color: lightgoldenrodyellow;
+}
+
+#temperature {
+ color: lightslategray;
+}
+
+#network {
+ color: lightsteelblue;
+}
diff --git a/hm/modules/linux/platform-tweaks/default.nix b/hm/modules/linux/platform-tweaks/default.nix
new file mode 100644
index 0000000..f3ab7e4
--- /dev/null
+++ b/hm/modules/linux/platform-tweaks/default.nix
@@ -0,0 +1,35 @@
+{
+ inputs,
+ lib,
+ config,
+ osConfig,
+ ...
+}:
+let
+ cfg = config.liminalOS;
+in
+{
+ options.liminalOS = {
+ formFactor = lib.mkOption {
+ type = lib.types.nullOr (
+ lib.types.enum [
+ "laptop"
+ "desktop"
+ ]
+ );
+ default = osConfig.liminalOS.formFactor;
+ description = ''
+ Form factor of the machine. Adjusts some UI features. Inherited from system configuration liminalOS.formFactor if set, otherwise you must set it here.
+ '';
+ };
+ };
+
+ config = {
+ assertions = [
+ {
+ assertion = cfg.formFactor != null;
+ message = "You must set liminalOS.formFactor either in the home-manager configuration for the user or in the OS configuration for the system!";
+ }
+ ];
+ };
+}
diff --git a/hm/modules/linux/programs/bulk-programs.nix b/hm/modules/linux/programs/bulk-programs.nix
new file mode 100644
index 0000000..901359e
--- /dev/null
+++ b/hm/modules/linux/programs/bulk-programs.nix
@@ -0,0 +1,88 @@
+{
+ config,
+ pkgs,
+ lib,
+ ...
+}:
+let
+ cfg = config.liminalOS.programs.bulk;
+ mkEnableOption' =
+ desc:
+ lib.mkOption {
+ type = lib.types.bool;
+ default = cfg.enable;
+ description = ''
+ Whether to enable ${desc}.
+ '';
+ };
+in
+{
+ options.liminalOS.programs.bulk = {
+ enable = lib.mkOption {
+ type = lib.types.bool;
+ default = config.liminalOS.programs.enable;
+ description = ''
+ Whether to enable installation of various useful programs in the system.
+ '';
+ };
+ archiveTools.enable = mkEnableOption' "archive tools";
+ instantMessaging.enable = mkEnableOption' "instant messengers";
+ nixCliTools.enable = mkEnableOption' "Nix CLI helper tools and utilities";
+ desktopApps.enable = mkEnableOption' "desktop applications like mail and file explorer";
+ misc.enable = mkEnableOption' "assorted uncategorized utilities";
+ };
+
+ config = lib.mkIf cfg.enable {
+ home.packages =
+ lib.optionals cfg.archiveTools.enable (
+ with pkgs;
+ [
+ zip
+ xz
+ unzip
+ p7zip
+ ]
+ )
+ ++ lib.optionals cfg.nixCliTools.enable (
+ with pkgs;
+ [
+ nurl
+ nix-output-monitor
+ ]
+ )
+ ++ lib.optionals cfg.misc.enable (
+ with pkgs;
+ [
+ ffmpeg
+
+ pciutils # lspci
+ usbutils # lsusb
+
+ ani-cli
+ manga-tui
+
+ hledger
+ ]
+ )
+ ++ lib.optionals cfg.instantMessaging.enable (
+ with pkgs;
+ [
+ vesktop
+ signal-desktop
+ iamb
+ ]
+ ++ lib.optionals cfg.desktopApps.enable (
+ with pkgs;
+ [
+ thunderbird
+ xfce.thunar
+ ]
+ ++ lib.optionals pkgs.stdenv.targetPlatform.isx86_64 [
+ bitwarden-desktop
+ sbctl
+ ]
+ ++ lib.optionals pkgs.stdenv.targetPlatform.isAarch64 [ ]
+ )
+ );
+ };
+}
diff --git a/hm/modules/linux/programs/default.nix b/hm/modules/linux/programs/default.nix
new file mode 100644
index 0000000..961a43f
--- /dev/null
+++ b/hm/modules/linux/programs/default.nix
@@ -0,0 +1,95 @@
+{
+ pkgs,
+ inputs,
+ config,
+ lib,
+ ...
+}:
+let
+ cfg = config.liminalOS.programs;
+in
+{
+ imports = [
+ ./bulk-programs.nix
+ ];
+
+ options.liminalOS.programs = {
+ enable = lib.mkOption {
+ type = lib.types.bool;
+ default = true;
+ description = ''
+ Whether to set up many default desktop programs.
+ '';
+ };
+ terminal.enable = lib.mkOption {
+ type = lib.types.bool;
+ default = cfg.enable;
+ description = ''
+ Whether to set up kitty terminal.
+ '';
+ };
+ zen.enable = lib.mkOption {
+ type = lib.types.bool;
+ default = cfg.enable;
+ description = ''
+ Whether to install Zen Browser and set it as the default browser.
+ '';
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ programs.kitty = lib.mkIf cfg.terminal.enable {
+ enable = true;
+ font.name = "CaskaydiaCove Nerd Font";
+ shellIntegration.enableFishIntegration = true;
+ shellIntegration.enableBashIntegration = true;
+ settings = {
+ font_size = 11;
+ window_padding_width = "8 8";
+ confirm_os_window_close = -1;
+ enable_audio_bell = "no";
+ background_opacity = pkgs.lib.mkForce "0.8";
+ allow_remote_control = "yes";
+ listen_on = "unix:/tmp/kitty";
+ scrollback_pager = ''nvim --noplugin -c "set signcolumn=no showtabline=0" -c "silent write! /tmp/kitty_scrollback_buffer | te cat /tmp/kitty_scrollback_buffer - "'';
+ cursor = pkgs.lib.mkForce "#c0caf5";
+ cursor_text_color = pkgs.lib.mkForce "#1a1b26";
+ cursor_trail = 3;
+ };
+ keybindings = {
+ "kitty_mod+h" = "show_scrollback";
+ };
+ };
+
+ programs.spotify-player.enable = true;
+
+ programs.neovide = {
+ enable = false;
+ settings = {
+ font = {
+ normal = [ "CaskaydiaCove Nerd Font" ];
+ size = if config.liminalOS.formFactor == "laptop" then 11 else 13;
+ };
+ };
+ };
+
+ xdg.mimeApps = lib.mkIf cfg.zen.enable {
+ enable = true;
+ defaultApplications = {
+ "text/html" = [ "zen.desktop" ];
+ "x-scheme-handler/http" = [ "zen.desktop" ];
+ "x-scheme-handler/https" = [ "zen.desktop" ];
+ "x-scheme-handler/about" = [ "zen.desktop" ];
+ "x-scheme-handler/unknown" = [ "zen.desktop" ];
+ };
+ };
+
+ home.packages = lib.mkIf cfg.zen.enable [
+ inputs.zen-browser.packages.${pkgs.system}.default
+ ];
+
+ home.sessionVariables.DEFAULT_BROWSER = lib.mkIf cfg.zen.enable "${
+ inputs.zen-browser.packages.${pkgs.system}.default
+ }/bin/zen";
+ };
+}
diff --git a/hm/modules/linux/spicetify/default.nix b/hm/modules/linux/spicetify/default.nix
new file mode 100644
index 0000000..985397e
--- /dev/null
+++ b/hm/modules/linux/spicetify/default.nix
@@ -0,0 +1,31 @@
+{
+ inputs,
+ pkgs,
+ config,
+ osConfig,
+ lib,
+ ...
+}:
+let
+ spicepkgs = inputs.spicetify.legacyPackages.${pkgs.system};
+in
+{
+ imports = [
+ inputs.spicetify.homeManagerModules.default
+ ];
+
+ config = lib.mkIf (config.liminalOS.programs.enable && osConfig.liminalOS.config.allowUnfree) {
+ programs.spicetify = {
+ enable = true;
+ # theme = spicepkgs.themes.dribbblish;
+ # colorScheme = "rosepine";
+ enabledExtensions = with spicepkgs.extensions; [
+ lastfm
+ fullAppDisplayMod
+ ];
+ enabledCustomApps = with spicepkgs.apps; [
+ lyricsPlus
+ ];
+ };
+ };
+}
diff --git a/hm/modules/linux/theming/default.nix b/hm/modules/linux/theming/default.nix
new file mode 100644
index 0000000..7d3539e
--- /dev/null
+++ b/hm/modules/linux/theming/default.nix
@@ -0,0 +1,14 @@
+{ pkgs, ... }:
+{
+ imports = [ ./stylix.nix ];
+ # gtk = {
+ # enable = true;
+ # cursorTheme = {
+ # name = "Bibata-Modern-Ice";
+ # size = 26;
+ # };
+ # iconTheme = {
+ # name = "Papirus-Dark";
+ # };
+ # };
+}
diff --git a/hm/modules/linux/theming/stylix.nix b/hm/modules/linux/theming/stylix.nix
new file mode 100644
index 0000000..94ee4a9
--- /dev/null
+++ b/hm/modules/linux/theming/stylix.nix
@@ -0,0 +1,13 @@
+{ osConfig, lib, ... }:
+{
+ config.stylix.targets = lib.mkIf osConfig.liminalOS.theming.enable {
+ waybar.enable = false;
+ kitty.variant256Colors = true;
+ neovim.enable = false;
+ kde.enable = true;
+ gnome.enable = true;
+ swaync.enable = false;
+ hyprlock.enable = false;
+ hyprland.enable = false;
+ };
+}
diff --git a/hm/modules/linux/var/easyeffects/default.nix b/hm/modules/linux/var/easyeffects/default.nix
new file mode 100644
index 0000000..00764d3
--- /dev/null
+++ b/hm/modules/linux/var/easyeffects/default.nix
@@ -0,0 +1,35 @@
+{
+ config,
+ lib,
+ osConfig,
+ ...
+}:
+let
+ cfg = config.liminalOS.utils.easyeffects;
+in
+{
+ options.liminalOS.utils.easyeffects = {
+ enable = lib.mkOption {
+ type = lib.types.bool;
+ default = true;
+ description = ''
+ Whether to enable EasyEffects.
+ '';
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ services.easyeffects.enable = true;
+
+ home.file = lib.mkIf (osConfig.liminalOS.flakeLocation != null) {
+ ".config/easyeffects/output" = {
+ source = config.lib.file.mkOutOfStoreSymlink "${osConfig.liminalOS.flakeLocation}/hm/modules/linux/var/easyeffects/output";
+ recursive = true;
+ };
+ ".config/easyeffects/input" = {
+ source = config.lib.file.mkOutOfStoreSymlink "${osConfig.liminalOS.flakeLocation}/hm/modules/linux/var/easyeffects/input";
+ recursive = true;
+ };
+ };
+ };
+}
diff --git a/hm/modules/linux/var/easyeffects/input/Default.json b/hm/modules/linux/var/easyeffects/input/Default.json
new file mode 100644
index 0000000..60b5635
--- /dev/null
+++ b/hm/modules/linux/var/easyeffects/input/Default.json
@@ -0,0 +1,75 @@
+{
+ "input": {
+ "blocklist": [],
+ "compressor#0": {
+ "attack": 20.0,
+ "boost-amount": 6.0,
+ "boost-threshold": -72.0,
+ "bypass": true,
+ "dry": -100.0,
+ "hpf-frequency": 10.0,
+ "hpf-mode": "off",
+ "input-gain": 0.0,
+ "knee": -6.0,
+ "lpf-frequency": 20000.0,
+ "lpf-mode": "off",
+ "makeup": 0.0,
+ "mode": "Downward",
+ "output-gain": 0.0,
+ "ratio": 4.0,
+ "release": 100.0,
+ "release-threshold": -100.0,
+ "sidechain": {
+ "lookahead": 0.0,
+ "mode": "RMS",
+ "preamp": 0.0,
+ "reactivity": 10.0,
+ "source": "Middle",
+ "stereo-split-source": "Left/Right",
+ "type": "Feed-forward"
+ },
+ "stereo-split": false,
+ "threshold": -12.0,
+ "wet": 0.0
+ },
+ "limiter#0": {
+ "alr": false,
+ "alr-attack": 5.0,
+ "alr-knee": 0.0,
+ "alr-release": 50.0,
+ "attack": 5.0,
+ "bypass": true,
+ "dithering": "None",
+ "external-sidechain": false,
+ "gain-boost": true,
+ "input-gain": 0.0,
+ "lookahead": 5.0,
+ "mode": "Herm Thin",
+ "output-gain": 0.0,
+ "oversampling": "None",
+ "release": 5.0,
+ "sidechain-preamp": 0.0,
+ "stereo-link": 100.0,
+ "threshold": 0.0
+ },
+ "plugins_order": [
+ "limiter#0",
+ "compressor#0",
+ "reverb#0"
+ ],
+ "reverb#0": {
+ "amount": -12.0,
+ "bass-cut": 300.0,
+ "bypass": true,
+ "decay-time": 1.5,
+ "diffusion": 0.5,
+ "dry": 0.0,
+ "hf-damp": 5000.0,
+ "input-gain": 0.0,
+ "output-gain": 0.0,
+ "predelay": 0.0,
+ "room-size": "Large",
+ "treble-cut": 5000.0
+ }
+ }
+}
diff --git a/hm/modules/linux/var/easyeffects/input/Studio.json b/hm/modules/linux/var/easyeffects/input/Studio.json
new file mode 100644
index 0000000..f05bb2d
--- /dev/null
+++ b/hm/modules/linux/var/easyeffects/input/Studio.json
@@ -0,0 +1,75 @@
+{
+ "input": {
+ "blocklist": [],
+ "compressor#0": {
+ "attack": 20.0,
+ "boost-amount": 6.0,
+ "boost-threshold": -72.0,
+ "bypass": false,
+ "dry": -100.0,
+ "hpf-frequency": 10.0,
+ "hpf-mode": "off",
+ "input-gain": 0.0,
+ "knee": -6.0,
+ "lpf-frequency": 20000.0,
+ "lpf-mode": "off",
+ "makeup": 0.0,
+ "mode": "Downward",
+ "output-gain": -2.1,
+ "ratio": 4.0,
+ "release": 100.0,
+ "release-threshold": -100.0,
+ "sidechain": {
+ "lookahead": 0.0,
+ "mode": "RMS",
+ "preamp": 0.0,
+ "reactivity": 10.0,
+ "source": "Middle",
+ "stereo-split-source": "Left/Right",
+ "type": "Feed-forward"
+ },
+ "stereo-split": false,
+ "threshold": -12.0,
+ "wet": 0.0
+ },
+ "limiter#0": {
+ "alr": false,
+ "alr-attack": 5.0,
+ "alr-knee": 0.0,
+ "alr-release": 50.0,
+ "attack": 5.0,
+ "bypass": false,
+ "dithering": "None",
+ "external-sidechain": false,
+ "gain-boost": true,
+ "input-gain": 0.0,
+ "lookahead": 5.0,
+ "mode": "Herm Thin",
+ "output-gain": 0.0,
+ "oversampling": "None",
+ "release": 5.0,
+ "sidechain-preamp": 0.0,
+ "stereo-link": 100.0,
+ "threshold": 0.0
+ },
+ "plugins_order": [
+ "limiter#0",
+ "speex#0",
+ "compressor#0"
+ ],
+ "speex#0": {
+ "bypass": false,
+ "enable-agc": true,
+ "enable-denoise": true,
+ "enable-dereverb": false,
+ "input-gain": 0.0,
+ "noise-suppression": -70,
+ "output-gain": 0.0,
+ "vad": {
+ "enable": true,
+ "probability-continue": 90,
+ "probability-start": 95
+ }
+ }
+ }
+}
diff --git a/hm/modules/linux/var/easyeffects/output/AirPods Pro ANC.json b/hm/modules/linux/var/easyeffects/output/AirPods Pro ANC.json
new file mode 100644
index 0000000..73a2624
--- /dev/null
+++ b/hm/modules/linux/var/easyeffects/output/AirPods Pro ANC.json
@@ -0,0 +1,243 @@
+{
+ "output": {
+ "blocklist": [],
+ "equalizer#0": {
+ "balance": 0.0,
+ "bypass": false,
+ "input-gain": -3.68,
+ "left": {
+ "band0": {
+ "frequency": 105.0,
+ "gain": 0.6000000238418579,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.6666666865348816,
+ "slope": "x1",
+ "solo": false,
+ "type": "Lo-shelf",
+ "width": 4.0
+ },
+ "band1": {
+ "frequency": 27.100000381469727,
+ "gain": -0.30000001192092896,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.7300000190734863,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band2": {
+ "frequency": 79.0,
+ "gain": 1.7999999523162842,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.2300000190734863,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band3": {
+ "frequency": 474.8999938964844,
+ "gain": -2.5,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.5400000214576721,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band4": {
+ "frequency": 1164.199951171875,
+ "gain": 2.0,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 3.119999885559082,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band5": {
+ "frequency": 2344.60009765625,
+ "gain": 2.0,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 3.0899999141693115,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band6": {
+ "frequency": 5148.0,
+ "gain": 3.9000000953674316,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.6100000143051147,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band7": {
+ "frequency": 6457.60009765625,
+ "gain": -5.0,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 6.0,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band8": {
+ "frequency": 9619.900390625,
+ "gain": 3.799999952316284,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.309999942779541,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band9": {
+ "frequency": 10000.0,
+ "gain": -2.299999952316284,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.6666666865348816,
+ "slope": "x1",
+ "solo": false,
+ "type": "Hi-shelf",
+ "width": 4.0
+ }
+ },
+ "mode": "IIR",
+ "num-bands": 10,
+ "output-gain": 0.0,
+ "pitch-left": 0.0,
+ "pitch-right": 0.0,
+ "right": {
+ "band0": {
+ "frequency": 105.0,
+ "gain": 0.6000000238418579,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.6666666865348816,
+ "slope": "x1",
+ "solo": false,
+ "type": "Lo-shelf",
+ "width": 4.0
+ },
+ "band1": {
+ "frequency": 27.100000381469727,
+ "gain": -0.30000001192092896,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.7300000190734863,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band2": {
+ "frequency": 79.0,
+ "gain": 1.7999999523162842,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.2300000190734863,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band3": {
+ "frequency": 474.8999938964844,
+ "gain": -2.5,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.5400000214576721,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band4": {
+ "frequency": 1164.199951171875,
+ "gain": 2.0,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 3.119999885559082,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band5": {
+ "frequency": 2344.60009765625,
+ "gain": 2.0,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 3.0899999141693115,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band6": {
+ "frequency": 5148.0,
+ "gain": 3.9000000953674316,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.6100000143051147,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band7": {
+ "frequency": 6457.60009765625,
+ "gain": -5.0,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 6.0,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band8": {
+ "frequency": 9619.900390625,
+ "gain": 3.799999952316284,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.309999942779541,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band9": {
+ "frequency": 10000.0,
+ "gain": -2.299999952316284,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.6666666865348816,
+ "slope": "x1",
+ "solo": false,
+ "type": "Hi-shelf",
+ "width": 4.0
+ }
+ },
+ "split-channels": false
+ },
+ "plugins_order": [
+ "equalizer#0"
+ ]
+ }
+}
diff --git a/hm/modules/linux/var/easyeffects/output/AirPods Pro Transparency.json b/hm/modules/linux/var/easyeffects/output/AirPods Pro Transparency.json
new file mode 100644
index 0000000..ae46b48
--- /dev/null
+++ b/hm/modules/linux/var/easyeffects/output/AirPods Pro Transparency.json
@@ -0,0 +1,243 @@
+{
+ "output": {
+ "blocklist": [],
+ "equalizer#0": {
+ "balance": 0.0,
+ "bypass": false,
+ "input-gain": -3.34,
+ "left": {
+ "band0": {
+ "frequency": 105.0,
+ "gain": 0.699999988079071,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.6666666865348816,
+ "slope": "x1",
+ "solo": false,
+ "type": "Lo-shelf",
+ "width": 4.0
+ },
+ "band1": {
+ "frequency": 26.5,
+ "gain": -0.4000000059604645,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.380000114440918,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band2": {
+ "frequency": 79.19999694824219,
+ "gain": 1.600000023841858,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.2999999523162842,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band3": {
+ "frequency": 468.0,
+ "gain": -2.5,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.5400000214576721,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band4": {
+ "frequency": 1152.699951171875,
+ "gain": 1.899999976158142,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.890000104904175,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band5": {
+ "frequency": 2310.800048828125,
+ "gain": 1.7999999523162842,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.569999933242798,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band6": {
+ "frequency": 5148.7001953125,
+ "gain": 3.5,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.4700000286102295,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band7": {
+ "frequency": 6472.39990234375,
+ "gain": -4.599999904632568,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 6.0,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band8": {
+ "frequency": 9526.5,
+ "gain": 3.700000047683716,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.25,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band9": {
+ "frequency": 10000.0,
+ "gain": -2.299999952316284,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.6666666865348816,
+ "slope": "x1",
+ "solo": false,
+ "type": "Hi-shelf",
+ "width": 4.0
+ }
+ },
+ "mode": "IIR",
+ "num-bands": 10,
+ "output-gain": 0.0,
+ "pitch-left": 0.0,
+ "pitch-right": 0.0,
+ "right": {
+ "band0": {
+ "frequency": 105.0,
+ "gain": 0.699999988079071,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.6666666865348816,
+ "slope": "x1",
+ "solo": false,
+ "type": "Lo-shelf",
+ "width": 4.0
+ },
+ "band1": {
+ "frequency": 26.5,
+ "gain": -0.4000000059604645,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.380000114440918,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band2": {
+ "frequency": 79.19999694824219,
+ "gain": 1.600000023841858,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.2999999523162842,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band3": {
+ "frequency": 468.0,
+ "gain": -2.5,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.5400000214576721,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band4": {
+ "frequency": 1152.699951171875,
+ "gain": 1.899999976158142,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.890000104904175,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band5": {
+ "frequency": 2310.800048828125,
+ "gain": 1.7999999523162842,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.569999933242798,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band6": {
+ "frequency": 5148.7001953125,
+ "gain": 3.5,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.4700000286102295,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band7": {
+ "frequency": 6472.39990234375,
+ "gain": -4.599999904632568,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 6.0,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band8": {
+ "frequency": 9526.5,
+ "gain": 3.700000047683716,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.25,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band9": {
+ "frequency": 10000.0,
+ "gain": -2.299999952316284,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.6666666865348816,
+ "slope": "x1",
+ "solo": false,
+ "type": "Hi-shelf",
+ "width": 4.0
+ }
+ },
+ "split-channels": false
+ },
+ "plugins_order": [
+ "equalizer#0"
+ ]
+ }
+}
diff --git a/hm/modules/linux/var/easyeffects/output/Arctis Pro EQ.json b/hm/modules/linux/var/easyeffects/output/Arctis Pro EQ.json
new file mode 100644
index 0000000..3f774c8
--- /dev/null
+++ b/hm/modules/linux/var/easyeffects/output/Arctis Pro EQ.json
@@ -0,0 +1,243 @@
+{
+ "output": {
+ "blocklist": [],
+ "equalizer#0": {
+ "balance": 0.0,
+ "bypass": false,
+ "input-gain": -8.61,
+ "left": {
+ "band0": {
+ "frequency": 105.0,
+ "gain": -0.6000000238418579,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.699999988079071,
+ "slope": "x1",
+ "solo": false,
+ "type": "Lo-shelf",
+ "width": 4.0
+ },
+ "band1": {
+ "frequency": 50.0,
+ "gain": 3.9000000953674316,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.0399999618530273,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band2": {
+ "frequency": 135.6999969482422,
+ "gain": -1.5,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.149999976158142,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band3": {
+ "frequency": 361.3999938964844,
+ "gain": 3.0999999046325684,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.159999966621399,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band4": {
+ "frequency": 1135.300048828125,
+ "gain": -4.599999904632568,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.2200000286102295,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band5": {
+ "frequency": 2703.699951171875,
+ "gain": -3.799999952316284,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.799999952316284,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band6": {
+ "frequency": 3766.800048828125,
+ "gain": 9.399999618530273,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.8300000429153442,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band7": {
+ "frequency": 5260.39990234375,
+ "gain": 5.0,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 3.609999895095825,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band8": {
+ "frequency": 8775.2998046875,
+ "gain": -7.400000095367432,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.75,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band9": {
+ "frequency": 10000.0,
+ "gain": -2.299999952316284,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.699999988079071,
+ "slope": "x1",
+ "solo": false,
+ "type": "Hi-shelf",
+ "width": 4.0
+ }
+ },
+ "mode": "IIR",
+ "num-bands": 10,
+ "output-gain": 3.9,
+ "pitch-left": 0.0,
+ "pitch-right": 0.0,
+ "right": {
+ "band0": {
+ "frequency": 105.0,
+ "gain": -0.6000000238418579,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.699999988079071,
+ "slope": "x1",
+ "solo": false,
+ "type": "Lo-shelf",
+ "width": 4.0
+ },
+ "band1": {
+ "frequency": 50.0,
+ "gain": 3.9000000953674316,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.0399999618530273,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band2": {
+ "frequency": 135.6999969482422,
+ "gain": -1.5,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.149999976158142,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band3": {
+ "frequency": 361.3999938964844,
+ "gain": 3.0999999046325684,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.159999966621399,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band4": {
+ "frequency": 1135.300048828125,
+ "gain": -4.599999904632568,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.2200000286102295,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band5": {
+ "frequency": 2703.699951171875,
+ "gain": -3.799999952316284,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.799999952316284,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band6": {
+ "frequency": 3766.800048828125,
+ "gain": 9.399999618530273,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.8300000429153442,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band7": {
+ "frequency": 5260.39990234375,
+ "gain": 5.0,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 3.609999895095825,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band8": {
+ "frequency": 8775.2998046875,
+ "gain": -7.400000095367432,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.75,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band9": {
+ "frequency": 10000.0,
+ "gain": -2.299999952316284,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.699999988079071,
+ "slope": "x1",
+ "solo": false,
+ "type": "Hi-shelf",
+ "width": 4.0
+ }
+ },
+ "split-channels": false
+ },
+ "plugins_order": [
+ "equalizer#0"
+ ]
+ }
+}
diff --git a/hm/modules/linux/var/easyeffects/output/DT770 Pro.json b/hm/modules/linux/var/easyeffects/output/DT770 Pro.json
new file mode 100644
index 0000000..d30f198
--- /dev/null
+++ b/hm/modules/linux/var/easyeffects/output/DT770 Pro.json
@@ -0,0 +1,243 @@
+{
+ "output": {
+ "blocklist": [],
+ "equalizer#0": {
+ "balance": 0.0,
+ "bypass": false,
+ "input-gain": -4.74,
+ "left": {
+ "band0": {
+ "frequency": 105.0,
+ "gain": 3.0,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.6666666865348816,
+ "slope": "x1",
+ "solo": false,
+ "type": "Lo-shelf",
+ "width": 4.0
+ },
+ "band1": {
+ "frequency": 53.5,
+ "gain": -6.800000190734863,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.699999988079071,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band2": {
+ "frequency": 141.89999389648438,
+ "gain": -2.4000000953674316,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.7699999809265137,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band3": {
+ "frequency": 199.89999389648438,
+ "gain": 6.0,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.5,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band4": {
+ "frequency": 943.5,
+ "gain": -1.399999976158142,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 3.5,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band5": {
+ "frequency": 2352.89990234375,
+ "gain": -1.5,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 3.440000057220459,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band6": {
+ "frequency": 3523.5,
+ "gain": 4.800000190734863,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 3.859999895095825,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band7": {
+ "frequency": 5082.7001953125,
+ "gain": -3.5,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 4.53000020980835,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band8": {
+ "frequency": 6828.10009765625,
+ "gain": -3.9000000953674316,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 3.2799999713897705,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band9": {
+ "frequency": 10000.0,
+ "gain": -4.599999904632568,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.6666666865348816,
+ "slope": "x1",
+ "solo": false,
+ "type": "Hi-shelf",
+ "width": 4.0
+ }
+ },
+ "mode": "IIR",
+ "num-bands": 10,
+ "output-gain": 3.9,
+ "pitch-left": 0.0,
+ "pitch-right": 0.0,
+ "right": {
+ "band0": {
+ "frequency": 105.0,
+ "gain": 3.0,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.6666666865348816,
+ "slope": "x1",
+ "solo": false,
+ "type": "Lo-shelf",
+ "width": 4.0
+ },
+ "band1": {
+ "frequency": 53.5,
+ "gain": -6.800000190734863,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.699999988079071,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band2": {
+ "frequency": 141.89999389648438,
+ "gain": -2.4000000953674316,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.7699999809265137,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band3": {
+ "frequency": 199.89999389648438,
+ "gain": 6.0,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.5,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band4": {
+ "frequency": 943.5,
+ "gain": -1.399999976158142,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 3.5,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band5": {
+ "frequency": 2352.89990234375,
+ "gain": -1.5,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 3.440000057220459,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band6": {
+ "frequency": 3523.5,
+ "gain": 4.800000190734863,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 3.859999895095825,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band7": {
+ "frequency": 5082.7001953125,
+ "gain": -3.5,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 4.53000020980835,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band8": {
+ "frequency": 6828.10009765625,
+ "gain": -3.9000000953674316,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 3.2799999713897705,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band9": {
+ "frequency": 10000.0,
+ "gain": -4.599999904632568,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.6666666865348816,
+ "slope": "x1",
+ "solo": false,
+ "type": "Hi-shelf",
+ "width": 4.0
+ }
+ },
+ "split-channels": false
+ },
+ "plugins_order": [
+ "equalizer#0"
+ ]
+ }
+}
diff --git a/hm/modules/linux/var/easyeffects/output/Default.json b/hm/modules/linux/var/easyeffects/output/Default.json
new file mode 100644
index 0000000..02e450d
--- /dev/null
+++ b/hm/modules/linux/var/easyeffects/output/Default.json
@@ -0,0 +1,243 @@
+{
+ "output": {
+ "blocklist": [],
+ "equalizer#0": {
+ "balance": 0.0,
+ "bypass": true,
+ "input-gain": -8.61,
+ "left": {
+ "band0": {
+ "frequency": 105.0,
+ "gain": -0.6000000238418579,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.699999988079071,
+ "slope": "x1",
+ "solo": false,
+ "type": "Lo-shelf",
+ "width": 4.0
+ },
+ "band1": {
+ "frequency": 50.0,
+ "gain": 3.9000000953674316,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.0399999618530273,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band2": {
+ "frequency": 135.6999969482422,
+ "gain": -1.5,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.149999976158142,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band3": {
+ "frequency": 361.3999938964844,
+ "gain": 3.0999999046325684,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.159999966621399,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band4": {
+ "frequency": 1135.300048828125,
+ "gain": -4.599999904632568,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.2200000286102295,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band5": {
+ "frequency": 2703.699951171875,
+ "gain": -3.799999952316284,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.799999952316284,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band6": {
+ "frequency": 3766.800048828125,
+ "gain": 9.399999618530273,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.8300000429153442,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band7": {
+ "frequency": 5260.39990234375,
+ "gain": 5.0,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 3.609999895095825,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band8": {
+ "frequency": 8775.2998046875,
+ "gain": -7.400000095367432,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.75,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band9": {
+ "frequency": 10000.0,
+ "gain": -2.299999952316284,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.699999988079071,
+ "slope": "x1",
+ "solo": false,
+ "type": "Hi-shelf",
+ "width": 4.0
+ }
+ },
+ "mode": "IIR",
+ "num-bands": 10,
+ "output-gain": 3.9,
+ "pitch-left": 0.0,
+ "pitch-right": 0.0,
+ "right": {
+ "band0": {
+ "frequency": 105.0,
+ "gain": -0.6000000238418579,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.699999988079071,
+ "slope": "x1",
+ "solo": false,
+ "type": "Lo-shelf",
+ "width": 4.0
+ },
+ "band1": {
+ "frequency": 50.0,
+ "gain": 3.9000000953674316,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.0399999618530273,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band2": {
+ "frequency": 135.6999969482422,
+ "gain": -1.5,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.149999976158142,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band3": {
+ "frequency": 361.3999938964844,
+ "gain": 3.0999999046325684,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.159999966621399,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band4": {
+ "frequency": 1135.300048828125,
+ "gain": -4.599999904632568,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.2200000286102295,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band5": {
+ "frequency": 2703.699951171875,
+ "gain": -3.799999952316284,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 2.799999952316284,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band6": {
+ "frequency": 3766.800048828125,
+ "gain": 9.399999618530273,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.8300000429153442,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band7": {
+ "frequency": 5260.39990234375,
+ "gain": 5.0,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 3.609999895095825,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band8": {
+ "frequency": 8775.2998046875,
+ "gain": -7.400000095367432,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 1.75,
+ "slope": "x1",
+ "solo": false,
+ "type": "Bell",
+ "width": 4.0
+ },
+ "band9": {
+ "frequency": 10000.0,
+ "gain": -2.299999952316284,
+ "mode": "APO (DR)",
+ "mute": false,
+ "q": 0.699999988079071,
+ "slope": "x1",
+ "solo": false,
+ "type": "Hi-shelf",
+ "width": 4.0
+ }
+ },
+ "split-channels": false
+ },
+ "plugins_order": [
+ "equalizer#0"
+ ]
+ }
+}
diff --git a/hm/modules/linux/var/settings.json b/hm/modules/linux/var/settings.json
new file mode 100644
index 0000000..e8db804
--- /dev/null
+++ b/hm/modules/linux/var/settings.json
@@ -0,0 +1,611 @@
+{
+ "autoUpdate": true,
+ "autoUpdateNotification": true,
+ "useQuickCss": true,
+ "themeLinks": [],
+ "enabledThemes": ["stylix.theme.css"],
+ "enableReactDevtools": false,
+ "frameless": false,
+ "transparent": false,
+ "winCtrlQ": false,
+ "disableMinSize": false,
+ "winNativeTitleBar": false,
+ "plugins": {
+ "ChatInputButtonAPI": {
+ "enabled": false
+ },
+ "CommandsAPI": {
+ "enabled": true
+ },
+ "MemberListDecoratorsAPI": {
+ "enabled": true
+ },
+ "MessageAccessoriesAPI": {
+ "enabled": true
+ },
+ "MessageDecorationsAPI": {
+ "enabled": true
+ },
+ "MessageEventsAPI": {
+ "enabled": true
+ },
+ "MessagePopoverAPI": {
+ "enabled": false
+ },
+ "MessageUpdaterAPI": {
+ "enabled": false
+ },
+ "ServerListAPI": {
+ "enabled": true
+ },
+ "UserSettingsAPI": {
+ "enabled": true
+ },
+ "AlwaysAnimate": {
+ "enabled": false
+ },
+ "AlwaysTrust": {
+ "enabled": true,
+ "domain": true,
+ "file": true
+ },
+ "AnonymiseFileNames": {
+ "enabled": true,
+ "anonymiseByDefault": true,
+ "method": 0,
+ "randomisedLength": 7
+ },
+ "AppleMusicRichPresence": {
+ "enabled": false
+ },
+ "WebRichPresence (arRPC)": {
+ "enabled": false
+ },
+ "AutomodContext": {
+ "enabled": false
+ },
+ "BANger": {
+ "enabled": false
+ },
+ "BetterFolders": {
+ "enabled": true,
+ "sidebar": true,
+ "showFolderIcon": 1,
+ "keepIcons": false,
+ "closeAllHomeButton": false,
+ "closeAllFolders": false,
+ "forceOpen": false,
+ "sidebarAnim": true
+ },
+ "BetterGifAltText": {
+ "enabled": false
+ },
+ "BetterGifPicker": {
+ "enabled": false
+ },
+ "BetterNotesBox": {
+ "enabled": false
+ },
+ "BetterRoleContext": {
+ "enabled": false
+ },
+ "BetterRoleDot": {
+ "enabled": true,
+ "bothStyles": false,
+ "copyRoleColorInProfilePopout": false
+ },
+ "BetterSessions": {
+ "enabled": true,
+ "backgroundCheck": false
+ },
+ "BetterSettings": {
+ "enabled": false,
+ "disableFade": true,
+ "eagerLoad": true
+ },
+ "BetterUploadButton": {
+ "enabled": false
+ },
+ "BiggerStreamPreview": {
+ "enabled": false
+ },
+ "BlurNSFW": {
+ "enabled": false
+ },
+ "CallTimer": {
+ "enabled": true
+ },
+ "ClearURLs": {
+ "enabled": true
+ },
+ "ClientTheme": {
+ "enabled": false
+ },
+ "ColorSighted": {
+ "enabled": false
+ },
+ "ConsoleJanitor": {
+ "enabled": false
+ },
+ "ConsoleShortcuts": {
+ "enabled": false
+ },
+ "CopyEmojiMarkdown": {
+ "enabled": false
+ },
+ "CopyUserURLs": {
+ "enabled": true
+ },
+ "CrashHandler": {
+ "enabled": true
+ },
+ "CtrlEnterSend": {
+ "enabled": false
+ },
+ "CustomRPC": {
+ "enabled": false
+ },
+ "CustomIdle": {
+ "enabled": false
+ },
+ "Dearrow": {
+ "enabled": false
+ },
+ "Decor": {
+ "enabled": false
+ },
+ "DisableCallIdle": {
+ "enabled": false
+ },
+ "DontRoundMyTimestamps": {
+ "enabled": false
+ },
+ "EmoteCloner": {
+ "enabled": false
+ },
+ "Experiments": {
+ "enabled": false
+ },
+ "F8Break": {
+ "enabled": false
+ },
+ "FakeNitro": {
+ "enabled": false
+ },
+ "FakeProfileThemes": {
+ "enabled": false
+ },
+ "FavoriteEmojiFirst": {
+ "enabled": false
+ },
+ "FavoriteGifSearch": {
+ "enabled": false
+ },
+ "FixCodeblockGap": {
+ "enabled": false
+ },
+ "FixSpotifyEmbeds": {
+ "enabled": false
+ },
+ "FixYoutubeEmbeds": {
+ "enabled": false
+ },
+ "ForceOwnerCrown": {
+ "enabled": false
+ },
+ "FriendInvites": {
+ "enabled": false
+ },
+ "FriendsSince": {
+ "enabled": false
+ },
+ "GameActivityToggle": {
+ "enabled": false
+ },
+ "GifPaste": {
+ "enabled": false
+ },
+ "GreetStickerPicker": {
+ "enabled": false
+ },
+ "HideAttachments": {
+ "enabled": false
+ },
+ "iLoveSpam": {
+ "enabled": false
+ },
+ "IgnoreActivities": {
+ "enabled": false
+ },
+ "ImageLink": {
+ "enabled": false
+ },
+ "ImageZoom": {
+ "enabled": false
+ },
+ "ImplicitRelationships": {
+ "enabled": false
+ },
+ "InvisibleChat": {
+ "enabled": false
+ },
+ "KeepCurrentChannel": {
+ "enabled": false
+ },
+ "LastFMRichPresence": {
+ "enabled": false
+ },
+ "LoadingQuotes": {
+ "enabled": false
+ },
+ "MaskedLinkPaste": {
+ "enabled": false
+ },
+ "MemberCount": {
+ "enabled": false
+ },
+ "MessageClickActions": {
+ "enabled": false
+ },
+ "MessageLatency": {
+ "enabled": false
+ },
+ "MessageLinkEmbeds": {
+ "enabled": false
+ },
+ "MessageLogger": {
+ "enabled": false
+ },
+ "MessageTags": {
+ "enabled": false
+ },
+ "MoreCommands": {
+ "enabled": false
+ },
+ "MoreKaomoji": {
+ "enabled": false
+ },
+ "MoreUserTags": {
+ "enabled": false
+ },
+ "Moyai": {
+ "enabled": false
+ },
+ "MutualGroupDMs": {
+ "enabled": false
+ },
+ "NewGuildSettings": {
+ "enabled": false
+ },
+ "NoBlockedMessages": {
+ "enabled": false
+ },
+ "NoDefaultHangStatus": {
+ "enabled": false
+ },
+ "NoDevtoolsWarning": {
+ "enabled": false
+ },
+ "NoF1": {
+ "enabled": false
+ },
+ "NoMosaic": {
+ "enabled": false
+ },
+ "NoOnboardingDelay": {
+ "enabled": false
+ },
+ "NoPendingCount": {
+ "enabled": false
+ },
+ "NoProfileThemes": {
+ "enabled": false
+ },
+ "NoReplyMention": {
+ "enabled": false
+ },
+ "NoScreensharePreview": {
+ "enabled": false
+ },
+ "NoServerEmojis": {
+ "enabled": false
+ },
+ "NoTypingAnimation": {
+ "enabled": false
+ },
+ "NoUnblockToJump": {
+ "enabled": false
+ },
+ "NormalizeMessageLinks": {
+ "enabled": false
+ },
+ "NotificationVolume": {
+ "enabled": false
+ },
+ "NSFWGateBypass": {
+ "enabled": false
+ },
+ "OnePingPerDM": {
+ "enabled": false
+ },
+ "oneko": {
+ "enabled": false
+ },
+ "OpenInApp": {
+ "enabled": false
+ },
+ "OverrideForumDefaults": {
+ "enabled": false
+ },
+ "PartyMode": {
+ "enabled": false
+ },
+ "PauseInvitesForever": {
+ "enabled": false
+ },
+ "PermissionFreeWill": {
+ "enabled": false
+ },
+ "PermissionsViewer": {
+ "enabled": false
+ },
+ "petpet": {
+ "enabled": false
+ },
+ "PictureInPicture": {
+ "enabled": false
+ },
+ "PinDMs": {
+ "enabled": false
+ },
+ "PlainFolderIcon": {
+ "enabled": false
+ },
+ "PlatformIndicators": {
+ "enabled": true
+ },
+ "PreviewMessage": {
+ "enabled": false
+ },
+ "QuickMention": {
+ "enabled": false
+ },
+ "QuickReply": {
+ "enabled": false
+ },
+ "ReactErrorDecoder": {
+ "enabled": false
+ },
+ "ReadAllNotificationsButton": {
+ "enabled": true
+ },
+ "RelationshipNotifier": {
+ "enabled": false
+ },
+ "ReplaceGoogleSearch": {
+ "enabled": false
+ },
+ "ReplyTimestamp": {
+ "enabled": false
+ },
+ "RevealAllSpoilers": {
+ "enabled": false
+ },
+ "ReverseImageSearch": {
+ "enabled": false
+ },
+ "ReviewDB": {
+ "enabled": false
+ },
+ "RoleColorEverywhere": {
+ "enabled": false
+ },
+ "SecretRingToneEnabler": {
+ "enabled": false
+ },
+ "Summaries": {
+ "enabled": false
+ },
+ "SendTimestamps": {
+ "enabled": false
+ },
+ "ServerInfo": {
+ "enabled": false
+ },
+ "ServerListIndicators": {
+ "enabled": false
+ },
+ "ShikiCodeblocks": {
+ "enabled": false
+ },
+ "ShowAllMessageButtons": {
+ "enabled": false
+ },
+ "ShowConnections": {
+ "enabled": false
+ },
+ "ShowHiddenChannels": {
+ "enabled": true,
+ "showMode": 0,
+ "hideUnreads": true
+ },
+ "ShowHiddenThings": {
+ "enabled": true,
+ "showTimeouts": true,
+ "showInvitesPaused": true,
+ "showModView": true,
+ "disableDiscoveryFilters": true,
+ "disableDisallowedDiscoveryFilters": true
+ },
+ "ShowMeYourName": {
+ "enabled": false
+ },
+ "ShowTimeoutDuration": {
+ "enabled": false
+ },
+ "SilentMessageToggle": {
+ "enabled": false
+ },
+ "SilentTyping": {
+ "enabled": false
+ },
+ "SortFriendRequests": {
+ "enabled": false
+ },
+ "SpotifyControls": {
+ "enabled": true,
+ "hoverControls": false
+ },
+ "SpotifyCrack": {
+ "enabled": false
+ },
+ "SpotifyShareCommands": {
+ "enabled": false
+ },
+ "StartupTimings": {
+ "enabled": false
+ },
+ "StreamerModeOnStream": {
+ "enabled": false
+ },
+ "SuperReactionTweaks": {
+ "enabled": false
+ },
+ "TextReplace": {
+ "enabled": false
+ },
+ "ThemeAttributes": {
+ "enabled": false
+ },
+ "TimeBarAllActivities": {
+ "enabled": false
+ },
+ "Translate": {
+ "enabled": false
+ },
+ "TypingIndicator": {
+ "enabled": false
+ },
+ "TypingTweaks": {
+ "enabled": false
+ },
+ "Unindent": {
+ "enabled": false
+ },
+ "UnlockedAvatarZoom": {
+ "enabled": false
+ },
+ "UnsuppressEmbeds": {
+ "enabled": false
+ },
+ "UserVoiceShow": {
+ "enabled": false
+ },
+ "USRBG": {
+ "enabled": false
+ },
+ "ValidReply": {
+ "enabled": false
+ },
+ "ValidUser": {
+ "enabled": false
+ },
+ "VoiceChatDoubleClick": {
+ "enabled": false
+ },
+ "VcNarrator": {
+ "enabled": false
+ },
+ "VencordToolbox": {
+ "enabled": false
+ },
+ "ViewIcons": {
+ "enabled": false
+ },
+ "ViewRaw": {
+ "enabled": false
+ },
+ "VoiceDownload": {
+ "enabled": false
+ },
+ "VoiceMessages": {
+ "enabled": false
+ },
+ "WebKeybinds": {
+ "enabled": true
+ },
+ "WebScreenShareFixes": {
+ "enabled": true
+ },
+ "WhoReacted": {
+ "enabled": false
+ },
+ "XSOverlay": {
+ "enabled": false
+ },
+ "NoTrack": {
+ "enabled": true,
+ "disableAnalytics": true
+ },
+ "WebContextMenus": {
+ "enabled": true,
+ "addBack": true
+ },
+ "Settings": {
+ "enabled": true,
+ "settingsLocation": "aboveNitro"
+ },
+ "SupportHelper": {
+ "enabled": true
+ },
+ "YoutubeAdblock": {
+ "enabled": true
+ },
+ "AlwaysExpandRoles": {
+ "enabled": false
+ },
+ "FullSearchContext": {
+ "enabled": false
+ },
+ "UserMessagesPronouns": {
+ "enabled": false
+ },
+ "DynamicImageModalAPI": {
+ "enabled": false
+ },
+ "AccountPanelServerProfile": {
+ "enabled": false
+ },
+ "CopyFileContents": {
+ "enabled": false
+ },
+ "FixImagesQuality": {
+ "enabled": false
+ },
+ "MentionAvatars": {
+ "enabled": false
+ },
+ "NoMaskedUrlPaste": {
+ "enabled": false
+ },
+ "StickerPaste": {
+ "enabled": false
+ },
+ "VolumeBooster": {
+ "enabled": false
+ }
+ },
+ "notifications": {
+ "timeout": 5000,
+ "position": "bottom-right",
+ "useNative": "not-focused",
+ "logLimit": 50
+ },
+ "cloud": {
+ "authenticated": false,
+ "url": "https://api.vencord.dev/",
+ "settingsSync": false,
+ "settingsSyncVersion": 1731210778467
+ }
+}
+
diff --git a/hosts/demeter/default.nix b/hosts/demeter/default.nix
deleted file mode 100644
index 93b71aa..0000000
--- a/hosts/demeter/default.nix
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- inputs,
- ...
-}:
-{
- imports =
- [
- ./configuration.nix
- ../../modules/linux
- ../../overlays
- {
- home-manager.useGlobalPkgs = true;
- home-manager.useUserPackages = true;
- home-manager.backupFileExtension = "backup";
- home-manager.extraSpecialArgs = {
- inherit inputs;
- };
- home-manager.users.youwen = {
- imports =
- [
- ../../users/youwen/linux/laptop
- ../../users/youwen/linux/packages/x86_64
- ../../users/youwen/linux/programs
- (import ../../users/youwen/common/fastfetch { })
- ../../users/youwen/common
- ../../users/youwen/linux/spicetify
- ./home-manager-extras
- ]
- ++ (with inputs; [
- nix-index-database.hmModules.nix-index
- ]);
- };
- }
- ]
- ++ (with inputs; [
- lanzaboote.nixosModules.lanzaboote
- home-manager.nixosModules.home-manager
- ]);
-}
diff --git a/modules/linux/audio/default.nix b/modules/linux/audio/default.nix
index a1e1ab6..c91d9aa 100755
--- a/modules/linux/audio/default.nix
+++ b/modules/linux/audio/default.nix
@@ -20,6 +20,7 @@ in
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = true;
+ wireplumber.enable = true;
};
};
}
diff --git a/modules/linux/desktop-environment/default.nix b/modules/linux/desktop-environment/default.nix
index 734506a..b6efc97 100644
--- a/modules/linux/desktop-environment/default.nix
+++ b/modules/linux/desktop-environment/default.nix
@@ -9,7 +9,13 @@ let
in
{
options.liminalOS.desktop = {
- enable = lib.mkEnableOption "liminalOS desktop environment with Hyprland and other utilities";
+ enable = lib.mkOption {
+ type = lib.types.bool;
+ default = config.liminalOS.enable;
+ description = ''
+ Whether to enable the liminalOS desktop environment.
+ '';
+ };
hyprland.enable = lib.mkOption {
type = lib.types.bool;
default = cfg.enable;
diff --git a/modules/linux/flatpak/default.nix b/modules/linux/flatpak/default.nix
index 417d9f4..6c65c41 100644
--- a/modules/linux/flatpak/default.nix
+++ b/modules/linux/flatpak/default.nix
@@ -27,6 +27,7 @@ in
};
config = lib.mkIf cfg.enable {
+ xdg.portal.enable = true;
services.flatpak = {
enable = true;
diff --git a/modules/linux/misc/default.nix b/modules/linux/misc/default.nix
index 7e93c75..b23d6ce 100644
--- a/modules/linux/misc/default.nix
+++ b/modules/linux/misc/default.nix
@@ -55,9 +55,21 @@ in
default = pkgs.neovim;
description = "Default text editor that will be installed and set as $EDITOR. Set to null to disable setting and installing default text editor.";
};
+ formFactor = lib.mkOption {
+ type = lib.types.nullOr (
+ lib.types.enum [
+ "laptop"
+ "desktop"
+ ]
+ );
+ default = null;
+ description = ''
+ Form factor of the machine. Adjusts some UI settings.
+ '';
+ };
};
- config = {
+ config = lib.mkIf cfg.enable {
services.printing.enable = mkIf cfg.system.printing.enable true;
services.avahi = mkIf cfg.system.printing.enable {
@@ -113,5 +125,14 @@ in
LC_TIME = "en_US.UTF-8";
};
};
+
+ assertions = [
+ {
+ assertion = cfg.formFactor != null;
+ message = ''
+ You must set `liminalOS.formFactor` to either "laptop" or "desktop"!
+ '';
+ }
+ ];
};
}
diff --git a/modules/linux/networking/default.nix b/modules/linux/networking/default.nix
index 58c7473..7f898e5 100755
--- a/modules/linux/networking/default.nix
+++ b/modules/linux/networking/default.nix
@@ -19,7 +19,13 @@ let
in
{
options.liminalOS.system.networking = {
- enable = lib.mkEnableOption "networking";
+ enable = lib.mkOption {
+ type = lib.types.bool;
+ default = config.liminalOS.enable;
+ description = ''
+ Whether to enable networking features.
+ '';
+ };
firewallPresets = {
grimDawn = lib.mkEnableOption "firewall ports for Grim Dawn";
vite = lib.mkEnableOption "firewall ports for Vite";
diff --git a/modules/linux/stylix/default.nix b/modules/linux/stylix/default.nix
index cc46bfb..52bf4db 100644
--- a/modules/linux/stylix/default.nix
+++ b/modules/linux/stylix/default.nix
@@ -10,7 +10,13 @@ let
in
{
options.liminalOS.theming = {
- enable = lib.mkEnableOption "theming";
+ enable = lib.mkOption {
+ type = lib.types.bool;
+ default = config.liminalOS.enable;
+ description = ''
+ Whether to uniformly theme the entire system using Stylix.
+ '';
+ };
plymouth.enable = lib.mkOption {
type = lib.types.bool;
default = cfg.enable;
diff --git a/hosts/adrastea/configuration.nix b/reference/hosts/adrastea/configuration.nix
similarity index 100%
rename from hosts/adrastea/configuration.nix
rename to reference/hosts/adrastea/configuration.nix
diff --git a/hosts/adrastea/default.nix b/reference/hosts/adrastea/default.nix
similarity index 100%
rename from hosts/adrastea/default.nix
rename to reference/hosts/adrastea/default.nix
diff --git a/hosts/adrastea/hardware-configuration.nix b/reference/hosts/adrastea/hardware-configuration.nix
similarity index 100%
rename from hosts/adrastea/hardware-configuration.nix
rename to reference/hosts/adrastea/hardware-configuration.nix
diff --git a/hosts/adrastea/home-manager-extras/default.nix b/reference/hosts/adrastea/home-manager-extras/default.nix
similarity index 100%
rename from hosts/adrastea/home-manager-extras/default.nix
rename to reference/hosts/adrastea/home-manager-extras/default.nix
diff --git a/hosts/callisto/configuration.nix b/reference/hosts/callisto/configuration.nix
similarity index 100%
rename from hosts/callisto/configuration.nix
rename to reference/hosts/callisto/configuration.nix
diff --git a/hosts/callisto/default.nix b/reference/hosts/callisto/default.nix
similarity index 100%
rename from hosts/callisto/default.nix
rename to reference/hosts/callisto/default.nix
diff --git a/hosts/callisto/hardware-configuration.nix b/reference/hosts/callisto/hardware-configuration.nix
similarity index 100%
rename from hosts/callisto/hardware-configuration.nix
rename to reference/hosts/callisto/hardware-configuration.nix
diff --git a/hosts/callisto/home-manager-extras/default.nix b/reference/hosts/callisto/home-manager-extras/default.nix
similarity index 100%
rename from hosts/callisto/home-manager-extras/default.nix
rename to reference/hosts/callisto/home-manager-extras/default.nix
diff --git a/hosts/callisto/home-manager-extras/neofetch-asahi.conf b/reference/hosts/callisto/home-manager-extras/neofetch-asahi.conf
similarity index 100%
rename from hosts/callisto/home-manager-extras/neofetch-asahi.conf
rename to reference/hosts/callisto/home-manager-extras/neofetch-asahi.conf
diff --git a/hosts/cassini/configuration.nix b/reference/hosts/cassini/configuration.nix
similarity index 100%
rename from hosts/cassini/configuration.nix
rename to reference/hosts/cassini/configuration.nix
diff --git a/hosts/cassini/default.nix b/reference/hosts/cassini/default.nix
similarity index 100%
rename from hosts/cassini/default.nix
rename to reference/hosts/cassini/default.nix
diff --git a/hosts/cassini/hardware-configuration.nix b/reference/hosts/cassini/hardware-configuration.nix
similarity index 100%
rename from hosts/cassini/hardware-configuration.nix
rename to reference/hosts/cassini/hardware-configuration.nix
diff --git a/hosts/cassini/home-manager-extras/default.nix b/reference/hosts/cassini/home-manager-extras/default.nix
similarity index 100%
rename from hosts/cassini/home-manager-extras/default.nix
rename to reference/hosts/cassini/home-manager-extras/default.nix
diff --git a/hosts/demeter/configuration.nix b/reference/hosts/demeter/configuration.nix
similarity index 91%
rename from hosts/demeter/configuration.nix
rename to reference/hosts/demeter/configuration.nix
index 7183610..aa63bad 100755
--- a/hosts/demeter/configuration.nix
+++ b/reference/hosts/demeter/configuration.nix
@@ -2,10 +2,8 @@
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running ‘nixos-help’).
{
- config,
inputs,
pkgs,
- lib,
...
}:
{
@@ -20,20 +18,15 @@
flakeLocation = "/home/youwen/.config/liminalOS";
config.allowUnfree = true;
defaultEditor = inputs.viminal.packages.${pkgs.system}.default;
+ formFactor = "desktop";
system = {
audio.prod.enable = true;
networking = {
- enable = true;
firewallPresets.vite = true;
cloudflareNameservers.enable = true;
};
- graphics = {
- enable = true;
- nvidia.enable = true;
- };
+ graphics.nvidia.enable = true;
};
- theming.enable = true;
- desktop.enable = true;
extras.gaming = {
enable = true;
roblox.enable = true;
@@ -42,7 +35,6 @@
gamemodeUsers = [ "youwen" ];
};
};
- programs.flatpak.enable = true;
};
time.timeZone = "America/Los_Angeles";
diff --git a/reference/hosts/demeter/default.nix b/reference/hosts/demeter/default.nix
new file mode 100644
index 0000000..279603c
--- /dev/null
+++ b/reference/hosts/demeter/default.nix
@@ -0,0 +1,21 @@
+{
+ inputs,
+ ...
+}:
+{
+ imports =
+ [
+ ./configuration.nix
+ ../../../modules/linux
+ ../../../hm
+ ../../../overlays
+ {
+ home-manager.users.youwen = {
+ imports = [ ./home.nix ];
+ };
+ }
+ ]
+ ++ (with inputs; [
+ lanzaboote.nixosModules.lanzaboote
+ ]);
+}
diff --git a/hosts/demeter/hardware-configuration.nix b/reference/hosts/demeter/hardware-configuration.nix
similarity index 100%
rename from hosts/demeter/hardware-configuration.nix
rename to reference/hosts/demeter/hardware-configuration.nix
diff --git a/hosts/demeter/home-manager-extras/default.nix b/reference/hosts/demeter/home.nix
similarity index 64%
rename from hosts/demeter/home-manager-extras/default.nix
rename to reference/hosts/demeter/home.nix
index 92e69ee..cc62b90 100644
--- a/hosts/demeter/home-manager-extras/default.nix
+++ b/reference/hosts/demeter/home.nix
@@ -1,10 +1,13 @@
+{ lib, ... }:
{
- lib,
- ...
-}:
-{
+ imports = [
+ ../../../hm/modules
+ ../../users/youwen
+ ];
+
+ home.stateVersion = "24.05";
+
wayland.windowManager.hyprland.settings.monitor = [
- # "DP-1,2560x1440@165,1920x0,auto"
"DP-1,2560x1440@144,1920x0,auto"
"HDMI-A-1,1920x1080@60,0x0,1"
];
diff --git a/hosts/phobos/configuration.nix b/reference/hosts/phobos/configuration.nix
similarity index 100%
rename from hosts/phobos/configuration.nix
rename to reference/hosts/phobos/configuration.nix
diff --git a/hosts/phobos/default.nix b/reference/hosts/phobos/default.nix
similarity index 100%
rename from hosts/phobos/default.nix
rename to reference/hosts/phobos/default.nix
diff --git a/reference/users/youwen/default.nix b/reference/users/youwen/default.nix
new file mode 100644
index 0000000..a133346
--- /dev/null
+++ b/reference/users/youwen/default.nix
@@ -0,0 +1,23 @@
+{
+ imports = [
+ ../../../hm/modules
+ ];
+
+ home = {
+ username = "youwen";
+ homeDirectory = "/home/youwen";
+ };
+
+ liminalOS = {
+ utils.easyeffects.enable = true;
+ };
+
+ programs.git = {
+ userName = "Youwen Wu";
+ userEmail = "youwenw@gmail.com";
+ signing = {
+ signByDefault = true;
+ key = "8F5E6C1AF90976CA7102917A865658ED1FE61EC3";
+ };
+ };
+}