1
Fork 0

Make hyprland work nicely with the GTK portals, and move some modules around into being active by default in home manager

This commit is contained in:
prescientmoon 2025-06-01 20:43:24 +02:00
parent 33c71b0232
commit 569bc3153e
Signed by: prescientmoon
SSH key fingerprint: SHA256:WFp/cO76nbarETAoQcQXuV+0h7XJsEsOCI0UsyPIy6U
32 changed files with 302 additions and 262 deletions

View file

@ -138,6 +138,9 @@ Most services are served over [tailscale](https://tailscale.com/), using certifi
This section contains links to things which used to be in the previous section but are not used anymore. This section was created in June 2023, hence stuff I dropped earlier might not be here. Moreover, this list is sorted with the most recently dropped things at the top, as a sort of reverse-timeline. This section contains links to things which used to be in the previous section but are not used anymore. This section was created in June 2023, hence stuff I dropped earlier might not be here. Moreover, this list is sorted with the most recently dropped things at the top, as a sort of reverse-timeline.
- [ncdu](https://dev.yorhel.nl/ncdu) — A neat project I used on a regular basis. Ended up switching to [dua](https://github.com/Byron/dua-cli) (in interactive mode)
- [peek](https://github.com/phw/peek) — Doesn't seem to work on Wayland + GIFs are not a very efficient format
- [bc](https://github.com/gavinhoward/bc) — I was rarely using this
- [lovely-forks](https://github.com/musically-ut/lovely-forks) — I was rarely using this - [lovely-forks](https://github.com/musically-ut/lovely-forks) — I was rarely using this
- [Octotree](https://www.octotree.io/) — GitHub supports this natively now - [Octotree](https://www.octotree.io/) — GitHub supports this natively now
- [Tmux](https://github.com/tmux/tmux/wiki) — I now simply use multiple WM windows / no longer persist sessions - [Tmux](https://github.com/tmux/tmux/wiki) — I now simply use multiple WM windows / no longer persist sessions

View file

@ -1,4 +1,4 @@
{ inputs, ... }: { inputs, pkgs, ... }:
let let
transparency = amount: { transparency = amount: {
desktop = amount; desktop = amount;
@ -100,4 +100,10 @@ in
# Requires me to manually turn targets on! # Requires me to manually turn targets on!
stylix.autoEnable = false; stylix.autoEnable = false;
stylix.cursor = {
package = inputs.rose-pine-hyprcursor.packages.${pkgs.system}.default;
name = "BreezX-RosePine-Linux";
size = 36;
};
} }

137
flake.lock generated
View file

@ -620,7 +620,7 @@
}, },
"flake-utils_3": { "flake-utils_3": {
"inputs": { "inputs": {
"systems": "systems_2" "systems": "systems_4"
}, },
"locked": { "locked": {
"lastModified": 1710146030, "lastModified": 1710146030,
@ -638,7 +638,7 @@
}, },
"flake-utils_4": { "flake-utils_4": {
"inputs": { "inputs": {
"systems": "systems_3" "systems": "systems_5"
}, },
"locked": { "locked": {
"lastModified": 1710146030, "lastModified": 1710146030,
@ -656,7 +656,7 @@
}, },
"flake-utils_5": { "flake-utils_5": {
"inputs": { "inputs": {
"systems": "systems_4" "systems": "systems_6"
}, },
"locked": { "locked": {
"lastModified": 1685518550, "lastModified": 1685518550,
@ -674,7 +674,7 @@
}, },
"flake-utils_6": { "flake-utils_6": {
"inputs": { "inputs": {
"systems": "systems_5" "systems": "systems_7"
}, },
"locked": { "locked": {
"lastModified": 1710146030, "lastModified": 1710146030,
@ -987,19 +987,42 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1747763032, "lastModified": 1748627093,
"narHash": "sha256-9j3oCbemeH7bTVXJ3pDWxOptbxDx2SdK1jY2AHpjQiw=", "narHash": "sha256-1hFy+bZRZoYb7RaUXsW+9YFtjjFrQpschd8qZpy9org=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "29dda415f5b2178278283856c6f9f7b48a2a4353", "rev": "afe9ce8b2014fa1230ade38bf07156cdcef63658",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-community", "owner": "nix-community",
"ref": "release-25.05",
"repo": "home-manager", "repo": "home-manager",
"type": "github" "type": "github"
} }
}, },
"hyprlang": {
"inputs": {
"nixpkgs": [
"rose-pine-hyprcursor",
"nixpkgs"
],
"systems": "systems_2"
},
"locked": {
"lastModified": 1709914708,
"narHash": "sha256-bR4o3mynoTa1Wi4ZTjbnsZ6iqVcPGriXp56bZh5UFTk=",
"owner": "hyprwm",
"repo": "hyprlang",
"rev": "a685493fdbeec01ca8ccdf1f3655c044a8ce2fe2",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprlang",
"type": "github"
}
},
"ical": { "ical": {
"flake": false, "flake": false,
"locked": { "locked": {
@ -1331,16 +1354,16 @@
}, },
"nixpkgs_11": { "nixpkgs_11": {
"locked": { "locked": {
"lastModified": 1747542820, "lastModified": 1748437600,
"narHash": "sha256-GaOZntlJ6gPPbbkTLjbd8BMWaDYafhuuYRNrxCGnPJw=", "narHash": "sha256-hYKMs3ilp09anGO7xzfGs3JqEgUqFMnZ8GMAqI6/k04=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "292fa7d4f6519c074f0a50394dbbe69859bb6043", "rev": "7282cb574e0607e65224d33be8241eae7cfe0979",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "owner": "NixOS",
"ref": "nixos-unstable", "ref": "nixos-25.05",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
@ -1679,6 +1702,7 @@
"nixos-hardware": "nixos-hardware", "nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_5", "nixpkgs": "nixpkgs_5",
"nixpkgs-unstable": "nixpkgs-unstable", "nixpkgs-unstable": "nixpkgs-unstable",
"rose-pine-hyprcursor": "rose-pine-hyprcursor",
"shimmeringmoon": "shimmeringmoon", "shimmeringmoon": "shimmeringmoon",
"smos": "smos", "smos": "smos",
"sops-nix": "sops-nix", "sops-nix": "sops-nix",
@ -1686,6 +1710,28 @@
"stylix": "stylix" "stylix": "stylix"
} }
}, },
"rose-pine-hyprcursor": {
"inputs": {
"hyprlang": "hyprlang",
"nixpkgs": [
"nixpkgs"
],
"utils": "utils"
},
"locked": {
"lastModified": 1748096947,
"narHash": "sha256-ouuA8LVBXzrbYwPW2vNjh7fC9H2UBud/1tUiIM5vPvM=",
"owner": "ndom91",
"repo": "rose-pine-hyprcursor",
"rev": "4b02963d0baf0bee18725cf7c5762b3b3c1392f1",
"type": "github"
},
"original": {
"owner": "ndom91",
"repo": "rose-pine-hyprcursor",
"type": "github"
}
},
"safe-coloured-text": { "safe-coloured-text": {
"flake": false, "flake": false,
"locked": { "locked": {
@ -1901,7 +1947,7 @@
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
], ],
"systems": "systems_6" "systems": "systems_8"
}, },
"locked": { "locked": {
"lastModified": 1748147548, "lastModified": 1748147548,
@ -1931,7 +1977,7 @@
"home-manager": "home-manager_3", "home-manager": "home-manager_3",
"nixpkgs": "nixpkgs_11", "nixpkgs": "nixpkgs_11",
"nur": "nur", "nur": "nur",
"systems": "systems_7", "systems": "systems_9",
"tinted-foot": "tinted-foot", "tinted-foot": "tinted-foot",
"tinted-kitty": "tinted-kitty", "tinted-kitty": "tinted-kitty",
"tinted-schemes": "tinted-schemes", "tinted-schemes": "tinted-schemes",
@ -1939,15 +1985,16 @@
"tinted-zed": "tinted-zed" "tinted-zed": "tinted-zed"
}, },
"locked": { "locked": {
"lastModified": 1748572239, "lastModified": 1748573182,
"narHash": "sha256-Of7bmWQUEVILpx1GJz0gLHmRoGrEP/G7q9RnidxW5Go=", "narHash": "sha256-nnvjhz1PtS/Vfw8bgU0AkXq1U42gilzfFak65EmHW4g=",
"owner": "danth", "owner": "danth",
"repo": "stylix", "repo": "stylix",
"rev": "0512b0f685ab2ac0586c897460c247f49670460b", "rev": "79ec2e885e2b66f2fc6e6b6db15c49c81ebaf7d8",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "danth", "owner": "danth",
"ref": "release-25.05",
"repo": "stylix", "repo": "stylix",
"type": "github" "type": "github"
} }
@ -2001,16 +2048,16 @@
}, },
"systems_2": { "systems_2": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1689347949,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems", "owner": "nix-systems",
"repo": "default", "repo": "default-linux",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-systems", "owner": "nix-systems",
"repo": "default", "repo": "default-linux",
"type": "github" "type": "github"
} }
}, },
@ -2089,6 +2136,36 @@
"type": "github" "type": "github"
} }
}, },
"systems_8": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_9": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"template-haskell-reload": { "template-haskell-reload": {
"flake": false, "flake": false,
"locked": { "locked": {
@ -2252,6 +2329,24 @@
"type": "github" "type": "github"
} }
}, },
"utils": {
"inputs": {
"systems": "systems_3"
},
"locked": {
"lastModified": 1710146030,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"validity": { "validity": {
"flake": false, "flake": false,
"locked": { "locked": {

View file

@ -1,5 +1,4 @@
{ {
# {{{ Inputs
inputs = { inputs = {
# {{{ Nixpkgs instances # {{{ Nixpkgs instances
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05"; nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
@ -58,15 +57,17 @@
darkmatter-grub-theme.url = "gitlab:VandalByte/darkmatter-grub-theme"; darkmatter-grub-theme.url = "gitlab:VandalByte/darkmatter-grub-theme";
darkmatter-grub-theme.inputs.nixpkgs.follows = "nixpkgs"; darkmatter-grub-theme.inputs.nixpkgs.follows = "nixpkgs";
stylix.url = "github:danth/stylix"; stylix.url = "github:danth/stylix/release-25.05";
# stylix.inputs.nixpkgs.follows = "nixpkgs"; # stylix.inputs.nixpkgs.follows = "nixpkgs";
# stylix.inputs.home-manager.follows = "home-manager"; # stylix.inputs.home-manager.follows = "home-manager";
base16-schemes.url = "github:tinted-theming/schemes"; base16-schemes.url = "github:tinted-theming/schemes";
base16-schemes.flake = false; base16-schemes.flake = false;
rose-pine-hyprcursor.url = "github:ndom91/rose-pine-hyprcursor";
rose-pine-hyprcursor.inputs.nixpkgs.follows = "nixpkgs";
# }}} # }}}
}; };
# }}}
outputs = outputs =
{ {

View file

@ -3,68 +3,42 @@
imports = [ imports = [
./global.nix ./global.nix
./features/cli/catgirl.nix
./features/cli/lazygit.nix
./features/cli/nix-index.nix
./features/cli/productivity ./features/cli/productivity
./features/cli/zellij.nix
./features/desktop/discord
./features/desktop/gaming ./features/desktop/gaming
./features/desktop/gaming/edopro.nix ./features/desktop/gaming/edopro.nix
./features/desktop/firefox
./features/desktop/foot.nix
./features/desktop/obsidian.nix
./features/desktop/spotify.nix
./features/desktop/zathura.nix
./features/wayland/hyprland ./features/wayland/hyprland
./features/neovim ./features/neovim
]; ];
home.stateVersion = "24.05";
home.username = "moon";
# Arbitrary extra packages # Arbitrary extra packages
home.packages = with pkgs; [ home.packages = with pkgs; [
# {{{ Communication # Communication
whatsapp-for-linux
# signal-desktop # Signal client # signal-desktop # Signal client
# element-desktop # Matrix client # element-desktop # Matrix client
# zoom-us # Zoom client 🤮 # zoom-us # Zoom client 🤮
whatsapp-for-linux
# }}} # Documents & editors
# {{{ Documents & editors libsForQt5.okular # Useful for reading pdf annotations (which zathura does not support)
gimp # Image editing
okular # Useful for reading pdf annotations (which zathura does not support)
# lmms # Music software # lmms # Music software
# kicad # PCB editing # kicad # PCB editing
# libreoffice # Free office suite # libreoffice # Free office suite
# }}}
# {{{ Gaming # Clis
# wine # Windows compat layer or whatever
lutris # Game launcher
# }}}
# {{{ Clis
sops # Secret editing
# sherlock # Search for usernames across different websites # sherlock # Search for usernames across different websites
# }}}
# {{{ Misc # Misc
bitwarden # Password-manager
qbittorrent # Torrent client
# google-chrome # Not my primary browser, but sometimes needed in webdev # google-chrome # Not my primary browser, but sometimes needed in webdev
# plover.dev # steno engine # plover.dev # steno engine
overskride # Bluetooth client
freetube # youtube client freetube # youtube client
# }}}
# {{{ Media playing/recording
mpv # Video player
imv # Image viewer
peek # GIF recorder
obs-studio # video recorder
# }}}
]; ];
home.username = "moon";
home.stateVersion = "24.05";
satellite = { satellite = {
# Symlink some commonly modified dotfiles outside the nix store dev.enable = true; # Enable symlinks outside the nix store
dev.enable = true;
monitors = [ monitors = [
{ {

View file

@ -1,10 +1,12 @@
# 'cat' alternative
{ {
# Enabling this produces an uglier theme for some reason.
# options.stylix.targets.bat.enable = true;
programs.bat = { programs.bat = {
enable = true; enable = true;
config.theme = "base16-256"; config.theme = "base16-256";
}; };
home.shellAliases.cat = "bat"; home.shellAliases.cat = "bat";
# Enabling this produces an uglier theme for some reason.
# options.stylix.targets.bat.enable = true;
} }

View file

@ -1,47 +1,59 @@
{ pkgs, ... }: { pkgs, ... }:
{ {
imports = [ imports = [
./scripts
./eza.nix
./bat.nix ./bat.nix
./ssh.nix ./catgirl.nix
./git.nix
./starship.nix
./direnv.nix ./direnv.nix
./eza.nix
./git.nix
./lazygit.nix
./ssh.nix
./tealdeer.nix ./tealdeer.nix
./yazi.nix ./yazi.nix
./fish ./fish
]; ];
# Enable basic CLI thingies
programs.bash.enable = true; programs.bash.enable = true;
programs.broot.enable = true;
programs.starship.enable = true;
# Enable nix-index
programs.nix-index-database.comma.enable = true;
programs.nix-index.enable = true;
programs.command-not-found.enable = false;
home.packages = with pkgs; [ home.packages = with pkgs; [
# {{{ System information # System information
acpi # Battery stats acpi # Battery stats
neofetch # Display system information neofetch # Display system information
tokei # Useless but fun line of code counter (sloc alternative) tokei # Useless but fun line of code counter (sloc alternative)
bottom # System monitor bottom # System monitor
# }}} bandwhich # Network bandwhich info
# {{{ Storage
ncdu # TUI disk usage # Storage
du-dust # Similar to du and ncdu in purpose. dua # du + ncdu replacement
# }}} dust # Similar to du, but with prettier output
# {{{ Alternatives to usual commands dysk # Similar to df, but with prettier output
# Alternatives to usual commands
ripgrep # Better grep ripgrep # Better grep
fd # Better find fd # Better find
sd # Better sed sd # Better sed
httpie # Better curl httpie # Better curl
# }}}
# {{{ Misc # Misc
bc # Calculator
ouch # Unified compression / decompression tool ouch # Unified compression / decompression tool
mkpasswd # Hash passwords mkpasswd # Hash passwords
jq # Json maniuplation jq # JSON manipulation
# }}} ffsend # File sharing
# Normally, I'd recommend against installing this globally, although
# it seems the completions don't play nicely with direnv otherwise.
just
]; ];
home.shellAliases = { home.shellAliases = {
# {{{ Storage
# -h: humans readable units # -h: humans readable units
df = "df -h"; df = "df -h";
du = "du -h"; du = "du -h";
@ -49,6 +61,5 @@
# duh: short for `du here` # duh: short for `du here`
# -d: depth # -d: depth
duh = "du -hd 1"; duh = "du -hd 1";
# }}}
}; };
} }

View file

@ -1,17 +1,12 @@
{ config, ... }: { config, ... }:
let statePath = "${config.xdg.dataHome}/direnv/allow"; let
statePath = "${config.xdg.dataHome}/direnv/allow";
in in
{ {
programs.direnv.enable = true; programs.direnv.enable = true;
programs.direnv.silent = true;
programs.direnv.nix-direnv.enable = true; programs.direnv.nix-direnv.enable = true;
home.sessionVariables = {
# No more long command warnings
DIRENV_WARN_TIMEOUT = "24h";
# No more usesless logs
DIRENV_LOG_FORMAT = "";
};
# Only save allowed paths for 30d # Only save allowed paths for 30d
systemd.user.tmpfiles.rules = [ "d ${statePath} - - - 30d" ]; systemd.user.tmpfiles.rules = [ "d ${statePath} - - - 30d" ];
satellite.persistence.at.state.apps.direnv.directories = [ statePath ]; satellite.persistence.at.state.apps.direnv.directories = [ statePath ];

View file

@ -1,32 +1,24 @@
# {{{ Start tmux if not already inside tmux # Set cursor based on vim mode
if status is-interactive set fish_cursor_default block # Set the normal & visual mode cursors to a block
and not set -q TMUX
and not set -q NO_TMUX
and set -q ALWAYS_TMUX
exec tmux attach -t Welcome || tmux || echo "Something went wrong trying to start tmux"
end
# }}}
# {{{ Sets cursor based on vim mode
set fish_cursor_default block # Set the normal and visual mode cursors to a block
set fish_cursor_insert line # Set the insert mode cursor to a line set fish_cursor_insert line # Set the insert mode cursor to a line
set fish_cursor_replace_one underscore # Set the replace mode cursor to an underscore set fish_cursor_replace_one underscore # Set the replace mode cursor to an underscore
# Force fish to skip some checks (I think?) # Force fish to skip some checks (I think?)
set fish_vi_force_cursor set fish_vi_force_cursor
# }}}
# {{{ Disable greeting # Disable greeting
set fish_greeting set fish_greeting
# }}}
# {{{ Keybinds # Key-binds
function fish_user_key_bindings function fish_user_key_bindings
fish_vi_key_bindings fish_vi_key_bindings
fish_nix_key_bindings fish_nix_key_bindings
bind -M insert -m default -k f10 'commandline -f repaint' # Exit insert mode with <f10> # Exit insert mode with <f10>
bind -M insert -m default f10 'commandline -f repaint'
end end
# }}}
# {{{ Helpers # Helpers
function take -d "Create a directory and cd into it" function take -d "Create a directory and cd into it"
mkdir -p $argv; and cd $argv mkdir -p $argv; and cd $argv
end end
# }}}

View file

@ -8,21 +8,21 @@ let
repaint = "commandline -f repaint"; repaint = "commandline -f repaint";
fishKeybinds = { fishKeybinds = {
# C-x to clear screen # C-x to clear screen
"\\cx" = "clear && ${repaint}"; "ctrl-x" = "clear && ${repaint}";
# C-z to return to background process # C-z to return to background process
"\\cz" = "fg && ${repaint}"; "ctrl-z" = "fg && ${repaint}";
# C-y to yank current command # C-y to yank current command
"\\cy" = "wl-copy \$(commandline)"; "ctrl-y" = "wl-copy \$(commandline)";
# C-e to launch $EDITOR # C-e to launch $EDITOR
"\\ce" = "$EDITOR"; "ctrl-e" = "$EDITOR";
# C-S-e to edit commandline using $EDITOR # C-S-e to edit commandline using $EDITOR
"\\e\\[69\\;5u" = "edit_command_buffer"; "ctrl-E" = "edit_command_buffer";
# C-enter to run command through a pager # C-enter to run command through a pager
"\\e\\[13\\;2u" = "commandline -a ' | $PAGER' && commandline -f execute"; "ctrl-enter" = "commandline -a ' | $PAGER' && commandline -f execute";
# C-g to open lazygit # C-g to open lazygit
"\\cg" = "lazygit"; "ctrl-g" = "lazygit";
# C-S-f to open mini.files # C-S-f to open mini.files
"\\e\\[70\\;5u" = ''nvim +":lua require('mini.files').open()"''; "ctrl-F" = ''nvim +":lua require('mini.files').open()"'';
}; };
mkKeybind = mkKeybind =
@ -59,7 +59,7 @@ in
${builtins.readFile ./config.fish} ${builtins.readFile ./config.fish}
# Modify nix-shell to use `fish` as it's default shell # Modify nix-shell to use `fish` as its default shell
${lib.getExe pkgs.nix-your-shell} fish | source ${lib.getExe pkgs.nix-your-shell} fish | source
''; '';

View file

@ -1,5 +0,0 @@
{
programs.nix-index-database.comma.enable = true;
programs.nix-index.enable = true;
programs.command-not-found.enable = false;
}

View file

@ -1,5 +1,3 @@
smos_github_token: ... smos_github_token: ...
smos_password: ... smos_password: ...
moonythm_mail_pass: ... moonythm_mail_pass: ...
vaultwarden_env: |
ADMIN_TOKEN=...

View file

@ -1,12 +1,7 @@
smos_github_token: ENC[AES256_GCM,data:kqy5mQf96DoPN1iEt2akJWFfD3IJWdSkvZa0MeAyF0WJ/+V5P5C4iQ==,iv:QwmIdV/vzGTLE89XJVi3prgfmXqRa/OYcp9CA7KJDYc=,tag:+S1EZBcxoOQO2ADjDx9STQ==,type:str] smos_github_token: ENC[AES256_GCM,data:kqy5mQf96DoPN1iEt2akJWFfD3IJWdSkvZa0MeAyF0WJ/+V5P5C4iQ==,iv:QwmIdV/vzGTLE89XJVi3prgfmXqRa/OYcp9CA7KJDYc=,tag:+S1EZBcxoOQO2ADjDx9STQ==,type:str]
smos_password: ENC[AES256_GCM,data:s+WuVJpe+bSZ7IPYKqA=,iv:fH4k1VTxkcgBwabX7TwZFu1bdWtinK8vug71xa0PiSo=,tag:epqGvDj5pfh9IVLFQLcifA==,type:str] smos_password: ENC[AES256_GCM,data:s+WuVJpe+bSZ7IPYKqA=,iv:fH4k1VTxkcgBwabX7TwZFu1bdWtinK8vug71xa0PiSo=,tag:epqGvDj5pfh9IVLFQLcifA==,type:str]
moonythm_mail_pass: ENC[AES256_GCM,data:FmBUICHDxmn72EGnYVSh,iv:L45AeAiXUfz4jH+4q+PDGwvKnEb4r/XDP+55Cf+Q+Nc=,tag:171ImWbCqdEUUK/nlrldCQ==,type:str] moonythm_mail_pass: ENC[AES256_GCM,data:FmBUICHDxmn72EGnYVSh,iv:L45AeAiXUfz4jH+4q+PDGwvKnEb4r/XDP+55Cf+Q+Nc=,tag:171ImWbCqdEUUK/nlrldCQ==,type:str]
vaultwarden_env: ENC[AES256_GCM,data:dKAkO1pckFVpuN3srD99aGln8fhT69ZNCO1QbdfyJMHlypyNX3YOReR7BoAeDK5DYGRs//8/PLPynRzKPAICng7+yfNDsHHzaF+QNpY=,iv:oNntDA4cXlg5gbTZwqnpyx5nGkYzmLvds5BsAdpdUdc=,tag:IXYS+CKnVb9ZfBm/zcG3JA==,type:str]
sops: sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age: age:
- recipient: age14mga4r0xa82a2uus3wq5q7rqnvflms3jmhknz4f3hsda8wttk9gsv2k9fs - recipient: age14mga4r0xa82a2uus3wq5q7rqnvflms3jmhknz4f3hsda8wttk9gsv2k9fs
enc: | enc: |
@ -35,8 +30,7 @@ sops:
a3Vzak1qM2lGUWFUS2lPa1loY0tkM0UKF9IGvrJM8BdivLQBnetZz2OeH6FCNaCZ a3Vzak1qM2lGUWFUS2lPa1loY0tkM0UKF9IGvrJM8BdivLQBnetZz2OeH6FCNaCZ
JeqqJXM96LKzPBCXxFqclpoPgy8zUb1yNpKg3CRUroC7VO0tBG3KJg== JeqqJXM96LKzPBCXxFqclpoPgy8zUb1yNpKg3CRUroC7VO0tBG3KJg==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
lastmodified: "2025-05-30T03:01:52Z" lastmodified: "2025-05-30T19:26:28Z"
mac: ENC[AES256_GCM,data:DNEOMhZIspChJh30AcULXA2hcSYgArCqY8ct4GIojkFutuHeJcHGZFQ+NNgUB5MUIVJHEJ6f5qeWrwDJCAeAarlwgUhcFUQMilZ0jwU+o6w1mUWwZeWV7W467YQ/zWUBZqwb3udeSsI6KTmsMkIpBdYON7UHQ/LFXrkzqrUkhSc=,iv:Ur94AGkiqcet9Vz97XyqfM5PQzJBMQ2NZ9yj4dDFVJ8=,tag:EiVThawyfm0LjJ7jg4pTEQ==,type:str] mac: ENC[AES256_GCM,data:2yBG1RRTA8z5u9XqMXzI7TPMBYPf9LW4DRpqJbVkiMqJyFcAKIoQ5NXI8kqi6dKar2sYQMu/3kq4ISGaTHoMsikP3UWDOHDn6aWIZNGx/Psm9AyQv8LyxIizLybF7XIn/Z99NdlaIsUCB0yUD742xkU3pHPLNL1K9BwuWpRbtbQ=,iv:JfMIB2+HQ941yTT/rhUbh1PnH9vmj+2GVWRHe7KOcPU=,tag:deMUz5Oji7Hh1XBGyl95Vw==,type:str]
pgp: []
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.9.4 version: 3.10.2

View file

@ -1,6 +0,0 @@
{ pkgs, ... }:
let uptimes = pkgs.writeShellScriptBin "uptimes" (builtins.readFile ./uptimes.sh);
in
{
home.packages = [ uptimes ];
}

View file

@ -1,27 +0,0 @@
print_uptime() {
local HOST=$1
local EMOJI=$2
# -n: do not echo a newline
echo -n "$EMOJI $HOST: ~"
# The output of `uptime` looks like this:
# `18:40:54 up 1 day 0:51, 0 users, load average: 0.79, 0.68, 0.69`,
# so we use awk to trim it down to the parts we care about.
#
# For awk:
# -F: splits the input by a string
ssh $USER@$HOST uptime \
| awk -F '(up |,)' '{print $2}'
}
echo "Uptimes:"
{
print_uptime "tethys" "🔥"
print_uptime "lapetus" "⛵"
} |
column --table -R 2 -s "~"
# ^ We use the column command to align things nicely:
# -R 2 aligns the second column to the right
# -s ~ will split on occurrences of ~

View file

@ -1,8 +1,4 @@
{ {
programs.ssh.enable = true; programs.ssh.enable = true;
satellite.persistence.at.state.apps.ssh.directories = [ ".ssh" ]; satellite.persistence.at.state.apps.ssh.directories = [ ".ssh" ];
# This allows me to push/pull to my forgejo server via SSH.
# See the docs for more details: https://developers.cloudflare.com/cloudflare-one/tutorials/gitlab/#configuring-ssh
# programs.ssh.matchBlocks."ssh.git.moonythm.dev".proxyCommand = "${lib.getExe pkgs.cloudflared} access ssh --hostname %h";
} }

View file

@ -1,3 +0,0 @@
{
programs.starship.enable = true;
}

View file

@ -1,6 +1,7 @@
# Example based cli docs # Example-based CLI documentation
# https://dbrgn.github.io/tealdeer/ # https://dbrgn.github.io/tealdeer/
{ config, pkgs, ... }: { { config, pkgs, ... }:
{
home.packages = [ pkgs.tealdeer ]; home.packages = [ pkgs.tealdeer ];
xdg.configFile."tealdeer/config.toml".text = '' xdg.configFile."tealdeer/config.toml".text = ''

View file

@ -4,8 +4,8 @@
}: }:
{ {
stylix.targets.yazi.enable = true; stylix.targets.yazi.enable = true;
programs.yazi.enable = true;
home.packages = [ home.packages = [
pkgs.yazi # Terminal file explorer
pkgs.exiftool # Read file metadata pkgs.exiftool # Read file metadata
]; ];
} }

View file

@ -1,4 +0,0 @@
{
programs.zellij.enable = true;
stylix.targets.zellij.enable = true;
}

View file

@ -1,7 +1,15 @@
{ pkgs, ... }: { pkgs, ... }:
{ {
imports = [ imports = [
./dunst.nix # notifaction handler ./dunst.nix
./discord
./firefox
./foot.nix
./obsidian.nix
./spotify.nix
./zathura.nix
./inlyne.nix
]; ];
# Notifies on low battery percentages # Notifies on low battery percentages
@ -18,4 +26,19 @@
# Bigger text in qt apps # Bigger text in qt apps
home.sessionVariables.QT_SCREEN_SCALE_FACTORS = 1.4; home.sessionVariables.QT_SCREEN_SCALE_FACTORS = 1.4;
# Base packages
home.packages = with pkgs; [
gimp # Image editing
krita # drawing
libreoffice # document editing
bitwarden # Password-manager
qbittorrent # Torrent client
overskride # Bluetooth client
mpv # Video player
imv # Image viewer
obs-studio # video recorder
];
} }

View file

@ -2,6 +2,7 @@
{ {
home.packages = [ home.packages = [
pkgs.vvvvvv pkgs.vvvvvv
pkgs.lutris
]; ];
# {{{ Persistence # {{{ Persistence

View file

@ -0,0 +1,19 @@
# 'inlyne' is a markdown reader
{ pkgs, lib, ... }:
{
home.packages = [ pkgs.inlyne ];
# Create a hidden desktop entry in order for this to become the default way
# to open markdown files.
#
# See https://specifications.freedesktop.org/desktop-entry-spec/latest/recognized-keys.html
xdg.desktopEntries.inlyne = {
noDisplay = true;
name = "Inlyne";
type = "Application";
exec = "${lib.getExe pkgs.inlyne} %U";
mimeType = [ "text/markdown" ];
};
}

View file

@ -8,7 +8,7 @@ function M.setup()
require("lazy").setup({ require("lazy").setup({
require("my.themes"), require("my.themes"),
{ {
dir = "/home/moon/projects/sibilantmoon/vim", dir = "/home/moon/projects/personal/sibilantmoon/vim",
ft = "sibilantmoon", ft = "sibilantmoon",
name = "sibilantmoon", name = "sibilantmoon",
}, },

View file

@ -2,3 +2,8 @@ Yu-Gi-Oh!
sudo sudo
nixos nixos
neovim neovim
bandwhich
JSON
LLM
Ultrakill
Horia

View file

@ -2,11 +2,11 @@
{ lib, pkgs, ... }: { lib, pkgs, ... }:
{ {
imports = [ imports = [
../desktop
./wlsunset.nix ./wlsunset.nix
./wlogout.nix ./wlogout.nix
./anyrun.nix ./anyrun.nix
../desktop
]; ];
home.sessionVariables.NIXOS_OZONES_WL = "1"; home.sessionVariables.NIXOS_OZONES_WL = "1";
@ -40,10 +40,11 @@
with pkgs; with pkgs;
[ [
libnotify # Send notifications libnotify # Send notifications
wl-ocr # Custom ocr script wl-ocr # Custom OCR script
wl-qr # Custom qr scanner script wl-qr # Custom qr scanner script
wl-clipboard # Clipboard manager wl-clipboard # Clipboard manager
hyprpicker # Color picker hyprpicker # Color picker
grimblast # Screenshot tool grimblast # Screenshot tool
wl-screenrec # video recorder (with daemon support!)
]; ];
} }

View file

@ -1,7 +1,7 @@
{ {
config,
pkgs, pkgs,
lib, lib,
config,
... ...
}: }:
{ {
@ -11,17 +11,22 @@
]; ];
home.packages = [ home.packages = [
pkgs.gtk3 # Contains gtk-launch # Contains gtk-launch, which I use for launching 'obsidiantui'
pkgs.gtk3
]; ];
# TODO: systemd-xdg-autostart-generator?
stylix.targets.hyprland.enable = true; stylix.targets.hyprland.enable = true;
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
enable = true; enable = true;
package = pkgs.hyprland;
extraConfig = builtins.readFile ./hyprland.conf; # set the Hyprland and XDPH packages to null to use the ones from the NixOS module
package = null;
portalPackage = null;
# TODO: systemd-xdg-autostart-generator?
# systemd.enable = false; # Handled by uwsm # systemd.enable = false; # Handled by uwsm
extraConfig = builtins.readFile ./hyprland.conf;
settings = { settings = {
# {{{ Decoration # {{{ Decoration
decoration = { decoration = {
@ -58,6 +63,11 @@
m: lib.lists.optional (m.workspace != null) "${m.name},${m.workspace}" m: lib.lists.optional (m.workspace != null) "${m.name},${m.workspace}"
) config.satellite.monitors; ) config.satellite.monitors;
# }}} # }}}
env = [
"HYPRCURSOR_THEME,rose-pine-hyprcursor"
"HYPRCURSOR_SIZE,36"
];
}; };
plugins = [ pkgs.hyprlandPlugins.hyprexpo ]; plugins = [ pkgs.hyprlandPlugins.hyprexpo ];

View file

@ -120,10 +120,7 @@ bindm = $mod, mouse:272, movewindow
bindm = $mod, mouse:273, resizewindow bindm = $mod, mouse:273, resizewindow
# }}} # }}}
# {{{ Move focus # {{{ Move focus
bind = $mod, h, movefocus, l bind = $mod, k, cyclenext,
bind = $mod, l, movefocus, r
bind = $mod, k, movefocus, u
bind = $mod, j, movefocus, d
# }}} # }}}
# {{{ Switch to workspace # {{{ Switch to workspace
bind = $mod, 1, workspace, 1 bind = $mod, 1, workspace, 1

View file

@ -3,67 +3,18 @@
imports = [ imports = [
./global.nix ./global.nix
./features/cli/catgirl.nix
./features/cli/lazygit.nix
./features/cli/nix-index.nix
./features/cli/productivity ./features/cli/productivity
./features/cli/zellij.nix ./features/desktop/gaming
./features/desktop/discord
./features/desktop/firefox
./features/desktop/gaming/edopro.nix ./features/desktop/gaming/edopro.nix
./features/desktop/foot.nix
./features/desktop/obsidian.nix
./features/desktop/spotify.nix
./features/desktop/zathura.nix
./features/wayland/hyprland ./features/wayland/hyprland
./features/neovim ./features/neovim
]; ];
# Arbitrary extra packages
home.packages = with pkgs; [
# {{{ Communication
# signal-desktop # Signal client
element-desktop # Matrix client
# zoom-us # Zoom client 🤮
# }}}
# {{{ Editors for different formats
gimp # Image editing
krita # drawing
# lmms # Music software
# kicad # PCB editing
# libreoffice # Free office suite
# }}}
# {{{ Gaming
# wine # Windows compat layer or whatever
# lutris # Game launcher
# }}}
# {{{ Clis
sops # Secret editing
# sherlock # Search for usernames across different websites
# }}}
# {{{ Misc
bitwarden # Password-manager
qbittorrent # Torrent client
# google-chrome # Not my primary browser, but sometimes needed in webdev
# plover.dev # steno engine
overskride # Bluetooth client
freetube # youtube client
# }}}
# {{{ Media playing/recording
mpv # Video player
imv # Image viewer
# peek # GIF recorder
# obs-studio # video recorder
wl-screenrec
# }}}
];
home.sessionVariables.QT_SCREEN_SCALE_FACTORS = 1.4; # Bigger text in qt apps
home.stateVersion = "23.05"; home.stateVersion = "23.05";
satellite = { satellite = {
# Symlink some commonly modified dotfiles outside the nix store dev.enable = true; # Enable symlinks outside the nix store
dev.enable = true;
monitors = [ monitors = [
{ {

View file

@ -6,6 +6,7 @@
}: }:
{ {
services.dbus.enable = true; services.dbus.enable = true;
programs.dconf.enable = true;
environment.systemPackages = [ pkgs.xdg-utils ]; environment.systemPackages = [ pkgs.xdg-utils ];
xdg.portal = { xdg.portal = {
enable = true; enable = true;
@ -15,9 +16,16 @@
pkgs.xdg-desktop-portal-termfilechooser pkgs.xdg-desktop-portal-termfilechooser
]; ];
config.hyprland.default = "hyprland"; config.hyprland.default = [
"hyprland"
"gtk"
];
config.hyprland."org.freedesktop.impl.portal.FileChooser" = "termfilechooser"; config.hyprland."org.freedesktop.impl.portal.FileChooser" = "termfilechooser";
config.common.default = "hyprland";
config.common.default = [
"hyprland"
"gtk"
];
config.common."org.freedesktop.impl.portal.FileChooser" = "termfilechooser"; config.common."org.freedesktop.impl.portal.FileChooser" = "termfilechooser";
}; };

View file

@ -30,11 +30,13 @@
}; };
# }}} # }}}
# {{{ Storage # {{{ Storage
environment.persistence."/persist/state".directories = [{ environment.persistence."/persist/state".directories = [
directory = "/var/lib/bitwarden_rs"; {
mode = "u=rwx,g=,o="; directory = "/var/lib/bitwarden_rs";
user = config.users.users.vaultwarden.name; mode = "u=rwx,g=,o=";
group = config.users.users.vaultwarden.group; user = config.users.users.vaultwarden.name;
}]; group = config.users.users.vaultwarden.group;
}
];
# }}} # }}}
} }

View file

@ -7,7 +7,7 @@ hostname := `hostname`
# {{{ Nixos rebuilds # {{{ Nixos rebuilds
[doc("Wrapper around `nixos-rebuild`, taking care of the generic arguments")] [doc("Wrapper around `nixos-rebuild`, taking care of the generic arguments")]
[group("nix")] [group("nix")]
nixos-rebuild action="rebuild" host=hostname: nixos-rebuild action="switch" host=hostname:
#!/usr/bin/env python3 #!/usr/bin/env python3
import subprocess import subprocess
@ -30,7 +30,7 @@ nixos-rebuild action="rebuild" host=hostname:
if "{{host}}" == "{{hostname}}": if "{{host}}" == "{{hostname}}":
print("🧬 Switching nixos configuration (locally) for '{{BLUE + host + NORMAL}}'") print("🧬 Switching nixos configuration (locally) for '{{BLUE + host + NORMAL}}'")
args.prepend("sudo") args = ["sudo", *args]
else: else:
print("🧬 Switching nixos configuration (remotely) for '{{BLUE + host + NORMAL}}'") print("🧬 Switching nixos configuration (remotely) for '{{BLUE + host + NORMAL}}'")
args.append("--use-remote-sudo") args.append("--use-remote-sudo")