rewrite and refactor a lot, delete redundant configs

This commit is contained in:
Schrottkatze 2023-11-14 12:22:19 +01:00
parent ca61775d84
commit c191adcc99
44 changed files with 334 additions and 1607 deletions

View file

@ -27,9 +27,9 @@ with builtins;
environment = {
systemPackages = with pkgs; [
nushellFull networkmanager htmlq
htmlq
wget git neofetch pciutils zip unzip gnutar iw btop nodejs jdk8 jdk11
wget git neofetch pciutils zip unzip gnutar iw btop nodejs jdk8 jdk11
jdk libsecret gh nix-prefetch-scripts fzf glab ripgrep
sl lolcat appimage-run git-crypt file whois p7zip file nmap cmatrix tree
socat smartmontools mprocs
@ -93,9 +93,12 @@ with builtins;
boot.kernel.sysctl."vm.max_map_count" = 2147483642;
hardware.opengl.enable = true;
hardware.uinput.enable = true;
hardware = {
opengl.enable = true;
uinput.enable = true;
bluetooth.enable = true;
keyboard.uhk.enable = true;
};
security.rtkit.enable = true;
@ -113,7 +116,6 @@ users.users.jade = {
algorithm = "zstd";
};
# users.defaultUserShell = pkgs.nushell.override { additionalFeatures = (p: p ++ ["dataframe" "extra"]); };
users.defaultUserShell = pkgs.nushellFull;
}

View file

@ -86,8 +86,6 @@ myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
, ((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")
, ((modm, xK_o), spawn "rofi -show searchwolf -modes searchwolf:searchwolf -theme gruvbox-dark")
-- screenshotting
-- TODO: Fix/rewrite window-screenshot.sh
, ((modm, xK_w), spawn "window-screenshot.nu")
@ -281,6 +279,7 @@ myStartupHook = do
spawn "pkill volumeicon; volumeicon"
spawn "pkill nm-applet; nm-applet"
spawn "mullvad-vpn --background"
spawn "feh --bg-fill ~/Pictures/wallpaper.jpg"
setDefaultKeyRemap myRemaps [myRemaps]

View file

@ -31,9 +31,7 @@ in {
jade = {
flatpak.enable = true;
desktop = {
enable = true;
compositing.enable = true;
creative.enable = true;
syncthing.enable = true;
kdeconnect.enable = true;
cloud.enable = true;
@ -41,10 +39,7 @@ in {
mail.enable = true;
gaming.enable = true;
};
helix.enable = true;
zellij.enable = true;
terminal.enable = true;
# zsh.enable = true;
};
hardware.trackpoint = {

View file

@ -1,49 +0,0 @@
{ pkgs, inputs, ... }:
{
imports = [ inputs.arion.nixosModules.arion ];
virtualisation.docker.enable = true;
virtualisation.arion = {
backend = "docker";
projects.calckey.settings = {
networks.calcnet.name = "calcnet";
services = {
"web".service = {
image = "docker.io/thatonecalculator/calckey";
container_name = "calckey_web";
restart = "unless-stopped";
depends_on = [ "db" "redis" ];
ports = [ "3000:3000" ];
networks = [ "calcnet" ];
environment = {
"NODE_ENV" = "production";
};
volumes = [
"/calckey/files:/calckey/files"
"/calckey/config:/calckey/.config:ro"
];
};
"redis".service = {
image = "docker.io/redis:7.0-alpine";
container_name = "calckey_redis";
restart = "unless-stopped";
networks = [ "calcnet" ];
volumes = [ "/calckey/redis:/data" ];
};
"db".service = {
image = "docker.io/postgres:12.2-alpine";
container_name = "calckey_db";
restart = "unless-stopped";
networks = [ "calcnet" ];
environment = {
POSTGRES_PASSWORD = "calckey";
POSTGRES_USER = "calckey";
POSTGRES_DB = "calckey";
};
volumes = [
"/calckey/db:/var/lib/postgresql/data"
];
};
};
};
};
}

View file

@ -1,109 +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).
{ config, pkgs, ... }:
{
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
../../common.nix
../../modules/zsh.nix
../../modules/neovim.nix
../../modules/firewall.nix
./proxy.nix
./calckey.nix
];
jade = {
neovim.enable = true;
zsh.enable = true;
};
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = false;
boot.kernelPackages = pkgs.linuxPackages_latest;
networking.hostName = "katzencafe"; # Define your hostname.
# Pick only one of the below networking options.
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
# Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8";
# Define a user account. Don't forget to set a password with passwd.
users.users.jade = {
isNormalUser = true;
extraGroups = [ "wheel" ]; # Enable sudo for the user.
packages = with pkgs; [
];
};
# List packages installed in system profile. To search, run:
environment.systemPackages = with pkgs; [
vim gitMinimal # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
wget
];
system.stateVersion = "22.11"; # Did you read the comment?
services.jitsi-meet = {
enable = true;
hostName = "meet.katzen.cafe";
};
services.jitsi-videobridge.openFirewall = true;
services.murmur = {
enable = true;
openFirewall = true;
registerHostname = "mumble.katzen.cafe";
sslKey = "/var/lib/acme/mumble.katzen.cafe/key.pem";
sslCert = "/var/lib/acme/mumble.katzen.cafe/cert.pem";
};
containers = {
"phtanumb-wiki" = {
autoStart = true;
forwardPorts = [
{
containerPort = 8080;
hostPort = 8099;
protocol = "tcp";
}
];
bindMounts = {
"/var/mediawiki" = {
hostPath = "/phtanum-b/wiki";
isReadOnly = false;
};
};
config = { config, pkgs, ... }: {
services.mediawiki = {
enable = true;
name = "phtanum-b";
virtualHost.listen = [
{
#ip = "127.0.0.1";
port = 8080;
ssl = false;
}
];
virtualHost.adminAddr = "admin@katzen.cafe";
passwordFile = "/var/mediawiki/passwordFile";
extraConfig = ''
# Disable anonymous editing
$wgGroupPermissions['*']['edit'] = false;
'';
};
system.stateVersion = "22.11";
};
};
};
}

View file

@ -1,39 +0,0 @@
# 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 + "/profiles/qemu-guest.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "virtio_pci" "usbhid" "sr_mod" ];
boot.initrd.kernelModules = [ "virtio_gpu" ];
boot.kernelParams = [ "console=tty" ];
boot.kernelModules = [ ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/0ce40e38-b9ef-4d84-b678-10745b7fedb4";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/DEBB-944F";
fsType = "vfat";
};
swapDevices =
[ { device = "/dev/disk/by-uuid/9cb23bf3-128c-4847-8f72-f14f4aaa5026"; }
];
# 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.enp1s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
}

View file

@ -1,61 +0,0 @@
{ inputs, config, pkgs, ... }:
{
security.acme = {
acceptTerms = true;
defaults.email = "jade@schrottkatze.de";
defaults.server = "https://acme-staging-v02.api.letsencrypt.org/directory";
defaults.webroot = "/var/lib/acme/acme-challenge";
certs = {
"ck.katzen.cafe" = {
group = "nginx";
keyType = "rsa4096";
};
"meet.katzen.cafe" = {
group = "nginx";
keyType = "rsa4096";
};
"wiki.phtanum-b.katzen.cafe" = {
group = "nginx";
keyType = "rsa4096";
};
"mumble.katzen.cafe" = {
group = "murmur";
keyType = "rsa4096";
};
};
};
services.nginx = {
enable = true;
recommendedGzipSettings = true;
recommendedOptimisation = true;
recommendedProxySettings = true;
recommendedTlsSettings = true;
virtualHosts = {
"ck.katzen.cafe" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://localhost:3000";
proxyWebsockets = true;
extraConfig = ''
client_max_body_size 8M;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
'';
};
};
"wiki.phtanum-b.katzen.cafe" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://localhost:8099";
};
};
};
};
}

View file

@ -31,9 +31,7 @@
jade = {
flatpak.enable = true;
desktop = {
enable = true;
compositing.enable = true;
creative.enable = true;
syncthing.enable = true;
kdeconnect.enable = true;
cloud.enable = true;
@ -42,10 +40,7 @@
ios-compat.enable = true;
mail.enable = true;
};
zellij.enable = true;
terminal.enable = true;
helix.enable = true;
zsh.enable = true;
};
boot = {
loader = {

View file

@ -62,9 +62,7 @@ in {
jade = {
flatpak.enable = true;
desktop = {
enable = true;
compositing.enable = true;
creative.enable = true;
syncthing.enable = true;
kdeconnect.enable = true;
cloud.enable = true;

View file

@ -1,59 +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).
{ inputs, config, pkgs, ... }:
{
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
../../common.nix
./proxy.nix
./vaultwarden.nix
./nextcloud.nix
./mumble.nix
./microbin.nix
../../modules/neovim.nix
../../modules/zsh.nix
../../modules/firewall.nix
#./synapse.nix
./penpot.nix
];
#systemd.services.wordsofgod-bot.enable = true;
systemd.services.wordsofgod-bot = {
wantedBy = [ "multi-user.target" ];
serviceConfig.ExecStart = "${inputs.wordsofgod.packages."x86_64-linux".default}/bin/wordsofgod";
serviceConfig.EnvironmentFile = "/etc/wordsofgod-bot/wordsofgod.env";
};
services = {
openssh.permitRootLogin = "without-password";
fail2ban = {
enable = true;
bantime-increment.enable = true;
};
};
jade = {
neovim.enable = true;
zsh.enable = true;
};
# Use the GRUB 2 boot loader.
boot.loader.grub.enable = true;
boot.loader.grub.version = 2;
boot.loader.grub.device = "/dev/sda"; # or "nodev" for efi only
environment.systemPackages = [ inputs.wordsofgod ];
networking.hostName = "schrottserver"; # Define your hostname.
networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
# default settings for stateful data; don't change unless reinstall with newer version
system.stateVersion = "22.11"; # Did you read the comment?
}

View file

@ -1,37 +0,0 @@
# 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 + "/profiles/qemu-guest.nix")
];
boot.initrd.availableKernelModules = [ "ahci" "xhci_pci" "virtio_pci" "sd_mod" "sr_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/e8d88849-3746-4c24-9ecd-09921645ef81";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/0107-0E2C";
fsType = "vfat";
};
swapDevices = [ ];
# 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.enp1s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View file

@ -1,27 +0,0 @@
{ inputs, config, pkgs, ... }:
{
environment.systemPackages = [ inputs.karton.defaultPackage."x86_64-linux" ];
systemd.services.karton = {
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
environment = {
#MICROBIN_AUTH_USERNAME = "jade";
KARTON_HASH_IDS = "";
KARTON_EDITABLE = "";
KARTON_PRIVATE = "";
KARTON_HIGHLIGHTSYNTAX = "";
KARTON_PUBLIC_PATH = "https://s10e.de";
KARTON_QR = "";
KARTON_URL_EP = "u";
KARTON_RAW_EP = "r";
KARTON_PASTA_EP = "p";
};
script = "${inputs.karton.defaultPackage."x86_64-linux"}/bin/karton";
#scriptArgs = "--auth-password ${builtins.readFile ../secret-data/mb-pass} --auth-username jade --editable --hash-ids --no-listing --highlightsyntax --public-path https://s10e.de --qr";
serviceConfig = {
Type = "simple";
RootDirectory="/";
WorkingDirectory = "/karton";
};
};
}

View file

@ -1,8 +0,0 @@
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [ murmur ];
services.murmur = {
enable = true;
registerHostname = "mumble.schrottkatze.de";
};
}

View file

@ -1,38 +0,0 @@
{ pkgs, ... }:
{
services.nextcloud = {
enable = true;
config = {
dbtype = "pgsql";
dbuser = "nextcloud";
dbhost = "/run/postgresql"; # nextcloud will add /.s.PGSQL.5432 by itself
dbname = "nextcloud";
adminpassFile = "${../../secret-data/nextcloud-admin-pass}";
adminuser = "root";
};
package = pkgs.nextcloud25;
extraApps = with pkgs.nextcloud25Packages.apps; {
inherit bookmarks calendar contacts news tasks;
};
extraAppsEnable = true;
hostName = "wolke.schrottkatze.de";
https = true;
};
services.postgresql = {
enable = true;
ensureDatabases = [ "nextcloud" ];
ensureUsers = [
{
name = "nextcloud";
ensurePermissions."DATABASE nextcloud" = "ALL PRIVILEGES";
}
];
};
# ensure that postgres is running *before* running the setup
systemd.services."nextcloud-setup" = {
requires = ["postgresql.service"];
after = ["postgresql.service"];
};
}

View file

@ -1,75 +0,0 @@
{ pkgs, inputs, ... }:
{
imports = [ inputs.arion.nixosModules.arion ];
virtualisation.docker.enable = true;
virtualisation.arion = {
backend = "docker";
projects.penpot.settings = {
networks.penpot.name = "penpot";
services = {
"penpot-backend".service = {
image = "penpotapp/backend:latest";
volumes = [ "/penpot_assets:/opt/data/assets" ];
depends_on = [ "penpot-postgres" "penpot-redis" ];
networks = [ "penpot" ];
environment = {
"PENPOT_FLAGS" = "enable-registration enable-login-with-password disable-email-verification enable-smtp enable-prepl-server";
"PENPOT_PREPL_HOST" = "0.0.0.0";
"PENPOT_PUBLIC_URI" = "https://pp.schrottkatze.de";
"PENPOT_DATABASE_URI" = "postgresql://penpot-postgres/penpot";
"PENPOT_DATABASE_USERNAME" = "penpot";
"PENPOT_DATABASE_PASSWORD" = "penpot";
"PENPOT_REDIS_URI" = "redis://penpot-redis/0";
"PENPOT_ASSETS_STORAGE_BACKEND" = "assets-fs";
"PENPOT_STORAGE_ASSETS_FS_DIRECTORY" = "/opt/data/assets";
"PENPOT_TELEMETRY_ENABLED" = "false";
"PENPOT_SMTP_DEFAULT_FROM" = "Penpot <noreply-pp@schrottkatze.de>";
"PENPOT_SMTP_DEFAULT_REPLY_TO" = "Penpot <noreply-pp@schrottkatze.de>";
"PENPOT_SMTP_HOST" = "smtp.migadu.com";
"PENPOT_SMTP_PORT" = "587";
"PENPOT_SMTP_USERNAME" = "noreply-pp@schrottkatze.de";
"PENPOT_SMTP_PASSWORD" = "${builtins.readFile ../../secret-data/penpot-smtp-pass}";
"PENPOT_SMTP_TLS" = "true";
"PENPOT_SMTP_SSL" = "false";
};
};
"penpot-frontend".service = {
image = "penpotapp/frontend:latest";
ports = [ "9001:80" ];
volumes = [ "/penpot_assets:/opt/data/assets" ];
depends_on = [ "penpot-backend" "penpot-exporter" ];
networks = [ "penpot" ];
};
"penpot-exporter".service = {
image = "penpotapp/exporter:latest";
networks = [ "penpot" ];
environment = {
"PENPOT_PUBLIC_URI" = "http://penpot-frontend";
"PENPOT_REDIS_URI" = "redis://penpot-redis/0";
};
};
"penpot-postgres".service = {
image = "postgres:15";
stop_signal = "SIGINT";
volumes = [ "/penpot_postgres_v15:/var/lib/postgresql/data" ];
networks = [ "penpot" ];
environment = {
"POSTGRES_INITDB_ARGS" = "--data-checksums";
"POSTGRES_DB" = "penpot";
"POSTGRES_USER" = "penpot";
"POSTGRES_PASSWORD" = "penpot";
};
};
"penpot-redis".service = {
image = "redis:7";
networks = [ "penpot" ];
};
};
};
};
}

View file

@ -1,124 +0,0 @@
{ inputs, config, pkgs, ... }:
{
security.acme = {
acceptTerms = true;
defaults.email = "jade@schrottkatze.de";
certs = {
"schrottkatze.de" = {
group = "nginx";
keyType = "rsa4096";
};
"vw.schrottkatze.de" = {
group = "nginx";
keyType = "rsa4096";
};
"wolke.schrottkatze.de" = {
group = "nginx";
keyType = "rsa4096";
};
"s10e.de" = {
group = "nginx";
keyType = "rsa4096";
};
"synapse.schrottkatze.de" = {
group = "nginx";
keyType = "rsa4096";
};
"pp.schrottkatze.de" = {
group = "nginx";
keyType = "rsa4096";
};
};
};
environment.systemPackages = [ inputs.meowsite.packages."x86_64-linux".default inputs.gumseite.packages."x86_64-linux".default ];
services.nginx = {
enable = true;
recommendedGzipSettings = true;
recommendedOptimisation = true;
recommendedProxySettings = true;
recommendedTlsSettings = true;
virtualHosts = {
"schrottkatze.de" = {
forceSSL = true;
enableACME = true;
root = "${inputs.meowsite.packages."x86_64-linux".default}";
};
"vw.schrottkatze.de" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://localhost:8812"; #changed the default rocket port due to some conflict
proxyWebsockets = true;
};
locations."/notifications/hub" = {
proxyPass = "http://localhost:3012";
proxyWebsockets = true;
};
locations."/notifications/hub/negotiate" = {
proxyPass = "http://localhost:8812";
proxyWebsockets = true;
};
};
"wolke.schrottkatze.de" = {
forceSSL = true;
enableACME = true;
};
"pp.schrottkatze.de" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://localhost:9001";
proxyWebsockets = true;
};
};
"s10e.de" = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://127.0.0.1:8080$request_uri";
};
};
"synapse.schrottkatze.de" = {
forceSSL = true;
enableACME = true;
http2 = true;
listen = [
{
addr = "0.0.0.0";
port = 443;
ssl = true;
}
{
addr = "[::]";
port = 443;
ssl = true;
}
{
addr = "0.0.0.0";
port = 8448;
ssl = true;
}
{
addr = "[::]";
port = 8448;
ssl = true;
}
];
locations."~ ^(/_matrix|/_synapse/client)" = {
proxyPass = "http://localhost:8008";
extraConfig = ''
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
client_max_body_size 2G;
'';
};
extraConfig = "proxy_http_version 1.1;";
};
};
};
}

View file

@ -1,33 +0,0 @@
{ pkgs, ... }:
{
services = {
matrix-synapse = {
enable = true;
settings = {
server_name = "synapse.schrottkatze.de";
};
};
postgresql = {
enable = true;
initialScript = pkgs.writeText "synapse-init.sql" ''
CREATE ROLE "matrix-synapse";
CREATE DATABASE "matrix-synapse" WITH OWNER "matrix-synapse"
TEMPLATE template0
LC_COLLATE = "C"
LC_CTYPE = "C";
'';
#initdbArgs = [
#"--locale=C"
#"--encoding=UTF8"
#];
ensureDatabases = [ "matrix-synapse" ];
ensureUsers = [
{
name = "matrix-synapse";
ensurePermissions."DATABASE \"matrix-synapse\"" = "ALL PRIVILEGES";
}
];
};
};
}

View file

@ -1,22 +0,0 @@
{ pkgs, ... }:
{
services.vaultwarden = {
enable = true;
#backupDir = "/vw-backups";
config = {
DATA_FOLDER = "/var/lib/bitwarden_rs/";
DATABASE_URL = "/var/lib/bitwarden_rs/db.sqlite3";
LOG_FILE = "/var/log/bitwarden";
WEBSOCKET_ENABLED = true;
WEBSOCKET_ADDRESS = "0.0.0.0";
WEBSOCKET_PORT = 3012;
SIGNUPS_VERIFY = true;
ROCKET_LOG = "debug";
ENABLE_WAL = false;
ADMIN_TOKEN = builtins.readFile ../../secret-data/vaultwarden-admin-token;
DOMAIN = "https://vw.schrottkatze.de";
SMTP_TIMEOUT = 15;
ROCKET_PORT = 8812;
};
};
}

View file

@ -1,13 +1,10 @@
{ ... }:
{
imports = [
./zellij.nix
./shell
./desktop
./terminal.nix
./neovim.nix
./zsh.nix
./flatpak.nix
./firewall.nix
./helix.nix
];
}

View file

@ -7,27 +7,11 @@ in with lib; {
};
config = mkIf cfg.enable {
home-manager.users.jade = { pkgs, ... }: {
# services.nextcloud-client = {
# enable = true;
# startInBackground = true;
# };
programs.rbw = {
enable = true;
settings = {
base_url = "vw.schrottkatze.de";
email = "jade@schrottkatze.de";
};
};
home.packages = with pkgs; [
fluent-reader
bitwarden
rofi-rbw
];
xsession.windowManager.i3.config.startup = [
{
command = "bitwarden";
}
];
};
};
}

View file

@ -1,28 +1,30 @@
{ config, lib, pkgs, ... }:
{ pkgs, ... }: {
fonts.packages = with pkgs; [
(nerdfonts.override { fonts = [ "FiraCode" ]; })
montserrat
noto-fonts
atkinson-hyperlegible
arkpandora_ttf
liberation_ttf
ocr-a
];
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
let cfg = config.jade.desktop.creative;
in with lib; {
options.jade.desktop.creative = {
enable = mkEnableOption "Enable creative software";
};
config = mkIf cfg.enable {
home-manager.users.jade = { pkgs, ... }: {
home.packages = with pkgs; [
audacity
krita
gimp-with-plugins
inkscape-with-extensions
obs-studio
kdenlive
fspy
scribus
onlyoffice-bin
onlyoffice-bin
digikam
darktable
rawtherapee
];
};
digikam
darktable
rawtherapee
];
};
}

View file

@ -1,47 +1,20 @@
{ config, lib, pkgs, ... }:
let
cfg = config.jade.desktop;
# 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; };
# search and open in browser
searchwolf = import ../../other/scripts/desktop/searchwolf.nix { inherit pkgs; };
# permaclip
pc-get = pkgs.writeShellScriptBin "pc-get.sh" (builtins.readFile ../../other/scripts/desktop/permaclip/pc-get.sh);
pc-set = pkgs.writeShellScriptBin "pc-set.sh" (builtins.readFile ../../other/scripts/desktop/permaclip/pc-set.sh);
em-record = pkgs.writeShellScriptBin "em-record.sh" (builtins.readFile ../../other/scripts/desktop/macros/record.sh);
em-play = pkgs.writeShellScriptBin "em-play.sh" (builtins.readFile ../../other/scripts/desktop/macros/play.sh);
em-play-loop = pkgs.writeShellScriptBin "em-play-loop.sh" (builtins.readFile ../../other/scripts/desktop/macros/play-loop.sh);
# 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);
#bitw = pkgs.buildGo118Module rec {
#pname = "bitw";
#version = "0.1.0";
#src = pkgs.fetchFromGitHub {
#owner = "mvdan";
#repo = "bitw";
#rev = "9da6ca0287ae8e4b1aa7fcdf7c4e8c2736718c3b";
#sha256 = "sha256-qe9y6BEsfsEiPFXlM/SFliSd+2fnfDMHyw/O6EE5hpA=";
#};
#nativeBuildInputs = with pkgs; [ gitMinimal ];
#doCheck = false;
#vendorHash = "sha256-KQr0DtyH3xzlFwsDl3MGLRRLQC4+EtdTOG7IhmNCzV4=";
#vendorHash = null;
#GOFLAGS = "-mod=readonly";
#proxyVendor = true;
#deleteVendor = true;
#preBuild = ''
#go mod vendor
#'';
#};
in with lib; {
imports = (mkIf cfg.enable [
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
@ -51,232 +24,114 @@ in with lib; {
./networking.nix
./polybar.nix
./social.nix
#./xkeysnail.nix
./mail.nix
./specific-hardware
./xmonad.nix
./i3
]).content;
options.jade.desktop = {
enable = mkEnableOption "Enable the i3 setup";
};
config = mkIf cfg.enable {
fonts.packages = with pkgs; [
(nerdfonts.override { fonts = [ "FiraCode" ]; })
montserrat
noto-fonts
atkinson-hyperlegible
arkpandora_ttf
liberation_ttf
ocr-a
];
fonts.fontDir.enable = true;
];
i18n.inputMethod = {
enabled = "fcitx5";
fcitx5.addons = with pkgs; [
fcitx5-mozc
fcitx5-gtk
];
};
hardware.bluetooth.enable = true;
hardware.keyboard.uhk.enable = true;
#hardware.spacenavd.enable = true;
programs.seahorse.enable = true;
security.pam.services.jade.enableGnomeKeyring = true;
virtualisation.libvirtd.enable = true;
# environment.systemPackages = with pkgs; [ gnome.gdm ];
services = {
printing.enable = true;
gnome.gnome-keyring.enable = true;
xserver = {
layout = "us";
xkbVariant = "altgr-intl";
enable = true;
wacom.enable = true;
libinput = {
enable = true;
};
desktopManager = {
xterm.enable = false;
# gnome = {
# enable = true;
# };
};
displayManager = {
defaultSession = "none+xmonad";
gdm.enable = true;
};
windowManager.xmonad = {
enable = true;
};
};
};
# sensible modules:
# - [x] audio
# - [x] compositing (picom configs)
# - [x] gaming (steam, lutris, prism...)
# - [x] cloud (pw manager, nextcloud, fluent reader)
# - [x] syncthing
# - [x] social (evolution, discord, matrix?)
# - [ ] set up mail accounts properly
# - [x] creative (obs, blender, gimp n shit)
# - [x] apple-stuff (ifuse etc)
# - [x] themeing
# - [x] vpn/networking stuff
# - [ ] keymap
# - [ ] seperate keymap by modules like autostarts
# - [x] kdeconnect
# - [x] polybar
# - [ ] bluetooth
# - [ ] spacenav support (with custom systemd service)
# - [ ] wacom config
# - [x] xkeysnail
# - [ ] oneko
# also useful:
# - every custom script its own flake n stuff
programs.xss-lock = {
enable = true;
lockerCommand = "${pkgs.i3lock}/bin/i3lock";
};
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.bat = {
# TODO: more config
enable = true;
};
programs.nushell = {
enable = true;
package = config.users.defaultUserShell;
configFile.source = ../../other/config.nu;
# envFile.text = ''
# use ~/.cache/starship/init.nu
# '';
envFile.source = ../../other/env.nu;
extraConfig = ''
source ${pkgs.nu_scripts}/share/nu_scripts/modules/nix/nix.nu;
'';
};
programs.starship = {
enable = true;
enableNushellIntegration = true;
settings = {
format = "$all$directory$character";
character = {
success_symbol = "[\\$](green)";
error_symbol = "[X](red)";
};
git_branch = {
format = "\\[[$symbol$branch]($style)\\]";
symbol = " ";
};
git_status = {
format = "([\\[$all_status$ahead_behind\\]]($style))";
};
haskell = {
format = "\\[[$symbol($version)]($style)\\]";
symbol = " ";
};
cmd_duration = {
format = "\\[[ $duration]($style)\\]";
};
nix_shell = {
format = "\\[[$symbol$state( \\($name\\))]($style)\\]";
symbol = " ";
};
rust = {
format = "\\[[$symbol($version)]($style)\\]";
symbol = " ";
};
};
};
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;
};
};
};
programs.rofi = {
enable = true;
theme = ../../other/rofi-themes/applauncher.rasi;
};
home.packages = with pkgs; [
spotifyd spotify-tui
#nushell
nu_scripts direnv
just bacon
magic-wormhole-rs
yt-dlp
# carapace completer
carapace
i3lock rofimoji feh xorg.xinput arandr flameshot
tesseract5 imagemagick xclip xmacro libwacom wacomtablet xorg.xev
syncplay
# categories
# 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 librewolf firefox uhk-agent
cool-retro-term xdg-desktop-portal-gtk obsidian zettlr 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 ddgr jq
# custom scripts
window-screenshot desktop-ctl em-record em-play em-play-loop
ocr-screenshot menu-qalc pc-get pc-set searchwolf
# meow
oneko
i18n.inputMethod = {
enabled = "fcitx5";
fcitx5.addons = with pkgs; [
fcitx5-mozc
fcitx5-gtk
];
xsession = {
};
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;
layout = "us";
xkbVariant = "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";
};
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.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 librewolf firefox uhk-agent
cool-retro-term xdg-desktop-portal-gtk obsidian zettlr 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
];
xsession = {
enable = true;
};
};
}

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

@ -1,170 +0,0 @@
{ config, lib, pkgs, ... }:
let
searchwolf = import ../../../other/scripts/desktop/searchwolf.nix { inherit pkgs; };
desktop-ctl = import ../../../other/scripts/desktop/desktopctl.nix { inherit pkgs; };
pc-get = pkgs.writeShellScriptBin "pc-get.sh" (builtins.readFile ../../../other/scripts/desktop/permaclip/pc-get.sh);
pc-set = pkgs.writeShellScriptBin "pc-set.sh" (builtins.readFile ../../../other/scripts/desktop/permaclip/pc-set.sh);
em-record = pkgs.writeShellScriptBin "em-record.sh" (builtins.readFile ../../../other/scripts/desktop/macros/record.sh);
em-play = pkgs.writeShellScriptBin "em-play.sh" (builtins.readFile ../../../other/scripts/desktop/macros/play.sh);
em-play-loop = pkgs.writeShellScriptBin "em-play-loop.sh" (builtins.readFile ../../../other/scripts/desktop/macros/play-loop.sh);
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; {
options.jade.desktop.i3wm = {
enable = mkEnableOption "Enable i3wm";
};
config = mkIf config.jade.desktop.i3wm.enable {
services.xserver.windowManager.i3.enable = true;
home-manager.users.jade = { pkgs, ... }: {
xsession.windowManager.i3 = {
enable = true;
config = {
bars = [];
workspaceAutoBackAndForth = true;
focus = {
followMouse = false;
};
# Startup {{{
startup = [
# wallpaper
{
command = "feh --bg-fill ${../../../other/wallpaper.jpg}";
always = true;
notification = false;
}
# meowmeowmeow
{
command = "pkill oneko; oneko -tofocus -tora -position +-1+5 -fg palevioletred3 -bg pink -name 'Rose the desktop kitty'";
always = true;
}
];
# }}}
# Assigns {{{
assigns = {
"1" = [
{ class = "discord"; }
{ class = "nheko"; }
];
"2" = [
{ class = "librewolf"; }
];
};
# }}}
# Keyboard shortcuts {{{
modifier = "Mod4";
modes = {
resize = with {
# mod = builtins.break config.xsession.windowManager.i3.config.modifier;
mod = builtins.break "Mod4";
}; {
aaa = builtins.break "a";
"${mod}+h" = "resize shrink width 10 px or 10 ppt";
"${mod}+j" = "resize grow height 10 px or 10 ppt";
"${mod}+k" = "resize shrink height 10 px or 10 ppt";
"${mod}+l" = "resize grow width 10 px or 10 ppt";
"Return" = "mode default";
"Escape" = "mode default";
"${mod}+r" = "mode default";
};
};
keybindings = with {
#mod = config.xsession.windowManager.i3.config.modifier;
mod = "Mod4";
}; lib.mkOptionDefault {
# switch window focus
"${mod}+h" = "focus left";
"${mod}+j" = "focus down";
"${mod}+k" = "focus up";
"${mod}+l" = "focus right";
# move windows
"${mod}+Shift+h" = "move left";
"${mod}+Shift+j" = "move down";
"${mod}+Shift+k" = "move up";
"${mod}+Shift+l" = "move right";
# layout shit
"${mod}+shift+semicolon" = "split h";
"${mod}+semicolon" = "split v";
"${mod}+f" = "fullscreen toggle";
"${mod}+Shift+w" = "layout tabbed";
"${mod}+e" = "layout toggle split";
"${mod}+Shift+space" = "floating toggle";
# focus parents/children
"${mod}+Shift+a" = "focus parent";
"${mod}+Shift+c" = "focus child";
# screenshot
"${mod}+w" = "exec window-screenshot.sh";
"${mod}+s" = "exec flameshot gui -c -p $HOME/Pictures/screenshots";
"${mod}+a" = "exec flameshot screen -c -p $HOME/Pictures/screenshots";
"${mod}+t" = "exec ocr-screenshot.sh";
# rofi fuckery
"${mod}+d" = "exec --no-startup-id rofi -show drun -theme ${../../../other/rofi-themes/applauncher.rasi}";
"${mod}+space" = "exec --no-startup-id rofi -show combi -combi-show window#run -modes combi -theme ${../../../other/rofi-themes/applauncher.rasi}";
"${mod}+i" = "exec --no-startup-id rofimoji -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" = "exec --no-startup-id rofi -show \"desktopctl\" -modes \"desktopctl:${desktop-ctl.outPath}/bin/desktopctl\" -theme ${../../../other/rofi-themes/applauncher.rasi}";
"${mod}+m" = "exec --no-startup-id menu-qalc";
"${mod}+o" = "exec --no-startup-id rofi -show searchwolf -modes \"searchwolf:${searchwolf.outPath}/bin/searchwolf\"";
# audio
"XF86AudioRaiseVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status";
"XF86AudioLowerVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status";
"XF86AudioMute" = "exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status";
"XF86AudioMicMute" = "exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status";
"XF86AudioNext" = "exec playerctl next";
"XF86AudioPrev" = "exec playerctl previous";
"XF86AudioPause" = "exec playerctl pause";
"XF86AudioPlay" = "exec playerctl play";
"XF86AudioStop" = "exec playerctl stop";
"XF86MonBrightnessUp" = "exec brightnessctl set 5%+";
"XF86MonBrightnessDown" = "exec brightnessctl set 5%-";
"XF86KbdBrightnessUp" = "exec brillo -kA 10.0";
"XF86KbdBrightnessDown" = "exec brillo -kU 10.0";
# macros
"${mod}+q" = "exec em-record.sh";
"${mod}+p" = "exec em-play.sh";
"${mod}+Shift+p" = "exec em-play-loop.sh";
# permaclip
"${mod}+c" = "exec rofi -show register -modes \"register:${pc-set.outPath}/bin/pc-set.sh\" -theme gruvbox-dark";
"${mod}+v" = "exec rofi -show register -modes \"register:${pc-get.outPath}/bin/pc-get.sh\" -theme gruvbox-dark";
};
# }}}
# Visuals {{{
fonts = {
names = [ "Atkinson Hyperlegible" ];
style = "Regular";
size = 9.0;
};
gaps = {
#top = 24;
inner = 15;
outer = 0;
smartGaps = true;
smartBorders = "on";
};
colors = {
background = "#1d2021";
focused = { background = "#282828"; border = "#504945"; childBorder = "#7c6f64"; indicator = "#504945"; text = "#ebdbb2"; };
focusedInactive = { background = "#1d2021"; border = "#504945"; childBorder = "#665c54"; indicator = "#664c54"; text = "#d5c4a1"; };
placeholder = { background = "#1d2021"; border = "#00ff00"; childBorder = "#504945"; indicator = "#504945"; text = "#928374"; };
unfocused = { background = "#1d2021"; border = "#3c3836"; childBorder = "#504945"; indicator = "#504945"; text = "#bdae93"; };
urgent = { background = "#9d0006"; border = "#cc241d"; childBorder = "#3c3836"; indicator = "#fb4943"; text = "#ebdbb2"; };
};
window = {
border = 2;
titlebar = false;
};
# }}}
};
};
};
};
}

View file

@ -2,5 +2,6 @@
{
imports = [
./spacenav.nix
./wacom.nix
];
}

View file

@ -1,4 +1,4 @@
{ config, lib, pkgs, ... }:
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
spacenavd

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

@ -6,5 +6,12 @@ with lib; {
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

@ -1,46 +0,0 @@
{ config, lib, ... }:
let cfg = config.jade.helix;
in with lib; {
options.jade.helix = {
enable = mkEnableOption "Enable helix";
};
config = mkIf cfg.enable {
home-manager.users.jade = { pkgs, ... }: {
home = {
sessionVariables.EDITOR = "hx";
packages = [
pkgs.nil
pkgs.haskell-language-server
pkgs.nodePackages_latest.vscode-html-languageserver-bin
pkgs.nodePackages_latest.vscode-json-languageserver-bin
pkgs.nodePackages_latest.vscode-css-languageserver-bin
pkgs.nodePackages_latest.bash-language-server
];
};
programs.helix = {
enable = true;
settings = {
theme = "gruvbox";
editor = {
line-number = "relative";
lsp.display-messages = true;
};
keys.normal = {
space."=" = ":fmt";
};
};
languages = {
"php" = {
name = "php";
file-types = [ "php" ];
language-server = {
command = "psalm";
args = ["--language-server"];
};
};
};
};
};
};
}

View file

@ -1,179 +0,0 @@
{ config, lib, pkgs, ... }:
let cfg = config.jade.neovim;
in with lib; {
options.jade.neovim = {
enable = mkEnableOption "Enable neovim";
};
config = mkIf cfg.enable {
home-manager.users.jade = { pkgs,... } : {
home.packages = with pkgs; [
rust-analyzer
neovide
];
programs.neovim = {
enable = true;
defaultEditor = true;
viAlias = true;
vimAlias = true;
vimdiffAlias = true;
# Plugins {{{
plugins = with pkgs.vimPlugins; [
nerdtree-git-plugin
ctrlp-vim
vim-devicons
vim-nix
vim-pug
statix
haskell-tools-nvim
coc-rust-analyzer
coc-git
coc-fzf
coc-css
coc-yaml
coc-json
coc-html
coc-emmet
coc-vimlsp
coc-tsserver
{
plugin = toggleterm-nvim;
config = ''
lua require("toggleterm").setup{}
autocmd TermEnter term://*toggleterm#*
\ tnoremap <silent><c-t> <Cmd>exe v:count1 . "ToggleTerm"<CR>
" By applying the mappings this way you can pass a count to your
" mapping to open a specific window.
" For example: 2<C-t> will open terminal 2
nnoremap <silent><c-t> <Cmd>exe v:count1 . "ToggleTerm direction=float"<CR>
inoremap <silent><c-t> <Esc><Cmd>exe v:count1 . "ToggleTerm direction=float"<CR>
'';
}
{
plugin = gruvbox-nvim;
config = "colorscheme gruvbox";
}
{
plugin = nerdtree;
config = "nmap <C-n> :NERDTreeToggle<CR>";
}
{
plugin = nerdcommenter;
config = ''
vmap ++ <plug>NERDCommenterToggle
nmap ++ <plug>NERDCommenterToggle
'';
}
];
# }}}
# Coc {{{
coc = {
enable = true;
settings = {
rust-analyzer.server.path = "${pkgs.rust-analyzer}/bin/rust-analyzer";
};
pluginConfig = ''
let mapleader = "\<Space>"
nmap <silent> gd <Plug>(coc-definition)
nmap <silent> gy <Plug>(coc-type-definition)
nmap <silent> gi <Plug>(coc-implementation)
nmap <silent> gr <Plug>(coc-references)
nnoremap <silent> K :call <SID>show_documentation()<CR>
nmap gr <Plug>(coc-rename)
nmap <leader>ac <Plug>(coc-codeaction)
nmap <leader>qf <Plug>(coc-fix-current)
" Use tab for trigger completion with characters ahead and navigate.
" NOTE: There's always complete item selected by default, you may want to enable
" no select by `"suggest.noselect": true` in your configuration file.
" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by
" other plugin before putting this into your config.
inoremap <silent><expr> <TAB>
\ coc#pum#visible() ? coc#pum#next(1) :
\ CheckBackspace() ? "\<Tab>" :
\ coc#refresh()
inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"
if has('nvim-0.4.0') || has('patch-8.2.0750')
nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
nnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
inoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>"
inoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>"
vnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
endif
" Make <CR> to accept selected completion item or notify coc.nvim to format
" <C-g>u breaks current undo, please make your own choice.
inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm()
\: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
function! CheckBackspace() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction
" Make <CR> to accept selected completion item or notify coc.nvim to format
" <C-g>u breaks current undo, please make your own choice.
inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm()
\: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
function! CheckBackspace() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction
" Use <c-space> to trigger completion.
if has('nvim')
inoremap <silent><expr> <c-space> coc#refresh()
else
inoremap <silent><expr> <c-@> coc#refresh()
endif
nmap <leader>rn <Plug>(coc-rename)
'';
};
# }}}
extraConfig = ''
" neovide
let g:neovide_refresh_rate_idle=5
let g:neovide_cursor_animation_length=0.1
let g:neovide_cursor_trail_size=0.3
let g:neovide_cursor_vfx_mode="railgun"
let g:neovide_remember_window_size = v:false
set guifont=FiraCode\ Nerd\ Font:h11
set fdm=marker
nmap H _
vmap H _
nmap L $
vmap L $
" terminal normal mode
tnoremap <Esc> <C-\><C-n>
" j/k move virtual lines (wrapped)
noremap <silent> <expr> j (v:count == 0 ? 'gj' : 'j')
noremap <silent> <expr> k (v:count == 0 ? 'gk' : 'k')
set relativenumber
set number
set smarttab
set cindent
set tabstop=4
set shiftwidth=4
set foldmethod=syntax
'';
};
};
};
}

View file

@ -0,0 +1,7 @@
{ ... }: {
home-manager.users.jade = { pkgs, ... }: {
programs.carapace = {
enable = true;
};
};
}

10
modules/shell/default.nix Normal file
View file

@ -0,0 +1,10 @@
{ ... }: {
imports = [
./helix.nix
./nu.nix
./starship.nix
./zellij.nix
./carapace.nix
./direnv.nix
];
}

8
modules/shell/direnv.nix Normal file
View file

@ -0,0 +1,8 @@
{ ... }: {
home-manager.users.jade = { pkgs, ... }: {
programs.direnv = {
enable = true;
nix-direnv.enable = true;
};
};
}

39
modules/shell/helix.nix Normal file
View file

@ -0,0 +1,39 @@
{ config, ... }:
{
home-manager.users.jade = { pkgs, ... }: {
home = {
sessionVariables.EDITOR = "hx";
packages = [
pkgs.nil
pkgs.haskell-language-server
pkgs.nodePackages_latest.vscode-html-languageserver-bin
pkgs.nodePackages_latest.vscode-json-languageserver-bin
pkgs.nodePackages_latest.vscode-css-languageserver-bin
pkgs.nodePackages_latest.bash-language-server
];
};
programs.helix = {
enable = true;
settings = {
theme = "gruvbox";
editor = {
line-number = "relative";
lsp.display-messages = true;
};
keys.normal = {
space."=" = ":fmt";
};
};
languages = {
"php" = {
name = "php";
file-types = [ "php" ];
language-server = {
command = "psalm";
args = ["--language-server"];
};
};
};
};
};
}

16
modules/shell/nu.nix Normal file
View file

@ -0,0 +1,16 @@
{ config, ... }: {
home-manager.users.jade = { pkgs, ... }: {
programs.nushell = {
enable = true;
package = config.users.defaultUserShell;
configFile.source = ../../other/config.nu;
envFile.source = ../../other/env.nu;
extraConfig = ''
source ${pkgs.nu_scripts}/share/nu_scripts/modules/nix/nix.nu;
'';
};
programs.starship.enableNushellIntegration = true;
programs.carapace.enableNushellIntegration = true;
programs.direnv.enableNushellIntegration = true;
};
}

View file

@ -0,0 +1,36 @@
{ ... }: {
home-manager.users.jade = { pkgs, ... }: {
programs.starship = {
enable = true;
settings = {
format = "$all$directory$character";
character = {
success_symbol = "[\\$](green)";
error_symbol = "[X](red)";
};
git_branch = {
format = "\\[[$symbol$branch]($style)\\]";
symbol = " ";
};
git_status = {
format = "([\\[$all_status$ahead_behind\\]]($style))";
};
haskell = {
format = "\\[[$symbol($version)]($style)\\]";
symbol = " ";
};
cmd_duration = {
format = "\\[[ $duration]($style)\\]";
};
nix_shell = {
format = "\\[[$symbol$state( \\($name\\))]($style)\\]";
symbol = " ";
};
rust = {
format = "\\[[$symbol($version)]($style)\\]";
symbol = " ";
};
};
};
};
}

35
modules/shell/zellij.nix Normal file
View file

@ -0,0 +1,35 @@
{ config, lib, ... }:
{
home-manager.users.jade = { pkgs, ... }: {
home.file = {
zellij-forgot = {
target = ".config/zellij/plugins/zellij-forgot.wasm";
source = builtins.fetchurl "https://github.com/karimould/zellij-forgot/releases/download/0.2.0/zellij_forgot.wasm";
};
monocle = {
target = ".config/zellij/plugins/monocle.wasm";
source = builtins.fetchurl "https://github.com/imsnif/monocle/releases/download/0.37.2/monocle.wasm";
};
};
programs.zellij = {
enable = true;
settings = {
theme = "gruvbox-dark";
themes.gruvbox-dark = {
fg = "#d5c4a1";
bg = "#282828";
black = "#3C3836";
red = "#CC241D";
green = "#98971A";
yellow = "#D79921";
blue = "#3C8588";
magenta = "#B16286";
cyan = "#689D6A";
white = "#ebdbb2";
orange = "#D65D0E";
};
pane_frames = false;
};
};
};
}

View file

@ -1,48 +0,0 @@
{ config, lib, ... }:
let cfg = config.jade.zellij;
in with lib; {
options.jade.zellij= {
enable = mkEnableOption "Enable the Zellij multiplexer";
};
config = mkIf cfg.enable {
home-manager.users.jade = { pkgs, ... }: {
home.file = {
zellij-forgot = {
target = ".config/zellij/plugins/zellij-forgot.wasm";
source = builtins.fetchurl "https://github.com/karimould/zellij-forgot/releases/download/0.2.0/zellij_forgot.wasm";
};
monocle = {
target = ".config/zellij/plugins/monocle.wasm";
source = builtins.fetchurl "https://github.com/imsnif/monocle/releases/download/0.37.2/monocle.wasm";
};
};
programs.zellij = {
enable = true;
settings = {
theme = "gruvbox-dark";
themes.gruvbox-dark = {
fg = "#d5c4a1";
bg = "#282828";
black = "#3C3836";
red = "#CC241D";
green = "#98971A";
yellow = "#D79921";
blue = "#3C8588";
magenta = "#B16286";
cyan = "#689D6A";
white = "#ebdbb2";
orange = "#D65D0E";
};
# keybinds = {
# session = {
# "bind \"o\"" = {
# LaunchOrFocusPlugin = ["file:/home/jade/.config/zellij/plugins/monocle.wasm" { floating = true; }];
# };
# };
# };
pane_frames = false;
};
};
};
};
}

View file

@ -1,90 +0,0 @@
{ config, lib, pkgs, ... }:
let cfg = config.jade.zsh;
in with lib; {
options.jade.zsh = {
enable = mkEnableOption "Enable zsh";
};
config = mkIf cfg.enable {
home-manager.users.jade = { pkgs,... } : {
home.packages = with pkgs; [
thefuck
];
home.sessionVariables = {
"NEOVIDE_MULTIGRID" = "true";
};
programs.direnv = {
enable = true;
enableZshIntegration = true;
};
programs.zsh = {
enable = true;
enableAutosuggestions = true;
enableSyntaxHighlighting = true;
autocd = true;
defaultKeymap = "viins";
dotDir = ".config/zsh";
history = {
extended = true;
save = 100000;
size = 100000;
};
shellAliases = {
sudo = "sudo ";
v = "nvim";
s = "kitty +kitten ssh";
termsize = "echo \"width: $(tput cols)\nheight: $(tput lines)\"";
batstate = "echo \"Charge state: $(cat /sys/class/power_supply/BAT0/capacity)%\"";
clear = "clear;neofetch";
bdin = "betterdiscordctl install && killall Discord && Discord & disown";
upg = "paru -Syu --skipreview --noconfirm && flatpak upgrade && rustup upgrade";
grepo = "cd $HOME/Documents/repos && ls";
gnix = "cd $HOME/nix-configs";
slol = "while true;do \\clear;sl --help | lolcat;done;";
# localhost.run
lhr = "ssh -R 80:localhost:8080 nokey@localhost.run";
sshrpi = "ssh jade@192.168.178.111";
# cargo
cr = "cargo run";
cb = "cargo build";
cf = "cargo fmt";
cfx = "cargo fix";
cl = "cargo clippy";
cbr = "cargo build --release";
# fucking around
"" = "nvim";
"grammar" = "polymc";
"minecraft" = "polymc";
};
oh-my-zsh = {
enable = true;
plugins = [
"git" "sudo" "colored-man-pages" "zsh-interactive-cd" "branch"
"colorize" "command-not-found" "common-aliases" "rsync" "rust"
"thefuck"
];
theme = "fox";
};
initExtra = ''
# file endings
alias -s {pdf,PDF}="evince"
alias -s {jpg,JPG,png,PNG}="kitty +kitten icat"
alias -s {ods,ODS,odt,ODT,odp,ODP,doc,DOC,docx,DOCX,xls,XLS,xlsx,XLSX,xlsm,XLSM,ppt,PPT,pptx,PPTX,csv,CSV}='libreoffice'
alias -s {html,HTML}="librewolf"
alias -s {mp4,MP4,mov,MOV,mkv,MKV}='vlc'
alias -s {zip,ZIP,war,WAR}="unzip -l"
alias -s {jar,JAR}="java -jar"
alias -s gz="tar -tf"
alias -s {tgz,TGZ}="tar -tf"
'';
};
};
};
}

View file

@ -133,9 +133,9 @@ let light_theme = {
}
# External completer example
let carapace_completer = {|spans|
carapace $spans.0 nushell $spans | from json
}
# let carapace_completer = {|spans|
# carapace $spans.0 nushell $spans | from json
# }
# The default config record. This is where much of your global configuration is setup.
$env.config = {
@ -218,7 +218,7 @@ $env.config = {
external: {
enable: true # set to false to prevent nushell looking into $env.PATH to find more suggestions, `false` recommended for WSL users as this look up may be very slow
max_results: 100 # setting it lower can improve completion performance at the cost of omitting some options
completer: $carapace_completer # check 'carapace_completer' above as an example
# completer: $carapace_completer # check 'carapace_completer' above as an example
}
}
@ -245,23 +245,6 @@ $env.config = {
render_right_prompt_on_last_line: false # true or false to enable or disable right prompt to be rendered on last line of the prompt.
hooks: {
pre_prompt: [{ ||
let direnv = (direnv export json | from json | default {})
if ($direnv | is-empty) {
return
}
$direnv
| items {|key, value|
{
key: $key
value: (if $key in $env.ENV_CONVERSIONS {
do ($env.ENV_CONVERSIONS | get $key | get from_string) $value
} else {
$value
})
}
} | transpose -ird | load-env
}] # run before the prompt is shown
pre_execution: [{ null }] # run before the repl input is run
env_change: {
PWD: [{|before, after| null }] # run if the PWD environment is different since the last repl input
@ -816,3 +799,4 @@ def lcr [
alias gnix = cd ~/nix-configs;
alias grepo = cd ~/Documents/repos;
alias wh = wormhole-rs;
alias gst = git status;

View file

@ -1,15 +0,0 @@
# create ~/permaclip if it doesnt exist already
mkdir -p $HOME/permaclip
tr_name=$(echo ${@% (*} | xargs)
if [ x"$tr_name" != x"" ]; then
nohup bash -c "xclip -selection c -i $HOME/permaclip/${tr_name% (*}" > /dev/null
exit 0
fi
echo -e "\0markup-rows\x1ftrue"
for reg in $(ls ~/permaclip); do
content=$(cat ~/permaclip/$reg)
echo -e "$reg (<i>${content:0:50}...</i>)"
done

View file

@ -1,16 +0,0 @@
# create ~/permaclip if it doesnt exist already
mkdir -p $HOME/permaclip
tr_name=$(echo $@ | xargs)
if [ x"$tr_name" != x"" ]; then
tr_name="${tr_name% (*}"
clipdata=$(xclip -selection c -o)
echo "$clipdata" > $HOME/permaclip/$tr_name
fi
echo -e "\0markup-rows\x1ftrue"
for reg in $(ls ~/permaclip); do
content=$(cat ~/permaclip/$reg)
echo -e "$reg (<i>${content:0:30}</i>)"
done

View file

@ -1,2 +0,0 @@
{ pkgs, ... }:
pkgs.writeShellScriptBin "searchwolf" (builtins.readFile ./searchwolf.sh)

View file

@ -1,25 +0,0 @@
if [ x"$@" = x"exit" ]; then
exit 0
fi
case $ROFI_RETV in
0)
;;
1)
val=${@%%.*}
res=$(echo $ROFI_DATA | jq -r ".[$val]" )
coproc ( librewolf --new-tab $res > /dev/null 2>&1 )
exit 0
;;
2)
ddgrout=$(ddgr --json --num=25 "$@" --url-handler 'librewolf')
for i in $(echo $ddgrout | jq -r 'keys | @sh'); do
title=$(echo $ddgrout | jq -r .[$i].title)
url=$(echo $ddgrout | jq -r .[$i].url)
echo "$i. $title ($url)"
done
echo -e "\0data\x1f$(echo $ddgrout | jq -r .[].url | jq -sRc '. | split("\n") | [ .[] | select(length > 0) ]')"
;;
esac