diff --git a/flake.lock b/flake.lock index 0b0a321..d935c86 100644 --- a/flake.lock +++ b/flake.lock @@ -20,41 +20,7 @@ "type": "github" } }, - "kutu": { - "inputs": { - "nixpkgs": "nixpkgs" - }, - "locked": { - "lastModified": 1783461814, - "narHash": "sha256-ycpzjXjMey4PlAFYeprz2nHI2azxkvEn3wNvHee+Yh0=", - "ref": "refs/heads/main", - "rev": "4b8599132f26d75bddfe613bcf9697ce0f91d212", - "revCount": 40, - "type": "git", - "url": "https://git.syedm.dev/syedm/kutu.rb.git" - }, - "original": { - "type": "git", - "url": "https://git.syedm.dev/syedm/kutu.rb.git" - } - }, "nixpkgs": { - "locked": { - "lastModified": 1783148766, - "narHash": "sha256-uslt2pqShTIXDdAHRHv2QkYLsVdY8Oqwz0EA48/RSM8=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "a50de1b7d8a586adc18d2395c19de7d6058e6030", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-26.05", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { "locked": { "lastModified": 1788179007, "narHash": "sha256-hn1oU2rue2SYK8dAr8+WNZWtbsz1S2W5mnHlSEuh3bo=", @@ -73,8 +39,7 @@ "root": { "inputs": { "home-manager": "home-manager", - "kutu": "kutu", - "nixpkgs": "nixpkgs_2" + "nixpkgs": "nixpkgs" } } }, diff --git a/flake.nix b/flake.nix index b738862..f434c8f 100644 --- a/flake.nix +++ b/flake.nix @@ -2,8 +2,6 @@ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; - kutu.url = "git+https://git.syedm.dev/syedm/kutu.rb.git"; - home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; @@ -12,7 +10,6 @@ outputs = { - kutu, nixpkgs, home-manager, ... @@ -42,7 +39,6 @@ tardis = nixpkgs.lib.nixosSystem { inherit system; - specialArgs = { inherit kutu; }; modules = commonModules ++ [ ./hosts/tardis { home-manager.users.me = import ./home/tardis.nix; } diff --git a/home/kutu/config.rb b/home/kutu/config.rb index a095c1c..1ce0bda 100644 --- a/home/kutu/config.rb +++ b/home/kutu/config.rb @@ -1,3 +1,135 @@ +# ==== State ==== + +MAX_PROJECTS = 9 +SUBS = 2 # workspaces per project + +$current_project = 1 # 1..MAX_PROJECTS +$current_sub = 0 # 0..SUBS-1 + +# For each special workspace, remembers which workspace you were on +# before you jumped into it -- so hitting the mode key again toggles back. +$special_origin = {} + +SPECIAL = { + terminal: { cmd: "kitty" }, + browser: { cmd: "firefox" }, + music: { cmd: "spotify" }, + misc: { cmd: nil }, # doesn't start anything + todo: { cmd: nil }, # doesn't start anything +} + +# ==== Helpers ==== + +def project_ws(n, sub) + :"p#{n}_#{sub}" +end + +def running?(process) + system("pgrep #{process} > /dev/null 2>&1") +end + +def go_project(n, sub) + $current_project = n + $current_sub = sub + jump_ws project_ws(n, sub) +end + +def in_project?(ws) + !SPECIAL.key?(ws) +end + +# Toggle between a special-mode workspace (terminal/browser/music/misc/todo) +# and whatever workspace you were last on. Starts the associated app if +# it isn't already running. `ws` is the current workspace, passed in by +# the bind block (bind gives us (window, current_ws)). +def go_special(name, ws) + cfg = SPECIAL.fetch(name) + + if ws == name + target = $special_origin[name] || project_ws($current_project, $current_sub) + jump_ws target + else + $special_origin[name] = ws + jump_ws name + system("#{cfg[:cmd]} >/dev/null 2>&1 &") if cfg[:cmd] && !running?(cfg[:cmd]) + end +end + +# ==== Untouched bindings ==== + +bind ?q do |x| + kill x +end + +bind ?w do + system "kitty >/dev/null 2>&1 &" +end + +bind ?e do + exit +end + +bind ?f do |x| + toggle_float x +end + +# ==== Mode switches ==== + +bind ?[ do |_, ws| + go_special :terminal, ws +end + +bind ?] do |_, ws| + go_special :misc, ws +end + +bind "tab" do |_, ws| + go_special :browser, ws +end + +bind 89 do |_, ws| + go_special :music, ws +end + +bind 81 do |_, ws| + go_special :todo, ws +end + +# ==== Project navigation ==== + +(1..MAX_PROJECTS).each do |n| + bind n.to_s do + go_project(n, $current_sub) + end +end + +bind 86, :none do |_, ws| + next unless in_project?(ws) + n = (($current_project - 2) % MAX_PROJECTS) + 1 + go_project(n, $current_sub) +end + +bind 82, :none do |_, ws| + next unless in_project?(ws) + n = ($current_project % MAX_PROJECTS) + 1 + go_project(n, $current_sub) +end + +bind 79, :none do |_, ws| + next unless in_project?(ws) + go_project($current_project, ($current_sub + 1) % SUBS) +end + +bind 80, :none do |_, ws| + next unless in_project?(ws) + go_project($current_project, ($current_sub - 1 + SUBS) % SUBS) +end + +# ==== Startup ==== + +go_project(1, 0) + +=begin run "bash @src@/startup.sh" bind_key 23, true, "firefox" @@ -89,3 +221,4 @@ bind_mouse 8, true, :move_window_next_workspace bind_mouse 9, false, :workspace_previous bind_mouse 9, true, :move_window_previous_workspace +=end diff --git a/home/tardis.nix b/home/tardis.nix index 1b0170b..4698f62 100644 --- a/home/tardis.nix +++ b/home/tardis.nix @@ -12,7 +12,7 @@ xsession = { enable = true; - windowManager.command = "kutu.rb"; + windowManager.command = "kutu ~/main/ocaml/epq/config.rb"; }; home.file.".xinitrc".text = '' diff --git a/hosts/tardis/default.nix b/hosts/tardis/default.nix index 6ed4a1d..af2fa85 100644 --- a/hosts/tardis/default.nix +++ b/hosts/tardis/default.nix @@ -1,5 +1,4 @@ { - kutu, lib, pkgs, ... @@ -31,8 +30,6 @@ lunar-client jdk21 spotify - - kutu.packages.${stdenv.hostPlatform.system}.default ] ); diff --git a/modules/ollama/default.nix b/modules/ollama/default.nix index 8f57d1e..79ad5b3 100644 --- a/modules/ollama/default.nix +++ b/modules/ollama/default.nix @@ -4,7 +4,10 @@ services.ollama = { enable = true; package = pkgs.ollama-cuda; - loadModels = [ "deepseek-coder-v2:16b" "qwen3.5:9b" ]; + loadModels = [ + "deepseek-coder-v2:16b" + "qwen3.5:9b" + ]; environmentVariables = { OLLAMA_KEEP_ALIVE = "20m"; };