diff --git a/TODO.md b/TODO.md deleted file mode 100644 index f3d4b07..0000000 --- a/TODO.md +++ /dev/null @@ -1,21 +0,0 @@ -## Todo - -This is a list of all the things I still have to fix/achive in this -configuration: - -- [ ] Fix apparmor -- [ ] Lanzaboote -- [ ] Remove all `with` -- [ ] better documentation -- [ ] Fix greetd -- [ ] ClamAV -- [ ] -- [ ] -- [ ] -- [ ] -- [ ] -- [ ] -- [ ] -- [ ] -- [ ] -- [ ] diff --git a/flake.lock b/flake.lock index 749aafc..51def11 100644 --- a/flake.lock +++ b/flake.lock @@ -311,10 +311,10 @@ "nixpkgs_2": { "locked": { "lastModified": 315532800, - "narHash": "sha256-X5WIcIkFxPhw7mS219TbEOgrugbMx/2cin09OlWobT8=", - "rev": "dab3a6e781554f965bde3def0aa2fda4eb8f1708", + "narHash": "sha256-aW0rd3E6pilfWXcNrMwbA4ehW3BZJ0oep4LQbUgOrgg=", + "rev": "fa0ef8a6bb1651aa26c939aeb51b5f499e86b0ec", "type": "tarball", - "url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre830668.dab3a6e78155/nixexprs.tar.xz" + "url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre831232.fa0ef8a6bb16/nixexprs.tar.xz" }, "original": { "type": "tarball", @@ -354,11 +354,11 @@ ] }, "locked": { - "lastModified": 1752701746, - "narHash": "sha256-OVqrNbAzMaVOBxdoLqbZyn0vOq9/XwcWVPVKJbHwz5Q=", + "lastModified": 1752837946, + "narHash": "sha256-oLkH/Mr0cfrjD6WRf6GqJV6sizX0ZgYqD6gFdziyKVo=", "ref": "refs/heads/master", - "rev": "986749cdb9ca9078b66297d60bbf21d48e33a6cf", - "revCount": 639, + "rev": "e55d519c280192d8d97695b6c5905a0d7a46f8fe", + "revCount": 647, "type": "git", "url": "https://git.outfoxxed.me/outfoxxed/quickshell" }, @@ -374,7 +374,6 @@ "lanzaboote": "lanzaboote", "nixpkgs": "nixpkgs_2", "quickshell": "quickshell", - "rust-overlay": "rust-overlay_2", "systems": "systems", "watt": "watt" } @@ -400,26 +399,6 @@ "type": "github" } }, - "rust-overlay_2": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1752633862, - "narHash": "sha256-Bj7ozT1+5P7NmvDcuAXJvj56txcXuAhk3Vd9FdWFQzk=", - "owner": "oxalica", - "repo": "rust-overlay", - "rev": "8668ca94858206ac3db0860a9dec471de0d995f8", - "type": "github" - }, - "original": { - "owner": "oxalica", - "repo": "rust-overlay", - "type": "github" - } - }, "systems": { "locked": { "lastModified": 1689347949, diff --git a/flake.nix b/flake.nix index 2962416..2edf56f 100644 --- a/flake.nix +++ b/flake.nix @@ -67,12 +67,6 @@ inputs.nixpkgs.follows = "nixpkgs"; }; - # The things rust is making me do... - rust-overlay = { - url = "github:oxalica/rust-overlay"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - # DetNix is doing too well these days not to use it. determinate = { url = "github:determinatesystems/determinate"; diff --git a/hosts/common.nix b/hosts/common.nix index b94adb7..4042f4f 100644 --- a/hosts/common.nix +++ b/hosts/common.nix @@ -32,7 +32,6 @@ in { microfetch mprocs nmap - polkit ripgrep smartmontools television diff --git a/hosts/hermit/configuration.nix b/hosts/hermit/configuration.nix index fa00c43..bb970bf 100644 --- a/hosts/hermit/configuration.nix +++ b/hosts/hermit/configuration.nix @@ -8,7 +8,6 @@ # Select internationalisation properties. i18n.defaultLocale = "en_US.UTF-8"; console.keyMap = "uk"; - security.polkit.enable = true; boot.kernelPackages = pkgs.linuxPackages_xanmod_latest; services = { fstrim.enable = lib.mkDefault true; diff --git a/hosts/hermit/programs.nix b/hosts/hermit/programs.nix index cdad6db..b8f4afc 100644 --- a/hosts/hermit/programs.nix +++ b/hosts/hermit/programs.nix @@ -1,17 +1,17 @@ {pkgs, ...}: let # a newer nil version, for pipes support. - newer-nil = pkgs.nil.overrideAttrs (_: { - version = "unstable-02-06-2025"; + new-nil = pkgs.nil.overrideAttrs (_: { + version = "unstable-18-07-2025"; src = pkgs.fetchFromGitHub { owner = "oxalica"; repo = "nil"; - rev = "577d160da311cc7f5042038456a0713e9863d09e"; - hash = "sha256-ggXU3RHv6NgWw+vc+HO4/9n0GPufhTIUjVuLci8Za8c="; + rev = "524ae2d67dd84d99a10f409ed6cd8e4e7b3cae3f"; + hash = "sha256-Uy2qzd+fMoBcp4NPSO7DavEC1pGMegmAqoEMvmXbIQU="; }; cargoDeps = pkgs.rustPlatform.fetchCargoVendor { - inherit (newer-nil) src; - hash = "sha256-uZsLlFU9GKLvFllF7Kf5Q7HfN26KQojf4rvOb9p7Rjs="; + inherit (new-nil) src; + hash = "sha256-Sljr3ff8hl/qm/0wqc1GXsEr1wWn7NAXmdrd5wHzUX8="; }; }); in { @@ -74,7 +74,6 @@ in { pdfpc pfetch playerctl - polkit presenterm pulsemixer ripgrep @@ -95,6 +94,6 @@ in { xournalpp zathura ; - inherit newer-nil; + inherit new-nil; }; } diff --git a/hosts/temperance/configuration.nix b/hosts/temperance/configuration.nix index 2e74e8a..18d06af 100644 --- a/hosts/temperance/configuration.nix +++ b/hosts/temperance/configuration.nix @@ -9,7 +9,6 @@ # Select internationalisation properties. i18n.defaultLocale = "en_US.UTF-8"; console.keyMap = "us"; - security.polkit.enable = true; # boot.kernelPackages = pkgs.linuxPackagesFor xanmod_blox; boot.kernelPackages = pkgs.linuxPackages_latest; @@ -20,15 +19,14 @@ system76-scheduler = { enable = true; }; - gnome.gnome-keyring.enable = true; }; - security.pam.services.login.enableGnomeKeyring = true; - environment.systemPackages = [pkgs.seahorse]; + meta = { mainUser.gitSigningKey = ""; }; modules = { system = { + isGraphical = true; impermanence.enable = true; boot = { systemd-boot.enable = true; diff --git a/hosts/temperance/programs.nix b/hosts/temperance/programs.nix index 2ba5492..ec30448 100644 --- a/hosts/temperance/programs.nix +++ b/hosts/temperance/programs.nix @@ -6,8 +6,6 @@ anki asciinema beets - bitwarden-cli - bitwarden-desktop bubblewrap cachix calc @@ -31,9 +29,9 @@ impala imv inetutils + inshellisense joplin-desktop jujutsu - julia just keepassxc lazygit @@ -50,7 +48,6 @@ pavucontrol pdfarranger picard - polkit pulsemixer python3 pwvucontrol @@ -64,7 +61,6 @@ spotify starship telegram-desktop - texliveFull thunderbird topiary tor-browser @@ -73,7 +69,6 @@ typst vesktop vivid - walker wayneko wireguard-tools xdg-utils @@ -82,17 +77,13 @@ zathura zotero zoxide - # coreutils-full # All of the GNU coreutils - curl # I sometimes need to curl stuff - git # take a guess + curl + git wget - unzip # zipping and unzipping stuff + unzip zip util-linux - ; - inherit - (pkgs.wineWowPackages) - waylandFull + zed-editor ; }; } diff --git a/hosts/tower/configuration.nix b/hosts/tower/configuration.nix index 411ac2f..83209ba 100644 --- a/hosts/tower/configuration.nix +++ b/hosts/tower/configuration.nix @@ -8,7 +8,6 @@ # Select internationalisation properties. i18n.defaultLocale = "en_US.UTF-8"; console.keyMap = "uk"; - security.polkit.enable = true; boot.kernelPackages = pkgs.linuxPackages_latest; programs.nix-ld.enable = true; diff --git a/hosts/world/configuration.nix b/hosts/world/configuration.nix index a90fc5d..2d02091 100644 --- a/hosts/world/configuration.nix +++ b/hosts/world/configuration.nix @@ -8,7 +8,6 @@ # Select internationalisation properties. i18n.defaultLocale = "en_US.UTF-8"; console.keyMap = "uk"; - security.polkit.enable = true; programs.nix-ld.enable = false; boot.kernelPackages = pkgs.linuxPackages_xanmod_latest; services = { diff --git a/hosts/world/programs.nix b/hosts/world/programs.nix index 1400402..4f29a7b 100644 --- a/hosts/world/programs.nix +++ b/hosts/world/programs.nix @@ -32,7 +32,6 @@ microfetch nmap pfetch - polkit ripgrep smartmontools util-linux diff --git a/modules/options/system/options.mod.nix b/modules/options/system/options.mod.nix index cd77ba7..4d308f4 100644 --- a/modules/options/system/options.mod.nix +++ b/modules/options/system/options.mod.nix @@ -11,16 +11,6 @@ inherit (config.modules.system) systemType; in { options.modules.system = { - mainUser = mkOption { - type = enum config.modules.system.users; - default = elemAt config.modules.system.users 0; - description = '' - The username of the main user for your system. - - In case of a multiple systems, this will be the user with priority in ordered lists and enabled options. - ''; - }; - users = mkOption { type = listOf str; default = ["cr"]; diff --git a/modules/programs/gui/bitwarden.mod.nix b/modules/programs/gui/bitwarden.mod.nix new file mode 100644 index 0000000..d5ebfd7 --- /dev/null +++ b/modules/programs/gui/bitwarden.mod.nix @@ -0,0 +1,34 @@ +{ + config, + lib, + pkgs, + ... +}: let + inherit (config.modules.system) isGraphical; + inherit (lib.modules) mkIf; + + bitwarden-desktop-wrapped = pkgs.symlinkJoin { + name = "bitwarden-desktop-wrapped"; + paths = [pkgs.bitwarden-desktop]; + nativeBuildInputs = [pkgs.makeWrapper]; + postBuild = '' + wrapProgram $out/bin/bitwarden --set \ + BITWARDEN_SSH_AUTH_SOCK /run/user/1000/ssh-agent.sock + ''; + }; +in { + config = mkIf isGraphical { + environment = { + systemPackages = lib.attrValues { + inherit + (pkgs) + bitwarden-cli + ; + inherit bitwarden-desktop-wrapped; + }; + # Set the ssh socket globally. This alows all applications and shells to use + # the ssh-agent. + sessionVariables."SSH_AUTH_SOCK" = "/run/user/1000/ssh-agent.sock"; + }; + }; +} diff --git a/modules/programs/gui/brave.mod.nix b/modules/programs/gui/brave.mod.nix index 3e6592d..8ded1dd 100644 --- a/modules/programs/gui/brave.mod.nix +++ b/modules/programs/gui/brave.mod.nix @@ -9,15 +9,13 @@ # https://peter.sh/experiments/chromium-command-line-switches/ flags = concatStringsSep " " [ "--no-first-run" - "--use-vulkan" - "--enable-features=Vulkan,UseOzonePlatform" + "--enable-features=UseOzonePlatform" "--enable-gpu-rasterization" "--force-dark-mode" "--enable-smooth-scrolling" "--enable-features=UseOzonePlatform" "--ozone-platform=wayland" "--user-agent='Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.3'" - "--use-angle=vulkan" ]; brave-wrapped = pkgs.symlinkJoin { name = "brave"; @@ -216,6 +214,8 @@ in { "mnjggcdmjocbbbhaepdhchncahnbgone" # Decentraleyes "ldpochfccmkkmhdbclfhpagapcfdljkj" + # Humble new tab page + "mfgdmpfihlmdekaclngibpjhdebndhdj" ]; }; diff --git a/modules/programs/gui/dolphin.mod.nix b/modules/programs/gui/dolphin.mod.nix new file mode 100644 index 0000000..6f13d56 --- /dev/null +++ b/modules/programs/gui/dolphin.mod.nix @@ -0,0 +1,17 @@ +{ + config, + lib, + pkgs, + ... +}: let + inherit (lib.modules) mkIf; + inherit (config.modules.system) isGraphical; +in { + config = mkIf isGraphical { + environment.systemPackages = with pkgs; [ + kdePackages.dolphin + kdePackages.kio-fuse #to mount remote filesystems via FUSE + kdePackages.kio-extras #extra protocols support (sftp, fish and more) + ]; + }; +} diff --git a/modules/programs/gui/ghostty.mod.nix b/modules/programs/gui/ghostty.mod.nix index 19e702b..f588902 100644 --- a/modules/programs/gui/ghostty.mod.nix +++ b/modules/programs/gui/ghostty.mod.nix @@ -26,7 +26,7 @@ # font-style-bold-italic = JetBrainsMono NF Italic; app-notifications = "no-clipboard-copy"; - background-opacity = 0.75; + background-opacity = 0.9; bold-is-bright = "true"; confirm-close-surface = "false"; cursor-style-blink = "false"; diff --git a/modules/programs/tui/btop.mod.nix b/modules/programs/tui/btop.mod.nix index 886b43f..802080e 100644 --- a/modules/programs/tui/btop.mod.nix +++ b/modules/programs/tui/btop.mod.nix @@ -24,9 +24,16 @@ log_level = "ERROR" ''; + btop-no-desktop-entry = pkgs.btop.overrideAttrs (prev: { + postInstall = '' + ${prev.postInstall or ""} + rm -rf $out/share/applications/*.desktop + ''; + }); + btop-wrapped = pkgs.symlinkJoin { name = "btop-wrapped"; - paths = [pkgs.btop]; + paths = [btop-no-desktop-entry]; nativeBuildInputs = [pkgs.makeWrapper]; postBuild = '' wrapProgram $out/bin/btop --set XDG_CONFIG_HOME "${btop-settings}" diff --git a/modules/services/spotifyd.mod.nix b/modules/services/spotifyd.mod.nix index 396582f..65a1906 100644 --- a/modules/services/spotifyd.mod.nix +++ b/modules/services/spotifyd.mod.nix @@ -10,8 +10,7 @@ in { services.spotifyd = mkIf isGraphical { enable = true; settings = { - }; - config = { + backend = "pipe"; }; }; } diff --git a/modules/services/ssh.mod.nix b/modules/services/ssh.mod.nix index 248d54b..6fc4a76 100644 --- a/modules/services/ssh.mod.nix +++ b/modules/services/ssh.mod.nix @@ -3,11 +3,6 @@ in { options.modules.programs.ssh.enable = mkEnableOption "ssh"; config = { - # set the ssh socket globally. This alows all applications and shells to use - # the ssh-agent. - environment.sessionVariables.SSH_AUTH_SOCK = "/run/user/1000/ssh-agent"; - programs.ssh.startAgent = true; - services.openssh = { enable = true; ports = [22]; diff --git a/modules/style/gtk.mod.nix b/modules/style/gtk.mod.nix index c1b5983..82a0aab 100644 --- a/modules/style/gtk.mod.nix +++ b/modules/style/gtk.mod.nix @@ -82,9 +82,6 @@ in { GTK_THEME = cfg.theme.name; XCURSOR_THEME = "BreezeX-RosePine-Linux"; XCURSOR_SIZE = cursorSize; - - HYPRCURSOR_THEME = "BreezeX-RosePine-Linux"; - HYPRCURSOR_SIZE = cursorSize; }; etc = let css = import ./gtk-colors.nix {inherit (config.modules.style.colorScheme) colors;}; diff --git a/modules/style/qt.mod.nix b/modules/style/qt.mod.nix index 77413e4..316c8cf 100644 --- a/modules/style/qt.mod.nix +++ b/modules/style/qt.mod.nix @@ -34,7 +34,10 @@ in { }; }; - config = - mkIf cfg.enable { + config = mkIf cfg.enable { + qt = { + enable = true; + platformTheme = "qt5ct"; }; + }; } diff --git a/modules/style/quickshell/quickshell.mod.nix b/modules/style/quickshell/quickshell.mod.nix index 3c41f20..275bbfb 100644 --- a/modules/style/quickshell/quickshell.mod.nix +++ b/modules/style/quickshell/quickshell.mod.nix @@ -19,6 +19,11 @@ in { qt6.qt5compat qt6.qtmultimedia qt6.qtdeclarative + qt6.qtsvg + qt6.qtwayland + qt6.qtbase + kdePackages.breeze + kdePackages.breeze-icons ]; # taken from outfoxxed. diff --git a/modules/style/quickshell/shell/AudioPopup.qml b/modules/style/quickshell/shell/AudioPopup.qml index b8e27ee..383a9ef 100644 --- a/modules/style/quickshell/shell/AudioPopup.qml +++ b/modules/style/quickshell/shell/AudioPopup.qml @@ -1,103 +1,105 @@ -pragma Singleton pragma ComponentBehavior: Bound +pragma Singleton import QtQuick import Quickshell import QtQuick.Layouts -import Quickshell.Wayland import Quickshell.Services.Pipewire +import Quickshell.Wayland + +import qs.config Singleton { - id: audioPopup - property bool popupOpen: true + id: root - property var volume: sink.ready ? audioPopup.sink.audio.volume : 0 + property real volume: Pipewire.defaultAudioSink?.audio?.volume ?? 0 + property real popupOpacity: 0 - property var visible: volume - - property PwNode sink: Pipewire.defaultAudioSink - - // bind the node so we can read its properties PwObjectTracker { - objects: [audioPopup.sink] + objects: [Pipewire.defaultAudioSink] } - Timer { - id: timer - interval: 3000 - running: false - repeat: false - - onTriggered: audioPopup.visible = false + onVolumeChanged: { + root.popupOpacity = 1; + loader.activeAsync = true; + timer.restart(); + timer_opacity.restart(); } LazyLoader { id: loader - activeAsync: audioPopup.popupOpen + activeAsync: false PanelWindow { id: popup - width: 400 - height: 30 visible: true - - // Give the window an empty click mask so all clicks pass through it. + implicitWidth: rect.implicitWidth + implicitHeight: 50 + color: "transparent" mask: Region {} - - // Use the wlroots specific layer property to ensure it displays over - // fullscreen windows. + exclusionMode: ExclusionMode.Ignore WlrLayershell.layer: WlrLayer.Overlay - color: "transparent" - - anchors { - bottom: true - } - - margins { - bottom: 250 - } + anchors.bottom: true + margins.bottom: 100 Rectangle { id: rect Layout.fillWidth: true - anchors.verticalCenter: parent.verticalCenter - color: "white" - height: parent.height - width: parent.width + anchors.fill: parent + color: Colors.surface0 + implicitWidth: 300 + implicitHeight: parent.implicitHeight radius: 5 - opacity: 0 + opacity: root.popupOpacity - anchors { - left: parent.left - } - - Behavior on width { + Behavior on opacity { NumberAnimation { - duration: 200 + duration: 500 easing.type: Easing.OutCubic } } Rectangle { - color: "black" - height: 20 - radius: height / 2 + id: bar + color: Colors.blue + implicitWidth: rect.implicitWidth * root.volume - 20 + implicitHeight: 30 + topRightRadius: 5 + bottomRightRadius: 5 anchors { left: parent.left + verticalCenter: parent.verticalCenter } - topLeftRadius: 0 - bottomLeftRadius: 0 - - anchors.verticalCenter: parent.verticalCenter - width: parent.width * audioPopup.sink.audio.volume + Behavior on implicitWidth { + NumberAnimation { + duration: 300 + easing.type: Easing.OutCubic + } + } } } } } + Timer { + id: timer + interval: 2000 + running: false + onTriggered: loader.activeAsync = false + } + + Timer { + id: timer_opacity + interval: 1500 + running: false + onTriggered: { + root.popupOpacity = 0; + } + } + function init() { } } diff --git a/modules/style/quickshell/shell/Launcher.qml b/modules/style/quickshell/shell/Launcher.qml index f434f81..0cfebfb 100644 --- a/modules/style/quickshell/shell/Launcher.qml +++ b/modules/style/quickshell/shell/Launcher.qml @@ -49,9 +49,9 @@ Singleton { } } width: 450 - color: Config.catppuccin.base + color: Colors.base radius: 5 - border.color: Config.catppuccin.mantle + border.color: Colors.mantle border.width: 2 ColumnLayout { @@ -64,9 +64,9 @@ Singleton { id: searchContainer Layout.fillWidth: true implicitHeight: searchbox.implicitHeight + 10 - color: Config.catppuccin.base + color: Colors.base radius: 3 - border.color: Config.catppuccin.mantle + border.color: Colors.mantle RowLayout { id: searchbox @@ -76,7 +76,7 @@ Singleton { TextInput { id: search Layout.fillWidth: true - color: Config.catppuccin.text + color: Colors.text font.pointSize: 13 focus: true @@ -252,7 +252,7 @@ Singleton { highlight: Rectangle { radius: 5 color: "transparent" - border.color: Config.catppuccin.lavender + border.color: Colors.lavender border.width: 2 } keyNavigationEnabled: true @@ -293,7 +293,7 @@ Singleton { } Text { text: modelData.name - color: Config.catppuccin.text + color: Colors.text font.family: "JetBrainsMono Nerd Font Mono" font.pointSize: 13 Layout.alignment: Qt.AlignVCenter diff --git a/modules/style/quickshell/shell/ReloadPopup.qml b/modules/style/quickshell/shell/ReloadPopup.qml index 9c6e2fc..513f814 100644 --- a/modules/style/quickshell/shell/ReloadPopup.qml +++ b/modules/style/quickshell/shell/ReloadPopup.qml @@ -106,7 +106,7 @@ Scope { property: "width" from: rect.width to: 0 - duration: failed ? 10000 : 800 + duration: root.failed ? 10000 : 800 onFinished: popupLoader.active = false // Pause the animation when the mouse is hovering over the popup, diff --git a/modules/style/quickshell/shell/config/Colors.qml b/modules/style/quickshell/shell/config/Colors.qml new file mode 100644 index 0000000..8f77553 --- /dev/null +++ b/modules/style/quickshell/shell/config/Colors.qml @@ -0,0 +1,25 @@ +pragma Singleton + +import QtQuick +import Quickshell + +Singleton { + id: root + + readonly property color base: "#1e1e2e" + readonly property color mantle: "#181825" + readonly property color surface0: "#313244" + readonly property color surface1: "#45475a" + readonly property color surface2: "#585b70" + readonly property color text: "#cdd6f4" + readonly property color rosewater: "#f5e0dc" + readonly property color lavender: "#b4befe" + readonly property color red: "#f38ba8" + readonly property color peach: "#fab387" + readonly property color yellow: "#f9e2af" + readonly property color green: "#a6e3a1" + readonly property color teal: "#a6e3a1" + readonly property color blue: "#89b4fa" + readonly property color mauve: "#cba6f7" + readonly property color flamingo: "#f2cdcd" +} diff --git a/modules/style/quickshell/shell/config/Config.qml b/modules/style/quickshell/shell/config/Config.qml index 7b4c1b5..9e44e32 100644 --- a/modules/style/quickshell/shell/config/Config.qml +++ b/modules/style/quickshell/shell/config/Config.qml @@ -25,24 +25,6 @@ Singleton { readonly property int rounding: 0 } - readonly property QtObject catppuccin: QtObject { - readonly property color base: "#1e1e2e" - readonly property color mantle: "#181825" - readonly property color surface0: "#313244" - readonly property color surface1: "#45475a" - readonly property color surface2: "#585b70" - readonly property color text: "#cdd6f4" - readonly property color rosewater: "#f5e0dc" - readonly property color lavender: "#b4befe" - readonly property color red: "#f38ba8" - readonly property color peach: "#fab387" - readonly property color yellow: "#f9e2af" - readonly property color green: "#a6e3a1" - readonly property color teal: "#a6e3a1" - readonly property color blue: "#89b4fa" - readonly property color mauve: "#cba6f7" - readonly property color flamingo: "#f2cdcd" - } readonly property QtObject volumeslider: QtObject { readonly property int width: 50 } diff --git a/modules/style/quickshell/shell/modules/BackgroundImage.qml b/modules/style/quickshell/shell/modules/BackgroundImage.qml index 600fb74..b0710aa 100644 --- a/modules/style/quickshell/shell/modules/BackgroundImage.qml +++ b/modules/style/quickshell/shell/modules/BackgroundImage.qml @@ -1,6 +1,7 @@ import QtQuick import Quickshell import Quickshell.Wayland +import Qt.labs.folderlistmodel 2.9 PanelWindow { id: root @@ -9,6 +10,24 @@ PanelWindow { WlrLayershell.layer: WlrLayer.Background WlrLayershell.namespace: "shell:background" + // property string basePath: "file:///home/cr/Documents/Backgrounds/" + // property var absPath: folderModel.get(Math.floor(Math.random() * folderModel.count), "filePath") + // property var finalPath: absPath + + // property bool _: log() + // function log() { + // console.log(absPath); + // console.log(folderModel.count); + // return true; + // } + FolderListModel { + id: folderModel + // folder: root.basePath + nameFilters: ["*.png"] + showDirs: false + showFiles: true + } + anchors { top: true bottom: true @@ -16,13 +35,21 @@ PanelWindow { right: true } - Item { - id: background - anchors.fill: parent - Image { - id: image - asynchronous: true - source: "/home/cr/repos/projects/nichts/modules/style/wholefoods.png" + // Item { + // id: background + // anchors.fill: parent + // Image { + // id: image + // source: Qt.resolvedUrl(root.finalPath) + // } + // } + Timer { + id: timer + // 10 minutes + interval: 1000 * 60 * 10 + running: false + onTriggered: { + root.popupOpacity = 0; } } } diff --git a/modules/style/quickshell/shell/modules/bar/components/Clock.qml b/modules/style/quickshell/shell/modules/bar/components/Clock.qml index a6337fa..78d8c30 100644 --- a/modules/style/quickshell/shell/modules/bar/components/Clock.qml +++ b/modules/style/quickshell/shell/modules/bar/components/Clock.qml @@ -9,7 +9,7 @@ Rectangle { width: text.width + 5 height: text.height + 5 implicitWidth: width - border.color: Config.catppuccin.rosewater + border.color: Colors.rosewater border.width: 0 radius: 5 color: "transparent" @@ -24,7 +24,7 @@ Rectangle { font.family: "JetBrainsMono NF Mono" font.pointSize: 15 - color: Config.catppuccin.text + color: Colors.text } SystemClock { diff --git a/modules/style/quickshell/shell/modules/bar/components/Workspaces.qml b/modules/style/quickshell/shell/modules/bar/components/Workspaces.qml index 1d8b254..404f13e 100644 --- a/modules/style/quickshell/shell/modules/bar/components/Workspaces.qml +++ b/modules/style/quickshell/shell/modules/bar/components/Workspaces.qml @@ -36,7 +36,7 @@ Rectangle { // height: workspaces.length * root.wsItemHeight implicitWidth: list.implicitWidth color: "transparent" - border.color: Config.catppuccin.rosewater + border.color: Colors.rosewater border.width: 0 radius: 7 @@ -93,9 +93,9 @@ Rectangle { height: wsItem.height - 5 width: parent.width * wsItem.animActive radius: height / 2 - border.color: Config.catppuccin.mantle + border.color: Colors.mantle border.width: 0 - color: Config.catppuccin.blue + color: Colors.blue } } } diff --git a/modules/style/quickshell/shell/modules/drawers/Drawers.qml b/modules/style/quickshell/shell/modules/drawers/Drawers.qml index 2c6e920..466182c 100644 --- a/modules/style/quickshell/shell/modules/drawers/Drawers.qml +++ b/modules/style/quickshell/shell/modules/drawers/Drawers.qml @@ -5,10 +5,10 @@ import Quickshell.Wayland import QtQuick import QtQuick.Effects -import "../bar" +import qs.modules.bar -import "../../config" -import "../" +import qs.config +import qs.modules Variants { model: Quickshell.screens diff --git a/modules/style/quickshell/shell/shell.qml b/modules/style/quickshell/shell/shell.qml index 2835944..0ff4469 100644 --- a/modules/style/quickshell/shell/shell.qml +++ b/modules/style/quickshell/shell/shell.qml @@ -1,5 +1,4 @@ //@ pragma Env QS_NO_RELOAD_POPUP=1 -//@ pragma Env QT_QML_GENERATE_QMLLS_INI import Quickshell import QtQuick @@ -10,10 +9,7 @@ import qs ShellRoot { id: shellroot - Component.onCompleted: [Launcher.init()] + Component.onCompleted: [Launcher.init(), AudioPopup.init()] Drawers {} - // Background {}Popup - // - } diff --git a/modules/system/os/security/security.mod.nix b/modules/system/os/security/security.mod.nix index b609069..06e0a7a 100644 --- a/modules/system/os/security/security.mod.nix +++ b/modules/system/os/security/security.mod.nix @@ -1,14 +1,30 @@ {pkgs, ...}: { security = { - polkit = { - enable = true; - package = pkgs.polkit; - }; - + # Enable Soteria, a GTK-based Polkit authentication agent. + soteria.enable = true; apparmor = { enable = true; killUnconfinedConfinables = true; packages = [pkgs.apparmor-profiles]; }; + + pam.services = { + login.kwallet = { + enable = true; + # package = pkgs.kdePackages.kwallet-pam; + }; + niri = { + allowNullPassword = true; + kwallet = { + enable = true; + package = pkgs.kdePackages.kwallet-pam; + }; + }; + }; }; + environment.systemPackages = with pkgs.kdePackages; [ + kwallet # provides helper service + kwallet-pam # provides helper service + kwalletmanager # provides KCMs and stuff + ]; } diff --git a/modules/system/system.mod.nix b/modules/system/system.mod.nix new file mode 100644 index 0000000..3a8451e --- /dev/null +++ b/modules/system/system.mod.nix @@ -0,0 +1,9 @@ +{config, ...}: let + machine-id = builtins.substring 0 32 (builtins.hashString "sha256" config.networking.hostName); +in { + system = { + # My state version. + stateVersion = "23.11"; + }; + environment.etc."machine-id".text = "${machine-id}\n"; +} diff --git a/modules/wms/niri/config.kdl b/modules/wms/niri/config.kdl index d7fffb0..3867d35 100644 --- a/modules/wms/niri/config.kdl +++ b/modules/wms/niri/config.kdl @@ -42,9 +42,7 @@ layout { active-gradient from="#E5989B" to="#FFB4A2" angle=45 relative-to="workspace-view" in="oklch longer hue" } border { - width 1 - active-color "#000" - inactive-color "#000" + off } tab-indicator { width 2 @@ -69,10 +67,8 @@ layout { background-color "transparent" } // xwayland stuff -spawn-at-startup "xwayland-satellite" -spawn-at-startup "avizo-service" -spawn-at-startup "keepassxc" -spawn-at-startup "startxfce4" +// spawn-at-startup "xwayland-satellite" +spawn-at-startup "kwalletd6" spawn-at-startup "bash" "-c" "quickshell --path ~/repos/projects/nichts/modules/style/quickshell/shell" environment { DISPLAY ":0" @@ -93,7 +89,33 @@ overview { backdrop-color "#777777" } animations { - // off + window-close { + duration-ms 250 + curve "linear" + custom-shader r" + vec4 fall_and_rotate(vec3 coords_geo, vec3 size_geo) { + + float progress = niri_clamped_progress * niri_clamped_progress; + vec2 coords = (coords_geo.xy - vec2(0.5, 1.0)) * size_geo.xy; + coords.y -= progress * 1440.0; + float random = (niri_random_seed - 0.5) / 2.0; + random = sign(random) - random; + float max_angle = 0.5 * random; + float angle = progress * max_angle; + mat2 rotate = mat2(cos(angle), -sin(angle), sin(angle), cos(angle)); + coords = rotate * coords; + coords_geo = vec3(coords / size_geo.xy + vec2(0.5, 1.0), 1.0); + vec3 coords_tex = niri_geo_to_tex * coords_geo; + vec4 color = texture2D(niri_tex, coords_tex.st); + + return color; + } + + vec4 close_color(vec3 coords_geo, vec3 size_geo) { + return fall_and_rotate(coords_geo, size_geo); + } + " + } } window-rule { match app-id="unset" @@ -130,6 +152,9 @@ binds { Mod+Return { spawn "ghostty" } + Mod+B { + spawn "brave" + } Mod+D { spawn "bash" "-c" "quickshell --path ~/repos/projects/nichts/modules/style/quickshell/shell msg launcher open" } diff --git a/modules/wms/portal.mod.nix b/modules/wms/portal.mod.nix index 527d2d3..e37949e 100644 --- a/modules/wms/portal.mod.nix +++ b/modules/wms/portal.mod.nix @@ -15,21 +15,19 @@ in { # or with unexpected env vars set from wrappers. # See #160923 for more info. xdgOpenUsePortal = true; - extraPortals = - [ - pkgs.xdg-desktop-portal-gtk - pkgs.kdePackages.xdg-desktop-portal-kde - ] - ++ ( - optional config.programs.niri.enable - pkgs.xdg-desktop-portal-gnome - ) - ++ ( - optional config.programs.hyprland.enable - pkgs.xdg-desktop-portal-hyprland - ); + extraPortals = [ + pkgs.xdg-desktop-portal-gtk + pkgs.kdePackages.xdg-desktop-portal-kde + pkgs.kdePackages.kwallet + pkgs.xdg-desktop-portal-gnome + ]; config = { - hyprland.default = mkIf config.programs.hyprland.enable ["*"]; + common = { + "org.freedesktop.impl.portal.Secret" = [ + "kwallet" + ]; + "org.freedesktop.secrets" = ["kwalletd6"]; + }; niri = { default = [ "gnome" @@ -44,6 +42,4 @@ in { }; }; }; - environment.variables = { - }; } diff --git a/modules/wms/variables.mod.nix b/modules/wms/variables.mod.nix index 0ed61cd..efcb13a 100644 --- a/modules/wms/variables.mod.nix +++ b/modules/wms/variables.mod.nix @@ -29,11 +29,11 @@ in { NIXOS_XDG_OPEN_USE_PORTAL = "1"; - XDG_CURRENT_DESKTOP = "Hyprland"; - XDG_SESSION_DESKTOP = "Hyprland"; + XDG_CURRENT_DESKTOP = "niri"; + XDG_SESSION_DESKTOP = "niri"; XDG_SESSION_TYPE = "wayland"; - ELECTRON_OZONE_PLATFORM_HINT = "wayland"; + ELECTRON_OZONE_PLATFORM_HINT = "auto"; LIBSEAT_BACKEND = "logind"; }; diff --git a/packages/default.nix b/packages/default.nix index 8fb4dfb..375b3e7 100644 --- a/packages/default.nix +++ b/packages/default.nix @@ -3,15 +3,7 @@ pkgs, }: let inherit (pkgs) lib; - helix = let - latestNightly = (inputs.rust-overlay.lib.mkRustBin {} pkgs).nightly.latest.default; - rustPlatform = pkgs.makeRustPlatform { - rustc = latestNightly; - cargo = latestNightly; - stdenv = pkgs.clangStdenv; - }; - in - pkgs.callPackage ./helix {inherit rustPlatform;}; + helix = pkgs.callPackage ./helix {}; kakoune = pkgs.callPackage ./kakoune.nix {}; fish = pkgs.callPackage ./fish {inherit lib;}; in { diff --git a/packages/helix/default.nix b/packages/helix/default.nix index 866684e..4be0954 100644 --- a/packages/helix/default.nix +++ b/packages/helix/default.nix @@ -1,12 +1,8 @@ { - symlinkJoin, - makeWrapper, - callPackage, - fetchzip, - rustPlatform, alejandra, basedpyright, bash-language-server, + callPackage, clang-tools, clippy, cmake-format, @@ -14,57 +10,55 @@ deadnix, deno, dprint, + fetchzip, formats, gdb, golangci-lint-langserver, gopls, + helix, kdePackages, kdlfmt, lazygit, lib, lldb_19, + makeWrapper, nixd, ruff, rust-analyzer, + rustPlatform, rustfmt, shellcheck, shfmt, simple-completion-language-server, superhtml, + symlinkJoin, taplo, tinymist, typescript-language-server, vscode-langservers-extracted, zls, - helix, ... }: let inherit (lib.meta) getExe; custom-helix = - (helix.override {inherit rustPlatform;}).overrideAttrs + helix.overrideAttrs (finalAttrs: previousAttrs: { - version = "25.07.1"; + version = "25.07.2"; src = fetchzip { url = "https://github.com/bloxx12/helix/releases/download/${finalAttrs.version}/helix-${finalAttrs.version}-source.tar.xz"; - hash = "sha256-OLCJPleRHhQbHOm8EnMWDBV5qG4PKGCUhr4y8mSkvpg="; + hash = "sha256-ZNsQwFfPXe6oewajx1tl68W60kVo7q2SuvTgy/o1HKk="; stripRoot = false; }; - RUSTFLAGS = "-Ctarget-cpu=native"; - doInstallCheck = false; cargoDeps = rustPlatform.fetchCargoVendor { inherit (custom-helix) src; - hash = "sha256-eVZVPyIk+kBq5hh+bzTveng6mb+6XAnCp0OAI1c+ObI="; + hash = "sha256-3poZSvIrkx8lguxxDeNfngW6+4hH8TV/LHcZx5W5aXg="; }; }); - new-deadnix = deadnix.overrideAttrs (finalAttrs: previousAttrs: { - - }); - toml = formats.toml {}; helix-languages = callPackage ./languages.nix {inherit lib;}; @@ -93,6 +87,10 @@ mouse = true; bufferline = "multiple"; soft-wrap.enable = true; + word-completion = { + enable = true; + trigger-length = 2; + }; cursor-shape = { insert = "bar"; normal = "block"; diff --git a/packages/helix/languages.nix b/packages/helix/languages.nix index b585f6a..5d51dd6 100644 --- a/packages/helix/languages.nix +++ b/packages/helix/languages.nix @@ -17,7 +17,6 @@ nil, ruff, shfmt, - simple-completion-language-server, typescript-language-server, vscode-langservers-extracted, zls, @@ -29,17 +28,17 @@ # a newer nil version, for pipes support. new-nil = nil.overrideAttrs (_: { - version = "unstable-02-06-2025"; + version = "unstable-18-07-2025"; src = fetchFromGitHub { owner = "oxalica"; repo = "nil"; - rev = "577d160da311cc7f5042038456a0713e9863d09e"; - hash = "sha256-ggXU3RHv6NgWw+vc+HO4/9n0GPufhTIUjVuLci8Za8c="; + rev = "524ae2d67dd84d99a10f409ed6cd8e4e7b3cae3f"; + hash = "sha256-Uy2qzd+fMoBcp4NPSO7DavEC1pGMegmAqoEMvmXbIQU="; }; cargoDeps = rustPlatform.fetchCargoVendor { inherit (new-nil) src; - hash = "sha256-uZsLlFU9GKLvFllF7Kf5Q7HfN26KQojf4rvOb9p7Rjs="; + hash = "sha256-Sljr3ff8hl/qm/0wqc1GXsEr1wWn7NAXmdrd5wHzUX8="; }; }); @@ -90,12 +89,6 @@ auto-format = true; language-servers = ["dprint" "typescript-language-server"]; } - { - name = "jjdescription"; - scope = "source.jjdescription"; - file-types = ["jjdescription"]; - language-servers = ["scls"]; - } { name = "json"; formatter = mark "json"; @@ -104,11 +97,11 @@ name = "markdown"; auto-format = true; formatter = mark "md"; - language-servers = ["scls" "taplo"]; + language-servers = ["taplo"]; } { name = "nix"; - language-servers = ["nil" "scls" "deadnix"]; + language-servers = ["nil"]; } { name = "qml"; @@ -172,12 +165,27 @@ }; rust-analyzer = { - config = { + config.rust-analyzer = { + checkOnSave.command = "clippy"; + procMacro.enable = true; + cargo = { + loadOutDirsFromCheck = true; + features = "all"; + }; + assist = { + preferSelf = true; + }; check = { command = "clippy"; extraArgs = ["--" "-W" "clippy::pedantic" "-W" "clippy::nursery" "-W" "clippy::perf"]; }; - cargo.features = "all"; + lens = { + references = true; + methodReferences = true; + }; + completion.autoimport.enable = true; + experimental.procAttrMacros = true; + interpret.tests = true; }; }; @@ -220,26 +228,22 @@ nil = { command = getExe new-nil; # alejandro - config.nil.formatting.command = ["${getExe alejandra}" "-q"]; + config.nil = { + formatting.command = ["${getExe alejandra}" "-q"]; + diagnostics = { + bindingEndHintMinLines = 3; + }; + nix.flake = { + autoArchive = true; + # autoEvalInputs = true; + nixpkgsInputName = "nixpkgs"; + }; + }; }; deadnix = { command = getExe new-deadnix; }; - scls = { - command = getExe simple-completion-language-server; - config = { - max_completion_items = 100; # set max completion results len for each group: words, snippets, unicode-input - feature_words = true; # enable completion by word - feature_snippets = true; # enable snippets - snippets_first = true; # completions will return before snippets by default - snippets_inline_by_word_tail = false; # suggest snippets by WORD tail, for example text `xsq|` become `x^2|` when snippet `sq` has body `^2` - feature_unicode_input = false; # enable "unicode input" - feature_paths = false; # enable path completion - feature_citations = false; # enable citation completion (only on `citation` feature enabled) - }; - }; - typescript-language-server = { command = getExe typescript-language-server; args = ["--stdio"];