Compare commits
27 commits
42b2f14173
...
378828b856
Author | SHA1 | Date | |
---|---|---|---|
378828b856 |
|||
d3d266bf9b |
|||
6a0ecd3fe7 |
|||
683509d009 |
|||
04e8033af3 |
|||
b82a3580ec |
|||
8c6b9f65c9 |
|||
f813eb37d3 |
|||
484bddd03b |
|||
0fa9bee865 |
|||
327f149a42 |
|||
655626c237 |
|||
ef617f52db |
|||
fa71542fe2 |
|||
89ca8e59b3 |
|||
9750c64d9c |
|||
dee3cc7745 |
|||
598e92640e |
|||
681cd8a453 |
|||
098f38e9a4 |
|||
33f6b08982 |
|||
98690011c4 |
|||
574c0d2db1 |
|||
3ab2613290 |
|||
fba74410c0 |
|||
a64d7571d8 |
|||
c9da7d036b |
40 changed files with 354 additions and 300 deletions
21
TODO.md
21
TODO.md
|
@ -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
35
flake.lock
generated
|
@ -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,
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -32,7 +32,6 @@ in {
|
||||||
microfetch
|
microfetch
|
||||||
mprocs
|
mprocs
|
||||||
nmap
|
nmap
|
||||||
polkit
|
|
||||||
ripgrep
|
ripgrep
|
||||||
smartmontools
|
smartmontools
|
||||||
television
|
television
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
|
||||||
;
|
;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 = {
|
||||||
|
|
|
@ -32,7 +32,6 @@
|
||||||
microfetch
|
microfetch
|
||||||
nmap
|
nmap
|
||||||
pfetch
|
pfetch
|
||||||
polkit
|
|
||||||
ripgrep
|
ripgrep
|
||||||
smartmontools
|
smartmontools
|
||||||
util-linux
|
util-linux
|
||||||
|
|
|
@ -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"];
|
||||||
|
|
34
modules/programs/gui/bitwarden.mod.nix
Normal file
34
modules/programs/gui/bitwarden.mod.nix
Normal 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";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -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"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
17
modules/programs/gui/dolphin.mod.nix
Normal file
17
modules/programs/gui/dolphin.mod.nix
Normal 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)
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
|
@ -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";
|
||||||
|
|
|
@ -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}"
|
||||||
|
|
|
@ -10,8 +10,7 @@ in {
|
||||||
services.spotifyd = mkIf isGraphical {
|
services.spotifyd = mkIf isGraphical {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
};
|
backend = "pipe";
|
||||||
config = {
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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];
|
||||||
|
|
|
@ -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;};
|
||||||
|
|
|
@ -34,7 +34,10 @@ in {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config =
|
config = mkIf cfg.enable {
|
||||||
mkIf cfg.enable {
|
qt = {
|
||||||
|
enable = true;
|
||||||
|
platformTheme = "qt5ct";
|
||||||
};
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -1,103 +1,105 @@
|
||||||
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
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
easing.type: Easing.OutCubic
|
||||||
width: parent.width * audioPopup.sink.audio.volume
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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() {
|
function init() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,
|
||||||
|
|
25
modules/style/quickshell/shell/config/Colors.qml
Normal file
25
modules/style/quickshell/shell/config/Colors.qml
Normal 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"
|
||||||
|
}
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
|
||||||
//
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
9
modules/system/system.mod.nix
Normal file
9
modules/system/system.mod.nix
Normal 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";
|
||||||
|
}
|
|
@ -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"
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
]
|
pkgs.xdg-desktop-portal-gnome
|
||||||
++ (
|
];
|
||||||
optional config.programs.niri.enable
|
|
||||||
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 = {
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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";
|
||||||
};
|
};
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -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"];
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue