Compare commits

..

No commits in common. "main" and "push-pqvqptxrrmyk" have entirely different histories.

171 changed files with 90275 additions and 8332 deletions

2
.envrc
View file

@ -1 +1 @@
use flake --log-format multiline-with-logs
use flake

3
.gitignore vendored
View file

@ -1,5 +1,2 @@
result
.direnv/
programs/*/target
target
*openapi.json

2048
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -1,5 +0,0 @@
[workspace]
resolver = "2"
members = [ "programs/bar-pinger", "programs/bar-ws-monitor", "programs/flip-bool",
"programs/jrnl"
, "programs/traveldings"]

View file

@ -1,47 +0,0 @@
#!/usr/bin/env nu
def main [] {}
def "main find" [
file: string
] {
open $file --raw
| lines
| enumerate
| update item {|it| $it.item | parse '{current}#:{name}:-{template}-:#' }
| filter {|it| $it.item | is-not-empty}
| flatten -a
| rename -c { index: line }
}
# TODO: support mroe then single template
def "main edit" [
file: path
name: string
to: string
--preview
] {
let template = main find $file
| where name == $name
| first;
let new = $template.template
| str replace $"%($name)%" $to
| append $" #:($template.name):-($template.template)-:#"
| str join;
let rest = open $file --raw
| lines
| enumerate
| where index != $template.line
| append { index: $template.line, item: $new}
| sort-by index
| reject index
| get item
| append ""
| str join "\n";
if $preview {
print $rest
} else {
$rest | save -f $file
}
}

View file

@ -2,31 +2,43 @@
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{
config,
pkgs,
lib,
niri,
lix-module,
rs-programs,
...
}:
with lib;
with builtins;
{
imports = [ lix-module.nixosModules.default ];
with builtins; {
nix = {
package = pkgs.nixVersions.stable;
extraOptions = ''
experimental-features = nix-command flakes
keep-outputs = true
keep-derivations = true
'';
};
nixpkgs = {
config = {
allowUnfree = true;
permittedInsecurePackages = [
"nodejs-16.20.0"
];
};
};
environment = {
systemPackages = with pkgs; [
nixfmt-rfc-style
overskride
transmission_4-gtk
# pynitrokey
# nitrokey-app2
veracrypt
htmlq
ausweisapp
prusa-slicer
wget
git
hyfetch
neofetch
pciutils
zip
unzip
@ -34,55 +46,73 @@ with builtins;
iw
btop
nodejs
cmatrix
jdk8
jdk11
jdk
libsecret
gh
nix-prefetch-scripts
fzf
glab
ripgrep
sl
lolcat
cool-retro-term
jetbrains.idea-ultimate
jdk
libsecret
fzf
ripgrep
appimage-run
git-crypt
file
whois
p7zip
file
nmap
cmatrix
tree
socat
smartmontools
mprocs
dig
aria2
cyme
usbutils
numbat
devd
libjxl
s10e-jrnl
ungoogled-chromium
scc
speedtest-rs
];
};
hardware.graphics.enable = true;
services = {
systemd-lock-handler.enable = true;
openssh = {
networking = {
networkmanager = {
enable = true;
settings.PasswordAuthentication = false;
settings.KbdInteractiveAuthentication = false;
};
};
services = {
openssh = {
enable = true;
# settings.PasswordAuthentication = false;
# settings.KbdInteractiveAuthentication = false;
};
};
console.colors = [
"282828"
"cc241d"
"98971a"
"d79921"
"458588"
"b16286"
"689d6a"
"a89984"
"928374"
"fb4934"
"b8bb26"
"fabd2f"
"83a598"
"d3869b"
"8ec07c"
"ebdbb2"
];
# nitrokey
services.udev.packages = [pkgs.nitrokey-udev-rules];
services.pcscd.enable = true;
programs = {
ssh.startAgent = false;
gnupg.agent = {
@ -94,32 +124,41 @@ with builtins;
mtr.enable = true;
};
hardware.gpgSmartcards.enable = true;
time.timeZone = "Europe/Berlin";
home-manager.users.jade = {
nixosConfig,
pkgs,
...
}: {
home.sessionVariables.TZ = nixosConfig.time.timeZone;
};
nixpkgs.config.packageOverrides = pkgs: {
sudo = pkgs.sudo.override {withInsults = true;};
};
security.sudo.extraConfig = "Defaults insults";
boot.kernel.sysctl."vm.max_map_count" = 2147483642;
hardware = {
opengl.enable = true;
uinput.enable = true;
bluetooth.enable = true;
# keyboard.uhk.enable = true;
};
services.avahi = {
enable = true;
};
security.rtkit.enable = true;
users.users.jade = {
isNormalUser = true;
extraGroups = [
"wheel"
"input"
"uinput"
"libvirtd"
"adbusers"
"dialout"
"plugdev"
"wireshark"
];
extraGroups = ["wheel" "input" "uinput" "libvirtd" "adbusers" "dialout" "plugdev" "wireshark"];
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOaE8TFsIazpn4OnHvHcRpOFr9FfvMaWOiEjmHsmnAoE cardno:000F_70CD7D05"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg7hhAKxIAbokHHcIj9HBgbkgoKGCG2R+gx7HZKL+iz cardno:000F_93C6A612"
];
};
@ -127,4 +166,6 @@ with builtins;
enable = true;
algorithm = "zstd";
};
users.defaultUserShell = pkgs.nushellFull;
}

1146
flake.lock generated

File diff suppressed because it is too large Load diff

232
flake.nix
View file

@ -3,150 +3,118 @@
inputs = {
nixpkgs.url = "nixpkgs/nixos-unstable";
nixpkgs-stable.url = "nixpkgs/nixos-24.11";
nixpkgs-unstable-small.url = "nixpkgs/nixos-unstable-small";
niri.url = "github:sodiboo/niri-flake";
stylix.url = "github:danth/stylix";
typst-within.url = "github:schrottkatze/typst";
crane.url = "github:ipetkov/crane";
nixcord.url = "github:kaylorben/nixcord";
lix-module = {
url = "git+https://git.lix.systems/lix-project/nixos-module";
inputs.nixpkgs.follows = "nixpkgs";
};
nixpkgs-stable.url = "nixpkgs/nixos-23.11";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
fenix = {
url = "github:nix-community/fenix";
inputs.nixpkgs.follows = "nixpkgs";
nixos-hardware.url = "github:networkException/nixos-hardware/apple-t2-init";
mac-brcm-fw = {
url = "path:/home/jade/nix-configs/mac-brcm-fw";
flake = false;
};
#mms.url = "github:mkaito/nixos-modded-minecraft-servers";
easymacros.url = "git+https://gitlab.com/obsidianical/easymacros.git";
meowsite.url = "git+https://gitlab.com/obsidianical/meowsite.git";
wordsofgod.url = "git+https://gitlab.com/obsidianical/wordsofgod.git";
karton.url = "git+https://gitlab.com/obsidianical/microbin.git";
arion.url = "github:hercules-ci/arion";
gumseite.url = "git+https://gitlab.com/schrottkatze/gum-schulsachen.git";
};
outputs =
{
self,
nixpkgs,
nixpkgs-stable,
nixpkgs-unstable-small,
lix-module,
typst-within,
home-manager,
nixos-hardware,
niri,
stylix,
fenix,
crane,
...
}@inputs:
let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
pkgs-stable = nixpkgs-stable.legacyPackages.${system};
pkgs-unstable-small = nixpkgs-unstable-small.legacyPackages.${system};
rs-toolchain =
with fenix.packages.${system};
combine [
complete.toolchain
];
crane-lib = (crane.mkLib nixpkgs.legacyPackages.${system}).overrideToolchain rs-toolchain;
rs-programs = final: prev: {
s10e-jrnl = crane-lib.buildPackage {
pname = "s10e-bs";
version = "0.0.1";
src = crane-lib.cleanCargoSource (crane-lib.path ./.);
outputs = {
self,
nixpkgs,
nixpkgs-stable,
home-manager,
nixos-hardware,
mac-brcm-fw,
...
} @ inputs: let
pkgs = nixpkgs.legacyPackages."x86_64-linux";
in {
devShells."x86_64-linux".default = pkgs.mkShell {
buildInputs = [
(pkgs.haskellPackages.ghcWithPackages
(pkgs:
with pkgs; [
xmonad
xmonad-contrib
xmobar
statgrab
]))
pkgs.haskell-language-server
];
};
nixosConfigurations = {
monosodium-glutamate-g = nixpkgs.lib.nixosSystem {
specialArgs = {
inherit inputs;
};
};
in
{
formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-rfc-style;
devShells."x86_64-linux".default = pkgs.mkShell {
buildInputs = [
rs-toolchain
pkgs.pkg-config
pkgs.openssl
system = "x86_64-linux";
modules = [
./hosts/monosodium-glutamate-g/configuration.nix
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.jade = {
nixosConfig,
pkgs,
...
}: {
home.sessionVariables.TZ = nixosConfig.time.timeZone;
home.stateVersion = "${nixosConfig.system.stateVersion}";
};
}
];
};
nixosConfigurations = {
monosodium-glutamate-g = nixpkgs.lib.nixosSystem {
specialArgs = {
inherit
inputs
pkgs-unstable-small
pkgs-stable
rs-programs
lix-module
niri
;
};
system = "x86_64-linux";
modules = [
inputs.niri.nixosModules.niri
stylix.nixosModules.stylix
./hosts/monosodium-glutamate-g/configuration.nix
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = {
inherit pkgs-unstable-small pkgs-stable typst-within;
};
home-manager.sharedModules = [
inputs.nixcord.homeManagerModules.nixcord
];
home-manager.users.jade =
{
nixosConfig,
pkgs,
...
}:
{
home.sessionVariables.TZ = nixosConfig.time.timeZone;
home.stateVersion = "${nixosConfig.system.stateVersion}";
};
}
];
catbook-j = nixpkgs.lib.nixosSystem {
specialArgs = {
inherit inputs;
};
denkbrett = nixpkgs.lib.nixosSystem {
specialArgs = {
inherit
inputs
pkgs-unstable-small
pkgs-stable
rs-programs
lix-module
niri
;
};
system = "x86_64-linux";
modules = [
inputs.niri.nixosModules.niri
stylix.nixosModules.stylix
./hosts/denkbrett/configuration.nix
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = {
inherit pkgs-unstable-small pkgs-stable typst-within;
};
home-manager.sharedModules = [
inputs.nixcord.homeManagerModules.nixcord
];
home-manager.users.jade =
{
nixosConfig,
pkgs,
...
}:
{
home.sessionVariables.TZ = nixosConfig.time.timeZone;
home.stateVersion = "22.11";
};
}
];
system = "x86_64-linux";
modules = [
./hosts/catbook-j/configuration.nix
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.jade = {
nixosConfig,
pkgs,
...
}: {
home.sessionVariables.TZ = nixosConfig.time.timeZone;
home.stateVersion = "22.11";
};
}
];
};
potatobook-g = nixpkgs.lib.nixosSystem {
specialArgs = {
inherit inputs;
};
system = "x86_64-linux";
modules = [
"${mac-brcm-fw}"
./hosts/potatobook-g/configuration.nix
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.jade = {
nixosConfig,
pkgs,
...
}: {
home.sessionVariables.TZ = nixosConfig.time.timeZone;
home.stateVersion = "${nixosConfig.system.stateVersion}";
};
}
nixos-hardware.nixosModules.apple-t2
];
};
};
};
}

47
haskell/xmobar/xmobar.hs Normal file
View file

@ -0,0 +1,47 @@
import Xmobar
import System.Statgrab
-- TODOS:
-- - custom cpu module
-- - custom mem module
-- - custom network/ping module with avg of n pings and blah
-- - custom graph rendering based on braille characters
-- - custom "ramp" thingies
-- - newsticker?
-- - mail/message monitoring
-- - if possible, different bars per workspace
data CustomCpu = CustomCpu
deriving (Read, Show)
instance Exec CustomCpu where
alias CustomCpu = "cpu"
run CustomCpu = do
-- return (show :: IO String (snapshot :: Stats CPUPercent))
return "meow"
fc code content = "<fc=" ++ code ++ ">" ++ content ++ "</fc>"
sep = fc "#7c6f64"
icon = fc "#d65d0e"
config :: Config
config =
defaultConfig
{ font = "FiraCode Nerd Font",
allDesktops = True,
alpha = 255,
bgColor = "#282828",
fgColor = "#ebdbb2",
commands =
[ Run $ Xmobar.Memory ["t", "Mem: <usedratio>%"] 10,
Run $ CustomCpu,
Run $ Date (icon "\983277" ++ " %Y" ++ sep "-" ++ "%m" ++ sep "-" ++ "%d " ++ icon "\988236" ++ " %H" ++ sep ":" ++ "%M" ++ sep ":" ++ "%S ") "date" 10
],
template = "%memory% }{ %cpu% }{ %date%",
alignSep = "}{",
position = TopH 24
}
main :: IO ()
main = xmobar config -- or: configFromArgs config >>= xmobar

172
haskell/xmonad/xmonad.hs Normal file
View file

@ -0,0 +1,172 @@
import Control.Monad (when)
import Data.Map qualified as M
import Data.Monoid
import Data.Ratio
import Graphics.X11.ExtraTypes.XF86
import System.Exit
import XMonad
import XMonad.Actions.KeyRemap
import XMonad.Hooks.EwmhDesktops
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.StatusBar
import XMonad.Hooks.StatusBar.PP
import XMonad.Layout.Circle
import XMonad.Layout.DraggingVisualizer
import XMonad.Layout.Grid
import XMonad.Layout.IfMax
import XMonad.Layout.Magnifier
import XMonad.Layout.Spacing
import XMonad.Layout.Tabbed
import XMonad.Layout.ThreeColumns
import XMonad.Layout.VoidBorders
import XMonad.Layout.WindowSwitcherDecoration
import XMonad.Prompt
import XMonad.Prompt.Layout
import XMonad.StackSet qualified as W
import XMonad.Actions.NoBorders
import XMonad.Util.EZConfig
import XMonad.Hooks.ServerMode
myKeys conf@(XConfig {XMonad.modMask = modm}) =
M.fromList $
[ ((modm, xK_Return), spawn $ XMonad.terminal conf),
((modm .|. shiftMask, xK_q), kill),
-- -- Rotate through the available layout algorithms
((modm, xK_space), sendMessage NextLayout),
-- rofiing
((modm, xK_d), spawn "rofi -show drun"),
((modm .|. shiftMask, xK_e), spawn "rofi -show desktopctl -modes desktopctl:desktopctl -show-icons"),
((modm, xK_m), spawn "menu-qalc -- -theme gruvbox-dark"),
((modm, xK_i), spawn "rofimoji --selector-args '-theme gruvbox-dark' -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"),
-- screenshotting
-- TODO: Fix/rewrite window-screenshot
((modm, xK_w), spawn "window-screenshot.nu"),
((modm, xK_s), spawn "flameshot gui -c -p $HOME/Pictures/screenshots"),
((modm, xK_a), spawn "flameshot screen -c -p $HOME/Pictures/screenshots"),
((modm, xK_t), spawn "ocr-screenshot.sh"),
((modm .|. shiftMask, xK_t), spawn "DEVICE=\"bcm5974\"; if [ $(xinput list-props \"$DEVICE\" | awk '/^\\tDevice Enabled \\([0-9]+\\):\\t[01]/ {print $NF}') = \"1\" ]; then xinput disable \"$DEVICE\"; else xinput enable \"$DEVICE\"; fi"),
-- Push window back into tiling
((modm .|. shiftMask, xK_space), withFocused $ windows . W.sink),
-- Resize viewed windows to the correct size
((modm, xK_n), refresh),
-- Move focus to the next window
((modm, xK_Tab), layoutPrompt def),
-- Move focus
((modm, xK_j), windows W.focusDown),
((modm, xK_k), windows W.focusUp),
-- Swap the focused window with the next window
((modm .|. shiftMask, xK_j), windows W.swapDown),
((modm .|. shiftMask, xK_k), windows W.swapUp),
-- Shrink the master area
((modm, xK_h), sendMessage Shrink),
((modm, xK_l), sendMessage Expand),
-- Increment the number of windows in the master area
((modm, xK_comma), sendMessage (IncMasterN 1)),
((modm, xK_period), sendMessage (IncMasterN (-1))),
((modm, xK_b), sendMessage ToggleStruts >> withFocused toggleBorder),
-- volume keys
-- TODO: other media keys
((0, xF86XK_AudioRaiseVolume), spawn "amixer -D pulse sset Master 10%+"),
((0, xF86XK_AudioLowerVolume), spawn "amixer -D pulse sset Master 10%-"),
((0, xF86XK_AudioMute), spawn "amixer -D pulse sset Master toggle")
]
++ [ ((m .|. modm, k), windows $ f i)
| (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9],
(f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]
]
-- TODO: figure out multi screen stuff, including xinerama
-- Mouse bindings: default actions bound to mouse events
myMouseBindings (XConfig {XMonad.modMask = modm}) =
M.fromList
-- mod-button1, Set the window to floating mode and move by dragging
[ ( (modm, button1),
\w -> do
focus w
mouseMoveWindow w
windows W.shiftMaster
),
-- mod-button2, Raise the window to the top of the stack
( (modm, button3),
\w -> do
focus w
mouseResizeWindow w
windows W.shiftMaster
)
]
tabCfg =
def
{ activeColor = "#282828",
inactiveColor = "#1d2021",
urgentColor = "#9d0006",
activeBorderColor = "#504945",
inactiveBorderColor = "#3c3836",
urgentBorderColor = "#cc241d",
activeTextColor = "#ebdbb2",
inactiveTextColor = "#bdae93",
urgentTextColor = "#ebdbb2"
}
myLayout = setupSpacing $ avoidStruts $ autoChoose ||| tabbed shrinkText tabCfg
where
-- default tiling algorithm partitions the screen into two panes
autoChoose = IfMax 2 tiled $ IfMax 3 tiled_mag $ IfMax 4 grid_mag threeCol
setupSpacing = spacingRaw True (Border 0 0 0 0) True (Border 7 7 7 7) True
grid_mag = magnifiercz 1.4 Grid
tiled = Tall nmaster delta ratio
tiled_mag = magnifiercz' 1.4 tiled
threeCol = magnifiercz' 1.6 $ ThreeColMid nmaster delta ratio
-- The default number of windows in the master pane
nmaster = 1
-- Default proportion of screen occupied by master pane
ratio = 1 / 2
-- Percent of screen to increment by when resizing panes
delta = 3 / 100
myManageHook =
composeAll
[ className =? "MPlayer" --> doFloat,
className =? "Gimp" --> doFloat,
className =? "firefox" --> doShift "browser",
className =? "Evolution" --> doShift "comms",
className =? "Signal" --> doShift "comms",
className =? "SchildiChat" --> doShift "comms",
resource =? "desktop_window" --> doIgnore,
resource =? "kdesktop" --> doIgnore
]
myStartupHook = do
spawn "pgrep oneko || oneko -tofocus -tora -position +-1+5 -fg palevioletred3 -bg pink -name 'Rose the desktop kitty'"
spawn "pgrep volumeicon || volumeicon"
spawn "pgrep nm-applet || nm-applet"
spawn "pgrep mullvad-gui || mullvad-vpn"
spawn "feh --bg-fill ~/Pictures/wallpaper.jpg"
xmeowbar = statusBarProp "~/.config/xmobar/xmobar" $ pure xmobarPP
polybar = statusBarProp "polybar" $ pure xmobarPP
barSpawner 0 = pure $ xmeowbar <> polybar
barSpawner _ = mempty
main :: IO()
main = xmonad $ docks $ dynamicSBs barSpawner $ ewmh defaults
defaults =
def
{ -- simple stuff
terminal = "kitty",
focusFollowsMouse = False,
clickJustFocuses = False,
borderWidth = 2,
modMask = mod4Mask,
workspaces = ["comms", "browser"] ++ map show [3 .. 9],
normalBorderColor = "#3c3836",
focusedBorderColor = "#504945",
keys = myKeys,
mouseBindings = myMouseBindings,
layoutHook =myLayout,
manageHook = myManageHook,
startupHook = myStartupHook,
handleEventHook = serverModeEventHook
}

View file

@ -0,0 +1,160 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{
config,
pkgs,
lib,
...
}: {
nixpkgs.config.permittedInsecurePackages = [
"electron-25.9.0"
];
imports = [
# Include the results of the hardware scan.
./hardware-configuration.nix
../../common.nix
../../modules
];
jade = {
flatpak.enable = true;
desktop = {
compositing.enable = true;
syncthing.enable = true;
kdeconnect.enable = true;
cloud.enable = true;
social.enable = true;
mail.enable = true;
gaming.enable = true;
evremap.enable = true;
};
terminal.enable = true;
};
hardware.trackpoint = {
enable = true;
# device = "MELF0410:00 1FD2:7007";
device = "DELL081C:00 044E:121F Mouse";
sensitivity = 255;
};
hardware.usb-modeswitch.enable = true;
systemd.services."ModemManager".enable = true;
systemd.services."ModemManager".wants = ["NetworkManager.service"];
systemd.services."ModemManager".wantedBy = ["multi-user.target"];
environment.variables = {
VDPAU_DRIVER = lib.mkIf config.hardware.opengl.enable (lib.mkDefault "va_gl");
};
hardware.opengl = {
enable = true;
extraPackages = with pkgs; [
intel-ocl
intel-media-driver
intel-vaapi-driver
intel-compute-runtime
libvdpau-va-gl
mesa.drivers
];
};
programs.wireshark.enable = true;
boot.resumeDevice = "/dev/disk/by-uuid/4f9e8afa-f8d7-40bf-b3ea-17e8e8fbb694";
boot.kernelParams = ["resume_offset=7380652"];
boot.binfmt.emulatedSystems = ["aarch64-linux"];
hardware.bluetooth.enable = true;
services.blueman.enable = true;
services.xserver.libinput.touchpad.tapping = false;
environment.systemPackages = [
pkgs.plantuml
pkgs.mqttui
pkgs.mobile-broadband-provider-info
pkgs.modem-manager-gui
pkgs.wireshark
];
# Bootloader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
# Setup keyfile
boot.initrd.secrets = {
"/crypto_keyfile.bin" = null;
};
# nixpkgs = {
# overlays = [
# (self: super: {
# linux_zen_xeniafied = pkgs.linuxPackagesFor (pkgs.linuxKernel.kernels.linux_zen.override {
# structuredExtraConfig = with lib.kernel; {
# "FB" = yes;
# "FRAMEBUFFER_CONSOLE" = yes;
# "VGA_CONSOLE" = yes;
# "VIDEO_SELECT" = yes;
# LOGO = lib.mkForce yes;
# LOGO_LINUX_CLUT224 = yes;
# };
# ignoreConfigErrors = true;
# });
# })
# ];
# };
boot.kernelPackages = pkgs.linuxPackages_zen;
# boot.kernelPatches = [
# {
# name = "fomx";
# patch = ../../other/0001-fomx.patch;
# }
# ];
services.xserver.displayManager.autoLogin = {
enable = true;
user = "jade";
};
networking.hostName = "catbook-j"; # Define your hostname.
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Enable networking
networking.networkmanager.enable = true;
security.pam.services.jade.u2fAuth = true;
programs.i3lock.u2fSupport = true;
security.pam.u2f = {
enable = true;
cue = true;
control = "sufficient";
authFile = "/home/jade/.ssh/u2f_keys";
};
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";
};
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. Its perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "23.05"; # Did you read the comment?
}

View file

@ -7,53 +7,35 @@
pkgs,
modulesPath,
...
}:
{
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [
"xhci_pci"
"nvme"
"usb_storage"
"sd_mod"
"rtsx_pci_sdmmc"
];
boot.initrd.kernelModules = [ "i915" ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
boot.initrd.availableKernelModules = ["xhci_pci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc"];
boot.initrd.kernelModules = ["i915"];
boot.kernelModules = ["kvm-intel"];
boot.extraModulePackages = [];
fileSystems."/" = {
device = "/dev/disk/by-uuid/4f9e8afa-f8d7-40bf-b3ea-17e8e8fbb694";
fsType = "btrfs";
options = [
"subvol=@"
"compress=zstd:3"
"noatime"
];
options = ["subvol=@" "compress=zstd:3" "noatime"];
};
fileSystems."/home" = {
device = "/dev/disk/by-uuid/4f9e8afa-f8d7-40bf-b3ea-17e8e8fbb694";
fsType = "btrfs";
options = [
"subvol=@home"
"compress=zstd:3"
];
options = ["subvol=@home" "compress=zstd:3"];
};
fileSystems."/swap" = {
device = "/dev/disk/by-uuid/4f9e8afa-f8d7-40bf-b3ea-17e8e8fbb694";
fsType = "btrfs";
options = [
"subvol=@/@swap"
"noatime"
];
options = ["subvol=@/@swap" "noatime"];
};
boot.initrd.luks.devices."luks-9cd75cce-6829-4db8-8c5c-a9fb9ec3e122".device =
"/dev/disk/by-uuid/9cd75cce-6829-4db8-8c5c-a9fb9ec3e122";
boot.initrd.luks.devices."luks-9cd75cce-6829-4db8-8c5c-a9fb9ec3e122".device = "/dev/disk/by-uuid/9cd75cce-6829-4db8-8c5c-a9fb9ec3e122";
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/C6CA-5DE8";

View file

@ -1,77 +0,0 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{ pkgs, ... }:
{
nixpkgs.config.permittedInsecurePackages = [
"electron-25.9.0"
"electron-27.3.11"
];
imports = [
# Include the results of the hardware scan.
./hardware-configuration.nix
../../common.nix
../../modules
./modules
];
jade = {
hwKey.pamAuth.enable = true;
desktop = {
dm.autoLogin = {
enable = true;
delay = 5;
};
syncthing.enable = true;
kdeconnect.enable = true;
social.enable = true;
gaming.enable = true;
};
};
security.pam.services.swaylock = { };
hardware.usb-modeswitch.enable = true;
systemd.services."ModemManager".enable = true;
systemd.services."ModemManager".wants = [ "NetworkManager.service" ];
systemd.services."ModemManager".wantedBy = [ "multi-user.target" ];
programs.wireshark.enable = true;
boot.resumeDevice = "/dev/disk/by-uuid/4f9e8afa-f8d7-40bf-b3ea-17e8e8fbb694";
boot.kernelParams = [ "resume_offset=7380652" ];
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
services.blueman.enable = true;
environment.systemPackages = [
pkgs.plantuml
pkgs.mqttui
pkgs.mobile-broadband-provider-info
pkgs.modem-manager-gui
pkgs.wireshark
];
# Bootloader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
# Setup keyfile
boot.initrd.secrets = {
"/crypto_keyfile.bin" = null;
};
boot.kernelPackages = pkgs.linuxPackages_zen;
# networking
networking.networkmanager.enable = true;
networking.hostName = "denkbrett";
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. Its perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "23.05"; # Did you read the comment?
}

View file

@ -1,7 +0,0 @@
{ ... }:
{
imports = [
./input.nix
./graphics.nix
];
}

View file

@ -1,21 +0,0 @@
{
pkgs,
lib,
config,
...
}:
{
environment.variables = {
VDPAU_DRIVER = lib.mkIf config.hardware.graphics.enable (lib.mkDefault "va_gl");
};
hardware.graphics = {
extraPackages = with pkgs; [
intel-ocl
intel-media-driver
intel-vaapi-driver
intel-compute-runtime
libvdpau-va-gl
mesa.drivers
];
};
}

View file

@ -1,38 +0,0 @@
{ ... }:
{
# key remapping
jade.input.remapping =
let
default = {
swapKeys = [
[
"KEY_Y"
"KEY_Z"
]
[
"KEY_LEFTALT"
"KEY_LEFTMETA"
]
];
dual_role = [
{
input = "KEY_CAPSLOCK";
hold = [ "KEY_LEFTCTRL" ];
tap = [ "KEY_ESC" ];
}
];
};
in
{
enable = true;
devices."AT Translated Set 2 keyboard" = default;
devices."Razer Razer Huntsman" = default;
devices."Razer Razer DeathAdder V2" = default;
};
hardware.trackpoint = {
enable = true;
device = "TPPS/2 IBM TrackPoint";
sensitivity = 256;
};
}

View file

@ -1,31 +1,44 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{
pkgs,
pkgs-stable,
...
}:
{
{pkgs, ...}: {
imports = [
./hardware-configuration.nix
../../common.nix
../../modules
./modules
];
# nixpkgs = {
# overlays = [
# (self: super: {
# linux_zen_xeniafied = pkgs.linuxPackagesFor (pkgs.linuxKernel.kernels.linux_zen.override {
# structuredExtraConfig = with lib.kernel; {
# "FB" = yes;
# "FRAMEBUFFER_CONSOLE" = yes;
# "VGA_CONSOLE" = yes;
# "VIDEO_SELECT" = yes;
# LOGO = lib.mkForce yes;
# LOGO_LINUX_CLUT224 = yes;
# };
# ignoreConfigErrors = true;
# });
# })
# ];
# };
jade = {
hwKey.pamAuth.enable = true;
flatpak.enable = true;
desktop = {
media = {
obs = true;
videoEditing = true;
};
compositing.enable = true;
syncthing.enable = true;
kdeconnect.enable = true;
cloud.enable = true;
social.enable = true;
gaming.enable = true;
mail.enable = true;
evremap.enable = false;
};
terminal.enable = true;
};
boot = {
loader = {
@ -33,14 +46,30 @@
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
};
# latest linux kernel
#boot.kernelPackages = pkgs.linuxPackages_latest;
#boot.kernelPackages = pkgs.linux_zen_xeniafied;
kernelPackages = pkgs.linuxPackages_zen;
# boot.kernelPatches = [
# {
# name = "fomx";
# patch = ../other/0001-fomx.patch;
# }
# ];
binfmt.emulatedSystems = [ "aarch64-linux" ];
binfmt.emulatedSystems = ["aarch64-linux"];
};
networking.hostName = "monosodium-glutamate-g";
services = {
# monitor control
ddccontrol.enable = true;
xserver = {
layout = "us";
xkbVariant = "altgr-intl";
enable = true;
};
openssh.settings.PermitRootLogin = "without-password";
blueman.enable = true;
@ -48,19 +77,36 @@
gnome.gnome-keyring.enable = true;
};
hardware = {
bluetooth.enable = true;
keyboard.uhk.enable = true;
enableRedistributableFirmware = true;
};
security.pam.services.jade.u2fAuth = true;
programs.i3lock.u2fSupport = true;
security.pam.u2f = {
enable = true;
cue = true;
control = "sufficient";
authFile = "/home/jade/.ssh/u2f_keys";
};
# missing: menu-qalc picom-jonaburg
environment.systemPackages = with pkgs; [
# TODO: clean up.
libGL
libreoffice-fresh
wireshark
awesomebump
zenstates
zenmonitor
nvtop-amd
radeontop
rgp
tea
blender-hip
jdk8
jdk11
];
programs = {
wireshark.enable = true;
@ -80,7 +126,23 @@
# networking.firewall.allowedTCPPorts = [ 4713 ];
systemd.services."NetworkManager-wait-online".enable = false;
swapDevices = [ { device = "/swap/swapfile"; } ];
systemd.services = {
create-swapfile = {
serviceConfig.Type = "oneshot";
wantedBy = ["swap-swapfile.swap"];
script = ''
swapfile="/swap/swapfile"
if [[ -f "$swapfile" ]]; then
echo "Swap file $swapfile already exists, taking no action"
else
echo "Setting up swap file $swapfile"
${pkgs.coreutils}/bin/truncate -s 0 "$swapfile"
${pkgs.e2fsprogs}/bin/chattr +C "$swapfile"
fi
'';
};
};
system.stateVersion = "24.05"; # Did you read the comment?
# release channel
system.stateVersion = "22.05"; # Did you read the comment?
}

View file

@ -7,49 +7,39 @@
pkgs,
modulesPath,
...
}:
{
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [
"nvme"
"xhci_pci"
"ahci"
"uas"
"usbhid"
"sd_mod"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod"];
boot.initrd.kernelModules = [];
boot.kernelModules = ["kvm-amd"];
boot.extraModulePackages = [];
fileSystems."/" = {
device = "/dev/disk/by-uuid/efb8f256-5b14-4b52-a2d9-ae4b91ecb711";
device = "/dev/disk/by-uuid/72ffbc9d-a319-42d7-8d26-13c921a679db";
fsType = "btrfs";
options = [ "subvol=@" ];
options = ["subvol=@root" "compress=zstd:3"];
};
boot.initrd.luks.devices."luks-919f9b8b-2804-447a-97e0-f7f515d0be56".device =
"/dev/disk/by-uuid/919f9b8b-2804-447a-97e0-f7f515d0be56";
fileSystems."/home" = {
device = "/dev/disk/by-uuid/72ffbc9d-a319-42d7-8d26-13c921a679db";
fsType = "btrfs";
options = ["subvol=@home" "compress=zstd:3"];
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/3FAD-A6B4";
device = "/dev/disk/by-uuid/D63E-18C9";
fsType = "vfat";
options = [
"fmask=0077"
"dmask=0077"
];
};
fileSystems."/swap" = {
device = "/dev/disk/by-uuid/efb8f256-5b14-4b52-a2d9-ae4b91ecb711";
fsType = "btrfs";
options = [ "subvol=swap" ];
};
swapDevices = [ ];
swapDevices = [
{
device = "/swap/swapfile";
size = (1024 * 64) + (1024 * 8); # 72G
}
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
@ -57,9 +47,7 @@
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.eno1.useDHCP = lib.mkDefault true;
# networking.interfaces.wg0-mullvad.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp6s0.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp9s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View file

@ -1,6 +0,0 @@
{ ... }:
{
imports = [
./graphics.nix
];
}

View file

@ -1,8 +0,0 @@
{ pkgs, ... }:
{
environment.systemPackages = [
pkgs.nvtopPackages.amd
pkgs.radeontop
pkgs.rgp
];
}

View file

@ -0,0 +1,191 @@
{pkgs, ...}: {
nix.settings = {
trusted-substituters = [
"https://t2linux.cachix.org"
];
trusted-public-keys = [
"t2linux.cachix.org-1:P733c5Gt1qTcxsm+Bae0renWnT8OLs0u9+yfaK2Bejw="
];
};
imports = [
./hardware-configuration.nix
../../common.nix
../../modules
#inputs.mms.module
];
#nixpkgs = {
#overlays = [
#(self: super: {
#linux_zen_xeniafied = pkgs.linuxPackagesFor (pkgs.linuxKernel.kernels.linux_zen.override {
#structuredExtraConfig = with lib.kernel; {
##"FB" = yes;
##"FRAMEBUFFER_CONSOLE" = yes;
##"VGA_CONSOLE" = yes;
##"VIDEO_SELECT" = yes;
#LOGO = lib.mkForce yes;
#LOGO_LINUX_CLUT224 = yes;
#};
#ignoreConfigErrors = true;
#});
#})
#];
#};
#boot.kernelPatches = [
#{
#name = "fomx";
#patch = ../other/0001-fomx.patch;
#}
#];
boot.binfmt.emulatedSystems = ["aarch64-linux"];
jade = {
flatpak.enable = true;
desktop = {
compositing.enable = true;
syncthing.enable = true;
kdeconnect.enable = true;
cloud.enable = true;
social.enable = true;
mail.enable = true;
gaming.enable = true;
evremap.enable = true;
};
terminal.enable = true;
};
fileSystems = {
"/".options = ["compress=zstd:3"];
"/home".options = ["compress=zstd:3"];
"/nix".options = ["compress=zstd:3" "noatime"];
#"/swap".options = [ "noatime" ];
};
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
services.xserver.libinput.touchpad.disableWhileTyping = true;
services.xserver.libinput.touchpad.tapping = false;
networking.networkmanager.enable = true;
networking.hostName = "potatobook-g";
services.xserver = {
resolutions = [
{
x = 1920;
y = 1200;
}
];
# dpi = 180;
layout = "us";
xkbVariant = "altgr-intl";
};
services.autorandr = {
enable = true;
profiles = {
"default" = {
config = {
"eDP-1" = {
enable = true;
mode = "1920x1200";
};
};
};
};
};
# hardware.keyboard.uhk.enable = true;
hardware.enableRedistributableFirmware = true;
environment.systemPackages = with pkgs; [
android-tools
];
environment.pathsToLink = [
"/share/nix-direnv"
];
services.blueman.enable = true;
programs.adb.enable = true;
services.gnome.gnome-keyring.enable = true;
programs.seahorse.enable = true;
security.pam.services.jade.enableGnomeKeyring = true;
security.pam.services.jade.u2fAuth = true;
systemd.services."NetworkManager-wait-online".enable = false;
programs.i3lock.u2fSupport = true;
security.pam.u2f = {
enable = true;
cue = true;
control = "sufficient";
authFile = "/home/jade/.ssh/u2f_keys";
};
# services.pixiecore =
# let
# nixpkgs = builtins.getFlake "nixpkgs/nixos-unstable";
# sys = nixpkgs.lib.nixosSystem {
# system = "x86_64-linux";
# modules = [
# ({config, pkgs, lib, modulesPath, ...}: {
# imports = [
# (modulesPath + "/installer/netboot/netboot-base.nix")
# ];
# services.getty.autologinUser = lib.mkForce "root";
# console.keyMap = "de";
# system.stateVersion = config.system.nixos.release;
# environment.systemPackages = with pkgs; [
# helix nil git neofetch
# ];
# programs = {
# zsh = {
# enable = true;
# enableCompletion = true;
# };
# };
# })
# ];
# };
# build = sys.config.system.build;
# in {
# enable = true;
# openFirewall = true;
# kernel = "${build.kernel}/bzImage";
# initrd = "${build.netbootRamdisk}/initrd";
# cmdLine = "init=${build.toplevel}/init loglevel=4";
# };
systemd.services = {
create-swapfile = {
serviceConfig.Type = "oneshot";
wantedBy = ["swap-swapfile.swap"];
script = ''
swapfile="/swap/swapfile"
if [[ -f "$swapfile" ]]; then
echo "Swap file $swapfile already exists, taking no action"
else
echo "Setting up swap file $swapfile"
${pkgs.coreutils}/bin/truncate -s 0 "$swapfile"
${pkgs.e2fsprogs}/bin/chattr +C "$swapfile"
fi
'';
};
};
services.logind.extraConfig = ''
RuntimeDirectorySize=12G
'';
# i rly should put that important big comment back here
system.stateVersion = "22.11"; # Did you read the comment?
}

View file

@ -0,0 +1,62 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = ["xhci_pci" "nvme" "usbhid" "uas" "sd_mod"];
boot.initrd.kernelModules = [];
boot.kernelModules = ["kvm-intel"];
boot.extraModulePackages = [];
fileSystems."/" = {
device = "/dev/disk/by-uuid/f6d243ec-6be9-4551-8cbb-aefb7b691a62";
fsType = "btrfs";
options = ["subvol=root"];
};
fileSystems."/home" = {
device = "/dev/disk/by-uuid/f6d243ec-6be9-4551-8cbb-aefb7b691a62";
fsType = "btrfs";
options = ["subvol=home"];
};
fileSystems."/nix" = {
device = "/dev/disk/by-uuid/f6d243ec-6be9-4551-8cbb-aefb7b691a62";
fsType = "btrfs";
options = ["subvol=nix"];
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/5F66-17ED";
fsType = "vfat";
};
swapDevices = [
{
device = "/swap/swapfile";
size = 1024 * 12; # 12GB
}
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp2s0f1u1.useDHCP = lib.mkDefault true;
# networking.interfaces.wlan0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
# high-resolution display
}

View file

@ -0,0 +1,11 @@
{
config,
pkgs,
...
}: {
imports = [
<nixpkgs/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix>
<nixpkgs/nixos/modules/installer/cd-dvd/channel.nix>
./configuration.nix
];
}

View file

@ -1,22 +1,13 @@
upgrade: update build
test:
sudo nixos-rebuild test --flake . --log-format multiline
sudo nixos-rebuild test --flake . --impure
build:
sudo nixos-rebuild switch --flake . --fast --log-format multiline
sudo nixos-rebuild switch --flake . --impure --fast
tbuild:
sudo nixos-rebuild switch --flake . --fast --log-format multiline-with-logs --show-trace
update:
nix flake update --commit-lock-file
update: update-typst-configs
nix flake update --commit-lock-file --log-format multiline
update-typst-configs:
#!/usr/bin/env nu
let file = './modules/media/typst.nix';
let $rev = http get https://forge.katzen.cafe/schrottkatze/typst-configs/commits/branch/main | query web -mq '.commit-list tr:first-of-type a.ui.sha.label' -a href | path basename | first;
./build-utils/templ-edit.nu edit $file REV $rev;
let $hash = nix-prefetch-url https://forge.katzen.cafe/schrottkatze/typst-configs/archive/main.tar.gz --unpack;
let $sri = nix hash to-sri --type sha256 $hash;
./build-utils/templ-edit.nu edit $file SHA $sri;
build-mac:
sudo nixos-rebuild switch --flake . --impure --override-input mac-brcm-fw path:/home/jade/mac-brcm-fw --fast

3
mac-brcm-fw/default.nix Normal file
View file

@ -0,0 +1,3 @@
{...}: {}
# dummy

View file

@ -1,13 +1,11 @@
{ ... }:
{
{...}: {
imports = [
./shell
./desktop
./desktop-legacy
./hardware
./net
./input
./media
./nix.nix
./terminal.nix
./flatpak.nix
./firewall.nix
./git.nix
./kmscon.nix
];
}

View file

@ -1,55 +0,0 @@
{
config,
lib,
pkgs,
...
}:
with lib;
{
imports = [
./gaming.nix
./syncthing.nix
./kdeconnect.nix
./social.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.illum.enable = 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
];
};
}

View file

@ -1,28 +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

@ -1,26 +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

@ -1,49 +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,
...
}:
{
programs.nixcord = {
enable = true;
vesktop = {
enable = true;
# autoScroll.enable = true;
};
config = {
frameless = true;
disableMinSize = true;
};
};
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,23 +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

@ -1,19 +1,39 @@
{ pkgs, ... }:
{
programs = {
noisetorch.enable = true;
};
services = {
pipewire = {
enable = true;
alsa.enable = true;
pulse.enable = true;
jack.enable = true;
config,
lib,
pkgs,
...
}: {
config = {
programs = {
noisetorch.enable = true;
};
services = {
pipewire = {
enable = true;
alsa.enable = true;
pulse.enable = true;
jack.enable = true;
};
};
hardware.pulseaudio.enable = pkgs.lib.mkForce false;
sound.mediaKeys.enable = true;
home-manager.users.jade = {pkgs, ...}: {
home.packages = with pkgs; [
pavucontrol
pulseaudioFull
easyeffects
cava
volumeicon
playerctl
helvum
];
xsession.windowManager.i3.config.startup = [
{
command = "pkill volumeicon; volumeicon";
always = true;
}
];
};
};
environment.systemPackages = with pkgs; [
playerctl
pulsemixer
helvum
];
}

22
modules/desktop/cloud.nix Normal file
View file

@ -0,0 +1,22 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.jade.desktop.cloud;
in
with lib; {
options.jade.desktop.cloud = {
enable = mkEnableOption "Enable cloud things";
};
config = mkIf cfg.enable {
home-manager.users.jade = {pkgs, ...}: {
home.packages = with pkgs; [
fluent-reader
bitwarden
rofi-rbw
];
};
};
}

View file

@ -0,0 +1,42 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.jade.desktop.compositing;
in
with lib; {
options.jade.desktop.compositing = {
enable = mkEnableOption "Enable compositing with picom";
};
config = mkIf cfg.enable {
services.picom = {
enable = true;
backend = "glx";
shadow = true;
shadowOffsets = [(-40) (-30)];
shadowOpacity = 0.2;
shadowExclude = [
"class_g ?= 'Notify-osd'"
"_GTK_FRAME_EXTENTS@:c"
"!(class_g = 'Rofi' || class_g = 'Dunst')"
];
vSync = true;
settings = {
"shadow-radius" = 40;
# fading rofi
"fading" = true;
"fade-in-step" = 0.25;
"fade-out-step" = 0.2;
"fade-delta" = 20;
"fade-exclude" = ["class_g != 'Rofi'"];
# use damage information
"use-damage" = true;
};
};
# }}}
};
}

View file

@ -0,0 +1,35 @@
{pkgs, ...}: {
fonts.packages = with pkgs; [
(nerdfonts.override {fonts = ["FiraCode"];})
montserrat
noto-fonts
atkinson-hyperlegible
arkpandora_ttf
liberation_ttf
caladea
carlito
garamond-libre
ocr-a
amiri
];
fonts.fontDir.enable = true;
home-manager.users.jade = {pkgs, ...}: {
home.packages = with pkgs; [
audacity
krita
gimp-with-plugins
inkscape-with-extensions
obs-studio
kdenlive
fspy
scribus
fontforge-gtk
libreoffice
typst
rawtherapee
];
};
}

View file

@ -1,16 +1,191 @@
{ ... }:
{
imports = [
./audio.nix
./home
./dm.nix
./tlp.nix
./locale.nix
./printing.nix
./themeing.nix
];
services.flatpak.enable = true;
security.polkit.enable = true;
services.illum.enable = true;
services.upower.enable = true;
}
config,
lib,
pkgs,
...
}: let
# window-screenshot = pkgs.writeTextFile "window-screenshot.nu" (builtins.readFile ../../other/scripts/desktop/window-screenshot.nu);
window-screenshot = pkgs.writeShellScriptBin "window-screenshot.sh" (builtins.readFile ../../other/scripts/desktop/window-screenshot.sh);
# desktop-ctl = pkgs.writeShellScriptBin "desktop-ctl.sh" (builtins.readFile ../scripts/desktop/desktop-ctl.sh);
desktop-ctl = import ../../other/scripts/desktop/desktopctl.nix {inherit pkgs;};
# TODO: fix ocr screenshot script
ocr-screenshot = pkgs.writeShellScriptBin "ocr-screenshot.sh" (builtins.readFile ../../other/scripts/desktop/ocr-screenshot.sh);
# rofi calculator copied from https://github.com/barbuk/menu-qalc
menu-qalc = pkgs.writeShellScriptBin "menu-qalc" (builtins.readFile ../../other/scripts/desktop/menu-qalc.sh);
in
with lib; {
imports = [
./audio.nix
./gaming.nix
./creative.nix # TODO: more fine grained choices, not every setup needs fspy or rawtherapee
./dunst.nix
./compositing.nix
./ios-compat.nix
./syncthing.nix
./kdeconnect.nix
./themeing.nix
./cloud.nix
./networking.nix
./polybar.nix
./social.nix
./mail.nix
./specific-hardware
./evremap.nix
./xmonad.nix
./firefox.nix
];
i18n.inputMethod = {
enabled = "fcitx5";
fcitx5.addons = with pkgs; [
fcitx5-mozc
fcitx5-gtk
];
};
programs.seahorse.enable = true;
security.pam.services.jade.enableGnomeKeyring = true;
virtualisation.libvirtd.enable = true;
services = {
printing.enable = true;
gnome.gnome-keyring.enable = true;
xserver = {
enable = true;
xkb = {
layout = "us";
variant = "altgr-intl";
};
libinput = {
enable = true;
};
desktopManager = {
xterm.enable = false;
};
displayManager = {
defaultSession = "none+xmonad";
gdm.enable = true;
};
windowManager.xmonad = {
enable = true;
};
};
};
programs.xss-lock = {
enable = true;
lockerCommand = "${pkgs.i3lock}/bin/i3lock -c 1d2021";
};
services.illum.enable = true;
services.avahi.enable = true;
services.smartd = {
enable = true;
notifications.x11.enable = true;
notifications.test = true;
};
home-manager.users.jade = {pkgs, ...}: {
programs.ssh = {
controlMaster = "yes";
};
programs.bat = {
# TODO: more config
enable = true;
};
programs.rofi = {
enable = true;
theme = ../../other/rofi-themes/applauncher.rasi;
};
home.packages = with pkgs; [
just
bacon
magic-wormhole-rs
yt-dlp
i3lock
rofimoji
feh
xorg.xinput
arandr
flameshot
tesseract5
imagemagick
xclip
xmacro
xorg.xev
syncplay
# filemanager
xfce.thunar
xfce.tumbler
xfce.thunar-archive-plugin
gnome.file-roller
# media/file viewers
vlc
mpv
evince
nomacs
# from environment.systemPackages cleanup
font-manager
xdotool
xorg.xwininfo
gparted
# uhk-agent
cool-retro-term
xdg-desktop-portal-gtk
virt-manager
ddccontrol-db
firebird-emu
gitg
gpick
qdirstat
ffmpeg_5
# external
libnotify
i3lock
rofi
rofimoji
feh
xorg.xinput
arandr
flameshot
tesseract5
imagemagick
xclip
kitty
xmacro
brightnessctl
drawing
libqalculate
# custom scripts
window-screenshot
desktop-ctl
ocr-screenshot
menu-qalc
# meow
oneko
plover.dev
];
xsession = {
enable = true;
};
};
}

View file

@ -1,35 +0,0 @@
{
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;
};
};
};
}

19
modules/desktop/dunst.nix Normal file
View file

@ -0,0 +1,19 @@
{...}: {
home-manager.users.jade = {pkgs, ...}: {
services.dunst = {
enable = true;
settings = {
global = {
dmenu = "${pkgs.rofi}/bin/rofi -theme gruvbox-dark -dmenu -p dunst";
browser = "${pkgs.librewolf}/bin/librewolf";
mouse_left_click = "context";
mouse_middle_click = "close_current";
background = "#282828";
foreground = "#ebdbb2";
frame_color = "#504945";
frame_width = 2;
};
};
};
};
}

View file

@ -0,0 +1,39 @@
{
pkgs,
config,
lib,
...
}: let
cfg = config.jade.desktop.evremap;
evremap = pkgs.rustPlatform.buildRustPackage {
pname = "evremap";
version = "0.1.0";
src = pkgs.fetchFromGitHub {
owner = "wez";
repo = "evremap";
rev = "4480c4eda223b98899b0fbd926bc34f7bd0e1a18";
sha256 = "sha256-BxSrphgW1n465FX6bKVkq6O0XE2JqanfSYlsGwWUWkQ=";
};
cargoHash = "";
cargoLock.lockFile = ../../other/evremap.Cargo.lock;
postPatch = ''
cp ${../../other/evremap.Cargo.lock} Cargo.lock
'';
nativeBuildInputs = [pkgs.pkg-config];
buildInputs = [pkgs.libevdev];
};
in
with lib; {
options.jade.desktop.evremap = {
enable = mkEnableOption "Enable evremap";
};
config = mkIf cfg.enable {
systemd.services.evremap = {
script = "${evremap}/bin/evremap remap ${../../other/remaps-${config.networking.hostName}.toml}";
wantedBy = ["multi-user.target"];
unitConfig = {
Restart = "on-failure";
};
};
};
}

330
modules/desktop/firefox.nix Normal file
View file

@ -0,0 +1,330 @@
{...}: {
home-manager.users.jade = {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"
];
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://mipmip.github.io/home-manager-option-search/";
params = [
{
name = "query";
value = "{searchTerms}";
}
];
}
];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = ["hm"];
};
"NixOS Wiki" = {
urls = [
{
template = "https://nixos.wiki/index.php?title=Special:Search&amp;search={searchTerms}&amp;namespace=0";
}
];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = ["nxwk"];
};
"Noogle" = {
urls = [
{
template = "https://noogle.dev/q?term={searchTerms}";
params = [
{
name = "q";
value = "{searchTerms}";
}
];
}
];
};
"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 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"];
};
"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;
"image.jxl.enabled" = true;
"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;
"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;
"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" = "";
"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" = true;
"privacy.resistFingerprinting.letterboxing.dimensions" = "";
"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;
"browser.newtabpage.pinned" = [
{
title = "Katzencafé";
url = "https://ck.katzen.cafe";
}
{
title = "Katzenschmiede";
url = "https://forge.katzen.cafe";
}
{
title = "CatPad";
url = "https://pad.katzen.cafe";
}
{
title = "Katzenwolke";
url = "https://wolke.katzen.cafe";
}
{
title = "Penpot";
url = "https://design.katzen.cafe";
}
];
};
};
};
};
}

View file

@ -0,0 +1,22 @@
{
config,
lib,
pkgs,
...
}: 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
];
};
};
}

View file

@ -1,361 +0,0 @@
{ 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

@ -1,33 +0,0 @@
{ ... }:
{
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

@ -1,77 +0,0 @@
(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

@ -1,37 +0,0 @@
(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

@ -1,18 +0,0 @@
(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

@ -1,58 +0,0 @@
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

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

View file

@ -1,78 +0,0 @@
#!/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

@ -1,38 +0,0 @@
#!/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

@ -1,23 +0,0 @@
(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

@ -1,10 +0,0 @@
(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

@ -1,55 +0,0 @@
(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

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

View file

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

View file

@ -1,31 +0,0 @@
{
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

@ -1,151 +0,0 @@
{ 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

@ -1,37 +0,0 @@
{ 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

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

View file

@ -1,28 +0,0 @@
{ ... }:
{
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|Bitwarden|Träwelling).*$"; }
];
excludes = [
{
title = "^.*((Schrottkatze|Statistics|Leaderboard) - Träwelling|chaos.social|Nekoverse|catgirl.cloud).*$";
}
{ is-floating = true; }
];
block-out-from = "screen-capture";
}
];
};
}

View file

@ -1,68 +0,0 @@
{ pkgs, ... }:
{
home.packages = [ pkgs.gamescope ];
programs.niri.settings = {
window-rules = [
{
# handle steam grabbing focus 1000 times on startup
matches = [
{
app-id = "steam";
title = "Steam";
}
];
open-focused = false;
}
{
# position steam notifs correctly: https://github.com/YaLTeR/niri/wiki/Application-Issues
matches = [
{
app-id = "steam";
title = "^notificationtoasts_[\\d]+_desktop$";
}
];
default-floating-position = {
x = 0;
y = 0;
relative-to = "bottom-right";
};
shadow.enable = false;
border.enable = false;
baba-is-float = false;
open-focused = false;
}
{
matches = [
{
title = "Guild Wars 2";
app-id = "steam_app_1284210";
}
];
border.enable = false;
shadow.enable = false;
}
{
matches = [
{
app-id = "vesktop";
title = "vesktop";
is-floating = true;
}
];
geometry-corner-radius =
let
val = 5.;
in
{
bottom-left = val;
bottom-right = val;
top-left = val;
top-right = val;
};
}
];
# fix electron apps not doing wayland
environment.ELECTRON_OZONE_PLATFORM_HINT = "auto";
};
}

View file

@ -1,14 +0,0 @@
{ 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

@ -1,80 +0,0 @@
{ ... }:
{
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;
}
];
baba-is-float = 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;
}
];
};
}

View file

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

View file

@ -1,22 +0,0 @@
{ 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

@ -1,18 +0,0 @@
{ 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

@ -1,38 +0,0 @@
{ ... }:
{
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

@ -0,0 +1,29 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.jade.desktop.ios-compat;
in
with lib; {
options.jade.desktop.ios-compat = {
enable = mkEnableOption "Enable the ios compatability programs";
};
config = mkIf cfg.enable {
services = {
usbmuxd.enable = true;
gvfs.enable = true;
};
home-manager.users.jade = {pkgs, ...}: {
home.packages = with pkgs; [
libimobiledevice
libimobiledevice-glue
ifuse
usbmuxd
libusbmuxd
gvfs
];
};
};
}

View file

@ -0,0 +1,22 @@
{
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

@ -1,15 +0,0 @@
{ ... }:
{
time.timeZone = "Europe/Berlin";
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";
};
}

77
modules/desktop/mail.nix Normal file
View file

@ -0,0 +1,77 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.jade.desktop.mail;
imap = {
host = "imap.migadu.com";
port = 993;
};
smtp = {
host = "smtp.migadu.com";
port = 465;
tls.enable = true;
};
in
with lib; {
options.jade.desktop.mail = {
enable = mkEnableOption "Enable thunderbird mail stuff";
};
config = mkIf cfg.enable {
home-manager.users.jade = {pkgs, ...}: {
accounts.email.accounts = {
"Jade" = rec {
inherit imap smtp;
address = "jade@schrottkatze.de";
userName = address;
realName = "Jade";
thunderbird.enable = true;
primary = true;
};
"Logins" = rec {
inherit imap smtp;
address = "logins@schrottkatze.de";
userName = address;
realName = "Logins";
thunderbird.enable = true;
};
"Contact" = rec {
inherit imap smtp;
address = "contact@schrottkatze.de";
userName = address;
realName = "Jade";
thunderbird.enable = true;
};
"Schule" = rec {
inherit imap smtp;
address = "schule@schrottkatze.de";
userName = address;
realName = "Jade";
thunderbird.enable = true;
};
"Admin" = rec {
inherit imap smtp;
address = "admin@schrottkatze.de";
userName = address;
realName = "admin";
thunderbird.enable = true;
};
"CatchAll" = rec {
inherit imap smtp;
address = "catchall@schrottkatze.de";
userName = address;
realName = "Catch all";
thunderbird.enable = true;
};
};
programs.thunderbird = {
enable = true;
profiles.jade = {
isDefault = true;
};
};
};
};
}

View file

@ -0,0 +1,69 @@
{
config,
lib,
pkgs,
...
}: let
addNuShebang = path:
builtins.concatStringsSep "\n\n" [
"#!${pkgs.nushellFull}/bin/nu"
(builtins.readFile path)
];
in {
config = {
networking = {
networkmanager = {
wifi.backend = "wpa_supplicant";
dispatcherScripts = [
{
type = "basic";
source = pkgs.writeText "dispatcher" (addNuShebang ../../other/scripts/dispatcher.nu);
}
];
};
hosts = {
"127.0.0.1" = [
"www.tiktok.com"
"www.twitter.com"
"www.instagram.com"
"www.facebook.com"
"www.snapchat.com"
"tiktok.com"
"twitter.com"
"instagram.com"
"facebook.com"
"snapchat.com"
"google-analytics.com"
"stats.g.doubleclick.net"
"googleadservices.com"
"googletagmanager.com"
"googletagservices.com"
"googlesyndication.com"
];
};
};
environment.etc = with builtins; (
listToAttrs (
map (v: {
name = "networkhooks/${v}";
value = {
text = addNuShebang ../../other/scripts/networkhooks/${v};
mode = "0755";
};
})
(attrNames (readDir ../../other/scripts/networkhooks))
)
);
systemd.services."NetworkManager-wait-online".enable = false;
services.mullvad-vpn.enable = true;
home-manager.users.jade = {pkgs, ...}: {
home.packages = with pkgs; [
networkmanagerapplet
mullvad-vpn
speedtest-cli
];
};
};
}

150
modules/desktop/polybar.nix Normal file
View file

@ -0,0 +1,150 @@
{
config,
lib,
pkgs,
...
}: {
config = {
home-manager.users.jade = {pkgs, ...}: {
services.polybar = {
enable = true;
package = pkgs.polybarFull;
script = "";
settings = {
colors = {
background = "#282828";
background-alt = "#3c3836";
foreground = "#ebdbb2";
primary = "#d65d0e";
secondary = "#fe8019";
alert = "#cc241d";
disabled = "#504945";
};
"bar/status" = {
# Style
bottom = true;
width = "100%";
height = "24px";
radius = 0;
tray-position = "center";
background = "\${colors.background}";
foreground = "\${colors.foreground}";
line-size = "4px";
border-color = "#00000000";
padding-left = 0;
padding-right = 1;
module-margin = 1;
separator = "|";
separator-foreground = "\${colors.disabled}";
font-0 = "FiraCode Nerd Font";
modules-left = "xworkspaces xwindow";
modules-right = "memory cpu wlan bat0 bat1";
cursor-click = "pointer";
cursor-scroll = "ns-resize";
enable-ipc = true;
wm-restack = "generic";
override-redirect = false;
};
"module/xworkspaces" = {
type = "internal/xworkspaces";
label-active = "";
label-active-padding = 1;
label-occupied = "";
label-occupied-padding = 1;
label-urgent = "";
label-urgent-foreground = "\${colors.alert}";
label-urgent-padding = 1;
label-empty = "";
label-empty-foreground = "\${colors.disabled}";
label-empty-padding = 1;
};
"module/xwindow" = {
type = "internal/xwindow";
label = "%title:0:60:...%";
};
"module/memory" = {
type = "internal/memory";
interval = 2;
format-prefix = "󰍛 ";
format-prefix-foreground = "\${colors.primary}";
label = "%percentage_used:2%%";
};
"module/cpu" = {
type = "internal/cpu";
interval = "2";
format-prefix = "󰻠 ";
format-prefix-foreground = "\${colors.primary}";
label = "%percentage:2%%";
};
"network-base" = {
type = "internal/network";
interval = 5;
format-connected = "<ramp-signal> <label-connected>";
format-disconnected = "<label-disconnected>";
label-disconnected = "󰣼";
label-disconnected-foreground = "#d65d0e";
ramp.signal = [
"%{F#cc241d}󰣾"
"%{F#d79921}󰣴"
"%{F#98971a}󰣶"
"%{F#98971a}󰣸"
"%{F#98971a}󰣺"
];
};
"module/wlan" = {
"inherit" = "network-base";
interface-type = "wireless";
label-connected = "%{F#F0C674}%{F-} %local_ip%";
};
"battery-base" = {
type = "internal/battery";
poll-interval = 1;
time-format = "%H%{F#7c6f64}:%{F#d5c4a1}%M";
label-charging = "%{F#98971a}󰚥 %{F#ebdbb2}%percentage%%%{F#d5c4a1} %time%";
format-charging = "<ramp-capacity> <label-charging>";
label-discharging = "%{F#ebdbb2}%percentage%%%{F#bdae93} %time%";
format-discharging = "<ramp-capacity> <label-discharging>";
label-full = "%{F#98971a}󰁹%{F#ebdbb2} %percentage%%";
format-full = "<label-full>";
label-low = "%{F#cc241d}󰂎%{F#ebdbb2} %percentage%%";
format-low = "<label-low>";
ramp.capacity = [
"%{F#cc241d}󰁺"
"%{F#d79921}󰁻"
"%{F#98971a}󰁼"
"%{F#98971a}󰁽"
"%{F#98971a}󰁾"
"%{F#98971a}󰁿"
"%{F#98971a}󰂀"
"%{F#98971a}󰂁"
"%{F#98971a}󰂂"
"%{F#98971a}󰁹"
];
};
"module/bat0" = {
"inherit" = "battery-base";
battery = "BAT0";
adapter = "ADP1";
};
"module/bat1" = {
"inherit" = "battery-base";
battery = "BAT1";
adapter = "ADP1";
};
"settings" = {
screenchange-reload = true;
pseudo-transparency = true;
};
};
};
};
};
}

View file

@ -1,20 +0,0 @@
{ 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

@ -0,0 +1,23 @@
{
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, ...}: {
home.packages = with pkgs; [
evolutionWithPlugins
signal-desktop
mumble
element-desktop
];
};
};
}

View file

@ -3,11 +3,9 @@
lib,
pkgs,
...
}:
{
}: {
imports = [
./spacenav.nix
./wacom.nix
./hardware_key.nix
];
}

View file

@ -1,11 +1,10 @@
{ pkgs, ... }:
{
{pkgs, ...}: {
environment.systemPackages = with pkgs; [
spacenavd
libspnav
];
systemd.services.spacenavd = {
wantedBy = [ "graphical.target" ];
wantedBy = ["graphical.target"];
script = "${pkgs.spacenavd}/bin/spacenavd -d";
};
}

View file

@ -0,0 +1,10 @@
{...}: {
services.xserver.wacom.enable = true;
home-manager.users.jade = {pkgs, ...}: {
home.packages = [
# TODO: figure out if the previous enabled option depends on these anyway
pkgs.libwacom
pkgs.wacomtablet
];
};
}

View file

@ -0,0 +1,21 @@
{
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

@ -1,46 +1,19 @@
{ 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;
};
config,
lib,
pkgs,
...
}: {
config = {
fonts.packages = with pkgs; [
atkinson-hyperlegible
];
home-manager.users.jade = {pkgs, ...}: {
home.packages = with pkgs; [
gtk-engine-murrine
gruvbox-dark-gtk
gruvbox-dark-icons-gtk
];
gtk = {
enable = true;
cursorTheme = {
@ -48,10 +21,24 @@
name = "phinger-cursors";
size = 30;
};
font = {
package = pkgs.atkinson-hyperlegible;
name = "Atkinson Hyperlegible";
size = 11.5;
};
iconTheme = {
package = pkgs.gruvbox-dark-icons-gtk;
name = "gruvbox-dark-icons";
};
theme = {
package = pkgs.gruvbox-dark-gtk;
name = "gruvbox-dark";
};
};
qt = {
enable = true;
platformTheme = "gtk";
};
};
};
}

View file

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

View file

@ -0,0 +1,43 @@
{
lib,
pkgs,
...
}: {
home-manager.users.jade = {
config,
pkgs,
...
}: let
xmobarGhc = pkgs.haskellPackages.ghcWithPackages (pkgs:
with pkgs; [
xmobar
statgrab
]);
in {
home.packages = [xmobarGhc pkgs.xmonadctl];
programs.xmobar = {
enable = true;
};
home.file."xmobar.hs" = rec {
source = ../../haskell/xmobar/xmobar.hs;
target = ".config/xmobar/xmobar.hs";
onChange = ''
${xmobarGhc}/bin/ghc -threaded ${target}
${pkgs.busybox}/bin/pkill xmobar
${pkgs.haskellPackages.xmonad}/bin/xmonad --restart
'';
};
xsession.windowManager.xmonad = {
enable = true;
enableContribAndExtras = true;
config = ../../haskell/xmonad/xmonad.hs;
};
home.file.wallpaper = {
target = "Pictures/wallpaper.jpg";
source = ../../other/wallpaper.jpg;
onChange = ''
feh --bg-fill ~/Pictures/wallpaper.jpg;
'';
};
};
}

View file

@ -3,8 +3,7 @@
lib,
pkgs,
...
}:
{
}: {
config = {
networking = {
firewall = {
@ -17,6 +16,9 @@
80
443
# syncthing web ui
8384
# syncthing
22000

24
modules/flatpak.nix Normal file
View file

@ -0,0 +1,24 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.jade.flatpak;
in
with lib; {
options.jade.flatpak = {
enable = mkEnableOption "Enable flatpak";
};
config = mkIf cfg.enable {
services.flatpak.enable = true;
xdg.portal = {
enable = true;
# TODO
config.common.default = "*";
extraPortals = [
pkgs.xdg-desktop-portal-gtk
];
};
};
}

80
modules/git.nix Normal file
View file

@ -0,0 +1,80 @@
{
config,
lib,
pkgs,
...
}: {
home-manager.users.jade = {
pkgs,
config,
...
}: {
programs.git = {
enable = true;
userName = "Schrottkatze";
userEmail = "git@schrottkatze.de";
aliases = {
a = "add";
c = "commit";
ca = "commit --all";
p = "push";
pl = "pull";
s = "status";
};
signing = {
key = "${pkgs.writeText "red_nk3.pub" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOaE8TFsIazpn4OnHvHcRpOFr9FfvMaWOiEjmHsmnAoE cardno:000F_70CD7D05"}";
signByDefault = true;
};
extraConfig = {
gpg = {
format = "ssh";
};
};
};
programs.jujutsu = {
enable = true;
settings = {
user = {
name = config.programs.git.userName;
email = config.programs.git.userEmail;
};
};
};
programs.gitui = {
enable = true;
keyConfig = ''
(
open_help: Some(( code: F(1), modifiers: ( bits: 0,),)),
move_left: Some(( code: Char('h'), modifiers: ( bits: 0,),)),
move_right: Some(( code: Char('l'), modifiers: ( bits: 0,),)),
move_up: Some(( code: Char('k'), modifiers: ( bits: 0,),)),
move_down: Some(( code: Char('j'), modifiers: ( bits: 0,),)),
popup_up: Some(( code: Char('p'), modifiers: ( bits: 2,),)),
popup_down: Some(( code: Char('n'), modifiers: ( bits: 2,),)),
page_up: Some(( code: Char('b'), modifiers: ( bits: 2,),)),
page_down: Some(( code: Char('f'), modifiers: ( bits: 2,),)),
home: Some(( code: Char('g'), modifiers: ( bits: 0,),)),
end: Some(( code: Char('G'), modifiers: ( bits: 1,),)),
shift_up: Some(( code: Char('K'), modifiers: ( bits: 1,),)),
shift_down: Some(( code: Char('J'), modifiers: ( bits: 1,),)),
edit_file: Some(( code: Char('I'), modifiers: ( bits: 1,),)),
status_reset_item: Some(( code: Char('U'), modifiers: ( bits: 1,),)),
diff_reset_lines: Some(( code: Char('u'), modifiers: ( bits: 0,),)),
diff_stage_lines: Some(( code: Char('s'), modifiers: ( bits: 0,),)),
stashing_save: Some(( code: Char('w'), modifiers: ( bits: 0,),)),
stashing_toggle_index: Some(( code: Char('m'), modifiers: ( bits: 0,),)),
stash_open: Some(( code: Char('l'), modifiers: ( bits: 0,),)),
abort_merge: Some(( code: Char('M'), modifiers: ( bits: 1,),)),
)
'';
};
};
}

View file

@ -1,37 +0,0 @@
{
pkgs,
config,
lib,
...
}:
let
cfg = config.jade.hwKey;
in
with lib;
{
options.jade.hwKey = {
pamAuth.enable = mkEnableOption "Enable PAM authentication with hardware keys";
};
config = {
# nitrokey
services.udev.packages = [ pkgs.nitrokey-udev-rules ];
# smartcard daemon
services.pcscd.enable = true;
# authenticate using hw key
security.pam = {
services.jade.u2fAuth = cfg.pamAuth.enable;
u2f = {
enable = true;
control = "sufficient";
settings = {
cue = true;
authFile = "/home/jade/.ssh/u2f_keys";
};
};
};
programs.i3lock.u2fSupport = true;
};
}

View file

@ -1,13 +0,0 @@
{ ... }:
{
services.xserver.wacom.enable = true;
home-manager.users.jade =
{ pkgs, ... }:
{
home.packages = [
# TODO: figure out if the previous enabled option depends on these anyway
pkgs.libwacom
pkgs.wacomtablet
];
};
}

View file

@ -1,17 +0,0 @@
{ ... }:
{
imports = [
./evremap.nix
];
services = {
libinput = {
enable = true;
};
xserver = {
xkb = {
layout = "us";
variant = "altgr-intl";
};
};
};
}

View file

@ -1,133 +0,0 @@
{
pkgs,
config,
lib,
...
}:
let
cfg = config.jade.input.remapping;
evremap = pkgs.rustPlatform.buildRustPackage {
pname = "evremap";
version = "0.1.0";
src = pkgs.fetchFromGitHub {
owner = "wez";
repo = "evremap";
rev = "4480c4eda223b98899b0fbd926bc34f7bd0e1a18";
sha256 = "sha256-BxSrphgW1n465FX6bKVkq6O0XE2JqanfSYlsGwWUWkQ=";
};
useFetchCargoVendor = true;
cargoHash = "sha256-O1rJ48m8Q7kZABw/UNpmUT7FFBWQedo6CuV+NX9kDt8=";
nativeBuildInputs = [ pkgs.pkg-config ];
buildInputs = [ pkgs.libevdev ];
};
toml = pkgs.formats.toml { };
in
with lib;
{
options.jade.input.remapping = {
enable = mkEnableOption "Enable evremap";
devices = mkOption {
type = types.attrsOf (
types.submodule (
{ name, ... }:
{
options = {
device_name = mkOption {
type = types.str;
description = "The device name";
default = name;
};
remap = mkOption {
type = types.listOf (
types.submodule (
{ ... }:
{
options.input = mkOption { type = types.listOf types.str; };
options.output = mkOption { type = types.listOf types.str; };
}
)
);
default = [ ];
};
swapKeys = mkOption {
description = "Lists with two keys to be swapped on the keyboard layout.";
type = types.listOf (
# verify that each key swapping list contains two elements
types.addCheck (types.listOf types.str) (v: builtins.length v == 2)
);
default = [ ];
};
dual_role = mkOption {
type = types.listOf (
types.submodule (
{ ... }:
{
options.input = mkOption { type = types.str; };
options.hold = mkOption { type = types.listOf types.str; };
options.tap = mkOption { type = types.listOf types.str; };
}
)
);
default = [ ];
};
};
}
)
);
};
};
config = mkIf cfg.enable (
with builtins;
let
devs = map (
{
device_name,
remap,
swapKeys,
dual_role,
}:
{
inherit device_name dual_role;
# expand swapKeys to normal remaps
remap = concatLists [
remap
(lib.lists.flatten (
map (keys: [
{
input = [ (head keys) ];
output = [ (lib.lists.last keys) ];
}
{
input = [ (lib.lists.last keys) ];
output = [ (head keys) ];
}
]) swapKeys
))
];
}
) (attrValues cfg.devices);
in
{
# generate numbered systemd services for each device to be remapped
# https://github.com/wez/evremap/issues/17
systemd.services = listToAttrs (
genList (i: {
name = "evremap${toString i}";
value =
let
cfgFile = toml.generate "remaps-${toString i}.toml" (elemAt devs i);
in
{
wantedBy = [ "multi-user.target" ];
serviceConfig.ExecStart = "-${evremap}/bin/evremap remap ${cfgFile}";
unitConfig = {
Restart = "on-failure";
};
};
}) (length devs)
);
environment.systemPackages = [ evremap ];
}
);
}

73
modules/kmscon.nix Normal file
View file

@ -0,0 +1,73 @@
{
pkgs,
config,
lib,
...
}: let
# generate shell command options for kmscon fom an attrset
generateOptions = with builtins; (
opts:
toString (
attrValues (
mapAttrs (name: value: "--${name} ${toString value}") opts
)
)
);
# generate a hexadecimal number lookup table to get integers from them
hexLookupTable = with lib; (listToAttrs (genList (i: {
name = let
r = toHexString i;
in (
# pad with 0 in front if only 1 digit
if (stringLength r) == 1
then "0${r}"
else r
);
value = toString i;
})
256));
# "parse" hex color strings and convert them to kmscon options
hexToOpt = with lib; (color:
concatStringsSep "," [
(getAttr (substring 1 2 (toUpper color)) hexLookupTable)
(getAttr (substring 3 2 (toUpper color)) hexLookupTable)
(getAttr (substring 5 2 (toUpper color)) hexLookupTable)
]);
in {
services.kmscon = {
enable = true;
fonts = [
{
name = "FiraCode Nerd Font";
package = pkgs.nerdfonts.override {fonts = ["FiraCode"];};
}
];
extraConfig = "font-size=14";
# extraOptions = "--term xterm-256color";
extraOptions = generateOptions {
xkb-layout = config.services.xserver.xkb.layout;
xkb-variant = config.services.xserver.xkb.variant;
palette = "custom";
palette-foreground = hexToOpt "#ebdbb2";
palette-background = hexToOpt "#282828";
palette-black = hexToOpt "#282828";
palette-red = hexToOpt "#cc241d";
palette-green = hexToOpt "#98971a";
palette-yellow = hexToOpt "#d79921";
palette-blue = hexToOpt "#458588";
palette-magenta = hexToOpt "#b16286";
palette-cyan = hexToOpt "#689d6a";
palette-light-grey = hexToOpt "#a89984";
palette-dark-grey = hexToOpt "#928374";
palette-light-red = hexToOpt "#fb4934";
palette-light-green = hexToOpt "#b8bb26";
palette-light-yellow = hexToOpt "#fabd2f";
palette-light-blue = hexToOpt "#83a598";
palette-light-magenta = hexToOpt "#d3869b";
palette-light-cyan = hexToOpt "#8ec07c";
palette-white = hexToOpt "#ebdbb2";
};
hwRender = true;
};
}

View file

@ -1,60 +0,0 @@
{
pkgs,
pkgs-stable,
config,
lib,
...
}:
let
cfg = config.jade.desktop.media;
in
with lib;
{
imports = [
./obs.nix
./fonts.nix
];
options.jade.desktop.media.videoEditing = mkEnableOption "Enable Video editing software";
config = {
home-manager.users.jade =
{ pkgs, ... }:
{
imports = [ ./typst.nix ];
home.packages = with pkgs; [
# creative software basics
pastel
krita
gimp
drawing
inkscape-with-extensions
pixelorama
rawtherapee
scribus
audacity
openscad-unstable
openscad-lsp
imagemagick
ffmpeg_7-full
libreoffice
# viewers
pkgs-stable.font-manager
yt-dlp
syncplay
vlc
mpv
evince
nomacs
jellyfin-media-player
(mkIf cfg.videoEditing kdePackages.kdenlive)
(mkIf cfg.videoEditing glaxnimate)
];
};
};
}

View file

@ -1,51 +0,0 @@
{ pkgs, ... }:
{
nixpkgs.config.packageOverrides = pkgs: {
google-fonts = pkgs.google-fonts.overrideAttrs (oldAttrs: {
src = pkgs.fetchFromGitHub {
owner = "google";
repo = "fonts";
rev = "8a0041ea7b92e339a7ce13e4e1dadcc85cb8f5df";
sha256 = "sha256-9TzeihEKIEDRtDuv+NmLWjTpoGnBR+RP/jIBfB1O06U=";
};
installPhase = oldAttrs.installPhase + "mv $out/share/fonts/truetype $out/share/fonts/ttf";
});
};
fonts = {
packages = with pkgs; [
nerd-fonts.fira-code
nerd-fonts.departure-mono
google-fonts
montserrat
noto-fonts
atkinson-hyperlegible
arkpandora_ttf
liberation_ttf
caladea
carlito
garamond-libre
ocr-a
amiri
libertine
inter
b612
departure-mono
];
fontDir.enable = true;
};
home-manager.users.jade =
{ ... }:
{
fonts.fontconfig = {
enable = true;
defaultFonts = {
emoji = [ ];
monospace = [ ];
sansSerif = [ "Atkinson Hyperlegible" ];
serif = [ ];
};
};
};
}

View file

@ -1,38 +0,0 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.jade.desktop.media.obs;
in
with lib;
{
options.jade.desktop.media.obs = mkEnableOption "Enable OBS";
config = mkIf cfg {
programs.obs-studio.enableVirtualCamera = true;
# OBS stuffs
environment.systemPackages = [
(pkgs.wrapOBS {
plugins = with pkgs.obs-studio-plugins; [
wlrobs
obs-backgroundremoval
obs-pipewire-audio-capture
waveform
obs-3d-effect
];
})
];
boot = {
extraModulePackages = with config.boot.kernelPackages; [
v4l2loopback
];
extraModprobeConfig = ''
options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1
'';
};
};
}

View file

@ -1,45 +0,0 @@
{
pkgs,
typst-within,
...
}:
let
packages = {
typst-configs = pkgs.fetchFromGitea {
domain = "forge.katzen.cafe";
owner = "schrottkatze";
repo = "typst-configs";
rev = "9a5bd5256ace2a56de51b89793f191b4eecce1dc"; # :REV:- rev = "%REV%";-:#
sha256 = "sha256-E+5fJULNxM0XcbimuENqIJC24ZwPRMSHnG97ncBtEGw="; # :SHA:- sha256 = "%SHA%";-:#
};
flow = pkgs.fetchFromGitHub {
owner = "MultisampledNight";
repo = "flow";
rev = "f5c653c706d80145165ec684b217b803a0246e8c";
sha256 = "sha256-tXfogxo1DGmsrwjOhF2h+60825P6NVcgQGN6Q1tspZA=";
};
};
mkTypstPath = name: ".local/share/typst/packages/local/${name}/0.1.0";
in
{
home.file = {
typst-configs = {
target = mkTypstPath "typst-configs";
source = packages.typst-configs;
recursive = true;
};
flow = {
target = mkTypstPath "flow";
source = packages.flow;
recursive = true;
};
};
# home.packages = [typst-within.packages."x86_64-linux".default];
home.packages = [
pkgs.typst
# `typed` dependencies
pkgs.mupdf
pkgs.inotify-tools
];
}

View file

@ -1,23 +0,0 @@
{ ... }:
{
imports = [
./firewall.nix
./hosts.nix
./eduroam.nix
./dispatchers
];
networking.networkmanager.enable = true;
networking.networkmanager.wifi.backend = "wpa_supplicant";
systemd.services."NetworkManager-wait-online".enable = false;
services.mullvad-vpn.enable = true;
home-manager.users.jade =
{ pkgs, ... }:
{
home.packages = with pkgs; [
networkmanagerapplet
mullvad-vpn
macchanger
];
};
}

View file

@ -1,29 +0,0 @@
{ pkgs, ... }:
let
addNuShebang =
path:
builtins.concatStringsSep "\n\n" [
"#!${pkgs.nushell}/bin/nu"
(builtins.readFile path)
];
in
{
networking.networkmanager.dispatcherScripts = [
{
type = "basic";
source = pkgs.writeText "dispatcher" (addNuShebang ./dispatcher.nu);
}
];
environment.etc =
with builtins;
(listToAttrs (
map (v: {
name = "networkhooks/${v}";
value = {
text = addNuShebang ./hooks/${v};
mode = "0755";
};
}) (attrNames (readDir ./hooks))
));
}

View file

@ -1,62 +0,0 @@
# Thanks @ kloenk (@kloenk@catcatnya.com) for making this for me at MRMCD 2024 :33
{ pkgs-stable, ... }:
let
caDir = "/var/lib/easyroam";
uuid = "821ad781-76a3-447f-a2e8-c7f18a1df3bc";
in
{
systemd.services.easyroam = {
requires = [ "NetworkManager.service" ];
after = [ "NetworkManager.service" ];
requiredBy = [ "network-online.target" ];
path = with pkgs-stable; [
networkmanager
openssl
gnused
];
script = ''
set -x
openssl pkcs12 -password pass: -in ${caDir}/my_easyroam_cert.p12 -legacy -nokeys | openssl x509 > ${caDir}/easyroam_client_cert.pem
cn=$(openssl x509 -noout -subject -in ${caDir}/easyroam_client_cert.pem -legacy | sed 's/.*CN = \(.*\), C.*/\1/')
openssl pkcs12 -legacy -password pass: -in ${caDir}/my_easyroam_cert.p12 -nodes -nocerts | openssl rsa -aes256 -passin pass: -passout pass:meow -out ${caDir}/easyroam_client_key.pem
openssl pkcs12 -password pass: -in ${caDir}/my_easyroam_cert.p12 -legacy -cacerts -nokeys > ${caDir}/easyroam_root_ca.pem
nmcli connection modify --temporary uuid ${uuid} 802-1x.identity "$cn"
'';
serviceConfig = {
Type = "oneshot";
};
};
networking.networkmanager.ensureProfiles.profiles.eduroam = {
"802-1x" = {
ca-cert = "${caDir}/easyroam_root_ca.pem";
client-cert = "${caDir}/easyroam_client_cert.pem";
domain-suffix-match = "easyroam.eduroam.de";
eap = "tls;";
identity = "meow";
private-key = "${caDir}/easyroam_client_key.pem";
private-key-password = "meow";
};
connection = {
id = "eduroam";
type = "wifi";
inherit uuid;
};
ipv4 = {
method = "auto";
};
ipv6 = {
addr-gen-mode = "default";
method = "auto";
};
proxy = { };
wifi = {
mode = "infrastructure";
ssid = "eduroam";
};
wifi-security = {
key-mgmt = "wpa-eap";
};
};
}

View file

@ -1,25 +0,0 @@
{ ... }:
{
networking.hosts = {
"127.0.0.1" = [
"www.tiktok.com"
"www.twitter.com"
"www.instagram.com"
"www.facebook.com"
"www.snapchat.com"
"tiktok.com"
"twitter.com"
"instagram.com"
"facebook.com"
"snapchat.com"
"google-analytics.com"
"stats.g.doubleclick.net"
"googleadservices.com"
"googletagmanager.com"
"googletagservices.com"
"googlesyndication.com"
];
};
}

View file

@ -1,33 +0,0 @@
{
rs-programs,
niri,
...
}:
{
nix = {
extraOptions = ''
experimental-features = nix-command flakes
keep-outputs = true
keep-derivations = true
'';
gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 60d";
};
};
nixpkgs = {
config = {
allowUnfree = true;
permittedInsecurePackages = [
"electron-27.3.11"
"nodejs-16.20.0"
];
};
overlays = [
rs-programs
niri.overlays.niri
];
};
}

View file

@ -1,14 +0,0 @@
{ ... }:
{
home-manager.users.jade =
{ pkgs, ... }:
{
programs.btop = {
enable = true;
settings = {
color_theme = "gruvbox_dark";
vim_keys = true;
};
};
};
}

Some files were not shown because too many files have changed in this diff Show more