move desktop shit again

This commit is contained in:
Schrottkatze 2025-03-27 20:28:36 +01:00
parent df0ffea214
commit 500c18b76a
Signed by: schrottkatze
SSH key fingerprint: SHA256:FPOYVeBy3QP20FEM42uWF1Wa/Qhlk+L3S2+Wuau/Auo
41 changed files with 69 additions and 69 deletions

20
modules/desktop/audio.nix Normal file
View file

@ -0,0 +1,20 @@
{pkgs, ...}: {
programs = {
noisetorch.enable = true;
};
services = {
pipewire = {
enable = true;
alsa.enable = true;
pulse.enable = true;
jack.enable = true;
};
};
environment.systemPackages = with pkgs; [
pavucontrol
volumeicon
playerctl
helvum
];
}

View file

@ -1,57 +1,15 @@
{
config,
lib,
pkgs,
...
}:
with lib; {
{...}: {
imports = [
./gaming.nix
./syncthing.nix
./kdeconnect.nix
./social.nix
./audio.nix
./home
./dm.nix
./tlp.nix
./locale.nix
./printing.nix
./themeing.nix
];
programs.seahorse.enable = true;
security.pam.services.jade.enableGnomeKeyring = true;
virtualisation.libvirtd.enable = true;
programs.xss-lock = {
enable = true;
lockerCommand = "${pkgs.i3lock}/bin/i3lock -c 1d2021";
};
services.flatpak.enable = true;
security.polkit.enable = true;
services.illum.enable = true;
services.avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
services.smartd = {
enable = true;
notifications.test = true;
};
home-manager.users.jade = {pkgs, ...}: {
programs.ssh = {
controlMaster = "yes";
};
home.packages = with pkgs; [
just
bacon
magic-wormhole-rs
# filemanager
xfce.thunar
xfce.tumbler
xfce.thunar-archive-plugin
file-roller
# from environment.systemPackages cleanup
virt-manager
ddccontrol-db
];
};
services.upower.enable = true;
}

33
modules/desktop/dm.nix Normal file
View file

@ -0,0 +1,33 @@
{
pkgs,
config,
lib,
...
}: let
cfg = config.jade.desktop.dm;
in
with lib; {
options.jade.desktop.dm.autoLogin = {
enable = mkEnableOption "Enable Autologin";
delay = mkOption {
type = types.int;
default = 0;
};
};
config.services = {
displayManager = {
autoLogin = {
enable = cfg.autoLogin.enable;
user = "jade";
};
defaultSession = "niri";
};
xserver.displayManager.gdm = {
enable = true;
banner = "Meow :3";
autoLogin = {
delay = cfg.autoLogin.delay;
};
};
};
}

View file

@ -1,24 +0,0 @@
{
config,
lib,
...
}: let
cfg = config.jade.desktop.gaming;
in
with lib; {
options.jade.desktop.gaming = {
enable = mkEnableOption "Enable gaming stuff";
};
config = mkIf cfg.enable {
programs.steam.enable = true;
home-manager.users.jade = {pkgs, ...}: {
home.packages = with pkgs; [
lutris
prismlauncher
wineWowPackages.stable
dxvk_2
vkd3d-proton
];
};
};
}

View file

@ -0,0 +1,355 @@
{pkgs, ...}: {
home.file = {
".tridactylrc" = {
text = ''
set editorcmd kitty hx %f +%l
set newtab about:blank
'';
};
};
programs.firefox = {
enable = true;
package = pkgs.firefox.override {
nativeMessagingHosts = [
pkgs.tridactyl-native
];
};
policies = {
DefaultDownloadDirectory = "\${home}/Downloads";
Extensions.Install = builtins.map (name: "https://addons.mozilla.org/firefox/downloads/latest/${name}") [
"ublock-origin"
"tridactyl-vim"
"privacy-badger17"
"gruvbox-dark-theme"
"torproject-snowflake"
"bitwarden-password-manager"
"terms-of-service-didnt-read"
"shinigami-eyes"
"darkreader"
"sponsorblock"
"youtube-mrbeastify"
"return-youtube-dislikes"
"multi-account-containers"
"tabby-cat-friend"
"indie-wiki-buddy"
];
Extensions.Uninstall = [
"google@search.mozilla.org"
"bing@search.mozilla.org"
"amazondotcom@search.mozilla.org"
"ebay@search.mozilla.org"
"twitter@search.mozilla.org"
];
"DisableFirefoxStudies" = true;
"DisableTelemetry" = true;
"DisableFeedbackCommands" = true;
"DisablePocket" = true;
};
profiles.jade = {
search = {
force = true;
default = "DuckDuckGo";
engines = {
"Nix Packages" = {
urls = [
{
template = "https://search.nixos.org/packages";
params = [
{
name = "query";
value = "{searchTerms}";
}
];
}
];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = ["pkgs"];
};
"Nix Options" = {
urls = [
{
template = "https://search.nixos.org/options";
params = [
{
name = "query";
value = "{searchTerms}";
}
];
}
];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = ["opts"];
};
"Home manager Options" = {
urls = [
{
template = "https://home-manager-options.extranix.com/";
params = [
{
name = "query";
value = "{searchTerms}";
}
{
name = "release";
value = "master";
}
];
}
];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = ["hm"];
};
"NixOS Wiki" = {
urls = [
{
template = "https://nixos.wiki/index.php";
params = [
{
name = "search";
value = "{searchTerms}";
}
];
}
];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = ["nxwk"];
};
"Noogle" = {
urls = [
{
template = "https://noogle.dev/q";
params = [
{
name = "term";
value = "{searchTerms}";
}
];
}
];
definedAliases = ["ngl"];
};
"lib.rs" = {
urls = [
{
template = "https://lib.rs/search";
params = [
{
name = "q";
value = "{searchTerms}";
}
];
}
];
icon = "https://lib.rs/favicon.png";
definedAliases = ["libs"];
};
"rust docs" = {
urls = [
{
template = "https://docs.rs/releases/search";
params = [
{
name = "query";
value = "{searchTerms}";
}
];
}
];
icon = "https://docs.rs/-/static/favicon.ico";
definedAliases = ["docs"];
};
"rust docs direct open" = {
urls = [
{
template = "https://docs.rs/{searchTerms}";
}
];
definedAliases = ["doc" "docd"];
};
"rust std docs" = {
urls = [
{
template = "https://docs.rust-lang.org/std/index.html";
params = [
{
name = "search";
value = "{searchTerms}";
}
];
}
];
icon = "https://doc.rust-lang.org/favicon.ico";
definedAliases = ["std"];
};
"MDN" = {
urls = [
{
template = "https://developer.mozilla.org/search";
params = [
{
name = "q";
value = "{searchTerms}";
}
];
}
];
};
"Bing".metaData.hidden = true;
"Google".metaData.hidden = true;
"Amazon.de".metaData.hidden = true;
};
};
settings = {
"devtools.editor.keymap" = "vim";
"devtools.toolbox.host" = "right";
"devtools.theme" = "dark";
"webgl.disabled" = false;
"browser.urlbar.decodeURLsOnCopy" = true;
"browser.urlbar.unitConversion.enabled" = true;
"browser.urlbar.suggest.calculator" = true;
"browser.compactmode.show" = true;
"browser.uidensity" = 1;
"screenshots.browser.component.enabled" = true;
"browser.aboutConfig.showWarning" = false;
"browser.aboutwelcome.showModal" = false;
"browser.aboutwelcome.enabled" = false;
"browser.preferences.moreFromMozilla" = false;
"browser.menu.showViewImageInfo" = true;
"browser.shopping.experience2023.active" = false;
"browser.shopping.experience2023.survey.enabled" = false;
"identity.fxaccounts.enabled" = true;
"browser.tabs.firefox-view" = true;
"browser.tabs.firefox-view-next" = true;
"browser.newtabpage.activity-stream.showSponsored" = false;
"browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
"browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts" = false;
"privacy.trackingprotection.emailtracking.enabled" = true;
"privacy.trackingprotection.enabled" = true;
"privacy.trackingprotection.socialtracking.enabled" = true;
"browser.ml.chat.enabled" = false;
"browser.ml.chat.hideLocalhost" = false;
"browser.ml.chat.prompt.prefix" = "";
"browser.ml.chat.prompts.0" = "";
"browser.ml.chat.prompts.1" = "";
"browser.ml.chat.prompts.2" = "";
"browser.ml.chat.prompts.3" = "";
"browser.ml.chat.provider" = "";
"browser.ml.chat.shortcuts" = false;
"browser.ml.chat.shortcuts.custom" = false;
"browser.ml.chat.shortcuts.longPress" = "";
"browser.ml.chat.sidebar" = false;
"geo.provider.network.logging.enabled" = true;
"extensions.getAddons.showPane" = false;
"extensions.htmlaboutaddons.recommendations.enabled" = false;
"browser.discovery.enabled" = false;
"browser.shopping.experience2023.enabled" = false;
"datareporting.policy.dataSubmissionEnabled" = false;
"datareporting.healthreport.uploadEnabled" = false;
"toolkit.telemetry.unified" = false;
"toolkit.telemetry.enabled" = false;
"toolkit.telemetry.server" = "data:,";
"toolkit.telemetry.archive.enabled" = false;
"toolkit.telemetry.newProfilePing.enabled" = false;
"toolkit.telemetry.shutdownPingSender.enabled" = false;
"toolkit.telemetry.updatePing.enabled" = false;
"toolkit.telemetry.bhrPing.enabled" = false;
"toolkit.telemetry.firstShutdownPing.enabled" = false;
"toolkit.telemetry.coverage.opt-out" = true;
"toolkit.coverage.opt-out" = true;
"toolkit.coverage.endpoint.base" = "";
"browser.ping-centre.telemetry" = false;
"browser.newtabpage.activity-stream.feeds.telemetry" = false;
"browser.newtabpage.activity-stream.telemetry" = false;
"app.shield.optoutstudies.enabled" = false;
"app.normandy.enabled" = false;
"app.normandy.api_url" = "";
"dom.private-attribution.submission.enabled" = false;
"browser.newtabpage.activity-stream.feeds.showWeather" = false;
"browser.newtabpage.activity-stream.feeds.weatherfeed" = false;
"browser.safebrowsing.malware.enabled" = false;
"browser.safebrowsing.phishing.enabled" = false;
"browser.safebrowsing.downloads.enabled" = false;
"browser.safebrowsing.downloads.remote.enabled" = false;
"browser.safebrowsing.downloads.remote.url" = "";
"browser.safebrowsing.downloads.remote.block_potentially_unwanted" = false;
"browser.safebrowsing.downloads.remote.block_uncommon" = false;
"browser.safebrowsing.allowOverride" = false;
"network.prefetch-next" = false;
"network.dns.disablePrefetch" = true;
"network.dns.disablePrefetchFromHTTPS" = true;
"network.predictor.enabled" = false;
"network.predictor.enable-prefetch" = false;
"network.http.speculative-parallel-limit" = 0;
"browser.places.speculativeConnect.enabled" = false;
"browser.send_pings" = false;
"browser.urlbar.pocket.featureGate" = false;
"browser.urlbar.weather.featureGate" = false;
"browser.urlbar.speculativeConnect.enabled" = false;
"browser.urlbar.suggest.quicksuggest.nonsponsored" = false;
"browser.urlbar.suggest.quicksuggest.sponsored" = false;
"browser.search.suggest.enabled" = false;
"browser.urlbar.suggest.searches" = false;
"browser.urlbar.trending.featureGate" = false;
"security.ssl.require_safe_negotiation" = true;
"security.remote_settings.crlite_filters.enabled" = true;
"security.pki.crlite_mode" = 2;
"dom.security.https_only_mode" = true;
"dom.security.https_only_mode_pbm" = true;
"security.ssl.treat_unsafe_negotiation_as_broken" = true;
"browser.xul.error_pages.expert_bad_cert" = true;
"network.http.referer.XOriginTrimmingPolicy" = 2;
"privacy.userContext.enabled" = true;
"privacy.userContext.ui.enabled" = true;
"privacy.userContext.newTabContainerOnLeftClick.enabled" = true;
"dom.disable_window_move_resize" = true;
"browser.uitour.enabled" = false;
"browser.uitour.url" = "";
"permissions.manager.defaultsUrl" = "";
"webchannel.allowObject.urlWhitelist" = "";
"network.IDN_show_punycode" = true;
"pdfjs.disabled" = false;
"pdfjs.enableScripting" = false;
"browser.tabs.searchclipboardfor.middleclick" = false;
"browser.download.useDownloadDir" = false;
"browser.download.alwaysOpenPanel" = false;
"browser.download.manager.addToRecentDocs" = false;
"browser.download.always_ask_before_handling_new_types" = true;
"privacy.resistFingerprinting" = true;
"privacy.resistFingerprinting.pbmode" = true;
"privacy.window.maxInnerWidth" = 1600;
"privacy.window.maxInnerHeight" = 900;
"privacy.resistFingerprinting.block_mozAddonManager" = true;
"privacy.resistFingerprinting.letterboxing" = false;
"widget.non-native-theme.enabled" = true;
"browser.link.open_newwindow" = 3;
"browser.link.open_newwindow.restriction" = 0;
"signon.rememberSignons" = false;
"dom.popup_allowed_events" = "click dblclick mousedown pointerdown";
"browser.pagethumbnails.capturing_disabled" = true;
"geo.enabled" = false;
"full-screen-api.enabled" = false;
"permissions.default.geo" = 0;
"permissions.default.camera" = 0;
"permissions.default.microphone" = 0;
"permissions.default.desktop-notification" = 0;
"permissions.default.xr" = 0;
};
};
};
}

View file

@ -0,0 +1,30 @@
{...}: {
programs.niri.enable = true;
home-manager.users.jade = {pkgs, ...}: {
imports = [
./notifications.nix
./terminal.nix
./layaway.nix
./swayidle.nix
./browser.nix
./eww
./niri
];
# temporary(tm)
programs.wofi.enable = true;
programs.swaylock.enable = true;
services.network-manager-applet.enable = true;
xsession.enable = true;
home.packages = [
pkgs.fluent-reader
];
services.gpg-agent = {
enable = true;
enableNushellIntegration = true;
enableSshSupport = true;
};
};
}

View file

@ -0,0 +1,77 @@
(include "bottomBar/workspaces.yuck")
(include "bottomBar/traveldings.yuck")
(defwindow bottomBar
:monitor 0
:stacking "fg"
:wm-ignore true
:exclusive true
:geometry (geometry
:width "100%"
:height "33px"
:anchor "bottom center")
(bottomBar))
(defwidget bottomBar []
(overlay
:class "bottomBar"
(transform
:translate-y "1.5px"
(centerbox
(box
:halign "start"
(workspaceWidget)
)
(box
:halign "center"
(traveldings)
)
(box
:halign "end"
; (label :text "${iceData.speed}km/h")
(mullvadThing)
)
)
)
(box
:class "lesbianFlag"
:height 1
( flagEl :flipped true :color "#D52D00")
( flagEl :flipped true :color "#EF7627")
( flagEl :flipped true :color "#FF9A56")
( flagEl :flipped true :color "#FFFFFF")
( flagEl :flipped true :color "#D162A4")
( flagEl :flipped true :color "#B55690")
( flagEl :flipped true :color "#A30262")
)
)
)
(deflisten mullvad
:initial "{\"state\":\"init\"}"
`mullvad status -j listen`
)
(defwidget mullvadThing []
(box
:class "container"
(button
:height 16
:width 16
:class "mullvad-state-${mullvad.state}"
)
)
)
(defwidget iceTacho []
(box
:class "iceTacho"
:tooltip "Tz${iceTachoData.tzn} (BR ${iceTachoData.br})"
(label :text "${iceTachoData.speed} km/h")
)
)
(deflisten iceTachoData
:initial "null"
{ "~/.config/eww/scripts/iceTacho.nu" }
)

View file

@ -0,0 +1,37 @@
(defwidget traveldings []
(revealer
:class "traveldings"
:transition "crossfade"
:reveal { traveldings_data != "null" }
(traveldingsBarWidget)
)
)
(defwidget traveldingsBarWidget []
(overlay
(box
:width 640
(label
:halign "start"
:text "${traveldings_data.line} -> ${strlength(traveldings_data.arrival_station) > 24 ? "${substring(traveldings_data.arrival_station, 0, 24)}…" : traveldings_data.arrival_station}${traveldings_data.arrival_platform_data_available ? " (Gl. ${traveldings_data.arrival_platform_real})" : ""}"
)
(label
:halign "end"
:text { traveldings_data.time_left >= 3600 ? formattime(traveldings_data.time_left, "noch %-Hh %-Mmin", "Etc/UTC") : formattime(traveldings_data.time_left, "noch %-Mmin", "Etc/UTC") }
)
)
(box
(progress
:class { traveldings_data.live ? "traveldings_live" : "traveldings_disconnected" }
:value {traveldings_data.progress * 100}
:orientation "horizontal"
)
)
)
)
(deflisten traveldings_data
:initial "null"
"traveldings current"
)

View file

@ -0,0 +1,18 @@
(defwidget workspaceWidget []
(box
:class "workspaces"
(for workspace in workspaces
(button
:style "border-bottom: 4px solid ${workspace.color}${workspace.active ? "; background-color: #3c3836" : ""}"
:class "${workspace.focused ? "focused" : ""}"
:onclick "swaymsg workspace ${workspace.name}"
(label :text "${workspace.idx}")
)
)
)
)
(deflisten workspaces
:initial "[]"
"bar-ws-monitor"
)

View file

@ -0,0 +1,58 @@
label {
font: 14pt "Departure Mono Nerd Font";
}
button {
border-radius: 0px;
padding: 0;
}
.background {
background-color: #1d2021;
}
.workspaces button {
border: 0px;
padding: 0 3px;
}
.workspaces button.focused {
background-color: #504935;
}
.traveldings progressbar trough {
border: none;
background-color: #3c3836;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.traveldings progressbar.traveldings_live progress {
background-color: #79740e;
border-bottom-left-radius: 0;
}
.traveldings progressbar.traveldings_disconnected progress {
background-color: #cc241d;
}
.traveldingsWindow {
border-radius: 15px;
}
.mullvad-state-connected {
background-color: #98971a
}
.mullvad-state-connecting {
background-color: #d79921
}
.mullvad-state-disconnected {
background-color: #cc241d
}
.mullvad-state-init {
background-color: #458588
}

View file

@ -0,0 +1,2 @@
(include "topBar/topBar.yuck")
(include "bottomBar/bottomBar.yuck")

View file

@ -0,0 +1,78 @@
#!/usr/bin/env nu
const ICONS = [
[ normal charging];
[ 󰂎 󰢟 ]
[ 󰁺 󰢜 ]
[ 󰁻 󰂆 ]
[ 󰁼 󰂇 ]
[ 󰁽 󰂈 ]
[ 󰁾 󰢝 ]
[ 󰁿 󰂉 ]
[ 󰂀 󰢞 ]
[ 󰂁 󰂊 ]
[ 󰂂 󰂋 ]
[ 󰁹 󰂅 ]
];
const DELAY = 2sec;
def "main auto" [] {
loop {
let paths = ls "/sys/class/power_supply"
| each {|it| $it.name | path basename}
| filter {|it| $it starts-with "BAT"};
if ($paths | is-not-empty) {
let result = $paths
| each {|it| get_and_format $it}
| str join " | "
| prepend "| "
| str join;
print $result
} else {
print ""
}
sleep $DELAY;
}
}
def main [ path: string ] {
loop {
print (get_and_format $path)
sleep $DELAY;
}
}
def get_and_format [ path: string ] {
let fract = get_bat_charge_fraction $path;
let is_charging = get_bat_charging_status $path;
let percent = ($fract * 100) | math round;
return $"<span foreground=\"#d65d0e\">(get_bat_icon $fract $is_charging)</span> ($percent)<span foreground=\"#7c6f64\">%</span>";
}
def get_bat_charge_fraction [
path: string
] {
let energy_full = open $"/sys/class/power_supply/($path)/energy_full" | into float;
let energy_now = open $"/sys/class/power_supply/($path)/energy_now" | into float;
$energy_now / $energy_full
}
def get_bat_charging_status [
path: string
] {
let status = open $"/sys/class/power_supply/($path)/status";
$status like Charging
}
def get_bat_icon [
frac: float
is_charging = false
] {
$ICONS | get (($frac * 10) | math round) | get (if ($is_charging) { "charging" } else { "normal" })
}

View file

@ -0,0 +1,38 @@
#!/usr/bin/env nu
const TABLE = {
401: 280
402: 280
403: 330
406: 330
407: 320
408: 320
411: 230
415: 230
412: 265
605: 200
};
def main [ ] {
loop {
if ((iw dev wlp4s0 link | lines | filter {|it| $it =~ "WIFIonICE" } | length) == 1) {
let iceData = http get https://iceportal.de/api1/rs/status;
let tzn = $iceData.tzn;
let br = $iceData.series;
let speed = $iceData.speed;
let speedfrac = $speed / ($TABLE | get $br);
print ({
tzn: $tzn,
br: $br,
speed: $speed,
frac: $speedfrac
} | to json -r);
sleep 2sec;
} else {
print "null";
sleep 5sec;
}
}
}

View file

@ -0,0 +1,23 @@
(deflisten bat
:initial "<span foreground=\"#cc241d\">BAT0 ERR</span>"
{ "~/.config/eww/scripts/bat.nu auto"}
)
(defwidget cpu []
(box
:class "cpuIndicator"
(label
:markup "<span foreground=\"#d65d0e\"></span> ${strlength(round(EWW_CPU.avg, 0)) == 1 ? " ${round(EWW_CPU.avg, 0)}" : round(EWW_CPU.avg, 0)}<span foreground=\"#7c6f64\">%</span>"
)
)
)
(defwidget mem []
(box
:class "memIndicator"
(label
:markup "<span foreground=\"#d65d0e\"> </span> ${round(EWW_RAM.used_mem_perc, 0)}<span foreground=\"#7c6f64\">%</span>"
)
)
)

View file

@ -0,0 +1,10 @@
(defwidget time []
(label
:markup {
formattime(
EWW_TIME,
"<span foreground=\"#d65d0e\"></span> %Y<span foreground=\"#7c6f64\">-</span>%m<span foreground=\"#7c6f64\">-</span>%d <span foreground=\"#d65d0e\"></span> %H<span foreground=\"#7c6f64\">:</span>%M<span foreground=\"#7c6f64\">:</span>%S "
)
}
)
)

View file

@ -0,0 +1,55 @@
(include "topBar/time.yuck")
(include "topBar/sysinfo.yuck")
(include "util.yuck")
(defwindow topBar
:monitor 0
:stacking "fg"
:wm-ignore true
:exclusive true
:geometry (geometry
:width "100%"
:height "33px"
:anchor "top center")
(topBar))
(defwidget topBar []
(overlay
:class "topBar"
(transform
:translate-y "-1.5px"
(centerbox
(box
:halign "start"
:spacing 12
:space-evenly false
(label :text " ")
(cpu)
(sep)
(mem)
(label :markup bat)
)
(box
:halign "center"
(systray
:icon-size 18
:spacing 3
)
)
(box
:halign "end"
(time)
)
)
)
(box
:class "transFlag"
:height 1
( flagEl :flipped false :color "#5BCEFA")
( flagEl :flipped false :color "#F5A9B8")
( flagEl :flipped false :color "#FFFFFF")
( flagEl :flipped false :color "#F5A9B8")
( flagEl :flipped false :color "#5BCEFA")
)
)
)

View file

@ -0,0 +1,11 @@
(defwidget flagEl [color ?flipped]
(box
:style "border-${flipped ? "top" : "bottom"}: 3px solid ${color}"
:halign "fill"
)
)
(defwidget sep []
(label :text "|")
)

View file

@ -0,0 +1,6 @@
{ ... }: {
programs.eww = {
enable = true;
configDir = ./configDir;
};
}

View file

@ -0,0 +1,29 @@
{
pkgs,
lib,
...
}: let
# stolen: https://github.com/MultisampledNight/core/blob/678f176cb24f5dc4b5dc629cfd3e643487be01bb/system/packages/layaway/default.nix#L7-L25
layaway = pkgs.rustPlatform.buildRustPackage rec {
pname = "layaway";
version = "0.2.0";
src = pkgs.fetchFromGitHub {
owner = "MultisampledNight";
repo = pname;
rev = "v${version}";
hash = "sha256-SzAuVFEy56svasO3+1p6ysBRrIQd0UZX++/P4ZuwWm0=";
};
useFetchCargoVendor = true;
cargoHash = "sha256-QVxlkE+sq4U048LnshI/tq6HInKiSgjQLAdR+27/wEI=";
meta = with lib; {
description = "Layout creation for Sway via a relative and human-readable DSL.";
homepage = "https://github.com/MultisampledNight/layaway";
maintainers = [maintainers.multisn8];
};
};
in {
home.packages = [layaway];
}

View file

@ -0,0 +1,90 @@
{pkgs, ...}: {
programs.niri.settings.binds = {
# spawn terminal
"Mod+Return".action.spawn = "kitty";
"Mod+Return".repeat = false;
"Mod+D".action.spawn = ["wofi" "-S" "drun" "--allow-images"];
"Mod+D".repeat = false;
"Mod+I".action.spawn = ["${pkgs.rofimoji}/bin/rofimoji" "--selector" "wofi" "-f" "alchemical_symbols" "anatolian_hieroglyphs" "emojis" "braille_patterns" "box_drawing" "chess_symbols" "emoticons" "geometric_shapes" "gothic" "greek_extended" "math" "mathematical_alphanumeric_symbols" "mathematical_operators" "miscellaneous_symbols" "miscellaneous_mathematical_symbols-a" "miscellaneous_mathematical_symbols-b" "miscellaneous_symbols_and_arrows" "miscellaneous_symbols_and_pictographs" "miscellaneous_technical" "modi" "modifier_tone_letters" "musical_symbols" "nerd_font" "number_forms" "shorthand_format_controls" "specials" "variation_selectors" "vertical_forms" "-a" "copy"];
"Mod+Shift+E".action.quit = [];
"Mod+Shift+Q".action.close-window = [];
"Mod+Shift+P".action.power-off-monitors = [];
"Mod+Shift+Ctrl+Slash".action.toggle-keyboard-shortcuts-inhibit = [];
"Mod+Shift+Ctrl+Slash".allow-inhibiting = false;
"Mod+Shift+Slash".action.show-hotkey-overlay = [];
# window/columns controls
"Mod+H".action.focus-column-left = [];
"Mod+J".action.focus-window-down = [];
"Mod+K".action.focus-window-up = [];
"Mod+L".action.focus-column-right = [];
"Mod+Ctrl+H".action.move-column-left = [];
"Mod+Ctrl+J".action.move-window-down = [];
"Mod+Ctrl+K".action.move-window-up = [];
"Mod+Ctrl+L".action.move-column-right = [];
"Mod+R".action.switch-preset-column-width = [];
"Mod+V".action.toggle-window-floating = [];
"Mod+Shift+V".action.switch-focus-between-floating-and-tiling = [];
# monitor controls
"Mod+Shift+H".action.focus-monitor-left = [];
"Mod+Shift+J".action.focus-monitor-down = [];
"Mod+Shift+K".action.focus-monitor-up = [];
"Mod+Shift+L".action.focus-monitor-right = [];
"Mod+Shift+Ctrl+H".action.move-column-to-monitor-left = [];
"Mod+Shift+Ctrl+J".action.move-column-to-monitor-down = [];
"Mod+Shift+Ctrl+K".action.move-column-to-monitor-up = [];
"Mod+Shift+Ctrl+L".action.move-column-to-monitor-right = [];
# workspace controls
"Mod+P".action.focus-workspace-up = [];
"Mod+N".action.focus-workspace-down = [];
"Mod+Ctrl+P".action.move-column-to-workspace-up = [];
"Mod+Ctrl+N".action.move-column-to-workspace-down = [];
"Mod+1".action.focus-workspace = 1;
"Mod+2".action.focus-workspace = 2;
"Mod+3".action.focus-workspace = 3;
"Mod+4".action.focus-workspace = 4;
"Mod+5".action.focus-workspace = 5;
"Mod+6".action.focus-workspace = 6;
"Mod+7".action.focus-workspace = 7;
"Mod+8".action.focus-workspace = 8;
"Mod+9".action.focus-workspace = 9;
"Mod+Ctrl+1".action.move-column-to-workspace = 1;
"Mod+Ctrl+2".action.move-column-to-workspace = 2;
"Mod+Ctrl+3".action.move-column-to-workspace = 3;
"Mod+Ctrl+4".action.move-column-to-workspace = 4;
"Mod+Ctrl+5".action.move-column-to-workspace = 5;
"Mod+Ctrl+6".action.move-column-to-workspace = 6;
"Mod+Ctrl+7".action.move-column-to-workspace = 7;
"Mod+Ctrl+8".action.move-column-to-workspace = 8;
"Mod+Ctrl+9".action.move-column-to-workspace = 9;
# column editing stuffs
"Mod+BracketLeft".action.consume-or-expel-window-left = [];
"Mod+BracketRight".action.consume-or-expel-window-right = [];
"Mod+F".action.maximize-column = [];
"Mod+Shift+F".action.expand-column-to-available-width = [];
"Mod+Ctrl+F".action.fullscreen-window = [];
"Mod+C".action.center-column = [];
"Mod+Minus".action.set-column-width = "-5%";
"Mod+Equal".action.set-column-width = "+5%";
"Mod+Shift+Minus".action.set-window-height = "-10%";
"Mod+Shift+Equal".action.set-window-height = "+10%";
"Mod+W".action.toggle-column-tabbed-display = [];
# media keys
"XF86AudioRaiseVolume".action.spawn = ["wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"];
"XF86AudioLowerVolume".action.spawn = ["wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"];
"XF86AudioMute".action.spawn = ["wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"];
"XF86AudioMicMute" .action.spawn = ["wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"];
"XF86AudioRaiseVolume".allow-when-locked = true;
"XF86AudioLowerVolume".allow-when-locked = true;
"XF86AudioMute".allow-when-locked = true;
"XF86AudioMicMute" .allow-when-locked = true;
};
}

View file

@ -0,0 +1,29 @@
{pkgs, ...}: {
imports = [
./xwayland-sat.nix
./screenshot.nix
./input.nix
./binds.nix
./style.nix
./privacy.nix
./quirks.nix
];
programs.niri.settings = {
outputs."eDP-1" = {
scale = 1.0;
};
spawn-at-startup = [
{command = ["eww" "open-many" "topBar" "bottomBar"];}
{
command = [
"${pkgs.swaybg}/bin/swaybg"
"-i"
"${./wallpaper.jpg}"
"-m"
"fill"
];
}
];
};
}

View file

@ -0,0 +1,16 @@
{...}: {
programs.niri.settings.input = {
keyboard = {
xkb = {
layout = "us";
variant = "altgr-intl";
};
};
touchpad = {
tap = false;
natural-scroll = true;
dwt = true;
dwtp = true;
};
};
}

View file

@ -0,0 +1,21 @@
{...}: {
programs.niri.settings = {
layer-rules = [
{
matches = [
{namespace = "notifications";}
];
block-out-from = "screen-capture";
}
];
window-rules = [
{
matches = [
{app-id = "^signal|Element|org\.gnome\.Evolution$";}
{title = "^.*(Discord|Beispiel Screenshare block Bug).*$";}
];
block-out-from = "screen-capture";
}
];
};
}

View file

@ -0,0 +1,18 @@
{...}: {
programs.niri.settings = {
window-rules = [
# handle steam grabbing focus 1000 times on startup
{
matches = [
{
app-id = "steam";
}
];
open-focused = false;
}
];
# fix electron apps not doing wayland
environment.ELECTRON_OZONE_PLATFORM_HINT = "auto";
};
}

View file

@ -0,0 +1,13 @@
{pkgs, ...}: {
programs.niri.settings = {
screenshot-path = "~/Pictures/screenshots/%Y-%m-%dT%H:%M:%S.png";
binds = {
"Print".action.screenshot = [];
"Ctrl+Print".action.screenshot-screen = [];
"Shift+Print".action.screenshot-window = [];
"Mod+S".action.screenshot = [];
"Mod+Ctrl+S".action.screenshot-screen = [];
"Mod+Shift+S".action.screenshot-window = [];
};
};
}

View file

@ -0,0 +1,71 @@
{...}: {
programs.niri.settings = {
prefer-no-csd = true;
cursor = {
theme = "phinger-cursors-dark";
size = 16;
hide-when-typing = true;
hide-after-inactive-ms = 10000;
};
layout = {
gaps = 15;
focus-ring.enable = false;
border = {
enable = true;
width = 3;
inactive.gradient = {
from = "#f69ecf";
to = "#ff9a56";
in' = "oklch shorter hue";
relative-to = "window";
angle = 135;
};
active.gradient = {
from = "#f69ecf";
to = "#5bcefa";
in' = "oklch shorter hue";
relative-to = "window";
angle = 135;
};
};
center-focused-column = "never";
empty-workspace-above-first = false;
tab-indicator = {
hide-when-single-tab = true;
active.color = "#5bcefa";
inactive.color = "#3c3836";
gap = 2;
width = 5;
corner-radius= 3;
position = "left";
gaps-between-tabs = 0;
};
};
window-rules = [
{
matches = [{
is-floating = true;
}];
shadow = {
offset.y = 0;
offset.x = 0;
softness = 40;
color = "#bab9e5af";
inactive-color = "#fa9d99af";
enable = true;
};
}
{
geometry-corner-radius = let val = 1.; in {
bottom-left = val;
bottom-right = val;
top-left = val;
top-right = val;
};
clip-to-geometry = true;
}];
};
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 MiB

View file

@ -0,0 +1,8 @@
{pkgs, ...}: {
programs.niri.settings = {
spawn-at-startup = [
{command = ["${pkgs.xwayland-satellite}/bin/xwayland-satellite"];}
];
environment.DISPLAY = ":0";
};
}

View file

@ -0,0 +1,21 @@
{pkgs, ...}: {
home.packages = [
pkgs.libnotify
];
services.dunst = {
enable = true;
settings = {
global = {
dmenu = "${pkgs.rofi}/bin/rofi -theme gruvbox-dark -dmenu -p dunst";
browser = "${pkgs.firefox}/bin/firefox";
mouse_left_click = "context";
mouse_middle_click = "close_current";
background = "#282828";
foreground = "#ebdbb2";
frame_color = "#504945";
frame_width = 2;
font = "Atkinson Hyperlegible";
};
};
};
}

View file

@ -0,0 +1,17 @@
{pkgs, ...}: {
# unsure whether i still need swayidle, will keep it in and might remove after further testing
services.swayidle = {
enable = true;
events = [
{
event = "before-sleep";
command = "${pkgs.swaylock}/bin/swaylock -fF -c 442244";
}
{
event = "lock";
command = "swaylock -c 441144";
}
];
};
}

View file

@ -0,0 +1,37 @@
{...}: {
programs.kitty = {
enable = true;
font.size = 12;
font.name = "Departure Mono Nerd Font";
shellIntegration.enableFishIntegration = false;
keybindings = {
"ctrl+shift+n" = "new_os_window_with_cwd";
};
settings = rec {
adjust_column_width = "95%";
color0 = "#282828";
color8 = "#928374";
color1 = "#cc241d";
color9 = "#fb4934";
color2 = "#98971a";
color10 = "#b8bb26";
color3 = "#d79921";
color11 = "#fabd2f";
color4 = "#458588";
color12 = "#83a598";
color5 = "#b16286";
color13 = "#d3869b";
color6 = "#689d6a";
color14 = "#8ec07c";
color7 = "#a89984";
color15 = "#ebdbb2";
foreground = color15;
background = "#1d2021";
confirm_os_window_close = 0;
hide_window_decorations = true;
};
};
home.sessionVariables = {
TERMINAL = "kitty";
};
}

View file

@ -1,22 +0,0 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.jade.desktop.kdeconnect;
in
with lib; {
options.jade.desktop.kdeconnect = {
enable = mkEnableOption "Enable KDE connect";
};
config = mkIf cfg.enable {
programs.kdeconnect.enable = true;
home-manager.users.jade = {pkgs, ...}: {
services.kdeconnect = {
enable = true;
indicator = true;
};
};
};
}

View file

@ -0,0 +1,13 @@
{...}: {
i18n.extraLocaleSettings = {
LC_ADDRESS = "de_DE.UTF-8";
LC_IDENTIFICATION = "de_DE.UTF-8";
LC_MEASUREMENT = "de_DE.UTF-8";
LC_MONETARY = "de_DE.UTF-8";
LC_NAME = "de_DE.UTF-8";
LC_NUMERIC = "de_DE.UTF-8";
LC_PAPER = "de_DE.UTF-8";
LC_TELEPHONE = "de_DE.UTF-8";
LC_TIME = "de_DE.UTF-8";
};
}

View file

@ -0,0 +1,19 @@
{pkgs, ...}: {
services.printing = {
enable = true;
drivers = with pkgs; [
gutenprint
gutenprintBin
hplip
brlaser
brgenml1lpr
brgenml1cupswrapper
ptouch-driver
epsonscan2
epson-escpr
epson-escpr2
epson_201207w
epson-alc1100
];
};
}

View file

@ -1,34 +0,0 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.jade.desktop.social;
in
with lib; {
options.jade.desktop.social = {
enable = mkEnableOption "Enable social apps";
};
config = mkIf cfg.enable {
home-manager.users.jade = {
pkgs,
pkgs-stable,
...
}: {
home.packages = with pkgs; [
signal-desktop
mumble
element-desktop
pkgs.evolution-data-server-gtk4
iamb
];
};
programs.evolution = {
enable = true;
plugins = [pkgs.evolution-ews];
};
services.gnome.evolution-data-server.enable = true;
services.gnome.evolution-data-server.plugins = [];
};
}

View file

@ -1,21 +0,0 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.jade.desktop.syncthing;
in
with lib; {
options.jade.desktop.syncthing = {
enable = mkEnableOption "Enable syncing via syncthing";
};
config = mkIf cfg.enable {
services.syncthing = rec {
enable = true;
user = "jade";
dataDir = "/home/${user}/Documents";
configDir = "/home/${user}/Documents/.config/syncthing";
};
};
}

View file

@ -0,0 +1,54 @@
{pkgs, ...}: {
stylix = {
enable = true;
polarity = "dark";
base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-hard.yaml";
fonts = {
serif = {
package = pkgs.libertine;
name = "Linux Libertine O";
};
sansSerif = {
package = pkgs.atkinson-hyperlegible;
name = "Atkinson Hyperlegible";
};
monospace = {
package = pkgs.nerd-fonts.departure-mono;
name = "Departure Mono Nerd Font";
};
emoji = {
package = pkgs.noto-fonts-emoji;
name = "Noto Color Emoji";
};
};
};
home-manager.users.jade = {pkgs, ...}: {
stylix.targets = {
firefox = {
profileNames = ["jade"];
};
helix.enable = false;
btop.enable = false;
nushell.enable = false;
starship.enable = false;
kitty.enable = false;
dunst.enable = false;
wofi.enable = false;
};
gtk = {
enable = true;
cursorTheme = {
package = pkgs.phinger-cursors;
name = "phinger-cursors";
size = 30;
};
iconTheme = {
package = pkgs.gruvbox-dark-icons-gtk;
name = "gruvbox-dark-icons";
};
};
};
}

9
modules/desktop/tlp.nix Normal file
View file

@ -0,0 +1,9 @@
{...}: {
services.tlp = {
enable = true;
settings = {
START_CHARGE_THRESH_BAT0 = "70";
STOP_CHARGE_TRESH_BAT0 = "85";
};
};
}