Compare commits

..

27 commits

Author SHA1 Message Date
378828b856
helix: set word-completion trigger-length to 2 2025-07-19 00:47:14 +02:00
d3d266bf9b
qt: enable qt and set platformTheme to qt5ct 2025-07-19 00:47:13 +02:00
6a0ecd3fe7
niri/config: config changes 2025-07-19 00:47:12 +02:00
683509d009
helix: switch to my own fork again 2025-07-19 00:47:11 +02:00
04e8033af3
TODO.md: delete 2025-07-19 00:47:10 +02:00
b82a3580ec
quickshell: a bunch of changes 2025-07-19 00:47:10 +02:00
8c6b9f65c9
security: add pam configuration 2025-07-19 00:47:09 +02:00
f813eb37d3
security: enable soteria
Soteria is a GTK-based Polkit authentication agent.
2025-07-19 00:47:08 +02:00
484bddd03b
spotifyd: set pipewire backend 2025-07-19 00:47:07 +02:00
0fa9bee865
temperance/programs: program updates 2025-07-19 00:47:06 +02:00
327f149a42
helix/languages: drop scls
helix master support buffer completion now.
2025-07-19 00:47:06 +02:00
655626c237
services/ssh: drop SSH_AUTH_SOCK env var, disable ssh.startAgent 2025-07-19 00:47:05 +02:00
ef617f52db
gui/bitwarden: init 2025-07-19 00:47:04 +02:00
fa71542fe2
system: options: drop mainUser 2025-07-19 00:47:03 +02:00
89ca8e59b3
wm/portal: cleanup 2025-07-19 00:47:02 +02:00
9750c64d9c
system.mod.nix: init 2025-07-19 00:47:02 +02:00
dee3cc7745
wm/portal.mod.nix: cleanup, add kwallet 2025-07-18 23:21:23 +02:00
598e92640e
gui: dolphin: init
Add dolphin, a graphical file manager with
kio-fuse and kio-extras to support mounting of filesystems
2025-07-18 23:21:22 +02:00
681cd8a453
ghostty: set background opacity to 0.9 2025-07-18 23:21:20 +02:00
098f38e9a4
nil: update to newest version 2025-07-18 23:21:19 +02:00
33f6b08982
gtk: drop HYPRCURSOR_{SIZE, THEME} variables 2025-07-18 23:21:18 +02:00
98690011c4
btop: remove desktop entry 2025-07-18 23:21:16 +02:00
574c0d2db1
brave: disable Vulkan, add Humble new tab page 2025-07-18 23:21:15 +02:00
3ab2613290
wm/variables: Hyprland => niri, set ELECTRON_OZONE_PLATFORM_HINT 2025-07-18 23:21:14 +02:00
fba74410c0
flake.lock: bump inputs 2025-07-18 23:21:13 +02:00
a64d7571d8
helix: drop rust-overlay 2025-07-18 23:21:11 +02:00
c9da7d036b
flake: drop rust-overlay 2025-07-18 23:21:10 +02:00
40 changed files with 354 additions and 300 deletions

21
TODO.md
View file

@ -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
- [ ]
- [ ]
- [ ]
- [ ]
- [ ]
- [ ]
- [ ]
- [ ]
- [ ]
- [ ]

35
flake.lock generated
View file

@ -311,10 +311,10 @@
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 315532800, "lastModified": 315532800,
"narHash": "sha256-X5WIcIkFxPhw7mS219TbEOgrugbMx/2cin09OlWobT8=", "narHash": "sha256-aW0rd3E6pilfWXcNrMwbA4ehW3BZJ0oep4LQbUgOrgg=",
"rev": "dab3a6e781554f965bde3def0aa2fda4eb8f1708", "rev": "fa0ef8a6bb1651aa26c939aeb51b5f499e86b0ec",
"type": "tarball", "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": { "original": {
"type": "tarball", "type": "tarball",
@ -354,11 +354,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1752701746, "lastModified": 1752837946,
"narHash": "sha256-OVqrNbAzMaVOBxdoLqbZyn0vOq9/XwcWVPVKJbHwz5Q=", "narHash": "sha256-oLkH/Mr0cfrjD6WRf6GqJV6sizX0ZgYqD6gFdziyKVo=",
"ref": "refs/heads/master", "ref": "refs/heads/master",
"rev": "986749cdb9ca9078b66297d60bbf21d48e33a6cf", "rev": "e55d519c280192d8d97695b6c5905a0d7a46f8fe",
"revCount": 639, "revCount": 647,
"type": "git", "type": "git",
"url": "https://git.outfoxxed.me/outfoxxed/quickshell" "url": "https://git.outfoxxed.me/outfoxxed/quickshell"
}, },
@ -374,7 +374,6 @@
"lanzaboote": "lanzaboote", "lanzaboote": "lanzaboote",
"nixpkgs": "nixpkgs_2", "nixpkgs": "nixpkgs_2",
"quickshell": "quickshell", "quickshell": "quickshell",
"rust-overlay": "rust-overlay_2",
"systems": "systems", "systems": "systems",
"watt": "watt" "watt": "watt"
} }
@ -400,26 +399,6 @@
"type": "github" "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": { "systems": {
"locked": { "locked": {
"lastModified": 1689347949, "lastModified": 1689347949,

View file

@ -67,12 +67,6 @@
inputs.nixpkgs.follows = "nixpkgs"; 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. # DetNix is doing too well these days not to use it.
determinate = { determinate = {
url = "github:determinatesystems/determinate"; url = "github:determinatesystems/determinate";

View file

@ -32,7 +32,6 @@ in {
microfetch microfetch
mprocs mprocs
nmap nmap
polkit
ripgrep ripgrep
smartmontools smartmontools
television television

View file

@ -8,7 +8,6 @@
# Select internationalisation properties. # Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8"; i18n.defaultLocale = "en_US.UTF-8";
console.keyMap = "uk"; console.keyMap = "uk";
security.polkit.enable = true;
boot.kernelPackages = pkgs.linuxPackages_xanmod_latest; boot.kernelPackages = pkgs.linuxPackages_xanmod_latest;
services = { services = {
fstrim.enable = lib.mkDefault true; fstrim.enable = lib.mkDefault true;

View file

@ -1,17 +1,17 @@
{pkgs, ...}: let {pkgs, ...}: let
# a newer nil version, for pipes support. # a newer nil version, for pipes support.
newer-nil = pkgs.nil.overrideAttrs (_: { new-nil = pkgs.nil.overrideAttrs (_: {
version = "unstable-02-06-2025"; version = "unstable-18-07-2025";
src = pkgs.fetchFromGitHub { src = pkgs.fetchFromGitHub {
owner = "oxalica"; owner = "oxalica";
repo = "nil"; repo = "nil";
rev = "577d160da311cc7f5042038456a0713e9863d09e"; rev = "524ae2d67dd84d99a10f409ed6cd8e4e7b3cae3f";
hash = "sha256-ggXU3RHv6NgWw+vc+HO4/9n0GPufhTIUjVuLci8Za8c="; hash = "sha256-Uy2qzd+fMoBcp4NPSO7DavEC1pGMegmAqoEMvmXbIQU=";
}; };
cargoDeps = pkgs.rustPlatform.fetchCargoVendor { cargoDeps = pkgs.rustPlatform.fetchCargoVendor {
inherit (newer-nil) src; inherit (new-nil) src;
hash = "sha256-uZsLlFU9GKLvFllF7Kf5Q7HfN26KQojf4rvOb9p7Rjs="; hash = "sha256-Sljr3ff8hl/qm/0wqc1GXsEr1wWn7NAXmdrd5wHzUX8=";
}; };
}); });
in { in {
@ -74,7 +74,6 @@ in {
pdfpc pdfpc
pfetch pfetch
playerctl playerctl
polkit
presenterm presenterm
pulsemixer pulsemixer
ripgrep ripgrep
@ -95,6 +94,6 @@ in {
xournalpp xournalpp
zathura zathura
; ;
inherit newer-nil; inherit new-nil;
}; };
} }

View file

@ -9,7 +9,6 @@
# Select internationalisation properties. # Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8"; i18n.defaultLocale = "en_US.UTF-8";
console.keyMap = "us"; console.keyMap = "us";
security.polkit.enable = true;
# boot.kernelPackages = pkgs.linuxPackagesFor xanmod_blox; # boot.kernelPackages = pkgs.linuxPackagesFor xanmod_blox;
boot.kernelPackages = pkgs.linuxPackages_latest; boot.kernelPackages = pkgs.linuxPackages_latest;
@ -20,15 +19,14 @@
system76-scheduler = { system76-scheduler = {
enable = true; enable = true;
}; };
gnome.gnome-keyring.enable = true;
}; };
security.pam.services.login.enableGnomeKeyring = true;
environment.systemPackages = [pkgs.seahorse];
meta = { meta = {
mainUser.gitSigningKey = ""; mainUser.gitSigningKey = "";
}; };
modules = { modules = {
system = { system = {
isGraphical = true;
impermanence.enable = true; impermanence.enable = true;
boot = { boot = {
systemd-boot.enable = true; systemd-boot.enable = true;

View file

@ -6,8 +6,6 @@
anki anki
asciinema asciinema
beets beets
bitwarden-cli
bitwarden-desktop
bubblewrap bubblewrap
cachix cachix
calc calc
@ -31,9 +29,9 @@
impala impala
imv imv
inetutils inetutils
inshellisense
joplin-desktop joplin-desktop
jujutsu jujutsu
julia
just just
keepassxc keepassxc
lazygit lazygit
@ -50,7 +48,6 @@
pavucontrol pavucontrol
pdfarranger pdfarranger
picard picard
polkit
pulsemixer pulsemixer
python3 python3
pwvucontrol pwvucontrol
@ -64,7 +61,6 @@
spotify spotify
starship starship
telegram-desktop telegram-desktop
texliveFull
thunderbird thunderbird
topiary topiary
tor-browser tor-browser
@ -73,7 +69,6 @@
typst typst
vesktop vesktop
vivid vivid
walker
wayneko wayneko
wireguard-tools wireguard-tools
xdg-utils xdg-utils
@ -82,17 +77,13 @@
zathura zathura
zotero zotero
zoxide zoxide
# coreutils-full # All of the GNU coreutils curl
curl # I sometimes need to curl stuff git
git # take a guess
wget wget
unzip # zipping and unzipping stuff unzip
zip zip
util-linux util-linux
; zed-editor
inherit
(pkgs.wineWowPackages)
waylandFull
; ;
}; };
} }

View file

@ -8,7 +8,6 @@
# Select internationalisation properties. # Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8"; i18n.defaultLocale = "en_US.UTF-8";
console.keyMap = "uk"; console.keyMap = "uk";
security.polkit.enable = true;
boot.kernelPackages = pkgs.linuxPackages_latest; boot.kernelPackages = pkgs.linuxPackages_latest;
programs.nix-ld.enable = true; programs.nix-ld.enable = true;

View file

@ -8,7 +8,6 @@
# Select internationalisation properties. # Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8"; i18n.defaultLocale = "en_US.UTF-8";
console.keyMap = "uk"; console.keyMap = "uk";
security.polkit.enable = true;
programs.nix-ld.enable = false; programs.nix-ld.enable = false;
boot.kernelPackages = pkgs.linuxPackages_xanmod_latest; boot.kernelPackages = pkgs.linuxPackages_xanmod_latest;
services = { services = {

View file

@ -32,7 +32,6 @@
microfetch microfetch
nmap nmap
pfetch pfetch
polkit
ripgrep ripgrep
smartmontools smartmontools
util-linux util-linux

View file

@ -11,16 +11,6 @@
inherit (config.modules.system) systemType; inherit (config.modules.system) systemType;
in { in {
options.modules.system = { 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 { users = mkOption {
type = listOf str; type = listOf str;
default = ["cr"]; default = ["cr"];

View file

@ -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";
};
};
}

View file

@ -9,15 +9,13 @@
# https://peter.sh/experiments/chromium-command-line-switches/ # https://peter.sh/experiments/chromium-command-line-switches/
flags = concatStringsSep " " [ flags = concatStringsSep " " [
"--no-first-run" "--no-first-run"
"--use-vulkan" "--enable-features=UseOzonePlatform"
"--enable-features=Vulkan,UseOzonePlatform"
"--enable-gpu-rasterization" "--enable-gpu-rasterization"
"--force-dark-mode" "--force-dark-mode"
"--enable-smooth-scrolling" "--enable-smooth-scrolling"
"--enable-features=UseOzonePlatform" "--enable-features=UseOzonePlatform"
"--ozone-platform=wayland" "--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'" "--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 { brave-wrapped = pkgs.symlinkJoin {
name = "brave"; name = "brave";
@ -216,6 +214,8 @@ in {
"mnjggcdmjocbbbhaepdhchncahnbgone" "mnjggcdmjocbbbhaepdhchncahnbgone"
# Decentraleyes # Decentraleyes
"ldpochfccmkkmhdbclfhpagapcfdljkj" "ldpochfccmkkmhdbclfhpagapcfdljkj"
# Humble new tab page
"mfgdmpfihlmdekaclngibpjhdebndhdj"
]; ];
}; };

View file

@ -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)
];
};
}

View file

@ -26,7 +26,7 @@
# font-style-bold-italic = JetBrainsMono NF Italic; # font-style-bold-italic = JetBrainsMono NF Italic;
app-notifications = "no-clipboard-copy"; app-notifications = "no-clipboard-copy";
background-opacity = 0.75; background-opacity = 0.9;
bold-is-bright = "true"; bold-is-bright = "true";
confirm-close-surface = "false"; confirm-close-surface = "false";
cursor-style-blink = "false"; cursor-style-blink = "false";

View file

@ -24,9 +24,16 @@
log_level = "ERROR" 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 { btop-wrapped = pkgs.symlinkJoin {
name = "btop-wrapped"; name = "btop-wrapped";
paths = [pkgs.btop]; paths = [btop-no-desktop-entry];
nativeBuildInputs = [pkgs.makeWrapper]; nativeBuildInputs = [pkgs.makeWrapper];
postBuild = '' postBuild = ''
wrapProgram $out/bin/btop --set XDG_CONFIG_HOME "${btop-settings}" wrapProgram $out/bin/btop --set XDG_CONFIG_HOME "${btop-settings}"

View file

@ -10,8 +10,7 @@ in {
services.spotifyd = mkIf isGraphical { services.spotifyd = mkIf isGraphical {
enable = true; enable = true;
settings = { settings = {
}; backend = "pipe";
config = {
}; };
}; };
} }

View file

@ -3,11 +3,6 @@
in { in {
options.modules.programs.ssh.enable = mkEnableOption "ssh"; options.modules.programs.ssh.enable = mkEnableOption "ssh";
config = { 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 = { services.openssh = {
enable = true; enable = true;
ports = [22]; ports = [22];

View file

@ -82,9 +82,6 @@ in {
GTK_THEME = cfg.theme.name; GTK_THEME = cfg.theme.name;
XCURSOR_THEME = "BreezeX-RosePine-Linux"; XCURSOR_THEME = "BreezeX-RosePine-Linux";
XCURSOR_SIZE = cursorSize; XCURSOR_SIZE = cursorSize;
HYPRCURSOR_THEME = "BreezeX-RosePine-Linux";
HYPRCURSOR_SIZE = cursorSize;
}; };
etc = let etc = let
css = import ./gtk-colors.nix {inherit (config.modules.style.colorScheme) colors;}; css = import ./gtk-colors.nix {inherit (config.modules.style.colorScheme) colors;};

View file

@ -34,7 +34,10 @@ in {
}; };
}; };
config = config = mkIf cfg.enable {
mkIf cfg.enable { qt = {
enable = true;
platformTheme = "qt5ct";
};
}; };
} }

View file

@ -19,6 +19,11 @@ in {
qt6.qt5compat qt6.qt5compat
qt6.qtmultimedia qt6.qtmultimedia
qt6.qtdeclarative qt6.qtdeclarative
qt6.qtsvg
qt6.qtwayland
qt6.qtbase
kdePackages.breeze
kdePackages.breeze-icons
]; ];
# taken from outfoxxed. # taken from outfoxxed.

View file

@ -1,100 +1,102 @@
pragma Singleton
pragma ComponentBehavior: Bound pragma ComponentBehavior: Bound
pragma Singleton
import QtQuick import QtQuick
import Quickshell import Quickshell
import QtQuick.Layouts import QtQuick.Layouts
import Quickshell.Wayland
import Quickshell.Services.Pipewire import Quickshell.Services.Pipewire
import Quickshell.Wayland
import qs.config
Singleton { Singleton {
id: audioPopup id: root
property bool popupOpen: true
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 { PwObjectTracker {
objects: [audioPopup.sink] objects: [Pipewire.defaultAudioSink]
} }
Timer { onVolumeChanged: {
id: timer root.popupOpacity = 1;
interval: 3000 loader.activeAsync = true;
running: false timer.restart();
repeat: false timer_opacity.restart();
onTriggered: audioPopup.visible = false
} }
LazyLoader { LazyLoader {
id: loader id: loader
activeAsync: audioPopup.popupOpen activeAsync: false
PanelWindow { PanelWindow {
id: popup id: popup
width: 400
height: 30
visible: true visible: true
implicitWidth: rect.implicitWidth
// Give the window an empty click mask so all clicks pass through it. implicitHeight: 50
color: "transparent"
mask: Region {} mask: Region {}
exclusionMode: ExclusionMode.Ignore
// Use the wlroots specific layer property to ensure it displays over
// fullscreen windows.
WlrLayershell.layer: WlrLayer.Overlay WlrLayershell.layer: WlrLayer.Overlay
color: "transparent" anchors.bottom: true
margins.bottom: 100
anchors {
bottom: true
}
margins {
bottom: 250
}
Rectangle { Rectangle {
id: rect id: rect
Layout.fillWidth: true Layout.fillWidth: true
anchors.verticalCenter: parent.verticalCenter anchors.fill: parent
color: "white" color: Colors.surface0
height: parent.height implicitWidth: 300
width: parent.width implicitHeight: parent.implicitHeight
radius: 5 radius: 5
opacity: 0 opacity: root.popupOpacity
anchors { Behavior on opacity {
left: parent.left
}
Behavior on width {
NumberAnimation { NumberAnimation {
duration: 200 duration: 500
easing.type: Easing.OutCubic easing.type: Easing.OutCubic
} }
} }
Rectangle { Rectangle {
color: "black" id: bar
height: 20 color: Colors.blue
radius: height / 2 implicitWidth: rect.implicitWidth * root.volume - 20
implicitHeight: 30
topRightRadius: 5
bottomRightRadius: 5
anchors { anchors {
left: parent.left left: parent.left
verticalCenter: parent.verticalCenter
} }
topLeftRadius: 0 Behavior on implicitWidth {
bottomLeftRadius: 0 NumberAnimation {
duration: 300
easing.type: Easing.OutCubic
}
}
}
}
}
}
anchors.verticalCenter: parent.verticalCenter Timer {
width: parent.width * audioPopup.sink.audio.volume id: timer
} interval: 2000
running: false
onTriggered: loader.activeAsync = false
} }
Timer {
id: timer_opacity
interval: 1500
running: false
onTriggered: {
root.popupOpacity = 0;
} }
} }

View file

@ -49,9 +49,9 @@ Singleton {
} }
} }
width: 450 width: 450
color: Config.catppuccin.base color: Colors.base
radius: 5 radius: 5
border.color: Config.catppuccin.mantle border.color: Colors.mantle
border.width: 2 border.width: 2
ColumnLayout { ColumnLayout {
@ -64,9 +64,9 @@ Singleton {
id: searchContainer id: searchContainer
Layout.fillWidth: true Layout.fillWidth: true
implicitHeight: searchbox.implicitHeight + 10 implicitHeight: searchbox.implicitHeight + 10
color: Config.catppuccin.base color: Colors.base
radius: 3 radius: 3
border.color: Config.catppuccin.mantle border.color: Colors.mantle
RowLayout { RowLayout {
id: searchbox id: searchbox
@ -76,7 +76,7 @@ Singleton {
TextInput { TextInput {
id: search id: search
Layout.fillWidth: true Layout.fillWidth: true
color: Config.catppuccin.text color: Colors.text
font.pointSize: 13 font.pointSize: 13
focus: true focus: true
@ -252,7 +252,7 @@ Singleton {
highlight: Rectangle { highlight: Rectangle {
radius: 5 radius: 5
color: "transparent" color: "transparent"
border.color: Config.catppuccin.lavender border.color: Colors.lavender
border.width: 2 border.width: 2
} }
keyNavigationEnabled: true keyNavigationEnabled: true
@ -293,7 +293,7 @@ Singleton {
} }
Text { Text {
text: modelData.name text: modelData.name
color: Config.catppuccin.text color: Colors.text
font.family: "JetBrainsMono Nerd Font Mono" font.family: "JetBrainsMono Nerd Font Mono"
font.pointSize: 13 font.pointSize: 13
Layout.alignment: Qt.AlignVCenter Layout.alignment: Qt.AlignVCenter

View file

@ -106,7 +106,7 @@ Scope {
property: "width" property: "width"
from: rect.width from: rect.width
to: 0 to: 0
duration: failed ? 10000 : 800 duration: root.failed ? 10000 : 800
onFinished: popupLoader.active = false onFinished: popupLoader.active = false
// Pause the animation when the mouse is hovering over the popup, // Pause the animation when the mouse is hovering over the popup,

View file

@ -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"
}

View file

@ -25,24 +25,6 @@ Singleton {
readonly property int rounding: 0 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 QtObject volumeslider: QtObject {
readonly property int width: 50 readonly property int width: 50
} }

View file

@ -1,6 +1,7 @@
import QtQuick import QtQuick
import Quickshell import Quickshell
import Quickshell.Wayland import Quickshell.Wayland
import Qt.labs.folderlistmodel 2.9
PanelWindow { PanelWindow {
id: root id: root
@ -9,6 +10,24 @@ PanelWindow {
WlrLayershell.layer: WlrLayer.Background WlrLayershell.layer: WlrLayer.Background
WlrLayershell.namespace: "shell: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 { anchors {
top: true top: true
bottom: true bottom: true
@ -16,13 +35,21 @@ PanelWindow {
right: true right: true
} }
Item { // Item {
id: background // id: background
anchors.fill: parent // anchors.fill: parent
Image { // Image {
id: image // id: image
asynchronous: true // source: Qt.resolvedUrl(root.finalPath)
source: "/home/cr/repos/projects/nichts/modules/style/wholefoods.png" // }
// }
Timer {
id: timer
// 10 minutes
interval: 1000 * 60 * 10
running: false
onTriggered: {
root.popupOpacity = 0;
} }
} }
} }

View file

@ -9,7 +9,7 @@ Rectangle {
width: text.width + 5 width: text.width + 5
height: text.height + 5 height: text.height + 5
implicitWidth: width implicitWidth: width
border.color: Config.catppuccin.rosewater border.color: Colors.rosewater
border.width: 0 border.width: 0
radius: 5 radius: 5
color: "transparent" color: "transparent"
@ -24,7 +24,7 @@ Rectangle {
font.family: "JetBrainsMono NF Mono" font.family: "JetBrainsMono NF Mono"
font.pointSize: 15 font.pointSize: 15
color: Config.catppuccin.text color: Colors.text
} }
SystemClock { SystemClock {

View file

@ -36,7 +36,7 @@ Rectangle {
// height: workspaces.length * root.wsItemHeight // height: workspaces.length * root.wsItemHeight
implicitWidth: list.implicitWidth implicitWidth: list.implicitWidth
color: "transparent" color: "transparent"
border.color: Config.catppuccin.rosewater border.color: Colors.rosewater
border.width: 0 border.width: 0
radius: 7 radius: 7
@ -93,9 +93,9 @@ Rectangle {
height: wsItem.height - 5 height: wsItem.height - 5
width: parent.width * wsItem.animActive width: parent.width * wsItem.animActive
radius: height / 2 radius: height / 2
border.color: Config.catppuccin.mantle border.color: Colors.mantle
border.width: 0 border.width: 0
color: Config.catppuccin.blue color: Colors.blue
} }
} }
} }

View file

@ -5,10 +5,10 @@ import Quickshell.Wayland
import QtQuick import QtQuick
import QtQuick.Effects import QtQuick.Effects
import "../bar" import qs.modules.bar
import "../../config" import qs.config
import "../" import qs.modules
Variants { Variants {
model: Quickshell.screens model: Quickshell.screens

View file

@ -1,5 +1,4 @@
//@ pragma Env QS_NO_RELOAD_POPUP=1 //@ pragma Env QS_NO_RELOAD_POPUP=1
//@ pragma Env QT_QML_GENERATE_QMLLS_INI
import Quickshell import Quickshell
import QtQuick import QtQuick
@ -10,10 +9,7 @@ import qs
ShellRoot { ShellRoot {
id: shellroot id: shellroot
Component.onCompleted: [Launcher.init()] Component.onCompleted: [Launcher.init(), AudioPopup.init()]
Drawers {} Drawers {}
// Background {}Popup
//
} }

View file

@ -1,14 +1,30 @@
{pkgs, ...}: { {pkgs, ...}: {
security = { security = {
polkit = { # Enable Soteria, a GTK-based Polkit authentication agent.
enable = true; soteria.enable = true;
package = pkgs.polkit;
};
apparmor = { apparmor = {
enable = true; enable = true;
killUnconfinedConfinables = true; killUnconfinedConfinables = true;
packages = [pkgs.apparmor-profiles]; 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
];
} }

View file

@ -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";
}

View file

@ -42,9 +42,7 @@ layout {
active-gradient from="#E5989B" to="#FFB4A2" angle=45 relative-to="workspace-view" in="oklch longer hue" active-gradient from="#E5989B" to="#FFB4A2" angle=45 relative-to="workspace-view" in="oklch longer hue"
} }
border { border {
width 1 off
active-color "#000"
inactive-color "#000"
} }
tab-indicator { tab-indicator {
width 2 width 2
@ -69,10 +67,8 @@ layout {
background-color "transparent" background-color "transparent"
} }
// xwayland stuff // xwayland stuff
spawn-at-startup "xwayland-satellite" // spawn-at-startup "xwayland-satellite"
spawn-at-startup "avizo-service" spawn-at-startup "kwalletd6"
spawn-at-startup "keepassxc"
spawn-at-startup "startxfce4"
spawn-at-startup "bash" "-c" "quickshell --path ~/repos/projects/nichts/modules/style/quickshell/shell" spawn-at-startup "bash" "-c" "quickshell --path ~/repos/projects/nichts/modules/style/quickshell/shell"
environment { environment {
DISPLAY ":0" DISPLAY ":0"
@ -93,7 +89,33 @@ overview {
backdrop-color "#777777" backdrop-color "#777777"
} }
animations { 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 { window-rule {
match app-id="unset" match app-id="unset"
@ -130,6 +152,9 @@ binds {
Mod+Return { Mod+Return {
spawn "ghostty" spawn "ghostty"
} }
Mod+B {
spawn "brave"
}
Mod+D { Mod+D {
spawn "bash" "-c" "quickshell --path ~/repos/projects/nichts/modules/style/quickshell/shell msg launcher open" spawn "bash" "-c" "quickshell --path ~/repos/projects/nichts/modules/style/quickshell/shell msg launcher open"
} }

View file

@ -15,21 +15,19 @@ in {
# or with unexpected env vars set from wrappers. # or with unexpected env vars set from wrappers.
# See #160923 for more info. # See #160923 for more info.
xdgOpenUsePortal = true; xdgOpenUsePortal = true;
extraPortals = extraPortals = [
[
pkgs.xdg-desktop-portal-gtk pkgs.xdg-desktop-portal-gtk
pkgs.kdePackages.xdg-desktop-portal-kde pkgs.kdePackages.xdg-desktop-portal-kde
] pkgs.kdePackages.kwallet
++ (
optional config.programs.niri.enable
pkgs.xdg-desktop-portal-gnome pkgs.xdg-desktop-portal-gnome
) ];
++ (
optional config.programs.hyprland.enable
pkgs.xdg-desktop-portal-hyprland
);
config = { config = {
hyprland.default = mkIf config.programs.hyprland.enable ["*"]; common = {
"org.freedesktop.impl.portal.Secret" = [
"kwallet"
];
"org.freedesktop.secrets" = ["kwalletd6"];
};
niri = { niri = {
default = [ default = [
"gnome" "gnome"
@ -44,6 +42,4 @@ in {
}; };
}; };
}; };
environment.variables = {
};
} }

View file

@ -29,11 +29,11 @@ in {
NIXOS_XDG_OPEN_USE_PORTAL = "1"; NIXOS_XDG_OPEN_USE_PORTAL = "1";
XDG_CURRENT_DESKTOP = "Hyprland"; XDG_CURRENT_DESKTOP = "niri";
XDG_SESSION_DESKTOP = "Hyprland"; XDG_SESSION_DESKTOP = "niri";
XDG_SESSION_TYPE = "wayland"; XDG_SESSION_TYPE = "wayland";
ELECTRON_OZONE_PLATFORM_HINT = "wayland"; ELECTRON_OZONE_PLATFORM_HINT = "auto";
LIBSEAT_BACKEND = "logind"; LIBSEAT_BACKEND = "logind";
}; };

View file

@ -3,15 +3,7 @@
pkgs, pkgs,
}: let }: let
inherit (pkgs) lib; inherit (pkgs) lib;
helix = let helix = pkgs.callPackage ./helix {};
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;};
kakoune = pkgs.callPackage ./kakoune.nix {}; kakoune = pkgs.callPackage ./kakoune.nix {};
fish = pkgs.callPackage ./fish {inherit lib;}; fish = pkgs.callPackage ./fish {inherit lib;};
in { in {

View file

@ -1,12 +1,8 @@
{ {
symlinkJoin,
makeWrapper,
callPackage,
fetchzip,
rustPlatform,
alejandra, alejandra,
basedpyright, basedpyright,
bash-language-server, bash-language-server,
callPackage,
clang-tools, clang-tools,
clippy, clippy,
cmake-format, cmake-format,
@ -14,57 +10,55 @@
deadnix, deadnix,
deno, deno,
dprint, dprint,
fetchzip,
formats, formats,
gdb, gdb,
golangci-lint-langserver, golangci-lint-langserver,
gopls, gopls,
helix,
kdePackages, kdePackages,
kdlfmt, kdlfmt,
lazygit, lazygit,
lib, lib,
lldb_19, lldb_19,
makeWrapper,
nixd, nixd,
ruff, ruff,
rust-analyzer, rust-analyzer,
rustPlatform,
rustfmt, rustfmt,
shellcheck, shellcheck,
shfmt, shfmt,
simple-completion-language-server, simple-completion-language-server,
superhtml, superhtml,
symlinkJoin,
taplo, taplo,
tinymist, tinymist,
typescript-language-server, typescript-language-server,
vscode-langservers-extracted, vscode-langservers-extracted,
zls, zls,
helix,
... ...
}: let }: let
inherit (lib.meta) getExe; inherit (lib.meta) getExe;
custom-helix = custom-helix =
(helix.override {inherit rustPlatform;}).overrideAttrs helix.overrideAttrs
(finalAttrs: previousAttrs: { (finalAttrs: previousAttrs: {
version = "25.07.1"; version = "25.07.2";
src = fetchzip { src = fetchzip {
url = "https://github.com/bloxx12/helix/releases/download/${finalAttrs.version}/helix-${finalAttrs.version}-source.tar.xz"; 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; stripRoot = false;
}; };
RUSTFLAGS = "-Ctarget-cpu=native";
doInstallCheck = false; doInstallCheck = false;
cargoDeps = rustPlatform.fetchCargoVendor { cargoDeps = rustPlatform.fetchCargoVendor {
inherit (custom-helix) src; 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 {}; toml = formats.toml {};
helix-languages = callPackage ./languages.nix {inherit lib;}; helix-languages = callPackage ./languages.nix {inherit lib;};
@ -93,6 +87,10 @@
mouse = true; mouse = true;
bufferline = "multiple"; bufferline = "multiple";
soft-wrap.enable = true; soft-wrap.enable = true;
word-completion = {
enable = true;
trigger-length = 2;
};
cursor-shape = { cursor-shape = {
insert = "bar"; insert = "bar";
normal = "block"; normal = "block";

View file

@ -17,7 +17,6 @@
nil, nil,
ruff, ruff,
shfmt, shfmt,
simple-completion-language-server,
typescript-language-server, typescript-language-server,
vscode-langservers-extracted, vscode-langservers-extracted,
zls, zls,
@ -29,17 +28,17 @@
# a newer nil version, for pipes support. # a newer nil version, for pipes support.
new-nil = nil.overrideAttrs (_: { new-nil = nil.overrideAttrs (_: {
version = "unstable-02-06-2025"; version = "unstable-18-07-2025";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "oxalica"; owner = "oxalica";
repo = "nil"; repo = "nil";
rev = "577d160da311cc7f5042038456a0713e9863d09e"; rev = "524ae2d67dd84d99a10f409ed6cd8e4e7b3cae3f";
hash = "sha256-ggXU3RHv6NgWw+vc+HO4/9n0GPufhTIUjVuLci8Za8c="; hash = "sha256-Uy2qzd+fMoBcp4NPSO7DavEC1pGMegmAqoEMvmXbIQU=";
}; };
cargoDeps = rustPlatform.fetchCargoVendor { cargoDeps = rustPlatform.fetchCargoVendor {
inherit (new-nil) src; inherit (new-nil) src;
hash = "sha256-uZsLlFU9GKLvFllF7Kf5Q7HfN26KQojf4rvOb9p7Rjs="; hash = "sha256-Sljr3ff8hl/qm/0wqc1GXsEr1wWn7NAXmdrd5wHzUX8=";
}; };
}); });
@ -90,12 +89,6 @@
auto-format = true; auto-format = true;
language-servers = ["dprint" "typescript-language-server"]; language-servers = ["dprint" "typescript-language-server"];
} }
{
name = "jjdescription";
scope = "source.jjdescription";
file-types = ["jjdescription"];
language-servers = ["scls"];
}
{ {
name = "json"; name = "json";
formatter = mark "json"; formatter = mark "json";
@ -104,11 +97,11 @@
name = "markdown"; name = "markdown";
auto-format = true; auto-format = true;
formatter = mark "md"; formatter = mark "md";
language-servers = ["scls" "taplo"]; language-servers = ["taplo"];
} }
{ {
name = "nix"; name = "nix";
language-servers = ["nil" "scls" "deadnix"]; language-servers = ["nil"];
} }
{ {
name = "qml"; name = "qml";
@ -172,12 +165,27 @@
}; };
rust-analyzer = { rust-analyzer = {
config = { config.rust-analyzer = {
checkOnSave.command = "clippy";
procMacro.enable = true;
cargo = {
loadOutDirsFromCheck = true;
features = "all";
};
assist = {
preferSelf = true;
};
check = { check = {
command = "clippy"; command = "clippy";
extraArgs = ["--" "-W" "clippy::pedantic" "-W" "clippy::nursery" "-W" "clippy::perf"]; 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 = { nil = {
command = getExe new-nil; command = getExe new-nil;
# alejandro # 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 = { deadnix = {
command = getExe new-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 = { typescript-language-server = {
command = getExe typescript-language-server; command = getExe typescript-language-server;
args = ["--stdio"]; args = ["--stdio"];