From b8d157ab6fb7d3e02f566ccc34fd61a8f7c2e81e Mon Sep 17 00:00:00 2001 From: atagen Date: Wed, 18 Jun 2025 01:06:36 +1000 Subject: [PATCH] current state of things --- .old/kdekeys | 384 ---- .old/op.pal | 26 - .old/pkgs/bismuth.nix | 49 - .old/pkgs/coconut.nix | 58 - .old/pkgs/culr.nix | 37 - .old/pkgs/default.nix | 21 - .old/pkgs/everforst-theme.nix | 35 - .old/pkgs/eww.nix | 57 - .old/pkgs/git-credential-keepassxc.nix | 25 - .old/pkgs/glpaper.nix | 44 - .old/pkgs/gruvbox-gtk-theme.nix | 35 - .old/pkgs/gruvbox-kvantum.nix | 23 - .old/pkgs/headscale-ui.nix | 26 - .old/pkgs/hyprland-system76-scheduler-hook.sh | 13 - ...yprland-system76-scheduler-integration.nix | 52 - .old/pkgs/kanagawa-icons.nix | 35 - .old/pkgs/kanagawa-theme.nix | 35 - .../kwin-system76-scheduler-integration.nix | 63 - .old/pkgs/lemurs.nix | 30 - .old/pkgs/ly.nix | 50 - .old/pkgs/pygments.nix | 56 - .old/pkgs/rose-pine-icons.nix | 35 - .old/pkgs/rose-pine-theme.nix | 35 - .old/pkgs/simplewaita-gtk.nix | 33 - .old/sway-nvidia.patch | 47 - .old/top n bottom.layout.latte | 278 --- .old/wollomi-xorg.conf | 63 - .p10k.zsh | 1729 ----------------- util/create.nix => create.nix | 14 +- flake.lock | 700 ++++--- flake.nix | 83 +- flakes/niri-session-manager/flake.lock | 41 + flakes/niri-session-manager/flake.nix | 66 + flakes/niri-session-manager/result | 1 + home/bolt.nix | 27 +- home/home.nix | 15 +- home/icons/anythingllm.png | Bin 16920 -> 0 bytes home/icons/comfyui.png | Bin 10871 -> 0 bytes home/icons/discord.jpg | Bin 8101 -> 0 bytes home/icons/tafe.jpg | Bin 105826 -> 0 bytes home/modules/cli.nix | 24 +- home/modules/cosmic.nix | 151 -- home/modules/desktop.nix | 15 +- home/modules/dev.nix | 8 +- home/modules/documents.nix | 4 +- home/modules/hyprland.nix | 102 - home/modules/media-players.nix | 18 +- home/modules/niri.nix | 125 +- home/programs/anything-llm.nix | 64 - home/programs/atuin.nix | 14 - home/programs/helix-ai.nix | 347 ---- home/programs/helix.nix | 36 +- home/programs/kitty.nix | 6 +- home/programs/ollama.nix | 82 - home/programs/openwebui.nix | 48 - home/programs/stable-diffusion.nix | 17 - home/programs/vscode.nix | 39 - home/programs/wlogout.nix | 5 +- home/programs/xresources.nix | 43 - home/programs/zsh.nix | 69 - home/util/containers.nix | 382 ---- home/util/cosmic.nix | 212 -- home/util/flatpak.nix | 61 - npins/default.nix | 146 -- npins/sources.json | 145 -- pin-nixpkgs.nix | 7 - util/rice.nix => rice/default.nix | 49 +- {util => rice}/gtk-theme.nix | 34 +- header.sh => rice/header.sh | 0 wallpaper.jpg => rice/wallpaper.jpg | Bin {util => rice}/wallpaper.nix | 15 +- sources.nix | 0 system/adrift.nix | 18 +- system/cachix/nix-community.nix | 12 - system/configuration.nix | 66 +- system/modules/cosmic.nix | 13 - system/modules/docs.nix | 10 +- system/modules/limine.nix | 42 + system/modules/niri.nix | 11 +- system/modules/nix-meta.nix | 71 +- system/modules/term.nix | 7 +- system/quiver.nix | 46 +- system/{cachix.nix => substituters.nix} | 8 - util/get-modules.nix | 7 + util/overlay.nix | 9 - 85 files changed, 895 insertions(+), 6014 deletions(-) delete mode 100644 .old/kdekeys delete mode 100644 .old/op.pal delete mode 100644 .old/pkgs/bismuth.nix delete mode 100644 .old/pkgs/coconut.nix delete mode 100644 .old/pkgs/culr.nix delete mode 100644 .old/pkgs/default.nix delete mode 100644 .old/pkgs/everforst-theme.nix delete mode 100644 .old/pkgs/eww.nix delete mode 100644 .old/pkgs/git-credential-keepassxc.nix delete mode 100644 .old/pkgs/glpaper.nix delete mode 100644 .old/pkgs/gruvbox-gtk-theme.nix delete mode 100644 .old/pkgs/gruvbox-kvantum.nix delete mode 100644 .old/pkgs/headscale-ui.nix delete mode 100644 .old/pkgs/hyprland-system76-scheduler-hook.sh delete mode 100644 .old/pkgs/hyprland-system76-scheduler-integration.nix delete mode 100644 .old/pkgs/kanagawa-icons.nix delete mode 100644 .old/pkgs/kanagawa-theme.nix delete mode 100644 .old/pkgs/kwin-system76-scheduler-integration.nix delete mode 100644 .old/pkgs/lemurs.nix delete mode 100644 .old/pkgs/ly.nix delete mode 100644 .old/pkgs/pygments.nix delete mode 100644 .old/pkgs/rose-pine-icons.nix delete mode 100644 .old/pkgs/rose-pine-theme.nix delete mode 100644 .old/pkgs/simplewaita-gtk.nix delete mode 100644 .old/sway-nvidia.patch delete mode 100644 .old/top n bottom.layout.latte delete mode 100644 .old/wollomi-xorg.conf delete mode 100644 .p10k.zsh rename util/create.nix => create.nix (82%) create mode 100644 flakes/niri-session-manager/flake.lock create mode 100644 flakes/niri-session-manager/flake.nix create mode 120000 flakes/niri-session-manager/result delete mode 100644 home/icons/anythingllm.png delete mode 100644 home/icons/comfyui.png delete mode 100644 home/icons/discord.jpg delete mode 100644 home/icons/tafe.jpg delete mode 100644 home/modules/cosmic.nix delete mode 100644 home/modules/hyprland.nix delete mode 100644 home/programs/anything-llm.nix delete mode 100644 home/programs/atuin.nix delete mode 100644 home/programs/helix-ai.nix delete mode 100644 home/programs/ollama.nix delete mode 100644 home/programs/openwebui.nix delete mode 100644 home/programs/stable-diffusion.nix delete mode 100644 home/programs/vscode.nix delete mode 100644 home/programs/xresources.nix delete mode 100644 home/programs/zsh.nix delete mode 100644 home/util/containers.nix delete mode 100644 home/util/cosmic.nix delete mode 100644 home/util/flatpak.nix delete mode 100644 npins/default.nix delete mode 100644 npins/sources.json delete mode 100644 pin-nixpkgs.nix rename util/rice.nix => rice/default.nix (77%) rename {util => rice}/gtk-theme.nix (83%) rename header.sh => rice/header.sh (100%) rename wallpaper.jpg => rice/wallpaper.jpg (100%) rename {util => rice}/wallpaper.nix (72%) delete mode 100644 sources.nix delete mode 100644 system/cachix/nix-community.nix delete mode 100644 system/modules/cosmic.nix create mode 100644 system/modules/limine.nix rename system/{cachix.nix => substituters.nix} (57%) create mode 100644 util/get-modules.nix delete mode 100644 util/overlay.nix diff --git a/.old/kdekeys b/.old/kdekeys deleted file mode 100644 index 63cb523..0000000 --- a/.old/kdekeys +++ /dev/null @@ -1,384 +0,0 @@ -[ActivityManager][Global Shortcuts] -switch-to-activity-1becc5fb-3def-4b2a-82c9-bd886f792a7c= - -[KDE Keyboard Layout Switcher][Global Shortcuts] -Switch to Next Keyboard Layout=Ctrl+Alt+K - -[StandardShortcuts] -AboutApp= -AboutKDE= -Activate Next Tab=Ctrl+PgDown; Ctrl+] -Activate Previous Tab=Ctrl+PgUp; Ctrl+[ -ActualSize=Ctrl+0 -AddBookmark=Ctrl+B -Back=Alt+Left; Back -BackwardWord=Ctrl+Left -Begin=Ctrl+Home -BeginningOfLine=Home -Clear= -Close=Ctrl+W; Ctrl+Esc -ConfigureNotifications= -ConfigureToolbars= -Copy=Ctrl+C; Ctrl+Ins -CreateFolder=F10 -Cut=Shift+Del; Ctrl+X -DeleteFile=Shift+Del -DeleteWordBack=Ctrl+Backspace -DeleteWordForward=Ctrl+Del -Deselect=Ctrl+Shift+A -DocumentBack=Alt+Shift+Left -DocumentForward=Alt+Shift+Right -Donate= -EditBookmarks= -End=Ctrl+End -EndOfLine=End -Find=Ctrl+F -FindNext=F3 -FindPrev=Shift+F3 -FitToHeight= -FitToPage= -FitToWidth= -Forward=Alt+Right; Forward -ForwardWord=Ctrl+Right -FullScreen=Ctrl+Shift+F -Goto= -GotoLine=Ctrl+G -GotoPage= -Help=F1 -Home=Alt+Home; Home Page -KeyBindings=Ctrl+Alt+, -Mail= -MoveToTrash=Del -New=Ctrl+N -Next=PgDown -NextCompletion=Ctrl+Down -Open=Ctrl+O -OpenRecent= -Paste=Shift+Ins; Ctrl+V -Paste Selection=Ctrl+Shift+Ins -Preferences=Ctrl+Shift+, -PrevCompletion=Ctrl+Up -Print=Ctrl+P -PrintPreview= -Prior=PgUp -Quit=Ctrl+Q -Redo=Ctrl+Shift+Z -Reload=Refresh; F5 -RenameFile=F2 -Replace=Ctrl+R -ReportBug= -Revert= -RotateDown=Down -RotateUp=Up -Save=Ctrl+S -SaveAs=Ctrl+Shift+S -SaveOptions= -SelectAll=Ctrl+A -ShowHideHiddenFiles=Alt+.; Ctrl+H -ShowMenubar=Ctrl+M -ShowStatusbar= -ShowToolbar= -Spelling= -SubstringCompletion=Ctrl+T -SwitchApplicationLanguage= -TextCompletion=Ctrl+E -TipofDay= -Undo=Ctrl+Z -Up=Alt+Up -WhatsThis=Shift+F1 -Zoom= -ZoomIn=Ctrl++; Ctrl+= -ZoomOut=Ctrl+- - -[bismuth][Global Shortcuts] -decrease_master_size= -decrease_master_win_count=Meta+[ -decrease_window_height=Meta+Ctrl+K; Meta+Ctrl+Up -decrease_window_width=Meta+Ctrl+Right; Meta+Ctrl+H -focus_bottom_window= -focus_left_window= -focus_next_window= -focus_prev_window= -focus_right_window= -focus_upper_window= -increase_master_size= -increase_master_win_count=Meta+] -increase_window_height=Meta+Ctrl+Down; Meta+Ctrl+J -increase_window_width=Meta+Ctrl+Left; Meta+Ctrl+L -move_window_to_bottom_pos=Meta+Shift+Down; Meta+Shift+J -move_window_to_left_pos=Meta+Shift+H -move_window_to_next_pos= -move_window_to_prev_pos= -move_window_to_right_pos=Meta+Shift+L -move_window_to_upper_pos=Meta+Shift+K; Meta+Shift+Up -next_layout=Meta+\\ -prev_layout= -push_window_to_master= -rotate= -rotate_part= -rotate_reverse= -toggle_float_layout= -toggle_monocle_layout= -toggle_quarter_layout= -toggle_spiral_layout= -toggle_spread_layout= -toggle_stair_layout= -toggle_three_column_layout= -toggle_tile_layout= -toggle_window_floating=Meta+Space - -[kaccess][Global Shortcuts] -Toggle Screen Reader On and Off=Meta+Alt+S - -[kcm_touchpad][Global Shortcuts] -Disable Touchpad=Touchpad Off -Enable Touchpad=Touchpad On -Toggle Touchpad=Touchpad Toggle - -[kded5][Global Shortcuts] -Show System Activity=Ctrl+Esc -display=Display; Meta+P - -[khotkeys][Global Shortcuts] -{162b7cd1-2ed9-40a7-9e77-8cdac1ced63b}=Meta+Return -{2b174cac-ee33-41d3-979c-c2151b4485c3}=Meta+F -{d03619b6-9b3c-48cc-9d9c-a2aadb485550}= - -[kmix][Global Shortcuts] -decrease_microphone_volume=Microphone Volume Down -decrease_volume=Volume Down -increase_microphone_volume=Microphone Volume Up -increase_volume=Volume Up -mic_mute=Microphone Mute; Meta+Volume Mute -mute=Volume Mute - -[ksmserver][Global Shortcuts] -Halt Without Confirmation= -Lock Session=Screensaver; Ctrl+Alt+L -Log Out=Ctrl+Alt+Del -Log Out Without Confirmation= -Reboot Without Confirmation= - -[kwin][Global Shortcuts] -Activate Window Demanding Attention=Ctrl+Alt+A -Decrease Opacity= -Expose=Ctrl+F9 -ExposeAll=Ctrl+F10; Launch (C) -ExposeClass=Ctrl+F7 -Increase Opacity= -Invert Screen Colors= -Kill Window=Ctrl+Alt+Esc -MoveMouseToCenter=Meta+F6 -MoveMouseToFocus=Meta+F5 -MoveZoomDown= -MoveZoomLeft= -MoveZoomRight= -MoveZoomUp= -Setup Window Shortcut= -Show Desktop= -ShowDesktopGrid=Ctrl+F8 -Suspend Compositing=Alt+Shift+F12 -Switch One Desktop Down= -Switch One Desktop Up= -Switch One Desktop to the Left= -Switch One Desktop to the Right= -Switch Window Down=Meta+J; Meta+Down -Switch Window Left=Meta+Left; Meta+H -Switch Window Right=Meta+Right; Meta+L -Switch Window Up=Meta+Up; Meta+K -Switch to Desktop 1=Meta+1 -Switch to Desktop 10= -Switch to Desktop 11= -Switch to Desktop 12= -Switch to Desktop 13= -Switch to Desktop 14= -Switch to Desktop 15= -Switch to Desktop 16= -Switch to Desktop 17= -Switch to Desktop 18= -Switch to Desktop 19= -Switch to Desktop 2=Meta+2 -Switch to Desktop 20= -Switch to Desktop 3=Meta+3 -Switch to Desktop 4=Meta+4 -Switch to Desktop 5= -Switch to Desktop 6= -Switch to Desktop 7= -Switch to Desktop 8= -Switch to Desktop 9= -Switch to Next Desktop= -Switch to Next Screen= -Switch to Previous Desktop= -Switch to Previous Screen= -Switch to Screen 0= -Switch to Screen 1= -Switch to Screen 2= -Switch to Screen 3= -Switch to Screen 4= -Switch to Screen 5= -Switch to Screen 6= -Switch to Screen 7= -Toggle Night Color= -Toggle Window Raise/Lower= -Walk Through Desktop List= -Walk Through Desktop List (Reverse)= -Walk Through Desktops= -Walk Through Desktops (Reverse)= -Walk Through Windows=Alt+Tab -Walk Through Windows (Reverse)=Alt+Shift+Backtab -Walk Through Windows Alternative= -Walk Through Windows Alternative (Reverse)= -Walk Through Windows of Current Application=Alt+` -Walk Through Windows of Current Application (Reverse)=Alt+~ -Walk Through Windows of Current Application Alternative= -Walk Through Windows of Current Application Alternative (Reverse)= -Window Above Other Windows= -Window Below Other Windows= -Window Close=Alt+F4; Meta+Shift+Q -Window Fullscreen=Meta+Shift+Space -Window Grow Horizontal= -Window Grow Vertical= -Window Lower= -Window Maximize=Meta+PgUp -Window Maximize Horizontal= -Window Maximize Vertical= -Window Minimize=Meta+PgDown -Window Move= -Window Move Center= -Window No Border= -Window On All Desktops= -Window One Desktop Down=Meta+Ctrl+Shift+Down -Window One Desktop Up=Meta+Ctrl+Shift+Up -Window One Desktop to the Left=Meta+Ctrl+Shift+Left -Window One Desktop to the Right=Meta+Ctrl+Shift+Right -Window Operations Menu=Alt+F3 -Window Pack Down= -Window Pack Left= -Window Pack Right= -Window Pack Up= -Window Quick Tile Bottom= -Window Quick Tile Bottom Left= -Window Quick Tile Bottom Right= -Window Quick Tile Left= -Window Quick Tile Right= -Window Quick Tile Top= -Window Quick Tile Top Left= -Window Quick Tile Top Right= -Window Raise= -Window Resize= -Window Shade= -Window Shrink Horizontal= -Window Shrink Vertical= -Window to Desktop 1=Meta+! -Window to Desktop 10= -Window to Desktop 11= -Window to Desktop 12= -Window to Desktop 13= -Window to Desktop 14= -Window to Desktop 15= -Window to Desktop 16= -Window to Desktop 17= -Window to Desktop 18= -Window to Desktop 19= -Window to Desktop 2=Meta+@ -Window to Desktop 20= -Window to Desktop 3=Meta+# -Window to Desktop 4=Meta+$ -Window to Desktop 5= -Window to Desktop 6= -Window to Desktop 7= -Window to Desktop 8= -Window to Desktop 9= -Window to Next Desktop= -Window to Next Screen=Meta+Tab -Window to Previous Desktop= -Window to Previous Screen= -Window to Screen 0= -Window to Screen 1= -Window to Screen 2= -Window to Screen 3= -Window to Screen 4= -Window to Screen 5= -Window to Screen 6= -Window to Screen 7= -view_actual_size=Meta+0 -view_zoom_in=Meta+= -view_zoom_out=Meta+- - -[mediacontrol][Global Shortcuts] -mediavolumedown= -mediavolumeup= -nextmedia=Media Next -pausemedia=Media Pause -playmedia= -playpausemedia=Media Play -previousmedia=Media Previous -stopmedia=Media Stop - -[org.kde.dolphin.desktop][Global Shortcuts] -_launch=Meta+E - -[org.kde.krunner.desktop][Global Shortcuts] -RunClipboard=Alt+Shift+F2 -_launch=Alt+Space; Search; Meta+D; Alt+F2 - -[org.kde.plasma.emojier.desktop][Global Shortcuts] -_launch=Meta+. - -[org.kde.spectacle.desktop][Global Shortcuts] -ActiveWindowScreenShot=Meta+Print -CurrentMonitorScreenShot= -FullScreenScreenShot=Shift+Print -OpenWithoutScreenshot= -RectangularRegionScreenShot=Meta+Shift+S; Meta+Shift+Print -WindowUnderCursorScreenShot=Meta+Ctrl+Print -_launch=Print - -[org_kde_powerdevil][Global Shortcuts] -Decrease Keyboard Brightness=Keyboard Brightness Down -Decrease Screen Brightness=Monitor Brightness Down -Hibernate=Hibernate -Increase Keyboard Brightness=Keyboard Brightness Up -Increase Screen Brightness=Monitor Brightness Up -PowerDown=Power Down -PowerOff=Power Off -Sleep=Sleep -Toggle Keyboard Backlight=Keyboard Light On/Off -Turn Off Screen= - -[plasmashell][Global Shortcuts] -activate task manager entry 1= -activate task manager entry 10= -activate task manager entry 2= -activate task manager entry 3= -activate task manager entry 4= -activate task manager entry 5=Meta+5 -activate task manager entry 6=Meta+6 -activate task manager entry 7=Meta+7 -activate task manager entry 8=Meta+8 -activate task manager entry 9=Meta+9 -activate widget 4=Alt+F1 -clear-history= -clipboard_action=Ctrl+Alt+X -cycleNextAction= -cyclePrevAction= -edit_clipboard= -manage activities=Meta+Q -next activity= -previous activity=Meta+Shift+Tab -repeat_action=Ctrl+Alt+R -show dashboard=Ctrl+F12 -show-barcode= -show-on-mouse-pos=Meta+V -stop current activity=Meta+S -switch to next activity= -switch to previous activity= -toggle do not disturb= - -[systemsettings.desktop][Global Shortcuts] -_launch=Tools -kcm-kscreen= -kcm-lookandfeel= -kcm-users= -powerdevilprofilesconfig= -screenlocker= diff --git a/.old/op.pal b/.old/op.pal deleted file mode 100644 index a9d6670..0000000 --- a/.old/op.pal +++ /dev/null @@ -1,26 +0,0 @@ -background #232326 -foreground #f7eff1 - -color0 #434447 -color8 #95988a -color1 #ac383d -color9 #d45f68 -color2 #709c4c -color10 #8baf6f - -color3 #c09875 -color11 #eda25c -color4 #5b97de -color12 #b8e3ff -color5 #494286 -color13 #9477fa -color6 #42c3b2 -color14 #7fc8a5 -color7 #e7e4d8 -color15 #fefefc - -selection_background #ac838d -selection_foreground #f7eff1 - -cursor #e7e4d8 -cursor_text_color #709c4c diff --git a/.old/pkgs/bismuth.nix b/.old/pkgs/bismuth.nix deleted file mode 100644 index 5ce74c3..0000000 --- a/.old/pkgs/bismuth.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ - lib, - mkDerivation, - fetchFromGitHub, - kcoreaddons, - kwindowsystem, - plasma-framework, - systemsettings, - cmake, - extra-cmake-modules, - esbuild, -}: -mkDerivation rec { - pname = "bismuth"; - version = "3.1.3"; - - src = fetchFromGitHub { - owner = "Bismuth-Forge"; - repo = pname; - rev = "v${version}"; - sha256 = "sha256-IWwFsYqoqW3924+pf8L+acIt31aU/mhqakXbT9Q4Bqw="; - }; - - cmakeFlags = [ - "-DUSE_TSC=OFF" - "-DUSE_NPM=OFF" - ]; - - nativeBuildInputs = [ - cmake - extra-cmake-modules - esbuild - ]; - - buildInputs = [ - kcoreaddons - kwindowsystem - plasma-framework - systemsettings - ]; - - meta = with lib; { - description = "A dynamic tiling extension for KWin"; - license = licenses.mit; - maintainers = with maintainers; [ pasqui23 ]; - homepage = "https://bismuth-forge.github.io/bismuth/"; - inherit (kwindowsystem.meta) platforms; - }; -} diff --git a/.old/pkgs/coconut.nix b/.old/pkgs/coconut.nix deleted file mode 100644 index 9c04d27..0000000 --- a/.old/pkgs/coconut.nix +++ /dev/null @@ -1,58 +0,0 @@ -{ - lib, - buildPythonPackage, - fetchFromGitHub, - cpyparsing, - ipykernel, - mypy, - pexpect, - pygments, - pytestCheckHook, - prompt-toolkit, - tkinter, - watchdog, - pkgs, -}: -let - pygments = pkgs.python310Packages.callPackage ./pygments.nix { }; -in -buildPythonPackage rec { - pname = "coconut"; - version = "3.0.2"; - - src = fetchFromGitHub { - owner = "evhub"; - repo = "coconut"; - rev = "v${version}"; - sha256 = lib.fakeSha256; - }; - - propagatedBuildInputs = [ - cpyparsing - ipykernel - mypy - pygments - prompt-toolkit - watchdog - ]; - - checkInputs = [ - pexpect - pytestCheckHook - tkinter - ]; - - # Currently most tests have performance issues - pytestFlagsArray = [ - "coconut/tests/constants_test.py" - ]; - - pythonImportsCheck = [ "coconut" ]; - - meta = with lib; { - homepage = "http://coconut-lang.org/"; - description = "Simple, elegant, Pythonic functional programming"; - license = licenses.asl20; - maintainers = with maintainers; [ fabianhjr ]; - }; -} diff --git a/.old/pkgs/culr.nix b/.old/pkgs/culr.nix deleted file mode 100644 index abe41a5..0000000 --- a/.old/pkgs/culr.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ - lib, - fetchFromGitea, - rustPlatform, - libX11, - pkg-config, -}: -rustPlatform.buildRustPackage rec { - pname = "culr"; - version = "0.1.0"; - - src = fetchFromGitea { - domain = "git.atagen.co"; - owner = "atagen"; - repo = pname + "-rs"; - rev = "8cb1323bdc388ce1fdb0675ade756ea8b59b803d"; - sha256 = "sha256-Blo1PyhzKU4LzflmeGrvWOQEon2BCTkF3uQR+7D5/kc="; - }; - - nativeBuildInputs = [ pkg-config ]; - buildInputs = [ libX11 ]; - - # cargoSha256 = "sha256-Vnhni8tckrexlJ85gfSDEAVWhH6oVHn9/z2O2OIVR5o="; - cargoLock = { - lockFile = "${src}/Cargo.lock"; - outputHashes = { - "xrdb-0.1.2" = "sha256-7B8MsELW927yQEwQJ3DvTB+45Djw21VStBdehaMomRM="; - }; - }; - - meta = with lib; { - description = "colourise piped input"; - homepage = "https://git.atagen.co/atagen/culr"; - license = licenses.mit; - maintainers = [ ]; - }; -} diff --git a/.old/pkgs/default.nix b/.old/pkgs/default.nix deleted file mode 100644 index 98e8980..0000000 --- a/.old/pkgs/default.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ pkgs, ... }: -{ - # hyprland-system76-scheduler-integration = pkgs.callPackage ./hyprland-system76-scheduler-integration.nix {}; - culr = pkgs.callPackage ./culr.nix { }; - # eww-git = pkgs.callPackage ./eww.nix {}; - # everforest-theme = pkgs.callPackage ./everforst-theme.nix {}; - # coconut = pkgs.python310Packages.callPackage ./coconut.nix {}; - # kanagawa-icons = pkgs.callPackage ./kanagawa-icons.nix {}; - # gruvbox-kvantum = pkgs.callPackage ./gruvbox-kvantum.nix {}; - # gruvbox-gtk-theme = pkgs.callPackage ./gruvbox-gtk-theme.nix {}; - # system76-scheduler = pkgs.callPackage ./system76-scheduler.nix {}; - # swayosd = pkgs.callPackage ./swayosd.nix {}; - # fuzzel = pkgs.callPackage ./fuzzel.nix {}; - # git-credential-keepassxc = pkgs.callPackage git-credential-keepassxc.nix {}; - # lemurs = pkgs.callPackage lemurs.nix {}; - # glpaper = pkgs.callPackage glpaper.nix {}; - # ly = pkgs.callPackage ly.nix {}; - # headscale-ui = pkgs.callPackage headscale-ui.nix {}; - # kwin-system76-scheduler-integration = pkgs.callPackage kwin-system76-scheduler-integration.nix {}; - # simplewaita-gtk = pkgs.callPackage simplewaita-gtk.nix {}; -} diff --git a/.old/pkgs/everforst-theme.nix b/.old/pkgs/everforst-theme.nix deleted file mode 100644 index a40a053..0000000 --- a/.old/pkgs/everforst-theme.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ - stdenv, - fetchFromGitHub, - lib, - gnome-themes-extra, - gtk-engine-murrine, - gtk_engines, -}: -stdenv.mkDerivation rec { - pname = "everforest-gtk-theme"; - version = "unstable-2023-03-20"; - - src = fetchFromGitHub { - owner = "Fausto-Korpsvart"; - repo = "Everforest-GTK-Theme"; - rev = "8481714cf9ed5148694f1916ceba8fe21e14937b"; - sha256 = "sha256-NO12ku8wnW/qMHKxi5TL/dqBxH0+cZbe+fU0iicb9JU="; - }; - - buildInputs = [ - gnome-themes-extra # adwaita engine for Gtk2 - gtk_engines # pixmap engine for Gtk2 - ]; - - propagatedUserEnvPkgs = [ - gtk-engine-murrine # murrine engine for Gtk2 - ]; - - installPhase = '' - runHook preInstall - mkdir -p $out/share/themes - cp -a themes/Everforest-Dark-B $out/share/themes/Everforest-Dark - runHook postInstall - ''; -} diff --git a/.old/pkgs/eww.nix b/.old/pkgs/eww.nix deleted file mode 100644 index 79b0c08..0000000 --- a/.old/pkgs/eww.nix +++ /dev/null @@ -1,57 +0,0 @@ -{ - lib, - rustPlatform, - fetchFromGitHub, - pkg-config, - gtk3, - gdk-pixbuf, - withWayland ? true, - gtk-layer-shell, - stdenv, -}: -rustPlatform.buildRustPackage rec { - pname = "eww"; - version = "0.4.0-dirty"; - - src = fetchFromGitHub { - owner = "elkowar"; - repo = pname; - rev = "25e50eda46379bccd8a7887c18ee35833e0460e8"; - sha256 = "sha256-8e6gHSg6FDp6nU5v89D44Tqb1lR5aQpS0lXOVqzoUS4="; - }; - - cargoSha256 = "sha256-25CoBVIofOCBy8ChMesIKaGoluwpy8tYo+zaFLSaiEo="; - - # cargoPatches = [ ./Cargo.lock.patch ]; - - nativeBuildInputs = [ pkg-config ]; - - buildInputs = [ - gtk3 - gdk-pixbuf - ] ++ lib.optional withWayland gtk-layer-shell; - - buildNoDefaultFeatures = withWayland; - buildFeatures = lib.optional withWayland "wayland"; - - cargoBuildFlags = [ - "--bin" - "eww" - ]; - - cargoTestFlags = cargoBuildFlags; - - # requires unstable rust features - RUSTC_BOOTSTRAP = 1; - - meta = with lib; { - description = "ElKowars wacky widgets"; - homepage = "https://github.com/elkowar/eww"; - license = licenses.mit; - maintainers = with maintainers; [ - figsoda - lom - ]; - broken = stdenv.isDarwin; - }; -} diff --git a/.old/pkgs/git-credential-keepassxc.nix b/.old/pkgs/git-credential-keepassxc.nix deleted file mode 100644 index 91fe591..0000000 --- a/.old/pkgs/git-credential-keepassxc.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ - lib, - fetchFromGitHub, - rustPlatform, -}: -rustPlatform.buildRustPackage rec { - pname = "git-credential-keepassxc"; - version = "0.10.0"; - - src = fetchFromGitHub { - owner = "frederick888"; - repo = pname; - rev = "v${version}"; - sha256 = "sha256-BmjGxDqX8j/69Uo8jjWtcJcxNHxI7S5+eZQMApdybq0="; - }; - - cargoSha256 = "sha256-gXW08plJRE1Q6W+Dc2y+gu2R+KBRs3fBG1umdawDduA="; - - meta = with lib; { - description = "Helper that allows Git (and shell scripts) to use KeePassXC as credential store"; - homepage = "https://github.com/frederick888/git-credential-keepassxc"; - license = licenses.gpl3Only; - maintainers = [ ]; - }; -} diff --git a/.old/pkgs/glpaper.nix b/.old/pkgs/glpaper.nix deleted file mode 100644 index 06aef6c..0000000 --- a/.old/pkgs/glpaper.nix +++ /dev/null @@ -1,44 +0,0 @@ -{ - lib, - stdenv, - fetchFromSourcehut, - meson, - ninja, - pkg-config, - wlroots, - wayland, - wayland-protocols, - libX11, - libGL, -}: -stdenv.mkDerivation rec { - pname = "glpaper"; - version = "unstable-latest"; - - src = fetchFromSourcehut { - owner = "~scoopta"; - repo = pname; - vc = "hg"; - rev = "9ba3806561312d83ed66dc8583c36d70fda8cd7a"; - sha256 = "sha256-//IKW2BfpqwcR2WAPShs0kzn5nkV/yyABPvOYm3zMPU="; - }; - - nativeBuildInputs = [ - meson - ninja - pkg-config - ]; - buildInputs = [ - wayland - libX11 # required by libglvnd - libGL - ]; - - meta = with lib; { - description = "Wallpaper program for wlroots based Wayland compositors such as sway that allows you to render glsl shaders as your wallpaper"; - homepage = "https://hg.sr.ht/~scoopta/glpaper"; - license = licenses.gpl3Plus; - platforms = platforms.linux; - maintainers = with maintainers; [ ccellado ]; - }; -} diff --git a/.old/pkgs/gruvbox-gtk-theme.nix b/.old/pkgs/gruvbox-gtk-theme.nix deleted file mode 100644 index 06da31f..0000000 --- a/.old/pkgs/gruvbox-gtk-theme.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ - stdenv, - fetchFromGitHub, - lib, - gnome-themes-extra, - gtk-engine-murrine, - gtk_engines, -}: -stdenv.mkDerivation rec { - pname = "gruvbox-gtk-theme"; - version = "unstable-2023-05-20"; - - src = fetchFromGitHub { - owner = "Fausto-Korpsvart"; - repo = "Gruvbox-GTK-Theme"; - rev = "5927e8693a70619b45fbe3317c59f04f6e101943"; - sha256 = "sha256-zvByW7wqVl4A5bKlVsJOSmyqkJiaHvciwSit3K/FqRM="; - }; - - buildInputs = [ - gnome-themes-extra # adwaita engine for Gtk2 - gtk_engines # pixmap engine for Gtk2 - ]; - - propagatedUserEnvPkgs = [ - gtk-engine-murrine # murrine engine for Gtk2 - ]; - - installPhase = '' - runHook preInstall - mkdir -p $out/share/themes - cp -a themes/Grubvox-Dark-B $out/share/themes/Gruvbox-Dark - runHook postInstall - ''; -} diff --git a/.old/pkgs/gruvbox-kvantum.nix b/.old/pkgs/gruvbox-kvantum.nix deleted file mode 100644 index 678a105..0000000 --- a/.old/pkgs/gruvbox-kvantum.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ - stdenv, - fetchFromGitHub, - lib, -}: -stdenv.mkDerivation rec { - pname = "gruvbox-kvantum"; - version = "unstable-2023-02-06"; - - src = fetchFromGitHub { - owner = "thefallnn"; - repo = "Gruvbox-Kvantum"; - rev = "b04c6b67a4228c2b980821a0f0531bfe122c4aac"; - sha256 = "sha256-hFqqd39lGEnikM8+4MXwnNmZvQzhKOjFThrqx3q2lbo="; - }; - - installPhase = '' - runHook preInstall - cp -a gruvbox-kvantum/ $out/ - sed -i 's/translucent_windows=true/translucent_windows=false/' $out/gruvbox-kvantum.kvconfig - runHook postInstall - ''; -} diff --git a/.old/pkgs/headscale-ui.nix b/.old/pkgs/headscale-ui.nix deleted file mode 100644 index 1507dde..0000000 --- a/.old/pkgs/headscale-ui.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ - lib, - stdenv, - fetchurl, - unzip, -}: -stdenv.mkDerivation rec { - pname = "headscale-ui"; - version = "2022.12.23.2-beta"; - - src = fetchurl { - url = "https://github.com/gurucomputing/headscale-ui/releases/download/${version}/headscale-ui.zip"; - sha256 = "sha256-QF10la68Rl2t0K53CH63Qiq54ynkySQACdELorZF/cY="; - }; - - nativeBuildInputs = [ unzip ]; - - unpackCmd = "unzip headscale-ui.zip"; - - dontConfigure = true; - dontBuild = true; - installPhase = '' - mkdir $out/ - cp -R . $out - ''; -} diff --git a/.old/pkgs/hyprland-system76-scheduler-hook.sh b/.old/pkgs/hyprland-system76-scheduler-hook.sh deleted file mode 100644 index b85564e..0000000 --- a/.old/pkgs/hyprland-system76-scheduler-hook.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash - -socat - UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock | -while read line -do - if [[ "$line" == activewindow* ]]; then - pid="$(hyprctl activewindow | rg pid | cut -d' ' -f2)" - if [[ -n $pid ]]; then - dbus-send --system --dest=com.system76.Scheduler --type=method_call /com/system76/Scheduler com.system76.Scheduler.SetForegroundProcess uint32:$pid - fi - pid="" - fi -done \ No newline at end of file diff --git a/.old/pkgs/hyprland-system76-scheduler-integration.nix b/.old/pkgs/hyprland-system76-scheduler-integration.nix deleted file mode 100644 index 54ac4bf..0000000 --- a/.old/pkgs/hyprland-system76-scheduler-integration.nix +++ /dev/null @@ -1,52 +0,0 @@ -{ - lib, - pkgs, - stdenv, - hyprland, - ripgrep, - socat, - dbus, - ... -}: -stdenv.mkDerivation rec { - pname = "hyprland-system76-scheduler-integration"; - version = "0.1.0"; - - nativeBuildInputs = [ - socat - dbus - hyprland - ripgrep - ]; - - dontUnpack = "true"; - dontBuild = true; - - installPhase = '' - runHook preInstall - - mkdir -p $out/bin - - cat < $out/bin/hyprland-system76-scheduler-hook.sh - #!${pkgs.bash}/bin/bash - echo "opening socket.." - ${pkgs.socat}/bin/socat -u UNIX-CLIENT:/tmp/hypr/\''$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock STDOUT | - while read line; do - if [[ "\''$line" == activewindow* ]]; then - echo "got \''$line." - pid="\''$(${pkgs.hyprland}/bin/hyprctl activewindow | ${pkgs.ripgrep}/bin/rg pid | ${pkgs.coreutils}/bin/cut -d' ' -f2)" - if [[ -n \''$pid ]]; then - echo "sending \''$pid!" - ${pkgs.dbus}/bin/dbus-send --system --dest=com.system76.Scheduler --type=method_call /com/system76/Scheduler com.system76.Scheduler.SetForegroundProcess uint32:\''$pid - fi - pid="" - fi - echo "continuing.." - done - echo "finished." - EOF - chmod +x $out/bin/hyprland-system76-scheduler-hook.sh - - runHook postInstall - ''; -} diff --git a/.old/pkgs/kanagawa-icons.nix b/.old/pkgs/kanagawa-icons.nix deleted file mode 100644 index 16444da..0000000 --- a/.old/pkgs/kanagawa-icons.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ - stdenv, - fetchFromGitHub, - lib, - gnome-themes-extra, - gtk-engine-murrine, - gtk_engines, -}: -stdenv.mkDerivation rec { - pname = "kanagawa-icons"; - version = "unstable-2023-05-20"; - - src = fetchFromGitHub { - owner = "Fausto-Korpsvart"; - repo = "Kanagawa-GKT-Theme"; - rev = "7b8ece4382533491e82f9b3d5552607f67a79999"; - sha256 = "sha256-Jtu04SKXk0wFRvx2Duz0YxHEWJ2sM8ZIT+dtdJqKykY="; - }; - - buildInputs = [ - gnome-themes-extra # adwaita engine for Gtk2 - gtk_engines # pixmap engine for Gtk2 - ]; - - propagatedUserEnvPkgs = [ - gtk-engine-murrine # murrine engine for Gtk2 - ]; - - installPhase = '' - runHook preInstall - mkdir -p $out/share/icons - cp -a icons/Kanagawa $out/share/icons/Kanagawa - runHook postInstall - ''; -} diff --git a/.old/pkgs/kanagawa-theme.nix b/.old/pkgs/kanagawa-theme.nix deleted file mode 100644 index 5a145c2..0000000 --- a/.old/pkgs/kanagawa-theme.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ - stdenv, - fetchFromGitHub, - lib, - gnome-themes-extra, - gtk-engine-murrine, - gtk_engines, -}: -stdenv.mkDerivation rec { - pname = "kanagawa-gtk-theme"; - version = "unstable-2023-05-20"; - - src = fetchFromGitHub { - owner = "Fausto-Korpsvart"; - repo = "Kanagawa-GKT-Theme"; - rev = "7b8ece4382533491e82f9b3d5552607f67a79999"; - sha256 = "sha256-Jtu04SKXk0wFRvx2Duz0YxHEWJ2sM8ZIT+dtdJqKykY="; - }; - - buildInputs = [ - gnome-themes-extra # adwaita engine for Gtk2 - gtk_engines # pixmap engine for Gtk2 - ]; - - propagatedUserEnvPkgs = [ - gtk-engine-murrine # murrine engine for Gtk2 - ]; - - installPhase = '' - runHook preInstall - mkdir -p $out/share/themes - cp -a themes/Kanagawa-B $out/share/themes/Kanagawa - runHook postInstall - ''; -} diff --git a/.old/pkgs/kwin-system76-scheduler-integration.nix b/.old/pkgs/kwin-system76-scheduler-integration.nix deleted file mode 100644 index 121a149..0000000 --- a/.old/pkgs/kwin-system76-scheduler-integration.nix +++ /dev/null @@ -1,63 +0,0 @@ -{ - lib, - pkgs, - stdenv, - fetchFromGitHub, - dbus, - qt5, - qtbase, - wrapQtAppsHook, - kpackage, - kcoreaddons, - ... -}: -stdenv.mkDerivation rec { - pname = "kwin-system76-scheduler-integration"; - version = "0.1"; - - src = fetchFromGitHub { - owner = "maxiberta"; - repo = pname; - rev = version; - sha256 = "sha256-HX0nK1p97kqt+ZZuECm7Mg9aAXaFDnsJDkbcLUEU+p0="; - }; - - nativeBuildInputs = [ - wrapQtAppsHook - kpackage - ]; - - buildInputs = [ - dbus - qt5.qttools.bin - ]; - - dontBuild = true; - - installPhase = '' - runHook preInstall - - mkdir -p $out/bin - kpackagetool5 --type=KWin/Script -i . -p $out/share/kwin/scripts - - cat < $out/bin/kwin-system76-scheduler-dbus-proxy.sh - #!${pkgs.bash}/bin/bash - DBUS_SERVICE="com.system76.Scheduler" - DBUS_PATH="/com/system76/Scheduler" - DBUS_INTERFACE="com.system76.Scheduler" - DBUS_METHOD="SetForegroundProcess" - echo "starting dbus proxy.." - echo \''$DBUS_SERVICE \''$DBUS_PATH \''$DBUS_INTERFACE \''$DBUS_METHOD - ${pkgs.dbus}/bin/dbus-monitor --session "destination=\''$DBUS_SERVICE,path=\''$DBUS_PATH,interface=\''$DBUS_INTERFACE,member=\''$DBUS_METHOD" | - while true; do - read method call time sender _ dest serial path interface member - read type pid - [ "\''$member" = "member=\''$DBUS_METHOD" ] && ${pkgs.libsForQt5.qt5.qttools.bin}/bin/qdbus --system \''$DBUS_SERVICE \''$DBUS_PATH \''$DBUS_INTERFACE.\''$DBUS_METHOD \''$pid && echo "new foreground process: \''$pid" - done - EOF - - chmod +x $out/bin/kwin-system76-scheduler-dbus-proxy.sh - - runHook postInstall - ''; -} diff --git a/.old/pkgs/lemurs.nix b/.old/pkgs/lemurs.nix deleted file mode 100644 index ded9d12..0000000 --- a/.old/pkgs/lemurs.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ - lib, - fetchFromGitHub, - rustPlatform, - linux-pam, - pkg-config, -}: -rustPlatform.buildRustPackage rec { - pname = "lemurs"; - version = "0.3.1"; - - src = fetchFromGitHub { - owner = "coastalwhite"; - repo = pname; - rev = "60fda2a"; - sha256 = "sha256-mQXavJULD5iyOnzj72xTV0EQ1HQvj25SHsbDgfRg4lQ="; - }; - - nativeBuildInputs = [ pkg-config ]; - buildInputs = [ linux-pam ]; - - cargoSha256 = "sha256-OCaIeQB8reK0089vbC+4IvQt5pKdZ2SCyyGuQEYWzjo="; - - meta = with lib; { - description = "A customizable TUI display/login manager written in Rust"; - homepage = "https://git.atagen.co/coastalwhite/lemurs"; - license = licenses.mit; - maintainers = [ ]; - }; -} diff --git a/.old/pkgs/ly.nix b/.old/pkgs/ly.nix deleted file mode 100644 index 4699e88..0000000 --- a/.old/pkgs/ly.nix +++ /dev/null @@ -1,50 +0,0 @@ -{ - stdenv, - lib, - fetchFromGitHub, - linux-pam, - libxcb, - git, -}: -stdenv.mkDerivation rec { - pname = "ly"; - version = "0.5.0+"; - - src = fetchFromGitHub { - owner = "fairyglade"; - repo = pname; - rev = "c64f806a68af225cc95623971b5e464abb55b879"; - sha256 = "sha256-orCqjKlK6U1q7NDoMwxZZE44cyG8yuxdCCk1cQAalP0="; - fetchSubmodules = true; - }; - - nativeBuildInputs = [ git ]; - buildInputs = [ - linux-pam - libxcb - ]; - makeFlags = [ "FLAGS=-Wno-error=unused-result" ]; - - preBuildPhase = '' - mkdir -p ./data - export DESTDIR="$PWD" - export DATADIR="$PWD/data" - ''; - buildPhase = '' - make -j16 - ''; - - installPhase = '' - mkdir -p $out/bin - cp bin/ly $out/bin - mkdir -p $out/etc/ly - cp -R ./data/* $out/etc/ly - ''; - - meta = with lib; { - description = "TUI display manager"; - license = licenses.wtfpl; - homepage = "https://github.com/fairyglade/ly"; - maintainers = [ ]; - }; -} diff --git a/.old/pkgs/pygments.nix b/.old/pkgs/pygments.nix deleted file mode 100644 index a9a5170..0000000 --- a/.old/pkgs/pygments.nix +++ /dev/null @@ -1,56 +0,0 @@ -{ - lib, - buildPythonPackage, - fetchPypi, - docutils, - lxml, - pytestCheckHook, - wcag-contrast-ratio, -}: -let - pygments = buildPythonPackage rec { - pname = "pygments"; - version = "2.15.1"; - - src = fetchPypi { - pname = "Pygments"; - inherit version; - sha256 = "sha256-is5NPB3UgYlLIAX1YOrQ+fGe5k/pgzZr4aIeFx0Sd1w="; - }; - - format = "egg"; - - propagatedBuildInputs = [ - docutils - ]; - - # circular dependencies if enabled by default - doCheck = false; - checkInputs = [ - lxml - pytestCheckHook - wcag-contrast-ratio - ]; - - disabledTestPaths = [ - # 5 lines diff, including one nix store path in 20000+ lines - "tests/examplefiles/bash/ltmain.sh" - ]; - - pythonImportsCheck = [ "pygments" ]; - - passthru.tests = { - check = pygments.overridePythonAttrs (_: { - doCheck = true; - }); - }; - - meta = with lib; { - homepage = "https://pygments.org/"; - description = "A generic syntax highlighter"; - license = licenses.bsd2; - maintainers = with maintainers; [ SuperSandro2000 ]; - }; - }; -in -pygments diff --git a/.old/pkgs/rose-pine-icons.nix b/.old/pkgs/rose-pine-icons.nix deleted file mode 100644 index d4024c0..0000000 --- a/.old/pkgs/rose-pine-icons.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ - stdenv, - fetchFromGitHub, - lib, - gnome-themes-extra, - gtk-engine-murrine, - gtk_engines, -}: -stdenv.mkDerivation rec { - pname = "rose-pine-icons"; - version = "unstable-2023-05-20"; - - src = fetchFromGitHub { - owner = "Fausto-Korpsvart"; - repo = "Rose-Pine-GTK-Theme"; - rev = "95aa1f2b2cc30495b1fc5b614dc555b3eef0e27d"; - sha256 = "sha256-I9UnEhXdJ+HSMFE6R+PRNN3PT6ZAAzqdtdQNQWt7o4Y="; - }; - - buildInputs = [ - gnome-themes-extra # adwaita engine for Gtk2 - gtk_engines # pixmap engine for Gtk2 - ]; - - propagatedUserEnvPkgs = [ - gtk-engine-murrine # murrine engine for Gtk2 - ]; - - installPhase = '' - runHook preInstall - mkdir -p $out/share/icons - cp -a icons/Rose-Pine $out/share/icons/Rose-Pine - runHook postInstall - ''; -} diff --git a/.old/pkgs/rose-pine-theme.nix b/.old/pkgs/rose-pine-theme.nix deleted file mode 100644 index fff2b10..0000000 --- a/.old/pkgs/rose-pine-theme.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ - stdenv, - fetchFromGitHub, - lib, - gnome-themes-extra, - gtk-engine-murrine, - gtk_engines, -}: -stdenv.mkDerivation rec { - pname = "rose-pine-gtk-theme"; - version = "unstable-2023-05-20"; - - src = fetchFromGitHub { - owner = "Fausto-Korpsvart"; - repo = "Rose-Pine-GTK-Theme"; - rev = "95aa1f2b2cc30495b1fc5b614dc555b3eef0e27d"; - sha256 = "sha256-I9UnEhXdJ+HSMFE6R+PRNN3PT6ZAAzqdtdQNQWt7o4Y="; - }; - - buildInputs = [ - gnome-themes-extra # adwaita engine for Gtk2 - gtk_engines # pixmap engine for Gtk2 - ]; - - propagatedUserEnvPkgs = [ - gtk-engine-murrine # murrine engine for Gtk2 - ]; - - installPhase = '' - runHook preInstall - mkdir -p $out/share/themes - cp -a themes/RosePine-Main-B $out/share/themes/RosePine-Main - runHook postInstall - ''; -} diff --git a/.old/pkgs/simplewaita-gtk.nix b/.old/pkgs/simplewaita-gtk.nix deleted file mode 100644 index 48c8fd4..0000000 --- a/.old/pkgs/simplewaita-gtk.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ - stdenvNoCC, - lib, - fetchFromGitea, -}: -stdenvNoCC.mkDerivation rec { - pname = "Simplewaita"; - version = "0.1.0"; - - src = fetchFromGitea { - domain = "git.disroot.org"; - owner = "eudaimon"; - repo = pname; - rev = "16c5f75fd3e03671c3998dcb9a67e3ff6da5a538"; - hash = "sha256-VvPQGsdikfIi3VG5Mh8FcioTVwXaxKxaSf2X+yWJckA="; - }; - - dontPatch = true; - dontConfigure = true; - installPhase = '' - mkdir $out - cp -r ./ $out - ''; - dontBuild = true; - dontFixup = true; - - meta = with lib; { - description = "A mix of Skewaita and Simple. Or, more precisely: Skewaita Simple-ified."; - homepage = "https://git.disroot.org/eudaimon/Simplewaita"; - license = licenses.gpl1Only; - platforms = platforms.linux; - }; -} diff --git a/.old/sway-nvidia.patch b/.old/sway-nvidia.patch deleted file mode 100644 index 5247dfe..0000000 --- a/.old/sway-nvidia.patch +++ /dev/null @@ -1,47 +0,0 @@ -diff --git a/sway/main.c b/sway/main.c -index 85bc2f1c..a2f76590 100644 ---- a/sway/main.c -+++ b/sway/main.c -@@ -50,41 +50,7 @@ void sig_handler(int signal) { - } - - void detect_proprietary(int allow_unsupported_gpu) { -- FILE *f = fopen("/proc/modules", "r"); -- if (!f) { -- return; -- } -- char *line = NULL; -- size_t line_size = 0; -- while (getline(&line, &line_size, f) != -1) { -- if (strncmp(line, "nvidia ", 7) == 0) { -- if (allow_unsupported_gpu) { -- sway_log(SWAY_ERROR, -- "!!! Proprietary Nvidia drivers are in use !!!"); -- } else { -- sway_log(SWAY_ERROR, -- "Proprietary Nvidia drivers are NOT supported. " -- "Use Nouveau. To launch sway anyway, launch with " -- "--unsupported-gpu and DO NOT report issues."); -- exit(EXIT_FAILURE); -- } -- break; -- } -- if (strstr(line, "fglrx")) { -- if (allow_unsupported_gpu) { -- sway_log(SWAY_ERROR, -- "!!! Proprietary AMD drivers are in use !!!"); -- } else { -- sway_log(SWAY_ERROR, "Proprietary AMD drivers do NOT support " -- "Wayland. Use radeon. To try anyway, launch sway with " -- "--unsupported-gpu and DO NOT report issues."); -- exit(EXIT_FAILURE); -- } -- break; -- } -- } -- free(line); -- fclose(f); -+ return; - } - - void run_as_ipc_client(char *command, char *socket_path) { diff --git a/.old/top n bottom.layout.latte b/.old/top n bottom.layout.latte deleted file mode 100644 index 2314fa0..0000000 --- a/.old/top n bottom.layout.latte +++ /dev/null @@ -1,278 +0,0 @@ -[ActionPlugins][1] -RightButton;NoModifier=org.kde.latte.contextmenu - -[Containments][1] -activityId= -byPassWM=false -dockWindowBehavior=true -enableKWinEdges=true -formfactor=2 -immutability=1 -isPreferredForShortcuts=false -lastScreen=-1 -layoutId= -location=4 -name=Default Dock -onPrimary=true -plugin=org.kde.latte.containment -raiseOnActivityChange=false -raiseOnDesktopChange=false -timerHide=700 -timerShow=200 -viewType=0 -visibility=2 -wallpaperplugin=org.kde.image - -[Containments][1][Applets][2] -immutability=1 -plugin=org.kde.latte.plasmoid - -[Containments][1][Applets][2][Configuration] -PreloadWeight=0 - -[Containments][1][Applets][2][Configuration][General] -isInLatteDock=true -launchers59=applications:firefox.desktop,applications:org.kde.dolphin.desktop - -[Containments][1][Applets][3] -immutability=1 -plugin=org.kde.plasma.analogclock - -[Containments][1][Applets][3][Configuration] -PreloadWeight=0 - -[Containments][1][ConfigDialog] -DialogHeight=600 -DialogWidth=586 - -[Containments][1][Configuration] -PreloadWeight=0 - -[Containments][1][General] -advanced=false -alignmentUpgraded=true -appletOrder=2;3 -configurationSticker=true -panelSize=10 -shadowOpacity=60 -shadowSize=45 -shadows=All -shadowsUpgraded=true -showGlow=false -tasksUpgraded=true -titleTooltips=false -zoomLevel=17 - -[Containments][1][Indicator] -customType= -enabled=true -type=org.kde.latte.default - -[Containments][17] -PreloadWeight=0 -activityId= -formfactor=2 -immutability=1 -lastScreen=11 -layoutId= -location=3 -plugin=org.kde.plasma.private.systemtray -wallpaperplugin=org.kde.image - -[Containments][17][Applets][122] -immutability=1 -plugin=org.kde.plasma.manage-inputmethod - -[Containments][17][Applets][123] -immutability=1 -plugin=org.kde.plasma.keyboardlayout - -[Containments][17][Applets][88] -immutability=1 -plugin=org.kde.plasma.notifications - -[Containments][17][Applets][89] -immutability=1 -plugin=org.kde.plasma.battery - -[Containments][17][Applets][90] -immutability=1 -plugin=org.kde.plasma.printmanager - -[Containments][17][Applets][91] -immutability=1 -plugin=org.kde.plasma.volume - -[Containments][17][Applets][92] -immutability=1 -plugin=org.kde.plasma.nightcolorcontrol - -[Containments][17][Applets][93] -immutability=1 -plugin=org.kde.plasma.keyboardindicator - -[Containments][17][Applets][94] -immutability=1 -plugin=org.kde.plasma.networkmanagement - -[Containments][17][Applets][95] -immutability=1 -plugin=org.kde.plasma.clipboard - -[Containments][17][Applets][96] -immutability=1 -plugin=org.kde.plasma.bluetooth - -[Containments][17][Applets][97] -immutability=1 -plugin=org.kde.plasma.devicenotifier - -[Containments][17][Applets][98] -immutability=1 -plugin=org.kde.kdeconnect - -[Containments][17][ConfigDialog] -DialogHeight=1025 -DialogWidth=963 - -[Containments][17][Configuration] -PreloadWeight=26 - -[Containments][17][General] -extraItems=org.kde.plasma.manage-inputmethod,org.kde.plasma.notifications,org.kde.plasma.devicenotifier,org.kde.plasma.clipboard,org.kde.plasma.mediacontroller,org.kde.plasma.battery,org.kde.kdeconnect,org.kde.plasma.keyboardlayout,org.kde.plasma.keyboardindicator,org.kde.plasma.volume,org.kde.plasma.networkmanagement,org.kde.plasma.printmanager,org.kde.plasma.nightcolorcontrol -knownItems=org.kde.plasma.manage-inputmethod,org.kde.plasma.notifications,org.kde.plasma.devicenotifier,org.kde.plasma.clipboard,org.kde.plasma.mediacontroller,org.kde.plasma.battery,org.kde.kdeconnect,org.kde.plasma.keyboardlayout,org.kde.plasma.keyboardindicator,org.kde.plasma.volume,org.kde.plasma.networkmanagement,org.kde.plasma.printmanager,org.kde.plasma.nightcolorcontrol - -[Containments][19] -activityId= -byPassWM=false -dockWindowBehavior=true -enableKWinEdges=true -formfactor=2 -immutability=1 -isPreferredForShortcuts=false -lastScreen=11 -layoutId= -location=3 -maxLength=100 -name=Default Panel -onPrimary=true -plugin=org.kde.latte.containment -raiseOnActivityChange=false -raiseOnDesktopChange=false -settingsComplexity=4 -timerHide=700 -timerShow=200 -viewType=0 -visibility=0 -wallpaperplugin=org.kde.image - -[Containments][19][Applets][112] -immutability=1 -plugin=org.kde.plasma.kickoff - -[Containments][19][Applets][112][Configuration][General] -favoritesPortedToKAstats=true - -[Containments][19][Applets][113] -immutability=1 -plugin=org.kde.plasma.digitalclock - -[Containments][19][Applets][114] -immutability=1 -plugin=org.kde.plasma.systemtray - -[Containments][19][Applets][114][Configuration] -PreloadWeight=100 -SystrayContainmentId=17 - -[Containments][19][Applets][115] -immutability=1 -plugin=org.kde.plasma.pager - -[Containments][19][Applets][116] -immutability=1 -plugin=org.kde.plasma.marginsseparator - -[Containments][19][Applets][124] -immutability=1 -plugin=org.kde.windowtitle - -[Containments][19][Applets][124][Configuration][General] -containmentType=Latte - -[Containments][19][Applets][125] -immutability=1 -plugin=org.kde.plasma.lock_logout - -[Containments][19][Applets][126] -immutability=1 -plugin=org.kde.plasma.marginsseparator - -[Containments][19][ConfigDialog] -DialogHeight=1254 -DialogWidth=529 - -[Containments][19][Configuration] -PreloadWeight=0 - -[Containments][19][General] -advanced=true -alignment=10 -alignmentUpgraded=true -appletOrder=112;124;115;116;114;113;126;125 -appletShadowsEnabled=false -autoDecreaseIconSize=false -backgroundRadius=0 -backgroundShadowSize=0 -blurEnabled=false -configurationSticker=true -dragActiveWindowEnabled=true -floatingInternalGapIsForced=false -iconSize=24 -inConfigureAppletsMode=true -lockedZoomApplets=112;113 -mouseWheelActions=false -panelPosition=10 -panelShadows=false -panelSize=100 -plasmaBackgroundForPopups=true -screenEdgeMargin=0 -shadowOpacity=25 -shadows=None -shadowsUpgraded=true -splitterPosition=2 -splitterPosition2=4 -taskScrollAction=ScrollNone -tasksUpgraded=true -thickMargin=11 -titleTooltips=false -zoomLevel=0 - -[Containments][19][Indicator] -customType=org.kde.latte.unity -enabled=true -enabledForApplets=true -padding=0.09000000357627869 -type=org.kde.latte.default - -[Containments][19][Indicator][org.kde.latte.default][General] -lengthPadding=0.3 -reversed=true - -[Containments][19][Indicator][org.kde.latte.plasma][General] -lengthPadding=0.19 - -[LayoutSettings] -activities= -backgroundStyle=0 -color=blue -customBackground= -customTextColor= -icon= -lastUsedActivity= -launchers= -popUpMargin=-1 -preferredForShortcutsTouched=false -schemeFile= -showInMenu=true -version=2 diff --git a/.old/wollomi-xorg.conf b/.old/wollomi-xorg.conf deleted file mode 100644 index e21a00b..0000000 --- a/.old/wollomi-xorg.conf +++ /dev/null @@ -1,63 +0,0 @@ -# nvidia-settings: X configuration file generated by nvidia-settings -# nvidia-settings: version 515.48.07 - -Section "ServerLayout" - Identifier "Layout0" - Screen 0 "Screen0" 0 0 - InputDevice "Keyboard0" "CoreKeyboard" - InputDevice "Mouse0" "CorePointer" - Option "Xinerama" "0" -EndSection - -Section "Files" -EndSection - -Section "InputDevice" - # generated from default - Identifier "Mouse0" - Driver "mouse" - Option "Protocol" "auto" - Option "Device" "/dev/input/mice" - Option "Emulate3Buttons" "no" - Option "ZAxisMapping" "4 5" -EndSection - -Section "InputDevice" - # generated from default - Identifier "Keyboard0" - Driver "kbd" -EndSection - -Section "Monitor" - # HorizSync source: edid, VertRefresh source: edid - Identifier "Monitor0" - VendorName "Unknown" - ModelName "LG Electronics W2343" - HorizSync 30.0 - 83.0 - VertRefresh 56.0 - 75.0 - Option "DPMS" -EndSection - -Section "Device" - Identifier "Device0" - Driver "nvidia" - VendorName "NVIDIA Corporation" - BoardName "NVIDIA GeForce GTX 1070" -EndSection - -Section "Screen" - Identifier "Screen0" - Device "Device0" - Monitor "Monitor0" - DefaultDepth 24 - Option "Stereo" "0" - Option "nvidiaXineramaInfoOrder" "DFP-0" - Option "metamodes" "DVI-D-0: nvidia-auto-select +1050+265, HDMI-0: nvidia-auto-select +0+0 {rotation=left}" - Option "SLI" "Off" - Option "MultiGPU" "Off" - Option "BaseMosaic" "off" - SubSection "Display" - Depth 24 - EndSubSection -EndSection - diff --git a/.p10k.zsh b/.p10k.zsh deleted file mode 100644 index e6f0698..0000000 --- a/.p10k.zsh +++ /dev/null @@ -1,1729 +0,0 @@ -# Generated by Powerlevel10k configuration wizard on 2022-08-17 at 23:20 AEST. -# Based on romkatv/powerlevel10k/config/p10k-rainbow.zsh. -# Wizard options: nerdfont-complete + powerline, small icons, rainbow, unicode, -# slanted separators, round heads, sharp tails, 2 lines, disconnected, left frame, -# light-ornaments, sparse, many icons, fluent, transient_prompt, instant_prompt=quiet. -# Type `p10k configure` to generate another config. -# -# Config for Powerlevel10k with powerline prompt style with colorful background. -# Type `p10k configure` to generate your own config based on it. -# -# Tip: Looking for a nice color? Here's a one-liner to print colormap. -# -# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done - -# Temporarily change options. -'builtin' 'local' '-a' 'p10k_config_opts' -[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') -[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') -[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') -'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' - -() { - emulate -L zsh -o extended_glob - - # Unset all configuration options. This allows you to apply configuration changes without - # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. - unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' - - # Zsh >= 5.1 is required. - autoload -Uz is-at-least && is-at-least 5.1 || return - - # The list of segments shown on the left. Fill it with the most important segments. - typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( - # =========================[ Line #1 ]========================= - os_icon # os identifier - dir # current directory - vcs # git status - # =========================[ Line #2 ]========================= - newline # \n - # prompt_char # prompt symbol - ) - - # The list of segments shown on the right. Fill it with less important segments. - # Right prompt on the last prompt line (where you are typing your commands) gets - # automatically hidden when the input line reaches it. Right prompt above the - # last prompt line gets hidden if it would overlap with left prompt. - typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( - # =========================[ Line #1 ]========================= - status # exit code of the last command - command_execution_time # duration of the last command - background_jobs # presence of background jobs - direnv # direnv status (https://direnv.net/) - asdf # asdf version manager (https://github.com/asdf-vm/asdf) - virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) - anaconda # conda environment (https://conda.io/) - pyenv # python environment (https://github.com/pyenv/pyenv) - goenv # go environment (https://github.com/syndbg/goenv) - nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) - nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) - nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) - # node_version # node.js version - # go_version # go version (https://golang.org) - # rust_version # rustc version (https://www.rust-lang.org) - # dotnet_version # .NET version (https://dotnet.microsoft.com) - # php_version # php version (https://www.php.net/) - # laravel_version # laravel php framework version (https://laravel.com/) - # java_version # java version (https://www.java.com/) - # package # name@version from package.json (https://docs.npmjs.com/files/package.json) - rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) - rvm # ruby version from rvm (https://rvm.io) - fvm # flutter version management (https://github.com/leoafarias/fvm) - luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) - jenv # java version from jenv (https://github.com/jenv/jenv) - plenv # perl version from plenv (https://github.com/tokuhirom/plenv) - phpenv # php version from phpenv (https://github.com/phpenv/phpenv) - scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv) - haskell_stack # haskell version from stack (https://haskellstack.org/) - kubecontext # current kubernetes context (https://kubernetes.io/) - terraform # terraform workspace (https://www.terraform.io) - # terraform_version # terraform version (https://www.terraform.io) - aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) - aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) - azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) - gcloud # google cloud cli account and project (https://cloud.google.com/) - google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) - toolbox # toolbox name (https://github.com/containers/toolbox) - context # user@hostname - nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) - ranger # ranger shell (https://github.com/ranger/ranger) - nnn # nnn shell (https://github.com/jarun/nnn) - xplr # xplr shell (https://github.com/sayanarijit/xplr) - vim_shell # vim shell indicator (:sh) - midnight_commander # midnight commander shell (https://midnight-commander.org/) - nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) - vi_mode # vi mode (you don't need this if you've enabled prompt_char) - # vpn_ip # virtual private network indicator - # load # CPU load - # disk_usage # disk usage - # ram # free RAM - # swap # used swap - todo # todo items (https://github.com/todotxt/todo.txt-cli) - timewarrior # timewarrior tracking status (https://timewarrior.net/) - taskwarrior # taskwarrior task count (https://taskwarrior.org/) - # time # current time - # =========================[ Line #2 ]========================= - newline - # ip # ip address and bandwidth usage for a specified network interface - # public_ip # public IP address - # proxy # system-wide http/https/ftp proxy - # battery # internal battery - # wifi # wifi speed - # example # example user-defined segment (see prompt_example function below) - ) - - # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you. - typeset -g POWERLEVEL9K_MODE=nerdfont-complete - # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid - # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added. - typeset -g POWERLEVEL9K_ICON_PADDING=none - - # When set to true, icons appear before content on both sides of the prompt. When set - # to false, icons go after content. If empty or not set, icons go before content in the left - # prompt and after content in the right prompt. - # - # You can also override it for a specific segment: - # - # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false - # - # Or for a specific segment in specific state: - # - # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false - typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT= - - # Add an empty line before each prompt. - typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true - - # Connect left prompt lines with these symbols. You'll probably want to use the same color - # as POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND below. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='%242F╭─' - typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX='%242F├─' - typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='%242F╰─' - # Connect right prompt lines with these symbols. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX= - typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX= - typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX= - - # Filler between left and right prompt on the first prompt line. You can set it to ' ', '·' or - # '─'. The last two make it easier to see the alignment between left and right prompt and to - # separate prompt from command output. You might want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false - # for more compact prompt if using using this option. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND= - typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_BACKGROUND= - if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then - # The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE - # ornaments defined above. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=242 - # Start filler from the edge of the screen if there are no left segments on the first line. - typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' - # End filler on the edge of the screen if there are no right segments on the first line. - typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' - fi - - # Separator between same-color segments on the left. - typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='\u2571' - # Separator between same-color segments on the right. - typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='\u2571' - # Separator between different-color segments on the left. - typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0BC' - # Separator between different-color segments on the right. - typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0BA' - # The right end of left prompt. - typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B4' - # The left end of right prompt. - typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0B6' - # The left end of left prompt. - typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0B2' - # The right end of right prompt. - typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B0' - # Left prompt terminator for lines without any segments. - typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= - - #################################[ os_icon: os identifier ]################################## - # OS identifier color. - typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=232 - typeset -g POWERLEVEL9K_OS_ICON_BACKGROUND=7 - # Custom icon. - # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐' - - ################################[ prompt_char: prompt symbol ]################################ - # Transparent background. - typeset -g POWERLEVEL9K_PROMPT_CHAR_BACKGROUND= - # Green prompt symbol if the last command succeeded. - typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76 - # Red prompt symbol if the last command failed. - typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196 - # Default prompt symbol. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' - # Prompt symbol in command vi mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' - # Prompt symbol in visual vi mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V' - # Prompt symbol in overwrite vi mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶' - typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true - # No line terminator if prompt_char is the last segment. - typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= - # No line introducer if prompt_char is the first segment. - typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= - # No surrounding whitespace. - typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_{LEFT,RIGHT}_WHITESPACE= - - ##################################[ dir: current directory ]################################## - # Current directory background color. - typeset -g POWERLEVEL9K_DIR_BACKGROUND=4 - # Default current directory foreground color. - typeset -g POWERLEVEL9K_DIR_FOREGROUND=254 - # If directory is too long, shorten some of its segments to the shortest possible unique - # prefix. The shortened directory can be tab-completed to the original. - typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique - # Replace removed segment suffixes with this symbol. - typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= - # Color of the shortened directory segments. - typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=250 - # Color of the anchor directory segments. Anchor segments are never shortened. The first - # segment is always an anchor. - typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=255 - # Display anchor directory segments in bold. - typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true - # Don't shorten directories that contain any of these files. They are anchors. - local anchor_files=( - .bzr - .citc - .git - .hg - .node-version - .python-version - .go-version - .ruby-version - .lua-version - .java-version - .perl-version - .php-version - .tool-version - .shorten_folder_marker - .svn - .terraform - CVS - Cargo.toml - composer.json - go.mod - package.json - stack.yaml - ) - typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" - # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains - # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is - # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first) - # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers - # and other directories don't. - # - # Optionally, "first" and "last" can be followed by ":" where is an integer. - # This moves the truncation point to the right (positive offset) or to the left (negative offset) - # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0" - # respectively. - typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false - # Don't shorten this many last directory segments. They are anchors. - typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 - # Shorten directory if it's longer than this even if there is space for it. The value can - # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, - # directory will be shortened only when prompt doesn't fit or when other parameters demand it - # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). - # If set to `0`, directory will always be shortened to its minimum length. - typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 - # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this - # many columns for typing commands. - typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 - # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least - # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. - typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 - # If set to true, embed a hyperlink into the directory. Useful for quickly - # opening a directory in the file manager simply by clicking the link. - # Can also be handy when the directory is shortened, as it allows you to see - # the full directory that was used in previous commands. - typeset -g POWERLEVEL9K_DIR_HYPERLINK=false - - # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON - # and POWERLEVEL9K_DIR_CLASSES below. - typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3 - - # The default icon shown next to non-writable and non-existent directories when - # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3. - # typeset -g POWERLEVEL9K_LOCK_ICON='⭐' - - # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different - # directories. It must be an array with 3 * N elements. Each triplet consists of: - # - # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with - # extended_glob option enabled. - # 2. Directory class for the purpose of styling. - # 3. An empty string. - # - # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. - # - # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories - # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_DIR_CLASSES=( - # '~/work(|/*)' WORK '' - # '~(|/*)' HOME '' - # '*' DEFAULT '') - # - # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one - # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or - # WORK_NON_EXISTENT. - # - # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an - # option to define custom colors and icons for different directory classes. - # - # # Styling for WORK. - # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_DIR_WORK_BACKGROUND=4 - # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=254 - # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=250 - # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=255 - # - # # Styling for WORK_NOT_WRITABLE. - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_BACKGROUND=4 - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=254 - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=250 - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=255 - # - # # Styling for WORK_NON_EXISTENT. - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_BACKGROUND=4 - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=254 - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=250 - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=255 - # - # If a styling parameter isn't explicitly defined for some class, it falls back to the classless - # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls - # back to POWERLEVEL9K_DIR_FOREGROUND. - # - # typeset -g POWERLEVEL9K_DIR_CLASSES=() - - # Custom prefix. - # typeset -g POWERLEVEL9K_DIR_PREFIX='in ' - - #####################################[ vcs: git status ]###################################### - # Version control system colors. - typeset -g POWERLEVEL9K_VCS_CLEAN_BACKGROUND=2 - typeset -g POWERLEVEL9K_VCS_MODIFIED_BACKGROUND=3 - typeset -g POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND=2 - typeset -g POWERLEVEL9K_VCS_CONFLICTED_BACKGROUND=3 - typeset -g POWERLEVEL9K_VCS_LOADING_BACKGROUND=8 - - # Branch icon. Set this parameter to '\uF126 ' for the popular Powerline branch icon. - typeset -g POWERLEVEL9K_VCS_BRANCH_ICON='\uF126 ' - - # Untracked files icon. It's really a question mark, your font isn't broken. - # Change the value of this parameter to show a different icon. - typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' - - # Formatter for Git status. - # - # Example output: master wip ⇣42⇡42 *42 merge ~42 +42 !42 ?42. - # - # You can edit the function to customize how Git status looks. - # - # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: - # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. - function my_git_formatter() { - emulate -L zsh - - if [[ -n $P9K_CONTENT ]]; then - # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from - # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. - typeset -g my_git_format=$P9K_CONTENT - return - fi - - # Styling for different parts of Git status. - local meta='%7F' # white foreground - local clean='%0F' # black foreground - local modified='%0F' # black foreground - local untracked='%0F' # black foreground - local conflicted='%1F' # red foreground - - local res - - if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then - local branch=${(V)VCS_STATUS_LOCAL_BRANCH} - # If local branch name is at most 32 characters long, show it in full. - # Otherwise show the first 12 … the last 12. - # Tip: To always show local branch name in full without truncation, delete the next line. - (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line - res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" - fi - - if [[ -n $VCS_STATUS_TAG - # Show tag only if not on a branch. - # Tip: To always show tag, delete the next line. - && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line - ]]; then - local tag=${(V)VCS_STATUS_TAG} - # If tag name is at most 32 characters long, show it in full. - # Otherwise show the first 12 … the last 12. - # Tip: To always show tag name in full without truncation, delete the next line. - (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line - res+="${meta}#${clean}${tag//\%/%%}" - fi - - # Display the current Git commit if there is no branch and no tag. - # Tip: To always display the current Git commit, delete the next line. - [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && # <-- this line - res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" - - # Show tracking branch name if it differs from local branch. - if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then - res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" - fi - - # Display "wip" if the latest commit's summary contains "wip" or "WIP". - if [[ $VCS_STATUS_COMMIT_SUMMARY == (|*[^[:alnum:]])(wip|WIP)(|[^[:alnum:]]*) ]]; then - res+=" ${modified}wip" - fi - - # ⇣42 if behind the remote. - (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}" - # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42. - (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " - (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}" - # ⇠42 if behind the push remote. - (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}" - (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " - # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42. - (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}" - # *42 if have stashes. - (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" - # 'merge' if the repo is in an unusual state. - [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" - # ~42 if have merge conflicts. - (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" - # +42 if have staged changes. - (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" - # !42 if have unstaged changes. - (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" - # ?42 if have untracked files. It's really a question mark, your font isn't broken. - # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. - # Remove the next line if you don't want to see untracked files at all. - (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" - # "─" if the number of unstaged files is unknown. This can happen due to - # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower - # than the number of files in the Git index, or due to bash.showDirtyState being set to false - # in the repository config. The number of staged and untracked files may also be unknown - # in this case. - (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─" - - typeset -g my_git_format=$res - } - functions -M my_git_formatter 2>/dev/null - - # Don't count the number of unstaged, untracked and conflicted files in Git repositories with - # more than this many files in the index. Negative value means infinity. - # - # If you are working in Git repositories with tens of millions of files and seeing performance - # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output - # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's - # config: `git config bash.showDirtyState false`. - typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 - - # Don't show Git status in prompt for repositories whose workdir matches this pattern. - # For example, if set to '~', the Git repository at $HOME/.git will be ignored. - # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. - typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' - - # Disable the default Git status formatting. - typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true - # Install our own Git status formatter. - typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter()))+${my_git_format}}' - # Enable counters for staged, unstaged, etc. - typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 - - # Custom icon. - # typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - typeset -g POWERLEVEL9K_VCS_PREFIX='on ' - - # Show status of repositories of these types. You can add svn and/or hg if you are - # using them. If you do, your prompt may become slow even when your current directory - # isn't in an svn or hg reposotiry. - typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) - - ##########################[ status: exit code of the last command ]########################### - # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and - # style them independently from the regular OK and ERROR state. - typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true - - # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as - # it will signify success by turning green. - typeset -g POWERLEVEL9K_STATUS_OK=true - typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' - typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=2 - typeset -g POWERLEVEL9K_STATUS_OK_BACKGROUND=0 - - # Status when some part of a pipe command fails but the overall exit status is zero. It may look - # like this: 1|0. - typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true - typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔' - typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=2 - typeset -g POWERLEVEL9K_STATUS_OK_PIPE_BACKGROUND=0 - - # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as - # it will signify error by turning red. - typeset -g POWERLEVEL9K_STATUS_ERROR=true - typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' - typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=3 - typeset -g POWERLEVEL9K_STATUS_ERROR_BACKGROUND=1 - - # Status when the last command was terminated by a signal. - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true - # Use terse signal names: "INT" instead of "SIGINT(2)". - typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=3 - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_BACKGROUND=1 - - # Status when some part of a pipe command fails and the overall exit status is also non-zero. - # It may look like this: 1|0. - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=3 - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_BACKGROUND=1 - - ###################[ command_execution_time: duration of the last command ]################### - # Execution time color. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=0 - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_BACKGROUND=3 - # Show duration of the last command if takes at least this many seconds. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 - # Show this many fractional digits. Zero means round to seconds. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 - # Duration format: 1d 2h 3m 4s. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' - # Custom icon. - # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='took ' - - #######################[ background_jobs: presence of background jobs ]####################### - # Background jobs color. - typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=6 - typeset -g POWERLEVEL9K_BACKGROUND_JOBS_BACKGROUND=0 - # Don't show the number of background jobs. - typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false - # Custom icon. - # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######################[ direnv: direnv status (https://direnv.net/) ]######################## - # Direnv color. - typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=3 - typeset -g POWERLEVEL9K_DIRENV_BACKGROUND=0 - # Custom icon. - # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### - # Default asdf color. Only used to display tools for which there is no color override (see below). - # Tip: Override these parameters for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND and - # POWERLEVEL9K_ASDF_${TOOL}_BACKGROUND. - typeset -g POWERLEVEL9K_ASDF_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_BACKGROUND=7 - - # There are four parameters that can be used to hide asdf tools. Each parameter describes - # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at - # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to - # hide a tool, it gets shown. - # - # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and - # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: - # - # asdf local python 3.8.1 - # asdf global python 3.8.1 - # - # After running both commands the current python version is 3.8.1 and its source is "local" as - # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, - # it'll hide python version in this case because 3.8.1 is the same as the global version. - # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't - # contain "local". - - # Hide tool versions that don't come from one of these sources. - # - # Available sources: - # - # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" - # - local `asdf current` says "set by /some/not/home/directory/file" - # - global `asdf current` says "set by /home/username/file" - # - # Note: If this parameter is set to (shell local global), it won't hide tools. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. - typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) - - # If set to false, hide tool versions that are the same as global. - # - # Note: The name of this parameter doesn't reflect its meaning at all. - # Note: If this parameter is set to true, it won't hide tools. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. - typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false - - # If set to false, hide tool versions that are equal to "system". - # - # Note: If this parameter is set to true, it won't hide tools. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. - typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true - - # If set to non-empty value, hide tools unless there is a file matching the specified file pattern - # in the current directory, or its parent directory, or its grandparent directory, and so on. - # - # Note: If this parameter is set to empty value, it won't hide tools. - # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. - # - # Example: Hide nodejs version when there is no package.json and no *.js files in the current - # directory, in `..`, in `../..` and so on. - # - # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' - typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= - - # Ruby version from asdf. - typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_RUBY_BACKGROUND=1 - # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Python version from asdf. - typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_PYTHON_BACKGROUND=4 - # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Go version from asdf. - typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_GOLANG_BACKGROUND=4 - # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Node.js version from asdf. - typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_NODEJS_BACKGROUND=2 - # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Rust version from asdf. - typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_RUST_BACKGROUND=208 - # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' - - # .NET Core version from asdf. - typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_BACKGROUND=5 - # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Flutter version from asdf. - typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_FLUTTER_BACKGROUND=4 - # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Lua version from asdf. - typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_LUA_BACKGROUND=4 - # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Java version from asdf. - typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=1 - typeset -g POWERLEVEL9K_ASDF_JAVA_BACKGROUND=7 - # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Perl version from asdf. - typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_PERL_BACKGROUND=4 - # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Erlang version from asdf. - typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_ERLANG_BACKGROUND=1 - # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Elixir version from asdf. - typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_ELIXIR_BACKGROUND=5 - # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Postgres version from asdf. - typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_POSTGRES_BACKGROUND=6 - # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' - - # PHP version from asdf. - typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_PHP_BACKGROUND=5 - # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Haskell version from asdf. - typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_HASKELL_BACKGROUND=3 - # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Julia version from asdf. - typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=0 - typeset -g POWERLEVEL9K_ASDF_JULIA_BACKGROUND=2 - # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar' - - ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### - # NordVPN connection indicator color. - typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=7 - typeset -g POWERLEVEL9K_NORDVPN_BACKGROUND=4 - # Hide NordVPN connection indicator when not connected. - typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= - typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= - # Custom icon. - # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## - # Ranger shell color. - typeset -g POWERLEVEL9K_RANGER_FOREGROUND=3 - typeset -g POWERLEVEL9K_RANGER_BACKGROUND=0 - # Custom icon. - # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### - # Nnn shell color. - typeset -g POWERLEVEL9K_NNN_FOREGROUND=0 - typeset -g POWERLEVEL9K_NNN_BACKGROUND=6 - # Custom icon. - # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##################[ xplr: xplr shell (https://github.com/sayanarijit/xplr) ]################## - # xplr shell color. - typeset -g POWERLEVEL9K_XPLR_FOREGROUND=0 - typeset -g POWERLEVEL9K_XPLR_BACKGROUND=6 - # Custom icon. - # typeset -g POWERLEVEL9K_XPLR_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########################[ vim_shell: vim shell indicator (:sh) ]########################### - # Vim shell indicator color. - typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=0 - typeset -g POWERLEVEL9K_VIM_SHELL_BACKGROUND=2 - # Custom icon. - # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### - # Midnight Commander shell color. - typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=3 - typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_BACKGROUND=0 - # Custom icon. - # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## - # Nix shell color. - typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=0 - typeset -g POWERLEVEL9K_NIX_SHELL_BACKGROUND=4 - - # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. - # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= - - # Custom icon. - # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##################################[ disk_usage: disk usage ]################################## - # Colors for different levels of disk usage. - typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=3 - typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_BACKGROUND=0 - typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=0 - typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_BACKGROUND=3 - typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=7 - typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_BACKGROUND=1 - # Thresholds for different levels of disk usage (percentage points). - typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 - typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 - # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. - typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false - # Custom icon. - # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ vi_mode: vi mode (you don't need this if you've enabled prompt_char) ]########### - # Foreground color. - typeset -g POWERLEVEL9K_VI_MODE_FOREGROUND=0 - # Text and color for normal (a.k.a. command) vi mode. - typeset -g POWERLEVEL9K_VI_COMMAND_MODE_STRING=NORMAL - typeset -g POWERLEVEL9K_VI_MODE_NORMAL_BACKGROUND=2 - # Text and color for visual vi mode. - typeset -g POWERLEVEL9K_VI_VISUAL_MODE_STRING=VISUAL - typeset -g POWERLEVEL9K_VI_MODE_VISUAL_BACKGROUND=4 - # Text and color for overtype (a.k.a. overwrite and replace) vi mode. - typeset -g POWERLEVEL9K_VI_OVERWRITE_MODE_STRING=OVERTYPE - typeset -g POWERLEVEL9K_VI_MODE_OVERWRITE_BACKGROUND=3 - # Text and color for insert vi mode. - typeset -g POWERLEVEL9K_VI_INSERT_MODE_STRING= - typeset -g POWERLEVEL9K_VI_MODE_INSERT_FOREGROUND=8 - - ######################################[ ram: free RAM ]####################################### - # RAM color. - typeset -g POWERLEVEL9K_RAM_FOREGROUND=0 - typeset -g POWERLEVEL9K_RAM_BACKGROUND=3 - # Custom icon. - # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #####################################[ swap: used swap ]###################################### - # Swap color. - typeset -g POWERLEVEL9K_SWAP_FOREGROUND=0 - typeset -g POWERLEVEL9K_SWAP_BACKGROUND=3 - # Custom icon. - # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################################[ load: CPU load ]###################################### - # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. - typeset -g POWERLEVEL9K_LOAD_WHICH=5 - # Load color when load is under 50%. - typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=0 - typeset -g POWERLEVEL9K_LOAD_NORMAL_BACKGROUND=2 - # Load color when load is between 50% and 70%. - typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=0 - typeset -g POWERLEVEL9K_LOAD_WARNING_BACKGROUND=3 - # Load color when load is over 70%. - typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=0 - typeset -g POWERLEVEL9K_LOAD_CRITICAL_BACKGROUND=1 - # Custom icon. - # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ - # Todo color. - typeset -g POWERLEVEL9K_TODO_FOREGROUND=0 - typeset -g POWERLEVEL9K_TODO_BACKGROUND=8 - # Hide todo when the total number of tasks is zero. - typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true - # Hide todo when the number of tasks after filtering is zero. - typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false - - # Todo format. The following parameters are available within the expansion. - # - # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. - # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. - # - # These variables correspond to the last line of the output of `todo.sh -p ls`: - # - # TODO: 24 of 42 tasks shown - # - # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. - # - # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' - - # Custom icon. - # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ - # Timewarrior color. - typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=255 - typeset -g POWERLEVEL9K_TIMEWARRIOR_BACKGROUND=8 - - # If the tracked task is longer than 24 characters, truncate and append "…". - # Tip: To always display tasks without truncation, delete the following parameter. - # Tip: To hide task names and display just the icon when time tracking is enabled, set the - # value of the following parameter to "". - typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}' - - # Custom icon. - # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## - # Taskwarrior color. - typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=0 - typeset -g POWERLEVEL9K_TASKWARRIOR_BACKGROUND=6 - - # Taskwarrior segment format. The following parameters are available within the expansion. - # - # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. - # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. - # - # Zero values are represented as empty parameters. - # - # The default format: - # - # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' - # - # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' - - # Custom icon. - # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##################################[ context: user@hostname ]################################## - # Context color when running with privileges. - typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=1 - typeset -g POWERLEVEL9K_CONTEXT_ROOT_BACKGROUND=0 - # Context color in SSH without privileges. - typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=3 - typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_BACKGROUND=0 - # Default context color (no privileges, no SSH). - typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=3 - typeset -g POWERLEVEL9K_CONTEXT_BACKGROUND=0 - - # Context format when running with privileges: user@hostname. - typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%n@%m' - # Context format when in SSH without privileges: user@hostname. - typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' - # Default context format (no privileges, no SSH): user@hostname. - typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' - - # Don't show context unless running with privileges or in SSH. - # Tip: Remove the next line to always show context. - typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= - - # Custom icon. - # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - typeset -g POWERLEVEL9K_CONTEXT_PREFIX='with ' - - ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### - # Python virtual environment color. - typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=0 - typeset -g POWERLEVEL9K_VIRTUALENV_BACKGROUND=4 - # Don't show Python version next to the virtual environment name. - typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false - # If set to "false", won't show virtualenv if pyenv is already shown. - # If set to "if-different", won't show virtualenv if it's the same as pyenv. - typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false - # Separate environment name from Python version only with a space. - typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= - # Custom icon. - # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #####################[ anaconda: conda environment (https://conda.io/) ]###################### - # Anaconda environment color. - typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=0 - typeset -g POWERLEVEL9K_ANACONDA_BACKGROUND=4 - - # Anaconda segment format. The following parameters are available within the expansion. - # - # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment. - # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment. - # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below). - # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version). - # - # CONDA_PROMPT_MODIFIER can be configured with the following command: - # - # conda config --set env_prompt '({default_env}) ' - # - # The last argument is a Python format string that can use the following variables: - # - # - prefix The same as CONDA_PREFIX. - # - default_env The same as CONDA_DEFAULT_ENV. - # - name The last segment of CONDA_PREFIX. - # - stacked_env Comma-separated list of names in the environment stack. The first element is - # always the same as default_env. - # - # Note: '({default_env}) ' is the default value of env_prompt. - # - # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER - # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former - # is empty. - typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}' - - # Custom icon. - # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ - # Pyenv color. - typeset -g POWERLEVEL9K_PYENV_FOREGROUND=0 - typeset -g POWERLEVEL9K_PYENV_BACKGROUND=4 - # Hide python version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) - # If set to false, hide python version if it's the same as global: - # $(pyenv version-name) == $(pyenv global). - typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide python version if it's equal to "system". - typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true - - # Pyenv segment format. The following parameters are available within the expansion. - # - # - P9K_CONTENT Current pyenv environment (pyenv version-name). - # - P9K_PYENV_PYTHON_VERSION Current python version (python --version). - # - # The default format has the following logic: - # - # 1. Display just "$P9K_CONTENT" if it's equal to "$P9K_PYENV_PYTHON_VERSION" or - # starts with "$P9K_PYENV_PYTHON_VERSION/". - # 2. Otherwise display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION". - typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_CONTENT:#$P9K_PYENV_PYTHON_VERSION(|/*)}:+ $P9K_PYENV_PYTHON_VERSION}' - - # Custom icon. - # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ - # Goenv color. - typeset -g POWERLEVEL9K_GOENV_FOREGROUND=0 - typeset -g POWERLEVEL9K_GOENV_BACKGROUND=4 - # Hide go version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) - # If set to false, hide go version if it's the same as global: - # $(goenv version-name) == $(goenv global). - typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide go version if it's equal to "system". - typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## - # Nodenv color. - typeset -g POWERLEVEL9K_NODENV_FOREGROUND=2 - typeset -g POWERLEVEL9K_NODENV_BACKGROUND=0 - # Hide node version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global) - # If set to false, hide node version if it's the same as global: - # $(nodenv version-name) == $(nodenv global). - typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide node version if it's equal to "system". - typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### - # Nvm color. - typeset -g POWERLEVEL9K_NVM_FOREGROUND=0 - typeset -g POWERLEVEL9K_NVM_BACKGROUND=5 - # Custom icon. - # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ - # Nodeenv color. - typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=2 - typeset -g POWERLEVEL9K_NODEENV_BACKGROUND=0 - # Don't show Node version next to the environment name. - typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false - # Separate environment name from Node version only with a space. - typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= - # Custom icon. - # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##############################[ node_version: node.js version ]############################### - # Node version color. - typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=7 - typeset -g POWERLEVEL9K_NODE_VERSION_BACKGROUND=2 - # Show node version only when in a directory tree containing package.json. - typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######################[ go_version: go version (https://golang.org) ]######################## - # Go version color. - typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=255 - typeset -g POWERLEVEL9K_GO_VERSION_BACKGROUND=2 - # Show go version only when in a go project subdirectory. - typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## - # Rust version color. - typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=0 - typeset -g POWERLEVEL9K_RUST_VERSION_BACKGROUND=208 - # Show rust version only when in a rust project subdirectory. - typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ - # .NET version color. - typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=7 - typeset -g POWERLEVEL9K_DOTNET_VERSION_BACKGROUND=5 - # Show .NET version only when in a .NET project subdirectory. - typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #####################[ php_version: php version (https://www.php.net/) ]###################### - # PHP version color. - typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=0 - typeset -g POWERLEVEL9K_PHP_VERSION_BACKGROUND=5 - # Show PHP version only when in a PHP project subdirectory. - typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### - # Laravel version color. - typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=1 - typeset -g POWERLEVEL9K_LARAVEL_VERSION_BACKGROUND=7 - # Custom icon. - # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## - # Rbenv color. - typeset -g POWERLEVEL9K_RBENV_FOREGROUND=0 - typeset -g POWERLEVEL9K_RBENV_BACKGROUND=1 - # Hide ruby version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) - # If set to false, hide ruby version if it's the same as global: - # $(rbenv version-name) == $(rbenv global). - typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide ruby version if it's equal to "system". - typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ####################[ java_version: java version (https://www.java.com/) ]#################### - # Java version color. - typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=1 - typeset -g POWERLEVEL9K_JAVA_VERSION_BACKGROUND=7 - # Show java version only when in a java project subdirectory. - typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true - # Show brief version. - typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false - # Custom icon. - # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]#### - # Package color. - typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=0 - typeset -g POWERLEVEL9K_PACKAGE_BACKGROUND=6 - - # Package format. The following parameters are available within the expansion. - # - # - P9K_PACKAGE_NAME The value of `name` field in package.json. - # - P9K_PACKAGE_VERSION The value of `version` field in package.json. - # - # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}' - - # Custom icon. - # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## - # Rvm color. - typeset -g POWERLEVEL9K_RVM_FOREGROUND=0 - typeset -g POWERLEVEL9K_RVM_BACKGROUND=240 - # Don't show @gemset at the end. - typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false - # Don't show ruby- at the front. - typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false - # Custom icon. - # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ - # Fvm color. - typeset -g POWERLEVEL9K_FVM_FOREGROUND=0 - typeset -g POWERLEVEL9K_FVM_BACKGROUND=4 - # Custom icon. - # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### - # Lua color. - typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=0 - typeset -g POWERLEVEL9K_LUAENV_BACKGROUND=4 - # Hide lua version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) - # If set to false, hide lua version if it's the same as global: - # $(luaenv version-name) == $(luaenv global). - typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide lua version if it's equal to "system". - typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ - # Java color. - typeset -g POWERLEVEL9K_JENV_FOREGROUND=1 - typeset -g POWERLEVEL9K_JENV_BACKGROUND=7 - # Hide java version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) - # If set to false, hide java version if it's the same as global: - # $(jenv version-name) == $(jenv global). - typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide java version if it's equal to "system". - typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ - # Perl color. - typeset -g POWERLEVEL9K_PLENV_FOREGROUND=0 - typeset -g POWERLEVEL9K_PLENV_BACKGROUND=4 - # Hide perl version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) - # If set to false, hide perl version if it's the same as global: - # $(plenv version-name) == $(plenv global). - typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide perl version if it's equal to "system". - typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ - # PHP color. - typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=0 - typeset -g POWERLEVEL9K_PHPENV_BACKGROUND=5 - # Hide php version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) - # If set to false, hide php version if it's the same as global: - # $(phpenv version-name) == $(phpenv global). - typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide PHP version if it's equal to "system". - typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]####### - # Scala color. - typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=0 - typeset -g POWERLEVEL9K_SCALAENV_BACKGROUND=1 - # Hide scala version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global) - # If set to false, hide scala version if it's the same as global: - # $(scalaenv version-name) == $(scalaenv global). - typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide scala version if it's equal to "system". - typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]########### - # Haskell color. - typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=0 - typeset -g POWERLEVEL9K_HASKELL_STACK_BACKGROUND=3 - - # Hide haskell version if it doesn't come from one of these sources. - # - # shell: version is set by STACK_YAML - # local: version is set by stack.yaml up the directory tree - # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml) - typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local) - # If set to false, hide haskell version if it's the same as in the implicit global project. - typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true - # Custom icon. - # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ terraform: terraform workspace (https://www.terraform.io) ]################# - # Don't show terraform workspace if it's literally "default". - typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false - # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element - # in each pair defines a pattern against which the current terraform workspace gets matched. - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) - # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, - # you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The - # first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( - # '*prod*' PROD - # '*test*' TEST - # '*' OTHER) - # - # If your current terraform workspace is "project_test", its class is TEST because "project_test" - # doesn't match the pattern '*prod*' but does match '*test*'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=2 - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_BACKGROUND=0 - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' - typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( - # '*prod*' PROD # These values are examples that are unlikely - # '*test*' TEST # to match your needs. Customize them as needed. - '*' OTHER) - typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=4 - typeset -g POWERLEVEL9K_TERRAFORM_OTHER_BACKGROUND=0 - # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #############[ terraform_version: terraform version (https://www.terraform.io) ]############## - # Terraform version color. - typeset -g POWERLEVEL9K_TERRAFORM_VERSION_FOREGROUND=4 - typeset -g POWERLEVEL9K_TERRAFORM_VERSION_BACKGROUND=0 - # Custom icon. - # typeset -g POWERLEVEL9K_TERRAFORM_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ terraform_version: It shows active terraform version (https://www.terraform.io) ]################# - typeset -g POWERLEVEL9K_TERRAFORM_VERSION_SHOW_ON_COMMAND='terraform|tf' - - #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# - # Show kubecontext only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show kubecontext. - typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern' - - # Kubernetes context classes for the purpose of using different colors, icons and expansions with - # different contexts. - # - # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element - # in each pair defines a pattern against which the current kubernetes context gets matched. - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) - # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, - # you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The - # first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( - # '*prod*' PROD - # '*test*' TEST - # '*' DEFAULT) - # - # If your current kubernetes context is "deathray-testing/default", its class is TEST - # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=0 - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_BACKGROUND=2 - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' - typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( - # '*prod*' PROD # These values are examples that are unlikely - # '*test*' TEST # to match your needs. Customize them as needed. - '*' DEFAULT) - typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=7 - typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_BACKGROUND=5 - # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext - # segment. Parameter expansions are very flexible and fast, too. See reference: - # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. - # - # Within the expansion the following parameters are always available: - # - # - P9K_CONTENT The content that would've been displayed if there was no content - # expansion defined. - # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the - # output of `kubectl config get-contexts`. - # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the - # output of `kubectl config get-contexts`. - # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE - # in the output of `kubectl config get-contexts`. If there is no - # namespace, the parameter is set to "default". - # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the - # output of `kubectl config get-contexts`. - # - # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), - # the following extra parameters are available: - # - # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. - # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. - # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. - # - # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, - # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": - # - # - P9K_KUBECONTEXT_CLOUD_NAME=gke - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account - # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a - # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 - # - # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": - # - # - P9K_KUBECONTEXT_CLOUD_NAME=eks - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 - # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 - # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 - typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= - # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. - POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' - # Append the current context's namespace if it's not "default". - POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' - - # Custom prefix. - typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='at ' - - #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# - # Show aws only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show aws. - typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi|terragrunt' - - # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element - # in each pair defines a pattern against which the current AWS profile gets matched. - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) - # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, - # you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The - # first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_AWS_CLASSES=( - # '*prod*' PROD - # '*test*' TEST - # '*' DEFAULT) - # - # If your current AWS profile is "company_test", its class is TEST - # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28 - # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' - typeset -g POWERLEVEL9K_AWS_CLASSES=( - # '*prod*' PROD # These values are examples that are unlikely - # '*test*' TEST # to match your needs. Customize them as needed. - '*' DEFAULT) - typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=7 - typeset -g POWERLEVEL9K_AWS_DEFAULT_BACKGROUND=1 - # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # AWS segment format. The following parameters are available within the expansion. - # - # - P9K_AWS_PROFILE The name of the current AWS profile. - # - P9K_AWS_REGION The region associated with the current AWS profile. - typeset -g POWERLEVEL9K_AWS_CONTENT_EXPANSION='${P9K_AWS_PROFILE//\%/%%}${P9K_AWS_REGION:+ ${P9K_AWS_REGION//\%/%%}}' - - #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# - # AWS Elastic Beanstalk environment color. - typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=2 - typeset -g POWERLEVEL9K_AWS_EB_ENV_BACKGROUND=0 - # Custom icon. - # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## - # Show azure only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show azure. - typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt' - # Azure account name color. - typeset -g POWERLEVEL9K_AZURE_FOREGROUND=7 - typeset -g POWERLEVEL9K_AZURE_BACKGROUND=4 - # Custom icon. - # typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### - # Show gcloud only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show gcloud. - typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs|gsutil' - # Google cloud color. - typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=7 - typeset -g POWERLEVEL9K_GCLOUD_BACKGROUND=4 - - # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or - # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative - # enough. You can use the following parameters in the expansions. Each of them corresponds to the - # output of `gcloud` tool. - # - # Parameter | Source - # -------------------------|-------------------------------------------------------------------- - # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)' - # P9K_GCLOUD_ACCOUNT | gcloud config get-value account - # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project - # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)' - # - # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'. - # - # Obtaining project name requires sending a request to Google servers. This can take a long time - # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud - # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets - # set and gcloud prompt segment transitions to state COMPLETE. - # - # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL - # and COMPLETE. You can also hide gcloud in state PARTIAL by setting - # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and - # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty. - typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}' - typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}' - - # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name - # this often. Negative value disables periodic polling. In this mode project name is retrieved - # only when the current configuration, account or project id changes. - typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60 - - # Custom icon. - # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# - # Show google_app_cred only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show google_app_cred. - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt' - - # Google application credentials classes for the purpose of using different colors, icons and - # expansions with different credentials. - # - # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first - # element in each pair defines a pattern against which the current kubernetes context gets - # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion - # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION - # parameters, you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. - # The first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( - # '*:*prod*:*' PROD - # '*:*test*:*' TEST - # '*' DEFAULT) - # - # If your current Google application credentials is "service_account deathray-testing x@y.com", - # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28 - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( - # '*:*prod*:*' PROD # These values are examples that are unlikely - # '*:*test*:*' TEST # to match your needs. Customize them as needed. - '*' DEFAULT) - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=7 - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_BACKGROUND=4 - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by - # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: - # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. - # - # You can use the following parameters in the expansion. Each of them corresponds to one of the - # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. - # - # Parameter | JSON key file field - # ---------------------------------+--------------- - # P9K_GOOGLE_APP_CRED_TYPE | type - # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id - # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email - # - # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'. - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' - - ##############[ toolbox: toolbox name (https://github.com/containers/toolbox) ]############### - # Toolbox color. - typeset -g POWERLEVEL9K_TOOLBOX_FOREGROUND=0 - typeset -g POWERLEVEL9K_TOOLBOX_BACKGROUND=3 - # Don't display the name of the toolbox if it matches fedora-toolbox-*. - typeset -g POWERLEVEL9K_TOOLBOX_CONTENT_EXPANSION='${P9K_TOOLBOX_NAME:#fedora-toolbox-*}' - # Custom icon. - # typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='in ' - - ###############################[ public_ip: public IP address ]############################### - # Public IP color. - typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=7 - typeset -g POWERLEVEL9K_PUBLIC_IP_BACKGROUND=0 - # Custom icon. - # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ########################[ vpn_ip: virtual private network indicator ]######################### - # VPN IP color. - typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=0 - typeset -g POWERLEVEL9K_VPN_IP_BACKGROUND=6 - # When on VPN, show just an icon without the IP address. - # Tip: To display the private IP address when on VPN, remove the next line. - typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= - # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN - # to see the name of the interface. - typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*' - # If set to true, show one segment per matching network interface. If set to false, show only - # one segment corresponding to the first matching network interface. - # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. - typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false - # Custom icon. - # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### - # IP color. - typeset -g POWERLEVEL9K_IP_BACKGROUND=4 - typeset -g POWERLEVEL9K_IP_FOREGROUND=0 - # The following parameters are accessible within the expansion: - # - # Parameter | Meaning - # ----------------------+------------------------------------------- - # P9K_IP_IP | IP address - # P9K_IP_INTERFACE | network interface - # P9K_IP_RX_BYTES | total number of bytes received - # P9K_IP_TX_BYTES | total number of bytes sent - # P9K_IP_RX_BYTES_DELTA | number of bytes received since last prompt - # P9K_IP_TX_BYTES_DELTA | number of bytes sent since last prompt - # P9K_IP_RX_RATE | receive rate (since last prompt) - # P9K_IP_TX_RATE | send rate (since last prompt) - typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='${P9K_IP_RX_RATE:+⇣$P9K_IP_RX_RATE }${P9K_IP_TX_RATE:+⇡$P9K_IP_TX_RATE }$P9K_IP_IP' - # Show information for the first network interface whose name matches this regular expression. - # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. - typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*' - # Custom icon. - # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #########################[ proxy: system-wide http/https/ftp proxy ]########################## - # Proxy color. - typeset -g POWERLEVEL9K_PROXY_FOREGROUND=4 - typeset -g POWERLEVEL9K_PROXY_BACKGROUND=0 - # Custom icon. - # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################################[ battery: internal battery ]################################# - # Show battery in red when it's below this level and not connected to power supply. - typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 - typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=1 - # Show battery in green when it's charging or fully charged. - typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=2 - # Show battery in yellow when it's discharging. - typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=3 - # Battery pictograms going from low to high level of charge. - typeset -g POWERLEVEL9K_BATTERY_STAGES='\uf58d\uf579\uf57a\uf57b\uf57c\uf57d\uf57e\uf57f\uf580\uf581\uf578' - # Don't show the remaining time to charge/discharge. - typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false - typeset -g POWERLEVEL9K_BATTERY_BACKGROUND=0 - - #####################################[ wifi: wifi speed ]##################################### - # WiFi color. - typeset -g POWERLEVEL9K_WIFI_FOREGROUND=0 - typeset -g POWERLEVEL9K_WIFI_BACKGROUND=4 - # Custom icon. - # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). - # - # # Wifi colors and icons for different signal strength levels (low to high). - # typeset -g my_wifi_fg=(0 0 0 0 0) # <-- change these values - # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values - # - # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' - # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' - # - # The following parameters are accessible within the expansions: - # - # Parameter | Meaning - # ----------------------+--------------- - # P9K_WIFI_SSID | service set identifier, a.k.a. network name - # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown - # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second - # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 - # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 - # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) - - ####################################[ time: current time ]#################################### - # Current time color. - typeset -g POWERLEVEL9K_TIME_FOREGROUND=0 - typeset -g POWERLEVEL9K_TIME_BACKGROUND=7 - # Format for the current time: 09:51:02. See `man 3 strftime`. - typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' - # If set to true, time will update when you hit enter. This way prompts for the past - # commands will contain the start times of their commands as opposed to the default - # behavior where they contain the end times of their preceding commands. - typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false - # Custom icon. - # typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - typeset -g POWERLEVEL9K_TIME_PREFIX='at ' - - # Example of a user-defined prompt segment. Function prompt_example will be called on every - # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or - # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and yellow text on red background - # greeting the user. - # - # Type `p10k help segment` for documentation and a more sophisticated example. - function prompt_example() { - p10k segment -b 1 -f 3 -i '⭐' -t 'hello, %n' - } - - # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job - # is to generate the prompt segment for display in instant prompt. See - # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. - # - # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function - # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k - # will replay these calls without actually calling instant_prompt_*. It is imperative that - # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this - # rule is not observed, the content of instant prompt will be incorrect. - # - # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If - # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. - function instant_prompt_example() { - # Since prompt_example always makes the same `p10k segment` calls, we can call it from - # instant_prompt_example. This will give us the same `example` prompt segment in the instant - # and regular prompts. - prompt_example - } - - # User-defined prompt segments can be customized the same way as built-in segments. - typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=3 - typeset -g POWERLEVEL9K_EXAMPLE_BACKGROUND=1 - # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt - # when accepting a command line. Supported values: - # - # - off: Don't change prompt when accepting a command line. - # - always: Trim down prompt when accepting a command line. - # - same-dir: Trim down prompt when accepting a command line unless this is the first command - # typed after changing current working directory. - typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=always - - # Instant prompt mode. - # - # - off: Disable instant prompt. Choose this if you've tried instant prompt and found - # it incompatible with your zsh configuration files. - # - quiet: Enable instant prompt and don't print warnings when detecting console output - # during zsh initialization. Choose this if you've read and understood - # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. - # - verbose: Enable instant prompt and print a warning when detecting console output during - # zsh initialization. Choose this if you've never tried instant prompt, haven't - # seen the warning, or if you are unsure what this all means. - typeset -g POWERLEVEL9K_INSTANT_PROMPT=quiet - - # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. - # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload - # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you - # really need it. - typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true - - # If p10k is already loaded, reload configuration. - # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. - (( ! $+functions[p10k] )) || p10k reload -} - -# Tell `p10k configure` which file it should overwrite. -typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} - -(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} -'builtin' 'unset' 'p10k_config_opts' diff --git a/util/create.nix b/create.nix similarity index 82% rename from util/create.nix rename to create.nix index 755b924..ba939a8 100644 --- a/util/create.nix +++ b/create.nix @@ -10,7 +10,13 @@ let inherit (nixpkgs) lib; kitty-themes-src = { }; }; - rice = import ./rice.nix { inherit system nixpkgs nix-rice; }; + rice = import ./rice { + inherit + inputs + system + nix-rice + ; + }; in { systems = @@ -20,12 +26,12 @@ in nixpkgs.lib.nixosSystem { inherit system; specialArgs = { - inherit inputs rice nix-rice; + inherit inputs rice; mainUser = info.user; }; modules = [ - ../system/${name}.nix + ./system/${name}.nix home-manager.nixosModules.home-manager { home-manager = { @@ -35,7 +41,7 @@ in mainUser = info.user; }; users.${info.user}.imports = [ - ../home/${info.user}.nix + ./home/${info.user}.nix ] ++ info.hmImports or [ ]; }; } diff --git a/flake.lock b/flake.lock index f894446..ccf8ae2 100644 --- a/flake.lock +++ b/flake.lock @@ -1,20 +1,5 @@ { "nodes": { - "cachyos": { - "locked": { - "lastModified": 1743535541, - "narHash": "sha256-OlBtXY26w9OcAmpqrTvxaG4/rfDdavauQF2eRxb+ySs=", - "owner": "drakon64", - "repo": "nixos-cachyos-kernel", - "rev": "8516d89c4e0c4a25cea1be8431db3963359ee81b", - "type": "github" - }, - "original": { - "owner": "drakon64", - "repo": "nixos-cachyos-kernel", - "type": "github" - } - }, "comfyui": { "inputs": { "comfyui": "comfyui_2", @@ -69,21 +54,6 @@ "type": "github" } }, - "crane": { - "locked": { - "lastModified": 1742394900, - "narHash": "sha256-vVOAp9ahvnU+fQoKd4SEXB2JG2wbENkpqcwlkIXgUC0=", - "owner": "ipetkov", - "repo": "crane", - "rev": "70947c1908108c0c551ddfd73d4f750ff2ea67cd", - "type": "github" - }, - "original": { - "owner": "ipetkov", - "repo": "crane", - "type": "github" - } - }, "culr": { "inputs": { "flake-utils": "flake-utils", @@ -105,6 +75,28 @@ "url": "https://git.atagen.co/atagen/culr" } }, + "fenix": { + "inputs": { + "nixpkgs": [ + "nyx", + "nixpkgs" + ], + "rust-analyzer-src": "rust-analyzer-src" + }, + "locked": { + "lastModified": 1749623906, + "narHash": "sha256-QD7e5WNVj4aWS5mlJZZnLJ6Lg0h5RSyyEFo2I6xBUEQ=", + "owner": "nix-community", + "repo": "fenix", + "rev": "873cccc628f5e39407e319e6711f3b7d6d1f15cc", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, "flake-compat": { "flake": false, "locked": { @@ -126,11 +118,11 @@ "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1727826117, - "narHash": "sha256-K5ZLCyfO/Zj9mPFldf3iwS6oZStJcU4tSpiXTMYaaL0=", + "lastModified": 1743550720, + "narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "3d04084d54bedc3d6b8b736c70ef449225c361b1", + "rev": "c621e8422220273271f52058f618c94e405bb0f5", "type": "github" }, "original": { @@ -139,6 +131,20 @@ "type": "github" } }, + "flake-schemas": { + "locked": { + "lastModified": 1721999734, + "narHash": "sha256-G5CxYeJVm4lcEtaO87LKzOsVnWeTcHGKbKxNamNWgOw=", + "rev": "0a5c42297d870156d9c57d8f99e476b738dcd982", + "revCount": 75, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.1.5/0190ef2f-61e0-794b-ba14-e82f225e55e6/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%3D0.1.5.tar.gz" + } + }, "flake-utils": { "inputs": { "systems": "systems" @@ -211,42 +217,6 @@ "type": "github" } }, - "flake-utils_5": { - "inputs": { - "systems": "systems_5" - }, - "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_6": { - "inputs": { - "systems": "systems_7" - }, - "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, "flakey-profile": { "locked": { "lastModified": 1712898590, @@ -282,15 +252,14 @@ "inputs": { "flake-compat": "flake-compat", "gitignore": "gitignore", - "nixpkgs": "nixpkgs_8", - "nixpkgs-stable": "nixpkgs-stable_2" + "nixpkgs": "nixpkgs_9" }, "locked": { - "lastModified": 1729104314, - "narHash": "sha256-pZRZsq5oCdJt3upZIU4aslS9XwFJ+/nVtALHIciX/BI=", + "lastModified": 1747372754, + "narHash": "sha256-2Y53NGIX2vxfie1rOW0Qb86vjRZ7ngizoo+bnXU9D9k=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "3c3e88f0f544d6bb54329832616af7eb971b6be6", + "rev": "80479b6ec16fefd9c1db3ea13aeb038c60530f46", "type": "github" }, "original": { @@ -323,16 +292,15 @@ }, "helix": { "inputs": { - "flake-utils": "flake-utils_2", "nixpkgs": "nixpkgs", "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1743483316, - "narHash": "sha256-yFT2zkL0S8ouuF8AyY+RxKI11V6juWcUPuhQn8qeZHQ=", + "lastModified": 1749738489, + "narHash": "sha256-qjal0TFAqArHqOVdf+Wicn1PIWOkOom+tonW0ou5cns=", "owner": "helix-editor", "repo": "helix", - "rev": "7ebf65002940d0ce8d6e59c3ec22c736f7d57d9c", + "rev": "62f270e5d2fb34a77dd30a3b2e6b4c9fb6f1cfe1", "type": "github" }, "original": { @@ -348,11 +316,11 @@ ] }, "locked": { - "lastModified": 1742070442, - "narHash": "sha256-xPDSLswRazXLlceqc2+VdbKKG2m/OXCjTzU9O/Bs4ZQ=", + "lastModified": 1749346462, + "narHash": "sha256-bwHFWwfiAfk+jsvYlFqo55+R0cCgDu3ILIGqOhA/k5I=", "owner": "feel-co", "repo": "hjem", - "rev": "ae49a5a2e013c710d2b2cf046ae365d08eae75b3", + "rev": "4dc5dc97ef052d563fe0b2f004b93d92748ae2d3", "type": "github" }, "original": { @@ -368,11 +336,11 @@ ] }, "locked": { - "lastModified": 1743717835, - "narHash": "sha256-LJm6FoIcUoBw3w25ty12/sBfut4zZuNGdN0phYj/ekU=", + "lastModified": 1749657191, + "narHash": "sha256-QLilaHuhGxiwhgceDWESj9gFcKIdEp7+9lRqNGpN8S4=", "owner": "nix-community", "repo": "home-manager", - "rev": "66a6ec65f84255b3defb67ff45af86c844dd451b", + "rev": "faeab32528a9360e9577ff4082de2d35c6bbe1ce", "type": "github" }, "original": { @@ -381,35 +349,76 @@ "type": "github" } }, - "ironbar": { + "home-manager_2": { "inputs": { - "crane": "crane", - "naersk": "naersk", - "nixpkgs": "nixpkgs_3", - "rust-overlay": "rust-overlay_2" + "nixpkgs": [ + "nyx", + "nixpkgs" + ] }, "locked": { - "lastModified": 1743492497, - "narHash": "sha256-uDqLgJfbQXEo5m/d+FcDAND341FjeSNhu8cfkq1NhWo=", - "owner": "JakeStanger", - "repo": "ironbar", - "rev": "f204b24ba06e074f7e32dba160be5c4ff84f2d43", + "lastModified": 1749649116, + "narHash": "sha256-pCuUfMkhlP+XqW+TXX5Tssk8IE4TpS3MbG7OQtvaQdM=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "02040b7777f65342b96c7f826a5c6aef95585057", "type": "github" }, "original": { - "owner": "JakeStanger", - "repo": "ironbar", + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "hudcore": { + "inputs": { + "nix-systems": "nix-systems", + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1746619291, + "narHash": "sha256-ovf7GLXUACHPw48TJJMJfRrva3go+RHvHYmiqwTeYXs=", + "ref": "refs/heads/main", + "rev": "8a627ef8b08b6ec5b1f0b4a09f6b4d3ef8233a1f", + "revCount": 1, + "type": "git", + "url": "https://git.atagen.co/atagen/hudcore-plymouth.git" + }, + "original": { + "type": "git", + "url": "https://git.atagen.co/atagen/hudcore-plymouth.git" + } + }, + "jovian": { + "inputs": { + "nix-github-actions": "nix-github-actions", + "nixpkgs": [ + "nyx", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1749627191, + "narHash": "sha256-bUv8CDE6Uyxak4UkOvRjx5xj6+msEHSpYGeAjkuTnTs=", + "owner": "Jovian-Experiments", + "repo": "Jovian-NixOS", + "rev": "f31df4cb6b2eeef6cf0113edb687297be72a69df", + "type": "github" + }, + "original": { + "owner": "Jovian-Experiments", + "repo": "Jovian-NixOS", "type": "github" } }, "kitty-themes-src": { "flake": false, "locked": { - "lastModified": 1678282211, - "narHash": "sha256-heJayOz/2Bey/zAwL2PR1OsfGyCPqMyxT1XzwHLhQ0w=", + "lastModified": 1747968735, + "narHash": "sha256-QQiRdyOL8svPxQ3/D0CjstBMDJ5Xapm6zfDSoo31GME=", "owner": "kovidgoyal", "repo": "kitty-themes", - "rev": "c01fcbd694353507c3cc7f657179bad1f32140a7", + "rev": "e23ccc1b1f23d404950bc3a0900ee4856448c111", "type": "github" }, "original": { @@ -421,11 +430,11 @@ "lix": { "flake": false, "locked": { - "lastModified": 1743523803, - "narHash": "sha256-L/8tnMbfwOmRXRrzzDJBlkRUiVOxy8cxWTdaN3n3AGI=", - "rev": "5a7e9e17464008904403af4297823443281bef12", + "lastModified": 1749682763, + "narHash": "sha256-DDhns3NS6L5OlYR0mSX03I5D7uGLyyd3MZegd1wTCyc=", + "rev": "ee0655240270480d7f6063dcf12ec47f04d2ded6", "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/5a7e9e17464008904403af4297823443281bef12.tar.gz?rev=5a7e9e17464008904403af4297823443281bef12" + "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/ee0655240270480d7f6063dcf12ec47f04d2ded6.tar.gz?rev=ee0655240270480d7f6063dcf12ec47f04d2ded6" }, "original": { "type": "tarball", @@ -434,7 +443,7 @@ }, "lix-module": { "inputs": { - "flake-utils": "flake-utils_3", + "flake-utils": "flake-utils_2", "flakey-profile": "flakey-profile", "lix": [ "lix" @@ -444,44 +453,27 @@ ] }, "locked": { - "lastModified": 1742945498, - "narHash": "sha256-MB/b/xcDKqaVBxJIIxwb81r8ZiGLeKEcqokATRRroo8=", - "rev": "fa69ae26cc32dda178117b46487c2165c0e08316", + "lastModified": 1747667424, + "narHash": "sha256-7EICjbmG6lApWKhFtwvZovdcdORY1CEe6/K7JwtpYfs=", + "rev": "3c23c6ae2aecc1f76ae7993efe1a78b5316f0700", "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/fa69ae26cc32dda178117b46487c2165c0e08316.tar.gz?rev=fa69ae26cc32dda178117b46487c2165c0e08316" + "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/3c23c6ae2aecc1f76ae7993efe1a78b5316f0700.tar.gz?rev=3c23c6ae2aecc1f76ae7993efe1a78b5316f0700" }, "original": { "type": "tarball", "url": "https://git.lix.systems/lix-project/nixos-module/archive/main.tar.gz" } }, - "madness": { - "locked": { - "lastModified": 1720637547, - "narHash": "sha256-5MGG0iRBvP35VlcHvxVrapuLygZwHwMB3g0M0fWxz58=", - "owner": "antithesishq", - "repo": "madness", - "rev": "c22c9c03579b7175d94f63e44ee0e518bb5ccdba", - "type": "github" - }, - "original": { - "owner": "antithesishq", - "repo": "madness", - "type": "github" - } - }, "meat": { "inputs": { - "flake-utils": "flake-utils_4", + "flake-utils": "flake-utils_3", "lix": [ "lix" ], "lix-module": [ "lix-module" ], - "nh": [ - "nh" - ], + "nh": "nh", "nixpkgs": [ "nixpkgs" ] @@ -500,34 +492,16 @@ "url": "https://git.atagen.co/atagen/meat" } }, - "naersk": { - "inputs": { - "nixpkgs": "nixpkgs_2" - }, - "locked": { - "lastModified": 1742901344, - "narHash": "sha256-o9dXcpfXpBm6+/SRqcQW0GzRkJymwyEAu5UD5LMDd3s=", - "owner": "nix-community", - "repo": "naersk", - "rev": "a75c0584b0d69de943babc899530e9c70c642b42", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "naersk", - "type": "github" - } - }, "nh": { "inputs": { - "nixpkgs": "nixpkgs_4" + "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1743682999, - "narHash": "sha256-bg+aAN8K90r3m/I+xXiXG0gawpbkshwlk93wxUN7KEk=", + "lastModified": 1732089528, + "narHash": "sha256-+yXeJiSFn96pW6H/50DfCfZiOLSfZNGhK7R4f0aUvGY=", "owner": "viperML", "repo": "nh", - "rev": "9e9a4590b38b62b28f07a1fae973ce7b6ca0687a", + "rev": "cff51af0ebb09227070b0332c598c7a4b7f8175a", "type": "github" }, "original": { @@ -538,16 +512,16 @@ }, "nil": { "inputs": { - "flake-utils": "flake-utils_5", - "nixpkgs": "nixpkgs_5", - "rust-overlay": "rust-overlay_3" + "flake-utils": "flake-utils_4", + "nixpkgs": "nixpkgs_4", + "rust-overlay": "rust-overlay_2" }, "locked": { - "lastModified": 1741118843, - "narHash": "sha256-ggXU3RHv6NgWw+vc+HO4/9n0GPufhTIUjVuLci8Za8c=", + "lastModified": 1749715644, + "narHash": "sha256-qNWrlp36tozupgOeELQ9N5c0nm0iVqufOt21s5GBV5o=", "owner": "oxalica", "repo": "nil", - "rev": "577d160da311cc7f5042038456a0713e9863d09e", + "rev": "58b7742777037fd76fc244e1192433131e05f21c", "type": "github" }, "original": { @@ -560,17 +534,17 @@ "inputs": { "niri-stable": "niri-stable", "niri-unstable": "niri-unstable", - "nixpkgs": "nixpkgs_6", + "nixpkgs": "nixpkgs_5", "nixpkgs-stable": "nixpkgs-stable", "xwayland-satellite-stable": "xwayland-satellite-stable", "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1743644801, - "narHash": "sha256-z8x/j/RuDBo/5lNt3XYatKRpIMFMHVE2HK7TKVxYn+c=", + "lastModified": 1749733665, + "narHash": "sha256-AwRmmdaFfkUm5R5pdxdf/AxAfRdlHmj4y6Vqr7lUd6Q=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "f3fca85fe72c70d58f44f4c6ad2f27a91aa54d0d", + "rev": "343436b057c744f0df61eccfe9224a66fc9376eb", "type": "github" }, "original": { @@ -579,6 +553,23 @@ "type": "github" } }, + "niri-session-manager": { + "inputs": { + "nixpkgs": "nixpkgs_6", + "systems": "systems_5", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1749737355, + "narHash": "sha256-jVKJz7XVt9w40Qv77Kc0V0FRkQ5rLDzD7Ow+ZpkhTVw=", + "path": "/home/bolt/code/etc/niri-session-manager", + "type": "path" + }, + "original": { + "path": "/home/bolt/code/etc/niri-session-manager", + "type": "path" + } + }, "niri-stable": { "flake": false, "locked": { @@ -599,11 +590,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1743492917, - "narHash": "sha256-OqLDg0Ody1HX23hgjvjIkfZPNhYKxbkj/ONcDjdD4Ik=", + "lastModified": 1749731089, + "narHash": "sha256-zUNOAc4riq7mQgRVcrO7EyyhBqNdD6b7B9OHCFuGUT4=", "owner": "YaLTeR", "repo": "niri", - "rev": "60034a57efd9c8130b05797b37cbc187a8c13145", + "rev": "a23ce10311d2be91777099b90d8ca755a6b636e9", "type": "github" }, "original": { @@ -612,16 +603,39 @@ "type": "github" } }, - "nix-index-database": { + "nix-github-actions": { "inputs": { - "nixpkgs": "nixpkgs_7" + "nixpkgs": [ + "nyx", + "jovian", + "nixpkgs" + ] }, "locked": { - "lastModified": 1743306489, - "narHash": "sha256-LROaIjSLo347cwcHRfSpqzEOa2FoLSeJwU4dOrGm55E=", + "lastModified": 1729697500, + "narHash": "sha256-VFTWrbzDlZyFHHb1AlKRiD/qqCJIripXKiCSFS8fAOY=", + "owner": "zhaofengli", + "repo": "nix-github-actions", + "rev": "e418aeb728b6aa5ca8c5c71974e7159c2df1d8cf", + "type": "github" + }, + "original": { + "owner": "zhaofengli", + "ref": "matrix-name", + "repo": "nix-github-actions", + "type": "github" + } + }, + "nix-index-database": { + "inputs": { + "nixpkgs": "nixpkgs_8" + }, + "locked": { + "lastModified": 1749355504, + "narHash": "sha256-L17CdJMD+/FCBOHjREQLXbe2VUnc3rjffenBbu2Kwpc=", "owner": "Mic92", "repo": "nix-index-database", - "rev": "b3696bfb6c24aa61428839a99e8b40c53ac3a82d", + "rev": "40a6e15e44b11fbf8f2b1df9d64dbfc117625e94", "type": "github" }, "original": { @@ -635,16 +649,16 @@ "flake-parts": "flake-parts", "git-hooks-nix": "git-hooks-nix", "kitty-themes-src": "kitty-themes-src", - "nixpkgs": "nixpkgs_9", + "nixpkgs": "nixpkgs_10", "nixpkgs-lib": "nixpkgs-lib_2", "systems": "systems_6" }, "locked": { - "lastModified": 1729607649, - "narHash": "sha256-H0cr8kohjo+fJIKIpcLZwtmRUGH01Gyld0ulhfqe/Rw=", + "lastModified": 1748538518, + "narHash": "sha256-fEUmBnAD9hRKM2RtwKq6whMme1uQQngrXp7aMPKMAl4=", "owner": "bertof", "repo": "nix-rice", - "rev": "91c9dc46b80ecd7295e9accff4728f4efc9a291e", + "rev": "3a31c56b1bcd48a894442631b056e8aaeaf76834", "type": "github" }, "original": { @@ -653,22 +667,18 @@ "type": "github" } }, - "nix-vscode": { - "inputs": { - "flake-utils": "flake-utils_6", - "nixpkgs": "nixpkgs_10" - }, + "nix-systems": { "locked": { - "lastModified": 1743731627, - "narHash": "sha256-gFvZTGlSGCl7MZ5MrihUf7pkIY0zwaUVhl/iUBto/3I=", - "owner": "nix-community", - "repo": "nix-vscode-extensions", - "rev": "c8270f31af9c37e4fe5711567a6412460e94e9b7", + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", + "owner": "nix-systems", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", "type": "github" }, "original": { - "owner": "nix-community", - "repo": "nix-vscode-extensions", + "owner": "nix-systems", + "repo": "default-linux", "type": "github" } }, @@ -690,23 +700,26 @@ }, "nixpkgs-lib": { "locked": { - "lastModified": 1727825735, - "narHash": "sha256-0xHYkMkeLVQAMa7gvkddbPqpxph+hDzdu1XdGPJR+Os=", - "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs/archive/fb192fec7cc7a4c26d51779e9bab07ce6fa5597a.tar.gz" + "lastModified": 1743296961, + "narHash": "sha256-b1EdN3cULCqtorQ4QeWgLMrd5ZGOjLSLemfa00heasc=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "e4822aea2a6d1cdd36653c134cacfd64c97ff4fa", + "type": "github" }, "original": { - "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs/archive/fb192fec7cc7a4c26d51779e9bab07ce6fa5597a.tar.gz" + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" } }, "nixpkgs-lib_2": { "locked": { - "lastModified": 1729386149, - "narHash": "sha256-hUP9oxmnOmNnKcDOf5Y55HQ+NnoT0+bLWHLQWLLw9Ks=", + "lastModified": 1748135671, + "narHash": "sha256-PIkcBpddXRAGWstWV7zTwRZ9EAPqgzFNssux17p1NTg=", "owner": "nix-community", "repo": "nixpkgs.lib", - "rev": "cce4521b6df014e79a7b7afc58c703ed683c916e", + "rev": "6194ba204e5b188965da97ebb16e05191e560427", "type": "github" }, "original": { @@ -717,43 +730,27 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1743576891, - "narHash": "sha256-vXiKURtntURybE6FMNFAVpRPr8+e8KoLPrYs9TGuAKc=", + "lastModified": 1749494155, + "narHash": "sha256-FG4DEYBpROupu758beabUk9lhrblSf5hnv84v1TLqMc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "44a69ed688786e98a101f02b712c313f1ade37ab", + "rev": "88331c17ba434359491e8d5889cce872464052c2", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-24.11", + "ref": "nixos-25.05", "repo": "nixpkgs", "type": "github" } }, "nixpkgs-stable_2": { "locked": { - "lastModified": 1720386169, - "narHash": "sha256-NGKVY4PjzwAa4upkGtAMz1npHGoRzWotlSnVlqI40mo=", + "lastModified": 1749488106, + "narHash": "sha256-b9GIWdF/8jKpCC5JIMgDLZgwe8cEbty2fyTyo1eDFfI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "194846768975b7ad2c4988bdb82572c00222c0d7", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-24.05", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-stable_3": { - "locked": { - "lastModified": 1743576891, - "narHash": "sha256-vXiKURtntURybE6FMNFAVpRPr8+e8KoLPrYs9TGuAKc=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "44a69ed688786e98a101f02b712c313f1ade37ab", + "rev": "8fe3e32e7f210522377c3bcff80931a3284ace6a", "type": "github" }, "original": { @@ -765,27 +762,42 @@ }, "nixpkgs_10": { "locked": { - "lastModified": 1740547748, - "narHash": "sha256-Ly2fBL1LscV+KyCqPRufUBuiw+zmWrlJzpWOWbahplg=", - "owner": "NixOS", + "lastModified": 1748538152, + "narHash": "sha256-lqAVR6FhqjdY9XpBs+cpIbHJpHxQaEFTeJMu/nkA9s0=", + "owner": "nixos", "repo": "nixpkgs", - "rev": "3a05eebede89661660945da1f151959900903b6a", + "rev": "966f441f64a65ff4590233e8c45e4f05197b3bfc", "type": "github" }, "original": { - "owner": "NixOS", + "owner": "nixos", "repo": "nixpkgs", - "rev": "3a05eebede89661660945da1f151959900903b6a", "type": "github" } }, "nixpkgs_11": { "locked": { - "lastModified": 1743583204, - "narHash": "sha256-F7n4+KOIfWrwoQjXrL2wD9RhFYLs2/GGe/MQY1sSdlE=", + "lastModified": 1749285348, + "narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2c8d3f48d33929642c1c12cd243df4cc7d2ce434", + "rev": "3e3afe5174c561dee0df6f2c2b2236990146329f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_12": { + "locked": { + "lastModified": 1749285348, + "narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3e3afe5174c561dee0df6f2c2b2236990146329f", "type": "github" }, "original": { @@ -797,41 +809,27 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1743320628, - "narHash": "sha256-FurMxmjEEqEMld11eX2vgfAx0Rz0JhoFm8UgxbfCZa8=", - "owner": "NixOS", + "lastModified": 1746397377, + "narHash": "sha256-5oLdRa3vWSRbuqPIFFmQBGGUqaYZBxX+GGtN9f/n4lU=", + "owner": "nixos", "repo": "nixpkgs", - "rev": "63158b9cbb6ec93d26255871c447b0f01da81619", + "rev": "ed30f8aba41605e3ab46421e3dcb4510ec560ff8", "type": "github" }, "original": { - "id": "nixpkgs", - "type": "indirect" + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" } }, "nixpkgs_3": { "locked": { - "lastModified": 1743315132, - "narHash": "sha256-6hl6L/tRnwubHcA4pfUUtk542wn2Om+D4UnDhlDW9BE=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "52faf482a3889b7619003c0daec593a1912fddc1", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_4": { - "locked": { - "lastModified": 1735563628, - "narHash": "sha256-OnSAY7XDSx7CtDoqNh8jwVwh4xNL/2HaJxGjryLWzX8=", + "lastModified": 1731386116, + "narHash": "sha256-lKA770aUmjPHdTaJWnP3yQ9OI1TigenUqVC3wweqZuI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b134951a4c9f3c995fd7be05f3243f8ecd65d798", + "rev": "689fed12a013f56d4c4d3f612489634267d86529", "type": "github" }, "original": { @@ -841,13 +839,13 @@ "type": "github" } }, - "nixpkgs_5": { + "nixpkgs_4": { "locked": { - "lastModified": 1741037377, - "narHash": "sha256-SvtvVKHaUX4Owb+PasySwZsoc5VUeTf1px34BByiOxw=", + "lastModified": 1749619289, + "narHash": "sha256-qX6gXVjaCXXbcn6A9eSLUf8Fm07MgPGe5ir3++y2O1Q=", "owner": "nixos", "repo": "nixpkgs", - "rev": "02032da4af073d0f6110540c8677f16d4be0117f", + "rev": "f72be405a10668b8b00937b452f2145244103ebc", "type": "github" }, "original": { @@ -857,29 +855,61 @@ "type": "github" } }, + "nixpkgs_5": { + "locked": { + "lastModified": 1749285348, + "narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3e3afe5174c561dee0df6f2c2b2236990146329f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs_6": { "locked": { - "lastModified": 1743583204, - "narHash": "sha256-F7n4+KOIfWrwoQjXrL2wD9RhFYLs2/GGe/MQY1sSdlE=", - "owner": "NixOS", + "lastModified": 1749619289, + "narHash": "sha256-qX6gXVjaCXXbcn6A9eSLUf8Fm07MgPGe5ir3++y2O1Q=", + "owner": "nixos", "repo": "nixpkgs", - "rev": "2c8d3f48d33929642c1c12cd243df4cc7d2ce434", + "rev": "f72be405a10668b8b00937b452f2145244103ebc", "type": "github" }, "original": { - "owner": "NixOS", - "ref": "nixos-unstable", + "owner": "nixos", + "ref": "nixpkgs-unstable", "repo": "nixpkgs", "type": "github" } }, "nixpkgs_7": { "locked": { - "lastModified": 1743095683, - "narHash": "sha256-gWd4urRoLRe8GLVC/3rYRae1h+xfQzt09xOfb0PaHSk=", + "lastModified": 1749619289, + "narHash": "sha256-qX6gXVjaCXXbcn6A9eSLUf8Fm07MgPGe5ir3++y2O1Q=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "f72be405a10668b8b00937b452f2145244103ebc", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_8": { + "locked": { + "lastModified": 1749143949, + "narHash": "sha256-QuUtALJpVrPnPeozlUG/y+oIMSLdptHxb3GK6cpSVhA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5e5402ecbcb27af32284d4a62553c019a3a49ea6", + "rev": "d3d2d80a2191a73d1e86456a751b83aa13085d7d", "type": "github" }, "original": { @@ -889,13 +919,13 @@ "type": "github" } }, - "nixpkgs_8": { + "nixpkgs_9": { "locked": { - "lastModified": 1719082008, - "narHash": "sha256-jHJSUH619zBQ6WdC21fFAlDxHErKVDJ5fpN0Hgx4sjs=", + "lastModified": 1730768919, + "narHash": "sha256-8AKquNnnSaJRXZxc5YmF/WfmxiHX6MMZZasRP6RRQkE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9693852a2070b398ee123a329e68f0dab5526681", + "rev": "a04d33c0c3f1a59a2c1cb0c6e34cd24500e5a1dc", "type": "github" }, "original": { @@ -905,18 +935,26 @@ "type": "github" } }, - "nixpkgs_9": { + "nyx": { + "inputs": { + "fenix": "fenix", + "flake-schemas": "flake-schemas", + "home-manager": "home-manager_2", + "jovian": "jovian", + "nixpkgs": "nixpkgs_12" + }, "locked": { - "lastModified": 1729507178, - "narHash": "sha256-3UZqmGSK+uMUGkydhnqng/iaT857JtAxH9DtucTbUQs=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "e156ec8b02301cd455ab96bbd53ebd7bf7d1e29d", + "lastModified": 1749736391, + "narHash": "sha256-DgdlYhBPzw87gKaBc19tPRydfatyOlyEnM5Bl5G2GKQ=", + "owner": "chaotic-cx", + "repo": "nyx", + "rev": "f8a2f1bd99ab7a8d5fd0a94ab57d3bd0be72124e", "type": "github" }, "original": { - "owner": "nixos", - "repo": "nixpkgs", + "owner": "chaotic-cx", + "ref": "nyxpkgs-unstable", + "repo": "nyx", "type": "github" } }, @@ -936,28 +974,64 @@ "type": "github" } }, + "quickshell": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1749729711, + "narHash": "sha256-AehIzIDy134s3XlXyXnRAhLTh9V4Px4VcWnU74bbV2M=", + "ref": "refs/heads/master", + "rev": "0fb809b1493cee321a51e5bb78b7a5f9f455c772", + "revCount": 575, + "type": "git", + "url": "https://git.outfoxxed.me/quickshell/quickshell.git" + }, + "original": { + "type": "git", + "url": "https://git.outfoxxed.me/quickshell/quickshell.git" + } + }, "root": { "inputs": { - "cachyos": "cachyos", "comfyui": "comfyui", "comfyui-plugins": "comfyui-plugins", "culr": "culr", "helix": "helix", "hjem": "hjem", "home-manager": "home-manager", - "ironbar": "ironbar", + "hudcore": "hudcore", "lix": "lix", "lix-module": "lix-module", - "madness": "madness", "meat": "meat", - "nh": "nh", "nil": "nil", "niri": "niri", + "niri-session-manager": "niri-session-manager", "nix-index-database": "nix-index-database", "nix-rice": "nix-rice", - "nix-vscode": "nix-vscode", "nixpkgs": "nixpkgs_11", - "nixpkgs-stable": "nixpkgs-stable_3" + "nixpkgs-stable": "nixpkgs-stable_2", + "nyx": "nyx", + "quickshell": "quickshell" + } + }, + "rust-analyzer-src": { + "flake": false, + "locked": { + "lastModified": 1749558764, + "narHash": "sha256-R9vQiqez6Gm0ARJKgbsAeLyX493vwIaexOUAz0vDhak=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "9c3476d225ccc90c081280c2a20e9f7d8a200325", + "type": "github" + }, + "original": { + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" } }, "rust-overlay": { @@ -982,27 +1056,6 @@ } }, "rust-overlay_2": { - "inputs": { - "nixpkgs": [ - "ironbar", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1743388531, - "narHash": "sha256-OBcNE+2/TD1AMgq8HKMotSQF8ZPJEFGZdRoBJ7t/HIc=", - "owner": "oxalica", - "repo": "rust-overlay", - "rev": "011de3c895927300651d9c2cb8e062adf17aa665", - "type": "github" - }, - "original": { - "owner": "oxalica", - "repo": "rust-overlay", - "type": "github" - } - }, - "rust-overlay_3": { "inputs": { "nixpkgs": [ "nil", @@ -1010,11 +1063,11 @@ ] }, "locked": { - "lastModified": 1741055476, - "narHash": "sha256-52vwEV0oS2lCnx3c/alOFGglujZTLmObit7K8VblnS8=", + "lastModified": 1749695868, + "narHash": "sha256-debjTLOyqqsYOUuUGQsAHskFXH5+Kx2t3dOo/FCoNRA=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "aefb7017d710f150970299685e8d8b549d653649", + "rev": "55f914d5228b5c8120e9e0f9698ed5b7214d09cd", "type": "github" }, "original": { @@ -1113,21 +1166,6 @@ "type": "github" } }, - "systems_7": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, "tensorrt": { "flake": false, "locked": { @@ -1144,6 +1182,24 @@ "type": "github" } }, + "treefmt-nix": { + "inputs": { + "nixpkgs": "nixpkgs_7" + }, + "locked": { + "lastModified": 1732894027, + "narHash": "sha256-2qbdorpq0TXHBWbVXaTqKoikN4bqAtAplTwGuII+oAc=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "6209c381904cab55796c5d7350e89681d3b2a8ef", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, "xwayland-satellite-stable": { "flake": false, "locked": { @@ -1164,11 +1220,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1743346993, - "narHash": "sha256-i7rWd/5BcqLgQEtB5L/6gKN5R5GUJcmm34F+iBivH60=", + "lastModified": 1749315541, + "narHash": "sha256-bEik1BfVOFnWvtOrcOHluos/edJ8f+G2y1QySbt/0Ak=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "45c055696437a08e3989d9b91d9c617b84cc2bc3", + "rev": "da2ecb5be816de35e2efe23a408a1c49fe8b11ba", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 709e803..2506572 100644 --- a/flake.nix +++ b/flake.nix @@ -1,6 +1,39 @@ { description = "nixos config"; + outputs = + inputs: + with inputs; + let + modules = import ./util/get-modules.nix { + inherit inputs; + }; + create = import ./create.nix { + inherit inputs; + system = "x86_64-linux"; + sharedModules = + (modules [ + culr + meat + niri + # smooooth + ]) + ++ [ + nix-index-database.nixosModules.nix-index + ./system/substituters.nix + ]; + }; + in + { + nixosConfigurations = create.systems { + quiver = { + user = "bolt"; + imports = (modules [ nyx ]); + }; + adrift.user = "plank"; + }; + }; + inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-24.11"; @@ -18,10 +51,6 @@ nil.url = "github:oxalica/nil"; - madness.url = "github:antithesishq/madness"; - - nh.url = "github:viperML/nh"; - lix = { url = "https://git.lix.systems/lix-project/lix/archive/main.tar.gz"; flake = false; @@ -37,7 +66,6 @@ url = "git+https://git.atagen.co/atagen/meat"; inputs.lix.follows = "lix"; inputs.lix-module.follows = "lix-module"; - inputs.nh.follows = "nh"; inputs.nixpkgs.follows = "nixpkgs"; }; @@ -56,46 +84,23 @@ inputs.nixpkgs.follows = "nixpkgs"; }; - niri = { - url = "github:sodiboo/niri-flake"; - }; - - ironbar.url = "github:JakeStanger/ironbar"; - - nix-vscode.url = "github:nix-community/nix-vscode-extensions"; + niri.url = "github:sodiboo/niri-flake"; hjem = { url = "github:feel-co/hjem"; inputs.nixpkgs.follows = "nixpkgs"; }; - cachyos.url = "github:drakon64/nixos-cachyos-kernel"; + hudcore.url = "git+https://git.atagen.co/atagen/hudcore-plymouth.git"; + + quickshell = { + url = "git+https://git.outfoxxed.me/quickshell/quickshell.git"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + nyx.url = "github:chaotic-cx/nyx/nyxpkgs-unstable"; + + # smooooth.url = "path:/home/bolt/code/smooooth"; }; - outputs = - inputs: - with inputs; - let - create = import ./util/create.nix { - inherit inputs; - system = "x86_64-linux"; - sharedModules = [ - culr.nixosModules.culr - meat.nixosModules.meat - madness.nixosModules.madness - niri.nixosModules.niri - nix-index-database.nixosModules.nix-index - ./system/cachix.nix - ]; - }; - in - { - nixosConfigurations = create.systems { - quiver = { - user = "bolt"; - imports = [ cachyos.nixosModules.default ]; - }; - adrift.user = "plank"; - }; - }; } diff --git a/flakes/niri-session-manager/flake.lock b/flakes/niri-session-manager/flake.lock new file mode 100644 index 0000000..b5285a9 --- /dev/null +++ b/flakes/niri-session-manager/flake.lock @@ -0,0 +1,41 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1749285348, + "narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=", + "path": "/nix/store/syvnmj3hhckkbncm94kfkbl76qsdqqj3-source", + "rev": "3e3afe5174c561dee0df6f2c2b2236990146329f", + "type": "path" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs", + "src": "src" + } + }, + "src": { + "flake": false, + "locked": { + "lastModified": 1741050520, + "narHash": "sha256-bTOxv5yZh6wgCs7ADUFKdlXGtlIckkSijGV8G7ToVy4=", + "owner": "MTeaHead", + "repo": "niri-session-manager", + "rev": "e8732380991bd629a7e6c3fb5ea50317084fb1eb", + "type": "github" + }, + "original": { + "owner": "MTeaHead", + "repo": "niri-session-manager", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flakes/niri-session-manager/flake.nix b/flakes/niri-session-manager/flake.nix new file mode 100644 index 0000000..ee1cd01 --- /dev/null +++ b/flakes/niri-session-manager/flake.nix @@ -0,0 +1,66 @@ +{ + inputs = { + src = { + url = "github:MTeaHead/niri-session-manager"; + flake = false; + }; + }; + + outputs = + { + nixpkgs, + src, + self, + }: + { + packages.x86_64-linux.default = nixpkgs.legacyPackages.x86_64-linux.rustPlatform.callPackage ( + { pkgs, buildRustPackage }: + buildRustPackage (finalAttrs: { + pname = "niri-session-manager"; + version = "git-${src.rev or src.dirtyRev or "dirty"}"; + inherit src; + + cargoLock = { + lockFile = "${src}/Cargo.lock"; + }; + + meta.mainProgram = "niri-session-manager"; + }) + ) { }; + + nixosModules.niri-session-manager = + { + config, + lib, + pkgs, + ... + }: + { + options = { + services.niri-session-manager = { + enable = lib.mkEnableOption "Niri Session Manager"; + }; + }; + config = + let + cfg = config.services.niri-session-manager; + in + lib.mkIf cfg.enable { + systemd.user.services.niri-session-manager = { + enable = true; + description = "Niri Session Manager"; + wantedBy = [ "graphical-session.target" ]; + partOf = [ "graphical-session.target" ]; + wants = [ "graphical-session.target" ]; + after = [ "graphical-session.target" ]; + serviceConfig = { + Type = "simple"; + Restart = "always"; + ExecStart = "${self.packages.${pkgs.system}.default}"; + PrivateTmp = true; + }; + }; + }; + }; + }; +} diff --git a/flakes/niri-session-manager/result b/flakes/niri-session-manager/result new file mode 120000 index 0000000..5b7a63e --- /dev/null +++ b/flakes/niri-session-manager/result @@ -0,0 +1 @@ +/nix/store/731lnc1qjhq5gcrvmqycbm41r2ga3dqa-niri-session-manager-git-e8732380991bd629a7e6c3fb5ea50317084fb1eb \ No newline at end of file diff --git a/home/bolt.nix b/home/bolt.nix index 86eb369..79cacb5 100644 --- a/home/bolt.nix +++ b/home/bolt.nix @@ -1,36 +1,15 @@ { - inputs, pkgs, - config, - mainUser, ... }: { - inherit mainUser; imports = [ ./home.nix - # ./util/local-webapp.nix - # ./util/containers.nix - # ./programs/stable-diffusion.nix - inputs.comfyui.homeManagerModules.comfyui ]; - home.packages = with pkgs; [ - nicotine-plus - ]; - - programs.comfyui = { - enable = false; - storage = "/home/${config.mainUser}/.local/share/comfyui/"; - plugins = - let - inherit (pkgs.comfyui-plugins) gguf openpose; - in - [ - gguf - # essentials - openpose - ]; + home.packages = builtins.attrValues { + inherit (pkgs) nicotine-plus; }; + } diff --git a/home/home.nix b/home/home.nix index d57fadc..bb1aaa5 100644 --- a/home/home.nix +++ b/home/home.nix @@ -17,7 +17,6 @@ ./util/ez.nix ./util/name.nix inputs.nix-index-database.hmModules.nix-index - inputs.ironbar.homeManagerModules.default ]; nix.gc = { @@ -52,8 +51,14 @@ home.packages = let inherit (rice) icons fonts cursor; + inherit (pkgs) tauon; in - fonts.pkgs ++ icons.pkgs ++ [ cursor.package ]; + fonts.pkgs + ++ icons.pkgs + ++ [ + cursor.package + tauon + ]; systemd.user.targets.tray = { Unit = { @@ -90,7 +95,7 @@ # programs.nix-index.enable = true; systemd.user.startServices = "sd-switch"; - # ezServices = { - # ckb-next = "${getExe pkgs.ckb-next} -c -b"; - # }; + ezServices = { + ckb-next = "${lib.getExe pkgs.ckb-next} -c -b"; + }; } diff --git a/home/icons/anythingllm.png b/home/icons/anythingllm.png deleted file mode 100644 index 0ad2533d0190420e75f7846bdd4cdc97c1c042cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16920 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 /dev/tcp/localhost/3001'") - ]; - }; -} diff --git a/home/programs/atuin.nix b/home/programs/atuin.nix deleted file mode 100644 index 2189c60..0000000 --- a/home/programs/atuin.nix +++ /dev/null @@ -1,14 +0,0 @@ -_: { - programs.atuin = { - enable = true; - enableZshIntegration = true; - settings = { - inline_height = 20; - show_preview = true; - show_help = false; - enter_accept = false; - keymap_mode = "vim-normal"; - style = "compact"; - }; - }; -} diff --git a/home/programs/helix-ai.nix b/home/programs/helix-ai.nix deleted file mode 100644 index b3a35b3..0000000 --- a/home/programs/helix-ai.nix +++ /dev/null @@ -1,347 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - palette-hex = pkgs.lib.nix-rice.palette.toRgbHex pkgs.rice.palette; -in -{ - programs.helix = { - enable = true; - themes = with palette-hex; { - nix-rice = { - "attribute" = bright.cyan; - "keyword" = { - fg = normal.red; - }; - "keyword.directive" = normal.red; - "namespace" = bright.cyan; - "punctuation" = bright.yellow; - "punctuation.delimiter" = bright.yellow; - "operator" = bright.magenta; - "special" = normal.magenta; - "variable.other.member" = bright.blue; - "variable" = util.fg; - "variable.builtin" = bright.yellow; - "variable.parameter" = bright.white; - "type" = normal.yellow; - "type.builtin" = normal.yellow; - "constructor" = { - fg = bright.magenta; - modifiers = [ "bold" ]; - }; - "function" = { - fg = normal.green; - modifiers = [ "bold" ]; - }; - "function.macro" = bright.cyan; - "function.builtin" = normal.yellow; - "tag" = normal.red; - "comment" = { - fg = normal.magenta; - modifiers = [ "italic" ]; - }; - "constant" = { - fg = bright.magenta; - }; - "constant.builtin" = { - fg = bright.magenta; - modifiers = [ "bold" ]; - }; - "string" = normal.green; - "constant.numeric" = bright.magenta; - "constant.character.escape" = { - fg = bright.white; - modifiers = [ "bold" ]; - }; - "label" = bright.cyan; - "module" = bright.cyan; - "diff.plus" = bright.green; - "diff.delta" = bright.yellow; - "diff.minus" = bright.red; - "warning" = bright.yellow; - "error" = bright.red; - "info" = bright.cyan; - "hint" = bright.blue; - "ui.background" = { - inherit (util) bg; - }; - "ui.linenr" = { - fg = normal.cyan; - }; - "ui.linenr.selected" = { - fg = normal.yellow; - modifiers = [ "bold" ]; - }; - "ui.cursorline" = { - bg = normal.black; - }; - "ui.statusline" = { - inherit (util) fg; - bg = bright.black; - }; - "ui.statusline.normal" = { - inherit (util) fg; - bg = bright.black; - }; - "ui.statusline.insert" = { - inherit (util) fg; - bg = normal.blue; - }; - "ui.statusline.select" = { - inherit (util) fg; - bg = bright.yellow; - }; - "ui.statusline.inactive" = { - fg = normal.white; - bg = normal.black; - }; - "ui.popup" = { - bg = normal.black; - }; - "ui.window" = { - bg = normal.black; - }; - "ui.help" = { - bg = normal.black; - inherit (util) fg; - }; - "ui.text" = { - inherit (util) fg; - }; - "ui.text.focus" = { - inherit (util) fg; - }; - "ui.selection" = { - # modifiers = ["reversed"]; - bg = bright.yellow; - }; - "ui.selection.primary" = { - modifiers = [ "reversed" ]; - }; - # "ui.selection.primary" = { bg = bright.cyan; }; - "ui.cursor.primary" = { - bg = normal.white; - fg = normal.black; - }; - "ui.cursor.match" = { - bg = bright.cyan; - }; - "ui.menu" = { - inherit (util) fg; - bg = bright.black; - }; - "ui.menu.selected" = { - fg = bright.black; - bg = bright.blue; - modifiers = [ "bold" ]; - }; - "ui.virtual.whitespace" = bright.black; - "ui.virtual.ruler" = { - bg = normal.black; - }; - "ui.virtual.inlay-hint" = { - fg = normal.magenta; - }; - "diagnostic.warning" = { - underline = { - color = bright.yellow; - style = "curl"; - }; - }; - "diagnostic.error" = { - underline = { - color = bright.red; - style = "curl"; - }; - }; - "diagnostic.info" = { - underline = { - color = bright.cyan; - style = "curl"; - }; - }; - "diagnostic.hint" = { - underline = { - color = bright.blue; - style = "curl"; - }; - }; - "markup.heading" = bright.cyan; - "markup.bold" = { - modifiers = [ "bold" ]; - }; - "markup.italic" = { - modifiers = [ "italic" ]; - }; - "markup.strikethrough" = { - modifiers = [ "crossed_out" ]; - }; - "markup.link.url" = { - fg = bright.green; - modifiers = [ "underlined" ]; - }; - "markup.link.text" = bright.red; - "markup.raw" = bright.red; - }; - }; - - # theme = "nix-rice" - - # [editor] - # bufferline = "multiple" - # cursorline = true - # true-color = true - - # [editor.cursor-shape] - # insert = "bar" - # normal = "block" - # select = "underline" - - # [editor.lsp] - # display-messages = true - - # [editor.statusline] - # left = ["mode", "spinner", "version-control", "file-name", "file-modification-indicator"] - - settings = { - theme = "nix-rice"; - editor = { - bufferline = "multiple"; - cursorline = true; - true-color = true; - cursor-shape = { - insert = "bar"; - normal = "block"; - select = "underline"; - }; - statusline.left = [ - "mode" - "spinner" - "version-control" - "file-name" - "file-modification-indicator" - ]; - lsp.display-messages = true; - keys = - let - extend = { - "A-x" = "extend_to_line_bounds"; - "X" = [ - "extend_line_up" - "extend_to_line_bounds" - ]; - }; - in - { - normal = extend; - select = extend; - }; - }; - }; - - languages = { - language = [ - { - name = "rust"; - language-servers = [ - "rust-analyzer" - "lsp-ai" - ]; - auto-format = true; - } - { - name = "nix"; - language-servers = [ - "nixd" - "lsp-ai" - ]; - file-types = [ "nix" ]; - # auto-format = true; - formatter = { - command = "alejandra"; - }; - } - { - name = "ocaml"; - language-servers = [ - "ocamllsp" - "lsp-ai" - ]; - file-types = [ - "ml" - "mli" - ]; - auto-format = true; - formatter = { - command = "ocamlformat"; - }; - } - ]; - - language-server = { - nixd = { - command = "nixd"; - }; - - lsp-ai = { - command = "lsp-ai"; - config = { - memory.fileStore = { }; - models = { - llama32 = { - type = "ollama"; - model = "llama3.2"; - }; - starcoder2 = { - type = "ollama"; - model = "starcoder2:7b"; - }; - }; - completion = { - model = "starcoder2"; - parameters = { - maxContext = 1024; - options = { - numPredict = 32; - }; - postProcess = { - removeDuplicateStart = true; - removeDuplicateEnd = true; - }; - }; - }; - chat = { - trigger = "!C"; - action_display_name = "Chat"; - model = "llama32"; - parameters = { - max_context = 4096; - max_tokens = 1024; - system = "You are a code assistant chatbot. The user will ask you for assistance coding and you will do your best to answer succinctly and accurately."; - }; - }; - }; - }; - - rust-analyzer = { - config = { - cargo = { - buildScripts = { - enable = true; - }; - }; - procMacro = { - enable = true; - }; - check = { - command = "clippy"; - }; - }; - }; - }; # language-server - }; # languages - }; # helix config -} diff --git a/home/programs/helix.nix b/home/programs/helix.nix index a495c48..f6d1f3f 100644 --- a/home/programs/helix.nix +++ b/home/programs/helix.nix @@ -1,15 +1,17 @@ { - nix-rice, + inputs, + pkgs, rice, ... }: let - palette-hex = nix-rice.palette.toRgbHex rice.palette; + pal = rice.palette.hex; in { programs.helix = { enable = true; - themes = with palette-hex; { + package = inputs.helix.packages.${pkgs.system}.helix; + themes = with pal; { nix-rice = { "attribute" = bright.cyan; "keyword" = { @@ -208,15 +210,6 @@ in "file-modification-indicator" ]; lsp.display-messages = true; - # keys = let - # extend = { - # "A-x" = "extend_to_line_bounds"; - # "X" = ["extend_line_up" "extend_to_line_bounds"]; - # }; - # in { - # normal = extend; - # select = extend; - # }; }; }; @@ -238,23 +231,20 @@ in ]; language-server = { + qmlls = { + command = "qmlls"; + args = [ "-E" ]; + }; + nil = { command = "nil"; }; rust-analyzer = { config = { - cargo = { - buildScripts = { - enable = true; - }; - }; - procMacro = { - enable = true; - }; - check = { - command = "clippy"; - }; + cargo.buildScripts.enable = true; + procMacro.enable = true; + check.command = "clippy"; }; }; }; # language-server diff --git a/home/programs/kitty.nix b/home/programs/kitty.nix index 1d3560a..aa5c486 100644 --- a/home/programs/kitty.nix +++ b/home/programs/kitty.nix @@ -1,10 +1,9 @@ { - nix-rice, rice, ... }: let - palette-hex = nix-rice.palette.toRgbHex rice.palette; + pal = rice.palette.hex; in { programs.kitty = { @@ -12,7 +11,7 @@ in font = { inherit (rice.fonts.monospace) name size; }; - settings = with palette-hex; { + settings = with pal; { foreground = util.fg; background = util.bg; inherit (util) cursor; @@ -37,6 +36,7 @@ in color15 = bright.white; sync_to_monitor = "yes"; shell = "fish"; + cursor_trail = 100; }; }; } diff --git a/home/programs/ollama.nix b/home/programs/ollama.nix deleted file mode 100644 index 7ff9e0e..0000000 --- a/home/programs/ollama.nix +++ /dev/null @@ -1,82 +0,0 @@ -{ - pkgs, - lib, - config, - ... -}: -{ - xdg.desktopEntries.ollama = { - name = "Ollama"; - type = "Application"; - icon = ../icons/ollama.png; - exec = - let - inherit (lib) getExe getExe'; - notify-send = "${getExe' pkgs.libnotify "notify-send"} -a \"Ollama\""; - systemctl = "${getExe' pkgs.systemd "systemctl"}"; - podman = "${getExe pkgs.podman}"; - in - "${pkgs.writeShellScript "ollama" '' - set -euo pipefail - - exit_error() { - ${notify-send} -w "Failure" $1 - exit 1 - } - - container_checks() { - if [ "$(${podman} inspect -f {{.State.Health.Status}} ollama)" == "healthy" ]; then - return 0 - else - return 1 - fi - } - - ${notify-send} "Launching Ollama.." "Please be patient." - - ${systemctl} --user start podman-ollama - checks=0 - until container_checks; do - sleep 2 - checks=$((checks+1)) - if [ $((checks%10)) -eq 0 ]; then - ${notify-send} "Launching.." - fi - if [ $checks -ge 60 ]; then - ${systemctl} --no-block --user stop podman-ollama.target - exit_error "Failed to launch!" - fi - done - - ${notify-send} "Ollama serving on port 11434." - ''}"; - }; - - services.podman = { - containers.ollama = - let - username = config.mainUser; - in - { - image = "docker.io/ollama/ollama:latest"; - devices = [ "nvidia.com/gpu=all" ]; - autoStart = false; - autoUpdate = "registry"; - network = [ "ollama" ]; - ports = [ "11434:11434" ]; - volumes = [ - "/home/${username}/.local/share/ollama:/models" - ]; - environment.OLLAMA_MODELS = "/models"; - extraPodmanArgs = [ - "--health-cmd" - (lib.escapeShellArg "bash -c 'cat < /dev/null > /dev/tcp/localhost/11434'") - ]; - }; - - networks.ollama = { - subnet = "192.168.10.0/24"; - gateway = "192.168.10.1"; - }; - }; -} diff --git a/home/programs/openwebui.nix b/home/programs/openwebui.nix deleted file mode 100644 index 75ec292..0000000 --- a/home/programs/openwebui.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ - lib, - ... -}: -let - port = 3021; -in -{ - imports = [ ./ollama.nix ]; - - localWebApps = { - openwebui = { - name = "OpenWebUI"; - genericName = "LLM"; - icon = ../icons/openwebui.png; - inherit port; - requires.containers = [ - "openwebui" - "ollama" - ]; - }; - }; - - services.podman = { - containers.openwebui = - let - str = builtins.toString; - in - { - # serviceName = "openwebui"; - image = "ghcr.io/open-webui/open-webui:main"; - ports = [ "${str port}:${str port}" ]; - environment = { - WEBUI_AUTH = "False"; - PORT = "${str port}"; - }; - autoStart = false; - networks = [ "ollama" ]; - unitConfig = { - Requires = [ "podman-ollama.service" ]; - }; - extraOptions = [ - "--health-cmd" - (lib.escapeShellArg "bash -c 'cat < /dev/null > /dev/tcp/localhost/${str port}'") - ]; - }; - }; -} diff --git a/home/programs/stable-diffusion.nix b/home/programs/stable-diffusion.nix deleted file mode 100644 index 8f17ddb..0000000 --- a/home/programs/stable-diffusion.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - lib, - config, - ... -}: -{ - localWebApps = { - stable-diffusion = { - name = "Stable Diffusion"; - genericName = "Image Generator"; - icon = ../icons/comfyui.png; - id = 5; - port = 7860; - requires = [ "stable-diffusion" ]; - }; - }; -} diff --git a/home/programs/vscode.nix b/home/programs/vscode.nix deleted file mode 100644 index 78dcd6f..0000000 --- a/home/programs/vscode.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ rice, inputs, ... }: -{ - programs.vscode = { - enable = true; - mutableExtensionsDir = false; - profiles.default = { - extensions = with inputs.nix-vscode.extensions.x86_64-linux.vscode-marketplace; [ - rust-lang.rust-analyzer - ocamllabs.ocaml-platform - jnoortheen.nix-ide - mkhl.direnv - barbosshack.crates-io - vadimcn.vscode-lldb - kend.dancehelixkey - hikionori.kanagawa-vscode-theme - dbaeumer.vscode-eslint - ms-vscode.extension-test-runner - ]; - userSettings = { - "window.titleBarStyle" = "custom"; - "editor.fontFamily" = "${rice.fonts.monospace.name}"; - "editor.fontSize" = 12; - "editor.formatOnSave" = true; - "workbench.colorTheme" = "KanagawaTheme"; - "rust-analyzer.debug.engine" = "vadimcn.vscode-lldb"; - "rust-analyzer.inlayHints.chainingHints.enable" = false; - "rust-analyzer.inlayHints.parameterHints.enable" = false; - "rust-analyzer.inlayHints.typeHints.enable" = false; - "nix.enableLanguageServer" = true; - "nix.serverPath" = "nil"; - "nix.serverSettings" = { - nil.formatting.command = [ - "nixfmt" - ]; - }; - }; - }; - }; -} diff --git a/home/programs/wlogout.nix b/home/programs/wlogout.nix index 50096e2..3721963 100644 --- a/home/programs/wlogout.nix +++ b/home/programs/wlogout.nix @@ -1,11 +1,10 @@ { - nix-rice, rice, pkgs, ... }: let - palette-hex = nix-rice.palette.toRgbHex rice.palette; + pal = rice.palette.hex; in { programs.wlogout = { @@ -13,7 +12,7 @@ in package = pkgs.wleave; layout = builtins.fromJSON (builtins.readFile ../dots/wlogout/layout); style = - with palette-hex; + with pal; (builtins.replaceStrings [ "/usr/share/wlogout" diff --git a/home/programs/xresources.nix b/home/programs/xresources.nix deleted file mode 100644 index 5bf2ade..0000000 --- a/home/programs/xresources.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ - pkgs, - lib, - config, - inputs, - ... -}: -let - inherit (lib) getExe; - inherit (config.home) homeDirectory; - palette-hex = inputs.nix-rice.palette.toRgbHex pkgs.rice.palette; -in -{ - ezOneShots = with pkgs; { - xrdb = "${getExe xorg.xrdb} -load ${homeDirectory}/.Xresources"; - }; - home.packages = with pkgs; [ - xorg.xrdb - ]; - xresources.properties = with palette-hex; { - "*.foreground" = util.fg; - "*.background" = util.bg; - "*.cursorColor" = util.cursor; - "*.selection_foreground" = util.fg_sel; - "*.selection_background" = util.bg_sel; - "*.color0" = normal.black; - "*.color1" = normal.red; - "*.color2" = normal.green; - "*.color3" = normal.yellow; - "*.color4" = normal.blue; - "*.color5" = normal.magenta; - "*.color6" = normal.cyan; - "*.color7" = normal.white; - "*.color8" = bright.black; - "*.color9" = bright.red; - "*.color10" = bright.green; - "*.color11" = bright.yellow; - "*.color12" = bright.blue; - "*.color13" = bright.magenta; - "*.color14" = bright.cyan; - "*.color15" = bright.white; - }; -} diff --git a/home/programs/zsh.nix b/home/programs/zsh.nix deleted file mode 100644 index 77a61dd..0000000 --- a/home/programs/zsh.nix +++ /dev/null @@ -1,69 +0,0 @@ -{ - lib, - pkgs, - ... -}: -{ - programs.zsh = { - enable = true; - autosuggestion.enable = true; - enableCompletion = true; - syntaxHighlighting.enable = true; - enableVteIntegration = true; - autocd = true; - defaultKeymap = "viins"; - initExtra = builtins.readFile ../dots/zsh; - plugins = [ - { - name = "powerlevel10k"; - src = pkgs.zsh-powerlevel10k; - file = "share/zsh-powerlevel10k/powerlevel10k.zsh-theme"; - } - { - name = "zsh-vi-mode"; - src = pkgs.zsh-vi-mode; - file = "share/zsh-vi-mode/zsh-vi-mode.zsh"; - } - { - name = "zsh-autopair"; - src = pkgs.zsh-autopair; - file = "share/zsh-autopair/zsh-autopair.zsh"; - } - { - name = "zsh-completions"; - src = pkgs.zsh-completions; - file = "share/zsh-completions/zsh-completions.zsh"; - } - { - name = "zsh-command-time"; - src = pkgs.zsh-command-time; - file = "share/zsh-completions/zsh-command-time.zsh"; - } - { - name = "zsh-autocomplete"; - src = pkgs.zsh-autocomplete; - file = "share/zsh-autocomplete/zsh-autocomplete.zsh"; - } - { - name = "zsh-fast-syntax-highlighting"; - src = pkgs.zsh-fast-syntax-highlighting; - file = "share/zsh-fast-syntax-highlighting/zsh-fast-syntax-highlighting.zsh"; - } - { - name = "zsh-nix-shell"; - src = pkgs.zsh-nix-shell; - file = "share/zsh-nix-shell/zsh-nix-shell.zsh"; - } - { - name = "any-nix-shell"; - src = pkgs.any-nix-shell; - file = "share/any-nix-shell/any-nix-shell.zsh"; - } - { - name = "nix-zsh-completions"; - src = pkgs.nix-zsh-completions; - file = "share/nix-zsh-completions/nix-zsh-completions.zsh"; - } - ]; - }; -} diff --git a/home/util/containers.nix b/home/util/containers.nix deleted file mode 100644 index 4f7a0e8..0000000 --- a/home/util/containers.nix +++ /dev/null @@ -1,382 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - containerOptions = _: { - options = { - pullPolicy = mkOption { - type = with types; str; - description = "Podman container pulling policy"; - default = "newer"; - }; - image = mkOption { - type = with types; str; - description = "OCI image to run."; - example = "library/hello-world"; - }; - - imageFile = mkOption { - type = with types; nullOr package; - default = null; - description = '' - Path to an image file to load before running the image. This can - be used to bypass pulling the image from the registry. - - The `image` attribute must match the name and - tag of the image contained in this file, as they will be used to - run the container with that image. If they do not match, the - image will be pulled from the registry as usual. - ''; - example = literalExpression "pkgs.dockerTools.buildImage {...};"; - }; - - login = { - username = mkOption { - type = with types; nullOr str; - default = null; - description = "Username for login."; - }; - - passwordFile = mkOption { - type = with types; nullOr str; - default = null; - description = "Path to file containing password."; - example = "/etc/nixos/dockerhub-password.txt"; - }; - - registry = mkOption { - type = with types; nullOr str; - default = null; - description = "Registry where to login to."; - example = "https://docker.pkg.github.com"; - }; - }; - - cmd = mkOption { - type = with types; listOf str; - default = [ ]; - description = "Commandline arguments to pass to the image's entrypoint."; - example = literalExpression '' - ["--port=9000"] - ''; - }; - - labels = mkOption { - type = with types; attrsOf str; - default = { }; - description = "Labels to attach to the container at runtime."; - example = literalExpression '' - { - "traefik.https.routers.example.rule" = "Host(`example.container`)"; - } - ''; - }; - - entrypoint = mkOption { - type = with types; nullOr str; - description = "Override the default entrypoint of the image."; - default = null; - example = "/bin/my-app"; - }; - - environment = mkOption { - type = with types; attrsOf str; - default = { }; - description = "Environment variables to set for this container."; - example = literalExpression '' - { - DATABASE_HOST = "db.example.com"; - DATABASE_PORT = "3306"; - } - ''; - }; - - environmentFiles = mkOption { - type = with types; listOf path; - default = [ ]; - description = "Environment files for this container."; - example = literalExpression '' - [ - /path/to/.env - /path/to/.env.secret - ] - ''; - }; - - log-driver = mkOption { - type = types.str; - default = "journald"; - description = '' - Logging driver for the container. The default of - `"journald"` means that the container's logs will be - handled as part of the systemd unit. - - For more details and a full list of logging drivers, refer to podman documentation. - - For Docker: - [Docker engine documentation](https://docs.docker.com/engine/reference/run/#logging-drivers---log-driver) - - For Podman: - Refer to the docker-run(1) man page. - ''; - }; - - ports = mkOption { - type = with types; listOf str; - default = [ ]; - description = '' - Network ports to publish from the container to the outer host. - - Valid formats: - - `::` - - `::` - - `:` - - `` - - Both `hostPort` and `containerPort` can be specified as a range of - ports. When specifying ranges for both, the number of container - ports in the range must match the number of host ports in the - range. Example: `1234-1236:1234-1236/tcp` - - When specifying a range for `hostPort` only, the `containerPort` - must *not* be a range. In this case, the container port is published - somewhere within the specified `hostPort` range. - Example: `1234-1236:1234/tcp` - - Refer to the - [Docker engine documentation](https://docs.docker.com/engine/reference/run/#expose-incoming-ports) for full details. - ''; - example = literalExpression '' - [ - "8080:9000" - ] - ''; - }; - - user = mkOption { - type = with types; nullOr str; - default = null; - description = '' - Override the username or UID (and optionally groupname or GID) used - in the container. - ''; - example = "nobody:nogroup"; - }; - - volumes = mkOption { - type = with types; listOf str; - default = [ ]; - description = '' - List of volumes to attach to this container. - - Note that this is a list of `"src:dst"` strings to - allow for `src` to refer to `/nix/store` paths, which - would be difficult with an attribute set. There are - also a variety of mount options available as a third - field; please refer to the - [docker engine documentation](https://docs.docker.com/engine/reference/run/#volume-shared-filesystems) for details. - ''; - example = literalExpression '' - [ - "volume_name:/path/inside/container" - "/path/on/host:/path/inside/container" - ] - ''; - }; - - workdir = mkOption { - type = with types; nullOr str; - default = null; - description = "Override the default working directory for the container."; - example = "/var/lib/hello_world"; - }; - - dependsOn = mkOption { - type = with types; listOf str; - default = [ ]; - description = '' - Define which other containers this one depends on. They will be added to both After and Requires for the unit. - - Use the same name as the attribute under `virtualisation.oci-containers.containers`. - ''; - example = literalExpression '' - containers = { - node1 = {}; - node2 = { - dependsOn = [ "node1" ]; - } - } - ''; - }; - - hostname = mkOption { - type = with types; nullOr str; - default = null; - description = "The hostname of the container."; - example = "hello-world"; - }; - - preRunExtraOptions = mkOption { - type = with types; listOf str; - default = [ ]; - description = "Extra options for podman that go before the `run` argument."; - example = [ - "--runtime" - "runsc" - ]; - }; - - extraOptions = mkOption { - type = with types; listOf str; - default = [ ]; - description = "Extra options for podman run`."; - example = literalExpression '' - ["--network=host"] - ''; - }; - - autoStart = mkOption { - type = types.bool; - default = false; - description = '' - When enabled, the container is automatically started on boot. - If this option is set to false, the container has to be started on-demand via its service. - ''; - }; - }; - }; - - mkService = - name: container: - let - podman = lib.getExe pkgs.podman; - rm = lib.getExe' pkgs.coreutils "rm"; - printf = lib.getExe' pkgs.coreutils "printf"; - getId = ''"$(${lib.getExe' pkgs.coreutils "id"} -u)"''; - dependsOn = map (x: "podman-${x}.service") container.dependsOn; - escapedName = lib.escapeShellArg name; - preStartScript = pkgs.writeShellApplication { - name = "pre-start"; - runtimeInputs = [ ]; - text = '' - ${printf} "Running pre-start script.." - ${podman} rm -f ${name} || true - ${lib.optionalString (container.imageFile != null) '' - ${podman} load -i ${container.imageFile} - ''} - ${rm} -f /run/user/${getId}/podman-${escapedName}.ctr-id - ${printf} " success.\nStarting Podman...\n" - ''; - }; - script = concatStringsSep " \\\n " ( - [ - "exec ${podman} " - ] - ++ map escapeShellArg container.preRunExtraOptions - ++ [ - "run" - "--log-level=debug" - "--rm" - "--name=${escapedName}" - "--log-driver=${container.log-driver}" - ] - ++ optional (container.entrypoint != null) "--entrypoint=${escapeShellArg container.entrypoint}" - ++ optional (container.hostname != null) "--hostname=${escapeShellArg container.hostname}" - ++ optional (container.pullPolicy != null) "--pull=${container.pullPolicy}" - ++ [ - "--cidfile=/run/user/${getId}/podman-${escapedName}.ctr-id" - # "--sdnotify=ignore" - "--cgroups=no-conmon" - "--sdnotify=conmon" - "-d" - "--replace" - ] - ++ (mapAttrsToList (k: v: "-e ${escapeShellArg k}=${escapeShellArg v}") container.environment) - ++ map (f: "--env-file ${escapeShellArg f}") container.environmentFiles - ++ map (p: "-p ${escapeShellArg p}") container.ports - ++ optional (container.user != null) "-u ${escapeShellArg container.user}" - ++ map (v: "-v ${escapeShellArg v}") container.volumes - ++ (mapAttrsToList (k: v: "-l ${escapeShellArg k}=${escapeShellArg v}") container.labels) - ++ optional (container.workdir != null) "-w ${escapeShellArg container.workdir}" - ++ map escapeShellArg container.extraOptions - ++ [ container.image ] - ++ map escapeShellArg container.cmd - ); - - inherit (lib) - concatStringsSep - escapeShellArg - optional - mapAttrsToList - ; - in - { - Unit = { - WantedBy = lib.optional container.autoStart "default.target"; # graphical-session instead maybe? - After = dependsOn; - Requires = dependsOn; - # StopWhenUnneeded = true; - }; - # TODO make network target.. - # wants = lib.optional (container.imageFile == null) "network-online.target"; - # after = lib.optionals (container.imageFile == null) [ "network-online.target" ] - # ++ dependsOn; - # environment = proxy_env; - - Service = { - ### There is no generalized way of supporting `reload` for docker - ### containers. Some containers may respond well to SIGHUP sent to their - ### init process, but it is not guaranteed; some apps have other reload - ### mechanisms, some don't have a reload signal at all, and some docker - ### images just have broken signal handling. The best compromise in this - ### case is probably to leave ExecReload undefined, so `systemctl reload` - ### will at least result in an error instead of potentially undefined - ### behaviour. - ### - ### Advanced users can still override this part of the unit to implement - ### a custom reload handler, since the result of all this is a normal - ### systemd service from the perspective of the NixOS module system. - ### - # ExecReload = ...; - ### - ExecStartPre = [ "${preStartScript}/bin/pre-start" ]; - ExecStart = [ - "${pkgs.writeShellScript "start" script}" - ]; - ExecStop = [ - "${podman} stop --ignore --cidfile=/run/user/${getId}/podman-${escapedName}.ctr-id" - "${podman} rm -f --ignore --cidfile=/run/user/${getId}/podman-${escapedName}.ctr-id" - ]; - # TimeoutStartSec = 0; - # TimeoutStopSec = 120; - # Restart = "always"; - Environment = [ "PODMAN_SYSTEMD_UNIT=podman-${name}.service" ]; - Type = "notify"; - NotifyAccess = "all"; - # Type = "exec"; - }; - }; - - cfg = config.containers; - inherit (lib) - mapAttrs' - nameValuePair - mkOption - types - mkIf - literalExpression - ; -in -{ - options.containers = mkOption { - default = { }; - type = with types; attrsOf (submodule containerOptions); - }; - - config = mkIf (cfg != { }) { - systemd.user.services = mapAttrs' (k: v: nameValuePair "podman-${k}" (mkService k v)) cfg; - }; -} diff --git a/home/util/cosmic.nix b/home/util/cosmic.nix deleted file mode 100644 index d4ac0c0..0000000 --- a/home/util/cosmic.nix +++ /dev/null @@ -1,212 +0,0 @@ -{ - lib, - config, - ... -}: -let - inherit (lib) - filterAttrs - concatStrings - concatStringsSep - mapAttrsToList - concatLists - foldlAttrs - concatMapAttrs - mapAttrs' - nameValuePair - boolToString - ; - inherit (builtins) typeOf toString stringLength; - - # build up serialisation machinery from here for various types - - # list -> array - array = a: "[${concatStringsSep "," a}]"; - # attrset -> hashmap - _assoc = a: mapAttrsToList (name: val: "${name}: ${val}") a; - assoc = a: '' - { - ${concatStringsSep ",\n" (concatLists (map _assoc a))} - }''; - # attrset -> struct - _struct_kv = - k: v: - if v == null then - "" - else - (concatStringsSep ":" [ - k - (serialise.${typeOf v} v) - ]); - _struct_concat = - s: - foldlAttrs ( - acc: k: v: - if stringLength acc > 0 then - concatStringsSep ", " [ - acc - (_struct_kv k v) - ] - else - _struct_kv k v - ) "" s; - _struct_filt = s: _struct_concat (filterAttrs (_k: v: v != null) s); - struct = s: "(${_struct_filt s})"; - toQuotedString = s: ''"${toString s}"''; - - # make an attrset for struct serialisation - serialise = { - int = toString; - float = toString; - bool = boolToString; - string = toString; - path = toString; - null = toString; - set = struct; - list = array; - }; - - # define the key for a keybind - defineBinding = - binding: - struct { - inherit (binding) modifiers; - key = if (binding.key == null) then null else toQuotedString binding.key; - }; - - # map keybinding from list of attrset to hashmap of (mod,key): action - _mapBindings = - bindings: - map (inner: { "${defineBinding inner}" = maybeToString (checkAction inner.action); }) bindings; - mapBindings = bindings: assoc (_mapBindings bindings); - - # check a keybinding's action - # escape with quotes if it's a Spawn action - checkAction = - a: - if typeOf a == "set" && a.type == "Spawn" then - { - inherit (a) type; - data = toQuotedString a.data; - } - else - a; - - maybeToString = - s: - if typeOf s == "set" then - concatStrings [ - s.type - "(" - (toString s.data) - ")" - ] - else - s; - - mapCosmicSettings = - application: options: - mapAttrs' ( - k: v: - nameValuePair "cosmic/${application}/v${options.version}/${k}" { - enable = true; - text = serialise.${typeOf v} v; - } - ) options.option; -in -# deconstructKeybindAttr = attr: mapAttrs' ( -# name: value: -# ) attr; -# rec_attr = lib.types.attrsOf (lib.types.oneOf lib.types.string rec_attr); -{ - options.cosmic = { - enable = - with lib; - mkOption { - default = false; - type = types.bool; - }; - - defaultKeybindings = - with lib; - mkOption { - default = true; - type = types.bool; - }; - - # binds = with lib; - # mkOption { - # default = {}; - # type = with types; rec_attr; - # }; - - keybindings = - with lib; - mkOption { - default = [ ]; - type = - with types; - listOf (submodule { - options = { - modifiers = mkOption { - type = listOf str; - default = [ ]; - }; - key = mkOption { - type = nullOr str; - default = null; - }; - action = mkOption { - type = either str (submodule { - options = { - type = mkOption { - type = str; - }; - data = mkOption { - type = oneOf [ - str - int - ]; - default = ""; - }; - }; - }); - }; - }; - }); - }; - - otherSettings = - with lib; - mkOption { - default = { }; - type = - with types; - attrsOf (submodule { - options = { - version = mkOption { - type = str; - default = "1"; - }; - option = mkOption { - type = attrsOf anything; - }; - }; - }); - }; - }; - - # TODO we need to split between system_actions, workspaces, custom - config.xdg.configFile = - { - "cosmic/com.system76.CosmicSettings.Shortcuts/v1/custom".text = - mapBindings config.cosmic.keybindings; - "cosmic/com.system76.CosmicSettings.Shortcuts/v1/defaults" = { - text = "{}"; - enable = !config.cosmic.defaultKeybindings; - }; - } - // concatMapAttrs ( - application: options: mapCosmicSettings application options - ) config.cosmic.otherSettings; -} diff --git a/home/util/flatpak.nix b/home/util/flatpak.nix deleted file mode 100644 index 6125666..0000000 --- a/home/util/flatpak.nix +++ /dev/null @@ -1,61 +0,0 @@ -{ - config, - lib, - ... -}: -let - inherit (lib) mkOption; - inherit (builtins) typeOf listToAttrs; -in -{ - options.flatpaks = mkOption { - default = [ ]; - type = - with lib.types; - listOf ( - either str (submodule { - options = { - name = mkOption { - type = str; - }; - overrides = mkOption { - type = attrsOf (attrsOf (either str (listOf str))); - default = { }; - }; - }; - }) - ); - }; - config.services.flatpak = - let - userOverrides = listToAttrs ( - map ( - fp: - if (typeOf fp == "string") then - { - name = fp; - value = { }; - } - else - { - inherit (fp) name; - value = fp.overrides; - } - ) config.flatpaks - ); - in - { - enable = true; - uninstallUnmanaged = true; - update.auto.enable = true; - packages = map (fp: if (typeOf fp == "set") then fp.name else fp) config.flatpaks; - overrides = userOverrides // { - global = { - Context.sockets = [ "wayland" ]; - Environment = { - ELECTRON_OZONE_PLATFORM_HINT = "auto"; - }; - }; - }; - }; -} diff --git a/npins/default.nix b/npins/default.nix deleted file mode 100644 index 6592476..0000000 --- a/npins/default.nix +++ /dev/null @@ -1,146 +0,0 @@ -/* - This file is provided under the MIT licence: - - 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. -*/ -# Generated by npins. Do not modify; will be overwritten regularly -let - data = builtins.fromJSON (builtins.readFile ./sources.json); - version = data.version; - - # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/lists.nix#L295 - range = - first: last: if first > last then [ ] else builtins.genList (n: first + n) (last - first + 1); - - # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L257 - stringToCharacters = s: map (p: builtins.substring p 1 s) (range 0 (builtins.stringLength s - 1)); - - # https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L269 - stringAsChars = f: s: concatStrings (map f (stringToCharacters s)); - concatMapStrings = f: list: concatStrings (map f list); - concatStrings = builtins.concatStringsSep ""; - - # If the environment variable NPINS_OVERRIDE_${name} is set, then use - # the path directly as opposed to the fetched source. - # (Taken from Niv for compatibility) - mayOverride = - name: path: - let - envVarName = "NPINS_OVERRIDE_${saneName}"; - saneName = stringAsChars (c: if (builtins.match "[a-zA-Z0-9]" c) == null then "_" else c) name; - ersatz = builtins.getEnv envVarName; - in - if ersatz == "" then - path - else - # this turns the string into an actual Nix path (for both absolute and - # relative paths) - builtins.trace "Overriding path of \"${name}\" with \"${ersatz}\" due to set \"${envVarName}\"" ( - if builtins.substring 0 1 ersatz == "/" then - /. + ersatz - else - /. + builtins.getEnv "PWD" + "/${ersatz}" - ); - - mkSource = - name: spec: - assert spec ? type; - let - path = - if spec.type == "Git" then - mkGitSource spec - else if spec.type == "GitRelease" then - mkGitSource spec - else if spec.type == "PyPi" then - mkPyPiSource spec - else if spec.type == "Channel" then - mkChannelSource spec - else if spec.type == "Tarball" then - mkTarballSource spec - else - builtins.throw "Unknown source type ${spec.type}"; - in - spec // { outPath = mayOverride name path; }; - - mkGitSource = - { - repository, - revision, - url ? null, - submodules, - hash, - branch ? null, - ... - }: - assert repository ? type; - # At the moment, either it is a plain git repository (which has an url), or it is a GitHub/GitLab repository - # In the latter case, there we will always be an url to the tarball - if url != null && !submodules then - builtins.fetchTarball { - inherit url; - sha256 = hash; # FIXME: check nix version & use SRI hashes - } - else - let - url = - if repository.type == "Git" then - repository.url - else if repository.type == "GitHub" then - "https://github.com/${repository.owner}/${repository.repo}.git" - else if repository.type == "GitLab" then - "${repository.server}/${repository.repo_path}.git" - else - throw "Unrecognized repository type ${repository.type}"; - urlToName = - url: rev: - let - matched = builtins.match "^.*/([^/]*)(\\.git)?$" url; - - short = builtins.substring 0 7 rev; - - appendShort = if (builtins.match "[a-f0-9]*" rev) != null then "-${short}" else ""; - in - "${if matched == null then "source" else builtins.head matched}${appendShort}"; - name = urlToName url revision; - in - builtins.fetchGit { - rev = revision; - inherit name; - # hash = hash; - inherit url submodules; - }; - - mkPyPiSource = - { url, hash, ... }: - builtins.fetchurl { - inherit url; - sha256 = hash; - }; - - mkChannelSource = - { url, hash, ... }: - builtins.fetchTarball { - inherit url; - sha256 = hash; - }; - - mkTarballSource = - { - url, - locked_url ? url, - hash, - ... - }: - builtins.fetchTarball { - url = locked_url; - sha256 = hash; - }; -in -if version == 5 then - builtins.mapAttrs mkSource data.pins -else - throw "Unsupported format version ${toString version} in sources.json. Try running `npins upgrade`" diff --git a/npins/sources.json b/npins/sources.json deleted file mode 100644 index 3e162ee..0000000 --- a/npins/sources.json +++ /dev/null @@ -1,145 +0,0 @@ -{ - "pins": { - "culr": { - "type": "Git", - "repository": { - "type": "Git", - "url": "https://git.atagen.co/atagen/culr" - }, - "branch": "master", - "submodules": false, - "revision": "40feebba44d4722706b66ac51e1997cb630c09c9", - "url": null, - "hash": "16rjgm4hj8dgkrr2maq9mnkdarvj3vrzw4y018abn340nfyr9rlr" - }, - "helix": { - "type": "Git", - "repository": { - "type": "GitHub", - "owner": "helix-editor", - "repo": "helix" - }, - "branch": "master", - "submodules": false, - "revision": "7ebf65002940d0ce8d6e59c3ec22c736f7d57d9c", - "url": "https://github.com/helix-editor/helix/archive/7ebf65002940d0ce8d6e59c3ec22c736f7d57d9c.tar.gz", - "hash": "0x34kv59yl787qa6gfd3bvakb8n4j67wj02zp0pcljzl8b7gcm68" - }, - "hjem": { - "type": "Git", - "repository": { - "type": "GitHub", - "owner": "feel-co", - "repo": "hjem" - }, - "branch": "main", - "submodules": false, - "revision": "ae49a5a2e013c710d2b2cf046ae365d08eae75b3", - "url": "https://github.com/feel-co/hjem/archive/ae49a5a2e013c710d2b2cf046ae365d08eae75b3.tar.gz", - "hash": "1571dkq3ng9m9yip0fdzd4dqmckmjmpp7an7jp5kasqirhpd5w64" - }, - "home-manager": { - "type": "Git", - "repository": { - "type": "GitHub", - "owner": "nix-community", - "repo": "home-manager" - }, - "branch": "master", - "submodules": false, - "revision": "d094c6763c6ddb860580e7d3b4201f8f496a6836", - "url": "https://github.com/nix-community/home-manager/archive/d094c6763c6ddb860580e7d3b4201f8f496a6836.tar.gz", - "hash": "1d72lb88xq16sik4p8vjbmnj9w6p358rpzcwscrg0nyi2z1bf5sy" - }, - "ironbar": { - "type": "Git", - "repository": { - "type": "GitHub", - "owner": "JakeStanger", - "repo": "ironbar" - }, - "branch": "master", - "submodules": false, - "revision": "f2bc33ec26698f2aeb28d0c8e0c5605d5ffbcce1", - "url": "https://github.com/JakeStanger/ironbar/archive/f2bc33ec26698f2aeb28d0c8e0c5605d5ffbcce1.tar.gz", - "hash": "182gi303bdf887jfd38cfcnjdd5kf2917alz388wqmx7ck1wn2sf" - }, - "lix": { - "type": "Git", - "repository": { - "type": "Git", - "url": "https://git.lix.systems/lix-project/lix" - }, - "branch": "main", - "submodules": false, - "revision": "63d550938ba2a3690be987e884fe95e384708a82", - "url": null, - "hash": "1jnphmq9dxs26mk18q3b1flj6r29gwfiqjjxxaxp8qxa5m613ldg" - }, - "lix-module": { - "type": "Git", - "repository": { - "type": "Git", - "url": "https://git.lix.systems/lix-project/nixos-module" - }, - "branch": "main", - "submodules": false, - "revision": "fa69ae26cc32dda178117b46487c2165c0e08316", - "url": null, - "hash": "13x2dca4s049m8fa2y4b45kgqnpk3cf26j0j0yascah32zzxn7rh" - }, - "nix-vscode": { - "type": "Git", - "repository": { - "type": "GitHub", - "owner": "nix-community", - "repo": "nix-vscode-extensions" - }, - "branch": "master", - "submodules": false, - "revision": "da51d4cab526bef885e8c95ab2b9455bfe0940d4", - "url": "https://github.com/nix-community/nix-vscode-extensions/archive/da51d4cab526bef885e8c95ab2b9455bfe0940d4.tar.gz", - "hash": "01bb7jnrv53j7lpgdqm6cgsijl8cm5i8v0zx30hslvzmpihg0ybl" - }, - "nixos-cachyos-kernel": { - "type": "Git", - "repository": { - "type": "GitHub", - "owner": "drakon64", - "repo": "nixos-cachyos-kernel" - }, - "branch": "main", - "submodules": false, - "revision": "8516d89c4e0c4a25cea1be8431db3963359ee81b", - "url": "https://github.com/drakon64/nixos-cachyos-kernel/archive/8516d89c4e0c4a25cea1be8431db3963359ee81b.tar.gz", - "hash": "0ay9zqb4g7jx82pgcsnxy2nkyvk8y4xssska0afd7hxsimfnsl1s" - }, - "nixpkgs": { - "type": "Git", - "repository": { - "type": "GitHub", - "owner": "nixos", - "repo": "nixpkgs" - }, - "branch": "nixos-unstable", - "submodules": false, - "revision": "42a1c966be226125b48c384171c44c651c236c22", - "url": "https://github.com/nixos/nixpkgs/archive/42a1c966be226125b48c384171c44c651c236c22.tar.gz", - "hash": "082dpl311xlspwm5l3h2hf10ww6l59m7k2g2hdrqs4kwwsj9x6mf" - }, - "nixpkgs-stable": { - "type": "Git", - "repository": { - "type": "GitHub", - "owner": "nixos", - "repo": "nixpkgs" - }, - "branch": "release-24.11", - "submodules": false, - "revision": "e1cd802516a4515cceedfdedcbae9ea4df50a371", - "url": "https://github.com/nixos/nixpkgs/archive/e1cd802516a4515cceedfdedcbae9ea4df50a371.tar.gz", - "hash": "0yp82j423ibabnp71k2fpprfnmd6sr52vfknk689gygvyask8mx4" - } - }, - "version": 5 -} diff --git a/pin-nixpkgs.nix b/pin-nixpkgs.nix deleted file mode 100644 index 986a1a5..0000000 --- a/pin-nixpkgs.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ ... }: -let - sources = import ./npins; -in -{ - nixpkgs.flake.source = sources.nixpkgs; -} diff --git a/util/rice.nix b/rice/default.nix similarity index 77% rename from util/rice.nix rename to rice/default.nix index bf76578..9baaf24 100644 --- a/util/rice.nix +++ b/rice/default.nix @@ -1,17 +1,16 @@ { - nixpkgs, - nix-rice, + inputs, system, - ... + nix-rice, }: let - pkgs = nixpkgs.legacyPackages.${system}; + pkgs = inputs.nixpkgs.legacyPackages.${system}; inherit (nix-rice) kitty-themes; - inherit (nix-rice.palette) toRGBShortHex; + inherit (nix-rice.palette) toRGBShortHex toRGBHex; theme = kitty-themes.parseTheme ./pal.conf; in rec { - palette = { + palette = theme // { normal = { black = theme.color0; red = theme.color1; @@ -40,7 +39,9 @@ rec { inherit (theme) cursor; # url = theme.url_color; }; - } // theme; + hex = toRGBHex palette; + shortHex = toRGBShortHex palette; + }; fonts = let @@ -103,18 +104,22 @@ rec { borders = { thickness = 6; rounding = 0; - gaps_in = 16; + gaps_in = 32; gaps_out = 72; }; bg = { image = pkgs.callPackage ./wallpaper.nix { } { palette = toRGBShortHex palette; - wallpaper = builtins.path rec { - name = "wallpaper.jpg"; - path = ../${name}; - sha256 = "2db3f9d0397fbd4746ada297bd14c0c7d3e22c7d4e894968fcfece90bbfb902a"; - }; + wallpaper = + let + name = "wallpaper.jpg"; + in + builtins.path { + inherit name; + path = ./${name}; + sha256 = "2db3f9d0397fbd4746ada297bd14c0c7d3e22c7d4e894968fcfece90bbfb902a"; + }; }; }; @@ -126,15 +131,11 @@ rec { name = "Afterglow-Recolored-Dracula-Orange"; }; - plymouth = - let - theme = "spinner_alt"; - in - { - inherit theme; - font = "${fonts.sans.package}/share/fonts/truetype/InriaSans-Regular.ttf"; - themePackages = [ - (pkgs.adi1090x-plymouth-themes.override { selected_themes = [ theme ]; }) - ]; - }; + plymouth = { + theme = "starship"; + font = "${fonts.sans.package}/share/fonts/truetype/InriaSans-Regular.ttf"; + themePackages = [ + inputs.hudcore.packages.${pkgs.system}.default + ]; + }; } diff --git a/util/gtk-theme.nix b/rice/gtk-theme.nix similarity index 83% rename from util/gtk-theme.nix rename to rice/gtk-theme.nix index 8f2db86..9451810 100644 --- a/util/gtk-theme.nix +++ b/rice/gtk-theme.nix @@ -1,12 +1,6 @@ { pkgs }: { palette }: -let - rendersvg = pkgs.runCommand "rendersvg" { } '' - mkdir -p $out/bin - ln -s ${pkgs.resvg}/bin/resvg $out/bin/rendersvg - ''; -in -pkgs.stdenv.mkDerivation rec { +pkgs.stdenv.mkDerivation { name = "generated-gtk-theme-nix-rice"; src = pkgs.fetchFromGitHub { owner = "nana-4"; @@ -14,17 +8,21 @@ pkgs.stdenv.mkDerivation rec { rev = "d7f59a37ef51f893c28b55dc344146e04b2cd52c"; sha256 = "sha256-PnpFAmKEpfg3wBwShLYviZybWQQltcw7fpsQkTUZtww="; }; - buildInputs = with pkgs; [ - sassc - bc - which - rendersvg - meson - ninja - nodePackages.sass - gtk4.dev - optipng - ]; + buildInputs = builtins.attrValues { + inherit (pkgs) + sassc + bc + which + rendersvg + meson + optipng + ninja + ; + inherit (pkgs.nodePackages) + sass + ; + inherit (pkgs.gtk4) dev; + }; phases = [ "unpackPhase" "installPhase" diff --git a/header.sh b/rice/header.sh similarity index 100% rename from header.sh rename to rice/header.sh diff --git a/wallpaper.jpg b/rice/wallpaper.jpg similarity index 100% rename from wallpaper.jpg rename to rice/wallpaper.jpg diff --git a/util/wallpaper.nix b/rice/wallpaper.nix similarity index 72% rename from util/wallpaper.nix rename to rice/wallpaper.nix index 4061a98..905edbe 100644 --- a/util/wallpaper.nix +++ b/rice/wallpaper.nix @@ -1,10 +1,15 @@ -{ pkgs, lib }: +{ + pkgs, + lib, + stdenv, + ... +}: { palette, wallpaper, }: let - str_pal = + strPal = let inherit (lib) concatStringsSep; inherit (builtins) foldl' attrValues; @@ -13,7 +18,7 @@ let foldl' (acc: el: acc ++ (attrValues el)) [ ] [ palette.normal palette.bright palette.util ] ); in -pkgs.stdenv.mkDerivation { +stdenv.mkDerivation { name = "generated-wallpaper.png"; src = wallpaper; buildInputs = [ @@ -23,7 +28,7 @@ pkgs.stdenv.mkDerivation { phases = [ "installPhase" ]; installPhase = '' - echo -e "Generating wallpaper from ${wallpaper} using palette:\n${str_pal}.." - ${pkgs.lib.getExe pkgs.lutgen} apply --lum 0.8 -l 10 -s 128 -n 8 -o $out ${wallpaper} -- ${str_pal} + echo -e "Generating wallpaper from ${wallpaper} using palette:\n${strPal}.." + ${lib.getExe pkgs.lutgen} apply --lum 0.8 -l 10 -s 128 -n 8 -o $out ${wallpaper} -- ${strPal} ''; } diff --git a/sources.nix b/sources.nix deleted file mode 100644 index e69de29..0000000 diff --git a/system/adrift.nix b/system/adrift.nix index bd20d85..ef09b22 100644 --- a/system/adrift.nix +++ b/system/adrift.nix @@ -58,7 +58,7 @@ services.power-profiles-daemon.enable = false; services.tlp.enable = true; - environment.sessionVariables = rec { + environment.sessionVariables = { NIXOS_OZONE_WL = "1"; ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE = "fg=5"; EDITOR = "hx"; @@ -77,16 +77,18 @@ xdg.portal = { enable = true; - extraPortals = with pkgs; [ - xdg-desktop-portal-gtk + extraPortals = [ + pkgs.xdg-desktop-portal-gtk ]; }; - environment.systemPackages = with pkgs; [ - wl-clipboard - wl-clipboard-x11 - xclip - ]; + environment.systemPackages = builtins.attrValues { + inherit (pkgs) + wl-clipboard + wl-clipboard-x11 + xclip + ; + }; networking.hostName = "adrift"; # Define your hostname. users.users.plank = { diff --git a/system/cachix/nix-community.nix b/system/cachix/nix-community.nix deleted file mode 100644 index 28de7e4..0000000 --- a/system/cachix/nix-community.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ - nix = { - settings = { - substituters = [ - "https://nix-community.cachix.org" - ]; - trusted-public-keys = [ - "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" - ]; - }; - }; -} diff --git a/system/configuration.nix b/system/configuration.nix index a33a8c1..995e304 100644 --- a/system/configuration.nix +++ b/system/configuration.nix @@ -5,49 +5,12 @@ mainUser, ... }: -let - getFlakePackage = package: inputs."${package}".packages.x86_64-linux.default; -in { - # these settings propagate to home-manager's nixpkgs - nixpkgs = { - overlays = [ - # inputs.nix-rice.overlays.default - inputs.helix.overlays.default - inputs.nil.overlays.nil - inputs.niri.overlays.niri - ]; - config = { - allowUnfree = true; - allowUnfreePredicate = _: true; - cudaSupport = true; - }; - }; - - nix = { - # add flake inputs to our registry to allow global use - registry = lib.mapAttrs (_: value: { flake = value; }) inputs; - settings = { - # trusted-users = ["bolt" "plank"]; - experimental-features = [ - "nix-command" - "flakes" - "pipe-operator" - ]; - substitute = true; - }; - extraOptions = '' - keep-outputs = true - keep-derivations = true - ''; - optimise.automatic = true; - # package = pkgs.lix; - }; imports = [ ./modules/network.nix ./modules/term.nix - ./modules/systemdboot.nix + ./modules/limine.nix ./modules/sound.nix ./modules/sydney.nix ./modules/docs.nix @@ -57,11 +20,6 @@ in ./modules/culr.nix ]; - programs.meat = { - enable = true; - flake = "/home/${mainUser}/.nix"; - }; - hardware.enableRedistributableFirmware = true; hardware.enableAllFirmware = true; @@ -102,20 +60,12 @@ in # services.tailscale.enable = true; # TODO - move these to more appropriate places - environment.systemPackages = with pkgs; [ - curl - eza - git - jujutsu - ]; - - # services.atuin.enable = true; - - programs.nh = { - enable = true; - clean.enable = true; - clean.extraArgs = "--keep-since 3d --keep 3"; - package = getFlakePackage "nh"; + environment.systemPackages = builtins.attrValues { + inherit (pkgs) + curl + eza + git + ; }; programs.nix-index-database.comma.enable = true; @@ -131,5 +81,5 @@ in systemd.user.extraConfig = "LogLevel=debug"; - system.nixos.tags = [ "fatcock" ]; + system.nixos.tags = [ "fatcock-xxl" ]; } diff --git a/system/modules/cosmic.nix b/system/modules/cosmic.nix deleted file mode 100644 index d5085b3..0000000 --- a/system/modules/cosmic.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ pkgs, ... }: -{ - services.desktopManager.cosmic = { - enable = true; - }; - environment.cosmic.excludePackages = with pkgs; [ - cosmic-store - cosmic-edit - cosmic-term - ]; - services.displayManager.cosmic-greeter.enable = true; - services.system76-scheduler.enable = true; -} diff --git a/system/modules/docs.nix b/system/modules/docs.nix index a37b481..66e6dff 100644 --- a/system/modules/docs.nix +++ b/system/modules/docs.nix @@ -1,9 +1,11 @@ { pkgs, ... }: { - environment.systemPackages = with pkgs; [ - man-pages - man-pages-posix - ]; + environment.systemPackages = { + inherit (pkgs) + man-pages + man-pages-posix + ; + }; documentation.dev.enable = true; documentation.man.enable = true; diff --git a/system/modules/limine.nix b/system/modules/limine.nix new file mode 100644 index 0000000..51d4099 --- /dev/null +++ b/system/modules/limine.nix @@ -0,0 +1,42 @@ +{ + lib, + rice, + ... +}: +{ + boot.loader.limine = { + enable = true; + style = + let + pal = rice.palette.shortHex; + in + { + wallpapers = [ ../../wallpaper.jpg ]; + interface = { + brandingColor = 1; + branding = "welcome to quiver"; + }; + graphicalTerminal = + let + getPal = p: builtins.attrValues p |> builtins.concatStringsSep ";"; + in + { + palette = getPal pal.normal; + brightPalette = getPal pal.bright; + marginGradient = 0; + margin = 256; + foreground = pal.util.fg; + background = "20" + pal.util.bg; + brightForeground = pal.bright.yellow; + brightBackground = pal.util.bg; + }; + backdrop = pal.util.bg; + }; + maxGenerations = 5; + extraEntries = '' + /Windows + protocol: efi + path: boot():/EFI/Microsoft/Boot/bootmgfw.efi + ''; + }; +} diff --git a/system/modules/niri.nix b/system/modules/niri.nix index 71c63d0..9b2e607 100644 --- a/system/modules/niri.nix +++ b/system/modules/niri.nix @@ -1,6 +1,6 @@ { - pkgs, mainUser, + inputs, ... }: { @@ -21,6 +21,13 @@ }; programs.niri = { enable = true; - package = pkgs.niri-unstable; + package = inputs.niri.packages.x86_64-linux.niri-unstable; + }; + services.niri-session-manager = { + enable = true; + # settings = { + # save-interval = 5; + # max-backup-count = 12; + # }; }; } diff --git a/system/modules/nix-meta.nix b/system/modules/nix-meta.nix index 88d4227..d7a810b 100644 --- a/system/modules/nix-meta.nix +++ b/system/modules/nix-meta.nix @@ -1,12 +1,63 @@ -{ pkgs, ... }: { - environment.systemPackages = with pkgs; [ - home-manager - cachix - nixfmt-rfc-style - nil - statix - deadnix - npins - ]; + pkgs, + lib, + inputs, + mainUser, + ... +}: +{ + # these settings propagate to home-manager's nixpkgs + nixpkgs = { + config = { + allowUnfree = true; + allowUnfreePredicate = _: true; + cudaSupport = true; + }; + }; + + nix = { + # add flake inputs to our registry to allow global use + registry = lib.mapAttrs (_: value: { flake = value; }) inputs; + settings = { + # trusted-users = ["bolt" "plank"]; + experimental-features = [ + "nix-command" + "flakes" + "pipe-operator" + ]; + substitute = true; + }; + extraOptions = '' + keep-outputs = true + keep-derivations = true + ''; + optimise.automatic = true; + # package = pkgs.lix; + }; + + # services.smooooth = { + # enable = true; + # path = "/home/${mainUser}/.nix"; + # blockers = [ + # "hx" + # { + # nix = "die"; + # } + # ]; + # nixPackage = pkgs.lix; + # }; + + programs.meat = { + enable = true; + flake = "/home/${mainUser}/.nix"; + }; + + environment.systemPackages = builtins.attrValues { + inherit (pkgs) + home-manager + cachix + nixfmt-rfc-style + ; + inherit (inputs.nil.packages.${pkgs.system}) nil; + }; } diff --git a/system/modules/term.nix b/system/modules/term.nix index 2367895..a2193e8 100644 --- a/system/modules/term.nix +++ b/system/modules/term.nix @@ -1,12 +1,15 @@ { pkgs, ... }: let - inherit (pkgs) fish elvish; + inherit (pkgs) fish; in { programs.fish = { enable = true; }; - programs.autojump.enable = true; + programs.zoxide = { + enable = true; + enableFishIntegration = true; + }; environment.systemPackages = [ fish ]; diff --git a/system/quiver.nix b/system/quiver.nix index 3c46971..de524cc 100644 --- a/system/quiver.nix +++ b/system/quiver.nix @@ -51,8 +51,11 @@ "vt.global_cursor_default=0" ]; - boot.kernelPackages = pkgs.linuxPackagesFor pkgs.linuxPackages_cachyos; - # pkgs.linuxPackages_xanmod_latest; + services.scx = { + enable = true; + scheduler = "scx_bpfland"; + }; + boot.kernelPackages = pkgs.linuxPackages_cachyos; boot.supportedFilesystems = { ntfs = true; btrfs = true; @@ -61,10 +64,10 @@ boot.loader.systemd-boot.configurationLimit = 5; boot.loader.efi.canTouchEfiVariables = true; - boot.plymouth = { - enable = true; - inherit (rice.plymouth) theme themePackages font; - }; + # boot.plymouth = { + # enable = true; + # inherit (rice.plymouth) theme themePackages font; + # }; security.tpm2.enable = true; @@ -90,10 +93,6 @@ nix.settings.trusted-users = [ "bolt" ]; - virtualisation.lxc = { - unprivilegedContainers = true; - enable = true; - }; virtualisation.oci-containers.backend = "podman"; hardware.nvidia-container-toolkit.enable = true; virtualisation = { @@ -130,14 +129,22 @@ # motherboard = "amd"; # }; - # hardware.ckb-next.enable = true; - environment.systemPackages = builtins.attrValues { - inherit (pkgs) - wl-clipboard - wl-clipboard-x11 - xclip - ; - }; + hardware.ckb-next.enable = true; + environment.systemPackages = + builtins.attrValues { + inherit (pkgs) + wl-clipboard + wl-clipboard-x11 + xclip + ; + inherit (pkgs.kdePackages) qtbase qtdeclarative; + } + ++ [ + (inputs.quickshell.packages.${pkgs.system}.default.override { + withHyprland = false; + withI3 = false; + }) + ]; programs.fuse.userAllowOther = true; services.libinput.mouse = { accelProfile = "flat"; @@ -189,4 +196,7 @@ DATABASE_URL = "sqlite:///${config.services.open-webui.stateDir}/newdb.db"; }; }; + + # for quickshell + qt.enable = true; } diff --git a/system/cachix.nix b/system/substituters.nix similarity index 57% rename from system/cachix.nix rename to system/substituters.nix index 871b872..2703699 100644 --- a/system/cachix.nix +++ b/system/substituters.nix @@ -7,23 +7,15 @@ "https://cache.nixos.org" "https://nix-community.cachix.org" "https://helix.cachix.org" - "https://cuda-maintainers.cachix.org" - "https://cache.garnix.io" "https://walker-git.cachix.org" "https://anmonteiro.nix-cache.workers.dev" - "https://viperml.cachix.org" - "https://drakon64-nixos-cachyos-kernel.cachix.org" ]; trusted-public-keys = [ "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" "helix.cachix.org-1:ejp9KQpR1FBI2onstMQ34yogDm4OgU2ru6lIwPvuCVs=" - "cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E=" - "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=" "walker-git.cachix.org-1:vmC0ocfPWh0S/vRAQGtChuiZBTAe4wiKDeyyXM0/7pM=" "ocaml.nix-cache.com-1:/xI2h2+56rwFfKyyFVbkJSeGqSIYMC/Je+7XXqGKDIY=" - "viperml.cachix.org-1:qZhKBMTfmcLL+OG6fj/hzsMEedgKvZVFRRAhq7j8Vh8=" - "drakon64-nixos-cachyos-kernel.cachix.org-1:J3gjZ9N6S05pyLA/P0M5y7jXpSxO/i0rshrieQJi5D0=" ]; }; } diff --git a/util/get-modules.nix b/util/get-modules.nix new file mode 100644 index 0000000..0d67f22 --- /dev/null +++ b/util/get-modules.nix @@ -0,0 +1,7 @@ +{ inputs }: +let + inherit (inputs.nixpkgs) lib; +in +l: +lib.filterAttrs (_: v: builtins.elem v l) inputs +|> lib.mapAttrsToList (n: v: v.nixosModules.${n} or v.nixosModules.default) diff --git a/util/overlay.nix b/util/overlay.nix deleted file mode 100644 index 0d10306..0000000 --- a/util/overlay.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - inputs, - ... -}: -{ - rice = import ./rice.nix; - inherit (inputs.comfyui.overlays) comfyui; - inherit (inputs.comfyui-plugins.overlays) comfyui-plugins; -}