diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..6a2591a --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Lennart J. Kurzweg + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..68be3ff --- /dev/null +++ b/README.md @@ -0,0 +1,46 @@ +# ❄️ NixOS Dotfiles + +![Screenshot of my desktop](splash.png) + +## Information + +- Using stable + unstable via flakes +- Multi-host config (Desktop, Laptop, Server) +- Using home-manager for home-configuration +- Using sops-nix with GPG + git-crypt for secrets + +## Features: +- The WM Hyperland extended to more or less full a DE with + - automounting + - notifications + - a bar + - gesture control + - runner + - ... +- Virtualization support + - docker + - virt-manager +- Multilingual typing with Fcitx5 +- Fully functioning Nvidia/Nvidia Prime support +- Fully customized editor `helix` +- Locally running LLM-server with tools written around it +- Fully themed ("riced") via a custom, intentionally semi-automatic, adaptive system responding to wallpaper color + - as can be seen in `flake-modules/rice.nix` +- Next-Gen shell experience with + - fish + - starship + - zoxide + - yazi + - direnv + - lazygit + lazydocker + +## Thanks to +- [LibrePhoenix](https://www.youtube.com/@librephoenix) for getting me started +- [VimJoyer](https://www.youtube.com/@vimjoyer) for making quick NixOS tutorials on many topics +- Everyone that talks about NixOS in NixOS-forums and rooms instead of politics +- [Everyone that put up their code on Github](https://github.com/search?type=code&auto_enroll=true&q=language%3Anix) for me to reference + +## Licensing +- The code found in this Repository is Licensed under the MIT-license +- I've decided against the GPLv3, since I am not going to sue anyone over this, but +- I encourage everyone to open source their work for anyone to at least reference diff --git a/configuration.nix b/configuration.nix index 4febb5b..51b5acd 100755 --- a/configuration.nix +++ b/configuration.nix @@ -11,26 +11,33 @@ ./system-modules/fonts.nix ./system-modules/boot.nix ./system-modules/gc.nix + ./system-modules/boot.nix ./system-modules/dm.nix - ./system-modules/networking.nix - ./system-modules/virtualisation.nix - ./system-modules/sshd.nix - ./system-modules/gpg.nix - ./system-modules/sops.nix - ./system-modules/syncthing.nix - ./system-modules/hsmw.nix ./system-modules/docker.nix + ./system-modules/fcitx5.nix + ./system-modules/fonts.nix + ./system-modules/fuse.nix + ./system-modules/gc.nix + ./system-modules/gpg.nix + ./system-modules/hardware-configuration.nix ./system-modules/health_reminder.nix - ./system-modules/ydotool.nix - ./system-modules/ollama.nix - ./system-modules/nx2site.nix + ./system-modules/hsmw.nix + ./system-modules/kanata.nix ./system-modules/kodi.nix + ./system-modules/networking.nix + ./system-modules/nvidia.nix + ./system-modules/nx2site.nix + ./system-modules/ollama.nix ./system-modules/qmk.nix + ./system-modules/sops.nix + ./system-modules/sound.nix + ./system-modules/sshd.nix + ./system-modules/syncthing.nix + ./system-modules/users.nix + ./system-modules/virtualisation.nix + ./system-modules/ydotool.nix ]; - - - # Set your time zone. time.timeZone = "Europe/Berlin"; @@ -70,8 +77,8 @@ # $ nix search wget environment.systemPackages = with pkgs; ([ git - lazygit # home-manager module is bugged git-crypt + lazygit # home-manager module is bugged wget curl zip @@ -79,7 +86,6 @@ p7zip unar nano - micro htop direnv openssl diff --git a/flake-modules/colors.json b/flake-modules/colors.json new file mode 100644 index 0000000..7421d63 --- /dev/null +++ b/flake-modules/colors.json @@ -0,0 +1,13 @@ +{ + "base": { + "foreground": "#eedce2", + "background": "#221016" + }, + "to_alter": { + "accent": "#ac5271", + "secondary": "#f20c5b", + "tertiary": "#d5a287", + "special": "#51ac8d", + "weird": "#0cf2a3" + } +} \ No newline at end of file diff --git a/flake-modules/rice.nix b/flake-modules/rice.nix index cfc907b..1be0f5f 100644 --- a/flake-modules/rice.nix +++ b/flake-modules/rice.nix @@ -12,30 +12,34 @@ pkgs: rec { bright = (0.5); alter-set = let f = lib.alter-luminace-hex; in color-name: color-value: { base = color-value; dark = f color-value dark; bright = f color-value bright; }; alter = let f = lib.alter-luminace-hex; in color-value: { base = color-value; dark = f color-value dark; bright = f color-value bright; }; + # ccolor = builtins.mapAttrs alter-set (builtins.fromJSON (builtins.readFile ./colors.json)); ccolor = builtins.mapAttrs alter-set { - black = "#000022"; # "#111111" "#001100"; - white = "#ddddff"; # "#dddddd" "#66dd66"; - blue = "#4422ff"; # "#3333dd" "#003300"; - cyan = "#11dddd"; # "#11dddd" "#00dd55"; - green = "#11dd44"; # "#11dd11" "#11dd11"; - magenta = "#6622dd"; # "#dd11dd" "#005500"; - red = "#dd1166"; # "#dd1111" "#00aa00"; - yellow = "#dd6611"; # "#dddd11" "#ffff00"; + black = "#111111"; # "#111111" "#001100"; + white = "#dddddd"; # "#dddddd" "#66dd66"; + blue = "#4444dd"; # "#3333dd" "#003300"; + cyan = "#44dddd"; # "#11dddd" "#00dd55"; + green = "#44dd44"; # "#11dd11" "#11dd11"; + magenta = "#dd44dd"; # "#dd11dd" "#005500"; + red = "#dd4444"; # "#dd1111" "#00aa00"; + yellow = "#dd4444"; # "#dddd11" "#ffff00"; }; - xcolor = with ccolor; rec { - background = black.dark; - foreground = white.base; - border = red.base; - border2 = blue.base; - accent = blue; - secondary = cyan; - tertiary = magenta; - special = yellow; - weird = green; + facolor = builtins.mapAttrs alter-set (builtins.fromJSON (builtins.readFile ./colors.json)).to_alter; + fbcolor = (builtins.fromJSON (builtins.readFile ./colors.json)).base; + fcolor = facolor // fbcolor; + xcolor = with ccolor; with fcolor; rec { + background = "#000000"; + # foreground = "#dddddd"; + # accent = blue; + # secondary = cyan; + # tertiary = magenta; + # special = yellow; + # weird = green; positive = alter "#00dd00"; negative = alter "#dd0000"; + border = accent.base; + border2 = secondary.base; }; - in ccolor // xcolor; + in ccolor // fcolor // xcolor; font = { code = { name = "JetBrainsMono-NF"; diff --git a/flake.lock b/flake.lock index c6b12b7..97d7f9c 100755 --- a/flake.lock +++ b/flake.lock @@ -576,6 +576,22 @@ "type": "indirect" } }, + "nixpkgs_5": { + "locked": { + "lastModified": 1724479785, + "narHash": "sha256-pP3Azj5d6M5nmG68Fu4JqZmdGt4S4vqI5f8te+E/FTw=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "d0e1602ddde669d5beb01aec49d71a51937ed7be", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "pre-commit-hooks-nix": { "inputs": { "flake-compat": [ @@ -618,7 +634,8 @@ "nixpkgs": "nixpkgs_4", "nixpkgs-latest": "nixpkgs-latest", "nixpkgs-unstable": "nixpkgs-unstable", - "sops-nix": "sops-nix" + "sops-nix": "sops-nix", + "zen-browser": "zen-browser" } }, "rust-overlay": { @@ -726,6 +743,24 @@ "repo": "xdg-desktop-portal-hyprland", "type": "github" } + }, + "zen-browser": { + "inputs": { + "nixpkgs": "nixpkgs_5" + }, + "locked": { + "lastModified": 1724745035, + "narHash": "sha256-WhTJaCw0XDR9gAQ6uEIMkT7bKsHXBafj1GJnRsWXHpk=", + "owner": "MarceColl", + "repo": "zen-browser-flake", + "rev": "723039271547eb4c648e5bd774e2f7bc73564b16", + "type": "github" + }, + "original": { + "owner": "MarceColl", + "repo": "zen-browser-flake", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 8866fa9..c8ab3a0 100755 --- a/flake.nix +++ b/flake.nix @@ -15,6 +15,7 @@ hyprswitch = { url = "github:h3rmt/hyprswitch/release"; }; # firefox-addons = { url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons"; inputs.nixpkgs.follows = "nixpkgs"; }; + zen-browser.url = "github:MarceColl/zen-browser-flake"; }; outputs = { self, nixpkgs, nixpkgs-unstable, nixpkgs-latest, home-manager, ... }@inputs: let diff --git a/home-modules/discord.nix b/home-modules/discord.nix index 8d99f71..e08eec0 100755 --- a/home-modules/discord.nix +++ b/home-modules/discord.nix @@ -6,8 +6,7 @@ lib.mkIf (host != "NxACE") vesktop ]; - file.".config/vesktop/settings/settings.json".text = '' - { + file.".config/vesktop/settings/settings.json".text = /* json */ ''{ "notifyAboutUpdates": true, "autoUpdate": false, "autoUpdateNotification": true, @@ -24,455 +23,160 @@ lib.mkIf (host != "NxACE") "disableMinSize": false, "winNativeTitleBar": false, "plugins": { - "BadgeAPI": { - "enabled": true - }, - "CommandsAPI": { - "enabled": true - }, - "ContextMenuAPI": { - "enabled": true - }, - "MemberListDecoratorsAPI": { - "enabled": false - }, - "MessageAccessoriesAPI": { - "enabled": false - }, - "MessageDecorationsAPI": { - "enabled": false - }, - "MessageEventsAPI": { - "enabled": false - }, - "MessagePopoverAPI": { - "enabled": false - }, - "NoticesAPI": { - "enabled": true - }, - "ServerListAPI": { - "enabled": false - }, - "NoTrack": { - "enabled": true - }, + "BadgeAPI": { "enabled": true }, + "CommandsAPI": { "enabled": true }, + "ContextMenuAPI": { "enabled": true }, + "MemberListDecoratorsAPI": { "enabled": false }, + "MessageAccessoriesAPI": { "enabled": false }, + "MessageDecorationsAPI": { "enabled": false }, + "MessageEventsAPI": { "enabled": false }, + "MessagePopoverAPI": { "enabled": false }, + "NoticesAPI": { "enabled": true }, + "ServerListAPI": { "enabled": false }, + "NoTrack": { "enabled": true }, "Settings": { "enabled": true, "settingsLocation": "aboveActivity" }, - "SupportHelper": { - "enabled": true - }, - "ChatInputButtonAPI": { - "enabled": false - }, - "AlwaysAnimate": { - "enabled": true - }, - "AlwaysTrust": { - "enabled": true - }, - "AnonymiseFileNames": { - "enabled": false - }, - "WebRichPresence (arRPC)": { - "enabled": false - }, - "BANger": { - "enabled": false - }, - "BetterFolders": { - "enabled": false - }, - "BetterGifAltText": { - "enabled": false - }, - "BetterGifPicker": { - "enabled": false - }, - "BetterNotesBox": { - "enabled": false - }, - "BetterRoleDot": { - "enabled": false - }, - "BetterUploadButton": { - "enabled": false - }, - "BiggerStreamPreview": { - "enabled": false - }, - "BlurNSFW": { - "enabled": false - }, - "CallTimer": { - "enabled": false - }, - "ClearURLs": { - "enabled": false - }, - "ClientTheme": { - "enabled": false - }, - "ColorSighted": { - "enabled": false - }, - "ConsoleShortcuts": { - "enabled": false - }, - "CopyUserURLs": { - "enabled": false - }, - "CrashHandler": { - "enabled": true - }, - "CustomRPC": { - "enabled": false - }, - "Dearrow": { - "enabled": false - }, - "Decor": { - "enabled": false - }, - "DisableCallIdle": { - "enabled": false - }, - "EmoteCloner": { - "enabled": false - }, - "Experiments": { - "enabled": false - }, - "F8Break": { - "enabled": false - }, - "FakeNitro": { - "enabled": false - }, - "FakeProfileThemes": { - "enabled": true - }, - "FavoriteEmojiFirst": { - "enabled": false - }, - "FavoriteGifSearch": { - "enabled": false - }, - "FixCodeblockGap": { - "enabled": false - }, - "FixSpotifyEmbeds": { - "enabled": false - }, - "FixYoutubeEmbeds": { - "enabled": false - }, - "ForceOwnerCrown": { - "enabled": false - }, - "FriendInvites": { - "enabled": false - }, - "GameActivityToggle": { - "enabled": false - }, - "GifPaste": { - "enabled": false - }, - "GreetStickerPicker": { - "enabled": false - }, - "HideAttachments": { - "enabled": false - }, - "iLoveSpam": { - "enabled": false - }, - "IgnoreActivities": { - "enabled": false - }, - "ImageZoom": { - "enabled": false - }, - "InvisibleChat": { - "enabled": false - }, - "KeepCurrentChannel": { - "enabled": false - }, - "LastFMRichPresence": { - "enabled": false - }, - "LoadingQuotes": { - "enabled": false - }, - "MemberCount": { - "enabled": false - }, - "MessageClickActions": { - "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 - }, - "NoDevtoolsWarning": { - "enabled": false - }, - "NoF1": { - "enabled": false - }, - "NoMosaic": { - "enabled": false - }, - "NoPendingCount": { - "enabled": false - }, - "NoProfileThemes": { - "enabled": false - }, - "NoReplyMention": { - "enabled": false - }, - "NoScreensharePreview": { - "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 - }, - "Party mode πŸŽ‰": { - "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 - }, - "PronounDB": { - "enabled": false - }, - "QuickMention": { - "enabled": false - }, - "QuickReply": { - "enabled": false - }, - "ReactErrorDecoder": { - "enabled": false - }, - "ReadAllNotificationsButton": { - "enabled": false - }, - "RelationshipNotifier": { - "enabled": false - }, - "RevealAllSpoilers": { - "enabled": false - }, - "ReverseImageSearch": { - "enabled": false - }, - "ReviewDB": { - "enabled": false - }, - "RoleColorEverywhere": { - "enabled": true - }, - "SearchReply": { - "enabled": false - }, - "SecretRingToneEnabler": { - "enabled": false - }, - "SendTimestamps": { - "enabled": false - }, - "ServerListIndicators": { - "enabled": false - }, - "ServerProfile": { - "enabled": false - }, - "ShikiCodeblocks": { - "enabled": false - }, - "ShowAllMessageButtons": { - "enabled": false - }, - "ShowConnections": { - "enabled": false - }, - "ShowHiddenChannels": { - "enabled": false - }, - "ShowMeYourName": { - "enabled": false - }, - "ShowTimeouts": { - "enabled": false - }, - "SilentMessageToggle": { - "enabled": false - }, - "SilentTyping": { - "enabled": false - }, - "SortFriendRequests": { - "enabled": false - }, - "SpotifyControls": { - "enabled": false - }, - "SpotifyCrack": { - "enabled": false - }, - "SpotifyShareCommands": { - "enabled": false - }, - "StartupTimings": { - "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 - }, - "UnsuppressEmbeds": { - "enabled": false - }, - "UrbanDictionary": { - "enabled": false - }, - "UserVoiceShow": { - "enabled": false - }, - "USRBG": { - "enabled": false - }, - "ValidUser": { - "enabled": false - }, - "VoiceChatDoubleClick": { - "enabled": false - }, - "VcNarrator": { - "enabled": false - }, - "VencordToolbox": { - "enabled": false - }, - "ViewIcons": { - "enabled": false - }, - "ViewRaw": { - "enabled": false - }, - "VoiceMessages": { - "enabled": false - }, + "SupportHelper": { "enabled": true }, + "ChatInputButtonAPI": { "enabled": false }, + "AlwaysAnimate": { "enabled": true }, + "AlwaysTrust": { "enabled": true }, + "AnonymiseFileNames": { "enabled": false }, + "WebRichPresence (arRPC)": { "enabled": false }, + "BANger": { "enabled": false }, + "BetterFolders": { "enabled": false }, + "BetterGifAltText": { "enabled": false }, + "BetterGifPicker": { "enabled": false }, + "BetterNotesBox": { "enabled": false }, + "BetterRoleDot": { "enabled": false }, + "BetterUploadButton": { "enabled": false }, + "BiggerStreamPreview": { "enabled": false }, + "BlurNSFW": { "enabled": false }, + "CallTimer": { "enabled": false }, + "ClearURLs": { "enabled": false }, + "ClientTheme": { "enabled": false }, + "ColorSighted": { "enabled": false }, + "ConsoleShortcuts": { "enabled": false }, + "CopyUserURLs": { "enabled": false }, + "CrashHandler": { "enabled": true }, + "CustomRPC": { "enabled": false }, + "Dearrow": { "enabled": false }, + "Decor": { "enabled": false }, + "DisableCallIdle": { "enabled": false }, + "EmoteCloner": { "enabled": false }, + "Experiments": { "enabled": false }, + "F8Break": { "enabled": false }, + "FakeNitro": { "enabled": false }, + "FakeProfileThemes": { "enabled": true }, + "FavoriteEmojiFirst": { "enabled": false }, + "FavoriteGifSearch": { "enabled": false }, + "FixCodeblockGap": { "enabled": false }, + "FixSpotifyEmbeds": { "enabled": false }, + "FixYoutubeEmbeds": { "enabled": false }, + "ForceOwnerCrown": { "enabled": false }, + "FriendInvites": { "enabled": false }, + "GameActivityToggle": { "enabled": false }, + "GifPaste": { "enabled": false }, + "GreetStickerPicker": { "enabled": false }, + "HideAttachments": { "enabled": false }, + "iLoveSpam": { "enabled": false }, + "IgnoreActivities": { "enabled": false }, + "ImageZoom": { "enabled": false }, + "InvisibleChat": { "enabled": false }, + "KeepCurrentChannel": { "enabled": false }, + "LastFMRichPresence": { "enabled": false }, + "LoadingQuotes": { "enabled": false }, + "MemberCount": { "enabled": false }, + "MessageClickActions": { "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 }, + "NoDevtoolsWarning": { "enabled": false }, + "NoF1": { "enabled": false }, + "NoMosaic": { "enabled": false }, + "NoPendingCount": { "enabled": false }, + "NoProfileThemes": { "enabled": false }, + "NoReplyMention": { "enabled": false }, + "NoScreensharePreview": { "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 }, + "Party mode πŸŽ‰": { "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 }, + "PronounDB": { "enabled": false }, + "QuickMention": { "enabled": false }, + "QuickReply": { "enabled": false }, + "ReactErrorDecoder": { "enabled": false }, + "ReadAllNotificationsButton": { "enabled": false }, + "RelationshipNotifier": { "enabled": false }, + "RevealAllSpoilers": { "enabled": false }, + "ReverseImageSearch": { "enabled": false }, + "ReviewDB": { "enabled": false }, + "RoleColorEverywhere": { "enabled": true }, + "SearchReply": { "enabled": false }, + "SecretRingToneEnabler": { "enabled": false }, + "SendTimestamps": { "enabled": false }, + "ServerListIndicators": { "enabled": false }, + "ServerProfile": { "enabled": false }, + "ShikiCodeblocks": { "enabled": false }, + "ShowAllMessageButtons": { "enabled": false }, + "ShowConnections": { "enabled": false }, + "ShowHiddenChannels": { "enabled": false }, + "ShowMeYourName": { "enabled": false }, + "ShowTimeouts": { "enabled": false }, + "SilentMessageToggle": { "enabled": false }, + "SilentTyping": { "enabled": false }, + "SortFriendRequests": { "enabled": false }, + "SpotifyControls": { "enabled": false }, + "SpotifyCrack": { "enabled": false }, + "SpotifyShareCommands": { "enabled": false }, + "StartupTimings": { "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 }, + "UnsuppressEmbeds": { "enabled": false }, + "UrbanDictionary": { "enabled": false }, + "UserVoiceShow": { "enabled": false }, + "USRBG": { "enabled": false }, + "ValidUser": { "enabled": false }, + "VoiceChatDoubleClick": { "enabled": false }, + "VcNarrator": { "enabled": false }, + "VencordToolbox": { "enabled": false }, + "ViewIcons": { "enabled": false }, + "ViewRaw": { "enabled": false }, + "VoiceMessages": { "enabled": false }, "WebContextMenus": { - "enabled": true, - "addBack": true - }, - "WebKeybinds": { - "enabled": true - }, - "WhoReacted": { - "enabled": false - }, - "Wikisearch": { - "enabled": false - }, - "XSOverlay": { - "enabled": false - } + "enabled": true, + "addBack": true }, + "WebKeybinds": { "enabled": true }, + "WhoReacted": { "enabled": false }, + "Wikisearch": { "enabled": false }, + "XSOverlay": { "enabled": false } }, "notifications": { "timeout": 5000, @@ -484,7 +188,7 @@ lib.mkIf (host != "NxACE") "authenticated": false, "url": "https://api.vencord.dev/", "settingsSync": false, - "settingsSyncVersion": 1710459223618 + "settingsSyncVersion": 1725386648445 } } ''; diff --git a/home-modules/fish.nix b/home-modules/fish.nix index 4c13a14..3e315f2 100755 --- a/home-modules/fish.nix +++ b/home-modules/fish.nix @@ -51,10 +51,12 @@ lib.mkIf (user != "tv") nf = "neofetch"; nxf = "nxfetch"; nn = "nano"; - m = "micro"; + hxx = "hx ."; p = "python"; ipy = "ipython"; c = "codium"; + cc = "codium ."; + code = "codium"; g = "git"; lzg = "lazygit"; # gst = "git status"; @@ -81,7 +83,6 @@ lib.mkIf (user != "tv") dcmp = "docker compose"; nxsent = ''sent -c \${rice.color.foreground} -b \${rice.color.background}''; - code = "codium"; # ya = "yazi"; # function # nxfiglet = "figlet"; }; diff --git a/home-modules/helix.nix b/home-modules/helix.nix index 662e1ca..035e3c5 100644 --- a/home-modules/helix.nix +++ b/home-modules/helix.nix @@ -60,7 +60,14 @@ }; }; keys.normal = { - C-g = [":new" ":insert-output lazygit" ":buffer-close!" ":redraw"]; + "C-g" = [":new" ":insert-output lazygit" ":buffer-close!" ":redraw"]; + "A-`" = [ "no_op" ]; + "`" = [ "no_op" ]; + }; + keys.normal."ΓΆ" = { + "s" = [ "switch_case" ]; + "u" = [ "switch_to_uppercase" ]; + "l" = [ "switch_to_lowercase" ]; }; }; languages = { @@ -115,7 +122,7 @@ command = lib.getExe pkgs.vale-ls; }; "language-tool" = { - command = lib.getExe pkgs.ltex-ls; + command = "${pkgs.ltex-ls}/bin/ltex-ls"; }; "ruff" = { command = "ruff-lsp"; diff --git a/home-modules/hyprland.nix b/home-modules/hyprland.nix index 25556c4..d0fed24 100755 --- a/home-modules/hyprland.nix +++ b/home-modules/hyprland.nix @@ -243,16 +243,15 @@ lib.mkIf (user != "tv") }; exec-once = [ - "hyprpm reload -n " - "waybar " - "hyprpaper -n " + "waybar" "swww-daemon" "hyprland-autoname-workspaces" "/usr/lib/polkit-kde-authentication-agent-1 " "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP" "syncthing -no-browser" "mako" - "ibus engine xkb:de::deu" + "fcitx5" + # "ibus engine xkb:de::deu" "libinput-gestures" # "hyprswitch --daemon" ]; @@ -334,7 +333,7 @@ lib.mkIf (user != "tv") "SUPER SHIFT, F5, exec, nx_gcal_event reauthenticate" # "SUPER, F6," ''SUPER, F8, exec, find ~/Pictures/wallpapers/* -type f -not -path "~/Pictures/wallpapers/.git/*" | sort -R | head -n 1 | xargs swww img --transition-type wipe --transition-angle 60 --transition-step 120 --transition-fps 120'' - # "SUPER, F9, hyprload,reload" + "SUPER, F9, exec, change_colors_json $(swww query | sed -n 2p | sed -e 's-.*image: --g') && kitty -e sh -c 'nh home switch'" # "SUPER, F10, hyprload,update" "SUPER, F11, exec, waybar" "SUPER SHIFT, F11, exec, pkill waybar " diff --git a/home-modules/ollama.nix b/home-modules/ollama.nix new file mode 100644 index 0000000..d9dc5fa --- /dev/null +++ b/home-modules/ollama.nix @@ -0,0 +1,37 @@ +{ pkgs, ... }: +{ + home.packages = with pkgs; [ + (writers.writePython3Bin "ooo" { + libraries = [ pkgs.python3Packages.ollama ]; + flakeIgnore = [ "E501" "E305" "E701" "E704" "E302" "E114" "F841" "E121" ]; + } /* python */ '' +import sys +import ollama + +if len(sys.argv) < 2: + print("Usage: ./ooo.py ") + sys.exit(1) + +system_message = sys.argv[1] +input_text = sys.stdin.read() +try: + response = ollama.chat(model='llama3.1:8b', messages=[ + { + 'role': 'system', + 'content': "You are a text transformer. Follow the folling instruction:\n\n" + system_message + "\n\nOnly output the transformed text. Do not add any addidional conversation around the output. Just the result.", + }, + { + 'role': 'user', + 'content': input_text, + }, + ]) + + print(response['message']['content']) + sys.exit(0) +except Exception as e: + print(f"An error occurred: {e}", file=sys.stderr) + sys.exit(1) +'') + ]; +} + diff --git a/home-modules/wallpaper-to-colors.nix b/home-modules/wallpaper-to-colors.nix new file mode 100644 index 0000000..8c597f3 --- /dev/null +++ b/home-modules/wallpaper-to-colors.nix @@ -0,0 +1,152 @@ +{ pkgs-unstable, ... }: +{ + home.packages = with pkgs-unstable; [ + (writers.writePython3Bin "change_colors_json" { + libraries = with python3Packages; [ numpy pillow scikit-learn ]; + flakeIgnore = [ "E302" "E305" "E226" "E501" ]; + } /*python */ '' +from colorsys import hls_to_rgb, rgb_to_hls +import json +import sys +from typing import Literal, cast +from numpy.typing import NDArray +from sklearn.cluster import KMeans +import numpy as np +from PIL import Image + +def fc(c: int) -> str: + assert c < 256 + s = str(hex(c))[2:] + if c < 16: + return "0" + s + elif len(s) == 1: + return s + s + else: + return s + +class Color(object): + def __init__(self, rgb: tuple[int, ...], frequency: float): + assert len(rgb) == 3, "RGB values must be a tuple of length 3" + self.rgb = cast(tuple[int, int, int], rgb) + self.freq: float = frequency + + def __lt__(self, other: "Color") -> bool: + return self.freq < other.freq + + @property + def hls(self) -> tuple[float, float, float]: + return rgb_to_hls(r=self.rgb[0] / 255, g=self.rgb[1] / 255, b=self.rgb[2] / 255) + + @property + def luminance(self) -> float: + return np.dot(np.array([0.2126, 0.7152, 0.0722]), self.rgb) + +def k_means_extraction(arr: NDArray[float], height: int, width: int, palette_size: int) -> list[Color]: + arr = np.reshape(arr, (width * height, -1)) + model = KMeans(n_clusters=palette_size, n_init="auto", init="k-means++", random_state=2024) + labels = model.fit_predict(arr) + palette = np.array(model.cluster_centers_, dtype=int) + color_count = np.bincount(labels) + color_frequency = color_count / float(np.sum(color_count)) + colors = [] + for color, freq in zip(palette, color_frequency): + colors.append(Color(color, freq)) + return colors + + +class Palette: + def __init__(self, colors: list[Color]): + self.colors = colors + self.frequencies = [c.freq for c in colors] + + def __getitem__(self, item: int) -> Color: + return self.colors[item] + + def __len__(self) -> int: + return self.number_of_colors + +def ensure_color(c: Color, alter_sat: bool) -> list[int]: + hue, lum, sat = c.hls + if alter_sat: + new_sat = min(max(sat, 0.6) + 0.3, 1) + else: + new_sat = sat + new_lum = max(lum, 0.5) + r, g, b = hls_to_rgb(h=hue, l=new_lum, s=new_sat) + return [int(r*255), int(g*255), int(b*255)] + +def list_to_hex(ilist: list[int]) -> str: + return f"#{fc(ilist[0])}{fc(ilist[1])}{fc(ilist[2])}" + +def alter_hue(ilist: list[int], hue: int) -> list[int]: + assert hue >= 0 and hue <= 360 + r, g, b = ilist + h, l, s = rgb_to_hls((r/255), (g/255), (b/255)) + new_hue = (((h*360) + hue) % 360) / 360 + r, g, b = hls_to_rgb(h=new_hue, l=l, s=s) + return [int(r*255), int(g*255), int(b*255)] + +def alter_l(ilist: list[int], l_in_1_0: float) -> list[int]: + assert l_in_1_0 >= 0 and l_in_1_0 <= 1 + r, g, b = ilist + h, _, s = rgb_to_hls((r/255), (g/255), (b/255)) + r, g, b = hls_to_rgb(h=h, l=l_in_1_0, s=s) + return [int(r*255), int(g*255), int(b*255)] + +def extract_colors( + image: str, + palette_size: int = 5, + resize: bool = True, + sort_mode: Literal["luminance", "frequency"] | None = None, +) -> Palette: + + img = Image.open(image).convert("RGB") + + # open the image + img = img.resize((256, 256)) + width, height = img.size + arr = np.asarray(img) + + colors = k_means_extraction(arr, height, width, palette_size) + + if sort_mode == "luminance": + colors.sort(key=lambda c: c.luminance, reverse=False) + else: + colors.sort(reverse=True) + + return Palette(colors) +if __name__ == "__main__": + try: + img = sys.argv[1] + except IndexError: + img = "/home/nx2/Pictures/wallpapers/absolute-cinema-acid.png" + + palette = extract_colors(image=img, palette_size=3) + + accent = ensure_color(c=palette[0], alter_sat=False) + secondary = ensure_color(c=palette[1], alter_sat=True) + tertiary = ensure_color(c=palette[2], alter_sat=False) + weird = alter_hue(ilist=secondary, hue=180) + special = alter_hue(ilist=accent, hue=180) + foreground = alter_l(accent, 0.9) + background = alter_l(accent, 0.1) + + d = { + "base": { + "foreground": list_to_hex(foreground), + "background": list_to_hex(background) + }, + "to_alter": { + "accent": list_to_hex(accent), + "secondary": list_to_hex(secondary), + "tertiary": list_to_hex(tertiary), + "special": list_to_hex(special), + "weird": list_to_hex(weird) + } + } + + with open("/home/nx2/nix-dots/flake-modules/colors.json", "w") as f: + f.write(json.dumps(d, indent=4)) +'') + ]; +} diff --git a/home.nix b/home.nix index 6225839..9d81045 100755 --- a/home.nix +++ b/home.nix @@ -1,4 +1,4 @@ -{ pkgs, pkgs-unstable, lib, host, user, ... }: +{ pkgs, pkgs-unstable, lib, host, user, inputs, ... }: { imports = [ ./home-modules/auto-mount.nix @@ -29,6 +29,7 @@ ./home-modules/nx-gcal-event.nix ./home-modules/obs.nix ./home-modules/office.nix + ./home-modules/ollama.nix ./home-modules/pandoc.nix ./home-modules/pnx.nix ./home-modules/programming/c.nix @@ -44,6 +45,7 @@ ./home-modules/vale.nix ./home-modules/virt-manager.nix ./home-modules/vscode.nix + ./home-modules/wallpaper-to-colors.nix ./home-modules/waybar.nix ./home-modules/wlogout.nix ./home-modules/yazi.nix @@ -83,6 +85,9 @@ wl-clipboard xclip xournal + + inputs.zen-browser.packages."${system}".default + ] ++ (with pkgs-unstable; [ obsidian firefox diff --git a/splash.png b/splash.png new file mode 100644 index 0000000..26b77f3 Binary files /dev/null and b/splash.png differ diff --git a/system-modules/fcitx5.nix b/system-modules/fcitx5.nix new file mode 100644 index 0000000..d254a9a --- /dev/null +++ b/system-modules/fcitx5.nix @@ -0,0 +1,28 @@ +{ pkgs-unstable, ... }: +{ + i18n.inputMethod = { + enabled = "fcitx5"; + # type = "fcitx5"; # for later than 24.05 + # enable = true; + fcitx5 = { + waylandFrontend = true; + addons = with pkgs-unstable; [ + rime-data + fcitx5-rime + fcitx5-gtk + fcitx5-chinese-addons + fcitx5-catppuccin + ]; + }; + }; + services.xserver.desktopManager.runXdgAutostartIfNone = true; + environment.variables = { + GLFW_IM_MODULE = "fcitx"; + GTK_IM_MODULE = "fcitx"; + INPUT_METHOD = "fcitx"; + XMODIFIERS = "@im=fcitx"; + IMSETTINGS_MODULE = "fcitx"; + QT_IM_MODULE = "fcitx"; + SDL_IM_MODULE = "fcitx"; + }; +} diff --git a/system-modules/hardware-configuration.nix b/system-modules/hardware-configuration.nix index 82073f1..c484495 100755 --- a/system-modules/hardware-configuration.nix +++ b/system-modules/hardware-configuration.nix @@ -16,7 +16,7 @@ fileSystems = if host != "NxACE" then { "/" = { device = "/dev/disk/by-label/nixos"; fsType = "ext4"; }; "/boot" = { device = "/dev/disk/by-label/EFI"; fsType = "vfat"; }; - "/home/${user}/shared" = { device = "/dev/disk/by-label/shared"; fsType = "ntfs"; }; + "/home/${user}/shared" = { device = "/dev/disk/by-label/shared"; fsType = "ntfs"; options = [ "uid:1000" "gid:100" ]; }; } else { "/" = { device = "/dev/disk/by-label/nixos"; fsType = "ext4"; }; "/boot" = { device = "/dev/disk/by-label/EFI"; fsType = "vfat"; }; diff --git a/system-modules/kanata.nix b/system-modules/kanata.nix new file mode 100644 index 0000000..6347ff5 --- /dev/null +++ b/system-modules/kanata.nix @@ -0,0 +1,16 @@ +{ pkgs, ... }: +{ + services.kanata = { + enable = true; + package = pkgs.kanata; + keyboards.default.config = '' + (defsrc + caps + ) + (deflayer default + esc + ) + ''; + }; +} +