summaryrefslogtreecommitdiff
path: root/accounts/gkleen@sif/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'accounts/gkleen@sif/default.nix')
-rw-r--r--accounts/gkleen@sif/default.nix322
1 files changed, 263 insertions, 59 deletions
diff --git a/accounts/gkleen@sif/default.nix b/accounts/gkleen@sif/default.nix
index 1c2031b5..02241bd0 100644
--- a/accounts/gkleen@sif/default.nix
+++ b/accounts/gkleen@sif/default.nix
@@ -49,27 +49,41 @@ let
49 ]; 49 ];
50 }; 50 };
51 51
52 lockCommand = "${lib.getExe' config.systemd.package "systemctl"} --user start gtklock.service"; 52 # lockCommand = "${lib.getExe' config.systemd.package "systemctl"} --user start gtklock.service";
53 lockCommand = "${lib.getExe' cfg.programs.quickshell.package "qs"} ipc call Lockscreen setLocked true";
54
55 editor = pkgs.symlinkJoin {
56 inherit (cfg.services.emacs.package) name;
57 buildInputs = with pkgs; [ makeWrapper ];
58 paths = [ cfg.services.emacs.package ];
59 postBuild = ''
60 wrapProgram $out/bin/emacsclient \
61 --inherit-argv0 \
62 --add-flags ${lib.escapeShellArg (lib.escapeShellArgs cfg.services.emacs.client.arguments)}
63 '';
64 };
53in { 65in {
54 imports = with flake.nixosModules.userProfiles.${userName}; [ 66 imports = with flake.nixosModules.userProfiles.${userName}; [
55 mpv yt-dlp (args: import ./xcompose.nix (inputs // args)) 67 zsh tmux mpv yt-dlp (args: import ./xcompose.nix (inputs // args))
56 ]; 68 ];
57 69
58 config = { 70 config = {
59 home-manager.users.${userName} = { 71 home-manager.users.${userName} = {
60 imports = [ 72 imports = [
61 ./libvirt 73 ./libvirt
62 ./niri 74 ./niri.nix
63 flakeInputs.nix-index-database.hmModules.nix-index 75 ./shell
76 ./synadm
77 flakeInputs.nix-index-database.homeModules.nix-index
64 flakeInputs.impermanence.nixosModules.home-manager.impermanence 78 flakeInputs.impermanence.nixosModules.home-manager.impermanence
65 ]; 79 ];
66 80
67 home.stateVersion = "20.09"; 81 home.stateVersion = "20.09";
68 82
69 nixpkgs.config = { 83 # nixpkgs.config = {
70 allowUnfree = true; 84 # allowUnfree = true;
71 zathura.useMupdf = false; 85 # zathura.useMupdf = false;
72 }; 86 # };
73 87
74 nix.registry = { 88 nix.registry = {
75 "flk" = { 89 "flk" = {
@@ -160,6 +174,7 @@ in {
160 }; 174 };
161 }; 175 };
162 }; 176 };
177 chromium.enable = true;
163 178
164 zathura = { 179 zathura = {
165 enable = true; 180 enable = true;
@@ -175,13 +190,93 @@ in {
175 gpu-api = "vulkan"; 190 gpu-api = "vulkan";
176 }; 191 };
177 192
178 zsh.initExtra = '' 193 zsh.initContent = let
179 source ${./zshrc} 194 zshrc = pkgs.resholve.mkDerivation {
195 pname = "zshrc";
196 version = "0.0.0";
197
198 src = ./zshrc;
199
200 dontUnpack = true;
201 dontConfigure = true;
202 dontBuild = true;
203
204 installPhase = ''
205 mkdir -p $out/share
206 install "$src" $out/share/zshrc
207 '';
208
209 solutions = {
210 default = {
211 scripts = [ "share/zshrc" ];
212 interpreter = "none";
213 inputs = with pkgs; [
214 coreutils
215 rpm
216 binutils
217 squashfsTools
218 unzip
219 cfg.programs.git.package
220 magickWrapped
221 curl
222 file
223 gnutar
224 cpio
225 magic-wormhole
226 cfg.programs.zsh.package
227 fuse
228 util-linux
229 findutils
230 qrencode
231 tty-clock
232 cfg.programs.jq.package
233 eza
234 less
235 config.systemd.package
236 config.programs.ssh.package
237 gnused
238 miniserve
239 p7zip
240 ];
241 execer = with pkgs; [
242 "cannot:${lib.getExe' rpm "rpm2cpio"}"
243 "cannot:${lib.getExe' squashfsTools "unsquashfs"}"
244 "cannot:${lib.getExe' unzip "unzip"}"
245 "cannot:${lib.getExe cfg.programs.git.package}"
246 "cannot:${lib.getExe cpio}"
247 "cannot:${lib.getExe' magic-wormhole "wormhole"}"
248 "cannot:${lib.getExe' fuse "fusermount"}"
249 "cannot:${lib.getExe less}"
250 "cannot:${lib.getExe' config.systemd.package "systemctl"}"
251 "cannot:${lib.getExe config.programs.ssh.package}"
252 "cannot:${lib.getExe' p7zip "7z"}"
253 ];
254 wrapper = with pkgs; [
255 "${lib.getExe' magickWrapped "magick"}:${lib.getExe' imagemagick "magick"}"
256 ];
257 fake = {
258 builtin = ["print"];
259 external = ["sudo" "umount"];
260 };
261 };
262 };
263 };
264 magickWrapped = pkgs.symlinkJoin {
265 inherit (pkgs.imagemagick) name;
266 paths = [ pkgs.imagemagick ];
267
268 buildInputs = with pkgs; [ makeWrapper ];
269 postBuild = ''
270 wrapProgram $out/bin/magick \
271 --prefix PATH : ${lib.makeBinPath (with pkgs; [ ghostscript ])}
272 '';
273 };
274 in ''
275 source ${zshrc}/share/zshrc
180 ''; 276 '';
181 zsh.dirHashes = let 277 zsh.dirHashes = let
182 flakeHashes = mapAttrs' (n: v: nameValuePair (inputNames.${n} or n) (toString v)) flakeInputs; 278 flakeHashes = mapAttrs' (n: v: nameValuePair (inputNames.${n} or n) (toString v)) flakeInputs;
183 inputNames = { 279 inputNames = {
184 "nixpkgs" = "nixos";
185 }; 280 };
186 in flakeHashes // { 281 in flakeHashes // {
187 u2w = "$HOME/projects/uni2work"; 282 u2w = "$HOME/projects/uni2work";
@@ -193,6 +288,17 @@ in {
193 pro = "$HOME/projects/pro"; 288 pro = "$HOME/projects/pro";
194 media = "$HOME/media"; 289 media = "$HOME/media";
195 }; 290 };
291 nix-index.enable = true;
292 jq.colors = {
293 arrays = "1;37";
294 "false" = "0;37";
295 "null" = "2;37";
296 numbers = "0;37";
297 objectKeys = "1;34";
298 objects = "1;37";
299 strings = "0;32";
300 "true" = "0;37";
301 };
196 302
197 obs-studio = { 303 obs-studio = {
198 enable = true; 304 enable = true;
@@ -202,7 +308,7 @@ in {
202 gh = { 308 gh = {
203 enable = true; 309 enable = true;
204 settings = { 310 settings = {
205 editor = lib.getExe' config.home-manager.users.${userName}.programs.emacs.package "emacsclient"; 311 editor = lib.getExe' editor "emacsclient";
206 gitProtocol = "ssh"; 312 gitProtocol = "ssh";
207 }; 313 };
208 }; 314 };
@@ -228,16 +334,10 @@ in {
228 # notify_on_cmd_finish = "invisible 120"; 334 # notify_on_cmd_finish = "invisible 120";
229 }; 335 };
230 keybindings = { 336 keybindings = {
231 "kitty_mod+n" = "detach_window"; 337 "kitty_mod+n" = "new_os_window_with_cwd";
232 "kitty_mod+m" = "detach_window ask"; 338 "kitty_mod+m" = "detach_window ask";
233 }; 339 "kitty_mod+enter" = "new_window_with_cwd";
234 }; 340 "kitty_mod+t" = "new_tab_with_cwd";
235 wpaperd = {
236 enable = true;
237 settings.default = {
238 path = "~/.wallpapers";
239 duration = "15m";
240 mode = "center";
241 }; 341 };
242 }; 342 };
243 fuzzel = { 343 fuzzel = {
@@ -250,7 +350,7 @@ in {
250 font = "Fira Sans"; 350 font = "Fira Sans";
251 }; 351 };
252 colors = { 352 colors = {
253 background = "000000aa"; 353 background = "000000cc";
254 text = "cdd6f4ff"; 354 text = "cdd6f4ff";
255 match = "94e2d5ff"; 355 match = "94e2d5ff";
256 selection = "585b70ff"; 356 selection = "585b70ff";
@@ -267,15 +367,28 @@ in {
267 enable = true; 367 enable = true;
268 extraAbbreviations = ["i.A." "d.h." "D.h." "gdw."]; 368 extraAbbreviations = ["i.A." "d.h." "D.h." "gdw."];
269 }; 369 };
370 nushell = {
371 enable = true;
372 settings.show_banner = false;
373 };
374 fd.enable = true;
270 }; 375 };
271 376
272 services = { 377 services = {
378 wpaperd = {
379 enable = false;
380 settings.default = {
381 path = "~/.wallpapers";
382 duration = "15m";
383 mode = "center";
384 };
385 };
273 emacs = { 386 emacs = {
274 enable = true; 387 enable = true;
275 socketActivation.enable = true; 388 socketActivation.enable = true;
276 client = { 389 client = {
277 enable = true; 390 enable = true;
278 arguments = mkForce ["--reuse-frame" "--alternate-editor" "\"\""]; 391 arguments = mkForce ["--create-frame" "--alternate-editor" (lib.getExe cfg.services.emacs.package)];
279 }; 392 };
280 }; 393 };
281 gpg-agent = { 394 gpg-agent = {
@@ -338,20 +451,6 @@ in {
338 serverUrl = "https://etesync.yggdrasil.li"; 451 serverUrl = "https://etesync.yggdrasil.li";
339 }; 452 };
340 453
341 swayidle = {
342 enable = true;
343 events = [
344 { event = "before-sleep"; command = lockCommand; }
345 { event = "lock"; command = lockCommand; }
346 ];
347 timeouts = [
348 { timeout = 600; command = lockCommand; }
349 ];
350 extraArgs = [
351 "-w"
352 "idlehint" "30"
353 ];
354 };
355 poweralertd.enable = true; 454 poweralertd.enable = true;
356 }; 455 };
357 456
@@ -383,6 +482,15 @@ in {
383 name = "Paper-Mono-Dark"; 482 name = "Paper-Mono-Dark";
384 }; 483 };
385 }; 484 };
485 qt.enable = true;
486 qt.platformTheme.name = "gtk";
487
488 qt.kde.settings = {
489 kwalletrc = {
490 KSecretD.Enabled = false;
491 Wallet."Default Wallet" = "store";
492 };
493 };
386 494
387 xsession.preferStatusNotifierItems = true; 495 xsession.preferStatusNotifierItems = true;
388 496
@@ -395,16 +503,16 @@ in {
395 wrappedYTMDesktop libsForQt5.qt5ct playerctl evince papers 503 wrappedYTMDesktop libsForQt5.qt5ct playerctl evince papers
396 thunderbird zoom-us xdg-desktop-portal steam steam-run 504 thunderbird zoom-us xdg-desktop-portal steam steam-run
397 wireshark virt-manager rclone cached-nix-shell worktime 505 wireshark virt-manager rclone cached-nix-shell worktime
398 fira-code-symbols libreoffice xournalpp google-chrome 506 fira-code-symbols libreoffice xournalpp
399 nixos-shell virt-viewer freerdp gnome-icon-theme 507 nixos-shell virt-viewer freerdp gnome-icon-theme
400 paper-icon-theme sshpassSecret weechat element-desktop 508 paper-icon-theme sshpassSecret weechat element-desktop
401 sieve-connect gimp inkscape udiskie glab nitrokey-app 509 sieve-connect gimp3 inkscape udiskie glab
402 pynitrokey gtklock wlrctl remmina openscad spice-record 510 gtklock wlrctl remmina openscad spice-record
403 libguestfs-with-appliance nerd-fonts.fira-mono 511 nerd-fonts.fira-mono
404 nerd-fonts.symbols-only nerd-fonts.fira-code powerline-fonts 512 nerd-fonts.symbols-only nerd-fonts.fira-code powerline-fonts
405 swtpm (hunspellWithDicts (with hunspellDicts; [en_GB-large de_DE])) 513 swtpm (hunspell.withDicts (dicts: with dicts; [en_GB-large de_DE]))
406 # synadm 514 libation libqalculate
407 ]; 515 ] ++ mapAttrsToList (_name: pkg: pkgs.callPackage pkg { inherit sources; }) (customUtils.nixImport { dir = ./utils; });
408 516
409 file = { 517 file = {
410 ".backup-munin".source = ./backup-patterns; 518 ".backup-munin".source = ./backup-patterns;
@@ -421,15 +529,12 @@ in {
421 sessionVariables = { 529 sessionVariables = {
422 # GDK_SCALE = 96.0 / 282.0; 530 # GDK_SCALE = 96.0 / 282.0;
423 # QT_AUTO_SCREEN_SCALE_FACTOR = 1; 531 # QT_AUTO_SCREEN_SCALE_FACTOR = 1;
424 QT_QPA_PLATFORMTHEME = "qt5ct"; 532 QT_QPA_PLATFORMTHEME = lib.mkForce "gtk3";
425 LIBVIRT_DEFAULT_URI = "qemu:///system"; 533 LIBVIRT_DEFAULT_URI = "qemu:///system";
426 STACK_XDG = 1; 534 STACK_XDG = 1;
427 EDITOR = pkgs.writeShellScript "editor" '' 535 EDITOR = lib.getExe' editor "emacsclient";
428 args=("--reuse-frame" "--alternate-editor" "")
429 args+=("$@")
430 exec -a emacsclient ${lib.getExe' cfg.services.emacs.package "emacsclient"} "''${args[@]}"
431 '';
432 RCLONE_PASSWORD_COMMAND = "${lib.getExe' pkgs.libsecret "secret-tool"} lookup service rclone"; 536 RCLONE_PASSWORD_COMMAND = "${lib.getExe' pkgs.libsecret "secret-tool"} lookup service rclone";
537 SYSTEMD_TINT_BACKGROUND = "false";
433 }; 538 };
434 539
435 extraProfileCommands = '' 540 extraProfileCommands = ''
@@ -466,13 +571,21 @@ in {
466 General = { 571 General = {
467 dot_as_separator = 0; 572 dot_as_separator = 0;
468 }; 573 };
574 Mode = {
575 calculate_as_you_type = 1;
576 };
469 }; 577 };
470 }; 578 };
471 "emacs/init.el".source = ./emacs.el; 579 "emacs/init.el".source = pkgs.substitute {
472 "systemd/user/xdg-desktop-portal.service.d/after-graphical-session.conf".text = '' 580 src = ./emacs.el;
473 [Unit] 581 substitutions = [
474 After=graphical-session.target 582 "--subst-var-by" "ksshaskpass" (lib.getExe pkgs.kdePackages.ksshaskpass)
475 ''; 583 ];
584 };
585 # "systemd/user/xdg-desktop-portal.service.d/after-graphical-session.conf".text = ''
586 # [Unit]
587 # After=graphical-session.target
588 # '';
476 "systemd/user/home-manager.service.d/before-graphical-session.conf".text = '' 589 "systemd/user/home-manager.service.d/before-graphical-session.conf".text = ''
477 [Unit] 590 [Unit]
478 Before=graphical-session-pre.target 591 Before=graphical-session-pre.target
@@ -486,6 +599,8 @@ in {
486 xdg.dataFile = { 599 xdg.dataFile = {
487 "dbus-1/services/org.keepassxc.KeePassXC.service".source = "${wrappedKeepassxc}/share/dbus-1/services/org.keepassxc.KeePassXC.service"; 600 "dbus-1/services/org.keepassxc.KeePassXC.service".source = "${wrappedKeepassxc}/share/dbus-1/services/org.keepassxc.KeePassXC.service";
488 "dbus-1/services/org.freedesktop.secrets.service.service".source = "${wrappedKeepassxc}/share/dbus-1/services/org.freedesktop.secrets.service.service"; 601 "dbus-1/services/org.freedesktop.secrets.service.service".source = "${wrappedKeepassxc}/share/dbus-1/services/org.freedesktop.secrets.service.service";
602 "dbus-1/services/org.kde.kwalletd6.service".source = "${pkgs.kdePackages.kwallet}/share/dbus-1/services/org.kde.kwalletd6.service";
603 "dbus-1/services/org.kde.kwalletd5.service".source = "${pkgs.kdePackages.kwallet}/share/dbus-1/services/org.kde.kwalletd5.service";
489 "emoji-data/list.txt".source = pkgs.stdenv.mkDerivation { 604 "emoji-data/list.txt".source = pkgs.stdenv.mkDerivation {
490 inherit (sources.emoji-data) pname src; 605 inherit (sources.emoji-data) pname src;
491 version = lib.removePrefix "v" sources.emoji-data.version; 606 version = lib.removePrefix "v" sources.emoji-data.version;
@@ -573,11 +688,11 @@ in {
573 exec -- \ 688 exec -- \
574 ${lib.getExe' config.systemd.package "systemd-run"} --wait --user --slice-inherit \ 689 ${lib.getExe' config.systemd.package "systemd-run"} --wait --user --slice-inherit \
575 --property 'CPUAccounting=yes' --property 'CPUQuotaPeriodSec=50ms' \ 690 --property 'CPUAccounting=yes' --property 'CPUQuotaPeriodSec=50ms' \
576 --property 'Environment=DSCP=46' \ 691 -E DSCP=46 -E NIXOS_OZONE_WL \
577 -- ${lib.getExe pkgs.dscp} ${lib.getExe' pkgs.google-chrome "google-chrome-stable"} \ 692 -- ${lib.getExe pkgs.dscp} ${lib.getExe cfg.programs.chromium.package} \
578 --class=Rainbow \ 693 --class=Rainbow \
579 --kiosk "https://web.openrainbow.com" \ 694 --app="https://web.openrainbow.com" \
580 --user-data-dir=''${HOME}/.config/google-chrome-rainbow 695 --user-data-dir=''${HOME}/.config/chromium-rainbow
581 ''); 696 '');
582 icon = pkgs.fetchurl { 697 icon = pkgs.fetchurl {
583 url = "https://web.openrainbow.com/rb/2.139.17/assets/skins/rainbow/images/homepage/logo__rainbow.svg"; 698 url = "https://web.openrainbow.com/rb/2.139.17/assets/skins/rainbow/images/homepage/logo__rainbow.svg";
@@ -587,6 +702,53 @@ in {
587 StartupWMClass = "Rainbow"; 702 StartupWMClass = "Rainbow";
588 }; 703 };
589 }; 704 };
705 kimai = {
706 name = "Kimai";
707 exec = toString (pkgs.writeShellScript "kimai" ''
708 exec -- \
709 ${lib.getExe cfg.programs.chromium.package} \
710 --class=Kimai \
711 --app="https://kimai.yggdrasil.li" \
712 --user-data-dir=''${HOME}/.config/chromium-kimai
713 '');
714 icon = pkgs.fetchurl {
715 url = "https://www.kimai.org/images/kimai_logo.png";
716 hash = "sha256-lnlOttzR2SwXA70R+egJUkeKr4U5V0avqTk8uX4bqfs=";
717 };
718 settings = {
719 StartupWMClass = "Kimai";
720 StartupNotify = "true";
721 };
722 };
723 audiobookshelf = {
724 name = "Audiobookshelf";
725 exec = toString (pkgs.writeShellScript "audiobookshelf" ''
726 exec -- \
727 ${lib.getExe cfg.programs.chromium.package} \
728 --class=Audiobookshelf \
729 --app="https://audiobookshelf.yggdrasil.li" \
730 --user-data-dir=''${HOME}/.config/chromium-audiobookshelf
731 '');
732 icon = pkgs.fetchurl {
733 url = "https://www.audiobookshelf.org/Logo.png";
734 hash = "sha256-JGPk+WNT1C4DC4lSMb0K0YmAMT5LvmSOeO0QRzkc7Lk=";
735 };
736 settings = {
737 StartupWMClass = "Audiobookshelf";
738 StartupNotify = "true";
739 };
740 };
741 thunderbird-lmu = {
742 name = "Thunderbird (LMU)";
743 exec = "thunderbird --name thunderbird -P lmu %U";
744 icon = "thunderbird";
745 genericName = "Email Client";
746 categories = [ "Network" "Chat" "Email" "Feed" "GTK" "News" ];
747 settings = {
748 StartupWMClass = "thunderbird";
749 StartupNotify = "true";
750 };
751 };
590 }; 752 };
591 753
592 fonts = { 754 fonts = {
@@ -601,6 +763,48 @@ in {
601 color-scheme = "prefer-dark"; 763 color-scheme = "prefer-dark";
602 }; 764 };
603 }; 765 };
766
767 i18n.inputMethod = {
768 enable = true;
769 type = "fcitx5";
770 fcitx5 = {
771 waylandFrontend = true;
772 settings = {
773 globalOptions."Behavior/DisabledAddons" = {
774 "0" = "clipboard";
775 };
776 inputMethod = {
777 "Groups/0" = {
778 Name = "Default";
779 "Default Layout" = "us";
780 DefaultIM = "keyboard-us";
781 };
782 "Groups/0/Items/0" = {
783 Name = "keyboard-us";
784 Layout = "";
785 };
786 "GroupOrder"."0" = "Default";
787 };
788 addons = {
789 classicui.globalSection = {
790 "Vertical Candidate List" = "True";
791 Font = "Fira Sans 10";
792 MenuFont = "Fira Sans 10";
793 TrayFont = "Fira Sans Demi-Bold 10";
794 UseDarkTheme = "True";
795 };
796 quickphrase = {
797 globalSection = {
798 "Choose Modifier" = "None";
799 Spell = "True";
800 FallbackSpellLanguage = "en";
801 };
802 sections.TriggerKey."0" = "Super+E";
803 };
804 };
805 };
806 };
807 };
604 }; 808 };
605 }; 809 };
606} 810}